Map exchange string format: Difference between revisions
No edit summary |
No edit summary |
||
Line 3: | Line 3: | ||
This is a technical description of the map exchange string format, used to share map generating configurations with other users. | This is a technical description of the map exchange string format, used to share map generating configurations with other users. | ||
Factorio line wraps the entire map exchange string after 55 characters during export, but ignores all whitespace during import. The outer layer of the map exchange string format includes three angle brackets on either side: ">>>" and "<<<", 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). All numerical values are stored in unsigned [https://en.wikipedia.org/wiki/Endianness#Little-endian little-endian] format. This document will use the terms "int" to refer to 4 byte numbers and "short" to refer to 2 byte numbers. Strings are [https://en.wikipedia.org/wiki/String_(computer_science)#Length-prefixed Pascal-style int length prefixed strings]. The format described below is valid at least for Factorio 0.14.x, other versions may use a different encoding scheme. | Factorio line wraps the entire map exchange string after 55 characters during export, but ignores all whitespace during import. The outer layer of the map exchange string format includes three angle brackets on either side: ">>>" and "<<<", 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). All numerical values are stored in unsigned [https://en.wikipedia.org/wiki/Endianness#Little-endian little-endian] format. | ||
This document will use the terms "int" to refer to 4 byte numbers and "short" to refer to 2 byte numbers. Boolean is a single byte that represents true if equal to 1, otherwise it is equal to false. Strings are [https://en.wikipedia.org/wiki/String_(computer_science)#Length-prefixed Pascal-style int length prefixed strings]. The format described below is valid at least for Factorio 0.14.x, other versions may use a different encoding scheme. | |||
=== Factorio 0.14.x and beyond === | === Factorio 0.14.x and beyond === | ||
Line 45: | Line 47: | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |||
| | |||
|- | |||
| float | |||
| | |||
|} | |} | ||
Revision as of 01:46, 1 May 2017
This is a technical description of the map exchange string format, used to share map generating configurations with other users.
Factorio line wraps the entire map exchange string after 55 characters during export, but ignores all whitespace during import. The outer layer of the map exchange string format includes three angle brackets on either side: ">>>" and "<<<", 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 RFC 4648 (or 3548, 2535, 2045, 1421, et al). All numerical values are stored in unsigned little-endian format.
This document will use the terms "int" to refer to 4 byte numbers and "short" to refer to 2 byte numbers. Boolean is a single byte that represents true if equal to 1, otherwise it is equal to false. Strings are Pascal-style int length prefixed strings. The format described below is valid at least for Factorio 0.14.x, other versions may use a different encoding scheme.
Factorio 0.14.x and beyond
short[4] | The version string of Factorio that generated this string, used to determine encoding format. |
byte | Water frequency. |
byte | Water size. |
ore_def[int] | An array of ore definitions. The array length is stored as an integer prefix. Factorio doesn’t care what order these are in, but it always alphabetizes during export. Vanilla has six ores: coal, copper-ore, crude-oil, enemy-base, iron-ore, and stone. Unknown ores are ignored and missing ores are set to their defaults. |
int | Map seed. |
int | Map width. |
int | Map height. |
byte | Starting area size. |
byte | Peaceful mode. Enabled if set to 1, disabled otherwise. |
byte[*] | 0.15.x map string data, if version >= 0.15 |
int | CRC32 checksum of all preceding data, as defined by ANSI X3.66 / FIPS 71 / ITU-T V.42 (the same one used by zlib, ethernet, etc.) |
0.15 Map Exchange Data
float |
Ore_def Ore Definitions
See the page on world generation for more information on frequency, size, and richness.
string | Ore name. |
byte | Ore frequency. |
byte | Ore size. |
byte | Ore richness. |
Magnitudes (Frequencies / Sizes / Richness)
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. Anything greater than 5 will crash the game!
0 | None / None /None |
1 | Very Low / Small / Poor |
2 | Low / Small / Poor |
3 | Normal / Medium / Regular |
4 | High / Big / Good |
5 | Very High / Big / Good |