Types/AutoplaceSpecification: Difference between revisions
(Created page with "Autoplace specification is used to determine which entities are placed when generating map. Currently (0.7.3) it is used for enemy bases, resources and other entities (trees, ...") |
No edit summary |
||
Line 93: | Line 93: | ||
ID of [[Prototype/NoiseLayer|noise layer]] to use for this peak. | ID of [[Prototype/NoiseLayer|noise layer]] to use for this peak. | ||
If empty, then no noise is added to this peak. | If empty, then no noise is added to this peak. | ||
See [[#Noise]]. | |||
See | |||
=== noise_persistence === | === noise_persistence === | ||
Line 106: | Line 105: | ||
Persistence of the noise. | Persistence of the noise. | ||
See [[#Noise]]. | |||
=== noise_octaves_difference === | === noise_octaves_difference === | ||
Line 113: | Line 113: | ||
Difference between number of octaves of the world and of the noise. | Difference between number of octaves of the world and of the noise. | ||
See [[#Noise]] | |||
=== *_optimal === | === *_optimal === | ||
Line 141: | Line 142: | ||
Limit distance from the optimum on a single (positive) side. This is pure magic. | Limit distance from the optimum on a single (positive) side. This is pure magic. | ||
See [[#Dimensions]]. | See [[#Dimensions]]. | ||
== Influence Calculation == | |||
== Probability Calculation == | |||
Probability of placing an entity at a given position is calculated as a sum of influences and passed through a sharpening filter ([[#sharpness]]). | |||
== Richness Calculation == | |||
If an entity is to be placed at a position and it a resource or a part of an enemy base, then richness is calculated in the next step. | |||
as sum of influences * [[#richness_multiplier|richness_multiplier]] + [[#richness_base|richness_base]]. | |||
Note, that when calculating richness, influences of individual peaks use [[#richness_influence|richness_influence]] bonus. | |||
== Noise == | |||
A peak may have a noise added to its value before multiplication by influence. | |||
Noise used is a 2D multioctave perlin noise ( http://freespace.virgin.net/hugo.elias/models/m_perlin.htm ). | |||
Range of the noise is approximately from -1.5 to 1.5. | |||
Factorio uses up to 256 different (non correlated) layers of perlin noise, a noise layer has to be defined as a prototype before use ([[Prototype/NoiseLayer]]). | |||
Intended use is to have noise layers separate for different types of objects that might appear (trees vs dry_trees vs enemy-bases). | |||
Also it has proven useful not to mix peaks containing noise with peaks referencing tile properties. | |||
== Dimensions == | |||
Each peak |
Revision as of 22:08, 20 October 2013
Autoplace specification is used to determine which entities are placed when generating map. Currently (0.7.3) it is used for enemy bases, resources and other entities (trees, fishes, ...).
General structure
Autoplace specification consists of a set of peaks that describe conditions for placing the entity and several parameters.
Properties
sharpness
Type: Types/double
Default: 0
Parameter of the sharpness filter for post-processing probability of entity placement. Value of 0 disables the filter, with value 1, the filter is a step function centered around 0.5. See #Probability calculation.
richness_base
Type: Types/double
Default: 0
richness_multiplier
Type: Types/double
Default: 0
control
Type: Types/string
Default: ""
ID of autoplace control that applies to this entity.
peaks
Type: list of #Autoplace Peaks
If this property is missing, then the whole autoplace specification is interpreted as a single peak
Autoplace Peaks
influence
Type: Types/double
Default: 1
Influence multiplier. See #Influence calculation.
max_influence
Type: Types/double
Default: max double
Influence ceiling. See #Influence calculation.
min_influence
Type: Types/double
Default: min double
Minimal influence (after all calculations) of current peak. See #Influence calculation.
max_influence
Type: Types/double
Default: max double
Maximal influence (after all calculations) of current peak. See #Influence calculation.
richness_influence
Type: Types/double
Default: 0
Bonus for influence multiplier when calculating richness. See #Influence calculation.
noise_layer
Type: Types/string
Default: ""
ID of noise layer to use for this peak. If empty, then no noise is added to this peak. See #Noise.
noise_persistence
Type: Types/double
Default: 0.5
Min: 0
Max: 1
Persistence of the noise. See #Noise.
noise_octaves_difference
Type: Types/int
Default: 0
Difference between number of octaves of the world and of the noise. See #Noise
*_optimal
Type: Types/double
Optimal value of a tile property. If the property is close to this value, peak influence is 1. See #Dimensions.
*_range
Type: Types/double
Default: 0
Distance from the optimal parameters that is still considered optimal. See #Dimensions.
*_max_range
Type: Types/double
Distance from the optimal parameters that get zero weight. See #Dimensions.
*_top_property_limit
Type: Types/double
Default: max double
Limit distance from the optimum on a single (positive) side. This is pure magic. See #Dimensions.
Influence Calculation
Probability Calculation
Probability of placing an entity at a given position is calculated as a sum of influences and passed through a sharpening filter (#sharpness).
Richness Calculation
If an entity is to be placed at a position and it a resource or a part of an enemy base, then richness is calculated in the next step. as sum of influences * richness_multiplier + richness_base.
Note, that when calculating richness, influences of individual peaks use richness_influence bonus.
Noise
A peak may have a noise added to its value before multiplication by influence. Noise used is a 2D multioctave perlin noise ( http://freespace.virgin.net/hugo.elias/models/m_perlin.htm ). Range of the noise is approximately from -1.5 to 1.5.
Factorio uses up to 256 different (non correlated) layers of perlin noise, a noise layer has to be defined as a prototype before use (Prototype/NoiseLayer).
Intended use is to have noise layers separate for different types of objects that might appear (trees vs dry_trees vs enemy-bases). Also it has proven useful not to mix peaks containing noise with peaks referencing tile properties.
Dimensions
Each peak