<?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=Lexxy+Fox</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=Lexxy+Fox"/>
	<link rel="alternate" type="text/html" href="https://wiki.factorio.com/Special:Contributions/Lexxy_Fox"/>
	<updated>2026-06-01T23:27:54Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Map_exchange_string_format&amp;diff=158748</id>
		<title>Map exchange string format</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Map_exchange_string_format&amp;diff=158748"/>
		<updated>2018-04-29T21:24:33Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* Factorio 0.14 and Beyond */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}} [[Category:Technical]]&lt;br /&gt;
This is a technical description of the map exchange string format, used to share map generating configurations with other users. This format is also used to store these settings inside save files for future chunk generation.&lt;br /&gt;
&lt;br /&gt;
Factorio line wraps the entire map exchange string after 57 characters during export (55 code characters + &#039;\r\n&#039;, which is fairly standard), but ignores all whitespace during import. The outer layer of the map exchange string format includes three angle brackets on either side: &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;quot; and &amp;quot;&amp;lt;&amp;lt;&amp;lt;&amp;quot;, which must be present for Factorio to accept the string. Between those two tokens is the map exchange data, encoded using base 64 as defined by [https://tools.ietf.org/html/rfc4648#section-4 RFC 4648] (or [https://tools.ietf.org/html/rfc3548#section-3 3548], [https://tools.ietf.org/html/rfc2535#page-42 2535], [https://tools.ietf.org/html/rfc2045#section-6.8 2045], [https://tools.ietf.org/html/rfc1421#section-4.3.2.4 1421], et al).&lt;br /&gt;
&lt;br /&gt;
See the page on [[Data types|data types]] for an explanation of the different types of data used in this document.&lt;br /&gt;
&lt;br /&gt;
== Factorio 0.16 and Beyond ==&lt;br /&gt;
&lt;br /&gt;
Beginning with Factorio 0.16.0, two important changes are made to the encoding of the map exchange string data:&lt;br /&gt;
&lt;br /&gt;
# The map exchange data inside the Base 64 encoding is further encoded using the [https://en.wikipedia.org/wiki/Zlib zlib] compression algorithm. The best way to determine the encoding is to first attempt to parse the map exchange string using zlib, and if that fails, try again using the 0.14+ rules.&lt;br /&gt;
# All numeric data fields longer than 1 byte are encoding using a custom-built variable length integer format described by Factorio developer [[User:Rseding91|Rseding]] at [[Data_types#Space_Optimized]]. For appropriate Factorio versions, &#039;&#039;&#039;all&#039;&#039;&#039; such data types (int, short, dict, etc) used in this document represent values encoded using this approach, &#039;&#039;unless otherwise specifically noted&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
After taking these considerations into your codec, proceed using the 0.14+ rules below. &lt;br /&gt;
&lt;br /&gt;
== Factorio 0.14 and Beyond ==&lt;br /&gt;
&lt;br /&gt;
This is the base map exchange string format for all Factorio versions 0.14.x and greater. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#short|short]][4]&lt;br /&gt;
| The [[Version_String_Format|version string]] of Factorio that generated this string, used to determine encoding format. This field is never [[Data_types#Space_Optimized|space optimized]].&lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| [[#Map_Gen_Settings|Map Gen Settings]]. Variable length. See linked section for information on how to parse. &lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| [[#0.15 Map Settings|0.15.x Map Settings]]. If present, this chunk consists of the remainder of the data (minus the checksum).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#uint|uint]]&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Cyclic_redundancy_check CRC32 checksum] of all preceding data, as defined by ANSI X3.66 / FIPS 71 / ITU-T V.42 (the same one used by [https://en.wikipedia.org/wiki/Zlib zlib], ethernet, etc.)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Map Gen Settings ==&lt;br /&gt;
&lt;br /&gt;
This format matches [http://lua-api.factorio.com/latest/Concepts.html#MapGenSettings MapGenSettings].&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;From&amp;quot; column denotes the earliest Factorio version in which that field is present. Most of them are currently labeled as &amp;quot;≤0.14&amp;quot;, which means the field was present from &#039;&#039;at least&#039;&#039; 0.14. If you have more specific information, please edit this page!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! LUA key !! From !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| terrain_segmentation&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[Water]] [[#Map_Gen_Size|frequency]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| water&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[Water]] [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#dict|dict]]&amp;lt;[[Data types#string|string]], [[#Autoplace_Control|byte[3]]]&amp;gt;&lt;br /&gt;
| autoplace_controls&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| An dictionary of [[#Autoplace_Control|Autoplace Controls]], with string keys, where the key represents the resource name.  Factorio doesn’t care what order this dictionary is in, but it always alphabetizes during export. Vanilla has seven resources: [[Coal|coal]], [[Copper ore|copper-ore]], [[Crude oil|crude-oil]], [[Enemies|enemy-base]], [[Iron ore|iron-ore]], [[Stone|stone]], and [[Uranium ore|uranium-ore]]. Unknown ores are ignored and missing ores are set to their defaults.&lt;br /&gt;
Factorio 0.16.x adds addition terrain related autoplace features: desert, dirt, grass, sand, trees. With the exception of trees, these resources ignore their richness and as such are not configuration using the map gen GUI, and always have a richness value of 3 (&amp;quot;Regular&amp;quot;).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]][2]&lt;br /&gt;
| TODO&lt;br /&gt;
| 0.16.0&lt;br /&gt;
| TODO...&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|uint]]&lt;br /&gt;
| seed&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Map Seed|Map seed]]. This field is never [[Data_types#Space_Optimized|space optimized]].&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;none&#039;&#039;&lt;br /&gt;
| shift&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| This field isn&#039;t present in the binary format! But it is part of the LUA structure - by default it&#039;s derived from the map seed. I&#039;ll slap the algorithm here soon(tm).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|uint]]&lt;br /&gt;
| width&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Map-width and -height|Map width]]. This field is never [[Data_types#Space_Optimized|space optimized]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|uint]]&lt;br /&gt;
| height&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Map-width and -height|Map height]]. This field is never [[Data_types#Space_Optimized|space optimized]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| starting_area&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Starting area|Starting area]] [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]]&lt;br /&gt;
| peaceful_mode&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Peaceful mode|Peaceful mode]]. Enabled if set to 1, disabled otherwise.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 0.15 Map Settings ==&lt;br /&gt;
&lt;br /&gt;
All of the following data fields (until noted at the end) have a special encapsulation format. Preceding each value is a single byte that states whether or not the value is present. If the byte is equal to zero, then the field value is not present. Otherwise, then the field&#039;s value follows. &lt;br /&gt;
&lt;br /&gt;
In the LUA structure, this information is stored in the &amp;quot;[http://lua-api.factorio.com/latest/LuaGameScript.html#LuaGameScript.map_settings game.map_settings]&amp;quot; table, which is created by the &amp;quot;[http://lua-api.factorio.com/latest/Concepts.html#MapSettings MapSettings]&amp;quot; prototype. Each section in the table below represents a nested sub-table in &amp;quot;map-settings&amp;quot;, where the LUA key listed is the key of the table, and all subsequent fields are part of the sub-table. See data/base/prototypes/map-settings.lua for a description of all attributes (some of that information has now been copied to this page).&lt;br /&gt;
&lt;br /&gt;
Fields marked with a check (✓) in the &amp;quot;GUI&amp;quot; column are configurable in the [[World_generator#How_it_works|new game map generator GUI]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
! * !! ✓ !! pollution !! Pollution&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]] || ✓ || enabled || Pollution enabled.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || diffusion_ratio || The amount of pollution that is diffused into neighboring chunk per second.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || min_to_diffuse || This many PUs must be on the chunk to start diffusing.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || ✓ || ageing || [Modifier of] the pollution eaten by a chunks tiles.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || expected_max_per_chunk || Anything bigger than this is visualised as this value.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || min_to_show_per_chunk || Anything lower than this (but &amp;gt; 0) is visualised as this value.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || ✓ || min_pollution_to_damage_trees || Any pollution above this amount starts to damage trees.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || pollution_with_max_forest_damage || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || pollution_per_tree_damage || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || pollution_restored_per_tree_damage || The amount of pollution absorbed by a tree when it is damaged by pollution.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || max_pollution_to_restore_trees || ???&lt;br /&gt;
|-&lt;br /&gt;
! * !! !! steering.default !! Steering (Default)&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || separation_force || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#bool|boolean]] || || force_unit_fuzzy_goto_behavior || ???&lt;br /&gt;
|-&lt;br /&gt;
! * !! !! steering.moving !! Steering (Moving)&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || separation_force || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#bool|boolean]] || || force_unit_fuzzy_goto_behavior || ???&lt;br /&gt;
|- &lt;br /&gt;
! * !! ✓ !! enemy_evolution !! Evolution&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#bool|boolean]] || ✓ || enabled || Evolution enabled.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || time_factor || Percent increase in the evolve factor for every second.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || destroy_factor || Percent increase in the evolve factor for every destroyed spawner.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || pollution_factor || Percent increase in the evolve factor for every 1000 PU [produced].&lt;br /&gt;
|- &lt;br /&gt;
! * !! ✓ !! enemy_expansion !! Enemy Expansion&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]] || ✓ || enabled || Enemy expansion enabled.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || max_expansion_distance || Distance in chunks from the furthest base around.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || friendly_base_influence_radius || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || enemy_building_influence_radius || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || building_coefficient ||+ rowspan=4 | Expansion algorithm. See LUA file for details.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || other_base_coefficient &lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || neighbouring_chunk_coefficient &lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || neighbouring_base_chunk_coefficient&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_colliding_tiles_coefficient || A chunk has to have at most this much percent unbuildable tiles for it to be considered a candidate.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || settler_group_min_size ||+ rowspan=2 | Size of the group that goes to build new base (in game this is multiplied by the evolution factor).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || settler_group_max_size&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || min_expansion_cooldown || Minimum cooldown.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || max_expansion_cooldown || Maximum cooldown.&lt;br /&gt;
|- &lt;br /&gt;
! * !! !! unit_group !! Unit Group&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || min_group_gathering_time ||+ rowspan=2 | A pollution triggered group&#039;s waiting time is a random time between min and max gathering time.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_group_gathering_time &lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_wait_time_for_late_members || After the gathering is finished the group can still wait for late members, but it doesn&#039;t accept new ones anymore.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_group_radius ||+ rowspan=2 | Limits for group radius.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || min_group_radius&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_member_speedup_when_behind || When a member falls behind the group he can speedup up till this much of his regular speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_member_slowdown_when_ahead || When a member gets ahead of its group, it will slow down to at most this factor of its speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_group_slowdown_factor || When members of a group are behind, the entire group will slow down to at most this factor of its max speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_group_member_fallback_factor || If a member falls behind more than this times the group radius, the group will slow down to max_group_slowdown_factor.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || member_disown_distance || If a member falls behind more than this time the group radius, it will be removed from the group.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || tick_tolerance_when_member_arrives || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_gathering_unit_groups || Maximum number of automatically created unit groups gathering for attack at any time.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_unit_group_size || Maximum size of an attack unit group. This only affects automatically-created unit groups.&lt;br /&gt;
|- &lt;br /&gt;
! * !! !! path_finder !! Path Finder&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || fwd2bwd_ratio || Defines whether we prefer forward (&amp;gt;1) or backward (&amp;lt;-1) or symmetrical (1) search.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || goal_pressure_ratio || When comparing nodes in open which one to check next, heuristic value is multiplied by this ratio. The higher the number the more is the search directed directly towards the goal.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]] || || use_path_cache || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_steps_worked_per_tick || When this is exhausted no more requests are allowed. At the moment the first path to exhaust this will be finished (even if it is hundreds of steps).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || short_cache_size ||+ rowspan=2 | Number of elements in the cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || long_cache_size&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || short_cache_min_cacheable_distance || Minimal distance to goal for path to be searched in short path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || short_cache_min_algo_steps_to_cache || Minimal number of algorithm steps for path to be inserted into the short path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || long_cache_min_cacheable_distance || Minimal distance to goal for path to be searched in long path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || cache_max_connect_to_cache_steps_multiplier || When searching for connection to path cache path, search at most for this number of steps times the initial estimate.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_accept_path_start_distance_ratio || When looking for path from cache make sure it doesn&#039;t start too far from requested start in relative distance terms.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_accept_path_end_distance_ratio || When looking for path from cache make sure it doesn&#039;t end too far from requested end. This is typically higher than accept value for the start because the end target can be moving.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || negative_cache_accept_path_start_distance_ratio || Same as cache_accept_path_start_distance_ratio, but used for negative cache queries.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || negative_cache_accept_path_end_distance_ratio || Same as cache_accept_path_end_distance_ratio, but used for negative cache queries.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_path_start_distance_rating_multiplier || When assigning rating to the best path this * start distances is considered.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_path_end_distance_rating_multiplier || When assigning rating to the best path this * end distances is considered. This is typically higher than value for the start to achieve better path end quality.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || stale_enemy_with_same_destination_collision_penalty || Somewhere along the path is stuck enemy we need to avoid. This is mainly to handle situations when units have arrived and are attacking the target, then units further in the back will use this and run around the target.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || ignore_moving_enemy_collision_distance || If there is a moving unit further than this we don&#039;t really care.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || enemy_with_different_destination_collision_penalty || Enemy is not moving/or is too close and has different destination.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || general_entity_collision_penalty || Simplification for now - collision with everything else is this.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || general_entity_subsequent_collision_penalty || Collision penalty for successors of positions that require destroy to reach.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_clients_to_accept_any_new_request || Uptil this amount any client will be served by the path finder (no estimate on the path length).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_clients_to_accept_short_new_request || From max_clients_to_accept_any_new_request till this one only those that have a short estimate will be served.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || direct_distance_to_consider_short_request || This is the &amp;quot;threshold&amp;quot; to decide what is short and what is not.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || short_request_max_steps || If a short request takes more than this many steps, it will be rescheduled as a long request.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || short_request_ratio || How many steps will be allocated to short requests each tick, as a ratio of all available steps per tick.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || min_steps_to_check_path_find_termination || Absolute minimum of steps that will be performed for every path find request no matter what.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || start_to_goal_cost_multiplier_to_terminate_path_find || If the amount of steps is higher than this times estimate of start to goal then path finding is terminated.&lt;br /&gt;
|-&lt;br /&gt;
| colspan = 4 | &#039;&#039;&#039;Note:&#039;&#039;&#039; The following fields do not use the special encapsulation method.&lt;br /&gt;
|-&lt;br /&gt;
! byte[4] !! !! . (root) !! Other&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_failed_behavior_count || If a behavior fails this many times, the enemy (or enemy group) is destroyed. This solves biters stuck within their own base.&lt;br /&gt;
|-&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Difficulty Settings ===&lt;br /&gt;
&lt;br /&gt;
This information is instead stored in the LUA structure at [http://lua-api.factorio.com/latest/LuaGameScript.html#LuaGameScript.difficulty_settings game.difficulty_settings], which is prototyped by [http://lua-api.factorio.com/latest/Concepts.html#DifficultySettings DifficultySettings]. These fields do not use the special encapsulation method noted above.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
! byte[10] !! ✓ !! difficulty_settings !! Difficulty Settings&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]] || ✓ || recipe_difficulty || Recipe difficulty. 0 for Normal, 1 for Expensive.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]] || ✓ || technology_difficulty || Technology difficulty. 0 for Normal, 1 for Expensive.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || ✓ || technology_price_multiplier || Technology price multiplier.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: these values are typically defined using the constants at [http://lua-api.factorio.com/latest/defines.html#defines.difficulty_settings defines.difficulty_settings].&lt;br /&gt;
&lt;br /&gt;
== Autoplace Control ==&lt;br /&gt;
See the page on [[World generator#Settings on the top row|world generation]] for more information on frequency, size, and richness.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| frequency&lt;br /&gt;
| Ore [[#Map_Gen_Size|frequency]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| size&lt;br /&gt;
| Ore [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| richness&lt;br /&gt;
| Ore [[#Map_Gen_Size|richness]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Map Gen Size ==&lt;br /&gt;
These are the values used for the frequencies, sizes, and richnesses of ores, water, and the starting area size. None is a valid value for all three options. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| None / None /None&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Very Low / Small / Poor&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Low / Small / Poor&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Normal / Medium / Regular&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| High / Big / Good&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Very High / Big / Good&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of the values in a triplet (such as &amp;quot;low&amp;quot;, &amp;quot;small&amp;quot;, and &amp;quot;poor&amp;quot;) are synonymous.&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Map_exchange_string_format&amp;diff=158293</id>
		<title>Map exchange string format</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Map_exchange_string_format&amp;diff=158293"/>
		<updated>2018-04-16T00:28:39Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* Map Gen Settings */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}} [[Category:Technical]]&lt;br /&gt;
This is a technical description of the map exchange string format, used to share map generating configurations with other users. This format is also used to store these settings inside save files for future chunk generation.&lt;br /&gt;
&lt;br /&gt;
Factorio line wraps the entire map exchange string after 57 characters during export (55 code characters + &#039;\r\n&#039;, which is fairly standard), but ignores all whitespace during import. The outer layer of the map exchange string format includes three angle brackets on either side: &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;quot; and &amp;quot;&amp;lt;&amp;lt;&amp;lt;&amp;quot;, which must be present for Factorio to accept the string. Between those two tokens is the map exchange data, encoded using base 64 as defined by [https://tools.ietf.org/html/rfc4648#section-4 RFC 4648] (or [https://tools.ietf.org/html/rfc3548#section-3 3548], [https://tools.ietf.org/html/rfc2535#page-42 2535], [https://tools.ietf.org/html/rfc2045#section-6.8 2045], [https://tools.ietf.org/html/rfc1421#section-4.3.2.4 1421], et al).&lt;br /&gt;
&lt;br /&gt;
See the page on [[Data types|data types]] for an explanation of the different types of data used in this document.&lt;br /&gt;
&lt;br /&gt;
== Factorio 0.16 and Beyond ==&lt;br /&gt;
&lt;br /&gt;
Beginning with Factorio 0.16.0, two important changes are made to the encoding of the map exchange string data:&lt;br /&gt;
&lt;br /&gt;
# The map exchange data inside the Base 64 encoding is further encoded using the [https://en.wikipedia.org/wiki/Zlib zlib] compression algorithm. The best way to determine the encoding is to first attempt to parse the map exchange string using zlib, and if that fails, try again using the 0.14+ rules.&lt;br /&gt;
# All numeric data fields longer than 1 byte are encoding using a custom-built variable length integer format described by Factorio developer [[User:Rseding91|Rseding]] at [[Data_types#Space_Optimized]]. For appropriate Factorio versions, &#039;&#039;&#039;all&#039;&#039;&#039; such data types (int, short, dict, etc) used in this document represent values encoded using this approach, &#039;&#039;unless otherwise specifically noted&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
After taking these considerations into your codec, proceed using the 0.14+ rules below. &lt;br /&gt;
&lt;br /&gt;
== Factorio 0.14 and Beyond ==&lt;br /&gt;
&lt;br /&gt;
This is the base map exchange string format for all Factorio versions 0.14.x and greater. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#short|short]][4]&lt;br /&gt;
| The [[Version_String_Format|version string]] of Factorio that generated this string, used to determine encoding format. This field is never [[Data_types#Space_Optimized|space optimized]].&lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| [[#Map_Gen_Settings|Map Gen Settings]]. Variable length. See linked section for information on how to parse. &lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| [[#0.15 Map Settings|0.15.x Map Settings]]. If present, this chunk consists of the remainder of the data (minus the checksum).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]]&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Cyclic_redundancy_check CRC32 checksum] of all preceding data, as defined by ANSI X3.66 / FIPS 71 / ITU-T V.42 (the same one used by [https://en.wikipedia.org/wiki/Zlib zlib], ethernet, etc.)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Map Gen Settings ==&lt;br /&gt;
&lt;br /&gt;
This format matches [http://lua-api.factorio.com/latest/Concepts.html#MapGenSettings MapGenSettings].&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;From&amp;quot; column denotes the earliest Factorio version in which that field is present. Most of them are currently labeled as &amp;quot;≤0.14&amp;quot;, which means the field was present from &#039;&#039;at least&#039;&#039; 0.14. If you have more specific information, please edit this page!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! LUA key !! From !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| terrain_segmentation&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[Water]] [[#Map_Gen_Size|frequency]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| water&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[Water]] [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#dict|dict]]&amp;lt;[[Data types#string|string]], [[#Autoplace_Control|byte[3]]]&amp;gt;&lt;br /&gt;
| autoplace_controls&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| An dictionary of [[#Autoplace_Control|Autoplace Controls]], with string keys, where the key represents the resource name.  Factorio doesn’t care what order this dictionary is in, but it always alphabetizes during export. Vanilla has seven resources: [[Coal|coal]], [[Copper ore|copper-ore]], [[Crude oil|crude-oil]], [[Enemies|enemy-base]], [[Iron ore|iron-ore]], [[Stone|stone]], and [[Uranium ore|uranium-ore]]. Unknown ores are ignored and missing ores are set to their defaults.&lt;br /&gt;
Factorio 0.16.x adds addition terrain related autoplace features: desert, dirt, grass, sand, trees. With the exception of trees, these resources ignore their richness and as such are not configuration using the map gen GUI, and always have a richness value of 3 (&amp;quot;Regular&amp;quot;).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]][2]&lt;br /&gt;
| TODO&lt;br /&gt;
| 0.16.0&lt;br /&gt;
| TODO...&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|uint]]&lt;br /&gt;
| seed&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Map Seed|Map seed]]. This field is never [[Data_types#Space_Optimized|space optimized]].&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;none&#039;&#039;&lt;br /&gt;
| shift&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| This field isn&#039;t present in the binary format! But it is part of the LUA structure - by default it&#039;s derived from the map seed. I&#039;ll slap the algorithm here soon(tm).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|uint]]&lt;br /&gt;
| width&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Map-width and -height|Map width]]. This field is never [[Data_types#Space_Optimized|space optimized]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|uint]]&lt;br /&gt;
| height&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Map-width and -height|Map height]]. This field is never [[Data_types#Space_Optimized|space optimized]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| starting_area&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Starting area|Starting area]] [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]]&lt;br /&gt;
| peaceful_mode&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Peaceful mode|Peaceful mode]]. Enabled if set to 1, disabled otherwise.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 0.15 Map Settings ==&lt;br /&gt;
&lt;br /&gt;
All of the following data fields (until noted at the end) have a special encapsulation format. Preceding each value is a single byte that states whether or not the value is present. If the byte is equal to zero, then the field value is not present. Otherwise, then the field&#039;s value follows. &lt;br /&gt;
&lt;br /&gt;
In the LUA structure, this information is stored in the &amp;quot;[http://lua-api.factorio.com/latest/LuaGameScript.html#LuaGameScript.map_settings game.map_settings]&amp;quot; table, which is created by the &amp;quot;[http://lua-api.factorio.com/latest/Concepts.html#MapSettings MapSettings]&amp;quot; prototype. Each section in the table below represents a nested sub-table in &amp;quot;map-settings&amp;quot;, where the LUA key listed is the key of the table, and all subsequent fields are part of the sub-table. See data/base/prototypes/map-settings.lua for a description of all attributes (some of that information has now been copied to this page).&lt;br /&gt;
&lt;br /&gt;
Fields marked with a check (✓) in the &amp;quot;GUI&amp;quot; column are configurable in the [[World_generator#How_it_works|new game map generator GUI]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
! * !! ✓ !! pollution !! Pollution&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]] || ✓ || enabled || Pollution enabled.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || diffusion_ratio || The amount of pollution that is diffused into neighboring chunk per second.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || min_to_diffuse || This many PUs must be on the chunk to start diffusing.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || ✓ || ageing || [Modifier of] the pollution eaten by a chunks tiles.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || expected_max_per_chunk || Anything bigger than this is visualised as this value.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || min_to_show_per_chunk || Anything lower than this (but &amp;gt; 0) is visualised as this value.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || ✓ || min_pollution_to_damage_trees || Any pollution above this amount starts to damage trees.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || pollution_with_max_forest_damage || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || pollution_per_tree_damage || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || pollution_restored_per_tree_damage || The amount of pollution absorbed by a tree when it is damaged by pollution.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || max_pollution_to_restore_trees || ???&lt;br /&gt;
|-&lt;br /&gt;
! * !! !! steering.default !! Steering (Default)&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || separation_force || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#bool|boolean]] || || force_unit_fuzzy_goto_behavior || ???&lt;br /&gt;
|-&lt;br /&gt;
! * !! !! steering.moving !! Steering (Moving)&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || separation_force || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#bool|boolean]] || || force_unit_fuzzy_goto_behavior || ???&lt;br /&gt;
|- &lt;br /&gt;
! * !! ✓ !! enemy_evolution !! Evolution&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#bool|boolean]] || ✓ || enabled || Evolution enabled.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || time_factor || Percent increase in the evolve factor for every second.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || destroy_factor || Percent increase in the evolve factor for every destroyed spawner.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || pollution_factor || Percent increase in the evolve factor for every 1000 PU [produced].&lt;br /&gt;
|- &lt;br /&gt;
! * !! ✓ !! enemy_expansion !! Enemy Expansion&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]] || ✓ || enabled || Enemy expansion enabled.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || max_expansion_distance || Distance in chunks from the furthest base around.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || friendly_base_influence_radius || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || enemy_building_influence_radius || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || building_coefficient ||+ rowspan=4 | Expansion algorithm. See LUA file for details.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || other_base_coefficient &lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || neighbouring_chunk_coefficient &lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || neighbouring_base_chunk_coefficient&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_colliding_tiles_coefficient || A chunk has to have at most this much percent unbuildable tiles for it to be considered a candidate.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || settler_group_min_size ||+ rowspan=2 | Size of the group that goes to build new base (in game this is multiplied by the evolution factor).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || settler_group_max_size&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || min_expansion_cooldown || Minimum cooldown.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || max_expansion_cooldown || Maximum cooldown.&lt;br /&gt;
|- &lt;br /&gt;
! * !! !! unit_group !! Unit Group&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || min_group_gathering_time ||+ rowspan=2 | A pollution triggered group&#039;s waiting time is a random time between min and max gathering time.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_group_gathering_time &lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_wait_time_for_late_members || After the gathering is finished the group can still wait for late members, but it doesn&#039;t accept new ones anymore.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_group_radius ||+ rowspan=2 | Limits for group radius.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || min_group_radius&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_member_speedup_when_behind || When a member falls behind the group he can speedup up till this much of his regular speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_member_slowdown_when_ahead || When a member gets ahead of its group, it will slow down to at most this factor of its speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_group_slowdown_factor || When members of a group are behind, the entire group will slow down to at most this factor of its max speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_group_member_fallback_factor || If a member falls behind more than this times the group radius, the group will slow down to max_group_slowdown_factor.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || member_disown_distance || If a member falls behind more than this time the group radius, it will be removed from the group.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || tick_tolerance_when_member_arrives || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_gathering_unit_groups || Maximum number of automatically created unit groups gathering for attack at any time.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_unit_group_size || Maximum size of an attack unit group. This only affects automatically-created unit groups.&lt;br /&gt;
|- &lt;br /&gt;
! * !! !! path_finder !! Path Finder&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || fwd2bwd_ratio || Defines whether we prefer forward (&amp;gt;1) or backward (&amp;lt;-1) or symmetrical (1) search.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || goal_pressure_ratio || When comparing nodes in open which one to check next, heuristic value is multiplied by this ratio. The higher the number the more is the search directed directly towards the goal.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]] || || use_path_cache || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_steps_worked_per_tick || When this is exhausted no more requests are allowed. At the moment the first path to exhaust this will be finished (even if it is hundreds of steps).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || short_cache_size ||+ rowspan=2 | Number of elements in the cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || long_cache_size&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || short_cache_min_cacheable_distance || Minimal distance to goal for path to be searched in short path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || short_cache_min_algo_steps_to_cache || Minimal number of algorithm steps for path to be inserted into the short path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || long_cache_min_cacheable_distance || Minimal distance to goal for path to be searched in long path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || cache_max_connect_to_cache_steps_multiplier || When searching for connection to path cache path, search at most for this number of steps times the initial estimate.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_accept_path_start_distance_ratio || When looking for path from cache make sure it doesn&#039;t start too far from requested start in relative distance terms.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_accept_path_end_distance_ratio || When looking for path from cache make sure it doesn&#039;t end too far from requested end. This is typically higher than accept value for the start because the end target can be moving.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || negative_cache_accept_path_start_distance_ratio || Same as cache_accept_path_start_distance_ratio, but used for negative cache queries.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || negative_cache_accept_path_end_distance_ratio || Same as cache_accept_path_end_distance_ratio, but used for negative cache queries.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_path_start_distance_rating_multiplier || When assigning rating to the best path this * start distances is considered.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_path_end_distance_rating_multiplier || When assigning rating to the best path this * end distances is considered. This is typically higher than value for the start to achieve better path end quality.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || stale_enemy_with_same_destination_collision_penalty || Somewhere along the path is stuck enemy we need to avoid. This is mainly to handle situations when units have arrived and are attacking the target, then units further in the back will use this and run around the target.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || ignore_moving_enemy_collision_distance || If there is a moving unit further than this we don&#039;t really care.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || enemy_with_different_destination_collision_penalty || Enemy is not moving/or is too close and has different destination.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || general_entity_collision_penalty || Simplification for now - collision with everything else is this.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || general_entity_subsequent_collision_penalty || Collision penalty for successors of positions that require destroy to reach.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_clients_to_accept_any_new_request || Uptil this amount any client will be served by the path finder (no estimate on the path length).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_clients_to_accept_short_new_request || From max_clients_to_accept_any_new_request till this one only those that have a short estimate will be served.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || direct_distance_to_consider_short_request || This is the &amp;quot;threshold&amp;quot; to decide what is short and what is not.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || short_request_max_steps || If a short request takes more than this many steps, it will be rescheduled as a long request.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || short_request_ratio || How many steps will be allocated to short requests each tick, as a ratio of all available steps per tick.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || min_steps_to_check_path_find_termination || Absolute minimum of steps that will be performed for every path find request no matter what.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || start_to_goal_cost_multiplier_to_terminate_path_find || If the amount of steps is higher than this times estimate of start to goal then path finding is terminated.&lt;br /&gt;
|-&lt;br /&gt;
| colspan = 4 | &#039;&#039;&#039;Note:&#039;&#039;&#039; The following fields do not use the special encapsulation method.&lt;br /&gt;
|-&lt;br /&gt;
! byte[4] !! !! . (root) !! Other&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_failed_behavior_count || If a behavior fails this many times, the enemy (or enemy group) is destroyed. This solves biters stuck within their own base.&lt;br /&gt;
|-&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Difficulty Settings ===&lt;br /&gt;
&lt;br /&gt;
This information is instead stored in the LUA structure at [http://lua-api.factorio.com/latest/LuaGameScript.html#LuaGameScript.difficulty_settings game.difficulty_settings], which is prototyped by [http://lua-api.factorio.com/latest/Concepts.html#DifficultySettings DifficultySettings]. These fields do not use the special encapsulation method noted above.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
! byte[10] !! ✓ !! difficulty_settings !! Difficulty Settings&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]] || ✓ || recipe_difficulty || Recipe difficulty. 0 for Normal, 1 for Expensive.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]] || ✓ || technology_difficulty || Technology difficulty. 0 for Normal, 1 for Expensive.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || ✓ || technology_price_multiplier || Technology price multiplier.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: these values are typically defined using the constants at [http://lua-api.factorio.com/latest/defines.html#defines.difficulty_settings defines.difficulty_settings].&lt;br /&gt;
&lt;br /&gt;
== Autoplace Control ==&lt;br /&gt;
See the page on [[World generator#Settings on the top row|world generation]] for more information on frequency, size, and richness.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| frequency&lt;br /&gt;
| Ore [[#Map_Gen_Size|frequency]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| size&lt;br /&gt;
| Ore [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| richness&lt;br /&gt;
| Ore [[#Map_Gen_Size|richness]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Map Gen Size ==&lt;br /&gt;
These are the values used for the frequencies, sizes, and richnesses of ores, water, and the starting area size. None is a valid value for all three options. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| None / None /None&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Very Low / Small / Poor&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Low / Small / Poor&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Normal / Medium / Regular&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| High / Big / Good&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Very High / Big / Good&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of the values in a triplet (such as &amp;quot;low&amp;quot;, &amp;quot;small&amp;quot;, and &amp;quot;poor&amp;quot;) are synonymous.&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Map_exchange_string_format&amp;diff=158292</id>
		<title>Map exchange string format</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Map_exchange_string_format&amp;diff=158292"/>
		<updated>2018-04-16T00:23:16Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* Map Gen Settings */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}} [[Category:Technical]]&lt;br /&gt;
This is a technical description of the map exchange string format, used to share map generating configurations with other users. This format is also used to store these settings inside save files for future chunk generation.&lt;br /&gt;
&lt;br /&gt;
Factorio line wraps the entire map exchange string after 57 characters during export (55 code characters + &#039;\r\n&#039;, which is fairly standard), but ignores all whitespace during import. The outer layer of the map exchange string format includes three angle brackets on either side: &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;quot; and &amp;quot;&amp;lt;&amp;lt;&amp;lt;&amp;quot;, which must be present for Factorio to accept the string. Between those two tokens is the map exchange data, encoded using base 64 as defined by [https://tools.ietf.org/html/rfc4648#section-4 RFC 4648] (or [https://tools.ietf.org/html/rfc3548#section-3 3548], [https://tools.ietf.org/html/rfc2535#page-42 2535], [https://tools.ietf.org/html/rfc2045#section-6.8 2045], [https://tools.ietf.org/html/rfc1421#section-4.3.2.4 1421], et al).&lt;br /&gt;
&lt;br /&gt;
See the page on [[Data types|data types]] for an explanation of the different types of data used in this document.&lt;br /&gt;
&lt;br /&gt;
== Factorio 0.16 and Beyond ==&lt;br /&gt;
&lt;br /&gt;
Beginning with Factorio 0.16.0, two important changes are made to the encoding of the map exchange string data:&lt;br /&gt;
&lt;br /&gt;
# The map exchange data inside the Base 64 encoding is further encoded using the [https://en.wikipedia.org/wiki/Zlib zlib] compression algorithm. The best way to determine the encoding is to first attempt to parse the map exchange string using zlib, and if that fails, try again using the 0.14+ rules.&lt;br /&gt;
# All numeric data fields longer than 1 byte are encoding using a custom-built variable length integer format described by Factorio developer [[User:Rseding91|Rseding]] at [[Data_types#Space_Optimized]]. For appropriate Factorio versions, &#039;&#039;&#039;all&#039;&#039;&#039; such data types (int, short, dict, etc) used in this document represent values encoded using this approach, &#039;&#039;unless otherwise specifically noted&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
After taking these considerations into your codec, proceed using the 0.14+ rules below. &lt;br /&gt;
&lt;br /&gt;
== Factorio 0.14 and Beyond ==&lt;br /&gt;
&lt;br /&gt;
This is the base map exchange string format for all Factorio versions 0.14.x and greater. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#short|short]][4]&lt;br /&gt;
| The [[Version_String_Format|version string]] of Factorio that generated this string, used to determine encoding format. This field is never [[Data_types#Space_Optimized|space optimized]].&lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| [[#Map_Gen_Settings|Map Gen Settings]]. Variable length. See linked section for information on how to parse. &lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| [[#0.15 Map Settings|0.15.x Map Settings]]. If present, this chunk consists of the remainder of the data (minus the checksum).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]]&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Cyclic_redundancy_check CRC32 checksum] of all preceding data, as defined by ANSI X3.66 / FIPS 71 / ITU-T V.42 (the same one used by [https://en.wikipedia.org/wiki/Zlib zlib], ethernet, etc.)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Map Gen Settings ==&lt;br /&gt;
&lt;br /&gt;
This format matches [http://lua-api.factorio.com/latest/Concepts.html#MapGenSettings MapGenSettings].&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;From&amp;quot; column denotes the earliest Factorio version in which that field is present. Most of them are currently labeled as &amp;quot;≤0.14&amp;quot;, which means the field was present from &#039;&#039;at least&#039;&#039; 0.14. If you have more specific information, please edit this page!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! LUA key !! From !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| terrain_segmentation&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[Water]] [[#Map_Gen_Size|frequency]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| water&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[Water]] [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#dict|dict]]&amp;lt;[[Data types#string|string]], [[#Autoplace_Control|byte[3]]]&amp;gt;&lt;br /&gt;
| autoplace_controls&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| An dictionary of [[#Autoplace_Control|Autoplace Controls]], with string keys, where the key represents the resource name.  Factorio doesn’t care what order this dictionary is in, but it always alphabetizes during export. Vanilla has seven resources: [[Coal|coal]], [[Copper ore|copper-ore]], [[Crude oil|crude-oil]], [[Enemies|enemy-base]], [[Iron ore|iron-ore]], [[Stone|stone]], and [[Uranium ore|uranium-ore]]. Unknown ores are ignored and missing ores are set to their defaults.&lt;br /&gt;
Factorio 0.16.x adds addition terrain related autoplace features: desert, dirt, grass, sand, trees. With the exception of trees, these resources ignore their richness and as such are not configuration using the map gen GUI, and always have a richness value of 3 (&amp;quot;Regular&amp;quot;).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]][2]&lt;br /&gt;
| TODO&lt;br /&gt;
| 0.16.0&lt;br /&gt;
| TODO...&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|uint]]&lt;br /&gt;
| seed&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Map Seed|Map seed]]. This field is never [[Data_types#Space_Optimized|space optimized]].&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;none&#039;&#039;&lt;br /&gt;
| shift&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| This field isn&#039;t present in the binary format! But it is part of the LUA structure - by default it&#039;s derived from the map seed. I&#039;ll slap the algorithm here soon(tm).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|uint]]&lt;br /&gt;
| width&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Map-width and -height|Map width]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|uint]]&lt;br /&gt;
| height&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Map-width and -height|Map height]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| starting_area&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Starting area|Starting area]] [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| TODO&lt;br /&gt;
| starting_points&lt;br /&gt;
| 0.16.16&lt;br /&gt;
| TODO...&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]]&lt;br /&gt;
| peaceful_mode&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Peaceful mode|Peaceful mode]]. Enabled if set to 1, disabled otherwise.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 0.15 Map Settings ==&lt;br /&gt;
&lt;br /&gt;
All of the following data fields (until noted at the end) have a special encapsulation format. Preceding each value is a single byte that states whether or not the value is present. If the byte is equal to zero, then the field value is not present. Otherwise, then the field&#039;s value follows. &lt;br /&gt;
&lt;br /&gt;
In the LUA structure, this information is stored in the &amp;quot;[http://lua-api.factorio.com/latest/LuaGameScript.html#LuaGameScript.map_settings game.map_settings]&amp;quot; table, which is created by the &amp;quot;[http://lua-api.factorio.com/latest/Concepts.html#MapSettings MapSettings]&amp;quot; prototype. Each section in the table below represents a nested sub-table in &amp;quot;map-settings&amp;quot;, where the LUA key listed is the key of the table, and all subsequent fields are part of the sub-table. See data/base/prototypes/map-settings.lua for a description of all attributes (some of that information has now been copied to this page).&lt;br /&gt;
&lt;br /&gt;
Fields marked with a check (✓) in the &amp;quot;GUI&amp;quot; column are configurable in the [[World_generator#How_it_works|new game map generator GUI]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
! * !! ✓ !! pollution !! Pollution&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]] || ✓ || enabled || Pollution enabled.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || diffusion_ratio || The amount of pollution that is diffused into neighboring chunk per second.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || min_to_diffuse || This many PUs must be on the chunk to start diffusing.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || ✓ || ageing || [Modifier of] the pollution eaten by a chunks tiles.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || expected_max_per_chunk || Anything bigger than this is visualised as this value.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || min_to_show_per_chunk || Anything lower than this (but &amp;gt; 0) is visualised as this value.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || ✓ || min_pollution_to_damage_trees || Any pollution above this amount starts to damage trees.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || pollution_with_max_forest_damage || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || pollution_per_tree_damage || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || pollution_restored_per_tree_damage || The amount of pollution absorbed by a tree when it is damaged by pollution.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || max_pollution_to_restore_trees || ???&lt;br /&gt;
|-&lt;br /&gt;
! * !! !! steering.default !! Steering (Default)&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || separation_force || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#bool|boolean]] || || force_unit_fuzzy_goto_behavior || ???&lt;br /&gt;
|-&lt;br /&gt;
! * !! !! steering.moving !! Steering (Moving)&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || separation_force || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#bool|boolean]] || || force_unit_fuzzy_goto_behavior || ???&lt;br /&gt;
|- &lt;br /&gt;
! * !! ✓ !! enemy_evolution !! Evolution&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#bool|boolean]] || ✓ || enabled || Evolution enabled.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || time_factor || Percent increase in the evolve factor for every second.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || destroy_factor || Percent increase in the evolve factor for every destroyed spawner.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || pollution_factor || Percent increase in the evolve factor for every 1000 PU [produced].&lt;br /&gt;
|- &lt;br /&gt;
! * !! ✓ !! enemy_expansion !! Enemy Expansion&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]] || ✓ || enabled || Enemy expansion enabled.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || max_expansion_distance || Distance in chunks from the furthest base around.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || friendly_base_influence_radius || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || enemy_building_influence_radius || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || building_coefficient ||+ rowspan=4 | Expansion algorithm. See LUA file for details.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || other_base_coefficient &lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || neighbouring_chunk_coefficient &lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || neighbouring_base_chunk_coefficient&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_colliding_tiles_coefficient || A chunk has to have at most this much percent unbuildable tiles for it to be considered a candidate.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || settler_group_min_size ||+ rowspan=2 | Size of the group that goes to build new base (in game this is multiplied by the evolution factor).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || settler_group_max_size&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || min_expansion_cooldown || Minimum cooldown.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || max_expansion_cooldown || Maximum cooldown.&lt;br /&gt;
|- &lt;br /&gt;
! * !! !! unit_group !! Unit Group&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || min_group_gathering_time ||+ rowspan=2 | A pollution triggered group&#039;s waiting time is a random time between min and max gathering time.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_group_gathering_time &lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_wait_time_for_late_members || After the gathering is finished the group can still wait for late members, but it doesn&#039;t accept new ones anymore.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_group_radius ||+ rowspan=2 | Limits for group radius.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || min_group_radius&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_member_speedup_when_behind || When a member falls behind the group he can speedup up till this much of his regular speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_member_slowdown_when_ahead || When a member gets ahead of its group, it will slow down to at most this factor of its speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_group_slowdown_factor || When members of a group are behind, the entire group will slow down to at most this factor of its max speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_group_member_fallback_factor || If a member falls behind more than this times the group radius, the group will slow down to max_group_slowdown_factor.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || member_disown_distance || If a member falls behind more than this time the group radius, it will be removed from the group.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || tick_tolerance_when_member_arrives || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_gathering_unit_groups || Maximum number of automatically created unit groups gathering for attack at any time.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_unit_group_size || Maximum size of an attack unit group. This only affects automatically-created unit groups.&lt;br /&gt;
|- &lt;br /&gt;
! * !! !! path_finder !! Path Finder&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || fwd2bwd_ratio || Defines whether we prefer forward (&amp;gt;1) or backward (&amp;lt;-1) or symmetrical (1) search.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || goal_pressure_ratio || When comparing nodes in open which one to check next, heuristic value is multiplied by this ratio. The higher the number the more is the search directed directly towards the goal.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]] || || use_path_cache || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_steps_worked_per_tick || When this is exhausted no more requests are allowed. At the moment the first path to exhaust this will be finished (even if it is hundreds of steps).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || short_cache_size ||+ rowspan=2 | Number of elements in the cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || long_cache_size&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || short_cache_min_cacheable_distance || Minimal distance to goal for path to be searched in short path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || short_cache_min_algo_steps_to_cache || Minimal number of algorithm steps for path to be inserted into the short path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || long_cache_min_cacheable_distance || Minimal distance to goal for path to be searched in long path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || cache_max_connect_to_cache_steps_multiplier || When searching for connection to path cache path, search at most for this number of steps times the initial estimate.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_accept_path_start_distance_ratio || When looking for path from cache make sure it doesn&#039;t start too far from requested start in relative distance terms.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_accept_path_end_distance_ratio || When looking for path from cache make sure it doesn&#039;t end too far from requested end. This is typically higher than accept value for the start because the end target can be moving.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || negative_cache_accept_path_start_distance_ratio || Same as cache_accept_path_start_distance_ratio, but used for negative cache queries.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || negative_cache_accept_path_end_distance_ratio || Same as cache_accept_path_end_distance_ratio, but used for negative cache queries.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_path_start_distance_rating_multiplier || When assigning rating to the best path this * start distances is considered.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_path_end_distance_rating_multiplier || When assigning rating to the best path this * end distances is considered. This is typically higher than value for the start to achieve better path end quality.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || stale_enemy_with_same_destination_collision_penalty || Somewhere along the path is stuck enemy we need to avoid. This is mainly to handle situations when units have arrived and are attacking the target, then units further in the back will use this and run around the target.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || ignore_moving_enemy_collision_distance || If there is a moving unit further than this we don&#039;t really care.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || enemy_with_different_destination_collision_penalty || Enemy is not moving/or is too close and has different destination.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || general_entity_collision_penalty || Simplification for now - collision with everything else is this.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || general_entity_subsequent_collision_penalty || Collision penalty for successors of positions that require destroy to reach.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_clients_to_accept_any_new_request || Uptil this amount any client will be served by the path finder (no estimate on the path length).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_clients_to_accept_short_new_request || From max_clients_to_accept_any_new_request till this one only those that have a short estimate will be served.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || direct_distance_to_consider_short_request || This is the &amp;quot;threshold&amp;quot; to decide what is short and what is not.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || short_request_max_steps || If a short request takes more than this many steps, it will be rescheduled as a long request.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || short_request_ratio || How many steps will be allocated to short requests each tick, as a ratio of all available steps per tick.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || min_steps_to_check_path_find_termination || Absolute minimum of steps that will be performed for every path find request no matter what.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || start_to_goal_cost_multiplier_to_terminate_path_find || If the amount of steps is higher than this times estimate of start to goal then path finding is terminated.&lt;br /&gt;
|-&lt;br /&gt;
| colspan = 4 | &#039;&#039;&#039;Note:&#039;&#039;&#039; The following fields do not use the special encapsulation method.&lt;br /&gt;
|-&lt;br /&gt;
! byte[4] !! !! . (root) !! Other&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_failed_behavior_count || If a behavior fails this many times, the enemy (or enemy group) is destroyed. This solves biters stuck within their own base.&lt;br /&gt;
|-&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Difficulty Settings ===&lt;br /&gt;
&lt;br /&gt;
This information is instead stored in the LUA structure at [http://lua-api.factorio.com/latest/LuaGameScript.html#LuaGameScript.difficulty_settings game.difficulty_settings], which is prototyped by [http://lua-api.factorio.com/latest/Concepts.html#DifficultySettings DifficultySettings]. These fields do not use the special encapsulation method noted above.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
! byte[10] !! ✓ !! difficulty_settings !! Difficulty Settings&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]] || ✓ || recipe_difficulty || Recipe difficulty. 0 for Normal, 1 for Expensive.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]] || ✓ || technology_difficulty || Technology difficulty. 0 for Normal, 1 for Expensive.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || ✓ || technology_price_multiplier || Technology price multiplier.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: these values are typically defined using the constants at [http://lua-api.factorio.com/latest/defines.html#defines.difficulty_settings defines.difficulty_settings].&lt;br /&gt;
&lt;br /&gt;
== Autoplace Control ==&lt;br /&gt;
See the page on [[World generator#Settings on the top row|world generation]] for more information on frequency, size, and richness.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| frequency&lt;br /&gt;
| Ore [[#Map_Gen_Size|frequency]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| size&lt;br /&gt;
| Ore [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| richness&lt;br /&gt;
| Ore [[#Map_Gen_Size|richness]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Map Gen Size ==&lt;br /&gt;
These are the values used for the frequencies, sizes, and richnesses of ores, water, and the starting area size. None is a valid value for all three options. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| None / None /None&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Very Low / Small / Poor&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Low / Small / Poor&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Normal / Medium / Regular&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| High / Big / Good&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Very High / Big / Good&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of the values in a triplet (such as &amp;quot;low&amp;quot;, &amp;quot;small&amp;quot;, and &amp;quot;poor&amp;quot;) are synonymous.&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Map_exchange_string_format&amp;diff=158291</id>
		<title>Map exchange string format</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Map_exchange_string_format&amp;diff=158291"/>
		<updated>2018-04-16T00:22:45Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* Map Gen Settings */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}} [[Category:Technical]]&lt;br /&gt;
This is a technical description of the map exchange string format, used to share map generating configurations with other users. This format is also used to store these settings inside save files for future chunk generation.&lt;br /&gt;
&lt;br /&gt;
Factorio line wraps the entire map exchange string after 57 characters during export (55 code characters + &#039;\r\n&#039;, which is fairly standard), but ignores all whitespace during import. The outer layer of the map exchange string format includes three angle brackets on either side: &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;quot; and &amp;quot;&amp;lt;&amp;lt;&amp;lt;&amp;quot;, which must be present for Factorio to accept the string. Between those two tokens is the map exchange data, encoded using base 64 as defined by [https://tools.ietf.org/html/rfc4648#section-4 RFC 4648] (or [https://tools.ietf.org/html/rfc3548#section-3 3548], [https://tools.ietf.org/html/rfc2535#page-42 2535], [https://tools.ietf.org/html/rfc2045#section-6.8 2045], [https://tools.ietf.org/html/rfc1421#section-4.3.2.4 1421], et al).&lt;br /&gt;
&lt;br /&gt;
See the page on [[Data types|data types]] for an explanation of the different types of data used in this document.&lt;br /&gt;
&lt;br /&gt;
== Factorio 0.16 and Beyond ==&lt;br /&gt;
&lt;br /&gt;
Beginning with Factorio 0.16.0, two important changes are made to the encoding of the map exchange string data:&lt;br /&gt;
&lt;br /&gt;
# The map exchange data inside the Base 64 encoding is further encoded using the [https://en.wikipedia.org/wiki/Zlib zlib] compression algorithm. The best way to determine the encoding is to first attempt to parse the map exchange string using zlib, and if that fails, try again using the 0.14+ rules.&lt;br /&gt;
# All numeric data fields longer than 1 byte are encoding using a custom-built variable length integer format described by Factorio developer [[User:Rseding91|Rseding]] at [[Data_types#Space_Optimized]]. For appropriate Factorio versions, &#039;&#039;&#039;all&#039;&#039;&#039; such data types (int, short, dict, etc) used in this document represent values encoded using this approach, &#039;&#039;unless otherwise specifically noted&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
After taking these considerations into your codec, proceed using the 0.14+ rules below. &lt;br /&gt;
&lt;br /&gt;
== Factorio 0.14 and Beyond ==&lt;br /&gt;
&lt;br /&gt;
This is the base map exchange string format for all Factorio versions 0.14.x and greater. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#short|short]][4]&lt;br /&gt;
| The [[Version_String_Format|version string]] of Factorio that generated this string, used to determine encoding format. This field is never [[Data_types#Space_Optimized|space optimized]].&lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| [[#Map_Gen_Settings|Map Gen Settings]]. Variable length. See linked section for information on how to parse. &lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| [[#0.15 Map Settings|0.15.x Map Settings]]. If present, this chunk consists of the remainder of the data (minus the checksum).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]]&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Cyclic_redundancy_check CRC32 checksum] of all preceding data, as defined by ANSI X3.66 / FIPS 71 / ITU-T V.42 (the same one used by [https://en.wikipedia.org/wiki/Zlib zlib], ethernet, etc.)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Map Gen Settings ==&lt;br /&gt;
&lt;br /&gt;
This format matches [http://lua-api.factorio.com/latest/Concepts.html#MapGenSettings MapGenSettings].&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;From&amp;quot; column denotes the earliest Factorio version in which that field is present. Most of them are currently labeled as &amp;quot;≤0.14&amp;quot;, which means the field was present from &#039;&#039;at least&#039;&#039; 0.14. If you have more specific information, please edit this page!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! LUA key !! From !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| terrain_segmentation&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[Water]] [[#Map_Gen_Size|frequency]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| water&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[Water]] [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#dict|dict]]&amp;lt;[[Data types#string|string]], [[#Autoplace_Control|byte[3]]]&amp;gt;&lt;br /&gt;
| autoplace_controls&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| An dictionary of [[#Autoplace_Control|Autoplace Controls]], with string keys, where the key represents the resource name.  Factorio doesn’t care what order this dictionary is in, but it always alphabetizes during export. Vanilla has seven resources: [[Coal|coal]], [[Copper ore|copper-ore]], [[Crude oil|crude-oil]], [[Enemies|enemy-base]], [[Iron ore|iron-ore]], [[Stone|stone]], and [[Uranium ore|uranium-ore]]. Unknown ores are ignored and missing ores are set to their defaults.&lt;br /&gt;
Factorio 0.16.x adds addition terrain related autoplace features: desert, dirt, grass, sand, trees. With the exception of trees, these resources ignore their richness and as such are not configuration using the map gen GUI, and always have a richness value of 3 (&amp;quot;Regular&amp;quot;).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]][2]&lt;br /&gt;
|- TODO&lt;br /&gt;
| 0.16.0&lt;br /&gt;
| TODO...&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|uint]]&lt;br /&gt;
| seed&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Map Seed|Map seed]]. This field is never [[Data_types#Space_Optimized|space optimized]].&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;none&#039;&#039;&lt;br /&gt;
| shift&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| This field isn&#039;t present in the binary format! But it is part of the LUA structure - by default it&#039;s derived from the map seed. I&#039;ll slap the algorithm here soon(tm).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|uint]]&lt;br /&gt;
| width&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Map-width and -height|Map width]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|uint]]&lt;br /&gt;
| height&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Map-width and -height|Map height]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| starting_area&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Starting area|Starting area]] [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| TODO&lt;br /&gt;
| starting_points&lt;br /&gt;
| 0.16.16&lt;br /&gt;
| TODO...&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]]&lt;br /&gt;
| peaceful_mode&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Peaceful mode|Peaceful mode]]. Enabled if set to 1, disabled otherwise.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 0.15 Map Settings ==&lt;br /&gt;
&lt;br /&gt;
All of the following data fields (until noted at the end) have a special encapsulation format. Preceding each value is a single byte that states whether or not the value is present. If the byte is equal to zero, then the field value is not present. Otherwise, then the field&#039;s value follows. &lt;br /&gt;
&lt;br /&gt;
In the LUA structure, this information is stored in the &amp;quot;[http://lua-api.factorio.com/latest/LuaGameScript.html#LuaGameScript.map_settings game.map_settings]&amp;quot; table, which is created by the &amp;quot;[http://lua-api.factorio.com/latest/Concepts.html#MapSettings MapSettings]&amp;quot; prototype. Each section in the table below represents a nested sub-table in &amp;quot;map-settings&amp;quot;, where the LUA key listed is the key of the table, and all subsequent fields are part of the sub-table. See data/base/prototypes/map-settings.lua for a description of all attributes (some of that information has now been copied to this page).&lt;br /&gt;
&lt;br /&gt;
Fields marked with a check (✓) in the &amp;quot;GUI&amp;quot; column are configurable in the [[World_generator#How_it_works|new game map generator GUI]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
! * !! ✓ !! pollution !! Pollution&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]] || ✓ || enabled || Pollution enabled.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || diffusion_ratio || The amount of pollution that is diffused into neighboring chunk per second.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || min_to_diffuse || This many PUs must be on the chunk to start diffusing.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || ✓ || ageing || [Modifier of] the pollution eaten by a chunks tiles.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || expected_max_per_chunk || Anything bigger than this is visualised as this value.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || min_to_show_per_chunk || Anything lower than this (but &amp;gt; 0) is visualised as this value.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || ✓ || min_pollution_to_damage_trees || Any pollution above this amount starts to damage trees.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || pollution_with_max_forest_damage || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || pollution_per_tree_damage || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || pollution_restored_per_tree_damage || The amount of pollution absorbed by a tree when it is damaged by pollution.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || max_pollution_to_restore_trees || ???&lt;br /&gt;
|-&lt;br /&gt;
! * !! !! steering.default !! Steering (Default)&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || separation_force || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#bool|boolean]] || || force_unit_fuzzy_goto_behavior || ???&lt;br /&gt;
|-&lt;br /&gt;
! * !! !! steering.moving !! Steering (Moving)&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || separation_force || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#bool|boolean]] || || force_unit_fuzzy_goto_behavior || ???&lt;br /&gt;
|- &lt;br /&gt;
! * !! ✓ !! enemy_evolution !! Evolution&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#bool|boolean]] || ✓ || enabled || Evolution enabled.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || time_factor || Percent increase in the evolve factor for every second.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || destroy_factor || Percent increase in the evolve factor for every destroyed spawner.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || pollution_factor || Percent increase in the evolve factor for every 1000 PU [produced].&lt;br /&gt;
|- &lt;br /&gt;
! * !! ✓ !! enemy_expansion !! Enemy Expansion&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]] || ✓ || enabled || Enemy expansion enabled.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || max_expansion_distance || Distance in chunks from the furthest base around.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || friendly_base_influence_radius || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || enemy_building_influence_radius || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || building_coefficient ||+ rowspan=4 | Expansion algorithm. See LUA file for details.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || other_base_coefficient &lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || neighbouring_chunk_coefficient &lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || neighbouring_base_chunk_coefficient&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_colliding_tiles_coefficient || A chunk has to have at most this much percent unbuildable tiles for it to be considered a candidate.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || settler_group_min_size ||+ rowspan=2 | Size of the group that goes to build new base (in game this is multiplied by the evolution factor).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || settler_group_max_size&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || min_expansion_cooldown || Minimum cooldown.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || max_expansion_cooldown || Maximum cooldown.&lt;br /&gt;
|- &lt;br /&gt;
! * !! !! unit_group !! Unit Group&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || min_group_gathering_time ||+ rowspan=2 | A pollution triggered group&#039;s waiting time is a random time between min and max gathering time.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_group_gathering_time &lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_wait_time_for_late_members || After the gathering is finished the group can still wait for late members, but it doesn&#039;t accept new ones anymore.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_group_radius ||+ rowspan=2 | Limits for group radius.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || min_group_radius&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_member_speedup_when_behind || When a member falls behind the group he can speedup up till this much of his regular speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_member_slowdown_when_ahead || When a member gets ahead of its group, it will slow down to at most this factor of its speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_group_slowdown_factor || When members of a group are behind, the entire group will slow down to at most this factor of its max speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_group_member_fallback_factor || If a member falls behind more than this times the group radius, the group will slow down to max_group_slowdown_factor.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || member_disown_distance || If a member falls behind more than this time the group radius, it will be removed from the group.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || tick_tolerance_when_member_arrives || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_gathering_unit_groups || Maximum number of automatically created unit groups gathering for attack at any time.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_unit_group_size || Maximum size of an attack unit group. This only affects automatically-created unit groups.&lt;br /&gt;
|- &lt;br /&gt;
! * !! !! path_finder !! Path Finder&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || fwd2bwd_ratio || Defines whether we prefer forward (&amp;gt;1) or backward (&amp;lt;-1) or symmetrical (1) search.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || goal_pressure_ratio || When comparing nodes in open which one to check next, heuristic value is multiplied by this ratio. The higher the number the more is the search directed directly towards the goal.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]] || || use_path_cache || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_steps_worked_per_tick || When this is exhausted no more requests are allowed. At the moment the first path to exhaust this will be finished (even if it is hundreds of steps).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || short_cache_size ||+ rowspan=2 | Number of elements in the cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || long_cache_size&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || short_cache_min_cacheable_distance || Minimal distance to goal for path to be searched in short path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || short_cache_min_algo_steps_to_cache || Minimal number of algorithm steps for path to be inserted into the short path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || long_cache_min_cacheable_distance || Minimal distance to goal for path to be searched in long path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || cache_max_connect_to_cache_steps_multiplier || When searching for connection to path cache path, search at most for this number of steps times the initial estimate.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_accept_path_start_distance_ratio || When looking for path from cache make sure it doesn&#039;t start too far from requested start in relative distance terms.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_accept_path_end_distance_ratio || When looking for path from cache make sure it doesn&#039;t end too far from requested end. This is typically higher than accept value for the start because the end target can be moving.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || negative_cache_accept_path_start_distance_ratio || Same as cache_accept_path_start_distance_ratio, but used for negative cache queries.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || negative_cache_accept_path_end_distance_ratio || Same as cache_accept_path_end_distance_ratio, but used for negative cache queries.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_path_start_distance_rating_multiplier || When assigning rating to the best path this * start distances is considered.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_path_end_distance_rating_multiplier || When assigning rating to the best path this * end distances is considered. This is typically higher than value for the start to achieve better path end quality.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || stale_enemy_with_same_destination_collision_penalty || Somewhere along the path is stuck enemy we need to avoid. This is mainly to handle situations when units have arrived and are attacking the target, then units further in the back will use this and run around the target.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || ignore_moving_enemy_collision_distance || If there is a moving unit further than this we don&#039;t really care.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || enemy_with_different_destination_collision_penalty || Enemy is not moving/or is too close and has different destination.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || general_entity_collision_penalty || Simplification for now - collision with everything else is this.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || general_entity_subsequent_collision_penalty || Collision penalty for successors of positions that require destroy to reach.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_clients_to_accept_any_new_request || Uptil this amount any client will be served by the path finder (no estimate on the path length).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_clients_to_accept_short_new_request || From max_clients_to_accept_any_new_request till this one only those that have a short estimate will be served.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || direct_distance_to_consider_short_request || This is the &amp;quot;threshold&amp;quot; to decide what is short and what is not.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || short_request_max_steps || If a short request takes more than this many steps, it will be rescheduled as a long request.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || short_request_ratio || How many steps will be allocated to short requests each tick, as a ratio of all available steps per tick.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || min_steps_to_check_path_find_termination || Absolute minimum of steps that will be performed for every path find request no matter what.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || start_to_goal_cost_multiplier_to_terminate_path_find || If the amount of steps is higher than this times estimate of start to goal then path finding is terminated.&lt;br /&gt;
|-&lt;br /&gt;
| colspan = 4 | &#039;&#039;&#039;Note:&#039;&#039;&#039; The following fields do not use the special encapsulation method.&lt;br /&gt;
|-&lt;br /&gt;
! byte[4] !! !! . (root) !! Other&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_failed_behavior_count || If a behavior fails this many times, the enemy (or enemy group) is destroyed. This solves biters stuck within their own base.&lt;br /&gt;
|-&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Difficulty Settings ===&lt;br /&gt;
&lt;br /&gt;
This information is instead stored in the LUA structure at [http://lua-api.factorio.com/latest/LuaGameScript.html#LuaGameScript.difficulty_settings game.difficulty_settings], which is prototyped by [http://lua-api.factorio.com/latest/Concepts.html#DifficultySettings DifficultySettings]. These fields do not use the special encapsulation method noted above.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
! byte[10] !! ✓ !! difficulty_settings !! Difficulty Settings&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]] || ✓ || recipe_difficulty || Recipe difficulty. 0 for Normal, 1 for Expensive.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]] || ✓ || technology_difficulty || Technology difficulty. 0 for Normal, 1 for Expensive.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || ✓ || technology_price_multiplier || Technology price multiplier.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: these values are typically defined using the constants at [http://lua-api.factorio.com/latest/defines.html#defines.difficulty_settings defines.difficulty_settings].&lt;br /&gt;
&lt;br /&gt;
== Autoplace Control ==&lt;br /&gt;
See the page on [[World generator#Settings on the top row|world generation]] for more information on frequency, size, and richness.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| frequency&lt;br /&gt;
| Ore [[#Map_Gen_Size|frequency]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| size&lt;br /&gt;
| Ore [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| richness&lt;br /&gt;
| Ore [[#Map_Gen_Size|richness]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Map Gen Size ==&lt;br /&gt;
These are the values used for the frequencies, sizes, and richnesses of ores, water, and the starting area size. None is a valid value for all three options. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| None / None /None&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Very Low / Small / Poor&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Low / Small / Poor&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Normal / Medium / Regular&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| High / Big / Good&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Very High / Big / Good&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of the values in a triplet (such as &amp;quot;low&amp;quot;, &amp;quot;small&amp;quot;, and &amp;quot;poor&amp;quot;) are synonymous.&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Map_exchange_string_format&amp;diff=158290</id>
		<title>Map exchange string format</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Map_exchange_string_format&amp;diff=158290"/>
		<updated>2018-04-16T00:15:01Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* Map Gen Settings */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}} [[Category:Technical]]&lt;br /&gt;
This is a technical description of the map exchange string format, used to share map generating configurations with other users. This format is also used to store these settings inside save files for future chunk generation.&lt;br /&gt;
&lt;br /&gt;
Factorio line wraps the entire map exchange string after 57 characters during export (55 code characters + &#039;\r\n&#039;, which is fairly standard), but ignores all whitespace during import. The outer layer of the map exchange string format includes three angle brackets on either side: &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;quot; and &amp;quot;&amp;lt;&amp;lt;&amp;lt;&amp;quot;, which must be present for Factorio to accept the string. Between those two tokens is the map exchange data, encoded using base 64 as defined by [https://tools.ietf.org/html/rfc4648#section-4 RFC 4648] (or [https://tools.ietf.org/html/rfc3548#section-3 3548], [https://tools.ietf.org/html/rfc2535#page-42 2535], [https://tools.ietf.org/html/rfc2045#section-6.8 2045], [https://tools.ietf.org/html/rfc1421#section-4.3.2.4 1421], et al).&lt;br /&gt;
&lt;br /&gt;
See the page on [[Data types|data types]] for an explanation of the different types of data used in this document.&lt;br /&gt;
&lt;br /&gt;
== Factorio 0.16 and Beyond ==&lt;br /&gt;
&lt;br /&gt;
Beginning with Factorio 0.16.0, two important changes are made to the encoding of the map exchange string data:&lt;br /&gt;
&lt;br /&gt;
# The map exchange data inside the Base 64 encoding is further encoded using the [https://en.wikipedia.org/wiki/Zlib zlib] compression algorithm. The best way to determine the encoding is to first attempt to parse the map exchange string using zlib, and if that fails, try again using the 0.14+ rules.&lt;br /&gt;
# All numeric data fields longer than 1 byte are encoding using a custom-built variable length integer format described by Factorio developer [[User:Rseding91|Rseding]] at [[Data_types#Space_Optimized]]. For appropriate Factorio versions, &#039;&#039;&#039;all&#039;&#039;&#039; such data types (int, short, dict, etc) used in this document represent values encoded using this approach, &#039;&#039;unless otherwise specifically noted&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
After taking these considerations into your codec, proceed using the 0.14+ rules below. &lt;br /&gt;
&lt;br /&gt;
== Factorio 0.14 and Beyond ==&lt;br /&gt;
&lt;br /&gt;
This is the base map exchange string format for all Factorio versions 0.14.x and greater. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#short|short]][4]&lt;br /&gt;
| The [[Version_String_Format|version string]] of Factorio that generated this string, used to determine encoding format. This field is never [[Data_types#Space_Optimized|space optimized]].&lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| [[#Map_Gen_Settings|Map Gen Settings]]. Variable length. See linked section for information on how to parse. &lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| [[#0.15 Map Settings|0.15.x Map Settings]]. If present, this chunk consists of the remainder of the data (minus the checksum).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]]&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Cyclic_redundancy_check CRC32 checksum] of all preceding data, as defined by ANSI X3.66 / FIPS 71 / ITU-T V.42 (the same one used by [https://en.wikipedia.org/wiki/Zlib zlib], ethernet, etc.)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Map Gen Settings ==&lt;br /&gt;
&lt;br /&gt;
This format matches [http://lua-api.factorio.com/latest/Concepts.html#MapGenSettings MapGenSettings].&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;From&amp;quot; column denotes the earliest Factorio version in which that field is present. Most of them are currently labeled as &amp;quot;≤0.14&amp;quot;, which means the field was present from &#039;&#039;at least&#039;&#039; 0.14. If you have more specific information, please edit this page!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! LUA key !! From !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| terrain_segmentation&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[Water]] [[#Map_Gen_Size|frequency]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| water&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[Water]] [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#dict|dict]]&amp;lt;[[Data types#string|string]], [[#Autoplace_Control|byte[3]]]&amp;gt;&lt;br /&gt;
| autoplace_controls&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| An dictionary of [[#Autoplace_Control|Autoplace Controls]], with string keys, where the key represents the resource name.  Factorio doesn’t care what order this dictionary is in, but it always alphabetizes during export. Vanilla has seven resources: [[Coal|coal]], [[Copper ore|copper-ore]], [[Crude oil|crude-oil]], [[Enemies|enemy-base]], [[Iron ore|iron-ore]], [[Stone|stone]], and [[Uranium ore|uranium-ore]]. Unknown ores are ignored and missing ores are set to their defaults.&lt;br /&gt;
Factorio 0.16.x adds addition terrain related autoplace features: desert, dirt, grass, sand, trees. With the exception of trees, these resources ignore their richness and as such are not configuration using the map gen GUI, and always have a richness value of 3 (&amp;quot;Regular&amp;quot;).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|uint]]&lt;br /&gt;
| seed&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Map Seed|Map seed]]. This field is never [[Data_types#Space_Optimized|space optimized]].&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;none&#039;&#039;&lt;br /&gt;
| shift&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| This field isn&#039;t present in the binary format! But it is part of the LUA structure - by default it&#039;s derived from the map seed. I&#039;ll slap the algorithm here soon(tm).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|uint]]&lt;br /&gt;
| width&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Map-width and -height|Map width]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|uint]]&lt;br /&gt;
| height&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Map-width and -height|Map height]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| starting_area&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Starting area|Starting area]] [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| TODO&lt;br /&gt;
| starting_points&lt;br /&gt;
| 0.16.16&lt;br /&gt;
| TODO...&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]]&lt;br /&gt;
| peaceful_mode&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Peaceful mode|Peaceful mode]]. Enabled if set to 1, disabled otherwise.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 0.15 Map Settings ==&lt;br /&gt;
&lt;br /&gt;
All of the following data fields (until noted at the end) have a special encapsulation format. Preceding each value is a single byte that states whether or not the value is present. If the byte is equal to zero, then the field value is not present. Otherwise, then the field&#039;s value follows. &lt;br /&gt;
&lt;br /&gt;
In the LUA structure, this information is stored in the &amp;quot;[http://lua-api.factorio.com/latest/LuaGameScript.html#LuaGameScript.map_settings game.map_settings]&amp;quot; table, which is created by the &amp;quot;[http://lua-api.factorio.com/latest/Concepts.html#MapSettings MapSettings]&amp;quot; prototype. Each section in the table below represents a nested sub-table in &amp;quot;map-settings&amp;quot;, where the LUA key listed is the key of the table, and all subsequent fields are part of the sub-table. See data/base/prototypes/map-settings.lua for a description of all attributes (some of that information has now been copied to this page).&lt;br /&gt;
&lt;br /&gt;
Fields marked with a check (✓) in the &amp;quot;GUI&amp;quot; column are configurable in the [[World_generator#How_it_works|new game map generator GUI]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
! * !! ✓ !! pollution !! Pollution&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]] || ✓ || enabled || Pollution enabled.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || diffusion_ratio || The amount of pollution that is diffused into neighboring chunk per second.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || min_to_diffuse || This many PUs must be on the chunk to start diffusing.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || ✓ || ageing || [Modifier of] the pollution eaten by a chunks tiles.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || expected_max_per_chunk || Anything bigger than this is visualised as this value.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || min_to_show_per_chunk || Anything lower than this (but &amp;gt; 0) is visualised as this value.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || ✓ || min_pollution_to_damage_trees || Any pollution above this amount starts to damage trees.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || pollution_with_max_forest_damage || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || pollution_per_tree_damage || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || pollution_restored_per_tree_damage || The amount of pollution absorbed by a tree when it is damaged by pollution.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || max_pollution_to_restore_trees || ???&lt;br /&gt;
|-&lt;br /&gt;
! * !! !! steering.default !! Steering (Default)&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || separation_force || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#bool|boolean]] || || force_unit_fuzzy_goto_behavior || ???&lt;br /&gt;
|-&lt;br /&gt;
! * !! !! steering.moving !! Steering (Moving)&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || separation_force || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#bool|boolean]] || || force_unit_fuzzy_goto_behavior || ???&lt;br /&gt;
|- &lt;br /&gt;
! * !! ✓ !! enemy_evolution !! Evolution&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#bool|boolean]] || ✓ || enabled || Evolution enabled.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || time_factor || Percent increase in the evolve factor for every second.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || destroy_factor || Percent increase in the evolve factor for every destroyed spawner.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || pollution_factor || Percent increase in the evolve factor for every 1000 PU [produced].&lt;br /&gt;
|- &lt;br /&gt;
! * !! ✓ !! enemy_expansion !! Enemy Expansion&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]] || ✓ || enabled || Enemy expansion enabled.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || max_expansion_distance || Distance in chunks from the furthest base around.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || friendly_base_influence_radius || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || enemy_building_influence_radius || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || building_coefficient ||+ rowspan=4 | Expansion algorithm. See LUA file for details.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || other_base_coefficient &lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || neighbouring_chunk_coefficient &lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || neighbouring_base_chunk_coefficient&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_colliding_tiles_coefficient || A chunk has to have at most this much percent unbuildable tiles for it to be considered a candidate.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || settler_group_min_size ||+ rowspan=2 | Size of the group that goes to build new base (in game this is multiplied by the evolution factor).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || settler_group_max_size&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || min_expansion_cooldown || Minimum cooldown.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || max_expansion_cooldown || Maximum cooldown.&lt;br /&gt;
|- &lt;br /&gt;
! * !! !! unit_group !! Unit Group&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || min_group_gathering_time ||+ rowspan=2 | A pollution triggered group&#039;s waiting time is a random time between min and max gathering time.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_group_gathering_time &lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_wait_time_for_late_members || After the gathering is finished the group can still wait for late members, but it doesn&#039;t accept new ones anymore.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_group_radius ||+ rowspan=2 | Limits for group radius.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || min_group_radius&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_member_speedup_when_behind || When a member falls behind the group he can speedup up till this much of his regular speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_member_slowdown_when_ahead || When a member gets ahead of its group, it will slow down to at most this factor of its speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_group_slowdown_factor || When members of a group are behind, the entire group will slow down to at most this factor of its max speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_group_member_fallback_factor || If a member falls behind more than this times the group radius, the group will slow down to max_group_slowdown_factor.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || member_disown_distance || If a member falls behind more than this time the group radius, it will be removed from the group.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || tick_tolerance_when_member_arrives || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_gathering_unit_groups || Maximum number of automatically created unit groups gathering for attack at any time.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_unit_group_size || Maximum size of an attack unit group. This only affects automatically-created unit groups.&lt;br /&gt;
|- &lt;br /&gt;
! * !! !! path_finder !! Path Finder&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || fwd2bwd_ratio || Defines whether we prefer forward (&amp;gt;1) or backward (&amp;lt;-1) or symmetrical (1) search.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || goal_pressure_ratio || When comparing nodes in open which one to check next, heuristic value is multiplied by this ratio. The higher the number the more is the search directed directly towards the goal.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]] || || use_path_cache || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_steps_worked_per_tick || When this is exhausted no more requests are allowed. At the moment the first path to exhaust this will be finished (even if it is hundreds of steps).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || short_cache_size ||+ rowspan=2 | Number of elements in the cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || long_cache_size&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || short_cache_min_cacheable_distance || Minimal distance to goal for path to be searched in short path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || short_cache_min_algo_steps_to_cache || Minimal number of algorithm steps for path to be inserted into the short path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || long_cache_min_cacheable_distance || Minimal distance to goal for path to be searched in long path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || cache_max_connect_to_cache_steps_multiplier || When searching for connection to path cache path, search at most for this number of steps times the initial estimate.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_accept_path_start_distance_ratio || When looking for path from cache make sure it doesn&#039;t start too far from requested start in relative distance terms.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_accept_path_end_distance_ratio || When looking for path from cache make sure it doesn&#039;t end too far from requested end. This is typically higher than accept value for the start because the end target can be moving.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || negative_cache_accept_path_start_distance_ratio || Same as cache_accept_path_start_distance_ratio, but used for negative cache queries.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || negative_cache_accept_path_end_distance_ratio || Same as cache_accept_path_end_distance_ratio, but used for negative cache queries.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_path_start_distance_rating_multiplier || When assigning rating to the best path this * start distances is considered.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_path_end_distance_rating_multiplier || When assigning rating to the best path this * end distances is considered. This is typically higher than value for the start to achieve better path end quality.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || stale_enemy_with_same_destination_collision_penalty || Somewhere along the path is stuck enemy we need to avoid. This is mainly to handle situations when units have arrived and are attacking the target, then units further in the back will use this and run around the target.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || ignore_moving_enemy_collision_distance || If there is a moving unit further than this we don&#039;t really care.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || enemy_with_different_destination_collision_penalty || Enemy is not moving/or is too close and has different destination.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || general_entity_collision_penalty || Simplification for now - collision with everything else is this.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || general_entity_subsequent_collision_penalty || Collision penalty for successors of positions that require destroy to reach.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_clients_to_accept_any_new_request || Uptil this amount any client will be served by the path finder (no estimate on the path length).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_clients_to_accept_short_new_request || From max_clients_to_accept_any_new_request till this one only those that have a short estimate will be served.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || direct_distance_to_consider_short_request || This is the &amp;quot;threshold&amp;quot; to decide what is short and what is not.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || short_request_max_steps || If a short request takes more than this many steps, it will be rescheduled as a long request.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || short_request_ratio || How many steps will be allocated to short requests each tick, as a ratio of all available steps per tick.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || min_steps_to_check_path_find_termination || Absolute minimum of steps that will be performed for every path find request no matter what.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || start_to_goal_cost_multiplier_to_terminate_path_find || If the amount of steps is higher than this times estimate of start to goal then path finding is terminated.&lt;br /&gt;
|-&lt;br /&gt;
| colspan = 4 | &#039;&#039;&#039;Note:&#039;&#039;&#039; The following fields do not use the special encapsulation method.&lt;br /&gt;
|-&lt;br /&gt;
! byte[4] !! !! . (root) !! Other&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_failed_behavior_count || If a behavior fails this many times, the enemy (or enemy group) is destroyed. This solves biters stuck within their own base.&lt;br /&gt;
|-&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Difficulty Settings ===&lt;br /&gt;
&lt;br /&gt;
This information is instead stored in the LUA structure at [http://lua-api.factorio.com/latest/LuaGameScript.html#LuaGameScript.difficulty_settings game.difficulty_settings], which is prototyped by [http://lua-api.factorio.com/latest/Concepts.html#DifficultySettings DifficultySettings]. These fields do not use the special encapsulation method noted above.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
! byte[10] !! ✓ !! difficulty_settings !! Difficulty Settings&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]] || ✓ || recipe_difficulty || Recipe difficulty. 0 for Normal, 1 for Expensive.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]] || ✓ || technology_difficulty || Technology difficulty. 0 for Normal, 1 for Expensive.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || ✓ || technology_price_multiplier || Technology price multiplier.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: these values are typically defined using the constants at [http://lua-api.factorio.com/latest/defines.html#defines.difficulty_settings defines.difficulty_settings].&lt;br /&gt;
&lt;br /&gt;
== Autoplace Control ==&lt;br /&gt;
See the page on [[World generator#Settings on the top row|world generation]] for more information on frequency, size, and richness.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| frequency&lt;br /&gt;
| Ore [[#Map_Gen_Size|frequency]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| size&lt;br /&gt;
| Ore [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| richness&lt;br /&gt;
| Ore [[#Map_Gen_Size|richness]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Map Gen Size ==&lt;br /&gt;
These are the values used for the frequencies, sizes, and richnesses of ores, water, and the starting area size. None is a valid value for all three options. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| None / None /None&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Very Low / Small / Poor&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Low / Small / Poor&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Normal / Medium / Regular&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| High / Big / Good&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Very High / Big / Good&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of the values in a triplet (such as &amp;quot;low&amp;quot;, &amp;quot;small&amp;quot;, and &amp;quot;poor&amp;quot;) are synonymous.&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Map_exchange_string_format&amp;diff=158289</id>
		<title>Map exchange string format</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Map_exchange_string_format&amp;diff=158289"/>
		<updated>2018-04-15T23:46:42Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* Map Gen Settings */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}} [[Category:Technical]]&lt;br /&gt;
This is a technical description of the map exchange string format, used to share map generating configurations with other users. This format is also used to store these settings inside save files for future chunk generation.&lt;br /&gt;
&lt;br /&gt;
Factorio line wraps the entire map exchange string after 57 characters during export (55 code characters + &#039;\r\n&#039;, which is fairly standard), but ignores all whitespace during import. The outer layer of the map exchange string format includes three angle brackets on either side: &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;quot; and &amp;quot;&amp;lt;&amp;lt;&amp;lt;&amp;quot;, which must be present for Factorio to accept the string. Between those two tokens is the map exchange data, encoded using base 64 as defined by [https://tools.ietf.org/html/rfc4648#section-4 RFC 4648] (or [https://tools.ietf.org/html/rfc3548#section-3 3548], [https://tools.ietf.org/html/rfc2535#page-42 2535], [https://tools.ietf.org/html/rfc2045#section-6.8 2045], [https://tools.ietf.org/html/rfc1421#section-4.3.2.4 1421], et al).&lt;br /&gt;
&lt;br /&gt;
See the page on [[Data types|data types]] for an explanation of the different types of data used in this document.&lt;br /&gt;
&lt;br /&gt;
== Factorio 0.16 and Beyond ==&lt;br /&gt;
&lt;br /&gt;
Beginning with Factorio 0.16.0, two important changes are made to the encoding of the map exchange string data:&lt;br /&gt;
&lt;br /&gt;
# The map exchange data inside the Base 64 encoding is further encoded using the [https://en.wikipedia.org/wiki/Zlib zlib] compression algorithm. The best way to determine the encoding is to first attempt to parse the map exchange string using zlib, and if that fails, try again using the 0.14+ rules.&lt;br /&gt;
# All numeric data fields longer than 1 byte are encoding using a custom-built variable length integer format described by Factorio developer [[User:Rseding91|Rseding]] at [[Data_types#Space_Optimized]]. For appropriate Factorio versions, &#039;&#039;&#039;all&#039;&#039;&#039; such data types (int, short, dict, etc) used in this document represent values encoded using this approach, &#039;&#039;unless otherwise specifically noted&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
After taking these considerations into your codec, proceed using the 0.14+ rules below. &lt;br /&gt;
&lt;br /&gt;
== Factorio 0.14 and Beyond ==&lt;br /&gt;
&lt;br /&gt;
This is the base map exchange string format for all Factorio versions 0.14.x and greater. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#short|short]][4]&lt;br /&gt;
| The [[Version_String_Format|version string]] of Factorio that generated this string, used to determine encoding format. This field is never [[Data_types#Space_Optimized|space optimized]].&lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| [[#Map_Gen_Settings|Map Gen Settings]]. Variable length. See linked section for information on how to parse. &lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| [[#0.15 Map Settings|0.15.x Map Settings]]. If present, this chunk consists of the remainder of the data (minus the checksum).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]]&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Cyclic_redundancy_check CRC32 checksum] of all preceding data, as defined by ANSI X3.66 / FIPS 71 / ITU-T V.42 (the same one used by [https://en.wikipedia.org/wiki/Zlib zlib], ethernet, etc.)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Map Gen Settings ==&lt;br /&gt;
&lt;br /&gt;
This format matches [http://lua-api.factorio.com/latest/Concepts.html#MapGenSettings MapGenSettings].&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;From&amp;quot; column denotes the earliest Factorio version in which that field is present. Most of them are currently labeled as &amp;quot;≤0.14&amp;quot;, which means the field was present from &#039;&#039;at least&#039;&#039; 0.14. If you have more specific information, please edit this page!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! LUA key !! From !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| terrain_segmentation&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[Water]] [[#Map_Gen_Size|frequency]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| water&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[Water]] [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#dict|dict]]&amp;lt;[[Data types#string|string]], [[#Autoplace_Control|byte[3]]]&amp;gt;&lt;br /&gt;
| autoplace_controls&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| An dictionary of [[#Autoplace_Control|Autoplace Controls]], with string keys, where the key represents the resource name.  Factorio doesn’t care what order this dictionary is in, but it always alphabetizes during export. Vanilla has seven resources: [[Coal|coal]], [[Copper ore|copper-ore]], [[Crude oil|crude-oil]], [[Enemies|enemy-base]], [[Iron ore|iron-ore]], [[Stone|stone]], and [[Uranium ore|uranium-ore]]. Unknown ores are ignored and missing ores are set to their defaults.&lt;br /&gt;
Factorio 0.16.x adds addition terrain related autoplace features: desert, dirt, grass, sand, trees. With the exception of trees, these resources ignore their richness and as such are not configuration using the map gen GUI, and always have a richness value of 3 (&amp;quot;Regular&amp;quot;).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]]&lt;br /&gt;
| default_enable_all_autoplace_controls&lt;br /&gt;
| 0.16.0&lt;br /&gt;
| TODO...&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#dict|dict]]&amp;lt;TODO, TODO&amp;gt;&lt;br /&gt;
| autoplace_settings&lt;br /&gt;
| 0.16.0&lt;br /&gt;
| TODO...&lt;br /&gt;
|-&lt;br /&gt;
| TODO&lt;br /&gt;
| cliff_settings&lt;br /&gt;
| 0.16.16&lt;br /&gt;
| TODO...&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]]&lt;br /&gt;
| seed&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Map Seed|Map seed]].&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;none&#039;&#039;&lt;br /&gt;
| shift&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| This field isn&#039;t present in the binary format! But it is part of the LUA structure - by default it&#039;s derived from the map seed. I&#039;ll slap the algorithm here soon(tm).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]]&lt;br /&gt;
| width&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Map-width and -height|Map width]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]]&lt;br /&gt;
| height&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Map-width and -height|Map height]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| starting_area&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Starting area|Starting area]] [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| TODO&lt;br /&gt;
| starting_points&lt;br /&gt;
| 0.16.16&lt;br /&gt;
| TODO...&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]]&lt;br /&gt;
| peaceful_mode&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Peaceful mode|Peaceful mode]]. Enabled if set to 1, disabled otherwise.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 0.15 Map Settings ==&lt;br /&gt;
&lt;br /&gt;
All of the following data fields (until noted at the end) have a special encapsulation format. Preceding each value is a single byte that states whether or not the value is present. If the byte is equal to zero, then the field value is not present. Otherwise, then the field&#039;s value follows. &lt;br /&gt;
&lt;br /&gt;
In the LUA structure, this information is stored in the &amp;quot;[http://lua-api.factorio.com/latest/LuaGameScript.html#LuaGameScript.map_settings game.map_settings]&amp;quot; table, which is created by the &amp;quot;[http://lua-api.factorio.com/latest/Concepts.html#MapSettings MapSettings]&amp;quot; prototype. Each section in the table below represents a nested sub-table in &amp;quot;map-settings&amp;quot;, where the LUA key listed is the key of the table, and all subsequent fields are part of the sub-table. See data/base/prototypes/map-settings.lua for a description of all attributes (some of that information has now been copied to this page).&lt;br /&gt;
&lt;br /&gt;
Fields marked with a check (✓) in the &amp;quot;GUI&amp;quot; column are configurable in the [[World_generator#How_it_works|new game map generator GUI]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
! * !! ✓ !! pollution !! Pollution&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]] || ✓ || enabled || Pollution enabled.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || diffusion_ratio || The amount of pollution that is diffused into neighboring chunk per second.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || min_to_diffuse || This many PUs must be on the chunk to start diffusing.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || ✓ || ageing || [Modifier of] the pollution eaten by a chunks tiles.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || expected_max_per_chunk || Anything bigger than this is visualised as this value.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || min_to_show_per_chunk || Anything lower than this (but &amp;gt; 0) is visualised as this value.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || ✓ || min_pollution_to_damage_trees || Any pollution above this amount starts to damage trees.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || pollution_with_max_forest_damage || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || pollution_per_tree_damage || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || pollution_restored_per_tree_damage || The amount of pollution absorbed by a tree when it is damaged by pollution.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || max_pollution_to_restore_trees || ???&lt;br /&gt;
|-&lt;br /&gt;
! * !! !! steering.default !! Steering (Default)&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || separation_force || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#bool|boolean]] || || force_unit_fuzzy_goto_behavior || ???&lt;br /&gt;
|-&lt;br /&gt;
! * !! !! steering.moving !! Steering (Moving)&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || separation_force || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#bool|boolean]] || || force_unit_fuzzy_goto_behavior || ???&lt;br /&gt;
|- &lt;br /&gt;
! * !! ✓ !! enemy_evolution !! Evolution&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#bool|boolean]] || ✓ || enabled || Evolution enabled.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || time_factor || Percent increase in the evolve factor for every second.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || destroy_factor || Percent increase in the evolve factor for every destroyed spawner.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || pollution_factor || Percent increase in the evolve factor for every 1000 PU [produced].&lt;br /&gt;
|- &lt;br /&gt;
! * !! ✓ !! enemy_expansion !! Enemy Expansion&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]] || ✓ || enabled || Enemy expansion enabled.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || max_expansion_distance || Distance in chunks from the furthest base around.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || friendly_base_influence_radius || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || enemy_building_influence_radius || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || building_coefficient ||+ rowspan=4 | Expansion algorithm. See LUA file for details.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || other_base_coefficient &lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || neighbouring_chunk_coefficient &lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || neighbouring_base_chunk_coefficient&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_colliding_tiles_coefficient || A chunk has to have at most this much percent unbuildable tiles for it to be considered a candidate.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || settler_group_min_size ||+ rowspan=2 | Size of the group that goes to build new base (in game this is multiplied by the evolution factor).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || settler_group_max_size&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || min_expansion_cooldown || Minimum cooldown.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || max_expansion_cooldown || Maximum cooldown.&lt;br /&gt;
|- &lt;br /&gt;
! * !! !! unit_group !! Unit Group&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || min_group_gathering_time ||+ rowspan=2 | A pollution triggered group&#039;s waiting time is a random time between min and max gathering time.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_group_gathering_time &lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_wait_time_for_late_members || After the gathering is finished the group can still wait for late members, but it doesn&#039;t accept new ones anymore.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_group_radius ||+ rowspan=2 | Limits for group radius.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || min_group_radius&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_member_speedup_when_behind || When a member falls behind the group he can speedup up till this much of his regular speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_member_slowdown_when_ahead || When a member gets ahead of its group, it will slow down to at most this factor of its speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_group_slowdown_factor || When members of a group are behind, the entire group will slow down to at most this factor of its max speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_group_member_fallback_factor || If a member falls behind more than this times the group radius, the group will slow down to max_group_slowdown_factor.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || member_disown_distance || If a member falls behind more than this time the group radius, it will be removed from the group.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || tick_tolerance_when_member_arrives || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_gathering_unit_groups || Maximum number of automatically created unit groups gathering for attack at any time.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_unit_group_size || Maximum size of an attack unit group. This only affects automatically-created unit groups.&lt;br /&gt;
|- &lt;br /&gt;
! * !! !! path_finder !! Path Finder&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || fwd2bwd_ratio || Defines whether we prefer forward (&amp;gt;1) or backward (&amp;lt;-1) or symmetrical (1) search.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || goal_pressure_ratio || When comparing nodes in open which one to check next, heuristic value is multiplied by this ratio. The higher the number the more is the search directed directly towards the goal.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]] || || use_path_cache || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_steps_worked_per_tick || When this is exhausted no more requests are allowed. At the moment the first path to exhaust this will be finished (even if it is hundreds of steps).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || short_cache_size ||+ rowspan=2 | Number of elements in the cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || long_cache_size&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || short_cache_min_cacheable_distance || Minimal distance to goal for path to be searched in short path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || short_cache_min_algo_steps_to_cache || Minimal number of algorithm steps for path to be inserted into the short path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || long_cache_min_cacheable_distance || Minimal distance to goal for path to be searched in long path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || cache_max_connect_to_cache_steps_multiplier || When searching for connection to path cache path, search at most for this number of steps times the initial estimate.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_accept_path_start_distance_ratio || When looking for path from cache make sure it doesn&#039;t start too far from requested start in relative distance terms.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_accept_path_end_distance_ratio || When looking for path from cache make sure it doesn&#039;t end too far from requested end. This is typically higher than accept value for the start because the end target can be moving.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || negative_cache_accept_path_start_distance_ratio || Same as cache_accept_path_start_distance_ratio, but used for negative cache queries.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || negative_cache_accept_path_end_distance_ratio || Same as cache_accept_path_end_distance_ratio, but used for negative cache queries.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_path_start_distance_rating_multiplier || When assigning rating to the best path this * start distances is considered.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_path_end_distance_rating_multiplier || When assigning rating to the best path this * end distances is considered. This is typically higher than value for the start to achieve better path end quality.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || stale_enemy_with_same_destination_collision_penalty || Somewhere along the path is stuck enemy we need to avoid. This is mainly to handle situations when units have arrived and are attacking the target, then units further in the back will use this and run around the target.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || ignore_moving_enemy_collision_distance || If there is a moving unit further than this we don&#039;t really care.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || enemy_with_different_destination_collision_penalty || Enemy is not moving/or is too close and has different destination.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || general_entity_collision_penalty || Simplification for now - collision with everything else is this.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || general_entity_subsequent_collision_penalty || Collision penalty for successors of positions that require destroy to reach.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_clients_to_accept_any_new_request || Uptil this amount any client will be served by the path finder (no estimate on the path length).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_clients_to_accept_short_new_request || From max_clients_to_accept_any_new_request till this one only those that have a short estimate will be served.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || direct_distance_to_consider_short_request || This is the &amp;quot;threshold&amp;quot; to decide what is short and what is not.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || short_request_max_steps || If a short request takes more than this many steps, it will be rescheduled as a long request.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || short_request_ratio || How many steps will be allocated to short requests each tick, as a ratio of all available steps per tick.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || min_steps_to_check_path_find_termination || Absolute minimum of steps that will be performed for every path find request no matter what.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || start_to_goal_cost_multiplier_to_terminate_path_find || If the amount of steps is higher than this times estimate of start to goal then path finding is terminated.&lt;br /&gt;
|-&lt;br /&gt;
| colspan = 4 | &#039;&#039;&#039;Note:&#039;&#039;&#039; The following fields do not use the special encapsulation method.&lt;br /&gt;
|-&lt;br /&gt;
! byte[4] !! !! . (root) !! Other&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_failed_behavior_count || If a behavior fails this many times, the enemy (or enemy group) is destroyed. This solves biters stuck within their own base.&lt;br /&gt;
|-&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Difficulty Settings ===&lt;br /&gt;
&lt;br /&gt;
This information is instead stored in the LUA structure at [http://lua-api.factorio.com/latest/LuaGameScript.html#LuaGameScript.difficulty_settings game.difficulty_settings], which is prototyped by [http://lua-api.factorio.com/latest/Concepts.html#DifficultySettings DifficultySettings]. These fields do not use the special encapsulation method noted above.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
! byte[10] !! ✓ !! difficulty_settings !! Difficulty Settings&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]] || ✓ || recipe_difficulty || Recipe difficulty. 0 for Normal, 1 for Expensive.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]] || ✓ || technology_difficulty || Technology difficulty. 0 for Normal, 1 for Expensive.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || ✓ || technology_price_multiplier || Technology price multiplier.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: these values are typically defined using the constants at [http://lua-api.factorio.com/latest/defines.html#defines.difficulty_settings defines.difficulty_settings].&lt;br /&gt;
&lt;br /&gt;
== Autoplace Control ==&lt;br /&gt;
See the page on [[World generator#Settings on the top row|world generation]] for more information on frequency, size, and richness.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| frequency&lt;br /&gt;
| Ore [[#Map_Gen_Size|frequency]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| size&lt;br /&gt;
| Ore [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| richness&lt;br /&gt;
| Ore [[#Map_Gen_Size|richness]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Map Gen Size ==&lt;br /&gt;
These are the values used for the frequencies, sizes, and richnesses of ores, water, and the starting area size. None is a valid value for all three options. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| None / None /None&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Very Low / Small / Poor&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Low / Small / Poor&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Normal / Medium / Regular&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| High / Big / Good&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Very High / Big / Good&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of the values in a triplet (such as &amp;quot;low&amp;quot;, &amp;quot;small&amp;quot;, and &amp;quot;poor&amp;quot;) are synonymous.&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Map_exchange_string_format&amp;diff=158288</id>
		<title>Map exchange string format</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Map_exchange_string_format&amp;diff=158288"/>
		<updated>2018-04-15T23:45:45Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* Map Gen Settings */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}} [[Category:Technical]]&lt;br /&gt;
This is a technical description of the map exchange string format, used to share map generating configurations with other users. This format is also used to store these settings inside save files for future chunk generation.&lt;br /&gt;
&lt;br /&gt;
Factorio line wraps the entire map exchange string after 57 characters during export (55 code characters + &#039;\r\n&#039;, which is fairly standard), but ignores all whitespace during import. The outer layer of the map exchange string format includes three angle brackets on either side: &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;quot; and &amp;quot;&amp;lt;&amp;lt;&amp;lt;&amp;quot;, which must be present for Factorio to accept the string. Between those two tokens is the map exchange data, encoded using base 64 as defined by [https://tools.ietf.org/html/rfc4648#section-4 RFC 4648] (or [https://tools.ietf.org/html/rfc3548#section-3 3548], [https://tools.ietf.org/html/rfc2535#page-42 2535], [https://tools.ietf.org/html/rfc2045#section-6.8 2045], [https://tools.ietf.org/html/rfc1421#section-4.3.2.4 1421], et al).&lt;br /&gt;
&lt;br /&gt;
See the page on [[Data types|data types]] for an explanation of the different types of data used in this document.&lt;br /&gt;
&lt;br /&gt;
== Factorio 0.16 and Beyond ==&lt;br /&gt;
&lt;br /&gt;
Beginning with Factorio 0.16.0, two important changes are made to the encoding of the map exchange string data:&lt;br /&gt;
&lt;br /&gt;
# The map exchange data inside the Base 64 encoding is further encoded using the [https://en.wikipedia.org/wiki/Zlib zlib] compression algorithm. The best way to determine the encoding is to first attempt to parse the map exchange string using zlib, and if that fails, try again using the 0.14+ rules.&lt;br /&gt;
# All numeric data fields longer than 1 byte are encoding using a custom-built variable length integer format described by Factorio developer [[User:Rseding91|Rseding]] at [[Data_types#Space_Optimized]]. For appropriate Factorio versions, &#039;&#039;&#039;all&#039;&#039;&#039; such data types (int, short, dict, etc) used in this document represent values encoded using this approach, &#039;&#039;unless otherwise specifically noted&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
After taking these considerations into your codec, proceed using the 0.14+ rules below. &lt;br /&gt;
&lt;br /&gt;
== Factorio 0.14 and Beyond ==&lt;br /&gt;
&lt;br /&gt;
This is the base map exchange string format for all Factorio versions 0.14.x and greater. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#short|short]][4]&lt;br /&gt;
| The [[Version_String_Format|version string]] of Factorio that generated this string, used to determine encoding format. This field is never [[Data_types#Space_Optimized|space optimized]].&lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| [[#Map_Gen_Settings|Map Gen Settings]]. Variable length. See linked section for information on how to parse. &lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| [[#0.15 Map Settings|0.15.x Map Settings]]. If present, this chunk consists of the remainder of the data (minus the checksum).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]]&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Cyclic_redundancy_check CRC32 checksum] of all preceding data, as defined by ANSI X3.66 / FIPS 71 / ITU-T V.42 (the same one used by [https://en.wikipedia.org/wiki/Zlib zlib], ethernet, etc.)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Map Gen Settings ==&lt;br /&gt;
&lt;br /&gt;
This format matches [http://lua-api.factorio.com/latest/Concepts.html#MapGenSettings MapGenSettings].&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;From&amp;quot; column denotes the earliest Factorio version in which that field is present. Most of them are currently labeled as &amp;quot;≤0.14&amp;quot;, which means the field was present from &#039;&#039;at least&#039;&#039; 0.14. If you have more specific information, please edit this page!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! LUA key !! From !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| terrain_segmentation&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[Water]] [[#Map_Gen_Size|frequency]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| water&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[Water]] [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#dict|dict]]&amp;lt;[[Data types#string|string]], [[#Autoplace_Control|byte[3]]]&amp;gt;&lt;br /&gt;
| autoplace_controls&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| An dictionary of [[#Autoplace_Control|Autoplace Controls]], with string keys, where the key represents the resource name.  Factorio doesn’t care what order this dictionary is in, but it always alphabetizes during export. Vanilla has seven resources: [[Coal|coal]], [[Copper ore|copper-ore]], [[Crude oil|crude-oil]], [[Enemies|enemy-base]], [[Iron ore|iron-ore]], [[Stone|stone]], and [[Uranium ore|uranium-ore]]. Unknown ores are ignored and missing ores are set to their defaults.&lt;br /&gt;
Factorio 0.16.x adds addition terrain related autoplace features: desert, dirt, grass, sand, trees. With the exception of trees, these resources ignore their richness and as such are not configuration using the map gen GUI, and always have a richness value of 3.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]]&lt;br /&gt;
| default_enable_all_autoplace_controls&lt;br /&gt;
| 0.16.0&lt;br /&gt;
| TODO...&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#dict|dict]]&amp;lt;TODO, TODO&amp;gt;&lt;br /&gt;
| autoplace_settings&lt;br /&gt;
| 0.16.0&lt;br /&gt;
| TODO...&lt;br /&gt;
|-&lt;br /&gt;
| TODO&lt;br /&gt;
| cliff_settings&lt;br /&gt;
| 0.16.16&lt;br /&gt;
| TODO...&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]]&lt;br /&gt;
| seed&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Map Seed|Map seed]].&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;none&#039;&#039;&lt;br /&gt;
| shift&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| This field isn&#039;t present in the binary format! But it is part of the LUA structure - by default it&#039;s derived from the map seed. I&#039;ll slap the algorithm here soon(tm).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]]&lt;br /&gt;
| width&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Map-width and -height|Map width]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]]&lt;br /&gt;
| height&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Map-width and -height|Map height]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| starting_area&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Starting area|Starting area]] [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| TODO&lt;br /&gt;
| starting_points&lt;br /&gt;
| 0.16.16&lt;br /&gt;
| TODO...&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]]&lt;br /&gt;
| peaceful_mode&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Peaceful mode|Peaceful mode]]. Enabled if set to 1, disabled otherwise.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 0.15 Map Settings ==&lt;br /&gt;
&lt;br /&gt;
All of the following data fields (until noted at the end) have a special encapsulation format. Preceding each value is a single byte that states whether or not the value is present. If the byte is equal to zero, then the field value is not present. Otherwise, then the field&#039;s value follows. &lt;br /&gt;
&lt;br /&gt;
In the LUA structure, this information is stored in the &amp;quot;[http://lua-api.factorio.com/latest/LuaGameScript.html#LuaGameScript.map_settings game.map_settings]&amp;quot; table, which is created by the &amp;quot;[http://lua-api.factorio.com/latest/Concepts.html#MapSettings MapSettings]&amp;quot; prototype. Each section in the table below represents a nested sub-table in &amp;quot;map-settings&amp;quot;, where the LUA key listed is the key of the table, and all subsequent fields are part of the sub-table. See data/base/prototypes/map-settings.lua for a description of all attributes (some of that information has now been copied to this page).&lt;br /&gt;
&lt;br /&gt;
Fields marked with a check (✓) in the &amp;quot;GUI&amp;quot; column are configurable in the [[World_generator#How_it_works|new game map generator GUI]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
! * !! ✓ !! pollution !! Pollution&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]] || ✓ || enabled || Pollution enabled.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || diffusion_ratio || The amount of pollution that is diffused into neighboring chunk per second.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || min_to_diffuse || This many PUs must be on the chunk to start diffusing.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || ✓ || ageing || [Modifier of] the pollution eaten by a chunks tiles.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || expected_max_per_chunk || Anything bigger than this is visualised as this value.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || min_to_show_per_chunk || Anything lower than this (but &amp;gt; 0) is visualised as this value.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || ✓ || min_pollution_to_damage_trees || Any pollution above this amount starts to damage trees.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || pollution_with_max_forest_damage || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || pollution_per_tree_damage || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || pollution_restored_per_tree_damage || The amount of pollution absorbed by a tree when it is damaged by pollution.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || max_pollution_to_restore_trees || ???&lt;br /&gt;
|-&lt;br /&gt;
! * !! !! steering.default !! Steering (Default)&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || separation_force || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#bool|boolean]] || || force_unit_fuzzy_goto_behavior || ???&lt;br /&gt;
|-&lt;br /&gt;
! * !! !! steering.moving !! Steering (Moving)&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || separation_force || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#bool|boolean]] || || force_unit_fuzzy_goto_behavior || ???&lt;br /&gt;
|- &lt;br /&gt;
! * !! ✓ !! enemy_evolution !! Evolution&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#bool|boolean]] || ✓ || enabled || Evolution enabled.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || time_factor || Percent increase in the evolve factor for every second.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || destroy_factor || Percent increase in the evolve factor for every destroyed spawner.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || pollution_factor || Percent increase in the evolve factor for every 1000 PU [produced].&lt;br /&gt;
|- &lt;br /&gt;
! * !! ✓ !! enemy_expansion !! Enemy Expansion&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]] || ✓ || enabled || Enemy expansion enabled.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || max_expansion_distance || Distance in chunks from the furthest base around.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || friendly_base_influence_radius || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || enemy_building_influence_radius || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || building_coefficient ||+ rowspan=4 | Expansion algorithm. See LUA file for details.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || other_base_coefficient &lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || neighbouring_chunk_coefficient &lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || neighbouring_base_chunk_coefficient&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_colliding_tiles_coefficient || A chunk has to have at most this much percent unbuildable tiles for it to be considered a candidate.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || settler_group_min_size ||+ rowspan=2 | Size of the group that goes to build new base (in game this is multiplied by the evolution factor).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || settler_group_max_size&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || min_expansion_cooldown || Minimum cooldown.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || max_expansion_cooldown || Maximum cooldown.&lt;br /&gt;
|- &lt;br /&gt;
! * !! !! unit_group !! Unit Group&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || min_group_gathering_time ||+ rowspan=2 | A pollution triggered group&#039;s waiting time is a random time between min and max gathering time.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_group_gathering_time &lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_wait_time_for_late_members || After the gathering is finished the group can still wait for late members, but it doesn&#039;t accept new ones anymore.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_group_radius ||+ rowspan=2 | Limits for group radius.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || min_group_radius&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_member_speedup_when_behind || When a member falls behind the group he can speedup up till this much of his regular speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_member_slowdown_when_ahead || When a member gets ahead of its group, it will slow down to at most this factor of its speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_group_slowdown_factor || When members of a group are behind, the entire group will slow down to at most this factor of its max speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_group_member_fallback_factor || If a member falls behind more than this times the group radius, the group will slow down to max_group_slowdown_factor.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || member_disown_distance || If a member falls behind more than this time the group radius, it will be removed from the group.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || tick_tolerance_when_member_arrives || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_gathering_unit_groups || Maximum number of automatically created unit groups gathering for attack at any time.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_unit_group_size || Maximum size of an attack unit group. This only affects automatically-created unit groups.&lt;br /&gt;
|- &lt;br /&gt;
! * !! !! path_finder !! Path Finder&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || fwd2bwd_ratio || Defines whether we prefer forward (&amp;gt;1) or backward (&amp;lt;-1) or symmetrical (1) search.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || goal_pressure_ratio || When comparing nodes in open which one to check next, heuristic value is multiplied by this ratio. The higher the number the more is the search directed directly towards the goal.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]] || || use_path_cache || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_steps_worked_per_tick || When this is exhausted no more requests are allowed. At the moment the first path to exhaust this will be finished (even if it is hundreds of steps).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || short_cache_size ||+ rowspan=2 | Number of elements in the cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || long_cache_size&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || short_cache_min_cacheable_distance || Minimal distance to goal for path to be searched in short path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || short_cache_min_algo_steps_to_cache || Minimal number of algorithm steps for path to be inserted into the short path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || long_cache_min_cacheable_distance || Minimal distance to goal for path to be searched in long path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || cache_max_connect_to_cache_steps_multiplier || When searching for connection to path cache path, search at most for this number of steps times the initial estimate.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_accept_path_start_distance_ratio || When looking for path from cache make sure it doesn&#039;t start too far from requested start in relative distance terms.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_accept_path_end_distance_ratio || When looking for path from cache make sure it doesn&#039;t end too far from requested end. This is typically higher than accept value for the start because the end target can be moving.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || negative_cache_accept_path_start_distance_ratio || Same as cache_accept_path_start_distance_ratio, but used for negative cache queries.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || negative_cache_accept_path_end_distance_ratio || Same as cache_accept_path_end_distance_ratio, but used for negative cache queries.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_path_start_distance_rating_multiplier || When assigning rating to the best path this * start distances is considered.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_path_end_distance_rating_multiplier || When assigning rating to the best path this * end distances is considered. This is typically higher than value for the start to achieve better path end quality.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || stale_enemy_with_same_destination_collision_penalty || Somewhere along the path is stuck enemy we need to avoid. This is mainly to handle situations when units have arrived and are attacking the target, then units further in the back will use this and run around the target.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || ignore_moving_enemy_collision_distance || If there is a moving unit further than this we don&#039;t really care.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || enemy_with_different_destination_collision_penalty || Enemy is not moving/or is too close and has different destination.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || general_entity_collision_penalty || Simplification for now - collision with everything else is this.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || general_entity_subsequent_collision_penalty || Collision penalty for successors of positions that require destroy to reach.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_clients_to_accept_any_new_request || Uptil this amount any client will be served by the path finder (no estimate on the path length).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_clients_to_accept_short_new_request || From max_clients_to_accept_any_new_request till this one only those that have a short estimate will be served.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || direct_distance_to_consider_short_request || This is the &amp;quot;threshold&amp;quot; to decide what is short and what is not.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || short_request_max_steps || If a short request takes more than this many steps, it will be rescheduled as a long request.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || short_request_ratio || How many steps will be allocated to short requests each tick, as a ratio of all available steps per tick.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || min_steps_to_check_path_find_termination || Absolute minimum of steps that will be performed for every path find request no matter what.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || start_to_goal_cost_multiplier_to_terminate_path_find || If the amount of steps is higher than this times estimate of start to goal then path finding is terminated.&lt;br /&gt;
|-&lt;br /&gt;
| colspan = 4 | &#039;&#039;&#039;Note:&#039;&#039;&#039; The following fields do not use the special encapsulation method.&lt;br /&gt;
|-&lt;br /&gt;
! byte[4] !! !! . (root) !! Other&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_failed_behavior_count || If a behavior fails this many times, the enemy (or enemy group) is destroyed. This solves biters stuck within their own base.&lt;br /&gt;
|-&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Difficulty Settings ===&lt;br /&gt;
&lt;br /&gt;
This information is instead stored in the LUA structure at [http://lua-api.factorio.com/latest/LuaGameScript.html#LuaGameScript.difficulty_settings game.difficulty_settings], which is prototyped by [http://lua-api.factorio.com/latest/Concepts.html#DifficultySettings DifficultySettings]. These fields do not use the special encapsulation method noted above.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
! byte[10] !! ✓ !! difficulty_settings !! Difficulty Settings&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]] || ✓ || recipe_difficulty || Recipe difficulty. 0 for Normal, 1 for Expensive.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]] || ✓ || technology_difficulty || Technology difficulty. 0 for Normal, 1 for Expensive.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || ✓ || technology_price_multiplier || Technology price multiplier.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: these values are typically defined using the constants at [http://lua-api.factorio.com/latest/defines.html#defines.difficulty_settings defines.difficulty_settings].&lt;br /&gt;
&lt;br /&gt;
== Autoplace Control ==&lt;br /&gt;
See the page on [[World generator#Settings on the top row|world generation]] for more information on frequency, size, and richness.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| frequency&lt;br /&gt;
| Ore [[#Map_Gen_Size|frequency]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| size&lt;br /&gt;
| Ore [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| richness&lt;br /&gt;
| Ore [[#Map_Gen_Size|richness]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Map Gen Size ==&lt;br /&gt;
These are the values used for the frequencies, sizes, and richnesses of ores, water, and the starting area size. None is a valid value for all three options. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| None / None /None&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Very Low / Small / Poor&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Low / Small / Poor&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Normal / Medium / Regular&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| High / Big / Good&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Very High / Big / Good&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of the values in a triplet (such as &amp;quot;low&amp;quot;, &amp;quot;small&amp;quot;, and &amp;quot;poor&amp;quot;) are synonymous.&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Map_exchange_string_format&amp;diff=158287</id>
		<title>Map exchange string format</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Map_exchange_string_format&amp;diff=158287"/>
		<updated>2018-04-15T23:33:58Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* Map Gen Settings */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}} [[Category:Technical]]&lt;br /&gt;
This is a technical description of the map exchange string format, used to share map generating configurations with other users. This format is also used to store these settings inside save files for future chunk generation.&lt;br /&gt;
&lt;br /&gt;
Factorio line wraps the entire map exchange string after 57 characters during export (55 code characters + &#039;\r\n&#039;, which is fairly standard), but ignores all whitespace during import. The outer layer of the map exchange string format includes three angle brackets on either side: &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;quot; and &amp;quot;&amp;lt;&amp;lt;&amp;lt;&amp;quot;, which must be present for Factorio to accept the string. Between those two tokens is the map exchange data, encoded using base 64 as defined by [https://tools.ietf.org/html/rfc4648#section-4 RFC 4648] (or [https://tools.ietf.org/html/rfc3548#section-3 3548], [https://tools.ietf.org/html/rfc2535#page-42 2535], [https://tools.ietf.org/html/rfc2045#section-6.8 2045], [https://tools.ietf.org/html/rfc1421#section-4.3.2.4 1421], et al).&lt;br /&gt;
&lt;br /&gt;
See the page on [[Data types|data types]] for an explanation of the different types of data used in this document.&lt;br /&gt;
&lt;br /&gt;
== Factorio 0.16 and Beyond ==&lt;br /&gt;
&lt;br /&gt;
Beginning with Factorio 0.16.0, two important changes are made to the encoding of the map exchange string data:&lt;br /&gt;
&lt;br /&gt;
# The map exchange data inside the Base 64 encoding is further encoded using the [https://en.wikipedia.org/wiki/Zlib zlib] compression algorithm. The best way to determine the encoding is to first attempt to parse the map exchange string using zlib, and if that fails, try again using the 0.14+ rules.&lt;br /&gt;
# All numeric data fields longer than 1 byte are encoding using a custom-built variable length integer format described by Factorio developer [[User:Rseding91|Rseding]] at [[Data_types#Space_Optimized]]. For appropriate Factorio versions, &#039;&#039;&#039;all&#039;&#039;&#039; such data types (int, short, dict, etc) used in this document represent values encoded using this approach, &#039;&#039;unless otherwise specifically noted&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
After taking these considerations into your codec, proceed using the 0.14+ rules below. &lt;br /&gt;
&lt;br /&gt;
== Factorio 0.14 and Beyond ==&lt;br /&gt;
&lt;br /&gt;
This is the base map exchange string format for all Factorio versions 0.14.x and greater. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#short|short]][4]&lt;br /&gt;
| The [[Version_String_Format|version string]] of Factorio that generated this string, used to determine encoding format. This field is never [[Data_types#Space_Optimized|space optimized]].&lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| [[#Map_Gen_Settings|Map Gen Settings]]. Variable length. See linked section for information on how to parse. &lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| [[#0.15 Map Settings|0.15.x Map Settings]]. If present, this chunk consists of the remainder of the data (minus the checksum).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]]&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Cyclic_redundancy_check CRC32 checksum] of all preceding data, as defined by ANSI X3.66 / FIPS 71 / ITU-T V.42 (the same one used by [https://en.wikipedia.org/wiki/Zlib zlib], ethernet, etc.)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Map Gen Settings ==&lt;br /&gt;
&lt;br /&gt;
This format matches [http://lua-api.factorio.com/latest/Concepts.html#MapGenSettings MapGenSettings].&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;From&amp;quot; column denotes the earliest Factorio version in which that field is present. Most of them are currently labeled as &amp;quot;≤0.14&amp;quot;, which means the field was present from &#039;&#039;at least&#039;&#039; 0.14. If you have more specific information, please edit this page!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! LUA key !! From !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| terrain_segmentation&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[Water]] [[#Map_Gen_Size|frequency]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| water&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[Water]] [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#dict|dict]]&amp;lt;[[Data types#string|string]], [[#Autoplace_Control|byte[3]]]&amp;gt;&lt;br /&gt;
| autoplace_controls&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| An dictionary of [[#Autoplace_Control|Autoplace Controls]], with string keys, where the key represents the resource name.  Factorio doesn’t care what order this dictionary is in, but it always alphabetizes during export. Vanilla has seven resources: [[Coal|coal]], [[Copper ore|copper-ore]], [[Crude oil|crude-oil]], [[Enemies|enemy-base]], [[Iron ore|iron-ore]], [[Stone|stone]], and [[Uranium ore|uranium-ore]]. Unknown ores are ignored and missing ores are set to their defaults.&lt;br /&gt;
Factorio 0.16.x adds addition terrain related autoplace features: desert, dirt, grass, sand, trees. With the exception of trees, these resources ignore their richness and as such are not configuration using the map gen GUI, and always have a richness value of 3.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]]&lt;br /&gt;
| default_enable_all_autoplace_controls&lt;br /&gt;
| 0.16.0&lt;br /&gt;
| TODO...&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]]&lt;br /&gt;
| seed&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Map Seed|Map seed]].&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;none&#039;&#039;&lt;br /&gt;
| shift&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| This field isn&#039;t present in the binary format! But it is part of the LUA structure - by default it&#039;s derived from the map seed. I&#039;ll slap the algorithm here soon(tm).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]]&lt;br /&gt;
| width&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Map-width and -height|Map width]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]]&lt;br /&gt;
| height&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Map-width and -height|Map height]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| starting_area&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Starting area|Starting area]] [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]]&lt;br /&gt;
| peaceful_mode&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Peaceful mode|Peaceful mode]]. Enabled if set to 1, disabled otherwise.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 0.15 Map Settings ==&lt;br /&gt;
&lt;br /&gt;
All of the following data fields (until noted at the end) have a special encapsulation format. Preceding each value is a single byte that states whether or not the value is present. If the byte is equal to zero, then the field value is not present. Otherwise, then the field&#039;s value follows. &lt;br /&gt;
&lt;br /&gt;
In the LUA structure, this information is stored in the &amp;quot;[http://lua-api.factorio.com/latest/LuaGameScript.html#LuaGameScript.map_settings game.map_settings]&amp;quot; table, which is created by the &amp;quot;[http://lua-api.factorio.com/latest/Concepts.html#MapSettings MapSettings]&amp;quot; prototype. Each section in the table below represents a nested sub-table in &amp;quot;map-settings&amp;quot;, where the LUA key listed is the key of the table, and all subsequent fields are part of the sub-table. See data/base/prototypes/map-settings.lua for a description of all attributes (some of that information has now been copied to this page).&lt;br /&gt;
&lt;br /&gt;
Fields marked with a check (✓) in the &amp;quot;GUI&amp;quot; column are configurable in the [[World_generator#How_it_works|new game map generator GUI]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
! * !! ✓ !! pollution !! Pollution&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]] || ✓ || enabled || Pollution enabled.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || diffusion_ratio || The amount of pollution that is diffused into neighboring chunk per second.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || min_to_diffuse || This many PUs must be on the chunk to start diffusing.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || ✓ || ageing || [Modifier of] the pollution eaten by a chunks tiles.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || expected_max_per_chunk || Anything bigger than this is visualised as this value.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || min_to_show_per_chunk || Anything lower than this (but &amp;gt; 0) is visualised as this value.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || ✓ || min_pollution_to_damage_trees || Any pollution above this amount starts to damage trees.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || pollution_with_max_forest_damage || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || pollution_per_tree_damage || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || pollution_restored_per_tree_damage || The amount of pollution absorbed by a tree when it is damaged by pollution.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || max_pollution_to_restore_trees || ???&lt;br /&gt;
|-&lt;br /&gt;
! * !! !! steering.default !! Steering (Default)&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || separation_force || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#bool|boolean]] || || force_unit_fuzzy_goto_behavior || ???&lt;br /&gt;
|-&lt;br /&gt;
! * !! !! steering.moving !! Steering (Moving)&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || separation_force || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#bool|boolean]] || || force_unit_fuzzy_goto_behavior || ???&lt;br /&gt;
|- &lt;br /&gt;
! * !! ✓ !! enemy_evolution !! Evolution&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#bool|boolean]] || ✓ || enabled || Evolution enabled.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || time_factor || Percent increase in the evolve factor for every second.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || destroy_factor || Percent increase in the evolve factor for every destroyed spawner.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || pollution_factor || Percent increase in the evolve factor for every 1000 PU [produced].&lt;br /&gt;
|- &lt;br /&gt;
! * !! ✓ !! enemy_expansion !! Enemy Expansion&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]] || ✓ || enabled || Enemy expansion enabled.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || max_expansion_distance || Distance in chunks from the furthest base around.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || friendly_base_influence_radius || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || enemy_building_influence_radius || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || building_coefficient ||+ rowspan=4 | Expansion algorithm. See LUA file for details.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || other_base_coefficient &lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || neighbouring_chunk_coefficient &lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || neighbouring_base_chunk_coefficient&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_colliding_tiles_coefficient || A chunk has to have at most this much percent unbuildable tiles for it to be considered a candidate.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || settler_group_min_size ||+ rowspan=2 | Size of the group that goes to build new base (in game this is multiplied by the evolution factor).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || settler_group_max_size&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || min_expansion_cooldown || Minimum cooldown.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || max_expansion_cooldown || Maximum cooldown.&lt;br /&gt;
|- &lt;br /&gt;
! * !! !! unit_group !! Unit Group&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || min_group_gathering_time ||+ rowspan=2 | A pollution triggered group&#039;s waiting time is a random time between min and max gathering time.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_group_gathering_time &lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_wait_time_for_late_members || After the gathering is finished the group can still wait for late members, but it doesn&#039;t accept new ones anymore.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_group_radius ||+ rowspan=2 | Limits for group radius.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || min_group_radius&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_member_speedup_when_behind || When a member falls behind the group he can speedup up till this much of his regular speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_member_slowdown_when_ahead || When a member gets ahead of its group, it will slow down to at most this factor of its speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_group_slowdown_factor || When members of a group are behind, the entire group will slow down to at most this factor of its max speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_group_member_fallback_factor || If a member falls behind more than this times the group radius, the group will slow down to max_group_slowdown_factor.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || member_disown_distance || If a member falls behind more than this time the group radius, it will be removed from the group.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || tick_tolerance_when_member_arrives || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_gathering_unit_groups || Maximum number of automatically created unit groups gathering for attack at any time.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_unit_group_size || Maximum size of an attack unit group. This only affects automatically-created unit groups.&lt;br /&gt;
|- &lt;br /&gt;
! * !! !! path_finder !! Path Finder&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || fwd2bwd_ratio || Defines whether we prefer forward (&amp;gt;1) or backward (&amp;lt;-1) or symmetrical (1) search.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || goal_pressure_ratio || When comparing nodes in open which one to check next, heuristic value is multiplied by this ratio. The higher the number the more is the search directed directly towards the goal.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]] || || use_path_cache || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_steps_worked_per_tick || When this is exhausted no more requests are allowed. At the moment the first path to exhaust this will be finished (even if it is hundreds of steps).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || short_cache_size ||+ rowspan=2 | Number of elements in the cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || long_cache_size&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || short_cache_min_cacheable_distance || Minimal distance to goal for path to be searched in short path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || short_cache_min_algo_steps_to_cache || Minimal number of algorithm steps for path to be inserted into the short path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || long_cache_min_cacheable_distance || Minimal distance to goal for path to be searched in long path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || cache_max_connect_to_cache_steps_multiplier || When searching for connection to path cache path, search at most for this number of steps times the initial estimate.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_accept_path_start_distance_ratio || When looking for path from cache make sure it doesn&#039;t start too far from requested start in relative distance terms.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_accept_path_end_distance_ratio || When looking for path from cache make sure it doesn&#039;t end too far from requested end. This is typically higher than accept value for the start because the end target can be moving.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || negative_cache_accept_path_start_distance_ratio || Same as cache_accept_path_start_distance_ratio, but used for negative cache queries.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || negative_cache_accept_path_end_distance_ratio || Same as cache_accept_path_end_distance_ratio, but used for negative cache queries.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_path_start_distance_rating_multiplier || When assigning rating to the best path this * start distances is considered.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_path_end_distance_rating_multiplier || When assigning rating to the best path this * end distances is considered. This is typically higher than value for the start to achieve better path end quality.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || stale_enemy_with_same_destination_collision_penalty || Somewhere along the path is stuck enemy we need to avoid. This is mainly to handle situations when units have arrived and are attacking the target, then units further in the back will use this and run around the target.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || ignore_moving_enemy_collision_distance || If there is a moving unit further than this we don&#039;t really care.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || enemy_with_different_destination_collision_penalty || Enemy is not moving/or is too close and has different destination.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || general_entity_collision_penalty || Simplification for now - collision with everything else is this.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || general_entity_subsequent_collision_penalty || Collision penalty for successors of positions that require destroy to reach.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_clients_to_accept_any_new_request || Uptil this amount any client will be served by the path finder (no estimate on the path length).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_clients_to_accept_short_new_request || From max_clients_to_accept_any_new_request till this one only those that have a short estimate will be served.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || direct_distance_to_consider_short_request || This is the &amp;quot;threshold&amp;quot; to decide what is short and what is not.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || short_request_max_steps || If a short request takes more than this many steps, it will be rescheduled as a long request.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || short_request_ratio || How many steps will be allocated to short requests each tick, as a ratio of all available steps per tick.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || min_steps_to_check_path_find_termination || Absolute minimum of steps that will be performed for every path find request no matter what.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || start_to_goal_cost_multiplier_to_terminate_path_find || If the amount of steps is higher than this times estimate of start to goal then path finding is terminated.&lt;br /&gt;
|-&lt;br /&gt;
| colspan = 4 | &#039;&#039;&#039;Note:&#039;&#039;&#039; The following fields do not use the special encapsulation method.&lt;br /&gt;
|-&lt;br /&gt;
! byte[4] !! !! . (root) !! Other&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_failed_behavior_count || If a behavior fails this many times, the enemy (or enemy group) is destroyed. This solves biters stuck within their own base.&lt;br /&gt;
|-&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Difficulty Settings ===&lt;br /&gt;
&lt;br /&gt;
This information is instead stored in the LUA structure at [http://lua-api.factorio.com/latest/LuaGameScript.html#LuaGameScript.difficulty_settings game.difficulty_settings], which is prototyped by [http://lua-api.factorio.com/latest/Concepts.html#DifficultySettings DifficultySettings]. These fields do not use the special encapsulation method noted above.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
! byte[10] !! ✓ !! difficulty_settings !! Difficulty Settings&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]] || ✓ || recipe_difficulty || Recipe difficulty. 0 for Normal, 1 for Expensive.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]] || ✓ || technology_difficulty || Technology difficulty. 0 for Normal, 1 for Expensive.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || ✓ || technology_price_multiplier || Technology price multiplier.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: these values are typically defined using the constants at [http://lua-api.factorio.com/latest/defines.html#defines.difficulty_settings defines.difficulty_settings].&lt;br /&gt;
&lt;br /&gt;
== Autoplace Control ==&lt;br /&gt;
See the page on [[World generator#Settings on the top row|world generation]] for more information on frequency, size, and richness.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| frequency&lt;br /&gt;
| Ore [[#Map_Gen_Size|frequency]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| size&lt;br /&gt;
| Ore [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| richness&lt;br /&gt;
| Ore [[#Map_Gen_Size|richness]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Map Gen Size ==&lt;br /&gt;
These are the values used for the frequencies, sizes, and richnesses of ores, water, and the starting area size. None is a valid value for all three options. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| None / None /None&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Very Low / Small / Poor&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Low / Small / Poor&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Normal / Medium / Regular&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| High / Big / Good&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Very High / Big / Good&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of the values in a triplet (such as &amp;quot;low&amp;quot;, &amp;quot;small&amp;quot;, and &amp;quot;poor&amp;quot;) are synonymous.&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Map_exchange_string_format&amp;diff=158286</id>
		<title>Map exchange string format</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Map_exchange_string_format&amp;diff=158286"/>
		<updated>2018-04-15T23:32:08Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* Map Gen Settings */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}} [[Category:Technical]]&lt;br /&gt;
This is a technical description of the map exchange string format, used to share map generating configurations with other users. This format is also used to store these settings inside save files for future chunk generation.&lt;br /&gt;
&lt;br /&gt;
Factorio line wraps the entire map exchange string after 57 characters during export (55 code characters + &#039;\r\n&#039;, which is fairly standard), but ignores all whitespace during import. The outer layer of the map exchange string format includes three angle brackets on either side: &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;quot; and &amp;quot;&amp;lt;&amp;lt;&amp;lt;&amp;quot;, which must be present for Factorio to accept the string. Between those two tokens is the map exchange data, encoded using base 64 as defined by [https://tools.ietf.org/html/rfc4648#section-4 RFC 4648] (or [https://tools.ietf.org/html/rfc3548#section-3 3548], [https://tools.ietf.org/html/rfc2535#page-42 2535], [https://tools.ietf.org/html/rfc2045#section-6.8 2045], [https://tools.ietf.org/html/rfc1421#section-4.3.2.4 1421], et al).&lt;br /&gt;
&lt;br /&gt;
See the page on [[Data types|data types]] for an explanation of the different types of data used in this document.&lt;br /&gt;
&lt;br /&gt;
== Factorio 0.16 and Beyond ==&lt;br /&gt;
&lt;br /&gt;
Beginning with Factorio 0.16.0, two important changes are made to the encoding of the map exchange string data:&lt;br /&gt;
&lt;br /&gt;
# The map exchange data inside the Base 64 encoding is further encoded using the [https://en.wikipedia.org/wiki/Zlib zlib] compression algorithm. The best way to determine the encoding is to first attempt to parse the map exchange string using zlib, and if that fails, try again using the 0.14+ rules.&lt;br /&gt;
# All numeric data fields longer than 1 byte are encoding using a custom-built variable length integer format described by Factorio developer [[User:Rseding91|Rseding]] at [[Data_types#Space_Optimized]]. For appropriate Factorio versions, &#039;&#039;&#039;all&#039;&#039;&#039; such data types (int, short, dict, etc) used in this document represent values encoded using this approach, &#039;&#039;unless otherwise specifically noted&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
After taking these considerations into your codec, proceed using the 0.14+ rules below. &lt;br /&gt;
&lt;br /&gt;
== Factorio 0.14 and Beyond ==&lt;br /&gt;
&lt;br /&gt;
This is the base map exchange string format for all Factorio versions 0.14.x and greater. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#short|short]][4]&lt;br /&gt;
| The [[Version_String_Format|version string]] of Factorio that generated this string, used to determine encoding format. This field is never [[Data_types#Space_Optimized|space optimized]].&lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| [[#Map_Gen_Settings|Map Gen Settings]]. Variable length. See linked section for information on how to parse. &lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| [[#0.15 Map Settings|0.15.x Map Settings]]. If present, this chunk consists of the remainder of the data (minus the checksum).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]]&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Cyclic_redundancy_check CRC32 checksum] of all preceding data, as defined by ANSI X3.66 / FIPS 71 / ITU-T V.42 (the same one used by [https://en.wikipedia.org/wiki/Zlib zlib], ethernet, etc.)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Map Gen Settings ==&lt;br /&gt;
&lt;br /&gt;
This format matches [http://lua-api.factorio.com/latest/Concepts.html#MapGenSettings MapGenSettings].&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;From&amp;quot; column denotes the earliest Factorio version in which that field is present. Most of them are currently labeled as &amp;quot;≤0.14&amp;quot;, which means the field was present from &#039;&#039;at least&#039;&#039; 0.14. If you have more specific information, please edit this page!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! LUA key !! From !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| terrain_segmentation&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[Water]] [[#Map_Gen_Size|frequency]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| water&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[Water]] [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#dict|dict]]&amp;lt;[[Data types#string|string]], [[#Autoplace_Control|byte[3]]]&amp;gt;&lt;br /&gt;
| autoplace_controls&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| An dictionary of [[#Autoplace_Control|Autoplace Controls]], with string keys, where the key represents the resource name.  Factorio doesn’t care what order this dictionary is in, but it always alphabetizes during export. Vanilla has seven resources: [[Coal|coal]], [[Copper ore|copper-ore]], [[Crude oil|crude-oil]], [[Enemies|enemy-base]], [[Iron ore|iron-ore]], [[Stone|stone]], and [[Uranium ore|uranium-ore]]. Unknown ores are ignored and missing ores are set to their defaults.&lt;br /&gt;
Factorio 0.16.x adds addition terrain related autoplace features: desert, dirt, grass, sand, trees. These resources will always have a richness value of 3.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]]&lt;br /&gt;
| default_enable_all_autoplace_controls&lt;br /&gt;
| 0.16.0&lt;br /&gt;
| TODO...&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]]&lt;br /&gt;
| seed&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Map Seed|Map seed]].&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;none&#039;&#039;&lt;br /&gt;
| shift&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| This field isn&#039;t present in the binary format! But it is part of the LUA structure - by default it&#039;s derived from the map seed. I&#039;ll slap the algorithm here soon(tm).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]]&lt;br /&gt;
| width&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Map-width and -height|Map width]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]]&lt;br /&gt;
| height&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Map-width and -height|Map height]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| starting_area&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Starting area|Starting area]] [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]]&lt;br /&gt;
| peaceful_mode&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Peaceful mode|Peaceful mode]]. Enabled if set to 1, disabled otherwise.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 0.15 Map Settings ==&lt;br /&gt;
&lt;br /&gt;
All of the following data fields (until noted at the end) have a special encapsulation format. Preceding each value is a single byte that states whether or not the value is present. If the byte is equal to zero, then the field value is not present. Otherwise, then the field&#039;s value follows. &lt;br /&gt;
&lt;br /&gt;
In the LUA structure, this information is stored in the &amp;quot;[http://lua-api.factorio.com/latest/LuaGameScript.html#LuaGameScript.map_settings game.map_settings]&amp;quot; table, which is created by the &amp;quot;[http://lua-api.factorio.com/latest/Concepts.html#MapSettings MapSettings]&amp;quot; prototype. Each section in the table below represents a nested sub-table in &amp;quot;map-settings&amp;quot;, where the LUA key listed is the key of the table, and all subsequent fields are part of the sub-table. See data/base/prototypes/map-settings.lua for a description of all attributes (some of that information has now been copied to this page).&lt;br /&gt;
&lt;br /&gt;
Fields marked with a check (✓) in the &amp;quot;GUI&amp;quot; column are configurable in the [[World_generator#How_it_works|new game map generator GUI]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
! * !! ✓ !! pollution !! Pollution&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]] || ✓ || enabled || Pollution enabled.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || diffusion_ratio || The amount of pollution that is diffused into neighboring chunk per second.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || min_to_diffuse || This many PUs must be on the chunk to start diffusing.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || ✓ || ageing || [Modifier of] the pollution eaten by a chunks tiles.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || expected_max_per_chunk || Anything bigger than this is visualised as this value.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || min_to_show_per_chunk || Anything lower than this (but &amp;gt; 0) is visualised as this value.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || ✓ || min_pollution_to_damage_trees || Any pollution above this amount starts to damage trees.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || pollution_with_max_forest_damage || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || pollution_per_tree_damage || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || pollution_restored_per_tree_damage || The amount of pollution absorbed by a tree when it is damaged by pollution.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || max_pollution_to_restore_trees || ???&lt;br /&gt;
|-&lt;br /&gt;
! * !! !! steering.default !! Steering (Default)&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || separation_force || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#bool|boolean]] || || force_unit_fuzzy_goto_behavior || ???&lt;br /&gt;
|-&lt;br /&gt;
! * !! !! steering.moving !! Steering (Moving)&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || separation_force || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#bool|boolean]] || || force_unit_fuzzy_goto_behavior || ???&lt;br /&gt;
|- &lt;br /&gt;
! * !! ✓ !! enemy_evolution !! Evolution&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#bool|boolean]] || ✓ || enabled || Evolution enabled.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || time_factor || Percent increase in the evolve factor for every second.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || destroy_factor || Percent increase in the evolve factor for every destroyed spawner.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || pollution_factor || Percent increase in the evolve factor for every 1000 PU [produced].&lt;br /&gt;
|- &lt;br /&gt;
! * !! ✓ !! enemy_expansion !! Enemy Expansion&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]] || ✓ || enabled || Enemy expansion enabled.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || max_expansion_distance || Distance in chunks from the furthest base around.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || friendly_base_influence_radius || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || enemy_building_influence_radius || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || building_coefficient ||+ rowspan=4 | Expansion algorithm. See LUA file for details.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || other_base_coefficient &lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || neighbouring_chunk_coefficient &lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || neighbouring_base_chunk_coefficient&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_colliding_tiles_coefficient || A chunk has to have at most this much percent unbuildable tiles for it to be considered a candidate.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || settler_group_min_size ||+ rowspan=2 | Size of the group that goes to build new base (in game this is multiplied by the evolution factor).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || settler_group_max_size&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || min_expansion_cooldown || Minimum cooldown.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || max_expansion_cooldown || Maximum cooldown.&lt;br /&gt;
|- &lt;br /&gt;
! * !! !! unit_group !! Unit Group&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || min_group_gathering_time ||+ rowspan=2 | A pollution triggered group&#039;s waiting time is a random time between min and max gathering time.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_group_gathering_time &lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_wait_time_for_late_members || After the gathering is finished the group can still wait for late members, but it doesn&#039;t accept new ones anymore.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_group_radius ||+ rowspan=2 | Limits for group radius.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || min_group_radius&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_member_speedup_when_behind || When a member falls behind the group he can speedup up till this much of his regular speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_member_slowdown_when_ahead || When a member gets ahead of its group, it will slow down to at most this factor of its speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_group_slowdown_factor || When members of a group are behind, the entire group will slow down to at most this factor of its max speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_group_member_fallback_factor || If a member falls behind more than this times the group radius, the group will slow down to max_group_slowdown_factor.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || member_disown_distance || If a member falls behind more than this time the group radius, it will be removed from the group.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || tick_tolerance_when_member_arrives || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_gathering_unit_groups || Maximum number of automatically created unit groups gathering for attack at any time.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_unit_group_size || Maximum size of an attack unit group. This only affects automatically-created unit groups.&lt;br /&gt;
|- &lt;br /&gt;
! * !! !! path_finder !! Path Finder&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || fwd2bwd_ratio || Defines whether we prefer forward (&amp;gt;1) or backward (&amp;lt;-1) or symmetrical (1) search.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || goal_pressure_ratio || When comparing nodes in open which one to check next, heuristic value is multiplied by this ratio. The higher the number the more is the search directed directly towards the goal.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]] || || use_path_cache || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_steps_worked_per_tick || When this is exhausted no more requests are allowed. At the moment the first path to exhaust this will be finished (even if it is hundreds of steps).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || short_cache_size ||+ rowspan=2 | Number of elements in the cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || long_cache_size&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || short_cache_min_cacheable_distance || Minimal distance to goal for path to be searched in short path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || short_cache_min_algo_steps_to_cache || Minimal number of algorithm steps for path to be inserted into the short path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || long_cache_min_cacheable_distance || Minimal distance to goal for path to be searched in long path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || cache_max_connect_to_cache_steps_multiplier || When searching for connection to path cache path, search at most for this number of steps times the initial estimate.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_accept_path_start_distance_ratio || When looking for path from cache make sure it doesn&#039;t start too far from requested start in relative distance terms.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_accept_path_end_distance_ratio || When looking for path from cache make sure it doesn&#039;t end too far from requested end. This is typically higher than accept value for the start because the end target can be moving.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || negative_cache_accept_path_start_distance_ratio || Same as cache_accept_path_start_distance_ratio, but used for negative cache queries.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || negative_cache_accept_path_end_distance_ratio || Same as cache_accept_path_end_distance_ratio, but used for negative cache queries.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_path_start_distance_rating_multiplier || When assigning rating to the best path this * start distances is considered.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_path_end_distance_rating_multiplier || When assigning rating to the best path this * end distances is considered. This is typically higher than value for the start to achieve better path end quality.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || stale_enemy_with_same_destination_collision_penalty || Somewhere along the path is stuck enemy we need to avoid. This is mainly to handle situations when units have arrived and are attacking the target, then units further in the back will use this and run around the target.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || ignore_moving_enemy_collision_distance || If there is a moving unit further than this we don&#039;t really care.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || enemy_with_different_destination_collision_penalty || Enemy is not moving/or is too close and has different destination.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || general_entity_collision_penalty || Simplification for now - collision with everything else is this.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || general_entity_subsequent_collision_penalty || Collision penalty for successors of positions that require destroy to reach.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_clients_to_accept_any_new_request || Uptil this amount any client will be served by the path finder (no estimate on the path length).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_clients_to_accept_short_new_request || From max_clients_to_accept_any_new_request till this one only those that have a short estimate will be served.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || direct_distance_to_consider_short_request || This is the &amp;quot;threshold&amp;quot; to decide what is short and what is not.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || short_request_max_steps || If a short request takes more than this many steps, it will be rescheduled as a long request.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || short_request_ratio || How many steps will be allocated to short requests each tick, as a ratio of all available steps per tick.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || min_steps_to_check_path_find_termination || Absolute minimum of steps that will be performed for every path find request no matter what.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || start_to_goal_cost_multiplier_to_terminate_path_find || If the amount of steps is higher than this times estimate of start to goal then path finding is terminated.&lt;br /&gt;
|-&lt;br /&gt;
| colspan = 4 | &#039;&#039;&#039;Note:&#039;&#039;&#039; The following fields do not use the special encapsulation method.&lt;br /&gt;
|-&lt;br /&gt;
! byte[4] !! !! . (root) !! Other&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_failed_behavior_count || If a behavior fails this many times, the enemy (or enemy group) is destroyed. This solves biters stuck within their own base.&lt;br /&gt;
|-&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Difficulty Settings ===&lt;br /&gt;
&lt;br /&gt;
This information is instead stored in the LUA structure at [http://lua-api.factorio.com/latest/LuaGameScript.html#LuaGameScript.difficulty_settings game.difficulty_settings], which is prototyped by [http://lua-api.factorio.com/latest/Concepts.html#DifficultySettings DifficultySettings]. These fields do not use the special encapsulation method noted above.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
! byte[10] !! ✓ !! difficulty_settings !! Difficulty Settings&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]] || ✓ || recipe_difficulty || Recipe difficulty. 0 for Normal, 1 for Expensive.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]] || ✓ || technology_difficulty || Technology difficulty. 0 for Normal, 1 for Expensive.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || ✓ || technology_price_multiplier || Technology price multiplier.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: these values are typically defined using the constants at [http://lua-api.factorio.com/latest/defines.html#defines.difficulty_settings defines.difficulty_settings].&lt;br /&gt;
&lt;br /&gt;
== Autoplace Control ==&lt;br /&gt;
See the page on [[World generator#Settings on the top row|world generation]] for more information on frequency, size, and richness.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| frequency&lt;br /&gt;
| Ore [[#Map_Gen_Size|frequency]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| size&lt;br /&gt;
| Ore [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| richness&lt;br /&gt;
| Ore [[#Map_Gen_Size|richness]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Map Gen Size ==&lt;br /&gt;
These are the values used for the frequencies, sizes, and richnesses of ores, water, and the starting area size. None is a valid value for all three options. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| None / None /None&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Very Low / Small / Poor&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Low / Small / Poor&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Normal / Medium / Regular&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| High / Big / Good&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Very High / Big / Good&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of the values in a triplet (such as &amp;quot;low&amp;quot;, &amp;quot;small&amp;quot;, and &amp;quot;poor&amp;quot;) are synonymous.&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Map_exchange_string_format&amp;diff=158285</id>
		<title>Map exchange string format</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Map_exchange_string_format&amp;diff=158285"/>
		<updated>2018-04-15T23:17:33Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* Map Gen Settings */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}} [[Category:Technical]]&lt;br /&gt;
This is a technical description of the map exchange string format, used to share map generating configurations with other users. This format is also used to store these settings inside save files for future chunk generation.&lt;br /&gt;
&lt;br /&gt;
Factorio line wraps the entire map exchange string after 57 characters during export (55 code characters + &#039;\r\n&#039;, which is fairly standard), but ignores all whitespace during import. The outer layer of the map exchange string format includes three angle brackets on either side: &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;quot; and &amp;quot;&amp;lt;&amp;lt;&amp;lt;&amp;quot;, which must be present for Factorio to accept the string. Between those two tokens is the map exchange data, encoded using base 64 as defined by [https://tools.ietf.org/html/rfc4648#section-4 RFC 4648] (or [https://tools.ietf.org/html/rfc3548#section-3 3548], [https://tools.ietf.org/html/rfc2535#page-42 2535], [https://tools.ietf.org/html/rfc2045#section-6.8 2045], [https://tools.ietf.org/html/rfc1421#section-4.3.2.4 1421], et al).&lt;br /&gt;
&lt;br /&gt;
See the page on [[Data types|data types]] for an explanation of the different types of data used in this document.&lt;br /&gt;
&lt;br /&gt;
== Factorio 0.16 and Beyond ==&lt;br /&gt;
&lt;br /&gt;
Beginning with Factorio 0.16.0, two important changes are made to the encoding of the map exchange string data:&lt;br /&gt;
&lt;br /&gt;
# The map exchange data inside the Base 64 encoding is further encoded using the [https://en.wikipedia.org/wiki/Zlib zlib] compression algorithm. The best way to determine the encoding is to first attempt to parse the map exchange string using zlib, and if that fails, try again using the 0.14+ rules.&lt;br /&gt;
# All numeric data fields longer than 1 byte are encoding using a custom-built variable length integer format described by Factorio developer [[User:Rseding91|Rseding]] at [[Data_types#Space_Optimized]]. For appropriate Factorio versions, &#039;&#039;&#039;all&#039;&#039;&#039; such data types (int, short, dict, etc) used in this document represent values encoded using this approach, &#039;&#039;unless otherwise specifically noted&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
After taking these considerations into your codec, proceed using the 0.14+ rules below. &lt;br /&gt;
&lt;br /&gt;
== Factorio 0.14 and Beyond ==&lt;br /&gt;
&lt;br /&gt;
This is the base map exchange string format for all Factorio versions 0.14.x and greater. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#short|short]][4]&lt;br /&gt;
| The [[Version_String_Format|version string]] of Factorio that generated this string, used to determine encoding format. This field is never [[Data_types#Space_Optimized|space optimized]].&lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| [[#Map_Gen_Settings|Map Gen Settings]]. Variable length. See linked section for information on how to parse. &lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| [[#0.15 Map Settings|0.15.x Map Settings]]. If present, this chunk consists of the remainder of the data (minus the checksum).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]]&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Cyclic_redundancy_check CRC32 checksum] of all preceding data, as defined by ANSI X3.66 / FIPS 71 / ITU-T V.42 (the same one used by [https://en.wikipedia.org/wiki/Zlib zlib], ethernet, etc.)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Map Gen Settings ==&lt;br /&gt;
&lt;br /&gt;
This format matches [http://lua-api.factorio.com/latest/Concepts.html#MapGenSettings MapGenSettings].&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;From&amp;quot; column denotes the earliest Factorio version in which that field is present. Most of them are currently labeled as &amp;quot;≤0.14&amp;quot;, which means the field was present from &#039;&#039;at least&#039;&#039; 0.14. If you have more specific information, please edit this page!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! LUA key !! From !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| terrain_segmentation&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[Water]] [[#Map_Gen_Size|frequency]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| water&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[Water]] [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#dict|dict]]&amp;lt;[[Data types#string|string]], [[#Autoplace_Control|byte[3]]]&amp;gt;&lt;br /&gt;
| autoplace_controls&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| An dictionary of [[#Autoplace_Control|Autoplace Controls]], with string keys, where the key represents the resource name.  Factorio doesn’t care what order this dictionary is in, but it always alphabetizes during export. Vanilla has seven resources: [[Coal|coal]], [[Copper ore|copper-ore]], [[Crude oil|crude-oil]], [[Enemies|enemy-base]], [[Iron ore|iron-ore]], [[Stone|stone]], and [[Uranium ore|uranium-ore]]. Unknown ores are ignored and missing ores are set to their defaults.&lt;br /&gt;
Factorio 0.16.x adds addition terrain related autoplace features: desert, dirt, grass, sand, trees&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]]&lt;br /&gt;
| default_enable_all_autoplace_controls&lt;br /&gt;
| 0.16.0&lt;br /&gt;
| TODO...&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]]&lt;br /&gt;
| seed&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Map Seed|Map seed]].&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;none&#039;&#039;&lt;br /&gt;
| shift&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| This field isn&#039;t present in the binary format! But it is part of the LUA structure - by default it&#039;s derived from the map seed. I&#039;ll slap the algorithm here soon(tm).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]]&lt;br /&gt;
| width&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Map-width and -height|Map width]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]]&lt;br /&gt;
| height&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Map-width and -height|Map height]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| starting_area&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Starting area|Starting area]] [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]]&lt;br /&gt;
| peaceful_mode&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Peaceful mode|Peaceful mode]]. Enabled if set to 1, disabled otherwise.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 0.15 Map Settings ==&lt;br /&gt;
&lt;br /&gt;
All of the following data fields (until noted at the end) have a special encapsulation format. Preceding each value is a single byte that states whether or not the value is present. If the byte is equal to zero, then the field value is not present. Otherwise, then the field&#039;s value follows. &lt;br /&gt;
&lt;br /&gt;
In the LUA structure, this information is stored in the &amp;quot;[http://lua-api.factorio.com/latest/LuaGameScript.html#LuaGameScript.map_settings game.map_settings]&amp;quot; table, which is created by the &amp;quot;[http://lua-api.factorio.com/latest/Concepts.html#MapSettings MapSettings]&amp;quot; prototype. Each section in the table below represents a nested sub-table in &amp;quot;map-settings&amp;quot;, where the LUA key listed is the key of the table, and all subsequent fields are part of the sub-table. See data/base/prototypes/map-settings.lua for a description of all attributes (some of that information has now been copied to this page).&lt;br /&gt;
&lt;br /&gt;
Fields marked with a check (✓) in the &amp;quot;GUI&amp;quot; column are configurable in the [[World_generator#How_it_works|new game map generator GUI]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
! * !! ✓ !! pollution !! Pollution&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]] || ✓ || enabled || Pollution enabled.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || diffusion_ratio || The amount of pollution that is diffused into neighboring chunk per second.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || min_to_diffuse || This many PUs must be on the chunk to start diffusing.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || ✓ || ageing || [Modifier of] the pollution eaten by a chunks tiles.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || expected_max_per_chunk || Anything bigger than this is visualised as this value.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || min_to_show_per_chunk || Anything lower than this (but &amp;gt; 0) is visualised as this value.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || ✓ || min_pollution_to_damage_trees || Any pollution above this amount starts to damage trees.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || pollution_with_max_forest_damage || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || pollution_per_tree_damage || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || pollution_restored_per_tree_damage || The amount of pollution absorbed by a tree when it is damaged by pollution.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || max_pollution_to_restore_trees || ???&lt;br /&gt;
|-&lt;br /&gt;
! * !! !! steering.default !! Steering (Default)&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || separation_force || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#bool|boolean]] || || force_unit_fuzzy_goto_behavior || ???&lt;br /&gt;
|-&lt;br /&gt;
! * !! !! steering.moving !! Steering (Moving)&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || separation_force || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#bool|boolean]] || || force_unit_fuzzy_goto_behavior || ???&lt;br /&gt;
|- &lt;br /&gt;
! * !! ✓ !! enemy_evolution !! Evolution&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#bool|boolean]] || ✓ || enabled || Evolution enabled.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || time_factor || Percent increase in the evolve factor for every second.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || destroy_factor || Percent increase in the evolve factor for every destroyed spawner.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || pollution_factor || Percent increase in the evolve factor for every 1000 PU [produced].&lt;br /&gt;
|- &lt;br /&gt;
! * !! ✓ !! enemy_expansion !! Enemy Expansion&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]] || ✓ || enabled || Enemy expansion enabled.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || max_expansion_distance || Distance in chunks from the furthest base around.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || friendly_base_influence_radius || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || enemy_building_influence_radius || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || building_coefficient ||+ rowspan=4 | Expansion algorithm. See LUA file for details.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || other_base_coefficient &lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || neighbouring_chunk_coefficient &lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || neighbouring_base_chunk_coefficient&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_colliding_tiles_coefficient || A chunk has to have at most this much percent unbuildable tiles for it to be considered a candidate.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || settler_group_min_size ||+ rowspan=2 | Size of the group that goes to build new base (in game this is multiplied by the evolution factor).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || settler_group_max_size&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || min_expansion_cooldown || Minimum cooldown.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || max_expansion_cooldown || Maximum cooldown.&lt;br /&gt;
|- &lt;br /&gt;
! * !! !! unit_group !! Unit Group&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || min_group_gathering_time ||+ rowspan=2 | A pollution triggered group&#039;s waiting time is a random time between min and max gathering time.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_group_gathering_time &lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_wait_time_for_late_members || After the gathering is finished the group can still wait for late members, but it doesn&#039;t accept new ones anymore.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_group_radius ||+ rowspan=2 | Limits for group radius.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || min_group_radius&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_member_speedup_when_behind || When a member falls behind the group he can speedup up till this much of his regular speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_member_slowdown_when_ahead || When a member gets ahead of its group, it will slow down to at most this factor of its speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_group_slowdown_factor || When members of a group are behind, the entire group will slow down to at most this factor of its max speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_group_member_fallback_factor || If a member falls behind more than this times the group radius, the group will slow down to max_group_slowdown_factor.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || member_disown_distance || If a member falls behind more than this time the group radius, it will be removed from the group.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || tick_tolerance_when_member_arrives || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_gathering_unit_groups || Maximum number of automatically created unit groups gathering for attack at any time.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_unit_group_size || Maximum size of an attack unit group. This only affects automatically-created unit groups.&lt;br /&gt;
|- &lt;br /&gt;
! * !! !! path_finder !! Path Finder&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || fwd2bwd_ratio || Defines whether we prefer forward (&amp;gt;1) or backward (&amp;lt;-1) or symmetrical (1) search.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || goal_pressure_ratio || When comparing nodes in open which one to check next, heuristic value is multiplied by this ratio. The higher the number the more is the search directed directly towards the goal.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]] || || use_path_cache || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_steps_worked_per_tick || When this is exhausted no more requests are allowed. At the moment the first path to exhaust this will be finished (even if it is hundreds of steps).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || short_cache_size ||+ rowspan=2 | Number of elements in the cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || long_cache_size&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || short_cache_min_cacheable_distance || Minimal distance to goal for path to be searched in short path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || short_cache_min_algo_steps_to_cache || Minimal number of algorithm steps for path to be inserted into the short path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || long_cache_min_cacheable_distance || Minimal distance to goal for path to be searched in long path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || cache_max_connect_to_cache_steps_multiplier || When searching for connection to path cache path, search at most for this number of steps times the initial estimate.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_accept_path_start_distance_ratio || When looking for path from cache make sure it doesn&#039;t start too far from requested start in relative distance terms.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_accept_path_end_distance_ratio || When looking for path from cache make sure it doesn&#039;t end too far from requested end. This is typically higher than accept value for the start because the end target can be moving.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || negative_cache_accept_path_start_distance_ratio || Same as cache_accept_path_start_distance_ratio, but used for negative cache queries.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || negative_cache_accept_path_end_distance_ratio || Same as cache_accept_path_end_distance_ratio, but used for negative cache queries.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_path_start_distance_rating_multiplier || When assigning rating to the best path this * start distances is considered.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_path_end_distance_rating_multiplier || When assigning rating to the best path this * end distances is considered. This is typically higher than value for the start to achieve better path end quality.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || stale_enemy_with_same_destination_collision_penalty || Somewhere along the path is stuck enemy we need to avoid. This is mainly to handle situations when units have arrived and are attacking the target, then units further in the back will use this and run around the target.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || ignore_moving_enemy_collision_distance || If there is a moving unit further than this we don&#039;t really care.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || enemy_with_different_destination_collision_penalty || Enemy is not moving/or is too close and has different destination.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || general_entity_collision_penalty || Simplification for now - collision with everything else is this.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || general_entity_subsequent_collision_penalty || Collision penalty for successors of positions that require destroy to reach.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_clients_to_accept_any_new_request || Uptil this amount any client will be served by the path finder (no estimate on the path length).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_clients_to_accept_short_new_request || From max_clients_to_accept_any_new_request till this one only those that have a short estimate will be served.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || direct_distance_to_consider_short_request || This is the &amp;quot;threshold&amp;quot; to decide what is short and what is not.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || short_request_max_steps || If a short request takes more than this many steps, it will be rescheduled as a long request.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || short_request_ratio || How many steps will be allocated to short requests each tick, as a ratio of all available steps per tick.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || min_steps_to_check_path_find_termination || Absolute minimum of steps that will be performed for every path find request no matter what.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || start_to_goal_cost_multiplier_to_terminate_path_find || If the amount of steps is higher than this times estimate of start to goal then path finding is terminated.&lt;br /&gt;
|-&lt;br /&gt;
| colspan = 4 | &#039;&#039;&#039;Note:&#039;&#039;&#039; The following fields do not use the special encapsulation method.&lt;br /&gt;
|-&lt;br /&gt;
! byte[4] !! !! . (root) !! Other&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_failed_behavior_count || If a behavior fails this many times, the enemy (or enemy group) is destroyed. This solves biters stuck within their own base.&lt;br /&gt;
|-&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Difficulty Settings ===&lt;br /&gt;
&lt;br /&gt;
This information is instead stored in the LUA structure at [http://lua-api.factorio.com/latest/LuaGameScript.html#LuaGameScript.difficulty_settings game.difficulty_settings], which is prototyped by [http://lua-api.factorio.com/latest/Concepts.html#DifficultySettings DifficultySettings]. These fields do not use the special encapsulation method noted above.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
! byte[10] !! ✓ !! difficulty_settings !! Difficulty Settings&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]] || ✓ || recipe_difficulty || Recipe difficulty. 0 for Normal, 1 for Expensive.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]] || ✓ || technology_difficulty || Technology difficulty. 0 for Normal, 1 for Expensive.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || ✓ || technology_price_multiplier || Technology price multiplier.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: these values are typically defined using the constants at [http://lua-api.factorio.com/latest/defines.html#defines.difficulty_settings defines.difficulty_settings].&lt;br /&gt;
&lt;br /&gt;
== Autoplace Control ==&lt;br /&gt;
See the page on [[World generator#Settings on the top row|world generation]] for more information on frequency, size, and richness.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| frequency&lt;br /&gt;
| Ore [[#Map_Gen_Size|frequency]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| size&lt;br /&gt;
| Ore [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| richness&lt;br /&gt;
| Ore [[#Map_Gen_Size|richness]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Map Gen Size ==&lt;br /&gt;
These are the values used for the frequencies, sizes, and richnesses of ores, water, and the starting area size. None is a valid value for all three options. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| None / None /None&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Very Low / Small / Poor&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Low / Small / Poor&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Normal / Medium / Regular&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| High / Big / Good&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Very High / Big / Good&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of the values in a triplet (such as &amp;quot;low&amp;quot;, &amp;quot;small&amp;quot;, and &amp;quot;poor&amp;quot;) are synonymous.&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Map_exchange_string_format&amp;diff=158284</id>
		<title>Map exchange string format</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Map_exchange_string_format&amp;diff=158284"/>
		<updated>2018-04-15T23:13:06Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* Map Gen Settings */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}} [[Category:Technical]]&lt;br /&gt;
This is a technical description of the map exchange string format, used to share map generating configurations with other users. This format is also used to store these settings inside save files for future chunk generation.&lt;br /&gt;
&lt;br /&gt;
Factorio line wraps the entire map exchange string after 57 characters during export (55 code characters + &#039;\r\n&#039;, which is fairly standard), but ignores all whitespace during import. The outer layer of the map exchange string format includes three angle brackets on either side: &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;quot; and &amp;quot;&amp;lt;&amp;lt;&amp;lt;&amp;quot;, which must be present for Factorio to accept the string. Between those two tokens is the map exchange data, encoded using base 64 as defined by [https://tools.ietf.org/html/rfc4648#section-4 RFC 4648] (or [https://tools.ietf.org/html/rfc3548#section-3 3548], [https://tools.ietf.org/html/rfc2535#page-42 2535], [https://tools.ietf.org/html/rfc2045#section-6.8 2045], [https://tools.ietf.org/html/rfc1421#section-4.3.2.4 1421], et al).&lt;br /&gt;
&lt;br /&gt;
See the page on [[Data types|data types]] for an explanation of the different types of data used in this document.&lt;br /&gt;
&lt;br /&gt;
== Factorio 0.16 and Beyond ==&lt;br /&gt;
&lt;br /&gt;
Beginning with Factorio 0.16.0, two important changes are made to the encoding of the map exchange string data:&lt;br /&gt;
&lt;br /&gt;
# The map exchange data inside the Base 64 encoding is further encoded using the [https://en.wikipedia.org/wiki/Zlib zlib] compression algorithm. The best way to determine the encoding is to first attempt to parse the map exchange string using zlib, and if that fails, try again using the 0.14+ rules.&lt;br /&gt;
# All numeric data fields longer than 1 byte are encoding using a custom-built variable length integer format described by Factorio developer [[User:Rseding91|Rseding]] at [[Data_types#Space_Optimized]]. For appropriate Factorio versions, &#039;&#039;&#039;all&#039;&#039;&#039; such data types (int, short, dict, etc) used in this document represent values encoded using this approach, &#039;&#039;unless otherwise specifically noted&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
After taking these considerations into your codec, proceed using the 0.14+ rules below. &lt;br /&gt;
&lt;br /&gt;
== Factorio 0.14 and Beyond ==&lt;br /&gt;
&lt;br /&gt;
This is the base map exchange string format for all Factorio versions 0.14.x and greater. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#short|short]][4]&lt;br /&gt;
| The [[Version_String_Format|version string]] of Factorio that generated this string, used to determine encoding format. This field is never [[Data_types#Space_Optimized|space optimized]].&lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| [[#Map_Gen_Settings|Map Gen Settings]]. Variable length. See linked section for information on how to parse. &lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| [[#0.15 Map Settings|0.15.x Map Settings]]. If present, this chunk consists of the remainder of the data (minus the checksum).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]]&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Cyclic_redundancy_check CRC32 checksum] of all preceding data, as defined by ANSI X3.66 / FIPS 71 / ITU-T V.42 (the same one used by [https://en.wikipedia.org/wiki/Zlib zlib], ethernet, etc.)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Map Gen Settings ==&lt;br /&gt;
&lt;br /&gt;
This format matches [http://lua-api.factorio.com/latest/Concepts.html#MapGenSettings MapGenSettings].&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;From&amp;quot; column denotes the earliest Factorio version in which that field is present. Most of them are currently labeled as &amp;quot;≤0.14&amp;quot;, which means the field was present from &#039;&#039;at least&#039;&#039; 0.14. If you have more specific information, please edit this page!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! LUA key !! From !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| terrain_segmentation&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[Water]] [[#Map_Gen_Size|frequency]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| water&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[Water]] [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#dict|dict]]&amp;lt;[[Data types#string|string]], [[#Autoplace_Control|byte[3]]]&amp;gt;&lt;br /&gt;
| autoplace_controls&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| An dictionary of [[#Autoplace_Control|Autoplace Controls]], with string keys, where the key represents the ore name.  Factorio doesn’t care what order this dictionary is in, but it always alphabetizes during export. Vanilla has seven resources: [[Coal|coal]], [[Copper ore|copper-ore]], [[Crude oil|crude-oil]], [[Enemies|enemy-base]], [[Iron ore|iron-ore]], [[Stone|stone]], and [[Uranium ore|uranium-ore]]. Unknown ores are ignored and missing ores are set to their defaults.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]]&lt;br /&gt;
| default_enable_all_autoplace_controls&lt;br /&gt;
| 0.16.0&lt;br /&gt;
| TODO...&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]]&lt;br /&gt;
| seed&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Map Seed|Map seed]].&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;none&#039;&#039;&lt;br /&gt;
| shift&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| This field isn&#039;t present in the binary format! But it is part of the LUA structure - by default it&#039;s derived from the map seed. I&#039;ll slap the algorithm here soon(tm).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]]&lt;br /&gt;
| width&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Map-width and -height|Map width]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]]&lt;br /&gt;
| height&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Map-width and -height|Map height]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| starting_area&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Starting area|Starting area]] [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]]&lt;br /&gt;
| peaceful_mode&lt;br /&gt;
| ≤0.14&lt;br /&gt;
| [[World generator#Peaceful mode|Peaceful mode]]. Enabled if set to 1, disabled otherwise.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 0.15 Map Settings ==&lt;br /&gt;
&lt;br /&gt;
All of the following data fields (until noted at the end) have a special encapsulation format. Preceding each value is a single byte that states whether or not the value is present. If the byte is equal to zero, then the field value is not present. Otherwise, then the field&#039;s value follows. &lt;br /&gt;
&lt;br /&gt;
In the LUA structure, this information is stored in the &amp;quot;[http://lua-api.factorio.com/latest/LuaGameScript.html#LuaGameScript.map_settings game.map_settings]&amp;quot; table, which is created by the &amp;quot;[http://lua-api.factorio.com/latest/Concepts.html#MapSettings MapSettings]&amp;quot; prototype. Each section in the table below represents a nested sub-table in &amp;quot;map-settings&amp;quot;, where the LUA key listed is the key of the table, and all subsequent fields are part of the sub-table. See data/base/prototypes/map-settings.lua for a description of all attributes (some of that information has now been copied to this page).&lt;br /&gt;
&lt;br /&gt;
Fields marked with a check (✓) in the &amp;quot;GUI&amp;quot; column are configurable in the [[World_generator#How_it_works|new game map generator GUI]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
! * !! ✓ !! pollution !! Pollution&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]] || ✓ || enabled || Pollution enabled.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || diffusion_ratio || The amount of pollution that is diffused into neighboring chunk per second.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || min_to_diffuse || This many PUs must be on the chunk to start diffusing.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || ✓ || ageing || [Modifier of] the pollution eaten by a chunks tiles.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || expected_max_per_chunk || Anything bigger than this is visualised as this value.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || min_to_show_per_chunk || Anything lower than this (but &amp;gt; 0) is visualised as this value.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || ✓ || min_pollution_to_damage_trees || Any pollution above this amount starts to damage trees.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || pollution_with_max_forest_damage || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || pollution_per_tree_damage || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || pollution_restored_per_tree_damage || The amount of pollution absorbed by a tree when it is damaged by pollution.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || max_pollution_to_restore_trees || ???&lt;br /&gt;
|-&lt;br /&gt;
! * !! !! steering.default !! Steering (Default)&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || separation_force || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#bool|boolean]] || || force_unit_fuzzy_goto_behavior || ???&lt;br /&gt;
|-&lt;br /&gt;
! * !! !! steering.moving !! Steering (Moving)&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || separation_force || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#bool|boolean]] || || force_unit_fuzzy_goto_behavior || ???&lt;br /&gt;
|- &lt;br /&gt;
! * !! ✓ !! enemy_evolution !! Evolution&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#bool|boolean]] || ✓ || enabled || Evolution enabled.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || time_factor || Percent increase in the evolve factor for every second.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || destroy_factor || Percent increase in the evolve factor for every destroyed spawner.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || pollution_factor || Percent increase in the evolve factor for every 1000 PU [produced].&lt;br /&gt;
|- &lt;br /&gt;
! * !! ✓ !! enemy_expansion !! Enemy Expansion&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]] || ✓ || enabled || Enemy expansion enabled.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || max_expansion_distance || Distance in chunks from the furthest base around.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || friendly_base_influence_radius || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || enemy_building_influence_radius || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || building_coefficient ||+ rowspan=4 | Expansion algorithm. See LUA file for details.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || other_base_coefficient &lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || neighbouring_chunk_coefficient &lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || neighbouring_base_chunk_coefficient&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_colliding_tiles_coefficient || A chunk has to have at most this much percent unbuildable tiles for it to be considered a candidate.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || settler_group_min_size ||+ rowspan=2 | Size of the group that goes to build new base (in game this is multiplied by the evolution factor).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || settler_group_max_size&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || min_expansion_cooldown || Minimum cooldown.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || max_expansion_cooldown || Maximum cooldown.&lt;br /&gt;
|- &lt;br /&gt;
! * !! !! unit_group !! Unit Group&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || min_group_gathering_time ||+ rowspan=2 | A pollution triggered group&#039;s waiting time is a random time between min and max gathering time.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_group_gathering_time &lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_wait_time_for_late_members || After the gathering is finished the group can still wait for late members, but it doesn&#039;t accept new ones anymore.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_group_radius ||+ rowspan=2 | Limits for group radius.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || min_group_radius&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_member_speedup_when_behind || When a member falls behind the group he can speedup up till this much of his regular speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_member_slowdown_when_ahead || When a member gets ahead of its group, it will slow down to at most this factor of its speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_group_slowdown_factor || When members of a group are behind, the entire group will slow down to at most this factor of its max speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_group_member_fallback_factor || If a member falls behind more than this times the group radius, the group will slow down to max_group_slowdown_factor.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || member_disown_distance || If a member falls behind more than this time the group radius, it will be removed from the group.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || tick_tolerance_when_member_arrives || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_gathering_unit_groups || Maximum number of automatically created unit groups gathering for attack at any time.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_unit_group_size || Maximum size of an attack unit group. This only affects automatically-created unit groups.&lt;br /&gt;
|- &lt;br /&gt;
! * !! !! path_finder !! Path Finder&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || fwd2bwd_ratio || Defines whether we prefer forward (&amp;gt;1) or backward (&amp;lt;-1) or symmetrical (1) search.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || goal_pressure_ratio || When comparing nodes in open which one to check next, heuristic value is multiplied by this ratio. The higher the number the more is the search directed directly towards the goal.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]] || || use_path_cache || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_steps_worked_per_tick || When this is exhausted no more requests are allowed. At the moment the first path to exhaust this will be finished (even if it is hundreds of steps).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || short_cache_size ||+ rowspan=2 | Number of elements in the cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || long_cache_size&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || short_cache_min_cacheable_distance || Minimal distance to goal for path to be searched in short path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || short_cache_min_algo_steps_to_cache || Minimal number of algorithm steps for path to be inserted into the short path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || long_cache_min_cacheable_distance || Minimal distance to goal for path to be searched in long path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || cache_max_connect_to_cache_steps_multiplier || When searching for connection to path cache path, search at most for this number of steps times the initial estimate.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_accept_path_start_distance_ratio || When looking for path from cache make sure it doesn&#039;t start too far from requested start in relative distance terms.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_accept_path_end_distance_ratio || When looking for path from cache make sure it doesn&#039;t end too far from requested end. This is typically higher than accept value for the start because the end target can be moving.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || negative_cache_accept_path_start_distance_ratio || Same as cache_accept_path_start_distance_ratio, but used for negative cache queries.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || negative_cache_accept_path_end_distance_ratio || Same as cache_accept_path_end_distance_ratio, but used for negative cache queries.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_path_start_distance_rating_multiplier || When assigning rating to the best path this * start distances is considered.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_path_end_distance_rating_multiplier || When assigning rating to the best path this * end distances is considered. This is typically higher than value for the start to achieve better path end quality.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || stale_enemy_with_same_destination_collision_penalty || Somewhere along the path is stuck enemy we need to avoid. This is mainly to handle situations when units have arrived and are attacking the target, then units further in the back will use this and run around the target.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || ignore_moving_enemy_collision_distance || If there is a moving unit further than this we don&#039;t really care.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || enemy_with_different_destination_collision_penalty || Enemy is not moving/or is too close and has different destination.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || general_entity_collision_penalty || Simplification for now - collision with everything else is this.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || general_entity_subsequent_collision_penalty || Collision penalty for successors of positions that require destroy to reach.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_clients_to_accept_any_new_request || Uptil this amount any client will be served by the path finder (no estimate on the path length).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_clients_to_accept_short_new_request || From max_clients_to_accept_any_new_request till this one only those that have a short estimate will be served.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || direct_distance_to_consider_short_request || This is the &amp;quot;threshold&amp;quot; to decide what is short and what is not.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || short_request_max_steps || If a short request takes more than this many steps, it will be rescheduled as a long request.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || short_request_ratio || How many steps will be allocated to short requests each tick, as a ratio of all available steps per tick.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || min_steps_to_check_path_find_termination || Absolute minimum of steps that will be performed for every path find request no matter what.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || start_to_goal_cost_multiplier_to_terminate_path_find || If the amount of steps is higher than this times estimate of start to goal then path finding is terminated.&lt;br /&gt;
|-&lt;br /&gt;
| colspan = 4 | &#039;&#039;&#039;Note:&#039;&#039;&#039; The following fields do not use the special encapsulation method.&lt;br /&gt;
|-&lt;br /&gt;
! byte[4] !! !! . (root) !! Other&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_failed_behavior_count || If a behavior fails this many times, the enemy (or enemy group) is destroyed. This solves biters stuck within their own base.&lt;br /&gt;
|-&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Difficulty Settings ===&lt;br /&gt;
&lt;br /&gt;
This information is instead stored in the LUA structure at [http://lua-api.factorio.com/latest/LuaGameScript.html#LuaGameScript.difficulty_settings game.difficulty_settings], which is prototyped by [http://lua-api.factorio.com/latest/Concepts.html#DifficultySettings DifficultySettings]. These fields do not use the special encapsulation method noted above.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
! byte[10] !! ✓ !! difficulty_settings !! Difficulty Settings&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]] || ✓ || recipe_difficulty || Recipe difficulty. 0 for Normal, 1 for Expensive.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]] || ✓ || technology_difficulty || Technology difficulty. 0 for Normal, 1 for Expensive.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || ✓ || technology_price_multiplier || Technology price multiplier.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: these values are typically defined using the constants at [http://lua-api.factorio.com/latest/defines.html#defines.difficulty_settings defines.difficulty_settings].&lt;br /&gt;
&lt;br /&gt;
== Autoplace Control ==&lt;br /&gt;
See the page on [[World generator#Settings on the top row|world generation]] for more information on frequency, size, and richness.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| frequency&lt;br /&gt;
| Ore [[#Map_Gen_Size|frequency]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| size&lt;br /&gt;
| Ore [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| richness&lt;br /&gt;
| Ore [[#Map_Gen_Size|richness]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Map Gen Size ==&lt;br /&gt;
These are the values used for the frequencies, sizes, and richnesses of ores, water, and the starting area size. None is a valid value for all three options. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| None / None /None&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Very Low / Small / Poor&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Low / Small / Poor&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Normal / Medium / Regular&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| High / Big / Good&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Very High / Big / Good&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of the values in a triplet (such as &amp;quot;low&amp;quot;, &amp;quot;small&amp;quot;, and &amp;quot;poor&amp;quot;) are synonymous.&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Map_exchange_string_format&amp;diff=158283</id>
		<title>Map exchange string format</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Map_exchange_string_format&amp;diff=158283"/>
		<updated>2018-04-15T22:43:29Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}} [[Category:Technical]]&lt;br /&gt;
This is a technical description of the map exchange string format, used to share map generating configurations with other users. This format is also used to store these settings inside save files for future chunk generation.&lt;br /&gt;
&lt;br /&gt;
Factorio line wraps the entire map exchange string after 57 characters during export (55 code characters + &#039;\r\n&#039;, which is fairly standard), but ignores all whitespace during import. The outer layer of the map exchange string format includes three angle brackets on either side: &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;quot; and &amp;quot;&amp;lt;&amp;lt;&amp;lt;&amp;quot;, which must be present for Factorio to accept the string. Between those two tokens is the map exchange data, encoded using base 64 as defined by [https://tools.ietf.org/html/rfc4648#section-4 RFC 4648] (or [https://tools.ietf.org/html/rfc3548#section-3 3548], [https://tools.ietf.org/html/rfc2535#page-42 2535], [https://tools.ietf.org/html/rfc2045#section-6.8 2045], [https://tools.ietf.org/html/rfc1421#section-4.3.2.4 1421], et al).&lt;br /&gt;
&lt;br /&gt;
See the page on [[Data types|data types]] for an explanation of the different types of data used in this document.&lt;br /&gt;
&lt;br /&gt;
== Factorio 0.16 and Beyond ==&lt;br /&gt;
&lt;br /&gt;
Beginning with Factorio 0.16.0, two important changes are made to the encoding of the map exchange string data:&lt;br /&gt;
&lt;br /&gt;
# The map exchange data inside the Base 64 encoding is further encoded using the [https://en.wikipedia.org/wiki/Zlib zlib] compression algorithm. The best way to determine the encoding is to first attempt to parse the map exchange string using zlib, and if that fails, try again using the 0.14+ rules.&lt;br /&gt;
# All numeric data fields longer than 1 byte are encoding using a custom-built variable length integer format described by Factorio developer [[User:Rseding91|Rseding]] at [[Data_types#Space_Optimized]]. For appropriate Factorio versions, &#039;&#039;&#039;all&#039;&#039;&#039; such data types (int, short, dict, etc) used in this document represent values encoded using this approach, &#039;&#039;unless otherwise specifically noted&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
After taking these considerations into your codec, proceed using the 0.14+ rules below. &lt;br /&gt;
&lt;br /&gt;
== Factorio 0.14 and Beyond ==&lt;br /&gt;
&lt;br /&gt;
This is the base map exchange string format for all Factorio versions 0.14.x and greater. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#short|short]][4]&lt;br /&gt;
| The [[Version_String_Format|version string]] of Factorio that generated this string, used to determine encoding format. This field is never [[Data_types#Space_Optimized|space optimized]].&lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| [[#Map_Gen_Settings|Map Gen Settings]]. Variable length. See linked section for information on how to parse. &lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| [[#0.15 Map Settings|0.15.x Map Settings]]. If present, this chunk consists of the remainder of the data (minus the checksum).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]]&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Cyclic_redundancy_check CRC32 checksum] of all preceding data, as defined by ANSI X3.66 / FIPS 71 / ITU-T V.42 (the same one used by [https://en.wikipedia.org/wiki/Zlib zlib], ethernet, etc.)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Map Gen Settings ==&lt;br /&gt;
&lt;br /&gt;
This format matches [http://lua-api.factorio.com/latest/Concepts.html#MapGenSettings MapGenSettings].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| terrain_segmentation&lt;br /&gt;
| [[Water]] [[#Map_Gen_Size|frequency]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| water&lt;br /&gt;
| [[Water]] [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#dict|dict]]&amp;lt;[[Data types#string|string]], [[#Autoplace_Control|byte[3]]]&amp;gt;&lt;br /&gt;
| autoplace_controls&lt;br /&gt;
| An dictionary of [[#Autoplace_Control|Autoplace Controls]], with string keys, where the key represents the ore name.  Factorio doesn’t care what order this dictionary is in, but it always alphabetizes during export. Vanilla has seven resources: [[Coal|coal]], [[Copper ore|copper-ore]], [[Crude oil|crude-oil]], [[Enemies|enemy-base]], [[Iron ore|iron-ore]], [[Stone|stone]], and [[Uranium ore|uranium-ore]]. Unknown ores are ignored and missing ores are set to their defaults.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]]&lt;br /&gt;
| seed&lt;br /&gt;
| [[World generator#Map Seed|Map seed]].&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;none&#039;&#039;&lt;br /&gt;
| shift&lt;br /&gt;
| This field isn&#039;t present in the binary format! But it is part of the LUA structure - by default it&#039;s derived from the map seed. I&#039;ll slap the algorithm here soon(tm).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]]&lt;br /&gt;
| width&lt;br /&gt;
| [[World generator#Map-width and -height|Map width]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]]&lt;br /&gt;
| height&lt;br /&gt;
| [[World generator#Map-width and -height|Map height]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| starting_area&lt;br /&gt;
| [[World generator#Starting area|Starting area]] [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]]&lt;br /&gt;
| peaceful_mode&lt;br /&gt;
| [[World generator#Peaceful mode|Peaceful mode]]. Enabled if set to 1, disabled otherwise.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 0.15 Map Settings ==&lt;br /&gt;
&lt;br /&gt;
All of the following data fields (until noted at the end) have a special encapsulation format. Preceding each value is a single byte that states whether or not the value is present. If the byte is equal to zero, then the field value is not present. Otherwise, then the field&#039;s value follows. &lt;br /&gt;
&lt;br /&gt;
In the LUA structure, this information is stored in the &amp;quot;[http://lua-api.factorio.com/latest/LuaGameScript.html#LuaGameScript.map_settings game.map_settings]&amp;quot; table, which is created by the &amp;quot;[http://lua-api.factorio.com/latest/Concepts.html#MapSettings MapSettings]&amp;quot; prototype. Each section in the table below represents a nested sub-table in &amp;quot;map-settings&amp;quot;, where the LUA key listed is the key of the table, and all subsequent fields are part of the sub-table. See data/base/prototypes/map-settings.lua for a description of all attributes (some of that information has now been copied to this page).&lt;br /&gt;
&lt;br /&gt;
Fields marked with a check (✓) in the &amp;quot;GUI&amp;quot; column are configurable in the [[World_generator#How_it_works|new game map generator GUI]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
! * !! ✓ !! pollution !! Pollution&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]] || ✓ || enabled || Pollution enabled.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || diffusion_ratio || The amount of pollution that is diffused into neighboring chunk per second.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || min_to_diffuse || This many PUs must be on the chunk to start diffusing.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || ✓ || ageing || [Modifier of] the pollution eaten by a chunks tiles.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || expected_max_per_chunk || Anything bigger than this is visualised as this value.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || min_to_show_per_chunk || Anything lower than this (but &amp;gt; 0) is visualised as this value.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || ✓ || min_pollution_to_damage_trees || Any pollution above this amount starts to damage trees.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || pollution_with_max_forest_damage || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || pollution_per_tree_damage || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || pollution_restored_per_tree_damage || The amount of pollution absorbed by a tree when it is damaged by pollution.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || max_pollution_to_restore_trees || ???&lt;br /&gt;
|-&lt;br /&gt;
! * !! !! steering.default !! Steering (Default)&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || separation_force || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#bool|boolean]] || || force_unit_fuzzy_goto_behavior || ???&lt;br /&gt;
|-&lt;br /&gt;
! * !! !! steering.moving !! Steering (Moving)&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || separation_force || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#bool|boolean]] || || force_unit_fuzzy_goto_behavior || ???&lt;br /&gt;
|- &lt;br /&gt;
! * !! ✓ !! enemy_evolution !! Evolution&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#bool|boolean]] || ✓ || enabled || Evolution enabled.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || time_factor || Percent increase in the evolve factor for every second.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || destroy_factor || Percent increase in the evolve factor for every destroyed spawner.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || pollution_factor || Percent increase in the evolve factor for every 1000 PU [produced].&lt;br /&gt;
|- &lt;br /&gt;
! * !! ✓ !! enemy_expansion !! Enemy Expansion&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]] || ✓ || enabled || Enemy expansion enabled.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || max_expansion_distance || Distance in chunks from the furthest base around.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || friendly_base_influence_radius || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || enemy_building_influence_radius || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || building_coefficient ||+ rowspan=4 | Expansion algorithm. See LUA file for details.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || other_base_coefficient &lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || neighbouring_chunk_coefficient &lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || neighbouring_base_chunk_coefficient&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_colliding_tiles_coefficient || A chunk has to have at most this much percent unbuildable tiles for it to be considered a candidate.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || settler_group_min_size ||+ rowspan=2 | Size of the group that goes to build new base (in game this is multiplied by the evolution factor).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || settler_group_max_size&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || min_expansion_cooldown || Minimum cooldown.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || max_expansion_cooldown || Maximum cooldown.&lt;br /&gt;
|- &lt;br /&gt;
! * !! !! unit_group !! Unit Group&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || min_group_gathering_time ||+ rowspan=2 | A pollution triggered group&#039;s waiting time is a random time between min and max gathering time.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_group_gathering_time &lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_wait_time_for_late_members || After the gathering is finished the group can still wait for late members, but it doesn&#039;t accept new ones anymore.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_group_radius ||+ rowspan=2 | Limits for group radius.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || min_group_radius&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_member_speedup_when_behind || When a member falls behind the group he can speedup up till this much of his regular speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_member_slowdown_when_ahead || When a member gets ahead of its group, it will slow down to at most this factor of its speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_group_slowdown_factor || When members of a group are behind, the entire group will slow down to at most this factor of its max speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_group_member_fallback_factor || If a member falls behind more than this times the group radius, the group will slow down to max_group_slowdown_factor.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || member_disown_distance || If a member falls behind more than this time the group radius, it will be removed from the group.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || tick_tolerance_when_member_arrives || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_gathering_unit_groups || Maximum number of automatically created unit groups gathering for attack at any time.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_unit_group_size || Maximum size of an attack unit group. This only affects automatically-created unit groups.&lt;br /&gt;
|- &lt;br /&gt;
! * !! !! path_finder !! Path Finder&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || fwd2bwd_ratio || Defines whether we prefer forward (&amp;gt;1) or backward (&amp;lt;-1) or symmetrical (1) search.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || goal_pressure_ratio || When comparing nodes in open which one to check next, heuristic value is multiplied by this ratio. The higher the number the more is the search directed directly towards the goal.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]] || || use_path_cache || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_steps_worked_per_tick || When this is exhausted no more requests are allowed. At the moment the first path to exhaust this will be finished (even if it is hundreds of steps).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || short_cache_size ||+ rowspan=2 | Number of elements in the cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || long_cache_size&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || short_cache_min_cacheable_distance || Minimal distance to goal for path to be searched in short path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || short_cache_min_algo_steps_to_cache || Minimal number of algorithm steps for path to be inserted into the short path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || long_cache_min_cacheable_distance || Minimal distance to goal for path to be searched in long path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || cache_max_connect_to_cache_steps_multiplier || When searching for connection to path cache path, search at most for this number of steps times the initial estimate.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_accept_path_start_distance_ratio || When looking for path from cache make sure it doesn&#039;t start too far from requested start in relative distance terms.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_accept_path_end_distance_ratio || When looking for path from cache make sure it doesn&#039;t end too far from requested end. This is typically higher than accept value for the start because the end target can be moving.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || negative_cache_accept_path_start_distance_ratio || Same as cache_accept_path_start_distance_ratio, but used for negative cache queries.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || negative_cache_accept_path_end_distance_ratio || Same as cache_accept_path_end_distance_ratio, but used for negative cache queries.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_path_start_distance_rating_multiplier || When assigning rating to the best path this * start distances is considered.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_path_end_distance_rating_multiplier || When assigning rating to the best path this * end distances is considered. This is typically higher than value for the start to achieve better path end quality.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || stale_enemy_with_same_destination_collision_penalty || Somewhere along the path is stuck enemy we need to avoid. This is mainly to handle situations when units have arrived and are attacking the target, then units further in the back will use this and run around the target.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || ignore_moving_enemy_collision_distance || If there is a moving unit further than this we don&#039;t really care.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || enemy_with_different_destination_collision_penalty || Enemy is not moving/or is too close and has different destination.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || general_entity_collision_penalty || Simplification for now - collision with everything else is this.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || general_entity_subsequent_collision_penalty || Collision penalty for successors of positions that require destroy to reach.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_clients_to_accept_any_new_request || Uptil this amount any client will be served by the path finder (no estimate on the path length).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_clients_to_accept_short_new_request || From max_clients_to_accept_any_new_request till this one only those that have a short estimate will be served.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || direct_distance_to_consider_short_request || This is the &amp;quot;threshold&amp;quot; to decide what is short and what is not.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || short_request_max_steps || If a short request takes more than this many steps, it will be rescheduled as a long request.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || short_request_ratio || How many steps will be allocated to short requests each tick, as a ratio of all available steps per tick.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || min_steps_to_check_path_find_termination || Absolute minimum of steps that will be performed for every path find request no matter what.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || start_to_goal_cost_multiplier_to_terminate_path_find || If the amount of steps is higher than this times estimate of start to goal then path finding is terminated.&lt;br /&gt;
|-&lt;br /&gt;
| colspan = 4 | &#039;&#039;&#039;Note:&#039;&#039;&#039; The following fields do not use the special encapsulation method.&lt;br /&gt;
|-&lt;br /&gt;
! byte[4] !! !! . (root) !! Other&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_failed_behavior_count || If a behavior fails this many times, the enemy (or enemy group) is destroyed. This solves biters stuck within their own base.&lt;br /&gt;
|-&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Difficulty Settings ===&lt;br /&gt;
&lt;br /&gt;
This information is instead stored in the LUA structure at [http://lua-api.factorio.com/latest/LuaGameScript.html#LuaGameScript.difficulty_settings game.difficulty_settings], which is prototyped by [http://lua-api.factorio.com/latest/Concepts.html#DifficultySettings DifficultySettings]. These fields do not use the special encapsulation method noted above.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
! byte[10] !! ✓ !! difficulty_settings !! Difficulty Settings&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]] || ✓ || recipe_difficulty || Recipe difficulty. 0 for Normal, 1 for Expensive.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]] || ✓ || technology_difficulty || Technology difficulty. 0 for Normal, 1 for Expensive.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || ✓ || technology_price_multiplier || Technology price multiplier.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: these values are typically defined using the constants at [http://lua-api.factorio.com/latest/defines.html#defines.difficulty_settings defines.difficulty_settings].&lt;br /&gt;
&lt;br /&gt;
== Autoplace Control ==&lt;br /&gt;
See the page on [[World generator#Settings on the top row|world generation]] for more information on frequency, size, and richness.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| frequency&lt;br /&gt;
| Ore [[#Map_Gen_Size|frequency]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| size&lt;br /&gt;
| Ore [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| richness&lt;br /&gt;
| Ore [[#Map_Gen_Size|richness]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Map Gen Size ==&lt;br /&gt;
These are the values used for the frequencies, sizes, and richnesses of ores, water, and the starting area size. None is a valid value for all three options. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| None / None /None&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Very Low / Small / Poor&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Low / Small / Poor&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Normal / Medium / Regular&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| High / Big / Good&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Very High / Big / Good&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of the values in a triplet (such as &amp;quot;low&amp;quot;, &amp;quot;small&amp;quot;, and &amp;quot;poor&amp;quot;) are synonymous.&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Map_exchange_string_format&amp;diff=158282</id>
		<title>Map exchange string format</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Map_exchange_string_format&amp;diff=158282"/>
		<updated>2018-04-15T21:54:34Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}} [[Category:Technical]]&lt;br /&gt;
This is a technical description of the map exchange string format, used to share map generating configurations with other users. This format is also used to store these settings inside save files for future chunk generation.&lt;br /&gt;
&lt;br /&gt;
Factorio line wraps the entire map exchange string after 57 characters during export (55 code characters + &#039;\r\n&#039;, which is fairly standard), but ignores all whitespace during import. The outer layer of the map exchange string format includes three angle brackets on either side: &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;quot; and &amp;quot;&amp;lt;&amp;lt;&amp;lt;&amp;quot;, which must be present for Factorio to accept the string. Between those two tokens is the map exchange data, encoded using base 64 as defined by [https://tools.ietf.org/html/rfc4648#section-4 RFC 4648] (or [https://tools.ietf.org/html/rfc3548#section-3 3548], [https://tools.ietf.org/html/rfc2535#page-42 2535], [https://tools.ietf.org/html/rfc2045#section-6.8 2045], [https://tools.ietf.org/html/rfc1421#section-4.3.2.4 1421], et al). Beginning with Factorio 0.16, the data is further encoded using the [https://en.wikipedia.org/wiki/Zlib zlib] compression algorithm. &lt;br /&gt;
&lt;br /&gt;
See the page on [[Data types|data types]] for an explanation of the different types of data used in this document.&lt;br /&gt;
&lt;br /&gt;
== Factorio 0.14 and Beyond ==&lt;br /&gt;
&lt;br /&gt;
This is the base map exchange string format for all Factorio versions 0.14.x and greater. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#short|short]][4]&lt;br /&gt;
| The [[Version_String_Format|version string]] of Factorio that generated this string, used to determine encoding format.&lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| [[#Map_Gen_Settings|Map Gen Settings]]. Variable length. See linked section for information on how to parse. &lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| [[#0.15 Map Settings|0.15.x Map Settings]]. If present, this chunk consists of the remainder of the data (minus the checksum).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]]&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Cyclic_redundancy_check CRC32 checksum] of all preceding data, as defined by ANSI X3.66 / FIPS 71 / ITU-T V.42 (the same one used by [https://en.wikipedia.org/wiki/Zlib zlib], ethernet, etc.)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Map Gen Settings ==&lt;br /&gt;
&lt;br /&gt;
This format matches [http://lua-api.factorio.com/latest/Concepts.html#MapGenSettings MapGenSettings].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| terrain_segmentation&lt;br /&gt;
| [[Water]] [[#Map_Gen_Size|frequency]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| water&lt;br /&gt;
| [[Water]] [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#dict|dict]]&amp;lt;[[Data types#string|string]], [[#Autoplace_Control|byte[3]]]&amp;gt;&lt;br /&gt;
| autoplace_controls&lt;br /&gt;
| An dictionary of [[#Autoplace_Control|Autoplace Controls]], with string keys, where the key represents the ore name.  Factorio doesn’t care what order this dictionary is in, but it always alphabetizes during export. Vanilla has seven resources: [[Coal|coal]], [[Copper ore|copper-ore]], [[Crude oil|crude-oil]], [[Enemies|enemy-base]], [[Iron ore|iron-ore]], [[Stone|stone]], and [[Uranium ore|uranium-ore]]. Unknown ores are ignored and missing ores are set to their defaults.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]]&lt;br /&gt;
| seed&lt;br /&gt;
| [[World generator#Map Seed|Map seed]].&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;none&#039;&#039;&lt;br /&gt;
| shift&lt;br /&gt;
| This field isn&#039;t present in the binary format! But it is part of the LUA structure - by default it&#039;s derived from the map seed. I&#039;ll slap the algorithm here soon(tm).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]]&lt;br /&gt;
| width&lt;br /&gt;
| [[World generator#Map-width and -height|Map width]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]]&lt;br /&gt;
| height&lt;br /&gt;
| [[World generator#Map-width and -height|Map height]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| starting_area&lt;br /&gt;
| [[World generator#Starting area|Starting area]] [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]]&lt;br /&gt;
| peaceful_mode&lt;br /&gt;
| [[World generator#Peaceful mode|Peaceful mode]]. Enabled if set to 1, disabled otherwise.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 0.15 Map Settings ==&lt;br /&gt;
&lt;br /&gt;
All of the following data fields (until noted at the end) have a special encapsulation format. Preceding each value is a single byte that states whether or not the value is present. If the byte is equal to zero, then the field value is not present. Otherwise, then the field&#039;s value follows. &lt;br /&gt;
&lt;br /&gt;
In the LUA structure, this information is stored in the &amp;quot;[http://lua-api.factorio.com/latest/LuaGameScript.html#LuaGameScript.map_settings game.map_settings]&amp;quot; table, which is created by the &amp;quot;[http://lua-api.factorio.com/latest/Concepts.html#MapSettings MapSettings]&amp;quot; prototype. Each section in the table below represents a nested sub-table in &amp;quot;map-settings&amp;quot;, where the LUA key listed is the key of the table, and all subsequent fields are part of the sub-table. See data/base/prototypes/map-settings.lua for a description of all attributes (some of that information has now been copied to this page).&lt;br /&gt;
&lt;br /&gt;
Fields marked with a check (✓) in the &amp;quot;GUI&amp;quot; column are configurable in the [[World_generator#How_it_works|new game map generator GUI]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
! * !! ✓ !! pollution !! Pollution&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]] || ✓ || enabled || Pollution enabled.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || diffusion_ratio || The amount of pollution that is diffused into neighboring chunk per second.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || min_to_diffuse || This many PUs must be on the chunk to start diffusing.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || ✓ || ageing || [Modifier of] the pollution eaten by a chunks tiles.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || expected_max_per_chunk || Anything bigger than this is visualised as this value.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || min_to_show_per_chunk || Anything lower than this (but &amp;gt; 0) is visualised as this value.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || ✓ || min_pollution_to_damage_trees || Any pollution above this amount starts to damage trees.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || pollution_with_max_forest_damage || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || pollution_per_tree_damage || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || pollution_restored_per_tree_damage || The amount of pollution absorbed by a tree when it is damaged by pollution.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || max_pollution_to_restore_trees || ???&lt;br /&gt;
|-&lt;br /&gt;
! * !! !! steering.default !! Steering (Default)&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || separation_force || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#bool|boolean]] || || force_unit_fuzzy_goto_behavior || ???&lt;br /&gt;
|-&lt;br /&gt;
! * !! !! steering.moving !! Steering (Moving)&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || || separation_force || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#bool|boolean]] || || force_unit_fuzzy_goto_behavior || ???&lt;br /&gt;
|- &lt;br /&gt;
! * !! ✓ !! enemy_evolution !! Evolution&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#bool|boolean]] || ✓ || enabled || Evolution enabled.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || time_factor || Percent increase in the evolve factor for every second.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || destroy_factor || Percent increase in the evolve factor for every destroyed spawner.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data types#double|double]] || ✓ || pollution_factor || Percent increase in the evolve factor for every 1000 PU [produced].&lt;br /&gt;
|- &lt;br /&gt;
! * !! ✓ !! enemy_expansion !! Enemy Expansion&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]] || ✓ || enabled || Enemy expansion enabled.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || max_expansion_distance || Distance in chunks from the furthest base around.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || friendly_base_influence_radius || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || enemy_building_influence_radius || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || building_coefficient ||+ rowspan=4 | Expansion algorithm. See LUA file for details.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || other_base_coefficient &lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || neighbouring_chunk_coefficient &lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || neighbouring_base_chunk_coefficient&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_colliding_tiles_coefficient || A chunk has to have at most this much percent unbuildable tiles for it to be considered a candidate.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || settler_group_min_size ||+ rowspan=2 | Size of the group that goes to build new base (in game this is multiplied by the evolution factor).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || settler_group_max_size&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || min_expansion_cooldown || Minimum cooldown.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || ✓ || max_expansion_cooldown || Maximum cooldown.&lt;br /&gt;
|- &lt;br /&gt;
! * !! !! unit_group !! Unit Group&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || min_group_gathering_time ||+ rowspan=2 | A pollution triggered group&#039;s waiting time is a random time between min and max gathering time.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_group_gathering_time &lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_wait_time_for_late_members || After the gathering is finished the group can still wait for late members, but it doesn&#039;t accept new ones anymore.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_group_radius ||+ rowspan=2 | Limits for group radius.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || min_group_radius&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_member_speedup_when_behind || When a member falls behind the group he can speedup up till this much of his regular speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_member_slowdown_when_ahead || When a member gets ahead of its group, it will slow down to at most this factor of its speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_group_slowdown_factor || When members of a group are behind, the entire group will slow down to at most this factor of its max speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_group_member_fallback_factor || If a member falls behind more than this times the group radius, the group will slow down to max_group_slowdown_factor.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || member_disown_distance || If a member falls behind more than this time the group radius, it will be removed from the group.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || tick_tolerance_when_member_arrives || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_gathering_unit_groups || Maximum number of automatically created unit groups gathering for attack at any time.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_unit_group_size || Maximum size of an attack unit group. This only affects automatically-created unit groups.&lt;br /&gt;
|- &lt;br /&gt;
! * !! !! path_finder !! Path Finder&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || fwd2bwd_ratio || Defines whether we prefer forward (&amp;gt;1) or backward (&amp;lt;-1) or symmetrical (1) search.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || goal_pressure_ratio || When comparing nodes in open which one to check next, heuristic value is multiplied by this ratio. The higher the number the more is the search directed directly towards the goal.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#bool|boolean]] || || use_path_cache || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || max_steps_worked_per_tick || When this is exhausted no more requests are allowed. At the moment the first path to exhaust this will be finished (even if it is hundreds of steps).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || short_cache_size ||+ rowspan=2 | Number of elements in the cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || long_cache_size&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || short_cache_min_cacheable_distance || Minimal distance to goal for path to be searched in short path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || short_cache_min_algo_steps_to_cache || Minimal number of algorithm steps for path to be inserted into the short path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || long_cache_min_cacheable_distance || Minimal distance to goal for path to be searched in long path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || cache_max_connect_to_cache_steps_multiplier || When searching for connection to path cache path, search at most for this number of steps times the initial estimate.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_accept_path_start_distance_ratio || When looking for path from cache make sure it doesn&#039;t start too far from requested start in relative distance terms.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_accept_path_end_distance_ratio || When looking for path from cache make sure it doesn&#039;t end too far from requested end. This is typically higher than accept value for the start because the end target can be moving.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || negative_cache_accept_path_start_distance_ratio || Same as cache_accept_path_start_distance_ratio, but used for negative cache queries.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || negative_cache_accept_path_end_distance_ratio || Same as cache_accept_path_end_distance_ratio, but used for negative cache queries.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_path_start_distance_rating_multiplier || When assigning rating to the best path this * start distances is considered.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || cache_path_end_distance_rating_multiplier || When assigning rating to the best path this * end distances is considered. This is typically higher than value for the start to achieve better path end quality.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || stale_enemy_with_same_destination_collision_penalty || Somewhere along the path is stuck enemy we need to avoid. This is mainly to handle situations when units have arrived and are attacking the target, then units further in the back will use this and run around the target.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || ignore_moving_enemy_collision_distance || If there is a moving unit further than this we don&#039;t really care.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || enemy_with_different_destination_collision_penalty || Enemy is not moving/or is too close and has different destination.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || general_entity_collision_penalty || Simplification for now - collision with everything else is this.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || general_entity_subsequent_collision_penalty || Collision penalty for successors of positions that require destroy to reach.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_clients_to_accept_any_new_request || Uptil this amount any client will be served by the path finder (no estimate on the path length).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_clients_to_accept_short_new_request || From max_clients_to_accept_any_new_request till this one only those that have a short estimate will be served.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || direct_distance_to_consider_short_request || This is the &amp;quot;threshold&amp;quot; to decide what is short and what is not.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || short_request_max_steps || If a short request takes more than this many steps, it will be rescheduled as a long request.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || short_request_ratio || How many steps will be allocated to short requests each tick, as a ratio of all available steps per tick.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || min_steps_to_check_path_find_termination || Absolute minimum of steps that will be performed for every path find request no matter what.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || || start_to_goal_cost_multiplier_to_terminate_path_find || If the amount of steps is higher than this times estimate of start to goal then path finding is terminated.&lt;br /&gt;
|-&lt;br /&gt;
| colspan = 4 | &#039;&#039;&#039;Note:&#039;&#039;&#039; The following fields do not use the special encapsulation method.&lt;br /&gt;
|-&lt;br /&gt;
! byte[4] !! !! . (root) !! Other&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#int|int]] || || max_failed_behavior_count || If a behavior fails this many times, the enemy (or enemy group) is destroyed. This solves biters stuck within their own base.&lt;br /&gt;
|-&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Difficulty Settings ===&lt;br /&gt;
&lt;br /&gt;
This information is instead stored in the LUA structure at [http://lua-api.factorio.com/latest/LuaGameScript.html#LuaGameScript.difficulty_settings game.difficulty_settings], which is prototyped by [http://lua-api.factorio.com/latest/Concepts.html#DifficultySettings DifficultySettings]. These fields do not use the special encapsulation method noted above.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
! byte[10] !! ✓ !! difficulty_settings !! Difficulty Settings&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]] || ✓ || recipe_difficulty || Recipe difficulty. 0 for Normal, 1 for Expensive.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]] || ✓ || technology_difficulty || Technology difficulty. 0 for Normal, 1 for Expensive.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#double|double]] || ✓ || technology_price_multiplier || Technology price multiplier.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: these values are typically defined using the constants at [http://lua-api.factorio.com/latest/defines.html#defines.difficulty_settings defines.difficulty_settings].&lt;br /&gt;
&lt;br /&gt;
== Autoplace Control ==&lt;br /&gt;
See the page on [[World generator#Settings on the top row|world generation]] for more information on frequency, size, and richness.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| frequency&lt;br /&gt;
| Ore [[#Map_Gen_Size|frequency]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| size&lt;br /&gt;
| Ore [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data types#byte|byte]]&lt;br /&gt;
| richness&lt;br /&gt;
| Ore [[#Map_Gen_Size|richness]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Map Gen Size ==&lt;br /&gt;
These are the values used for the frequencies, sizes, and richnesses of ores, water, and the starting area size. None is a valid value for all three options. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| None / None /None&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Very Low / Small / Poor&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Low / Small / Poor&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Normal / Medium / Regular&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| High / Big / Good&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Very High / Big / Good&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of the values in a triplet (such as &amp;quot;low&amp;quot;, &amp;quot;small&amp;quot;, and &amp;quot;poor&amp;quot;) are synonymous.&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Mod_portal_API&amp;diff=155975</id>
		<title>Mod portal API</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Mod_portal_API&amp;diff=155975"/>
		<updated>2018-02-24T15:44:19Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* Endpoints */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
&lt;br /&gt;
The Mod Portal API is used to both browse and download all mods available on the [https://mods.factorio.com/ official Factorio mod portal]. Using the API does not require any kind of authentication or account information and can be viewed simply by following the URLs below in any web browser.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://mods.factorio.com/api/mods&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More detailed information about a particular mod can be obtained by retrieving the following URL, where {name} is the mod&#039;s name field in the result object.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://mods.factorio.com/api/mods/{name}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Endpoints ==&lt;br /&gt;
&lt;br /&gt;
TODO!!! Note: The mod portal has been partially rewritten, and much of this section is out of date. Most of the parameters have been shifted to url path strings. Documentation needs to be updated, I&#039;ll do it soon(tm)! --[[User:Lexxy Fox|Lexxy Fox]] ([[User talk:Lexxy Fox|talk]]) 15:44, 24 February 2018 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== /api/mods ===&lt;br /&gt;
&lt;br /&gt;
GET Parameters:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Values !! Description&lt;br /&gt;
|-&lt;br /&gt;
| order ||updated, alpha, top||How to order the mods, by most recently updated, alphabetically, or by most downloaded. &#039;&#039;&#039;(Removed, not working anymore)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| owner ||||&lt;br /&gt;
|-&lt;br /&gt;
| page ||{an integer}||Page number you would like to show. Makes it so you can see a certain part of the list without getting detail on all&lt;br /&gt;
|-&lt;br /&gt;
| page_size ||{an integer}||The amount of results to show in your search&lt;br /&gt;
|-&lt;br /&gt;
| q ||{a string}||Name/Partial Name of mod you want to search &#039;&#039;&#039;(Removed, not working anymore)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| tags ||||&lt;br /&gt;
|-&lt;br /&gt;
| namelist || {array of strings} || Return only mods that match the given names. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Returns [[#Mod List Response]]&lt;br /&gt;
&lt;br /&gt;
=== /api/mods/{mod_name} ===&lt;br /&gt;
&lt;br /&gt;
=== /api/messages ===&lt;br /&gt;
&lt;br /&gt;
GET Parameters:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Values !! Description&lt;br /&gt;
|-&lt;br /&gt;
| page_size || {an integer} || How many messages on one page&lt;br /&gt;
|-&lt;br /&gt;
| page || {an integer} || Which page of messages&lt;br /&gt;
|-&lt;br /&gt;
| mod || {name of mod} || Name of the specific mod that you want messages for&lt;br /&gt;
|-&lt;br /&gt;
| tag || {a letter} || The letter that represents the different message tags&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== /api/users ===&lt;br /&gt;
&lt;br /&gt;
== JSON Object Types ==&lt;br /&gt;
&lt;br /&gt;
=== Mod List Response ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| pagination || [[#Pagination|Pagination]] || See [[#Pagination]]&lt;br /&gt;
|-&lt;br /&gt;
| results || [[#Result Entry|Result]][] || A list of mods, matching any filters you specified.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pagination ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| count || Integer || Total number of mods that match your specified filters.&lt;br /&gt;
|-&lt;br /&gt;
| links || [[#Pagination_Links|Links]] || Utility links to mod portal api requests, preserving all filters and search queries.&lt;br /&gt;
|-&lt;br /&gt;
| page || Integer || The current page number.&lt;br /&gt;
|-&lt;br /&gt;
| page_count || Integer || The total number of pages returned.&lt;br /&gt;
|-&lt;br /&gt;
| page_size || Integer || The number of results per page.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pagination Links ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| first || String(URL) || URL to the first page of the results, or null if you&#039;re already on the first page.&lt;br /&gt;
|- &lt;br /&gt;
| prev || String(URL) || URL to the previous page of the results, or null if you&#039;re already on the first page.&lt;br /&gt;
|-&lt;br /&gt;
| next || String(URL) || URL to the next page of the results, or null if you&#039;re already on the last page.&lt;br /&gt;
|-&lt;br /&gt;
| last || String(URL) || URL to the last page of the results, or null if you&#039;re already on the last page.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Result Entry ===&lt;br /&gt;
&lt;br /&gt;
Fields returned by the api/mods endpoint are marked with a check (✓) in the &amp;quot;Short&amp;quot; column, and those returned the the api/mods/{name} endpoint are marked with a check in the &amp;quot;Full&amp;quot; column.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | Short !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | Full !! Description&lt;br /&gt;
|-&lt;br /&gt;
| created_at || String(ISO 8601) || ✓ || ✓&lt;br /&gt;
| The datetime the mod was uploaded, in the full ISO 8601 format, with a space separator instead of &#039;T&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| current_user_rating || Null || ✓ || ✓&lt;br /&gt;
| Doesn&#039;t seem to be implemented yet. Always null.&lt;br /&gt;
|-&lt;br /&gt;
| description || String || || ✓&lt;br /&gt;
| A longer description of the mod, in text only format.&lt;br /&gt;
|-&lt;br /&gt;
| description_html || String(HTML) || || ✓&lt;br /&gt;
| A longer description of the mod, with HTML tags.&lt;br /&gt;
|-&lt;br /&gt;
| downloads_count || Integer || ✓ || ✓&lt;br /&gt;
| Number of downloads.&lt;br /&gt;
|-&lt;br /&gt;
| first_media_file || [[#Media Files|Media File]] || ✓ || &lt;br /&gt;
| The first media file in the &amp;quot;media_files&amp;quot; list.&lt;br /&gt;
|-&lt;br /&gt;
| game_versions || String[] || ✓ || ✓&lt;br /&gt;
| A list of major Factorio version strings (e.g. &amp;quot;0.13&amp;quot;) starting with 0.13 that the mod is compatible with, &#039;&#039;in addition to&#039;&#039; the version(s) found in &amp;quot;latest_release&amp;quot; / &amp;quot;releases&amp;quot;. &lt;br /&gt;
|-&lt;br /&gt;
| github_path || String || ✓ || ✓&lt;br /&gt;
| A link to the mod&#039;s github project page, just prepend &amp;quot;github.com/&amp;quot;. Can be blank (&amp;quot;&amp;quot;).&lt;br /&gt;
|-&lt;br /&gt;
| homepage || String || ✓ || ✓&lt;br /&gt;
| Usually a URL to the mod&#039;s main project page, but can be any string.&lt;br /&gt;
|-&lt;br /&gt;
| id || Integer || ✓ || ✓&lt;br /&gt;
| A numerical mod ID used to identify the mod in other API endpoints.&lt;br /&gt;
|-&lt;br /&gt;
| latest_release || [[#Releases|Release]] || ✓ || &lt;br /&gt;
| The latest version of the mod available for download. See [[#Releases]]&lt;br /&gt;
|-&lt;br /&gt;
| license_flags || Integer(11 bit) || ✓ || ✓&lt;br /&gt;
| A bit field describing what permissions the mod&#039;s license grants. See [[#License Flags]]&lt;br /&gt;
|-&lt;br /&gt;
| license_name || String || ✓ || ✓&lt;br /&gt;
| The mod&#039;s license name.&lt;br /&gt;
|-&lt;br /&gt;
| license_url || String || ✓ || ✓&lt;br /&gt;
| A URL link to the full license agreement. Can be any string in case of custom licenses.&lt;br /&gt;
|-&lt;br /&gt;
| media_files || [[#Media Files|Media File]][] || || ✓&lt;br /&gt;
| A list of media files, such as screen shots of the mod in action. See [[#Media Files]].&lt;br /&gt;
|-&lt;br /&gt;
| name || String || ✓ || ✓&lt;br /&gt;
| The mod&#039;s machine-readable ID string.&lt;br /&gt;
|-&lt;br /&gt;
| owner || String || ✓ || ✓&lt;br /&gt;
| The Factorio username of the mod&#039;s author.&lt;br /&gt;
|-&lt;br /&gt;
| ratings_count || Integer || ✓ || ✓&lt;br /&gt;
| Doesn&#039;t seem to be implemented yet. Always 0.&lt;br /&gt;
|-&lt;br /&gt;
| releases || [[#Releases|Release]][] || || ✓&lt;br /&gt;
| A list of different versions of the mod available for download. See [[#Releases]]&lt;br /&gt;
|-&lt;br /&gt;
| summary || String || ✓ || ✓&lt;br /&gt;
| A shorter mod description.&lt;br /&gt;
|-&lt;br /&gt;
| tags || [[#Tags|Tag]][] || ✓ || ✓&lt;br /&gt;
| A list of tag objects that categorize the mod. See [[#Tags]].&lt;br /&gt;
|-&lt;br /&gt;
| title || String || ✓ || ✓&lt;br /&gt;
| The mod&#039;s human-readable name.&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || String(ISO 8601) || ✓ || ✓&lt;br /&gt;
| The datetime the mod was last updated, in the full ISO 8601 format, with a space separator instead of &#039;T&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| visits_count || Integer || ✓ || ✓&lt;br /&gt;
| The number of times the mod was viewed, but perhaps only counted on the web interface???&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== License Flags ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;license_flags&amp;quot; is an 11 bit number that describe generally what permissions the mod&#039;s license grants.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 2&amp;lt;sup&amp;gt;n&amp;lt;/sup&amp;gt; !! Title !! Description&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3 | Permissions&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Commercial Use || This software and derivatives may be used for commercial purposes&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Modification || The software may be modified.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Distribution || You may distribute this software.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Patent Use || This license provides an express grant of patent rights from the contributor to the recipient.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Private Use || You may use and modify the software without distributing it.&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3 | Conditions&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Disclose Source || Source code must be made available when distributing the software.&lt;br /&gt;
|-&lt;br /&gt;
| 6 || License &amp;amp; Copyright Notice || Include a copy of the license and copyright notice with the code.&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Same License || Modifications must be released under the same license when distributing the software. In some cases a similar or related license may be used.&lt;br /&gt;
|-&lt;br /&gt;
| 8 || State Changes || Indicate changes made to the code.&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3 | Limitations&lt;br /&gt;
|-&lt;br /&gt;
| 9 || Hold Liable || Software is provided without warranty and the software author/license owner cannot be held liable for damages.&lt;br /&gt;
|-&lt;br /&gt;
| 10 || Trademark Use || This license explicitly states that it does NOT grant you trademark rights, even though licenses without such a statement probably do not grant you any implicit trademark rights.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Tags ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Integer || A numerical ID unique to this tag.&lt;br /&gt;
|-&lt;br /&gt;
| name || String || An all lower-case string used to identify this tag internally.&lt;br /&gt;
|-&lt;br /&gt;
| title || String || The tag&#039;s human-readable tag name.&lt;br /&gt;
|-&lt;br /&gt;
| description || String || A short description for the tag.&lt;br /&gt;
|-&lt;br /&gt;
| type || String || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Currently, there are only a fixed number of tags available, these include:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! id !! type !! name !! title !! description&lt;br /&gt;
|-&lt;br /&gt;
| 1 || t || general || General || Mods that cannot be sorted into other categories&lt;br /&gt;
|-&lt;br /&gt;
| 2 || t || non-game-changing || Non-Game-Changing || Changes only look&amp;amp;feel. New graphics, new sounds, ... such things.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || t || helper-mods || 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;
| 6 || t || big-mods || Big Mods || Too big and/or changes too much of the game to be fit anywhere else&lt;br /&gt;
|-&lt;br /&gt;
| 12 || t || transportation || Transportation || Player transport&lt;br /&gt;
|-&lt;br /&gt;
| 13 || t || logistics || Logistics || Transport of materials&lt;br /&gt;
|-&lt;br /&gt;
| 14 || t || utility || Utility || Helps with certain things the player is doing.&lt;br /&gt;
|-&lt;br /&gt;
| 15 || t || balancing || Balancing || Makes the game much more fair&lt;br /&gt;
|-&lt;br /&gt;
| 17 || t || enemies || Enemies || Adds more enemies for more challange&lt;br /&gt;
|-&lt;br /&gt;
| 16 || t || weapons || Weapons || Adds more weapons to annihilate the enemy&lt;br /&gt;
|-&lt;br /&gt;
| 18 || t || armor || Armor || Armors or armor equipment related.&lt;br /&gt;
|-&lt;br /&gt;
| 19 || t || oil || Oil || Things related to oil related manufacture&lt;br /&gt;
|-&lt;br /&gt;
| 20 || t || logistics-network || Logistics Network || Related to roboports and logistic robots&lt;br /&gt;
|- &lt;br /&gt;
| 21 || t || storage || Storage || Allows more ways to be able to store items&lt;br /&gt;
|-&lt;br /&gt;
| 22 || t || power-production || Power Production || Allows more ways to create mass amounts of energy&lt;br /&gt;
|-&lt;br /&gt;
| 23 || t || manufacture || Manufacture || Furnaces, assembling machines, production chains&lt;br /&gt;
|-&lt;br /&gt;
| 24 || t || blueprints || Blueprints || &lt;br /&gt;
|-&lt;br /&gt;
| 25 || t || cheats || Cheats || Well, they let you cheat&lt;br /&gt;
|- &lt;br /&gt;
| 26 || t || defense || Defense || Mods that add the ability to protect your base more&lt;br /&gt;
|-&lt;br /&gt;
| 27 || t || mining || Mining || Mods that provide better or new ways of mining resources&lt;br /&gt;
|-&lt;br /&gt;
| 28 || t || info || Info || Mods that provide additional information to the player&lt;br /&gt;
|-&lt;br /&gt;
| 29 || t || trains || Trains || Related to trains&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Media Files ===&lt;br /&gt;
&lt;br /&gt;
A media file object describes a single image, along with a smaller thumbnail sized version of the image.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Integer || A numerical ID unique to this media file.&lt;br /&gt;
|-&lt;br /&gt;
| width || Integer || Width of the full sized image in pixels.&lt;br /&gt;
|-&lt;br /&gt;
| height || Integer || Height of the full sized image in pixels.&lt;br /&gt;
|-&lt;br /&gt;
| size || Integer || Size of the full image in bytes.&lt;br /&gt;
|-&lt;br /&gt;
| urls || [[#Media URLs|Media URL]] || URLs to the full sized image and a thumbnail, see below.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Media URLs ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| original || String(URL) || URL to full sized image.&lt;br /&gt;
|-&lt;br /&gt;
| thumb || String(URL) || URL to 128x128px sized thumbnail of image.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The original image is in either PNG, JPEG, or GIF formats, with the extensions &amp;quot;.png&amp;quot;, &amp;quot;.jpg&amp;quot;, or &amp;quot;.gif&amp;quot;. All image URLs seem to be located at https://mods-data.factorio.com/pub_data/media_files/ with a file name consisting of 12 alphanumerical characters (of the base64 alphabet) followed by the file extension. The thumbnail URL contains the same code, but instead with a file extension of &amp;quot;.thumb.png&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Releases ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| download_url || String || Path to download for a mod. starts with &amp;quot;/api&amp;quot; and does not include a full url&lt;br /&gt;
|-&lt;br /&gt;
| downloads_count || Integer || Count of how many times a mod has been downloaded&lt;br /&gt;
|-&lt;br /&gt;
| factorio_version || String || The version of the game the mod is intended for&lt;br /&gt;
|-&lt;br /&gt;
| file_name || String || The file name of the release. Always seems to follow the pattern &amp;quot;{name}_{version}.zip&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| file_size || Integer || The size of the file&lt;br /&gt;
|-&lt;br /&gt;
| game_version || String || The version of the mod (do not confuse with factorio version)&lt;br /&gt;
|-&lt;br /&gt;
| id || Integer || A numerical ID unique to this release.&lt;br /&gt;
|-&lt;br /&gt;
| info_json || Object || A copy of the mod&#039;s info.json file.&lt;br /&gt;
|- &lt;br /&gt;
| released_at || String(ISO 8601) || ISO 6501 for when the mod was released.&lt;br /&gt;
|-&lt;br /&gt;
| version || String || The version string of this mod release. Used to determine dependencies. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Error ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| detail || String ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Languages}}[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Mod_portal_API&amp;diff=153860</id>
		<title>Mod portal API</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Mod_portal_API&amp;diff=153860"/>
		<updated>2018-01-09T21:49:13Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* /api/mods */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
&lt;br /&gt;
The Mod Portal API is used to both browse and download all mods available on the [https://mods.factorio.com/ official Factorio mod portal]. Using the API does not require any kind of authentication or account information and can be viewed simply by following the URLs below in any web browser.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://mods.factorio.com/api/mods&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More detailed information about a particular mod can be obtained by retrieving the following URL, where {name} is the mod&#039;s name field in the result object.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://mods.factorio.com/api/mods/{name}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Endpoints ==&lt;br /&gt;
&lt;br /&gt;
TODO!!!&lt;br /&gt;
&lt;br /&gt;
=== /api/mods ===&lt;br /&gt;
&lt;br /&gt;
GET Parameters:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Values !! Description&lt;br /&gt;
|-&lt;br /&gt;
| order ||updated, alpha, top||How to order the mods, by most recently updated, alphabetically, or by most downloaded.&lt;br /&gt;
|-&lt;br /&gt;
| owner ||||&lt;br /&gt;
|-&lt;br /&gt;
| page ||{an integer}||Page number you would like to show. Makes it so you can see a certain part of the list without getting detail on all&lt;br /&gt;
|-&lt;br /&gt;
| page_size ||{an integer}||The amount of results to show in your search&lt;br /&gt;
|-&lt;br /&gt;
| q ||{a string}||Name/Partial Name of mod you want to search for&lt;br /&gt;
|-&lt;br /&gt;
| tags ||||&lt;br /&gt;
|-&lt;br /&gt;
| namelist || {array of strings} || Return only mods that match the given names. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Returns [[#Mod List Response]]&lt;br /&gt;
&lt;br /&gt;
=== /api/mods/{mod_name} ===&lt;br /&gt;
&lt;br /&gt;
=== /api/messages ===&lt;br /&gt;
&lt;br /&gt;
GET Parameters:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Values !! Description&lt;br /&gt;
|-&lt;br /&gt;
| page_size || {an integer} || How many messages on one page&lt;br /&gt;
|-&lt;br /&gt;
| page || {an integer} || Which page of messages&lt;br /&gt;
|-&lt;br /&gt;
| mod || {name of mod} || Name of the specific mod that you want messages for&lt;br /&gt;
|-&lt;br /&gt;
| tag || {a letter} || The letter that represents the different message tags&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== /api/users ===&lt;br /&gt;
&lt;br /&gt;
== JSON Object Types ==&lt;br /&gt;
&lt;br /&gt;
=== Mod List Response ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| pagination || [[#Pagination|Pagination]] || See [[#Pagination]]&lt;br /&gt;
|-&lt;br /&gt;
| results || [[#Result Entry|Result]][] || A list of mods, matching any filters you specified.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pagination ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| count || Integer || Total number of mods that match your specified filters.&lt;br /&gt;
|-&lt;br /&gt;
| links || [[#Pagination_Links|Links]] || Utility links to mod portal api requests, preserving all filters and search queries.&lt;br /&gt;
|-&lt;br /&gt;
| page || Integer || The current page number.&lt;br /&gt;
|-&lt;br /&gt;
| page_count || Integer || The total number of pages returned.&lt;br /&gt;
|-&lt;br /&gt;
| page_size || Integer || The number of results per page.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pagination Links ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| first || String(URL) || URL to the first page of the results, or null if you&#039;re already on the first page.&lt;br /&gt;
|- &lt;br /&gt;
| prev || String(URL) || URL to the previous page of the results, or null if you&#039;re already on the first page.&lt;br /&gt;
|-&lt;br /&gt;
| next || String(URL) || URL to the next page of the results, or null if you&#039;re already on the last page.&lt;br /&gt;
|-&lt;br /&gt;
| last || String(URL) || URL to the last page of the results, or null if you&#039;re already on the last page.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Result Entry ===&lt;br /&gt;
&lt;br /&gt;
Fields returned by the api/mods endpoint are marked with a check (✓) in the &amp;quot;Short&amp;quot; column, and those returned the the api/mods/{name} endpoint are marked with a check in the &amp;quot;Full&amp;quot; column.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | Short !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | Full !! Description&lt;br /&gt;
|-&lt;br /&gt;
| created_at || String(ISO 8601) || ✓ || ✓&lt;br /&gt;
| The datetime the mod was uploaded, in the full ISO 8601 format, with a space separator instead of &#039;T&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| current_user_rating || Null || ✓ || ✓&lt;br /&gt;
| Doesn&#039;t seem to be implemented yet. Always null.&lt;br /&gt;
|-&lt;br /&gt;
| description || String || || ✓&lt;br /&gt;
| A longer description of the mod, in text only format.&lt;br /&gt;
|-&lt;br /&gt;
| description_html || String(HTML) || || ✓&lt;br /&gt;
| A longer description of the mod, with HTML tags.&lt;br /&gt;
|-&lt;br /&gt;
| downloads_count || Integer || ✓ || ✓&lt;br /&gt;
| Number of downloads.&lt;br /&gt;
|-&lt;br /&gt;
| first_media_file || [[#Media Files|Media File]] || ✓ || &lt;br /&gt;
| The first media file in the &amp;quot;media_files&amp;quot; list.&lt;br /&gt;
|-&lt;br /&gt;
| game_versions || String[] || ✓ || ✓&lt;br /&gt;
| A list of major Factorio version strings (e.g. &amp;quot;0.13&amp;quot;) starting with 0.13 that the mod is compatible with, &#039;&#039;in addition to&#039;&#039; the version(s) found in &amp;quot;latest_release&amp;quot; / &amp;quot;releases&amp;quot;. &lt;br /&gt;
|-&lt;br /&gt;
| github_path || String || ✓ || ✓&lt;br /&gt;
| A link to the mod&#039;s github project page, just prepend &amp;quot;github.com/&amp;quot;. Can be blank (&amp;quot;&amp;quot;).&lt;br /&gt;
|-&lt;br /&gt;
| homepage || String || ✓ || ✓&lt;br /&gt;
| Usually a URL to the mod&#039;s main project page, but can be any string.&lt;br /&gt;
|-&lt;br /&gt;
| id || Integer || ✓ || ✓&lt;br /&gt;
| A numerical mod ID used to identify the mod in other API endpoints.&lt;br /&gt;
|-&lt;br /&gt;
| latest_release || [[#Releases|Release]] || ✓ || &lt;br /&gt;
| The latest version of the mod available for download. See [[#Releases]]&lt;br /&gt;
|-&lt;br /&gt;
| license_flags || Integer(11 bit) || ✓ || ✓&lt;br /&gt;
| A bit field describing what permissions the mod&#039;s license grants. See [[#License Flags]]&lt;br /&gt;
|-&lt;br /&gt;
| license_name || String || ✓ || ✓&lt;br /&gt;
| The mod&#039;s license name.&lt;br /&gt;
|-&lt;br /&gt;
| license_url || String || ✓ || ✓&lt;br /&gt;
| A URL link to the full license agreement. Can be any string in case of custom licenses.&lt;br /&gt;
|-&lt;br /&gt;
| media_files || [[#Media Files|Media File]][] || || ✓&lt;br /&gt;
| A list of media files, such as screen shots of the mod in action. See [[#Media Files]].&lt;br /&gt;
|-&lt;br /&gt;
| name || String || ✓ || ✓&lt;br /&gt;
| The mod&#039;s machine-readable ID string.&lt;br /&gt;
|-&lt;br /&gt;
| owner || String || ✓ || ✓&lt;br /&gt;
| The Factorio username of the mod&#039;s author.&lt;br /&gt;
|-&lt;br /&gt;
| ratings_count || Integer || ✓ || ✓&lt;br /&gt;
| Doesn&#039;t seem to be implemented yet. Always 0.&lt;br /&gt;
|-&lt;br /&gt;
| releases || [[#Releases|Release]][] || || ✓&lt;br /&gt;
| A list of different versions of the mod available for download. See [[#Releases]]&lt;br /&gt;
|-&lt;br /&gt;
| summary || String || ✓ || ✓&lt;br /&gt;
| A shorter mod description.&lt;br /&gt;
|-&lt;br /&gt;
| tags || [[#Tags|Tag]][] || ✓ || ✓&lt;br /&gt;
| A list of tag objects that categorize the mod. See [[#Tags]].&lt;br /&gt;
|-&lt;br /&gt;
| title || String || ✓ || ✓&lt;br /&gt;
| The mod&#039;s human-readable name.&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || String(ISO 8601) || ✓ || ✓&lt;br /&gt;
| The datetime the mod was last updated, in the full ISO 8601 format, with a space separator instead of &#039;T&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| visits_count || Integer || ✓ || ✓&lt;br /&gt;
| The number of times the mod was viewed, but perhaps only counted on the web interface???&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== License Flags ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;license_flags&amp;quot; is an 11 bit number that describe generally what permissions the mod&#039;s license grants.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 2&amp;lt;sup&amp;gt;n&amp;lt;/sup&amp;gt; !! Title !! Description&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3 | Permissions&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Commercial Use || This software and derivatives may be used for commercial purposes&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Modification || The software may be modified.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Distribution || You may distribute this software.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Patent Use || This license provides an express grant of patent rights from the contributor to the recipient.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Private Use || You may use and modify the software without distributing it.&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3 | Conditions&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Disclose Source || Source code must be made available when distributing the software.&lt;br /&gt;
|-&lt;br /&gt;
| 6 || License &amp;amp; Copyright Notice || Include a copy of the license and copyright notice with the code.&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Same License || Modifications must be released under the same license when distributing the software. In some cases a similar or related license may be used.&lt;br /&gt;
|-&lt;br /&gt;
| 8 || State Changes || Indicate changes made to the code.&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3 | Limitations&lt;br /&gt;
|-&lt;br /&gt;
| 9 || Hold Liable || Software is provided without warranty and the software author/license owner cannot be held liable for damages.&lt;br /&gt;
|-&lt;br /&gt;
| 10 || Trademark Use || This license explicitly states that it does NOT grant you trademark rights, even though licenses without such a statement probably do not grant you any implicit trademark rights.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Tags ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Integer || A numerical ID unique to this tag.&lt;br /&gt;
|-&lt;br /&gt;
| name || String || An all lower-case string used to identify this tag internally.&lt;br /&gt;
|-&lt;br /&gt;
| title || String || The tag&#039;s human-readable tag name.&lt;br /&gt;
|-&lt;br /&gt;
| description || String || A short description for the tag.&lt;br /&gt;
|-&lt;br /&gt;
| type || String || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Currently, there are only a fixed number of tags available, these include:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! id !! type !! name !! title !! description&lt;br /&gt;
|-&lt;br /&gt;
| 1 || t || general || General || Mods that cannot be sorted into other categories&lt;br /&gt;
|-&lt;br /&gt;
| 2 || t || non-game-changing || Non-Game-Changing || Changes only look&amp;amp;feel. New graphics, new sounds, ... such things.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || t || helper-mods || 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;
| 6 || t || big-mods || Big Mods || Too big and/or changes too much of the game to be fit anywhere else&lt;br /&gt;
|-&lt;br /&gt;
| 12 || t || transportation || Transportation || Player transport&lt;br /&gt;
|-&lt;br /&gt;
| 13 || t || logistics || Logistics || Transport of materials&lt;br /&gt;
|-&lt;br /&gt;
| 14 || t || utility || Utility || Helps with certain things the player is doing.&lt;br /&gt;
|-&lt;br /&gt;
| 15 || t || balancing || Balancing || Makes the game much more fair&lt;br /&gt;
|-&lt;br /&gt;
| 17 || t || enemies || Enemies || Adds more enemies for more challange&lt;br /&gt;
|-&lt;br /&gt;
| 16 || t || weapons || Weapons || Adds more weapons to annihilate the enemy&lt;br /&gt;
|-&lt;br /&gt;
| 18 || t || armor || Armor || Armors or armor equipment related.&lt;br /&gt;
|-&lt;br /&gt;
| 19 || t || oil || Oil || Things related to oil related manufacture&lt;br /&gt;
|-&lt;br /&gt;
| 20 || t || logistics-network || Logistics Network || Related to roboports and logistic robots&lt;br /&gt;
|- &lt;br /&gt;
| 21 || t || storage || Storage || Allows more ways to be able to store items&lt;br /&gt;
|-&lt;br /&gt;
| 22 || t || power-production || Power Production || Allows more ways to create mass amounts of energy&lt;br /&gt;
|-&lt;br /&gt;
| 23 || t || manufacture || Manufacture || Furnaces, assembling machines, production chains&lt;br /&gt;
|-&lt;br /&gt;
| 24 || t || blueprints || Blueprints || &lt;br /&gt;
|-&lt;br /&gt;
| 25 || t || cheats || Cheats || Well, they let you cheat&lt;br /&gt;
|- &lt;br /&gt;
| 26 || t || defense || Defense || Mods that add the ability to protect your base more&lt;br /&gt;
|-&lt;br /&gt;
| 27 || t || mining || Mining || Mods that provide better or new ways of mining resources&lt;br /&gt;
|-&lt;br /&gt;
| 28 || t || info || Info || Mods that provide additional information to the player&lt;br /&gt;
|-&lt;br /&gt;
| 29 || t || trains || Trains || Related to trains&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Media Files ===&lt;br /&gt;
&lt;br /&gt;
A media file object describes a single image, along with a smaller thumbnail sized version of the image.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Integer || A numerical ID unique to this media file.&lt;br /&gt;
|-&lt;br /&gt;
| width || Integer || Width of the full sized image in pixels.&lt;br /&gt;
|-&lt;br /&gt;
| height || Integer || Height of the full sized image in pixels.&lt;br /&gt;
|-&lt;br /&gt;
| size || Integer || Size of the full image in bytes.&lt;br /&gt;
|-&lt;br /&gt;
| urls || [[#Media URLs|Media URL]] || URLs to the full sized image and a thumbnail, see below.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Media URLs ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| original || String(URL) || URL to full sized image.&lt;br /&gt;
|-&lt;br /&gt;
| thumb || String(URL) || URL to 128x128px sized thumbnail of image.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The original image is in either PNG, JPEG, or GIF formats, with the extensions &amp;quot;.png&amp;quot;, &amp;quot;.jpg&amp;quot;, or &amp;quot;.gif&amp;quot;. All image URLs seem to be located at https://mods-data.factorio.com/pub_data/media_files/ with a file name consisting of 12 alphanumerical characters (of the base64 alphabet) followed by the file extension. The thumbnail URL contains the same code, but instead with a file extension of &amp;quot;.thumb.png&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Releases ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| download_url || String || Path to download for a mod. starts with &amp;quot;/api&amp;quot; and does not include a full url&lt;br /&gt;
|-&lt;br /&gt;
| downloads_count || Integer || Count of how many times a mod has been downloaded&lt;br /&gt;
|-&lt;br /&gt;
| factorio_version || String || The version of the game the mod is intended for&lt;br /&gt;
|-&lt;br /&gt;
| file_name || String || The file name of the release. Always seems to follow the pattern &amp;quot;{name}_{version}.zip&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| file_size || Integer || The size of the file&lt;br /&gt;
|-&lt;br /&gt;
| game_version || String || The version of the mod (do not confuse with factorio version)&lt;br /&gt;
|-&lt;br /&gt;
| id || Integer || A numerical ID unique to this release.&lt;br /&gt;
|-&lt;br /&gt;
| info_json || Object || A copy of the mod&#039;s info.json file.&lt;br /&gt;
|- &lt;br /&gt;
| released_at || String(ISO 8601) || ISO 6501 for when the mod was released.&lt;br /&gt;
|-&lt;br /&gt;
| version || String || The version string of this mod release. Used to determine dependencies. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Error ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| detail || String ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Languages}}[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Mod_portal_API&amp;diff=153859</id>
		<title>Mod portal API</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Mod_portal_API&amp;diff=153859"/>
		<updated>2018-01-09T21:48:53Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* /api/mods */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
&lt;br /&gt;
The Mod Portal API is used to both browse and download all mods available on the [https://mods.factorio.com/ official Factorio mod portal]. Using the API does not require any kind of authentication or account information and can be viewed simply by following the URLs below in any web browser.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://mods.factorio.com/api/mods&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More detailed information about a particular mod can be obtained by retrieving the following URL, where {name} is the mod&#039;s name field in the result object.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://mods.factorio.com/api/mods/{name}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Endpoints ==&lt;br /&gt;
&lt;br /&gt;
TODO!!!&lt;br /&gt;
&lt;br /&gt;
=== /api/mods ===&lt;br /&gt;
&lt;br /&gt;
GET Parameters:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Values !! Description&lt;br /&gt;
|-&lt;br /&gt;
| order ||updated, alpha, top||How to order the mods, by most recently updated, alphabetically, or by most downloaded.&lt;br /&gt;
|-&lt;br /&gt;
| owner ||||&lt;br /&gt;
|-&lt;br /&gt;
| page ||{an integer}||Page number you would like to show. Makes it so you can see a certain part of the list without getting detail on all&lt;br /&gt;
|-&lt;br /&gt;
| page_size ||{an integer}||The amount of results to show in your search&lt;br /&gt;
|-&lt;br /&gt;
| q ||{a string}||Name/Partial Name of mod you want to search for&lt;br /&gt;
|-&lt;br /&gt;
| tags ||||&lt;br /&gt;
|-&lt;br /&gt;
| namelist || {{array of strings} || Return only mods that match the given names.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Returns [[#Mod List Response]]&lt;br /&gt;
&lt;br /&gt;
=== /api/mods/{mod_name} ===&lt;br /&gt;
&lt;br /&gt;
=== /api/messages ===&lt;br /&gt;
&lt;br /&gt;
GET Parameters:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Values !! Description&lt;br /&gt;
|-&lt;br /&gt;
| page_size || {an integer} || How many messages on one page&lt;br /&gt;
|-&lt;br /&gt;
| page || {an integer} || Which page of messages&lt;br /&gt;
|-&lt;br /&gt;
| mod || {name of mod} || Name of the specific mod that you want messages for&lt;br /&gt;
|-&lt;br /&gt;
| tag || {a letter} || The letter that represents the different message tags&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== /api/users ===&lt;br /&gt;
&lt;br /&gt;
== JSON Object Types ==&lt;br /&gt;
&lt;br /&gt;
=== Mod List Response ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| pagination || [[#Pagination|Pagination]] || See [[#Pagination]]&lt;br /&gt;
|-&lt;br /&gt;
| results || [[#Result Entry|Result]][] || A list of mods, matching any filters you specified.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pagination ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| count || Integer || Total number of mods that match your specified filters.&lt;br /&gt;
|-&lt;br /&gt;
| links || [[#Pagination_Links|Links]] || Utility links to mod portal api requests, preserving all filters and search queries.&lt;br /&gt;
|-&lt;br /&gt;
| page || Integer || The current page number.&lt;br /&gt;
|-&lt;br /&gt;
| page_count || Integer || The total number of pages returned.&lt;br /&gt;
|-&lt;br /&gt;
| page_size || Integer || The number of results per page.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pagination Links ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| first || String(URL) || URL to the first page of the results, or null if you&#039;re already on the first page.&lt;br /&gt;
|- &lt;br /&gt;
| prev || String(URL) || URL to the previous page of the results, or null if you&#039;re already on the first page.&lt;br /&gt;
|-&lt;br /&gt;
| next || String(URL) || URL to the next page of the results, or null if you&#039;re already on the last page.&lt;br /&gt;
|-&lt;br /&gt;
| last || String(URL) || URL to the last page of the results, or null if you&#039;re already on the last page.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Result Entry ===&lt;br /&gt;
&lt;br /&gt;
Fields returned by the api/mods endpoint are marked with a check (✓) in the &amp;quot;Short&amp;quot; column, and those returned the the api/mods/{name} endpoint are marked with a check in the &amp;quot;Full&amp;quot; column.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | Short !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | Full !! Description&lt;br /&gt;
|-&lt;br /&gt;
| created_at || String(ISO 8601) || ✓ || ✓&lt;br /&gt;
| The datetime the mod was uploaded, in the full ISO 8601 format, with a space separator instead of &#039;T&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| current_user_rating || Null || ✓ || ✓&lt;br /&gt;
| Doesn&#039;t seem to be implemented yet. Always null.&lt;br /&gt;
|-&lt;br /&gt;
| description || String || || ✓&lt;br /&gt;
| A longer description of the mod, in text only format.&lt;br /&gt;
|-&lt;br /&gt;
| description_html || String(HTML) || || ✓&lt;br /&gt;
| A longer description of the mod, with HTML tags.&lt;br /&gt;
|-&lt;br /&gt;
| downloads_count || Integer || ✓ || ✓&lt;br /&gt;
| Number of downloads.&lt;br /&gt;
|-&lt;br /&gt;
| first_media_file || [[#Media Files|Media File]] || ✓ || &lt;br /&gt;
| The first media file in the &amp;quot;media_files&amp;quot; list.&lt;br /&gt;
|-&lt;br /&gt;
| game_versions || String[] || ✓ || ✓&lt;br /&gt;
| A list of major Factorio version strings (e.g. &amp;quot;0.13&amp;quot;) starting with 0.13 that the mod is compatible with, &#039;&#039;in addition to&#039;&#039; the version(s) found in &amp;quot;latest_release&amp;quot; / &amp;quot;releases&amp;quot;. &lt;br /&gt;
|-&lt;br /&gt;
| github_path || String || ✓ || ✓&lt;br /&gt;
| A link to the mod&#039;s github project page, just prepend &amp;quot;github.com/&amp;quot;. Can be blank (&amp;quot;&amp;quot;).&lt;br /&gt;
|-&lt;br /&gt;
| homepage || String || ✓ || ✓&lt;br /&gt;
| Usually a URL to the mod&#039;s main project page, but can be any string.&lt;br /&gt;
|-&lt;br /&gt;
| id || Integer || ✓ || ✓&lt;br /&gt;
| A numerical mod ID used to identify the mod in other API endpoints.&lt;br /&gt;
|-&lt;br /&gt;
| latest_release || [[#Releases|Release]] || ✓ || &lt;br /&gt;
| The latest version of the mod available for download. See [[#Releases]]&lt;br /&gt;
|-&lt;br /&gt;
| license_flags || Integer(11 bit) || ✓ || ✓&lt;br /&gt;
| A bit field describing what permissions the mod&#039;s license grants. See [[#License Flags]]&lt;br /&gt;
|-&lt;br /&gt;
| license_name || String || ✓ || ✓&lt;br /&gt;
| The mod&#039;s license name.&lt;br /&gt;
|-&lt;br /&gt;
| license_url || String || ✓ || ✓&lt;br /&gt;
| A URL link to the full license agreement. Can be any string in case of custom licenses.&lt;br /&gt;
|-&lt;br /&gt;
| media_files || [[#Media Files|Media File]][] || || ✓&lt;br /&gt;
| A list of media files, such as screen shots of the mod in action. See [[#Media Files]].&lt;br /&gt;
|-&lt;br /&gt;
| name || String || ✓ || ✓&lt;br /&gt;
| The mod&#039;s machine-readable ID string.&lt;br /&gt;
|-&lt;br /&gt;
| owner || String || ✓ || ✓&lt;br /&gt;
| The Factorio username of the mod&#039;s author.&lt;br /&gt;
|-&lt;br /&gt;
| ratings_count || Integer || ✓ || ✓&lt;br /&gt;
| Doesn&#039;t seem to be implemented yet. Always 0.&lt;br /&gt;
|-&lt;br /&gt;
| releases || [[#Releases|Release]][] || || ✓&lt;br /&gt;
| A list of different versions of the mod available for download. See [[#Releases]]&lt;br /&gt;
|-&lt;br /&gt;
| summary || String || ✓ || ✓&lt;br /&gt;
| A shorter mod description.&lt;br /&gt;
|-&lt;br /&gt;
| tags || [[#Tags|Tag]][] || ✓ || ✓&lt;br /&gt;
| A list of tag objects that categorize the mod. See [[#Tags]].&lt;br /&gt;
|-&lt;br /&gt;
| title || String || ✓ || ✓&lt;br /&gt;
| The mod&#039;s human-readable name.&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || String(ISO 8601) || ✓ || ✓&lt;br /&gt;
| The datetime the mod was last updated, in the full ISO 8601 format, with a space separator instead of &#039;T&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| visits_count || Integer || ✓ || ✓&lt;br /&gt;
| The number of times the mod was viewed, but perhaps only counted on the web interface???&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== License Flags ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;license_flags&amp;quot; is an 11 bit number that describe generally what permissions the mod&#039;s license grants.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 2&amp;lt;sup&amp;gt;n&amp;lt;/sup&amp;gt; !! Title !! Description&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3 | Permissions&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Commercial Use || This software and derivatives may be used for commercial purposes&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Modification || The software may be modified.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Distribution || You may distribute this software.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Patent Use || This license provides an express grant of patent rights from the contributor to the recipient.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Private Use || You may use and modify the software without distributing it.&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3 | Conditions&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Disclose Source || Source code must be made available when distributing the software.&lt;br /&gt;
|-&lt;br /&gt;
| 6 || License &amp;amp; Copyright Notice || Include a copy of the license and copyright notice with the code.&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Same License || Modifications must be released under the same license when distributing the software. In some cases a similar or related license may be used.&lt;br /&gt;
|-&lt;br /&gt;
| 8 || State Changes || Indicate changes made to the code.&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3 | Limitations&lt;br /&gt;
|-&lt;br /&gt;
| 9 || Hold Liable || Software is provided without warranty and the software author/license owner cannot be held liable for damages.&lt;br /&gt;
|-&lt;br /&gt;
| 10 || Trademark Use || This license explicitly states that it does NOT grant you trademark rights, even though licenses without such a statement probably do not grant you any implicit trademark rights.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Tags ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Integer || A numerical ID unique to this tag.&lt;br /&gt;
|-&lt;br /&gt;
| name || String || An all lower-case string used to identify this tag internally.&lt;br /&gt;
|-&lt;br /&gt;
| title || String || The tag&#039;s human-readable tag name.&lt;br /&gt;
|-&lt;br /&gt;
| description || String || A short description for the tag.&lt;br /&gt;
|-&lt;br /&gt;
| type || String || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Currently, there are only a fixed number of tags available, these include:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! id !! type !! name !! title !! description&lt;br /&gt;
|-&lt;br /&gt;
| 1 || t || general || General || Mods that cannot be sorted into other categories&lt;br /&gt;
|-&lt;br /&gt;
| 2 || t || non-game-changing || Non-Game-Changing || Changes only look&amp;amp;feel. New graphics, new sounds, ... such things.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || t || helper-mods || 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;
| 6 || t || big-mods || Big Mods || Too big and/or changes too much of the game to be fit anywhere else&lt;br /&gt;
|-&lt;br /&gt;
| 12 || t || transportation || Transportation || Player transport&lt;br /&gt;
|-&lt;br /&gt;
| 13 || t || logistics || Logistics || Transport of materials&lt;br /&gt;
|-&lt;br /&gt;
| 14 || t || utility || Utility || Helps with certain things the player is doing.&lt;br /&gt;
|-&lt;br /&gt;
| 15 || t || balancing || Balancing || Makes the game much more fair&lt;br /&gt;
|-&lt;br /&gt;
| 17 || t || enemies || Enemies || Adds more enemies for more challange&lt;br /&gt;
|-&lt;br /&gt;
| 16 || t || weapons || Weapons || Adds more weapons to annihilate the enemy&lt;br /&gt;
|-&lt;br /&gt;
| 18 || t || armor || Armor || Armors or armor equipment related.&lt;br /&gt;
|-&lt;br /&gt;
| 19 || t || oil || Oil || Things related to oil related manufacture&lt;br /&gt;
|-&lt;br /&gt;
| 20 || t || logistics-network || Logistics Network || Related to roboports and logistic robots&lt;br /&gt;
|- &lt;br /&gt;
| 21 || t || storage || Storage || Allows more ways to be able to store items&lt;br /&gt;
|-&lt;br /&gt;
| 22 || t || power-production || Power Production || Allows more ways to create mass amounts of energy&lt;br /&gt;
|-&lt;br /&gt;
| 23 || t || manufacture || Manufacture || Furnaces, assembling machines, production chains&lt;br /&gt;
|-&lt;br /&gt;
| 24 || t || blueprints || Blueprints || &lt;br /&gt;
|-&lt;br /&gt;
| 25 || t || cheats || Cheats || Well, they let you cheat&lt;br /&gt;
|- &lt;br /&gt;
| 26 || t || defense || Defense || Mods that add the ability to protect your base more&lt;br /&gt;
|-&lt;br /&gt;
| 27 || t || mining || Mining || Mods that provide better or new ways of mining resources&lt;br /&gt;
|-&lt;br /&gt;
| 28 || t || info || Info || Mods that provide additional information to the player&lt;br /&gt;
|-&lt;br /&gt;
| 29 || t || trains || Trains || Related to trains&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Media Files ===&lt;br /&gt;
&lt;br /&gt;
A media file object describes a single image, along with a smaller thumbnail sized version of the image.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Integer || A numerical ID unique to this media file.&lt;br /&gt;
|-&lt;br /&gt;
| width || Integer || Width of the full sized image in pixels.&lt;br /&gt;
|-&lt;br /&gt;
| height || Integer || Height of the full sized image in pixels.&lt;br /&gt;
|-&lt;br /&gt;
| size || Integer || Size of the full image in bytes.&lt;br /&gt;
|-&lt;br /&gt;
| urls || [[#Media URLs|Media URL]] || URLs to the full sized image and a thumbnail, see below.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Media URLs ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| original || String(URL) || URL to full sized image.&lt;br /&gt;
|-&lt;br /&gt;
| thumb || String(URL) || URL to 128x128px sized thumbnail of image.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The original image is in either PNG, JPEG, or GIF formats, with the extensions &amp;quot;.png&amp;quot;, &amp;quot;.jpg&amp;quot;, or &amp;quot;.gif&amp;quot;. All image URLs seem to be located at https://mods-data.factorio.com/pub_data/media_files/ with a file name consisting of 12 alphanumerical characters (of the base64 alphabet) followed by the file extension. The thumbnail URL contains the same code, but instead with a file extension of &amp;quot;.thumb.png&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Releases ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| download_url || String || Path to download for a mod. starts with &amp;quot;/api&amp;quot; and does not include a full url&lt;br /&gt;
|-&lt;br /&gt;
| downloads_count || Integer || Count of how many times a mod has been downloaded&lt;br /&gt;
|-&lt;br /&gt;
| factorio_version || String || The version of the game the mod is intended for&lt;br /&gt;
|-&lt;br /&gt;
| file_name || String || The file name of the release. Always seems to follow the pattern &amp;quot;{name}_{version}.zip&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| file_size || Integer || The size of the file&lt;br /&gt;
|-&lt;br /&gt;
| game_version || String || The version of the mod (do not confuse with factorio version)&lt;br /&gt;
|-&lt;br /&gt;
| id || Integer || A numerical ID unique to this release.&lt;br /&gt;
|-&lt;br /&gt;
| info_json || Object || A copy of the mod&#039;s info.json file.&lt;br /&gt;
|- &lt;br /&gt;
| released_at || String(ISO 8601) || ISO 6501 for when the mod was released.&lt;br /&gt;
|-&lt;br /&gt;
| version || String || The version string of this mod release. Used to determine dependencies. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Error ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| detail || String ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Languages}}[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Download_API&amp;diff=152085</id>
		<title>Download API</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Download_API&amp;diff=152085"/>
		<updated>2017-12-05T09:34:00Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* Version Listings */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This API allows you to download official releases of stand-alone Factorio from the Factorio servers. It&#039;s not so much of an API as it is web scraping, but it&#039;s documented here for completeness. Please update this page if you utilize it and the information becomes outdated. Also note that&#039;s there&#039;s a separate, (semi)official API for upgrading between releases, which should be used when possible to lighten the load on the Factorio servers. (I&#039;ll document that later, promise!)&lt;br /&gt;
&lt;br /&gt;
== Authenticating ==&lt;br /&gt;
&lt;br /&gt;
Downloading Factorio requires an authenticated session with the web server, which is different than the typical API authentication mechanism. Authentication uses the HTML endpoint at&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://www.factorio.com/login&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login in procedure:&lt;br /&gt;
&lt;br /&gt;
# Create an HTTP session and send a GET request. You&#039;ll get some HTML in return.&amp;lt;br&amp;gt;There&#039;s a [[:Wikipedia:Cross-site_request_forgery#Synchronizer_token_pattern|CSRF token]] you&#039;ll need to grab which can be found using one of the following selectors:&lt;br /&gt;
#* CSS1: &amp;lt;code&amp;gt;input[name=csrf_token]&amp;lt;/code&amp;gt; (and then take the &amp;quot;value&amp;quot; attribute).&lt;br /&gt;
#* XPATH1: &amp;lt;code&amp;gt;//input[@name=&amp;quot;csrf_token&amp;quot;]/@value&amp;lt;/code&amp;gt;&lt;br /&gt;
# Then send a POST request with the following parameters:&lt;br /&gt;
#* &amp;lt;code&amp;gt;csrf_token&amp;lt;/code&amp;gt;: the CSRF token you grabbed earlier.&lt;br /&gt;
#* &amp;lt;code&amp;gt;username_or_email&amp;lt;/code&amp;gt;: your username or email address.&lt;br /&gt;
#* &amp;lt;code&amp;gt;password&amp;lt;/code&amp;gt;: your password.&lt;br /&gt;
&lt;br /&gt;
== Downloading ==&lt;br /&gt;
&lt;br /&gt;
Download Factorio releases at&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://www.factorio.com/get-download/{version}/{build}/{distro}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Where {version} is the version string of the release you wish to grab - e.g. &amp;quot;0.15.31&amp;quot;.&lt;br /&gt;
* {build} is the release build, which currently comprises of:&lt;br /&gt;
** &amp;lt;code&amp;gt;alpha&amp;lt;/code&amp;gt; - the current standard full-featured build.&lt;br /&gt;
** &amp;lt;code&amp;gt;demo&amp;lt;/code&amp;gt; - the free, publicly accessible demo versions.&lt;br /&gt;
** &amp;lt;code&amp;gt;headless&amp;lt;/code&amp;gt; - for running servers on machines without graphical interface. &lt;br /&gt;
* and {distro} is the os / type of release you wish to download, currently:&lt;br /&gt;
** &amp;lt;code&amp;gt;win64&amp;lt;/code&amp;gt; - EXE installer for 64 bit Windows.&lt;br /&gt;
** &amp;lt;code&amp;gt;win64-manual&amp;lt;/code&amp;gt; - ZIP package for 64 bit Windows.&lt;br /&gt;
** &amp;lt;code&amp;gt;win32&amp;lt;/code&amp;gt; - EXE installer for 32 bit Windows. &#039;&#039;No longer supported.&#039;&#039;&lt;br /&gt;
** &amp;lt;code&amp;gt;win32-manual&amp;lt;/code&amp;gt; - ZIP package for 32 bit Windows. &#039;&#039;No longer supported.&#039;&#039;&lt;br /&gt;
** &amp;lt;code&amp;gt;osx&amp;lt;/code&amp;gt; - DMG package for 64 bit Mac OS.&lt;br /&gt;
** &amp;lt;code&amp;gt;linux64&amp;lt;/code&amp;gt; - tar.gz or tar.xz package for 64 bit Linux.&lt;br /&gt;
** &amp;lt;code&amp;gt;linux32&amp;lt;/code&amp;gt; - tar.gz or tar.xz package for 32 bit Linux. &#039;&#039;No longer supported.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Factorio servers will correctly respond with a 404 if the requested download isn&#039;t available. Experimental builds are taken down quickly after they become obsolete, so it&#039;s best to check what versions are available before hand (documented below).&lt;br /&gt;
&lt;br /&gt;
Note: Windows 32 bit and 64 bit installers are [https://en.wikipedia.org/wiki/Inno_Setup Inno Setup] formatted packages (I&#039;ll document that somewhere someday).&lt;br /&gt;
&lt;br /&gt;
== Version Listings ==&lt;br /&gt;
&lt;br /&gt;
You can grab a list of Factorio versions available for download by sending a GET request to the endpoint at&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://www.factorio.com/download&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Experimental releases have their own page, which has the same interface, and can be found at:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://www.factorio.com/download/experimental&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is also another endpoint available that filters to only headless releases. (Does not contain experimental releases)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://www.factorio.com/download-headless&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a list of version number and build combinations can be grabbed by using either of the selectors:&lt;br /&gt;
* CSS1: &amp;lt;code&amp;gt;h3&amp;lt;/code&amp;gt;&lt;br /&gt;
* XPATH1: &amp;lt;code&amp;gt;//h3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can skip straight to selecting all of the download links, and parsing out the version numbers and such from there. (I actually recommend this method)&lt;br /&gt;
* CSS1: &amp;lt;code&amp;gt;body&amp;gt;div&amp;gt;ul a&amp;lt;/code&amp;gt; (and then take the &amp;quot;href&amp;quot; attribute)&lt;br /&gt;
* XPATH1: &amp;lt;code&amp;gt;//body/div/ul//a/@href&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Languages}}[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Download_API&amp;diff=151920</id>
		<title>Download API</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Download_API&amp;diff=151920"/>
		<updated>2017-11-19T21:13:46Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* Version Listings */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This API allows you to download official releases of stand-alone Factorio from the Factorio servers. It&#039;s not so much of an API as it is web scraping, but it&#039;s documented here for completeness. Please update this page if you utilize it and the information becomes outdated. Also note that&#039;s there&#039;s a separate, (semi)official API for upgrading between releases, which should be used when possible to lighten the load on the Factorio servers. (I&#039;ll document that later, promise!)&lt;br /&gt;
&lt;br /&gt;
== Authenticating ==&lt;br /&gt;
&lt;br /&gt;
Downloading Factorio requires an authenticated session with the web server, which is different than the typical API authentication mechanism. Authentication uses the HTML endpoint at&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://www.factorio.com/login&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login in procedure:&lt;br /&gt;
&lt;br /&gt;
# Create an HTTP session and send a GET request. You&#039;ll get some HTML in return.&amp;lt;br&amp;gt;There&#039;s a [https://en.wikipedia.org/wiki/Cross-site_request_forgery#Synchronizer_token_pattern CSRF token] you&#039;ll need to grab which can be found using one of the following selectors:&lt;br /&gt;
#* CSS1: &amp;lt;code&amp;gt;input[name=csrf_token]&amp;lt;/code&amp;gt; (and then take the &amp;quot;value&amp;quot; attribute).&lt;br /&gt;
#* XPATH1: &amp;lt;code&amp;gt;//input[@name=&amp;quot;csrf_token&amp;quot;]/@value&amp;lt;/code&amp;gt;&lt;br /&gt;
# Then send a POST request with the following parameters:&lt;br /&gt;
#* &amp;lt;code&amp;gt;csrf_token&amp;lt;/code&amp;gt;: the CSRF token you grabbed earlier.&lt;br /&gt;
#* &amp;lt;code&amp;gt;username_or_email&amp;lt;/code&amp;gt;: your username or email address.&lt;br /&gt;
#* &amp;lt;code&amp;gt;password&amp;lt;/code&amp;gt;: your password.&lt;br /&gt;
&lt;br /&gt;
== Downloading ==&lt;br /&gt;
&lt;br /&gt;
Download Factorio releases at&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://www.factorio.com/get-download/{version}/{build}/{distro}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Where {version} is the version string of the release you wish to grab - e.g. &amp;quot;0.15.31&amp;quot;.&lt;br /&gt;
* {build} is the release build, which currently comprises of:&lt;br /&gt;
** &amp;lt;code&amp;gt;alpha&amp;lt;/code&amp;gt; - the current standard full-featured build.&lt;br /&gt;
** &amp;lt;code&amp;gt;demo&amp;lt;/code&amp;gt; - the free, publicly accessible demo versions.&lt;br /&gt;
** &amp;lt;code&amp;gt;headless&amp;lt;/code&amp;gt; - for running servers on machines without graphical interface. &lt;br /&gt;
* and {distro} is the os / type of release you wish to download, currently:&lt;br /&gt;
** &amp;lt;code&amp;gt;win64&amp;lt;/code&amp;gt; - EXE installer for 64 bit Windows.&lt;br /&gt;
** &amp;lt;code&amp;gt;win64-manual&amp;lt;/code&amp;gt; - ZIP package for 64 bit Windows.&lt;br /&gt;
** &amp;lt;code&amp;gt;win32&amp;lt;/code&amp;gt; - EXE installer for 32 bit Windows. &#039;&#039;No longer supported.&#039;&#039;&lt;br /&gt;
** &amp;lt;code&amp;gt;win32-manual&amp;lt;/code&amp;gt; - ZIP package for 32 bit Windows. &#039;&#039;No longer supported.&#039;&#039;&lt;br /&gt;
** &amp;lt;code&amp;gt;osx&amp;lt;/code&amp;gt; - DMG package for 64 bit Mac OS.&lt;br /&gt;
** &amp;lt;code&amp;gt;linux64&amp;lt;/code&amp;gt; - tar.gz or tar.xz package for 64 bit Linux.&lt;br /&gt;
** &amp;lt;code&amp;gt;linux32&amp;lt;/code&amp;gt; - tar.gz or tar.xz package for 32 bit Linux. &#039;&#039;No longer supported.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Factorio servers will correctly respond with a 404 if the requested download isn&#039;t available. Experimental builds are taken down quickly after they become obsolete, so it&#039;s best to check what versions are available before hand (documented below).&lt;br /&gt;
&lt;br /&gt;
Note: Windows 32 bit and 64 bit installers are [https://en.wikipedia.org/wiki/Inno_Setup Inno Setup] formatted packages (I&#039;ll document that somewhere someday).&lt;br /&gt;
&lt;br /&gt;
== Version Listings ==&lt;br /&gt;
&lt;br /&gt;
You can grab a list of Factorio versions available for download by sending a GET request to the endpoint at&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://www.factorio.com/download/stable&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Experimental releases have their own page, which has the same interface, and can be found at:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://www.factorio.com/download/experimental&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is also another endpoint available that filters to only headless releases. (Does not contain experimental releases)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://www.factorio.com/download-headless&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a list of version number and build combinations can be grabbed by using either of the selectors:&lt;br /&gt;
* CSS1: &amp;lt;code&amp;gt;h3&amp;lt;/code&amp;gt;&lt;br /&gt;
* XPATH1: &amp;lt;code&amp;gt;//h3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can skip straight to selecting all of the download links, and parsing out the version numbers and such from there. (I actually recommend this method)&lt;br /&gt;
* CSS1: &amp;lt;code&amp;gt;body&amp;gt;div&amp;gt;ul a&amp;lt;/code&amp;gt; (and then take the &amp;quot;href&amp;quot; attribute)&lt;br /&gt;
* XPATH1: &amp;lt;code&amp;gt;//body/div/ul//a/@href&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Languages}}[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Download_API&amp;diff=151919</id>
		<title>Download API</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Download_API&amp;diff=151919"/>
		<updated>2017-11-19T21:09:21Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* Authenticating */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This API allows you to download official releases of stand-alone Factorio from the Factorio servers. It&#039;s not so much of an API as it is web scraping, but it&#039;s documented here for completeness. Please update this page if you utilize it and the information becomes outdated. Also note that&#039;s there&#039;s a separate, (semi)official API for upgrading between releases, which should be used when possible to lighten the load on the Factorio servers. (I&#039;ll document that later, promise!)&lt;br /&gt;
&lt;br /&gt;
== Authenticating ==&lt;br /&gt;
&lt;br /&gt;
Downloading Factorio requires an authenticated session with the web server, which is different than the typical API authentication mechanism. Authentication uses the HTML endpoint at&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://www.factorio.com/login&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login in procedure:&lt;br /&gt;
&lt;br /&gt;
# Create an HTTP session and send a GET request. You&#039;ll get some HTML in return.&amp;lt;br&amp;gt;There&#039;s a [https://en.wikipedia.org/wiki/Cross-site_request_forgery#Synchronizer_token_pattern CSRF token] you&#039;ll need to grab which can be found using one of the following selectors:&lt;br /&gt;
#* CSS1: &amp;lt;code&amp;gt;input[name=csrf_token]&amp;lt;/code&amp;gt; (and then take the &amp;quot;value&amp;quot; attribute).&lt;br /&gt;
#* XPATH1: &amp;lt;code&amp;gt;//input[@name=&amp;quot;csrf_token&amp;quot;]/@value&amp;lt;/code&amp;gt;&lt;br /&gt;
# Then send a POST request with the following parameters:&lt;br /&gt;
#* &amp;lt;code&amp;gt;csrf_token&amp;lt;/code&amp;gt;: the CSRF token you grabbed earlier.&lt;br /&gt;
#* &amp;lt;code&amp;gt;username_or_email&amp;lt;/code&amp;gt;: your username or email address.&lt;br /&gt;
#* &amp;lt;code&amp;gt;password&amp;lt;/code&amp;gt;: your password.&lt;br /&gt;
&lt;br /&gt;
== Downloading ==&lt;br /&gt;
&lt;br /&gt;
Download Factorio releases at&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://www.factorio.com/get-download/{version}/{build}/{distro}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Where {version} is the version string of the release you wish to grab - e.g. &amp;quot;0.15.31&amp;quot;.&lt;br /&gt;
* {build} is the release build, which currently comprises of:&lt;br /&gt;
** &amp;lt;code&amp;gt;alpha&amp;lt;/code&amp;gt; - the current standard full-featured build.&lt;br /&gt;
** &amp;lt;code&amp;gt;demo&amp;lt;/code&amp;gt; - the free, publicly accessible demo versions.&lt;br /&gt;
** &amp;lt;code&amp;gt;headless&amp;lt;/code&amp;gt; - for running servers on machines without graphical interface. &lt;br /&gt;
* and {distro} is the os / type of release you wish to download, currently:&lt;br /&gt;
** &amp;lt;code&amp;gt;win64&amp;lt;/code&amp;gt; - EXE installer for 64 bit Windows.&lt;br /&gt;
** &amp;lt;code&amp;gt;win64-manual&amp;lt;/code&amp;gt; - ZIP package for 64 bit Windows.&lt;br /&gt;
** &amp;lt;code&amp;gt;win32&amp;lt;/code&amp;gt; - EXE installer for 32 bit Windows. &#039;&#039;No longer supported.&#039;&#039;&lt;br /&gt;
** &amp;lt;code&amp;gt;win32-manual&amp;lt;/code&amp;gt; - ZIP package for 32 bit Windows. &#039;&#039;No longer supported.&#039;&#039;&lt;br /&gt;
** &amp;lt;code&amp;gt;osx&amp;lt;/code&amp;gt; - DMG package for 64 bit Mac OS.&lt;br /&gt;
** &amp;lt;code&amp;gt;linux64&amp;lt;/code&amp;gt; - tar.gz or tar.xz package for 64 bit Linux.&lt;br /&gt;
** &amp;lt;code&amp;gt;linux32&amp;lt;/code&amp;gt; - tar.gz or tar.xz package for 32 bit Linux. &#039;&#039;No longer supported.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Factorio servers will correctly respond with a 404 if the requested download isn&#039;t available. Experimental builds are taken down quickly after they become obsolete, so it&#039;s best to check what versions are available before hand (documented below).&lt;br /&gt;
&lt;br /&gt;
Note: Windows 32 bit and 64 bit installers are [https://en.wikipedia.org/wiki/Inno_Setup Inno Setup] formatted packages (I&#039;ll document that somewhere someday).&lt;br /&gt;
&lt;br /&gt;
== Version Listings ==&lt;br /&gt;
&lt;br /&gt;
You can grab a list of Factorio versions available for download by sending a GET request to the endpoint at&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://www.factorio.com/download&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Experimental releases have their own page, which has the same interface, and can be found at:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://www.factorio.com/download/experimental&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is also another endpoint available that filters to only headless releases. (Does not contain experimental releases)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://www.factorio.com/download-headless&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a list of version number and build combinations can be grabbed by using either of the selectors:&lt;br /&gt;
* CSS1: &amp;lt;code&amp;gt;h3&amp;lt;/code&amp;gt;&lt;br /&gt;
* XPATH1: &amp;lt;code&amp;gt;//h3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can skip straight to selecting all of the download links, and parsing out the version numbers and such from there. (I actually recommend this method)&lt;br /&gt;
* CSS1: &amp;lt;code&amp;gt;body&amp;gt;div&amp;gt;ul a&amp;lt;/code&amp;gt; (and then take the &amp;quot;href&amp;quot; attribute)&lt;br /&gt;
* XPATH1: &amp;lt;code&amp;gt;//body/div/ul//a/@href&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Languages}}[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Mod_portal_API&amp;diff=146810</id>
		<title>Mod portal API</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Mod_portal_API&amp;diff=146810"/>
		<updated>2017-09-03T22:19:10Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* Endpoints */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
&lt;br /&gt;
The Mod Portal API is used to both browse and download all mods available on the [https://mods.factorio.com/ official Factorio mod portal]. Using the API does not require any kind of authentication or account information and can be viewed simply by following the URLs below in any web browser.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://mods.factorio.com/api/mods&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More detailed information about a particular mod can be obtained by retrieving the following URL, where {name} is the mod&#039;s name field in the result object.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://mods.factorio.com/api/mods/{name}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Endpoints ==&lt;br /&gt;
&lt;br /&gt;
TODO!!!&lt;br /&gt;
&lt;br /&gt;
=== /api/mods ===&lt;br /&gt;
&lt;br /&gt;
GET Parameters:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description&lt;br /&gt;
|-&lt;br /&gt;
| order ||&lt;br /&gt;
|-&lt;br /&gt;
| owner ||&lt;br /&gt;
|-&lt;br /&gt;
| page ||&lt;br /&gt;
|-&lt;br /&gt;
| page_size ||&lt;br /&gt;
|-&lt;br /&gt;
| q ||&lt;br /&gt;
|-&lt;br /&gt;
| tags ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Returns [[#Mod List Response]]&lt;br /&gt;
&lt;br /&gt;
=== /api/mods/{mod_name} ===&lt;br /&gt;
&lt;br /&gt;
=== /api/messages ===&lt;br /&gt;
&lt;br /&gt;
=== /api/users ===&lt;br /&gt;
&lt;br /&gt;
== JSON Object Types ==&lt;br /&gt;
&lt;br /&gt;
=== Mod List Response ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| pagination || [[#Pagination|Pagination]] || See [[#Pagination]]&lt;br /&gt;
|-&lt;br /&gt;
| results || [[#Result Entry|Result]][] || A list of mods, matching any filters you specified.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pagination ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| count || Integer || Total number of mods that match your specified filters.&lt;br /&gt;
|-&lt;br /&gt;
| links || [[#Pagination_Links|Links]] || Utility links to mod portal api requests, preserving all filters and search queries.&lt;br /&gt;
|-&lt;br /&gt;
| page || Integer || The current page number.&lt;br /&gt;
|-&lt;br /&gt;
| page_count || Integer || The total number of pages returned.&lt;br /&gt;
|-&lt;br /&gt;
| page_size || Integer || The number of results per page.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pagination Links ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| first || String(URL) || URL to the first page of the results, or null if you&#039;re already on the first page.&lt;br /&gt;
|- &lt;br /&gt;
| prev || String(URL) || URL to the previous page of the results, or null if you&#039;re already on the first page.&lt;br /&gt;
|-&lt;br /&gt;
| next || String(URL) || URL to the next page of the results, or null if you&#039;re already on the last page.&lt;br /&gt;
|-&lt;br /&gt;
| last || String(URL) || URL to the last page of the results, or null if you&#039;re already on the last page.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Result Entry ===&lt;br /&gt;
&lt;br /&gt;
Fields returned by the api/mods endpoint are marked with a check (✓) in the &amp;quot;Short&amp;quot; column, and those returned the the api/mods/{name} endpoint are marked with a check in the &amp;quot;Full&amp;quot; column.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | Short !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | Full !! Description&lt;br /&gt;
|-&lt;br /&gt;
| created_at || String(ISO 8601) || ✓ || ✓&lt;br /&gt;
| The datetime the mod was uploaded, in the full ISO 8601 format, with a space separator instead of &#039;T&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| current_user_rating || Null || ✓ || ✓&lt;br /&gt;
| Doesn&#039;t seem to be implemented yet. Always null.&lt;br /&gt;
|-&lt;br /&gt;
| description || String || || ✓&lt;br /&gt;
| A longer description of the mod, in text only format.&lt;br /&gt;
|-&lt;br /&gt;
| description_html || String(HTML) || || ✓&lt;br /&gt;
| A longer description of the mod, with HTML tags.&lt;br /&gt;
|-&lt;br /&gt;
| downloads_count || Integer || ✓ || ✓&lt;br /&gt;
| Number of downloads.&lt;br /&gt;
|-&lt;br /&gt;
| first_media_file || [[#Media Files|Media File]] || ✓ || &lt;br /&gt;
| The first media file in the &amp;quot;media_files&amp;quot; list.&lt;br /&gt;
|-&lt;br /&gt;
| game_versions || String[] || ✓ || ✓&lt;br /&gt;
| A list of major Factorio version strings (e.g. &amp;quot;0.13&amp;quot;) starting with 0.13 that the mod is compatible with, &#039;&#039;in addition to&#039;&#039; the version(s) found in &amp;quot;latest_release&amp;quot; / &amp;quot;releases&amp;quot;. &lt;br /&gt;
|-&lt;br /&gt;
| github_path || String || ✓ || ✓&lt;br /&gt;
| A link to the mod&#039;s github project page, just prepend &amp;quot;github.com/&amp;quot;. Can be blank (&amp;quot;&amp;quot;).&lt;br /&gt;
|-&lt;br /&gt;
| homepage || String || ✓ || ✓&lt;br /&gt;
| Usually a URL to the mod&#039;s main project page, but can be any string.&lt;br /&gt;
|-&lt;br /&gt;
| id || Integer || ✓ || ✓&lt;br /&gt;
| A numerical mod ID used to identify the mod in other API endpoints.&lt;br /&gt;
|-&lt;br /&gt;
| latest_release || [[#Releases|Release]] || ✓ || &lt;br /&gt;
| The latest version of the mod available for download. See [[#Releases]]&lt;br /&gt;
|-&lt;br /&gt;
| license_flags || Integer(11 bit) || ✓ || ✓&lt;br /&gt;
| A bit field describing what permissions the mod&#039;s license grants. See [[#License Flags]]&lt;br /&gt;
|-&lt;br /&gt;
| license_name || String || ✓ || ✓&lt;br /&gt;
| The mod&#039;s license name.&lt;br /&gt;
|-&lt;br /&gt;
| license_url || String || ✓ || ✓&lt;br /&gt;
| A URL link to the full license agreement. Can be any string in case of custom licenses.&lt;br /&gt;
|-&lt;br /&gt;
| media_files || [[#Media Files|Media File]][] || || ✓&lt;br /&gt;
| A list of media files, such as screen shots of the mod in action. See [[#Media Files]].&lt;br /&gt;
|-&lt;br /&gt;
| name || String || ✓ || ✓&lt;br /&gt;
| The mod&#039;s machine-readable ID string.&lt;br /&gt;
|-&lt;br /&gt;
| owner || String || ✓ || ✓&lt;br /&gt;
| The Factorio username of the mod&#039;s author.&lt;br /&gt;
|-&lt;br /&gt;
| ratings_count || Integer || ✓ || ✓&lt;br /&gt;
| Doesn&#039;t seem to be implemented yet. Always 0.&lt;br /&gt;
|-&lt;br /&gt;
| releases || [[#Releases|Release]][] || || ✓&lt;br /&gt;
| A list of different versions of the mod available for download. See [[#Releases]]&lt;br /&gt;
|-&lt;br /&gt;
| summary || String || ✓ || ✓&lt;br /&gt;
| A shorter mod description.&lt;br /&gt;
|-&lt;br /&gt;
| tags || [[#Tags|Tag]][] || ✓ || ✓&lt;br /&gt;
| A list of tag objects that categorize the mod. See [[#Tags]].&lt;br /&gt;
|-&lt;br /&gt;
| title || String || ✓ || ✓&lt;br /&gt;
| The mod&#039;s human-readable name.&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || String(ISO 8601) || ✓ || ✓&lt;br /&gt;
| The datetime the mod was last updated, in the full ISO 8601 format, with a space separator instead of &#039;T&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| visits_count || Integer || ✓ || ✓&lt;br /&gt;
| The number of times the mod was viewed, but perhaps only counted on the web interface???&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== License Flags ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;license_flags&amp;quot; is an 11 bit number that describe generally what permissions the mod&#039;s license grants.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 2&amp;lt;sup&amp;gt;n&amp;lt;/sup&amp;gt; !! Title !! Description&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3 | Permissions&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Commercial Use || This software and derivatives may be used for commercial purposes&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Modification || The software may be modified.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Distribution || You may distribute this software.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Patent Use || This license provides an express grant of patent rights from the contributor to the recipient.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Private Use || You may use and modify the software without distributing it.&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3 | Conditions&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Disclose Source || Source code must be made available when distributing the software.&lt;br /&gt;
|-&lt;br /&gt;
| 6 || License &amp;amp; Copyright Notice || Include a copy of the license and copyright notice with the code.&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Same License || Modifications must be released under the same license when distributing the software. In some cases a similar or related license may be used.&lt;br /&gt;
|-&lt;br /&gt;
| 8 || State Changes || Indicate changes made to the code.&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3 | Limitations&lt;br /&gt;
|-&lt;br /&gt;
| 9 || Hold Liable || Software is provided without warranty and the software author/license owner cannot be held liable for damages.&lt;br /&gt;
|-&lt;br /&gt;
| 10 || Trademark Use || This license explicitly states that it does NOT grant you trademark rights, even though licenses without such a statement probably do not grant you any implicit trademark rights.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Tags ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Integer || A numerical ID unique to this tag.&lt;br /&gt;
|-&lt;br /&gt;
| name || String || An all lower-case string used to identify this tag internally.&lt;br /&gt;
|-&lt;br /&gt;
| title || String || The tag&#039;s human-readable tag name.&lt;br /&gt;
|-&lt;br /&gt;
| description || String || A short description for the tag.&lt;br /&gt;
|-&lt;br /&gt;
| type || String || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Currently, there are only a fixed number of tags available, these include:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! id !! type !! name !! title !! description&lt;br /&gt;
|-&lt;br /&gt;
| 1 || t || general || General || Mods that cannot be sorted into other categories&lt;br /&gt;
|-&lt;br /&gt;
| 2 || t || non-game-changing || Non-Game-Changing || Changes only look&amp;amp;feel. New graphics, new sounds, ... such things.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || t || helper-mods || 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;
| 6 || t || big-mods || Big Mods || Too big and/or changes too much of the game to be fit anywhere else&lt;br /&gt;
|-&lt;br /&gt;
| 12 || t || transportation || Transportation || Player transport&lt;br /&gt;
|-&lt;br /&gt;
| 13 || t || logistics || Logistics || Transport of materials&lt;br /&gt;
|-&lt;br /&gt;
| 14 || t || utility || Utility || Helps with certain things the player is doing.&lt;br /&gt;
|-&lt;br /&gt;
| 15 || t || balancing || Balancing ||&lt;br /&gt;
|-&lt;br /&gt;
| 17 || t || enemies || Enemies ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 || t || weapons || Weapons ||&lt;br /&gt;
|-&lt;br /&gt;
| 18 || t || armor || Armor || Armors or armor equipment related.&lt;br /&gt;
|-&lt;br /&gt;
| 19 || t || oil || Oil || Things related to oil related manufacture&lt;br /&gt;
|-&lt;br /&gt;
| 20 || t || logistics-network || Logistics Network || Related to roboports and logistic robots&lt;br /&gt;
|- &lt;br /&gt;
| 21 || t || storage || Storage ||&lt;br /&gt;
|-&lt;br /&gt;
| 22 || t || power-production || Power Production ||&lt;br /&gt;
|-&lt;br /&gt;
| 23 || t || manufacture || Manufacture || Furnaces, assembling machines, production chains&lt;br /&gt;
|-&lt;br /&gt;
| 24 || t || blueprints || Blueprints ||&lt;br /&gt;
|-&lt;br /&gt;
| 25 || t || cheats || Cheats ||&lt;br /&gt;
|- &lt;br /&gt;
| 26 || t || defense || Defense ||&lt;br /&gt;
|-&lt;br /&gt;
| 27 || t || mining || Mining ||&lt;br /&gt;
|-&lt;br /&gt;
| 28 || t || info || Info || Mods that provide additional information to the player&lt;br /&gt;
|-&lt;br /&gt;
| 29 || t || trains || Trains || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Media Files ===&lt;br /&gt;
&lt;br /&gt;
A media file object describes a single image, along with a smaller thumbnail sized version of the image.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Integer || A numerical ID unique to this media file.&lt;br /&gt;
|-&lt;br /&gt;
| width || Integer || Width of the full sized image in pixels.&lt;br /&gt;
|-&lt;br /&gt;
| height || Integer || Height of the full sized image in pixels.&lt;br /&gt;
|-&lt;br /&gt;
| size || Integer || Size of the full image in bytes.&lt;br /&gt;
|-&lt;br /&gt;
| urls || [[#Media URLs|Media URL]] || URLs to the full sized image and a thumbnail, see below.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Media URLs ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| original || String(URL) || URL to full sized image.&lt;br /&gt;
|-&lt;br /&gt;
| thumb || String(URL) || URL to 128x128px sized thumbnail of image.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The original image is in either PNG, JPEG, or GIF formats, with the extensions &amp;quot;.png&amp;quot;, &amp;quot;.jpg&amp;quot;, or &amp;quot;.gif&amp;quot;. All image URLs seem to be located at https://mods-data.factorio.com/pub_data/media_files/ with a file name consisting of 12 alphanumerical characters (of the base64 alphabet) followed by the file extension. The thumbnail URL contains the same code, but instead with a file extension of &amp;quot;.thumb.png&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Releases ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| download_url || String ||&lt;br /&gt;
|-&lt;br /&gt;
| downloads_count || Integer ||&lt;br /&gt;
|-&lt;br /&gt;
| factorio_version || String ||&lt;br /&gt;
|-&lt;br /&gt;
| file_name || String || The file name of the release. Always seems to follow the pattern &amp;quot;{name}_{version}.zip&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| file_size || Integer ||&lt;br /&gt;
|-&lt;br /&gt;
| game_version || String ||&lt;br /&gt;
|-&lt;br /&gt;
| id || Integer || A numerical ID unique to this release.&lt;br /&gt;
|-&lt;br /&gt;
| info_json || Object || A copy of the mod&#039;s info.json file.&lt;br /&gt;
|- &lt;br /&gt;
| released_at || String(ISO 8601) || &lt;br /&gt;
|-&lt;br /&gt;
| version || String || The version string of this mod release. Used to determine dependencies. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Error ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| detail || String ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Languages}}[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Mod_portal_API&amp;diff=146809</id>
		<title>Mod portal API</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Mod_portal_API&amp;diff=146809"/>
		<updated>2017-09-03T22:18:44Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
&lt;br /&gt;
The Mod Portal API is used to both browse and download all mods available on the [https://mods.factorio.com/ official Factorio mod portal]. Using the API does not require any kind of authentication or account information and can be viewed simply by following the URLs below in any web browser.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://mods.factorio.com/api/mods&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More detailed information about a particular mod can be obtained by retrieving the following URL, where {name} is the mod&#039;s name field in the result object.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://mods.factorio.com/api/mods/{name}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Endpoints ==&lt;br /&gt;
&lt;br /&gt;
=== /api/mods ===&lt;br /&gt;
&lt;br /&gt;
GET Parameters:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description&lt;br /&gt;
|-&lt;br /&gt;
| order ||&lt;br /&gt;
|-&lt;br /&gt;
| owner ||&lt;br /&gt;
|-&lt;br /&gt;
| page ||&lt;br /&gt;
|-&lt;br /&gt;
| page_size ||&lt;br /&gt;
|-&lt;br /&gt;
| q ||&lt;br /&gt;
|-&lt;br /&gt;
| tags ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Returns [[#Mod List Response]]&lt;br /&gt;
&lt;br /&gt;
=== /api/mods/{mod_name} ===&lt;br /&gt;
&lt;br /&gt;
=== /api/messages ===&lt;br /&gt;
&lt;br /&gt;
=== /api/users ===&lt;br /&gt;
&lt;br /&gt;
== JSON Object Types ==&lt;br /&gt;
&lt;br /&gt;
=== Mod List Response ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| pagination || [[#Pagination|Pagination]] || See [[#Pagination]]&lt;br /&gt;
|-&lt;br /&gt;
| results || [[#Result Entry|Result]][] || A list of mods, matching any filters you specified.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pagination ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| count || Integer || Total number of mods that match your specified filters.&lt;br /&gt;
|-&lt;br /&gt;
| links || [[#Pagination_Links|Links]] || Utility links to mod portal api requests, preserving all filters and search queries.&lt;br /&gt;
|-&lt;br /&gt;
| page || Integer || The current page number.&lt;br /&gt;
|-&lt;br /&gt;
| page_count || Integer || The total number of pages returned.&lt;br /&gt;
|-&lt;br /&gt;
| page_size || Integer || The number of results per page.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pagination Links ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| first || String(URL) || URL to the first page of the results, or null if you&#039;re already on the first page.&lt;br /&gt;
|- &lt;br /&gt;
| prev || String(URL) || URL to the previous page of the results, or null if you&#039;re already on the first page.&lt;br /&gt;
|-&lt;br /&gt;
| next || String(URL) || URL to the next page of the results, or null if you&#039;re already on the last page.&lt;br /&gt;
|-&lt;br /&gt;
| last || String(URL) || URL to the last page of the results, or null if you&#039;re already on the last page.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Result Entry ===&lt;br /&gt;
&lt;br /&gt;
Fields returned by the api/mods endpoint are marked with a check (✓) in the &amp;quot;Short&amp;quot; column, and those returned the the api/mods/{name} endpoint are marked with a check in the &amp;quot;Full&amp;quot; column.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | Short !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | Full !! Description&lt;br /&gt;
|-&lt;br /&gt;
| created_at || String(ISO 8601) || ✓ || ✓&lt;br /&gt;
| The datetime the mod was uploaded, in the full ISO 8601 format, with a space separator instead of &#039;T&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| current_user_rating || Null || ✓ || ✓&lt;br /&gt;
| Doesn&#039;t seem to be implemented yet. Always null.&lt;br /&gt;
|-&lt;br /&gt;
| description || String || || ✓&lt;br /&gt;
| A longer description of the mod, in text only format.&lt;br /&gt;
|-&lt;br /&gt;
| description_html || String(HTML) || || ✓&lt;br /&gt;
| A longer description of the mod, with HTML tags.&lt;br /&gt;
|-&lt;br /&gt;
| downloads_count || Integer || ✓ || ✓&lt;br /&gt;
| Number of downloads.&lt;br /&gt;
|-&lt;br /&gt;
| first_media_file || [[#Media Files|Media File]] || ✓ || &lt;br /&gt;
| The first media file in the &amp;quot;media_files&amp;quot; list.&lt;br /&gt;
|-&lt;br /&gt;
| game_versions || String[] || ✓ || ✓&lt;br /&gt;
| A list of major Factorio version strings (e.g. &amp;quot;0.13&amp;quot;) starting with 0.13 that the mod is compatible with, &#039;&#039;in addition to&#039;&#039; the version(s) found in &amp;quot;latest_release&amp;quot; / &amp;quot;releases&amp;quot;. &lt;br /&gt;
|-&lt;br /&gt;
| github_path || String || ✓ || ✓&lt;br /&gt;
| A link to the mod&#039;s github project page, just prepend &amp;quot;github.com/&amp;quot;. Can be blank (&amp;quot;&amp;quot;).&lt;br /&gt;
|-&lt;br /&gt;
| homepage || String || ✓ || ✓&lt;br /&gt;
| Usually a URL to the mod&#039;s main project page, but can be any string.&lt;br /&gt;
|-&lt;br /&gt;
| id || Integer || ✓ || ✓&lt;br /&gt;
| A numerical mod ID used to identify the mod in other API endpoints.&lt;br /&gt;
|-&lt;br /&gt;
| latest_release || [[#Releases|Release]] || ✓ || &lt;br /&gt;
| The latest version of the mod available for download. See [[#Releases]]&lt;br /&gt;
|-&lt;br /&gt;
| license_flags || Integer(11 bit) || ✓ || ✓&lt;br /&gt;
| A bit field describing what permissions the mod&#039;s license grants. See [[#License Flags]]&lt;br /&gt;
|-&lt;br /&gt;
| license_name || String || ✓ || ✓&lt;br /&gt;
| The mod&#039;s license name.&lt;br /&gt;
|-&lt;br /&gt;
| license_url || String || ✓ || ✓&lt;br /&gt;
| A URL link to the full license agreement. Can be any string in case of custom licenses.&lt;br /&gt;
|-&lt;br /&gt;
| media_files || [[#Media Files|Media File]][] || || ✓&lt;br /&gt;
| A list of media files, such as screen shots of the mod in action. See [[#Media Files]].&lt;br /&gt;
|-&lt;br /&gt;
| name || String || ✓ || ✓&lt;br /&gt;
| The mod&#039;s machine-readable ID string.&lt;br /&gt;
|-&lt;br /&gt;
| owner || String || ✓ || ✓&lt;br /&gt;
| The Factorio username of the mod&#039;s author.&lt;br /&gt;
|-&lt;br /&gt;
| ratings_count || Integer || ✓ || ✓&lt;br /&gt;
| Doesn&#039;t seem to be implemented yet. Always 0.&lt;br /&gt;
|-&lt;br /&gt;
| releases || [[#Releases|Release]][] || || ✓&lt;br /&gt;
| A list of different versions of the mod available for download. See [[#Releases]]&lt;br /&gt;
|-&lt;br /&gt;
| summary || String || ✓ || ✓&lt;br /&gt;
| A shorter mod description.&lt;br /&gt;
|-&lt;br /&gt;
| tags || [[#Tags|Tag]][] || ✓ || ✓&lt;br /&gt;
| A list of tag objects that categorize the mod. See [[#Tags]].&lt;br /&gt;
|-&lt;br /&gt;
| title || String || ✓ || ✓&lt;br /&gt;
| The mod&#039;s human-readable name.&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || String(ISO 8601) || ✓ || ✓&lt;br /&gt;
| The datetime the mod was last updated, in the full ISO 8601 format, with a space separator instead of &#039;T&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| visits_count || Integer || ✓ || ✓&lt;br /&gt;
| The number of times the mod was viewed, but perhaps only counted on the web interface???&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== License Flags ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;license_flags&amp;quot; is an 11 bit number that describe generally what permissions the mod&#039;s license grants.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 2&amp;lt;sup&amp;gt;n&amp;lt;/sup&amp;gt; !! Title !! Description&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3 | Permissions&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Commercial Use || This software and derivatives may be used for commercial purposes&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Modification || The software may be modified.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Distribution || You may distribute this software.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Patent Use || This license provides an express grant of patent rights from the contributor to the recipient.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Private Use || You may use and modify the software without distributing it.&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3 | Conditions&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Disclose Source || Source code must be made available when distributing the software.&lt;br /&gt;
|-&lt;br /&gt;
| 6 || License &amp;amp; Copyright Notice || Include a copy of the license and copyright notice with the code.&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Same License || Modifications must be released under the same license when distributing the software. In some cases a similar or related license may be used.&lt;br /&gt;
|-&lt;br /&gt;
| 8 || State Changes || Indicate changes made to the code.&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3 | Limitations&lt;br /&gt;
|-&lt;br /&gt;
| 9 || Hold Liable || Software is provided without warranty and the software author/license owner cannot be held liable for damages.&lt;br /&gt;
|-&lt;br /&gt;
| 10 || Trademark Use || This license explicitly states that it does NOT grant you trademark rights, even though licenses without such a statement probably do not grant you any implicit trademark rights.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Tags ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Integer || A numerical ID unique to this tag.&lt;br /&gt;
|-&lt;br /&gt;
| name || String || An all lower-case string used to identify this tag internally.&lt;br /&gt;
|-&lt;br /&gt;
| title || String || The tag&#039;s human-readable tag name.&lt;br /&gt;
|-&lt;br /&gt;
| description || String || A short description for the tag.&lt;br /&gt;
|-&lt;br /&gt;
| type || String || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Currently, there are only a fixed number of tags available, these include:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! id !! type !! name !! title !! description&lt;br /&gt;
|-&lt;br /&gt;
| 1 || t || general || General || Mods that cannot be sorted into other categories&lt;br /&gt;
|-&lt;br /&gt;
| 2 || t || non-game-changing || Non-Game-Changing || Changes only look&amp;amp;feel. New graphics, new sounds, ... such things.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || t || helper-mods || 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;
| 6 || t || big-mods || Big Mods || Too big and/or changes too much of the game to be fit anywhere else&lt;br /&gt;
|-&lt;br /&gt;
| 12 || t || transportation || Transportation || Player transport&lt;br /&gt;
|-&lt;br /&gt;
| 13 || t || logistics || Logistics || Transport of materials&lt;br /&gt;
|-&lt;br /&gt;
| 14 || t || utility || Utility || Helps with certain things the player is doing.&lt;br /&gt;
|-&lt;br /&gt;
| 15 || t || balancing || Balancing ||&lt;br /&gt;
|-&lt;br /&gt;
| 17 || t || enemies || Enemies ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 || t || weapons || Weapons ||&lt;br /&gt;
|-&lt;br /&gt;
| 18 || t || armor || Armor || Armors or armor equipment related.&lt;br /&gt;
|-&lt;br /&gt;
| 19 || t || oil || Oil || Things related to oil related manufacture&lt;br /&gt;
|-&lt;br /&gt;
| 20 || t || logistics-network || Logistics Network || Related to roboports and logistic robots&lt;br /&gt;
|- &lt;br /&gt;
| 21 || t || storage || Storage ||&lt;br /&gt;
|-&lt;br /&gt;
| 22 || t || power-production || Power Production ||&lt;br /&gt;
|-&lt;br /&gt;
| 23 || t || manufacture || Manufacture || Furnaces, assembling machines, production chains&lt;br /&gt;
|-&lt;br /&gt;
| 24 || t || blueprints || Blueprints ||&lt;br /&gt;
|-&lt;br /&gt;
| 25 || t || cheats || Cheats ||&lt;br /&gt;
|- &lt;br /&gt;
| 26 || t || defense || Defense ||&lt;br /&gt;
|-&lt;br /&gt;
| 27 || t || mining || Mining ||&lt;br /&gt;
|-&lt;br /&gt;
| 28 || t || info || Info || Mods that provide additional information to the player&lt;br /&gt;
|-&lt;br /&gt;
| 29 || t || trains || Trains || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Media Files ===&lt;br /&gt;
&lt;br /&gt;
A media file object describes a single image, along with a smaller thumbnail sized version of the image.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Integer || A numerical ID unique to this media file.&lt;br /&gt;
|-&lt;br /&gt;
| width || Integer || Width of the full sized image in pixels.&lt;br /&gt;
|-&lt;br /&gt;
| height || Integer || Height of the full sized image in pixels.&lt;br /&gt;
|-&lt;br /&gt;
| size || Integer || Size of the full image in bytes.&lt;br /&gt;
|-&lt;br /&gt;
| urls || [[#Media URLs|Media URL]] || URLs to the full sized image and a thumbnail, see below.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Media URLs ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| original || String(URL) || URL to full sized image.&lt;br /&gt;
|-&lt;br /&gt;
| thumb || String(URL) || URL to 128x128px sized thumbnail of image.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The original image is in either PNG, JPEG, or GIF formats, with the extensions &amp;quot;.png&amp;quot;, &amp;quot;.jpg&amp;quot;, or &amp;quot;.gif&amp;quot;. All image URLs seem to be located at https://mods-data.factorio.com/pub_data/media_files/ with a file name consisting of 12 alphanumerical characters (of the base64 alphabet) followed by the file extension. The thumbnail URL contains the same code, but instead with a file extension of &amp;quot;.thumb.png&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Releases ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| download_url || String ||&lt;br /&gt;
|-&lt;br /&gt;
| downloads_count || Integer ||&lt;br /&gt;
|-&lt;br /&gt;
| factorio_version || String ||&lt;br /&gt;
|-&lt;br /&gt;
| file_name || String || The file name of the release. Always seems to follow the pattern &amp;quot;{name}_{version}.zip&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| file_size || Integer ||&lt;br /&gt;
|-&lt;br /&gt;
| game_version || String ||&lt;br /&gt;
|-&lt;br /&gt;
| id || Integer || A numerical ID unique to this release.&lt;br /&gt;
|-&lt;br /&gt;
| info_json || Object || A copy of the mod&#039;s info.json file.&lt;br /&gt;
|- &lt;br /&gt;
| released_at || String(ISO 8601) || &lt;br /&gt;
|-&lt;br /&gt;
| version || String || The version string of this mod release. Used to determine dependencies. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Error ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| detail || String ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Languages}}[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Data_types&amp;diff=145800</id>
		<title>Data types</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Data_types&amp;diff=145800"/>
		<updated>2017-08-25T01:49:57Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* dict */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}} [[Category:Technical]]&lt;br /&gt;
&lt;br /&gt;
This page describes common binary data types used by Factorio, and most modern day computer applications, internally.&lt;br /&gt;
&lt;br /&gt;
== Properties ==&lt;br /&gt;
&lt;br /&gt;
=== Endianness ===&lt;br /&gt;
&lt;br /&gt;
All data stored in computers are stored in single, small unit of data called a &amp;quot;byte&amp;quot;. Larger units of data are split into multiple bytes. The order in which sequential bytes are assembled together to form a larger unit of data is referred to as it&#039;s &amp;quot;endianess&amp;quot;. &#039;&#039;&#039;All data saved locally by Factorio is stored in &amp;quot;little&amp;quot;-endian format&#039;&#039;&#039; (because Intel favored little endian processors in the ancient times). All data transferred over the network by Factorio is done in &amp;quot;big&amp;quot;-endian format (the standard for network stuffs, so much so that it&#039;s often refered to as &amp;quot;network&amp;quot;-endian). (Please correct any of this if I&#039;m wrong!!) For more information about endianness, please see the [https://en.wikipedia.org/wiki/Endianness Wikipedia entry].&lt;br /&gt;
&lt;br /&gt;
=== Signedness ===&lt;br /&gt;
&lt;br /&gt;
Another property of multi-byte data types is it&#039;s signedness. Please see the [https://en.wikipedia.org/wiki/Signedness wikipedia entry]. Data types without a u- prefix are signed, and &#039;&#039;&#039;those marked with a u- prefixed are unsigned&#039;&#039;&#039;. I&#039;m not certain which type of signedness Factorio uses - perhaps it is machine dependant, but for me it always appears to be [https://en.wikipedia.org/wiki/Two%27s_complement two&#039;s complement].&lt;br /&gt;
&lt;br /&gt;
== Data Types ==&lt;br /&gt;
&lt;br /&gt;
=== bool ===&lt;br /&gt;
&lt;br /&gt;
A 1 byte value. Considered True iff value equals 1, otherwise it is considered False.&lt;br /&gt;
&lt;br /&gt;
=== byte ===&lt;br /&gt;
&lt;br /&gt;
1 byte long integer.&lt;br /&gt;
&lt;br /&gt;
=== short ===&lt;br /&gt;
&lt;br /&gt;
2 byte long integer.&lt;br /&gt;
&lt;br /&gt;
=== int ===&lt;br /&gt;
&lt;br /&gt;
4 byte long integer.&lt;br /&gt;
&lt;br /&gt;
=== long ===&lt;br /&gt;
&lt;br /&gt;
8 byte long integer.&lt;br /&gt;
&lt;br /&gt;
=== float ===&lt;br /&gt;
&lt;br /&gt;
An 4 byte (32 bit) long [https://en.wikipedia.org/wiki/Floating-point_arithmetic floating point number] stored in a special format with two fields - the number&#039;s exponent, and it&#039;s [https://en.wikipedia.org/wiki/Significand mantissa]. This format is described by the [https://en.wikipedia.org/wiki/Single-precision_floating-point_format 32-bit data type in IEEE 754].&lt;br /&gt;
&lt;br /&gt;
=== double ===&lt;br /&gt;
&lt;br /&gt;
An 8 byte (64 bit) long [https://en.wikipedia.org/wiki/Floating-point_arithmetic floating point number] stored in a special format with two fields - the number&#039;s exponent, and it&#039;s [https://en.wikipedia.org/wiki/Significand mantissa]. This format is described by the [https://en.wikipedia.org/wiki/Double-precision_floating-point_format 64-bit data type in IEEE 754].&lt;br /&gt;
&lt;br /&gt;
=== string ===&lt;br /&gt;
&lt;br /&gt;
Strings in Factorio are stored [https://en.wikipedia.org/wiki/String_(computer_science)#Length-prefixed Pascal-style] - they&#039;re a variable length data type with two fields: an [[#int|int]] describing how many bytes long the string data is, and then the string data itself.&lt;br /&gt;
&lt;br /&gt;
=== array ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;array&amp;lt;element type&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arrays are a container type. Like a [[#string|string]], they&#039;re prefixed with an [[#int|int]] describing how many elements are in the array, followed by that many elements of the specified element type back to back.&lt;br /&gt;
&lt;br /&gt;
=== dict ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;dict&amp;lt;key type, value type&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dictionaries (or &amp;quot;dict&amp;quot;s for short) are like [[#array|arrays]], but their elements consist of (key, value) pairs that map their key (usually a string, or a number) to their value. Just like [[#array|arrays]], they&#039;re prefixed with an [[#int|int]] describing how many (key, value) pairs are in the dict, followed by that many (key, value) pairs.&lt;br /&gt;
Each key should be unique and only appear once. In a few esoteric languages, if a key is provided multiple times then only the last value is used - but in Factorio, assume any dict with multiple identical keys is malformed and error.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [http://lua-api.factorio.com/latest/Builtin-Types.html Factorios Lua API documentation about its builtin types]&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Achievement_file_format&amp;diff=145799</id>
		<title>Achievement file format</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Achievement_file_format&amp;diff=145799"/>
		<updated>2017-08-25T01:41:12Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* Achievement Types */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}} [[Category:Technical]]&lt;br /&gt;
This is a technical description of the achievement file format, used by Factorio to store player&#039;s achievement progress in the files &amp;quot;achievements.dat&amp;quot; and &amp;quot;achievements-modded.dat&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Yes - this information can be used to &amp;quot;cheat&amp;quot; Factorio by simply writing to the achievement file(s) in such a way as if you had met all the achievement requirements, open up Factorio, and then suddenly have all achievements unlocked. The goal of this document is to share how to _read_ the achievement file(s) - so that third party applications can do new and interesting things with that information. Enjoy!&lt;br /&gt;
&lt;br /&gt;
See the page on [[Data_Types|data types]] for an explanation of the different types of data used in this document.&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
&lt;br /&gt;
The overall file format is as follows. Note that in this file, [[Data_Types#array|array]] length is stored as a [[Data_Types#short|short]], not an [[Data_Types#int|int]]!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]][4]&lt;br /&gt;
| The [[Version_String_Format|version string]] of Factorio that generated this file.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#array|array]]&amp;lt;[[#Achievement Header Info|bytes]]&amp;gt;&lt;br /&gt;
| [[#Achievement Header Info|Achievement header info]]. Variable length. See the section for more information.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#array|array]]&amp;lt;[[#Achievement Content Info|bytes]]&amp;gt;&lt;br /&gt;
| [[#Achievement Content Info|Achievement content info]]. Variable length. See the section for more information.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]][*]&lt;br /&gt;
| Currently tracked achievements, given as a series of [[Data_Types#short|shorts]] up until the end of the file, with each representing the index number of an achievement. The order of achievements in this series matches the order of which the player has them tracked in game.&lt;br /&gt;
|}&lt;br /&gt;
This format has been valid since at least version 0.14.x.&lt;br /&gt;
&lt;br /&gt;
== Achievement Header Info ==&lt;br /&gt;
&lt;br /&gt;
The header contains information about what type of data fields each achievement has.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#string|string]]&lt;br /&gt;
| Achievement type. This determines what kind of data fields this achievement contains in the content array.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#string|string]]&lt;br /&gt;
| Achievement string id - the one used internally by Factorio.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]]&lt;br /&gt;
| Achievement index number. This number is used to map achievements between this header info array, the content info array, and the tracked achievements list in this file. These index numbers are non-normative, so they won&#039;t always match up with the same achievement.&amp;lt;br&amp;gt; Note: the mapping of index numbers to achievement ids are continuous, but start at index 1 (there is no index 0) - because LUA tables start at 1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Achievement Content Info ==&lt;br /&gt;
&lt;br /&gt;
This contains the actual data of each achievement. It&#039;s important to note that not every achievement listed in the header has a matching content section here.&lt;br /&gt;
&lt;br /&gt;
Also note that this array always ends with an index number of 0. When reading, either ignore this, or manually add in a blank achievement into your meta table at index zero with no fields.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]]&lt;br /&gt;
| Achievement index number. This matches up with the index number in the [[#Achievement Header Info|Achievement header info]].&lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| The achievement&#039;s progress information. The structure and length of this is determined by the [[#Achievement Types|achievement&#039;s type]]. See the table below for a list of achievement types.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Achievement Types ==&lt;br /&gt;
&lt;br /&gt;
If new achievement types are added in the future, the achievement files will be unparse-able. Please add any new types you find here, thanks!&lt;br /&gt;
&lt;br /&gt;
See the [[Prototype/Achievement]] base prototype page for more information about achievement structure.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Achievement&amp;lt;br&amp;gt;Type !! Binary&amp;lt;br&amp;gt;Fields(s) !! Field(s) Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/BuildEntityAchievement|build-entity-achievement]]&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/CombatRobotCount|combat-robot-count]]&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#int|int]]&lt;br /&gt;
|&lt;br /&gt;
* The greatest number of combat robots you&#039;ve had following you.&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/ConstructWithRobotsAchievement|construct-with-robots-achievement]]&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#int|int]]&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Total number of objects constructed using robots.&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/DeconstructWithRobotsAchievement|deconstruct-with-robots-achievement]]&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#int|int]]&lt;br /&gt;
|&lt;br /&gt;
* Total number of objects deconstructed using robots.&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/DeliverByRobotsAchievement|deliver-by-robots-achievement]]&lt;br /&gt;
|&lt;br /&gt;
* byte[8]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 8 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/DontBuildEntityAchievement|dont-build-entity-achievement]]&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;TODO&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;TODO&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/DontCraftManuallyAchievement|dont-craft-manually-achievement]]&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;TODO&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;TODO&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/DontUseEntityInEnergyProductionAchievement|dont-use-entity-in-energy-production-achievement]]&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* Maximum number of Joules produced per hour, only including power produced from entities listed under &amp;quot;[[Prototype/DontUseEntityInEnergyProductionAchievement#included|included]]&amp;quot;, and excluding those listed under &amp;quot;[[Prototype/DontUseEntityInEnergyProductionAchievement#excluded|excluded]]&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/FinishTheGameAchievement|finish-the-game-achievement]]&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;TODO&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;TODO&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/GroupAttackAchievement|group-attack-achievement]]&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/KillAchievement|kill-achievement]]&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The greatest number of an entity killed (e.g. trees, spawners).&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/PlayerDamagedAchievement|player-damaged-achievement]]&lt;br /&gt;
| &lt;br /&gt;
* [[Data_Types#float|float]]&lt;br /&gt;
* [[Data_Types#bool|bool]]&lt;br /&gt;
|&lt;br /&gt;
* The maximum amount of damage you&#039;ve taken in a single hit.&lt;br /&gt;
* True if the you survived that hit, False if you died.&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/ProduceAchievement|produce-achievement]]&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The total number of the item you&#039;ve produced.&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/ProducePerHourAchievement|produce-per-hour-achievement]]&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The maximum amount of the item produced per hour.&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/ResearchAchievement|research-achievement]]&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/TrainPathAchievement|train-path-achievement]]&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The longest path (in tiles) planned by a train.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;combat-robot-count&amp;quot; is currently the only achievement type that doesn&#039;t end in &amp;quot;-achievement&amp;quot;. This is not an error.&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Achievement_file_format&amp;diff=145798</id>
		<title>Achievement file format</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Achievement_file_format&amp;diff=145798"/>
		<updated>2017-08-25T01:38:54Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* Achievement Types */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}} [[Category:Technical]]&lt;br /&gt;
This is a technical description of the achievement file format, used by Factorio to store player&#039;s achievement progress in the files &amp;quot;achievements.dat&amp;quot; and &amp;quot;achievements-modded.dat&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Yes - this information can be used to &amp;quot;cheat&amp;quot; Factorio by simply writing to the achievement file(s) in such a way as if you had met all the achievement requirements, open up Factorio, and then suddenly have all achievements unlocked. The goal of this document is to share how to _read_ the achievement file(s) - so that third party applications can do new and interesting things with that information. Enjoy!&lt;br /&gt;
&lt;br /&gt;
See the page on [[Data_Types|data types]] for an explanation of the different types of data used in this document.&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
&lt;br /&gt;
The overall file format is as follows. Note that in this file, [[Data_Types#array|array]] length is stored as a [[Data_Types#short|short]], not an [[Data_Types#int|int]]!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]][4]&lt;br /&gt;
| The [[Version_String_Format|version string]] of Factorio that generated this file.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#array|array]]&amp;lt;[[#Achievement Header Info|bytes]]&amp;gt;&lt;br /&gt;
| [[#Achievement Header Info|Achievement header info]]. Variable length. See the section for more information.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#array|array]]&amp;lt;[[#Achievement Content Info|bytes]]&amp;gt;&lt;br /&gt;
| [[#Achievement Content Info|Achievement content info]]. Variable length. See the section for more information.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]][*]&lt;br /&gt;
| Currently tracked achievements, given as a series of [[Data_Types#short|shorts]] up until the end of the file, with each representing the index number of an achievement. The order of achievements in this series matches the order of which the player has them tracked in game.&lt;br /&gt;
|}&lt;br /&gt;
This format has been valid since at least version 0.14.x.&lt;br /&gt;
&lt;br /&gt;
== Achievement Header Info ==&lt;br /&gt;
&lt;br /&gt;
The header contains information about what type of data fields each achievement has.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#string|string]]&lt;br /&gt;
| Achievement type. This determines what kind of data fields this achievement contains in the content array.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#string|string]]&lt;br /&gt;
| Achievement string id - the one used internally by Factorio.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]]&lt;br /&gt;
| Achievement index number. This number is used to map achievements between this header info array, the content info array, and the tracked achievements list in this file. These index numbers are non-normative, so they won&#039;t always match up with the same achievement.&amp;lt;br&amp;gt; Note: the mapping of index numbers to achievement ids are continuous, but start at index 1 (there is no index 0) - because LUA tables start at 1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Achievement Content Info ==&lt;br /&gt;
&lt;br /&gt;
This contains the actual data of each achievement. It&#039;s important to note that not every achievement listed in the header has a matching content section here.&lt;br /&gt;
&lt;br /&gt;
Also note that this array always ends with an index number of 0. When reading, either ignore this, or manually add in a blank achievement into your meta table at index zero with no fields.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]]&lt;br /&gt;
| Achievement index number. This matches up with the index number in the [[#Achievement Header Info|Achievement header info]].&lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| The achievement&#039;s progress information. The structure and length of this is determined by the [[#Achievement Types|achievement&#039;s type]]. See the table below for a list of achievement types.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Achievement Types ==&lt;br /&gt;
&lt;br /&gt;
If new achievement types are added in the future, the achievement files will be unparse-able. Please add any new types you find here, thanks!&lt;br /&gt;
&lt;br /&gt;
See the [[Prototype/Achievement]] base prototype page for more information about achievement structure.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Achievement&amp;lt;br&amp;gt;Type !! Binary&amp;lt;br&amp;gt;Fields(s) !! Field(s) Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/BuildEntityAchievement|build-entity-achievement]]&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/CombatRobotCount|combat-robot-count]]&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#int|int]]&lt;br /&gt;
|&lt;br /&gt;
* The greatest number of combat robots you&#039;ve had following you.&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/ConstructWithRobotsAchievement|construct-with-robots-achievement]]&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#int|int]]&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Total number of objects constructed using robots.&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/DeconstructWithRobotsAchievement|deconstruct-with-robots-achievement]]&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#int|int]]&lt;br /&gt;
|&lt;br /&gt;
* Total number of objects deconstructed using robots.&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/DeliverByRobotsAchievement|deliver-by-robots-achievement]]&lt;br /&gt;
|&lt;br /&gt;
* byte[8]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 8 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/DontBuildEntityAchievement|dont-build-entity-achievement]]&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;TODO&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;TODO&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/DontCraftManuallyAchievement|dont-craft-manually-achievement]]&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;TODO&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;TODO&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/DontUseEntityInEnergyProductionAchievement|dont-use-entity-in-energy-production-achievement]]&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* Maximum number of Joules produced per hour, only including power produced from entities listed under &amp;quot;included&amp;quot;, and excluding those listed under &amp;quot;excluded&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/FinishTheGameAchievement|finish-the-game-achievement]]&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;TODO&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;TODO&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/GroupAttackAchievement|group-attack-achievement]]&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/KillAchievement|kill-achievement]]&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The greatest number of an entity killed (e.g. trees, spawners).&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/PlayerDamagedAchievement|player-damaged-achievement]]&lt;br /&gt;
| &lt;br /&gt;
* [[Data_Types#float|float]]&lt;br /&gt;
* [[Data_Types#bool|bool]]&lt;br /&gt;
|&lt;br /&gt;
* The maximum amount of damage you&#039;ve taken in a single hit.&lt;br /&gt;
* True if the you survived that hit, False if you died.&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/ProduceAchievement|produce-achievement]]&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The total number of the item you&#039;ve produced.&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/ProducePerHourAchievement|produce-per-hour-achievement]]&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The maximum amount of the item produced per hour.&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/ResearchAchievement|research-achievement]]&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/TrainPathAchievement|train-path-achievement]]&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The longest path (in tiles) planned by a train.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;combat-robot-count&amp;quot; is currently the only achievement type that doesn&#039;t end in &amp;quot;-achievement&amp;quot;. This is not an error.&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Achievement_file_format&amp;diff=145797</id>
		<title>Achievement file format</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Achievement_file_format&amp;diff=145797"/>
		<updated>2017-08-25T01:37:37Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* Achievement Types */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}} [[Category:Technical]]&lt;br /&gt;
This is a technical description of the achievement file format, used by Factorio to store player&#039;s achievement progress in the files &amp;quot;achievements.dat&amp;quot; and &amp;quot;achievements-modded.dat&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Yes - this information can be used to &amp;quot;cheat&amp;quot; Factorio by simply writing to the achievement file(s) in such a way as if you had met all the achievement requirements, open up Factorio, and then suddenly have all achievements unlocked. The goal of this document is to share how to _read_ the achievement file(s) - so that third party applications can do new and interesting things with that information. Enjoy!&lt;br /&gt;
&lt;br /&gt;
See the page on [[Data_Types|data types]] for an explanation of the different types of data used in this document.&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
&lt;br /&gt;
The overall file format is as follows. Note that in this file, [[Data_Types#array|array]] length is stored as a [[Data_Types#short|short]], not an [[Data_Types#int|int]]!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]][4]&lt;br /&gt;
| The [[Version_String_Format|version string]] of Factorio that generated this file.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#array|array]]&amp;lt;[[#Achievement Header Info|bytes]]&amp;gt;&lt;br /&gt;
| [[#Achievement Header Info|Achievement header info]]. Variable length. See the section for more information.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#array|array]]&amp;lt;[[#Achievement Content Info|bytes]]&amp;gt;&lt;br /&gt;
| [[#Achievement Content Info|Achievement content info]]. Variable length. See the section for more information.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]][*]&lt;br /&gt;
| Currently tracked achievements, given as a series of [[Data_Types#short|shorts]] up until the end of the file, with each representing the index number of an achievement. The order of achievements in this series matches the order of which the player has them tracked in game.&lt;br /&gt;
|}&lt;br /&gt;
This format has been valid since at least version 0.14.x.&lt;br /&gt;
&lt;br /&gt;
== Achievement Header Info ==&lt;br /&gt;
&lt;br /&gt;
The header contains information about what type of data fields each achievement has.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#string|string]]&lt;br /&gt;
| Achievement type. This determines what kind of data fields this achievement contains in the content array.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#string|string]]&lt;br /&gt;
| Achievement string id - the one used internally by Factorio.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]]&lt;br /&gt;
| Achievement index number. This number is used to map achievements between this header info array, the content info array, and the tracked achievements list in this file. These index numbers are non-normative, so they won&#039;t always match up with the same achievement.&amp;lt;br&amp;gt; Note: the mapping of index numbers to achievement ids are continuous, but start at index 1 (there is no index 0) - because LUA tables start at 1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Achievement Content Info ==&lt;br /&gt;
&lt;br /&gt;
This contains the actual data of each achievement. It&#039;s important to note that not every achievement listed in the header has a matching content section here.&lt;br /&gt;
&lt;br /&gt;
Also note that this array always ends with an index number of 0. When reading, either ignore this, or manually add in a blank achievement into your meta table at index zero with no fields.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]]&lt;br /&gt;
| Achievement index number. This matches up with the index number in the [[#Achievement Header Info|Achievement header info]].&lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| The achievement&#039;s progress information. The structure and length of this is determined by the [[#Achievement Types|achievement&#039;s type]]. See the table below for a list of achievement types.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Achievement Types ==&lt;br /&gt;
&lt;br /&gt;
If new achievement types are added in the future, the achievement files will be unparse-able. Please add any new types you find here, thanks!&lt;br /&gt;
&lt;br /&gt;
See the [[Prototype/Achievement]] base prototype page for more information about achievement structure.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Achievement&amp;lt;br&amp;gt;Type !! Data&amp;lt;br&amp;gt;Fields(s) !! Field(s) Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/BuildEntityAchievement|build-entity-achievement]]&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/CombatRobotCount|combat-robot-count]]&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#int|int]]&lt;br /&gt;
|&lt;br /&gt;
* The greatest number of combat robots you&#039;ve had following you.&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/ConstructWithRobotsAchievement|construct-with-robots-achievement]]&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#int|int]]&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Total number of objects constructed using robots.&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/DeconstructWithRobotsAchievement|deconstruct-with-robots-achievement]]&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#int|int]]&lt;br /&gt;
|&lt;br /&gt;
* Total number of objects deconstructed using robots.&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/DeliverByRobotsAchievement|deliver-by-robots-achievement]]&lt;br /&gt;
|&lt;br /&gt;
* byte[8]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 8 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/DontBuildEntityAchievement|dont-build-entity-achievement]]&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;TODO&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;TODO&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/DontCraftManuallyAchievement|dont-craft-manually-achievement]]&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;TODO&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;TODO&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/DontUseEntityInEnergyProductionAchievement|dont-use-entity-in-energy-production-achievement]]&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* Maximum number of Joules produced per hour, only including power produced from entities listed under &amp;quot;included&amp;quot;, and excluding those listed under &amp;quot;excluded&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/FinishTheGameAchievement|finish-the-game-achievement]]&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;TODO&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;TODO&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/GroupAttackAchievement|group-attack-achievement]]&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/KillAchievement|kill-achievement]]&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The greatest number of an entity killed (e.g. trees, spawners).&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/PlayerDamagedAchievement|player-damaged-achievement]]&lt;br /&gt;
| &lt;br /&gt;
* [[Data_Types#float|float]]&lt;br /&gt;
* [[Data_Types#bool|bool]]&lt;br /&gt;
|&lt;br /&gt;
* The maximum amount of damage you&#039;ve taken in a single hit.&lt;br /&gt;
* True if the you survived that hit, False if you died.&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/ProduceAchievement|produce-achievement]]&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The total number of the item you&#039;ve produced.&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/ProducePerHourAchievement|produce-per-hour-achievement]]&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The maximum amount of the item produced per hour.&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/ResearchAchievement|research-achievement]]&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/TrainPathAchievement|train-path-achievement]]&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The longest path (in tiles) planned by a train.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;combat-robot-count&amp;quot; is currently the only achievement type that doesn&#039;t end in &amp;quot;-achievement&amp;quot;. This is not an error.&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Achievement_file_format&amp;diff=145796</id>
		<title>Achievement file format</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Achievement_file_format&amp;diff=145796"/>
		<updated>2017-08-25T01:36:37Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* Achievement Types */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}} [[Category:Technical]]&lt;br /&gt;
This is a technical description of the achievement file format, used by Factorio to store player&#039;s achievement progress in the files &amp;quot;achievements.dat&amp;quot; and &amp;quot;achievements-modded.dat&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Yes - this information can be used to &amp;quot;cheat&amp;quot; Factorio by simply writing to the achievement file(s) in such a way as if you had met all the achievement requirements, open up Factorio, and then suddenly have all achievements unlocked. The goal of this document is to share how to _read_ the achievement file(s) - so that third party applications can do new and interesting things with that information. Enjoy!&lt;br /&gt;
&lt;br /&gt;
See the page on [[Data_Types|data types]] for an explanation of the different types of data used in this document.&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
&lt;br /&gt;
The overall file format is as follows. Note that in this file, [[Data_Types#array|array]] length is stored as a [[Data_Types#short|short]], not an [[Data_Types#int|int]]!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]][4]&lt;br /&gt;
| The [[Version_String_Format|version string]] of Factorio that generated this file.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#array|array]]&amp;lt;[[#Achievement Header Info|bytes]]&amp;gt;&lt;br /&gt;
| [[#Achievement Header Info|Achievement header info]]. Variable length. See the section for more information.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#array|array]]&amp;lt;[[#Achievement Content Info|bytes]]&amp;gt;&lt;br /&gt;
| [[#Achievement Content Info|Achievement content info]]. Variable length. See the section for more information.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]][*]&lt;br /&gt;
| Currently tracked achievements, given as a series of [[Data_Types#short|shorts]] up until the end of the file, with each representing the index number of an achievement. The order of achievements in this series matches the order of which the player has them tracked in game.&lt;br /&gt;
|}&lt;br /&gt;
This format has been valid since at least version 0.14.x.&lt;br /&gt;
&lt;br /&gt;
== Achievement Header Info ==&lt;br /&gt;
&lt;br /&gt;
The header contains information about what type of data fields each achievement has.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#string|string]]&lt;br /&gt;
| Achievement type. This determines what kind of data fields this achievement contains in the content array.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#string|string]]&lt;br /&gt;
| Achievement string id - the one used internally by Factorio.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]]&lt;br /&gt;
| Achievement index number. This number is used to map achievements between this header info array, the content info array, and the tracked achievements list in this file. These index numbers are non-normative, so they won&#039;t always match up with the same achievement.&amp;lt;br&amp;gt; Note: the mapping of index numbers to achievement ids are continuous, but start at index 1 (there is no index 0) - because LUA tables start at 1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Achievement Content Info ==&lt;br /&gt;
&lt;br /&gt;
This contains the actual data of each achievement. It&#039;s important to note that not every achievement listed in the header has a matching content section here.&lt;br /&gt;
&lt;br /&gt;
Also note that this array always ends with an index number of 0. When reading, either ignore this, or manually add in a blank achievement into your meta table at index zero with no fields.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]]&lt;br /&gt;
| Achievement index number. This matches up with the index number in the [[#Achievement Header Info|Achievement header info]].&lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| The achievement&#039;s progress information. The structure and length of this is determined by the [[#Achievement Types|achievement&#039;s type]]. See the table below for a list of achievement types.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Achievement Types ==&lt;br /&gt;
&lt;br /&gt;
If new achievement types are added in the future, the achievement files will be unparse-able. Please add any new types you find here, thanks!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Achievement&amp;lt;br&amp;gt;Type !! Data&amp;lt;br&amp;gt;Fields(s) !! Field(s) Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/BuildEntityAchievement|build-entity-achievement]]&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/CombatRobotCount|combat-robot-count]]&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#int|int]]&lt;br /&gt;
|&lt;br /&gt;
* The greatest number of combat robots you&#039;ve had following you.&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/ConstructWithRobotsAchievement|construct-with-robots-achievement]]&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#int|int]]&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Total number of objects constructed using robots.&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/DeconstructWithRobotsAchievement|deconstruct-with-robots-achievement]]&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#int|int]]&lt;br /&gt;
|&lt;br /&gt;
* Total number of objects deconstructed using robots.&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/DeliverByRobotsAchievement|deliver-by-robots-achievement]]&lt;br /&gt;
|&lt;br /&gt;
* byte[8]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 8 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/DontBuildEntityAchievement|dont-build-entity-achievement]]&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;TODO&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;TODO&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/DontCraftManuallyAchievement|dont-craft-manually-achievement]]&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;TODO&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;TODO&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/DontUseEntityInEnergyProductionAchievement|dont-use-entity-in-energy-production-achievement]]&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* Maximum number of Joules produced per hour, only including power produced from entities listed under &amp;quot;included&amp;quot;, and excluding those listed under &amp;quot;excluded&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/FinishTheGameAchievement|finish-the-game-achievement]]&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;TODO&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;TODO&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/GroupAttackAchievement|group-attack-achievement]]&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/KillAchievement|kill-achievement]]&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The greatest number of an entity killed (e.g. trees, spawners).&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/PlayerDamagedAchievement|player-damaged-achievement]]&lt;br /&gt;
| &lt;br /&gt;
* [[Data_Types#float|float]]&lt;br /&gt;
* [[Data_Types#bool|bool]]&lt;br /&gt;
|&lt;br /&gt;
* The maximum amount of damage you&#039;ve taken in a single hit.&lt;br /&gt;
* True if the you survived that hit, False if you died.&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/ProduceAchievement|produce-achievement]]&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The total number of the item you&#039;ve produced.&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/ProducePerHourAchievement|produce-per-hour-achievement]]&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The maximum amount of the item produced per hour.&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/ResearchAchievement|research-achievement]]&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| [[Prototype/TrainPathAchievement|train-path-achievement]]&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The longest path (in tiles) planned by a train.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;combat-robot-count&amp;quot; is currently the only achievement type that doesn&#039;t end in &amp;quot;-achievement&amp;quot;. This is not an error.&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Data_types&amp;diff=145683</id>
		<title>Data types</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Data_types&amp;diff=145683"/>
		<updated>2017-08-22T09:16:46Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* Signedness */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}} [[Category:Technical]]&lt;br /&gt;
&lt;br /&gt;
This page describes common binary data types used by Factorio, and most modern day computer applications, internally.&lt;br /&gt;
&lt;br /&gt;
== Properties ==&lt;br /&gt;
&lt;br /&gt;
=== Endianness ===&lt;br /&gt;
&lt;br /&gt;
All data stored in computers are stored in single, small unit of data called a &amp;quot;byte&amp;quot;. Larger units of data are split into multiple bytes. The order in which sequential bytes are assembled together to form a larger unit of data is referred to as it&#039;s &amp;quot;endianess&amp;quot;. &#039;&#039;&#039;All data saved locally by Factorio is stored in &amp;quot;little&amp;quot;-endian format&#039;&#039;&#039; (because Intel favored little endian processors in the ancient times). All data transferred over the network by Factorio is done in &amp;quot;big&amp;quot;-endian format (the standard for network stuffs, so much so that it&#039;s often refered to as &amp;quot;network&amp;quot;-endian). (Please correct any of this if I&#039;m wrong!!) For more information about endianness, please see the [https://en.wikipedia.org/wiki/Endianness Wikipedia entry].&lt;br /&gt;
&lt;br /&gt;
=== Signedness ===&lt;br /&gt;
&lt;br /&gt;
Another property of multi-byte data types is it&#039;s signedness. Please see the [https://en.wikipedia.org/wiki/Signedness wikipedia entry]. Data types without a u- prefix are signed, and &#039;&#039;&#039;those marked with a u- prefixed are unsigned&#039;&#039;&#039;. I&#039;m not certain which type of signedness Factorio uses - perhaps it is machine dependant, but for me it always appears to be [https://en.wikipedia.org/wiki/Two%27s_complement two&#039;s complement].&lt;br /&gt;
&lt;br /&gt;
== Data Types ==&lt;br /&gt;
&lt;br /&gt;
=== bool ===&lt;br /&gt;
&lt;br /&gt;
A 1 byte value. Considered True iff value equals 1, otherwise it is considered False.&lt;br /&gt;
&lt;br /&gt;
=== byte ===&lt;br /&gt;
&lt;br /&gt;
1 byte long integer.&lt;br /&gt;
&lt;br /&gt;
=== short ===&lt;br /&gt;
&lt;br /&gt;
2 byte long integer.&lt;br /&gt;
&lt;br /&gt;
=== int ===&lt;br /&gt;
&lt;br /&gt;
4 byte long integer.&lt;br /&gt;
&lt;br /&gt;
=== long ===&lt;br /&gt;
&lt;br /&gt;
8 byte long integer.&lt;br /&gt;
&lt;br /&gt;
=== float ===&lt;br /&gt;
&lt;br /&gt;
An 4 byte (32 bit) long [https://en.wikipedia.org/wiki/Floating-point_arithmetic floating point number] stored in a special format with two fields - the number&#039;s exponent, and it&#039;s [https://en.wikipedia.org/wiki/Significand mantissa]. This format is described by the [https://en.wikipedia.org/wiki/Single-precision_floating-point_format 32-bit data type in IEEE 754].&lt;br /&gt;
&lt;br /&gt;
=== double ===&lt;br /&gt;
&lt;br /&gt;
An 8 byte (64 bit) long [https://en.wikipedia.org/wiki/Floating-point_arithmetic floating point number] stored in a special format with two fields - the number&#039;s exponent, and it&#039;s [https://en.wikipedia.org/wiki/Significand mantissa]. This format is described by the [https://en.wikipedia.org/wiki/Double-precision_floating-point_format 64-bit data type in IEEE 754].&lt;br /&gt;
&lt;br /&gt;
=== string ===&lt;br /&gt;
&lt;br /&gt;
Strings in Factorio are stored [https://en.wikipedia.org/wiki/String_(computer_science)#Length-prefixed Pascal-style] - they&#039;re a variable length data type with two fields: an [[#int|int]] describing how many bytes long the string data is, and then the string data itself.&lt;br /&gt;
&lt;br /&gt;
=== array ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;array&amp;lt;element type&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arrays are a container type. Like a [[#string|string]], they&#039;re prefixed with an [[#int|int]] describing how many elements are in the array, followed by that many elements of the specified element type back to back.&lt;br /&gt;
&lt;br /&gt;
=== dict ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;dict&amp;lt;key type, value type&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dictionaries (or &amp;quot;dict&amp;quot;s for short) are like [[#array|arrays]], but their elements consist of (key, value) pairs. Just like [[#array|arrays]], they&#039;re prefixed with an [[#int|int]] describing how many (key, value) pairs are in the dict, followed by that many (key, value) pairs.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [http://lua-api.factorio.com/latest/Builtin-Types.html Factorios Lua API documentation about its builtin types]&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Data_types&amp;diff=145682</id>
		<title>Data types</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Data_types&amp;diff=145682"/>
		<updated>2017-08-22T09:15:38Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* Signedness */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}} [[Category:Technical]]&lt;br /&gt;
&lt;br /&gt;
This page describes common binary data types used by Factorio, and most modern day computer applications, internally.&lt;br /&gt;
&lt;br /&gt;
== Properties ==&lt;br /&gt;
&lt;br /&gt;
=== Endianness ===&lt;br /&gt;
&lt;br /&gt;
All data stored in computers are stored in single, small unit of data called a &amp;quot;byte&amp;quot;. Larger units of data are split into multiple bytes. The order in which sequential bytes are assembled together to form a larger unit of data is referred to as it&#039;s &amp;quot;endianess&amp;quot;. &#039;&#039;&#039;All data saved locally by Factorio is stored in &amp;quot;little&amp;quot;-endian format&#039;&#039;&#039; (because Intel favored little endian processors in the ancient times). All data transferred over the network by Factorio is done in &amp;quot;big&amp;quot;-endian format (the standard for network stuffs, so much so that it&#039;s often refered to as &amp;quot;network&amp;quot;-endian). (Please correct any of this if I&#039;m wrong!!) For more information about endianness, please see the [https://en.wikipedia.org/wiki/Endianness Wikipedia entry].&lt;br /&gt;
&lt;br /&gt;
=== Signedness ===&lt;br /&gt;
&lt;br /&gt;
Another property of multi-byte data types is it&#039;s signedness. Please see the [https://en.wikipedia.org/wiki/Signedness wikipedia entry]. By default, all data types used in Factorio are signed. &#039;&#039;&#039;Data types marked with a u- prefixed are unsigned&#039;&#039;&#039;. I&#039;m not certain which type of signedness Factorio uses - perhaps it is machine dependant, but for me it always appears to be [https://en.wikipedia.org/wiki/Two%27s_complement two&#039;s complement].&lt;br /&gt;
&lt;br /&gt;
== Data Types ==&lt;br /&gt;
&lt;br /&gt;
=== bool ===&lt;br /&gt;
&lt;br /&gt;
A 1 byte value. Considered True iff value equals 1, otherwise it is considered False.&lt;br /&gt;
&lt;br /&gt;
=== byte ===&lt;br /&gt;
&lt;br /&gt;
1 byte long integer.&lt;br /&gt;
&lt;br /&gt;
=== short ===&lt;br /&gt;
&lt;br /&gt;
2 byte long integer.&lt;br /&gt;
&lt;br /&gt;
=== int ===&lt;br /&gt;
&lt;br /&gt;
4 byte long integer.&lt;br /&gt;
&lt;br /&gt;
=== long ===&lt;br /&gt;
&lt;br /&gt;
8 byte long integer.&lt;br /&gt;
&lt;br /&gt;
=== float ===&lt;br /&gt;
&lt;br /&gt;
An 4 byte (32 bit) long [https://en.wikipedia.org/wiki/Floating-point_arithmetic floating point number] stored in a special format with two fields - the number&#039;s exponent, and it&#039;s [https://en.wikipedia.org/wiki/Significand mantissa]. This format is described by the [https://en.wikipedia.org/wiki/Single-precision_floating-point_format 32-bit data type in IEEE 754].&lt;br /&gt;
&lt;br /&gt;
=== double ===&lt;br /&gt;
&lt;br /&gt;
An 8 byte (64 bit) long [https://en.wikipedia.org/wiki/Floating-point_arithmetic floating point number] stored in a special format with two fields - the number&#039;s exponent, and it&#039;s [https://en.wikipedia.org/wiki/Significand mantissa]. This format is described by the [https://en.wikipedia.org/wiki/Double-precision_floating-point_format 64-bit data type in IEEE 754].&lt;br /&gt;
&lt;br /&gt;
=== string ===&lt;br /&gt;
&lt;br /&gt;
Strings in Factorio are stored [https://en.wikipedia.org/wiki/String_(computer_science)#Length-prefixed Pascal-style] - they&#039;re a variable length data type with two fields: an [[#int|int]] describing how many bytes long the string data is, and then the string data itself.&lt;br /&gt;
&lt;br /&gt;
=== array ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;array&amp;lt;element type&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arrays are a container type. Like a [[#string|string]], they&#039;re prefixed with an [[#int|int]] describing how many elements are in the array, followed by that many elements of the specified element type back to back.&lt;br /&gt;
&lt;br /&gt;
=== dict ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;dict&amp;lt;key type, value type&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dictionaries (or &amp;quot;dict&amp;quot;s for short) are like [[#array|arrays]], but their elements consist of (key, value) pairs. Just like [[#array|arrays]], they&#039;re prefixed with an [[#int|int]] describing how many (key, value) pairs are in the dict, followed by that many (key, value) pairs.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [http://lua-api.factorio.com/latest/Builtin-Types.html Factorios Lua API documentation about its builtin types]&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Template_talk:Infobox&amp;diff=144647</id>
		<title>Template talk:Infobox</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Template_talk:Infobox&amp;diff=144647"/>
		<updated>2017-08-16T05:59:47Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* Appearance suggestion? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I haven&#039;t found a parameter for the simple size (or area) of a machinery (like 3x3 for assembling machines...). I think we should add a parameter like &amp;lt;nowiki&amp;gt;{{Infobox/row|Size|{{{size|}}}|{{{size}}} {{Translation|tiles}} }}&amp;lt;/nowiki&amp;gt; --[[User:Lord joshi|Lord joshi]] ([[User talk:Lord joshi|talk]]) 12:34, 2 March 2017 (UTC)&lt;br /&gt;
:I had a look at the template and came to an agreement with the other admin: We&#039;ll be using the dimensions parameter. The format of the parameter should be (X-dimensions)x(Y-dimension) for entities that can&#039;t be rotated and (Bigger number)x(Smaller number) for entites that can be rotated, like the splitter. --[[User:Bilka|Bilka]] ([[User talk:Bilka|talk]]) 18:47, 2 March 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Appearance suggestion? ==&lt;br /&gt;
&lt;br /&gt;
Hey there! &lt;br /&gt;
&lt;br /&gt;
Strange question... do you think it&#039;d look nicer if the arrow for showing the internal name and prototype would look better if it was placed underneath the edit link (as in, aligned to the right, and approximately on the same line as the category)? In my opinion, I think it maybe might look better because right now it takes up so much extra space? I know nothing about UX! &amp;gt;.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:I made the change on [[Template:Infobox/sandbox]], however the arrow is much harder to &amp;quot;find&amp;quot;. Because of that the current decision is to not modify the position in the infobox. -- [[User:Bilka|Bilka]] ([[User talk:Bilka|talk]]) - &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;Admin&amp;lt;/span&amp;gt; 19:44, 15 August 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
:: Thanks for the amazingly quick response and the effort you put into checking it out though! This wiki is awesome because of you :D I&#039;ll try to read more into the style guides and how you like to run the wiki too. I&#039;ll definitely start by getting my pages to match the superb quality of the rest of the wiki. I also made the change to my user style if anyone is interested [[User:Lexxy_Fox/common.css]] --[[User:Lexxy Fox|Lexxy Fox]] ([[User talk:Lexxy Fox|talk]]) 00:33, 16 August 2017 (UTC)&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Achievement_file_format&amp;diff=144646</id>
		<title>Achievement file format</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Achievement_file_format&amp;diff=144646"/>
		<updated>2017-08-16T00:35:06Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}} [[Category:Technical]]&lt;br /&gt;
This is a technical description of the achievement file format, used by Factorio to store player&#039;s achievement progress in the files &amp;quot;achievements.dat&amp;quot; and &amp;quot;achievements-modded.dat&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Yes - this information can be used to &amp;quot;cheat&amp;quot; Factorio by simply writing to the achievement file(s) in such a way as if you had met all the achievement requirements, open up Factorio, and then suddenly have all achievements unlocked. The goal of this document is to share how to _read_ the achievement file(s) - so that third party applications can do new and interesting things with that information. Enjoy!&lt;br /&gt;
&lt;br /&gt;
See the page on [[Data_Types|data types]] for an explanation of the different types of data used in this document.&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
&lt;br /&gt;
The overall file format is as follows. Note that in this file, [[Data_Types#array|array]] length is stored as a [[Data_Types#short|short]], not an [[Data_Types#int|int]]!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]][4]&lt;br /&gt;
| The [[Version_String_Format|version string]] of Factorio that generated this file.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#array|array]]&amp;lt;[[#Achievement Header Info|bytes]]&amp;gt;&lt;br /&gt;
| [[#Achievement Header Info|Achievement header info]]. Variable length. See the section for more information.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#array|array]]&amp;lt;[[#Achievement Content Info|bytes]]&amp;gt;&lt;br /&gt;
| [[#Achievement Content Info|Achievement content info]]. Variable length. See the section for more information.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]][*]&lt;br /&gt;
| Currently tracked achievements, given as a series of [[Data_Types#short|shorts]] up until the end of the file, with each representing the index number of an achievement. The order of achievements in this series matches the order of which the player has them tracked in game.&lt;br /&gt;
|}&lt;br /&gt;
This format has been valid since at least version 0.14.x.&lt;br /&gt;
&lt;br /&gt;
== Achievement Header Info ==&lt;br /&gt;
&lt;br /&gt;
The header contains information about what type of data fields each achievement has.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#string|string]]&lt;br /&gt;
| Achievement type. This determines what kind of data fields this achievement contains in the content array.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#string|string]]&lt;br /&gt;
| Achievement string id - the one used internally by Factorio.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]]&lt;br /&gt;
| Achievement index number. This number is used to map achievements between this header info array, the content info array, and the tracked achievements list in this file. These index numbers are non-normative, so they won&#039;t always match up with the same achievement.&amp;lt;br&amp;gt; Note: the mapping of index numbers to achievement ids are continuous, but start at index 1 (there is no index 0) - because LUA tables start at 1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Achievement Content Info ==&lt;br /&gt;
&lt;br /&gt;
This contains the actual data of each achievement. It&#039;s important to note that not every achievement listed in the header has a matching content section here.&lt;br /&gt;
&lt;br /&gt;
Also note that this array always ends with an index number of 0. When reading, either ignore this, or manually add in a blank achievement into your meta table at index zero with no fields.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]]&lt;br /&gt;
| Achievement index number. This matches up with the index number in the [[#Achievement Header Info|Achievement header info]].&lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| The achievement&#039;s progress information. The structure and length of this is determined by the [[#Achievement Types|achievement&#039;s type]]. See the table below for a list of achievement types.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Achievement Types ==&lt;br /&gt;
&lt;br /&gt;
If new achievement types are added in the future, the achievement files will be unparse-able. Please add any new types you find here, thanks!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Achievement&amp;lt;br&amp;gt;Type !! Data&amp;lt;br&amp;gt;Fields(s) !! Field(s) Description&lt;br /&gt;
|-&lt;br /&gt;
| build-entity-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| combat-robot-count&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#int|int]]&lt;br /&gt;
|&lt;br /&gt;
* The greatest number of combat robots you&#039;ve had following you.&lt;br /&gt;
|-&lt;br /&gt;
| construct-with-robots-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#int|int]]&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Total number of objects constructed using robots.&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| deconstruct-with-robots-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#int|int]]&lt;br /&gt;
|&lt;br /&gt;
* Total number of objects deconstructed using robots.&lt;br /&gt;
|-&lt;br /&gt;
| deliver-by-robots-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[8]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 8 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| dont-use-entity-in-energy-production-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* Maximum number of Joules produced per hour, only including power produced from entities listed under &amp;quot;included&amp;quot;, and excluding those listed under &amp;quot;excluded&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| group-attack-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| kill-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The greatest number of an entity killed (e.g. trees, spawners).&lt;br /&gt;
|-&lt;br /&gt;
| player-damaged-achievement&lt;br /&gt;
| &lt;br /&gt;
* [[Data_Types#float|float]]&lt;br /&gt;
* [[Data_Types#bool|bool]]&lt;br /&gt;
|&lt;br /&gt;
* The maximum amount of damage you&#039;ve taken in a single hit.&lt;br /&gt;
* True if the you survived that hit, False if you died.&lt;br /&gt;
|-&lt;br /&gt;
| produce-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The total number of the item you&#039;ve produced.&lt;br /&gt;
|-&lt;br /&gt;
| produce-per-hour-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The maximum amount of the item produced per hour.&lt;br /&gt;
|-&lt;br /&gt;
| research-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| train-path-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The longest path (in tiles) planned by a train.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;combat-robot-count&amp;quot; is currently the only achievement type that doesn&#039;t end in &amp;quot;-achievement&amp;quot;. This is not an error.&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Template_talk:Infobox&amp;diff=144645</id>
		<title>Template talk:Infobox</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Template_talk:Infobox&amp;diff=144645"/>
		<updated>2017-08-16T00:33:05Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* Appearance suggestion? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I haven&#039;t found a parameter for the simple size (or area) of a machinery (like 3x3 for assembling machines...). I think we should add a parameter like &amp;lt;nowiki&amp;gt;{{Infobox/row|Size|{{{size|}}}|{{{size}}} {{Translation|tiles}} }}&amp;lt;/nowiki&amp;gt; --[[User:Lord joshi|Lord joshi]] ([[User talk:Lord joshi|talk]]) 12:34, 2 March 2017 (UTC)&lt;br /&gt;
:I had a look at the template and came to an agreement with the other admin: We&#039;ll be using the dimensions parameter. The format of the parameter should be (X-dimensions)x(Y-dimension) for entities that can&#039;t be rotated and (Bigger number)x(Smaller number) for entites that can be rotated, like the splitter. --[[User:Bilka|Bilka]] ([[User talk:Bilka|talk]]) 18:47, 2 March 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Appearance suggestion? ==&lt;br /&gt;
&lt;br /&gt;
Hey there! &lt;br /&gt;
&lt;br /&gt;
Strange question... do you think it&#039;d look nicer if the arrow for showing the internal name and prototype would look better if it was placed underneath the edit link (as in, aligned to the right, and approximately on the same line as the category)? In my opinion, I think it maybe might look better because right now it takes up so much extra space? I know nothing about UX! &amp;gt;.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:I made the change on [[Template:Infobox/sandbox]], however the arrow is much harder to &amp;quot;find&amp;quot;. Because of that the current decision is to not modify the position in the infobox. -- [[User:Bilka|Bilka]] ([[User talk:Bilka|talk]]) - &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;Admin&amp;lt;/span&amp;gt; 19:44, 15 August 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
:: Thanks for the amazingly quick response and the effort you put into checking it out though! This wiki is awesome because of you :D I&#039;ll try to read more into the style guides and how you like to run the wiki too. I&#039;ll definitely start by getting my pages to match the quality of the rest of the wiki. I also made the change to my user style if anyone is interested [[User:Lexxy_Fox/common.css]] --[[User:Lexxy Fox|Lexxy Fox]] ([[User talk:Lexxy Fox|talk]]) 00:33, 16 August 2017 (UTC)&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=User:Lexxy_Fox/common.css&amp;diff=144642</id>
		<title>User:Lexxy Fox/common.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=User:Lexxy_Fox/common.css&amp;diff=144642"/>
		<updated>2017-08-15T20:47:41Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: Created page with &amp;quot;div.infobox-header {   position: relative; }  p.more-button {   position: absolute;   bottom: 5px;   right: 0.5em; }&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;div.infobox-header {&lt;br /&gt;
  position: relative;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
p.more-button {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  bottom: 5px;&lt;br /&gt;
  right: 0.5em;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Template_talk:Infobox&amp;diff=144619</id>
		<title>Template talk:Infobox</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Template_talk:Infobox&amp;diff=144619"/>
		<updated>2017-08-14T23:15:28Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* Appearance suggestion? */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I haven&#039;t found a parameter for the simple size (or area) of a machinery (like 3x3 for assembling machines...). I think we should add a parameter like &amp;lt;nowiki&amp;gt;{{Infobox/row|Size|{{{size|}}}|{{{size}}} {{Translation|tiles}} }}&amp;lt;/nowiki&amp;gt; --[[User:Lord joshi|Lord joshi]] ([[User talk:Lord joshi|talk]]) 12:34, 2 March 2017 (UTC)&lt;br /&gt;
:I had a look at the template and came to an agreement with the other admin: We&#039;ll be using the dimensions parameter. The format of the parameter should be (X-dimensions)x(Y-dimension) for entities that can&#039;t be rotated and (Bigger number)x(Smaller number) for entites that can be rotated, like the splitter. --[[User:Bilka|Bilka]] ([[User talk:Bilka|talk]]) 18:47, 2 March 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Appearance suggestion? ==&lt;br /&gt;
&lt;br /&gt;
Hey there! &lt;br /&gt;
&lt;br /&gt;
Strange question... do you think it&#039;d look nicer if the arrow for showing the internal name and prototype would look better if it was placed underneath the edit link (as in, aligned to the right, and approximately on the same line as the category)? In my opinion, I think it maybe might look better because right now it takes up so much extra space? I know nothing about UX! &amp;gt;.&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Achievement_file_format&amp;diff=143769</id>
		<title>Achievement file format</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Achievement_file_format&amp;diff=143769"/>
		<updated>2017-08-12T06:53:07Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* Achievement Header Info */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}} [[Category:Technical]]&lt;br /&gt;
This is a technical description of the achievement file format, used by Factorio to store player&#039;s achievement progress in the files &amp;quot;achievements.dat&amp;quot; and &amp;quot;achievements-modded.dat&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Yes - this information can be used to &amp;quot;cheat&amp;quot; Factorio by simply writing to the achievement file(s) in such a way as if you had met all the achievement requirements, open up Factorio, and then suddenly have all achievements unlocked. If you&#039;ve played Factorio at all you should know that this point is moot. The goal of this document is to share how to _read_ the achievement file(s) - so that third party applications can do do things with that information. Enjoy.&lt;br /&gt;
&lt;br /&gt;
See the page on [[Data_Types|data types]] for an explanation of the different types of data used in this document.&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
&lt;br /&gt;
The overall file format is as follows. Note that in this file, [[Data_Types#array|array]] length is stored as a [[Data_Types#short|short]], not an [[Data_Types#int|int]]!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]][4]&lt;br /&gt;
| The [[Version_String_Format|version string]] of Factorio that generated this file.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#array|array]]&amp;lt;[[#Achievement Header Info|bytes]]&amp;gt;&lt;br /&gt;
| [[#Achievement Header Info|Achievement header info]]. Variable length. See the section for more information.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#array|array]]&amp;lt;[[#Achievement Content Info|bytes]]&amp;gt;&lt;br /&gt;
| [[#Achievement Content Info|Achievement content info]]. Variable length. See the section for more information.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]][*]&lt;br /&gt;
| Currently tracked achievements, given as a series of [[Data_Types#short|shorts]] up until the end of the file, with each representing the index number of an achievement. The order of achievements in this series matches the order of which the player has them tracked in game.&lt;br /&gt;
|}&lt;br /&gt;
This format has been valid since at least version 0.14.x.&lt;br /&gt;
&lt;br /&gt;
== Achievement Header Info ==&lt;br /&gt;
&lt;br /&gt;
The header contains information about what type of data fields each achievement has.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#string|string]]&lt;br /&gt;
| Achievement type. This determines what kind of data fields this achievement contains in the content array.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#string|string]]&lt;br /&gt;
| Achievement string id - the one used internally by Factorio.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]]&lt;br /&gt;
| Achievement index number. This number is used to map achievements between this header info array, the content info array, and the tracked achievements list in this file. These index numbers are non-normative, so they won&#039;t always match up with the same achievement.&amp;lt;br&amp;gt; Note: the mapping of index numbers to achievement ids are continuous, but start at index 1 (there is no index 0) - because LUA tables start at 1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Achievement Content Info ==&lt;br /&gt;
&lt;br /&gt;
This contains the actual data of each achievement. It&#039;s important to note that not every achievement listed in the header has a matching content section here.&lt;br /&gt;
&lt;br /&gt;
Also note that this array always ends with an index number of 0. When reading, either ignore this, or manually add in a blank achievement into your meta table at index zero with no fields.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]]&lt;br /&gt;
| Achievement index number. This matches up with the index number in the [[#Achievement Header Info|Achievement header info]].&lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| The achievement&#039;s progress information. The structure and length of this is determined by the [[#Achievement Types|achievement&#039;s type]]. See the table below for a list of achievement types.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Achievement Types ==&lt;br /&gt;
&lt;br /&gt;
If new achievement types are added in the future, the achievement files will be unparse-able. Please add any new types you find here, thanks!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Achievement&amp;lt;br&amp;gt;Type !! Data&amp;lt;br&amp;gt;Fields(s) !! Field(s) Description&lt;br /&gt;
|-&lt;br /&gt;
| build-entity-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| combat-robot-count&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#int|int]]&lt;br /&gt;
|&lt;br /&gt;
* The greatest number of combat robots you&#039;ve had following you.&lt;br /&gt;
|-&lt;br /&gt;
| construct-with-robots-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#int|int]]&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Total number of objects constructed using robots.&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| deconstruct-with-robots-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#int|int]]&lt;br /&gt;
|&lt;br /&gt;
* Total number of objects deconstructed using robots.&lt;br /&gt;
|-&lt;br /&gt;
| deliver-by-robots-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[8]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 8 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| dont-use-entity-in-energy-production-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* Maximum number of Joules produced per hour, only including power produced from entities listed under &amp;quot;included&amp;quot;, and excluding those listed under &amp;quot;excluded&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| group-attack-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| kill-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The greatest number of an entity killed (e.g. trees, spawners).&lt;br /&gt;
|-&lt;br /&gt;
| player-damaged-achievement&lt;br /&gt;
| &lt;br /&gt;
* [[Data_Types#float|float]]&lt;br /&gt;
* [[Data_Types#bool|bool]]&lt;br /&gt;
|&lt;br /&gt;
* The maximum amount of damage you&#039;ve taken in a single hit.&lt;br /&gt;
* True if the you survived that hit, False if you died.&lt;br /&gt;
|-&lt;br /&gt;
| produce-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The total number of the item you&#039;ve produced.&lt;br /&gt;
|-&lt;br /&gt;
| produce-per-hour-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The maximum amount of the item produced per hour.&lt;br /&gt;
|-&lt;br /&gt;
| research-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| train-path-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The longest path (in tiles) planned by a train.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;combat-robot-count&amp;quot; is currently the only achievement type that doesn&#039;t end in &amp;quot;-achievement&amp;quot;. This is not an error.&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Map_exchange_string_format&amp;diff=143768</id>
		<title>Map exchange string format</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Map_exchange_string_format&amp;diff=143768"/>
		<updated>2017-08-12T05:45:31Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* Map Gen Settings */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}} [[Category:Technical]]&lt;br /&gt;
This is a technical description of the map exchange string format, used to share map generating configurations with other users. This format is also used to store these settings inside save files for future chunk generation.&lt;br /&gt;
&lt;br /&gt;
Factorio line wraps the entire map exchange string after 57 characters during export (55 code characters + &#039;\r\n&#039;, which is fairly standard), but ignores all whitespace during import. The outer layer of the map exchange string format includes three angle brackets on either side: &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;quot; and &amp;quot;&amp;lt;&amp;lt;&amp;lt;&amp;quot;, which must be present for Factorio to accept the string. Between those two tokens is the map exchange data, encoded using base 64 as defined by [https://tools.ietf.org/html/rfc4648#section-4 RFC 4648] (or [https://tools.ietf.org/html/rfc3548#section-3 3548], [https://tools.ietf.org/html/rfc2535#page-42 2535], [https://tools.ietf.org/html/rfc2045#section-6.8 2045], [https://tools.ietf.org/html/rfc1421#section-4.3.2.4 1421], et al). &lt;br /&gt;
&lt;br /&gt;
See the page on [[Data_Types|data types]] for an explanation of the different types of data used in this document.&lt;br /&gt;
&lt;br /&gt;
== Factorio 0.14 and Beyond ==&lt;br /&gt;
&lt;br /&gt;
This is the base map exchange string format for all Factorio versions 0.14.x and greater. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]][4]&lt;br /&gt;
| The [[Version_String_Format|version string]] of Factorio that generated this string, used to determine encoding format.&lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| [[#Map_Gen_Settings|Map Gen Settings]]. Variable length. See linked section for information on how to parse. &lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| [[#0.15 Map Settings|0.15.x Map Settings]]. If present, this chunk consists of the remainder of the data (minus the checksum).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]]&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Cyclic_redundancy_check CRC32 checksum] of all preceding data, as defined by ANSI X3.66 / FIPS 71 / ITU-T V.42 (the same one used by [https://en.wikipedia.org/wiki/Zlib zlib], ethernet, etc.)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Map Gen Settings ==&lt;br /&gt;
&lt;br /&gt;
This format matches [http://lua-api.factorio.com/latest/Concepts.html#MapGenSettings MapGenSettings].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#byte|byte]]&lt;br /&gt;
| terrain_segmentation&lt;br /&gt;
| [[Water]] [[#Map_Gen_Size|frequency]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#byte|byte]]&lt;br /&gt;
| water&lt;br /&gt;
| [[Water]] [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#dict|dict]]&amp;lt;[[Data_Types#string|string]], [[#Autoplace_Control|byte[3]]]&amp;gt;&lt;br /&gt;
| autoplace_controls&lt;br /&gt;
| An dictionary of [[#Autoplace_Control|Autoplace Controls]], with string keys, where the key represents the ore name.  Factorio doesn’t care what order this dictionary is in, but it always alphabetizes during export. Vanilla has seven resources: [[Coal|coal]], [[Copper ore|copper-ore]], [[Crude Oil|crude-oil]], [[Enemies|enemy-base]], [[Iron ore|iron-ore]], [[Stone|stone]], and [[Uranium ore|uranium-ore]]. Unknown ores are ignored and missing ores are set to their defaults.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]]&lt;br /&gt;
| seed&lt;br /&gt;
| [[World generator#Map Seed|Map seed]].&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;none&#039;&#039;&lt;br /&gt;
| shift&lt;br /&gt;
| This field isn&#039;t present in the binary format! But it is part of the LUA structure - by default it&#039;s derived from the map seed. I&#039;ll slap the algorithm here soon(tm).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]]&lt;br /&gt;
| width&lt;br /&gt;
| [[World generator#Map-width and -height|Map width]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]]&lt;br /&gt;
| height&lt;br /&gt;
| [[World generator#Map-width and -height|Map height]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#byte|byte]]&lt;br /&gt;
| starting_area&lt;br /&gt;
| [[World generator#Starting area|Starting area]] [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#bool|boolean]]&lt;br /&gt;
| peaceful_mode&lt;br /&gt;
| [[World generator#Peaceful mode|Peaceful mode]]. Enabled if set to 1, disabled otherwise.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 0.15 Map Settings ==&lt;br /&gt;
&lt;br /&gt;
All of the following data fields (until noted at the end) have a special encapsulation format. Preceding each value is a single byte that states whether or not the value is present. If the byte is equal to zero, then the field value is not present. Otherwise, then the field&#039;s value follows. &lt;br /&gt;
&lt;br /&gt;
In the LUA structure, this information is stored in the &amp;quot;[http://lua-api.factorio.com/latest/LuaGameScript.html#LuaGameScript.map_settings game.map_settings]&amp;quot; table, which is created by the &amp;quot;[http://lua-api.factorio.com/latest/Concepts.html#MapSettings MapSettings]&amp;quot; prototype. Each section in the table below represents a nested sub-table in &amp;quot;map-settings&amp;quot;, where the LUA key listed is the key of the table, and all subsequent fields are part of the sub-table. See data/base/prototypes/map-settings.lua for a description of all attributes (some of that information has now been copied to this page).&lt;br /&gt;
&lt;br /&gt;
Fields marked with a check (✓) in the &amp;quot;GUI&amp;quot; column are configurable in the [[World_generator#How_it_works|new game map generator GUI]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
! * !! ✓ !! pollution !! Pollution&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#bool|boolean]] || ✓ || enabled || Pollution enabled.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || ✓ || diffusion_ratio || The amount of pollution that is diffused into neighboring chunk per second.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || min_to_diffuse || This many PUs must be on the chunk to start diffusing.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || ✓ || ageing || [Modifier of] the pollution eaten by a chunks tiles.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || expected_max_per_chunk || Anything bigger than this is visualised as this value.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || min_to_show_per_chunk || Anything lower than this (but &amp;gt; 0) is visualised as this value.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || ✓ || min_pollution_to_damage_trees || Any pollution above this amount starts to damage trees.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || pollution_with_max_forest_damage || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || pollution_per_tree_damage || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || ✓ || pollution_restored_per_tree_damage || The amount of pollution absorbed by a tree when it is damaged by pollution.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || max_pollution_to_restore_trees || ???&lt;br /&gt;
|-&lt;br /&gt;
! * !! !! steering.default !! Steering (Default)&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || separation_force || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#bool|boolean]] || || force_unit_fuzzy_goto_behavior || ???&lt;br /&gt;
|-&lt;br /&gt;
! * !! !! steering.moving !! Steering (Moving)&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || separation_force || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#bool|boolean]] || || force_unit_fuzzy_goto_behavior || ???&lt;br /&gt;
|- &lt;br /&gt;
! * !! ✓ !! enemy_evolution !! Evolution&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#bool|boolean]] || ✓ || enabled || Evolution enabled.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || ✓ || time_factor || Percent increase in the evolve factor for every second.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || ✓ || destroy_factor || Percent increase in the evolve factor for every destroyed spawner.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || ✓ || pollution_factor || Percent increase in the evolve factor for every 1000 PU [produced].&lt;br /&gt;
|- &lt;br /&gt;
! * !! ✓ !! enemy_expansion !! Enemy Expansion&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#bool|boolean]] || ✓ || enabled || Enemy expansion enabled.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || ✓ || max_expansion_distance || Distance in chunks from the furthest base around.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || friendly_base_influence_radius || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || enemy_building_influence_radius || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || building_coefficient ||+ rowspan=4 | Expansion algorithm. See LUA file for details.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || other_base_coefficient &lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || neighbouring_chunk_coefficient &lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || neighbouring_base_chunk_coefficient&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || max_colliding_tiles_coefficient || A chunk has to have at most this much percent unbuildable tiles for it to be considered a candidate.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || ✓ || settler_group_min_size ||+ rowspan=2 | Size of the group that goes to build new base (in game this is multiplied by the evolution factor).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || ✓ || settler_group_max_size&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || ✓ || min_expansion_cooldown || Minimum cooldown.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || ✓ || max_expansion_cooldown || Maximum cooldown.&lt;br /&gt;
|- &lt;br /&gt;
! * !! !! unit_group !! Unit Group&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || min_group_gathering_time ||+ rowspan=2 | A pollution triggered group&#039;s waiting time is a random time between min and max gathering time.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || max_group_gathering_time &lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || max_wait_time_for_late_members || After the gathering is finished the group can still wait for late members, but it doesn&#039;t accept new ones anymore.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || max_group_radius ||+ rowspan=2 | Limits for group radius.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || min_group_radius&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || max_member_speedup_when_behind || When a member falls behind the group he can speedup up till this much of his regular speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || max_member_slowdown_when_ahead || When a member gets ahead of its group, it will slow down to at most this factor of its speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || max_group_slowdown_factor || When members of a group are behind, the entire group will slow down to at most this factor of its max speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || max_group_member_fallback_factor || If a member falls behind more than this times the group radius, the group will slow down to max_group_slowdown_factor.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || member_disown_distance || If a member falls behind more than this time the group radius, it will be removed from the group.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || tick_tolerance_when_member_arrives || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || max_gathering_unit_groups || Maximum number of automatically created unit groups gathering for attack at any time.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || max_unit_group_size || Maximum size of an attack unit group. This only affects automatically-created unit groups.&lt;br /&gt;
|- &lt;br /&gt;
! * !! !! path_finder !! Path Finder&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || fwd2bwd_ratio || Defines whether we prefer forward (&amp;gt;1) or backward (&amp;lt;-1) or symmetrical (1) search.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || goal_pressure_ratio || When comparing nodes in open which one to check next, heuristic value is multiplied by this ratio. The higher the number the more is the search directed directly towards the goal.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#bool|boolean]] || || use_path_cache || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || max_steps_worked_per_tick || When this is exhausted no more requests are allowed. At the moment the first path to exhaust this will be finished (even if it is hundreds of steps).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || short_cache_size ||+ rowspan=2 | Number of elements in the cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || long_cache_size&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || short_cache_min_cacheable_distance || Minimal distance to goal for path to be searched in short path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || short_cache_min_algo_steps_to_cache || Minimal number of algorithm steps for path to be inserted into the short path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || long_cache_min_cacheable_distance || Minimal distance to goal for path to be searched in long path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || cache_max_connect_to_cache_steps_multiplier || When searching for connection to path cache path, search at most for this number of steps times the initial estimate.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || cache_accept_path_start_distance_ratio || When looking for path from cache make sure it doesn&#039;t start too far from requested start in relative distance terms.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || cache_accept_path_end_distance_ratio || When looking for path from cache make sure it doesn&#039;t end too far from requested end. This is typically higher than accept value for the start because the end target can be moving.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || negative_cache_accept_path_start_distance_ratio || Same as cache_accept_path_start_distance_ratio, but used for negative cache queries.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || negative_cache_accept_path_end_distance_ratio || Same as cache_accept_path_end_distance_ratio, but used for negative cache queries.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || cache_path_start_distance_rating_multiplier || When assigning rating to the best path this * start distances is considered.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || cache_path_end_distance_rating_multiplier || When assigning rating to the best path this * end distances is considered. This is typically higher than value for the start to achieve better path end quality.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || stale_enemy_with_same_destination_collision_penalty || Somewhere along the path is stuck enemy we need to avoid. This is mainly to handle situations when units have arrived and are attacking the target, then units further in the back will use this and run around the target.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || ignore_moving_enemy_collision_distance || If there is a moving unit further than this we don&#039;t really care.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || enemy_with_different_destination_collision_penalty || Enemy is not moving/or is too close and has different destination.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || general_entity_collision_penalty || Simplification for now - collision with everything else is this.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || general_entity_subsequent_collision_penalty || Collision penalty for successors of positions that require destroy to reach.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || max_clients_to_accept_any_new_request || Uptil this amount any client will be served by the path finder (no estimate on the path length).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || max_clients_to_accept_short_new_request || From max_clients_to_accept_any_new_request till this one only those that have a short estimate will be served.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || direct_distance_to_consider_short_request || This is the &amp;quot;threshold&amp;quot; to decide what is short and what is not.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || short_request_max_steps || If a short request takes more than this many steps, it will be rescheduled as a long request.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || short_request_ratio || How many steps will be allocated to short requests each tick, as a ratio of all available steps per tick.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || min_steps_to_check_path_find_termination || Absolute minimum of steps that will be performed for every path find request no matter what.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || start_to_goal_cost_multiplier_to_terminate_path_find || If the amount of steps is higher than this times estimate of start to goal then path finding is terminated.&lt;br /&gt;
|-&lt;br /&gt;
| colspan = 4 | &#039;&#039;&#039;Note:&#039;&#039;&#039; The following fields do not use the special encapsulation method.&lt;br /&gt;
|-&lt;br /&gt;
! byte[4] !! !! . (root) !! Other&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || max_failed_behavior_count || If a behavior fails this many times, the enemy (or enemy group) is destroyed. This solves biters stuck within their own base.&lt;br /&gt;
|-&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Difficulty Settings ===&lt;br /&gt;
&lt;br /&gt;
This information is instead stored in the LUA structure at [http://lua-api.factorio.com/latest/LuaGameScript.html#LuaGameScript.difficulty_settings game.difficulty_settings], which is prototyped by [http://lua-api.factorio.com/latest/Concepts.html#DifficultySettings DifficultySettings]. These fields do not use the special encapsulation method noted above.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
! byte[10] !! ✓ !! difficulty_settings !! Difficulty Settings&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#byte|byte]] || ✓ || recipe_difficulty || Recipe difficulty. 0 for Normal, 1 for Expensive.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#byte|byte]] || ✓ || technology_difficulty || Technology difficulty. 0 for Normal, 1 for Expensive.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || ✓ || technology_price_multiplier || Technology price multiplier.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: these values are typically defined using the constants at [http://lua-api.factorio.com/latest/defines.html#defines.difficulty_settings defines.difficulty_settings].&lt;br /&gt;
&lt;br /&gt;
== Autoplace Control ==&lt;br /&gt;
See the page on [[World generator#Settings on the top row|world generation]] for more information on frequency, size, and richness.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#byte|byte]]&lt;br /&gt;
| frequency&lt;br /&gt;
| Ore [[#Map_Gen_Size|frequency]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#byte|byte]]&lt;br /&gt;
| size&lt;br /&gt;
| Ore [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#byte|byte]]&lt;br /&gt;
| richness&lt;br /&gt;
| Ore [[#Map_Gen_Size|richness]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Map Gen Size ==&lt;br /&gt;
These are the values used for the frequencies, sizes, and richnesses of ores, water, and the starting area size. None is a valid value for all three options. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| None / None /None&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Very Low / Small / Poor&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Low / Small / Poor&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Normal / Medium / Regular&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| High / Big / Good&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Very High / Big / Good&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of the values in a triplet (such as &amp;quot;low&amp;quot;, &amp;quot;small&amp;quot;, and &amp;quot;poor&amp;quot;) are synonymous.&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Map_exchange_string_format&amp;diff=143767</id>
		<title>Map exchange string format</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Map_exchange_string_format&amp;diff=143767"/>
		<updated>2017-08-12T04:24:55Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* Map Gen Settings */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}} [[Category:Technical]]&lt;br /&gt;
This is a technical description of the map exchange string format, used to share map generating configurations with other users. This format is also used to store these settings inside save files for future chunk generation.&lt;br /&gt;
&lt;br /&gt;
Factorio line wraps the entire map exchange string after 57 characters during export (55 code characters + &#039;\r\n&#039;, which is fairly standard), but ignores all whitespace during import. The outer layer of the map exchange string format includes three angle brackets on either side: &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;quot; and &amp;quot;&amp;lt;&amp;lt;&amp;lt;&amp;quot;, which must be present for Factorio to accept the string. Between those two tokens is the map exchange data, encoded using base 64 as defined by [https://tools.ietf.org/html/rfc4648#section-4 RFC 4648] (or [https://tools.ietf.org/html/rfc3548#section-3 3548], [https://tools.ietf.org/html/rfc2535#page-42 2535], [https://tools.ietf.org/html/rfc2045#section-6.8 2045], [https://tools.ietf.org/html/rfc1421#section-4.3.2.4 1421], et al). &lt;br /&gt;
&lt;br /&gt;
See the page on [[Data_Types|data types]] for an explanation of the different types of data used in this document.&lt;br /&gt;
&lt;br /&gt;
== Factorio 0.14 and Beyond ==&lt;br /&gt;
&lt;br /&gt;
This is the base map exchange string format for all Factorio versions 0.14.x and greater. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]][4]&lt;br /&gt;
| The [[Version_String_Format|version string]] of Factorio that generated this string, used to determine encoding format.&lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| [[#Map_Gen_Settings|Map Gen Settings]]. Variable length. See linked section for information on how to parse. &lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| [[#0.15 Map Settings|0.15.x Map Settings]]. If present, this chunk consists of the remainder of the data (minus the checksum).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]]&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Cyclic_redundancy_check CRC32 checksum] of all preceding data, as defined by ANSI X3.66 / FIPS 71 / ITU-T V.42 (the same one used by [https://en.wikipedia.org/wiki/Zlib zlib], ethernet, etc.)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Map Gen Settings ==&lt;br /&gt;
&lt;br /&gt;
This format is very similar to, but not identical to, [http://lua-api.factorio.com/latest/Concepts.html#MapGenSettings MapGenSettings] - it is just missing the &amp;quot;shift&amp;quot; field (which is derived from the seed value anyway).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#byte|byte]]&lt;br /&gt;
| terrain_segmentation&lt;br /&gt;
| [[Water]] [[#Map_Gen_Size|frequency]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#byte|byte]]&lt;br /&gt;
| water&lt;br /&gt;
| [[Water]] [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#dict|dict]]&amp;lt;[[Data_Types#string|string]], [[#Autoplace_Control|byte[3]]]&amp;gt;&lt;br /&gt;
| autoplace_controls&lt;br /&gt;
| An dictionary of [[#Autoplace_Control|Autoplace Controls]], with string keys, where the key represents the ore name.  Factorio doesn’t care what order this dictionary is in, but it always alphabetizes during export. Vanilla has seven resources: [[Coal|coal]], [[Copper ore|copper-ore]], [[Crude Oil|crude-oil]], [[Enemies|enemy-base]], [[Iron ore|iron-ore]], [[Stone|stone]], and [[Uranium ore|uranium-ore]]. Unknown ores are ignored and missing ores are set to their defaults.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]]&lt;br /&gt;
| seed&lt;br /&gt;
| [[World generator#Map Seed|Map seed]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]]&lt;br /&gt;
| width&lt;br /&gt;
| [[World generator#Map-width and -height|Map width]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]]&lt;br /&gt;
| height&lt;br /&gt;
| [[World generator#Map-width and -height|Map height]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#byte|byte]]&lt;br /&gt;
| starting_area&lt;br /&gt;
| [[World generator#Starting area|Starting area]] [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#bool|boolean]]&lt;br /&gt;
| peaceful_mode&lt;br /&gt;
| [[World generator#Peaceful mode|Peaceful mode]]. Enabled if set to 1, disabled otherwise.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 0.15 Map Settings ==&lt;br /&gt;
&lt;br /&gt;
All of the following data fields (until noted at the end) have a special encapsulation format. Preceding each value is a single byte that states whether or not the value is present. If the byte is equal to zero, then the field value is not present. Otherwise, then the field&#039;s value follows. &lt;br /&gt;
&lt;br /&gt;
In the LUA structure, this information is stored in the &amp;quot;[http://lua-api.factorio.com/latest/LuaGameScript.html#LuaGameScript.map_settings game.map_settings]&amp;quot; table, which is created by the &amp;quot;[http://lua-api.factorio.com/latest/Concepts.html#MapSettings MapSettings]&amp;quot; prototype. Each section in the table below represents a nested sub-table in &amp;quot;map-settings&amp;quot;, where the LUA key listed is the key of the table, and all subsequent fields are part of the sub-table. See data/base/prototypes/map-settings.lua for a description of all attributes (some of that information has now been copied to this page).&lt;br /&gt;
&lt;br /&gt;
Fields marked with a check (✓) in the &amp;quot;GUI&amp;quot; column are configurable in the [[World_generator#How_it_works|new game map generator GUI]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
! * !! ✓ !! pollution !! Pollution&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#bool|boolean]] || ✓ || enabled || Pollution enabled.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || ✓ || diffusion_ratio || The amount of pollution that is diffused into neighboring chunk per second.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || min_to_diffuse || This many PUs must be on the chunk to start diffusing.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || ✓ || ageing || [Modifier of] the pollution eaten by a chunks tiles.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || expected_max_per_chunk || Anything bigger than this is visualised as this value.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || min_to_show_per_chunk || Anything lower than this (but &amp;gt; 0) is visualised as this value.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || ✓ || min_pollution_to_damage_trees || Any pollution above this amount starts to damage trees.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || pollution_with_max_forest_damage || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || pollution_per_tree_damage || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || ✓ || pollution_restored_per_tree_damage || The amount of pollution absorbed by a tree when it is damaged by pollution.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || max_pollution_to_restore_trees || ???&lt;br /&gt;
|-&lt;br /&gt;
! * !! !! steering.default !! Steering (Default)&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || separation_force || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#bool|boolean]] || || force_unit_fuzzy_goto_behavior || ???&lt;br /&gt;
|-&lt;br /&gt;
! * !! !! steering.moving !! Steering (Moving)&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || separation_force || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#bool|boolean]] || || force_unit_fuzzy_goto_behavior || ???&lt;br /&gt;
|- &lt;br /&gt;
! * !! ✓ !! enemy_evolution !! Evolution&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#bool|boolean]] || ✓ || enabled || Evolution enabled.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || ✓ || time_factor || Percent increase in the evolve factor for every second.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || ✓ || destroy_factor || Percent increase in the evolve factor for every destroyed spawner.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || ✓ || pollution_factor || Percent increase in the evolve factor for every 1000 PU [produced].&lt;br /&gt;
|- &lt;br /&gt;
! * !! ✓ !! enemy_expansion !! Enemy Expansion&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#bool|boolean]] || ✓ || enabled || Enemy expansion enabled.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || ✓ || max_expansion_distance || Distance in chunks from the furthest base around.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || friendly_base_influence_radius || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || enemy_building_influence_radius || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || building_coefficient ||+ rowspan=4 | Expansion algorithm. See LUA file for details.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || other_base_coefficient &lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || neighbouring_chunk_coefficient &lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || neighbouring_base_chunk_coefficient&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || max_colliding_tiles_coefficient || A chunk has to have at most this much percent unbuildable tiles for it to be considered a candidate.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || ✓ || settler_group_min_size ||+ rowspan=2 | Size of the group that goes to build new base (in game this is multiplied by the evolution factor).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || ✓ || settler_group_max_size&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || ✓ || min_expansion_cooldown || Minimum cooldown.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || ✓ || max_expansion_cooldown || Maximum cooldown.&lt;br /&gt;
|- &lt;br /&gt;
! * !! !! unit_group !! Unit Group&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || min_group_gathering_time ||+ rowspan=2 | A pollution triggered group&#039;s waiting time is a random time between min and max gathering time.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || max_group_gathering_time &lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || max_wait_time_for_late_members || After the gathering is finished the group can still wait for late members, but it doesn&#039;t accept new ones anymore.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || max_group_radius ||+ rowspan=2 | Limits for group radius.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || min_group_radius&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || max_member_speedup_when_behind || When a member falls behind the group he can speedup up till this much of his regular speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || max_member_slowdown_when_ahead || When a member gets ahead of its group, it will slow down to at most this factor of its speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || max_group_slowdown_factor || When members of a group are behind, the entire group will slow down to at most this factor of its max speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || max_group_member_fallback_factor || If a member falls behind more than this times the group radius, the group will slow down to max_group_slowdown_factor.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || member_disown_distance || If a member falls behind more than this time the group radius, it will be removed from the group.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || tick_tolerance_when_member_arrives || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || max_gathering_unit_groups || Maximum number of automatically created unit groups gathering for attack at any time.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || max_unit_group_size || Maximum size of an attack unit group. This only affects automatically-created unit groups.&lt;br /&gt;
|- &lt;br /&gt;
! * !! !! path_finder !! Path Finder&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || fwd2bwd_ratio || Defines whether we prefer forward (&amp;gt;1) or backward (&amp;lt;-1) or symmetrical (1) search.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || goal_pressure_ratio || When comparing nodes in open which one to check next, heuristic value is multiplied by this ratio. The higher the number the more is the search directed directly towards the goal.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#bool|boolean]] || || use_path_cache || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || max_steps_worked_per_tick || When this is exhausted no more requests are allowed. At the moment the first path to exhaust this will be finished (even if it is hundreds of steps).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || short_cache_size ||+ rowspan=2 | Number of elements in the cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || long_cache_size&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || short_cache_min_cacheable_distance || Minimal distance to goal for path to be searched in short path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || short_cache_min_algo_steps_to_cache || Minimal number of algorithm steps for path to be inserted into the short path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || long_cache_min_cacheable_distance || Minimal distance to goal for path to be searched in long path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || cache_max_connect_to_cache_steps_multiplier || When searching for connection to path cache path, search at most for this number of steps times the initial estimate.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || cache_accept_path_start_distance_ratio || When looking for path from cache make sure it doesn&#039;t start too far from requested start in relative distance terms.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || cache_accept_path_end_distance_ratio || When looking for path from cache make sure it doesn&#039;t end too far from requested end. This is typically higher than accept value for the start because the end target can be moving.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || negative_cache_accept_path_start_distance_ratio || Same as cache_accept_path_start_distance_ratio, but used for negative cache queries.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || negative_cache_accept_path_end_distance_ratio || Same as cache_accept_path_end_distance_ratio, but used for negative cache queries.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || cache_path_start_distance_rating_multiplier || When assigning rating to the best path this * start distances is considered.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || cache_path_end_distance_rating_multiplier || When assigning rating to the best path this * end distances is considered. This is typically higher than value for the start to achieve better path end quality.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || stale_enemy_with_same_destination_collision_penalty || Somewhere along the path is stuck enemy we need to avoid. This is mainly to handle situations when units have arrived and are attacking the target, then units further in the back will use this and run around the target.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || ignore_moving_enemy_collision_distance || If there is a moving unit further than this we don&#039;t really care.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || enemy_with_different_destination_collision_penalty || Enemy is not moving/or is too close and has different destination.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || general_entity_collision_penalty || Simplification for now - collision with everything else is this.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || general_entity_subsequent_collision_penalty || Collision penalty for successors of positions that require destroy to reach.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || max_clients_to_accept_any_new_request || Uptil this amount any client will be served by the path finder (no estimate on the path length).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || max_clients_to_accept_short_new_request || From max_clients_to_accept_any_new_request till this one only those that have a short estimate will be served.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || direct_distance_to_consider_short_request || This is the &amp;quot;threshold&amp;quot; to decide what is short and what is not.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || short_request_max_steps || If a short request takes more than this many steps, it will be rescheduled as a long request.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || short_request_ratio || How many steps will be allocated to short requests each tick, as a ratio of all available steps per tick.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || min_steps_to_check_path_find_termination || Absolute minimum of steps that will be performed for every path find request no matter what.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || start_to_goal_cost_multiplier_to_terminate_path_find || If the amount of steps is higher than this times estimate of start to goal then path finding is terminated.&lt;br /&gt;
|-&lt;br /&gt;
| colspan = 4 | &#039;&#039;&#039;Note:&#039;&#039;&#039; The following fields do not use the special encapsulation method.&lt;br /&gt;
|-&lt;br /&gt;
! byte[4] !! !! . (root) !! Other&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || max_failed_behavior_count || If a behavior fails this many times, the enemy (or enemy group) is destroyed. This solves biters stuck within their own base.&lt;br /&gt;
|-&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Difficulty Settings ===&lt;br /&gt;
&lt;br /&gt;
This information is instead stored in the LUA structure at [http://lua-api.factorio.com/latest/LuaGameScript.html#LuaGameScript.difficulty_settings game.difficulty_settings], which is prototyped by [http://lua-api.factorio.com/latest/Concepts.html#DifficultySettings DifficultySettings]. These fields do not use the special encapsulation method noted above.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
! byte[10] !! ✓ !! difficulty_settings !! Difficulty Settings&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#byte|byte]] || ✓ || recipe_difficulty || Recipe difficulty. 0 for Normal, 1 for Expensive.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#byte|byte]] || ✓ || technology_difficulty || Technology difficulty. 0 for Normal, 1 for Expensive.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || ✓ || technology_price_multiplier || Technology price multiplier.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: these values are typically defined using the constants at [http://lua-api.factorio.com/latest/defines.html#defines.difficulty_settings defines.difficulty_settings].&lt;br /&gt;
&lt;br /&gt;
== Autoplace Control ==&lt;br /&gt;
See the page on [[World generator#Settings on the top row|world generation]] for more information on frequency, size, and richness.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#byte|byte]]&lt;br /&gt;
| frequency&lt;br /&gt;
| Ore [[#Map_Gen_Size|frequency]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#byte|byte]]&lt;br /&gt;
| size&lt;br /&gt;
| Ore [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#byte|byte]]&lt;br /&gt;
| richness&lt;br /&gt;
| Ore [[#Map_Gen_Size|richness]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Map Gen Size ==&lt;br /&gt;
These are the values used for the frequencies, sizes, and richnesses of ores, water, and the starting area size. None is a valid value for all three options. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| None / None /None&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Very Low / Small / Poor&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Low / Small / Poor&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Normal / Medium / Regular&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| High / Big / Good&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Very High / Big / Good&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of the values in a triplet (such as &amp;quot;low&amp;quot;, &amp;quot;small&amp;quot;, and &amp;quot;poor&amp;quot;) are synonymous.&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Map_exchange_string_format&amp;diff=143766</id>
		<title>Map exchange string format</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Map_exchange_string_format&amp;diff=143766"/>
		<updated>2017-08-12T04:05:33Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* Autoplace Control */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}} [[Category:Technical]]&lt;br /&gt;
This is a technical description of the map exchange string format, used to share map generating configurations with other users. This format is also used to store these settings inside save files for future chunk generation.&lt;br /&gt;
&lt;br /&gt;
Factorio line wraps the entire map exchange string after 57 characters during export (55 code characters + &#039;\r\n&#039;, which is fairly standard), but ignores all whitespace during import. The outer layer of the map exchange string format includes three angle brackets on either side: &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;quot; and &amp;quot;&amp;lt;&amp;lt;&amp;lt;&amp;quot;, which must be present for Factorio to accept the string. Between those two tokens is the map exchange data, encoded using base 64 as defined by [https://tools.ietf.org/html/rfc4648#section-4 RFC 4648] (or [https://tools.ietf.org/html/rfc3548#section-3 3548], [https://tools.ietf.org/html/rfc2535#page-42 2535], [https://tools.ietf.org/html/rfc2045#section-6.8 2045], [https://tools.ietf.org/html/rfc1421#section-4.3.2.4 1421], et al). &lt;br /&gt;
&lt;br /&gt;
See the page on [[Data_Types|data types]] for an explanation of the different types of data used in this document.&lt;br /&gt;
&lt;br /&gt;
== Factorio 0.14 and Beyond ==&lt;br /&gt;
&lt;br /&gt;
This is the base map exchange string format for all Factorio versions 0.14.x and greater. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]][4]&lt;br /&gt;
| The [[Version_String_Format|version string]] of Factorio that generated this string, used to determine encoding format.&lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| [[#Map_Gen_Settings|Map Gen Settings]]. Variable length. See linked section for information on how to parse. &lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| [[#0.15 Map Settings|0.15.x Map Settings]]. If present, this chunk consists of the remainder of the data (minus the checksum).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]]&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Cyclic_redundancy_check CRC32 checksum] of all preceding data, as defined by ANSI X3.66 / FIPS 71 / ITU-T V.42 (the same one used by [https://en.wikipedia.org/wiki/Zlib zlib], ethernet, etc.)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Map Gen Settings ==&lt;br /&gt;
&lt;br /&gt;
This format is very similar to, but not identical to, [http://lua-api.factorio.com/latest/Concepts.html#MapGenSettings MapGenSettings] - it is just missing the &amp;quot;shift&amp;quot; field.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#byte|byte]]&lt;br /&gt;
| terrain_segmentation&lt;br /&gt;
| [[Water]] [[#Map_Gen_Size|frequency]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#byte|byte]]&lt;br /&gt;
| water&lt;br /&gt;
| [[Water]] [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#dict|dict]]&amp;lt;[[Data_Types#string|string]], [[#Autoplace_Control|byte[3]]]&amp;gt;&lt;br /&gt;
| autoplace_controls&lt;br /&gt;
| An dictionary of [[#Autoplace_Control|Autoplace Controls]], with string keys, where the key represents the ore name.  Factorio doesn’t care what order this dictionary is in, but it always alphabetizes during export. Vanilla has seven resources: [[Coal|coal]], [[Copper ore|copper-ore]], [[Crude Oil|crude-oil]], [[Enemies|enemy-base]], [[Iron ore|iron-ore]], [[Stone|stone]], and [[Uranium ore|uranium-ore]]. Unknown ores are ignored and missing ores are set to their defaults.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]]&lt;br /&gt;
| seed&lt;br /&gt;
| [[World generator#Map Seed|Map seed]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]]&lt;br /&gt;
| width&lt;br /&gt;
| [[World generator#Map-width and -height|Map width]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]]&lt;br /&gt;
| height&lt;br /&gt;
| [[World generator#Map-width and -height|Map height]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#byte|byte]]&lt;br /&gt;
| starting_area&lt;br /&gt;
| [[World generator#Starting area|Starting area]] [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#bool|boolean]]&lt;br /&gt;
| peaceful_mode&lt;br /&gt;
| [[World generator#Peaceful mode|Peaceful mode]]. Enabled if set to 1, disabled otherwise.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 0.15 Map Settings ==&lt;br /&gt;
&lt;br /&gt;
All of the following data fields (until noted at the end) have a special encapsulation format. Preceding each value is a single byte that states whether or not the value is present. If the byte is equal to zero, then the field value is not present. Otherwise, then the field&#039;s value follows. &lt;br /&gt;
&lt;br /&gt;
In the LUA structure, this information is stored in the &amp;quot;[http://lua-api.factorio.com/latest/LuaGameScript.html#LuaGameScript.map_settings game.map_settings]&amp;quot; table, which is created by the &amp;quot;[http://lua-api.factorio.com/latest/Concepts.html#MapSettings MapSettings]&amp;quot; prototype. Each section in the table below represents a nested sub-table in &amp;quot;map-settings&amp;quot;, where the LUA key listed is the key of the table, and all subsequent fields are part of the sub-table. See data/base/prototypes/map-settings.lua for a description of all attributes (some of that information has now been copied to this page).&lt;br /&gt;
&lt;br /&gt;
Fields marked with a check (✓) in the &amp;quot;GUI&amp;quot; column are configurable in the [[World_generator#How_it_works|new game map generator GUI]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
! * !! ✓ !! pollution !! Pollution&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#bool|boolean]] || ✓ || enabled || Pollution enabled.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || ✓ || diffusion_ratio || The amount of pollution that is diffused into neighboring chunk per second.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || min_to_diffuse || This many PUs must be on the chunk to start diffusing.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || ✓ || ageing || [Modifier of] the pollution eaten by a chunks tiles.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || expected_max_per_chunk || Anything bigger than this is visualised as this value.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || min_to_show_per_chunk || Anything lower than this (but &amp;gt; 0) is visualised as this value.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || ✓ || min_pollution_to_damage_trees || Any pollution above this amount starts to damage trees.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || pollution_with_max_forest_damage || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || pollution_per_tree_damage || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || ✓ || pollution_restored_per_tree_damage || The amount of pollution absorbed by a tree when it is damaged by pollution.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || max_pollution_to_restore_trees || ???&lt;br /&gt;
|-&lt;br /&gt;
! * !! !! steering.default !! Steering (Default)&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || separation_force || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#bool|boolean]] || || force_unit_fuzzy_goto_behavior || ???&lt;br /&gt;
|-&lt;br /&gt;
! * !! !! steering.moving !! Steering (Moving)&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || separation_force || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#bool|boolean]] || || force_unit_fuzzy_goto_behavior || ???&lt;br /&gt;
|- &lt;br /&gt;
! * !! ✓ !! enemy_evolution !! Evolution&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#bool|boolean]] || ✓ || enabled || Evolution enabled.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || ✓ || time_factor || Percent increase in the evolve factor for every second.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || ✓ || destroy_factor || Percent increase in the evolve factor for every destroyed spawner.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || ✓ || pollution_factor || Percent increase in the evolve factor for every 1000 PU [produced].&lt;br /&gt;
|- &lt;br /&gt;
! * !! ✓ !! enemy_expansion !! Enemy Expansion&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#bool|boolean]] || ✓ || enabled || Enemy expansion enabled.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || ✓ || max_expansion_distance || Distance in chunks from the furthest base around.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || friendly_base_influence_radius || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || enemy_building_influence_radius || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || building_coefficient ||+ rowspan=4 | Expansion algorithm. See LUA file for details.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || other_base_coefficient &lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || neighbouring_chunk_coefficient &lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || neighbouring_base_chunk_coefficient&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || max_colliding_tiles_coefficient || A chunk has to have at most this much percent unbuildable tiles for it to be considered a candidate.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || ✓ || settler_group_min_size ||+ rowspan=2 | Size of the group that goes to build new base (in game this is multiplied by the evolution factor).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || ✓ || settler_group_max_size&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || ✓ || min_expansion_cooldown || Minimum cooldown.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || ✓ || max_expansion_cooldown || Maximum cooldown.&lt;br /&gt;
|- &lt;br /&gt;
! * !! !! unit_group !! Unit Group&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || min_group_gathering_time ||+ rowspan=2 | A pollution triggered group&#039;s waiting time is a random time between min and max gathering time.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || max_group_gathering_time &lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || max_wait_time_for_late_members || After the gathering is finished the group can still wait for late members, but it doesn&#039;t accept new ones anymore.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || max_group_radius ||+ rowspan=2 | Limits for group radius.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || min_group_radius&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || max_member_speedup_when_behind || When a member falls behind the group he can speedup up till this much of his regular speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || max_member_slowdown_when_ahead || When a member gets ahead of its group, it will slow down to at most this factor of its speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || max_group_slowdown_factor || When members of a group are behind, the entire group will slow down to at most this factor of its max speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || max_group_member_fallback_factor || If a member falls behind more than this times the group radius, the group will slow down to max_group_slowdown_factor.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || member_disown_distance || If a member falls behind more than this time the group radius, it will be removed from the group.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || tick_tolerance_when_member_arrives || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || max_gathering_unit_groups || Maximum number of automatically created unit groups gathering for attack at any time.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || max_unit_group_size || Maximum size of an attack unit group. This only affects automatically-created unit groups.&lt;br /&gt;
|- &lt;br /&gt;
! * !! !! path_finder !! Path Finder&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || fwd2bwd_ratio || Defines whether we prefer forward (&amp;gt;1) or backward (&amp;lt;-1) or symmetrical (1) search.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || goal_pressure_ratio || When comparing nodes in open which one to check next, heuristic value is multiplied by this ratio. The higher the number the more is the search directed directly towards the goal.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#bool|boolean]] || || use_path_cache || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || max_steps_worked_per_tick || When this is exhausted no more requests are allowed. At the moment the first path to exhaust this will be finished (even if it is hundreds of steps).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || short_cache_size ||+ rowspan=2 | Number of elements in the cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || long_cache_size&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || short_cache_min_cacheable_distance || Minimal distance to goal for path to be searched in short path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || short_cache_min_algo_steps_to_cache || Minimal number of algorithm steps for path to be inserted into the short path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || long_cache_min_cacheable_distance || Minimal distance to goal for path to be searched in long path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || cache_max_connect_to_cache_steps_multiplier || When searching for connection to path cache path, search at most for this number of steps times the initial estimate.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || cache_accept_path_start_distance_ratio || When looking for path from cache make sure it doesn&#039;t start too far from requested start in relative distance terms.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || cache_accept_path_end_distance_ratio || When looking for path from cache make sure it doesn&#039;t end too far from requested end. This is typically higher than accept value for the start because the end target can be moving.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || negative_cache_accept_path_start_distance_ratio || Same as cache_accept_path_start_distance_ratio, but used for negative cache queries.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || negative_cache_accept_path_end_distance_ratio || Same as cache_accept_path_end_distance_ratio, but used for negative cache queries.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || cache_path_start_distance_rating_multiplier || When assigning rating to the best path this * start distances is considered.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || cache_path_end_distance_rating_multiplier || When assigning rating to the best path this * end distances is considered. This is typically higher than value for the start to achieve better path end quality.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || stale_enemy_with_same_destination_collision_penalty || Somewhere along the path is stuck enemy we need to avoid. This is mainly to handle situations when units have arrived and are attacking the target, then units further in the back will use this and run around the target.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || ignore_moving_enemy_collision_distance || If there is a moving unit further than this we don&#039;t really care.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || enemy_with_different_destination_collision_penalty || Enemy is not moving/or is too close and has different destination.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || general_entity_collision_penalty || Simplification for now - collision with everything else is this.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || general_entity_subsequent_collision_penalty || Collision penalty for successors of positions that require destroy to reach.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || max_clients_to_accept_any_new_request || Uptil this amount any client will be served by the path finder (no estimate on the path length).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || max_clients_to_accept_short_new_request || From max_clients_to_accept_any_new_request till this one only those that have a short estimate will be served.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || direct_distance_to_consider_short_request || This is the &amp;quot;threshold&amp;quot; to decide what is short and what is not.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || short_request_max_steps || If a short request takes more than this many steps, it will be rescheduled as a long request.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || short_request_ratio || How many steps will be allocated to short requests each tick, as a ratio of all available steps per tick.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || min_steps_to_check_path_find_termination || Absolute minimum of steps that will be performed for every path find request no matter what.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || start_to_goal_cost_multiplier_to_terminate_path_find || If the amount of steps is higher than this times estimate of start to goal then path finding is terminated.&lt;br /&gt;
|-&lt;br /&gt;
| colspan = 4 | &#039;&#039;&#039;Note:&#039;&#039;&#039; The following fields do not use the special encapsulation method.&lt;br /&gt;
|-&lt;br /&gt;
! byte[4] !! !! . (root) !! Other&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || max_failed_behavior_count || If a behavior fails this many times, the enemy (or enemy group) is destroyed. This solves biters stuck within their own base.&lt;br /&gt;
|-&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Difficulty Settings ===&lt;br /&gt;
&lt;br /&gt;
This information is instead stored in the LUA structure at [http://lua-api.factorio.com/latest/LuaGameScript.html#LuaGameScript.difficulty_settings game.difficulty_settings], which is prototyped by [http://lua-api.factorio.com/latest/Concepts.html#DifficultySettings DifficultySettings]. These fields do not use the special encapsulation method noted above.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
! byte[10] !! ✓ !! difficulty_settings !! Difficulty Settings&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#byte|byte]] || ✓ || recipe_difficulty || Recipe difficulty. 0 for Normal, 1 for Expensive.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#byte|byte]] || ✓ || technology_difficulty || Technology difficulty. 0 for Normal, 1 for Expensive.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || ✓ || technology_price_multiplier || Technology price multiplier.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: these values are typically defined using the constants at [http://lua-api.factorio.com/latest/defines.html#defines.difficulty_settings defines.difficulty_settings].&lt;br /&gt;
&lt;br /&gt;
== Autoplace Control ==&lt;br /&gt;
See the page on [[World generator#Settings on the top row|world generation]] for more information on frequency, size, and richness.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#byte|byte]]&lt;br /&gt;
| frequency&lt;br /&gt;
| Ore [[#Map_Gen_Size|frequency]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#byte|byte]]&lt;br /&gt;
| size&lt;br /&gt;
| Ore [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#byte|byte]]&lt;br /&gt;
| richness&lt;br /&gt;
| Ore [[#Map_Gen_Size|richness]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Map Gen Size ==&lt;br /&gt;
These are the values used for the frequencies, sizes, and richnesses of ores, water, and the starting area size. None is a valid value for all three options. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| None / None /None&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Very Low / Small / Poor&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Low / Small / Poor&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Normal / Medium / Regular&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| High / Big / Good&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Very High / Big / Good&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of the values in a triplet (such as &amp;quot;low&amp;quot;, &amp;quot;small&amp;quot;, and &amp;quot;poor&amp;quot;) are synonymous.&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Map_exchange_string_format&amp;diff=143765</id>
		<title>Map exchange string format</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Map_exchange_string_format&amp;diff=143765"/>
		<updated>2017-08-12T04:02:02Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* Map Gen Settings */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}} [[Category:Technical]]&lt;br /&gt;
This is a technical description of the map exchange string format, used to share map generating configurations with other users. This format is also used to store these settings inside save files for future chunk generation.&lt;br /&gt;
&lt;br /&gt;
Factorio line wraps the entire map exchange string after 57 characters during export (55 code characters + &#039;\r\n&#039;, which is fairly standard), but ignores all whitespace during import. The outer layer of the map exchange string format includes three angle brackets on either side: &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;quot; and &amp;quot;&amp;lt;&amp;lt;&amp;lt;&amp;quot;, which must be present for Factorio to accept the string. Between those two tokens is the map exchange data, encoded using base 64 as defined by [https://tools.ietf.org/html/rfc4648#section-4 RFC 4648] (or [https://tools.ietf.org/html/rfc3548#section-3 3548], [https://tools.ietf.org/html/rfc2535#page-42 2535], [https://tools.ietf.org/html/rfc2045#section-6.8 2045], [https://tools.ietf.org/html/rfc1421#section-4.3.2.4 1421], et al). &lt;br /&gt;
&lt;br /&gt;
See the page on [[Data_Types|data types]] for an explanation of the different types of data used in this document.&lt;br /&gt;
&lt;br /&gt;
== Factorio 0.14 and Beyond ==&lt;br /&gt;
&lt;br /&gt;
This is the base map exchange string format for all Factorio versions 0.14.x and greater. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]][4]&lt;br /&gt;
| The [[Version_String_Format|version string]] of Factorio that generated this string, used to determine encoding format.&lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| [[#Map_Gen_Settings|Map Gen Settings]]. Variable length. See linked section for information on how to parse. &lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| [[#0.15 Map Settings|0.15.x Map Settings]]. If present, this chunk consists of the remainder of the data (minus the checksum).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]]&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Cyclic_redundancy_check CRC32 checksum] of all preceding data, as defined by ANSI X3.66 / FIPS 71 / ITU-T V.42 (the same one used by [https://en.wikipedia.org/wiki/Zlib zlib], ethernet, etc.)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Map Gen Settings ==&lt;br /&gt;
&lt;br /&gt;
This format is very similar to, but not identical to, [http://lua-api.factorio.com/latest/Concepts.html#MapGenSettings MapGenSettings] - it is just missing the &amp;quot;shift&amp;quot; field.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#byte|byte]]&lt;br /&gt;
| terrain_segmentation&lt;br /&gt;
| [[Water]] [[#Map_Gen_Size|frequency]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#byte|byte]]&lt;br /&gt;
| water&lt;br /&gt;
| [[Water]] [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#dict|dict]]&amp;lt;[[Data_Types#string|string]], [[#Autoplace_Control|byte[3]]]&amp;gt;&lt;br /&gt;
| autoplace_controls&lt;br /&gt;
| An dictionary of [[#Autoplace_Control|Autoplace Controls]], with string keys, where the key represents the ore name.  Factorio doesn’t care what order this dictionary is in, but it always alphabetizes during export. Vanilla has seven resources: [[Coal|coal]], [[Copper ore|copper-ore]], [[Crude Oil|crude-oil]], [[Enemies|enemy-base]], [[Iron ore|iron-ore]], [[Stone|stone]], and [[Uranium ore|uranium-ore]]. Unknown ores are ignored and missing ores are set to their defaults.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]]&lt;br /&gt;
| seed&lt;br /&gt;
| [[World generator#Map Seed|Map seed]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]]&lt;br /&gt;
| width&lt;br /&gt;
| [[World generator#Map-width and -height|Map width]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]]&lt;br /&gt;
| height&lt;br /&gt;
| [[World generator#Map-width and -height|Map height]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#byte|byte]]&lt;br /&gt;
| starting_area&lt;br /&gt;
| [[World generator#Starting area|Starting area]] [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#bool|boolean]]&lt;br /&gt;
| peaceful_mode&lt;br /&gt;
| [[World generator#Peaceful mode|Peaceful mode]]. Enabled if set to 1, disabled otherwise.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 0.15 Map Settings ==&lt;br /&gt;
&lt;br /&gt;
All of the following data fields (until noted at the end) have a special encapsulation format. Preceding each value is a single byte that states whether or not the value is present. If the byte is equal to zero, then the field value is not present. Otherwise, then the field&#039;s value follows. &lt;br /&gt;
&lt;br /&gt;
In the LUA structure, this information is stored in the &amp;quot;[http://lua-api.factorio.com/latest/LuaGameScript.html#LuaGameScript.map_settings game.map_settings]&amp;quot; table, which is created by the &amp;quot;[http://lua-api.factorio.com/latest/Concepts.html#MapSettings MapSettings]&amp;quot; prototype. Each section in the table below represents a nested sub-table in &amp;quot;map-settings&amp;quot;, where the LUA key listed is the key of the table, and all subsequent fields are part of the sub-table. See data/base/prototypes/map-settings.lua for a description of all attributes (some of that information has now been copied to this page).&lt;br /&gt;
&lt;br /&gt;
Fields marked with a check (✓) in the &amp;quot;GUI&amp;quot; column are configurable in the [[World_generator#How_it_works|new game map generator GUI]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
! * !! ✓ !! pollution !! Pollution&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#bool|boolean]] || ✓ || enabled || Pollution enabled.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || ✓ || diffusion_ratio || The amount of pollution that is diffused into neighboring chunk per second.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || min_to_diffuse || This many PUs must be on the chunk to start diffusing.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || ✓ || ageing || [Modifier of] the pollution eaten by a chunks tiles.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || expected_max_per_chunk || Anything bigger than this is visualised as this value.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || min_to_show_per_chunk || Anything lower than this (but &amp;gt; 0) is visualised as this value.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || ✓ || min_pollution_to_damage_trees || Any pollution above this amount starts to damage trees.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || pollution_with_max_forest_damage || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || pollution_per_tree_damage || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || ✓ || pollution_restored_per_tree_damage || The amount of pollution absorbed by a tree when it is damaged by pollution.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || max_pollution_to_restore_trees || ???&lt;br /&gt;
|-&lt;br /&gt;
! * !! !! steering.default !! Steering (Default)&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || separation_force || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#bool|boolean]] || || force_unit_fuzzy_goto_behavior || ???&lt;br /&gt;
|-&lt;br /&gt;
! * !! !! steering.moving !! Steering (Moving)&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || ??? || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || || separation_force || ???&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#bool|boolean]] || || force_unit_fuzzy_goto_behavior || ???&lt;br /&gt;
|- &lt;br /&gt;
! * !! ✓ !! enemy_evolution !! Evolution&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#bool|boolean]] || ✓ || enabled || Evolution enabled.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || ✓ || time_factor || Percent increase in the evolve factor for every second.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || ✓ || destroy_factor || Percent increase in the evolve factor for every destroyed spawner.&lt;br /&gt;
|- &lt;br /&gt;
| [[Data_Types#double|double]] || ✓ || pollution_factor || Percent increase in the evolve factor for every 1000 PU [produced].&lt;br /&gt;
|- &lt;br /&gt;
! * !! ✓ !! enemy_expansion !! Enemy Expansion&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#bool|boolean]] || ✓ || enabled || Enemy expansion enabled.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || ✓ || max_expansion_distance || Distance in chunks from the furthest base around.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || friendly_base_influence_radius || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || enemy_building_influence_radius || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || building_coefficient ||+ rowspan=4 | Expansion algorithm. See LUA file for details.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || other_base_coefficient &lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || neighbouring_chunk_coefficient &lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || neighbouring_base_chunk_coefficient&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || max_colliding_tiles_coefficient || A chunk has to have at most this much percent unbuildable tiles for it to be considered a candidate.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || ✓ || settler_group_min_size ||+ rowspan=2 | Size of the group that goes to build new base (in game this is multiplied by the evolution factor).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || ✓ || settler_group_max_size&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || ✓ || min_expansion_cooldown || Minimum cooldown.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || ✓ || max_expansion_cooldown || Maximum cooldown.&lt;br /&gt;
|- &lt;br /&gt;
! * !! !! unit_group !! Unit Group&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || min_group_gathering_time ||+ rowspan=2 | A pollution triggered group&#039;s waiting time is a random time between min and max gathering time.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || max_group_gathering_time &lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || max_wait_time_for_late_members || After the gathering is finished the group can still wait for late members, but it doesn&#039;t accept new ones anymore.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || max_group_radius ||+ rowspan=2 | Limits for group radius.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || min_group_radius&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || max_member_speedup_when_behind || When a member falls behind the group he can speedup up till this much of his regular speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || max_member_slowdown_when_ahead || When a member gets ahead of its group, it will slow down to at most this factor of its speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || max_group_slowdown_factor || When members of a group are behind, the entire group will slow down to at most this factor of its max speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || max_group_member_fallback_factor || If a member falls behind more than this times the group radius, the group will slow down to max_group_slowdown_factor.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || member_disown_distance || If a member falls behind more than this time the group radius, it will be removed from the group.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || tick_tolerance_when_member_arrives || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || max_gathering_unit_groups || Maximum number of automatically created unit groups gathering for attack at any time.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || max_unit_group_size || Maximum size of an attack unit group. This only affects automatically-created unit groups.&lt;br /&gt;
|- &lt;br /&gt;
! * !! !! path_finder !! Path Finder&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || fwd2bwd_ratio || Defines whether we prefer forward (&amp;gt;1) or backward (&amp;lt;-1) or symmetrical (1) search.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || goal_pressure_ratio || When comparing nodes in open which one to check next, heuristic value is multiplied by this ratio. The higher the number the more is the search directed directly towards the goal.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#bool|boolean]] || || use_path_cache || ???&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || max_steps_worked_per_tick || When this is exhausted no more requests are allowed. At the moment the first path to exhaust this will be finished (even if it is hundreds of steps).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || short_cache_size ||+ rowspan=2 | Number of elements in the cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || long_cache_size&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || short_cache_min_cacheable_distance || Minimal distance to goal for path to be searched in short path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || short_cache_min_algo_steps_to_cache || Minimal number of algorithm steps for path to be inserted into the short path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || long_cache_min_cacheable_distance || Minimal distance to goal for path to be searched in long path cache.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || cache_max_connect_to_cache_steps_multiplier || When searching for connection to path cache path, search at most for this number of steps times the initial estimate.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || cache_accept_path_start_distance_ratio || When looking for path from cache make sure it doesn&#039;t start too far from requested start in relative distance terms.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || cache_accept_path_end_distance_ratio || When looking for path from cache make sure it doesn&#039;t end too far from requested end. This is typically higher than accept value for the start because the end target can be moving.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || negative_cache_accept_path_start_distance_ratio || Same as cache_accept_path_start_distance_ratio, but used for negative cache queries.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || negative_cache_accept_path_end_distance_ratio || Same as cache_accept_path_end_distance_ratio, but used for negative cache queries.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || cache_path_start_distance_rating_multiplier || When assigning rating to the best path this * start distances is considered.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || cache_path_end_distance_rating_multiplier || When assigning rating to the best path this * end distances is considered. This is typically higher than value for the start to achieve better path end quality.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || stale_enemy_with_same_destination_collision_penalty || Somewhere along the path is stuck enemy we need to avoid. This is mainly to handle situations when units have arrived and are attacking the target, then units further in the back will use this and run around the target.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || ignore_moving_enemy_collision_distance || If there is a moving unit further than this we don&#039;t really care.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || enemy_with_different_destination_collision_penalty || Enemy is not moving/or is too close and has different destination.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || general_entity_collision_penalty || Simplification for now - collision with everything else is this.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || general_entity_subsequent_collision_penalty || Collision penalty for successors of positions that require destroy to reach.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || max_clients_to_accept_any_new_request || Uptil this amount any client will be served by the path finder (no estimate on the path length).&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || max_clients_to_accept_short_new_request || From max_clients_to_accept_any_new_request till this one only those that have a short estimate will be served.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || direct_distance_to_consider_short_request || This is the &amp;quot;threshold&amp;quot; to decide what is short and what is not.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || short_request_max_steps || If a short request takes more than this many steps, it will be rescheduled as a long request.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || short_request_ratio || How many steps will be allocated to short requests each tick, as a ratio of all available steps per tick.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || min_steps_to_check_path_find_termination || Absolute minimum of steps that will be performed for every path find request no matter what.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || || start_to_goal_cost_multiplier_to_terminate_path_find || If the amount of steps is higher than this times estimate of start to goal then path finding is terminated.&lt;br /&gt;
|-&lt;br /&gt;
| colspan = 4 | &#039;&#039;&#039;Note:&#039;&#039;&#039; The following fields do not use the special encapsulation method.&lt;br /&gt;
|-&lt;br /&gt;
! byte[4] !! !! . (root) !! Other&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#int|int]] || || max_failed_behavior_count || If a behavior fails this many times, the enemy (or enemy group) is destroyed. This solves biters stuck within their own base.&lt;br /&gt;
|-&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Difficulty Settings ===&lt;br /&gt;
&lt;br /&gt;
This information is instead stored in the LUA structure at [http://lua-api.factorio.com/latest/LuaGameScript.html#LuaGameScript.difficulty_settings game.difficulty_settings], which is prototyped by [http://lua-api.factorio.com/latest/Concepts.html#DifficultySettings DifficultySettings]. These fields do not use the special encapsulation method noted above.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | GUI !! LUA key !! Description&lt;br /&gt;
|-&lt;br /&gt;
! byte[10] !! ✓ !! difficulty_settings !! Difficulty Settings&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#byte|byte]] || ✓ || recipe_difficulty || Recipe difficulty. 0 for Normal, 1 for Expensive.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#byte|byte]] || ✓ || technology_difficulty || Technology difficulty. 0 for Normal, 1 for Expensive.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#double|double]] || ✓ || technology_price_multiplier || Technology price multiplier.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: these values are typically defined using the constants at [http://lua-api.factorio.com/latest/defines.html#defines.difficulty_settings defines.difficulty_settings].&lt;br /&gt;
&lt;br /&gt;
== Autoplace Control ==&lt;br /&gt;
See the page on [[World generator#Settings on the top row|world generation]] for more information on frequency, size, and richness.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| [[Data_Types#byte|byte]]&lt;br /&gt;
| Ore [[#Map_Gen_Size|frequency]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#byte|byte]]&lt;br /&gt;
| Ore [[#Map_Gen_Size|size]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#byte|byte]]&lt;br /&gt;
| Ore [[#Map_Gen_Size|richness]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Map Gen Size ==&lt;br /&gt;
These are the values used for the frequencies, sizes, and richnesses of ores, water, and the starting area size. None is a valid value for all three options. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| None / None /None&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Very Low / Small / Poor&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Low / Small / Poor&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Normal / Medium / Regular&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| High / Big / Good&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Very High / Big / Good&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of the values in a triplet (such as &amp;quot;low&amp;quot;, &amp;quot;small&amp;quot;, and &amp;quot;poor&amp;quot;) are synonymous.&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Data_types&amp;diff=143764</id>
		<title>Data types</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Data_types&amp;diff=143764"/>
		<updated>2017-08-12T03:52:53Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* double */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}} [[Category:Technical]]&lt;br /&gt;
&lt;br /&gt;
This page describes common binary data types used by Factorio, and most modern day computer applications, internally.&lt;br /&gt;
&lt;br /&gt;
== Properties ==&lt;br /&gt;
&lt;br /&gt;
=== Endianness ===&lt;br /&gt;
&lt;br /&gt;
All data stored in computers are stored in single, small unit of data called a &amp;quot;byte&amp;quot;. Larger units of data are split into multiple bytes. The order in which sequential bytes are assembled together to form a larger unit of data is referred to as it&#039;s &amp;quot;endianess&amp;quot;. &#039;&#039;&#039;All data saved locally by Factorio is stored in &amp;quot;little&amp;quot;-endian format&#039;&#039;&#039; (because Intel favored little endian processors in the ancient times). All data transferred over the network by Factorio is done in &amp;quot;big&amp;quot;-endian format (the standard for network stuffs, so much so that it&#039;s often refered to as &amp;quot;network&amp;quot;-endian). (Please correct any of this if I&#039;m wrong!!) For more information about endianness, please see the [https://en.wikipedia.org/wiki/Endianness Wikipedia entry].&lt;br /&gt;
&lt;br /&gt;
=== Signedness ===&lt;br /&gt;
&lt;br /&gt;
Another property of large data types is it&#039;s signedness. Please see the [https://en.wikipedia.org/wiki/Signedness wikipedia entry]. By default, all data types used in Factorio are signed. &#039;&#039;&#039;Data types marked with a u- prefixed are unsigned&#039;&#039;&#039;. I&#039;m not certain which type of signedness Factorio uses - perhaps it is machine dependant, but for me it always appears to be [https://en.wikipedia.org/wiki/Two%27s_complement two&#039;s complement]. &lt;br /&gt;
&lt;br /&gt;
== Data Types ==&lt;br /&gt;
&lt;br /&gt;
=== bool ===&lt;br /&gt;
&lt;br /&gt;
A 1 byte value. Considered True iff value equals 1, otherwise it is considered False.&lt;br /&gt;
&lt;br /&gt;
=== byte ===&lt;br /&gt;
&lt;br /&gt;
1 byte long integer.&lt;br /&gt;
&lt;br /&gt;
=== short ===&lt;br /&gt;
&lt;br /&gt;
2 byte long integer.&lt;br /&gt;
&lt;br /&gt;
=== int ===&lt;br /&gt;
&lt;br /&gt;
4 byte long integer.&lt;br /&gt;
&lt;br /&gt;
=== long ===&lt;br /&gt;
&lt;br /&gt;
8 byte long integer.&lt;br /&gt;
&lt;br /&gt;
=== float ===&lt;br /&gt;
&lt;br /&gt;
An 4 byte (32 bit) long [https://en.wikipedia.org/wiki/Floating-point_arithmetic floating point number] stored in a special format with two fields - the number&#039;s exponent, and it&#039;s [https://en.wikipedia.org/wiki/Significand mantissa]. This format is described by the [https://en.wikipedia.org/wiki/Single-precision_floating-point_format 32-bit data type in IEEE 754].&lt;br /&gt;
&lt;br /&gt;
=== double ===&lt;br /&gt;
&lt;br /&gt;
An 8 byte (64 bit) long [https://en.wikipedia.org/wiki/Floating-point_arithmetic floating point number] stored in a special format with two fields - the number&#039;s exponent, and it&#039;s [https://en.wikipedia.org/wiki/Significand mantissa]. This format is described by the [https://en.wikipedia.org/wiki/Double-precision_floating-point_format 64-bit data type in IEEE 754].&lt;br /&gt;
&lt;br /&gt;
=== string ===&lt;br /&gt;
&lt;br /&gt;
Strings in Factorio are stored [https://en.wikipedia.org/wiki/String_(computer_science)#Length-prefixed Pascal-style] - they&#039;re a variable length data type with two fields: an [[#int|int]] describing how many bytes long the string data is, and then the string data itself.&lt;br /&gt;
&lt;br /&gt;
=== array ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;array&amp;lt;element type&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arrays are a container type. Like a [[#string|string]], they&#039;re prefixed with an [[#int|int]] describing how many elements are in the array, followed by that many elements of the specified element type back to back.&lt;br /&gt;
&lt;br /&gt;
=== dict ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;dict&amp;lt;key type, value type&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dictionaries (or &amp;quot;dict&amp;quot;s for short) are like [[#array|arrays]], but their elements consist of (key, value) pairs. Just like [[#array|arrays]], they&#039;re prefixed with an [[#int|int]] describing how many (key, value) pairs are in the dict, followed by that many (key, value) pairs.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [http://lua-api.factorio.com/latest/Builtin-Types.html Factorios Lua API documentation about its builtin types]&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Achievement_file_format&amp;diff=143763</id>
		<title>Achievement file format</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Achievement_file_format&amp;diff=143763"/>
		<updated>2017-08-12T03:43:45Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* Achievement Content Info */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}} [[Category:Technical]]&lt;br /&gt;
This is a technical description of the achievement file format, used by Factorio to store player&#039;s achievement progress in the files &amp;quot;achievements.dat&amp;quot; and &amp;quot;achievements-modded.dat&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Yes - this information can be used to &amp;quot;cheat&amp;quot; Factorio by simply writing to the achievement file(s) in such a way as if you had met all the achievement requirements, open up Factorio, and then suddenly have all achievements unlocked. If you&#039;ve played Factorio at all you should know that this point is moot. The goal of this document is to share how to _read_ the achievement file(s) - so that third party applications can do do things with that information. Enjoy.&lt;br /&gt;
&lt;br /&gt;
See the page on [[Data_Types|data types]] for an explanation of the different types of data used in this document.&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
&lt;br /&gt;
The overall file format is as follows. Note that in this file, [[Data_Types#array|array]] length is stored as a [[Data_Types#short|short]], not an [[Data_Types#int|int]]!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]][4]&lt;br /&gt;
| The [[Version_String_Format|version string]] of Factorio that generated this file.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#array|array]]&amp;lt;[[#Achievement Header Info|bytes]]&amp;gt;&lt;br /&gt;
| [[#Achievement Header Info|Achievement header info]]. Variable length. See the section for more information.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#array|array]]&amp;lt;[[#Achievement Content Info|bytes]]&amp;gt;&lt;br /&gt;
| [[#Achievement Content Info|Achievement content info]]. Variable length. See the section for more information.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]][*]&lt;br /&gt;
| Currently tracked achievements, given as a series of [[Data_Types#short|shorts]] up until the end of the file, with each representing the index number of an achievement. The order of achievements in this series matches the order of which the player has them tracked in game.&lt;br /&gt;
|}&lt;br /&gt;
This format has been valid since at least version 0.14.x.&lt;br /&gt;
&lt;br /&gt;
== Achievement Header Info ==&lt;br /&gt;
&lt;br /&gt;
The header contains information about what type of data fields each achievement has.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#string|string]]&lt;br /&gt;
| Achievement type. This determines what kind of data fields this achievement contains in the content array.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#string|string]]&lt;br /&gt;
| Achievement string id - the one used internally by Factorio.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]]&lt;br /&gt;
| Achievement index number. This number is used to map achievements between this header info array, the content info array, and the tracked achievements list in this file. These index numbers are non-normative, so they won&#039;t always match up with the same achievement.&amp;lt;br&amp;gt; Note: the mapping of index numbers to achievement ids are continuous, but start at index 1 (there is no index 0).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Achievement Content Info ==&lt;br /&gt;
&lt;br /&gt;
This contains the actual data of each achievement. It&#039;s important to note that not every achievement listed in the header has a matching content section here.&lt;br /&gt;
&lt;br /&gt;
Also note that this array always ends with an index number of 0. When reading, either ignore this, or manually add in a blank achievement into your meta table at index zero with no fields.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]]&lt;br /&gt;
| Achievement index number. This matches up with the index number in the [[#Achievement Header Info|Achievement header info]].&lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| The achievement&#039;s progress information. The structure and length of this is determined by the [[#Achievement Types|achievement&#039;s type]]. See the table below for a list of achievement types.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Achievement Types ==&lt;br /&gt;
&lt;br /&gt;
If new achievement types are added in the future, the achievement files will be unparse-able. Please add any new types you find here, thanks!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Achievement&amp;lt;br&amp;gt;Type !! Data&amp;lt;br&amp;gt;Fields(s) !! Field(s) Description&lt;br /&gt;
|-&lt;br /&gt;
| build-entity-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| combat-robot-count&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#int|int]]&lt;br /&gt;
|&lt;br /&gt;
* The greatest number of combat robots you&#039;ve had following you.&lt;br /&gt;
|-&lt;br /&gt;
| construct-with-robots-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#int|int]]&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Total number of objects constructed using robots.&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| deconstruct-with-robots-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#int|int]]&lt;br /&gt;
|&lt;br /&gt;
* Total number of objects deconstructed using robots.&lt;br /&gt;
|-&lt;br /&gt;
| deliver-by-robots-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[8]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 8 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| dont-use-entity-in-energy-production-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* Maximum number of Joules produced per hour, only including power produced from entities listed under &amp;quot;included&amp;quot;, and excluding those listed under &amp;quot;excluded&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| group-attack-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| kill-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The greatest number of an entity killed (e.g. trees, spawners).&lt;br /&gt;
|-&lt;br /&gt;
| player-damaged-achievement&lt;br /&gt;
| &lt;br /&gt;
* [[Data_Types#float|float]]&lt;br /&gt;
* [[Data_Types#bool|bool]]&lt;br /&gt;
|&lt;br /&gt;
* The maximum amount of damage you&#039;ve taken in a single hit.&lt;br /&gt;
* True if the you survived that hit, False if you died.&lt;br /&gt;
|-&lt;br /&gt;
| produce-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The total number of the item you&#039;ve produced.&lt;br /&gt;
|-&lt;br /&gt;
| produce-per-hour-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The maximum amount of the item produced per hour.&lt;br /&gt;
|-&lt;br /&gt;
| research-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| train-path-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The longest path (in tiles) planned by a train.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;combat-robot-count&amp;quot; is currently the only achievement type that doesn&#039;t end in &amp;quot;-achievement&amp;quot;. This is not an error.&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Achievement_file_format&amp;diff=143762</id>
		<title>Achievement file format</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Achievement_file_format&amp;diff=143762"/>
		<updated>2017-08-12T03:41:44Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* File Format */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}} [[Category:Technical]]&lt;br /&gt;
This is a technical description of the achievement file format, used by Factorio to store player&#039;s achievement progress in the files &amp;quot;achievements.dat&amp;quot; and &amp;quot;achievements-modded.dat&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Yes - this information can be used to &amp;quot;cheat&amp;quot; Factorio by simply writing to the achievement file(s) in such a way as if you had met all the achievement requirements, open up Factorio, and then suddenly have all achievements unlocked. If you&#039;ve played Factorio at all you should know that this point is moot. The goal of this document is to share how to _read_ the achievement file(s) - so that third party applications can do do things with that information. Enjoy.&lt;br /&gt;
&lt;br /&gt;
See the page on [[Data_Types|data types]] for an explanation of the different types of data used in this document.&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
&lt;br /&gt;
The overall file format is as follows. Note that in this file, [[Data_Types#array|array]] length is stored as a [[Data_Types#short|short]], not an [[Data_Types#int|int]]!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]][4]&lt;br /&gt;
| The [[Version_String_Format|version string]] of Factorio that generated this file.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#array|array]]&amp;lt;[[#Achievement Header Info|bytes]]&amp;gt;&lt;br /&gt;
| [[#Achievement Header Info|Achievement header info]]. Variable length. See the section for more information.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#array|array]]&amp;lt;[[#Achievement Content Info|bytes]]&amp;gt;&lt;br /&gt;
| [[#Achievement Content Info|Achievement content info]]. Variable length. See the section for more information.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]][*]&lt;br /&gt;
| Currently tracked achievements, given as a series of [[Data_Types#short|shorts]] up until the end of the file, with each representing the index number of an achievement. The order of achievements in this series matches the order of which the player has them tracked in game.&lt;br /&gt;
|}&lt;br /&gt;
This format has been valid since at least version 0.14.x.&lt;br /&gt;
&lt;br /&gt;
== Achievement Header Info ==&lt;br /&gt;
&lt;br /&gt;
The header contains information about what type of data fields each achievement has.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#string|string]]&lt;br /&gt;
| Achievement type. This determines what kind of data fields this achievement contains in the content array.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#string|string]]&lt;br /&gt;
| Achievement string id - the one used internally by Factorio.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]]&lt;br /&gt;
| Achievement index number. This number is used to map achievements between this header info array, the content info array, and the tracked achievements list in this file. These index numbers are non-normative, so they won&#039;t always match up with the same achievement.&amp;lt;br&amp;gt; Note: the mapping of index numbers to achievement ids are continuous, but start at index 1 (there is no index 0).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Achievement Content Info ==&lt;br /&gt;
&lt;br /&gt;
This contains the actual data of each achievement. It&#039;s important to note that not every achievement listed in the header has a matching content section here.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]]&lt;br /&gt;
| Achievement index number. This matches up with the index number in the [[#Achievement Header Info|Achievement header info]].&lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| The achievement&#039;s progress information. The structure and length of this is determined by the [[#Achievement Types|achievement&#039;s type]]. See the table below for a list of achievement types.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Achievement Types ==&lt;br /&gt;
&lt;br /&gt;
If new achievement types are added in the future, the achievement files will be unparse-able. Please add any new types you find here, thanks!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Achievement&amp;lt;br&amp;gt;Type !! Data&amp;lt;br&amp;gt;Fields(s) !! Field(s) Description&lt;br /&gt;
|-&lt;br /&gt;
| build-entity-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| combat-robot-count&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#int|int]]&lt;br /&gt;
|&lt;br /&gt;
* The greatest number of combat robots you&#039;ve had following you.&lt;br /&gt;
|-&lt;br /&gt;
| construct-with-robots-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#int|int]]&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Total number of objects constructed using robots.&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| deconstruct-with-robots-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#int|int]]&lt;br /&gt;
|&lt;br /&gt;
* Total number of objects deconstructed using robots.&lt;br /&gt;
|-&lt;br /&gt;
| deliver-by-robots-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[8]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 8 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| dont-use-entity-in-energy-production-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* Maximum number of Joules produced per hour, only including power produced from entities listed under &amp;quot;included&amp;quot;, and excluding those listed under &amp;quot;excluded&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| group-attack-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| kill-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The greatest number of an entity killed (e.g. trees, spawners).&lt;br /&gt;
|-&lt;br /&gt;
| player-damaged-achievement&lt;br /&gt;
| &lt;br /&gt;
* [[Data_Types#float|float]]&lt;br /&gt;
* [[Data_Types#bool|bool]]&lt;br /&gt;
|&lt;br /&gt;
* The maximum amount of damage you&#039;ve taken in a single hit.&lt;br /&gt;
* True if the you survived that hit, False if you died.&lt;br /&gt;
|-&lt;br /&gt;
| produce-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The total number of the item you&#039;ve produced.&lt;br /&gt;
|-&lt;br /&gt;
| produce-per-hour-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The maximum amount of the item produced per hour.&lt;br /&gt;
|-&lt;br /&gt;
| research-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| train-path-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The longest path (in tiles) planned by a train.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;combat-robot-count&amp;quot; is currently the only achievement type that doesn&#039;t end in &amp;quot;-achievement&amp;quot;. This is not an error.&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Achievement_file_format&amp;diff=143761</id>
		<title>Achievement file format</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Achievement_file_format&amp;diff=143761"/>
		<updated>2017-08-12T03:05:37Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* Achievement Types */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}} [[Category:Technical]]&lt;br /&gt;
This is a technical description of the achievement file format, used by Factorio to store player&#039;s achievement progress in the files &amp;quot;achievements.dat&amp;quot; and &amp;quot;achievements-modded.dat&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Yes - this information can be used to &amp;quot;cheat&amp;quot; Factorio by simply writing to the achievement file(s) in such a way as if you had met all the achievement requirements, open up Factorio, and then suddenly have all achievements unlocked. If you&#039;ve played Factorio at all you should know that this point is moot. The goal of this document is to share how to _read_ the achievement file(s) - so that third party applications can do do things with that information. Enjoy.&lt;br /&gt;
&lt;br /&gt;
See the page on [[Data_Types|data types]] for an explanation of the different types of data used in this document.&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
&lt;br /&gt;
The overall file format is as follows. Note that in this file, [[Data_Types#array|array]] length is stored as a [[Data_Types#short|short]], not an [[Data_Types#int|int]]!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]][4]&lt;br /&gt;
| The [[Version_String_Format|version string]] of Factorio that generated this file.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#array|array]]&amp;lt;[[#Achievement Header Info|bytes]]&amp;gt;&lt;br /&gt;
| [[#Achievement Header Info|Achievement header info]]. Variable length. See the section for more information.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#array|array]]&amp;lt;[[#Achievement Content Info|bytes]]&amp;gt;&lt;br /&gt;
| [[#Achievement Content Info|Achievement content info]]. Variable length. See the section for more information.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]]&lt;br /&gt;
| Unknown. Always seems to equal zero. Perhaps padding?&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]][*]&lt;br /&gt;
| Currently tracked achievements, given as a series of [[Data_Types#short|shorts]] up until the end of the file, with each representing the index number of an achievement. The order of achievements in this series matches the order of which the player has them tracked in game.&lt;br /&gt;
|}&lt;br /&gt;
This format has been valid since at least version 0.14.x.&lt;br /&gt;
&lt;br /&gt;
== Achievement Header Info ==&lt;br /&gt;
&lt;br /&gt;
The header contains information about what type of data fields each achievement has.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#string|string]]&lt;br /&gt;
| Achievement type. This determines what kind of data fields this achievement contains in the content array.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#string|string]]&lt;br /&gt;
| Achievement string id - the one used internally by Factorio.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]]&lt;br /&gt;
| Achievement index number. This number is used to map achievements between this header info array, the content info array, and the tracked achievements list in this file. These index numbers are non-normative, so they won&#039;t always match up with the same achievement.&amp;lt;br&amp;gt; Note: the mapping of index numbers to achievement ids are continuous, but start at index 1 (there is no index 0).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Achievement Content Info ==&lt;br /&gt;
&lt;br /&gt;
This contains the actual data of each achievement. It&#039;s important to note that not every achievement listed in the header has a matching content section here.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]]&lt;br /&gt;
| Achievement index number. This matches up with the index number in the [[#Achievement Header Info|Achievement header info]].&lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| The achievement&#039;s progress information. The structure and length of this is determined by the [[#Achievement Types|achievement&#039;s type]]. See the table below for a list of achievement types.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Achievement Types ==&lt;br /&gt;
&lt;br /&gt;
If new achievement types are added in the future, the achievement files will be unparse-able. Please add any new types you find here, thanks!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Achievement&amp;lt;br&amp;gt;Type !! Data&amp;lt;br&amp;gt;Fields(s) !! Field(s) Description&lt;br /&gt;
|-&lt;br /&gt;
| build-entity-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| combat-robot-count&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#int|int]]&lt;br /&gt;
|&lt;br /&gt;
* The greatest number of combat robots you&#039;ve had following you.&lt;br /&gt;
|-&lt;br /&gt;
| construct-with-robots-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#int|int]]&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Total number of objects constructed using robots.&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| deconstruct-with-robots-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#int|int]]&lt;br /&gt;
|&lt;br /&gt;
* Total number of objects deconstructed using robots.&lt;br /&gt;
|-&lt;br /&gt;
| deliver-by-robots-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[8]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 8 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| dont-use-entity-in-energy-production-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* Maximum number of Joules produced per hour, only including power produced from entities listed under &amp;quot;included&amp;quot;, and excluding those listed under &amp;quot;excluded&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| group-attack-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| kill-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The greatest number of an entity killed (e.g. trees, spawners).&lt;br /&gt;
|-&lt;br /&gt;
| player-damaged-achievement&lt;br /&gt;
| &lt;br /&gt;
* [[Data_Types#float|float]]&lt;br /&gt;
* [[Data_Types#bool|bool]]&lt;br /&gt;
|&lt;br /&gt;
* The maximum amount of damage you&#039;ve taken in a single hit.&lt;br /&gt;
* True if the you survived that hit, False if you died.&lt;br /&gt;
|-&lt;br /&gt;
| produce-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The total number of the item you&#039;ve produced.&lt;br /&gt;
|-&lt;br /&gt;
| produce-per-hour-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The maximum amount of the item produced per hour.&lt;br /&gt;
|-&lt;br /&gt;
| research-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| train-path-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The longest path (in tiles) planned by a train.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;combat-robot-count&amp;quot; is currently the only achievement type that doesn&#039;t end in &amp;quot;-achievement&amp;quot;. This is not an error.&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Achievement_file_format&amp;diff=143760</id>
		<title>Achievement file format</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Achievement_file_format&amp;diff=143760"/>
		<updated>2017-08-12T02:59:43Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* Achievement Types */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}} [[Category:Technical]]&lt;br /&gt;
This is a technical description of the achievement file format, used by Factorio to store player&#039;s achievement progress in the files &amp;quot;achievements.dat&amp;quot; and &amp;quot;achievements-modded.dat&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Yes - this information can be used to &amp;quot;cheat&amp;quot; Factorio by simply writing to the achievement file(s) in such a way as if you had met all the achievement requirements, open up Factorio, and then suddenly have all achievements unlocked. If you&#039;ve played Factorio at all you should know that this point is moot. The goal of this document is to share how to _read_ the achievement file(s) - so that third party applications can do do things with that information. Enjoy.&lt;br /&gt;
&lt;br /&gt;
See the page on [[Data_Types|data types]] for an explanation of the different types of data used in this document.&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
&lt;br /&gt;
The overall file format is as follows. Note that in this file, [[Data_Types#array|array]] length is stored as a [[Data_Types#short|short]], not an [[Data_Types#int|int]]!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]][4]&lt;br /&gt;
| The [[Version_String_Format|version string]] of Factorio that generated this file.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#array|array]]&amp;lt;[[#Achievement Header Info|bytes]]&amp;gt;&lt;br /&gt;
| [[#Achievement Header Info|Achievement header info]]. Variable length. See the section for more information.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#array|array]]&amp;lt;[[#Achievement Content Info|bytes]]&amp;gt;&lt;br /&gt;
| [[#Achievement Content Info|Achievement content info]]. Variable length. See the section for more information.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]]&lt;br /&gt;
| Unknown. Always seems to equal zero. Perhaps padding?&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]][*]&lt;br /&gt;
| Currently tracked achievements, given as a series of [[Data_Types#short|shorts]] up until the end of the file, with each representing the index number of an achievement. The order of achievements in this series matches the order of which the player has them tracked in game.&lt;br /&gt;
|}&lt;br /&gt;
This format has been valid since at least version 0.14.x.&lt;br /&gt;
&lt;br /&gt;
== Achievement Header Info ==&lt;br /&gt;
&lt;br /&gt;
The header contains information about what type of data fields each achievement has.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#string|string]]&lt;br /&gt;
| Achievement type. This determines what kind of data fields this achievement contains in the content array.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#string|string]]&lt;br /&gt;
| Achievement string id - the one used internally by Factorio.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]]&lt;br /&gt;
| Achievement index number. This number is used to map achievements between this header info array, the content info array, and the tracked achievements list in this file. These index numbers are non-normative, so they won&#039;t always match up with the same achievement.&amp;lt;br&amp;gt; Note: the mapping of index numbers to achievement ids are continuous, but start at index 1 (there is no index 0).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Achievement Content Info ==&lt;br /&gt;
&lt;br /&gt;
This contains the actual data of each achievement. It&#039;s important to note that not every achievement listed in the header has a matching content section here.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]]&lt;br /&gt;
| Achievement index number. This matches up with the index number in the [[#Achievement Header Info|Achievement header info]].&lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| The achievement&#039;s progress information. The structure and length of this is determined by the [[#Achievement Types|achievement&#039;s type]]. See the table below for a list of achievement types.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Achievement Types ==&lt;br /&gt;
&lt;br /&gt;
If new achievement types are added in the future, the achievement files will be unparse-able. Please add any new types you find here, thanks!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Achievement&amp;lt;br&amp;gt;Type !! Data&amp;lt;br&amp;gt;Fields(s) !! Field(s) Description&lt;br /&gt;
|-&lt;br /&gt;
| build-entity-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| combat-robot-count&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#int|int]]&lt;br /&gt;
|&lt;br /&gt;
* The greatest number of combat robots you&#039;ve had following you.&lt;br /&gt;
|-&lt;br /&gt;
| construct-with-robots-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#int|int]]&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Total number of objects constructed using robots.&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| deconstruct-with-robots-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#int|int]]&lt;br /&gt;
|&lt;br /&gt;
* Total number of objects deconstructed using robots.&lt;br /&gt;
|-&lt;br /&gt;
| deliver-by-robots-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[8]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 8 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| dont-use-entity-in-energy-production-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[8]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 8 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| group-attack-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| kill-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The greatest number of an entity killed (e.g. trees, spawners).&lt;br /&gt;
|-&lt;br /&gt;
| player-damaged-achievement&lt;br /&gt;
| &lt;br /&gt;
* [[Data_Types#float|float]]&lt;br /&gt;
* [[Data_Types#bool|bool]]&lt;br /&gt;
|&lt;br /&gt;
* The maximum amount of damage you&#039;ve taken in a single hit.&lt;br /&gt;
* True if the you survived that hit, False if you died.&lt;br /&gt;
|-&lt;br /&gt;
| produce-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The total number of the item you&#039;ve produced.&lt;br /&gt;
|-&lt;br /&gt;
| produce-per-hour-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The maximum amount of the item produced per hour.&lt;br /&gt;
|-&lt;br /&gt;
| research-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| train-path-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The longest path (in tiles) planned by a train.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;combat-robot-count&amp;quot; is currently the only achievement type that doesn&#039;t end in &amp;quot;-achievement&amp;quot;. This is not an error.&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Achievement_file_format&amp;diff=143759</id>
		<title>Achievement file format</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Achievement_file_format&amp;diff=143759"/>
		<updated>2017-08-12T02:56:46Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* Achievement Types */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}} [[Category:Technical]]&lt;br /&gt;
This is a technical description of the achievement file format, used by Factorio to store player&#039;s achievement progress in the files &amp;quot;achievements.dat&amp;quot; and &amp;quot;achievements-modded.dat&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Yes - this information can be used to &amp;quot;cheat&amp;quot; Factorio by simply writing to the achievement file(s) in such a way as if you had met all the achievement requirements, open up Factorio, and then suddenly have all achievements unlocked. If you&#039;ve played Factorio at all you should know that this point is moot. The goal of this document is to share how to _read_ the achievement file(s) - so that third party applications can do do things with that information. Enjoy.&lt;br /&gt;
&lt;br /&gt;
See the page on [[Data_Types|data types]] for an explanation of the different types of data used in this document.&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
&lt;br /&gt;
The overall file format is as follows. Note that in this file, [[Data_Types#array|array]] length is stored as a [[Data_Types#short|short]], not an [[Data_Types#int|int]]!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]][4]&lt;br /&gt;
| The [[Version_String_Format|version string]] of Factorio that generated this file.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#array|array]]&amp;lt;[[#Achievement Header Info|bytes]]&amp;gt;&lt;br /&gt;
| [[#Achievement Header Info|Achievement header info]]. Variable length. See the section for more information.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#array|array]]&amp;lt;[[#Achievement Content Info|bytes]]&amp;gt;&lt;br /&gt;
| [[#Achievement Content Info|Achievement content info]]. Variable length. See the section for more information.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]]&lt;br /&gt;
| Unknown. Always seems to equal zero. Perhaps padding?&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]][*]&lt;br /&gt;
| Currently tracked achievements, given as a series of [[Data_Types#short|shorts]] up until the end of the file, with each representing the index number of an achievement. The order of achievements in this series matches the order of which the player has them tracked in game.&lt;br /&gt;
|}&lt;br /&gt;
This format has been valid since at least version 0.14.x.&lt;br /&gt;
&lt;br /&gt;
== Achievement Header Info ==&lt;br /&gt;
&lt;br /&gt;
The header contains information about what type of data fields each achievement has.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#string|string]]&lt;br /&gt;
| Achievement type. This determines what kind of data fields this achievement contains in the content array.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#string|string]]&lt;br /&gt;
| Achievement string id - the one used internally by Factorio.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]]&lt;br /&gt;
| Achievement index number. This number is used to map achievements between this header info array, the content info array, and the tracked achievements list in this file. These index numbers are non-normative, so they won&#039;t always match up with the same achievement.&amp;lt;br&amp;gt; Note: the mapping of index numbers to achievement ids are continuous, but start at index 1 (there is no index 0).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Achievement Content Info ==&lt;br /&gt;
&lt;br /&gt;
This contains the actual data of each achievement. It&#039;s important to note that not every achievement listed in the header has a matching content section here.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]]&lt;br /&gt;
| Achievement index number. This matches up with the index number in the [[#Achievement Header Info|Achievement header info]].&lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| The achievement&#039;s progress information. The structure and length of this is determined by the [[#Achievement Types|achievement&#039;s type]]. See the table below for a list of achievement types.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Achievement Types ==&lt;br /&gt;
&lt;br /&gt;
If new achievement types are added in the future, the achievement files will be unparse-able. Please add any new types you find here, thanks!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Achievement&amp;lt;br&amp;gt;Type !! Data&amp;lt;br&amp;gt;Fields(s) !! Field(s) Description&lt;br /&gt;
|-&lt;br /&gt;
| build-entity-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| combat-robot-count&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#int|int]]&lt;br /&gt;
|&lt;br /&gt;
* The greatest number of combat robots you&#039;ve had following you.&lt;br /&gt;
|-&lt;br /&gt;
| construct-with-robots-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[8]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 8 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| deconstruct-with-robots-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#int|int]]&lt;br /&gt;
|&lt;br /&gt;
* Total number of objects deconstructed using robots.&lt;br /&gt;
|-&lt;br /&gt;
| deliver-by-robots-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[8]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 8 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| dont-use-entity-in-energy-production-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[8]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 8 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| group-attack-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| kill-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The greatest number of an entity killed (e.g. trees, spawners).&lt;br /&gt;
|-&lt;br /&gt;
| player-damaged-achievement&lt;br /&gt;
| &lt;br /&gt;
* [[Data_Types#float|float]]&lt;br /&gt;
* [[Data_Types#bool|bool]]&lt;br /&gt;
|&lt;br /&gt;
* The maximum amount of damage you&#039;ve taken in a single hit.&lt;br /&gt;
* True if the you survived that hit, False if you died.&lt;br /&gt;
|-&lt;br /&gt;
| produce-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The total number of the item you&#039;ve produced.&lt;br /&gt;
|-&lt;br /&gt;
| produce-per-hour-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The maximum amount of the item produced per hour.&lt;br /&gt;
|-&lt;br /&gt;
| research-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| train-path-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The longest path (in tiles) planned by a train.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;combat-robot-count&amp;quot; is currently the only achievement type that doesn&#039;t end in &amp;quot;-achievement&amp;quot;. This is not an error.&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Achievement_file_format&amp;diff=143758</id>
		<title>Achievement file format</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Achievement_file_format&amp;diff=143758"/>
		<updated>2017-08-12T02:54:29Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* Achievement Types */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}} [[Category:Technical]]&lt;br /&gt;
This is a technical description of the achievement file format, used by Factorio to store player&#039;s achievement progress in the files &amp;quot;achievements.dat&amp;quot; and &amp;quot;achievements-modded.dat&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Yes - this information can be used to &amp;quot;cheat&amp;quot; Factorio by simply writing to the achievement file(s) in such a way as if you had met all the achievement requirements, open up Factorio, and then suddenly have all achievements unlocked. If you&#039;ve played Factorio at all you should know that this point is moot. The goal of this document is to share how to _read_ the achievement file(s) - so that third party applications can do do things with that information. Enjoy.&lt;br /&gt;
&lt;br /&gt;
See the page on [[Data_Types|data types]] for an explanation of the different types of data used in this document.&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
&lt;br /&gt;
The overall file format is as follows. Note that in this file, [[Data_Types#array|array]] length is stored as a [[Data_Types#short|short]], not an [[Data_Types#int|int]]!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]][4]&lt;br /&gt;
| The [[Version_String_Format|version string]] of Factorio that generated this file.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#array|array]]&amp;lt;[[#Achievement Header Info|bytes]]&amp;gt;&lt;br /&gt;
| [[#Achievement Header Info|Achievement header info]]. Variable length. See the section for more information.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#array|array]]&amp;lt;[[#Achievement Content Info|bytes]]&amp;gt;&lt;br /&gt;
| [[#Achievement Content Info|Achievement content info]]. Variable length. See the section for more information.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]]&lt;br /&gt;
| Unknown. Always seems to equal zero. Perhaps padding?&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]][*]&lt;br /&gt;
| Currently tracked achievements, given as a series of [[Data_Types#short|shorts]] up until the end of the file, with each representing the index number of an achievement. The order of achievements in this series matches the order of which the player has them tracked in game.&lt;br /&gt;
|}&lt;br /&gt;
This format has been valid since at least version 0.14.x.&lt;br /&gt;
&lt;br /&gt;
== Achievement Header Info ==&lt;br /&gt;
&lt;br /&gt;
The header contains information about what type of data fields each achievement has.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#string|string]]&lt;br /&gt;
| Achievement type. This determines what kind of data fields this achievement contains in the content array.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#string|string]]&lt;br /&gt;
| Achievement string id - the one used internally by Factorio.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]]&lt;br /&gt;
| Achievement index number. This number is used to map achievements between this header info array, the content info array, and the tracked achievements list in this file. These index numbers are non-normative, so they won&#039;t always match up with the same achievement.&amp;lt;br&amp;gt; Note: the mapping of index numbers to achievement ids are continuous, but start at index 1 (there is no index 0).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Achievement Content Info ==&lt;br /&gt;
&lt;br /&gt;
This contains the actual data of each achievement. It&#039;s important to note that not every achievement listed in the header has a matching content section here.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]]&lt;br /&gt;
| Achievement index number. This matches up with the index number in the [[#Achievement Header Info|Achievement header info]].&lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| The achievement&#039;s progress information. The structure and length of this is determined by the [[#Achievement Types|achievement&#039;s type]]. See the table below for a list of achievement types.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Achievement Types ==&lt;br /&gt;
&lt;br /&gt;
If new achievement types are added in the future, the achievement files will be unparse-able. Please add any new types you find here, thanks!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Achievement&amp;lt;br&amp;gt;Type !! Data&amp;lt;br&amp;gt;Fields(s) !! Field(s) Description&lt;br /&gt;
|-&lt;br /&gt;
| build-entity-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| combat-robot-count&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#int|int]]&lt;br /&gt;
|&lt;br /&gt;
* The greatest number of combat robots you&#039;ve had following you.&lt;br /&gt;
|-&lt;br /&gt;
| construct-with-robots-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[8]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 8 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| deconstruct-with-robots-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| deliver-by-robots-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[8]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 8 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| dont-use-entity-in-energy-production-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[8]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 8 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| group-attack-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| kill-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The greatest number of an entity killed (e.g. trees, spawners).&lt;br /&gt;
|-&lt;br /&gt;
| player-damaged-achievement&lt;br /&gt;
| &lt;br /&gt;
* [[Data_Types#float|float]]&lt;br /&gt;
* [[Data_Types#bool|bool]]&lt;br /&gt;
|&lt;br /&gt;
* The maximum amount of damage you&#039;ve taken in a single hit.&lt;br /&gt;
* True if the you survived that hit, False if you died.&lt;br /&gt;
|-&lt;br /&gt;
| produce-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The total number of the item you&#039;ve produced.&lt;br /&gt;
|-&lt;br /&gt;
| produce-per-hour-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The maximum amount of the item produced per hour.&lt;br /&gt;
|-&lt;br /&gt;
| research-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| train-path-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The longest path (in tiles) planned by a train.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;combat-robot-count&amp;quot; is currently the only achievement type that doesn&#039;t end in &amp;quot;-achievement&amp;quot;. This is not an error.&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Achievement_file_format&amp;diff=143757</id>
		<title>Achievement file format</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Achievement_file_format&amp;diff=143757"/>
		<updated>2017-08-12T02:51:30Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* Achievement Types */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}} [[Category:Technical]]&lt;br /&gt;
This is a technical description of the achievement file format, used by Factorio to store player&#039;s achievement progress in the files &amp;quot;achievements.dat&amp;quot; and &amp;quot;achievements-modded.dat&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Yes - this information can be used to &amp;quot;cheat&amp;quot; Factorio by simply writing to the achievement file(s) in such a way as if you had met all the achievement requirements, open up Factorio, and then suddenly have all achievements unlocked. If you&#039;ve played Factorio at all you should know that this point is moot. The goal of this document is to share how to _read_ the achievement file(s) - so that third party applications can do do things with that information. Enjoy.&lt;br /&gt;
&lt;br /&gt;
See the page on [[Data_Types|data types]] for an explanation of the different types of data used in this document.&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
&lt;br /&gt;
The overall file format is as follows. Note that in this file, [[Data_Types#array|array]] length is stored as a [[Data_Types#short|short]], not an [[Data_Types#int|int]]!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]][4]&lt;br /&gt;
| The [[Version_String_Format|version string]] of Factorio that generated this file.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#array|array]]&amp;lt;[[#Achievement Header Info|bytes]]&amp;gt;&lt;br /&gt;
| [[#Achievement Header Info|Achievement header info]]. Variable length. See the section for more information.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#array|array]]&amp;lt;[[#Achievement Content Info|bytes]]&amp;gt;&lt;br /&gt;
| [[#Achievement Content Info|Achievement content info]]. Variable length. See the section for more information.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]]&lt;br /&gt;
| Unknown. Always seems to equal zero. Perhaps padding?&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]][*]&lt;br /&gt;
| Currently tracked achievements, given as a series of [[Data_Types#short|shorts]] up until the end of the file, with each representing the index number of an achievement. The order of achievements in this series matches the order of which the player has them tracked in game.&lt;br /&gt;
|}&lt;br /&gt;
This format has been valid since at least version 0.14.x.&lt;br /&gt;
&lt;br /&gt;
== Achievement Header Info ==&lt;br /&gt;
&lt;br /&gt;
The header contains information about what type of data fields each achievement has.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#string|string]]&lt;br /&gt;
| Achievement type. This determines what kind of data fields this achievement contains in the content array.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#string|string]]&lt;br /&gt;
| Achievement string id - the one used internally by Factorio.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]]&lt;br /&gt;
| Achievement index number. This number is used to map achievements between this header info array, the content info array, and the tracked achievements list in this file. These index numbers are non-normative, so they won&#039;t always match up with the same achievement.&amp;lt;br&amp;gt; Note: the mapping of index numbers to achievement ids are continuous, but start at index 1 (there is no index 0).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Achievement Content Info ==&lt;br /&gt;
&lt;br /&gt;
This contains the actual data of each achievement. It&#039;s important to note that not every achievement listed in the header has a matching content section here.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]]&lt;br /&gt;
| Achievement index number. This matches up with the index number in the [[#Achievement Header Info|Achievement header info]].&lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| The achievement&#039;s progress information. The structure and length of this is determined by the [[#Achievement Types|achievement&#039;s type]]. See the table below for a list of achievement types.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Achievement Types ==&lt;br /&gt;
&lt;br /&gt;
If new achievement types are added in the future, the achievement files will be unparse-able. Please add any new types you find here, thanks!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Achievement&amp;lt;br&amp;gt;Type !! Data&amp;lt;br&amp;gt;Fields(s) !! Field(s) Description&lt;br /&gt;
|-&lt;br /&gt;
| build-entity-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| combat-robot-count&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#int|int]]&lt;br /&gt;
|&lt;br /&gt;
* The greatest number of combat robots you&#039;ve had following you.&lt;br /&gt;
|-&lt;br /&gt;
| construct-with-robots-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[8]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 8 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| deconstruct-with-robots-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| deliver-by-robots-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[8]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 8 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| dont-use-entity-in-energy-production-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[8]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 8 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| group-attack-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| kill-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The greatest number of an entity killed (e.g. trees, spawners).&lt;br /&gt;
|-&lt;br /&gt;
| player-damaged-achievement&lt;br /&gt;
| &lt;br /&gt;
* [[Data_Types#float|float]]&lt;br /&gt;
* [[Data_Types#bool|bool]]&lt;br /&gt;
|&lt;br /&gt;
* The Maximum amount of damage a player has taken in a single hit.&lt;br /&gt;
* True if the player survived that hit, False if they died.&lt;br /&gt;
|-&lt;br /&gt;
| produce-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The total number of the item you&#039;ve produced.&lt;br /&gt;
|-&lt;br /&gt;
| produce-per-hour-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The maximum amount of the item produced per hour.&lt;br /&gt;
|-&lt;br /&gt;
| research-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| train-path-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The longest path (in tiles) planned by a train.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;combat-robot-count&amp;quot; is currently the only achievement type that doesn&#039;t end in &amp;quot;-achievement&amp;quot;. This is not an error.&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Achievement_file_format&amp;diff=143756</id>
		<title>Achievement file format</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Achievement_file_format&amp;diff=143756"/>
		<updated>2017-08-12T02:47:55Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* Achievement Types */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}} [[Category:Technical]]&lt;br /&gt;
This is a technical description of the achievement file format, used by Factorio to store player&#039;s achievement progress in the files &amp;quot;achievements.dat&amp;quot; and &amp;quot;achievements-modded.dat&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Yes - this information can be used to &amp;quot;cheat&amp;quot; Factorio by simply writing to the achievement file(s) in such a way as if you had met all the achievement requirements, open up Factorio, and then suddenly have all achievements unlocked. If you&#039;ve played Factorio at all you should know that this point is moot. The goal of this document is to share how to _read_ the achievement file(s) - so that third party applications can do do things with that information. Enjoy.&lt;br /&gt;
&lt;br /&gt;
See the page on [[Data_Types|data types]] for an explanation of the different types of data used in this document.&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
&lt;br /&gt;
The overall file format is as follows. Note that in this file, [[Data_Types#array|array]] length is stored as a [[Data_Types#short|short]], not an [[Data_Types#int|int]]!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]][4]&lt;br /&gt;
| The [[Version_String_Format|version string]] of Factorio that generated this file.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#array|array]]&amp;lt;[[#Achievement Header Info|bytes]]&amp;gt;&lt;br /&gt;
| [[#Achievement Header Info|Achievement header info]]. Variable length. See the section for more information.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#array|array]]&amp;lt;[[#Achievement Content Info|bytes]]&amp;gt;&lt;br /&gt;
| [[#Achievement Content Info|Achievement content info]]. Variable length. See the section for more information.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]]&lt;br /&gt;
| Unknown. Always seems to equal zero. Perhaps padding?&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]][*]&lt;br /&gt;
| Currently tracked achievements, given as a series of [[Data_Types#short|shorts]] up until the end of the file, with each representing the index number of an achievement. The order of achievements in this series matches the order of which the player has them tracked in game.&lt;br /&gt;
|}&lt;br /&gt;
This format has been valid since at least version 0.14.x.&lt;br /&gt;
&lt;br /&gt;
== Achievement Header Info ==&lt;br /&gt;
&lt;br /&gt;
The header contains information about what type of data fields each achievement has.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#string|string]]&lt;br /&gt;
| Achievement type. This determines what kind of data fields this achievement contains in the content array.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#string|string]]&lt;br /&gt;
| Achievement string id - the one used internally by Factorio.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]]&lt;br /&gt;
| Achievement index number. This number is used to map achievements between this header info array, the content info array, and the tracked achievements list in this file. These index numbers are non-normative, so they won&#039;t always match up with the same achievement.&amp;lt;br&amp;gt; Note: the mapping of index numbers to achievement ids are continuous, but start at index 1 (there is no index 0).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Achievement Content Info ==&lt;br /&gt;
&lt;br /&gt;
This contains the actual data of each achievement. It&#039;s important to note that not every achievement listed in the header has a matching content section here.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]]&lt;br /&gt;
| Achievement index number. This matches up with the index number in the [[#Achievement Header Info|Achievement header info]].&lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| The achievement&#039;s progress information. The structure and length of this is determined by the [[#Achievement Types|achievement&#039;s type]]. See the table below for a list of achievement types.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Achievement Types ==&lt;br /&gt;
&lt;br /&gt;
If new achievement types are added in the future, the achievement files will be unparse-able. Please add any new types you find here, thanks!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Achievement&amp;lt;br&amp;gt;Type !! Data&amp;lt;br&amp;gt;Fields(s) !! Field(s) Description&lt;br /&gt;
|-&lt;br /&gt;
| build-entity-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| combat-robot-count&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#int|int]]&lt;br /&gt;
|&lt;br /&gt;
* The greatest number of combat robots you&#039;ve had following you.&lt;br /&gt;
|-&lt;br /&gt;
| construct-with-robots-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[8]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 8 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| deconstruct-with-robots-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| deliver-by-robots-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[8]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 8 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| dont-use-entity-in-energy-production-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[8]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 8 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| group-attack-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| kill-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The greatest number of an entity killed (e.g. trees, spawners).&lt;br /&gt;
|-&lt;br /&gt;
| player-damaged-achievement&lt;br /&gt;
| &lt;br /&gt;
* [[Data_Types#float|float]]&lt;br /&gt;
* [[Data_Types#bool|bool]]&lt;br /&gt;
|&lt;br /&gt;
* The Maximum amount of damage a player has taken in a single hit.&lt;br /&gt;
* True if the player survived that hit, False if they died.&lt;br /&gt;
|-&lt;br /&gt;
| produce-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[8]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 8 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| produce-per-hour-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The maximum amount of the item produced per hour.&lt;br /&gt;
|-&lt;br /&gt;
| research-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| train-path-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The longest path (in tiles) planned by a train.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;combat-robot-count&amp;quot; is currently the only achievement type that doesn&#039;t end in &amp;quot;-achievement&amp;quot;. This is not an error.&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Achievement_file_format&amp;diff=143755</id>
		<title>Achievement file format</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Achievement_file_format&amp;diff=143755"/>
		<updated>2017-08-12T02:42:03Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* Achievement Types */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}} [[Category:Technical]]&lt;br /&gt;
This is a technical description of the achievement file format, used by Factorio to store player&#039;s achievement progress in the files &amp;quot;achievements.dat&amp;quot; and &amp;quot;achievements-modded.dat&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Yes - this information can be used to &amp;quot;cheat&amp;quot; Factorio by simply writing to the achievement file(s) in such a way as if you had met all the achievement requirements, open up Factorio, and then suddenly have all achievements unlocked. If you&#039;ve played Factorio at all you should know that this point is moot. The goal of this document is to share how to _read_ the achievement file(s) - so that third party applications can do do things with that information. Enjoy.&lt;br /&gt;
&lt;br /&gt;
See the page on [[Data_Types|data types]] for an explanation of the different types of data used in this document.&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
&lt;br /&gt;
The overall file format is as follows. Note that in this file, [[Data_Types#array|array]] length is stored as a [[Data_Types#short|short]], not an [[Data_Types#int|int]]!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]][4]&lt;br /&gt;
| The [[Version_String_Format|version string]] of Factorio that generated this file.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#array|array]]&amp;lt;[[#Achievement Header Info|bytes]]&amp;gt;&lt;br /&gt;
| [[#Achievement Header Info|Achievement header info]]. Variable length. See the section for more information.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#array|array]]&amp;lt;[[#Achievement Content Info|bytes]]&amp;gt;&lt;br /&gt;
| [[#Achievement Content Info|Achievement content info]]. Variable length. See the section for more information.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]]&lt;br /&gt;
| Unknown. Always seems to equal zero. Perhaps padding?&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]][*]&lt;br /&gt;
| Currently tracked achievements, given as a series of [[Data_Types#short|shorts]] up until the end of the file, with each representing the index number of an achievement. The order of achievements in this series matches the order of which the player has them tracked in game.&lt;br /&gt;
|}&lt;br /&gt;
This format has been valid since at least version 0.14.x.&lt;br /&gt;
&lt;br /&gt;
== Achievement Header Info ==&lt;br /&gt;
&lt;br /&gt;
The header contains information about what type of data fields each achievement has.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#string|string]]&lt;br /&gt;
| Achievement type. This determines what kind of data fields this achievement contains in the content array.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#string|string]]&lt;br /&gt;
| Achievement string id - the one used internally by Factorio.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]]&lt;br /&gt;
| Achievement index number. This number is used to map achievements between this header info array, the content info array, and the tracked achievements list in this file. These index numbers are non-normative, so they won&#039;t always match up with the same achievement.&amp;lt;br&amp;gt; Note: the mapping of index numbers to achievement ids are continuous, but start at index 1 (there is no index 0).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Achievement Content Info ==&lt;br /&gt;
&lt;br /&gt;
This contains the actual data of each achievement. It&#039;s important to note that not every achievement listed in the header has a matching content section here.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]]&lt;br /&gt;
| Achievement index number. This matches up with the index number in the [[#Achievement Header Info|Achievement header info]].&lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| The achievement&#039;s progress information. The structure and length of this is determined by the [[#Achievement Types|achievement&#039;s type]]. See the table below for a list of achievement types.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Achievement Types ==&lt;br /&gt;
&lt;br /&gt;
If new achievement types are added in the future, the achievement files will be unparse-able. Please add any new types you find here, thanks!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Achievement&amp;lt;br&amp;gt;Type !! Data&amp;lt;br&amp;gt;Fields(s) !! Field(s) Description&lt;br /&gt;
|-&lt;br /&gt;
| build-entity-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| combat-robot-count&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| construct-with-robots-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[8]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 8 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| deconstruct-with-robots-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| deliver-by-robots-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[8]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 8 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| dont-use-entity-in-energy-production-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[8]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 8 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| group-attack-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| kill-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The greatest number of an entity killed (e.g. trees, spawners).&lt;br /&gt;
|-&lt;br /&gt;
| player-damaged-achievement&lt;br /&gt;
| &lt;br /&gt;
* [[Data_Types#float|float]]&lt;br /&gt;
* [[Data_Types#bool|bool]]&lt;br /&gt;
|&lt;br /&gt;
* The Maximum amount of damage a player has taken in a single hit.&lt;br /&gt;
* True if the player survived that hit, False if they died.&lt;br /&gt;
|-&lt;br /&gt;
| produce-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[8]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 8 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| produce-per-hour-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The maximum amount of the item produced per hour.&lt;br /&gt;
|-&lt;br /&gt;
| research-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| train-path-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The longest path (in tiles) planned by a train.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;combat-robot-count&amp;quot; is currently the only achievement type that doesn&#039;t end in &amp;quot;-achievement&amp;quot;. This is not an error.&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Achievement_file_format&amp;diff=143754</id>
		<title>Achievement file format</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Achievement_file_format&amp;diff=143754"/>
		<updated>2017-08-12T02:37:56Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* Achievement Types */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}} [[Category:Technical]]&lt;br /&gt;
This is a technical description of the achievement file format, used by Factorio to store player&#039;s achievement progress in the files &amp;quot;achievements.dat&amp;quot; and &amp;quot;achievements-modded.dat&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Yes - this information can be used to &amp;quot;cheat&amp;quot; Factorio by simply writing to the achievement file(s) in such a way as if you had met all the achievement requirements, open up Factorio, and then suddenly have all achievements unlocked. If you&#039;ve played Factorio at all you should know that this point is moot. The goal of this document is to share how to _read_ the achievement file(s) - so that third party applications can do do things with that information. Enjoy.&lt;br /&gt;
&lt;br /&gt;
See the page on [[Data_Types|data types]] for an explanation of the different types of data used in this document.&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
&lt;br /&gt;
The overall file format is as follows. Note that in this file, [[Data_Types#array|array]] length is stored as a [[Data_Types#short|short]], not an [[Data_Types#int|int]]!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]][4]&lt;br /&gt;
| The [[Version_String_Format|version string]] of Factorio that generated this file.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#array|array]]&amp;lt;[[#Achievement Header Info|bytes]]&amp;gt;&lt;br /&gt;
| [[#Achievement Header Info|Achievement header info]]. Variable length. See the section for more information.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#array|array]]&amp;lt;[[#Achievement Content Info|bytes]]&amp;gt;&lt;br /&gt;
| [[#Achievement Content Info|Achievement content info]]. Variable length. See the section for more information.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]]&lt;br /&gt;
| Unknown. Always seems to equal zero. Perhaps padding?&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]][*]&lt;br /&gt;
| Currently tracked achievements, given as a series of [[Data_Types#short|shorts]] up until the end of the file, with each representing the index number of an achievement. The order of achievements in this series matches the order of which the player has them tracked in game.&lt;br /&gt;
|}&lt;br /&gt;
This format has been valid since at least version 0.14.x.&lt;br /&gt;
&lt;br /&gt;
== Achievement Header Info ==&lt;br /&gt;
&lt;br /&gt;
The header contains information about what type of data fields each achievement has.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#string|string]]&lt;br /&gt;
| Achievement type. This determines what kind of data fields this achievement contains in the content array.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#string|string]]&lt;br /&gt;
| Achievement string id - the one used internally by Factorio.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]]&lt;br /&gt;
| Achievement index number. This number is used to map achievements between this header info array, the content info array, and the tracked achievements list in this file. These index numbers are non-normative, so they won&#039;t always match up with the same achievement.&amp;lt;br&amp;gt; Note: the mapping of index numbers to achievement ids are continuous, but start at index 1 (there is no index 0).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Achievement Content Info ==&lt;br /&gt;
&lt;br /&gt;
This contains the actual data of each achievement. It&#039;s important to note that not every achievement listed in the header has a matching content section here.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]]&lt;br /&gt;
| Achievement index number. This matches up with the index number in the [[#Achievement Header Info|Achievement header info]].&lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| The achievement&#039;s progress information. The structure and length of this is determined by the [[#Achievement Types|achievement&#039;s type]]. See the table below for a list of achievement types.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Achievement Types ==&lt;br /&gt;
&lt;br /&gt;
If new achievement types are added in the future, the achievement files will be unparse-able. Please add any new types you find here, thanks!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Achievement&amp;lt;br&amp;gt;Type !! Data&amp;lt;br&amp;gt;Fields(s) !! Field(s) Description&lt;br /&gt;
|-&lt;br /&gt;
| build-entity-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| combat-robot-count&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| construct-with-robots-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[8]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 8 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| deconstruct-with-robots-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| deliver-by-robots-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[8]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 8 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| dont-use-entity-in-energy-production-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[8]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 8 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| group-attack-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| kill-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The greatest number of an entity killed (e.g. trees, spawners).&lt;br /&gt;
|-&lt;br /&gt;
| player-damaged-achievement&lt;br /&gt;
| &lt;br /&gt;
* [[Data_Types#float|float]]&lt;br /&gt;
* [[Data_Types#bool|bool]]&lt;br /&gt;
|&lt;br /&gt;
* The Maximum amount of damage a player has taken in a single hit.&lt;br /&gt;
* True if the player survived that hit, False if they died.&lt;br /&gt;
|-&lt;br /&gt;
| produce-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[8]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 8 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| produce-per-hour-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The maximum amount of the item produced per hour.&lt;br /&gt;
|-&lt;br /&gt;
| research-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| train-path-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[8]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 8 bytes long.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;combat-robot-count&amp;quot; is currently the only achievement type that doesn&#039;t end in &amp;quot;-achievement&amp;quot;. This is not an error.&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Achievement_file_format&amp;diff=143753</id>
		<title>Achievement file format</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Achievement_file_format&amp;diff=143753"/>
		<updated>2017-08-12T02:36:40Z</updated>

		<summary type="html">&lt;p&gt;Lexxy Fox: /* Achievement Types */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}} [[Category:Technical]]&lt;br /&gt;
This is a technical description of the achievement file format, used by Factorio to store player&#039;s achievement progress in the files &amp;quot;achievements.dat&amp;quot; and &amp;quot;achievements-modded.dat&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Yes - this information can be used to &amp;quot;cheat&amp;quot; Factorio by simply writing to the achievement file(s) in such a way as if you had met all the achievement requirements, open up Factorio, and then suddenly have all achievements unlocked. If you&#039;ve played Factorio at all you should know that this point is moot. The goal of this document is to share how to _read_ the achievement file(s) - so that third party applications can do do things with that information. Enjoy.&lt;br /&gt;
&lt;br /&gt;
See the page on [[Data_Types|data types]] for an explanation of the different types of data used in this document.&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
&lt;br /&gt;
The overall file format is as follows. Note that in this file, [[Data_Types#array|array]] length is stored as a [[Data_Types#short|short]], not an [[Data_Types#int|int]]!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]][4]&lt;br /&gt;
| The [[Version_String_Format|version string]] of Factorio that generated this file.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#array|array]]&amp;lt;[[#Achievement Header Info|bytes]]&amp;gt;&lt;br /&gt;
| [[#Achievement Header Info|Achievement header info]]. Variable length. See the section for more information.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#array|array]]&amp;lt;[[#Achievement Content Info|bytes]]&amp;gt;&lt;br /&gt;
| [[#Achievement Content Info|Achievement content info]]. Variable length. See the section for more information.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]]&lt;br /&gt;
| Unknown. Always seems to equal zero. Perhaps padding?&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]][*]&lt;br /&gt;
| Currently tracked achievements, given as a series of [[Data_Types#short|shorts]] up until the end of the file, with each representing the index number of an achievement. The order of achievements in this series matches the order of which the player has them tracked in game.&lt;br /&gt;
|}&lt;br /&gt;
This format has been valid since at least version 0.14.x.&lt;br /&gt;
&lt;br /&gt;
== Achievement Header Info ==&lt;br /&gt;
&lt;br /&gt;
The header contains information about what type of data fields each achievement has.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#string|string]]&lt;br /&gt;
| Achievement type. This determines what kind of data fields this achievement contains in the content array.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#string|string]]&lt;br /&gt;
| Achievement string id - the one used internally by Factorio.&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]]&lt;br /&gt;
| Achievement index number. This number is used to map achievements between this header info array, the content info array, and the tracked achievements list in this file. These index numbers are non-normative, so they won&#039;t always match up with the same achievement.&amp;lt;br&amp;gt; Note: the mapping of index numbers to achievement ids are continuous, but start at index 1 (there is no index 0).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Achievement Content Info ==&lt;br /&gt;
&lt;br /&gt;
This contains the actual data of each achievement. It&#039;s important to note that not every achievement listed in the header has a matching content section here.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Data_Types#short|short]]&lt;br /&gt;
| Achievement index number. This matches up with the index number in the [[#Achievement Header Info|Achievement header info]].&lt;br /&gt;
|-&lt;br /&gt;
| byte[*]&lt;br /&gt;
| The achievement&#039;s progress information. The structure and length of this is determined by the [[#Achievement Types|achievement&#039;s type]]. See the table below for a list of achievement types.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Achievement Types ==&lt;br /&gt;
&lt;br /&gt;
If new achievement types are added in the future, the achievement files will be unparse-able. Please add any new types you find here, thanks!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Achievement&amp;lt;br&amp;gt;Type !! Data&amp;lt;br&amp;gt;Fields(s) !! Field(s) Description&lt;br /&gt;
|-&lt;br /&gt;
| build-entity-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| combat-robot-count&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| construct-with-robots-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[8]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 8 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| deconstruct-with-robots-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| deliver-by-robots-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[8]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 8 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| dont-use-entity-in-energy-production-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[8]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 8 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| group-attack-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| kill-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[8]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 8 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| player-damaged-achievement&lt;br /&gt;
| &lt;br /&gt;
* [[Data_Types#float|float]]&lt;br /&gt;
* [[Data_Types#bool|bool]]&lt;br /&gt;
|&lt;br /&gt;
* The Maximum amount of damage a player has taken in a single hit.&lt;br /&gt;
* True if the player survived that hit, False if they died.&lt;br /&gt;
|-&lt;br /&gt;
| produce-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[8]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 8 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| produce-per-hour-achievement&lt;br /&gt;
|&lt;br /&gt;
* [[Data_Types#double|double]]&lt;br /&gt;
|&lt;br /&gt;
* The maximum amount of the item produced per hour.&lt;br /&gt;
|-&lt;br /&gt;
| research-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[4]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 4 bytes long.&lt;br /&gt;
|-&lt;br /&gt;
| train-path-achievement&lt;br /&gt;
|&lt;br /&gt;
* byte[8]&lt;br /&gt;
|&lt;br /&gt;
* Unknown format, 8 bytes long.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;combat-robot-count&amp;quot; is currently the only achievement type that doesn&#039;t end in &amp;quot;-achievement&amp;quot;. This is not an error.&lt;/div&gt;</summary>
		<author><name>Lexxy Fox</name></author>
	</entry>
</feed>