<?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=Justarandomgeek</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=Justarandomgeek"/>
	<link rel="alternate" type="text/html" href="https://wiki.factorio.com/Special:Contributions/Justarandomgeek"/>
	<updated>2026-04-22T03:13:57Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Tutorial:Modding_tutorial/Gangsir&amp;diff=193523</id>
		<title>Tutorial:Modding tutorial/Gangsir</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Tutorial:Modding_tutorial/Gangsir&amp;diff=193523"/>
		<updated>2023-09-20T14:10:36Z</updated>

		<summary type="html">&lt;p&gt;Justarandomgeek: /* Creation of the directory structure */ Stronger hint not to use zips while working&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
This is a modding tutorial for Factorio version 1.1. In this tutorial, the author will explain how Factorio works behind the scenes, how to modify Factorio, where to find documentation, and explain concepts.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
Before we start the tutorial, a few things to note:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background-color:#AAFFAA!important; color:black&amp;quot;&amp;gt;&lt;br /&gt;
Code tinted green like this should be included into the mod this tutorial is going to create; If the reader follows along with it. The best way to do this is to copy and paste, to ensure faithful reproduction.&lt;br /&gt;
Whenever code is added to the mod, a Lua comment with the file name will be at the beginning of the green box. Place the code in the box into that file. Eg:&lt;br /&gt;
--control.lua&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background-color:#DDA0DD!important; color:black&amp;quot;&amp;gt;&lt;br /&gt;
Code tinted purple like this should not be included into the mod, it&#039;s just for educational/example purposes, and to boost understanding.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This tutorial was updated to version 1.1, so any &#039;&#039;viewers in the future should take note that some minor changes may have been made&#039;&#039;, and should look at the changelogs up to the current version.&lt;br /&gt;
&lt;br /&gt;
== Terminology used in modding ==&lt;br /&gt;
&lt;br /&gt;
Before we start the tutorial, a few terms and definitions should be laid out, to ensure the reader understands.&lt;br /&gt;
&lt;br /&gt;
; Mod : A script or series of scripts that allow modifications to the game through the API.&lt;br /&gt;
; Entity : An entity in Factorio is anything in the game that is not a concept, event, or tile. Examples of entities include the character, an assembling machine, a biter, etc. This can be &#039;machines&#039; or free-moving objects like the character.&lt;br /&gt;
; Character : The actual entity that the player manipulates the world through.&lt;br /&gt;
; Player : All the data that defines a player, such as username, online time or the current zoom level.&lt;br /&gt;
; Prototype : A prototype describes an instance of an entity, item or recipe etc, a bit like a template. It defines stats, like what an entity actually is, an item&#039;s stack size, a recipe&#039;s ingredients etc. A prototype is used to create an instance of an entity/item/etc, and many functionally identical entities/items/etc will use the same prototype.&lt;br /&gt;
; Surface : A surface is a bit like a dimension. It is composed of terrain, such as grass, sand, and water, and all the entities on the surface. By default, there is only one surface in Factorio, referred to internally as &amp;quot;nauvis&amp;quot;, or &amp;lt;code style=&amp;quot;background-color:#DDA0DD; color:black&amp;quot;&amp;gt;game.surfaces[1]&amp;lt;/code&amp;gt;, but mods may create additional surfaces through the API.&lt;br /&gt;
; Event : An event is a recurring...event, that is triggered internally by the game. There are several events that mods may connect functions to, such as &amp;lt;code style=&amp;quot;background-color:#DDA0DD; color:black&amp;quot;&amp;gt;on_entity_died&amp;lt;/code&amp;gt;, etc. More on this in the control scripting section.&lt;br /&gt;
; Item : Items are what is moved around in inventories, by inserters and on belts, etc. Each item in-game is an instance of the respective item prototype.&lt;br /&gt;
&lt;br /&gt;
More terminology may be declared and defined later in this tutorial.&lt;br /&gt;
&lt;br /&gt;
== Before beginning to mod ==&lt;br /&gt;
&lt;br /&gt;
Before we can start modding Factorio, we must understand what Factorio is. You may be tempted to answer in lieu of the [[Factorio:About|about page]], but that is what a player would say. Since we are trying to become a modder, we need a more detailed explanation. Factorio is a game that is coded in the language C++, with an API provided by Wube (the developers of Factorio) to mod Factorio in the programming language Lua (version 5.2.1). This API allows adding scripts to the Factorio init process, to modify it without the source code of the base game being exposed, or modifying memory. This may be different than other games that offer modding, but this is a more professional and proper way of supporting modding.&lt;br /&gt;
&lt;br /&gt;
To aid in the use of this API, the devs have kindly provided fairly comprehensive documentation of scripting at their [https://lua-api.factorio.com/latest/ API site] and documentation all around prototypes on [[Prototype definitions|this wiki]]. Get used to using these sites, as they will become frequent visits you will make while you develop mods. The scripting API site contains information on [https://lua-api.factorio.com/latest/Classes.html Factorio&#039;s classes] and information on [https://lua-api.factorio.com/latest/events.html events] that you can hook into. [[Prototype definitions]] contains and links to information all around prototypes, listing their inheritance structure and their properties. You will need to check these sites often, so the author recommends bookmarking them. In addition to these sites, there is also many resources to be found created by the community, such as this tutorial.&lt;br /&gt;
&lt;br /&gt;
=== Setup ===&lt;br /&gt;
&lt;br /&gt;
The best way to develop a mod is to develop it in a place where it can be easily tested. When the tutorial gets to making the mod, this will be explained further. Additionally, using an editor that allows ease of typing and Lua language support is recommended. Emacs, Vim, Sublime Text, VSCode, and Notepad++ are all viable candidates.&lt;br /&gt;
&lt;br /&gt;
== How Factorio loads mods ==&lt;br /&gt;
&lt;br /&gt;
=== Load order ===&lt;br /&gt;
Within stages, mods are loaded by dependency, then by alphabetical order. This is &#039;&#039;very important&#039;&#039; to understand, as it can cause you problems if you neglect it and try to add inter-mod support to your mod.&lt;br /&gt;
&lt;br /&gt;
Factorio has three kinds of dependencies. There are required dependencies, and optional dependencies. The third kind, restrictive dependencies, does not affect mod order and instead prevents the game from loading if the other mod is found. Required dependencies are loaded first, always. The game will fail to initialize if one of these is not present. Optional dependencies are loaded first if present, but do not have to be present. This is useful for enabling bonus features if mods are used together. Required dependencies should be used for mod libraries, and similar infrastructure.&lt;br /&gt;
&lt;br /&gt;
=== The settings stage ===&lt;br /&gt;
The very first mod stage that is loaded when Factorio initializes is the settings stage. This stage is used to define all mod settings that are later shown in the in-game mod settings GUI, and has no other functions or possibilities. When running through this stage, the game looks through all mods for a file called &amp;lt;code&amp;gt;settings.lua&amp;lt;/code&amp;gt;. After settings.lua has been executed for all mods, each mod&#039;s &amp;lt;code&amp;gt;settings-updates.lua&amp;lt;/code&amp;gt; is executed, and finally each mod&#039;s &amp;lt;code&amp;gt;settings-final-fixes.lua&amp;lt;/code&amp;gt; is called. These 3 different phases of the settings stage allow to change settings of other mods without needing to rely on dependencies to load last. All other files to be loaded will need to be required. All the files run here should contain nothing but setting definitions and code to produce setting definitions.&lt;br /&gt;
&lt;br /&gt;
The settings stage does not have access to prototype or runtime data because it is loaded before those stages. The settings are expected to have a certain format, and all additional code will be discarded once the stage is over.&lt;br /&gt;
&lt;br /&gt;
Mod settings are not covered in this tutorial, see [[Tutorial:Mod settings]] for further info on them.&lt;br /&gt;
&lt;br /&gt;
=== The data stage ===&lt;br /&gt;
&lt;br /&gt;
This is the most restricted part of the Factorio init, there&#039;s not much you can do here other than declare prototypes for technologies, entities, items and more. Things like manipulating files, affecting the world, etc, are blocked/unavailable. In fact, any functions or changes made will be discarded, as the lua session is terminated. You also cannot mess with the data table, it will error or be ignored. When using &amp;lt;code&amp;gt;data:extend({})&amp;lt;/code&amp;gt;, it expects a specific format, more on this later.&lt;br /&gt;
&lt;br /&gt;
When running through this stage, the game looks through all mods for a file called &amp;lt;code&amp;gt;data.lua&amp;lt;/code&amp;gt;. After data.lua has been executed for all mods, each mod&#039;s &amp;lt;code&amp;gt;data-updates.lua&amp;lt;/code&amp;gt; is executed, and finally each mod&#039;s &amp;lt;code&amp;gt;data-final-fixes.lua&amp;lt;/code&amp;gt; is called. These 3 different phases of the data stage allow to change data of other mods without needing to rely on dependencies to load last. For example, the base mod creates barrelling recipes for all (then present) fluids in data-updates.lua. This means that if you add a fluid in data.lua, the base mod&#039;s data-updates.lua will add barreling recipes for it, regardless of whether your mod depends on base. Of course this also means that if you add a fluid in data-final-fixes.lua, it is created after the barrelling code runs in data-updates.lua, so no barrelling recipe gets created, even when desired. Because of this and similar mod interactions, it is recommended to create prototypes as early as possible. So, don&#039;t use data-final-fixes.lua to exclude a fluid from barreling, instead create it in data.lua and utilize &amp;quot;auto_barrel = false&amp;quot; on the fluid.&lt;br /&gt;
&lt;br /&gt;
All other files to be loaded will need to be required. All the files run here should contain nothing but prototype definitions and code to produce prototype definitions. More on requiring files later.&lt;br /&gt;
&lt;br /&gt;
All prototypes are documented here on the wiki: [[Prototype definitions]].&lt;br /&gt;
&lt;br /&gt;
=== Migrations ===&lt;br /&gt;
&lt;br /&gt;
[https://lua-api.factorio.com/latest/Migrations.html Migrations] are scripts that are used to &amp;quot;fix&amp;quot; a save after a mod updates. Whenever prototype names change within a mod, migrations must be setup to replace all the old instances of the prototyped entity in the world. This must be done for all updated entities, or the old entities will be removed from the world, which is an unprofessional fallback that makes users dislike you. While this tutorial will not discuss migrations, there are many resources on migrations to be found around the community, and the API site.&lt;br /&gt;
&lt;br /&gt;
To avoid having to write migrations, avoid changing prototype names and technology unlocks. Prototypes names cannot be dynamically changed and technology unlocks of already researched technologies do not apply automatically, making migrations necessary. Try to avoid these changes after shipping the mod out to the public. Try to come up with a finalized version of prototype names that you can base the mod around. Of course, migrations are unnecessary if the user simply starts a new world with each mod update, but do not expect the community to do this.&lt;br /&gt;
&lt;br /&gt;
=== Runtime stage ===&lt;br /&gt;
&lt;br /&gt;
Within most mods is a file called &amp;lt;code&amp;gt;control.lua&amp;lt;/code&amp;gt;. This file contains scripting that makes the mod do things during the game, rather than just adding entities to the game. During this stage, each mod&#039;s control.lua is run, in it&#039;s own lua instance (this means no inter-communication without special setup) which it will own for the rest of the play session. During the play session, access to all tables provided by the game can be done inside of event handlers. (More on those below.) Because the control.lua is run every time a save file is created or loaded you don&#039;t need to restart the game to see changes made to the control.lua file. Simply restarting or reloading a save will re-run this stage. &#039;&#039;&#039;There are a few other caveats to this stage, reading the [https://lua-api.factorio.com/latest/Data-Lifecycle.html data life cycle] page on the API site provides the best overview.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The control stage documented is documented on [https://lua-api.factorio.com/latest lua-api.factorio.com].&lt;br /&gt;
&lt;br /&gt;
== The major components to any Factorio mod ==&lt;br /&gt;
&lt;br /&gt;
Within the average mod, there are several components that make the mod function.&lt;br /&gt;
&lt;br /&gt;
Mods that define new entities will need to declare these entities in &amp;lt;code&amp;gt;data.lua&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;data-updates.lua&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;data-final-fixes.lua&amp;lt;/code&amp;gt;, or another file &amp;lt;code&amp;gt;require&amp;lt;/code&amp;gt;d by one of these three.&lt;br /&gt;
&lt;br /&gt;
Mods with in-game effects will also need a &amp;lt;code&amp;gt;control.lua&amp;lt;/code&amp;gt; file, to add scripting.&lt;br /&gt;
&lt;br /&gt;
Mods with configurable user settings will use &amp;lt;code&amp;gt;settings.lua&amp;lt;/code&amp;gt; to describe those settings.&lt;br /&gt;
&lt;br /&gt;
Mods that define any game element with a readable name may also provide a &amp;lt;code&amp;gt;locale&amp;lt;/code&amp;gt; directory and subdirectories with names/descriptions in one or more languages.&lt;br /&gt;
&lt;br /&gt;
The mod that we&#039;ll make in this tutorial will include both data.lua prototypes and control.lua scripting, to give you a feel for both.&lt;br /&gt;
&lt;br /&gt;
== The tutorial mod ==&lt;br /&gt;
&lt;br /&gt;
And now for the moment you&#039;ve been waiting for. Let&#039;s start making your first mod. You&#039;ll need:&lt;br /&gt;
&lt;br /&gt;
* A recent install of Factorio&lt;br /&gt;
* A text editor, such as Emacs, Vim, Sublime text, etc&lt;br /&gt;
* An understanding of the tutorial above&lt;br /&gt;
* An understanding of Lua as a programming language. Enough to know the syntax and how it works. If you have prior programming experience, it should not be difficult to pick up.&lt;br /&gt;
&lt;br /&gt;
Once you have all of these things, we can begin.&lt;br /&gt;
&lt;br /&gt;
For this mod, we&#039;re going to make a set of armor that leaves behind damaging fire behind you as you walk. It will be fully resistant to fire, but weaker towards physical damage than heavy armor, making it an armor for hit and run attacks.&lt;br /&gt;
&lt;br /&gt;
=== Creation of the directory structure ===&lt;br /&gt;
&lt;br /&gt;
The game expects mod to be laid out [[Tutorial:Mod structure|in a certain way]]. To start out, create a folder in your [[Application directory|user data directory]]/mods folder. This folder must have a specific name, &amp;lt;code&amp;gt;fire-armor&amp;lt;/code&amp;gt;. You don&#039;t need to zip anything for now, that will come later when you&#039;re done working on the mod. When you&#039;re finished, the mod directory should look like this:&lt;br /&gt;
&lt;br /&gt;
* (user data directory, sometimes called .factorio)&lt;br /&gt;
** mods&lt;br /&gt;
*** fire-armor&lt;br /&gt;
&lt;br /&gt;
Then, inside fire-armor, create two files, &amp;lt;code&amp;gt;info.json&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;data.lua&amp;lt;/code&amp;gt;. The directory should now look like:&lt;br /&gt;
&lt;br /&gt;
* (user data directory, sometimes called .factorio)&lt;br /&gt;
** mods&lt;br /&gt;
*** fire-armor&lt;br /&gt;
**** data.lua&lt;br /&gt;
**** info.json&lt;br /&gt;
&lt;br /&gt;
=== The info.json file ===&lt;br /&gt;
&lt;br /&gt;
Then, inside [[Tutorial:Mod_structure#info.json|info.json]], copy and paste the following into it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background-color:#AAFFAA!important; color:black&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;fire-armor&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.1.0&amp;quot;,&lt;br /&gt;
  &amp;quot;title&amp;quot;: &amp;quot;Fire Armor&amp;quot;,&lt;br /&gt;
  &amp;quot;author&amp;quot;: &amp;quot;You&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;base &amp;gt;= 1.1&amp;quot;],&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;This mod adds in fire armor that leaves behind damaging fire as you walk around.&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To explain each field:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Item&lt;br /&gt;
! Explanation&lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| This is the internal name of your mod, it is used to identify your mod in code.&lt;br /&gt;
|-&lt;br /&gt;
| version&lt;br /&gt;
| This is the version of your mod. This can be anything you want, provided it&#039;s a of the format &amp;quot;number.number.number&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| title&lt;br /&gt;
| The pretty title of your mod, this will be displayed on the mods screen and when you submit it to the mod portal.&lt;br /&gt;
|-&lt;br /&gt;
| author&lt;br /&gt;
| Your name! You can change this in the example above.&lt;br /&gt;
|-&lt;br /&gt;
| factorio_version&lt;br /&gt;
| This tells the game what version the mod is for, this must match the version you&#039;re developing the mod for, 1.1 in this case.&lt;br /&gt;
|-&lt;br /&gt;
| dependencies&lt;br /&gt;
| Any dependencies of your mod.&lt;br /&gt;
|-&lt;br /&gt;
| description&lt;br /&gt;
| A short description of your mod, which appears in game. The mod portal is better for a long description.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
And that&#039;s all for info.json! Next, in the data.lua file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background-color:#AAFFAA!important; color:black&amp;quot;&amp;gt;&lt;br /&gt;
--data.lua&lt;br /&gt;
&lt;br /&gt;
require(&amp;quot;item&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It&#039;s a pretty simple file, all we&#039;re doing here is just telling the game to execute the file called item.lua, which we&#039;re about to create. Create a file in fire-armor called &amp;lt;code&amp;gt;item.lua&amp;lt;/code&amp;gt;. Notice how our earlier require used the file name in it?&lt;br /&gt;
&lt;br /&gt;
We are creating this file just for our own organisation inside the mod, so there are no naming or other requirements from the game&#039;s side. As long as we tell the game to load the file with &amp;quot;require&amp;quot;, the file name or its exact location inside the mod does not matter.&lt;br /&gt;
&lt;br /&gt;
=== Prototype creation ===&lt;br /&gt;
&lt;br /&gt;
Now, there are two ways to create prototypes in Factorio. There&#039;s the short way, and the long way. The long way requires to create a complete prototype definition based on [[prototype definitions|the documentation]], and the short way just uses a lua function to copy and modify an already existing definition. For the sake of this tutorial, we&#039;ll do it the short way.&lt;br /&gt;
&lt;br /&gt;
In item.lua, copy and paste the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background-color:#AAFFAA!important; color:black&amp;quot;&amp;gt;&lt;br /&gt;
--item.lua&lt;br /&gt;
&lt;br /&gt;
local fireArmor = table.deepcopy(data.raw[&amp;quot;armor&amp;quot;][&amp;quot;heavy-armor&amp;quot;]) -- copy the table that defines the heavy armor item into the fireArmor variable&lt;br /&gt;
&lt;br /&gt;
fireArmor.name = &amp;quot;fire-armor&amp;quot;&lt;br /&gt;
fireArmor.icons = {&lt;br /&gt;
  {&lt;br /&gt;
    icon = fireArmor.icon,&lt;br /&gt;
    tint = {r=1,g=0,b=0,a=0.3}&lt;br /&gt;
  },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
fireArmor.resistances = {&lt;br /&gt;
  {&lt;br /&gt;
    type = &amp;quot;physical&amp;quot;,&lt;br /&gt;
    decrease = 6,&lt;br /&gt;
    percent = 10&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    type = &amp;quot;explosion&amp;quot;,&lt;br /&gt;
    decrease = 10,&lt;br /&gt;
    percent = 30&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    type = &amp;quot;acid&amp;quot;,&lt;br /&gt;
    decrease = 5,&lt;br /&gt;
    percent = 30&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    type = &amp;quot;fire&amp;quot;,&lt;br /&gt;
    decrease = 0,&lt;br /&gt;
    percent = 100&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local recipe = table.deepcopy(data.raw[&amp;quot;recipe&amp;quot;][&amp;quot;heavy-armor&amp;quot;])&lt;br /&gt;
recipe.enabled = true&lt;br /&gt;
recipe.name = &amp;quot;fire-armor&amp;quot;&lt;br /&gt;
recipe.ingredients = {{&amp;quot;copper-plate&amp;quot;,200},{&amp;quot;steel-plate&amp;quot;,50}}&lt;br /&gt;
recipe.result = &amp;quot;fire-armor&amp;quot;&lt;br /&gt;
&lt;br /&gt;
data:extend{fireArmor,recipe}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What we&#039;ve just done here is we&#039;ve copied the definition of heavy armor, then changed it&#039;s properties, and injected it into the Factorio init with data:extend. The first line of code is probably the most interesting. &amp;lt;code&amp;gt;table.deepcopy&amp;lt;/code&amp;gt; copies a table fully into another table. We do this from data.raw. The &amp;lt;code&amp;gt;data&amp;lt;/code&amp;gt; part is a table, which will be used by the game to setup the Factorio universe. In fact, it contains the function &amp;lt;code&amp;gt;extend(self, prototypes)&amp;lt;/code&amp;gt; and a table called &amp;lt;code&amp;gt;raw&amp;lt;/code&amp;gt;. The former is a customary way to add new stuff to the latter. It is actually data.raw that holds the prototypes for the game. (You can view the implementation in the file [https://github.com/wube/factorio-data/blob/master/core/lualib/dataloader.lua /factorio/data/core/lualib/dataloader.lua]). It is important to note that data.raw only exists during the data loading stage of the game. During the control stage, when the game is running and being played, you cannot read this data; instead you read processed values through the API from the various types like LuaEntityPrototype.&lt;br /&gt;
&lt;br /&gt;
In addition to defining the item prototype, we also define a recipe for it. This is necessary if you want to be able to craft the thing. We also set it to enabled so it doesn&#039;t need a technology to unlock.&lt;br /&gt;
&lt;br /&gt;
=== More on data.raw ===&lt;br /&gt;
&lt;br /&gt;
When Factorio initializes, all prototypes are put into a table called data.raw. This table holds all prototype types, and within those types, individual prototypes identified by name: &amp;lt;code&amp;gt;local prototype = data.raw[&amp;quot;prototype-type&amp;quot;][&amp;quot;internal-name&amp;quot;]&amp;lt;/code&amp;gt;. You saw earlier how we deepcopied from the definition of heavy armor, and modified some fields. In fact, let&#039;s go over each part of the deepcopy line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background-color:#DDA0DD!important; color:black&amp;quot;&amp;gt;&lt;br /&gt;
local fireArmor = table.deepcopy(data.raw[&amp;quot;armor&amp;quot;][&amp;quot;heavy-armor&amp;quot;])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We assign a variable called fireArmor that holds our copy of the heavy armor definition. Notice how in data.raw, there is a type table that holds all armors, and the specific armor we&#039;re looking for is called heavy-armor. We can find [[heavy armor]]&#039;s prototype type and internal name in the infobox of its page on this wiki and just copy it from there.&amp;lt;br&amp;gt;&lt;br /&gt;
Alternatively, we can find the items prototype type and internal name by opening the game, inserting the item into our inventory and then pressing {{Keybinding|shift|ctrl|F}} while hovering over the item. This will open the prototype explorer GUI, which has rows showing the name and type of the item.&lt;br /&gt;
&lt;br /&gt;
As another example, the [[player|character]]&#039;s prototype would be, according to the infobox on the page:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background-color:#DDA0DD!important; color:black&amp;quot;&amp;gt;&lt;br /&gt;
data.raw[&amp;quot;character&amp;quot;][&amp;quot;character&amp;quot;]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Because the character is &#039;&#039;the&#039;&#039; character, his type matches his name. You could define a new type of character with a mod. You can see all the available prototype fields of the charater in the documenation: [[Prototype/Character]].&lt;br /&gt;
&lt;br /&gt;
You may be thinking at this point, &amp;quot;Can I modify Factorio&#039;s existing prototypes without making new ones?&amp;quot; Well, the answer is yes! You would simply access the data.raw table during init, in data-final-fixes.lua if you want to run after all other mods, and change a property. For example, make the iron chest instead have 1000 health:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background-color:#DDA0DD!important; color:black&amp;quot;&amp;gt;&lt;br /&gt;
data.raw[&amp;quot;container&amp;quot;][&amp;quot;iron-chest&amp;quot;].max_health = 1000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The reason why this code is in data-final-fixes.lua is because that is the last file run, after all mod files have been run. This prevents (to a degree) your changes from being messed with by other mods. Of course, it is still possible to have incompatibilities. You should note any that you know of in your mod&#039;s description. Again, the [https://lua-api.factorio.com/latest/Data-Lifecycle.html dev&#039;s documentation] on this should be looked at.&lt;br /&gt;
&lt;br /&gt;
This can also be applied to other mods, not just Factorio&#039;s base. You could mod a mod, as long as you add the mod (that you modified with your mod) to your dependencies so it gets loaded first.&lt;br /&gt;
&lt;br /&gt;
=== The control scripting ===&lt;br /&gt;
&lt;br /&gt;
And now, to finalize the mod, we have to make it be more than just simple armor. Let&#039;s think about what we want the armor to do. We want the armor to create fire on the ground as we walk with the armor on. The event we&#039;re going to use is called [https://lua-api.factorio.com/latest/events.html#on_player_changed_position on_player_changed_position], since we want the fire to be created when the player moves.&lt;br /&gt;
&lt;br /&gt;
In our mod folder, create a file called &amp;lt;code&amp;gt;control.lua&amp;lt;/code&amp;gt;. The game will automatically execute this file, so requiring it is not necessary.&lt;br /&gt;
&lt;br /&gt;
Inside control.lua, copy and paste the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background-color:#AAFFAA!important; color:black;&amp;quot;&amp;gt;&lt;br /&gt;
--control.lua&lt;br /&gt;
&lt;br /&gt;
script.on_event(defines.events.on_player_changed_position,&lt;br /&gt;
  function(event)&lt;br /&gt;
    local player = game.get_player(event.player_index) -- get the player that moved            &lt;br /&gt;
    -- if they&#039;re wearing our armor&lt;br /&gt;
    if player.character and player.get_inventory(defines.inventory.character_armor).get_item_count(&amp;quot;fire-armor&amp;quot;) &amp;gt;= 1 then&lt;br /&gt;
       -- create the fire where they&#039;re standing&lt;br /&gt;
       player.surface.create_entity{name=&amp;quot;fire-flame&amp;quot;, position=player.position, force=&amp;quot;neutral&amp;quot;} &lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I&#039;ve used lua comments in the code above to explain each step. It&#039;s fairly easy to understand, and it shows how you would get the current armor that the player character is wearing, with defines.inventory.character_armor, which is an inventory constant. You can read the list of defines [https://lua-api.factorio.com/latest/defines.html#defines.inventory here].&lt;br /&gt;
&lt;br /&gt;
=== Locale ===&lt;br /&gt;
&lt;br /&gt;
If you&#039;ve already tried loading up Factorio and trying the mod so far (which you can at this point without it crashing), you may have noticed that the item name of the armor says &amp;quot;Unknown key&amp;quot;. This means that Factorio has the internal name, but it doesn&#039;t know what it should look like to the user. So, we need to create a locale for our mod.&lt;br /&gt;
&lt;br /&gt;
In the mod folder, create a folder called &amp;lt;code&amp;gt;locale&amp;lt;/code&amp;gt;, then create another folder inside that called &amp;lt;code&amp;gt;en&amp;lt;/code&amp;gt;, then a file called &amp;lt;code&amp;gt;any_name_can_be_here.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If you know another language, you can also translate your mod by making other language code files inside locale, such as de for German.&lt;br /&gt;
&lt;br /&gt;
Inside the .cfg file, paste the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background-color:#AAFFAA!important; color:black&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[item-name]&lt;br /&gt;
fire-armor=Fire armor&lt;br /&gt;
&lt;br /&gt;
[item-description]&lt;br /&gt;
fire-armor=An armor that seems to catch the ground itself on fire when you take a step. It&#039;s warm to the touch.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice how this is not a lua file. Locale is handled with C config files, so the format is different.&lt;br /&gt;
&lt;br /&gt;
== The finished tutorial mod ==&lt;br /&gt;
&lt;br /&gt;
Well, the mod is finished. Since this mod is only a tutorial, there isn&#039;t much balance to it.&lt;br /&gt;
&lt;br /&gt;
If you want to share a mod with other users, it needs to be a zip file. For that, simply zip the &amp;lt;code&amp;gt;fire-armor&amp;lt;/code&amp;gt; folder and then rename the archive to &amp;lt;code&amp;gt;fire-armor_0.1.0&amp;lt;/code&amp;gt; so that it follows the expected mod zip name pattern of &amp;lt;code&amp;gt;mod-name_version&amp;lt;/code&amp;gt;. Keep in mind to not submit this tutorial mod to the mod portal as your own, since it&#039;s from the Wiki.&lt;br /&gt;
&lt;br /&gt;
However, you&#039;re free to take this mod and modify it for your own use, changing recipes, adding technologies, whatever.&lt;br /&gt;
&lt;br /&gt;
== Resolving common errors in modding ==&lt;br /&gt;
&lt;br /&gt;
As you continue to write mods from scratch instead of from a tutorial, you may encounter the infamous error. There are several types of errors that you can encounter in modding Factorio, and knowing how to deal with these errors will allow you to continue working.&lt;br /&gt;
&lt;br /&gt;
=== Syntax errors ===&lt;br /&gt;
&lt;br /&gt;
The lua programming language expects things to be laid out a certain way. If you miss a bracket, = sign, or dot, you will encounter a syntax error. As an example, see the error below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background-color:#DDA0DD!important; color:black&amp;quot;&amp;gt;&lt;br /&gt;
Failed to load mods: __fire-armor__/data.lua:1:__fire-armor__/prototypes/item.lua:36: syntax error near &#039;true&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As of version 0.15, you&#039;ll see an error like the one above whenever you make a syntax error within the prototype definitions. The game will offer to restart, disable the troubling mod, disable all mods, or exit. Let&#039;s dissect the error, shall we?&lt;br /&gt;
&lt;br /&gt;
Right away, we see the reason why Factorio didn&#039;t start normally. &amp;quot;Failed to load mods:&amp;quot;. So, we know that it&#039;s a mod that messed up, and by extension, we know it&#039;s our mod. Whenever the Lua engine of Factorio has a syntax error, it will print a mini stack-trace that follows through all requires, listing the call order. First, we see that the problem was indirectly caused by line 1 of data.lua. There&#039;s no problem there, so it must be the next entry, line 36 of prototypes/item.lua. After stating where it is line-wise, it will attempt to give you an estimate of where in the line the problem is. Don&#039;t trust this estimate, only roughly trust the line number, plus or minus a few lines.&lt;br /&gt;
&lt;br /&gt;
Going to line 36 of item.lua, we find:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background-color:#DDA0DD!important; color:black&amp;quot;&amp;gt;&lt;br /&gt;
recipe.enabled true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hmm, that doesn&#039;t look right. Can you see what&#039;s missing? We left off an = between enabled and true. Thus, syntax error. Fixing these can be difficult for new programmers, who don&#039;t know what to look for.&lt;br /&gt;
&lt;br /&gt;
=== Illogical actions, indexing nil ===&lt;br /&gt;
&lt;br /&gt;
In lua, &amp;quot;nothing&amp;quot; is defined as the keyword nil. This is similar to null in other programming languages. Whenever the programmer tries to access something in a table that is nil, they will get an error like the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background-color:#DDA0DD!important; color:black&amp;quot;&amp;gt;&lt;br /&gt;
Error while running event fire-armor::on_player_changed_position (ID 82)&lt;br /&gt;
__fire-armor__/control.lua:3: attempt to index field &#039;?&#039; (a nil value)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;attempt to index field ...&amp;quot; error is often caused by the modder making an assumption that didn&#039;t work out. These types of errors will always be identifiable by their signature line, &amp;quot;attempt to index field&amp;quot;. If we look at line 3 of control.lua (where the error is), we see:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background-color:#DDA0DD!important; color:black&amp;quot;&amp;gt;&lt;br /&gt;
game.print(game.players[23])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What assumption has the modder made here? Well, there&#039;s actually two problems with this line. The first thing is that the modder has assumed that &amp;lt;code&amp;gt;game.players[23]&amp;lt;/code&amp;gt; is a valid player, which isn&#039;t the case; this is why we get the &amp;quot;index field &#039;?&#039;&amp;quot; bit. The game doesn&#039;t know what the field is that we tried to index, because it hasn&#039;t been created yet. These errors are difficult to debug unless you know the ins and outs of the modding API well.&lt;br /&gt;
&lt;br /&gt;
The second issue is a lot more subtle, and won&#039;t work. The modder is attempting to print a userdata table. [https://lua-api.factorio.com/latest/LuaPlayer.html A player] is a table of several values. Trying to print it simply print &amp;quot;LuaPlayer&amp;quot; instead of providing useful data.&lt;br /&gt;
&lt;br /&gt;
=== Error while running event ===&lt;br /&gt;
&lt;br /&gt;
Another common type of error in Factorio is the &amp;quot;Error while running event&amp;quot; error. This type of error only happens in control.lua scripting, and it happens when something goes wrong in an event function, such as a syntax error. &#039;&#039;&#039;Note that syntax errors in control.lua do not stop the game from starting, but may trigger after a save is loaded&#039;&#039;&#039;. There are a great deal of errors under this broad category, here&#039;s an example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background-color:#DDA0DD!important; color:black&amp;quot;&amp;gt;&lt;br /&gt;
Error while running event fire-armor::on_player_changed_position (ID 82)&lt;br /&gt;
Unknown entity name: fire-flam&lt;br /&gt;
stack traceback:&lt;br /&gt;
__fire-armor__/control.lua:7: in function &amp;lt;__fire-armor__/control.lua:2&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As you saw with the prototypes syntax error, Factorio gives a small traceback and the error name itself. In this case, we&#039;ve attempted to spawn an entity called &amp;quot;fire-flam&amp;quot; on line 7 of control.lua, inside of an on_player_changed_position event hook. Fire-flam isn&#039;t a real entity type, so we crashed.&lt;br /&gt;
&lt;br /&gt;
These types of errors can range from being a simple fix (like the one above, add the missing e), or can be very difficult.&lt;br /&gt;
&lt;br /&gt;
=== Internal errors ===&lt;br /&gt;
&lt;br /&gt;
The most rare form of error and the worst form is the internal error. This is an error with the C++ code of the game, and there&#039;s nothing you can do but report it to the devs. Mods occasionally cause these, and almost all of them are considered bugs, as mods &#039;&#039;should not&#039;&#039; be able to cause these, if that makes sense. They often get thrown into the logs.&lt;br /&gt;
&lt;br /&gt;
An example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background-color:#DDA0DD!important; color:black&amp;quot;&amp;gt;&lt;br /&gt;
696.148 Error FlowStatistics.cpp:236: FlowStatistics attempted to save value larger than uint16 as uint16. Exiting to prevent save corruption.&lt;br /&gt;
Logger::writeStacktrace skipped.&lt;br /&gt;
696.148 Error CrashHandler.cpp:190: Map tick at moment of crash: 432029&lt;br /&gt;
696.148 Error Util.cpp:97: Unexpected error occurred. If you&#039;re running the latest version of the game you can help us solve the problem by posting the contents of the log file on the Factorio forums.&lt;br /&gt;
Please also include the save file(s), any mods you may be using, and any steps you know of to reproduce the crash.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Multiplayer and desyncs ==&lt;br /&gt;
&lt;br /&gt;
The reader may be wondering at this point how Factorio handles multiplayer with mods. It&#039;s fairly simple, but is still worth considering.&lt;br /&gt;
&lt;br /&gt;
Factorio is [https://en.wikipedia.org/wiki/Deterministic_algorithm deterministic], which means that when you provide a constant input, you get a constant output, with no variance. Every client and the server all reach the same points at the same time in simulation, so they all agree on what happened. When this differs, the players experience a &#039;&#039;desync&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
; Desync : Misalignment with server and clients. Client 1 expected A, but got B. All other clients got A. Thus, Client 1 will desync. Desync can also happen when all clients have information (for example a variable) but a client that recently joined the game doesn&#039;t. That client will be desynced.&lt;br /&gt;
: &#039;&#039;See also: [[Desynchronization]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Desyncs happen a lot to new devs of Factorio mods, because they are unaware that a particular piece of code they used causes desyncs. As a general rule, there are a few things that should never be done.&lt;br /&gt;
&lt;br /&gt;
=== Use local variables that are not final outside of event hooks ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background-color:#DDA0DD!important; color:black&amp;quot;&amp;gt;&lt;br /&gt;
local globalLocal = 1&lt;br /&gt;
script.on_event(defines.events.on_player_built_item, function()&lt;br /&gt;
    globalLocal = math.random()&lt;br /&gt;
end)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the modder places a local variable outside of an event hook that gets changed during runtime, desyncs will happen when that variable is utilised to modify the game state (i.e. manipulate an entity, print text to players). If making a &amp;quot;global&amp;quot; variable is necessary, place the variable in the [https://lua-api.factorio.com/latest/Global.html global] table instead. The game syncs this table between all clients, so they can all be aware of and reach the same conclusion as each other.&lt;br /&gt;
&lt;br /&gt;
=== Selective requiring ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background-color:#DDA0DD!important; color:black&amp;quot;&amp;gt;&lt;br /&gt;
if setting1 then&lt;br /&gt;
   require(&amp;quot;settingOne.lua&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Selective requiring, aka requiring different lua files based on settings can cause connection rejections as the checksum of the mods will not match, as they load different data. All clients&#039; mods must require the same series of files.&lt;br /&gt;
&lt;br /&gt;
=== Conditional event subscribing ===&lt;br /&gt;
&lt;br /&gt;
Mods in factorio may subscribe to events in order to be notified when they happen. This allows mods to react to events when they occur. Typically, event subscription is done at the top level of a lua file. &lt;br /&gt;
&lt;br /&gt;
Doing event subscription inside of a conditional, function, or other event is dangerous, as doing it incorrectly will lead to desyncs. Basically, since both the server and client need to reach the same conclusion after running code, conditional subscription can lead to certain clients or the server being subscribed to an event when the others are not, causing desyncs. &lt;br /&gt;
&lt;br /&gt;
=== Improper use of on_load ===&lt;br /&gt;
&lt;br /&gt;
Another way to cause desyncs is to make improper actions inside of an on_load call, which some players new to modding might try to do. According to the [https://lua-api.factorio.com/latest/LuaBootstrap.html#LuaBootstrap.on_load documentation], the on_load functionality is meant for 3 purposes &#039;&#039;&#039;only&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Re-register conditional event handlers&lt;br /&gt;
* Re-setup meta tables&lt;br /&gt;
* Create local references to tables stored in the global table&lt;br /&gt;
&lt;br /&gt;
Doing anything else will cause desyncs. The game will catch most attempts, crashing instead and terminating the mod.&lt;br /&gt;
&lt;br /&gt;
=== Comparison by reference ===&lt;br /&gt;
&lt;br /&gt;
Be cautious of comparing tables by reference. In multiplayer syncing, tables deserialized from the server state will be new objects, not equal by reference to any table initialized by client code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background-color:#DDA0DD!important; color:black&amp;quot;&amp;gt;&lt;br /&gt;
if a == b then&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background-color:#DDA0DD!important; color:black&amp;quot;&amp;gt;&lt;br /&gt;
if a ~= b then&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; are tables in the above conditionals, there will for example be different results between server and client if &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; is created locally and &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; is downloaded from the server.&lt;br /&gt;
&lt;br /&gt;
Note that LuaObjects provided by the game have their equality operator overwritten to prevent this behaviour, so code such as &amp;lt;code&amp;gt;LuaEntityA ~= LuaEntityB&amp;lt;/code&amp;gt; will not desync.&lt;br /&gt;
However, this does not apply when LuaObjects are used as keys in tables:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background-color:#DDA0DD!important; color:black&amp;quot;&amp;gt;&lt;br /&gt;
if table[LuaObject] then&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This will desync in the same way as described for the plain tables &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; above. For entities it is recommended to use [https://lua-api.factorio.com/latest/LuaEntity.html#LuaEntity.unit_number LuaEntity.unit_number] as the table key instead of the whole entity.&lt;br /&gt;
&lt;br /&gt;
== Extended learning ==&lt;br /&gt;
&lt;br /&gt;
One of the best ways to learn how to mod beyond this is to look at other mods. The [[Tutorial:Inspecting a live mod]] is a good starting point for touring a particularly well-commented mod. As all mods can be opened and inspected, looking at the mods of experienced modders can help significantly when making your own mod.&lt;br /&gt;
&lt;br /&gt;
=== Keeping your mod working ===&lt;br /&gt;
&lt;br /&gt;
As Factorio evolves, things will change. Previously, you probably ignored the modding part of the changelog, you now need to read it and see if any changes affect your mod(s). If so, you&#039;ll need to fix them. If there&#039;s something wrong with your mod, the game will fail to init and explain why.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Modding]]&lt;br /&gt;
* [[Modding FAQ]]&lt;/div&gt;</summary>
		<author><name>Justarandomgeek</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Types/NoiseExpression&amp;diff=191266</id>
		<title>Types/NoiseExpression</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Types/NoiseExpression&amp;diff=191266"/>
		<updated>2023-04-18T23:06:23Z</updated>

		<summary type="html">&lt;p&gt;Justarandomgeek: /* Functions */ functions only support up to 32 args&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Basics ==&lt;br /&gt;
&lt;br /&gt;
A fragment of a functional program used to generate coherent noise, probably for purposes related to terrain generation.&lt;br /&gt;
&lt;br /&gt;
Noise expressions can be provided as table literals or built using functions in the [https://github.com/wube/factorio-data/blob/master/core/lualib/noise.lua built-in &amp;lt;code&amp;gt;noise&amp;lt;/code&amp;gt; library]. The built-in noise library allows writing much more concise code, so its usage will be shown in most examples on this page.&amp;lt;br&amp;gt;&lt;br /&gt;
[https://github.com/wube/factorio-data/blob/master/core/lualib/noise.lua#L272 &amp;lt;code&amp;gt;noise.define_noise_function&amp;lt;/code&amp;gt;] allows noise expressions to be defined using a shorthand&lt;br /&gt;
that&#039;s a subset of Lua (see [[#Example definition|example definition]] for an example and its literal equivalent).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Types/NoiseExpression&#039;&#039;&#039; is used by [[Prototype/NamedNoiseExpression#expression|NamedNoiseExpressionPrototype::expression]], [[Types/AutoplaceSpecification#Properties_for_Expression-based_AutoplaceSpecifications|AutoplaceSpecification::probability_expression]] and [[Types/AutoplaceSpecification#Properties_for_Expression-based_AutoplaceSpecifications|AutoplaceSpecification::richness_expression]].&lt;br /&gt;
&lt;br /&gt;
== Mandatory properties ==&lt;br /&gt;
&lt;br /&gt;
=== type ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/string]]&lt;br /&gt;
&lt;br /&gt;
Name of the type of this expression.&lt;br /&gt;
Which other properties apply depend on the expression type.&lt;br /&gt;
&lt;br /&gt;
== Expression types ==&lt;br /&gt;
&lt;br /&gt;
=== variable ===&lt;br /&gt;
Properties:&lt;br /&gt;
* &#039;&#039;&#039;variable_name&#039;&#039;&#039;: a [[Types/string]]&lt;br /&gt;
&lt;br /&gt;
Reference to a pre-defined variable, constant, or a [[Prototype/NamedNoiseExpression|named noise expression]]. Variables referencing named noise expressions may have their reference overridden by other named noise expression if their intended_property is the variable name and it is selected by the user in the map generator GUI. See [[Prototype/NamedNoiseExpression#Custom intended_property]].&lt;br /&gt;
&lt;br /&gt;
Predefined variables:&lt;br /&gt;
* x - number - Current x position on the map&lt;br /&gt;
* y - number - Current y position on the map&lt;br /&gt;
&lt;br /&gt;
Predefined constants (note that map gen settings can also be provided by a [[Types/MapGenPreset]]):&lt;br /&gt;
* map_seed - number - Taken from the [http://lua-api.factorio.com/latest/Concepts.html#MapGenSettings MapGenSettings]&lt;br /&gt;
* map_width - number - Taken from the [http://lua-api.factorio.com/latest/Concepts.html#MapGenSettings MapGenSettings]&lt;br /&gt;
* map_height - number - Taken from the [http://lua-api.factorio.com/latest/Concepts.html#MapGenSettings MapGenSettings]&lt;br /&gt;
* water_level - number - Don&#039;t use; use wlc_elevation_minimum instead&lt;br /&gt;
* finite_water_level - number - Don&#039;t use; use wlc_elevation_offset instead&lt;br /&gt;
* wlc_elevation_offset - number - When the result of 10 × log2(&amp;quot;water&amp;quot;) with &amp;quot;water&amp;quot; from [http://lua-api.factorio.com/latest/Concepts.html#MapGenSettings MapGenSettings] is finite, &amp;lt;code&amp;gt;wlc_elevation_offset = -(10 * log2(water))&amp;lt;/code&amp;gt;, else &amp;lt;code&amp;gt;wlc_elevation_offset = 0&amp;lt;/code&amp;gt;&lt;br /&gt;
* wlc_elevation_minimum - number - When the result of 10 × log2(&amp;quot;water&amp;quot;) with &amp;quot;water&amp;quot; from [http://lua-api.factorio.com/latest/Concepts.html#MapGenSettings MapGenSettings] is infinite, &amp;lt;code&amp;gt;wlc_elevation_minimum = -∞&amp;lt;/code&amp;gt;, else &amp;lt;code&amp;gt;wlc_elevation_minimum = 4&amp;lt;/code&amp;gt;&lt;br /&gt;
* cliff_elevation_offset - number - Taken from the [http://lua-api.factorio.com/latest/Concepts.html#MapGenSettings MapGenSettings] ([https://lua-api.factorio.com/latest/Concepts.html#CliffPlacementSettings CliffPlacementSettings])&lt;br /&gt;
* cliff_elevation_interval - number - Taken from the [http://lua-api.factorio.com/latest/Concepts.html#MapGenSettings MapGenSettings] ([https://lua-api.factorio.com/latest/Concepts.html#CliffPlacementSettings CliffPlacementSettings])&lt;br /&gt;
* control-setting:cliffs:richness:multiplier - number - Taken from the [http://lua-api.factorio.com/latest/Concepts.html#MapGenSettings MapGenSettings] ([https://lua-api.factorio.com/latest/Concepts.html#CliffPlacementSettings CliffPlacementSettings])&lt;br /&gt;
* terrace_elevation_offset - number - Calculated from the cliff and water settings.&lt;br /&gt;
* terrace_elevation_interval - number - Same as &amp;quot;cliff_elevation_interval&amp;quot;&lt;br /&gt;
* starting_area_radius - number - Taken from the [http://lua-api.factorio.com/latest/Concepts.html#MapGenSettings MapGenSettings] &lt;br /&gt;
* starting_positions - map position list - Taken from the [http://lua-api.factorio.com/latest/Concepts.html#MapGenSettings MapGenSettings] &lt;br /&gt;
* starting_lake_positions - map position list - Calculated from starting positions and map seed&lt;br /&gt;
* peaceful_mode - boolean - Taken from the [http://lua-api.factorio.com/latest/Concepts.html#MapGenSettings MapGenSettings]&lt;br /&gt;
* control-setting:&amp;lt;prototype name&amp;gt;:frequency - number - Provided for all of the [[Prototype/Tile|tile]], [[Prototype/Entity|entity]], [[Prototype/Decorative|decorative]], [[Prototype/AutoplaceControl|autoplace-control]] prototypes.&lt;br /&gt;
* control-setting:&amp;lt;prototype name&amp;gt;:size - number - Provided for all of the [[Prototype/Tile|tile]], [[Prototype/Entity|entity]], [[Prototype/Decorative|decorative]], [[Prototype/AutoplaceControl|autoplace-control]] prototypes.&lt;br /&gt;
* control-setting:&amp;lt;prototype name&amp;gt;:richness - number - Provided for all of the [[Prototype/Tile|tile]], [[Prototype/Entity|entity]], [[Prototype/Decorative|decorative]], [[Prototype/AutoplaceControl|autoplace-control]] prototypes.&lt;br /&gt;
&lt;br /&gt;
A list of all named noise expression defined in the base game can be found at [[Data.raw#noise-expression]]. Notable expressions defined by the base game are:&lt;br /&gt;
* distance - number - &amp;lt;code&amp;gt;noise.distance_from(noise.var(&amp;quot;x&amp;quot;), noise.var(&amp;quot;y&amp;quot;), noise.var(&amp;quot;starting_positions&amp;quot;))&amp;lt;/code&amp;gt;, so the distance from the closest starting position. distance is never &amp;lt; 0.&lt;br /&gt;
* tier_from_start - number - &amp;lt;code&amp;gt;noise.max(0.0, noise.var(&amp;quot;distance&amp;quot;) - noise.var(&amp;quot;starting_area_radius&amp;quot;)) /  noise.var(&amp;quot;starting_area_radius)&amp;lt;/code&amp;gt;&lt;br /&gt;
* tier - number - &amp;lt;code&amp;gt;noise.var(&amp;quot;tier_from_start&amp;quot;)&amp;lt;/code&amp;gt;, so same as tier_from_start.&lt;br /&gt;
* starting_area_weight - number - &amp;lt;code&amp;gt;1 - noise.min(1.0, noise.var(&amp;quot;tier_from_start&amp;quot;) / 2.0)&amp;lt;/code&amp;gt;&lt;br /&gt;
* moisture - number - A value between 0 and 1 that determines whether a tile becomes sandy (low moisture) or grassy (high moisture).&lt;br /&gt;
* aux - number - A value between 0 and 1 that determines whether low-moisture tiles become sand or red desert.&lt;br /&gt;
* temperature - number -  Provides a value (vaguely representing degrees Celsius, varying between -20 and 50) that is used (together with moisture and aux) as part of tree and decorative placement.&lt;br /&gt;
* elevation - number - Tiles values less than zero become water. Cliffs are placed along certain contours according to CliffPlacementSettings.&lt;br /&gt;
* cliffiness - number - Determines whether (when &amp;gt;0.5) or not (when &amp;lt;0.5) a cliff will be placed at an otherwise suitable (according to CliffPlacementSettings) location.&lt;br /&gt;
* enemy-base-intensity - number - Is referenced by both enemy-base-frequency and enemy-base-radius. i.e. if this is overridden, enemy base frequency and size will both be affected and do something reasonable. By default, this expression returns a value proportional to distance from any starting point, clamped at about 7.&lt;br /&gt;
* enemy-base-frequency - number - Represents average number of enemy bases per tile for a region, by default in terms of enemy-base-intensity.&lt;br /&gt;
* enemy-base-radius - number - Represents the radius of an enemy base, if one were to be placed on the given tile, by default proportional to a constant plus enemy-base-intensity.&lt;br /&gt;
&lt;br /&gt;
Note that the named noise expressions are all defined in Lua, so mods may remove or change the notable expressions listed above or change how they are used in the map generation.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local noise = require(&amp;quot;noise&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
local y = &lt;br /&gt;
{&lt;br /&gt;
  type = &amp;quot;variable&amp;quot;,&lt;br /&gt;
  variable_name = &amp;quot;y&amp;quot; -- predefined variable&lt;br /&gt;
}&lt;br /&gt;
local x = noise.var(&amp;quot;x&amp;quot;) -- predefined variable, with the noise lib&lt;br /&gt;
&lt;br /&gt;
local width = &lt;br /&gt;
{&lt;br /&gt;
  type = &amp;quot;variable&amp;quot;,&lt;br /&gt;
  variable_name = &amp;quot;map_width&amp;quot; -- predefined constant&lt;br /&gt;
}&lt;br /&gt;
local height = noise.var(&amp;quot;map_height&amp;quot;) -- predefined constant, with the noise lib&lt;br /&gt;
&lt;br /&gt;
local aux = &lt;br /&gt;
{&lt;br /&gt;
  type = &amp;quot;variable&amp;quot;,&lt;br /&gt;
  variable_name = &amp;quot;aux&amp;quot; -- named noise expression&lt;br /&gt;
}&lt;br /&gt;
local cliffiness = noise.var(&amp;quot;cliffiness&amp;quot;) -- named noise expression, with the noise lib&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== function-application ===&lt;br /&gt;
&lt;br /&gt;
Apply a function to a list or associative array of arguments. Some functions expect arguments to be named and some expect them not to be.&lt;br /&gt;
&lt;br /&gt;
Function calls are their own class of expression (as opposed to every function just being its own expression type) because function calls all have similar properties -- arguments are themselves expressions, a function call with all-constant arguments can be constant-folded (due to [[Wikipedia:Referential_transparency|referential transparency]]), etc.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;function_name&#039;&#039;&#039; (a string; see [[#Functions]], below)&lt;br /&gt;
* &#039;&#039;&#039;arguments&#039;&#039;&#039; (a list or associative array of argument expressions)&lt;br /&gt;
&lt;br /&gt;
=== literal-boolean ===&lt;br /&gt;
&lt;br /&gt;
Evaluates to the same boolean value (true or false) every time, given by the &#039;&#039;&#039;literal_value&#039;&#039;&#039; property. May be used as a number value, evaluates to 1 for true and 0 for false.&lt;br /&gt;
&lt;br /&gt;
=== literal-number ===&lt;br /&gt;
&lt;br /&gt;
Evaluates to the same number every time, given by the &#039;&#039;&#039;literal_value&#039;&#039;&#039; property. All numbers are treated as [[Types/float]]s internally unless otherwise specified. May be used as a boolean value, evaluates to true for numbers &amp;gt; 0, anything else evaluates to false.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local ten = &lt;br /&gt;
{&lt;br /&gt;
  type = &amp;quot;literal-number&amp;quot;,&lt;br /&gt;
  literal_value = 10&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- or with the noise lib, see the &amp;quot;Basics&amp;quot; section above&lt;br /&gt;
local noise = require(&amp;quot;noise&amp;quot;)&lt;br /&gt;
local twenty_point_five = noise.to_noise_expression(20.5)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== literal-string ===&lt;br /&gt;
&lt;br /&gt;
Evaluates to the same string every time, given by the &#039;&#039;&#039;literal_value&#039;&#039;&#039; property.&lt;br /&gt;
&lt;br /&gt;
Since the noise generation runtime has no notion of strings or use for them,&lt;br /&gt;
this is useful only in constant contexts.&lt;br /&gt;
&lt;br /&gt;
=== literal-object ===&lt;br /&gt;
&lt;br /&gt;
Evaluates to the same object every time, given by the &#039;&#039;&#039;literal_value&#039;&#039;&#039; property.&lt;br /&gt;
&lt;br /&gt;
e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  type = &amp;quot;literal-object&amp;quot;,&lt;br /&gt;
  literal_value = {&lt;br /&gt;
    name = &amp;quot;Bob Hope&amp;quot;,&lt;br /&gt;
    birth_date = {&lt;br /&gt;
      year = 1903,&lt;br /&gt;
      month = 5,&lt;br /&gt;
      day_of_month = 29&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since the noise generation runtime has no notion of objects or use for them,&lt;br /&gt;
this is useful only in constant contexts, such as the argument&lt;br /&gt;
of the &#039;&#039;&#039;autoplace-probability&#039;&#039;&#039; function (where the &#039;literal object&#039; is an [[Types/AutoplaceSpecification|AutoplaceSpecitication]])&lt;br /&gt;
&lt;br /&gt;
=== literal-expression ===&lt;br /&gt;
&lt;br /&gt;
Returns the expression represented by its &#039;&#039;&#039;literal-value&#039;&#039;&#039; property.&lt;br /&gt;
&lt;br /&gt;
Useful mostly for passing expressions (to be evaluated later) to the [[#spot-noise|&#039;&#039;&#039;spot-noise&#039;&#039;&#039;]] function.&lt;br /&gt;
&lt;br /&gt;
=== array-construction ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;value_expressions&#039;&#039;&#039; property should be a list of expressions,&lt;br /&gt;
each of which will be evaluated to come up with the corresponding value&lt;br /&gt;
in the resulting array.&lt;br /&gt;
&lt;br /&gt;
Used to construct map positions ({x, y}) and map position lists ({{x0,y0}, {y1,y1}, ...}) for [[#offset-points|offset-points]] and [[#distance-from-nearest-point|distance-from-nearest-point]].&lt;br /&gt;
&lt;br /&gt;
Examples of constructing a map position and map position list:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local noise = require(&amp;quot;noise&amp;quot;)&lt;br /&gt;
local tne = noise.to_noise_expression&lt;br /&gt;
&lt;br /&gt;
local map_pos_1 = -- the map position {x = 100, y = -200} specified directly&lt;br /&gt;
{&lt;br /&gt;
  type = &amp;quot;array-construction&amp;quot;,&lt;br /&gt;
  value_expressions = {tne(100), tne(-200)}&lt;br /&gt;
}&lt;br /&gt;
-- or with make_array from the noise lib required above&lt;br /&gt;
local map_pos_2 = noise.make_array({100, 200})&lt;br /&gt;
&lt;br /&gt;
local map_pos_list = -- a map position list: {{x = 100, y = -200}, {x = 100, y = 200}}&lt;br /&gt;
{&lt;br /&gt;
  type = &amp;quot;array-construction&amp;quot;,&lt;br /&gt;
  value_expressions = {map_pos_1, map_pos_2}&lt;br /&gt;
}&lt;br /&gt;
-- or with the noise lib&lt;br /&gt;
local also_map_post_list = noise.make_point_list({{100, -200}, {100, 200}})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== procedure-delimiter ===&lt;br /&gt;
&lt;br /&gt;
Evaluates and returns the value of its &#039;&#039;&#039;expression&#039;&#039;&#039; property, which is itself an expression.&lt;br /&gt;
&lt;br /&gt;
This hints to the compiler that it should break the subexpression into its own procedure&lt;br /&gt;
so that the result can be re-used in multiple places.&lt;br /&gt;
For instance if you want to re-use the same multioctave noise for determining probability&lt;br /&gt;
of multiple tiles/entities, wrap the multioctave noise expression in a procedure-delimiter.&lt;br /&gt;
Alternatively, make the noise its own [[Prototype/NamedNoiseExpression|NamedNoiseExpression]] and reference it by name, using a variable.&lt;br /&gt;
&lt;br /&gt;
=== if-else-chain ===&lt;br /&gt;
&lt;br /&gt;
Has an &#039;&#039;&#039;arguments&#039;&#039;&#039; property that is a list of condition-result expression pairs followed by a default result expression, like so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  type = &amp;quot;if-else-chain&amp;quot;,&lt;br /&gt;
  arguments = {&lt;br /&gt;
    condition1, result1,&lt;br /&gt;
    condition2, result2,&lt;br /&gt;
    ...&lt;br /&gt;
    defaultResult&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result of the if-else-chain is the value of the first result expression whose condition expression evaluated to true,&lt;br /&gt;
or the value of the default result (&#039;else&#039;) expression.&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
&lt;br /&gt;
=== add ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Arguments (positional)&#039;&#039;&#039;: between 0 and 32 numbers&lt;br /&gt;
&lt;br /&gt;
Takes the positional arguments and adds them.&lt;br /&gt;
&lt;br /&gt;
=== subtract ===&lt;br /&gt;
&#039;&#039;&#039;Arguments (positional)&#039;&#039;&#039;:&lt;br /&gt;
* &#039;&#039;&#039;minuend&#039;&#039;&#039; - number&lt;br /&gt;
* &#039;&#039;&#039;subtrahend&#039;&#039;&#039; - number&lt;br /&gt;
&lt;br /&gt;
Takes 2 positional arguments and subtracts the second from the first.&lt;br /&gt;
&lt;br /&gt;
=== multiply ===&lt;br /&gt;
&#039;&#039;&#039;Arguments (positional)&#039;&#039;&#039;: between 0 and 32 numbers&lt;br /&gt;
&lt;br /&gt;
Takes the positional arguments and multiplies them.&lt;br /&gt;
&lt;br /&gt;
=== divide ===&lt;br /&gt;
&#039;&#039;&#039;Arguments (positional)&#039;&#039;&#039;:&lt;br /&gt;
* &#039;&#039;&#039;dividend&#039;&#039;&#039; - number&lt;br /&gt;
* &#039;&#039;&#039;divisor&#039;&#039;&#039; - number&lt;br /&gt;
&lt;br /&gt;
Takes 2 positional arguments and divides the first by the second.&lt;br /&gt;
&lt;br /&gt;
=== exponentiate ===&lt;br /&gt;
&#039;&#039;&#039;Arguments (positional)&#039;&#039;&#039;:&lt;br /&gt;
* &#039;&#039;&#039;base&#039;&#039;&#039; - number&lt;br /&gt;
* &#039;&#039;&#039;exponent&#039;&#039;&#039; - number&lt;br /&gt;
&lt;br /&gt;
Takes 2 positional arguments, and raises the first to the second power.&lt;br /&gt;
&lt;br /&gt;
=== absolute-value ===&lt;br /&gt;
&#039;&#039;&#039;Arguments (positional)&#039;&#039;&#039;: value to be absoluted&lt;br /&gt;
&lt;br /&gt;
Takes a single positional argument and returns its absolute value.  i.e. If the argument is negative, it is inverted.&lt;br /&gt;
&lt;br /&gt;
=== clamp ===&lt;br /&gt;
&#039;&#039;&#039;Arguments (positional)&#039;&#039;&#039;:&lt;br /&gt;
* &#039;&#039;&#039;value&#039;&#039;&#039; - number to be clamped&lt;br /&gt;
* &#039;&#039;&#039;floor&#039;&#039;&#039; - lower limit&lt;br /&gt;
* &#039;&#039;&#039;ceiling&#039;&#039;&#039; - upper limit&lt;br /&gt;
&lt;br /&gt;
First argument is clamped between the second and third.  The second is treated as a lower limit and the third the upper limit.&lt;br /&gt;
&lt;br /&gt;
=== compile-time-log ===&lt;br /&gt;
&#039;&#039;&#039;Arguments&#039;&#039;&#039;: Between 1 and 32 values of any type&lt;br /&gt;
&lt;br /&gt;
Prints all of its arguments to the [[log file]] when the expression is compiled. For that it needs to part of another expression that is compiled. The last argument of the compile-time-log is returned as the &amp;quot;result&amp;quot; of the compile-time-log.&lt;br /&gt;
&lt;br /&gt;
Example of usage inside a [[Prototype/NamedNoiseExpression|NamedNoiseExpression]]:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local noise = require(&amp;quot;noise&amp;quot;)&lt;br /&gt;
local tne = noise.to_noise_expression&lt;br /&gt;
&lt;br /&gt;
-- see the named noise expression docs linked above the code for how this works&lt;br /&gt;
data:extend{{&lt;br /&gt;
  type = &amp;quot;noise-expression&amp;quot;,&lt;br /&gt;
  name = &amp;quot;compile-log-test&amp;quot;,&lt;br /&gt;
  intended_property = &amp;quot;elevation&amp;quot;,&lt;br /&gt;
  expression = noise.compile_time_log(2000, noise.var(&amp;quot;y&amp;quot;), tne(100) - noise.var(&amp;quot;distance&amp;quot;))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
-- When &amp;quot;compile-log-test&amp;quot; is selected as the map type and a map preview or map is generated, this logs:&lt;br /&gt;
--  Info data-updates.lua:24: 2000.000000 reference to variable &#039;y&#039; subtract&lt;br /&gt;
-- Furthermore, the elevation noise expression is set to &#039;tne(100) - noise.var(&amp;quot;distance&amp;quot;)&#039;, producing a circular island with a 100 tile radius&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== distance-from-nearest-point ===&lt;br /&gt;
&#039;&#039;&#039;Arguments (named)&#039;&#039;&#039;:&lt;br /&gt;
* &#039;&#039;&#039;x&#039;&#039;&#039; - number&lt;br /&gt;
* &#039;&#039;&#039;y&#039;&#039;&#039; - number&lt;br /&gt;
* &#039;&#039;&#039;points&#039;&#039;&#039; - list of map positions&lt;br /&gt;
* &#039;&#039;&#039;maximum_distance&#039;&#039;&#039; (constant, default: max double) - number&lt;br /&gt;
&lt;br /&gt;
Computes the [[Wikipedia:Euclidean_distance|euclidean distance]] of the position {x, y} to all position listed in &#039;&#039;&#039;points&#039;&#039;&#039; and returns the shortest distance. The returned distance can be &#039;&#039;&#039;maximum_distance&#039;&#039;&#039; at most.&lt;br /&gt;
&lt;br /&gt;
See [[#array-construction|array-construction]] for how to specify a map position list.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- Shortest distance at the current {x, y} from the two given points, but at most 1000&lt;br /&gt;
&lt;br /&gt;
local noise = require(&amp;quot;noise&amp;quot;)&lt;br /&gt;
local tne = noise.to_noise_expression&lt;br /&gt;
local positions = noise.make_point_list({{-100, -40}, {-50, -200}})&lt;br /&gt;
&lt;br /&gt;
local shortest_distance = &lt;br /&gt;
{&lt;br /&gt;
  type = &amp;quot;function-application&amp;quot;,&lt;br /&gt;
  function_name = &amp;quot;distance-from-nearest-point&amp;quot;,&lt;br /&gt;
  arguments = {x = noise.var(&amp;quot;x&amp;quot;), y = noise.var(&amp;quot;y&amp;quot;), points = positions, maximum_distance = tne(1000)}&lt;br /&gt;
}&lt;br /&gt;
-- or with the noise lib&lt;br /&gt;
local also_shortest_distance = noise.function_application(&amp;quot;distance-from-nearest-point&amp;quot;, {x = noise.var(&amp;quot;x&amp;quot;), y = noise.var(&amp;quot;y&amp;quot;), points = positions, maximum_distance = 1000})&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ridge ===&lt;br /&gt;
&#039;&#039;&#039;Arguments (positional)&#039;&#039;&#039;:&lt;br /&gt;
* &#039;&#039;&#039;value&#039;&#039;&#039; - number to be ridged&lt;br /&gt;
* &#039;&#039;&#039;floor&#039;&#039;&#039; - lower limit&lt;br /&gt;
* &#039;&#039;&#039;ceiling&#039;&#039;&#039; - upper limit&lt;br /&gt;
&lt;br /&gt;
Similar to clamp but the input value is folded back across the upper and lower limits&lt;br /&gt;
until it lies between them.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local noise = require(&amp;quot;noise&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
local ridge_1 = noise.ridge(6, 1, 5) -- this returns 4&lt;br /&gt;
&lt;br /&gt;
local ridge_2 = noise.ridge(-1, 1, 5) -- this returns 3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== terrace ===&lt;br /&gt;
&#039;&#039;&#039;Arguments (positional)&#039;&#039;&#039;:&lt;br /&gt;
* &#039;&#039;&#039;value&#039;&#039;&#039; - number&lt;br /&gt;
* &#039;&#039;&#039;offset&#039;&#039;&#039; (constant) - number&lt;br /&gt;
* &#039;&#039;&#039;width&#039;&#039;&#039; (constant) - number&lt;br /&gt;
* &#039;&#039;&#039;strength&#039;&#039;&#039; - number&lt;br /&gt;
&lt;br /&gt;
=== modulo ===&lt;br /&gt;
&#039;&#039;&#039;Arguments (positional)&#039;&#039;&#039;:&lt;br /&gt;
* &#039;&#039;&#039;dividend&#039;&#039;&#039; - number&lt;br /&gt;
* &#039;&#039;&#039;divisor&#039;&#039;&#039; - number&lt;br /&gt;
&lt;br /&gt;
Takes 2 positional arguments and divides the first by the second and returns the remainder. This is implemented using [https://en.cppreference.com/w/cpp/numeric/math/fmod fmod(double, double)].&lt;br /&gt;
&lt;br /&gt;
=== floor ===&lt;br /&gt;
&#039;&#039;&#039;Arguments (positional)&#039;&#039;&#039;:&lt;br /&gt;
* &#039;&#039;&#039;value&#039;&#039;&#039; - number&lt;br /&gt;
&lt;br /&gt;
Takes one 1 numeric value and returns its floor.&lt;br /&gt;
&lt;br /&gt;
=== ceil ===&lt;br /&gt;
&#039;&#039;&#039;Arguments (positional)&#039;&#039;&#039;:&lt;br /&gt;
* &#039;&#039;&#039;value&#039;&#039;&#039; - number&lt;br /&gt;
&lt;br /&gt;
Takes one 1 numeric value and returns its ceiling.&lt;br /&gt;
&lt;br /&gt;
=== bitwise-and ===&lt;br /&gt;
&#039;&#039;&#039;Arguments (positional)&#039;&#039;&#039;: between 0 and 32 numbers&lt;br /&gt;
&lt;br /&gt;
Casts the positional arguments to signed 32-bit integers and performs bitwise AND on them.&lt;br /&gt;
&lt;br /&gt;
=== bitwise-or ===&lt;br /&gt;
&#039;&#039;&#039;Arguments (positional)&#039;&#039;&#039;: between 0 and 32 numbers&lt;br /&gt;
&lt;br /&gt;
Casts the positional arguments to signed 32-bit integers and performs bitwise OR on them.&lt;br /&gt;
&lt;br /&gt;
=== bitwise-xor ===&lt;br /&gt;
&#039;&#039;&#039;Arguments (positional)&#039;&#039;&#039;: between 0 and 32 numbers&lt;br /&gt;
&lt;br /&gt;
Casts the positional arguments to signed 32-bit integers and performs bitwise EXCLUSIVE OR on them.&lt;br /&gt;
&lt;br /&gt;
=== bitwise-not ===&lt;br /&gt;
&#039;&#039;&#039;Arguments (positional)&#039;&#039;&#039;:&lt;br /&gt;
* &#039;&#039;&#039;value&#039;&#039;&#039; - number to be negated&lt;br /&gt;
&lt;br /&gt;
Casts the positional argument to a signed 32-bit integer and bitwise negates it.&lt;br /&gt;
&lt;br /&gt;
=== sin ===&lt;br /&gt;
&#039;&#039;&#039;Arguments (positional)&#039;&#039;&#039;:&lt;br /&gt;
* &#039;&#039;&#039;value&#039;&#039;&#039; - number&lt;br /&gt;
&lt;br /&gt;
Takes one 1 value and returns its sine.&lt;br /&gt;
&lt;br /&gt;
=== cos ===&lt;br /&gt;
&#039;&#039;&#039;Arguments (positional)&#039;&#039;&#039;:&lt;br /&gt;
* &#039;&#039;&#039;value&#039;&#039;&#039; - number&lt;br /&gt;
&lt;br /&gt;
Takes one 1 value and returns its cosine.&lt;br /&gt;
&lt;br /&gt;
=== atan2 ===&lt;br /&gt;
&#039;&#039;&#039;Arguments (positional)&#039;&#039;&#039;:&lt;br /&gt;
* &#039;&#039;&#039;y&#039;&#039;&#039; - number&lt;br /&gt;
* &#039;&#039;&#039;x&#039;&#039;&#039; - number&lt;br /&gt;
&lt;br /&gt;
Returns the arc tangent of y/x using the signs of arguments to determine the correct quadrant.&lt;br /&gt;
&lt;br /&gt;
=== less-than ===&lt;br /&gt;
&#039;&#039;&#039;Arguments (positional)&#039;&#039;&#039;:&lt;br /&gt;
* &#039;&#039;&#039;lhs&#039;&#039;&#039; - number&lt;br /&gt;
* &#039;&#039;&#039;rhs&#039;&#039;&#039; - number&lt;br /&gt;
&lt;br /&gt;
Returns the result of lhs &amp;lt; rhs as literal number that is 0 for false and 1 for true.&lt;br /&gt;
&lt;br /&gt;
=== less-or-equal ===&lt;br /&gt;
&#039;&#039;&#039;Arguments (positional)&#039;&#039;&#039;:&lt;br /&gt;
* &#039;&#039;&#039;lhs&#039;&#039;&#039; - number&lt;br /&gt;
* &#039;&#039;&#039;rhs&#039;&#039;&#039; - number&lt;br /&gt;
&lt;br /&gt;
Returns the result of lhs &amp;lt;= rhs as literal number that is 0 for false and 1 for true.&lt;br /&gt;
&lt;br /&gt;
=== equals ===&lt;br /&gt;
&#039;&#039;&#039;Arguments (positional)&#039;&#039;&#039;:&lt;br /&gt;
* &#039;&#039;&#039;lhs&#039;&#039;&#039; - number&lt;br /&gt;
* &#039;&#039;&#039;rhs&#039;&#039;&#039; - number&lt;br /&gt;
&lt;br /&gt;
Returns the result of lhs == rhs as literal number that is 0 for false and 1 for true.&lt;br /&gt;
&lt;br /&gt;
=== factorio-basis-noise ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Arguments (named)&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;x&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;y&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;seed0&#039;&#039;&#039; (constant) - integer between 0 and 4294967295 (inclusive) used to populate the backing random noise&lt;br /&gt;
* &#039;&#039;&#039;seed1&#039;&#039;&#039; (constant) - integer between 0 and 255 (inclusive) used to provide extra randomness when sampling&lt;br /&gt;
* &#039;&#039;&#039;input_scale&#039;&#039;&#039; (constant, default: 1) - x and y will be multiplied by this before sampling&lt;br /&gt;
* &#039;&#039;&#039;output_scale&#039;&#039;&#039; (constant, default: 1) - output will be multiplied by this before being returned&lt;br /&gt;
&lt;br /&gt;
Scaling input and output can be accomplished other ways, but are done so commonly&lt;br /&gt;
as to be built into this function for performance reasons.&lt;br /&gt;
&lt;br /&gt;
=== factorio-quick-multioctave-noise ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Arguments (named)&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;x&#039;&#039;&#039; - number&lt;br /&gt;
* &#039;&#039;&#039;y&#039;&#039;&#039; - number&lt;br /&gt;
* &#039;&#039;&#039;seed0&#039;&#039;&#039; (constant) - number&lt;br /&gt;
* &#039;&#039;&#039;seed1&#039;&#039;&#039; (constant) - number&lt;br /&gt;
* &#039;&#039;&#039;input_scale&#039;&#039;&#039; (constant, default: 1) - number&lt;br /&gt;
* &#039;&#039;&#039;output_scale&#039;&#039;&#039; (constant, default: 1) - number&lt;br /&gt;
* &#039;&#039;&#039;octaves&#039;&#039;&#039; (constant) - number&lt;br /&gt;
* &#039;&#039;&#039;octave_input_scale_multiplier&#039;&#039;&#039; (constant, default: 0.5) - number&lt;br /&gt;
* &#039;&#039;&#039;octave_output_scale_multiplier&#039;&#039;&#039; (constant, default: 2) - number&lt;br /&gt;
* &#039;&#039;&#039;octave_seed0_shift&#039;&#039;&#039; (constant, default: 1) - number&lt;br /&gt;
&lt;br /&gt;
=== random-penalty ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Arguments (named)&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;x&#039;&#039;&#039; - number used to seed the random generator&lt;br /&gt;
* &#039;&#039;&#039;y&#039;&#039;&#039; - number used to seed the random generator&lt;br /&gt;
* &#039;&#039;&#039;source&#039;&#039;&#039; - number that the penalty is applied to&lt;br /&gt;
* &#039;&#039;&#039;seed&#039;&#039;&#039; (constant, default: 1) - integer used to seed the random generator&lt;br /&gt;
* &#039;&#039;&#039;amplitude&#039;&#039;&#039; (constant, default: 1) - number&lt;br /&gt;
&lt;br /&gt;
Subtracts a random value in the [0, amplitude) range from source if source is larger than 0.&lt;br /&gt;
&lt;br /&gt;
=== log2 ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Argument (positional)&#039;&#039;&#039;: value (number)&lt;br /&gt;
&lt;br /&gt;
=== noise-layer-name-to-id ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Argument (positional)&#039;&#039;&#039;: value (string)&lt;br /&gt;
&lt;br /&gt;
=== autoplace-probability ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Argument (positional)&#039;&#039;&#039;: value (object)&lt;br /&gt;
&lt;br /&gt;
=== autoplace-richness ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Argument (positional)&#039;&#039;&#039;: value (object)&lt;br /&gt;
&lt;br /&gt;
=== offset-points ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Arguments (positional)&#039;&#039;&#039;:&lt;br /&gt;
* &#039;&#039;&#039;offset&#039;&#039;&#039; - map position - Vector of how the positions should be shifted&lt;br /&gt;
* &#039;&#039;&#039;positions&#039;&#039;&#039; - list of map positions - The positions that should be shifted&lt;br /&gt;
&lt;br /&gt;
See [[#array-construction|array-construction]] for how to specify map positions.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- Shifts &amp;quot;positions&amp;quot; by {100, 90}&lt;br /&gt;
&lt;br /&gt;
local noise = require(&amp;quot;noise&amp;quot;)&lt;br /&gt;
local positions = noise.make_point_list({{-10, -40}, {-50, -20}})&lt;br /&gt;
local offset = noise.make_array({100, 90})&lt;br /&gt;
local offset_positions = &lt;br /&gt;
{&lt;br /&gt;
  type = &amp;quot;function-application&amp;quot;,&lt;br /&gt;
  function_name = &amp;quot;offset-points&amp;quot;,&lt;br /&gt;
  arguments = {offset, positions}&lt;br /&gt;
}&lt;br /&gt;
-- or with the noise lib&lt;br /&gt;
local also_offset_positions = noise.function_application(&amp;quot;offset-points&amp;quot;, {offset, positions})&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== factorio-multioctave-noise ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Arguments (named)&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;x&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;y&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;persistence&#039;&#039;&#039; (constant) - how strong is each layer compared to the next larger one&lt;br /&gt;
* &#039;&#039;&#039;seed0&#039;&#039;&#039; (constant) - integer between 0 and 4294967295 (inclusive) used to populate the backing random noise&lt;br /&gt;
* &#039;&#039;&#039;seed1&#039;&#039;&#039; (constant) - integer between 0 and 255 (inclusive) used to provide extra randomness when sampling&lt;br /&gt;
* &#039;&#039;&#039;input_scale&#039;&#039;&#039; (constant, default: 1) - x and y will be multiplied by this before sampling&lt;br /&gt;
* &#039;&#039;&#039;output_scale&#039;&#039;&#039; (constant, default: 1) - output will be multiplied by this before being returned&lt;br /&gt;
* &#039;&#039;&#039;octaves&#039;&#039;&#039; (constant) - how many layers of noise at different scales to sum&lt;br /&gt;
&lt;br /&gt;
=== spot-noise ===&lt;br /&gt;
&lt;br /&gt;
Generates random conical spots.  The map is divided into square regions, and within each region, candidate points are chosen at random and target density, spot quantity, and radius are calculated for each point (or one of every &#039;&#039;&#039;skip_span&#039;&#039;&#039; candidate points) by configured expressions.  Each spot contributes a quantity to a regional target total (which is the average of sampled target densities times the area of the region) until the total has been reached or a maximum spot count is hit.  The output value of the function is the maximum height of any spot at a given point.&lt;br /&gt;
&lt;br /&gt;
The parameters that provide expressions to be evaluated for each point (all named &#039;&#039;&#039;something_expression&#039;&#039;&#039;) need to actually return expression objects.  &lt;br /&gt;
&lt;br /&gt;
The quantity of the spot is assumed to be the same as its volume.  Since the volume of a cone is &#039;&#039;&#039;pi * radius^2 * height / 3&#039;&#039;&#039;,&lt;br /&gt;
the height (&#039;peak value&#039;) of any given spot is calculated as &#039;&#039;&#039;3 * quantity / (pi * radius^2)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Arguments (named)&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;x&#039;&#039;&#039; (number)&lt;br /&gt;
* &#039;&#039;&#039;y&#039;&#039;&#039; (number)&lt;br /&gt;
* &#039;&#039;&#039;seed0&#039;&#039;&#039; (constant integer) - random seed, part 1 - usually the map seed is used&lt;br /&gt;
* &#039;&#039;&#039;seed1&#039;&#039;&#039; (constant integer) - random seed, part 2 - usually chosen to identify the noise layer&lt;br /&gt;
* &#039;&#039;&#039;region_size&#039;&#039;&#039; (constant integer, default: 512) - width/height of each region&lt;br /&gt;
* &#039;&#039;&#039;skip_offset&#039;&#039;&#039; (constant integer, default: 0) - offset of the first candidate point to use&lt;br /&gt;
* &#039;&#039;&#039;skip_span&#039;&#039;&#039; (constant integer, default: 1) - number of candidate points to skip over after each one used as a spot, including the used one&lt;br /&gt;
* &#039;&#039;&#039;candidate_point_count&#039;&#039;&#039; (constant integer, default:256) - how many candidate points to generate&lt;br /&gt;
* &#039;&#039;&#039;candidate_spot_count&#039;&#039;&#039; (constant integer, default depends on skip_span) - an alternative to candidate_point_count - number of spots to generate: &#039;&#039;&#039;candidate_spot_count = X&#039;&#039;&#039; is equivalent to &#039;&#039;&#039;candidate_point_count / skip_span = X&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;suggested_minimum_candidate_point_spacing&#039;&#039;&#039; (constant number, default depends on region size and candidate_point_count) - minimum spacing to *try* to achieve while randomly picking points; spot noise may end up placing spots closer than this in crowded regions&lt;br /&gt;
* &#039;&#039;&#039;hard_region_target_quantity&#039;&#039;&#039; (constant boolean, default: true) - whether to place a hard limit on the total quantity in each region by reducing the size of any spot (which will be the last spot chosen) that would put it over the limit.&lt;br /&gt;
* &#039;&#039;&#039;density_expression&#039;&#039;&#039; (number-returningexpression) - an expression that will be evaluated for each candidate spot to calculate density at that point&lt;br /&gt;
* &#039;&#039;&#039;spot_quantity_expression&#039;&#039;&#039; (number-returningexpression) - an expression that will be evaluated for each candidate spot to calculate the spot&#039;s quantity&lt;br /&gt;
* &#039;&#039;&#039;spot_radius_expression&#039;&#039;&#039; (number-returning expression) - an expression that will be evaluated for each candidate spot to calculate the spot&#039;s radius (this, together with quantity, will determine the spots peak value)&lt;br /&gt;
* &#039;&#039;&#039;spot_favorability_expression&#039;&#039;&#039; (number-returning expression) - an expression that will be evaluated for each candidate spot to calculate the spot&#039;s favorability; spots with higher favorability will be considered first when building the final list of spots for a region&lt;br /&gt;
* &#039;&#039;&#039;basement_value&#039;&#039;&#039; (constant) - number&lt;br /&gt;
* &#039;&#039;&#039;maximum_spot_basement_radius&#039;&#039;&#039; (constant) - number&lt;br /&gt;
* &#039;&#039;&#039;comment&#039;&#039;&#039; (constant) - comment string&lt;br /&gt;
&lt;br /&gt;
The infinite series of candidate points (of which &#039;&#039;&#039;candidate_point_count&#039;&#039;&#039; are actually considered) generated by &#039;&#039;&#039;spot-noise&#039;&#039;&#039; expressions with the same &#039;&#039;&#039;seed0&#039;&#039;&#039;, &#039;&#039;&#039;seed1&#039;&#039;&#039;, &#039;&#039;&#039;region_size&#039;&#039;&#039;, and &#039;&#039;&#039;suggested_minimum_candidate_point_spacing&#039;&#039;&#039; will be identical.  This allows multiple spot-noise expressions (e.g. for different ore patches) to avoid overlap by using different points from the same list, determined by &#039;&#039;&#039;skip_span&#039;&#039;&#039; and &#039;&#039;&#039;skip_offset&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Example definition ==&lt;br /&gt;
&lt;br /&gt;
To override the &#039;temperature&#039; named noise expression with one that linearly increases to the southeast:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local noise = require(&amp;quot;noise&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
data:extend{&lt;br /&gt;
  {&lt;br /&gt;
    type = &amp;quot;noise-expression&amp;quot;,&lt;br /&gt;
    name = &amp;quot;new-temperature-function&amp;quot;,&lt;br /&gt;
    intended_property = &amp;quot;temperature&amp;quot;, -- Makes this available in the &#039;temperature generator&#039; drop-down&lt;br /&gt;
    expression = noise.define_noise_function( function(x,y,tile,map)&lt;br /&gt;
      return (x + y) / 1000&lt;br /&gt;
    end)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Which is equivalent to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
data:extend{&lt;br /&gt;
  {&lt;br /&gt;
    type = &amp;quot;noise-expression&amp;quot;,&lt;br /&gt;
    name = &amp;quot;new-temperature-function&amp;quot;,&lt;br /&gt;
    intended_property = &amp;quot;temperature&amp;quot;,&lt;br /&gt;
    expression = {&lt;br /&gt;
      type = &amp;quot;function-application&amp;quot;,&lt;br /&gt;
      function_name = &amp;quot;divide&amp;quot;,&lt;br /&gt;
      arguments = {&lt;br /&gt;
        {&lt;br /&gt;
          type = &amp;quot;function-application&amp;quot;,&lt;br /&gt;
          function_name = &amp;quot;add&amp;quot;,&lt;br /&gt;
          arguments = {&lt;br /&gt;
            {&lt;br /&gt;
              type = &amp;quot;variable&amp;quot;,&lt;br /&gt;
              variable_name = &amp;quot;x&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              type = &amp;quot;variable&amp;quot;,&lt;br /&gt;
              variable_name = &amp;quot;y&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          type = &amp;quot;literal-number&amp;quot;,&lt;br /&gt;
          literal_value = 1000&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [https://togos.github.io/togos-example-noise-programs/ A tutorial on authoring noise functions]&lt;/div&gt;</summary>
		<author><name>Justarandomgeek</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Prototype/Recipe&amp;diff=190750</id>
		<title>Prototype/Recipe</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Prototype/Recipe&amp;diff=190750"/>
		<updated>2023-02-05T03:02:06Z</updated>

		<summary type="html">&lt;p&gt;Justarandomgeek: clarify subgroup&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Prototype parent|PrototypeBase}}&lt;br /&gt;
A recipe. It can be a crafting recipe, a smelting recipe, or a custom type of recipe (see [[Prototype/RecipeCategory]]).&lt;br /&gt;
&lt;br /&gt;
{{Prototype TOC|recipe}}&lt;br /&gt;
&lt;br /&gt;
== General properties ==&lt;br /&gt;
Inherits all properties from [[PrototypeBase]].&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|category|[[Types/string|string]]|&amp;quot;crafting&amp;quot;|optional=true}}&lt;br /&gt;
Optional. The category of this recipe. The built-in categories can be found [[Data.raw#recipe-category|here]]. See also [[Prototype/RecipeCategory]].&lt;br /&gt;
&lt;br /&gt;
The recipe category &amp;quot;crafting&amp;quot; cannot contain recipes with fluid ingredients or products.&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|subgroup|[[Types/string|string]]||optional=true}}&lt;br /&gt;
Name of a [[Prototype/ItemSubGroup]]&lt;br /&gt;
&lt;br /&gt;
Optional. The subgroup of this recipe. If not specified, defaults to the subgroup of the product if there is only 1, or main_product if multiple products exist. If multiple products exist and no main_product is specified, the subgroup is required.&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|icons, icon,  icon_size (IconSpecification)|[[Types/IconSpecification|IconSpecification]]|optional=true}}&lt;br /&gt;
An icon is mandatory for recipe with more than 1 product and no main_product. Otherwise defaults to the icon of main_product/1 product.&lt;br /&gt;
&lt;br /&gt;
If given, it overwrites the icon of the main_product/1 product.&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|crafting_machine_tint|[[Types/table|table]] of [[Types/Color|Color]]|optional=true}}&lt;br /&gt;
Optional. Used by crafting machine &amp;lt;code&amp;gt;[[Prototype/CraftingMachine#working_visualisations|working_visualisations]]&amp;lt;/code&amp;gt; to tint certain layers with the recipe color. [[Types/WorkingVisualisation#apply_recipe_tint|apply_recipe_tint]] on the working visualisation determines which of the 4 colors is used for that layer (if any).&lt;br /&gt;
&lt;br /&gt;
Format:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;crafting_machine_tint = { primary = {r=0,g=0,b=0,a=0}, secondary = {r=0,g=0,b=0,a=0}, tertiary = {r=0,g=0,b=0,a=0}, quaternary = {r=0,g=0,b=0,a=0}}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each key/value pair is optional and defaults to the above value.&lt;br /&gt;
&lt;br /&gt;
== Recipe data ==&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Anchor and property for the TOC at the top --&amp;gt;&amp;lt;span id=&amp;quot;normal&amp;quot;&amp;gt;{{#subobject:normal&lt;br /&gt;
 |Prototype property name=normal&lt;br /&gt;
 |Prototype property type=[[Prototype/Recipe#Recipe_data|Recipe data]] or [[Types/bool|bool]]&lt;br /&gt;
 |Prototype property optional=true&lt;br /&gt;
 |Prototype property pagename={{FULLPAGENAME}}&lt;br /&gt;
}}&amp;lt;/span&amp;gt;&amp;lt;!-- &lt;br /&gt;
Anchor and property for the TOC at the top --&amp;gt;&amp;lt;span id=&amp;quot;expensive&amp;quot;&amp;gt;{{#subobject:expensive&lt;br /&gt;
 |Prototype property name=expensive&lt;br /&gt;
 |Prototype property type=[[Prototype/Recipe#Recipe_data|Recipe data]] or [[Types/bool|bool]]&lt;br /&gt;
 |Prototype property optional=true&lt;br /&gt;
 |Prototype property pagename={{FULLPAGENAME}}&lt;br /&gt;
}}&amp;lt;/span&amp;gt;&amp;lt;!-- &lt;br /&gt;
--&amp;gt;&lt;br /&gt;
If the recipe does not have a difficulty, this is located directly in the prototype. Otherwise, if the &amp;quot;&#039;&#039;&#039;normal&#039;&#039;&#039;&amp;quot; or &amp;quot;&#039;&#039;&#039;expensive&#039;&#039;&#039;&amp;quot; property exists, the recipe has difficulty. Then, the recipe data has to be specified for each difficulty instead of directly in the prototype. If at least one difficulty has recipe data defined, the other difficulty can be set to &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;. This will disable the recipe for the difficulty, same as setting it &amp;lt;code&amp;gt;enabled = false&amp;lt;/code&amp;gt;. If it is enabled (by technologies etc), it will use the data from the other difficulty. Not setting a difficulty, e.g. &amp;lt;code&amp;gt;normal = nil&amp;lt;/code&amp;gt;, is possible and gives that difficulty the exact same properties as the difficulty that is defined. Setting one or both difficulties to &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; is not valid and will produce an error. See below for examples of difficulty.&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|ingredients|[[Types/table|table]] of [[Types/IngredientPrototype|IngredientPrototype]]}}&lt;br /&gt;
A table containing ingredient names and counts. Can also contain information about fluid temperature and catalyst amounts. The catalyst amounts are automatically calculated from the recipe, or can be set manually in the [[Types/IngredientPrototype|IngredientPrototype]].&amp;lt;sup&amp;gt;[https://factorio.com/blog/post/fff-256]&amp;lt;/sup&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Maximum ingredient amount is 65535.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;ingredients&amp;lt;/code&amp;gt; can be set to an empty table  to create a recipe that needs no ingredients.&amp;lt;br&amp;gt;&lt;br /&gt;
Duplicate ingredients, e.g. two entries for the &amp;quot;wood&amp;quot; item, are &#039;&#039;not&#039;&#039; allowed.&amp;lt;br&amp;gt;&lt;br /&gt;
In-game, the item ingredients are ordered by [[Prototype/ItemGroup#order_in_recipe|item group order_in_recipe]].&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
ingredients = {{&amp;quot;iron-stick&amp;quot;, 2}, {&amp;quot;iron-plate&amp;quot;, 3}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The same with full format:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
ingredients = {{type = &amp;quot;item&amp;quot;, name = &amp;quot;iron-stick&amp;quot;, amount = 2}, {type = &amp;quot;item&amp;quot;, name = &amp;quot;iron-plate&amp;quot;, amount = 3}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
For fluids, the full format always has to be used:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
ingredients = {{type=&amp;quot;fluid&amp;quot;, name=&amp;quot;water&amp;quot;, amount=50}, {type=&amp;quot;fluid&amp;quot;, name=&amp;quot;crude-oil&amp;quot;, amount=100}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|result|[[Types/string|string]]|optional=true}}&lt;br /&gt;
Can be replaced with the results parameter. The item created by this recipe. Must be the name of an item, such as &amp;quot;iron-gear-wheel&amp;quot;.&lt;br /&gt;
Note that &amp;lt;code&amp;gt;results&amp;lt;/code&amp;gt; takes priority over &amp;lt;code&amp;gt;result&amp;lt;/code&amp;gt;. So if a recipe has both keys set, &amp;lt;code&amp;gt;result&amp;lt;/code&amp;gt; will be ignored.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|result_count|[[Types/uint32|uint32]]|1|optional=true}}&lt;br /&gt;
Optional. The number of items created by this recipe.&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|results|[[Types/table|table]] of [[Types/ProductPrototype|ProductPrototype]]|optional=true}}&lt;br /&gt;
A table containing result names and counts. Can also contain information about fluid temperature and catalyst amounts. The catalyst amounts are automatically calculated from the recipe, or can be set manually in the [[Types/ProductPrototype|ProductPrototype]].&amp;lt;sup&amp;gt;[https://factorio.com/blog/post/fff-256]&amp;lt;/sup&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;results&amp;lt;/code&amp;gt; can be set to an empty table to create a recipe that produces nothing.&amp;lt;br&amp;gt;&lt;br /&gt;
Duplicate results, e.g. two entries for the &amp;quot;iron-plate&amp;quot; item, are allowed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
results=&lt;br /&gt;
    {&lt;br /&gt;
      {type=&amp;quot;fluid&amp;quot;, name=&amp;quot;heavy-oil&amp;quot;, amount=3},&lt;br /&gt;
      {type=&amp;quot;fluid&amp;quot;, name=&amp;quot;light-oil&amp;quot;, amount=3},&lt;br /&gt;
      {type=&amp;quot;fluid&amp;quot;, name=&amp;quot;petroleum-gas&amp;quot;, amount=4}&lt;br /&gt;
    },&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
results = &lt;br /&gt;
    {&lt;br /&gt;
      {type = &amp;quot;item&amp;quot;, name = &amp;quot;iron-nuggets&amp;quot;, amount = 9},&lt;br /&gt;
      {type = &amp;quot;item&amp;quot;, name = &amp;quot;gold-nuggets&amp;quot;, amount = 1}&lt;br /&gt;
     },&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
results = &lt;br /&gt;
    {&lt;br /&gt;
      {type = &amp;quot;fluid&amp;quot;, name = &amp;quot;steam&amp;quot;, amount = 1, temperature = 165}&lt;br /&gt;
     },&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|energy_required|[[Types/double|double]]|0.5|optional=true}}&lt;br /&gt;
Optional. The amount of time it takes to make this recipe. Must be greater than 0.001.&lt;br /&gt;
&lt;br /&gt;
This is the number of seconds it takes to craft at crafting speed 1.&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|emissions_multiplier|[[Types/double|double]]|1.0|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|requester_paste_multiplier|[[Types/uint32|uint32]]|30|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|overload_multiplier|[[Types/uint32|uint32]]|0|optional=true}}&lt;br /&gt;
Used to determine how many extra items are put into an assembling machine before it&#039;s considered &amp;quot;full enough&amp;quot;. See [[Inserters#Insertion_limits]].&lt;br /&gt;
&lt;br /&gt;
If set to 0, it instead uses the following formula: 1.166 / (energy_required / the assembler&#039;s crafting_speed), rounded up, and clamped between 2 and 100. The numbers used in this formula can be changed by the [[Prototype/UtilityConstants]] dynamic_recipe_overload_factor, minimum_recipe_overload_multiplier and maximum_recipe_overload_multiplier.&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|allow_inserter_overload|[[Types/bool|bool]]|true|optional=true}}&lt;br /&gt;
If the recipe is allowed to have the extra inserter overload bonus applied (4 * stack inserter stack size).&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|enabled|[[Types/bool|bool]]|true|optional=true}}&lt;br /&gt;
Optional. This can be false to disable the recipe at the start of the game, or &amp;quot;true&amp;quot; to leave it enabled.&lt;br /&gt;
&lt;br /&gt;
If your recipe is unlocked by a technology, you should set this to &amp;quot;false&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|hidden|[[Types/bool|bool]]|false|optional=true}}&lt;br /&gt;
Optional. Hides the recipe from crafting menus.&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|hide_from_stats|[[Types/bool|bool]]|false|optional=true}}&lt;br /&gt;
Optional. Hides the recipe from flow stats (item/fluid production statistics).&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|hide_from_player_crafting|[[Types/bool|bool]]|false|optional=true}}&lt;br /&gt;
Optional. Hides the recipe from the player&#039;s crafting screen. The recipe will still show up for selection in machines.&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|allow_decomposition|[[Types/bool|bool]]|true|optional=true}}&lt;br /&gt;
Optional. Whether this recipe is allowed to be broken down for the recipe tooltip &amp;quot;Total raw&amp;quot; calculations.&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|allow_as_intermediate|[[Types/bool|bool]]|true|optional=true}}&lt;br /&gt;
Optional. Whether the recipe can be used as an intermediate recipe in hand-crafting.&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|allow_intermediates|[[Types/bool|bool]]|true|optional=true}}&lt;br /&gt;
Optional. Whether the recipe is allowed to use intermediate recipes when hand-crafting.&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|always_show_made_in|[[Types/bool|bool]]|false|optional=true}}&lt;br /&gt;
Optional. Whether the &amp;quot;Made in: {Machine}&amp;quot; part of the tool-tip should always be present, not only when the recipe can not be hand-crafted.&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|show_amount_in_title|[[Types/bool|bool]]|true|optional=true}}&lt;br /&gt;
Optional. Whether the recipe name should have the product amount in front of it, e.g. &amp;quot;2 [[transport belt]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|always_show_products|[[Types/bool|bool]]|false|optional=true}}&lt;br /&gt;
Optional. Whether the products are always shown in the recipe tool-tip.&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|unlock_results|[[Types/bool|bool]]|true|optional=true}}&lt;br /&gt;
Optional. Whether enabling this recipe unlocks its item products to show in selection lists (item filter, logistic request etc.).&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|main_product|[[Types/string|string]]|optional=true}}&lt;br /&gt;
Optional.&lt;br /&gt;
&lt;br /&gt;
For recipes with more than one product: This defines of which result the icon, subgroup and name is used. If it is not set and the recipe has more than 1 result the recipe will use the recipe-name and recipe-description locale and its own subgroup and icon.&lt;br /&gt;
&lt;br /&gt;
For recipes with 1 result: The recipe uses the icon, subgroup and name of the result by default. If this property is set to an empty string, the recipe will use the properties of the recipe instead of the result.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;iron-plate&amp;quot; ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
  {&lt;br /&gt;
    type = &amp;quot;recipe&amp;quot;,&lt;br /&gt;
    name = &amp;quot;iron-plate&amp;quot;,&lt;br /&gt;
    category = &amp;quot;smelting&amp;quot;,&lt;br /&gt;
    energy_required = 3.5,&lt;br /&gt;
    ingredients = {{&amp;quot;iron-ore&amp;quot;, 1}},&lt;br /&gt;
    result = &amp;quot;iron-plate&amp;quot;&lt;br /&gt;
  }&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;coal-liquefaction&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;{&lt;br /&gt;
  type = &amp;quot;recipe&amp;quot;,&lt;br /&gt;
  name = &amp;quot;coal-liquefaction&amp;quot;,&lt;br /&gt;
  category = &amp;quot;oil-processing&amp;quot;,&lt;br /&gt;
  subgroup = &amp;quot;fluid-recipes&amp;quot;,&lt;br /&gt;
  order = &amp;quot;a[oil-processing]-c[coal-liquefaction]&amp;quot;,&lt;br /&gt;
  enabled = false,&lt;br /&gt;
  energy_required = 5,&lt;br /&gt;
  icon = &amp;quot;__base__/graphics/icons/fluid/coal-liquefaction.png&amp;quot;,&lt;br /&gt;
  icon_size = 32,&lt;br /&gt;
  ingredients =&lt;br /&gt;
  {&lt;br /&gt;
    {type=&amp;quot;item&amp;quot;, name=&amp;quot;coal&amp;quot;, amount=10},&lt;br /&gt;
    {type=&amp;quot;fluid&amp;quot;, name=&amp;quot;heavy-oil&amp;quot;, amount=25},&lt;br /&gt;
    {type=&amp;quot;fluid&amp;quot;, name=&amp;quot;steam&amp;quot;, amount=50}&lt;br /&gt;
  },&lt;br /&gt;
  results=&lt;br /&gt;
  {&lt;br /&gt;
    {type=&amp;quot;fluid&amp;quot;, name=&amp;quot;heavy-oil&amp;quot;, amount=35},&lt;br /&gt;
    {type=&amp;quot;fluid&amp;quot;, name=&amp;quot;light-oil&amp;quot;, amount=15},&lt;br /&gt;
    {type=&amp;quot;fluid&amp;quot;, name=&amp;quot;petroleum-gas&amp;quot;, amount=20}&lt;br /&gt;
  },&lt;br /&gt;
  allow_decomposition = false&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;iron-gear-wheel&amp;quot; — recipe with difficulty ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;  {&lt;br /&gt;
    type = &amp;quot;recipe&amp;quot;,&lt;br /&gt;
    name = &amp;quot;iron-gear-wheel&amp;quot;,&lt;br /&gt;
    normal =&lt;br /&gt;
    {&lt;br /&gt;
      ingredients = {{&amp;quot;iron-plate&amp;quot;, 2}},&lt;br /&gt;
      result = &amp;quot;iron-gear-wheel&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    expensive =&lt;br /&gt;
    {&lt;br /&gt;
      ingredients = {{&amp;quot;iron-plate&amp;quot;, 4}},&lt;br /&gt;
      result = &amp;quot;iron-gear-wheel&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Modified so that it cannot be crafted in normal mode, unless unlocked via command/research ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;  {&lt;br /&gt;
    type = &amp;quot;recipe&amp;quot;,&lt;br /&gt;
    name = &amp;quot;iron-gear-wheel&amp;quot;,&lt;br /&gt;
    normal = false,&lt;br /&gt;
    expensive =&lt;br /&gt;
    {&lt;br /&gt;
      ingredients = {{&amp;quot;iron-plate&amp;quot;, 4}},&lt;br /&gt;
      result = &amp;quot;iron-gear-wheel&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Modified so that the expensive recipe is always used, even in normal mode ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;  {&lt;br /&gt;
    type = &amp;quot;recipe&amp;quot;,&lt;br /&gt;
    name = &amp;quot;iron-gear-wheel&amp;quot;,&lt;br /&gt;
    normal = nil, --this line can be omitted&lt;br /&gt;
    expensive =&lt;br /&gt;
    {&lt;br /&gt;
      ingredients = {{&amp;quot;iron-plate&amp;quot;, 4}},&lt;br /&gt;
      result = &amp;quot;iron-gear-wheel&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Justarandomgeek</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Mod_images_API&amp;diff=190010</id>
		<title>Mod images API</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Mod_images_API&amp;diff=190010"/>
		<updated>2022-09-21T16:48:11Z</updated>

		<summary type="html">&lt;p&gt;Justarandomgeek: table formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div align=&amp;quot;center&amp;quot; class=&amp;quot;stub&amp;quot;&amp;gt;&#039;&#039;&#039;Category:&#039;&#039;&#039; [[Factorio_HTTP_API_usage_guidelines#Public|Public API]]&amp;lt;/div&amp;gt;&lt;br /&gt;
The mod images API is used to add, reorder or remove mod images on the Factorio mod portal. It requires an API key with the &amp;lt;code&amp;gt;ModPortal: Edit Mods&amp;lt;/code&amp;gt; usage, which can be created on https://factorio.com/profile. &lt;br /&gt;
&lt;br /&gt;
It accepts &amp;lt;code&amp;gt;multipart/form-data&amp;lt;/code&amp;gt; HTTP requests and responds with JSON encoded objects.&lt;br /&gt;
&lt;br /&gt;
== Endpoints ==&lt;br /&gt;
&lt;br /&gt;
=== add ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| URL || https://mods.factorio.com/api/v2/mods/images/add&lt;br /&gt;
|-&lt;br /&gt;
| HTTP Method || &amp;lt;code&amp;gt;POST&amp;lt;/code&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
HTTP Request Header&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Authorization|| &amp;lt;code&amp;gt;Bearer $APIKey&amp;lt;/code&amp;gt; || Authorization header with the APIKey and a &amp;quot;Bearer &amp;quot; prefix -&amp;gt; &amp;quot;Bearer $APIKey&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
HTTP Request Body&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| mod || string || Name of the mod, for which a new image will be uploaded&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
JSON object response&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| upload_url || string || URL the image should be uploaded to&lt;br /&gt;
|-&lt;br /&gt;
| error || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; requests.&lt;br /&gt;
|-&lt;br /&gt;
| message || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; requests. Has details about the problem.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== finish_upload ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| URL || &amp;lt;code&amp;gt;$upload_url&amp;lt;/code&amp;gt; URL returned by the add endpoint&lt;br /&gt;
|-&lt;br /&gt;
| HTTP Method || &amp;lt;code&amp;gt;POST&amp;lt;/code&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
HTTP Request Body&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| image || Image file&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
JSON object response&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| id || string || This attribute only appears on &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; uploads. SHA1 of the uploaded image.&lt;br /&gt;
|-&lt;br /&gt;
| url || bool || This attribute only appears on &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; uploads. Url of the uploaded image.&lt;br /&gt;
|-&lt;br /&gt;
| thumbnail || bool || This attribute only appears on &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; uploads. Url of thumbnail of the uploaded image.&lt;br /&gt;
|-&lt;br /&gt;
| error || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; uploads.&lt;br /&gt;
|-&lt;br /&gt;
| message || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; uploads. Has details about the problem.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== edit ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| URL || https://mods.factorio.com/api/v2/mods/images/edit&lt;br /&gt;
|-&lt;br /&gt;
| HTTP Method || &amp;lt;code&amp;gt;POST&amp;lt;/code&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
HTTP Request Header&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Authorization|| &amp;lt;code&amp;gt;Bearer $APIKey&amp;lt;/code&amp;gt; || Authorization header with the APIKey and a &amp;quot;Bearer &amp;quot; prefix -&amp;gt; &amp;quot;Bearer $APIKey&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
HTTP Request Body&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| mod || string || Name of the mod, for which a new image will be uploaded&lt;br /&gt;
|-&lt;br /&gt;
| images || string || List of comma-seperated image ids that should be displayed on the mod page&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
JSON object response&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| success || bool || This attribute only appears on &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; uploads. It&#039;s set to true.&lt;br /&gt;
|-&lt;br /&gt;
| images || list || This attribute only appears on &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; uploads. List of objects with id, url and thumbnail attribute same as finish_upload endpoint.&lt;br /&gt;
|-&lt;br /&gt;
| error || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; uploads.&lt;br /&gt;
|-&lt;br /&gt;
| message || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; uploads. Has details about the problem.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Possible API Error Responses ==&lt;br /&gt;
Possible values for the &amp;lt;code&amp;gt;error&amp;lt;/code&amp;gt; property of API responses&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| InvalidApiKey || Missing or invalid API key for the current endpoint&lt;br /&gt;
|-&lt;br /&gt;
| InvalidRequest || Invalid request.&lt;br /&gt;
|-&lt;br /&gt;
| InternalError || Internal error, please try again later.&lt;br /&gt;
|-&lt;br /&gt;
| Forbidden || Insufficent permission for current endpoint&lt;br /&gt;
|-&lt;br /&gt;
| Unknown || Unknown error, please try again later.&lt;br /&gt;
|-&lt;br /&gt;
| InvalidImageUpload || Invalid image file uploaded.&lt;br /&gt;
|-&lt;br /&gt;
| UnknownMod || Mod does not exist in mod portal&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Python Examples ==&lt;br /&gt;
=== Add Image ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
import requests&lt;br /&gt;
from os import getenv&lt;br /&gt;
&lt;br /&gt;
MOD_PORTAL_URL = &amp;quot;https://mods.factorio.com&amp;quot;&lt;br /&gt;
INIT_UPLOAD_URL = f&amp;quot;{MOD_PORTAL_URL}/api/v2/mods/images/add&amp;quot;&lt;br /&gt;
&lt;br /&gt;
apikey = getenv(&amp;quot;MOD_EDIT_API_KEY&amp;quot;)&lt;br /&gt;
modname = sys.argv[1]&lt;br /&gt;
filepath = sys.argv[2]&lt;br /&gt;
&lt;br /&gt;
request_body = data = {&amp;quot;mod&amp;quot;: modname}&lt;br /&gt;
request_headers = {&amp;quot;Authorization&amp;quot;: f&amp;quot;Bearer {apikey}&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
response = requests.post(INIT_UPLOAD_URL, data=request_body, headers=request_headers)&lt;br /&gt;
&lt;br /&gt;
if not response.ok:&lt;br /&gt;
    print(f&amp;quot;init_upload failed: {response.text}&amp;quot;)&lt;br /&gt;
    sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
upload_url = response.json()[&amp;quot;upload_url&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
with open(filepath, &amp;quot;rb&amp;quot;) as f:&lt;br /&gt;
    request_body = {&amp;quot;image&amp;quot;: f}&lt;br /&gt;
    response = requests.post(upload_url, files=request_body)&lt;br /&gt;
&lt;br /&gt;
if not response.ok:&lt;br /&gt;
    print(f&amp;quot;upload failed: {response.text}&amp;quot;)&lt;br /&gt;
    sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
print(f&amp;quot;upload successful: {response.text}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Edit Images ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
import requests&lt;br /&gt;
from os import getenv&lt;br /&gt;
&lt;br /&gt;
MOD_PORTAL_URL = &amp;quot;https://mods.factorio.com&amp;quot;&lt;br /&gt;
EDIT_MOD_URL = f&amp;quot;{MOD_PORTAL_URL}/api/v2/mods/images/edit&amp;quot;&lt;br /&gt;
&lt;br /&gt;
apikey = getenv(&amp;quot;MOD_EDIT_API_KEY&amp;quot;)&lt;br /&gt;
modname = getenv(&amp;quot;MOD_NAME&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
image_ids = [&amp;quot;fdc375d5ca3c263fedafb7ef143c82f9fb668472&amp;quot;, &amp;quot;47bda5cd27ef49fe86fe03f803cb5c351a848586&amp;quot;]&lt;br /&gt;
image_ids_text = &amp;quot;,&amp;quot;.join(image_ids)&lt;br /&gt;
&lt;br /&gt;
request_body = data = {&amp;quot;mod&amp;quot;: modname, &amp;quot;images&amp;quot;: image_ids_text}&lt;br /&gt;
request_headers = {&amp;quot;Authorization&amp;quot;: f&amp;quot;Bearer {apikey}&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
response = requests.post(EDIT_MOD_URL, data=request_body, headers=request_headers)&lt;br /&gt;
&lt;br /&gt;
if not response.ok:&lt;br /&gt;
    print(f&amp;quot;edit failed: {response.text}&amp;quot;)&lt;br /&gt;
    sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
print(f&amp;quot;edit successful: {response.text}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Languages}}[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Justarandomgeek</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Mod_details_API&amp;diff=190008</id>
		<title>Mod details API</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Mod_details_API&amp;diff=190008"/>
		<updated>2022-09-21T14:17:41Z</updated>

		<summary type="html">&lt;p&gt;Justarandomgeek: another one&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div align=&amp;quot;center&amp;quot; class=&amp;quot;stub&amp;quot;&amp;gt;&#039;&#039;&#039;Category:&#039;&#039;&#039; [[Factorio_HTTP_API_usage_guidelines#Public|Public API]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The mod details API is used to change mod information like the description on the Factorio mod portal. It requires an API key with the &amp;lt;code&amp;gt;ModPortal: Edit Mods&amp;lt;/code&amp;gt; usage, which can be created on https://factorio.com/profile. &lt;br /&gt;
&lt;br /&gt;
It accepts &amp;lt;code&amp;gt;multipart/form-data&amp;lt;/code&amp;gt; HTTP requests and responds with JSON encoded objects.&lt;br /&gt;
&lt;br /&gt;
== Endpoint ==&lt;br /&gt;
=== edit_details ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| URL || https://mods.factorio.com/api/v2/mods/edit_details &lt;br /&gt;
|-&lt;br /&gt;
| HTTP Method || &amp;lt;code&amp;gt;POST&amp;lt;/code&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HTTP Request Header&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Authorization|| &amp;lt;code&amp;gt;Bearer $APIKey&amp;lt;/code&amp;gt; || Authorization header with the APIKey and a &amp;quot;Bearer &amp;quot; prefix -&amp;gt; &amp;quot;Bearer $APIKey&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HTTP Request Body&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| mod || string, mandatory || Internal name of the mod whose details are to be changed&lt;br /&gt;
|-&lt;br /&gt;
| title || string, optional || Display name of the mod&lt;br /&gt;
|-&lt;br /&gt;
| summary || string, optional || Short description of the mod&lt;br /&gt;
|-&lt;br /&gt;
| description || string, optional || Long description of the mod in markdown format&lt;br /&gt;
|-&lt;br /&gt;
| category || enum, optional || Mod category, see [[#Category]]&lt;br /&gt;
|-&lt;br /&gt;
| license || enum, optional || Mod license, see [[#License]]&lt;br /&gt;
|-&lt;br /&gt;
| homepage || string, optional || URL of mod homepage&lt;br /&gt;
|-&lt;br /&gt;
| deprecated || bool, optional || Deprecated flag to hide mod from public listings&lt;br /&gt;
|-&lt;br /&gt;
| source_url || string, optional || URL of mod source code repository&lt;br /&gt;
|-&lt;br /&gt;
| faq || string, optional || FAQ for the mod in markdown format&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
JSON object response&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| success || bool || This attribute only appears for &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; requests. It&#039;s set to true.&lt;br /&gt;
|-&lt;br /&gt;
| url || string || This attribute only appears for &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; requests. URL path to get mod details endpoint&lt;br /&gt;
|-&lt;br /&gt;
| error || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; requests.&lt;br /&gt;
|-&lt;br /&gt;
| message || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; requests. Has details about the problem.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Possible API Error Responses ==&lt;br /&gt;
Possible values for the &amp;lt;code&amp;gt;error&amp;lt;/code&amp;gt; property of API responses&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| InvalidApiKey || Missing or invalid API key for the current endpoint&lt;br /&gt;
|-&lt;br /&gt;
| InvalidRequest || Invalid request.&lt;br /&gt;
|-&lt;br /&gt;
| InternalError || Internal error, please try again later.&lt;br /&gt;
|-&lt;br /&gt;
| Forbidden || Insufficent permission for current endpoint&lt;br /&gt;
|-&lt;br /&gt;
| Unknown || Unknown error, please try again later.&lt;br /&gt;
|-&lt;br /&gt;
| UnknownMod || Mod does not exist in mod portal&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
== Enums ==&lt;br /&gt;
=== Category ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description&lt;br /&gt;
|- &lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;empty string&amp;gt;&amp;lt;/code&amp;gt;|| No category ||&lt;br /&gt;
|- &lt;br /&gt;
|&amp;lt;code&amp;gt;general&amp;lt;/code&amp;gt;|| General || Mods that cannot be sorted into other categories&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;non-game-changing&amp;lt;/code&amp;gt;|| Non-Game-Changing || Changes only look&amp;amp;feel. New graphics, new sounds, etc.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;helper-mods&amp;lt;/code&amp;gt;|| Helper Mods || These mods are not game-changing, but enhance the gameplay by helping you with useful functions. Mods like showing the current game-time, keep track over your resources, rail-laying...&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;transportation&amp;lt;/code&amp;gt;|| Transportation || Player transport&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;logistics&amp;lt;/code&amp;gt;|| Logistics || Transport of materials&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;utility&amp;lt;/code&amp;gt;|| Utility || Helps with certain things the player is doing.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;balancing&amp;lt;/code&amp;gt;|| Balancing || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;weapons&amp;lt;/code&amp;gt;|| Weapons || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;enemies&amp;lt;/code&amp;gt;|| Enemies || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;armor&amp;lt;/code&amp;gt;|| Armor || Armors or armor equipment related.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;oil&amp;lt;/code&amp;gt;|| Oil || Things related to oil related manufacture&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;logistic-network&amp;lt;/code&amp;gt;|| Logistic network || Related to roboports and logistic robots&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;circuit-network&amp;lt;/code&amp;gt;|| Circuit network || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;storage&amp;lt;/code&amp;gt;|| Storage || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;power-production&amp;lt;/code&amp;gt;|| Power production || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;manufacture&amp;lt;/code&amp;gt;|| Manufacture || Furnaces, assembling machines, production chains&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;blueprints&amp;lt;/code&amp;gt;|| Blueprints || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cheats&amp;lt;/code&amp;gt;|| Cheats || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;defense&amp;lt;/code&amp;gt;|| Defense || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;mining&amp;lt;/code&amp;gt;|| Mining || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;environment&amp;lt;/code&amp;gt;|| Environment || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;info&amp;lt;/code&amp;gt;|| Info || Mods that provide additional information to the player&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;trains&amp;lt;/code&amp;gt;|| Trains || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;big-mods&amp;lt;/code&amp;gt;|| Big mods || Too big and/or changes too much of the game to be fit anywhere else&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;scenarios&amp;lt;/code&amp;gt;|| Scenarios || Story mode campaigns on a premade map&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;mod-packs&amp;lt;/code&amp;gt;|| Mod packs || Collections of mods with tweaks to make them work together!&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;libraries&amp;lt;/code&amp;gt;|| Libraries || Mods used by other mods&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
=== License ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description !! URL&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_mit&amp;lt;/code&amp;gt;|| MIT || A permissive license that is short and to the point. It lets people do anything with your code with proper attribution and without warranty. || https://opensource.org/licenses/MIT&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_gnugplv3&amp;lt;/code&amp;gt;|| GNU GPLv3 || The GNU GPL is the most widely used free software license and has a strong copyleft requirement. When distributing derived works, the source code of the work must be made available under the same license. || https://opensource.org/licenses/gpl-3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_gnulgplv3&amp;lt;/code&amp;gt;|| GNU LGPLv3 || Version 3 of the GNU LGPL is an additional set of permissions to the GNU GPLv3 license that requires that derived works be licensed under the same license, but works that only link to it do not fall under this restriction. || https://opensource.org/licenses/lgpl-3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_mozilla2&amp;lt;/code&amp;gt;|| Mozilla Public License 2.0 || The Mozilla Public License (MPL 2.0) is maintained by the Mozilla foundation. This license attempts to be a compromise between the permissive BSD license and the reciprocal GPL license. || https://opensource.org/licenses/mpl-2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_apache2&amp;lt;/code&amp;gt;|| Apache License 2.0 || A permissive license that also provides an express grant of patent rights from contributors to users. || https://opensource.org/licenses/apache-2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_unlicense&amp;lt;/code&amp;gt;|| The Unlicense (Public Domain) || Because copyright is automatic in most countries, the Unlicense is a template to waive copyright interest in software you&#039;ve written and dedicate it to the public domain. Use the Unlicense to opt out of copyright entirely. It also includes the no-warranty statement from the MIT/X11 license. || http://unlicense.org/&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;custom_$ID&amp;lt;/code&amp;gt;|| Custom || Custom license. The ID can be taken from the edit URL on the &amp;quot;My licenses&amp;quot; page on the mod portal. &amp;lt;code&amp;gt;mods.factorio.com/licenses/edit/$ID&amp;lt;/code&amp;gt; || https://mods.factorio.com/licenses&lt;br /&gt;
|}&lt;br /&gt;
== Python Example ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
import requests&lt;br /&gt;
from os import getenv&lt;br /&gt;
&lt;br /&gt;
MOD_PORTAL_URL = &amp;quot;https://mods.factorio.com&amp;quot;&lt;br /&gt;
EDIT_MOD_URL = f&amp;quot;{MOD_PORTAL_URL}/api/v2/mods/edit_details&amp;quot;&lt;br /&gt;
&lt;br /&gt;
apikey = getenv(&amp;quot;MOD_EDIT_API_KEY&amp;quot;)&lt;br /&gt;
modname = getenv(&amp;quot;MOD_NAME&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
request_body = data = {&amp;quot;mod&amp;quot;: modname, &amp;quot;faq&amp;quot;: &amp;quot;# hello world&amp;quot;}&lt;br /&gt;
request_headers = {&amp;quot;Authorization&amp;quot;: f&amp;quot;Bearer {apikey}&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
response = requests.post(EDIT_MOD_URL, data=request_body, headers=request_headers)&lt;br /&gt;
&lt;br /&gt;
if not response.ok:&lt;br /&gt;
    print(f&amp;quot;edit failed: {response.text}&amp;quot;)&lt;br /&gt;
    sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
print(f&amp;quot;edit successful: {response.text}&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Languages}}[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Justarandomgeek</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Mod_details_API&amp;diff=190007</id>
		<title>Mod details API</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Mod_details_API&amp;diff=190007"/>
		<updated>2022-09-21T14:17:15Z</updated>

		<summary type="html">&lt;p&gt;Justarandomgeek: typo strong -&amp;gt; string&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div align=&amp;quot;center&amp;quot; class=&amp;quot;stub&amp;quot;&amp;gt;&#039;&#039;&#039;Category:&#039;&#039;&#039; [[Factorio_HTTP_API_usage_guidelines#Public|Public API]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The mod details API is used to change mod information like the description on the Factorio mod portal. It requires an API key with the &amp;lt;code&amp;gt;ModPortal: Edit Mods&amp;lt;/code&amp;gt; usage, which can be created on https://factorio.com/profile. &lt;br /&gt;
&lt;br /&gt;
It accepts &amp;lt;code&amp;gt;multipart/form-data&amp;lt;/code&amp;gt; HTTP requests and responds with JSON encoded objects.&lt;br /&gt;
&lt;br /&gt;
== Endpoint ==&lt;br /&gt;
=== edit_details ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| URL || https://mods.factorio.com/api/v2/mods/edit_details &lt;br /&gt;
|-&lt;br /&gt;
| HTTP Method || &amp;lt;code&amp;gt;POST&amp;lt;/code&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HTTP Request Header&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Authorization|| &amp;lt;code&amp;gt;Bearer $APIKey&amp;lt;/code&amp;gt; || Authorization header with the APIKey and a &amp;quot;Bearer &amp;quot; prefix -&amp;gt; &amp;quot;Bearer $APIKey&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HTTP Request Body&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| mod || string, mandatory || Internal name of the mod whose details are to be changed&lt;br /&gt;
|-&lt;br /&gt;
| title || string, optional || Display name of the mod&lt;br /&gt;
|-&lt;br /&gt;
| summary || string, optional || Short description of the mod&lt;br /&gt;
|-&lt;br /&gt;
| description || string, optional || Long description of the mod in markdown format&lt;br /&gt;
|-&lt;br /&gt;
| category || enum, optional || Mod category, see [[#Category]]&lt;br /&gt;
|-&lt;br /&gt;
| license || enum, optional || Mod license, see [[#License]]&lt;br /&gt;
|-&lt;br /&gt;
| homepage || string, optional || URL of mod homepage&lt;br /&gt;
|-&lt;br /&gt;
| deprecated || bool, optional || Deprecated flag to hide mod from public listings&lt;br /&gt;
|-&lt;br /&gt;
| source_url || strong, optional || URL of mod source code repository&lt;br /&gt;
|-&lt;br /&gt;
| faq || string, optional || FAQ for the mod in markdown format&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
JSON object response&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| success || bool || This attribute only appears for &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; requests. It&#039;s set to true.&lt;br /&gt;
|-&lt;br /&gt;
| url || string || This attribute only appears for &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; requests. URL path to get mod details endpoint&lt;br /&gt;
|-&lt;br /&gt;
| error || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; requests.&lt;br /&gt;
|-&lt;br /&gt;
| message || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; requests. Has details about the problem.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Possible API Error Responses ==&lt;br /&gt;
Possible values for the &amp;lt;code&amp;gt;error&amp;lt;/code&amp;gt; property of API responses&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| InvalidApiKey || Missing or invalid API key for the current endpoint&lt;br /&gt;
|-&lt;br /&gt;
| InvalidRequest || Invalid request.&lt;br /&gt;
|-&lt;br /&gt;
| InternalError || Internal error, please try again later.&lt;br /&gt;
|-&lt;br /&gt;
| Forbidden || Insufficent permission for current endpoint&lt;br /&gt;
|-&lt;br /&gt;
| Unknown || Unknown error, please try again later.&lt;br /&gt;
|-&lt;br /&gt;
| UnknownMod || Mod does not exist in mod portal&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
== Enums ==&lt;br /&gt;
=== Category ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description&lt;br /&gt;
|- &lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;empty string&amp;gt;&amp;lt;/code&amp;gt;|| No category ||&lt;br /&gt;
|- &lt;br /&gt;
|&amp;lt;code&amp;gt;general&amp;lt;/code&amp;gt;|| General || Mods that cannot be sorted into other categories&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;non-game-changing&amp;lt;/code&amp;gt;|| Non-Game-Changing || Changes only look&amp;amp;feel. New graphics, new sounds, etc.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;helper-mods&amp;lt;/code&amp;gt;|| Helper Mods || These mods are not game-changing, but enhance the gameplay by helping you with useful functions. Mods like showing the current game-time, keep track over your resources, rail-laying...&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;transportation&amp;lt;/code&amp;gt;|| Transportation || Player transport&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;logistics&amp;lt;/code&amp;gt;|| Logistics || Transport of materials&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;utility&amp;lt;/code&amp;gt;|| Utility || Helps with certain things the player is doing.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;balancing&amp;lt;/code&amp;gt;|| Balancing || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;weapons&amp;lt;/code&amp;gt;|| Weapons || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;enemies&amp;lt;/code&amp;gt;|| Enemies || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;armor&amp;lt;/code&amp;gt;|| Armor || Armors or armor equipment related.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;oil&amp;lt;/code&amp;gt;|| Oil || Things related to oil related manufacture&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;logistic-network&amp;lt;/code&amp;gt;|| Logistic network || Related to roboports and logistic robots&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;circuit-network&amp;lt;/code&amp;gt;|| Circuit network || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;storage&amp;lt;/code&amp;gt;|| Storage || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;power-production&amp;lt;/code&amp;gt;|| Power production || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;manufacture&amp;lt;/code&amp;gt;|| Manufacture || Furnaces, assembling machines, production chains&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;blueprints&amp;lt;/code&amp;gt;|| Blueprints || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cheats&amp;lt;/code&amp;gt;|| Cheats || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;defense&amp;lt;/code&amp;gt;|| Defense || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;mining&amp;lt;/code&amp;gt;|| Mining || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;environment&amp;lt;/code&amp;gt;|| Environment || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;info&amp;lt;/code&amp;gt;|| Info || Mods that provide additional information to the player&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;trains&amp;lt;/code&amp;gt;|| Trains || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;big-mods&amp;lt;/code&amp;gt;|| Big mods || Too big and/or changes too much of the game to be fit anywhere else&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;scenarios&amp;lt;/code&amp;gt;|| Scenarios || Story mode campaigns on a premade map&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;mod-packs&amp;lt;/code&amp;gt;|| Mod packs || Collections of mods with tweaks to make them work together!&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;libraries&amp;lt;/code&amp;gt;|| Libraries || Mods used by other mods&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
=== License ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description !! URL&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_mit&amp;lt;/code&amp;gt;|| MIT || A permissive license that is short and to the point. It lets people do anything with your code with proper attribution and without warranty. || https://opensource.org/licenses/MIT&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_gnugplv3&amp;lt;/code&amp;gt;|| GNU GPLv3 || The GNU GPL is the most widely used free software license and has a strong copyleft requirement. When distributing derived works, the source code of the work must be made available under the same license. || https://opensource.org/licenses/gpl-3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_gnulgplv3&amp;lt;/code&amp;gt;|| GNU LGPLv3 || Version 3 of the GNU LGPL is an additional set of permissions to the GNU GPLv3 license that requires that derived works be licensed under the same license, but works that only link to it do not fall under this restriction. || https://opensource.org/licenses/lgpl-3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_mozilla2&amp;lt;/code&amp;gt;|| Mozilla Public License 2.0 || The Mozilla Public License (MPL 2.0) is maintained by the Mozilla foundation. This license attempts to be a compromise between the permissive BSD license and the reciprocal GPL license. || https://opensource.org/licenses/mpl-2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_apache2&amp;lt;/code&amp;gt;|| Apache License 2.0 || A permissive license that also provides an express grant of patent rights from contributors to users. || https://opensource.org/licenses/apache-2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_unlicense&amp;lt;/code&amp;gt;|| The Unlicense (Public Domain) || Because copyright is automatic in most countries, the Unlicense is a template to waive copyright interest in software you&#039;ve written and dedicate it to the public domain. Use the Unlicense to opt out of copyright entirely. It also includes the no-warranty statement from the MIT/X11 license. || http://unlicense.org/&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;custom_$ID&amp;lt;/code&amp;gt;|| Custom || Custom license. The ID can be taken from the edit URL on the &amp;quot;My licenses&amp;quot; page on the mod portal. &amp;lt;code&amp;gt;mods.factorio.com/licenses/edit/$ID&amp;lt;/code&amp;gt; || https://mods.factorio.com/licenses&lt;br /&gt;
|}&lt;br /&gt;
== Python Example ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
import requests&lt;br /&gt;
from os import getenv&lt;br /&gt;
&lt;br /&gt;
MOD_PORTAL_URL = &amp;quot;https://mods.factorio.com&amp;quot;&lt;br /&gt;
EDIT_MOD_URL = f&amp;quot;{MOD_PORTAL_URL}/api/v2/mods/edit_details&amp;quot;&lt;br /&gt;
&lt;br /&gt;
apikey = getenv(&amp;quot;MOD_EDIT_API_KEY&amp;quot;)&lt;br /&gt;
modname = getenv(&amp;quot;MOD_NAME&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
request_body = data = {&amp;quot;mod&amp;quot;: modname, &amp;quot;faq&amp;quot;: &amp;quot;# hello world&amp;quot;}&lt;br /&gt;
request_headers = {&amp;quot;Authorization&amp;quot;: f&amp;quot;Bearer {apikey}&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
response = requests.post(EDIT_MOD_URL, data=request_body, headers=request_headers)&lt;br /&gt;
&lt;br /&gt;
if not response.ok:&lt;br /&gt;
    print(f&amp;quot;edit failed: {response.text}&amp;quot;)&lt;br /&gt;
    sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
print(f&amp;quot;edit successful: {response.text}&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Languages}}[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Justarandomgeek</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Types/Color&amp;diff=181836</id>
		<title>Types/Color</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Types/Color&amp;diff=181836"/>
		<updated>2020-08-29T14:52:30Z</updated>

		<summary type="html">&lt;p&gt;Justarandomgeek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Table of red, green, blue, and alpha float values between 0 and 1. All values are optional, default optional value for colors is 0, for alpha 1. Alternatively, values can be from 0-255, they are interpreted as such if at least one of value is &amp;gt; 1.&amp;lt;br&amp;gt;&lt;br /&gt;
Color allows the short-hand notation of passing an array of exactly 3 or 4 numbers.&amp;lt;br&amp;gt;&lt;br /&gt;
The game usually expects colors to be in pre-multiplied form (color channels are pre-multiplied by alpha).&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! name !! meaning !! type&lt;br /&gt;
|-&lt;br /&gt;
| r || [optional, default 0] red value || [[Types/float|float]]&lt;br /&gt;
|-&lt;br /&gt;
| g || [optional, default 0] green value || [[Types/float|float]]&lt;br /&gt;
|-&lt;br /&gt;
| b || [optional, default 0] blue value || [[Types/float|float]]&lt;br /&gt;
|-&lt;br /&gt;
| a || [optional, default 1] alpha value - transparency || [[Types/float|float]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
    color = {r=1, g=0, b=0, a=0.5} -- red&lt;br /&gt;
    color = {r=1, a=0.5} -- the same red, omitting 0 colors&lt;br /&gt;
    color = {1, 0, 0, 0.5} -- also the same red&lt;br /&gt;
    color = {0, 0, 1} -- blue&lt;br /&gt;
    color = {} -- black&lt;/div&gt;</summary>
		<author><name>Justarandomgeek</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Types/TileTransitions&amp;diff=179985</id>
		<title>Types/TileTransitions</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Types/TileTransitions&amp;diff=179985"/>
		<updated>2020-05-29T04:55:08Z</updated>

		<summary type="html">&lt;p&gt;Justarandomgeek: /* Mandatory properties */ empty_transitions was listed inverted&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Basics ==&lt;br /&gt;
Used for tile graphics.&lt;br /&gt;
&lt;br /&gt;
== Mandatory properties ==&lt;br /&gt;
&lt;br /&gt;
=== side ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/TileTransitionSprite]]&lt;br /&gt;
&lt;br /&gt;
This or side_mask needs to be specified if &amp;lt;code&amp;gt;empty_transitions&amp;lt;/code&amp;gt; is not true.&lt;br /&gt;
&lt;br /&gt;
=== side_mask ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/TileTransitionSprite]]&lt;br /&gt;
&lt;br /&gt;
This or side needs to be specified if &amp;lt;code&amp;gt;empty_transitions&amp;lt;/code&amp;gt; is not true.&lt;br /&gt;
&lt;br /&gt;
=== inner_corner ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/TileTransitionSprite]]&lt;br /&gt;
&lt;br /&gt;
This or inner_corner_mask needs to be specified if &amp;lt;code&amp;gt;empty_transitions&amp;lt;/code&amp;gt; is not true.&lt;br /&gt;
&lt;br /&gt;
=== inner_corner_mask ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/TileTransitionSprite]]&lt;br /&gt;
&lt;br /&gt;
This or inner_corner needs to be specified if &amp;lt;code&amp;gt;empty_transitions&amp;lt;/code&amp;gt; is not true.&lt;br /&gt;
&lt;br /&gt;
=== outer_corner ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/TileTransitionSprite]]&lt;br /&gt;
&lt;br /&gt;
This or outer_corner_mask needs to be specified if &amp;lt;code&amp;gt;empty_transitions&amp;lt;/code&amp;gt; is not true.&lt;br /&gt;
&lt;br /&gt;
=== outer_corner_mask ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/TileTransitionSprite]]&lt;br /&gt;
&lt;br /&gt;
This or outer_corner needs to be specified if &amp;lt;code&amp;gt;empty_transitions&amp;lt;/code&amp;gt; is not true.&lt;br /&gt;
&lt;br /&gt;
== Optional properties ==&lt;br /&gt;
&lt;br /&gt;
=== empty_transitions ===&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;
=== side_background ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/TileTransitionSprite]]&lt;br /&gt;
&lt;br /&gt;
=== side_background_mask ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/TileTransitionSprite]]&lt;br /&gt;
&lt;br /&gt;
=== side_effect_map ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/TileTransitionSprite]]&lt;br /&gt;
&lt;br /&gt;
=== side_weights ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/table]] of [[Types/float]]&lt;br /&gt;
&lt;br /&gt;
=== inner_corner_background ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/TileTransitionSprite]]&lt;br /&gt;
&lt;br /&gt;
=== inner_corner_background_mask ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/TileTransitionSprite]]&lt;br /&gt;
&lt;br /&gt;
=== inner_corner_effect_map ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/TileTransitionSprite]]&lt;br /&gt;
&lt;br /&gt;
=== inner_corner_weights ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/table]] of [[Types/float]]&lt;br /&gt;
&lt;br /&gt;
=== outer_corner_background ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/TileTransitionSprite]]&lt;br /&gt;
&lt;br /&gt;
=== outer_corner_background_mask ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/TileTransitionSprite]]&lt;br /&gt;
&lt;br /&gt;
=== outer_corner_effect_map ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/TileTransitionSprite]]&lt;br /&gt;
&lt;br /&gt;
=== outer_corner_weights ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/table]] of [[Types/float]]&lt;br /&gt;
&lt;br /&gt;
=== u_transition ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/TileTransitionSprite]]&lt;br /&gt;
&lt;br /&gt;
=== u_transition_mask ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/TileTransitionSprite]]&lt;br /&gt;
&lt;br /&gt;
=== u_transition_background ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/TileTransitionSprite]]&lt;br /&gt;
&lt;br /&gt;
=== u_transition_background_mask ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/TileTransitionSprite]]&lt;br /&gt;
&lt;br /&gt;
=== u_transition_effect_map ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/TileTransitionSprite]]&lt;br /&gt;
&lt;br /&gt;
=== u_transition_weights ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/table]] of [[Types/float]]&lt;br /&gt;
&lt;br /&gt;
=== o_transition ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/TileSprite]]&lt;br /&gt;
&lt;br /&gt;
=== o_transition_mask ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/TileSprite]]&lt;br /&gt;
&lt;br /&gt;
=== o_transition_background ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/TileSprite]]&lt;br /&gt;
&lt;br /&gt;
=== o_transition_background_mask ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/TileSprite]]&lt;br /&gt;
&lt;br /&gt;
=== o_transition_effect_map ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/TileSprite]]&lt;br /&gt;
&lt;br /&gt;
=== water_patch ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/Sprite]]&lt;br /&gt;
&lt;br /&gt;
=== effect_mask ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/Animation]]&lt;br /&gt;
&lt;br /&gt;
=== layer ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/uint8]]&lt;br /&gt;
&lt;br /&gt;
=== overlay_layer_group ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/string]]&lt;br /&gt;
&lt;br /&gt;
One of &amp;quot;zero&amp;quot;, &amp;quot;water&amp;quot;, &amp;quot;water-overlay&amp;quot;, &amp;quot;ground&amp;quot; and &amp;quot;top&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== background_layer_group ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/string]]&lt;br /&gt;
&lt;br /&gt;
One of &amp;quot;zero&amp;quot;, &amp;quot;water&amp;quot;, &amp;quot;water-overlay&amp;quot;, &amp;quot;ground&amp;quot; and &amp;quot;top&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== overlay_layer_offset ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/int8]]&lt;br /&gt;
&lt;br /&gt;
=== masked_overlay_layer_offset ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/int8]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Default&#039;&#039;&#039;: 0&lt;br /&gt;
&lt;br /&gt;
=== background_layer_offset ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/int8]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Default&#039;&#039;&#039;: 0&lt;br /&gt;
&lt;br /&gt;
=== masked_background_layer_offset ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/int8]]&lt;br /&gt;
&lt;br /&gt;
=== apply_effect_color_to_overlay ===&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;
=== offset_background_layer_by_tile_layer ===&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;/div&gt;</summary>
		<author><name>Justarandomgeek</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Version_history/0.15.0&amp;diff=179984</id>
		<title>Version history/0.15.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Version_history/0.15.0&amp;diff=179984"/>
		<updated>2020-05-29T02:31:50Z</updated>

		<summary type="html">&lt;p&gt;Justarandomgeek: spelling&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Please don&#039;t waste your time updating this page, User:Gangsir can do it automatically.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
== 0.15.40 ==&lt;br /&gt;
Date: 29. 11. 2017&lt;br /&gt;
=== Locale ===&lt;br /&gt;
* Fixed Chinese translations.&lt;br /&gt;
&lt;br /&gt;
== 0.15.39 ==&lt;br /&gt;
Date: 27. 11. 2017&lt;br /&gt;
=== Bugfixes ===&lt;br /&gt;
* Fixed corrupted Windows release. ([https://forums.factorio.com/54184 more])&lt;br /&gt;
&lt;br /&gt;
== 0.15.38 ==&lt;br /&gt;
Date: 24. 11. 2017&lt;br /&gt;
=== Features ===&lt;br /&gt;
* Added Razer Chroma and Razer Chroma Link support (https://www.razerzone.com/chroma)&lt;br /&gt;
&lt;br /&gt;
== 0.15.37 ==&lt;br /&gt;
Date: 17. 10. 2017&lt;br /&gt;
=== Bugfixes ===&lt;br /&gt;
* Fixed false positives in detection of crashes caused by incompatible version of RivaTuner Statistics Server.&lt;br /&gt;
&lt;br /&gt;
== 0.15.36 ==&lt;br /&gt;
Date: 10. 10. 2017&lt;br /&gt;
=== Bugfixes ===&lt;br /&gt;
* Fixed a bug in the fix of electric network from 0.15.35.&lt;br /&gt;
* Fixed a crash when deleting chunks in specific cases. ([https://forums.factorio.com/52598 more])&lt;br /&gt;
* Fixed a crash when coupling/decoupling trains through the Lua API.&lt;br /&gt;
* Fixed crash when unknown program arguments were passed. ([https://forums.factorio.com/53219 more])&lt;br /&gt;
&lt;br /&gt;
== 0.15.35 ==&lt;br /&gt;
Date: 28. 09. 2017&lt;br /&gt;
=== Bugfixes ===&lt;br /&gt;
* Fixed that after a player reconnected after a desync, while blueprints were uploaded, the game would crash. ([https://forums.factorio.com/52429 more])&lt;br /&gt;
* Fixed that in certain scenarios, the blueprint library wouldn&#039;t synchronise. ([https://forums.factorio.com/52634 more])&lt;br /&gt;
* Fixed that the server would sometimes quit if a player tried to connect after another player tried to connect unsuccessfully. ([https://forums.factorio.com/52718 more])&lt;br /&gt;
* Fixed a rare desync related to electric sub networks.&lt;br /&gt;
* Fixed archaic (from 0.12) migration that was supposed to fix rollingStockCounts on rails and it broke it instead.&lt;br /&gt;
* Fixed possible desync when rotating pipe to ground. ([https://forums.factorio.com/52709 more])&lt;br /&gt;
* Fixed a rare possibility of internal electric network crash when loading game. ([https://forums.factorio.com/52869 more])&lt;br /&gt;
* Handle network errors (caused by LavasoftTcpService64.dll corrupting Winsock) gracefully. ([https://forums.factorio.com/52290 more])&lt;br /&gt;
=== Scripting ===&lt;br /&gt;
* Fixed changing force of underground belt entity would cause desync. ([https://forums.factorio.com/52602 more])&lt;br /&gt;
&lt;br /&gt;
== 0.15.34 ==&lt;br /&gt;
Date: 23. 08. 2017&lt;br /&gt;
=== Bugfixes ===&lt;br /&gt;
* Fixed that after a player reconnected after a desync, their blueprints would no longer upload. ([https://forums.factorio.com/51642 more])&lt;br /&gt;
* Fixed that it was possible to modify other players&#039; blueprint libraries. ([https://forums.factorio.com/51908 more])&lt;br /&gt;
* Fixed a crash when loading a save that was transferring blueprints to a now offline player. ([https://forums.factorio.com/51884 more])&lt;br /&gt;
* Fixed that the blueprint library would remove duplicate blueprints even though they were in different books. ([https://forums.factorio.com/51552 more])&lt;br /&gt;
* Fixed game freezing when clicking the decrease replay speed button. ([https://forums.factorio.com/51870 more])&lt;br /&gt;
* Disabled possibility to open invalid save/replay by enter key or double click.&lt;br /&gt;
* Fixed rare crash when being disconnected from multiplayer. ([https://forums.factorio.com/52076 more])&lt;br /&gt;
* Fixed creating map from scenario would copy also system and hidden files from scenario folder. ([https://forums.factorio.com/52020 more])&lt;br /&gt;
* Fixed threading issue causing random server crashes. ([https://forums.factorio.com/51942 more])&lt;br /&gt;
* Fixed that if the server was launched with &amp;lt;code&amp;gt;--start-server-load-scenario&amp;lt;/code&amp;gt;, the /save command with no name would cause the server to hang. ([https://forums.factorio.com/52055 more])&lt;br /&gt;
* Fixed &amp;lt;code&amp;gt;--start-server-load-scenario&amp;lt;/code&amp;gt; would ignore &amp;lt;code&amp;gt;--map-gen-settings&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;--map-settings&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;--preset&amp;lt;/code&amp;gt; options. ([https://forums.factorio.com/51424 more])&lt;br /&gt;
* Fixed disabling shaders would cause crashes. ([https://forums.factorio.com/52097 more])&lt;br /&gt;
&lt;br /&gt;
== 0.15.33 ==&lt;br /&gt;
Date: 09. 08. 2017&lt;br /&gt;
=== Changes ===&lt;br /&gt;
* Mod name in mod info pane will no longer be localised. ([https://forums.factorio.com/51046 more])&lt;br /&gt;
* Optional mod dependencies now show as orange when invalid. ([https://forums.factorio.com/21008 more])&lt;br /&gt;
=== Bugfixes ===&lt;br /&gt;
* Fixed crash when trying to load replay that is not compatible with current version.&lt;br /&gt;
* Fixed ghosts might emit light. ([https://forums.factorio.com/51516 more])&lt;br /&gt;
* Fixed removing land mines didn&#039;t make any sound. ([https://forums.factorio.com/51588 more])&lt;br /&gt;
* Fixed creating window larger than screen. ([https://forums.factorio.com/51584 more])&lt;br /&gt;
* Improved performance of rendering uranium ore. ([https://forums.factorio.com/51549 more])&lt;br /&gt;
=== Modding ===&lt;br /&gt;
* Bonus UI now shows additional force modifiers ([https://forums.factorio.com/49732 more])&lt;br /&gt;
* simple-entity-with-owner (and simple-entity-with-force) now supports apply_runtime_tint in sprite definition.&lt;br /&gt;
=== Scripting ===&lt;br /&gt;
* simple-entity-with-owner exposes color property through &amp;lt;code&amp;gt;LuaEntity::color&amp;lt;/code&amp;gt;. Set it to {r=0, g=0, b=0, a=0} to use color of entity&#039;s force.&lt;br /&gt;
* Fixed &amp;lt;code&amp;gt;LuaEntityPrototype::distribution_effectivity&amp;lt;/code&amp;gt; would return value of supply_area_distance instead. ([https://forums.factorio.com/51568 more])&lt;br /&gt;
&lt;br /&gt;
== 0.15.32 ==&lt;br /&gt;
Date: 02. 08. 2017&lt;br /&gt;
=== Bugfixes ===&lt;br /&gt;
* Fixed compatibility problem with several antivirus programs. ([https://forums.factorio.com/51375 more])&lt;br /&gt;
* Fixed seed in map-gen-settings.json would be ignored when creating map on headless server. ([https://forums.factorio.com/51254 more])&lt;br /&gt;
* Fixed that connecting to a multiplayer game with a large blueprint library might be difficult. ([https://forums.factorio.com/50898 more])&lt;br /&gt;
* Fixed that using capsules would open an Entity&#039;s GUI when clicked. ([https://forums.factorio.com/51123 more])&lt;br /&gt;
* Fixed that &amp;lt;code&amp;gt;--window-size&amp;lt;/code&amp;gt;=maximized wouldn&#039;t work on Linux. ([https://forums.factorio.com/50977 more])&lt;br /&gt;
* Fixed that changing reactor consumption(production) values through a mod didn&#039;t update its production until rebuilt. ([https://forums.factorio.com/51251 more])&lt;br /&gt;
* Fixed that blueprints would sometimes stop transferring.&lt;br /&gt;
* Fixed crash when opening item/container and at the same time the controller is set to some that doesn&#039;t have inventory. ([https://forums.factorio.com/51349 more])&lt;br /&gt;
* Fixed 3 possible crashes related to getting malformed network packet over the network.&lt;br /&gt;
* Maybe fixed a biter path cache-related crash. ([https://forums.factorio.com/51183 more])&lt;br /&gt;
* Fixed that bad_alloc and similar low level errors were caught internally, so we couldn&#039;t get proper stack trace of those.&lt;br /&gt;
* Limited the size of a train chart tag when the map is zoomed in. ([https://forums.factorio.com/51401 more])&lt;br /&gt;
* Possible rare crash fix related to building rails and viewing preview of entities right after that. ([https://forums.factorio.com/51322 more])&lt;br /&gt;
* Limited technology cost multiplier to maximum of 1000. ([https://forums.factorio.com/51453 more])&lt;br /&gt;
=== Scripting ===&lt;br /&gt;
* The log method also specifies the mod that wrote that, not only script file.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaEntityPrototype::distribution_effectivity&amp;lt;/code&amp;gt; read.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaEntityPrototype::time_to_live&amp;lt;/code&amp;gt; read.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaControl::following_robots&amp;lt;/code&amp;gt; read.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaPlayer::pipette_entity()&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaEntity::can_be_destroyed()&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Added script_raised_destroy reserved event ID.&lt;br /&gt;
* Added script_raised_built reserved event ID.&lt;br /&gt;
* Added script_raised_revive reserved event ID.&lt;br /&gt;
* Changed &amp;lt;code&amp;gt;LuaEntity::time_to_live&amp;lt;/code&amp;gt; to also work for combat robots.&lt;br /&gt;
* Changed &amp;lt;code&amp;gt;LuaEntityPrototype::fluid_capacity&amp;lt;/code&amp;gt; read to also work on fluid-wagon.&lt;br /&gt;
* Changed &amp;lt;code&amp;gt;LuaEntityPrototype::turret_range&amp;lt;/code&amp;gt; read returns nil instead of error if not turret.&lt;br /&gt;
* Changed &amp;lt;code&amp;gt;LuaEntity::train&amp;lt;/code&amp;gt; to return nil if entity is not rolling stock.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaEntityPrototype::explosion_beam&amp;lt;/code&amp;gt; read.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaEntityPrototype::explosion_rotate&amp;lt;/code&amp;gt; read.&lt;br /&gt;
&lt;br /&gt;
== 0.15.31 ==&lt;br /&gt;
Date: 25. 07. 2017&lt;br /&gt;
=== Minor Features ===&lt;br /&gt;
* Train stop text angle is now configurable in the graphics settings. Default value is 30 degrees.&lt;br /&gt;
=== Bugfixes ===&lt;br /&gt;
* Fixed that resizing the game window was very slow on Linux. ([https://forums.factorio.com/48023 more])&lt;br /&gt;
* Fixed rendering of turret ranges on map. ([https://forums.factorio.com/50932 more])&lt;br /&gt;
* Fixed &amp;quot;Disable listed mods&amp;quot; in minimal mode would disable all mods including Base if mod-list.json didn&#039;t exist. ([https://forums.factorio.com/50917 more])&lt;br /&gt;
* Fixed that pressing escape in the &amp;quot;mods error&amp;quot; GUI would close it and leave the game in a broken state. ([https://forums.factorio.com/50951 more])&lt;br /&gt;
* Fixed possible crash when loading game. ([https://forums.factorio.com/50955 more])&lt;br /&gt;
* Car and Tank now make a sound when deconstructed. ([https://forums.factorio.com/50997 more])&lt;br /&gt;
* Fixed that using the color command with no arguments would set your color to black.&lt;br /&gt;
* Fixed a crash when deleting a blueprint book while the label is being edited in the blueprint library. ([https://forums.factorio.com/50964 more])&lt;br /&gt;
* Fixed crash when closing the game in the Generate Map GUI. ([https://forums.factorio.com/50924 more])&lt;br /&gt;
* Fixed that the generate map GUI would show incorrect values for some of the enemy expansion settings in some cases. ([https://forums.factorio.com/51064 more])&lt;br /&gt;
* Fixed that some blueprints would always have to be reuploaded after connecting to a server, even if they weren&#039;t changed. ([https://forums.factorio.com/50878 more])&lt;br /&gt;
* Fixed that the map seed field wouldn&#039;t be used when given in a map-gen-settings.json file through the command line. ([https://forums.factorio.com/51176 more])&lt;br /&gt;
* Fixed that missing controls in &amp;quot;autoplace_controls&amp;quot; for map gen settings would get filled with default values instead of disabling unlisted controls.&lt;br /&gt;
* Fixed that blueprints would stop transferring if the game was loaded from a map that included some transfers in progress. ([https://forums.factorio.com/51025 more])&lt;br /&gt;
* Fixed missing font for Thai language.&lt;br /&gt;
* Changed the hazard concrete/concrete tile transition so it behaves predictively.&lt;br /&gt;
=== Modding ===&lt;br /&gt;
* Fixed layered icons would render incorrectly in some cases. ([https://forums.factorio.com/51059 more])&lt;br /&gt;
=== Scripting ===&lt;br /&gt;
* Fixed a crash when using &amp;lt;code&amp;gt;LuaPlayer::disable_all_prototypes()&amp;lt;/code&amp;gt; and opening the technology GUI. ([https://forums.factorio.com/51003 more])&lt;br /&gt;
* Fixed that research bonus could be set to negative. ([https://forums.factorio.com/51114 more])&lt;br /&gt;
* Fixed that items in the character trash slots would get lost on reducing inventory size instead of spilling the items on the ground. ([https://forums.factorio.com/51181 more])&lt;br /&gt;
* Fixed validation for pickup_position and drop_position. ([https://forums.factorio.com/51143 more])&lt;br /&gt;
* Exposed internal buffer of fluid turret to Lua as its last fluidbox.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaEntityPrototype::fluid_capacity&amp;lt;/code&amp;gt; read.&lt;br /&gt;
&lt;br /&gt;
== 0.15.30 ==&lt;br /&gt;
Date: 14. 07. 2017&lt;br /&gt;
=== Bugfixes ===&lt;br /&gt;
* Fixed crash related to empty player blueprint shelf. ([https://forums.factorio.com/50854 more])&lt;br /&gt;
* Fixed crash related to handling focused state of widgets.&lt;br /&gt;
* Fixed possible crash when using font with size 0. ([https://forums.factorio.com/50859 more])&lt;br /&gt;
* Fixed focus error preventing to access GUI when the game is paused in multiplayer.&lt;br /&gt;
* Fixed a crash when the map can&#039;t be saved to disk due to permission errors when joining MP games. ([https://forums.factorio.com/45122 more])&lt;br /&gt;
=== Modding ===&lt;br /&gt;
* Added optional &amp;quot;hide_resistances&amp;quot; to entity prototype to control whether resistances should be hidden in description for friendly forces. Default is true.&lt;br /&gt;
&lt;br /&gt;
== 0.15.29 ==&lt;br /&gt;
Date: 13. 07. 2017&lt;br /&gt;
=== Changes ===&lt;br /&gt;
* Underground pipes will no longer connect if there is candidate ghost underground pipe between them.&lt;br /&gt;
* Command line option &amp;lt;code&amp;gt;--window-size&amp;lt;/code&amp;gt; can be also used to start the game in maximized mode when used as &amp;lt;code&amp;gt;--window-size&amp;lt;/code&amp;gt;=maximized&lt;br /&gt;
* The library no longer shows unavailable blueprints of off-line players, since there is nothing that can be done with them.&lt;br /&gt;
=== Bugfixes ===&lt;br /&gt;
* Fixed that the edit field of a blueprint book in the shared pane would get reset every time crafting finished. ([https://forums.factorio.com/48771 more])&lt;br /&gt;
* Fixed that setting visibility to false on modded GUI elements while a text field had focus would keep blocking normal input. ([https://forums.factorio.com/50531 more])&lt;br /&gt;
* Fixed a performance problem when having the blueprint library GUI open while robots add/remove large amounts of items from the character. ([https://forums.factorio.com/49063 more])&lt;br /&gt;
* Fixed that walls and pipes built from blueprints could mark trees/rocks for deconstruction by mistake in some instances. ([https://forums.factorio.com/50739 more])&lt;br /&gt;
* Fixed entities with force color (turrets, gates, ...) would be drawn black in blueprint preview.&lt;br /&gt;
* Fixed false positive in game state corruption detection logic. ([https://forums.factorio.com/50758 more])&lt;br /&gt;
* Fixed pipette tool would pick diagonal rail with wrong direction. ([https://forums.factorio.com/50736 more])&lt;br /&gt;
* Fixed migrating save from level 4 of New Hope campaign would disable Plane recipe. ([https://forums.factorio.com/50762 more])&lt;br /&gt;
* Fixed that the blueprint library wouldn&#039;t close when Q is pressed and bound to the Close Window action. ([https://forums.factorio.com/50779 more])&lt;br /&gt;
* Fixed that blueprints would stop transferring if the game was saved whilst some transfers were in progress and then reloaded from this save. ([https://forums.factorio.com/50767 more])&lt;br /&gt;
* Fixed error with modal focus related to having blueprint error message and removed content message at the same time.&lt;br /&gt;
* Fixed server wouldn&#039;t close and delete a temporary save file made for a client that disconnected before the server finished saving. ([https://forums.factorio.com/50735 more])&lt;br /&gt;
* Fixed that standing on belts facing each other between two chunks would cause the player actions to run at double speed.&lt;br /&gt;
* Fixed that in an artificial test-case, two blueprints couldn&#039;t in the library at the same time. ([https://forums.factorio.com/50709 more])&lt;br /&gt;
* The Pipette tool will now copy the rotations of vehicles and trains. ([https://forums.factorio.com/50797 more])&lt;br /&gt;
* Fixed that making blueprints of ghost tiles on top of real tiles would have seemingly &amp;quot;random&amp;quot; results in the blueprint. ([https://forums.factorio.com/50801 more])&lt;br /&gt;
* Possible fix of the double &amp;quot;Communication with server failed&amp;quot; error. ([https://forums.factorio.com/35698 more])&lt;br /&gt;
* Fixed entities to be built wouldn&#039;t get rendered in some places when hovering over transparent GUI elements in the map editor. ([https://forums.factorio.com/50825 more])&lt;br /&gt;
=== Modding ===&lt;br /&gt;
* Added optional &amp;quot;render_not_in_network_icon&amp;quot; for logistic container prototypes defaulting to true.&lt;br /&gt;
* Fixed empty sprite path would cause game to crash instead of entering minimal mode. ([https://forums.factorio.com/50782 more])&lt;br /&gt;
=== Scripting ===&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaItemStack::swap_stack()&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Added on_player_removed event.&lt;br /&gt;
&lt;br /&gt;
== 0.15.28 ==&lt;br /&gt;
Date: 06. 07. 2017&lt;br /&gt;
=== Balancing ===&lt;br /&gt;
* Reduced time needed for an unit of Automation 2 research from 15 to 5 seconds to compensate for previous change of science packs requirements.&lt;br /&gt;
=== Minor Features ===&lt;br /&gt;
* Added &amp;lt;code&amp;gt;--window-size&amp;lt;/code&amp;gt; launch option. For example &amp;lt;code&amp;gt;--window-size&amp;lt;/code&amp;gt;=1680x1050 ([https://forums.factorio.com/44775 more])&lt;br /&gt;
* Damaging a tree with impact or physical damage generates some leaves.&lt;br /&gt;
* Warning icon for logistic chests that are not in a reach of roboport.&lt;br /&gt;
* Train stop names are rendered at 45 degrees to better show names.&lt;br /&gt;
=== Bugfixes ===&lt;br /&gt;
* Fixed that ghosts would stay over entities after deconstruction was canceled. ([https://forums.factorio.com/50015 more])&lt;br /&gt;
* Fixed that the controls menu wouldn&#039;t use a fixed common width between controls sections.&lt;br /&gt;
* Inserter researches now require equal ratios of science pack types.&lt;br /&gt;
* Fixed that transferring blueprints from the library could make the headless server crash. ([https://forums.factorio.com/50536 more])&lt;br /&gt;
* Fixed that blueprints could be duplicated when moving to a new version. ([https://forums.factorio.com/48977 more])&lt;br /&gt;
* Fixed progress bar not showing in the entity info panel if the text was too long. ([https://forums.factorio.com/50539 more])&lt;br /&gt;
* Fixed (at least one of the cases) of crashes related to not being able to connect to auth server while joining game. ([https://forums.factorio.com/50161 more])&lt;br /&gt;
* Fixed, possible crash related to changed bounding box of entity by a mod. When the mod is removed (added) the corner of the entity can occupy chunk that doesn&#039;t exist yet which would cause a loading error. ([https://forums.factorio.com/50371 more])&lt;br /&gt;
* Fixed that mining sounds and the leaves effect weren&#039;t present when mining tree from a car. ([https://forums.factorio.com/50441 more])&lt;br /&gt;
* Fixed possible crash when removing modded rails during save migration. ([https://forums.factorio.com/45436 more])&lt;br /&gt;
=== Modding ===&lt;br /&gt;
* Mod hotkeys are arranged per-mod.&lt;br /&gt;
* Disallowed defining different rail categories for this moment as having more than one will never work properly until we spent some non-trivial time with that, which is not a priority now.&lt;br /&gt;
=== Scripting ===&lt;br /&gt;
* Fixed that item-with-inventory filters wouldn&#039;t be preserved when cloned through the Lua API. ([https://forums.factorio.com/50527 more])&lt;br /&gt;
&lt;br /&gt;
== 0.15.27 ==&lt;br /&gt;
Date: 03. 07. 2017&lt;br /&gt;
=== Balancing ===&lt;br /&gt;
* Speed and efficiency module 3 technology now requires high tech science packs instead of production science packs, so that working towards power armor mk2 does not require production science packs.&lt;br /&gt;
** This makes the branching between high tech and production science packs more meaningful.&lt;br /&gt;
* All researches now require equal ratios of science pack types. This reduces the cost of some researches.&lt;br /&gt;
=== Bugfixes ===&lt;br /&gt;
* Fixed manually inserting items into the blueprint book would disconnect you in multiplayer. ([https://forums.factorio.com/50408 more])&lt;br /&gt;
* Fixed a crash when clicking an alert the same tick the game is loaded. ([https://forums.factorio.com/50449 more])&lt;br /&gt;
* Fixed a crash when saving screenshot failed. ([https://forums.factorio.com/50501 more])&lt;br /&gt;
* Fixed that trains could stop in the middle of chain signal blocks in some specific setups causing deadlocks. ([https://forums.factorio.com/34844 more])&lt;br /&gt;
* Fixed that large drop-down widgets would render off the bottom of the screen in some cases. ([https://forums.factorio.com/50386 more])&lt;br /&gt;
=== Modding ===&lt;br /&gt;
* Added &amp;quot;render_layer&amp;quot; property to car prototype definition.&lt;br /&gt;
=== Scripting ===&lt;br /&gt;
* Fixed that calling &amp;lt;code&amp;gt;LuaForce::chart&amp;lt;/code&amp;gt;(...) would try to chart chunks outside the map limits. ([https://forums.factorio.com/50451 more])&lt;br /&gt;
* Fixed that &amp;lt;code&amp;gt;LuaPlayer::unlock_achievement()&amp;lt;/code&amp;gt; would keep showing the notification after the achievement was unlocked. ([https://forums.factorio.com/50395 more])&lt;br /&gt;
* Fixed that &amp;lt;code&amp;gt;LuaItemStack::create_blueprint&amp;lt;/code&amp;gt; didn&#039;t behave the same way as normal blueprint creation in regards to ghost tiles. ([https://forums.factorio.com/50491 more])&lt;br /&gt;
* Fixed that &amp;lt;code&amp;gt;LuaEntity::selected_gun_index&amp;lt;/code&amp;gt; write was 0-based. ([https://forums.factorio.com/50514 more])&lt;br /&gt;
* Fixed that mods could do remote calls outside of events when the game isn&#039;t in a valid state. ([https://forums.factorio.com/50509 more])&lt;br /&gt;
* Fixed that a time_before_removed of 0 on a corpse entity could crash the game in some instances. ([https://forums.factorio.com/50489 more])&lt;br /&gt;
&lt;br /&gt;
== 0.15.26 ==&lt;br /&gt;
Date: 30. 06. 2017&lt;br /&gt;
=== Bugfixes ===&lt;br /&gt;
* Fixed a crash when rendering modded pumps in some instances. ([https://forums.factorio.com/50358 more])&lt;br /&gt;
* Fixed that biters building new bases could cause a player standing in the way to be destroyed instead of killed. ([https://forums.factorio.com/50357 more])&lt;br /&gt;
* Fixed that the auto-cursor-refill wouldn&#039;t refill if the cursor started with 1 item. ([https://forums.factorio.com/50370 more])&lt;br /&gt;
* Fixed crash related to removing power switch connected to electric pole in a blueprint.&lt;br /&gt;
* Fixed crash related to building electric pole that is connected to closed power switch by blueprint. ([https://forums.factorio.com/50384 more])&lt;br /&gt;
* Fixed that the player would respawn at {0,0} in the campaign levels. ([https://forums.factorio.com/50455 more])&lt;br /&gt;
=== Modding ===&lt;br /&gt;
* The God controller properties can now be set through the prototype system.&lt;br /&gt;
=== Scripting ===&lt;br /&gt;
* Fixed that using math.random in control.lua before the file was fully parsed was not deterministic. ([https://forums.factorio.com/50380 more])&lt;br /&gt;
* Fixed that create_entity{variation=...} was 0-based. ([https://forums.factorio.com/50385 more])&lt;br /&gt;
&lt;br /&gt;
== 0.15.25 ==&lt;br /&gt;
Date: 29. 06. 2017&lt;br /&gt;
=== Bugfixes ===&lt;br /&gt;
* Fixed that energy shields would charge faster than normal when the generators couldn&#039;t provide full power and there was a battery with available energy in the grid. ([https://forums.factorio.com/47761 more])&lt;br /&gt;
* Fixed crash when making blueprint from power switch ghost.&lt;br /&gt;
* Fixed a desync when loading save files from different game versions. ([https://forums.factorio.com/50331 more])&lt;br /&gt;
* Fixed that the map gen presets list box wouldn&#039;t respond to mouse clicks. ([https://forums.factorio.com/50329 more])&lt;br /&gt;
&lt;br /&gt;
== 0.15.24 ==&lt;br /&gt;
Date: 29. 06. 2017&lt;br /&gt;
=== Minor Features ===&lt;br /&gt;
* Power switch connections are stored in the blueprint.&lt;br /&gt;
=== Changes ===&lt;br /&gt;
* The F1-F12 debug hotkeys can now be reassigned.&lt;br /&gt;
* Disabled pumps don&#039;t block other pumps from connecting to fluid wagon anymore. ([https://forums.factorio.com/49336 more])&lt;br /&gt;
* Pump can connect to fluid tank that is slightly rotated, but only to tanks that are standing on straight rails.&lt;br /&gt;
* Blueprints in the library no longer transfer automatically when a player joins. Instead, they are transferred on-demand.&lt;br /&gt;
* Admins are allowed to modify other players&#039; blueprints in the library, including deleting them.&lt;br /&gt;
* Changed default key binding for toggle filters on macOS to Command + Right Click ([https://forums.factorio.com/50253 more])&lt;br /&gt;
=== Bugfixes ===&lt;br /&gt;
* Fixed Info boxes sometimes going to the center of the screen on scale change or display size change. ([https://forums.factorio.com/47513 more])&lt;br /&gt;
* Fixed the direction of underground belts/pipes wouldn&#039;t get detected correctly when using the pipette tool in some cases. ([https://forums.factorio.com/50080 more])&lt;br /&gt;
* Fixed that accumulators had two energy bars and one of these was showing incorrect value. ([https://forums.factorio.com/50212 more])&lt;br /&gt;
* Fixed that Copy paste couldn&#039;t be used in the numeric edit box.&lt;br /&gt;
* Fixed that the recipe tooltip would resize/change every time something was crafted. ([https://forums.factorio.com/50209 more])&lt;br /&gt;
* Fixed burner inserter reading signal pulses twice ([https://forums.factorio.com/50183 more])&lt;br /&gt;
* Fixed electric buffer error that could happen when updating save to newer factorio version or changing mods. ([https://forums.factorio.com/50182 more])&lt;br /&gt;
* Fixed that failing to mine an entity wouldn&#039;t try to transfer all items in the entity. ([https://forums.factorio.com/50237 more])&lt;br /&gt;
* Fixed locomotive could snap to train stop after it was attached to an existing train. ([https://forums.factorio.com/50210 more])&lt;br /&gt;
* Fixed that the item counts when making blueprints or deconstructing things would render off-screen. ([https://forums.factorio.com/50258 more])&lt;br /&gt;
* Fixed impossible research tasks in team production challenge. ([https://forums.factorio.com/50257 more])&lt;br /&gt;
* Fixed that the blueprint library GUI wouldn&#039;t restore scrollbar position when moving in or out of a book. ([https://forums.factorio.com/50152 more])&lt;br /&gt;
* Fixed that setting inserter filters wouldn&#039;t update the last-user. ([https://forums.factorio.com/50286 more])&lt;br /&gt;
* Fixed that fluid would not flow through circuit network disabled mining drills. ([https://forums.factorio.com/50289 more])&lt;br /&gt;
* Fixed a crash when exiting multiplayer due to a script error while hosting a public game locally. ([https://forums.factorio.com/50243 more])&lt;br /&gt;
* Fixed pump would not connect to last tile of a train in some cases. ([https://forums.factorio.com/50279 more])&lt;br /&gt;
=== Modding ===&lt;br /&gt;
* Changed the format for localised mod name and description.&lt;br /&gt;
* Fixed that assembling machines using the heat energy source type would go inactive when out of power and stay inactive. ([https://forums.factorio.com/50091 more])&lt;br /&gt;
* Limited map gen presets pollution diffusion and dissipation rate values to prevent never-ending pollution bloating map sizes by mistake. ([https://forums.factorio.com/48680 more])&lt;br /&gt;
* Removed CustomInputPrototype consuming types &amp;quot;all&amp;quot; and &amp;quot;script-only&amp;quot;.&lt;br /&gt;
* entity-with-owner now supports variation in blueprints.&lt;br /&gt;
=== Scripting ===&lt;br /&gt;
* Fixed that marking an entity for deconstruction through script wouldn&#039;t fire the event. ([https://forums.factorio.com/50180 more])&lt;br /&gt;
* Fixed that level based research wouldn&#039;t fire the research-finished event in some cases. ([https://forums.factorio.com/50223 more])&lt;br /&gt;
* Fixed that several of the drop-down related methods for LuaGuiElement were 0-based.&lt;br /&gt;
* Added a global Lua function &amp;quot;table_size&amp;quot; which will quickly compute the number of values in any lua table (not to be confused with the # operator).&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaGuiElement::remove_item&amp;lt;/code&amp;gt; for drop-down type elements.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaSurface::clear_pollution()&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Added events on_console_chat and on_console_command.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaEntityPrototype::production&amp;lt;/code&amp;gt; read.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaControl::mine_tile()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== 0.15.23 ==&lt;br /&gt;
Date: 22. 06. 2017&lt;br /&gt;
=== Changes ===&lt;br /&gt;
* Reverted change that made Inserters no longer drop what they are holding when disabled by the circuit network. ([https://forums.factorio.com/49170 more])&lt;br /&gt;
=== Bugfixes ===&lt;br /&gt;
* Fixed that the UI scale option wouldn&#039;t apply until restarting the game in some cases. ([https://forums.factorio.com/50064 more])&lt;br /&gt;
* Fixed that number-input fields would also block letters/other keys. ([https://forums.factorio.com/50061 more])&lt;br /&gt;
* Fixed that tile filters in the deconstruction planner wouldn&#039;t get used in some cases when entity filters were also defined. ([https://forums.factorio.com/50069 more])&lt;br /&gt;
* Fixed curved rail ghosts wouldn&#039;t mark trees/rocks when force-built. ([https://forums.factorio.com/50039 more])&lt;br /&gt;
* Fixed construction robots could stop doing their jobs when roboport was destroyed or unpowered. ([https://forums.factorio.com/43680 more])&lt;br /&gt;
* Fixed long strings in the right description pane. ([https://forums.factorio.com/50040 more])&lt;br /&gt;
=== Modding ===&lt;br /&gt;
* Fixed that some mod mods would falsely be detected as removed and have GUI elements they added removed on load. ([https://forums.factorio.com/50055 more])&lt;br /&gt;
=== Scripting ===&lt;br /&gt;
* Fixed that teleporting entity ghosts didn&#039;t work correctly. ([https://forums.factorio.com/50030 more])&lt;br /&gt;
&lt;br /&gt;
== 0.15.22 ==&lt;br /&gt;
Date: 21. 06. 2017&lt;br /&gt;
=== Changes ===&lt;br /&gt;
* Blueprints in the blueprint library are sorted using case-insensitive natural compare.&lt;br /&gt;
** E.g. the sorting order now is &amp;quot;1&amp;quot;, &amp;quot;2&amp;quot;, &amp;quot;10&amp;quot;, instead of the previous &amp;quot;1&amp;quot;, &amp;quot;10&amp;quot;, &amp;quot;2&amp;quot;.&lt;br /&gt;
* Inserters will no longer drop what they are holding when disabled by the circuit network. ([https://forums.factorio.com/49170 more])&lt;br /&gt;
* The deconstruction planner filter now treats any entity filter as also matching entity ghosts of that type.&lt;br /&gt;
* Multiplayer creation GUI now remembers game name. ([https://forums.factorio.com/49162 more])&lt;br /&gt;
=== Balancing ===&lt;br /&gt;
* Explosive Mine now only does damage to enemy units and structures.&lt;br /&gt;
** Sounds:&lt;br /&gt;
* Added missing vehicle collision sounds (pipes, solar panels, etc...)&lt;br /&gt;
* Reduced volume of ore mining and tree chopping.&lt;br /&gt;
=== Bugfixes ===&lt;br /&gt;
* Toggling fullscreen via options or Alt-Enter now keeps window on the same monitor. ([https://forums.factorio.com/49567 more])&lt;br /&gt;
* Fixed that in long recharging queues some robots would never get a chance to recharge. ([https://forums.factorio.com/49391 more])&lt;br /&gt;
* Fixed that it wasn&#039;t possible to click and drag blueprints into an empty blueprint book. ([https://forums.factorio.com/49746 more])&lt;br /&gt;
* Fixed that deconstruction/blueprinting selection would be canceled if the selection ended on one of the always-visible GUIs. ([https://forums.factorio.com/49264 more])&lt;br /&gt;
* Fixed the productivity bar in the furnace GUI wouldn&#039;t show in some instances. ([https://forums.factorio.com/49841 more])&lt;br /&gt;
* Fixed exiting a multiplayer game hosted through the in-game multiplayer option. ([https://forums.factorio.com/49785 more])&lt;br /&gt;
* Fixed that tile ghosts would always get selected over real entities. ([https://forums.factorio.com/49880 more])&lt;br /&gt;
* Fixed that the heat-connection icon was not visible on entities other than boiler and reactor. (related to modding)&lt;br /&gt;
* Fixed that furnace with heat source couldn&#039;t be rotated before placing it.&lt;br /&gt;
* Fixed the gui of furnace using heat as energy source.&lt;br /&gt;
* Fix PvP Gui script error. ([https://forums.factorio.com/49876 more])&lt;br /&gt;
* Fix that clearing items in Transport belt madness didn&#039;t give the items back. ([https://forums.factorio.com/49509 more])&lt;br /&gt;
* Fixed that rails marked for deconstruction wouldn&#039;t allow canceling deconstruction while a train was on  them. ([https://forums.factorio.com/49950 more])&lt;br /&gt;
* Fixed that biters would change orientation rapidly when they were near a player whom they couldn&#039;t attack. ([https://forums.factorio.com/46763 more])&lt;br /&gt;
* Fixed that Rocket Silo would continue crafting for 1 tick after completing a rocket. ([https://forums.factorio.com/48974 more])&lt;br /&gt;
* Fixed that lot of other keys that can be used to write characters in the edit box (or console) were not blocked from affecting the game if they are assigned to do a game action. Having text box active now means that all of the keys are blocked from affecting the game.&lt;br /&gt;
* Fixed (hopefully), that the stretching of bounding boxes of walls to touch their neighbours was not taking into account when  marking things in the way for the blueprint. ([https://forums.factorio.com/47324 more])&lt;br /&gt;
* Fixed that the description pane would change width depending on the content. It should now never change width. ([https://forums.factorio.com/49911 more])&lt;br /&gt;
* Fixed that the shooting-target would render as valid to shoot with rockets when it actually wasn&#039;t. ([https://forums.factorio.com/49425 more])&lt;br /&gt;
* Fixed that programmable speakers would get wrong instruments after importing pre-0.15.19 blueprint string. ([https://forums.factorio.com/49528 more])&lt;br /&gt;
* Fixed that maximized Factorio window had thin border around it. ([https://forums.factorio.com/49388 more])&lt;br /&gt;
* Fixed that vanilla and modded version of achievements could be mixed up. ([https://forums.factorio.com/49620 more])&lt;br /&gt;
* Fixed that inserters would try to insert items into other non-burner inserters. ([https://forums.factorio.com/49384 more])&lt;br /&gt;
* Fixed that fast-transferring modules into the rocket silo would put them into the module slots and the rocket at the same time. ([https://forums.factorio.com/49520 more])&lt;br /&gt;
* Fixed that the &amp;quot;rocket launched without satellite&amp;quot; message couldn&#039;t be dismissed in some cases. ([https://forums.factorio.com/43683 more])&lt;br /&gt;
* Fixed the mining drill GUI wouldn&#039;t show mining progress when it had a large number of modded module slots. ([https://forums.factorio.com/41597 more])&lt;br /&gt;
* Fixed fast-replacing an assembling machine with overloaded ingredients would spill the items. ([https://forums.factorio.com/49158 more])&lt;br /&gt;
* Fixed many ingredients or products in recipes would break the assembling machine GUI. ([https://forums.factorio.com/47407 more])&lt;br /&gt;
* Fixed wrong values when using /config set allowed-commands with invalid values would crash the game. ([https://forums.factorio.com/49839 more])&lt;br /&gt;
=== Modding ===&lt;br /&gt;
* Fixed that giving rolling stock entities invalid collision masks would crash the game. ([https://forums.factorio.com/49356 more])&lt;br /&gt;
* Mod title and description can now be localised.&lt;br /&gt;
* Fixed a crash when mods use reset technologies during the technology researched event. ([https://forums.factorio.com/49991 more])&lt;br /&gt;
* Fixed that modded GUI elements wouldn&#039;t get removed in some cases when the mod was removed. ([https://forums.factorio.com/50022 more])&lt;br /&gt;
* Fixed source_effects applying effects to the source by the target instead of to the source by the source. ([https://forums.factorio.com/49634 more])&lt;br /&gt;
=== Scripting ===&lt;br /&gt;
* Fixed setting robot.energy for logistic/construction robots wouldn&#039;t account for the robot battery upgrade. ([https://forums.factorio.com/49780 more])&lt;br /&gt;
* Fixed that setting &amp;lt;code&amp;gt;LuaBurner::currently_burning&amp;lt;/code&amp;gt; didn&#039;t accept LuaItemPrototype as the docs said. ([https://forums.factorio.com/49893 more])&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaEntityPrototype::count_as_rock_for_filtered_deconstruction&amp;lt;/code&amp;gt; read.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaEntityPrototype::filter_count&amp;lt;/code&amp;gt; read.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaEntity::spawner&amp;lt;/code&amp;gt;/units read.&lt;br /&gt;
&lt;br /&gt;
== 0.15.21 ==&lt;br /&gt;
Date: 15. 06. 2017&lt;br /&gt;
=== Bugfixes ===&lt;br /&gt;
* Fixed that the server would crash if someone tried to connect when there were no blueprints being transferred. ([https://forums.factorio.com/49770 more])&lt;br /&gt;
&lt;br /&gt;
== 0.15.20 ==&lt;br /&gt;
Date: 14. 06. 2017&lt;br /&gt;
=== Changes ===&lt;br /&gt;
* Transports belt entities show belt speed in the tooltip and entity description.&lt;br /&gt;
* Reduced fluid wagon air resistance from 0.05 to 0.01&lt;br /&gt;
* Scenario names are now localised.&lt;br /&gt;
=== Bugfixes ===&lt;br /&gt;
* Fixed login details getting lost (hopefully). ([https://forums.factorio.com/45238 more])&lt;br /&gt;
* Fixed a crash that would happen if the game exited due to a script error that happened immediately after deleting a force. ([https://forums.factorio.com/49008 more])&lt;br /&gt;
* Fixed int mod settings would show incorrect values in the GUI. ([https://forums.factorio.com/49502 more])&lt;br /&gt;
* Fixed gun sounds would continue when switching weapons while firing. ([https://forums.factorio.com/49382 more])&lt;br /&gt;
* Fixed a performance issue caused by spawners being active all the time in peaceful mode. ([https://forums.factorio.com/48701 more])&lt;br /&gt;
* Fixed a crash when removing train stops next to other train stops and then building locomotives. ([https://forums.factorio.com/49539 more])&lt;br /&gt;
* Fixed a rare desync related to opening your player inventory. ([https://forums.factorio.com/49308 more])&lt;br /&gt;
* Fixed a crash when teleporting/setting the force of a offline roboport. ([https://forums.factorio.com/49515 more])&lt;br /&gt;
* Fixed inserters with custom pickup/drop locations from mods would retain the custom data when the mods were removed. ([https://forums.factorio.com/49513 more])&lt;br /&gt;
* Fixed a crash when deleting blueprint records from the blueprint library while another player is viewing the record tooltip. ([https://forums.factorio.com/49600 more])&lt;br /&gt;
* Fixed that some clients wouldn&#039;t be able to connect to a server when blueprints were being uploaded. ([https://forums.factorio.com/49680 more])&lt;br /&gt;
* Fixed that Factorio wouldn&#039;t start when run from an NFS partition. ([https://forums.factorio.com/49529 more])&lt;br /&gt;
* Fixed crash on macOS older than 10.9 ([https://forums.factorio.com/49555 more])&lt;br /&gt;
=== Modding ===&lt;br /&gt;
* Removed unused &amp;quot;energy consumption&amp;quot; from the roboport equipment. ([https://forums.factorio.com/49678 more])&lt;br /&gt;
=== Scripting ===&lt;br /&gt;
* Fixed that setting researched = true on level-based research in progress wouldn&#039;t update the research level displayed. ([https://forums.factorio.com/49468 more])&lt;br /&gt;
* Fixed that game.write_file would cause desyncs if it failed due to file permission issues. ([https://forums.factorio.com/49617 more])&lt;br /&gt;
* Fixed a crash related to the train changed state event. ([https://forums.factorio.com/49710 more])&lt;br /&gt;
* Added events on_player_setup_blueprint, on_player_deconstructed_area, and on_player_configured_blueprint.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaEntity::secondary_bounding_box&amp;lt;/code&amp;gt; read.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaForce::worker_robots_battery_modifier&amp;lt;/code&amp;gt; read/write.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaGuiElement::enabled&amp;lt;/code&amp;gt; read/write.&lt;br /&gt;
&lt;br /&gt;
== 0.15.19 ==&lt;br /&gt;
Date: 08. 06. 2017&lt;br /&gt;
=== Changes ===&lt;br /&gt;
* Added alarm sounds to programmable speaker.&lt;br /&gt;
* Fullscreen is on by default.&lt;br /&gt;
* Locomotive snaps to a train stop when placing the first locomotive next to the train stop.&lt;br /&gt;
* Changed automation and fluid wagon research so it doesn&#039;t have multiples of science packs per unit. ([https://forums.factorio.com/49128 more])&lt;br /&gt;
* &amp;lt;code&amp;gt;--start-server-load-scenario&amp;lt;/code&amp;gt; can load scenarios provided by a mod.&lt;br /&gt;
** For example, &amp;lt;code&amp;gt;--start-server-load-scenario&amp;lt;/code&amp;gt; base/wave-defense will load the wave-defense scenario from the base mod.&lt;br /&gt;
=== Graphics ===&lt;br /&gt;
* Changed the icon of the automation research, so it is not confused with the logistics research.&lt;br /&gt;
=== Bugfixes ===&lt;br /&gt;
* Fixed that destroyed transport belt could leave zombified items in nearby tile ([https://forums.factorio.com/49152 more])&lt;br /&gt;
* Fixed inserter zombification at rail junctions ([https://forums.factorio.com/49293 more])&lt;br /&gt;
* Fixed visual seams on map/minimap ([https://forums.factorio.com/45834 more])&lt;br /&gt;
* Fixed that gate over rail could be rotated&lt;br /&gt;
* Fixed GUI size problems with the logistic networks GUI. ([https://forums.factorio.com/48900 more])&lt;br /&gt;
* Fixed that the headless server didn&#039;t close when it failed. (Most typically because of script error) ([https://forums.factorio.com/49118 more])&lt;br /&gt;
* Fixed misaligned force color mask on capsule projectiles. ([https://forums.factorio.com/48996 more])&lt;br /&gt;
* Fixed crash when changing player&#039;s controller, when player was controlling a vehicle with god controller. ([https://forums.factorio.com/47239 more])&lt;br /&gt;
* Fixed a crash caused by manually deactivated units. ([https://forums.factorio.com/49017 more])&lt;br /&gt;
* Fixed that exporting blueprints wouldn&#039;t respect the current filter options in the setup GUI. ([https://forums.factorio.com/49123 more])&lt;br /&gt;
* Fixed that selection-by-typing in list boxes would also trigger normal game actions. ([https://forums.factorio.com/49004 more])&lt;br /&gt;
* Fixed that adding stops to a train could change the current station. ([https://forums.factorio.com/40845 more])&lt;br /&gt;
* Fixed that the search text didn&#039;t reset after leaving the browse-mods GUI. ([https://forums.factorio.com/49130 more])&lt;br /&gt;
* Fixed that the mods-load-error GUI could end up too large to fit on screen. ([https://forums.factorio.com/49165 more])&lt;br /&gt;
* Fixed a crash when interacting with the &amp;quot;save/quit/reconnect&amp;quot; window after losing connection with a server. ([https://forums.factorio.com/49023 more])&lt;br /&gt;
* Fixed crashes when locking bitmap fails. ([https://forums.factorio.com/49009 more])&lt;br /&gt;
* Fixed rail preview was rendered under entities. ([https://forums.factorio.com/48134 more])&lt;br /&gt;
* Fixed message box in main menu  being not clickable ([https://forums.factorio.com/49226 more])&lt;br /&gt;
* Fixed trains stuttering on extremely short paths. ([https://forums.factorio.com/49105 more])&lt;br /&gt;
* Fixed flamethrower stream would destroy trees directly. ([https://forums.factorio.com/46428 more])&lt;br /&gt;
* Fixed that some information was missing from generator entities. ([https://forums.factorio.com/49327 more])&lt;br /&gt;
* Fixed that Factorio would hang on Linux after trying to paste a string when the clipboard was empty. ([https://forums.factorio.com/49251 more])&lt;br /&gt;
* Fixed generating unwinnable research tasks in team production scenario. ([https://forums.factorio.com/49329 more])&lt;br /&gt;
* Fixed that clicking escape while connecting to the game could lead to weird situations as the normal menu was opened.&lt;br /&gt;
** Pressing escape while connecting will abort the connection instead. ([https://forums.factorio.com/37460 more])&lt;br /&gt;
* Fixed the productivity bar in the mining drill wouldn&#039;t show in some cases. ([https://forums.factorio.com/40158 more])&lt;br /&gt;
* Fixed that the blueprint book gui didn&#039;t stretch vertically when possible. ([https://forums.factorio.com/49353 more])&lt;br /&gt;
* Fixed inconsistent hovered font color on buttons and dropdowns. ([https://forums.factorio.com/49213 more])&lt;br /&gt;
* Fixed train stuttering with only disabled stations in their schedule ([https://forums.factorio.com/47911 more])&lt;br /&gt;
* Fixed that you could disconnect wires at any distance. ([https://forums.factorio.com/46259 more])&lt;br /&gt;
* Fixed the icon used when rendering coal being held by construction robots. ([https://forums.factorio.com/49399 more])&lt;br /&gt;
* Fixed headless server on macOS getting stuck when in background ([https://forums.factorio.com/46295 more])&lt;br /&gt;
* Fixed that attempting to edit a blueprint label for the second time would show the original label before any edits were made. ([https://forums.factorio.com/49267 more])&lt;br /&gt;
* Fixed that &amp;lt;code&amp;gt;--start-server-load-scenario&amp;lt;/code&amp;gt; wouldn&#039;t give an error when the specified scenario couldn&#039;t be found. ([https://forums.factorio.com/45532 more])&lt;br /&gt;
* Fixed that robots would leave items on the ground when building ghosts in some cases. ([https://forums.factorio.com/49449 more])&lt;br /&gt;
* Fixed train GUI size problems when the fuel tab is removed due to it going out of reach. ([https://forums.factorio.com/48991 more])&lt;br /&gt;
* Fixed that blacklisting tile ghosts in the deconstruction planner didn&#039;t work. ([https://forums.factorio.com/49450 more])&lt;br /&gt;
=== Modding ===&lt;br /&gt;
* Fixed that the fluid wagon wouldn&#039;t show the equipment grid when one was added through mods. ([https://forums.factorio.com/48167 more])&lt;br /&gt;
* Fixed loading the item-with-tags item type. ([https://forums.factorio.com/49234 more])&lt;br /&gt;
=== Scripting ===&lt;br /&gt;
* Fixed set_command with an empty list of commands would crash the game. ([https://forums.factorio.com/48226 more])&lt;br /&gt;
* Fixed LuaRandomGenerator docs. ([https://forums.factorio.com/48888 more])&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaTechnology::level&amp;lt;/code&amp;gt; write support for level-based technology. ([https://forums.factorio.com/47733 more])&lt;br /&gt;
&lt;br /&gt;
== 0.15.18 ==&lt;br /&gt;
Date: 01. 06. 2017&lt;br /&gt;
=== Bugfixes ===&lt;br /&gt;
* Fixed that wire connections were not preserved in tightspot campaign. ([https://forums.factorio.com/48910 more])&lt;br /&gt;
* Fixed various crashes on macOS related to logistic counts. ([https://forums.factorio.com/49053 more])&lt;br /&gt;
=== Modding ===&lt;br /&gt;
* Changed default value of &amp;quot;allow_custom_vectors&amp;quot; in inserter prototype to true, vanilla inserters set it to false explicitly.&lt;br /&gt;
&lt;br /&gt;
== 0.15.17 ==&lt;br /&gt;
Date: 01. 06. 2017&lt;br /&gt;
=== Graphics ===&lt;br /&gt;
* Inserters in high resolution; normal resolution inserters are unchanged.&lt;br /&gt;
=== Bugfixes ===&lt;br /&gt;
* Fixed some inconsistencies in programmable speaker gui ([https://forums.factorio.com/48593 more])&lt;br /&gt;
* Fixed that headless mode wiped out controls section of config file ([https://forums.factorio.com/47950 more])&lt;br /&gt;
* Fixed that detached roboports (e.g. after blackout) would not reset circuit network readings on number of robots ([https://forums.factorio.com/48915 more])&lt;br /&gt;
* Fixed that active blueprint/deconstruction-planner selection did not reset when switching between game and map ([https://forums.factorio.com/48815 more])&lt;br /&gt;
* Fixed AltGr behavior with special characters ([https://forums.factorio.com/47040 more])&lt;br /&gt;
* Fixed that mining bar would steal mouse focus ([https://forums.factorio.com/46999 more])&lt;br /&gt;
* Fixed the /evolution command would underflow when showing negative pollution values. ([https://forums.factorio.com/48786 more])&lt;br /&gt;
* Fixed crash when mod-list failed to save when exiting the game. ([https://forums.factorio.com/47371 more])&lt;br /&gt;
* Fixed game would not save at all if generating preview picture failed. ([https://forums.factorio.com/47342 more])&lt;br /&gt;
* Fixed desync related to driving vehicles. ([https://forums.factorio.com/48826 more])&lt;br /&gt;
* Fixed unnecessary quotes in programmable speaker note translations ([https://forums.factorio.com/48839 more])&lt;br /&gt;
* Fixed that the bonus GUI wouldn&#039;t fit on screen with a large amount of modded content. ([https://forums.factorio.com/48755 more])&lt;br /&gt;
* Fixed crash when closing public server. ([https://forums.factorio.com/48889 more])&lt;br /&gt;
* Fixed that filter inserters lost their filter in tightspot campaign. ([https://forums.factorio.com/48490 more])&lt;br /&gt;
* Fixed empty space would be rendered if glyph was missing in current font. ([https://forums.factorio.com/38937 more])&lt;br /&gt;
* Fixed that resizing the game window while catching up after joining a multiplayer game would leave the map blank. ([https://forums.factorio.com/48947 more])&lt;br /&gt;
* Fixed issue and desync when disconnecting one wire color of an entity connected to 2 wire colors. ([https://forums.factorio.com/48876 more])&lt;br /&gt;
* Fixed a multiplayer crash that would happen when a player left whilst uploading their blueprint library and then rejoined the same server. ([https://forums.factorio.com/47820 more])&lt;br /&gt;
* Fixed another issue that prevented spawners from spawning. ([https://forums.factorio.com/48931 more])&lt;br /&gt;
* Fixed game would fail to load if max-texture-size was too low. ([https://forums.factorio.com/48985 more])&lt;br /&gt;
=== Modding ===&lt;br /&gt;
* Moved the &amp;quot;mod-settings.json&amp;quot; file so it now resides in the &amp;quot;mods&amp;quot; subfolder allowing it to work with the mod-directory command line option.&lt;br /&gt;
* Added support for virtual-signal migrations.&lt;br /&gt;
* Inserters now require the inserter prototype property &amp;quot;allow_custom_vectors&amp;quot; to be true before they allow setting custom pickup/drop locations.&lt;br /&gt;
* Font paths were moved from locale cfg to locale info.json (see core/en/info.json).&lt;br /&gt;
* Changed default value of hand_length in inserter prototype to 0.75, to make inserter shadow look nicer.&lt;br /&gt;
=== Scripting ===&lt;br /&gt;
* Fixed crash when teleporting character entities while in vehicles. ([https://forums.factorio.com/45519 more])&lt;br /&gt;
* Fixed that character.character_maximum_following_robot_count_bonus didn&#039;t work. ([https://forums.factorio.com/48837 more])&lt;br /&gt;
* Fixed that /help for lua commands wouldn&#039;t do parameter substitution correctly. ([https://forums.factorio.com/47382 more])&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaEntityPrototype::resource_categories&amp;lt;/code&amp;gt;, fluid, and pumping_speed read.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaEntity::previous_recipe&amp;lt;/code&amp;gt; read.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaEntityPrototype::stack&amp;lt;/code&amp;gt;/allow_custom_vectors read.&lt;br /&gt;
* Changed &amp;lt;code&amp;gt;LuaEntityPrototype::speed&amp;lt;/code&amp;gt; to also work for rolling stocks.&lt;br /&gt;
&lt;br /&gt;
== 0.15.16 ==&lt;br /&gt;
Date: 27. 05. 2017&lt;br /&gt;
=== Changes ===&lt;br /&gt;
* Temporarily reverted GUI interaction changes (some GUI elements responding only to left mouse button, buttons clicked on mouse up instead of mouse down) introduced in 0.15.13 and 0.15.14.&lt;br /&gt;
=== Bugfixes ===&lt;br /&gt;
* Fixed the &amp;quot;back&amp;quot; button wouldn&#039;t work in the save-game GUI. ([https://forums.factorio.com/48657 more])&lt;br /&gt;
* Fixed the &amp;quot;cancel&amp;quot; button wouldn&#039;t work in the user-login GUI. ([https://forums.factorio.com/48677 more])&lt;br /&gt;
* Fixed that the map editor item/inventory buttons didn&#039;t work. ([https://forums.factorio.com/48685 more])&lt;br /&gt;
* Fixed beacons would &amp;quot;wobble&amp;quot; in blueprints. ([https://forums.factorio.com/48596 more])&lt;br /&gt;
* Fixed crashes related to clicking different buttons.&lt;br /&gt;
* As a one-time migration, enemy spawners will reset their absorbed pollution to zero when a save from a previous version of 0.15 is loaded. ([https://forums.factorio.com/48662 more])&lt;br /&gt;
** This is to avoid an extreme temporary spike in difficulty that would happen after loading a save with many spawners that were affected by a bug in the previous versions.&lt;br /&gt;
* Fixed the market GUI didn&#039;t work. ([https://forums.factorio.com/48664 more])&lt;br /&gt;
* Fixed crash when pollution reaches unreasonably far chunk. ([https://forums.factorio.com/48680 more])&lt;br /&gt;
* Fixed power bars glitch in electric network statistics dialog. ([https://forums.factorio.com/48630 more])&lt;br /&gt;
=== Scripting ===&lt;br /&gt;
* Fixed setting &amp;lt;code&amp;gt;LuaGuiElement::elem_value&amp;lt;/code&amp;gt; would always expect the elem_type to be &amp;quot;item&amp;quot;. ([https://forums.factorio.com/48610 more])&lt;br /&gt;
&lt;br /&gt;
== 0.15.15 ==&lt;br /&gt;
Date: 26. 05. 2017&lt;br /&gt;
=== Bugfixes ===&lt;br /&gt;
* Fixed desync related to loading pre 0.15.14 save with beacons marked for deconstruction without resaving it first.&lt;br /&gt;
* Fixed that spawners would sometimes stop spawning units even when polluted. ([https://forums.factorio.com/46805 more])&lt;br /&gt;
* Fixed crash when changing assembling machine recipe. ([https://forums.factorio.com/48600 more])&lt;br /&gt;
* Fixed crash that would happen after clicking a button in the tech tree. ([https://forums.factorio.com/48609 more])&lt;br /&gt;
=== Scripting ===&lt;br /&gt;
* Fixed crash when creating smoke entity through create-entity trigger effect. ([https://forums.factorio.com/48598 more])&lt;br /&gt;
* Added &amp;lt;code&amp;gt;Entity::update_connections&amp;lt;/code&amp;gt;. It updates connection of loader and beacon to entities that might have been teleported out or in. The effect might include more things later on.&lt;br /&gt;
&lt;br /&gt;
== 0.15.14 ==&lt;br /&gt;
Date: 26.05.2017&lt;br /&gt;
=== Optimisations ===&lt;br /&gt;
* Optimised beacon update times which helps especially when the power is not full and it fluctuates.&lt;br /&gt;
=== Changes ===&lt;br /&gt;
* Added support for using username and password for proxy connections.&lt;br /&gt;
* Changed technology sorting. All of the science pack types affect the order, not just the most expensive one. ([https://forums.factorio.com/48448 more])&lt;br /&gt;
* Leading and trailing whitespace will be trimmed from host name or IP address entered to Direct Connect multiplayer dialog. ([https://forums.factorio.com/48489 more])&lt;br /&gt;
* Electric network info window shows all connected entities in the list and the graph even when they have 0 consumption/production.&lt;br /&gt;
** This means, that the count of entities connected to the network is shown even if they don&#039;t consume or produce.&lt;br /&gt;
* Electric poles that have 0 consumption as well as 0 production show empty electricity graph instead of full. ([https://forums.factorio.com/48513 more])&lt;br /&gt;
=== Bugfixes ===&lt;br /&gt;
* Keypad enter is treated as regular enter ([https://forums.factorio.com/47100 more])&lt;br /&gt;
* All buttons apart the inventory/recipe/crafting queue and item selection slot react on mouse click instead of just mouse down.&lt;br /&gt;
* Fixed that mining drills would continue to insert into entities when moved far away. ([https://forums.factorio.com/48332 more])&lt;br /&gt;
* Fixed that right click and drag in the blueprint setup GUI didn&#039;t work to remove things from the blueprint. ([https://forums.factorio.com/48354 more])&lt;br /&gt;
* Fixed that blueprint icons couldn&#039;t be removed with right click. ([https://forums.factorio.com/48354 more])&lt;br /&gt;
* Fixed that right-clicking items in the crafting queue didn&#039;t work to cancel 5.&lt;br /&gt;
* Fixed window being created slightly offscreen on certain resolutions. ([https://forums.factorio.com/45998 more])&lt;br /&gt;
* Fixed that the edit field for a blueprint book would get reset when bots delivered items to the player. ([https://forums.factorio.com/47498 more])&lt;br /&gt;
* Fixed that inserter facing north was slower compared to other directions. ([https://forums.factorio.com/9141 more])&lt;br /&gt;
* Fixed that the solaris achievement ignored usage of steam-turbines. ([https://forums.factorio.com/48429 more])&lt;br /&gt;
* Fixed that setting logistic requests didn&#039;t work in the map editor. ([https://forums.factorio.com/48432 more])&lt;br /&gt;
* Fixed crash after dropping a blueprint into a book inside the blueprint library. ([https://forums.factorio.com/48518 more])&lt;br /&gt;
* Fixed loading blueprint library from before 0.15.4 might crash. ([https://forums.factorio.com/48506 more])&lt;br /&gt;
* Fixed a crash related to changing the rail system when signals get disconnected from blocks. ([https://forums.factorio.com/48555 more])&lt;br /&gt;
* Fixed that furnaces and assembling machines weren&#039;t rotatable with heat pipe connection. ([https://forums.factorio.com/48574 more])&lt;br /&gt;
* Fixed crash when using &amp;lt;code&amp;gt;--load-game&amp;lt;/code&amp;gt; with an error in a mod. ([https://forums.factorio.com/48550 more])&lt;br /&gt;
=== Modding ===&lt;br /&gt;
* Fixed reading &amp;lt;code&amp;gt;LuaCommandProcessor::commands&amp;lt;/code&amp;gt; when one of the help keys was empty. ([https://forums.factorio.com/48032 more])&lt;br /&gt;
* Fixed that disabled mods could change the mod event order.&lt;br /&gt;
=== Scripting ===&lt;br /&gt;
* Fixed changing force of lab ghost would cause desync.&lt;br /&gt;
* Added LuaCustomGuiElement type &amp;quot;text-box&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== 0.15.13 ==&lt;br /&gt;
Date: 23. 05. 2017&lt;br /&gt;
=== Changes ===&lt;br /&gt;
* Most of the gui elements now work only with left mouse button, so other buttons might be used without interfering with gui.&lt;br /&gt;
=== Bugfixes ===&lt;br /&gt;
* Fixed that biters would sometimes try to attack indestructible entities. ([https://forums.factorio.com/45803 more])&lt;br /&gt;
* Fixed that clearing the blueprint label would make the GUI show the previous label. ([https://forums.factorio.com/45894 more])&lt;br /&gt;
* Fixed personal laser defense equipment shooting at player in vehicle would hit the player instead of the vehicle. ([https://forums.factorio.com/45461 more])&lt;br /&gt;
* Fixed that the edit label button on blueprint books in the library could get hidden behind the delete button. ([https://forums.factorio.com/45904 more])&lt;br /&gt;
* Fixed missing space after timestamp in server console output messages that didn&#039;t contain tag. ([https://forums.factorio.com/46766 more])&lt;br /&gt;
* Fixed that the blueprint library wouldn&#039;t update blueprints stored in books. ([https://forums.factorio.com/47544 more]) ([https://forums.factorio.com/45814 more])&lt;br /&gt;
* Fixed that reach-distance checks for curved rails only checked against one end of the rail. ([https://forums.factorio.com/47892 more])&lt;br /&gt;
* Fixed bonus GUI display values when the bonuses were negative. ([https://forums.factorio.com/47981 more])&lt;br /&gt;
* Fixed that the auto launch settings of rocket silo was not saved in blueprint. ([https://forums.factorio.com/47964 more])&lt;br /&gt;
* Fixed beta campaign level 02 would error for migrated save games. ([https://forums.factorio.com/47844 more])&lt;br /&gt;
* Fixed locked belts in demo campaign level 03. ([https://forums.factorio.com/44882 more])&lt;br /&gt;
* Localised programmable speaker notes and instruments. ([https://forums.factorio.com/47868 more])&lt;br /&gt;
* Fixed that mining drill window got repositioned to the center every time it switched to another resource. ([https://forums.factorio.com/45692 more])&lt;br /&gt;
* Fixed fluids/virtual signals in the blueprint library wouldn&#039;t migrate correctly between different modded saves. ([https://forums.factorio.com/47897 more])&lt;br /&gt;
* Before 0.14 the game didn&#039;t track online time of players, this caused that games transitioned from pre 0.14 could prevent players to get achievements until they spent enough of time in the game again. So for single player games, when transitioning to 0.15.13, the online time is reset to be full time of the map.&lt;br /&gt;
* Fixed that the bonus progress of assembling machine didn&#039;t reset when the recipe was changed by using copy paste.&lt;br /&gt;
** This could be exploited to get extra free product of expensive items. ([https://forums.factorio.com/48082 more])&lt;br /&gt;
* Fixed crash when loading modded saves that used the flamethrow-explosion entity type. ([https://forums.factorio.com/48101 more])&lt;br /&gt;
* Fixed performance problems when building rails related to large rail sections and chain signals. ([https://forums.factorio.com/48228 more])&lt;br /&gt;
* Fixed desync related to trains.&lt;br /&gt;
* Fixed blueprint library wouldn&#039;t use the Open Item GUI key binding. ([https://forums.factorio.com/48168 more])&lt;br /&gt;
* Fixed that errors in mod locale would only show in the log file instead of giving the standard mod-error GUI. ([https://forums.factorio.com/46914 more])&lt;br /&gt;
* Fixed that turret help view on map did show turrets from other surfaces. ([https://forums.factorio.com/47746 more])&lt;br /&gt;
* Fixed that silo script didn&#039;t validate items on configuration changes. ([https://forums.factorio.com/48236 more])&lt;br /&gt;
* Fixed that tightspot level 05 had incorrect recipes unlocked. ([https://forums.factorio.com/48174 more])&lt;br /&gt;
* Fixed that you could pipette items and break transport belt madness. ([https://forums.factorio.com/48171 more])&lt;br /&gt;
* Fixed that the game would crash when trying to load corrupt blueprint-storage.dat. ([https://forums.factorio.com/48265 more])&lt;br /&gt;
* Fixed that map was not updated correctly when tile editing ended up changing other tiles in different chunk. ([https://forums.factorio.com/48285 more])&lt;br /&gt;
* Fixed crash when loading modded saves that contained specific items without the mods. ([https://forums.factorio.com/48307 more])&lt;br /&gt;
* You can now open circuit network connectible entities while holding copper wire. ([https://forums.factorio.com/48279 more])&lt;br /&gt;
* Fixed crash when closing the game window in Browse Games/Play on LAN gui. ([https://forums.factorio.com/47253 more])&lt;br /&gt;
* Fixed that the bonus progress bar of furnace disappeared when the smelting was not currently in progress.&lt;br /&gt;
* Fixed that changing recipe in the furnace didn&#039;t reset the bonus progress bar. ([https://forums.factorio.com/47439 more])&lt;br /&gt;
* Fixed that selection box of rotated (and modded) storage tank wasn&#039;t respecting the rotation properly. ([https://forums.factorio.com/48315 more])&lt;br /&gt;
=== Modding ===&lt;br /&gt;
* Electric energy sources now support effectivity.&lt;br /&gt;
* Fixed crash when mods add values to data.raw incorrectly. ([https://forums.factorio.com/47932 more])&lt;br /&gt;
* Fixed some entities using heat energy source types wouldn&#039;t connect to heat pipes correctly when rotated. ([https://forums.factorio.com/47524 more])&lt;br /&gt;
* Mod settings now shows the mod display name instead of the mod ID name (My Mod Name instead of my-mod-name).&lt;br /&gt;
* Changing mod startup settings will now fire the on_configuration_changed event when appropriate.&lt;br /&gt;
=== Scripting ===&lt;br /&gt;
* Fixed crash when using game.take_screenshot and then deleting the surface. ([https://forums.factorio.com/46091 more])&lt;br /&gt;
* Fixed the old train ID wouldn&#039;t be included in some cases during the on_train_created event. ([https://forums.factorio.com/47958 more])&lt;br /&gt;
* Fixed crash when trying to register negative event ids. ([https://forums.factorio.com/47975 more])&lt;br /&gt;
* Fixed that force.reset_technology_effects() didn&#039;t preserve currently researched technology and saved technology progress. ([https://forums.factorio.com/48081 more])&lt;br /&gt;
* Fixed &amp;lt;code&amp;gt;LuaEntity::neighbours&amp;lt;/code&amp;gt; return format to match the docs. ([https://forums.factorio.com/48176 more])&lt;br /&gt;
* Fixed &amp;lt;code&amp;gt;LuaPlayer::mine_entity()&amp;lt;/code&amp;gt; would return false when successfully mining the given entity. ([https://forums.factorio.com/48243 more])&lt;br /&gt;
* Changed create_entity &#039;item-request-proxy&#039; &amp;quot;modules&amp;quot; to take the same format as &amp;lt;code&amp;gt;LuaEntity::item_requests&amp;lt;/code&amp;gt;. ([https://forums.factorio.com/47770 more])&lt;br /&gt;
* Changed &amp;lt;code&amp;gt;LuaSurface::freeze_daytime()&amp;lt;/code&amp;gt; to freeze_daytime read/write.&lt;br /&gt;
* Removed &amp;lt;code&amp;gt;LuaPlayer::cursor_position&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaEntity::proxy_target&amp;lt;/code&amp;gt; read - the target an item-request-proxy is pointing at if any.&lt;br /&gt;
* Added LuaEntityPrototype/&amp;lt;code&amp;gt;LuaEquipmentPrototype::electric_energy_source_prototype&amp;lt;/code&amp;gt; read.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaEntityPrototype::fluid_usage_per_tick&amp;lt;/code&amp;gt;, maximum_temperature read, target_temperature.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaForce::get_saved_technology_progress()&amp;lt;/code&amp;gt; and set_saved_technology_progress().&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaFluidPrototype::gas_temperature&amp;lt;/code&amp;gt; read.&lt;br /&gt;
&lt;br /&gt;
== 0.15.12 ==&lt;br /&gt;
Date: 18. 05. 2017&lt;br /&gt;
=== Changes ===&lt;br /&gt;
* Zooming with the mouse wheel in the map and zoom-to-world is less aggressive.&lt;br /&gt;
* Fast entity transfer by dragging (ctrl + clicking and dragging) will remember if you&#039;re trying to insert or extract items.&lt;br /&gt;
* Changed the deconstruction planner &amp;quot;trees only&amp;quot; filter to &amp;quot;trees/rocks only&amp;quot;.&lt;br /&gt;
* Lab speed info in the description contains the researched speed bonus as well.&lt;br /&gt;
* Sprite quality defaults to High when at least 2.7 GB VRAM is detected (instead of 1.7 GB).&lt;br /&gt;
* Video memory usage defaults to All when at least 1.5 GB VRAM is detected (instead of 0.8 GB).&lt;br /&gt;
=== Bugfixes ===&lt;br /&gt;
* The statistics window (electric/production/kills) will automatically move to avoid being partially offscreen. ([https://forums.factorio.com/37806 more])&lt;br /&gt;
* Fixed that keypad /*-+, enter and delete were not usable in the text boxes if assigned in the controls.&lt;br /&gt;
* Fixed that power poles could be built at any distance by exploiting click-and-drag. ([https://forums.factorio.com/46861 more])&lt;br /&gt;
* Fixed marking underground belt output for deconstruction wouldn&#039;t block input from pushing more items into the underground part. ([https://forums.factorio.com/47668 more])&lt;br /&gt;
* Fixed &amp;quot;Read Stopped Train&amp;quot; checkbox not showing the correct value. ([https://forums.factorio.com/47736 more])&lt;br /&gt;
* Fixed entities with a burner energy source would show the incorrect power consumption. ([https://forums.factorio.com/44741 more])&lt;br /&gt;
* Fixed that production achievements could not be obtained. ([https://forums.factorio.com/47793 more])&lt;br /&gt;
* Fixed that some achievements (raining bullets, logistic network embargo, maybe more) were not properly marked as gained. ([https://forums.factorio.com/47780 more])&lt;br /&gt;
* Show the productivity bonus on mining drills even when they have no other effects on them. ([https://forums.factorio.com/47786 more])&lt;br /&gt;
* Fixed some GUI shortcuts not working when colliding with other shortcuts. ([https://forums.factorio.com/45902 more])&lt;br /&gt;
* Fixed that electric network visualisation on chart showed electric poles from other surfaces. ([https://forums.factorio.com/47746 more])&lt;br /&gt;
* Fixed that non-ASCII input wasn&#039;t possible on Linux. ([https://forums.factorio.com/45484 more])&lt;br /&gt;
* Fixed error when loading a save containing a folder which contained only subfolders but no files. ([https://forums.factorio.com/45442 more])&lt;br /&gt;
* Fixed swinging axe as attack might spawn mining particles of a nearby tree or resource patch. ([https://forums.factorio.com/46265 more])&lt;br /&gt;
* Fixed that signals built by robots on places that didn&#039;t match the suggested direction didn&#039;t connect. This caused that some otherwise correct blueprints required manual intervention to fix the signals. ([https://forums.factorio.com/46381 more])&lt;br /&gt;
* Fixed handling of X11 focus events. ([https://forums.factorio.com/47768 more])&lt;br /&gt;
* Fixed trains wouldn&#039;t leave disabled stations when the next station in the schedule was the same station. ([https://forums.factorio.com/47805 more])&lt;br /&gt;
* Fixed train stops wouldn&#039;t import as string correctly. ([https://forums.factorio.com/47870 more])&lt;br /&gt;
* Fixed requester chests would render numbers larger than 2,147,483,647 as negative values. ([https://forums.factorio.com/47852 more])&lt;br /&gt;
* Fixed logging in with email in updater set your username to your email. ([https://forums.factorio.com/47908 more])&lt;br /&gt;
=== Modding ===&lt;br /&gt;
* Fixed that electric boiler didn&#039;t work. ([https://forums.factorio.com/47716 more])&lt;br /&gt;
* Fixed int mod setting error display message didn&#039;t show the upper limit correctly. ([https://forums.factorio.com/47862 more])&lt;br /&gt;
=== Scripting ===&lt;br /&gt;
* Fixed cloning blueprint books wouldn&#039;t copy the label/active index. ([https://forums.factorio.com/47801 more])&lt;br /&gt;
* Fixed that inoperable entities couldn&#039;t be rotated even when rotatable was true. ([https://forums.factorio.com/47842 more])&lt;br /&gt;
* Changed &amp;lt;code&amp;gt;LuaItemStack::trees_only&amp;lt;/code&amp;gt; to trees_and_rocks_only.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaEntity::loader_type&amp;lt;/code&amp;gt; write.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaFlowStatistics::on_flow()&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Fixed lua documentation for DeciderCombinatorParameters and CircuitCondition. ([https://forums.factorio.com/47829 more])&lt;br /&gt;
* Fixed passing invalid arguments to &amp;lt;code&amp;gt;LuaGame::take_screenshot&amp;lt;/code&amp;gt; would cause desync. ([https://forums.factorio.com/47890 more])&lt;br /&gt;
&lt;br /&gt;
== 0.15.11 ==&lt;br /&gt;
Date: 16. 05. 2017&lt;br /&gt;
=== Minor Features ===&lt;br /&gt;
* When a train is stopped at the train stop, a circuit network signal is sent with a unique number for that train. ([https://forums.factorio.com/46234 more])&lt;br /&gt;
=== Changes ===&lt;br /&gt;
* Added headless server option &amp;lt;code&amp;gt;--server-id&amp;lt;/code&amp;gt; to allow specifying custom path to the server ID file.&lt;br /&gt;
* Increased the minimum custom UI scale from 50% to 80% to avoid some scaling issues.&lt;br /&gt;
* The zoom level at which the map switches from &#039;map view&#039; to &#039;world view&#039; was increased.&lt;br /&gt;
* The first level of infinite researches is not needed for the tech maniac achievement anymore.&lt;br /&gt;
* The game will default to low sprite quality on computers with less than 2.5GB RAM. ([https://forums.factorio.com/47525 more])&lt;br /&gt;
* Tweaked the rocket launch gui. It doesn&#039;t show the result inventory slot when it is empty to avoid confusion when people put the satellite in it.&lt;br /&gt;
* Removed the zoom-to-world-outside-coverage debug option because it was causing issues. ([https://forums.factorio.com/47442 more])&lt;br /&gt;
* Added &amp;quot;create specialized sprite atlases&amp;quot; option to graphics settings. If checked, tile and shadow sprites won&#039;t be put into separated sprite atlases instead of the main one. This should give graphics driver more room to fit required sprites to graphics memory.&lt;br /&gt;
* Added &amp;quot;atlas texture size&amp;quot; option to graphics settings. Larger atlas texture can fit more sprites into single atlas which reduces CPU load when rendering.&lt;br /&gt;
** But smaller atlases are more likely to fit into VRAM and reduce GPU load when rendering.&lt;br /&gt;
=== Bugfixes ===&lt;br /&gt;
* Fixed nuclear reactor and centrifuge were not placed into toolbelt automatically. ([https://forums.factorio.com/47155 more])&lt;br /&gt;
* Tweaked the way heat pipes work, mainly to make it work the same regardless order of build. ([https://forums.factorio.com/44972 more])&lt;br /&gt;
* Fixed that click-and-drag interaction logic didn&#039;t work for trains. ([https://forums.factorio.com/47180 more])&lt;br /&gt;
* Another attempt to fix the ranged-based research info in the technology icon.&lt;br /&gt;
* Fixed that not all items were cleared in the transport belt madness campaign. ([https://forums.factorio.com/47171 more])&lt;br /&gt;
* Fixed that browse games table was inconsistent after resizing. ([https://forums.factorio.com/47137 more])&lt;br /&gt;
* Achievements should no longer be unlocked when replaying a game. ([https://forums.factorio.com/47151 more])&lt;br /&gt;
* Updated supply challenge level requirements. ([https://forums.factorio.com/46796 more])&lt;br /&gt;
* Fixed fluids consumed/produced by boilers didn&#039;t show in the production stats. ([https://forums.factorio.com/47169 more])&lt;br /&gt;
* Fixed that pasting very large strings wouldn&#039;t work on Linux. ([https://forums.factorio.com/46802 more])&lt;br /&gt;
* Fixed naming convention of transport belt madness campaign levels. ([https://forums.factorio.com/47243 more])&lt;br /&gt;
* Fixed copy-paste with containers so they correctly copy the inventory size limit. ([https://forums.factorio.com/47262 more])&lt;br /&gt;
* Fixed the progress bars in the lab wouldn&#039;t show correctly in some cases. ([https://forums.factorio.com/47131 more])&lt;br /&gt;
* Achievements are no longer be unlocked when replaying a game. ([https://forums.factorio.com/47151 more])&lt;br /&gt;
* Achievements are no longer unlocked by playing multiplayer game in which the player spent less than 50% of time online.&lt;br /&gt;
* Fixed that the blueprint renaming text box would close every time crafting finished. ([https://forums.factorio.com/46970 more])&lt;br /&gt;
* core/backers.json is now included in the core data crc. This means that different content of this file will be properly detected when joining multiplayer game.&lt;br /&gt;
* Fixed that loader filters were not saved in the blueprint string. ([https://forums.factorio.com/47303 more])&lt;br /&gt;
* Gas color is now tinted with the fluids &#039;flow_color&#039;. ([https://forums.factorio.com/47311 more])&lt;br /&gt;
* Fix wave defense crash when a silo died while nobody was connected. ([https://forums.factorio.com/47263 more])&lt;br /&gt;
* Fixed that the &amp;quot;confirm and download&amp;quot; button in the sync-mods-with-save wouldn&#039;t restart the game once all mods were downloaded. ([https://forums.factorio.com/47335 more])&lt;br /&gt;
* Fixed construction robots could get stuck trying to repair curved rail forever. ([https://forums.factorio.com/47359 more])&lt;br /&gt;
* Fixed that the technology cost tooltip description wouldn&#039;t scale correctly. ([https://forums.factorio.com/46445 more])&lt;br /&gt;
* Fixed that the /help command when run from the server console would always output the server commands list. ([https://forums.factorio.com/46406 more])&lt;br /&gt;
* Fixed strange behavior when a train has the same station in the list multiple times with no other valid station. ([https://forums.factorio.com/46473 more])&lt;br /&gt;
* Fixed crash related to dying with some GUI open. ([https://forums.factorio.com/47433 more])&lt;br /&gt;
* Fixed rail signals getting stuck reserved when mining/building rails in some setups. ([https://forums.factorio.com/47333 more])&lt;br /&gt;
* Fixed desync when pumps are setup to pump into the output of an assembling machine. ([https://forums.factorio.com/47402 more])&lt;br /&gt;
* Fixed the final level of formula based research would show the wrong name when researched.&lt;br /&gt;
* Fixed crash when maximizing the game with the achievements window open. ([https://forums.factorio.com/46936 more])&lt;br /&gt;
* Fixed switching weapons while firing in the tank would keep playing the previous weapon sound. ([https://forums.factorio.com/46103 more])&lt;br /&gt;
* The productivity value in the  miner description now contains also the researched bonus.&lt;br /&gt;
* Fixed insert sending a signal twice during fast replace. ([https://forums.factorio.com/47486 more])&lt;br /&gt;
* Fixed crash that would sometimes happen when a player left whilst some other player was in the process of joining. ([https://forums.factorio.com/46516 more])&lt;br /&gt;
* Fixed hazard concrete item description. ([https://forums.factorio.com/46154 more])&lt;br /&gt;
* Fixed that some of the slider in the new game settings weren&#039;t controllable by scrollbar.&lt;br /&gt;
* Fixed recipes with long names would extend out of the tooltip GUI. ([https://forums.factorio.com/45125 more])&lt;br /&gt;
* Fixed keyboard input would be blocked in tutorial, if console was opened when entering the tutorial. ([https://forums.factorio.com/44602 more])&lt;br /&gt;
* Fixed robots could deliver the wrong number of modules during roboport blackouts. ([https://forums.factorio.com/47508 more])&lt;br /&gt;
* Fixed that the game would freeze if there was no valid place to drop items on limited size maps. ([https://forums.factorio.com/47640 more])&lt;br /&gt;
* Fixed fire wouldn&#039;t pollute in some cases. ([https://forums.factorio.com/47621 more])&lt;br /&gt;
* Fixed that the delete-blueprint button would show when it wouldn&#039;t actually work. ([https://forums.factorio.com/47599 more])&lt;br /&gt;
* Fixed an error when resource scaling results in amounts too large to store in a resource entity. ([https://forums.factorio.com/47661 more])&lt;br /&gt;
=== Modding ===&lt;br /&gt;
* Fixed generator power output was always based on heat capacity and default temperature of water. ([https://forums.factorio.com/45652 more])&lt;br /&gt;
* Fixed logistic and construction radius visualization sprites would ignore tint. ([https://forums.factorio.com/47689 more])&lt;br /&gt;
=== Scripting ===&lt;br /&gt;
* Fixed setting &amp;lt;code&amp;gt;technology::researched&amp;lt;/code&amp;gt; wouldn&#039;t research all levels of a formula based technology. ([https://forums.factorio.com/45857 more])&lt;br /&gt;
* Fixed it was possible to add gui element with same to the same parent name more than once. ([https://forums.factorio.com/45371 more])&lt;br /&gt;
* Fixed the custom camera widget wouldn&#039;t render the correct entities when switching the surface it was rendering for. ([https://forums.factorio.com/47639 more])&lt;br /&gt;
* Fixed &amp;lt;code&amp;gt;LuaTrain::schedule&amp;lt;/code&amp;gt; would allow an invalid current schedule record. ([https://forums.factorio.com/47691 more])&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaEntityPrototype::mining_speed&amp;lt;/code&amp;gt;, mining_power, energy_usage, max_energy_usage, normal_resource_amount, infinite_depletion_resource_amount, attack_parameters read.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaLampControlBehavior::color&amp;lt;/code&amp;gt; read.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaRailSignalControlBehavior::red_signal&amp;lt;/code&amp;gt;, orange_signal, green_signal, close_signal, read_signal, circuit_condition read/write.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaEntityPrototype::mineable_properties&amp;lt;/code&amp;gt; fluid_amount, required_fluid, mining_trigger, effectivity, consumption, friction_force, braking_force, tank_driving, rotation_speed, turret_rotation_speed, guns, speed, speed_multiplier_when_out_of_energy, max_payload_size, energy_per_move, energy_per_tick, max_energy, min_to_charge, max_to_charge properties, and building_grid_bit_shift.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaBurner::fuel_category&amp;lt;/code&amp;gt; read.&lt;br /&gt;
* Added LuaBurnerPrototype.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaControl::mine_entity()&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaEntity::text&amp;lt;/code&amp;gt; read/write.&lt;br /&gt;
* Added read/write support for flying text color through &amp;lt;code&amp;gt;LuaEntity::color&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaTrain::get_fluid_count()&amp;lt;/code&amp;gt;, get_fluid_contents(), remove_fluid(), insert_fluid(), and clear_fluids_inside().&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaGameScript::check_prototype_translations()&amp;lt;/code&amp;gt; - a way to check if all expected prototypes have valid translations.&lt;br /&gt;
* Changed &amp;lt;code&amp;gt;LuaEntityPrototype::mineable_properties&amp;lt;/code&amp;gt; &amp;quot;miningtime&amp;quot; -&amp;gt; &amp;quot;mining_time&amp;quot; and &amp;quot;miningparticle&amp;quot; -&amp;gt; &amp;quot;mining_particle&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== 0.15.10 ==&lt;br /&gt;
Date: 10. 05. 2017&lt;br /&gt;
=== Changes ===&lt;br /&gt;
* Added rail block debug visualization.&lt;br /&gt;
* Increased maximum wire distance of all circuit connectable entities from 7.5 to 9.&lt;br /&gt;
* Steam is now internally a separate fluid from hot water.&lt;br /&gt;
* Coal liquefaction recipe now requires steam instead of water.&lt;br /&gt;
* Terrain, shadow and smoke sprites are sorted into separate sprite atlases in attempt to optimize GPU memory access during rendering.&lt;br /&gt;
=== Graphics ===&lt;br /&gt;
* Added burner mining drill in high resolution and replaced the normal resolution version.&lt;br /&gt;
=== Bugfixes ===&lt;br /&gt;
* Fixed speed-module-3 recipe typo. ([https://forums.factorio.com/46820 more])&lt;br /&gt;
* Fixed downgrading underground belts by fast replace would not work for even if output piece was close enough. ([https://forums.factorio.com/46595 more])&lt;br /&gt;
* Fixed that robots trying to repair each other wouldn&#039;t work correctly. ([https://forums.factorio.com/46628 more])&lt;br /&gt;
* More understandable description current level of technologies that have multiple levels merged into one slot in the technology gui.&lt;br /&gt;
* Fixed crash that would happen when loading old modded saves in vanilla Factorio. ([https://forums.factorio.com/46642 more])&lt;br /&gt;
* Fixed that it wasn&#039;t possible to fast-transfer blueprints to other players. ([https://forums.factorio.com/46178 more])&lt;br /&gt;
* Fixed that hitting rocks with vehicles made no sound. ([https://forums.factorio.com/45888 more])&lt;br /&gt;
* Fixed blueprint preview icons scaling and size to be consistent across all places they&#039;re shown. ([https://forums.factorio.com/45021 more])&lt;br /&gt;
* Fixed that you couldn&#039;t delete blueprints from your trash slots. ([https://forums.factorio.com/46903 more])&lt;br /&gt;
* Fixed that storage tanks used 4 directions although visually only showed 2 so they would conflict in blueprints. ([https://forums.factorio.com/46900 more])&lt;br /&gt;
* Fixed crash when loading blueprint storage while also migrating save files. ([https://forums.factorio.com/46910 more])&lt;br /&gt;
* Fixed a useless error when locale isn&#039;t correct for a scenario. ([https://forums.factorio.com/46909 more])&lt;br /&gt;
* Fixed possible desync related to inserter circuit network stack size control.&lt;br /&gt;
* Fixed that multiple passengers in a train could result in erratic behavior when trying to drive. ([https://forums.factorio.com/35810 more])&lt;br /&gt;
* Fixed that manually inserting the satellite into the silo when auto-launch is enabled wouldn&#039;t launch the rocket. ([https://forums.factorio.com/46610 more])&lt;br /&gt;
* Fixed crash when killing yourself with your own weapon. ([https://forums.factorio.com/46984 more])&lt;br /&gt;
* Fixed F12 might freeze or crash the game. ([https://forums.factorio.com/46790 more])&lt;br /&gt;
* Fixed circuit network controlled rail signal sometimes not going red when building rails. ([https://forums.factorio.com/43839 more])&lt;br /&gt;
* Fixed crash when starting tutorial at the same tick as autosave starts. ([https://forums.factorio.com/45701 more])&lt;br /&gt;
* Fixed that it wasn&#039;t possible to scroll the active blueprint in a blueprint book if the scroll bar was visible. ([https://forums.factorio.com/45898 more])&lt;br /&gt;
* Fixed crash when exiting some modded games. ([https://forums.factorio.com/47037 more])&lt;br /&gt;
* Fixed that Factorio wouldn&#039;t keep file permissions when saving a map. ([https://forums.factorio.com/46442 more])&lt;br /&gt;
* Fixed that the blueprint library wouldn&#039;t remember the player filter after opening a book. ([https://forums.factorio.com/45932 more])&lt;br /&gt;
* Fixed that player names in the blueprint library weren&#039;t sorted. ([https://forums.factorio.com/45920 more])&lt;br /&gt;
* Fixed the blueprint book tooltips would flicker when your inventory changed. ([https://forums.factorio.com/47064 more])&lt;br /&gt;
* Fixed desync when catching up.&lt;br /&gt;
* Fixed desync when adding/removing blueprints to blueprint books in some cases. ([https://forums.factorio.com/46719 more])&lt;br /&gt;
* Fixed some crashes related to loading invalid combinator parameters. ([https://forums.factorio.com/46500 more])&lt;br /&gt;
=== Modding ===&lt;br /&gt;
* The game will now detect when joining a multiplayer game if any mods you&#039;re using are broken such that joining the game could result in desynching.&lt;br /&gt;
* Fixed that exiting the mod settings GUI without changing anything would incorrectly think you changed settings in some cases. ([https://forums.factorio.com/46478 more])&lt;br /&gt;
* Fixed crash when loading mods control.lua produces an error. ([https://forums.factorio.com/46009 more])&lt;br /&gt;
* Added favourite server icon to utility sprites. ([https://forums.factorio.com/46059 more])&lt;br /&gt;
* Added a global table &amp;quot;mods&amp;quot; - a mapping of mod name to mod version available during the prototype loading stage.&lt;br /&gt;
=== Scripting ===&lt;br /&gt;
* Fixed some missing Lua docs and added information about the settings stage to the data life cycle. ([https://forums.factorio.com/44918 more])&lt;br /&gt;
* Fixed crash when trying to create stickers on entities that don&#039;t support them. ([https://forums.factorio.com/46334 more])&lt;br /&gt;
* Fixed that &amp;lt;code&amp;gt;LuaGuiElement::surface_index&amp;lt;/code&amp;gt; was using 0-based indexing. ([https://forums.factorio.com/46502 more])&lt;br /&gt;
* Fixed that &amp;lt;code&amp;gt;LuaEntity::graphics_variation&amp;lt;/code&amp;gt; was using 0-based indexing. ([https://forums.factorio.com/46762 more])&lt;br /&gt;
* Fixed that &amp;lt;code&amp;gt;LuaItemStack::active_index&amp;lt;/code&amp;gt; was using 0-based indexing. ([https://forums.factorio.com/46963 more])&lt;br /&gt;
* Fixed rendering of layered icons in custom GUI. ([https://forums.factorio.com/45926 more])&lt;br /&gt;
* Added &amp;quot;item&amp;quot; and &amp;quot;tags&amp;quot; to the robot built entity/tile events.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaEquipment::burner&amp;lt;/code&amp;gt; read.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaEntityPrototype::crafting_categories&amp;lt;/code&amp;gt; read.&lt;br /&gt;
* Added support for setting &#039;tags&#039; and &#039;custom_description&#039; when making items through Lua.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaBurner::burnt_result_inventory&amp;lt;/code&amp;gt; read.&lt;br /&gt;
* Added LuaInserterControlBehavior stack size read/write.&lt;br /&gt;
* Added LuaTrainStopControlBehavior enable/disable conditions.&lt;br /&gt;
* Added LuaTransportBeltControlBehavior enable_disable, read_contents, read_contents_mode read/write.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaTrain::id&amp;lt;/code&amp;gt; read.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaEntityPrototype::supply_area_distance&amp;lt;/code&amp;gt; read.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaEntityPrototype::max_wire_distance&amp;lt;/code&amp;gt; read.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaEntityPrototype::max_circuit_wire_distance&amp;lt;/code&amp;gt; read.&lt;br /&gt;
&lt;br /&gt;
== 0.15.9 ==&lt;br /&gt;
Date: 05. 05. 2017&lt;br /&gt;
=== Bugfixes ===&lt;br /&gt;
* Fixed crash when opening the train GUI while in the train.&lt;br /&gt;
&lt;br /&gt;
== 0.15.8 ==&lt;br /&gt;
Date: 05. 05. 2017&lt;br /&gt;
=== Changes ===&lt;br /&gt;
* New Supply challenge map.&lt;br /&gt;
* Circuit network-based inserter stack size overrides now take effect immediately instead of waiting until the inserter has moved something.&lt;br /&gt;
=== Bugfixes ===&lt;br /&gt;
* Show 0.7% in the uranium processing recipe instead of 0.0 for uranium 235. This generally works for any recipe that gives less than 1 of anything.&lt;br /&gt;
* Don&#039;t draw player names on the map that is not in range of player or radar on the zoomed in map.&lt;br /&gt;
* Fix some ores with negative values in Tight spot level 04. ([https://forums.factorio.com/45656 more])&lt;br /&gt;
* Fixed inserters couldn&#039;t insert fuel into locomotives. ([https://forums.factorio.com/46467 more])&lt;br /&gt;
* Fixed random inaccessible map area in Beta campaign level 04. ([https://forums.factorio.com/46393 more])&lt;br /&gt;
* Fixed various inserter GUI bugs. ([https://forums.factorio.com/45337 more])&lt;br /&gt;
* Fixed train station tutorial relied on specific train schedule state. ([https://forums.factorio.com/45821 more])&lt;br /&gt;
=== Balancing ===&lt;br /&gt;
* Changed iron gear wheel price of fast and underground belt from 20-&amp;gt;40 and 40-&amp;gt;80 to even out the bigger length.&lt;br /&gt;
* Fix that biters would sometimes stop and go to sleep during an attack. ([https://forums.factorio.com/45320 more])&lt;br /&gt;
&lt;br /&gt;
== 0.15.7 ==&lt;br /&gt;
Date: 05. 05. 2017&lt;br /&gt;
=== Balancing ===&lt;br /&gt;
* Changed production science pack recipe to require assembling machine 1 instead of pumpjack.&lt;br /&gt;
* Changed science pack 3 to require electric mining drill instead of assembling machine 1.&lt;br /&gt;
* Changed crafting times:&lt;br /&gt;
** Oil refinery 20-&amp;gt;10&lt;br /&gt;
** Pumpjack 10-&amp;gt;5&lt;br /&gt;
** Chemical plant 10-&amp;gt;5&lt;br /&gt;
** Lab 5-&amp;gt;3&lt;br /&gt;
** Roboport 15-&amp;gt;10&lt;br /&gt;
* Reduced the mining time of the storage tank from 3 seconds to 1.5 seconds.&lt;br /&gt;
* Increased the mining time of the reactor from 0.5 seconds to 1.5 seconds.&lt;br /&gt;
* Increased the underground belt length (basic, fast, express) from 5,5,5 to  5,7,9.&lt;br /&gt;
=== Changes ===&lt;br /&gt;
* When a connection is refused the username is included in the log message. ([https://forums.factorio.com/46036 more])&lt;br /&gt;
* Copying entity settings from a disconnected entity will no longer disconnect circuit wires. ([https://forums.factorio.com/45816 more])&lt;br /&gt;
* Trains in manual mode now have twice the penalty and trains in manual mode without a player in them have 2.5 times the penalty.&lt;br /&gt;
* Reactors produce used up fuel cell when it is completely consumed instead of at start. ([https://forums.factorio.com/46123 more])&lt;br /&gt;
* Reverted flamethrower turret liquid consumption change from 0.15.5. Instead of 30/s it will use 3/s.&lt;br /&gt;
* Flamethrower turret no longer shoots in its prepare state. ([https://forums.factorio.com/46160 more])&lt;br /&gt;
* /color command defaults alpha (the 4th parameter) to 255 (instead of 0) if not specified. ([https://forums.factorio.com/46338 more])&lt;br /&gt;
* Reduced default requester chest paste multiplier for nuclear reactor recipe to 1 and for centrifuge recipe to 2. ([https://forums.factorio.com/45878 more])&lt;br /&gt;
* Inserters will no longer take fuel from locomotives and instead will take the burnt result items if the locomotive fuel uses that system.&lt;br /&gt;
=== Bugfixes ===&lt;br /&gt;
* Fixed that clicking locomotive from zoomed in map view would change color (and show fuel) for some other locomotive on the train ([https://forums.factorio.com/46137 more])&lt;br /&gt;
* Fixed that construction bots could repair vehicles from very far. ([https://forums.factorio.com/45517 more])&lt;br /&gt;
* Fixed that rocket silo or other GUIs would obscure finished-game dialog. ([https://forums.factorio.com/46157 more])&lt;br /&gt;
* Fixed that boiler could output a different fluid than its input. ([https://forums.factorio.com/46023 more])&lt;br /&gt;
* Fixed that the inserter would sometimes report bad values to the circuit network. ([https://forums.factorio.com/45598 more])&lt;br /&gt;
* Fixed pump recipe description having wrong pumping speed. ([https://forums.factorio.com/45863 more])&lt;br /&gt;
* Fixed wrong error message when loaded headless save file doesn&#039;t exist ([https://forums.factorio.com/45058 more])&lt;br /&gt;
* Fixed the &amp;quot;Input action fragment is missing&amp;quot; crash that would sometimes happen due to packet loss. ([https://forums.factorio.com/45604 more])&lt;br /&gt;
* Fixed crash when resizing the game window while having an assembling machine level 1 GUI open. ([https://forums.factorio.com/46069 more])&lt;br /&gt;
* Fixed alternative zoom controls would do nothing in map editor. ([https://forums.factorio.com/46136 more])&lt;br /&gt;
* Fixed some cargo wagon spritesheets were offset by 1 frame. ([https://forums.factorio.com/44930 more])&lt;br /&gt;
* Fixed that it was hard/not possible to select the character corpse over some entities. ([https://forums.factorio.com/45764 more])&lt;br /&gt;
* Fixed that the blueprint book GUI would scroll to the top after every click. ([https://forums.factorio.com/46184 more])&lt;br /&gt;
* Fixed crash when trying to disconnect non circuit connectible entities using &amp;lt;code&amp;gt;Lua::Entity&amp;lt;/code&amp;gt;::disconnect_neighbour. ([https://forums.factorio.com/46111 more])&lt;br /&gt;
* Fixed that calling &amp;lt;code&amp;gt;Lua::Entity&amp;lt;/code&amp;gt;::disconnect_neighbour would sometimes disconnect more wires than it should.&lt;br /&gt;
* Fixed mod settings corruption when removing mods that contained mod settings. Note: this will reset all mod settings. ([https://forums.factorio.com/46207 more])&lt;br /&gt;
* Fixed inconsistent selection of resource patches on the map. ([https://forums.factorio.com/44596 more])&lt;br /&gt;
* Fixed GUI sizing when resetting mod settings. ([https://forums.factorio.com/46150 more])&lt;br /&gt;
* Fixed that the blueprint book GUI would scroll to the top after every click. ([https://forums.factorio.com/46184 more])&lt;br /&gt;
* Fixed that dropping a blueprint onto a book icon in the library GUI would drop it in the top level instead. ([https://forums.factorio.com/46112 more])&lt;br /&gt;
* Fixed that the blueprint library would sometimes stop opening books. ([https://forums.factorio.com/46004 more])&lt;br /&gt;
* Fixed GUI scaling problems with the assembling machine GUI. ([https://forums.factorio.com/46046 more])&lt;br /&gt;
* Fixed desync related to the on_selected_entity_changed event. ([https://forums.factorio.com/46025 more])&lt;br /&gt;
* Fixed that the atomic bomb shooting speed cooldown didn&#039;t work. ([https://forums.factorio.com/46217 more])&lt;br /&gt;
* Fixed the constant combinator GUI when the constant combinator name was larger than the rest of the GUI. ([https://forums.factorio.com/44227 more])&lt;br /&gt;
* Fixed that the reactor didn&#039;t show fuel in the description. ([https://forums.factorio.com/46266 more])&lt;br /&gt;
* Fixed making blueprints of requester chests with &amp;quot;set requests&amp;quot; would copy the current requests into the blueprint. ([https://forums.factorio.com/46038 more])&lt;br /&gt;
* Fixed that deleting saves with the delete key key wouldn&#039;t maintain focus on the saves list. ([https://forums.factorio.com/45234 more])&lt;br /&gt;
* Fixed crash when mining rails while having the &amp;quot;show rail paths&amp;quot; debug option enabled. ([https://forums.factorio.com/45836 more])&lt;br /&gt;
* Fixed infinite loop when migrating entities from an unrelated type to a roboport type. ([https://forums.factorio.com/44351 more])&lt;br /&gt;
* Fixed that the technology multiplier didn&#039;t apply on infinite research. ([https://forums.factorio.com/45079 more])&lt;br /&gt;
* Fixed filtering server list for games with mods. ([https://forums.factorio.com/46264 more])&lt;br /&gt;
* Fixed mod version checking for automatic mod download. ([https://forums.factorio.com/46321 more])&lt;br /&gt;
* Fixed flamethrower turret would not shoot last single shot worth of liquid. ([https://forums.factorio.com/46311 more])&lt;br /&gt;
* Fixed crash when exiting server list ([https://forums.factorio.com/46293 more])&lt;br /&gt;
* Fixed &amp;quot;Right mouse button to open&amp;quot; in opened armor. ([https://forums.factorio.com/46317 more])&lt;br /&gt;
* Fixed that the blueprint library wouldn&#039;t use scroll bars for shared blueprint books. ([https://forums.factorio.com/45464 more])&lt;br /&gt;
* Fixed that resource patches in unexplored areas could be examined on the map.&lt;br /&gt;
* Fixed rail ghosts could not be placed over ghosts of enemy force. ([https://forums.factorio.com/46335 more])&lt;br /&gt;
* Fixed the sulfuric acid fluid icon. ([https://forums.factorio.com/46371 more])&lt;br /&gt;
* Fixed that /config set password wouldn&#039;t work. ([https://forums.factorio.com/44573 more])&lt;br /&gt;
=== Modding ===&lt;br /&gt;
* Icons are now required to have correct size (which can be overridden by icon_size property). ([https://forums.factorio.com/45700 more])&lt;br /&gt;
* 32x32px for entity, fluid, item, item-group, recipe, technology, virtual-signal&lt;br /&gt;
* 128x128px for achievement, tutorial&lt;br /&gt;
* If icon path references base mod, technology icon is expected to be 128x128px and item-group icon 64x64px.&lt;br /&gt;
* In near future, we may remove default sizes and require icon_size to be always specified.&lt;br /&gt;
* It is no longer possible to teleport any rolling stock or train stop. ([https://forums.factorio.com/45264 more])&lt;br /&gt;
* Added the string mod setting prototype property &amp;quot;auto_trim&amp;quot; defaulting to false.&lt;br /&gt;
=== Scripting ===&lt;br /&gt;
* Fixed LuaChunkIterator could become invalid and crash the game if used. ([https://forums.factorio.com/46366 more])&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaPlayer::mod_settings&amp;lt;/code&amp;gt; read - the runtime player mod settings for the given player.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaEntity::temperature&amp;lt;/code&amp;gt; read/write - the temperature of entities that use the heat energy source type as well as reactors and heat pipes.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaEntity::get_burnt_result_inventory&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== 0.15.6 ==&lt;br /&gt;
Date: 02. 05. 2017&lt;br /&gt;
=== Changes ===&lt;br /&gt;
* Increased roboport construction range to 55 (110x110 area) to make roboports able to build each other without interconnecting their logistic areas, and not break when there are obstacles like trees or rocks.&lt;br /&gt;
=== Bugfixes ===&lt;br /&gt;
* Fixed centrifuge glowing for one frame each time inserter drops something. ([https://forums.factorio.com/45824 more])&lt;br /&gt;
* Fixed biters expansion was biased towards northern part of the map. ([https://forums.factorio.com/45607 more])&lt;br /&gt;
* Fixed blueprint preview splitter not bending nearby belts correctly. ([https://forums.factorio.com/45578 more])&lt;br /&gt;
* Fixed items on ground were not cleared in tightspot campaign. ([https://forums.factorio.com/45666 more])&lt;br /&gt;
* Fixed that mining drills wouldn&#039;t pull in enough acid to continue mining. ([https://forums.factorio.com/45707 more])&lt;br /&gt;
* Fixed that you could complete some advanced signal tutorial stages by blocking trains. ([https://forums.factorio.com/45659 more])&lt;br /&gt;
* Fixed that nuclear fuel reprocessing was used to calculate raw ingredient requirements. ([https://forums.factorio.com/45507 more])&lt;br /&gt;
* Fixed that you could input invalid value to PvP config. ([https://forums.factorio.com/45713 more])&lt;br /&gt;
* Fixed crash when changing force of turret ghost. ([https://forums.factorio.com/45723 more])&lt;br /&gt;
* Fixed inserters would grab items off belts and try to drop them onto rails after the train left. ([https://forums.factorio.com/45693 more])&lt;br /&gt;
* Fixed inserters would rest with their hand above the center of a splitter. ([https://forums.factorio.com/45742 more])&lt;br /&gt;
* Fixed desync caused by heat pipes. ([https://forums.factorio.com/45754 more])&lt;br /&gt;
* Fixed crash when trying to edit mod settings after joining a paused multiplayer game. ([https://forums.factorio.com/45625 more])&lt;br /&gt;
* Fixed removed decoratives were migrated as big-ship-wreck-grass instead of being deleted from map. ([https://forums.factorio.com/45807 more])&lt;br /&gt;
* Fixed input underground belt fast replace would also replace output piece even if input changed direction. ([https://forums.factorio.com/45847 more])&lt;br /&gt;
* Fixed combinators continuing to output signals when parameters are cleared or when disconnecting feedback wire. ([https://forums.factorio.com/45633 more])&lt;br /&gt;
* Fixed programmable speaker continuing to make sounds without a wire connected. ([https://forums.factorio.com/45556 more])&lt;br /&gt;
* Fixed that it wasn&#039;t possible to scroll with the mouse wheel in the mod settings GUI. ([https://forums.factorio.com/45883 more])&lt;br /&gt;
* Fixed updater would fail if Factorio was in folder with name containing non-English characters. ([https://forums.factorio.com/45301 more])&lt;br /&gt;
&lt;br /&gt;
== 0.15.5 ==&lt;br /&gt;
Date: 30. 04. 2017&lt;br /&gt;
=== Bugfixes ===&lt;br /&gt;
* Fixed crash when setting character trash slots through script while having the character GUI opened. ([https://forums.factorio.com/45585 more])&lt;br /&gt;
* Fixed crash on joining a multiplayer game if the &amp;quot;use different mod settings per save&amp;quot; was disabled. ([https://forums.factorio.com/45615 more])&lt;br /&gt;
* Fixed blueprint with roboports wouldn&#039;t draw roboport connections. ([https://forums.factorio.com/45573 more])&lt;br /&gt;
* Fixed crash when building rails in specific setups while trains are reserving signals on the rails being changed. ([https://forums.factorio.com/45627 more])&lt;br /&gt;
* Fixed when changing graphical variation of a tree from script or in map editor. ([https://forums.factorio.com/45630 more])&lt;br /&gt;
* Fixed flamethrower turret was using 10x less fluid than it should.&lt;br /&gt;
* Fixed opening item GUI wasn&#039;t rebindable ([https://forums.factorio.com/45501 more])&lt;br /&gt;
* Fixed burner inserters would try to fuel themselves with fuel they couldn&#039;t use. ([https://forums.factorio.com/45596 more])&lt;br /&gt;
* Fixed crash when deleting chunks in some instances. ([https://forums.factorio.com/45647 more])&lt;br /&gt;
* Fixed one direction of hazard concrete had no walking sounds. ([https://forums.factorio.com/45648 more])&lt;br /&gt;
* Fixed rare crash when getting killed by the locomotive you had opened. ([https://forums.factorio.com/45610 more])&lt;br /&gt;
* Fixed that right clicking the map view buttons would change the option but not update the button. ([https://forums.factorio.com/44611 more])&lt;br /&gt;
* Fixed the generate-map settings wouldn&#039;t be saved when switching to the mod-settings through the generate map GUI. ([https://forums.factorio.com/45081 more])&lt;br /&gt;
* Fixed crash when interacting with the map view buttons in some cases. ([https://forums.factorio.com/44719 more])&lt;br /&gt;
* Fixed crash when mousing over entities in some rare cases. ([https://forums.factorio.com/44873 more])&lt;br /&gt;
* Fixed crash when trying to mine tiles from the zoomed-to-world view. ([https://forums.factorio.com/44884 more])&lt;br /&gt;
* Fixed crash when editing speaker parameters in the map editor. ([https://forums.factorio.com/45676 more])&lt;br /&gt;
* Fixed that train stops wouldn&#039;t show the correct name when changed remotely. ([https://forums.factorio.com/44793 more])&lt;br /&gt;
* Fixed crashes related to electric pole/accumulator removal when migrating saves from 0.14 into 0.15. ([https://forums.factorio.com/45657 more])&lt;br /&gt;
* Fixed rail signals built by robots would frequently lead to the signals not connecting properly. ([https://forums.factorio.com/45382 more])&lt;br /&gt;
* Fixed GUI layout problems in the rocket silo GUI when adding/removing productivity modules. ([https://forums.factorio.com/45523 more])&lt;br /&gt;
* Fixed items on belt flickering when occupying same position. ([https://forums.factorio.com/45490 more])&lt;br /&gt;
=== Scripting ===&lt;br /&gt;
* Fixed module inventory insert() didn&#039;t work for assembling machines. ([https://forums.factorio.com/45678 more])&lt;br /&gt;
&lt;br /&gt;
== 0.15.4 ==&lt;br /&gt;
Date: 29. 04. 2017&lt;br /&gt;
=== Changes ===&lt;br /&gt;
* Added /permissions reset to reset all permissions to default.&lt;br /&gt;
* Steam and water content of fluid wagons are now shown separately in locomotive tooltip.&lt;br /&gt;
* Removed the &amp;quot;minimum chunks between new bases&amp;quot; map generation setting because it wasn&#039;t doing anything.&lt;br /&gt;
* Re-added custom /color support through /color r g b a.&lt;br /&gt;
* PvP: Added a biter easing option to prevent excessively large bases close to team starting areas.&lt;br /&gt;
=== Bugfixes ===&lt;br /&gt;
* Fixed crash when building rails while a train is currently reserving some of the signals. ([https://forums.factorio.com/45145 more])&lt;br /&gt;
* Fixed that you could set the inserter stack size over the researched maximum by sending negative numbers with the circuit network. ([https://forums.factorio.com/44890 more])&lt;br /&gt;
* Fixed combinators continuing to output signals after disconnecting the input. ([https://forums.factorio.com/45094 more])&lt;br /&gt;
* Fixed blueprint would reference force it was created on and crash in rendering if that force no longer existed. ([https://forums.factorio.com/45356 more])&lt;br /&gt;
* Fixed that names of books stored in the blueprint library wouldn&#039;t be preserved after save and load. ([https://forums.factorio.com/44957 more])&lt;br /&gt;
* Fixed supply scenario would sometimes show the next level button in error. ([https://forums.factorio.com/45451 more])&lt;br /&gt;
* Fixed the rocket silo wouldn&#039;t copy the &amp;quot;auto-launch&amp;quot; option in blueprints.&lt;br /&gt;
* Fixed Sulfuric Acid recipe using 10 times less water. ([https://forums.factorio.com/45347 more])&lt;br /&gt;
* Fixed that dropping blueprints into a book inside the library would sometimes drop the wrong blueprint. ([https://forums.factorio.com/45323 more])&lt;br /&gt;
* Fixed crash when changing mod settings runtime while in a multiplayer game. ([https://forums.factorio.com/45395 more])&lt;br /&gt;
* Fixed that opening the blueprint library after calling game.remove_offline_players() would crash the game. ([https://forums.factorio.com/44806 more])&lt;br /&gt;
* Fixed that &amp;lt;code&amp;gt;--start-server&amp;lt;/code&amp;gt; wouldn&#039;t find the save file when given just a name without the .zip suffix. ([https://forums.factorio.com/44551 more])&lt;br /&gt;
* Fixed that it was possible to export a blueprint book into another blueprint book. ([https://forums.factorio.com/45315 more])&lt;br /&gt;
* Fixed that it was possible to have the same blueprint multiple times in the library. ([https://forums.factorio.com/45315 more])&lt;br /&gt;
* Fixed that it was possible to grab a blueprint from the library whilst also holding a deconstruction planner in hand. ([https://forums.factorio.com/45315 more])&lt;br /&gt;
* Fixed desync when moving mouse over areas outside of radar range in zoomed-to-world view. ([https://forums.factorio.com/45455 more])&lt;br /&gt;
* Fixed crash when leaving the technology price multiplier blank. ([https://forums.factorio.com/45269 more])&lt;br /&gt;
* Fixed crash when removing modded rails during save migration. ([https://forums.factorio.com/45436 more])&lt;br /&gt;
* Fixed lab without power would be still rendered as active. ([https://forums.factorio.com/45372 more])&lt;br /&gt;
* Fixed several instances of the &amp;quot;last user&amp;quot; field not getting updated. ([https://forums.factorio.com/45485 more])&lt;br /&gt;
* Fixed rocket silo would not increment its &amp;quot;products finished&amp;quot; count when finishing rocket. ([https://forums.factorio.com/45381 more])&lt;br /&gt;
* Fixed landmines would last forever when friendly fire was disabled. ([https://forums.factorio.com/45379 more])&lt;br /&gt;
* Fixed possible crash when closing Factorio during loading. ([https://forums.factorio.com/45573 more])&lt;br /&gt;
=== Modding ===&lt;br /&gt;
* Blueprints/books/deconstruction item prototypes with the &amp;quot;hidden&amp;quot; flag will no longer show up in the blueprint library. ([https://forums.factorio.com/45474 more])&lt;br /&gt;
* Added missing lua docs index section for settings and fixed some wording. ([https://forums.factorio.com/45380 more])&lt;br /&gt;
=== Scripting ===&lt;br /&gt;
* Fixed assigning invalid index to &amp;lt;code&amp;gt;LuaEntity::graphics_variation&amp;lt;/code&amp;gt; would cause crash. ([https://forums.factorio.com/45420 more])&lt;br /&gt;
* Fixed setting &amp;lt;code&amp;gt;LuaItemStack::blueprint_icons&amp;lt;/code&amp;gt; didn&#039;t work correctly. ([https://forums.factorio.com/45428 more])&lt;br /&gt;
* Fixed teleporting entity with rectangular bounding box would reset bounding box to north orientation and cause desync. ([https://forums.factorio.com/45256 more])&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaEntity::products_finished&amp;lt;/code&amp;gt; for crafting machines.&lt;br /&gt;
&lt;br /&gt;
== 0.15.3 ==&lt;br /&gt;
Date: 27. 04. 2017&lt;br /&gt;
=== Changes ===&lt;br /&gt;
* Wave defense: Units won&#039;t spawn if there are more than 500 already on the map.&lt;br /&gt;
* Wave defense: Added a &#039;Unit bounty bonus&#039; upgrade.&lt;br /&gt;
* Removed the ability to set /color using RGB values.&lt;br /&gt;
* Wave defense: Added Uranium to the map.&lt;br /&gt;
* &amp;quot;Disable all mods&amp;quot; option in mod load error dialog doesn&#039;t disable base mod anymore.&lt;br /&gt;
* Changed stack-split so &amp;quot;splitting&amp;quot; a stack of 1 still transfers the 1 item. ([https://forums.factorio.com/45149 more])&lt;br /&gt;
* Change submachine stack size to 5. ([https://forums.factorio.com/45210 more])&lt;br /&gt;
* Blueprints, blueprint books and deconstruction planners can be destroyed by clicking the trash can icon in their GUIs. Clearing a blueprint is still possible via the Shift+Right Click shortcut.&lt;br /&gt;
=== Bugfixes ===&lt;br /&gt;
* Fixed the fluid usage description for the steam engine would flicker when holding the steam engine in the cursor. ([https://forums.factorio.com/44911 more])&lt;br /&gt;
* Fixed that assembling machines would think the fluid barreling/unbarreling recipes could be used to calculate base ingredients for recipes. ([https://forums.factorio.com/44861 more])&lt;br /&gt;
* Fixed performance problems when opening the blueprint library GUI when the map has a large number of players. ([https://forums.factorio.com/44925 more])&lt;br /&gt;
* Fixed crash related to connection attempts from players with mods with mod settings. ([https://forums.factorio.com/44966 more])&lt;br /&gt;
* Fixed getting &amp;quot;No map setting instance&amp;quot; error when loading faulty mod instead of actual error. ([https://forums.factorio.com/44982 more])&lt;br /&gt;
* Fixed entering tutorial would remove scenario control script from current game. ([https://forums.factorio.com/44986 more])&lt;br /&gt;
* Fixed crashes related to saves with migrated circuit network signals. ([https://forums.factorio.com/44877 more])&lt;br /&gt;
* Fixed numeric inputs would block all keys instead of just numbers. ([https://forums.factorio.com/44971 more])&lt;br /&gt;
* Fixed ore field amount stuck to cursor when in technology view. ([https://forums.factorio.com/44641 more])&lt;br /&gt;
* Fixed crashes related to migrated saves with circuit network signals. ([https://forums.factorio.com/44877 more])([https://forums.factorio.com/45025 more])&lt;br /&gt;
* Fixed that train station tutorial would not progress if you removed the train wait condition. ([https://forums.factorio.com/45047 more])&lt;br /&gt;
* Fixed crash when changing mod setting prototype types. ([https://forums.factorio.com/45054 more])&lt;br /&gt;
* Fixed the refinery flame would freeze when using the coal liquefaction recipe and the machine didn&#039;t have any coal. ([https://forums.factorio.com/45050 more])&lt;br /&gt;
* Fixed fluids would be counted incorrectly for production stats when a pumpjack was placed on an oil well with a modded extremely high yield. ([https://forums.factorio.com/45075 more])&lt;br /&gt;
* Fixed the trains GUI wouldn&#039;t scale correctly. ([https://forums.factorio.com/41228 more])&lt;br /&gt;
* Fixed you could select entities in the zoomed-to-world view outside radar coverage. ([https://forums.factorio.com/44578 more])&lt;br /&gt;
* Fixed prompt about disabled base mod would not show up. ([https://forums.factorio.com/45051 more])&lt;br /&gt;
* Fixed crash when train was destroyed while hovering over it in map view. ([https://forums.factorio.com/45085 more])&lt;br /&gt;
* Fixed that the team production starting lobby had some uranium ore. ([https://forums.factorio.com/44613 more])&lt;br /&gt;
* Fixed hovering over very large resource patch in map view would crash the game. ([https://forums.factorio.com/45097 more])&lt;br /&gt;
* Fixed the &amp;quot;don&#039;t mine resources if mining starts with non-resources&amp;quot; logic. ([https://forums.factorio.com/44548 more])&lt;br /&gt;
* Fixed crash when the preview picture can&#039;t be saved for a save file. ([https://forums.factorio.com/45118 more])&lt;br /&gt;
* Fixed crash when trying to filter opened other players quick bars. ([https://forums.factorio.com/45147 more])&lt;br /&gt;
* Fixed crash when setting resource minimal yield above the normal yield. ([https://forums.factorio.com/45112 more])&lt;br /&gt;
* Fixed the tab complete logic for the /mute-programmable-speaker command. ([https://forums.factorio.com/44902 more])&lt;br /&gt;
* Fixed that you could only build blueprints in the zoom-to-world by click and drag.&lt;br /&gt;
* Fixed script error in basic train tutorial. ([https://forums.factorio.com/45184 more])&lt;br /&gt;
* Removed redundant recipe unlock in trash slot technology. ([https://forums.factorio.com/45209 more])&lt;br /&gt;
* Fixed inserter stack size override sometimes being lost when importing a blueprint.&lt;br /&gt;
* Fixed crash that would occasionally happen after deleting a book from the blueprint library. ([https://forums.factorio.com/44687 more])&lt;br /&gt;
* Fixed fluid could flow into the heat exchangers output fluidbox. ([https://forums.factorio.com/44992 more])&lt;br /&gt;
* Fixed that inserters would try to put stuff into the rocket silo result inventory. ([https://forums.factorio.com/45213 more])&lt;br /&gt;
* Fixed some invalid map exchange strings would crash the game. ([https://forums.factorio.com/45258 more])&lt;br /&gt;
* Fixed train stop would not output content fluid wagons to circuit network. ([https://forums.factorio.com/44786 more])&lt;br /&gt;
* Fixed locomotive tooltip would not show contents of fluid wagons. ([https://forums.factorio.com/44786 more])&lt;br /&gt;
=== Modding ===&lt;br /&gt;
* Prototype names are not allowed to contain the &#039;.&#039; character.&lt;br /&gt;
=== Scripting ===&lt;br /&gt;
* Fixed typo in defines.shooting.shooting_selected (was &amp;quot;shooting_seleted&amp;quot;). ([https://forums.factorio.com/44965 more])&lt;br /&gt;
* Fixed type in defines.control_behavior.type.train_stop (was &amp;quot;train-stop&amp;quot;). ([https://forums.factorio.com/44965 more])&lt;br /&gt;
* Fixed the custom camera widget was using 0 based indexing for the surface_index parameter. ([https://forums.factorio.com/45189 more])&lt;br /&gt;
* Added missing control behavior types to defines (wall, mining_drill, programmable_speaker). ([https://forums.factorio.com/44939 more])&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaTrain::fluid_wagons&amp;lt;/code&amp;gt; read.&lt;br /&gt;
&lt;br /&gt;
== 0.15.2 ==&lt;br /&gt;
Date: 25. 04. 2017&lt;br /&gt;
=== Changes ===&lt;br /&gt;
* Reduced wave defense biter power increase as more players join to reduce pathfinding performance drain. ([https://forums.factorio.com/44717 more])&lt;br /&gt;
* Tweaked the biter and uranium ore settings of the &#039;Rail world&#039; preset.&lt;br /&gt;
* Changed mining drill fluidbox to allow fluid to flow to pipes without the use of pumps.&lt;br /&gt;
* Changed the &amp;quot;sync mods with save&amp;quot; button to support disabling mods a save file wasn&#039;t using.&lt;br /&gt;
* Computers with 2GB or more video memory and 8GB or more RAM will default graphics quality to high.&lt;br /&gt;
* Selecting high sprite quality in graphics options will show warning if computer doesn&#039;t have enough video memory.&lt;br /&gt;
=== Bugfixes ===&lt;br /&gt;
* Fixed tightspot campaign debt calculation. ([https://forums.factorio.com/44592 more])&lt;br /&gt;
* Fixed basic train tutorial rail setting offset. ([https://forums.factorio.com/44623 more])&lt;br /&gt;
* Fixed story script copying of assembling machines without recipes. ([https://forums.factorio.com/44612 more])&lt;br /&gt;
* Fixed crash when cycling through empty blueprint book. ([https://forums.factorio.com/44532 more])&lt;br /&gt;
* Fixed crash when the wrong fuel type was put into a burner equipment. ([https://forums.factorio.com/44600 more])&lt;br /&gt;
* Fixed &amp;lt;code&amp;gt;LuaFluidBox::get_capacity()&amp;lt;/code&amp;gt; didn&#039;t work when the fluidbox was empty. ([https://forums.factorio.com/44658 more])&lt;br /&gt;
* Fixed &amp;lt;code&amp;gt;LuaFluidBox::get_capacity()&amp;lt;/code&amp;gt; used 0-based indexing. ([https://forums.factorio.com/44653 more])&lt;br /&gt;
* Fixed blueprints with circuit wires would crash in some instances.&lt;br /&gt;
* Fixed the map would render black if the game was resized immediately after loading a large save file.&lt;br /&gt;
* Fixed that the technology cost multiplier allowed a value of 0.&lt;br /&gt;
* Fixed crash when circuit connector sprites aren&#039;t defined for a given entity. ([https://forums.factorio.com/44640 more])&lt;br /&gt;
* Fixed crash when inactive mining drills are disconnected from the circuit network. ([https://forums.factorio.com/44628 more])&lt;br /&gt;
* Fixed that the programmable speaker wouldn&#039;t save settings correctly when exported as a string in blueprints. ([https://forums.factorio.com/44701 more])&lt;br /&gt;
* Fixed crash when the base mod is disabled and no other mod defines map-settings. ([https://forums.factorio.com/44672 more])&lt;br /&gt;
* Fixed fluids consumed in the mining drill for mining resources didn&#039;t get counted in fluid production statistics. ([https://forums.factorio.com/44745 more])&lt;br /&gt;
* Fixed crash after display reset when browse multiplayer GUI was opened. ([https://forums.factorio.com/44704 more])&lt;br /&gt;
* Fixed browse games GUI sorting. ([https://forums.factorio.com/44519 more])&lt;br /&gt;
* Fixed wave defense GUI error. ([https://forums.factorio.com/44696 more])&lt;br /&gt;
* Fixed transport belt walking sound being controlled by the wrong volume slider. ([https://forums.factorio.com/44714 more])&lt;br /&gt;
* Fixed exiting tutorial would mute game sounds. ([https://forums.factorio.com/44524 more])&lt;br /&gt;
* Fixed crash when hovering over train with invalid path. ([https://forums.factorio.com/44787 more])&lt;br /&gt;
* The &amp;quot;Kovarex enrichment process&amp;quot; is no longer usable with productivity modules. ([https://forums.factorio.com/44635 more])&lt;br /&gt;
* Fixed alternative zoom would cause crash when bound to keyboard instead of mouse. ([https://forums.factorio.com/44571 more])&lt;br /&gt;
* Fixed that train stop would output circuit network signals with train contents regardless of it&#039;s parameters.&lt;br /&gt;
* Fixed possible desync related to train stops connected to circuit network.&lt;br /&gt;
* Fixed the exchange string wouldn&#039;t get cleared when clicking the reset button in the generate map GUI. ([https://forums.factorio.com/44774 more])&lt;br /&gt;
* Fixed crash when executing commands ban/unban/bans in a single player game. ([https://forums.factorio.com/44783 more])&lt;br /&gt;
* Fixed that opening another player&#039;s blueprint book though the /open command would crash the game. ([https://forums.factorio.com/44669 more])&lt;br /&gt;
* Fixed possible desync related to constant combinator filters.&lt;br /&gt;
* Fixed tooltip delay option didn&#039;t work. ([https://forums.factorio.com/44756 more])&lt;br /&gt;
* Fixed that disconnecting of electric poles hid some of the electric network visualizations on the map. ([https://forums.factorio.com/44721 more])&lt;br /&gt;
* Fixed crash when closing window on splash screen. ([https://forums.factorio.com/44757 more])&lt;br /&gt;
* Fixed that steam wouldn&#039;t show up as steam in fluid wagons. ([https://forums.factorio.com/44637 more])&lt;br /&gt;
* Fixed inactivity wait condition didn&#039;t work properly with fluid wagon. ([https://forums.factorio.com/44657 more])&lt;br /&gt;
* Fixed name of train field in on_train_created event. ([https://forums.factorio.com/44838 more])&lt;br /&gt;
* Fixed the technology list scrollbar position reset after clicking any technology.&lt;br /&gt;
* Fixed that LuaFluidBox would ignore the temperature field when setting a new fluid. ([https://forums.factorio.com/44842 more])&lt;br /&gt;
* Fixed crash when using recipes in furnaces that don&#039;t produce the exact amount of output items as the furnace output slots. ([https://forums.factorio.com/44707 more])&lt;br /&gt;
* Fixed crash when loading some older save files in 0.15 related to modded recipes. ([https://forums.factorio.com/44852 more])&lt;br /&gt;
* Fixed crash due to &amp;quot;Construction robot is in invalid state&amp;quot;. ([https://forums.factorio.com/44817 more])&lt;br /&gt;
* Fixed game hang when connecting train in a loop ([https://forums.factorio.com/44666 more])&lt;br /&gt;
&lt;br /&gt;
== 0.15.1 ==&lt;br /&gt;
Date: 24. 04. 2017&lt;br /&gt;
=== Changes ===&lt;br /&gt;
* Reduced noise effect on zoom-to-world view.&lt;br /&gt;
=== Bugfixes ===&lt;br /&gt;
* Fixed update error.&lt;br /&gt;
* Fixed Steam config loading error.&lt;br /&gt;
* Fixed headless not starting without server-settings.json ([https://forums.factorio.com/44537 more])&lt;br /&gt;
* Fixed the &amp;quot;reset&amp;quot; button in the generate map GUI wouldn&#039;t reset settings to the actual default values. ([https://forums.factorio.com/44527 more])&lt;br /&gt;
* Fixed that right clicking icon in the tag edit gui crashed the game. ([https://forums.factorio.com/44541 more])&lt;br /&gt;
&lt;br /&gt;
== 0.15.0 ==&lt;br /&gt;
Date: 24. 04. 2017&lt;br /&gt;
=== Major Features ===&lt;br /&gt;
* Research overhaul. 4 new science packs: Military, Production, High-tech and space.&lt;br /&gt;
** Space science packs are generating by launching a rocket.&lt;br /&gt;
** Added infinite researches.&lt;br /&gt;
* Nuclear power.&lt;br /&gt;
* Blueprint library: Allows for keeping players blueprints between individual game saves and allows sharing blueprints in multiplayer games.&lt;br /&gt;
* Added infinite mining productivity research, each tier increases mining productivity by 2%.&lt;br /&gt;
* Added wagon for transporting fluids.&lt;br /&gt;
** One side of pump can connect to the fluid wagon, the other side has to be connected to something else.&lt;br /&gt;
* Mini tutorials. Small missions that explain some of the game mechanics. The current content is a testing sample and it only covers trains.&lt;br /&gt;
** Features:&lt;br /&gt;
* Map Interaction improvements:&lt;br /&gt;
** Selectable map overlays: logistics networks, pollution, electric network, turret range, etc.&lt;br /&gt;
** Train stations and trains can be opened by clicking them while in the map view.&lt;br /&gt;
** Zoom to the world view from the map. It only shows parts of the map covered by radar or other players though.&lt;br /&gt;
** Custom map markers can be added by the players.&lt;br /&gt;
* When dying in multiplayer you leave behind a body with your items that slowly degrades.&lt;br /&gt;
* Fuel type now affects vehicle acceleration and top speed.&lt;br /&gt;
* Added coal liquefaction oil processing recipe.&lt;br /&gt;
* Added Pipette Tool. Picks up items from your inventory used to build the currently selected entity.&lt;br /&gt;
** For resources it will select the fastest available resource extractor.&lt;br /&gt;
* New scenarios: PvP and Wave defense.&lt;br /&gt;
&lt;br /&gt;
=== Minor Features ===&lt;br /&gt;
* Added map-settings command line option when creating map, it can be used to specify a file with map settings to be  used instead of the defaults.&lt;br /&gt;
* Added preset command line option when creating map.&lt;br /&gt;
* Fast in game interactions like fast inserting into/from entity and copy paste can be done by dragging instead of having to click one at a time.&lt;br /&gt;
* Build-by-moving for electric poles now accounts for covering all unpowered entities on the way.&lt;br /&gt;
* Fast replacing input piece of underground belt will also fast replace output piece if possible.&lt;br /&gt;
* Added support for setting player color from the /color command using Lua syntax: {r=...g=...,b=...,a=...}&lt;br /&gt;
* Added warning for situation when robots don&#039;t have storage place to put items in the logistics network.&lt;br /&gt;
* Pumps show their direction in the detailed view.&lt;br /&gt;
* Belts and pipes show correct connections when building a blueprint.&lt;br /&gt;
* Technologies show the required science packs below the icons in the technology GUI list.&lt;br /&gt;
* Technologies are sorted by the science packs needed.&lt;br /&gt;
* Added /screenshot command - takes a screenshot of your current game screen.&lt;br /&gt;
* Added support for equipment grids in the map editor.&lt;br /&gt;
* The build rotation of each blueprint is remembered independently of the general item build rotation.&lt;br /&gt;
* Infinite resource minimal yield is calculated using the initial resource amount and the prototype minimum yield.&lt;br /&gt;
* Added optional filters to the deconstruction planner.&lt;br /&gt;
* Copying from assembling machines to filter inserters will set the filters to the ingredients of the assembling machine recipe.&lt;br /&gt;
* Combat robots and construction robots are maintained between sessions in multiplayer and when changing surfaces.&lt;br /&gt;
* Added reverse-rotate.&lt;br /&gt;
* Offshore pump and generator show pumping speed/fluid usage.&lt;br /&gt;
* Alternative select with blueprints (shift + select) skips the blueprint setup GUI.&lt;br /&gt;
* Mining rails is disabled if mining starts with trains or gates.&lt;br /&gt;
* Toggle fullscreen using Alt + Enter.&lt;br /&gt;
* Added &amp;quot;f&amp;quot;/&amp;quot;force&amp;quot; option to the /players command&lt;br /&gt;
* Added Logistic networks GUI containing a list of all networks and contents with search (opened by the L key).&lt;br /&gt;
* Added /open command - opens another players inventory if you&#039;re an admin.&lt;br /&gt;
* Added /alerts command - configures alerts for your player.&lt;br /&gt;
* Added /mute-programmable-speaker command - disables global sounds created by the Programmable Speaker entity.&lt;br /&gt;
* Added /seed command - prints the map seed.&lt;br /&gt;
* Added fluids to the production GUI.&lt;br /&gt;
* Added kill statistics GUI.&lt;br /&gt;
* Added enable/disable all mods button to the mod manager GUI.&lt;br /&gt;
* Added automatic barreling support for all fluids.&lt;br /&gt;
* Cargo wagons can have settings copied from any distance like Locomotives.&lt;br /&gt;
* Added the ability to auto-launch the rocket.&lt;br /&gt;
* Train stops can be colored like trains.&lt;br /&gt;
* Fish can be collected by robots.&lt;br /&gt;
* Extended map generator settings to include an advanced section.&lt;br /&gt;
* Added map generator presets.&lt;br /&gt;
* Show fog-of-war and radar radius when holding radar in cursor.&lt;br /&gt;
* Seed for map creation on the headless server can be specified via map-gen-settings.json&lt;br /&gt;
* Damaged items merge into one stack, the health of the stack will be the average of the items.&lt;br /&gt;
* Added server whitelist support -- see the /whitelist console command.&lt;br /&gt;
* Added /banlist command to operate on the banlist, in addition to the pre-existing /ban and /unban commands.&lt;br /&gt;
* Added &amp;quot;favourite&amp;quot; feature in public games list: Keep your favourite servers at the top of the list.&lt;br /&gt;
* Added /permissions command for managing permissions in a multiplayer game.&lt;br /&gt;
* Added ability to change individual inserter stack size bonuses through GUI or the circuit network.&lt;br /&gt;
* Added ability to export and import blueprints, blueprint books, and deconstruction planners as strings.&lt;br /&gt;
* Server console will print JOIN and LEAVE messages for players joining or leaving.&lt;br /&gt;
* Server console messages that aren&#039;t a part of the main log can be logged separately by running the server with the &amp;lt;code&amp;gt;--console-log&amp;lt;/code&amp;gt; option.&lt;br /&gt;
* Translatable energy units and SI prefixes (eg. &amp;quot;100 ГВт&amp;quot;).&lt;br /&gt;
* Furnaces and assembling machines show the amount of products finished.&lt;br /&gt;
=== Graphics ===&lt;br /&gt;
* Added high graphics quality option. In this settings the following list of things will have double resolution:&lt;br /&gt;
** Car, Trains, Rails, Rail signals, Train stop, Transport belts, Underground belts, Splitters, Pipes, Steam engine, Assembling machines, Oil refinery, Chemical plant,&lt;br /&gt;
** Mining drill, Furnaces, Resources&lt;br /&gt;
* New ore graphics that makes the ore patches look less tiled.&lt;br /&gt;
* Tweaked the GUI graphics.&lt;br /&gt;
* Decreased the size of the recipe icons on assembling machine by 23%.&lt;br /&gt;
=== Balancing ===&lt;br /&gt;
* Increased the rate at which resources grow with distance from the center by 50%.&lt;br /&gt;
* Crude oil balancing: Halved the resource amount on the map&lt;br /&gt;
** Increased the minimum yield from 10% to 20%&lt;br /&gt;
** Halved the rate of depletion.&lt;br /&gt;
** Doubled the starting yield.&lt;br /&gt;
** Fixed that the mechanics of increasing richness with distance from start wasn&#039;t working for crude oil.&lt;br /&gt;
* Increased module inventory size of Chemical plant and oil refinery from 2 to 3.&lt;br /&gt;
* Increased logistic slot/trash slot count from 5 per level to 6 per level.&lt;br /&gt;
* Removed processing unit from the modular armor and portable solar panel recipe.&lt;br /&gt;
* Increased the pump pumping speed 4 times.&lt;br /&gt;
* Reduced the plastic bar recipe requirement of petroleum gas 30 -&amp;gt; 20&lt;br /&gt;
* Reduced the electric engine recipe requirement of lubricant 20 -&amp;gt; 15&lt;br /&gt;
* Reduced the electric furnace recipe requirement of steel 15 -&amp;gt; 10&lt;br /&gt;
* Reduced the steel furnace recipe requirement of steel 8 -&amp;gt; 6&lt;br /&gt;
* Reduced the pumpjack recipe requirement of steel 10 -&amp;gt; 5&lt;br /&gt;
* Reduced crafting time:&lt;br /&gt;
** Engine unit + electric engine unit: 20 -&amp;gt; 10&lt;br /&gt;
** Pumpjack 10 -&amp;gt; 8&lt;br /&gt;
** Advanced circuit 8 -&amp;gt; 6&lt;br /&gt;
** Processing unit 15 -&amp;gt; 10&lt;br /&gt;
** Cracking recipes 5 -&amp;gt; 3&lt;br /&gt;
* Increased stack size of stone wall pipe and belts 50 -&amp;gt; 100&lt;br /&gt;
* Increased the maximum power production of steam engine from 510kW to 900kW&lt;br /&gt;
* Doubled the heat capacity of water from 0.1kJ per degree per liter to 0.2kJ.&lt;br /&gt;
* Increased the substation supply area (16X16 to 18X18) and wire reach (16 to 18).&lt;br /&gt;
** Combat Balancing:&lt;br /&gt;
* Player regains health at a much higher rate, but only after being out of combat for 10 seconds.&lt;br /&gt;
* Discharge defense equipment pushes back, stuns and damages nearby enemies when activated by the remote.&lt;br /&gt;
* Decreased the size of Discharge defense equipment from 3x3 to 2x2.&lt;br /&gt;
* Greatly increased the damage of Personal Laser Defense Equipment.&lt;br /&gt;
* Flamethrower gun has a minimum range of 3.&lt;br /&gt;
* The flames created on ground from the flamethrower significantly increase in duration and damage when more fuel is added to them by firing at the same spot.&lt;br /&gt;
* Increased fire resistance of biter bases.&lt;br /&gt;
* Increased the health of player non-combat buildings.&lt;br /&gt;
* Increased player health from 100 to 250.&lt;br /&gt;
* Increased collected amount and effectiveness of Fish.&lt;br /&gt;
* Increased the damage, range and health of biters worms.&lt;br /&gt;
* Decreased health and resistance of Behemoth biters.&lt;br /&gt;
* Doubled the stack size of all ammos.&lt;br /&gt;
* Tweaked the cost and crafting time of some ammos.&lt;br /&gt;
* Increased the damage of most player ammos. Greatly increased the damage and fire rate of Rockets and Cannon Shells.&lt;br /&gt;
* Increased the collision box of Cannon Shells.&lt;br /&gt;
* Increased Tank health and resistances.&lt;br /&gt;
* Added research for Tank Cannon Shells damage and shooting speed.&lt;br /&gt;
* Tweaked research bonuses and added more end-game research for military upgrades.&lt;br /&gt;
* Greatly increased the damage of Mines. They also stun nearby enemies when they explode.&lt;br /&gt;
* Added uranium rounds magazine and uranium cannon shells.&lt;br /&gt;
* Added flamethrower to the tank.&lt;br /&gt;
* Other minor changes.&lt;br /&gt;
=== Optimisations ===&lt;br /&gt;
* Improved performance of mining drills in general and significantly improved performance when mining drills get backed up.&lt;br /&gt;
* Improved performance when tiles are changed due to migration/mod removal.&lt;br /&gt;
* Significantly improved GUI performance for inventories that required scroll bars.&lt;br /&gt;
* Improved GUI performance in general.&lt;br /&gt;
* Improved performance of radars scanning chunks.&lt;br /&gt;
* Improved map generation speed and generation algorithm.&lt;br /&gt;
* Improved game load performance when a large amount of mod data exists in the save.&lt;br /&gt;
* Optimized graph rendering in production statistics window.&lt;br /&gt;
* Improved regenerate entity performance.&lt;br /&gt;
* Improved network map transfer performance.&lt;br /&gt;
* Improved train performance when building/mining rail related entities.&lt;br /&gt;
* Optimized memory requirements for storing tiles under concrete.&lt;br /&gt;
=== Circuit Network ===&lt;br /&gt;
* Significantly improved circuit network performance. Up to 25 times less CPU usage and 10% less memory usage.&lt;br /&gt;
* Added the Programmable Speaker: it shows alerts and plays sounds based on circuit network signals. It can be used to make simple songs.&lt;br /&gt;
* Train Stop can output the contents of the stopped train&#039;s cargo.&lt;br /&gt;
* Train Stop can be disabled using the circuit network. Trains will skip disabled Train Stops, allowing simple train control.&lt;br /&gt;
* Mining Drills can be turned on and off using the circuit network. They can also output the remaining expected resources.&lt;br /&gt;
* Pumpjacks can be turned on and off using the circuit network. They can also output the current oil mining rate.&lt;br /&gt;
* Added Modulo, Power, Left Bit Shift, Right Bit Shift, Bitwise AND, Bitwise OR and Bitwise XOR to the Arithmetic Combinator.&lt;br /&gt;
* Added &amp;gt;=, &amp;lt;=, != to the Decider Combinator and Circuit Conditions.&lt;br /&gt;
=== Changes ===&lt;br /&gt;
* Configuration has been reset.&lt;br /&gt;
* Boilers are more powerful and bigger and have dedicated output for the steam.&lt;br /&gt;
** Default boilers output steam at the fixed temperature 165.&lt;br /&gt;
* Removed support of 32 bit systems.&lt;br /&gt;
* Removed alien artifacts and alien science packs from the game completely.&lt;br /&gt;
* Changed bounding box of burner mining drills and pumpjack, so it is possible to walk in between them.&lt;br /&gt;
* Disabled loading of saves before 0.12.0 version (You can use 0.12 to load older saves and re-save them).&lt;br /&gt;
* Changed &amp;quot;small pump&amp;quot; to &amp;quot;pump&amp;quot;. Small pumps in old saves will be migrated but they will be misaligned and disconnected from pipes.&lt;br /&gt;
* Train station adds 2000 tiles penalty when path finding, so trains try to avoid stations not related to their path.&lt;br /&gt;
* The map seed is used to generate unique maps instead of just shifting the starting position.&lt;br /&gt;
* The &amp;quot;decorative&amp;quot; entity type has been deprecated and replaced with the prototype type &amp;quot;optimized-decorative&amp;quot;.&lt;br /&gt;
* Multiplied all fluid amounts by 10.&lt;br /&gt;
* All default map editor actions are now on left click.&lt;br /&gt;
* Change fluidbox height and base level of boiler, steam engine and pump to improve fluid flow.&lt;br /&gt;
* When the active train stop is removed trains will immediately leave the station if they&#039;re waiting at the station.&lt;br /&gt;
* Changed the default comparison type for train conditions to &amp;quot;or&amp;quot;.&lt;br /&gt;
* Fast replacing splitters maintains the splitter contents on the new splitter instead of returning it to the player.&lt;br /&gt;
* Research started/changed notifications are only shown when in multiplayer.&lt;br /&gt;
* Crafting is now paused when the results can&#039;t be given to the player instead of spilling them on the ground.&lt;br /&gt;
* Changed evolution from global to per force.&lt;br /&gt;
* Disabled mining of vehicles other players are driving.&lt;br /&gt;
* Decreased biter sounds volumes&lt;br /&gt;
* Laser turret projectiles move much faster&lt;br /&gt;
* Roboport construction area changed from 50 to 51 to allow roboports build/deconstruct each other even when there is a 1 tile gap between their logistic areas.&lt;br /&gt;
* Restart button now uses map generation settings from currently loaded save.&lt;br /&gt;
* New rocket silo GUI and visibility button for freeplay and sandbox scenarios.&lt;br /&gt;
* Unified internal name of the &#039;flame-thrower&#039; to &#039;flamethrower&#039;.&lt;br /&gt;
* Manual ghost building will mark trees/rocks for deconstruction similar to alt-building blueprints.&lt;br /&gt;
* Trains are now always visible on the map, not only on chunks observed by radars or players.&lt;br /&gt;
* Renamed &amp;quot;armor-making-2&amp;quot; to &amp;quot;heavy-armor&amp;quot;.&lt;br /&gt;
* Renamed &amp;quot;armor-making-3&amp;quot; to &amp;quot;power-armor&amp;quot;.&lt;br /&gt;
* Renamed &amp;quot;diesel-locomotive&amp;quot; to &amp;quot;locomotive&amp;quot;.&lt;br /&gt;
* Increased blueprint book size to hold 1000 blueprints&lt;br /&gt;
* Blueprints, blueprint books and deconstruction planners are obtainable from the library GUI with no crafting cost.&lt;br /&gt;
* Added combinator working, wire hold and wire place sounds.&lt;br /&gt;
* Single player can be continued when you die.&lt;br /&gt;
=== Modding ===&lt;br /&gt;
* Fast cropping of sprite boundaries - it&#039;s no longer necessary to delete crop-cache.dat when existing sprites are modified.&lt;br /&gt;
* Utility sprites are now defined fully in the core mod prototypes.&lt;br /&gt;
* Added support for burner type generator-equipment.&lt;br /&gt;
* Added &amp;quot;simple-entity-with-force&amp;quot; and &amp;quot;simple-entity-with-owner&amp;quot; entity types.&lt;br /&gt;
* Boiler has now dynamically specified energy source (as inserter and similar).&lt;br /&gt;
* Added support for mod settings: startup, runtime, and runtime-per-user.&lt;br /&gt;
* Added commandline option &amp;lt;code&amp;gt;--check-unused-prototype-data&amp;lt;/code&amp;gt;&lt;br /&gt;
* Added a &amp;quot;nothing&amp;quot; technology modifier type with an &amp;quot;effect_key&amp;quot; property for script-based-effect research.&lt;br /&gt;
* Redundant technology prerequisites are logged when verbose logging is enabled.&lt;br /&gt;
* Changed technology prototype icon_size to default to 32 instead of 64.&lt;br /&gt;
* In any instance an icon isn&#039;t 32x32 the icon_size property must be set to the actual size of the (square) icon.&lt;br /&gt;
* Added the ability to have &amp;quot;friend&amp;quot; forces. Friend forces are given unrestricted access to buildings and won&#039;t be attacked.&lt;br /&gt;
* Changed container entities to not scale info icons by default + added the optional prototype property &amp;quot;scale_info_icons&amp;quot; to enable scaling.&lt;br /&gt;
* Added property &amp;quot;turret_base_has_direction&amp;quot; to turret entity types. Set it to true if you want to use turn_range property in turret attack_parameters.&lt;br /&gt;
** This property has to be true for any fluid-turret, because of pipe connections.&lt;br /&gt;
* Added support for different recipe and technology complexity definitions.&lt;br /&gt;
* Added &amp;quot;item-with-tags&amp;quot; item type that can store any basic arbitrary Lua data.&lt;br /&gt;
* Lamps, roboports, walls, rail signals, and accumulators now accept any signal type (item, fluid, virtual).&lt;br /&gt;
* &amp;quot;animation_speed&amp;quot; property of animation definitions has to be greater than 0.&lt;br /&gt;
* Renamed smoke-with-trigger &amp;quot;action_frequency&amp;quot; property to &amp;quot;action_cooldown&amp;quot;.&lt;br /&gt;
=== Scripting ===&lt;br /&gt;
* Added &amp;quot;by_script&amp;quot; to on_research_finished.&lt;br /&gt;
* Added &amp;quot;cause&amp;quot; to on_entity_died - the entity that did the killing if available.&lt;br /&gt;
* Added &amp;quot;recipe&amp;quot; to on_player_crafted_item.&lt;br /&gt;
* Added &amp;quot;rocket_silo&amp;quot; to the rocket launched event.&lt;br /&gt;
* Added 4th custom gui root position &amp;quot;goal&amp;quot;, which is used in the objectives.&lt;br /&gt;
* Added column_alignments settings in table style.&lt;br /&gt;
* Added LuaBurner - readable off entities and equipment - the burner energy source for the entity.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaCircuitNetwork::network_id&amp;lt;/code&amp;gt; read.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaConstantCombinatorControlBehavior::signals_count&amp;lt;/code&amp;gt; read + set_signal and get_signal.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaControl::shooting_state&amp;lt;/code&amp;gt;, repair_state, picking_state read/write.&lt;br /&gt;
* Added LuaCustomChartTag + LuaForce API to add/find them.&lt;br /&gt;
* Added LuaDecorativePrototype.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaEntity::connect_rolling_stock&amp;lt;/code&amp;gt; and disconnect_rolling_stock methods.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaEntity::get_logistic_point()&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaEntity::graphics_variation&amp;lt;/code&amp;gt; read/write for simple entities and trees.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaEntity::shooting_target&amp;lt;/code&amp;gt; read/write for turrets.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaEntity::stickers&amp;lt;/code&amp;gt; read. The stickers attached to a given entity.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaEntityPrototype::crafting_speed&amp;lt;/code&amp;gt; read.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaEntityPrototype::drawing_box&amp;lt;/code&amp;gt;, sticker_box, flags, remains_when_mined, additional_pastable_entities, allow_copy_paste, shooting_cursor_size, created_smoke, created_effect, map_color, friendly_map_color, enemy_map_color, build_base_evolution_requirement read.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaEntityPrototype::get_inventory_size()&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaEntityPrototype::ingredient_count&amp;lt;/code&amp;gt; read.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaEntityPrototype::module_inventory_size&amp;lt;/code&amp;gt; read.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaEquipmentGrid::get_contents&amp;lt;/code&amp;gt;, shield, and max_shield.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaFluidBox::owner&amp;lt;/code&amp;gt; read + get_capacity and get_connections methods.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaForce::evolution_factor&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaForce::is_chunk_visible()&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaForce::set_friend&amp;lt;/code&amp;gt;/get_friend.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaGui::children&amp;lt;/code&amp;gt; read.&lt;br /&gt;
* Added LuaGuiElement drop-down type.&lt;br /&gt;
* Added LuaGuiElement type &amp;quot;camera&amp;quot;.&lt;br /&gt;
* Added LuaGuiElement type &amp;quot;choose-elem-button&amp;quot;.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaGuiElement::children&amp;lt;/code&amp;gt; read.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaGuiElement::clear&amp;lt;/code&amp;gt; to remove all the contents of the element.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaGuiElement::single_line&amp;lt;/code&amp;gt; and want_ellipsis for the CustomLabel type.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaInventory::entity_owner&amp;lt;/code&amp;gt;, player_owner, and equipment_owner read.&lt;br /&gt;
* Added LuaItemPrototype fuel_category, burnt_result, fuel_acceleration_multiplier, fuel_top_speed_multiplier read.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaLogisticNetwork::provider_points&amp;lt;/code&amp;gt;, empty_provider_points, requester_points, full_or_satisfied_requester_points, and storage_points read.&lt;br /&gt;
* Added LuaLogisticPoint - read access to logistic data about provider, storage, and requester points.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaPlayer::add_alert&amp;lt;/code&amp;gt;, remove_alert, and get_alerts.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaPlayer::mute_alert&amp;lt;/code&amp;gt;, unmute_alert, is_alert_muted, enable_alert, disable_alert, is_alert_enabled.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaPlayer::opened&amp;lt;/code&amp;gt; write.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaPlayer::opened_gui_type&amp;lt;/code&amp;gt; read.&lt;br /&gt;
* Added LuaRandomGenerator.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaSurface::destroy_decoratives&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;LuaSurface::create_decoratives&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaSurface::find_logistic_networks_by_construction_area&amp;lt;/code&amp;gt;(..).&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaSurface::get_trains()&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;LuaForce::get_trains()&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaSurface::regenerate_decorative()&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaTrain::has_path&amp;lt;/code&amp;gt;, path_end_rail, and path_end_stop read + recalculate_path().&lt;br /&gt;
* Added &amp;lt;code&amp;gt;LuaTransportLine::operator&amp;lt;/code&amp;gt;[] and operator#.&lt;br /&gt;
* Added Mod gui script for easy consistent styling of mod buttons and frames within the game.&lt;br /&gt;
* Added mouse info to the gui clicked event.&lt;br /&gt;
* Added on_biter_base_built - fires when biters build bases during migration.&lt;br /&gt;
* Added on_entity_renamed - fires when an entity is renamed either by the player or through script.&lt;br /&gt;
* Added on_gui_selection_state_changed - fires when an item in a drop-down gui element is selected.&lt;br /&gt;
* Added on_market_item_purchased - fires when a player purchases something from a market entity.&lt;br /&gt;
* Added on_player_changed_force - fires when a players force is changed.&lt;br /&gt;
* Added on_player_dropped_item - fires when a player drops an item that results in an item-on-ground entity.&lt;br /&gt;
* Added on_player_mined_entity and on_robot_mined_entity events.&lt;br /&gt;
* Added on_runtime_mod_setting_changed event - fires when a player changes runtime mod settings.&lt;br /&gt;
* Added on_selected_entity_changed - fires when the selected entity for a player changes.&lt;br /&gt;
* Added on_surface_deleted, on_pre_surface_deleted, and on_surface_created events.&lt;br /&gt;
* Added on_train_created event.&lt;br /&gt;
* Added optional &amp;quot;surface&amp;quot; to &amp;lt;code&amp;gt;LuaForce::chart_all()&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Added optional fields &amp;quot;durability&amp;quot; and &amp;quot;ammo&amp;quot; when using SimpleItemStack definitions.&lt;br /&gt;
* Added optional parameter &amp;quot;return_item_request_proxy&amp;quot; to &amp;lt;code&amp;gt;LuaEntity::revive&amp;lt;/code&amp;gt;. If true and revive creates item request proxy, the proxy will be returned as the third value.&lt;br /&gt;
* Added player_index to the entity settings pasted events.&lt;br /&gt;
* Added remote interface functions for the rocket silo gui: add_tracked_item, remove_tracked_item, get_tracked_items, update_gui&lt;br /&gt;
* Added remote interface to freeplay and sandbox scripts.&lt;br /&gt;
* Added support for full copying LuaItemStack in most places that take the SimpleItemStack type.&lt;br /&gt;
* Added support for LuaFlowStatistics read on electric poles.&lt;br /&gt;
* Added support for specifying the &amp;quot;max_range&amp;quot; of a projectile when created through create_entity.&lt;br /&gt;
* Added support for turret orientation read/write through &amp;lt;code&amp;gt;LuaEntity::orientation&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Added the ability for mods to register commands.&lt;br /&gt;
* Added the ability to read item_requests from item request proxy entities as well as ghosts.&lt;br /&gt;
* Added the ability to read reach distances off the player or character entity.&lt;br /&gt;
* Changed less_then to less_than in lua GUI progress bar style specification. ([https://forums.factorio.com/33196 more])&lt;br /&gt;
* Changed &amp;lt;code&amp;gt;LuaEntity::item_requests&amp;lt;/code&amp;gt; to match the docs format.&lt;br /&gt;
* Changed &amp;lt;code&amp;gt;LuaEntity::passenger&amp;lt;/code&amp;gt; to work with both character entities and players.&lt;br /&gt;
* Changed &amp;lt;code&amp;gt;LuaEntityPrototype::underground_belt_distance&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;LuaEntityPrototype::max_underground_distance&amp;lt;/code&amp;gt; and changed it to work on both underground pipes and underground belts.&lt;br /&gt;
* Changed &amp;lt;code&amp;gt;LuaForce::clear_chart()&amp;lt;/code&amp;gt; to take an optional surface to clear the chart for.&lt;br /&gt;
* Changed &amp;lt;code&amp;gt;LuaSurface::create_entity&amp;lt;/code&amp;gt;{name=&amp;quot;item-on-ground&amp;quot;, stack=...} to accept the same format for item stacks as the rest of the Lua API.&lt;br /&gt;
* Changed the player built event to include the item name used to do the building if possible and include the tags from the &amp;quot;item-with-tags&amp;quot; item if possible.&lt;br /&gt;
* Changed &amp;lt;code&amp;gt;LuaPlayer::clean_cursor&amp;lt;/code&amp;gt; to return true if the cursor is now empty.&lt;br /&gt;
* Expanded LuaStyle read/write property support.&lt;br /&gt;
* Fixed &amp;lt;code&amp;gt;LuaSurface::spill_item_stack&amp;lt;/code&amp;gt; didn&#039;t interpret &amp;quot;enable_looted&amp;quot; parameter properly. ([https://forums.factorio.com/38717 more])&lt;br /&gt;
* &amp;lt;code&amp;gt;LuaForce::reset()&amp;lt;/code&amp;gt; now resets everything about the force to the default state.&lt;br /&gt;
* Mod events are now fired by the mod dependency order instead of the mod name starting with the scenario script.&lt;br /&gt;
* Moved game.get_event_handler and game.raise_event to &amp;quot;script&amp;quot;.&lt;br /&gt;
* Removed Lua.coroutine due to potential exploits.&lt;br /&gt;
* Removed &amp;lt;code&amp;gt;LuaGameScript::evolution_factor&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Removed &amp;lt;code&amp;gt;LuaGameScript::save&amp;lt;/code&amp;gt;/load.&lt;br /&gt;
* Removed &amp;lt;code&amp;gt;LuaPlayer::build_from_cursor&amp;lt;/code&amp;gt; + &amp;lt;code&amp;gt;LuaPlayer::rotate_for_build&amp;lt;/code&amp;gt; as they aren&#039;t replay/MP safe.&lt;br /&gt;
* Removed &amp;lt;code&amp;gt;LuaSurface::get_tileproperties&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Removed &amp;lt;code&amp;gt;LuaForce::item_resource_statistics&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;LuaForce::fluid_resource_statistics&amp;lt;/code&amp;gt; - they&#039;ve been merged into the production versions.&lt;br /&gt;
* The goal and left gui element has default direction vertical.&lt;br /&gt;
* Utility sprites can be used in the sprite button.&lt;br /&gt;
=== Bugfixes ===&lt;br /&gt;
* Fixed that setting &amp;lt;code&amp;gt;LuaForce::ai_controllable&amp;lt;/code&amp;gt; to false wouldn&#039;t prevent pollution-based unit group formation. ([https://forums.factorio.com/35650 more])&lt;br /&gt;
* Fixed graphics settings UI scale would change just by opening the GUI. ([https://forums.factorio.com/35588 more])&lt;br /&gt;
* Fixed UAC prompt would cause error and application termination during sprite loading on Windows. ([https://forums.factorio.com/35157 more])&lt;br /&gt;
* Fixed map generation could in some instances not correctly generate entities.&lt;br /&gt;
* Fixed crash when regenerating entities that are disabled by map generator settings ([https://forums.factorio.com/31872 more])&lt;br /&gt;
* Attempt to fix an occasional crash when DNS lookup fails ([https://forums.factorio.com/37426 more])&lt;br /&gt;
* Fixed crash when ammo was consumed fully by script during shooting. ([https://forums.factorio.com/38701 more])&lt;br /&gt;
* The Equipment Grid GUI is now scaled with the rest of the UI. ([https://forums.factorio.com/38979 more])&lt;br /&gt;
* Fixed possible crash caused by improper primary display detection. ([https://forums.factorio.com/39167 more])&lt;br /&gt;
* Fixed occasional broadcast related crashes on OSX ([https://forums.factorio.com/39250 more])&lt;br /&gt;
* Fixed building train vehicle in a way, that it connects on both sides. ([https://forums.factorio.com/37645 more])&lt;br /&gt;
* Fixed entities with efficiency modules wouldn&#039;t consume the correct amount of energy in some cases. ([https://forums.factorio.com/38884 more])&lt;br /&gt;
* Fixed problems when clicking connect button in server list too fast ([https://forums.factorio.com/38240 more])&lt;br /&gt;
* Fixed crash when removing large-tiles from a tile prototype definition. ([https://forums.factorio.com/39586 more])&lt;br /&gt;
* Fixed crash when mod created exoskeleton equipment with zero energy consumption. ([https://forums.factorio.com/39631 more])&lt;br /&gt;
* Fixed electric pole would draw wires to invisible ghost of enemy force. ([https://forums.factorio.com/38641 more])&lt;br /&gt;
* Fixed crash when refreshing in the browse mods GUI in some instances. ([https://forums.factorio.com/39032 more])&lt;br /&gt;
* Fixed crash when clicking the same tick the map is loaded. ([https://forums.factorio.com/39713 more])&lt;br /&gt;
* Fixed &amp;lt;code&amp;gt;LuaGameScript::get_event_handler&amp;lt;/code&amp;gt; not working. ([https://forums.factorio.com/39959 more])&lt;br /&gt;
* Fixed desync when demoting every player on a server. ([https://forums.factorio.com/40062 more])&lt;br /&gt;
* Fixed desync caused by incorrect sorting of items with inventories (blueprint books) in player&#039;s inventory. ([https://forums.factorio.com/41159 more])&lt;br /&gt;
* Fixed crash when respawning player who had any requests in personal logistic slots and was transfered to a force without logistic slots technology researched while waiting for respawn. ([https://forums.factorio.com/41171 more])&lt;br /&gt;
* Fixed &amp;lt;code&amp;gt;LuaSurface::create_entity&amp;lt;/code&amp;gt;{fast_replace=true} would end up deleting items in some instances. ([https://forums.factorio.com/41328 more])&lt;br /&gt;
* Fixed extremely slow deleting of selection in text fields. ([https://forums.factorio.com/41638 more])&lt;br /&gt;
* Fixed save corruption when saving while character is in vehicle with equipment grid and roboport equipment while destructor bots are deployed.&lt;br /&gt;
* Fixed rail integrity error when train crashes into itself. ([https://forums.factorio.com/38046 more])&lt;br /&gt;
* Fixed virtual signals wouldn&#039;t be sorted correctly by subgroup. ([https://forums.factorio.com/42558 more])&lt;br /&gt;
* Fixed typing in the save-replay GUI could move your player around. ([https://forums.factorio.com/39858 more])&lt;br /&gt;
* Fixed that manually created unit groups wouldn&#039;t be automatically removed when all their members died. ([https://forums.factorio.com/42903 more])&lt;br /&gt;
* Fixed crash when trying to make an entity ghost of an invalid entity through script. ([https://forums.factorio.com/43467 more])&lt;br /&gt;
* Fixed rail signals not reconnect after removing rails in some setups. ([https://forums.factorio.com/41005 more])&lt;br /&gt;
* Fixed trains switched to manual mode wouldn&#039;t trigger inserters when they coasted to a stop. ([https://forums.factorio.com/43160 more])&lt;br /&gt;
* Fixed lot of entities on the same tile might cause stack overflow crash when saving the map. ([https://forums.factorio.com/43610 more])&lt;br /&gt;
* Underground belt connects only to underground belt of the same force.&lt;br /&gt;
* Fixed personal roboport ended search for nearby ghosts prematurely if a ghost found couldn&#039;t be built due to missing item. ([https://forums.factorio.com/44179 more])&lt;br /&gt;
* Fixed desync related to teleporting any entity with emissions-per-tick defined in the prototype. ([https://forums.factorio.com/44344 more])&lt;br /&gt;
* Fixed explicitly placed crafting orders were sometimes used to satisfy dependency of other crafting orders.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{VersionNav}}&lt;/div&gt;</summary>
		<author><name>Justarandomgeek</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Map_generator&amp;diff=177563</id>
		<title>Map generator</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Map_generator&amp;diff=177563"/>
		<updated>2020-02-17T21:57:27Z</updated>

		<summary type="html">&lt;p&gt;Justarandomgeek: /* Starting area */ typo fix&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
[[File:Default_123456789.png|thumb|right|An example how the world generator might create a new map: Default settings with map seed 123456789]]&lt;br /&gt;
World generation is the procedure by which the in game landscape is generated. In short: a number of settings, editable at the start of a new world, define what that world will look like. This can dramatically alter gameplay — a new player is advised to start with the default settings before deciding to change their world.&lt;br /&gt;
__TOC__{{Clear}}&lt;br /&gt;
== Map generation presets ==&lt;br /&gt;
[[File:MapGeneratorOverview.png|thumb|right|400px|Overview of the map generation screen]]&lt;br /&gt;
A preset may be chosen in the top left dropdown instead of manually configuring the generation.&lt;br /&gt;
=== Default ===&lt;br /&gt;
Normal settings. The recommended way to play Factorio.&lt;br /&gt;
&lt;br /&gt;
All sliders are set to the center position. Map height and width is unlimited, peaceful mode is disabled.&lt;br /&gt;
&lt;br /&gt;
All other settings are set to their defaults:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Enemy expansion            !! Default !! Evolution        !! Default&lt;br /&gt;
|-                                      &lt;br /&gt;
| Enabled                    || Yes     || Enabled          || Yes    &lt;br /&gt;
|-                                      &lt;br /&gt;
| Maximum expansion distance || 7       || Time factor      || 40     &lt;br /&gt;
|-                                      &lt;br /&gt;
| Minimum group size         || 5       || Destroy factor   || 200    &lt;br /&gt;
|-                                      &lt;br /&gt;
| Maximum group size         || 20      || Pollution factor || 9      &lt;br /&gt;
|-&lt;br /&gt;
| Minimum cooldown (Minutes) || 4      &lt;br /&gt;
|-&lt;br /&gt;
| Maximum cooldown (Minutes) || 60     &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Pollution                 !! Default !! Recipes/Technology          !! Default&lt;br /&gt;
|-                                        &lt;br /&gt;
| Enabled                   || Yes     || Recipe difficulty           || Normal &lt;br /&gt;
|-                                        &lt;br /&gt;
| Absorption modifier       || 100%    || Technology difficulty       || Normal &lt;br /&gt;
|-                                        &lt;br /&gt;
| Attack cost modifier      || 100%    || Technology price multiplier || 1&lt;br /&gt;
|-                                        &lt;br /&gt;
| Minimum damage to trees   || 60      || Research queue availability || After the game is finished&lt;br /&gt;
|-&lt;br /&gt;
| Absorbed per damaged tree || 10      || &lt;br /&gt;
|-&lt;br /&gt;
| Diffusion ratio           || 2%      || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Rich resources ===&lt;br /&gt;
Resources patches have a larger richness, so you don&#039;t have to expand far.&lt;br /&gt;
&lt;br /&gt;
Difference from default: Resources have 200% richness instead of 100%.&lt;br /&gt;
&lt;br /&gt;
=== Marathon ===&lt;br /&gt;
Recipes and technologies are more expensive.&lt;br /&gt;
&lt;br /&gt;
Difference from default: Expensive recipes and technology, technology price multiplier 4.&lt;br /&gt;
&lt;br /&gt;
=== Death world ===&lt;br /&gt;
Biters are more dangerous and evolve faster.&lt;br /&gt;
&lt;br /&gt;
Difference from default: 200% enemy base frequency and 200% enemy base size, 75% starting area size, enemy evolution time factor is set to 200, pollution factor is set to 12. The pollution absorption modifier is set to 50% instead of 100%, same goes for the attack cost modifier.&lt;br /&gt;
&lt;br /&gt;
=== Death world marathon ===&lt;br /&gt;
Recipes and technologies are expensive and biters are dangerous and plentiful. Only select this if you are a Factorio veteran.&lt;br /&gt;
&lt;br /&gt;
Combines &amp;quot;Marathon&amp;quot; and &amp;quot;Death world&amp;quot; with some additional changes: Enemy evolution time factor is set to 150, pollution factor is set to 10. Attack cost modifier is set to 80% instead of 100% (50% for death world).&lt;br /&gt;
&lt;br /&gt;
=== Rail world ===&lt;br /&gt;
Resource patches are large and spread far apart, to encourage train systems. Biters won&#039;t create any new bases or re-expand into cleared territory.&lt;br /&gt;
&lt;br /&gt;
Difference from default: All resources are set to 33% frequency and 300% size. Water is set to 200% scale and 150% coverage. The evolution time factor is set to 20 from 40 and enemy expansion is disabled.&lt;br /&gt;
&lt;br /&gt;
=== Ribbon world ===&lt;br /&gt;
The map height is limited to only 128 tiles, which introduces a range of challenges and interesting situations.&lt;br /&gt;
&lt;br /&gt;
Difference from default: Map height is limited to 128. All resources are set to 300% frequency, 50% size and 200% richness. Water is set to 25% coverage and size. Starting area size is increased to 300%. &lt;br /&gt;
&lt;br /&gt;
=== Island ===&lt;br /&gt;
A large island in an endless ocean.&lt;br /&gt;
&lt;br /&gt;
Difference from default: Terrain map type is set to island.&lt;br /&gt;
&lt;br /&gt;
== Manual configuration ==&lt;br /&gt;
It is possible experiment with different settings by opening the map preview, changing the settings and observing their effects. This makes it possible to directly observe what exactly particular settings modify in the world, beyond the textual descriptions provided on this page.&lt;br /&gt;
&lt;br /&gt;
The seed is the starting value for the random number generator that Factorio uses for generating the world based on the generation settings. This means that even with the same generation settings, the world can look very different depending on the seed.&lt;br /&gt;
&lt;br /&gt;
All resources and terrain features can be disabled by unchecking the checkbox in front of them.&lt;br /&gt;
&lt;br /&gt;
=== Resources ===&lt;br /&gt;
Frequency determines the number of resource patches in a given area. It does not affect resource patch size or richness. A setting of 200% frequency that means roughly double the patches can be found in a given area.&lt;br /&gt;
&lt;br /&gt;
The size setting adjusts the size of the resource patches. Setting the slider to 200% means the surface area of the patch is doubled.&lt;br /&gt;
&lt;br /&gt;
Richness defines the yield of every ore tile and every oil field. If richness is set to 200%, each ore tile and oil field contains about double the amount of ore/oil. Outside of this, resource patch richness  increases by distance.&lt;br /&gt;
&lt;br /&gt;
=== Terrain ===&lt;br /&gt;
Setting the map type to island generates a single island around the spawn point and endless ocean beyond that. The normal map type generates endless terrain.&lt;br /&gt;
&lt;br /&gt;
Water scale changes how much space there is between lakes. The smaller the scale, the swampier the terrain. Higher scale leads to bigger oceans separated by bigger landmasses. Water coverage influences the overall amount of water. Reducing it generates small lakes, increasing it generates large oceans.&lt;br /&gt;
&lt;br /&gt;
The settings for trees behave in the same way. Higher scale increases the distance between forests while lower scale reduces it. High tree coverage allows to completely cover the world in trees, and low coverage nearly removes them from the world.&lt;br /&gt;
&lt;br /&gt;
Cliff frequency influences how many cliff lines there are in the world. Higher frequency means more cliffs, lower frequency reduces their number. The continuity setting changes how long and unbroken the cliff lines are. Low continuity leads to very short lines, high continuity to long, nearly unbroken lines of cliffs.&lt;br /&gt;
&lt;br /&gt;
The moisture settings control the distribution of grass versus desert. Higher bias generates more grass, lower bias generates more desert. Higher scale increases the size of the grass/desert areas, low scale leads to small grass and desert patches.&lt;br /&gt;
&lt;br /&gt;
The terrain type setting controls the distribution of red desert versus sand. Higher bias generates more red desert, lower bias generates more sand. Higher scale increases the size of the red desert/sand areas, low scale leads to small red desert and sand patches.&lt;br /&gt;
&lt;br /&gt;
=== Enemy ===&lt;br /&gt;
[[File:MapGeneratorEnemy.png|thumb|right|400px|The enemy tab]]&lt;br /&gt;
Frequency determines the number of enemy bases in a given area. It does not affect enemy base size. A setting of 200% frequency that means roughly double the enemy bases can be found in a given area.&lt;br /&gt;
&lt;br /&gt;
The size setting adjusts the size of enemy bases. Setting the slider to 200% means the surface area covered by the enemy bases is doubled.&lt;br /&gt;
&lt;br /&gt;
When peaceful mode is turned on, the [[enemies]] don&#039;t begin fights, only responding if the player hits them. Additionally, when a map is in peaceful mode, the enemies will not [[Enemies#Expansions|expand]].&lt;br /&gt;
&lt;br /&gt;
The starting area is the an almost circular radius around the spawn point that does not contain enemy bases. Increasing its size pushes the bases further out, decreasing its size generates enemy bases closer to the spawn point. The size setting does not have any other effects.&lt;br /&gt;
&lt;br /&gt;
[[Enemies#Expansions|Enemy expansion]] can be enabled/disabled and further adjusted using the below settings.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Enemy expansion setting    !! Description&lt;br /&gt;
|-                           &lt;br /&gt;
| Maximum expansion distance || The maximum distance enemies will look to expand from other enemy bases.&lt;br /&gt;
|-                           &lt;br /&gt;
| Minimum group size         || The minimum size of an enemy expansion party modified by the current evolution level.&lt;br /&gt;
|-&lt;br /&gt;
| Maximum group size         || The maximum size of an enemy expansion party modified by the current evolution level.&lt;br /&gt;
|-&lt;br /&gt;
| Minimum cooldown (Minutes) || The minimum time between enemy expansions being sent out.&lt;br /&gt;
|-&lt;br /&gt;
| Maximum cooldown (Minutes) || The maximum time between enemy expansions being sent out.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Enemies#Evolution|Evolution]] can be enabled/disabled and further adjusted using the below settings.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Evolution setting !! Description&lt;br /&gt;
|-                  &lt;br /&gt;
| Time factor       || Controls how fast evolution increases over time.&lt;br /&gt;
|-                  &lt;br /&gt;
| Destroy factor    || Controls how fast evolution increases due to destroying enemy spawners.&lt;br /&gt;
|-                  &lt;br /&gt;
| Pollution factor  || Controls how fast evolution increases due to producing pollution.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Advanced ===&lt;br /&gt;
&lt;br /&gt;
The [[Replay system|replay]] can record all the actions that the player(s) perform during the game, so that they can later be played back as essentially a timelapse of the save file.&lt;br /&gt;
&lt;br /&gt;
The map width and height allows to generate maps with finite resources and area. It is possible to limit generation in only direction, alike the [[#Ribbon world|ribbon world]].&lt;br /&gt;
&lt;br /&gt;
The difficulty settings allow to change the [[Crafting#Recipe difficulties|recipe]]/technology difficulty and multiply the [[research|technology cost]]. Currently, setting the technology difficulty does not have an effect in vanilla. Furthermore, it can be controlled when the research queue is available: From the start, after launching a [[rocket silo|rocket]] or never.&lt;br /&gt;
&lt;br /&gt;
[[Pollution]] can be enabled/disabled and further adjusted using the below settings.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Pollution setting         !! Description&lt;br /&gt;
|-                       &lt;br /&gt;
| Absorption modifier       || Modifier of how much pollution is absorbed by trees and tiles.&lt;br /&gt;
|-&lt;br /&gt;
| Attack cost modifier      || Modifier of how much pollution is absorbed by enemy attacks.&lt;br /&gt;
|-&lt;br /&gt;
| Minimum damage to trees   || Trees have 4 different stages of the progression towards being destroyed by pollution. Any pollution above this amount starts the process of moving a tree towards a more damaged stage.&lt;br /&gt;
|-&lt;br /&gt;
| Absorbed per damaged tree || Trees have 4 different stages of the progression towards being destroyed by pollution. This value specifies how much pollution is absorbed when moving to a more damaged stage.&lt;br /&gt;
|-&lt;br /&gt;
| Diffusion ratio           || The amount of pollution diffused into neighboring chunks per second.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Map exchange string ===&lt;br /&gt;
&lt;br /&gt;
A map exchange string generally looks like this:&lt;br /&gt;
&lt;br /&gt;
   &amp;gt;&amp;gt;&amp;gt;eNp1UTGIE0EU/WMu3F4EUUjhgR4prrDZJTlFJRyZURAR0d7Oz&lt;br /&gt;
   WYiA5udOLsLnhaX4kptxEaraz3hOgu7wIEoKBxa2UVsLFROBC0U4&lt;br /&gt;
   p+dnWSNdw/+583/f97/fwbgGLhAADGgAEPqzAXSD/HI8JRZJZD9P&lt;br /&gt;
   leuVNyGtC0EKu1wV4qwGK3wiPfW3LYfc6NozBFKRv8qMFaOExnlE&lt;br /&gt;
   WDPtrZoOVGcx3igxgb0cKr8SKQ9c1eL5aOSGIcebCxlNl6H2nisD&lt;br /&gt;
   dkIC0YAtpIQjOWYOx7IKFEydGOeJCK61fTTO8228OMFt+416hqn9&lt;br /&gt;
   ivpKn475VGw1uylYSL6oeDKqXtnNc6dnL3RkyJOUsUzZccKuweW7&lt;br /&gt;
   ave8E5nKAeh6HYBahfQLuotCJB71e3LH+8+osTs5bGc7OWRYdtGr&lt;br /&gt;
   lhynR2YWrbkTEHHdP9RIKZpgi3yKodNiUlu6CQhD74+3/z1crdF/&lt;br /&gt;
   jz9/u5a+yYljUvVb3sr2y1MzusVDk3ck8caL+wqYDVHNE99oOTtG&lt;br /&gt;
   40vlJT1jap27Dy64dUSkKNHkG3eR1c7AXa0lpWpMtLN8NNu8smS9&lt;br /&gt;
   3R2D3yIVS2+pN0r7bKGk8lITm8wk1icZvHqChTbd6bLvbYddwqtZ&lt;br /&gt;
   2b4/w+KK8xElgsPX9F9OhP3uTQZAl9wd96e2DorwRT4wTu/vYd/A&lt;br /&gt;
   dl73Kk=&amp;lt;&amp;lt;&amp;lt;&lt;br /&gt;
&lt;br /&gt;
The map exchange string can be used to share all map generation settings between different players. The player can paste the string (using {{Keybinding|ctrl|V}}) into the map exchange string field and the game will set the generation settings to the settings saved in the string, resulting in a complete copy of the map when generated.&lt;br /&gt;
&lt;br /&gt;
The map exchange string can be retrieved from save files by going into the load game screen, selecting the desired map, clicking the map exchange string button in the upper right corner and copying the string from the window that pops up.&lt;br /&gt;
&lt;br /&gt;
For a technical description of the map exchange string, see [[map exchange string format]].&lt;br /&gt;
&lt;br /&gt;
== Mechanics ==&lt;br /&gt;
&lt;br /&gt;
=== Starting area ===&lt;br /&gt;
&lt;br /&gt;
There is a second internal starting area that is completely separate from the starting area that can be changed in the enemy settings tab. This starting area always has a constant size and affects the spawning of resources, cliffs and water directly at the spawn. The map generation logic makes sure that there is always at least one patch of [[coal]], [[iron ore]], [[copper ore]], and [[stone]] each. Furthermore, there is always a lake in the starting area, even when water is turned off, and there are never any cliffs there. [[Uranium ore]] and [[crude oil]] do not spawn in the starting area. The richness of the ore patches is slightly influenced by the frequency setting.[https://forums.factorio.com/viewtopic.php?p=432592#p432592]&lt;br /&gt;
&lt;br /&gt;
=== Chunks ===&lt;br /&gt;
&lt;br /&gt;
A map is endless by default, though its size can be limited by height and width — see above. Because it is technically endless, the whole map is not generated from the start. Instead, a new [[Map_structure#Chunk|chunk]] of the map is generated only when needed, similar to other procedurally generated world games.&lt;br /&gt;
&lt;br /&gt;
==== Invisible chunks (fog of war) ====&lt;br /&gt;
&lt;br /&gt;
Outside of the visible chunk area, an invisible area of about 3 chunks wide is generated as a preloading mechanism. Enemies may be located inside these invisible chunks and can attack the player from there, while [[artillery turret]]s and [[artillery wagon|wagon]]s may automatically shoot enemy bases in these chunks if they are within their automatic range. Invisible chunks are also generated if pollution is generated heavily; the game generates (invisible) chunks as it needs to spread the pollution into the area.&lt;br /&gt;
&lt;br /&gt;
==== Charting (removing fog of war) ====&lt;br /&gt;
&lt;br /&gt;
As long as a chunk is invisible, the part of the players map stays black. This changes when a chunk is [[Radar#Charting|charted]], which means when it is &amp;quot;touched&amp;quot; by a radar. This can be either the player&#039;s internal radar, which is always available and continually charts chunks around the player, or the [[radar]] entity. If a far-away and thus ungenerated chunk is charted, it will be generated, together with the above-mentioned invisible 3 chunk radius of map around it.&lt;br /&gt;
&lt;br /&gt;
==== Maximum map size and used memory ====&lt;br /&gt;
&lt;br /&gt;
The map size is limited to 2,000 x 2,000 kilometers; internally, this is a square 2,000,000 tiles on a side, with an area of 4,000,000,000,000 (4 trillion) square tiles (assuming 1 tile = 1 meter on a side yields 2,000 x 2,000 km = 4 million square km). In real-world terms, this is between the sizes of India and Australia (or about 40% the area of the United States, or over 10 times the area of Germany). It would take around 200 [[Time#Seconds|game-minutes]] (ca 3.3 hours real time) to reach that border from the center when riding a [[locomotive|train]] fueled with [[rocket fuel|rocket]] or [[nuclear fuel]]. This makes the world essentially endless for practical purposes. The generated chunks are fully mapped and stored in the player&#039;s RAM, which is the practical limiting factor of exploration.&lt;br /&gt;
&lt;br /&gt;
Because chunks are only generated in and close around the area revealed by radar, it is possible to reach that border without overloading your computer, as the size of the map in computer memory is dependent only on chunks actually generated. If only a narrow stripe of land is explored to far away, this remains manageable.&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
{{History|0.17.44|&lt;br /&gt;
* The resource frequency slider in the map generator settings has a smaller influence over the amount of ore in the starting area patches.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{History|0.17.0|&lt;br /&gt;
* Resource generation changed significantly:&lt;br /&gt;
** The starting area contains only iron, copper, coal and stone, in very predictable amounts. Uranium and oil are excluded from the starting area.&lt;br /&gt;
** Resource generation settings now have a much more dramatic effect. Increased the number of steps for each setting.&lt;br /&gt;
** Ore patches are slightly less frequent but richer.&lt;br /&gt;
** There will be a more balanced amount of resources within a large enough region.&lt;br /&gt;
** Many other small tweaks.&lt;br /&gt;
* Biter generation changed significantly:&lt;br /&gt;
** Biter richness slider removed, biter placement is only configured by size and frequency settings.&lt;br /&gt;
** Biter generation settings now have a much more dramatic effect. Increased the number of steps for each setting.&lt;br /&gt;
** Biter bases will increase in size, frequency and number of worms depending on the distance from player spawn.&lt;br /&gt;
** Worm size increases depending on the distance from player spawn.&lt;br /&gt;
** Small biter bases are now closer to the player spawn.&lt;br /&gt;
** At large distances from player spawn, biter base frequency is lower than before but biter bases are larger.&lt;br /&gt;
** Other small tweaks.&lt;br /&gt;
* Terrain generation changed significantly:&lt;br /&gt;
** Water is generated as large lakes instead of swamps.&lt;br /&gt;
** Tile generation improved. Tile placement respects biomes better.&lt;br /&gt;
** More predictable cliff placement.&lt;br /&gt;
** Better controls in the map generator GUI for water, tiles and cliffs.&lt;br /&gt;
* New map terrain type selectable: Island. Launch the rocket with only a limited amount of resources available on the map.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{History|0.16.0|&lt;br /&gt;
* Added cliffs.&lt;br /&gt;
* New terrains and new terrain generation.&lt;br /&gt;
* Trees can now be configured in the generate-map GUI.&lt;br /&gt;
* Terrain can be configured in the generate map GUI.&lt;br /&gt;
* Biters scale less with distance and there are generally less biters.&lt;br /&gt;
* No uranium as a starting resource also no uranium is ever generated near the starting area, you need to go look for it.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{History|0.15.0|&lt;br /&gt;
* Extended map generator settings to include an advanced section.&lt;br /&gt;
* Added map generator presets.&lt;br /&gt;
* The map seed is used to generate unique maps instead of just shifting the starting position.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{History|0.13.7|&lt;br /&gt;
* Map size is now limited to 2000 km by 2000 km with a black bar rather than crashing when reaching this distance.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{History|0.13.0|&lt;br /&gt;
* Map generator algorithm changed, further resource field now have greater richness.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [https://forums.factorio.com/viewtopic.php?f=6&amp;amp;t=7924&amp;amp;p=63517#p63517 Some technical info]&lt;br /&gt;
* [https://forums.factorio.com/viewtopic.php?f=6&amp;amp;t=8624&amp;amp;p=69156#p69156 Temperature based biome-model] (how trees are placed)&lt;/div&gt;</summary>
		<author><name>Justarandomgeek</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Lab&amp;diff=177321</id>
		<title>Lab</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Lab&amp;diff=177321"/>
		<updated>2020-01-20T20:20:15Z</updated>

		<summary type="html">&lt;p&gt;Justarandomgeek: /* Equation simplification */ unneeded brackets&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
{{:Infobox:Lab}}&lt;br /&gt;
[[File:Simplescience.png|thumb|right|Science packs put into the front lab will be passed to labs behind it.]]&lt;br /&gt;
&#039;&#039;&#039;Labs&#039;&#039;&#039; are buildings that perform [[research]] for [[technologies]] by consuming [[science pack]]s. Use of a lab is required to progress in Factorio.&lt;br /&gt;
&lt;br /&gt;
When [[productivity module]]s are used in labs, the productivity bonus is directly calculated and applied each [[Time#Ticks|tick]] so the productivity bar is simply cosmetic. This means that it does not matter that the productivity bar resets when the research is changed, no productivity bonus is lost. [https://forums.factorio.com/26860]&lt;br /&gt;
&lt;br /&gt;
The player can only research one technology at a time, but can use multiple labs for faster results. The speed bonus of labs when [[lab research speed (research)|lab research speed]] is researched and modules are present can be calculated using this formula: &amp;lt;code&amp;gt;research_bonus × module_bonus = speed_bonus&amp;lt;/code&amp;gt;; the percentage bonuses have to be converted to decimals (e.g. +140% = 2.4) before the formula is used.&lt;br /&gt;
&lt;br /&gt;
==Production requirements==&lt;br /&gt;
Calculating the number of science packs needed per second is straightforward:&lt;br /&gt;
* &amp;lt;code&amp;gt;ERS = (1 + B[r] ÷ 100) × (1 + M[r] ÷ 100)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ACT = T[r] ÷ ERS&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;PPS = N ÷ ACT&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where:&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;ERS&#039;&#039;&#039;&#039;&#039; is &amp;quot;effective lab research speed&amp;quot;&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;B[r]&#039;&#039;&#039;&#039;&#039; is the Lab Research Speed bonus as reported by the game, in percent&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;M[r]&#039;&#039;&#039;&#039;&#039; is the sum of all module speed effects (Speed modules - positive; Productivity modules - negative), in percent&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;ACT&#039;&#039;&#039;&#039;&#039; is &amp;quot;adjusted cycle time&amp;quot;&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;T[r]&#039;&#039;&#039;&#039;&#039; is the research cycle time as displayed in the research screen&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;PPS&#039;&#039;&#039;&#039;&#039; is &amp;quot;packs per second&amp;quot;&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;N&#039;&#039;&#039;&#039;&#039; is the number of labs available.&lt;br /&gt;
&lt;br /&gt;
Thus, for a 10-lab setup, researching Nuclear Power (30 second cycle time) with Lab Research Speed 4 (140% bonus) and no module effects, the calculation is:&lt;br /&gt;
*&amp;lt;code&amp;gt;ELRS =  1 + (140 ÷ 100) = 2.4&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;ACT  = 30 ÷ 2.4         = 12.5 s&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;PPS  = 10 ÷ 12.5        = 0.8&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This means 0.8 science packs per second, of each type, would need to be produced to continuously supply the labs.&lt;br /&gt;
&lt;br /&gt;
=== Equation simplification ===&lt;br /&gt;
Assuming all labs have the same &#039;&#039;B[r]&#039;&#039; (which they always will unless they are affected by different module configurations), the above calculations can be combined into one equation:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;PPS = N × (1 + B[r] ÷ 100) × (1 + M[r] ÷ 100) ÷ T[r]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Thus for the numerical example:&lt;br /&gt;
* &amp;lt;code&amp;gt;PPS = 10 × (1 + 140 ÷ 100) × 1 ÷ 30&amp;lt;/code&amp;gt; = &amp;lt;code&amp;gt;(10 ÷ 30) × (1 + 1.4)&amp;lt;/code&amp;gt; = &amp;lt;code&amp;gt; (1 ÷ 3) × 2.4&amp;lt;/code&amp;gt; = &amp;lt;code&amp;gt; 2.4 ÷ 3&amp;lt;/code&amp;gt; = &amp;lt;code&amp;gt;0.8&amp;lt;/code&amp;gt; packs per second&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
{{history|0.15.12|&lt;br /&gt;
* Lab speed info in the description contains the researched speed bonus as well.}}&lt;br /&gt;
&lt;br /&gt;
{{history|0.12.6|&lt;br /&gt;
* The research speed of a lab is now not dependent on its electricity consumption, and can be scripted.}}&lt;br /&gt;
&lt;br /&gt;
{{history|0.12.0|&lt;br /&gt;
* Lab research is now continuous; Science packs now have progress bars.}}&lt;br /&gt;
&lt;br /&gt;
{{history|0.9.2|&lt;br /&gt;
* Labs are now named after early access backers when built from [[blueprint]]s.}}&lt;br /&gt;
&lt;br /&gt;
{{history|0.7.2|&lt;br /&gt;
* Changed the recipe of Lab to require 4 transport belts, down from 5.}}&lt;br /&gt;
&lt;br /&gt;
{{history|0.7.0|&lt;br /&gt;
* Added support for modules to labs.}}&lt;br /&gt;
&lt;br /&gt;
{{history|0.6.0|&lt;br /&gt;
* New graphics.&lt;br /&gt;
* Labs are dedicated to backers (displayed in entity info).}}&lt;br /&gt;
&lt;br /&gt;
{{history|0.2.7|&lt;br /&gt;
* Contents of the Lab is now shown in the entity info. }}&lt;br /&gt;
&lt;br /&gt;
{{history|0.1.0|&lt;br /&gt;
* Introduced }}&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Electric system]]&lt;br /&gt;
* [[Crafting]]&lt;br /&gt;
&lt;br /&gt;
{{ProductionNav}}&lt;br /&gt;
{{C|Producers}}&lt;/div&gt;</summary>
		<author><name>Justarandomgeek</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Lab&amp;diff=177320</id>
		<title>Lab</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Lab&amp;diff=177320"/>
		<updated>2020-01-20T20:12:44Z</updated>

		<summary type="html">&lt;p&gt;Justarandomgeek: /* Equation simplification */ typo fix&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
{{:Infobox:Lab}}&lt;br /&gt;
[[File:Simplescience.png|thumb|right|Science packs put into the front lab will be passed to labs behind it.]]&lt;br /&gt;
&#039;&#039;&#039;Labs&#039;&#039;&#039; are buildings that perform [[research]] for [[technologies]] by consuming [[science pack]]s. Use of a lab is required to progress in Factorio.&lt;br /&gt;
&lt;br /&gt;
When [[productivity module]]s are used in labs, the productivity bonus is directly calculated and applied each [[Time#Ticks|tick]] so the productivity bar is simply cosmetic. This means that it does not matter that the productivity bar resets when the research is changed, no productivity bonus is lost. [https://forums.factorio.com/26860]&lt;br /&gt;
&lt;br /&gt;
The player can only research one technology at a time, but can use multiple labs for faster results. The speed bonus of labs when [[lab research speed (research)|lab research speed]] is researched and modules are present can be calculated using this formula: &amp;lt;code&amp;gt;research_bonus × module_bonus = speed_bonus&amp;lt;/code&amp;gt;; the percentage bonuses have to be converted to decimals (e.g. +140% = 2.4) before the formula is used.&lt;br /&gt;
&lt;br /&gt;
==Production requirements==&lt;br /&gt;
Calculating the number of science packs needed per second is straightforward:&lt;br /&gt;
* &amp;lt;code&amp;gt;ERS = (1 + B[r] ÷ 100) × (1 + M[r] ÷ 100)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ACT = T[r] ÷ ERS&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;PPS = N ÷ ACT&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where:&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;ERS&#039;&#039;&#039;&#039;&#039; is &amp;quot;effective lab research speed&amp;quot;&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;B[r]&#039;&#039;&#039;&#039;&#039; is the Lab Research Speed bonus as reported by the game, in percent&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;M[r]&#039;&#039;&#039;&#039;&#039; is the sum of all module speed effects (Speed modules - positive; Productivity modules - negative), in percent&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;ACT&#039;&#039;&#039;&#039;&#039; is &amp;quot;adjusted cycle time&amp;quot;&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;T[r]&#039;&#039;&#039;&#039;&#039; is the research cycle time as displayed in the research screen&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;PPS&#039;&#039;&#039;&#039;&#039; is &amp;quot;packs per second&amp;quot;&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;N&#039;&#039;&#039;&#039;&#039; is the number of labs available.&lt;br /&gt;
&lt;br /&gt;
Thus, for a 10-lab setup, researching Nuclear Power (30 second cycle time) with Lab Research Speed 4 (140% bonus) and no module effects, the calculation is:&lt;br /&gt;
*&amp;lt;code&amp;gt;ELRS =  1 + (140 ÷ 100) = 2.4&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;ACT  = 30 ÷ 2.4         = 12.5 s&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;PPS  = 10 ÷ 12.5        = 0.8&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This means 0.8 science packs per second, of each type, would need to be produced to continuously supply the labs.&lt;br /&gt;
&lt;br /&gt;
=== Equation simplification ===&lt;br /&gt;
Assuming all labs have the same &#039;&#039;B[r]&#039;&#039; (which they always will unless they are affected by different module configurations), the above calculations can be combined into one equation:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;PPS = N × (1 + [B[r] ÷ 100]) × (1 + M[r] ÷ 100) ÷ T[r]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Thus for the numerical example:&lt;br /&gt;
* &amp;lt;code&amp;gt;PPS = 10 × (1 + [140 ÷ 100]) × 1 ÷ 30&amp;lt;/code&amp;gt; = &amp;lt;code&amp;gt;(10 ÷ 30) × (1 + 1.4)&amp;lt;/code&amp;gt; = &amp;lt;code&amp;gt; (1 ÷ 3) × 2.4&amp;lt;/code&amp;gt; = &amp;lt;code&amp;gt; 2.4 ÷ 3&amp;lt;/code&amp;gt; = &amp;lt;code&amp;gt;0.8&amp;lt;/code&amp;gt; packs per second&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
{{history|0.15.12|&lt;br /&gt;
* Lab speed info in the description contains the researched speed bonus as well.}}&lt;br /&gt;
&lt;br /&gt;
{{history|0.12.6|&lt;br /&gt;
* The research speed of a lab is now not dependent on its electricity consumption, and can be scripted.}}&lt;br /&gt;
&lt;br /&gt;
{{history|0.12.0|&lt;br /&gt;
* Lab research is now continuous; Science packs now have progress bars.}}&lt;br /&gt;
&lt;br /&gt;
{{history|0.9.2|&lt;br /&gt;
* Labs are now named after early access backers when built from [[blueprint]]s.}}&lt;br /&gt;
&lt;br /&gt;
{{history|0.7.2|&lt;br /&gt;
* Changed the recipe of Lab to require 4 transport belts, down from 5.}}&lt;br /&gt;
&lt;br /&gt;
{{history|0.7.0|&lt;br /&gt;
* Added support for modules to labs.}}&lt;br /&gt;
&lt;br /&gt;
{{history|0.6.0|&lt;br /&gt;
* New graphics.&lt;br /&gt;
* Labs are dedicated to backers (displayed in entity info).}}&lt;br /&gt;
&lt;br /&gt;
{{history|0.2.7|&lt;br /&gt;
* Contents of the Lab is now shown in the entity info. }}&lt;br /&gt;
&lt;br /&gt;
{{history|0.1.0|&lt;br /&gt;
* Introduced }}&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Electric system]]&lt;br /&gt;
* [[Crafting]]&lt;br /&gt;
&lt;br /&gt;
{{ProductionNav}}&lt;br /&gt;
{{C|Producers}}&lt;/div&gt;</summary>
		<author><name>Justarandomgeek</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Blueprint_string_format&amp;diff=176923</id>
		<title>Blueprint string format</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Blueprint_string_format&amp;diff=176923"/>
		<updated>2019-11-20T16:56:39Z</updated>

		<summary type="html">&lt;p&gt;Justarandomgeek: cargo wagon inventories and cargowagon/loco orientation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}} [[Category:Technical]]&lt;br /&gt;
This is a technical description of the blueprint string format, used to share blueprints with other users.&lt;br /&gt;
&lt;br /&gt;
A blueprint string is a JSON representation of the blueprint, compressed with zlib deflate using compression level 9 and then encoded using base64 with a version byte in front of the encoded string. The version byte is currently 0 for vanilla 0.15, 0.16 and 0.17.&lt;br /&gt;
So to get the JSON representation of a blueprint from a blueprint string, skip the first byte, base64 decode the string, and finally decompress using zlib inflate. &lt;br /&gt;
&lt;br /&gt;
== Json representation of a blueprint/blueprint book ==&lt;br /&gt;
&lt;br /&gt;
The json representation of a blueprint or blueprint book is one large object inside another &amp;quot;wrapping&amp;quot; object, its key inside that object is either blueprint or blueprint-book.&lt;br /&gt;
&lt;br /&gt;
=== Blueprint book object ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| item&lt;br /&gt;
| String, the name of the item that was saved (&amp;quot;blueprint-book&amp;quot; in vanilla).&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| label&lt;br /&gt;
| String, the name of the blueprint set by the user.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| label_color&lt;br /&gt;
| The color of the label of this blueprint. Optional. [[#Color object]].&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| blueprints&lt;br /&gt;
| The actual content of the blueprint book, array of objects containing an &amp;quot;index&amp;quot; key and 0-based value and a &amp;quot;blueprint&amp;quot; key with a [[#Blueprint object]] as the value.&lt;br /&gt;
| Array&lt;br /&gt;
|-&lt;br /&gt;
| active_index&lt;br /&gt;
| Index of the currently selected blueprint, 0-based.&lt;br /&gt;
| Integer&lt;br /&gt;
|-&lt;br /&gt;
| version&lt;br /&gt;
| The map version of the map the blueprint was created in.&lt;br /&gt;
| Integer (long)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Blueprint object ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| item&lt;br /&gt;
| String, the name of the item that was saved (&amp;quot;blueprint&amp;quot; in vanilla).&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| label&lt;br /&gt;
| String, the name of the blueprint set by the user.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| label_color&lt;br /&gt;
| The color of the label of this blueprint. Optional. [[#Color object]].&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| entities&lt;br /&gt;
| The actual content of the blueprint, array of [[#Entity object]]s.&lt;br /&gt;
| Array&lt;br /&gt;
|-&lt;br /&gt;
| tiles&lt;br /&gt;
| The tiles included in the blueprint, array of [[#Tile object]]s.&lt;br /&gt;
| Array&lt;br /&gt;
|-&lt;br /&gt;
| icons&lt;br /&gt;
| The icons of the blueprint set by the user, array of [[#Icon object]]s.&lt;br /&gt;
| Array&lt;br /&gt;
|-&lt;br /&gt;
| schedules&lt;br /&gt;
| The schedules for trains in this blueprint, array of [[#Schedule object]]s.&lt;br /&gt;
| Array&lt;br /&gt;
|-&lt;br /&gt;
| version&lt;br /&gt;
| The map version of the map the blueprint was created in.&lt;br /&gt;
| Integer (long)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Icon object ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| index&lt;br /&gt;
| Index of the icon, 1-based.&lt;br /&gt;
| Integer&lt;br /&gt;
|-&lt;br /&gt;
| signal&lt;br /&gt;
| The icon that is displayed, [[#SignalID object]].&lt;br /&gt;
| Object&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== SignalID object ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| Name of the signal prototype this signal is set to.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| Type of the signal. Either &amp;quot;item&amp;quot;, &amp;quot;fluid&amp;quot; or &amp;quot;virtual&amp;quot;.&lt;br /&gt;
| String&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Entity object ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| entity_number&lt;br /&gt;
| Index of the entity, 1-based.&lt;br /&gt;
| Integer&lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| Prototype name of the entity (e.g. &amp;quot;offshore-pump&amp;quot;).&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| position&lt;br /&gt;
| [[#Position object]], position of the entity within the blueprint.&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| direction&lt;br /&gt;
| Direction of the entity, uint (optional).&lt;br /&gt;
| Integer&lt;br /&gt;
|-&lt;br /&gt;
| orientation&lt;br /&gt;
| Orientation of cargo wagon or locomotive, value 0 to 1 (optional).&lt;br /&gt;
| Floating Point&lt;br /&gt;
|-&lt;br /&gt;
| connections&lt;br /&gt;
| Circuit connection, object with keys starting from 1, values are [[#Connection object]]s (optional).&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| control_behaviour&lt;br /&gt;
|&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| items&lt;br /&gt;
| Item requests by this entity, this is what defines the item-request-proxy when the blueprint is placed, optional. [[#Item request object]]&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| recipe&lt;br /&gt;
| Name of the recipe prototype this assembling machine is set to, optional, string.&lt;br /&gt;
|String&lt;br /&gt;
|-&lt;br /&gt;
| bar&lt;br /&gt;
| Used by [[Prototype/Container]], optional. The index of the first inaccessible item slot due to limiting with the red &amp;quot;bar&amp;quot;. 0-based [[Types/ItemStackIndex]].&lt;br /&gt;
| Integer&lt;br /&gt;
|-&lt;br /&gt;
| inventory&lt;br /&gt;
| Cargo wagon inventory configuration, optional. [[#Inventory object]]&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| infinity_settings&lt;br /&gt;
| Used by [[Prototype/InfinityContainer]], optional. [[#Infinity settings object]]&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| Type of the underground belt or loader, optional. Either &amp;quot;input&amp;quot; or &amp;quot;output&amp;quot;.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| input_priority&lt;br /&gt;
| Input priority of the splitter, optional. Either &amp;quot;right&amp;quot; or &amp;quot;left&amp;quot;, &amp;quot;none&amp;quot; is omitted.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| output_priority&lt;br /&gt;
| Output priority of the splitter, optional. Either &amp;quot;right&amp;quot; or &amp;quot;left&amp;quot;, &amp;quot;none&amp;quot; is omitted.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| filter&lt;br /&gt;
| Filter of the splitter, optional. Name of the item prototype the filter is set to, string.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| filters&lt;br /&gt;
| Filters of the filter inserter or loader, optional. Array of [[#Item filter object]]s.&lt;br /&gt;
| Array&lt;br /&gt;
|-&lt;br /&gt;
| filter_mode&lt;br /&gt;
| Filter mode of the filter inserter, optional. Either &amp;quot;whitelist&amp;quot; or &amp;quot;blacklist&amp;quot;.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| override_stack_size&lt;br /&gt;
| The stack size the inserter is set to, optional. [[Types/uint8]].&lt;br /&gt;
| Integer&lt;br /&gt;
|-&lt;br /&gt;
| drop_position&lt;br /&gt;
| The drop position the inserter is set to, optional. [[#Position object]].&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| pickup_position&lt;br /&gt;
| The pickup position the inserter is set to, optional. [[#Position object]].&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| request_filters&lt;br /&gt;
| Used by [[Prototype/LogisticContainer]], optional. [[#Logistic filter object]].&lt;br /&gt;
| Array&lt;br /&gt;
|-&lt;br /&gt;
| request_from_buffers&lt;br /&gt;
| Boolean. Whether this requester chest can request from buffer chests.&lt;br /&gt;
| Boolean&lt;br /&gt;
|-&lt;br /&gt;
| parameters&lt;br /&gt;
| Used by [[Programmable speaker]], optional. [[#Speaker parameter object]].&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| alert_parameters&lt;br /&gt;
| Used by [[Programmable speaker]], optional. [[#Speaker alert parameter object]]&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| auto_launch&lt;br /&gt;
| Used by the rocket silo, optional. Boolean, whether auto launch is enabled.&lt;br /&gt;
| Boolean&lt;br /&gt;
|-&lt;br /&gt;
| variation&lt;br /&gt;
| Used by [[Prototype/SimpleEntityWithForce]] or [[Prototype/SimpleEntityWithOwner]], optional. [[Types/GraphicsVariation]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| color&lt;br /&gt;
| Color of the [[Prototype/SimpleEntityWithForce]], [[Prototype/SimpleEntityWithOwner]], or train station, optional. [[#Color object]].&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| station&lt;br /&gt;
| The name of the train station, optional.&lt;br /&gt;
| String&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Inventory object ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| filters&lt;br /&gt;
| Array of [[#Item filter object]]s.&lt;br /&gt;
| Array&lt;br /&gt;
|-&lt;br /&gt;
| bar&lt;br /&gt;
| The index of the first inaccessible item slot due to limiting with the red &amp;quot;bar&amp;quot;. 0-based, optional.  [[Types/ItemStackIndex]].&lt;br /&gt;
| Integer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Schedule object ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| schedule&lt;br /&gt;
| Array of [[#Schedule Record object]]s.&lt;br /&gt;
| Array&lt;br /&gt;
|-&lt;br /&gt;
| locomotives&lt;br /&gt;
| Array of entity numbers of locomotives using this schedule.&lt;br /&gt;
| Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Schedule Record object ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| station&lt;br /&gt;
| The name of the stop for this schedule record.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| wait_conditions&lt;br /&gt;
| Array of [[#Wait Condition object]]s.&lt;br /&gt;
| Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Wait Condition object ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| One of &amp;quot;time&amp;quot;, &amp;quot;inactivity&amp;quot;, &amp;quot;full&amp;quot;, &amp;quot;empty&amp;quot;, &amp;quot;item_count&amp;quot;, &amp;quot;circuit&amp;quot;, &amp;quot;robots_inactive&amp;quot;, &amp;quot;fluid_count&amp;quot;, &amp;quot;passenger_present&amp;quot;, &amp;quot;passenger_not_present&amp;quot;.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| compare_type&lt;br /&gt;
| Either &amp;quot;and&amp;quot;, or &amp;quot;or&amp;quot;. Tells how this condition is to be compared with the preceding conditions in the corresponding wait_conditions array.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| ticks&lt;br /&gt;
| Number of ticks to wait or of inactivity. Only present when type is &amp;quot;time&amp;quot; or &amp;quot;inactivity&amp;quot;. Optional.&lt;br /&gt;
| uint&lt;br /&gt;
|-&lt;br /&gt;
| condition&lt;br /&gt;
| CircuitCondition Object, only present when type is &amp;quot;item_count&amp;quot;, &amp;quot;circuit&amp;quot; or &amp;quot;fluid_count&amp;quot;.&lt;br /&gt;
| Object&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Tile object ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| Prototype name of the tile (e.g. &amp;quot;concrete&amp;quot;)&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| position&lt;br /&gt;
| [[#Position object]], position of the entity within the blueprint.&lt;br /&gt;
| Object&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Position object ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| x&lt;br /&gt;
| X position within the blueprint, 0 is the center.&lt;br /&gt;
| Floating point&lt;br /&gt;
|-&lt;br /&gt;
| y&lt;br /&gt;
| Y position within the blueprint, 0 is the center.&lt;br /&gt;
| Floating point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Connection object ===&lt;br /&gt;
Object containing information about the connections to other entities formed by red or green wires.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| First connection point. The default for everything that doesn&#039;t have multiple connection points.[[#Connection point object]]&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Second connection point. For example, the &amp;quot;output&amp;quot; part of an arithmetic combinator.[[#Connection point object]]&lt;br /&gt;
| Object&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Connection point object ===&lt;br /&gt;
The actual point where a wire is connected to. Contains information about where it is connected to.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| red&lt;br /&gt;
| An array of [[#Connection data object]] containing all the connections from this point created by red wire.&lt;br /&gt;
| Array&lt;br /&gt;
|-&lt;br /&gt;
| green&lt;br /&gt;
| An array of [[#Connection data object]] containing all the connections from this point created by green wire.&lt;br /&gt;
| Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Connection data object ===&lt;br /&gt;
Information about a single connection between two connection points.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| entity_id&lt;br /&gt;
| ID of the entity this connection is connected with.&lt;br /&gt;
| Integer&lt;br /&gt;
|-&lt;br /&gt;
| circuit_id&lt;br /&gt;
| The circuit connector id of the entity this connection is connected to, see [https://lua-api.factorio.com/latest/defines.html#defines.circuit_connector_id defines.circuit_connector_id].&lt;br /&gt;
| Integer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Item request object ===&lt;br /&gt;
1 or more instances of key/value pairs.&lt;br /&gt;
Key is the name of the item, string.&lt;br /&gt;
Value is the amount of items to be requested, [[Types/ItemCountType]].&lt;br /&gt;
&lt;br /&gt;
=== Item filter object ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| Name of the item prototype this filter is set to.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| index&lt;br /&gt;
| Index of the filter, 1-based. &lt;br /&gt;
| Integer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Infinity settings object ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description&lt;br /&gt;
|-&lt;br /&gt;
| remove_unfiltered_items&lt;br /&gt;
| Boolean. Whether the &amp;quot;remove unfiltered items&amp;quot; checkbox is checked.&lt;br /&gt;
| Boolean&lt;br /&gt;
|-&lt;br /&gt;
| filters&lt;br /&gt;
| Filters of the infinity container, optional. Array of [[#Infinity filter object]]s.&lt;br /&gt;
| Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Infinity filter object ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description&lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| Name of the item prototype the filter is set to, string.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| count&lt;br /&gt;
| Number the filter is set to, [[Types/ItemCountType]].&lt;br /&gt;
| Integer&lt;br /&gt;
|-&lt;br /&gt;
| mode&lt;br /&gt;
| Mode of the filter. Either &amp;quot;at-least&amp;quot;, &amp;quot;at-most&amp;quot;, or &amp;quot;exactly&amp;quot;.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| index&lt;br /&gt;
| Index of the filter, 1-based.&lt;br /&gt;
| Integer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Logistic filter object ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| Name of the item prototype this filter is set to.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| index&lt;br /&gt;
| Index of the filter, 1-based.&lt;br /&gt;
| Integer&lt;br /&gt;
|-&lt;br /&gt;
| count&lt;br /&gt;
| Number the filter is set to, [[Types/ItemCountType]]. Is 0 for storage chests.&lt;br /&gt;
| Integer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Speaker parameter object ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| playback_volume&lt;br /&gt;
| [[Types/double]]. Volume of the speaker.&lt;br /&gt;
| Floating point&lt;br /&gt;
|-&lt;br /&gt;
| playback_globally&lt;br /&gt;
| Boolean, whether global playback is enabled.&lt;br /&gt;
| Boolean&lt;br /&gt;
|-&lt;br /&gt;
| allow_polyphony&lt;br /&gt;
| Boolean, whether polyphony is allowed.&lt;br /&gt;
| Boolean&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Speaker alert parameter object ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| show_alert&lt;br /&gt;
| Boolean, whether an alert is shown.&lt;br /&gt;
| Boolean&lt;br /&gt;
|-&lt;br /&gt;
| show_on_map&lt;br /&gt;
| Boolean, whether an alert icon is shown on the map.&lt;br /&gt;
| Boolean&lt;br /&gt;
|-&lt;br /&gt;
| icon_signal_id&lt;br /&gt;
| The icon that is displayed with the alert, [[#SignalID object]].&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| alert_message&lt;br /&gt;
| String, message of the alert.&lt;br /&gt;
| String&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Color object ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| r&lt;br /&gt;
| red, number from 0 to 1.&lt;br /&gt;
| Floating point&lt;br /&gt;
|-&lt;br /&gt;
| g&lt;br /&gt;
| green, number from 0 to 1.&lt;br /&gt;
| Floating point&lt;br /&gt;
|-&lt;br /&gt;
| b&lt;br /&gt;
| blue, number from 0 to 1.&lt;br /&gt;
| Floating point&lt;br /&gt;
|-&lt;br /&gt;
| a&lt;br /&gt;
| transparency, number from 0 to 1.&lt;br /&gt;
| Floating point&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Justarandomgeek</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Blueprint_string_format&amp;diff=176882</id>
		<title>Blueprint string format</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Blueprint_string_format&amp;diff=176882"/>
		<updated>2019-11-17T17:25:50Z</updated>

		<summary type="html">&lt;p&gt;Justarandomgeek: Wait Conditions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}} [[Category:Technical]]&lt;br /&gt;
This is a technical description of the blueprint string format, used to share blueprints with other users.&lt;br /&gt;
&lt;br /&gt;
A blueprint string is a JSON representation of the blueprint, compressed with zlib deflate using compression level 9 and then encoded using base64 with a version byte in front of the encoded string. The version byte is currently 0 for vanilla 0.15, 0.16 and 0.17.&lt;br /&gt;
So to get the JSON representation of a blueprint from a blueprint string, skip the first byte, base64 decode the string, and finally decompress using zlib inflate. &lt;br /&gt;
&lt;br /&gt;
== Json representation of a blueprint/blueprint book ==&lt;br /&gt;
&lt;br /&gt;
The json representation of a blueprint or blueprint book is one large object inside another &amp;quot;wrapping&amp;quot; object, its key inside that object is either blueprint or blueprint-book.&lt;br /&gt;
&lt;br /&gt;
=== Blueprint book object ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| item&lt;br /&gt;
| String, the name of the item that was saved (&amp;quot;blueprint-book&amp;quot; in vanilla).&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| label&lt;br /&gt;
| String, the name of the blueprint set by the user.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| label_color&lt;br /&gt;
| The color of the label of this blueprint. Optional. [[#Color object]].&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| blueprints&lt;br /&gt;
| The actual content of the blueprint book, array of objects containing an &amp;quot;index&amp;quot; key and 0-based value and a &amp;quot;blueprint&amp;quot; key with a [[#Blueprint object]] as the value.&lt;br /&gt;
| Array&lt;br /&gt;
|-&lt;br /&gt;
| active_index&lt;br /&gt;
| Index of the currently selected blueprint, 0-based.&lt;br /&gt;
| Integer&lt;br /&gt;
|-&lt;br /&gt;
| version&lt;br /&gt;
| The map version of the map the blueprint was created in.&lt;br /&gt;
| Integer (long)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Blueprint object ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| item&lt;br /&gt;
| String, the name of the item that was saved (&amp;quot;blueprint&amp;quot; in vanilla).&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| label&lt;br /&gt;
| String, the name of the blueprint set by the user.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| label_color&lt;br /&gt;
| The color of the label of this blueprint. Optional. [[#Color object]].&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| entities&lt;br /&gt;
| The actual content of the blueprint, array of [[#Entity object]]s.&lt;br /&gt;
| Array&lt;br /&gt;
|-&lt;br /&gt;
| tiles&lt;br /&gt;
| The tiles included in the blueprint, array of [[#Tile object]]s.&lt;br /&gt;
| Array&lt;br /&gt;
|-&lt;br /&gt;
| icons&lt;br /&gt;
| The icons of the blueprint set by the user, array of [[#Icon object]]s.&lt;br /&gt;
| Array&lt;br /&gt;
|-&lt;br /&gt;
| schedules&lt;br /&gt;
| The schedules for trains in this blueprint, array of [[#Schedule object]]s.&lt;br /&gt;
| Array&lt;br /&gt;
|-&lt;br /&gt;
| version&lt;br /&gt;
| The map version of the map the blueprint was created in.&lt;br /&gt;
| Integer (long)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Icon object ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| index&lt;br /&gt;
| Index of the icon, 1-based.&lt;br /&gt;
| Integer&lt;br /&gt;
|-&lt;br /&gt;
| signal&lt;br /&gt;
| The icon that is displayed, [[#SignalID object]].&lt;br /&gt;
| Object&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== SignalID object ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| Name of the signal prototype this signal is set to.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| Type of the signal. Either &amp;quot;item&amp;quot;, &amp;quot;fluid&amp;quot; or &amp;quot;virtual&amp;quot;.&lt;br /&gt;
| String&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Entity object ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| entity_number&lt;br /&gt;
| Index of the entity, 1-based.&lt;br /&gt;
| Integer&lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| Prototype name of the entity (e.g. &amp;quot;offshore-pump&amp;quot;).&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| position&lt;br /&gt;
| [[#Position object]], position of the entity within the blueprint.&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| direction&lt;br /&gt;
| Direction of the entity, uint (optional).&lt;br /&gt;
| Integer&lt;br /&gt;
|-&lt;br /&gt;
| connections&lt;br /&gt;
| Circuit connection, object with keys starting from 1, values are [[#Connection object]]s (optional).&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| control_behaviour&lt;br /&gt;
|&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| items&lt;br /&gt;
| Item requests by this entity, this is what defines the item-request-proxy when the blueprint is placed, optional. [[#Item request object]]&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| recipe&lt;br /&gt;
| Name of the recipe prototype this assembling machine is set to, optional, string.&lt;br /&gt;
|String&lt;br /&gt;
|-&lt;br /&gt;
| bar&lt;br /&gt;
| Used by [[Prototype/Container]], optional. The index of the first inaccessible item slot due to limiting with the red &amp;quot;bar&amp;quot;. 0-based [[Types/ItemStackIndex]].&lt;br /&gt;
| Integer&lt;br /&gt;
|-&lt;br /&gt;
| infinity_settings&lt;br /&gt;
| Used by [[Prototype/InfinityContainer]], optional. [[#Infinity settings object]]&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| Type of the underground belt or loader, optional. Either &amp;quot;input&amp;quot; or &amp;quot;output&amp;quot;.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| input_priority&lt;br /&gt;
| Input priority of the splitter, optional. Either &amp;quot;right&amp;quot; or &amp;quot;left&amp;quot;, &amp;quot;none&amp;quot; is omitted.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| output_priority&lt;br /&gt;
| Output priority of the splitter, optional. Either &amp;quot;right&amp;quot; or &amp;quot;left&amp;quot;, &amp;quot;none&amp;quot; is omitted.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| filter&lt;br /&gt;
| Filter of the splitter, optional. Name of the item prototype the filter is set to, string.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| filters&lt;br /&gt;
| Filters of the filter inserter or loader, optional. Array of [[#Item filter object]]s.&lt;br /&gt;
| Array&lt;br /&gt;
|-&lt;br /&gt;
| filter_mode&lt;br /&gt;
| Filter mode of the filter inserter, optional. Either &amp;quot;whitelist&amp;quot; or &amp;quot;blacklist&amp;quot;.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| override_stack_size&lt;br /&gt;
| The stack size the inserter is set to, optional. [[Types/uint8]].&lt;br /&gt;
| Integer&lt;br /&gt;
|-&lt;br /&gt;
| drop_position&lt;br /&gt;
| The drop position the inserter is set to, optional. [[#Position object]].&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| pickup_position&lt;br /&gt;
| The pickup position the inserter is set to, optional. [[#Position object]].&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| request_filters&lt;br /&gt;
| Used by [[Prototype/LogisticContainer]], optional. [[#Logistic filter object]].&lt;br /&gt;
| Array&lt;br /&gt;
|-&lt;br /&gt;
| request_from_buffers&lt;br /&gt;
| Boolean. Whether this requester chest can request from buffer chests.&lt;br /&gt;
| Boolean&lt;br /&gt;
|-&lt;br /&gt;
| parameters&lt;br /&gt;
| Used by [[Programmable speaker]], optional. [[#Speaker parameter object]].&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| alert_parameters&lt;br /&gt;
| Used by [[Programmable speaker]], optional. [[#Speaker alert parameter object]]&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| auto_launch&lt;br /&gt;
| Used by the rocket silo, optional. Boolean, whether auto launch is enabled.&lt;br /&gt;
| Boolean&lt;br /&gt;
|-&lt;br /&gt;
| variation&lt;br /&gt;
| Used by [[Prototype/SimpleEntityWithForce]] or [[Prototype/SimpleEntityWithOwner]], optional. [[Types/GraphicsVariation]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| color&lt;br /&gt;
| Color of the [[Prototype/SimpleEntityWithForce]], [[Prototype/SimpleEntityWithOwner]], or train station, optional. [[#Color object]].&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| station&lt;br /&gt;
| The name of the train station, optional.&lt;br /&gt;
| String&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Schedule object ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| schedule&lt;br /&gt;
| Array of [[#Schedule Record object]]s.&lt;br /&gt;
| Array&lt;br /&gt;
|-&lt;br /&gt;
| locomotives&lt;br /&gt;
| Array of entity numbers of locomotives using this schedule.&lt;br /&gt;
| Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Schedule Record object ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| station&lt;br /&gt;
| The name of the stop for this schedule record.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| wait_conditions&lt;br /&gt;
| Array of [[#Wait Condition object]]s.&lt;br /&gt;
| Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Wait Condition object ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| One of &amp;quot;time&amp;quot;, &amp;quot;inactivity&amp;quot;, &amp;quot;full&amp;quot;, &amp;quot;empty&amp;quot;, &amp;quot;item_count&amp;quot;, &amp;quot;circuit&amp;quot;, &amp;quot;robots_inactive&amp;quot;, &amp;quot;fluid_count&amp;quot;, &amp;quot;passenger_present&amp;quot;, &amp;quot;passenger_not_present&amp;quot;.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| compare_type&lt;br /&gt;
| Either &amp;quot;and&amp;quot;, or &amp;quot;or&amp;quot;. Tells how this condition is to be compared with the preceding conditions in the corresponding wait_conditions array.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| ticks&lt;br /&gt;
| Number of ticks to wait or of inactivity. Only present when type is &amp;quot;time&amp;quot; or &amp;quot;inactivity&amp;quot;. Optional.&lt;br /&gt;
| uint&lt;br /&gt;
|-&lt;br /&gt;
| condition&lt;br /&gt;
| CircuitCondition Object, only present when type is &amp;quot;item_count&amp;quot;, &amp;quot;circuit&amp;quot; or &amp;quot;fluid_count&amp;quot;.&lt;br /&gt;
| Object&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Tile object ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| Prototype name of the tile (e.g. &amp;quot;concrete&amp;quot;)&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| position&lt;br /&gt;
| [[#Position object]], position of the entity within the blueprint.&lt;br /&gt;
| Object&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Position object ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| x&lt;br /&gt;
| X position within the blueprint, 0 is the center.&lt;br /&gt;
| Floating point&lt;br /&gt;
|-&lt;br /&gt;
| y&lt;br /&gt;
| Y position within the blueprint, 0 is the center.&lt;br /&gt;
| Floating point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Connection object ===&lt;br /&gt;
Object containing information about the connections to other entities formed by red or green wires.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| First connection point. The default for everything that doesn&#039;t have multiple connection points.[[#Connection point object]]&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Second connection point. For example, the &amp;quot;output&amp;quot; part of an arithmetic combinator.[[#Connection point object]]&lt;br /&gt;
| Object&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Connection point object ===&lt;br /&gt;
The actual point where a wire is connected to. Contains information about where it is connected to.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| red&lt;br /&gt;
| An array of [[#Connection data object]] containing all the connections from this point created by red wire.&lt;br /&gt;
| Array&lt;br /&gt;
|-&lt;br /&gt;
| green&lt;br /&gt;
| An array of [[#Connection data object]] containing all the connections from this point created by green wire.&lt;br /&gt;
| Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Connection data object ===&lt;br /&gt;
Information about a single connection between two connection points.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| entity_id&lt;br /&gt;
| ID of the entity this connection is connected with.&lt;br /&gt;
| Integer&lt;br /&gt;
|-&lt;br /&gt;
| circuit_id&lt;br /&gt;
| The circuit connector id of the entity this connection is connected to, see [https://lua-api.factorio.com/latest/defines.html#defines.circuit_connector_id defines.circuit_connector_id].&lt;br /&gt;
| Integer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Item request object ===&lt;br /&gt;
1 or more instances of key/value pairs.&lt;br /&gt;
Key is the name of the item, string.&lt;br /&gt;
Value is the amount of items to be requested, [[Types/ItemCountType]].&lt;br /&gt;
&lt;br /&gt;
=== Item filter object ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| Name of the item prototype this filter is set to.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| index&lt;br /&gt;
| Index of the filter, 1-based. &lt;br /&gt;
| Integer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Infinity settings object ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description&lt;br /&gt;
|-&lt;br /&gt;
| remove_unfiltered_items&lt;br /&gt;
| Boolean. Whether the &amp;quot;remove unfiltered items&amp;quot; checkbox is checked.&lt;br /&gt;
| Boolean&lt;br /&gt;
|-&lt;br /&gt;
| filters&lt;br /&gt;
| Filters of the infinity container, optional. Array of [[#Infinity filter object]]s.&lt;br /&gt;
| Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Infinity filter object ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description&lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| Name of the item prototype the filter is set to, string.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| count&lt;br /&gt;
| Number the filter is set to, [[Types/ItemCountType]].&lt;br /&gt;
| Integer&lt;br /&gt;
|-&lt;br /&gt;
| mode&lt;br /&gt;
| Mode of the filter. Either &amp;quot;at-least&amp;quot;, &amp;quot;at-most&amp;quot;, or &amp;quot;exactly&amp;quot;.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| index&lt;br /&gt;
| Index of the filter, 1-based.&lt;br /&gt;
| Integer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Logistic filter object ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| Name of the item prototype this filter is set to.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| index&lt;br /&gt;
| Index of the filter, 1-based.&lt;br /&gt;
| Integer&lt;br /&gt;
|-&lt;br /&gt;
| count&lt;br /&gt;
| Number the filter is set to, [[Types/ItemCountType]]. Is 0 for storage chests.&lt;br /&gt;
| Integer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Speaker parameter object ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| playback_volume&lt;br /&gt;
| [[Types/double]]. Volume of the speaker.&lt;br /&gt;
| Floating point&lt;br /&gt;
|-&lt;br /&gt;
| playback_globally&lt;br /&gt;
| Boolean, whether global playback is enabled.&lt;br /&gt;
| Boolean&lt;br /&gt;
|-&lt;br /&gt;
| allow_polyphony&lt;br /&gt;
| Boolean, whether polyphony is allowed.&lt;br /&gt;
| Boolean&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Speaker alert parameter object ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| show_alert&lt;br /&gt;
| Boolean, whether an alert is shown.&lt;br /&gt;
| Boolean&lt;br /&gt;
|-&lt;br /&gt;
| show_on_map&lt;br /&gt;
| Boolean, whether an alert icon is shown on the map.&lt;br /&gt;
| Boolean&lt;br /&gt;
|-&lt;br /&gt;
| icon_signal_id&lt;br /&gt;
| The icon that is displayed with the alert, [[#SignalID object]].&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| alert_message&lt;br /&gt;
| String, message of the alert.&lt;br /&gt;
| String&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Color object ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| r&lt;br /&gt;
| red, number from 0 to 1.&lt;br /&gt;
| Floating point&lt;br /&gt;
|-&lt;br /&gt;
| g&lt;br /&gt;
| green, number from 0 to 1.&lt;br /&gt;
| Floating point&lt;br /&gt;
|-&lt;br /&gt;
| b&lt;br /&gt;
| blue, number from 0 to 1.&lt;br /&gt;
| Floating point&lt;br /&gt;
|-&lt;br /&gt;
| a&lt;br /&gt;
| transparency, number from 0 to 1.&lt;br /&gt;
| Floating point&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Justarandomgeek</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Blueprint_string_format&amp;diff=176881</id>
		<title>Blueprint string format</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Blueprint_string_format&amp;diff=176881"/>
		<updated>2019-11-17T17:00:48Z</updated>

		<summary type="html">&lt;p&gt;Justarandomgeek: Train schedules&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}} [[Category:Technical]]&lt;br /&gt;
This is a technical description of the blueprint string format, used to share blueprints with other users.&lt;br /&gt;
&lt;br /&gt;
A blueprint string is a JSON representation of the blueprint, compressed with zlib deflate using compression level 9 and then encoded using base64 with a version byte in front of the encoded string. The version byte is currently 0 for vanilla 0.15, 0.16 and 0.17.&lt;br /&gt;
So to get the JSON representation of a blueprint from a blueprint string, skip the first byte, base64 decode the string, and finally decompress using zlib inflate. &lt;br /&gt;
&lt;br /&gt;
== Json representation of a blueprint/blueprint book ==&lt;br /&gt;
&lt;br /&gt;
The json representation of a blueprint or blueprint book is one large object inside another &amp;quot;wrapping&amp;quot; object, its key inside that object is either blueprint or blueprint-book.&lt;br /&gt;
&lt;br /&gt;
=== Blueprint book object ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| item&lt;br /&gt;
| String, the name of the item that was saved (&amp;quot;blueprint-book&amp;quot; in vanilla).&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| label&lt;br /&gt;
| String, the name of the blueprint set by the user.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| label_color&lt;br /&gt;
| The color of the label of this blueprint. Optional. [[#Color object]].&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| blueprints&lt;br /&gt;
| The actual content of the blueprint book, array of objects containing an &amp;quot;index&amp;quot; key and 0-based value and a &amp;quot;blueprint&amp;quot; key with a [[#Blueprint object]] as the value.&lt;br /&gt;
| Array&lt;br /&gt;
|-&lt;br /&gt;
| active_index&lt;br /&gt;
| Index of the currently selected blueprint, 0-based.&lt;br /&gt;
| Integer&lt;br /&gt;
|-&lt;br /&gt;
| version&lt;br /&gt;
| The map version of the map the blueprint was created in.&lt;br /&gt;
| Integer (long)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Blueprint object ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| item&lt;br /&gt;
| String, the name of the item that was saved (&amp;quot;blueprint&amp;quot; in vanilla).&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| label&lt;br /&gt;
| String, the name of the blueprint set by the user.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| label_color&lt;br /&gt;
| The color of the label of this blueprint. Optional. [[#Color object]].&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| entities&lt;br /&gt;
| The actual content of the blueprint, array of [[#Entity object]]s.&lt;br /&gt;
| Array&lt;br /&gt;
|-&lt;br /&gt;
| tiles&lt;br /&gt;
| The tiles included in the blueprint, array of [[#Tile object]]s.&lt;br /&gt;
| Array&lt;br /&gt;
|-&lt;br /&gt;
| icons&lt;br /&gt;
| The icons of the blueprint set by the user, array of [[#Icon object]]s.&lt;br /&gt;
| Array&lt;br /&gt;
|-&lt;br /&gt;
| schedules&lt;br /&gt;
| The schedules for trains in this blueprint, array of [[#Schedule object]]s.&lt;br /&gt;
| Array&lt;br /&gt;
|-&lt;br /&gt;
| version&lt;br /&gt;
| The map version of the map the blueprint was created in.&lt;br /&gt;
| Integer (long)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Icon object ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| index&lt;br /&gt;
| Index of the icon, 1-based.&lt;br /&gt;
| Integer&lt;br /&gt;
|-&lt;br /&gt;
| signal&lt;br /&gt;
| The icon that is displayed, [[#SignalID object]].&lt;br /&gt;
| Object&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== SignalID object ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| Name of the signal prototype this signal is set to.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| Type of the signal. Either &amp;quot;item&amp;quot;, &amp;quot;fluid&amp;quot; or &amp;quot;virtual&amp;quot;.&lt;br /&gt;
| String&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Entity object ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| entity_number&lt;br /&gt;
| Index of the entity, 1-based.&lt;br /&gt;
| Integer&lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| Prototype name of the entity (e.g. &amp;quot;offshore-pump&amp;quot;).&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| position&lt;br /&gt;
| [[#Position object]], position of the entity within the blueprint.&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| direction&lt;br /&gt;
| Direction of the entity, uint (optional).&lt;br /&gt;
| Integer&lt;br /&gt;
|-&lt;br /&gt;
| connections&lt;br /&gt;
| Circuit connection, object with keys starting from 1, values are [[#Connection object]]s (optional).&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| control_behaviour&lt;br /&gt;
|&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| items&lt;br /&gt;
| Item requests by this entity, this is what defines the item-request-proxy when the blueprint is placed, optional. [[#Item request object]]&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| recipe&lt;br /&gt;
| Name of the recipe prototype this assembling machine is set to, optional, string.&lt;br /&gt;
|String&lt;br /&gt;
|-&lt;br /&gt;
| bar&lt;br /&gt;
| Used by [[Prototype/Container]], optional. The index of the first inaccessible item slot due to limiting with the red &amp;quot;bar&amp;quot;. 0-based [[Types/ItemStackIndex]].&lt;br /&gt;
| Integer&lt;br /&gt;
|-&lt;br /&gt;
| infinity_settings&lt;br /&gt;
| Used by [[Prototype/InfinityContainer]], optional. [[#Infinity settings object]]&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| Type of the underground belt or loader, optional. Either &amp;quot;input&amp;quot; or &amp;quot;output&amp;quot;.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| input_priority&lt;br /&gt;
| Input priority of the splitter, optional. Either &amp;quot;right&amp;quot; or &amp;quot;left&amp;quot;, &amp;quot;none&amp;quot; is omitted.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| output_priority&lt;br /&gt;
| Output priority of the splitter, optional. Either &amp;quot;right&amp;quot; or &amp;quot;left&amp;quot;, &amp;quot;none&amp;quot; is omitted.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| filter&lt;br /&gt;
| Filter of the splitter, optional. Name of the item prototype the filter is set to, string.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| filters&lt;br /&gt;
| Filters of the filter inserter or loader, optional. Array of [[#Item filter object]]s.&lt;br /&gt;
| Array&lt;br /&gt;
|-&lt;br /&gt;
| filter_mode&lt;br /&gt;
| Filter mode of the filter inserter, optional. Either &amp;quot;whitelist&amp;quot; or &amp;quot;blacklist&amp;quot;.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| override_stack_size&lt;br /&gt;
| The stack size the inserter is set to, optional. [[Types/uint8]].&lt;br /&gt;
| Integer&lt;br /&gt;
|-&lt;br /&gt;
| drop_position&lt;br /&gt;
| The drop position the inserter is set to, optional. [[#Position object]].&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| pickup_position&lt;br /&gt;
| The pickup position the inserter is set to, optional. [[#Position object]].&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| request_filters&lt;br /&gt;
| Used by [[Prototype/LogisticContainer]], optional. [[#Logistic filter object]].&lt;br /&gt;
| Array&lt;br /&gt;
|-&lt;br /&gt;
| request_from_buffers&lt;br /&gt;
| Boolean. Whether this requester chest can request from buffer chests.&lt;br /&gt;
| Boolean&lt;br /&gt;
|-&lt;br /&gt;
| parameters&lt;br /&gt;
| Used by [[Programmable speaker]], optional. [[#Speaker parameter object]].&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| alert_parameters&lt;br /&gt;
| Used by [[Programmable speaker]], optional. [[#Speaker alert parameter object]]&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| auto_launch&lt;br /&gt;
| Used by the rocket silo, optional. Boolean, whether auto launch is enabled.&lt;br /&gt;
| Boolean&lt;br /&gt;
|-&lt;br /&gt;
| variation&lt;br /&gt;
| Used by [[Prototype/SimpleEntityWithForce]] or [[Prototype/SimpleEntityWithOwner]], optional. [[Types/GraphicsVariation]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| color&lt;br /&gt;
| Color of the [[Prototype/SimpleEntityWithForce]], [[Prototype/SimpleEntityWithOwner]], or train station, optional. [[#Color object]].&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| station&lt;br /&gt;
| The name of the train station, optional.&lt;br /&gt;
| String&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Schedule object ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| schedule&lt;br /&gt;
| Array of [[#Schedule Entry object]]s.&lt;br /&gt;
| Array&lt;br /&gt;
|-&lt;br /&gt;
| locomotives&lt;br /&gt;
| Array of entity numbers of locomotives using this schedule.&lt;br /&gt;
| Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Schedule Entry object ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| station&lt;br /&gt;
| The name of the stop for this schedule entry.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| wait_conditions&lt;br /&gt;
| Array of wait conditions.&lt;br /&gt;
| Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Tile object ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| Prototype name of the tile (e.g. &amp;quot;concrete&amp;quot;)&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| position&lt;br /&gt;
| [[#Position object]], position of the entity within the blueprint.&lt;br /&gt;
| Object&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Position object ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| x&lt;br /&gt;
| X position within the blueprint, 0 is the center.&lt;br /&gt;
| Floating point&lt;br /&gt;
|-&lt;br /&gt;
| y&lt;br /&gt;
| Y position within the blueprint, 0 is the center.&lt;br /&gt;
| Floating point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Connection object ===&lt;br /&gt;
Object containing information about the connections to other entities formed by red or green wires.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| First connection point. The default for everything that doesn&#039;t have multiple connection points.[[#Connection point object]]&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Second connection point. For example, the &amp;quot;output&amp;quot; part of an arithmetic combinator.[[#Connection point object]]&lt;br /&gt;
| Object&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Connection point object ===&lt;br /&gt;
The actual point where a wire is connected to. Contains information about where it is connected to.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| red&lt;br /&gt;
| An array of [[#Connection data object]] containing all the connections from this point created by red wire.&lt;br /&gt;
| Array&lt;br /&gt;
|-&lt;br /&gt;
| green&lt;br /&gt;
| An array of [[#Connection data object]] containing all the connections from this point created by green wire.&lt;br /&gt;
| Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Connection data object ===&lt;br /&gt;
Information about a single connection between two connection points.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| entity_id&lt;br /&gt;
| ID of the entity this connection is connected with.&lt;br /&gt;
| Integer&lt;br /&gt;
|-&lt;br /&gt;
| circuit_id&lt;br /&gt;
| The circuit connector id of the entity this connection is connected to, see [https://lua-api.factorio.com/latest/defines.html#defines.circuit_connector_id defines.circuit_connector_id].&lt;br /&gt;
| Integer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Item request object ===&lt;br /&gt;
1 or more instances of key/value pairs.&lt;br /&gt;
Key is the name of the item, string.&lt;br /&gt;
Value is the amount of items to be requested, [[Types/ItemCountType]].&lt;br /&gt;
&lt;br /&gt;
=== Item filter object ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| Name of the item prototype this filter is set to.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| index&lt;br /&gt;
| Index of the filter, 1-based. &lt;br /&gt;
| Integer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Infinity settings object ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description&lt;br /&gt;
|-&lt;br /&gt;
| remove_unfiltered_items&lt;br /&gt;
| Boolean. Whether the &amp;quot;remove unfiltered items&amp;quot; checkbox is checked.&lt;br /&gt;
| Boolean&lt;br /&gt;
|-&lt;br /&gt;
| filters&lt;br /&gt;
| Filters of the infinity container, optional. Array of [[#Infinity filter object]]s.&lt;br /&gt;
| Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Infinity filter object ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description&lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| Name of the item prototype the filter is set to, string.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| count&lt;br /&gt;
| Number the filter is set to, [[Types/ItemCountType]].&lt;br /&gt;
| Integer&lt;br /&gt;
|-&lt;br /&gt;
| mode&lt;br /&gt;
| Mode of the filter. Either &amp;quot;at-least&amp;quot;, &amp;quot;at-most&amp;quot;, or &amp;quot;exactly&amp;quot;.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| index&lt;br /&gt;
| Index of the filter, 1-based.&lt;br /&gt;
| Integer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Logistic filter object ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| Name of the item prototype this filter is set to.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| index&lt;br /&gt;
| Index of the filter, 1-based.&lt;br /&gt;
| Integer&lt;br /&gt;
|-&lt;br /&gt;
| count&lt;br /&gt;
| Number the filter is set to, [[Types/ItemCountType]]. Is 0 for storage chests.&lt;br /&gt;
| Integer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Speaker parameter object ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| playback_volume&lt;br /&gt;
| [[Types/double]]. Volume of the speaker.&lt;br /&gt;
| Floating point&lt;br /&gt;
|-&lt;br /&gt;
| playback_globally&lt;br /&gt;
| Boolean, whether global playback is enabled.&lt;br /&gt;
| Boolean&lt;br /&gt;
|-&lt;br /&gt;
| allow_polyphony&lt;br /&gt;
| Boolean, whether polyphony is allowed.&lt;br /&gt;
| Boolean&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Speaker alert parameter object ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| show_alert&lt;br /&gt;
| Boolean, whether an alert is shown.&lt;br /&gt;
| Boolean&lt;br /&gt;
|-&lt;br /&gt;
| show_on_map&lt;br /&gt;
| Boolean, whether an alert icon is shown on the map.&lt;br /&gt;
| Boolean&lt;br /&gt;
|-&lt;br /&gt;
| icon_signal_id&lt;br /&gt;
| The icon that is displayed with the alert, [[#SignalID object]].&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| alert_message&lt;br /&gt;
| String, message of the alert.&lt;br /&gt;
| String&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Color object ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| r&lt;br /&gt;
| red, number from 0 to 1.&lt;br /&gt;
| Floating point&lt;br /&gt;
|-&lt;br /&gt;
| g&lt;br /&gt;
| green, number from 0 to 1.&lt;br /&gt;
| Floating point&lt;br /&gt;
|-&lt;br /&gt;
| b&lt;br /&gt;
| blue, number from 0 to 1.&lt;br /&gt;
| Floating point&lt;br /&gt;
|-&lt;br /&gt;
| a&lt;br /&gt;
| transparency, number from 0 to 1.&lt;br /&gt;
| Floating point&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Justarandomgeek</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Blueprint_string_format&amp;diff=176876</id>
		<title>Blueprint string format</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Blueprint_string_format&amp;diff=176876"/>
		<updated>2019-11-17T03:50:50Z</updated>

		<summary type="html">&lt;p&gt;Justarandomgeek: /* Entity object */ add filter_mode&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}} [[Category:Technical]]&lt;br /&gt;
This is a technical description of the blueprint string format, used to share blueprints with other users.&lt;br /&gt;
&lt;br /&gt;
A blueprint string is a JSON representation of the blueprint, compressed with zlib deflate using compression level 9 and then encoded using base64 with a version byte in front of the encoded string. The version byte is currently 0 for vanilla 0.15, 0.16 and 0.17.&lt;br /&gt;
So to get the JSON representation of a blueprint from a blueprint string, skip the first byte, base64 decode the string, and finally decompress using zlib inflate. &lt;br /&gt;
&lt;br /&gt;
== Json representation of a blueprint/blueprint book ==&lt;br /&gt;
&lt;br /&gt;
The json representation of a blueprint or blueprint book is one large object inside another &amp;quot;wrapping&amp;quot; object, its key inside that object is either blueprint or blueprint-book.&lt;br /&gt;
&lt;br /&gt;
=== Blueprint book object ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| item&lt;br /&gt;
| String, the name of the item that was saved (&amp;quot;blueprint-book&amp;quot; in vanilla).&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| label&lt;br /&gt;
| String, the name of the blueprint set by the user.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| label_color&lt;br /&gt;
| The color of the label of this blueprint. Optional. [[#Color object]].&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| blueprints&lt;br /&gt;
| The actual content of the blueprint book, array of objects containing an &amp;quot;index&amp;quot; key and 0-based value and a &amp;quot;blueprint&amp;quot; key with a [[#Blueprint object]] as the value.&lt;br /&gt;
| Array&lt;br /&gt;
|-&lt;br /&gt;
| active_index&lt;br /&gt;
| Index of the currently selected blueprint, 0-based.&lt;br /&gt;
| Integer&lt;br /&gt;
|-&lt;br /&gt;
| version&lt;br /&gt;
| The map version of the map the blueprint was created in.&lt;br /&gt;
| Integer (long)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Blueprint object ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| item&lt;br /&gt;
| String, the name of the item that was saved (&amp;quot;blueprint&amp;quot; in vanilla).&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| label&lt;br /&gt;
| String, the name of the blueprint set by the user.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| label_color&lt;br /&gt;
| The color of the label of this blueprint. Optional. [[#Color object]].&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| entities&lt;br /&gt;
| The actual content of the blueprint, array of [[#Entity object]]s.&lt;br /&gt;
| Array&lt;br /&gt;
|-&lt;br /&gt;
| tiles&lt;br /&gt;
| The tiles included in the blueprint, array of [[#Tile object]]s.&lt;br /&gt;
| Array&lt;br /&gt;
|-&lt;br /&gt;
| icons&lt;br /&gt;
| The icons of the blueprint set by the user, array of [[#Icon object]]s.&lt;br /&gt;
| Array&lt;br /&gt;
|-&lt;br /&gt;
| version&lt;br /&gt;
| The map version of the map the blueprint was created in.&lt;br /&gt;
| Integer (long)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Icon object ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| index&lt;br /&gt;
| Index of the icon, 1-based.&lt;br /&gt;
| Integer&lt;br /&gt;
|-&lt;br /&gt;
| signal&lt;br /&gt;
| The icon that is displayed, [[#SignalID object]].&lt;br /&gt;
| Object&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== SignalID object ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| Name of the signal prototype this signal is set to.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| Type of the signal. Either &amp;quot;item&amp;quot;, &amp;quot;fluid&amp;quot; or &amp;quot;virtual&amp;quot;.&lt;br /&gt;
| String&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Entity object ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| entity_number&lt;br /&gt;
| Index of the entity, 1-based.&lt;br /&gt;
| Integer&lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| Prototype name of the entity (e.g. &amp;quot;offshore-pump&amp;quot;).&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| position&lt;br /&gt;
| [[#Position object]], position of the entity within the blueprint.&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| direction&lt;br /&gt;
| Direction of the entity, uint (optional).&lt;br /&gt;
| Integer&lt;br /&gt;
|-&lt;br /&gt;
| connections&lt;br /&gt;
| Circuit connection, object with keys starting from 1, values are [[#Connection object]]s (optional).&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| control_behaviour&lt;br /&gt;
|&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| items&lt;br /&gt;
| Item requests by this entity, this is what defines the item-request-proxy when the blueprint is placed, optional. [[#Item request object]]&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| recipe&lt;br /&gt;
| Name of the recipe prototype this assembling machine is set to, optional, string.&lt;br /&gt;
|String&lt;br /&gt;
|-&lt;br /&gt;
| bar&lt;br /&gt;
| Used by [[Prototype/Container]], optional. The index of the first inaccessible item slot due to limiting with the red &amp;quot;bar&amp;quot;. 0-based [[Types/ItemStackIndex]].&lt;br /&gt;
| Integer&lt;br /&gt;
|-&lt;br /&gt;
| infinity_settings&lt;br /&gt;
| Used by [[Prototype/InfinityContainer]], optional. [[#Infinity settings object]]&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| Type of the underground belt or loader, optional. Either &amp;quot;input&amp;quot; or &amp;quot;output&amp;quot;.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| input_priority&lt;br /&gt;
| Input priority of the splitter, optional. Either &amp;quot;right&amp;quot; or &amp;quot;left&amp;quot;, &amp;quot;none&amp;quot; is omitted.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| output_priority&lt;br /&gt;
| Output priority of the splitter, optional. Either &amp;quot;right&amp;quot; or &amp;quot;left&amp;quot;, &amp;quot;none&amp;quot; is omitted.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| filter&lt;br /&gt;
| Filter of the splitter, optional. Name of the item prototype the filter is set to, string.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| filters&lt;br /&gt;
| Filters of the filter inserter or loader, optional. Array of [[#Item filter object]]s.&lt;br /&gt;
| Array&lt;br /&gt;
|-&lt;br /&gt;
| filter_mode&lt;br /&gt;
| Filter mode of the filter inserter, optional. Either &amp;quot;whitelist&amp;quot; or &amp;quot;blacklist&amp;quot;.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| override_stack_size&lt;br /&gt;
| The stack size the inserter is set to, optional. [[Types/uint8]].&lt;br /&gt;
| Integer&lt;br /&gt;
|-&lt;br /&gt;
| drop_position&lt;br /&gt;
| The drop position the inserter is set to, optional. [[#Position object]].&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| pickup_position&lt;br /&gt;
| The pickup position the inserter is set to, optional. [[#Position object]].&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| request_filters&lt;br /&gt;
| Used by [[Prototype/LogisticContainer]], optional. [[#Logistic filter object]].&lt;br /&gt;
| Array&lt;br /&gt;
|-&lt;br /&gt;
| request_from_buffers&lt;br /&gt;
| Boolean. Whether this requester chest can request from buffer chests.&lt;br /&gt;
| Boolean&lt;br /&gt;
|-&lt;br /&gt;
| parameters&lt;br /&gt;
| Used by [[Programmable speaker]], optional. [[#Speaker parameter object]].&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| alert_parameters&lt;br /&gt;
| Used by [[Programmable speaker]], optional. [[#Speaker alert parameter object]]&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| auto_launch&lt;br /&gt;
| Used by the rocket silo, optional. Boolean, whether auto launch is enabled.&lt;br /&gt;
| Boolean&lt;br /&gt;
|-&lt;br /&gt;
| variation&lt;br /&gt;
| Used by [[Prototype/SimpleEntityWithForce]] or [[Prototype/SimpleEntityWithOwner]], optional. [[Types/GraphicsVariation]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| color&lt;br /&gt;
| Color of the [[Prototype/SimpleEntityWithForce]], [[Prototype/SimpleEntityWithOwner]], or train station, optional. [[#Color object]].&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| station&lt;br /&gt;
| The name of the train station, optional.&lt;br /&gt;
| String&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Tile object ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| Prototype name of the tile (e.g. &amp;quot;concrete&amp;quot;)&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| position&lt;br /&gt;
| [[#Position object]], position of the entity within the blueprint.&lt;br /&gt;
| Object&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Position object ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| x&lt;br /&gt;
| X position within the blueprint, 0 is the center.&lt;br /&gt;
| Floating point&lt;br /&gt;
|-&lt;br /&gt;
| y&lt;br /&gt;
| Y position within the blueprint, 0 is the center.&lt;br /&gt;
| Floating point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Connection object ===&lt;br /&gt;
Object containing information about the connections to other entities formed by red or green wires.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| First connection point. The default for everything that doesn&#039;t have multiple connection points.[[#Connection point object]]&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Second connection point. For example, the &amp;quot;output&amp;quot; part of an arithmetic combinator.[[#Connection point object]]&lt;br /&gt;
| Object&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Connection point object ===&lt;br /&gt;
The actual point where a wire is connected to. Contains information about where it is connected to.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| red&lt;br /&gt;
| An array of [[#Connection data object]] containing all the connections from this point created by red wire.&lt;br /&gt;
| Array&lt;br /&gt;
|-&lt;br /&gt;
| green&lt;br /&gt;
| An array of [[#Connection data object]] containing all the connections from this point created by green wire.&lt;br /&gt;
| Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Connection data object ===&lt;br /&gt;
Information about a single connection between two connection points.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| entity_id&lt;br /&gt;
| ID of the entity this connection is connected with.&lt;br /&gt;
| Integer&lt;br /&gt;
|-&lt;br /&gt;
| circuit_id&lt;br /&gt;
| The circuit connector id of the entity this connection is connected to, see [https://lua-api.factorio.com/latest/defines.html#defines.circuit_connector_id defines.circuit_connector_id].&lt;br /&gt;
| Integer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Item request object ===&lt;br /&gt;
1 or more instances of key/value pairs.&lt;br /&gt;
Key is the name of the item, string.&lt;br /&gt;
Value is the amount of items to be requested, [[Types/ItemCountType]].&lt;br /&gt;
&lt;br /&gt;
=== Item filter object ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| Name of the item prototype this filter is set to.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| index&lt;br /&gt;
| Index of the filter, 1-based. &lt;br /&gt;
| Integer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Infinity settings object ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description&lt;br /&gt;
|-&lt;br /&gt;
| remove_unfiltered_items&lt;br /&gt;
| Boolean. Whether the &amp;quot;remove unfiltered items&amp;quot; checkbox is checked.&lt;br /&gt;
| Boolean&lt;br /&gt;
|-&lt;br /&gt;
| filters&lt;br /&gt;
| Filters of the infinity container, optional. Array of [[#Infinity filter object]]s.&lt;br /&gt;
| Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Infinity filter object ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description&lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| Name of the item prototype the filter is set to, string.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| count&lt;br /&gt;
| Number the filter is set to, [[Types/ItemCountType]].&lt;br /&gt;
| Integer&lt;br /&gt;
|-&lt;br /&gt;
| mode&lt;br /&gt;
| Mode of the filter. Either &amp;quot;at-least&amp;quot;, &amp;quot;at-most&amp;quot;, or &amp;quot;exactly&amp;quot;.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| index&lt;br /&gt;
| Index of the filter, 1-based.&lt;br /&gt;
| Integer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Logistic filter object ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| Name of the item prototype this filter is set to.&lt;br /&gt;
| String&lt;br /&gt;
|-&lt;br /&gt;
| index&lt;br /&gt;
| Index of the filter, 1-based.&lt;br /&gt;
| Integer&lt;br /&gt;
|-&lt;br /&gt;
| count&lt;br /&gt;
| Number the filter is set to, [[Types/ItemCountType]]. Is 0 for storage chests.&lt;br /&gt;
| Integer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Speaker parameter object ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| playback_volume&lt;br /&gt;
| [[Types/double]]. Volume of the speaker.&lt;br /&gt;
| Floating point&lt;br /&gt;
|-&lt;br /&gt;
| playback_globally&lt;br /&gt;
| Boolean, whether global playback is enabled.&lt;br /&gt;
| Boolean&lt;br /&gt;
|-&lt;br /&gt;
| allow_polyphony&lt;br /&gt;
| Boolean, whether polyphony is allowed.&lt;br /&gt;
| Boolean&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Speaker alert parameter object ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| show_alert&lt;br /&gt;
| Boolean, whether an alert is shown.&lt;br /&gt;
| Boolean&lt;br /&gt;
|-&lt;br /&gt;
| show_on_map&lt;br /&gt;
| Boolean, whether an alert icon is shown on the map.&lt;br /&gt;
| Boolean&lt;br /&gt;
|-&lt;br /&gt;
| icon_signal_id&lt;br /&gt;
| The icon that is displayed with the alert, [[#SignalID object]].&lt;br /&gt;
| Object&lt;br /&gt;
|-&lt;br /&gt;
| alert_message&lt;br /&gt;
| String, message of the alert.&lt;br /&gt;
| String&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Color object ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description !! Data type&lt;br /&gt;
|-&lt;br /&gt;
| r&lt;br /&gt;
| red, number from 0 to 1.&lt;br /&gt;
| Floating point&lt;br /&gt;
|-&lt;br /&gt;
| g&lt;br /&gt;
| green, number from 0 to 1.&lt;br /&gt;
| Floating point&lt;br /&gt;
|-&lt;br /&gt;
| b&lt;br /&gt;
| blue, number from 0 to 1.&lt;br /&gt;
| Floating point&lt;br /&gt;
|-&lt;br /&gt;
| a&lt;br /&gt;
| transparency, number from 0 to 1.&lt;br /&gt;
| Floating point&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Justarandomgeek</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Stack&amp;diff=172553</id>
		<title>Stack</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Stack&amp;diff=172553"/>
		<updated>2019-04-18T00:24:32Z</updated>

		<summary type="html">&lt;p&gt;Justarandomgeek: /* Filtered stacks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
A stack is the basic element in Factorio to store items. One space in an inventory can hold one stack.&lt;br /&gt;
&lt;br /&gt;
== Examples of stacks ==&lt;br /&gt;
&lt;br /&gt;
* The [[player]]&#039;s inventory&lt;br /&gt;
** Main inventory&lt;br /&gt;
** The toolbelt ([[Player#Quickbar|quickbar]])&lt;br /&gt;
** Tool, armor, weapon, and ammunition stacks&lt;br /&gt;
** Logistic trash slots&lt;br /&gt;
** The player&#039;s hand (is also a stack)&lt;br /&gt;
* [[Vehicle]]s&lt;br /&gt;
** [[Car]] (fuel, ammunition, inventory)&lt;br /&gt;
** [[Tank]] (fuel, ammunition, inventory)&lt;br /&gt;
** [[Railway|Train]] (wagons, engines for fuel)&lt;br /&gt;
* [[Chests]]: The archetypal example of stacks outside the player&#039;s inventory; a chest is basically just a group of stacks.&lt;br /&gt;
* Devices&lt;br /&gt;
** [[Furnace]]: Burner stack ([[Stone furnace|stone]] and [[Steel furnace|steel]] furnace only), input and output stack&lt;br /&gt;
** [[Assembling machine]]s and [[chemical plant]]s: 1 or more output and 1-6 input stacks, depending on item type being assembled&lt;br /&gt;
** [[Lab|Labs]]&lt;br /&gt;
** Burner-based: [[Boiler]], [[burner mining drill]], [[burner inserter]]&lt;br /&gt;
** [[Roboport]] (filtered for robots and repair packs only)&lt;br /&gt;
** [[Gun turret]]&lt;br /&gt;
* Special&lt;br /&gt;
** [[Inserters]] and [[Robots|worker robots]] (Small, variable-size stacks allow these entities to move items between other stacks. See also the [[Inserter capacity bonus (research)|inserter]] and [[Worker robot cargo size (research)|robot]] stack size bonus research topics.)&lt;br /&gt;
&lt;br /&gt;
== How do stacks work? ==&lt;br /&gt;
&lt;br /&gt;
A stack can store a number of identical items.&lt;br /&gt;
&lt;br /&gt;
The first inserted item determines which item types can be stored. This also indirectly determines how many items can be stored in the stack, as this depends on the item type&#039;s maximum stack size.&lt;br /&gt;
&lt;br /&gt;
Only items can be stored within stacks; stacks cannot hold [[Fluid system|liquids]] or other entity types.&lt;br /&gt;
&lt;br /&gt;
=== Stack size ===&lt;br /&gt;
&lt;br /&gt;
The number of items a stack can store. Stack size depends on the item; existing stack sizes and (non-exhaustive) examples include (click to expand):&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
!style=&amp;quot;width: 100px;&amp;quot; |Stack size&lt;br /&gt;
!Examples&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[Nuclear fuel]], [[artillery shell]], [[satellite]], [[modular armor]], [[blueprint]].&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[Locomotive]], all [[Wagon|wagons]].&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[Roboport]], [[rocket fuel]], [[artillery turret]], [[atomic bomb]].&lt;br /&gt;
|-&lt;br /&gt;
| 20 || Some [[equipment modules]], [[pumpjack]]s, [[steel axe]].&lt;br /&gt;
|-&lt;br /&gt;
| 50 || All ores, [[stone]], [[coal]], all [[Module|modules]], [[electric mining drill]], [[electric furnace]], all [[Assembling machine|assemblers]], all [[chests]], all [[inserters]], [[gun turret]], [[laser turret]], all [[Electric_system#Distribution|power poles]] including [[substation]], both types of [[Robots|worker robots]], [[solid fuel]].&lt;br /&gt;
|-&lt;br /&gt;
| 100 || [[Iron plate]], [[copper plate]], [[steel plate]], [[processing unit]], [[iron gear wheel]], [[stone brick]], all types of [[concrete]], both isotopes of [[Uranium processing|processed uranium]], [[pipe]] (regular), all [[Belt transport system|belts]], [[stone wall]], [[landfill]].&lt;br /&gt;
|-&lt;br /&gt;
| 200 || [[Electronic circuit]], [[advanced circuit]], all types of [[Ammunition#Magazines|magazine]], all types of [[tank]] [[Ammunition#Tank shells|cannon shell]], [[copper cable]], both colors of circuit [[Circuit network|wire]], all types of [[science pack]] except space science pack.&lt;br /&gt;
|-&lt;br /&gt;
| 2,000 || Unique to [[space science pack]], present to allow stacking up to 2 [[Rocket|rockets]]&#039; worth of packs in the [[rocket silo]]&#039;s single output slot.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Filtered stacks ===&lt;br /&gt;
&lt;br /&gt;
Stacks can be filtered either by default (in burner-type entities, [[furnace]]s, [[roboport]]s, [[turret]]s, [[lab]]s, and other entities that can only accept one or a few item types in a particular slot), or manually by the player (normally set via the middle mouse button / scroll-wheel click, see [[Keyboard bindings]]). Manual filtering is available for [[cargo wagon]]s, the [[Player#Quickbar|quickbar]], and the player inventory, but not for other types of containers (in particular, [[chests]] of any type).&lt;br /&gt;
&lt;br /&gt;
This can be used to ensure only one item type goes into the inventory space. [[Inserters]] (or [[Robots|bots]], where applicable) will not attempt to insert anything except the allowed item type into filtered slots, and manual insertion of other item types by the player is also not allowed unless and until the filter is cleared.&lt;br /&gt;
&lt;br /&gt;
=== Damaged items ===&lt;br /&gt;
&lt;br /&gt;
Damaged items (i.e, damaged entities now stored as items) stack with other damaged items (of the same type), but not with undamaged items. When items with different amounts of damage are stacked together, the health of the items is averaged.&lt;br /&gt;
&lt;br /&gt;
=== Items with durability ===&lt;br /&gt;
&lt;br /&gt;
Items with durability, such as [[science pack]]s and [[repair packs]], always stack with items of the same type, regardless of how much durability remains. The durability displayed on the stack is the durability of the first item. After that item is removed from the stack, a stack of items with full durabilities remains. This means that when multiple items with durabilities are stacked together, their durabilities are merged, which can result in a lower overall item count while the overall remaining durability stays the same.&lt;br /&gt;
&lt;br /&gt;
== Stack size bonuses ==&lt;br /&gt;
&lt;br /&gt;
Inserters and logistic robots can be boosted with research to hold and transfer more items, see:&lt;br /&gt;
&lt;br /&gt;
* [[Inserter capacity bonus (research)]],&lt;br /&gt;
* [[Worker robot cargo size (research)]]&lt;br /&gt;
&lt;br /&gt;
== Stack limitation ==&lt;br /&gt;
&lt;br /&gt;
[[File:Stack limiter.jpg|300px|thumb|frame|A [[wooden chest]] limited to three stacks. Once the third stack is full, inserters will no longer attempt to add items.]]&lt;br /&gt;
&lt;br /&gt;
Optionally, the usable space in [[chests]] and [[Cargo wagon|wagons]] can be decreased below their default values. Typically, this is done to store a small amount of items in an automated process, without consuming the resources that would be required to fill the entire container.&lt;br /&gt;
&lt;br /&gt;
To limit a container, click the red X at the end of the last stack. Then, click on one of the stacks to set the new limit. The unused stacks will be highlighted red (see right).&lt;br /&gt;
&lt;br /&gt;
When full, inserters will no longer add to a limited container. However, the player is still free to manually place items in the unused (red) slots.&lt;br /&gt;
&lt;br /&gt;
== Handling stacks ==&lt;br /&gt;
&lt;br /&gt;
There are some [[keyboard bindings]] to quickly handle movement of stacks between inventories, like moving half of a stack to another stack.&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
In game version 0.10, the number of items which can be stored in a stack changed for most items from powers of 2 to multiples of 10. This change was mainly made because most people find it more intuitive to calculate numbers in a base-10 system.&lt;br /&gt;
&lt;br /&gt;
Example: Before the change, a stack could store 64 iron ore, while after the change it is 50. This created some controversy, as some players preferred the old stack sizes.&lt;/div&gt;</summary>
		<author><name>Justarandomgeek</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=User:Justarandomgeek&amp;diff=159910</id>
		<title>User:Justarandomgeek</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=User:Justarandomgeek&amp;diff=159910"/>
		<updated>2018-06-16T16:42:45Z</updated>

		<summary type="html">&lt;p&gt;Justarandomgeek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Feathernet is the network of the future&lt;br /&gt;
&lt;br /&gt;
= WIP for Circuit Cookbook = &lt;br /&gt;
== Filtering/Isolating Signals ==&lt;br /&gt;
&lt;br /&gt;
=== Simple Isolation ===&lt;br /&gt;
&lt;br /&gt;
* A fixed signal can be isolated from a circuit using a no-op arithmetic combinator&lt;br /&gt;
&lt;br /&gt;
TODO: marked up image with arith isolator&lt;br /&gt;
&lt;br /&gt;
=== Simple Isolation ===&lt;br /&gt;
&lt;br /&gt;
* A fixed signal can be removed from a circuit using a no-op EACH arithmetic combinator, combined with the inverse of the signal(s) to be removed&lt;br /&gt;
&lt;br /&gt;
TODO: marked up image with arith filter removing signal&lt;br /&gt;
&lt;br /&gt;
=== Circuit Controlled Filtering ===&lt;br /&gt;
&lt;br /&gt;
* A more advanced filter can be constructed allowing one circuit to select which signals pass through from another.&lt;br /&gt;
* This is achieved by splitting the Data circuit into three groups: positive, negative, and &amp;quot;flag-value&amp;quot;.&lt;br /&gt;
* For positive and negative groups, the high bit of the value is flipped for all signals present in the Control circuit, causing their sign to change, which allows them through the next filter, where they&#039;re flipped back.&lt;br /&gt;
* For values with only the high bit set, this would result in them becoming 0 and being lost, so they&#039;re filtered separately.&lt;br /&gt;
&lt;br /&gt;
TODO: marked up image &amp;amp; blueprint of https://www.reddit.com/r/factorio/comments/8maf3q/help_with_circuit_condition_combinator_design/dzma27d/?context=3&lt;br /&gt;
&lt;br /&gt;
== Timers/Counters ==&lt;br /&gt;
&lt;br /&gt;
=== Resetable Timer/Counter ===&lt;br /&gt;
&lt;br /&gt;
* A Memory cell connected to a pulse source will count those pulses, until it is reset. Connected to a continuous signal, like a constant combinator, this becomes a timer.&lt;br /&gt;
TODO: Image of counter, timer configurations - counting belt, timing&lt;br /&gt;
&lt;br /&gt;
=== One-Shot trigger ===&lt;br /&gt;
&lt;br /&gt;
* A Resettable Timer/Counter can be used to trigger a sequence of events, or to delay a signal some amount of time.&lt;br /&gt;
* This is done by setting Decider Combinators to output when the timer is equal to various desired values &lt;br /&gt;
TODO: image(gif?) of timer triggering various lamps&lt;/div&gt;</summary>
		<author><name>Justarandomgeek</name></author>
	</entry>
</feed>