SEED - Spawnargs
Introduction
The new SEED system an entity manager and creation system. It also contains a ModelGenerator, which can not only generate models, but also combine render models to improve performance.
This article describes in depth all the spawnargs you can set on the SEED, SEED inhibitors as well as on entities created by the SEED:
Spawnargs on the SEED
These spawnargs can be set on the SEED itself and set defaults or influence overall strategies:
angle
Rotates the SEED shape around the z-axis. F.i. angle=45 would create a rectangle rotated by 45°.
bunching
Default: "0" (Off). Number from 0.0 to 1.0, giving the probability that a randomly created entities "bunches" up with an already existing entity. Can be overriden for each entity class with seed_bunching.
color_min/color_max
Sets the random color variance bounds min/max. Can be overridden per entity class with seed_color_min and seed_color_max.
Works only on light entities or entities that use a skin with a colorable material. If combine is true, the material also needs a "vertexColor" stage, or all the combined entities will have the same color.
Example:
"color_min" "0.7 0 0.2" "color_max" "0.8 0.5 0.7"
combine
Default: 1 (true). If set to 0, this SEED will never try to combine rendermodels of entities together, this will result in much slower rendering.
Can be overridden on a per-class basis with seed_combine.
combine_distance
Default: 2048 (units). The maximum distance between two entity origins, where the entities are still considered to be combined. See SEED - Combining entities for details.
cull_range
Default: 150 units. Entities further away from the player than hide_distance (as defined on each LOD entity) + cull_range will be removed from the game world. When they come closer to hide_distance + (cull_range / 2), they will respawn automatically.
Can be overridden on a per-class basis with seed_cull_range.
Set to 0 to disable any entity culling for this SEED. This should be only used for SEEDs with a small number of entities, otherwise you can easily run out of entity slots.
debug
Debug level, default: 0. If > 0, more debug messages are printed to the console. Warning: Can generate massive amounts of output!
density
Default: 1.0. A factor multiplied with the number of entities generated if max_entities is 0.
Each class can have its own seed_density factor that will be multiplied with the SEED density. It is usually a good idea to leave max_entities at 0 and instead scale the amount of entities generated by either changing the density spawnarg of the SEED itself, or changing the individual seed_density spawnargs for each target class.
falloff
Default: none. Defines a function that influences the probability that an entity will be generated. If set to none, all positions are equally likely, resulting in a square shape. All other values (except "func") create a ellipse defined by the corners of the SEED and distribute the entities inside that shape.
Can be overridden on a per-class basis with seed_falloff.
Possible values:
- none - entities all over the square, none outside
- cutoff - no falloff, but entities restricted inside the ellipse formed by SEED corners
- linear - elliptical like cutoff, but with a linear falloff
- power - elliptical like cutoff, but falloff based on distance ** N from the center
- root - elliptical like cutoff, but falloff based on Nth root of distance from the center
- func - a function calculated from parameters, see SEED - Falloff function for details and images.
Both power and root default to N == 2, but the value can be changed with the spawnarg "func_a".
floor
Default: 0 (Off). If set to 1, all generated entities will be floored, that is their position will be adjusted so that they touch whatever is under them. They start out at the height the template entity is placed in the editor. This works with dynamically created terrain or terrain consisting of irregular heights like when it was made from patches. See also seed_collide and seed_stack.
Finding the height where the entity is placed is a three-step process, and the "floor" (or seed_floor per class) disables/enables the second step. Here is how it works:
First, the entities are placed in whatever height you place the template in the editor. This way you can control their maximum height - entities will only sink down from there (unless the sink_min/sink_max spawnargs are negative, then entities will raise from this point on).
If "floor" is true, then the second step will place entities downwards so their origin touches the terrain. Note that nothing happens when "floor" is off!
In the third step random sinking/raising of the entities is done according to the "sink_min" and "skin_max" spawnargs:
impulse_min/impulse_max
Only used for moveables, ignored for all other entities. Sets the minimum and maximum limits for an random impulse that is applied to each moveable when it spawns for the first time. Can be overridden on a per-class basis with seed_impulse_min and seed_impulse_max.
lod_scaling_limit
Default: 10. Integer.
The max_entities number scales slightly with the GUI setting "Object details". This is generally a good thing, as it allows the player to lower/raise the details according to his machine. However, in specific circumstances you want a SEED control exactly so many entities as specified. This spawnarg gives the limit under that the scaling for the entity count will be skipped.
Example: You want to a SEED that always creates exactly 16 crates: Set the following spawnargs:
"lod_scaling_limit" "16" "max_entities" "16"
lod_scale_density
Default: 1. Boolean.
The density scales slightly with the GUI setting "Object details". This is generally a good thing, as it allows the player to lower/raise the details according to his machine. However, in specific circumstances you want a SEED to create an entity pattern that is not influenced by the menu setting, f.i. because it looks out-of-place with too many or too little entities. This spawnarg gives you the ability to turn the scaling off.
Note: Should only be used very seldom.
map
Specifies the path to an image map (8 bit greyscale TGA or PNG), where black is 0% and white is 100% spawn probability. Can be overriden on a per-class basis with seed_map.
Examples:
"map" "spots" "map" "spots, pattern, corner" // multiple maps, one will be selected at random
If the map name does not start with "textures/seed/", then this will be added in front. Also, the extension is optional, if left off, PNG, TGA and JPG will be tried in that order. For example, "sinus" will load "textures/seed/sinus.png".
Note: The image base map is combined with whatever distribution you set with falloff, also inhibitors are still taken into account. See SEED - Image maps for more information and visual examples.
Can be overridden on a per-class basis with seed_map.
map_invert
Boolean, default "0" (false). If true, the image map will be inverted, that is black is 100% and white is 0% spawn probability. Can be overridden on a per-class basis with seed_map_invert.
This is very useful to combine two different entities, one uses the map normally and the other one inverted, so the result is that the second entity only appears where the first entity is missing.
map_ofs, map_ofs_x, map_ofs_y
Float, 0.0 .. 1.0, default 0. Specify either both X and Y (map_ofs) or the X or Y offset into the image map. Can be overridden on a per-class basis with seed_map_ofs. Example:
"map_ofs" "0.5,0"
map_scale, map_scale_x, map_scale_y
Float, default 1.0. Specify either both X and Y (map_scale) or the X or Y scaling factor of the image map. Can be overridden on a per-class basis with seed_map_scale.
Example:
"map_scale" "2.0,1.0"
max_entities
Default: 0. The maximum number of entities generated. If 0 (the default), then the number will be computed from the aprox. area the SEED covers, taking into account the density spawnarg. Can be overridden on a per-class basis with seed_max_entities.
Note that the SEED might generate less entities, f.i. when entities do not all fit into the SEED area, or the inhibitors inhibit too many entities.
probability
Default 1.0. Is used as default probability for entities to spawn on certain surface types, but only when you define seed_material_xyz spawnargs on the template/target entities. See there for an explanation on how this lets you spawn entities only on some surfaces but not on others.
randseed
Default: 0. The random seed. If not set or set to 0, a random value will be used (this is the recommended way, as it generates different results every time you start the map anew, but still keeps the entities when you f.i. save and then load a game).
If set to > 0, the random number generator will always generate the same sequence, so you get still randomly distributed results, but they are always the same.
remove
Default: 0. Boolean, if set to 1, the SEED will spawn all entities immediately (instead of spawning only the ones that are visible to the player) and then remove itself.
rotate_min/rotate_max
Default: 0 0 0 and 5 360 5. The range for each axis on how much the entity will be randomly rotated around it. In the order "Ymin Zmin Xmin" and "Ymax Zmax Xmax" (or pitch, yaw, roll (yzx), where the actual rotation order will be yaw, pitch, roll, e.g. "zyx").
The default makes entities yaw randomly between 0 and 360 degress around Z (turn), and pitch/roll between 0 and 5 degrees on the other two axes. Can also be overwritten on each class with seed_rotate_min and seed_rotate_max.
scale_min/scale_max
Default: Both 1.0 1.0 1.0. Floats, either one per axis in the order X Y Z or one float value, which will be used for each axis to scale axes-equally.
Can be overridden on a per-class case with seed_scale_min and seed_scale_max.
Note: Clipmodels cannot (yet) be scaled, so this only works properly for non-solid ("solid" "0") entities.
Examples:
"scale_min" "1 1 1" "scale_max" "1 1 2"
Will scale the z-axis between 1.0 and 2.0.
"scale_min" "0.6" "scale_max" "2.2"
Will scale the model in all three axis by the same amount, which varies between 0.6 and 2.2 of the original size.
sink_min/sink_max
Default: Both to 0. In Units.
Define the range (minimum/maximum) of how much entities randomly sink into the floor. Can be overridden on a per-class case with seed_sink_min and seed_sink_max. This is in addition to the "base line floor" of the entity, which is either determined by the placement of the template entity in DR (if seed_floor is false), or by the point where the entity origin touches the ground (if "seed_floor" is true).
This can f.i. be used to let all floored entities sink 1 or 2 units into the ground, to avoid that the entity, if placed on a step incline, sinks at one side into the ground, but stands "on air" on the other side.
See also [[#z_min/z_max|z_min/z_max].
Note: If sink_max is smaller than sink_min, it will be set to sink_min.
Usages:
- sink_min = 0, sink_max = 0 - all entities are at the same "height"
- sink_min = 5, sink_max = 5 - all entities sink 5 units "down"
- sink_min = 1, sink_max = 15 - all entities sink between 1 and 15 units "down"
- sink_min = -10, sink_max = -5 - all entities raise between 5 and 10 units "up" (note seemingly reversed numbers)
"Down" here refers to the gravity normal of the SEED, e.g. at the moment just down the z-axis.
spacing
Default: 0. Defines a minimum distance between placed entities. If set to > 0, implies collision check at creation time between all entities.
template
Defines an entity template by entityDef or model name - other options like count and skin are possible, too. Please see SEED - Templates via Spawnargs for the complete documentation.
This can be used instead of creating entities and linking them from the SEED, saving on entity count on map start.
wait_for_trigger
Boolean, default: 0. If set to 1, causes the SEED wait after generating the entity positions until it is triggered, and only then spawn the actual entities. Using the remove spawnarg will work correctly together with this, the SEED will first wait, then spawn, then remove itself.
z_invert
Boolean, default: false (0). If true, units will be placed only lower than z_min and only higher than z_max, but not between.
Can be overridden on a per-class basis with seed_z_invert.
z_min/z_max
Float, default -1000000 and +100000 (e.g. off for all practical purposes).
Sets the z-height variance bounds min/max. Entities will not placed lower than z_min and not higher than z_max, in absolute Doom units. Can be overridden per entity class with seed_z_min and seed_z_max.
See also z_invert to place units only outside the z_min/z_max band.
Spawnargs on the Inhibitors (atdm:no_seed)
falloff
Default is none. Defines the falloff for this inhibitor. Works in reverse to falloff on the seed, that is the inhibition is strongest at the center and falls off to the border.
Possible values:
- none - entities are inhibited at the entire area
- cutoff - no falloff, entities only restricted inside the ellipse formed by the corners
- linear - elliptical like cutoff, but with a linear falloff
- power - elliptical like cutoff, but falloff based on distance ** N from the center
- root - elliptical like cutoff, but falloff based on Nth root of distance from the center
Both power and root default to N == 2, but the value can be changed with the spawnarg "func_a".
Note: Falloff "func" is not (yet) supported on inhibitors.
noinhibit
By default a NOSEED entity inhibits every entity class from spawning. With noinhibit you can selectively allow some entities to spawn regardless. Multiple can be given with "noinhibit1" etc. Example:
"noinhibit" "atdm:nature_grass" "noinhibit1" "atdm:nature_dense" "noinhibit2" "atdm:nature_bush_small"
This lets you inhibit every entity except the ones listed.
Notes:
- It is not yet possible to make a distinction based on the model of a func_static, so listing "func_static" would allow all func_static's, regardless of their model.
- If inhibit is set, noinhibit will be ignored.
inhibit
By default a NOSEED entity inhibits every entity class from spawning. With inhibit (if set) you can selectively only inhibit the listed entity classs. Multiple can be given with "inhibit1" etc. Example:
"inhibit" "atdm:nature_pine" "inhibit1" "atdm:nature_rock"
This lets you inhibit only these entity classes listed.
- Note: It is not yet possible to make a distinction based on the model of a func_static, so listing "func_static" would inhibit all func_static's, regardless of their model.
Spawnargs on Targets
These spawnargs can be set on the entities that the SEED targets:
seed_base_density
Default: 1.0. Will be multiplied with seed_density to arrive at the final density. Used to adjust the default sensity (for premade entities) without the mapper having to know this value, she can always assume 1.0 is the default density and tweak this variable more easily. Should only be used if you create new pre-made random generators.
seed_bunching
Default: What the SEED specifies with bunching. Number from 0.0 to 1.0, giving the probability that a randomly created entities "bunches" up with an already existing entity.
seed_color_min/seed_color_max
Sets the random color variance bounds min/max for all entities from this class. The final entity color is between "seed_color_min" and "seed_color_max". Works only on light entities or entities that use a skin with a colorable material.
Example:
"seed_color_min" "0.7 0 0.2" "seed_color_max" "0.8 0.5 0.7"
This will result in entities ranging from dark plum to a light purple.
seed_combine
Default: 1 (true). If set to 0, this SEED will never try to combine rendermodels of entities of this class together, this will result in much slower rendering.
seed_cull_range
Default: To whatever the SEED specifies, which defaults to 150 units. Entities further away from the player than hide_distance (as defined on each LOD entity) + seed_cull_range will be removed from the game world. When they come closer to hide_distance + (seed_cull_range / 2), they will respawn automatically.
To disable culling of entities set to 0.
seed_density
Default: 1.0. A factor multiplied with the density of the SEED itself, used to calculate the number of entities generated if max_entities (on the SEED) or seed_max_entities (on the class) is 0.
seed_falloff
Default: Whatever the SEED specifies, or none. Defines a function that influences the probability that an entity will be generated. If set to none, all positions are equally likely, resulting in a square shape. The other values (except "func") create a ellipse defined by the corners of the SEED and distribute the entities inside that shape.
Possible values:
- none - entities all over the square, none outside
- cutoff - no falloff, but entities restricted inside the ellipse formed by SEED corners
- linear - elliptical like cutoff, but with a linear falloff
- power - elliptical like cutoff, but falloff based on distance ** N from the center
- root - elliptical like cutoff, but falloff based on Nth root of distance from the center
- func - a function calculated from parameters, see SEED - Falloff function for details and images.
seed_floor
Default: 0 (Off). If set to 1, all entities of this class will be floored, that is their position will be adjusted so that they touch whatever is under them. This works with dynamically created terrain or terrain consisting of irregular heights like when it was made from patches. See also seed_collide and seed_stack.
seed_map
Specifies the path to an image map (8 bit greyscale TGA or PNG), where black is 0% and white is 100% spawn probability.
Example:
"seed_map" "spots" "seed_map" "spots, pattern, corner" // multiple maps, one will be selected at random
If the map name does not start with "textures/seed/", then this will be added in front. Also, the extension is optional, if left off, PNG and TGA will be tried in that order. For example, "seed_sinus" will load "textures/seed/seed_sinus.png".
Note: The image base map is combined with whatever distribution you set with falloff, also inhibitors are still taken into account. See SEED - Image maps for more information and visual examples.
seed_map_invert
Boolean, default "0" (false). If true, the image map will be inverted, that is black is 100% and white is 0% spawn probability.
This is very useful to combine two different entities, one uses the map normally and the other one inverted, so the result is that the second entity only appears where the first entity is missing.
seed_map_ofs, seed_map_ofs_x, seed_map_ofs_y
Float, 0.0 .. 1.0, default 0. Specify either both X and Y (seed_map_ofs) or the X or Y offset into the image map. Example:
"seed_map_ofs" "0.5,0"
seed_map_scale, seed_map_scale_x, seed_map_scale_y
Float, default 1.0. Specify either both X and Y (map_scale) or the X or Y scaling factor of the image map. Example:
"seed_map_scale" "2.0,1.0"
seed_material_xyz
Defines the probability that an entity will spawn on the given surface type. (Any surface types that TDM has can be used, but it is not possible to distinguish between material shader names or textures used). If any seed_material_xyz spawnarg is used, the "seed_probability" spawnarg will also be queried and used. Example:
"seed_material_grass" "1.0" "seed_material_dirt" "0.5" "seed_probability" "0"
This would spawn the entity always on grass, only half the time on dirt, and never on anything else (the "seed_probability" "0" governs this).
The other way round might sometimes be easier:
"seed_material_stone" "0" "seed_material_metal" "0" "seed_probability" "1.0"
Meaning: Never spawn on metal or stone, but always on anything else.
Note: The probability calculated/set from the surface type (material) is multiplied with the other probabilities. This means you can have a plant that never grows on stone or metal, and yet where it grows will still influenced by f.i. an image map.
seed_max_entities
Default: 0. The maximum number of entities generated. If 0 (the default), then the number will be computed accordingly to the seed_density of this class and the max_entities from the SEED.
If greater than zero, only so many entities will be generated and the spawnarg density will be ignored for this class. In this case the spawnargs seed_score will be used for each class.
Note that the SEED might generate less entities than specified, f.i. when entities do not all fit into the SEED area, or the inhibitors inhibit too many entities.
seed_noinhibit
Default: 0 (false). Boolean.
If set to 1 (true), entities of this class will not be inhibited by any inhibitor linked to this SEED. Can be used f.i. to add grass and trees to an area, but make it so that trees are inhibited in certain areas, but grass never is.
For more control over non-inhibition of entities, see the section #Spawnargs on the Inhibitors (atdm:no_seed).
seed_offset
Some models (for example "boletus_tall.lwo") have their origin not at their base. This means if the entity is placed in the map after flooring it, it will sink into the floor. One could correct for this by setting the appropriate seed_sink_min/seed_sink_max spawnargs, but this is a bit cumbersome, and also does not account for shifts in X/Y direction.
The seed_offset spawnarg simply offsets the finally placed entities by the given number of units. F.i. for "boletus_tall.lwo", the value is "0 0 6", displacing the model 6 units up, so the mushroom does not sink into the floor.
seed_probability
Default 1.0. Is used as default probability for entities to spawn on certain surface types, but only when you define seed_material_xyz spawnargs. See there for an explanation on how this lets you spawn entities only on some surfaces but not on others.
seed_rotate_min/seed_rotate_max
Default: Same as the SEED specifies (which defaults to 0 0 0 and 5 360 5).
The range for each axis on how much the entity will be randomly rotated around it. I the order "Ymin Zmin Xmin" and "Ymax Zmax Xmax" (or pitch, yaw, roll (yzx), where the actual rotation order will be yaw, pitch, roll, e.g. "zyx").
The default makes entities rotate randomly between 0 and 360 degress around Z (turn), and tilt between 0 and 5 degrees on the other two axes. Use 0 0 0 and 0 360 0 for entities that should be perfectly upright.
seed_score
Default: 1 (but is ignored). If max_entities from the SEED is set, then all scores of all classes will be added together, and the final entity count for this class is the proportion of its score to the sum.
E.g.if you have three classes, with score 10, 20 and 30, then the first class will generate 1/6 of all entities (10+20+30=60, and 10/60 => 1/6), the second class 2/6 of all entities, and the third class 3/6 (e.f. 1/2) of all entities.
The spawnarg density will be ignored for this class.
Note that the SEED might generate less entities than specified with max_entities, f.i. when entities do not all fit into the SEED area, or the inhibitors inhibit too many entities.
seed_scale_min/seed_scale_max
Default: Both 1.0 1.0 1.0. Floats, either one per axis in the order X Y Z or one float value, which will be used for each axis to scale axes-equally.
Note: Clipmodels cannot (yet) be scaled, so this only works properly for non-solid ("solid" "0") entities.
Examples:
"seed_scale_min" "1 1 1" "seed_scale_max" "1 1 2"
Will scale the z-axis between 1.0 and 2.0.
"seed_scale_min" "0.6" "seed_scale_max" "2.2"
Will scale the model in all three axis by the same amount, which varies between 0.6 and 2.2 of the original size.
seed_spacing
Defines a minimum distance between placed entities of this class. Overrides the default setting from "spacing" on the SEED. If set to > 0, implies collision check at creation time between all entities of this class.
seed_sink_min/seed_sink_max
Default: Both to what the SEED specifies with sink_min and sink_max. In Units.
Define the range (minimum/maximum) of how much entities randomly sink into the floor. This is in addition to the "base line floor" of the entity, which is either determined by the placement of the template entity in DR (if "seed_floor" is false), or by the point where the entity origin touches the ground (if "seed_floor" is true).
This can f.i. be used to let all floored entities sink 1 or 2 units into the ground, to avoid that the entity, if placed on a step incline, sinks at one side into the ground, but stands "on air" on the other side.
Note: If seed_sink_max is smaller than seed_sink_min, it will be set to seed_sink_min.
Usages:
- seed_sink_min = 0, seed_sink_max = 0 - all entities are at the same "height"
- seed_sink_min = 5, seed_sink_max = 5 - all entities sink 5 units "down"
- seed_sink_min = 1, seed_sink_max = 15 - all entities sink between 1 and 15 units "down"
- seed_sink_min = -10, seed_sink_max = -5 - all entities raise between 5 and 10 units "up" (note seemingly reversed numbers to make min smaller than max)
"Down" here refers to the gravity normal of the SEED, e.g. at the moment just down the z-axis.
seed_watch_brethren
Boolean, default: 0 (false).
If set, instead of taking this entity as a template to create new entities, this tells the SEED entity that all entities inside the SEED and of the same entity class as this one should be "watched" over by the SEED.
That means it will add these entities to its entity watch list, and do the LOD changes as well as cull/respawn them if nec. It will also optionally combined multiple entities into one.
See SEED - Watching entities for a longer explanation with images and reasons why to use this.
The other "seed_*" spawnargs (like seed_floor, seed_spacing etc.) are ignored on the target entity. The only relevant spawnargs are lod_* and hide_distance - these cause the LOD system to kick in. Also, do not forget to put a hide_distance on the target entity, or the SEED would never cull the entities it watches.
skin
Setting a skin on the entity will use this skin on all entities created from this template. If this entity has seed_watch_brethren set, then the individual skin spawnarg is ignored, instead the skins of all entities being watched over will be preserved.
To get multiple, random skins, use one of the following methods:
- add multiple skin spawnargs with suffixes like skin, skin_1, skin_2 etc. Note that the final skin will be randomly chosen, but distributed equally. E.g. if you have three skin spawnargs, roughly 1/3 of all entities will get the first skin, 1/3 the second and 1/3 the third.
- OR use the random_skin spawnarg on the entities targeted by the SEED (skins will be distributed evenly with this method, too)
- OR add multiple copies of the same entities and link them from the SEED. Each copy can have a different (or possible more, see above) skin spawnarg. You can then use seed_density to influence the distribution of the different skins.
Note: If you want random skins plus the original, unskinned model, simply omit the skin spawnarg and just set the skin_X spawnargs, the original skin will then be added automatically.
seed_z_invert
Boolean, default: false (0). If this is true, units will be placed only lower than seed_z_min and only higher than seed_z_max, but not in between.
seed_z_min/seed_z_max
Float. Default -1000000 and +100000 (e.g basically off)
Sets the z-height variance bounds min/max. Entities will not placed lower than seed_z_min and not higher than seed_z_max, in absolute Doom units.
See also z_invert to place units only outside the seed_z_min/seed_z_max band.
Other spawnargs
You can of course use other LOD spawnargs on the entities that the SEED creates. See LOD for a list.
In addition, possible are:
- "solid" "0" - this makes the generated entities nonsolid, even when they are combined into one entity.
- "noshadows" "1" - this turns off shadows for all copies and LOD stages of this entity.