http://wiki.wolfire.com/api.php?action=feedcontributions&user=Merlyn&year=&month=&feedformat=atomWolfire Games Wiki - User contributions [en]2024-03-29T06:38:55ZUser contributionsMediaWiki 1.30.0http://wiki.wolfire.com/index.php?title=Overgrowth_Object_Xml_File_Format&diff=6269Overgrowth Object Xml File Format2023-09-11T04:59:02Z<p>Merlyn: /* Object XML -> Label element */</p>
<hr />
<div>This is the top-level XML file for a level object. It specifies visual parameters, some gameplay parameters, and paths for visual assets.<br><br />
Other XML file types reference this XML file type, such as [[Xml File Formats#Character XML|Character XML files]] and [[Xml File Formats#Item XML|Item XML files]].<br />
<br />
== Object XML Example ==<br />
<onlyinclude><br />
<pre><br />
<?xml version="1.0" ?><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
<Label>impale</Label><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gray_metal_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gray_metal_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/cat_cobbles_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/cat_cobbles_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gold_hexagons_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gold_hexagons_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
</DetailMaps><br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="2" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="20" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/Objects/Environment/Rocks/lichen_rock_a.xml" weight_path="Data/Textures/Terrain/forest_hills/forest_hills_not_grass.tga"<br />
normal_conform="1" density="20" min_embed="0.3" max_embed="0.7" min_scale="0.08" max_scale="0.12"<br />
view_distance="10" jitter_degrees="45" overbright="0.4" tint_weight="0.5" collision_type="static" /><br />
</DetailObjects><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
<avg_color r = "100" g = "128" b = "47" /><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
<GroundOffset>0.5</GroundOffset><br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
</onlyinclude><br />
<br />
== Object XML -> Model element ==<br />
<br />
<pre><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the obj format model file.<br />
<br />
=== Model element -> element text ===<br />
<br />
<pre><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
</pre><br />
<br />
'''Required''' - String value. Path to the obj format model file.<br />
<br />
== Object XML -> ColorMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the color map texture for the object.<br />
<br />
=== ColorMap element -> element text ===<br />
<br />
<pre><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color map texture for the object.<br />
<br />
== Object XML -> NormalMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the normal map texture for the object.<br />
<br />
=== NormalMap element -> element text ===<br />
<br />
<pre><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the normal map texture for the object.<br />
<br />
== Object XML -> TranslucencyMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the translucency map texture for the object.<br />
<br />
=== TranslucencyMap element -> element text ===<br />
<br />
<pre><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the translucency map texture for the object.<br />
<br />
== Object XML -> WindMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the wind map texture for the object.<br />
<br />
=== WindMap element -> element text ===<br />
<br />
<pre><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the wind map texture for the object.<br />
<br />
== Object XML -> SharpnessMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br><br />
'''TODO''': links to/from other file types for this field?<br />
<br />
=== SharpnessMap element -> element text ===<br />
<br />
<pre><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br />
<br />
== Object XML -> Label element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Label>impale</Label><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - This is referenced by gameplay scripts, to determine if this object is of a certain type (e.g. <code>spear</code>, <code>scabbard</code>, <code>impale</code>, etc).<br />
<br />
=== Label element -> element text ===<br />
<br />
<pre><br />
<Label>impale</Label><br />
</pre><br />
<br />
'''Required''' - String value. This is referenced by gameplay scripts, to determine if this object is of a certain type (e.g. <code>spear</code>, <code>scabbard</code>, <code>impale</code>, etc).<br />
<br />
== Object XML -> WeightMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the weight map texture for the object.<br />
<br />
=== WeightMap element -> element text ===<br />
<br />
<pre><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the weight map texture for the object.<br />
<br />
== Object XML -> PaletteMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies a set of different tintable areas on this object. The labels are the text displayed in the editor interface. Each color channel of the specified image will be used as a mask to specify where on the object's model the tinting should be limited to.<br />
<br />
=== PaletteMap element -> element text ===<br />
<br />
<pre><br />
<PaletteMap ...><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color masks, used when there's tint parameters that limit the tint to a specific area on the object, such as character clothing colors, a tintable area on a weapon, etc.<br />
<br />
=== PaletteMap element -> label_red attribute ===<br />
<br />
<pre><br />
<PaletteMap label_red="Clothing Color 1"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the red channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_green attribute ===<br />
<br />
<pre><br />
<PaletteMap label_green="Clothing Color 2"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the green channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_blue attribute ===<br />
<br />
<pre><br />
<PaletteMap label_blue="Clothing Color 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the blue channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_alpha attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 4"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the alpha channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_other attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 5"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the "other" channel of the tint mask image.<br><br />
'''TODO''': What the heck even is a "other" channel on an image? Does this even do anything in code, besides get parsed? -merlyn<br />
<br />
== Object XML -> DetailMaps element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
...<br />
</DetailMaps><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary material layers that provide fine, repeated visual detail on top of the object's main texture layers.<br />
<br />
== Object XML -> DetailMaps element -> DetailMap element ==<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
</pre><br />
<br />
'''Optional''' - The parameters for the detail map textures that repeat across the model, providing finer-scale detail. There can be up to four of these.<br />
<br />
=== DetailMap element -> colorpath attribute ===<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for this detail map's color map texture.<br />
<br />
=== DetailMap element -> normalpath attribute ===<br />
<br />
<pre><br />
<DetailMap normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the detail map's normal map texture.<br />
<br />
=== DetailMap element -> materialpath attribute ===<br />
<br />
<pre><br />
<DetailMap materialpath="Data/Materials/wood.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the given detail map level.<br><br />
'''TODO''': What is this used for? Aren't detail maps a visual-only thing? -merlyn<br />
<br />
== Object XML -> DetailObjects element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml"<br />
weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3"<br />
min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
...<br />
</DetailObjects><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary objects that will be scattered randomly to provide fine, repeated visual detail on top of the object's main surface.<br />
<br />
== Object XML -> DetailObjects element -> DetailObject element ==<br />
<br />
<pre><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml"<br />
weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3"<br />
min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0.4"<br />
tint_weight="0.5" collision_type="static" /><br />
</pre><br />
<br />
'''Optional''' - A secondary object type that will be scattered randomly to provide fine, repeated visual detail on top of the object's main surface.<br />
<br />
=== DetailObject element -> obj_path attribute ===<br />
<br />
<pre><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Object XML|Object XML]] for the given detail object type. Will provide rendering parameters for the detail objects.<br />
<br />
=== DetailObject element -> weight_path attribute ===<br />
<br />
<pre><br />
<DetailObject weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image that specifies the weight densities for the detail object scattering.<br />
<br />
=== DetailObject element -> normal_conform attribute ===<br />
<br />
<pre><br />
<DetailObject normal_conform="0.9" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies how much the normal of the detail objects will be shifted to match the normal of the surface they are decorating.<br><br />
'''TODO''': What are the units? -merlyn<br />
<br />
=== DetailObject element -> density attribute ===<br />
<br />
<pre><br />
<DetailObject density="3" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies how many of the detail objects should be placed per area, upon the surface they decorate.<br><br />
'''TODO''': What are the units? -merlyn<br />
<br />
=== DetailObject element -> min_embed attribute ===<br />
<br />
<pre><br />
<DetailObject min_embed="-0.2" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the deepest that detail objects will be embedded into the surface of the object they decorate. The actual value is random, and this is the deepest range value.<br />
<br />
=== DetailObject element -> max_embed attribute ===<br />
<br />
<pre><br />
<DetailObject max_embed="0.0" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the shallowest that detail objects will be embedded into the surface of the object they decorate. The actual value is random, and this is the shallowest range value.<br />
<br />
=== DetailObject element -> min_scale attribute ===<br />
<br />
<pre><br />
<DetailObject min_scale="4.0" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies the smallest value that detail objects will be scaled to. The actual value is random, and this is the smallest range value.<br />
<br />
=== DetailObject element -> max_scale attribute ===<br />
<br />
<pre><br />
<DetailObject max_scale="6.8" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies the largest value that detail objects will be scaled to. The actual value is random, and this is the largest range value.<br />
<br />
=== DetailObject element -> view_distance attribute ===<br />
<br />
<pre><br />
<DetailObject view_distance="10" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>30.0</code>. Specifies the farthest distance that the detail object will be visible from. Values are specified in game units (meters).<br />
<br />
=== DetailObject element -> jitter_degrees attribute ===<br />
<br />
<pre><br />
<DetailObject jitter_degrees="10" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the maximum number of degrees to randomly rotate the object, to keep detail objects from awkwardly all pointing directly upward, and to increase visual variety.<br />
<br />
=== DetailObject element -> overbright attribute ===<br />
<br />
<pre><br />
<DetailObject overbright="0.4" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the overbright value to render the object with.<br><br />
'''TODO''': Need a better description. Units? -merlyn<br />
<br />
=== DetailObject element -> tint_weight attribute ===<br />
<br />
<pre><br />
<DetailObject tint_weight="0.5" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies the blend percentage between the detail object's tint, and the tint it inherits from the object's surface it decorates. The value should be between <code>0.0</code> and <code>1.0</code>.<br><br />
'''TODO''': Is this accurate? Is it the blend with other detail object layers or the parent layer? -merlyn<br />
<br />
=== DetailObject element -> collision_type attribute ===<br />
<br />
<pre><br />
<DetailObject collision_type="static" ... /><br />
</pre><br />
<br />
'''Optional''' - Enumerated value. The default value is unset, which will result in an object with dynamic collision. Specifies the type of collision this object should have with moving objects in the world. Valid values are <code>static</code>, <code>plant</code>, and unset.<br />
<br />
== Object XML -> ShaderName element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
=== ShaderName element -> element text ===<br />
<br />
<pre><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
</pre><br />
<br />
'''Required''' - String value. The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
== Object XML -> avg_color element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<avg_color r = "100" g = "128" b = "47" /><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The default value is <code>r = 200, g = 200, b = 200</code>, which is equivalent to a light grey. The color is used when the object is used as a detail object, and the detail is faded out while getting close to the max allowed draw distance. For other scenarios, such as when just placing the object normally in a level, the value seems to go unused.<br />
<br />
=== avg_color element -> r attribute ===<br />
<br />
<pre><br />
<avg_color r = "100" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> g attribute ===<br />
<br />
<pre><br />
<avg_color ... g = "128" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> b attribute ===<br />
<br />
<pre><br />
<avg_color ... b = "47" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
== Object XML -> MaterialPath element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
=== MaterialPath element -> element text ===<br />
<br />
<pre><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
== Object XML -> Flags element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of flags that will be applied to this object, if set to true. Some of these flags affect rendering (e.g. <code>double_sided</code>), some affect physics (e.g. <code>no_collision</code>), and others affect gameplay interactions with this object (e.g. <code>bush_collision</code>).<br />
<br />
=== Flags element -> transparent attribute ===<br />
<br />
<pre><br />
<Flags transparent = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will be rendered in the transparent rendering pass.<br><br />
This flag doesn't make the object transparent on its own, and must also be coupled with transparent shader flags and a transparency map texture.<br />
<br />
=== Flags element -> no_collision attribute ===<br />
<br />
<pre><br />
<Flags no_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will not trigger collisions with players, items, or weapons.<br><br />
<br />
=== Flags element -> clamp_texture attribute ===<br />
<br />
<pre><br />
<Flags clamp_texture = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will render with its texture clamped at its edges, instead of repeating.<br><br />
<br />
=== Flags element -> bush_collision attribute ===<br />
<br />
<pre><br />
<Flags bush_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will trigger jiggle physics when items and characters collide with it. Physics objects will also be slowed down when interacting with it, but not completely blocked. It will also impact line of sight.<br />
<br />
=== Flags element -> terrain_fixed attribute ===<br />
<br />
<pre><br />
<Flags terrain_fixed = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will be locked to the terrain when placed.<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> dynamic attribute ===<br />
<br />
<pre><br />
<Flags dynamic = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will be considered to move by script, and the physics engine will use that information for optimization<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> double_sided attribute ===<br />
<br />
<pre><br />
<Flags double_sided = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will have its polygons rendered double-sided. This is useful for objects such as flags and cloth, that have no thickness.<br />
<br />
== Object XML -> GroundOffset element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<GroundOffset>0.5</GroundOffset><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The default value is <code>0.0</code>. The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
=== GroundOffset element -> element text ===<br />
<br />
<pre><br />
<GroundOffset>0.5</GroundOffset><br />
</pre><br />
<br />
'''Required''' - Decimal value. The default value (when the element is not present) is <code>0.0</code>. The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
== Object XML -> ColorTint element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The default value is <code>r = 255, g = 255, b = 255</code>, which is equivalent to no tint. The color that the object should be tinted, by default, when placed in the world. This can be overridden in the editor after the object is placed.<br />
<br />
=== ColorTint element -> r attribute ===<br />
<br />
<pre><br />
<ColorTint r = "101" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> g attribute ===<br />
<br />
<pre><br />
<ColorTint ... g = "129" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> b attribute ===<br />
<br />
<pre><br />
<ColorTint ... b = "46" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the tint color. Value is between <code>0</code> and <code>255</code>.</div>Merlynhttp://wiki.wolfire.com/index.php?title=Overgrowth_Object_Xml_File_Format&diff=6268Overgrowth Object Xml File Format2023-09-11T04:37:49Z<p>Merlyn: /* Object XML -> Label element */</p>
<hr />
<div>This is the top-level XML file for a level object. It specifies visual parameters, some gameplay parameters, and paths for visual assets.<br><br />
Other XML file types reference this XML file type, such as [[Xml File Formats#Character XML|Character XML files]] and [[Xml File Formats#Item XML|Item XML files]].<br />
<br />
== Object XML Example ==<br />
<onlyinclude><br />
<pre><br />
<?xml version="1.0" ?><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
<Label>impale</Label><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gray_metal_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gray_metal_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/cat_cobbles_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/cat_cobbles_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gold_hexagons_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gold_hexagons_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
</DetailMaps><br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="2" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="20" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/Objects/Environment/Rocks/lichen_rock_a.xml" weight_path="Data/Textures/Terrain/forest_hills/forest_hills_not_grass.tga"<br />
normal_conform="1" density="20" min_embed="0.3" max_embed="0.7" min_scale="0.08" max_scale="0.12"<br />
view_distance="10" jitter_degrees="45" overbright="0.4" tint_weight="0.5" collision_type="static" /><br />
</DetailObjects><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
<avg_color r = "100" g = "128" b = "47" /><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
<GroundOffset>0.5</GroundOffset><br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
</onlyinclude><br />
<br />
== Object XML -> Model element ==<br />
<br />
<pre><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the obj format model file.<br />
<br />
=== Model element -> element text ===<br />
<br />
<pre><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
</pre><br />
<br />
'''Required''' - String value. Path to the obj format model file.<br />
<br />
== Object XML -> ColorMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the color map texture for the object.<br />
<br />
=== ColorMap element -> element text ===<br />
<br />
<pre><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color map texture for the object.<br />
<br />
== Object XML -> NormalMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the normal map texture for the object.<br />
<br />
=== NormalMap element -> element text ===<br />
<br />
<pre><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the normal map texture for the object.<br />
<br />
== Object XML -> TranslucencyMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the translucency map texture for the object.<br />
<br />
=== TranslucencyMap element -> element text ===<br />
<br />
<pre><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the translucency map texture for the object.<br />
<br />
== Object XML -> WindMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the wind map texture for the object.<br />
<br />
=== WindMap element -> element text ===<br />
<br />
<pre><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the wind map texture for the object.<br />
<br />
== Object XML -> SharpnessMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br><br />
'''TODO''': links to/from other file types for this field?<br />
<br />
=== SharpnessMap element -> element text ===<br />
<br />
<pre><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br />
<br />
== Object XML -> Label element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Label>impale</Label><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - This is referenced by gameplay scripts, to determine if this object is of a certain type (e.g. <code>spear</code>, <code>scabbard</code>, <code>impale</code>, etc).<br />
<br />
=== Label element -> element text ===<br />
<br />
<pre><br />
<Label>impale</Label><br />
</pre><br />
<br />
'''Required''' - String value. This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
== Object XML -> WeightMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the weight map texture for the object.<br />
<br />
=== WeightMap element -> element text ===<br />
<br />
<pre><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the weight map texture for the object.<br />
<br />
== Object XML -> PaletteMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies a set of different tintable areas on this object. The labels are the text displayed in the editor interface. Each color channel of the specified image will be used as a mask to specify where on the object's model the tinting should be limited to.<br />
<br />
=== PaletteMap element -> element text ===<br />
<br />
<pre><br />
<PaletteMap ...><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color masks, used when there's tint parameters that limit the tint to a specific area on the object, such as character clothing colors, a tintable area on a weapon, etc.<br />
<br />
=== PaletteMap element -> label_red attribute ===<br />
<br />
<pre><br />
<PaletteMap label_red="Clothing Color 1"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the red channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_green attribute ===<br />
<br />
<pre><br />
<PaletteMap label_green="Clothing Color 2"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the green channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_blue attribute ===<br />
<br />
<pre><br />
<PaletteMap label_blue="Clothing Color 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the blue channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_alpha attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 4"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the alpha channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_other attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 5"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the "other" channel of the tint mask image.<br><br />
'''TODO''': What the heck even is a "other" channel on an image? Does this even do anything in code, besides get parsed? -merlyn<br />
<br />
== Object XML -> DetailMaps element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
...<br />
</DetailMaps><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary material layers that provide fine, repeated visual detail on top of the object's main texture layers.<br />
<br />
== Object XML -> DetailMaps element -> DetailMap element ==<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
</pre><br />
<br />
'''Optional''' - The parameters for the detail map textures that repeat across the model, providing finer-scale detail. There can be up to four of these.<br />
<br />
=== DetailMap element -> colorpath attribute ===<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for this detail map's color map texture.<br />
<br />
=== DetailMap element -> normalpath attribute ===<br />
<br />
<pre><br />
<DetailMap normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the detail map's normal map texture.<br />
<br />
=== DetailMap element -> materialpath attribute ===<br />
<br />
<pre><br />
<DetailMap materialpath="Data/Materials/wood.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the given detail map level.<br><br />
'''TODO''': What is this used for? Aren't detail maps a visual-only thing? -merlyn<br />
<br />
== Object XML -> DetailObjects element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml"<br />
weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3"<br />
min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
...<br />
</DetailObjects><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary objects that will be scattered randomly to provide fine, repeated visual detail on top of the object's main surface.<br />
<br />
== Object XML -> DetailObjects element -> DetailObject element ==<br />
<br />
<pre><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml"<br />
weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3"<br />
min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0.4"<br />
tint_weight="0.5" collision_type="static" /><br />
</pre><br />
<br />
'''Optional''' - A secondary object type that will be scattered randomly to provide fine, repeated visual detail on top of the object's main surface.<br />
<br />
=== DetailObject element -> obj_path attribute ===<br />
<br />
<pre><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Object XML|Object XML]] for the given detail object type. Will provide rendering parameters for the detail objects.<br />
<br />
=== DetailObject element -> weight_path attribute ===<br />
<br />
<pre><br />
<DetailObject weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image that specifies the weight densities for the detail object scattering.<br />
<br />
=== DetailObject element -> normal_conform attribute ===<br />
<br />
<pre><br />
<DetailObject normal_conform="0.9" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies how much the normal of the detail objects will be shifted to match the normal of the surface they are decorating.<br><br />
'''TODO''': What are the units? -merlyn<br />
<br />
=== DetailObject element -> density attribute ===<br />
<br />
<pre><br />
<DetailObject density="3" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies how many of the detail objects should be placed per area, upon the surface they decorate.<br><br />
'''TODO''': What are the units? -merlyn<br />
<br />
=== DetailObject element -> min_embed attribute ===<br />
<br />
<pre><br />
<DetailObject min_embed="-0.2" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the deepest that detail objects will be embedded into the surface of the object they decorate. The actual value is random, and this is the deepest range value.<br />
<br />
=== DetailObject element -> max_embed attribute ===<br />
<br />
<pre><br />
<DetailObject max_embed="0.0" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the shallowest that detail objects will be embedded into the surface of the object they decorate. The actual value is random, and this is the shallowest range value.<br />
<br />
=== DetailObject element -> min_scale attribute ===<br />
<br />
<pre><br />
<DetailObject min_scale="4.0" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies the smallest value that detail objects will be scaled to. The actual value is random, and this is the smallest range value.<br />
<br />
=== DetailObject element -> max_scale attribute ===<br />
<br />
<pre><br />
<DetailObject max_scale="6.8" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies the largest value that detail objects will be scaled to. The actual value is random, and this is the largest range value.<br />
<br />
=== DetailObject element -> view_distance attribute ===<br />
<br />
<pre><br />
<DetailObject view_distance="10" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>30.0</code>. Specifies the farthest distance that the detail object will be visible from. Values are specified in game units (meters).<br />
<br />
=== DetailObject element -> jitter_degrees attribute ===<br />
<br />
<pre><br />
<DetailObject jitter_degrees="10" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the maximum number of degrees to randomly rotate the object, to keep detail objects from awkwardly all pointing directly upward, and to increase visual variety.<br />
<br />
=== DetailObject element -> overbright attribute ===<br />
<br />
<pre><br />
<DetailObject overbright="0.4" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the overbright value to render the object with.<br><br />
'''TODO''': Need a better description. Units? -merlyn<br />
<br />
=== DetailObject element -> tint_weight attribute ===<br />
<br />
<pre><br />
<DetailObject tint_weight="0.5" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies the blend percentage between the detail object's tint, and the tint it inherits from the object's surface it decorates. The value should be between <code>0.0</code> and <code>1.0</code>.<br><br />
'''TODO''': Is this accurate? Is it the blend with other detail object layers or the parent layer? -merlyn<br />
<br />
=== DetailObject element -> collision_type attribute ===<br />
<br />
<pre><br />
<DetailObject collision_type="static" ... /><br />
</pre><br />
<br />
'''Optional''' - Enumerated value. The default value is unset, which will result in an object with dynamic collision. Specifies the type of collision this object should have with moving objects in the world. Valid values are <code>static</code>, <code>plant</code>, and unset.<br />
<br />
== Object XML -> ShaderName element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
=== ShaderName element -> element text ===<br />
<br />
<pre><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
</pre><br />
<br />
'''Required''' - String value. The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
== Object XML -> avg_color element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<avg_color r = "100" g = "128" b = "47" /><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The default value is <code>r = 200, g = 200, b = 200</code>, which is equivalent to a light grey. The color is used when the object is used as a detail object, and the detail is faded out while getting close to the max allowed draw distance. For other scenarios, such as when just placing the object normally in a level, the value seems to go unused.<br />
<br />
=== avg_color element -> r attribute ===<br />
<br />
<pre><br />
<avg_color r = "100" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> g attribute ===<br />
<br />
<pre><br />
<avg_color ... g = "128" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> b attribute ===<br />
<br />
<pre><br />
<avg_color ... b = "47" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
== Object XML -> MaterialPath element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
=== MaterialPath element -> element text ===<br />
<br />
<pre><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
== Object XML -> Flags element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of flags that will be applied to this object, if set to true. Some of these flags affect rendering (e.g. <code>double_sided</code>), some affect physics (e.g. <code>no_collision</code>), and others affect gameplay interactions with this object (e.g. <code>bush_collision</code>).<br />
<br />
=== Flags element -> transparent attribute ===<br />
<br />
<pre><br />
<Flags transparent = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will be rendered in the transparent rendering pass.<br><br />
This flag doesn't make the object transparent on its own, and must also be coupled with transparent shader flags and a transparency map texture.<br />
<br />
=== Flags element -> no_collision attribute ===<br />
<br />
<pre><br />
<Flags no_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will not trigger collisions with players, items, or weapons.<br><br />
<br />
=== Flags element -> clamp_texture attribute ===<br />
<br />
<pre><br />
<Flags clamp_texture = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will render with its texture clamped at its edges, instead of repeating.<br><br />
<br />
=== Flags element -> bush_collision attribute ===<br />
<br />
<pre><br />
<Flags bush_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will trigger jiggle physics when items and characters collide with it. Physics objects will also be slowed down when interacting with it, but not completely blocked. It will also impact line of sight.<br />
<br />
=== Flags element -> terrain_fixed attribute ===<br />
<br />
<pre><br />
<Flags terrain_fixed = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will be locked to the terrain when placed.<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> dynamic attribute ===<br />
<br />
<pre><br />
<Flags dynamic = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will be considered to move by script, and the physics engine will use that information for optimization<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> double_sided attribute ===<br />
<br />
<pre><br />
<Flags double_sided = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will have its polygons rendered double-sided. This is useful for objects such as flags and cloth, that have no thickness.<br />
<br />
== Object XML -> GroundOffset element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<GroundOffset>0.5</GroundOffset><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The default value is <code>0.0</code>. The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
=== GroundOffset element -> element text ===<br />
<br />
<pre><br />
<GroundOffset>0.5</GroundOffset><br />
</pre><br />
<br />
'''Required''' - Decimal value. The default value (when the element is not present) is <code>0.0</code>. The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
== Object XML -> ColorTint element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The default value is <code>r = 255, g = 255, b = 255</code>, which is equivalent to no tint. The color that the object should be tinted, by default, when placed in the world. This can be overridden in the editor after the object is placed.<br />
<br />
=== ColorTint element -> r attribute ===<br />
<br />
<pre><br />
<ColorTint r = "101" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> g attribute ===<br />
<br />
<pre><br />
<ColorTint ... g = "129" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> b attribute ===<br />
<br />
<pre><br />
<ColorTint ... b = "46" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the tint color. Value is between <code>0</code> and <code>255</code>.</div>Merlynhttp://wiki.wolfire.com/index.php?title=Overgrowth_Object_Xml_File_Format&diff=6267Overgrowth Object Xml File Format2023-09-11T04:37:13Z<p>Merlyn: /* Object XML -> Label element */</p>
<hr />
<div>This is the top-level XML file for a level object. It specifies visual parameters, some gameplay parameters, and paths for visual assets.<br><br />
Other XML file types reference this XML file type, such as [[Xml File Formats#Character XML|Character XML files]] and [[Xml File Formats#Item XML|Item XML files]].<br />
<br />
== Object XML Example ==<br />
<onlyinclude><br />
<pre><br />
<?xml version="1.0" ?><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
<Label>impale</Label><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gray_metal_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gray_metal_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/cat_cobbles_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/cat_cobbles_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gold_hexagons_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gold_hexagons_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
</DetailMaps><br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="2" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="20" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/Objects/Environment/Rocks/lichen_rock_a.xml" weight_path="Data/Textures/Terrain/forest_hills/forest_hills_not_grass.tga"<br />
normal_conform="1" density="20" min_embed="0.3" max_embed="0.7" min_scale="0.08" max_scale="0.12"<br />
view_distance="10" jitter_degrees="45" overbright="0.4" tint_weight="0.5" collision_type="static" /><br />
</DetailObjects><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
<avg_color r = "100" g = "128" b = "47" /><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
<GroundOffset>0.5</GroundOffset><br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
</onlyinclude><br />
<br />
== Object XML -> Model element ==<br />
<br />
<pre><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the obj format model file.<br />
<br />
=== Model element -> element text ===<br />
<br />
<pre><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
</pre><br />
<br />
'''Required''' - String value. Path to the obj format model file.<br />
<br />
== Object XML -> ColorMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the color map texture for the object.<br />
<br />
=== ColorMap element -> element text ===<br />
<br />
<pre><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color map texture for the object.<br />
<br />
== Object XML -> NormalMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the normal map texture for the object.<br />
<br />
=== NormalMap element -> element text ===<br />
<br />
<pre><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the normal map texture for the object.<br />
<br />
== Object XML -> TranslucencyMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the translucency map texture for the object.<br />
<br />
=== TranslucencyMap element -> element text ===<br />
<br />
<pre><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the translucency map texture for the object.<br />
<br />
== Object XML -> WindMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the wind map texture for the object.<br />
<br />
=== WindMap element -> element text ===<br />
<br />
<pre><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the wind map texture for the object.<br />
<br />
== Object XML -> SharpnessMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br><br />
'''TODO''': links to/from other file types for this field?<br />
<br />
=== SharpnessMap element -> element text ===<br />
<br />
<pre><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br />
<br />
== Object XML -> Label element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Label>impale</Label><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - This is referenced by gameplay scripts, to determine if this object is of a certain type (e.g. <code>spear</code>, <code>impale</code>, etc).<br />
<br />
=== Label element -> element text ===<br />
<br />
<pre><br />
<Label>impale</Label><br />
</pre><br />
<br />
'''Required''' - String value. This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
== Object XML -> WeightMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the weight map texture for the object.<br />
<br />
=== WeightMap element -> element text ===<br />
<br />
<pre><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the weight map texture for the object.<br />
<br />
== Object XML -> PaletteMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies a set of different tintable areas on this object. The labels are the text displayed in the editor interface. Each color channel of the specified image will be used as a mask to specify where on the object's model the tinting should be limited to.<br />
<br />
=== PaletteMap element -> element text ===<br />
<br />
<pre><br />
<PaletteMap ...><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color masks, used when there's tint parameters that limit the tint to a specific area on the object, such as character clothing colors, a tintable area on a weapon, etc.<br />
<br />
=== PaletteMap element -> label_red attribute ===<br />
<br />
<pre><br />
<PaletteMap label_red="Clothing Color 1"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the red channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_green attribute ===<br />
<br />
<pre><br />
<PaletteMap label_green="Clothing Color 2"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the green channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_blue attribute ===<br />
<br />
<pre><br />
<PaletteMap label_blue="Clothing Color 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the blue channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_alpha attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 4"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the alpha channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_other attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 5"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the "other" channel of the tint mask image.<br><br />
'''TODO''': What the heck even is a "other" channel on an image? Does this even do anything in code, besides get parsed? -merlyn<br />
<br />
== Object XML -> DetailMaps element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
...<br />
</DetailMaps><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary material layers that provide fine, repeated visual detail on top of the object's main texture layers.<br />
<br />
== Object XML -> DetailMaps element -> DetailMap element ==<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
</pre><br />
<br />
'''Optional''' - The parameters for the detail map textures that repeat across the model, providing finer-scale detail. There can be up to four of these.<br />
<br />
=== DetailMap element -> colorpath attribute ===<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for this detail map's color map texture.<br />
<br />
=== DetailMap element -> normalpath attribute ===<br />
<br />
<pre><br />
<DetailMap normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the detail map's normal map texture.<br />
<br />
=== DetailMap element -> materialpath attribute ===<br />
<br />
<pre><br />
<DetailMap materialpath="Data/Materials/wood.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the given detail map level.<br><br />
'''TODO''': What is this used for? Aren't detail maps a visual-only thing? -merlyn<br />
<br />
== Object XML -> DetailObjects element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml"<br />
weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3"<br />
min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
...<br />
</DetailObjects><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary objects that will be scattered randomly to provide fine, repeated visual detail on top of the object's main surface.<br />
<br />
== Object XML -> DetailObjects element -> DetailObject element ==<br />
<br />
<pre><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml"<br />
weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3"<br />
min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0.4"<br />
tint_weight="0.5" collision_type="static" /><br />
</pre><br />
<br />
'''Optional''' - A secondary object type that will be scattered randomly to provide fine, repeated visual detail on top of the object's main surface.<br />
<br />
=== DetailObject element -> obj_path attribute ===<br />
<br />
<pre><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Object XML|Object XML]] for the given detail object type. Will provide rendering parameters for the detail objects.<br />
<br />
=== DetailObject element -> weight_path attribute ===<br />
<br />
<pre><br />
<DetailObject weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image that specifies the weight densities for the detail object scattering.<br />
<br />
=== DetailObject element -> normal_conform attribute ===<br />
<br />
<pre><br />
<DetailObject normal_conform="0.9" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies how much the normal of the detail objects will be shifted to match the normal of the surface they are decorating.<br><br />
'''TODO''': What are the units? -merlyn<br />
<br />
=== DetailObject element -> density attribute ===<br />
<br />
<pre><br />
<DetailObject density="3" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies how many of the detail objects should be placed per area, upon the surface they decorate.<br><br />
'''TODO''': What are the units? -merlyn<br />
<br />
=== DetailObject element -> min_embed attribute ===<br />
<br />
<pre><br />
<DetailObject min_embed="-0.2" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the deepest that detail objects will be embedded into the surface of the object they decorate. The actual value is random, and this is the deepest range value.<br />
<br />
=== DetailObject element -> max_embed attribute ===<br />
<br />
<pre><br />
<DetailObject max_embed="0.0" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the shallowest that detail objects will be embedded into the surface of the object they decorate. The actual value is random, and this is the shallowest range value.<br />
<br />
=== DetailObject element -> min_scale attribute ===<br />
<br />
<pre><br />
<DetailObject min_scale="4.0" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies the smallest value that detail objects will be scaled to. The actual value is random, and this is the smallest range value.<br />
<br />
=== DetailObject element -> max_scale attribute ===<br />
<br />
<pre><br />
<DetailObject max_scale="6.8" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies the largest value that detail objects will be scaled to. The actual value is random, and this is the largest range value.<br />
<br />
=== DetailObject element -> view_distance attribute ===<br />
<br />
<pre><br />
<DetailObject view_distance="10" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>30.0</code>. Specifies the farthest distance that the detail object will be visible from. Values are specified in game units (meters).<br />
<br />
=== DetailObject element -> jitter_degrees attribute ===<br />
<br />
<pre><br />
<DetailObject jitter_degrees="10" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the maximum number of degrees to randomly rotate the object, to keep detail objects from awkwardly all pointing directly upward, and to increase visual variety.<br />
<br />
=== DetailObject element -> overbright attribute ===<br />
<br />
<pre><br />
<DetailObject overbright="0.4" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the overbright value to render the object with.<br><br />
'''TODO''': Need a better description. Units? -merlyn<br />
<br />
=== DetailObject element -> tint_weight attribute ===<br />
<br />
<pre><br />
<DetailObject tint_weight="0.5" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies the blend percentage between the detail object's tint, and the tint it inherits from the object's surface it decorates. The value should be between <code>0.0</code> and <code>1.0</code>.<br><br />
'''TODO''': Is this accurate? Is it the blend with other detail object layers or the parent layer? -merlyn<br />
<br />
=== DetailObject element -> collision_type attribute ===<br />
<br />
<pre><br />
<DetailObject collision_type="static" ... /><br />
</pre><br />
<br />
'''Optional''' - Enumerated value. The default value is unset, which will result in an object with dynamic collision. Specifies the type of collision this object should have with moving objects in the world. Valid values are <code>static</code>, <code>plant</code>, and unset.<br />
<br />
== Object XML -> ShaderName element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
=== ShaderName element -> element text ===<br />
<br />
<pre><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
</pre><br />
<br />
'''Required''' - String value. The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
== Object XML -> avg_color element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<avg_color r = "100" g = "128" b = "47" /><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The default value is <code>r = 200, g = 200, b = 200</code>, which is equivalent to a light grey. The color is used when the object is used as a detail object, and the detail is faded out while getting close to the max allowed draw distance. For other scenarios, such as when just placing the object normally in a level, the value seems to go unused.<br />
<br />
=== avg_color element -> r attribute ===<br />
<br />
<pre><br />
<avg_color r = "100" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> g attribute ===<br />
<br />
<pre><br />
<avg_color ... g = "128" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> b attribute ===<br />
<br />
<pre><br />
<avg_color ... b = "47" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
== Object XML -> MaterialPath element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
=== MaterialPath element -> element text ===<br />
<br />
<pre><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
== Object XML -> Flags element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of flags that will be applied to this object, if set to true. Some of these flags affect rendering (e.g. <code>double_sided</code>), some affect physics (e.g. <code>no_collision</code>), and others affect gameplay interactions with this object (e.g. <code>bush_collision</code>).<br />
<br />
=== Flags element -> transparent attribute ===<br />
<br />
<pre><br />
<Flags transparent = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will be rendered in the transparent rendering pass.<br><br />
This flag doesn't make the object transparent on its own, and must also be coupled with transparent shader flags and a transparency map texture.<br />
<br />
=== Flags element -> no_collision attribute ===<br />
<br />
<pre><br />
<Flags no_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will not trigger collisions with players, items, or weapons.<br><br />
<br />
=== Flags element -> clamp_texture attribute ===<br />
<br />
<pre><br />
<Flags clamp_texture = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will render with its texture clamped at its edges, instead of repeating.<br><br />
<br />
=== Flags element -> bush_collision attribute ===<br />
<br />
<pre><br />
<Flags bush_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will trigger jiggle physics when items and characters collide with it. Physics objects will also be slowed down when interacting with it, but not completely blocked. It will also impact line of sight.<br />
<br />
=== Flags element -> terrain_fixed attribute ===<br />
<br />
<pre><br />
<Flags terrain_fixed = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will be locked to the terrain when placed.<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> dynamic attribute ===<br />
<br />
<pre><br />
<Flags dynamic = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will be considered to move by script, and the physics engine will use that information for optimization<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> double_sided attribute ===<br />
<br />
<pre><br />
<Flags double_sided = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will have its polygons rendered double-sided. This is useful for objects such as flags and cloth, that have no thickness.<br />
<br />
== Object XML -> GroundOffset element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<GroundOffset>0.5</GroundOffset><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The default value is <code>0.0</code>. The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
=== GroundOffset element -> element text ===<br />
<br />
<pre><br />
<GroundOffset>0.5</GroundOffset><br />
</pre><br />
<br />
'''Required''' - Decimal value. The default value (when the element is not present) is <code>0.0</code>. The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
== Object XML -> ColorTint element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The default value is <code>r = 255, g = 255, b = 255</code>, which is equivalent to no tint. The color that the object should be tinted, by default, when placed in the world. This can be overridden in the editor after the object is placed.<br />
<br />
=== ColorTint element -> r attribute ===<br />
<br />
<pre><br />
<ColorTint r = "101" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> g attribute ===<br />
<br />
<pre><br />
<ColorTint ... g = "129" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> b attribute ===<br />
<br />
<pre><br />
<ColorTint ... b = "46" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the tint color. Value is between <code>0</code> and <code>255</code>.</div>Merlynhttp://wiki.wolfire.com/index.php?title=Overgrowth_Object_Xml_File_Format&diff=6266Overgrowth Object Xml File Format2023-09-11T04:30:17Z<p>Merlyn: /* Object XML -> avg_color element */</p>
<hr />
<div>This is the top-level XML file for a level object. It specifies visual parameters, some gameplay parameters, and paths for visual assets.<br><br />
Other XML file types reference this XML file type, such as [[Xml File Formats#Character XML|Character XML files]] and [[Xml File Formats#Item XML|Item XML files]].<br />
<br />
== Object XML Example ==<br />
<onlyinclude><br />
<pre><br />
<?xml version="1.0" ?><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
<Label>impale</Label><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gray_metal_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gray_metal_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/cat_cobbles_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/cat_cobbles_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gold_hexagons_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gold_hexagons_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
</DetailMaps><br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="2" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="20" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/Objects/Environment/Rocks/lichen_rock_a.xml" weight_path="Data/Textures/Terrain/forest_hills/forest_hills_not_grass.tga"<br />
normal_conform="1" density="20" min_embed="0.3" max_embed="0.7" min_scale="0.08" max_scale="0.12"<br />
view_distance="10" jitter_degrees="45" overbright="0.4" tint_weight="0.5" collision_type="static" /><br />
</DetailObjects><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
<avg_color r = "100" g = "128" b = "47" /><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
<GroundOffset>0.5</GroundOffset><br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
</onlyinclude><br />
<br />
== Object XML -> Model element ==<br />
<br />
<pre><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the obj format model file.<br />
<br />
=== Model element -> element text ===<br />
<br />
<pre><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
</pre><br />
<br />
'''Required''' - String value. Path to the obj format model file.<br />
<br />
== Object XML -> ColorMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the color map texture for the object.<br />
<br />
=== ColorMap element -> element text ===<br />
<br />
<pre><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color map texture for the object.<br />
<br />
== Object XML -> NormalMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the normal map texture for the object.<br />
<br />
=== NormalMap element -> element text ===<br />
<br />
<pre><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the normal map texture for the object.<br />
<br />
== Object XML -> TranslucencyMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the translucency map texture for the object.<br />
<br />
=== TranslucencyMap element -> element text ===<br />
<br />
<pre><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the translucency map texture for the object.<br />
<br />
== Object XML -> WindMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the wind map texture for the object.<br />
<br />
=== WindMap element -> element text ===<br />
<br />
<pre><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the wind map texture for the object.<br />
<br />
== Object XML -> SharpnessMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br><br />
'''TODO''': links to/from other file types for this field?<br />
<br />
=== SharpnessMap element -> element text ===<br />
<br />
<pre><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br />
<br />
== Object XML -> Label element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Label>impale</Label><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
=== Label element -> element text ===<br />
<br />
<pre><br />
<Label>impale</Label><br />
</pre><br />
<br />
'''Required''' - String value. This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
== Object XML -> WeightMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the weight map texture for the object.<br />
<br />
=== WeightMap element -> element text ===<br />
<br />
<pre><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the weight map texture for the object.<br />
<br />
== Object XML -> PaletteMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies a set of different tintable areas on this object. The labels are the text displayed in the editor interface. Each color channel of the specified image will be used as a mask to specify where on the object's model the tinting should be limited to.<br />
<br />
=== PaletteMap element -> element text ===<br />
<br />
<pre><br />
<PaletteMap ...><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color masks, used when there's tint parameters that limit the tint to a specific area on the object, such as character clothing colors, a tintable area on a weapon, etc.<br />
<br />
=== PaletteMap element -> label_red attribute ===<br />
<br />
<pre><br />
<PaletteMap label_red="Clothing Color 1"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the red channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_green attribute ===<br />
<br />
<pre><br />
<PaletteMap label_green="Clothing Color 2"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the green channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_blue attribute ===<br />
<br />
<pre><br />
<PaletteMap label_blue="Clothing Color 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the blue channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_alpha attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 4"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the alpha channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_other attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 5"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the "other" channel of the tint mask image.<br><br />
'''TODO''': What the heck even is a "other" channel on an image? Does this even do anything in code, besides get parsed? -merlyn<br />
<br />
== Object XML -> DetailMaps element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
...<br />
</DetailMaps><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary material layers that provide fine, repeated visual detail on top of the object's main texture layers.<br />
<br />
== Object XML -> DetailMaps element -> DetailMap element ==<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
</pre><br />
<br />
'''Optional''' - The parameters for the detail map textures that repeat across the model, providing finer-scale detail. There can be up to four of these.<br />
<br />
=== DetailMap element -> colorpath attribute ===<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for this detail map's color map texture.<br />
<br />
=== DetailMap element -> normalpath attribute ===<br />
<br />
<pre><br />
<DetailMap normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the detail map's normal map texture.<br />
<br />
=== DetailMap element -> materialpath attribute ===<br />
<br />
<pre><br />
<DetailMap materialpath="Data/Materials/wood.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the given detail map level.<br><br />
'''TODO''': What is this used for? Aren't detail maps a visual-only thing? -merlyn<br />
<br />
== Object XML -> DetailObjects element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml"<br />
weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3"<br />
min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
...<br />
</DetailObjects><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary objects that will be scattered randomly to provide fine, repeated visual detail on top of the object's main surface.<br />
<br />
== Object XML -> DetailObjects element -> DetailObject element ==<br />
<br />
<pre><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml"<br />
weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3"<br />
min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0.4"<br />
tint_weight="0.5" collision_type="static" /><br />
</pre><br />
<br />
'''Optional''' - A secondary object type that will be scattered randomly to provide fine, repeated visual detail on top of the object's main surface.<br />
<br />
=== DetailObject element -> obj_path attribute ===<br />
<br />
<pre><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Object XML|Object XML]] for the given detail object type. Will provide rendering parameters for the detail objects.<br />
<br />
=== DetailObject element -> weight_path attribute ===<br />
<br />
<pre><br />
<DetailObject weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image that specifies the weight densities for the detail object scattering.<br />
<br />
=== DetailObject element -> normal_conform attribute ===<br />
<br />
<pre><br />
<DetailObject normal_conform="0.9" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies how much the normal of the detail objects will be shifted to match the normal of the surface they are decorating.<br><br />
'''TODO''': What are the units? -merlyn<br />
<br />
=== DetailObject element -> density attribute ===<br />
<br />
<pre><br />
<DetailObject density="3" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies how many of the detail objects should be placed per area, upon the surface they decorate.<br><br />
'''TODO''': What are the units? -merlyn<br />
<br />
=== DetailObject element -> min_embed attribute ===<br />
<br />
<pre><br />
<DetailObject min_embed="-0.2" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the deepest that detail objects will be embedded into the surface of the object they decorate. The actual value is random, and this is the deepest range value.<br />
<br />
=== DetailObject element -> max_embed attribute ===<br />
<br />
<pre><br />
<DetailObject max_embed="0.0" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the shallowest that detail objects will be embedded into the surface of the object they decorate. The actual value is random, and this is the shallowest range value.<br />
<br />
=== DetailObject element -> min_scale attribute ===<br />
<br />
<pre><br />
<DetailObject min_scale="4.0" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies the smallest value that detail objects will be scaled to. The actual value is random, and this is the smallest range value.<br />
<br />
=== DetailObject element -> max_scale attribute ===<br />
<br />
<pre><br />
<DetailObject max_scale="6.8" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies the largest value that detail objects will be scaled to. The actual value is random, and this is the largest range value.<br />
<br />
=== DetailObject element -> view_distance attribute ===<br />
<br />
<pre><br />
<DetailObject view_distance="10" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>30.0</code>. Specifies the farthest distance that the detail object will be visible from. Values are specified in game units (meters).<br />
<br />
=== DetailObject element -> jitter_degrees attribute ===<br />
<br />
<pre><br />
<DetailObject jitter_degrees="10" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the maximum number of degrees to randomly rotate the object, to keep detail objects from awkwardly all pointing directly upward, and to increase visual variety.<br />
<br />
=== DetailObject element -> overbright attribute ===<br />
<br />
<pre><br />
<DetailObject overbright="0.4" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the overbright value to render the object with.<br><br />
'''TODO''': Need a better description. Units? -merlyn<br />
<br />
=== DetailObject element -> tint_weight attribute ===<br />
<br />
<pre><br />
<DetailObject tint_weight="0.5" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies the blend percentage between the detail object's tint, and the tint it inherits from the object's surface it decorates. The value should be between <code>0.0</code> and <code>1.0</code>.<br><br />
'''TODO''': Is this accurate? Is it the blend with other detail object layers or the parent layer? -merlyn<br />
<br />
=== DetailObject element -> collision_type attribute ===<br />
<br />
<pre><br />
<DetailObject collision_type="static" ... /><br />
</pre><br />
<br />
'''Optional''' - Enumerated value. The default value is unset, which will result in an object with dynamic collision. Specifies the type of collision this object should have with moving objects in the world. Valid values are <code>static</code>, <code>plant</code>, and unset.<br />
<br />
== Object XML -> ShaderName element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
=== ShaderName element -> element text ===<br />
<br />
<pre><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
</pre><br />
<br />
'''Required''' - String value. The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
== Object XML -> avg_color element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<avg_color r = "100" g = "128" b = "47" /><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The default value is <code>r = 200, g = 200, b = 200</code>, which is equivalent to a light grey. The color is used when the object is used as a detail object, and the detail is faded out while getting close to the max allowed draw distance. For other scenarios, such as when just placing the object normally in a level, the value seems to go unused.<br />
<br />
=== avg_color element -> r attribute ===<br />
<br />
<pre><br />
<avg_color r = "100" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> g attribute ===<br />
<br />
<pre><br />
<avg_color ... g = "128" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> b attribute ===<br />
<br />
<pre><br />
<avg_color ... b = "47" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
== Object XML -> MaterialPath element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
=== MaterialPath element -> element text ===<br />
<br />
<pre><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
== Object XML -> Flags element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of flags that will be applied to this object, if set to true. Some of these flags affect rendering (e.g. <code>double_sided</code>), some affect physics (e.g. <code>no_collision</code>), and others affect gameplay interactions with this object (e.g. <code>bush_collision</code>).<br />
<br />
=== Flags element -> transparent attribute ===<br />
<br />
<pre><br />
<Flags transparent = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will be rendered in the transparent rendering pass.<br><br />
This flag doesn't make the object transparent on its own, and must also be coupled with transparent shader flags and a transparency map texture.<br />
<br />
=== Flags element -> no_collision attribute ===<br />
<br />
<pre><br />
<Flags no_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will not trigger collisions with players, items, or weapons.<br><br />
<br />
=== Flags element -> clamp_texture attribute ===<br />
<br />
<pre><br />
<Flags clamp_texture = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will render with its texture clamped at its edges, instead of repeating.<br><br />
<br />
=== Flags element -> bush_collision attribute ===<br />
<br />
<pre><br />
<Flags bush_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will trigger jiggle physics when items and characters collide with it. Physics objects will also be slowed down when interacting with it, but not completely blocked. It will also impact line of sight.<br />
<br />
=== Flags element -> terrain_fixed attribute ===<br />
<br />
<pre><br />
<Flags terrain_fixed = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will be locked to the terrain when placed.<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> dynamic attribute ===<br />
<br />
<pre><br />
<Flags dynamic = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will be considered to move by script, and the physics engine will use that information for optimization<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> double_sided attribute ===<br />
<br />
<pre><br />
<Flags double_sided = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will have its polygons rendered double-sided. This is useful for objects such as flags and cloth, that have no thickness.<br />
<br />
== Object XML -> GroundOffset element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<GroundOffset>0.5</GroundOffset><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The default value is <code>0.0</code>. The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
=== GroundOffset element -> element text ===<br />
<br />
<pre><br />
<GroundOffset>0.5</GroundOffset><br />
</pre><br />
<br />
'''Required''' - Decimal value. The default value (when the element is not present) is <code>0.0</code>. The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
== Object XML -> ColorTint element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The default value is <code>r = 255, g = 255, b = 255</code>, which is equivalent to no tint. The color that the object should be tinted, by default, when placed in the world. This can be overridden in the editor after the object is placed.<br />
<br />
=== ColorTint element -> r attribute ===<br />
<br />
<pre><br />
<ColorTint r = "101" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> g attribute ===<br />
<br />
<pre><br />
<ColorTint ... g = "129" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> b attribute ===<br />
<br />
<pre><br />
<ColorTint ... b = "46" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the tint color. Value is between <code>0</code> and <code>255</code>.</div>Merlynhttp://wiki.wolfire.com/index.php?title=Overgrowth_Object_Xml_File_Format&diff=6265Overgrowth Object Xml File Format2023-09-11T04:06:46Z<p>Merlyn: /* Object XML -> avg_color element */</p>
<hr />
<div>This is the top-level XML file for a level object. It specifies visual parameters, some gameplay parameters, and paths for visual assets.<br><br />
Other XML file types reference this XML file type, such as [[Xml File Formats#Character XML|Character XML files]] and [[Xml File Formats#Item XML|Item XML files]].<br />
<br />
== Object XML Example ==<br />
<onlyinclude><br />
<pre><br />
<?xml version="1.0" ?><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
<Label>impale</Label><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gray_metal_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gray_metal_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/cat_cobbles_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/cat_cobbles_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gold_hexagons_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gold_hexagons_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
</DetailMaps><br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="2" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="20" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/Objects/Environment/Rocks/lichen_rock_a.xml" weight_path="Data/Textures/Terrain/forest_hills/forest_hills_not_grass.tga"<br />
normal_conform="1" density="20" min_embed="0.3" max_embed="0.7" min_scale="0.08" max_scale="0.12"<br />
view_distance="10" jitter_degrees="45" overbright="0.4" tint_weight="0.5" collision_type="static" /><br />
</DetailObjects><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
<avg_color r = "100" g = "128" b = "47" /><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
<GroundOffset>0.5</GroundOffset><br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
</onlyinclude><br />
<br />
== Object XML -> Model element ==<br />
<br />
<pre><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the obj format model file.<br />
<br />
=== Model element -> element text ===<br />
<br />
<pre><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
</pre><br />
<br />
'''Required''' - String value. Path to the obj format model file.<br />
<br />
== Object XML -> ColorMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the color map texture for the object.<br />
<br />
=== ColorMap element -> element text ===<br />
<br />
<pre><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color map texture for the object.<br />
<br />
== Object XML -> NormalMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the normal map texture for the object.<br />
<br />
=== NormalMap element -> element text ===<br />
<br />
<pre><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the normal map texture for the object.<br />
<br />
== Object XML -> TranslucencyMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the translucency map texture for the object.<br />
<br />
=== TranslucencyMap element -> element text ===<br />
<br />
<pre><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the translucency map texture for the object.<br />
<br />
== Object XML -> WindMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the wind map texture for the object.<br />
<br />
=== WindMap element -> element text ===<br />
<br />
<pre><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the wind map texture for the object.<br />
<br />
== Object XML -> SharpnessMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br><br />
'''TODO''': links to/from other file types for this field?<br />
<br />
=== SharpnessMap element -> element text ===<br />
<br />
<pre><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br />
<br />
== Object XML -> Label element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Label>impale</Label><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
=== Label element -> element text ===<br />
<br />
<pre><br />
<Label>impale</Label><br />
</pre><br />
<br />
'''Required''' - String value. This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
== Object XML -> WeightMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the weight map texture for the object.<br />
<br />
=== WeightMap element -> element text ===<br />
<br />
<pre><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the weight map texture for the object.<br />
<br />
== Object XML -> PaletteMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies a set of different tintable areas on this object. The labels are the text displayed in the editor interface. Each color channel of the specified image will be used as a mask to specify where on the object's model the tinting should be limited to.<br />
<br />
=== PaletteMap element -> element text ===<br />
<br />
<pre><br />
<PaletteMap ...><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color masks, used when there's tint parameters that limit the tint to a specific area on the object, such as character clothing colors, a tintable area on a weapon, etc.<br />
<br />
=== PaletteMap element -> label_red attribute ===<br />
<br />
<pre><br />
<PaletteMap label_red="Clothing Color 1"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the red channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_green attribute ===<br />
<br />
<pre><br />
<PaletteMap label_green="Clothing Color 2"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the green channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_blue attribute ===<br />
<br />
<pre><br />
<PaletteMap label_blue="Clothing Color 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the blue channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_alpha attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 4"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the alpha channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_other attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 5"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the "other" channel of the tint mask image.<br><br />
'''TODO''': What the heck even is a "other" channel on an image? Does this even do anything in code, besides get parsed? -merlyn<br />
<br />
== Object XML -> DetailMaps element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
...<br />
</DetailMaps><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary material layers that provide fine, repeated visual detail on top of the object's main texture layers.<br />
<br />
== Object XML -> DetailMaps element -> DetailMap element ==<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
</pre><br />
<br />
'''Optional''' - The parameters for the detail map textures that repeat across the model, providing finer-scale detail. There can be up to four of these.<br />
<br />
=== DetailMap element -> colorpath attribute ===<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for this detail map's color map texture.<br />
<br />
=== DetailMap element -> normalpath attribute ===<br />
<br />
<pre><br />
<DetailMap normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the detail map's normal map texture.<br />
<br />
=== DetailMap element -> materialpath attribute ===<br />
<br />
<pre><br />
<DetailMap materialpath="Data/Materials/wood.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the given detail map level.<br><br />
'''TODO''': What is this used for? Aren't detail maps a visual-only thing? -merlyn<br />
<br />
== Object XML -> DetailObjects element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml"<br />
weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3"<br />
min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
...<br />
</DetailObjects><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary objects that will be scattered randomly to provide fine, repeated visual detail on top of the object's main surface.<br />
<br />
== Object XML -> DetailObjects element -> DetailObject element ==<br />
<br />
<pre><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml"<br />
weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3"<br />
min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0.4"<br />
tint_weight="0.5" collision_type="static" /><br />
</pre><br />
<br />
'''Optional''' - A secondary object type that will be scattered randomly to provide fine, repeated visual detail on top of the object's main surface.<br />
<br />
=== DetailObject element -> obj_path attribute ===<br />
<br />
<pre><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Object XML|Object XML]] for the given detail object type. Will provide rendering parameters for the detail objects.<br />
<br />
=== DetailObject element -> weight_path attribute ===<br />
<br />
<pre><br />
<DetailObject weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image that specifies the weight densities for the detail object scattering.<br />
<br />
=== DetailObject element -> normal_conform attribute ===<br />
<br />
<pre><br />
<DetailObject normal_conform="0.9" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies how much the normal of the detail objects will be shifted to match the normal of the surface they are decorating.<br><br />
'''TODO''': What are the units? -merlyn<br />
<br />
=== DetailObject element -> density attribute ===<br />
<br />
<pre><br />
<DetailObject density="3" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies how many of the detail objects should be placed per area, upon the surface they decorate.<br><br />
'''TODO''': What are the units? -merlyn<br />
<br />
=== DetailObject element -> min_embed attribute ===<br />
<br />
<pre><br />
<DetailObject min_embed="-0.2" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the deepest that detail objects will be embedded into the surface of the object they decorate. The actual value is random, and this is the deepest range value.<br />
<br />
=== DetailObject element -> max_embed attribute ===<br />
<br />
<pre><br />
<DetailObject max_embed="0.0" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the shallowest that detail objects will be embedded into the surface of the object they decorate. The actual value is random, and this is the shallowest range value.<br />
<br />
=== DetailObject element -> min_scale attribute ===<br />
<br />
<pre><br />
<DetailObject min_scale="4.0" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies the smallest value that detail objects will be scaled to. The actual value is random, and this is the smallest range value.<br />
<br />
=== DetailObject element -> max_scale attribute ===<br />
<br />
<pre><br />
<DetailObject max_scale="6.8" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies the largest value that detail objects will be scaled to. The actual value is random, and this is the largest range value.<br />
<br />
=== DetailObject element -> view_distance attribute ===<br />
<br />
<pre><br />
<DetailObject view_distance="10" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>30.0</code>. Specifies the farthest distance that the detail object will be visible from. Values are specified in game units (meters).<br />
<br />
=== DetailObject element -> jitter_degrees attribute ===<br />
<br />
<pre><br />
<DetailObject jitter_degrees="10" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the maximum number of degrees to randomly rotate the object, to keep detail objects from awkwardly all pointing directly upward, and to increase visual variety.<br />
<br />
=== DetailObject element -> overbright attribute ===<br />
<br />
<pre><br />
<DetailObject overbright="0.4" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the overbright value to render the object with.<br><br />
'''TODO''': Need a better description. Units? -merlyn<br />
<br />
=== DetailObject element -> tint_weight attribute ===<br />
<br />
<pre><br />
<DetailObject tint_weight="0.5" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies the blend percentage between the detail object's tint, and the tint it inherits from the object's surface it decorates. The value should be between <code>0.0</code> and <code>1.0</code>.<br><br />
'''TODO''': Is this accurate? Is it the blend with other detail object layers or the parent layer? -merlyn<br />
<br />
=== DetailObject element -> collision_type attribute ===<br />
<br />
<pre><br />
<DetailObject collision_type="static" ... /><br />
</pre><br />
<br />
'''Optional''' - Enumerated value. The default value is unset, which will result in an object with dynamic collision. Specifies the type of collision this object should have with moving objects in the world. Valid values are <code>static</code>, <code>plant</code>, and unset.<br />
<br />
== Object XML -> ShaderName element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
=== ShaderName element -> element text ===<br />
<br />
<pre><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
</pre><br />
<br />
'''Required''' - String value. The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
== Object XML -> avg_color element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<avg_color r = "100" g = "128" b = "47" /><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The default value is <code>r = 200, g = 200, b = 200</code>, which is equivalent to a light grey. The color that the object should use for rendering acceleration, e.g. if a texture hasn't loaded in, or for simplified lighting.<br><br />
'''TODO''': Is this even remotely correct? Kinda just guessing, without looking at the code. -merlyn<br />
<br />
=== avg_color element -> r attribute ===<br />
<br />
<pre><br />
<avg_color r = "100" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> g attribute ===<br />
<br />
<pre><br />
<avg_color ... g = "128" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> b attribute ===<br />
<br />
<pre><br />
<avg_color ... b = "47" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
== Object XML -> MaterialPath element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
=== MaterialPath element -> element text ===<br />
<br />
<pre><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
== Object XML -> Flags element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of flags that will be applied to this object, if set to true. Some of these flags affect rendering (e.g. <code>double_sided</code>), some affect physics (e.g. <code>no_collision</code>), and others affect gameplay interactions with this object (e.g. <code>bush_collision</code>).<br />
<br />
=== Flags element -> transparent attribute ===<br />
<br />
<pre><br />
<Flags transparent = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will be rendered in the transparent rendering pass.<br><br />
This flag doesn't make the object transparent on its own, and must also be coupled with transparent shader flags and a transparency map texture.<br />
<br />
=== Flags element -> no_collision attribute ===<br />
<br />
<pre><br />
<Flags no_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will not trigger collisions with players, items, or weapons.<br><br />
<br />
=== Flags element -> clamp_texture attribute ===<br />
<br />
<pre><br />
<Flags clamp_texture = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will render with its texture clamped at its edges, instead of repeating.<br><br />
<br />
=== Flags element -> bush_collision attribute ===<br />
<br />
<pre><br />
<Flags bush_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will trigger jiggle physics when items and characters collide with it. Physics objects will also be slowed down when interacting with it, but not completely blocked. It will also impact line of sight.<br />
<br />
=== Flags element -> terrain_fixed attribute ===<br />
<br />
<pre><br />
<Flags terrain_fixed = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will be locked to the terrain when placed.<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> dynamic attribute ===<br />
<br />
<pre><br />
<Flags dynamic = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will be considered to move by script, and the physics engine will use that information for optimization<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> double_sided attribute ===<br />
<br />
<pre><br />
<Flags double_sided = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will have its polygons rendered double-sided. This is useful for objects such as flags and cloth, that have no thickness.<br />
<br />
== Object XML -> GroundOffset element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<GroundOffset>0.5</GroundOffset><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The default value is <code>0.0</code>. The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
=== GroundOffset element -> element text ===<br />
<br />
<pre><br />
<GroundOffset>0.5</GroundOffset><br />
</pre><br />
<br />
'''Required''' - Decimal value. The default value (when the element is not present) is <code>0.0</code>. The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
== Object XML -> ColorTint element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The default value is <code>r = 255, g = 255, b = 255</code>, which is equivalent to no tint. The color that the object should be tinted, by default, when placed in the world. This can be overridden in the editor after the object is placed.<br />
<br />
=== ColorTint element -> r attribute ===<br />
<br />
<pre><br />
<ColorTint r = "101" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> g attribute ===<br />
<br />
<pre><br />
<ColorTint ... g = "129" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> b attribute ===<br />
<br />
<pre><br />
<ColorTint ... b = "46" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the tint color. Value is between <code>0</code> and <code>255</code>.</div>Merlynhttp://wiki.wolfire.com/index.php?title=Overgrowth_Object_Xml_File_Format&diff=6264Overgrowth Object Xml File Format2023-09-11T04:04:39Z<p>Merlyn: /* Object XML -> ColorTint element */</p>
<hr />
<div>This is the top-level XML file for a level object. It specifies visual parameters, some gameplay parameters, and paths for visual assets.<br><br />
Other XML file types reference this XML file type, such as [[Xml File Formats#Character XML|Character XML files]] and [[Xml File Formats#Item XML|Item XML files]].<br />
<br />
== Object XML Example ==<br />
<onlyinclude><br />
<pre><br />
<?xml version="1.0" ?><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
<Label>impale</Label><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gray_metal_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gray_metal_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/cat_cobbles_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/cat_cobbles_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gold_hexagons_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gold_hexagons_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
</DetailMaps><br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="2" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="20" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/Objects/Environment/Rocks/lichen_rock_a.xml" weight_path="Data/Textures/Terrain/forest_hills/forest_hills_not_grass.tga"<br />
normal_conform="1" density="20" min_embed="0.3" max_embed="0.7" min_scale="0.08" max_scale="0.12"<br />
view_distance="10" jitter_degrees="45" overbright="0.4" tint_weight="0.5" collision_type="static" /><br />
</DetailObjects><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
<avg_color r = "100" g = "128" b = "47" /><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
<GroundOffset>0.5</GroundOffset><br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
</onlyinclude><br />
<br />
== Object XML -> Model element ==<br />
<br />
<pre><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the obj format model file.<br />
<br />
=== Model element -> element text ===<br />
<br />
<pre><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
</pre><br />
<br />
'''Required''' - String value. Path to the obj format model file.<br />
<br />
== Object XML -> ColorMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the color map texture for the object.<br />
<br />
=== ColorMap element -> element text ===<br />
<br />
<pre><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color map texture for the object.<br />
<br />
== Object XML -> NormalMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the normal map texture for the object.<br />
<br />
=== NormalMap element -> element text ===<br />
<br />
<pre><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the normal map texture for the object.<br />
<br />
== Object XML -> TranslucencyMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the translucency map texture for the object.<br />
<br />
=== TranslucencyMap element -> element text ===<br />
<br />
<pre><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the translucency map texture for the object.<br />
<br />
== Object XML -> WindMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the wind map texture for the object.<br />
<br />
=== WindMap element -> element text ===<br />
<br />
<pre><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the wind map texture for the object.<br />
<br />
== Object XML -> SharpnessMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br><br />
'''TODO''': links to/from other file types for this field?<br />
<br />
=== SharpnessMap element -> element text ===<br />
<br />
<pre><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br />
<br />
== Object XML -> Label element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Label>impale</Label><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
=== Label element -> element text ===<br />
<br />
<pre><br />
<Label>impale</Label><br />
</pre><br />
<br />
'''Required''' - String value. This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
== Object XML -> WeightMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the weight map texture for the object.<br />
<br />
=== WeightMap element -> element text ===<br />
<br />
<pre><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the weight map texture for the object.<br />
<br />
== Object XML -> PaletteMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies a set of different tintable areas on this object. The labels are the text displayed in the editor interface. Each color channel of the specified image will be used as a mask to specify where on the object's model the tinting should be limited to.<br />
<br />
=== PaletteMap element -> element text ===<br />
<br />
<pre><br />
<PaletteMap ...><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color masks, used when there's tint parameters that limit the tint to a specific area on the object, such as character clothing colors, a tintable area on a weapon, etc.<br />
<br />
=== PaletteMap element -> label_red attribute ===<br />
<br />
<pre><br />
<PaletteMap label_red="Clothing Color 1"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the red channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_green attribute ===<br />
<br />
<pre><br />
<PaletteMap label_green="Clothing Color 2"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the green channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_blue attribute ===<br />
<br />
<pre><br />
<PaletteMap label_blue="Clothing Color 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the blue channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_alpha attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 4"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the alpha channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_other attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 5"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the "other" channel of the tint mask image.<br><br />
'''TODO''': What the heck even is a "other" channel on an image? Does this even do anything in code, besides get parsed? -merlyn<br />
<br />
== Object XML -> DetailMaps element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
...<br />
</DetailMaps><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary material layers that provide fine, repeated visual detail on top of the object's main texture layers.<br />
<br />
== Object XML -> DetailMaps element -> DetailMap element ==<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
</pre><br />
<br />
'''Optional''' - The parameters for the detail map textures that repeat across the model, providing finer-scale detail. There can be up to four of these.<br />
<br />
=== DetailMap element -> colorpath attribute ===<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for this detail map's color map texture.<br />
<br />
=== DetailMap element -> normalpath attribute ===<br />
<br />
<pre><br />
<DetailMap normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the detail map's normal map texture.<br />
<br />
=== DetailMap element -> materialpath attribute ===<br />
<br />
<pre><br />
<DetailMap materialpath="Data/Materials/wood.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the given detail map level.<br><br />
'''TODO''': What is this used for? Aren't detail maps a visual-only thing? -merlyn<br />
<br />
== Object XML -> DetailObjects element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml"<br />
weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3"<br />
min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
...<br />
</DetailObjects><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary objects that will be scattered randomly to provide fine, repeated visual detail on top of the object's main surface.<br />
<br />
== Object XML -> DetailObjects element -> DetailObject element ==<br />
<br />
<pre><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml"<br />
weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3"<br />
min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0.4"<br />
tint_weight="0.5" collision_type="static" /><br />
</pre><br />
<br />
'''Optional''' - A secondary object type that will be scattered randomly to provide fine, repeated visual detail on top of the object's main surface.<br />
<br />
=== DetailObject element -> obj_path attribute ===<br />
<br />
<pre><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Object XML|Object XML]] for the given detail object type. Will provide rendering parameters for the detail objects.<br />
<br />
=== DetailObject element -> weight_path attribute ===<br />
<br />
<pre><br />
<DetailObject weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image that specifies the weight densities for the detail object scattering.<br />
<br />
=== DetailObject element -> normal_conform attribute ===<br />
<br />
<pre><br />
<DetailObject normal_conform="0.9" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies how much the normal of the detail objects will be shifted to match the normal of the surface they are decorating.<br><br />
'''TODO''': What are the units? -merlyn<br />
<br />
=== DetailObject element -> density attribute ===<br />
<br />
<pre><br />
<DetailObject density="3" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies how many of the detail objects should be placed per area, upon the surface they decorate.<br><br />
'''TODO''': What are the units? -merlyn<br />
<br />
=== DetailObject element -> min_embed attribute ===<br />
<br />
<pre><br />
<DetailObject min_embed="-0.2" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the deepest that detail objects will be embedded into the surface of the object they decorate. The actual value is random, and this is the deepest range value.<br />
<br />
=== DetailObject element -> max_embed attribute ===<br />
<br />
<pre><br />
<DetailObject max_embed="0.0" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the shallowest that detail objects will be embedded into the surface of the object they decorate. The actual value is random, and this is the shallowest range value.<br />
<br />
=== DetailObject element -> min_scale attribute ===<br />
<br />
<pre><br />
<DetailObject min_scale="4.0" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies the smallest value that detail objects will be scaled to. The actual value is random, and this is the smallest range value.<br />
<br />
=== DetailObject element -> max_scale attribute ===<br />
<br />
<pre><br />
<DetailObject max_scale="6.8" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies the largest value that detail objects will be scaled to. The actual value is random, and this is the largest range value.<br />
<br />
=== DetailObject element -> view_distance attribute ===<br />
<br />
<pre><br />
<DetailObject view_distance="10" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>30.0</code>. Specifies the farthest distance that the detail object will be visible from. Values are specified in game units (meters).<br />
<br />
=== DetailObject element -> jitter_degrees attribute ===<br />
<br />
<pre><br />
<DetailObject jitter_degrees="10" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the maximum number of degrees to randomly rotate the object, to keep detail objects from awkwardly all pointing directly upward, and to increase visual variety.<br />
<br />
=== DetailObject element -> overbright attribute ===<br />
<br />
<pre><br />
<DetailObject overbright="0.4" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the overbright value to render the object with.<br><br />
'''TODO''': Need a better description. Units? -merlyn<br />
<br />
=== DetailObject element -> tint_weight attribute ===<br />
<br />
<pre><br />
<DetailObject tint_weight="0.5" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies the blend percentage between the detail object's tint, and the tint it inherits from the object's surface it decorates. The value should be between <code>0.0</code> and <code>1.0</code>.<br><br />
'''TODO''': Is this accurate? Is it the blend with other detail object layers or the parent layer? -merlyn<br />
<br />
=== DetailObject element -> collision_type attribute ===<br />
<br />
<pre><br />
<DetailObject collision_type="static" ... /><br />
</pre><br />
<br />
'''Optional''' - Enumerated value. The default value is unset, which will result in an object with dynamic collision. Specifies the type of collision this object should have with moving objects in the world. Valid values are <code>static</code>, <code>plant</code>, and unset.<br />
<br />
== Object XML -> ShaderName element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
=== ShaderName element -> element text ===<br />
<br />
<pre><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
</pre><br />
<br />
'''Required''' - String value. The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
== Object XML -> avg_color element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<avg_color r = "100" g = "128" b = "47" /><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should use for rendering acceleration, e.g. if a texture hasn't loaded in, or for simplified lighting.<br><br />
'''TODO''': Is this even remotely correct? Kinda just guessing, without looking at the code. -merlyn<br />
<br />
=== avg_color element -> r attribute ===<br />
<br />
<pre><br />
<avg_color r = "100" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> g attribute ===<br />
<br />
<pre><br />
<avg_color ... g = "128" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> b attribute ===<br />
<br />
<pre><br />
<avg_color ... b = "47" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
== Object XML -> MaterialPath element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
=== MaterialPath element -> element text ===<br />
<br />
<pre><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
== Object XML -> Flags element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of flags that will be applied to this object, if set to true. Some of these flags affect rendering (e.g. <code>double_sided</code>), some affect physics (e.g. <code>no_collision</code>), and others affect gameplay interactions with this object (e.g. <code>bush_collision</code>).<br />
<br />
=== Flags element -> transparent attribute ===<br />
<br />
<pre><br />
<Flags transparent = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will be rendered in the transparent rendering pass.<br><br />
This flag doesn't make the object transparent on its own, and must also be coupled with transparent shader flags and a transparency map texture.<br />
<br />
=== Flags element -> no_collision attribute ===<br />
<br />
<pre><br />
<Flags no_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will not trigger collisions with players, items, or weapons.<br><br />
<br />
=== Flags element -> clamp_texture attribute ===<br />
<br />
<pre><br />
<Flags clamp_texture = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will render with its texture clamped at its edges, instead of repeating.<br><br />
<br />
=== Flags element -> bush_collision attribute ===<br />
<br />
<pre><br />
<Flags bush_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will trigger jiggle physics when items and characters collide with it. Physics objects will also be slowed down when interacting with it, but not completely blocked. It will also impact line of sight.<br />
<br />
=== Flags element -> terrain_fixed attribute ===<br />
<br />
<pre><br />
<Flags terrain_fixed = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will be locked to the terrain when placed.<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> dynamic attribute ===<br />
<br />
<pre><br />
<Flags dynamic = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will be considered to move by script, and the physics engine will use that information for optimization<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> double_sided attribute ===<br />
<br />
<pre><br />
<Flags double_sided = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will have its polygons rendered double-sided. This is useful for objects such as flags and cloth, that have no thickness.<br />
<br />
== Object XML -> GroundOffset element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<GroundOffset>0.5</GroundOffset><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The default value is <code>0.0</code>. The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
=== GroundOffset element -> element text ===<br />
<br />
<pre><br />
<GroundOffset>0.5</GroundOffset><br />
</pre><br />
<br />
'''Required''' - Decimal value. The default value (when the element is not present) is <code>0.0</code>. The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
== Object XML -> ColorTint element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The default value is <code>r = 255, g = 255, b = 255</code>, which is equivalent to no tint. The color that the object should be tinted, by default, when placed in the world. This can be overridden in the editor after the object is placed.<br />
<br />
=== ColorTint element -> r attribute ===<br />
<br />
<pre><br />
<ColorTint r = "101" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> g attribute ===<br />
<br />
<pre><br />
<ColorTint ... g = "129" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> b attribute ===<br />
<br />
<pre><br />
<ColorTint ... b = "46" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the tint color. Value is between <code>0</code> and <code>255</code>.</div>Merlynhttp://wiki.wolfire.com/index.php?title=Overgrowth_Object_Xml_File_Format&diff=6263Overgrowth Object Xml File Format2023-09-11T03:49:23Z<p>Merlyn: /* Object XML -> GroundOffset element */</p>
<hr />
<div>This is the top-level XML file for a level object. It specifies visual parameters, some gameplay parameters, and paths for visual assets.<br><br />
Other XML file types reference this XML file type, such as [[Xml File Formats#Character XML|Character XML files]] and [[Xml File Formats#Item XML|Item XML files]].<br />
<br />
== Object XML Example ==<br />
<onlyinclude><br />
<pre><br />
<?xml version="1.0" ?><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
<Label>impale</Label><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gray_metal_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gray_metal_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/cat_cobbles_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/cat_cobbles_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gold_hexagons_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gold_hexagons_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
</DetailMaps><br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="2" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="20" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/Objects/Environment/Rocks/lichen_rock_a.xml" weight_path="Data/Textures/Terrain/forest_hills/forest_hills_not_grass.tga"<br />
normal_conform="1" density="20" min_embed="0.3" max_embed="0.7" min_scale="0.08" max_scale="0.12"<br />
view_distance="10" jitter_degrees="45" overbright="0.4" tint_weight="0.5" collision_type="static" /><br />
</DetailObjects><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
<avg_color r = "100" g = "128" b = "47" /><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
<GroundOffset>0.5</GroundOffset><br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
</onlyinclude><br />
<br />
== Object XML -> Model element ==<br />
<br />
<pre><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the obj format model file.<br />
<br />
=== Model element -> element text ===<br />
<br />
<pre><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
</pre><br />
<br />
'''Required''' - String value. Path to the obj format model file.<br />
<br />
== Object XML -> ColorMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the color map texture for the object.<br />
<br />
=== ColorMap element -> element text ===<br />
<br />
<pre><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color map texture for the object.<br />
<br />
== Object XML -> NormalMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the normal map texture for the object.<br />
<br />
=== NormalMap element -> element text ===<br />
<br />
<pre><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the normal map texture for the object.<br />
<br />
== Object XML -> TranslucencyMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the translucency map texture for the object.<br />
<br />
=== TranslucencyMap element -> element text ===<br />
<br />
<pre><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the translucency map texture for the object.<br />
<br />
== Object XML -> WindMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the wind map texture for the object.<br />
<br />
=== WindMap element -> element text ===<br />
<br />
<pre><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the wind map texture for the object.<br />
<br />
== Object XML -> SharpnessMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br><br />
'''TODO''': links to/from other file types for this field?<br />
<br />
=== SharpnessMap element -> element text ===<br />
<br />
<pre><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br />
<br />
== Object XML -> Label element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Label>impale</Label><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
=== Label element -> element text ===<br />
<br />
<pre><br />
<Label>impale</Label><br />
</pre><br />
<br />
'''Required''' - String value. This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
== Object XML -> WeightMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the weight map texture for the object.<br />
<br />
=== WeightMap element -> element text ===<br />
<br />
<pre><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the weight map texture for the object.<br />
<br />
== Object XML -> PaletteMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies a set of different tintable areas on this object. The labels are the text displayed in the editor interface. Each color channel of the specified image will be used as a mask to specify where on the object's model the tinting should be limited to.<br />
<br />
=== PaletteMap element -> element text ===<br />
<br />
<pre><br />
<PaletteMap ...><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color masks, used when there's tint parameters that limit the tint to a specific area on the object, such as character clothing colors, a tintable area on a weapon, etc.<br />
<br />
=== PaletteMap element -> label_red attribute ===<br />
<br />
<pre><br />
<PaletteMap label_red="Clothing Color 1"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the red channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_green attribute ===<br />
<br />
<pre><br />
<PaletteMap label_green="Clothing Color 2"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the green channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_blue attribute ===<br />
<br />
<pre><br />
<PaletteMap label_blue="Clothing Color 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the blue channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_alpha attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 4"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the alpha channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_other attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 5"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the "other" channel of the tint mask image.<br><br />
'''TODO''': What the heck even is a "other" channel on an image? Does this even do anything in code, besides get parsed? -merlyn<br />
<br />
== Object XML -> DetailMaps element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
...<br />
</DetailMaps><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary material layers that provide fine, repeated visual detail on top of the object's main texture layers.<br />
<br />
== Object XML -> DetailMaps element -> DetailMap element ==<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
</pre><br />
<br />
'''Optional''' - The parameters for the detail map textures that repeat across the model, providing finer-scale detail. There can be up to four of these.<br />
<br />
=== DetailMap element -> colorpath attribute ===<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for this detail map's color map texture.<br />
<br />
=== DetailMap element -> normalpath attribute ===<br />
<br />
<pre><br />
<DetailMap normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the detail map's normal map texture.<br />
<br />
=== DetailMap element -> materialpath attribute ===<br />
<br />
<pre><br />
<DetailMap materialpath="Data/Materials/wood.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the given detail map level.<br><br />
'''TODO''': What is this used for? Aren't detail maps a visual-only thing? -merlyn<br />
<br />
== Object XML -> DetailObjects element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml"<br />
weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3"<br />
min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
...<br />
</DetailObjects><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary objects that will be scattered randomly to provide fine, repeated visual detail on top of the object's main surface.<br />
<br />
== Object XML -> DetailObjects element -> DetailObject element ==<br />
<br />
<pre><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml"<br />
weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3"<br />
min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0.4"<br />
tint_weight="0.5" collision_type="static" /><br />
</pre><br />
<br />
'''Optional''' - A secondary object type that will be scattered randomly to provide fine, repeated visual detail on top of the object's main surface.<br />
<br />
=== DetailObject element -> obj_path attribute ===<br />
<br />
<pre><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Object XML|Object XML]] for the given detail object type. Will provide rendering parameters for the detail objects.<br />
<br />
=== DetailObject element -> weight_path attribute ===<br />
<br />
<pre><br />
<DetailObject weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image that specifies the weight densities for the detail object scattering.<br />
<br />
=== DetailObject element -> normal_conform attribute ===<br />
<br />
<pre><br />
<DetailObject normal_conform="0.9" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies how much the normal of the detail objects will be shifted to match the normal of the surface they are decorating.<br><br />
'''TODO''': What are the units? -merlyn<br />
<br />
=== DetailObject element -> density attribute ===<br />
<br />
<pre><br />
<DetailObject density="3" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies how many of the detail objects should be placed per area, upon the surface they decorate.<br><br />
'''TODO''': What are the units? -merlyn<br />
<br />
=== DetailObject element -> min_embed attribute ===<br />
<br />
<pre><br />
<DetailObject min_embed="-0.2" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the deepest that detail objects will be embedded into the surface of the object they decorate. The actual value is random, and this is the deepest range value.<br />
<br />
=== DetailObject element -> max_embed attribute ===<br />
<br />
<pre><br />
<DetailObject max_embed="0.0" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the shallowest that detail objects will be embedded into the surface of the object they decorate. The actual value is random, and this is the shallowest range value.<br />
<br />
=== DetailObject element -> min_scale attribute ===<br />
<br />
<pre><br />
<DetailObject min_scale="4.0" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies the smallest value that detail objects will be scaled to. The actual value is random, and this is the smallest range value.<br />
<br />
=== DetailObject element -> max_scale attribute ===<br />
<br />
<pre><br />
<DetailObject max_scale="6.8" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies the largest value that detail objects will be scaled to. The actual value is random, and this is the largest range value.<br />
<br />
=== DetailObject element -> view_distance attribute ===<br />
<br />
<pre><br />
<DetailObject view_distance="10" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>30.0</code>. Specifies the farthest distance that the detail object will be visible from. Values are specified in game units (meters).<br />
<br />
=== DetailObject element -> jitter_degrees attribute ===<br />
<br />
<pre><br />
<DetailObject jitter_degrees="10" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the maximum number of degrees to randomly rotate the object, to keep detail objects from awkwardly all pointing directly upward, and to increase visual variety.<br />
<br />
=== DetailObject element -> overbright attribute ===<br />
<br />
<pre><br />
<DetailObject overbright="0.4" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the overbright value to render the object with.<br><br />
'''TODO''': Need a better description. Units? -merlyn<br />
<br />
=== DetailObject element -> tint_weight attribute ===<br />
<br />
<pre><br />
<DetailObject tint_weight="0.5" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies the blend percentage between the detail object's tint, and the tint it inherits from the object's surface it decorates. The value should be between <code>0.0</code> and <code>1.0</code>.<br><br />
'''TODO''': Is this accurate? Is it the blend with other detail object layers or the parent layer? -merlyn<br />
<br />
=== DetailObject element -> collision_type attribute ===<br />
<br />
<pre><br />
<DetailObject collision_type="static" ... /><br />
</pre><br />
<br />
'''Optional''' - Enumerated value. The default value is unset, which will result in an object with dynamic collision. Specifies the type of collision this object should have with moving objects in the world. Valid values are <code>static</code>, <code>plant</code>, and unset.<br />
<br />
== Object XML -> ShaderName element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
=== ShaderName element -> element text ===<br />
<br />
<pre><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
</pre><br />
<br />
'''Required''' - String value. The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
== Object XML -> avg_color element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<avg_color r = "100" g = "128" b = "47" /><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should use for rendering acceleration, e.g. if a texture hasn't loaded in, or for simplified lighting.<br><br />
'''TODO''': Is this even remotely correct? Kinda just guessing, without looking at the code. -merlyn<br />
<br />
=== avg_color element -> r attribute ===<br />
<br />
<pre><br />
<avg_color r = "100" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> g attribute ===<br />
<br />
<pre><br />
<avg_color ... g = "128" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> b attribute ===<br />
<br />
<pre><br />
<avg_color ... b = "47" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
== Object XML -> MaterialPath element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
=== MaterialPath element -> element text ===<br />
<br />
<pre><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
== Object XML -> Flags element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of flags that will be applied to this object, if set to true. Some of these flags affect rendering (e.g. <code>double_sided</code>), some affect physics (e.g. <code>no_collision</code>), and others affect gameplay interactions with this object (e.g. <code>bush_collision</code>).<br />
<br />
=== Flags element -> transparent attribute ===<br />
<br />
<pre><br />
<Flags transparent = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will be rendered in the transparent rendering pass.<br><br />
This flag doesn't make the object transparent on its own, and must also be coupled with transparent shader flags and a transparency map texture.<br />
<br />
=== Flags element -> no_collision attribute ===<br />
<br />
<pre><br />
<Flags no_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will not trigger collisions with players, items, or weapons.<br><br />
<br />
=== Flags element -> clamp_texture attribute ===<br />
<br />
<pre><br />
<Flags clamp_texture = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will render with its texture clamped at its edges, instead of repeating.<br><br />
<br />
=== Flags element -> bush_collision attribute ===<br />
<br />
<pre><br />
<Flags bush_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will trigger jiggle physics when items and characters collide with it. Physics objects will also be slowed down when interacting with it, but not completely blocked. It will also impact line of sight.<br />
<br />
=== Flags element -> terrain_fixed attribute ===<br />
<br />
<pre><br />
<Flags terrain_fixed = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will be locked to the terrain when placed.<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> dynamic attribute ===<br />
<br />
<pre><br />
<Flags dynamic = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will be considered to move by script, and the physics engine will use that information for optimization<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> double_sided attribute ===<br />
<br />
<pre><br />
<Flags double_sided = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will have its polygons rendered double-sided. This is useful for objects such as flags and cloth, that have no thickness.<br />
<br />
== Object XML -> GroundOffset element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<GroundOffset>0.5</GroundOffset><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The default value is <code>0.0</code>. The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
=== GroundOffset element -> element text ===<br />
<br />
<pre><br />
<GroundOffset>0.5</GroundOffset><br />
</pre><br />
<br />
'''Required''' - Decimal value. The default value (when the element is not present) is <code>0.0</code>. The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
== Object XML -> ColorTint element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should be tinted, by default. This can be overridden in the editor after the object is placed in the world.<br />
<br />
=== ColorTint element -> r attribute ===<br />
<br />
<pre><br />
<ColorTint r = "101" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> g attribute ===<br />
<br />
<pre><br />
<ColorTint ... g = "129" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> b attribute ===<br />
<br />
<pre><br />
<ColorTint ... b = "46" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the tint color. Value is between <code>0</code> and <code>255</code>.</div>Merlynhttp://wiki.wolfire.com/index.php?title=Overgrowth_Object_Xml_File_Format&diff=6262Overgrowth Object Xml File Format2023-09-11T03:44:59Z<p>Merlyn: /* Object XML -> Flags element */</p>
<hr />
<div>This is the top-level XML file for a level object. It specifies visual parameters, some gameplay parameters, and paths for visual assets.<br><br />
Other XML file types reference this XML file type, such as [[Xml File Formats#Character XML|Character XML files]] and [[Xml File Formats#Item XML|Item XML files]].<br />
<br />
== Object XML Example ==<br />
<onlyinclude><br />
<pre><br />
<?xml version="1.0" ?><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
<Label>impale</Label><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gray_metal_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gray_metal_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/cat_cobbles_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/cat_cobbles_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gold_hexagons_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gold_hexagons_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
</DetailMaps><br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="2" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="20" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/Objects/Environment/Rocks/lichen_rock_a.xml" weight_path="Data/Textures/Terrain/forest_hills/forest_hills_not_grass.tga"<br />
normal_conform="1" density="20" min_embed="0.3" max_embed="0.7" min_scale="0.08" max_scale="0.12"<br />
view_distance="10" jitter_degrees="45" overbright="0.4" tint_weight="0.5" collision_type="static" /><br />
</DetailObjects><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
<avg_color r = "100" g = "128" b = "47" /><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
<GroundOffset>0.5</GroundOffset><br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
</onlyinclude><br />
<br />
== Object XML -> Model element ==<br />
<br />
<pre><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the obj format model file.<br />
<br />
=== Model element -> element text ===<br />
<br />
<pre><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
</pre><br />
<br />
'''Required''' - String value. Path to the obj format model file.<br />
<br />
== Object XML -> ColorMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the color map texture for the object.<br />
<br />
=== ColorMap element -> element text ===<br />
<br />
<pre><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color map texture for the object.<br />
<br />
== Object XML -> NormalMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the normal map texture for the object.<br />
<br />
=== NormalMap element -> element text ===<br />
<br />
<pre><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the normal map texture for the object.<br />
<br />
== Object XML -> TranslucencyMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the translucency map texture for the object.<br />
<br />
=== TranslucencyMap element -> element text ===<br />
<br />
<pre><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the translucency map texture for the object.<br />
<br />
== Object XML -> WindMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the wind map texture for the object.<br />
<br />
=== WindMap element -> element text ===<br />
<br />
<pre><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the wind map texture for the object.<br />
<br />
== Object XML -> SharpnessMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br><br />
'''TODO''': links to/from other file types for this field?<br />
<br />
=== SharpnessMap element -> element text ===<br />
<br />
<pre><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br />
<br />
== Object XML -> Label element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Label>impale</Label><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
=== Label element -> element text ===<br />
<br />
<pre><br />
<Label>impale</Label><br />
</pre><br />
<br />
'''Required''' - String value. This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
== Object XML -> WeightMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the weight map texture for the object.<br />
<br />
=== WeightMap element -> element text ===<br />
<br />
<pre><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the weight map texture for the object.<br />
<br />
== Object XML -> PaletteMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies a set of different tintable areas on this object. The labels are the text displayed in the editor interface. Each color channel of the specified image will be used as a mask to specify where on the object's model the tinting should be limited to.<br />
<br />
=== PaletteMap element -> element text ===<br />
<br />
<pre><br />
<PaletteMap ...><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color masks, used when there's tint parameters that limit the tint to a specific area on the object, such as character clothing colors, a tintable area on a weapon, etc.<br />
<br />
=== PaletteMap element -> label_red attribute ===<br />
<br />
<pre><br />
<PaletteMap label_red="Clothing Color 1"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the red channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_green attribute ===<br />
<br />
<pre><br />
<PaletteMap label_green="Clothing Color 2"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the green channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_blue attribute ===<br />
<br />
<pre><br />
<PaletteMap label_blue="Clothing Color 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the blue channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_alpha attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 4"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the alpha channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_other attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 5"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the "other" channel of the tint mask image.<br><br />
'''TODO''': What the heck even is a "other" channel on an image? Does this even do anything in code, besides get parsed? -merlyn<br />
<br />
== Object XML -> DetailMaps element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
...<br />
</DetailMaps><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary material layers that provide fine, repeated visual detail on top of the object's main texture layers.<br />
<br />
== Object XML -> DetailMaps element -> DetailMap element ==<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
</pre><br />
<br />
'''Optional''' - The parameters for the detail map textures that repeat across the model, providing finer-scale detail. There can be up to four of these.<br />
<br />
=== DetailMap element -> colorpath attribute ===<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for this detail map's color map texture.<br />
<br />
=== DetailMap element -> normalpath attribute ===<br />
<br />
<pre><br />
<DetailMap normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the detail map's normal map texture.<br />
<br />
=== DetailMap element -> materialpath attribute ===<br />
<br />
<pre><br />
<DetailMap materialpath="Data/Materials/wood.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the given detail map level.<br><br />
'''TODO''': What is this used for? Aren't detail maps a visual-only thing? -merlyn<br />
<br />
== Object XML -> DetailObjects element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml"<br />
weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3"<br />
min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
...<br />
</DetailObjects><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary objects that will be scattered randomly to provide fine, repeated visual detail on top of the object's main surface.<br />
<br />
== Object XML -> DetailObjects element -> DetailObject element ==<br />
<br />
<pre><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml"<br />
weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3"<br />
min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0.4"<br />
tint_weight="0.5" collision_type="static" /><br />
</pre><br />
<br />
'''Optional''' - A secondary object type that will be scattered randomly to provide fine, repeated visual detail on top of the object's main surface.<br />
<br />
=== DetailObject element -> obj_path attribute ===<br />
<br />
<pre><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Object XML|Object XML]] for the given detail object type. Will provide rendering parameters for the detail objects.<br />
<br />
=== DetailObject element -> weight_path attribute ===<br />
<br />
<pre><br />
<DetailObject weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image that specifies the weight densities for the detail object scattering.<br />
<br />
=== DetailObject element -> normal_conform attribute ===<br />
<br />
<pre><br />
<DetailObject normal_conform="0.9" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies how much the normal of the detail objects will be shifted to match the normal of the surface they are decorating.<br><br />
'''TODO''': What are the units? -merlyn<br />
<br />
=== DetailObject element -> density attribute ===<br />
<br />
<pre><br />
<DetailObject density="3" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies how many of the detail objects should be placed per area, upon the surface they decorate.<br><br />
'''TODO''': What are the units? -merlyn<br />
<br />
=== DetailObject element -> min_embed attribute ===<br />
<br />
<pre><br />
<DetailObject min_embed="-0.2" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the deepest that detail objects will be embedded into the surface of the object they decorate. The actual value is random, and this is the deepest range value.<br />
<br />
=== DetailObject element -> max_embed attribute ===<br />
<br />
<pre><br />
<DetailObject max_embed="0.0" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the shallowest that detail objects will be embedded into the surface of the object they decorate. The actual value is random, and this is the shallowest range value.<br />
<br />
=== DetailObject element -> min_scale attribute ===<br />
<br />
<pre><br />
<DetailObject min_scale="4.0" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies the smallest value that detail objects will be scaled to. The actual value is random, and this is the smallest range value.<br />
<br />
=== DetailObject element -> max_scale attribute ===<br />
<br />
<pre><br />
<DetailObject max_scale="6.8" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies the largest value that detail objects will be scaled to. The actual value is random, and this is the largest range value.<br />
<br />
=== DetailObject element -> view_distance attribute ===<br />
<br />
<pre><br />
<DetailObject view_distance="10" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>30.0</code>. Specifies the farthest distance that the detail object will be visible from. Values are specified in game units (meters).<br />
<br />
=== DetailObject element -> jitter_degrees attribute ===<br />
<br />
<pre><br />
<DetailObject jitter_degrees="10" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the maximum number of degrees to randomly rotate the object, to keep detail objects from awkwardly all pointing directly upward, and to increase visual variety.<br />
<br />
=== DetailObject element -> overbright attribute ===<br />
<br />
<pre><br />
<DetailObject overbright="0.4" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the overbright value to render the object with.<br><br />
'''TODO''': Need a better description. Units? -merlyn<br />
<br />
=== DetailObject element -> tint_weight attribute ===<br />
<br />
<pre><br />
<DetailObject tint_weight="0.5" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies the blend percentage between the detail object's tint, and the tint it inherits from the object's surface it decorates. The value should be between <code>0.0</code> and <code>1.0</code>.<br><br />
'''TODO''': Is this accurate? Is it the blend with other detail object layers or the parent layer? -merlyn<br />
<br />
=== DetailObject element -> collision_type attribute ===<br />
<br />
<pre><br />
<DetailObject collision_type="static" ... /><br />
</pre><br />
<br />
'''Optional''' - Enumerated value. The default value is unset, which will result in an object with dynamic collision. Specifies the type of collision this object should have with moving objects in the world. Valid values are <code>static</code>, <code>plant</code>, and unset.<br />
<br />
== Object XML -> ShaderName element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
=== ShaderName element -> element text ===<br />
<br />
<pre><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
</pre><br />
<br />
'''Required''' - String value. The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
== Object XML -> avg_color element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<avg_color r = "100" g = "128" b = "47" /><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should use for rendering acceleration, e.g. if a texture hasn't loaded in, or for simplified lighting.<br><br />
'''TODO''': Is this even remotely correct? Kinda just guessing, without looking at the code. -merlyn<br />
<br />
=== avg_color element -> r attribute ===<br />
<br />
<pre><br />
<avg_color r = "100" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> g attribute ===<br />
<br />
<pre><br />
<avg_color ... g = "128" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> b attribute ===<br />
<br />
<pre><br />
<avg_color ... b = "47" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
== Object XML -> MaterialPath element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
=== MaterialPath element -> element text ===<br />
<br />
<pre><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
== Object XML -> Flags element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of flags that will be applied to this object, if set to true. Some of these flags affect rendering (e.g. <code>double_sided</code>), some affect physics (e.g. <code>no_collision</code>), and others affect gameplay interactions with this object (e.g. <code>bush_collision</code>).<br />
<br />
=== Flags element -> transparent attribute ===<br />
<br />
<pre><br />
<Flags transparent = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will be rendered in the transparent rendering pass.<br><br />
This flag doesn't make the object transparent on its own, and must also be coupled with transparent shader flags and a transparency map texture.<br />
<br />
=== Flags element -> no_collision attribute ===<br />
<br />
<pre><br />
<Flags no_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will not trigger collisions with players, items, or weapons.<br><br />
<br />
=== Flags element -> clamp_texture attribute ===<br />
<br />
<pre><br />
<Flags clamp_texture = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will render with its texture clamped at its edges, instead of repeating.<br><br />
<br />
=== Flags element -> bush_collision attribute ===<br />
<br />
<pre><br />
<Flags bush_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will trigger jiggle physics when items and characters collide with it. Physics objects will also be slowed down when interacting with it, but not completely blocked. It will also impact line of sight.<br />
<br />
=== Flags element -> terrain_fixed attribute ===<br />
<br />
<pre><br />
<Flags terrain_fixed = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will be locked to the terrain when placed.<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> dynamic attribute ===<br />
<br />
<pre><br />
<Flags dynamic = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will be considered to move by script, and the physics engine will use that information for optimization<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> double_sided attribute ===<br />
<br />
<pre><br />
<Flags double_sided = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. The default value is <code>false</code>. If <code>true</code>, then the object will have its polygons rendered double-sided. This is useful for objects such as flags and cloth, that have no thickness.<br />
<br />
== Object XML -> GroundOffset element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<GroundOffset>0.5</GroundOffset><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
=== GroundOffset element -> element text ===<br />
<br />
<pre><br />
<GroundOffset>0.5</GroundOffset><br />
</pre><br />
<br />
'''Required''' - Decimal value. The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
== Object XML -> ColorTint element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should be tinted, by default. This can be overridden in the editor after the object is placed in the world.<br />
<br />
=== ColorTint element -> r attribute ===<br />
<br />
<pre><br />
<ColorTint r = "101" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> g attribute ===<br />
<br />
<pre><br />
<ColorTint ... g = "129" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> b attribute ===<br />
<br />
<pre><br />
<ColorTint ... b = "46" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the tint color. Value is between <code>0</code> and <code>255</code>.</div>Merlynhttp://wiki.wolfire.com/index.php?title=Overgrowth_Object_Xml_File_Format&diff=6261Overgrowth Object Xml File Format2023-09-11T03:42:06Z<p>Merlyn: /* DetailObject element -> collision_type attribute */</p>
<hr />
<div>This is the top-level XML file for a level object. It specifies visual parameters, some gameplay parameters, and paths for visual assets.<br><br />
Other XML file types reference this XML file type, such as [[Xml File Formats#Character XML|Character XML files]] and [[Xml File Formats#Item XML|Item XML files]].<br />
<br />
== Object XML Example ==<br />
<onlyinclude><br />
<pre><br />
<?xml version="1.0" ?><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
<Label>impale</Label><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gray_metal_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gray_metal_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/cat_cobbles_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/cat_cobbles_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gold_hexagons_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gold_hexagons_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
</DetailMaps><br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="2" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="20" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/Objects/Environment/Rocks/lichen_rock_a.xml" weight_path="Data/Textures/Terrain/forest_hills/forest_hills_not_grass.tga"<br />
normal_conform="1" density="20" min_embed="0.3" max_embed="0.7" min_scale="0.08" max_scale="0.12"<br />
view_distance="10" jitter_degrees="45" overbright="0.4" tint_weight="0.5" collision_type="static" /><br />
</DetailObjects><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
<avg_color r = "100" g = "128" b = "47" /><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
<GroundOffset>0.5</GroundOffset><br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
</onlyinclude><br />
<br />
== Object XML -> Model element ==<br />
<br />
<pre><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the obj format model file.<br />
<br />
=== Model element -> element text ===<br />
<br />
<pre><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
</pre><br />
<br />
'''Required''' - String value. Path to the obj format model file.<br />
<br />
== Object XML -> ColorMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the color map texture for the object.<br />
<br />
=== ColorMap element -> element text ===<br />
<br />
<pre><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color map texture for the object.<br />
<br />
== Object XML -> NormalMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the normal map texture for the object.<br />
<br />
=== NormalMap element -> element text ===<br />
<br />
<pre><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the normal map texture for the object.<br />
<br />
== Object XML -> TranslucencyMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the translucency map texture for the object.<br />
<br />
=== TranslucencyMap element -> element text ===<br />
<br />
<pre><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the translucency map texture for the object.<br />
<br />
== Object XML -> WindMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the wind map texture for the object.<br />
<br />
=== WindMap element -> element text ===<br />
<br />
<pre><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the wind map texture for the object.<br />
<br />
== Object XML -> SharpnessMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br><br />
'''TODO''': links to/from other file types for this field?<br />
<br />
=== SharpnessMap element -> element text ===<br />
<br />
<pre><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br />
<br />
== Object XML -> Label element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Label>impale</Label><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
=== Label element -> element text ===<br />
<br />
<pre><br />
<Label>impale</Label><br />
</pre><br />
<br />
'''Required''' - String value. This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
== Object XML -> WeightMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the weight map texture for the object.<br />
<br />
=== WeightMap element -> element text ===<br />
<br />
<pre><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the weight map texture for the object.<br />
<br />
== Object XML -> PaletteMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies a set of different tintable areas on this object. The labels are the text displayed in the editor interface. Each color channel of the specified image will be used as a mask to specify where on the object's model the tinting should be limited to.<br />
<br />
=== PaletteMap element -> element text ===<br />
<br />
<pre><br />
<PaletteMap ...><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color masks, used when there's tint parameters that limit the tint to a specific area on the object, such as character clothing colors, a tintable area on a weapon, etc.<br />
<br />
=== PaletteMap element -> label_red attribute ===<br />
<br />
<pre><br />
<PaletteMap label_red="Clothing Color 1"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the red channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_green attribute ===<br />
<br />
<pre><br />
<PaletteMap label_green="Clothing Color 2"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the green channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_blue attribute ===<br />
<br />
<pre><br />
<PaletteMap label_blue="Clothing Color 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the blue channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_alpha attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 4"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the alpha channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_other attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 5"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the "other" channel of the tint mask image.<br><br />
'''TODO''': What the heck even is a "other" channel on an image? Does this even do anything in code, besides get parsed? -merlyn<br />
<br />
== Object XML -> DetailMaps element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
...<br />
</DetailMaps><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary material layers that provide fine, repeated visual detail on top of the object's main texture layers.<br />
<br />
== Object XML -> DetailMaps element -> DetailMap element ==<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
</pre><br />
<br />
'''Optional''' - The parameters for the detail map textures that repeat across the model, providing finer-scale detail. There can be up to four of these.<br />
<br />
=== DetailMap element -> colorpath attribute ===<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for this detail map's color map texture.<br />
<br />
=== DetailMap element -> normalpath attribute ===<br />
<br />
<pre><br />
<DetailMap normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the detail map's normal map texture.<br />
<br />
=== DetailMap element -> materialpath attribute ===<br />
<br />
<pre><br />
<DetailMap materialpath="Data/Materials/wood.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the given detail map level.<br><br />
'''TODO''': What is this used for? Aren't detail maps a visual-only thing? -merlyn<br />
<br />
== Object XML -> DetailObjects element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml"<br />
weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3"<br />
min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
...<br />
</DetailObjects><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary objects that will be scattered randomly to provide fine, repeated visual detail on top of the object's main surface.<br />
<br />
== Object XML -> DetailObjects element -> DetailObject element ==<br />
<br />
<pre><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml"<br />
weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3"<br />
min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0.4"<br />
tint_weight="0.5" collision_type="static" /><br />
</pre><br />
<br />
'''Optional''' - A secondary object type that will be scattered randomly to provide fine, repeated visual detail on top of the object's main surface.<br />
<br />
=== DetailObject element -> obj_path attribute ===<br />
<br />
<pre><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Object XML|Object XML]] for the given detail object type. Will provide rendering parameters for the detail objects.<br />
<br />
=== DetailObject element -> weight_path attribute ===<br />
<br />
<pre><br />
<DetailObject weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image that specifies the weight densities for the detail object scattering.<br />
<br />
=== DetailObject element -> normal_conform attribute ===<br />
<br />
<pre><br />
<DetailObject normal_conform="0.9" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies how much the normal of the detail objects will be shifted to match the normal of the surface they are decorating.<br><br />
'''TODO''': What are the units? -merlyn<br />
<br />
=== DetailObject element -> density attribute ===<br />
<br />
<pre><br />
<DetailObject density="3" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies how many of the detail objects should be placed per area, upon the surface they decorate.<br><br />
'''TODO''': What are the units? -merlyn<br />
<br />
=== DetailObject element -> min_embed attribute ===<br />
<br />
<pre><br />
<DetailObject min_embed="-0.2" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the deepest that detail objects will be embedded into the surface of the object they decorate. The actual value is random, and this is the deepest range value.<br />
<br />
=== DetailObject element -> max_embed attribute ===<br />
<br />
<pre><br />
<DetailObject max_embed="0.0" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the shallowest that detail objects will be embedded into the surface of the object they decorate. The actual value is random, and this is the shallowest range value.<br />
<br />
=== DetailObject element -> min_scale attribute ===<br />
<br />
<pre><br />
<DetailObject min_scale="4.0" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies the smallest value that detail objects will be scaled to. The actual value is random, and this is the smallest range value.<br />
<br />
=== DetailObject element -> max_scale attribute ===<br />
<br />
<pre><br />
<DetailObject max_scale="6.8" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies the largest value that detail objects will be scaled to. The actual value is random, and this is the largest range value.<br />
<br />
=== DetailObject element -> view_distance attribute ===<br />
<br />
<pre><br />
<DetailObject view_distance="10" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>30.0</code>. Specifies the farthest distance that the detail object will be visible from. Values are specified in game units (meters).<br />
<br />
=== DetailObject element -> jitter_degrees attribute ===<br />
<br />
<pre><br />
<DetailObject jitter_degrees="10" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the maximum number of degrees to randomly rotate the object, to keep detail objects from awkwardly all pointing directly upward, and to increase visual variety.<br />
<br />
=== DetailObject element -> overbright attribute ===<br />
<br />
<pre><br />
<DetailObject overbright="0.4" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the overbright value to render the object with.<br><br />
'''TODO''': Need a better description. Units? -merlyn<br />
<br />
=== DetailObject element -> tint_weight attribute ===<br />
<br />
<pre><br />
<DetailObject tint_weight="0.5" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies the blend percentage between the detail object's tint, and the tint it inherits from the object's surface it decorates. The value should be between <code>0.0</code> and <code>1.0</code>.<br><br />
'''TODO''': Is this accurate? Is it the blend with other detail object layers or the parent layer? -merlyn<br />
<br />
=== DetailObject element -> collision_type attribute ===<br />
<br />
<pre><br />
<DetailObject collision_type="static" ... /><br />
</pre><br />
<br />
'''Optional''' - Enumerated value. The default value is unset, which will result in an object with dynamic collision. Specifies the type of collision this object should have with moving objects in the world. Valid values are <code>static</code>, <code>plant</code>, and unset.<br />
<br />
== Object XML -> ShaderName element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
=== ShaderName element -> element text ===<br />
<br />
<pre><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
</pre><br />
<br />
'''Required''' - String value. The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
== Object XML -> avg_color element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<avg_color r = "100" g = "128" b = "47" /><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should use for rendering acceleration, e.g. if a texture hasn't loaded in, or for simplified lighting.<br><br />
'''TODO''': Is this even remotely correct? Kinda just guessing, without looking at the code. -merlyn<br />
<br />
=== avg_color element -> r attribute ===<br />
<br />
<pre><br />
<avg_color r = "100" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> g attribute ===<br />
<br />
<pre><br />
<avg_color ... g = "128" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> b attribute ===<br />
<br />
<pre><br />
<avg_color ... b = "47" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
== Object XML -> MaterialPath element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
=== MaterialPath element -> element text ===<br />
<br />
<pre><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
== Object XML -> Flags element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of flags that will be applied to this object, if set to true. Some of these flags affect rendering (e.g. <code>double_sided</code>), some affect physics (e.g. <code>no_collision</code>), and others affect gameplay interactions with this object (e.g. <code>bush_collision</code>).<br />
<br />
=== Flags element -> transparent attribute ===<br />
<br />
<pre><br />
<Flags transparent = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be rendered in the transparent rendering pass.<br><br />
This flag doesn't make the object transparent on its own, and must also be coupled with transparent shader flags and a transparency map texture.<br />
<br />
=== Flags element -> no_collision attribute ===<br />
<br />
<pre><br />
<Flags no_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will not trigger collisions with players, items, or weapons.<br><br />
<br />
=== Flags element -> clamp_texture attribute ===<br />
<br />
<pre><br />
<Flags clamp_texture = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will render with its texture clamped at its edges, instead of repeating.<br><br />
<br />
=== Flags element -> bush_collision attribute ===<br />
<br />
<pre><br />
<Flags bush_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will trigger jiggle physics when items and characters collide with it. Physics objects will also be slowed down when interacting with it, but not completely blocked. It will also impact line of sight.<br />
<br />
=== Flags element -> terrain_fixed attribute ===<br />
<br />
<pre><br />
<Flags terrain_fixed = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be locked to the terrain when placed.<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> dynamic attribute ===<br />
<br />
<pre><br />
<Flags dynamic = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be considered to move by script, and the physics engine will use that information for optimization<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> double_sided attribute ===<br />
<br />
<pre><br />
<Flags double_sided = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will have its polygons rendered double-sided. This is useful for objects such as flags and cloth, that have no thickness.<br />
<br />
== Object XML -> GroundOffset element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<GroundOffset>0.5</GroundOffset><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
=== GroundOffset element -> element text ===<br />
<br />
<pre><br />
<GroundOffset>0.5</GroundOffset><br />
</pre><br />
<br />
'''Required''' - Decimal value. The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
== Object XML -> ColorTint element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should be tinted, by default. This can be overridden in the editor after the object is placed in the world.<br />
<br />
=== ColorTint element -> r attribute ===<br />
<br />
<pre><br />
<ColorTint r = "101" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> g attribute ===<br />
<br />
<pre><br />
<ColorTint ... g = "129" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> b attribute ===<br />
<br />
<pre><br />
<ColorTint ... b = "46" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the tint color. Value is between <code>0</code> and <code>255</code>.</div>Merlynhttp://wiki.wolfire.com/index.php?title=Overgrowth_Object_Xml_File_Format&diff=6260Overgrowth Object Xml File Format2023-09-11T03:41:38Z<p>Merlyn: /* DetailObject element -> tint_weight attribute */</p>
<hr />
<div>This is the top-level XML file for a level object. It specifies visual parameters, some gameplay parameters, and paths for visual assets.<br><br />
Other XML file types reference this XML file type, such as [[Xml File Formats#Character XML|Character XML files]] and [[Xml File Formats#Item XML|Item XML files]].<br />
<br />
== Object XML Example ==<br />
<onlyinclude><br />
<pre><br />
<?xml version="1.0" ?><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
<Label>impale</Label><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gray_metal_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gray_metal_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/cat_cobbles_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/cat_cobbles_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gold_hexagons_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gold_hexagons_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
</DetailMaps><br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="2" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="20" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/Objects/Environment/Rocks/lichen_rock_a.xml" weight_path="Data/Textures/Terrain/forest_hills/forest_hills_not_grass.tga"<br />
normal_conform="1" density="20" min_embed="0.3" max_embed="0.7" min_scale="0.08" max_scale="0.12"<br />
view_distance="10" jitter_degrees="45" overbright="0.4" tint_weight="0.5" collision_type="static" /><br />
</DetailObjects><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
<avg_color r = "100" g = "128" b = "47" /><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
<GroundOffset>0.5</GroundOffset><br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
</onlyinclude><br />
<br />
== Object XML -> Model element ==<br />
<br />
<pre><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the obj format model file.<br />
<br />
=== Model element -> element text ===<br />
<br />
<pre><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
</pre><br />
<br />
'''Required''' - String value. Path to the obj format model file.<br />
<br />
== Object XML -> ColorMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the color map texture for the object.<br />
<br />
=== ColorMap element -> element text ===<br />
<br />
<pre><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color map texture for the object.<br />
<br />
== Object XML -> NormalMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the normal map texture for the object.<br />
<br />
=== NormalMap element -> element text ===<br />
<br />
<pre><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the normal map texture for the object.<br />
<br />
== Object XML -> TranslucencyMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the translucency map texture for the object.<br />
<br />
=== TranslucencyMap element -> element text ===<br />
<br />
<pre><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the translucency map texture for the object.<br />
<br />
== Object XML -> WindMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the wind map texture for the object.<br />
<br />
=== WindMap element -> element text ===<br />
<br />
<pre><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the wind map texture for the object.<br />
<br />
== Object XML -> SharpnessMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br><br />
'''TODO''': links to/from other file types for this field?<br />
<br />
=== SharpnessMap element -> element text ===<br />
<br />
<pre><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br />
<br />
== Object XML -> Label element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Label>impale</Label><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
=== Label element -> element text ===<br />
<br />
<pre><br />
<Label>impale</Label><br />
</pre><br />
<br />
'''Required''' - String value. This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
== Object XML -> WeightMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the weight map texture for the object.<br />
<br />
=== WeightMap element -> element text ===<br />
<br />
<pre><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the weight map texture for the object.<br />
<br />
== Object XML -> PaletteMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies a set of different tintable areas on this object. The labels are the text displayed in the editor interface. Each color channel of the specified image will be used as a mask to specify where on the object's model the tinting should be limited to.<br />
<br />
=== PaletteMap element -> element text ===<br />
<br />
<pre><br />
<PaletteMap ...><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color masks, used when there's tint parameters that limit the tint to a specific area on the object, such as character clothing colors, a tintable area on a weapon, etc.<br />
<br />
=== PaletteMap element -> label_red attribute ===<br />
<br />
<pre><br />
<PaletteMap label_red="Clothing Color 1"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the red channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_green attribute ===<br />
<br />
<pre><br />
<PaletteMap label_green="Clothing Color 2"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the green channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_blue attribute ===<br />
<br />
<pre><br />
<PaletteMap label_blue="Clothing Color 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the blue channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_alpha attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 4"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the alpha channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_other attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 5"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the "other" channel of the tint mask image.<br><br />
'''TODO''': What the heck even is a "other" channel on an image? Does this even do anything in code, besides get parsed? -merlyn<br />
<br />
== Object XML -> DetailMaps element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
...<br />
</DetailMaps><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary material layers that provide fine, repeated visual detail on top of the object's main texture layers.<br />
<br />
== Object XML -> DetailMaps element -> DetailMap element ==<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
</pre><br />
<br />
'''Optional''' - The parameters for the detail map textures that repeat across the model, providing finer-scale detail. There can be up to four of these.<br />
<br />
=== DetailMap element -> colorpath attribute ===<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for this detail map's color map texture.<br />
<br />
=== DetailMap element -> normalpath attribute ===<br />
<br />
<pre><br />
<DetailMap normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the detail map's normal map texture.<br />
<br />
=== DetailMap element -> materialpath attribute ===<br />
<br />
<pre><br />
<DetailMap materialpath="Data/Materials/wood.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the given detail map level.<br><br />
'''TODO''': What is this used for? Aren't detail maps a visual-only thing? -merlyn<br />
<br />
== Object XML -> DetailObjects element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml"<br />
weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3"<br />
min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
...<br />
</DetailObjects><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary objects that will be scattered randomly to provide fine, repeated visual detail on top of the object's main surface.<br />
<br />
== Object XML -> DetailObjects element -> DetailObject element ==<br />
<br />
<pre><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml"<br />
weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3"<br />
min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0.4"<br />
tint_weight="0.5" collision_type="static" /><br />
</pre><br />
<br />
'''Optional''' - A secondary object type that will be scattered randomly to provide fine, repeated visual detail on top of the object's main surface.<br />
<br />
=== DetailObject element -> obj_path attribute ===<br />
<br />
<pre><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Object XML|Object XML]] for the given detail object type. Will provide rendering parameters for the detail objects.<br />
<br />
=== DetailObject element -> weight_path attribute ===<br />
<br />
<pre><br />
<DetailObject weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image that specifies the weight densities for the detail object scattering.<br />
<br />
=== DetailObject element -> normal_conform attribute ===<br />
<br />
<pre><br />
<DetailObject normal_conform="0.9" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies how much the normal of the detail objects will be shifted to match the normal of the surface they are decorating.<br><br />
'''TODO''': What are the units? -merlyn<br />
<br />
=== DetailObject element -> density attribute ===<br />
<br />
<pre><br />
<DetailObject density="3" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies how many of the detail objects should be placed per area, upon the surface they decorate.<br><br />
'''TODO''': What are the units? -merlyn<br />
<br />
=== DetailObject element -> min_embed attribute ===<br />
<br />
<pre><br />
<DetailObject min_embed="-0.2" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the deepest that detail objects will be embedded into the surface of the object they decorate. The actual value is random, and this is the deepest range value.<br />
<br />
=== DetailObject element -> max_embed attribute ===<br />
<br />
<pre><br />
<DetailObject max_embed="0.0" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the shallowest that detail objects will be embedded into the surface of the object they decorate. The actual value is random, and this is the shallowest range value.<br />
<br />
=== DetailObject element -> min_scale attribute ===<br />
<br />
<pre><br />
<DetailObject min_scale="4.0" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies the smallest value that detail objects will be scaled to. The actual value is random, and this is the smallest range value.<br />
<br />
=== DetailObject element -> max_scale attribute ===<br />
<br />
<pre><br />
<DetailObject max_scale="6.8" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies the largest value that detail objects will be scaled to. The actual value is random, and this is the largest range value.<br />
<br />
=== DetailObject element -> view_distance attribute ===<br />
<br />
<pre><br />
<DetailObject view_distance="10" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>30.0</code>. Specifies the farthest distance that the detail object will be visible from. Values are specified in game units (meters).<br />
<br />
=== DetailObject element -> jitter_degrees attribute ===<br />
<br />
<pre><br />
<DetailObject jitter_degrees="10" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the maximum number of degrees to randomly rotate the object, to keep detail objects from awkwardly all pointing directly upward, and to increase visual variety.<br />
<br />
=== DetailObject element -> overbright attribute ===<br />
<br />
<pre><br />
<DetailObject overbright="0.4" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the overbright value to render the object with.<br><br />
'''TODO''': Need a better description. Units? -merlyn<br />
<br />
=== DetailObject element -> tint_weight attribute ===<br />
<br />
<pre><br />
<DetailObject tint_weight="0.5" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies the blend percentage between the detail object's tint, and the tint it inherits from the object's surface it decorates. The value should be between <code>0.0</code> and <code>1.0</code>.<br><br />
'''TODO''': Is this accurate? Is it the blend with other detail object layers or the parent layer? -merlyn<br />
<br />
=== DetailObject element -> collision_type attribute ===<br />
<br />
<pre><br />
<DetailObject collision_type="static" ... /><br />
</pre><br />
<br />
'''Optional''' - Enumerated value. Specifies the type of collision this object should have with moving objects in the world. Valid values are <code>static</code>, <code>plant</code>, and unset.<br><br />
The default value is unset, which will result in an object with dynamic collision.<br />
<br />
== Object XML -> ShaderName element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
=== ShaderName element -> element text ===<br />
<br />
<pre><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
</pre><br />
<br />
'''Required''' - String value. The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
== Object XML -> avg_color element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<avg_color r = "100" g = "128" b = "47" /><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should use for rendering acceleration, e.g. if a texture hasn't loaded in, or for simplified lighting.<br><br />
'''TODO''': Is this even remotely correct? Kinda just guessing, without looking at the code. -merlyn<br />
<br />
=== avg_color element -> r attribute ===<br />
<br />
<pre><br />
<avg_color r = "100" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> g attribute ===<br />
<br />
<pre><br />
<avg_color ... g = "128" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> b attribute ===<br />
<br />
<pre><br />
<avg_color ... b = "47" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
== Object XML -> MaterialPath element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
=== MaterialPath element -> element text ===<br />
<br />
<pre><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
== Object XML -> Flags element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of flags that will be applied to this object, if set to true. Some of these flags affect rendering (e.g. <code>double_sided</code>), some affect physics (e.g. <code>no_collision</code>), and others affect gameplay interactions with this object (e.g. <code>bush_collision</code>).<br />
<br />
=== Flags element -> transparent attribute ===<br />
<br />
<pre><br />
<Flags transparent = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be rendered in the transparent rendering pass.<br><br />
This flag doesn't make the object transparent on its own, and must also be coupled with transparent shader flags and a transparency map texture.<br />
<br />
=== Flags element -> no_collision attribute ===<br />
<br />
<pre><br />
<Flags no_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will not trigger collisions with players, items, or weapons.<br><br />
<br />
=== Flags element -> clamp_texture attribute ===<br />
<br />
<pre><br />
<Flags clamp_texture = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will render with its texture clamped at its edges, instead of repeating.<br><br />
<br />
=== Flags element -> bush_collision attribute ===<br />
<br />
<pre><br />
<Flags bush_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will trigger jiggle physics when items and characters collide with it. Physics objects will also be slowed down when interacting with it, but not completely blocked. It will also impact line of sight.<br />
<br />
=== Flags element -> terrain_fixed attribute ===<br />
<br />
<pre><br />
<Flags terrain_fixed = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be locked to the terrain when placed.<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> dynamic attribute ===<br />
<br />
<pre><br />
<Flags dynamic = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be considered to move by script, and the physics engine will use that information for optimization<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> double_sided attribute ===<br />
<br />
<pre><br />
<Flags double_sided = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will have its polygons rendered double-sided. This is useful for objects such as flags and cloth, that have no thickness.<br />
<br />
== Object XML -> GroundOffset element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<GroundOffset>0.5</GroundOffset><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
=== GroundOffset element -> element text ===<br />
<br />
<pre><br />
<GroundOffset>0.5</GroundOffset><br />
</pre><br />
<br />
'''Required''' - Decimal value. The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
== Object XML -> ColorTint element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should be tinted, by default. This can be overridden in the editor after the object is placed in the world.<br />
<br />
=== ColorTint element -> r attribute ===<br />
<br />
<pre><br />
<ColorTint r = "101" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> g attribute ===<br />
<br />
<pre><br />
<ColorTint ... g = "129" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> b attribute ===<br />
<br />
<pre><br />
<ColorTint ... b = "46" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the tint color. Value is between <code>0</code> and <code>255</code>.</div>Merlynhttp://wiki.wolfire.com/index.php?title=Overgrowth_Object_Xml_File_Format&diff=6259Overgrowth Object Xml File Format2023-09-11T03:41:02Z<p>Merlyn: /* DetailObject element -> overbright attribute */</p>
<hr />
<div>This is the top-level XML file for a level object. It specifies visual parameters, some gameplay parameters, and paths for visual assets.<br><br />
Other XML file types reference this XML file type, such as [[Xml File Formats#Character XML|Character XML files]] and [[Xml File Formats#Item XML|Item XML files]].<br />
<br />
== Object XML Example ==<br />
<onlyinclude><br />
<pre><br />
<?xml version="1.0" ?><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
<Label>impale</Label><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gray_metal_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gray_metal_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/cat_cobbles_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/cat_cobbles_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gold_hexagons_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gold_hexagons_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
</DetailMaps><br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="2" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="20" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/Objects/Environment/Rocks/lichen_rock_a.xml" weight_path="Data/Textures/Terrain/forest_hills/forest_hills_not_grass.tga"<br />
normal_conform="1" density="20" min_embed="0.3" max_embed="0.7" min_scale="0.08" max_scale="0.12"<br />
view_distance="10" jitter_degrees="45" overbright="0.4" tint_weight="0.5" collision_type="static" /><br />
</DetailObjects><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
<avg_color r = "100" g = "128" b = "47" /><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
<GroundOffset>0.5</GroundOffset><br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
</onlyinclude><br />
<br />
== Object XML -> Model element ==<br />
<br />
<pre><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the obj format model file.<br />
<br />
=== Model element -> element text ===<br />
<br />
<pre><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
</pre><br />
<br />
'''Required''' - String value. Path to the obj format model file.<br />
<br />
== Object XML -> ColorMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the color map texture for the object.<br />
<br />
=== ColorMap element -> element text ===<br />
<br />
<pre><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color map texture for the object.<br />
<br />
== Object XML -> NormalMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the normal map texture for the object.<br />
<br />
=== NormalMap element -> element text ===<br />
<br />
<pre><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the normal map texture for the object.<br />
<br />
== Object XML -> TranslucencyMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the translucency map texture for the object.<br />
<br />
=== TranslucencyMap element -> element text ===<br />
<br />
<pre><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the translucency map texture for the object.<br />
<br />
== Object XML -> WindMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the wind map texture for the object.<br />
<br />
=== WindMap element -> element text ===<br />
<br />
<pre><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the wind map texture for the object.<br />
<br />
== Object XML -> SharpnessMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br><br />
'''TODO''': links to/from other file types for this field?<br />
<br />
=== SharpnessMap element -> element text ===<br />
<br />
<pre><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br />
<br />
== Object XML -> Label element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Label>impale</Label><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
=== Label element -> element text ===<br />
<br />
<pre><br />
<Label>impale</Label><br />
</pre><br />
<br />
'''Required''' - String value. This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
== Object XML -> WeightMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the weight map texture for the object.<br />
<br />
=== WeightMap element -> element text ===<br />
<br />
<pre><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the weight map texture for the object.<br />
<br />
== Object XML -> PaletteMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies a set of different tintable areas on this object. The labels are the text displayed in the editor interface. Each color channel of the specified image will be used as a mask to specify where on the object's model the tinting should be limited to.<br />
<br />
=== PaletteMap element -> element text ===<br />
<br />
<pre><br />
<PaletteMap ...><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color masks, used when there's tint parameters that limit the tint to a specific area on the object, such as character clothing colors, a tintable area on a weapon, etc.<br />
<br />
=== PaletteMap element -> label_red attribute ===<br />
<br />
<pre><br />
<PaletteMap label_red="Clothing Color 1"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the red channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_green attribute ===<br />
<br />
<pre><br />
<PaletteMap label_green="Clothing Color 2"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the green channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_blue attribute ===<br />
<br />
<pre><br />
<PaletteMap label_blue="Clothing Color 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the blue channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_alpha attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 4"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the alpha channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_other attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 5"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the "other" channel of the tint mask image.<br><br />
'''TODO''': What the heck even is a "other" channel on an image? Does this even do anything in code, besides get parsed? -merlyn<br />
<br />
== Object XML -> DetailMaps element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
...<br />
</DetailMaps><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary material layers that provide fine, repeated visual detail on top of the object's main texture layers.<br />
<br />
== Object XML -> DetailMaps element -> DetailMap element ==<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
</pre><br />
<br />
'''Optional''' - The parameters for the detail map textures that repeat across the model, providing finer-scale detail. There can be up to four of these.<br />
<br />
=== DetailMap element -> colorpath attribute ===<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for this detail map's color map texture.<br />
<br />
=== DetailMap element -> normalpath attribute ===<br />
<br />
<pre><br />
<DetailMap normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the detail map's normal map texture.<br />
<br />
=== DetailMap element -> materialpath attribute ===<br />
<br />
<pre><br />
<DetailMap materialpath="Data/Materials/wood.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the given detail map level.<br><br />
'''TODO''': What is this used for? Aren't detail maps a visual-only thing? -merlyn<br />
<br />
== Object XML -> DetailObjects element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml"<br />
weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3"<br />
min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
...<br />
</DetailObjects><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary objects that will be scattered randomly to provide fine, repeated visual detail on top of the object's main surface.<br />
<br />
== Object XML -> DetailObjects element -> DetailObject element ==<br />
<br />
<pre><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml"<br />
weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3"<br />
min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0.4"<br />
tint_weight="0.5" collision_type="static" /><br />
</pre><br />
<br />
'''Optional''' - A secondary object type that will be scattered randomly to provide fine, repeated visual detail on top of the object's main surface.<br />
<br />
=== DetailObject element -> obj_path attribute ===<br />
<br />
<pre><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Object XML|Object XML]] for the given detail object type. Will provide rendering parameters for the detail objects.<br />
<br />
=== DetailObject element -> weight_path attribute ===<br />
<br />
<pre><br />
<DetailObject weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image that specifies the weight densities for the detail object scattering.<br />
<br />
=== DetailObject element -> normal_conform attribute ===<br />
<br />
<pre><br />
<DetailObject normal_conform="0.9" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies how much the normal of the detail objects will be shifted to match the normal of the surface they are decorating.<br><br />
'''TODO''': What are the units? -merlyn<br />
<br />
=== DetailObject element -> density attribute ===<br />
<br />
<pre><br />
<DetailObject density="3" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies how many of the detail objects should be placed per area, upon the surface they decorate.<br><br />
'''TODO''': What are the units? -merlyn<br />
<br />
=== DetailObject element -> min_embed attribute ===<br />
<br />
<pre><br />
<DetailObject min_embed="-0.2" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the deepest that detail objects will be embedded into the surface of the object they decorate. The actual value is random, and this is the deepest range value.<br />
<br />
=== DetailObject element -> max_embed attribute ===<br />
<br />
<pre><br />
<DetailObject max_embed="0.0" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the shallowest that detail objects will be embedded into the surface of the object they decorate. The actual value is random, and this is the shallowest range value.<br />
<br />
=== DetailObject element -> min_scale attribute ===<br />
<br />
<pre><br />
<DetailObject min_scale="4.0" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies the smallest value that detail objects will be scaled to. The actual value is random, and this is the smallest range value.<br />
<br />
=== DetailObject element -> max_scale attribute ===<br />
<br />
<pre><br />
<DetailObject max_scale="6.8" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies the largest value that detail objects will be scaled to. The actual value is random, and this is the largest range value.<br />
<br />
=== DetailObject element -> view_distance attribute ===<br />
<br />
<pre><br />
<DetailObject view_distance="10" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>30.0</code>. Specifies the farthest distance that the detail object will be visible from. Values are specified in game units (meters).<br />
<br />
=== DetailObject element -> jitter_degrees attribute ===<br />
<br />
<pre><br />
<DetailObject jitter_degrees="10" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the maximum number of degrees to randomly rotate the object, to keep detail objects from awkwardly all pointing directly upward, and to increase visual variety.<br />
<br />
=== DetailObject element -> overbright attribute ===<br />
<br />
<pre><br />
<DetailObject overbright="0.4" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the overbright value to render the object with.<br><br />
'''TODO''': Need a better description. Units? -merlyn<br />
<br />
=== DetailObject element -> tint_weight attribute ===<br />
<br />
<pre><br />
<DetailObject tint_weight="0.5" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the blend percentage between the detail object's tint, and the tint it inherits from the object's surface it decorates. The value should be between <code>0.0</code> and <code>1.0</code>.<br><br />
'''TODO''': Default value? -merlyn<br />
<br />
=== DetailObject element -> collision_type attribute ===<br />
<br />
<pre><br />
<DetailObject collision_type="static" ... /><br />
</pre><br />
<br />
'''Optional''' - Enumerated value. Specifies the type of collision this object should have with moving objects in the world. Valid values are <code>static</code>, <code>plant</code>, and unset.<br><br />
The default value is unset, which will result in an object with dynamic collision.<br />
<br />
== Object XML -> ShaderName element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
=== ShaderName element -> element text ===<br />
<br />
<pre><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
</pre><br />
<br />
'''Required''' - String value. The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
== Object XML -> avg_color element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<avg_color r = "100" g = "128" b = "47" /><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should use for rendering acceleration, e.g. if a texture hasn't loaded in, or for simplified lighting.<br><br />
'''TODO''': Is this even remotely correct? Kinda just guessing, without looking at the code. -merlyn<br />
<br />
=== avg_color element -> r attribute ===<br />
<br />
<pre><br />
<avg_color r = "100" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> g attribute ===<br />
<br />
<pre><br />
<avg_color ... g = "128" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> b attribute ===<br />
<br />
<pre><br />
<avg_color ... b = "47" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
== Object XML -> MaterialPath element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
=== MaterialPath element -> element text ===<br />
<br />
<pre><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
== Object XML -> Flags element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of flags that will be applied to this object, if set to true. Some of these flags affect rendering (e.g. <code>double_sided</code>), some affect physics (e.g. <code>no_collision</code>), and others affect gameplay interactions with this object (e.g. <code>bush_collision</code>).<br />
<br />
=== Flags element -> transparent attribute ===<br />
<br />
<pre><br />
<Flags transparent = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be rendered in the transparent rendering pass.<br><br />
This flag doesn't make the object transparent on its own, and must also be coupled with transparent shader flags and a transparency map texture.<br />
<br />
=== Flags element -> no_collision attribute ===<br />
<br />
<pre><br />
<Flags no_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will not trigger collisions with players, items, or weapons.<br><br />
<br />
=== Flags element -> clamp_texture attribute ===<br />
<br />
<pre><br />
<Flags clamp_texture = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will render with its texture clamped at its edges, instead of repeating.<br><br />
<br />
=== Flags element -> bush_collision attribute ===<br />
<br />
<pre><br />
<Flags bush_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will trigger jiggle physics when items and characters collide with it. Physics objects will also be slowed down when interacting with it, but not completely blocked. It will also impact line of sight.<br />
<br />
=== Flags element -> terrain_fixed attribute ===<br />
<br />
<pre><br />
<Flags terrain_fixed = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be locked to the terrain when placed.<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> dynamic attribute ===<br />
<br />
<pre><br />
<Flags dynamic = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be considered to move by script, and the physics engine will use that information for optimization<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> double_sided attribute ===<br />
<br />
<pre><br />
<Flags double_sided = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will have its polygons rendered double-sided. This is useful for objects such as flags and cloth, that have no thickness.<br />
<br />
== Object XML -> GroundOffset element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<GroundOffset>0.5</GroundOffset><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
=== GroundOffset element -> element text ===<br />
<br />
<pre><br />
<GroundOffset>0.5</GroundOffset><br />
</pre><br />
<br />
'''Required''' - Decimal value. The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
== Object XML -> ColorTint element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should be tinted, by default. This can be overridden in the editor after the object is placed in the world.<br />
<br />
=== ColorTint element -> r attribute ===<br />
<br />
<pre><br />
<ColorTint r = "101" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> g attribute ===<br />
<br />
<pre><br />
<ColorTint ... g = "129" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> b attribute ===<br />
<br />
<pre><br />
<ColorTint ... b = "46" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the tint color. Value is between <code>0</code> and <code>255</code>.</div>Merlynhttp://wiki.wolfire.com/index.php?title=Overgrowth_Object_Xml_File_Format&diff=6258Overgrowth Object Xml File Format2023-09-11T03:40:41Z<p>Merlyn: /* DetailObject element -> jitter_degrees attribute */</p>
<hr />
<div>This is the top-level XML file for a level object. It specifies visual parameters, some gameplay parameters, and paths for visual assets.<br><br />
Other XML file types reference this XML file type, such as [[Xml File Formats#Character XML|Character XML files]] and [[Xml File Formats#Item XML|Item XML files]].<br />
<br />
== Object XML Example ==<br />
<onlyinclude><br />
<pre><br />
<?xml version="1.0" ?><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
<Label>impale</Label><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gray_metal_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gray_metal_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/cat_cobbles_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/cat_cobbles_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gold_hexagons_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gold_hexagons_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
</DetailMaps><br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="2" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="20" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/Objects/Environment/Rocks/lichen_rock_a.xml" weight_path="Data/Textures/Terrain/forest_hills/forest_hills_not_grass.tga"<br />
normal_conform="1" density="20" min_embed="0.3" max_embed="0.7" min_scale="0.08" max_scale="0.12"<br />
view_distance="10" jitter_degrees="45" overbright="0.4" tint_weight="0.5" collision_type="static" /><br />
</DetailObjects><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
<avg_color r = "100" g = "128" b = "47" /><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
<GroundOffset>0.5</GroundOffset><br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
</onlyinclude><br />
<br />
== Object XML -> Model element ==<br />
<br />
<pre><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the obj format model file.<br />
<br />
=== Model element -> element text ===<br />
<br />
<pre><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
</pre><br />
<br />
'''Required''' - String value. Path to the obj format model file.<br />
<br />
== Object XML -> ColorMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the color map texture for the object.<br />
<br />
=== ColorMap element -> element text ===<br />
<br />
<pre><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color map texture for the object.<br />
<br />
== Object XML -> NormalMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the normal map texture for the object.<br />
<br />
=== NormalMap element -> element text ===<br />
<br />
<pre><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the normal map texture for the object.<br />
<br />
== Object XML -> TranslucencyMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the translucency map texture for the object.<br />
<br />
=== TranslucencyMap element -> element text ===<br />
<br />
<pre><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the translucency map texture for the object.<br />
<br />
== Object XML -> WindMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the wind map texture for the object.<br />
<br />
=== WindMap element -> element text ===<br />
<br />
<pre><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the wind map texture for the object.<br />
<br />
== Object XML -> SharpnessMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br><br />
'''TODO''': links to/from other file types for this field?<br />
<br />
=== SharpnessMap element -> element text ===<br />
<br />
<pre><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br />
<br />
== Object XML -> Label element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Label>impale</Label><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
=== Label element -> element text ===<br />
<br />
<pre><br />
<Label>impale</Label><br />
</pre><br />
<br />
'''Required''' - String value. This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
== Object XML -> WeightMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the weight map texture for the object.<br />
<br />
=== WeightMap element -> element text ===<br />
<br />
<pre><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the weight map texture for the object.<br />
<br />
== Object XML -> PaletteMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies a set of different tintable areas on this object. The labels are the text displayed in the editor interface. Each color channel of the specified image will be used as a mask to specify where on the object's model the tinting should be limited to.<br />
<br />
=== PaletteMap element -> element text ===<br />
<br />
<pre><br />
<PaletteMap ...><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color masks, used when there's tint parameters that limit the tint to a specific area on the object, such as character clothing colors, a tintable area on a weapon, etc.<br />
<br />
=== PaletteMap element -> label_red attribute ===<br />
<br />
<pre><br />
<PaletteMap label_red="Clothing Color 1"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the red channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_green attribute ===<br />
<br />
<pre><br />
<PaletteMap label_green="Clothing Color 2"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the green channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_blue attribute ===<br />
<br />
<pre><br />
<PaletteMap label_blue="Clothing Color 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the blue channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_alpha attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 4"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the alpha channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_other attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 5"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the "other" channel of the tint mask image.<br><br />
'''TODO''': What the heck even is a "other" channel on an image? Does this even do anything in code, besides get parsed? -merlyn<br />
<br />
== Object XML -> DetailMaps element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
...<br />
</DetailMaps><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary material layers that provide fine, repeated visual detail on top of the object's main texture layers.<br />
<br />
== Object XML -> DetailMaps element -> DetailMap element ==<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
</pre><br />
<br />
'''Optional''' - The parameters for the detail map textures that repeat across the model, providing finer-scale detail. There can be up to four of these.<br />
<br />
=== DetailMap element -> colorpath attribute ===<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for this detail map's color map texture.<br />
<br />
=== DetailMap element -> normalpath attribute ===<br />
<br />
<pre><br />
<DetailMap normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the detail map's normal map texture.<br />
<br />
=== DetailMap element -> materialpath attribute ===<br />
<br />
<pre><br />
<DetailMap materialpath="Data/Materials/wood.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the given detail map level.<br><br />
'''TODO''': What is this used for? Aren't detail maps a visual-only thing? -merlyn<br />
<br />
== Object XML -> DetailObjects element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml"<br />
weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3"<br />
min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
...<br />
</DetailObjects><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary objects that will be scattered randomly to provide fine, repeated visual detail on top of the object's main surface.<br />
<br />
== Object XML -> DetailObjects element -> DetailObject element ==<br />
<br />
<pre><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml"<br />
weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3"<br />
min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0.4"<br />
tint_weight="0.5" collision_type="static" /><br />
</pre><br />
<br />
'''Optional''' - A secondary object type that will be scattered randomly to provide fine, repeated visual detail on top of the object's main surface.<br />
<br />
=== DetailObject element -> obj_path attribute ===<br />
<br />
<pre><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Object XML|Object XML]] for the given detail object type. Will provide rendering parameters for the detail objects.<br />
<br />
=== DetailObject element -> weight_path attribute ===<br />
<br />
<pre><br />
<DetailObject weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image that specifies the weight densities for the detail object scattering.<br />
<br />
=== DetailObject element -> normal_conform attribute ===<br />
<br />
<pre><br />
<DetailObject normal_conform="0.9" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies how much the normal of the detail objects will be shifted to match the normal of the surface they are decorating.<br><br />
'''TODO''': What are the units? -merlyn<br />
<br />
=== DetailObject element -> density attribute ===<br />
<br />
<pre><br />
<DetailObject density="3" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies how many of the detail objects should be placed per area, upon the surface they decorate.<br><br />
'''TODO''': What are the units? -merlyn<br />
<br />
=== DetailObject element -> min_embed attribute ===<br />
<br />
<pre><br />
<DetailObject min_embed="-0.2" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the deepest that detail objects will be embedded into the surface of the object they decorate. The actual value is random, and this is the deepest range value.<br />
<br />
=== DetailObject element -> max_embed attribute ===<br />
<br />
<pre><br />
<DetailObject max_embed="0.0" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the shallowest that detail objects will be embedded into the surface of the object they decorate. The actual value is random, and this is the shallowest range value.<br />
<br />
=== DetailObject element -> min_scale attribute ===<br />
<br />
<pre><br />
<DetailObject min_scale="4.0" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies the smallest value that detail objects will be scaled to. The actual value is random, and this is the smallest range value.<br />
<br />
=== DetailObject element -> max_scale attribute ===<br />
<br />
<pre><br />
<DetailObject max_scale="6.8" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies the largest value that detail objects will be scaled to. The actual value is random, and this is the largest range value.<br />
<br />
=== DetailObject element -> view_distance attribute ===<br />
<br />
<pre><br />
<DetailObject view_distance="10" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>30.0</code>. Specifies the farthest distance that the detail object will be visible from. Values are specified in game units (meters).<br />
<br />
=== DetailObject element -> jitter_degrees attribute ===<br />
<br />
<pre><br />
<DetailObject jitter_degrees="10" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the maximum number of degrees to randomly rotate the object, to keep detail objects from awkwardly all pointing directly upward, and to increase visual variety.<br />
<br />
=== DetailObject element -> overbright attribute ===<br />
<br />
<pre><br />
<DetailObject overbright="0.4" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the overbright value to render the object with.<br><br />
'''TODO''': Need a better description. Default value? Units? -merlyn<br />
<br />
=== DetailObject element -> tint_weight attribute ===<br />
<br />
<pre><br />
<DetailObject tint_weight="0.5" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the blend percentage between the detail object's tint, and the tint it inherits from the object's surface it decorates. The value should be between <code>0.0</code> and <code>1.0</code>.<br><br />
'''TODO''': Default value? -merlyn<br />
<br />
=== DetailObject element -> collision_type attribute ===<br />
<br />
<pre><br />
<DetailObject collision_type="static" ... /><br />
</pre><br />
<br />
'''Optional''' - Enumerated value. Specifies the type of collision this object should have with moving objects in the world. Valid values are <code>static</code>, <code>plant</code>, and unset.<br><br />
The default value is unset, which will result in an object with dynamic collision.<br />
<br />
== Object XML -> ShaderName element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
=== ShaderName element -> element text ===<br />
<br />
<pre><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
</pre><br />
<br />
'''Required''' - String value. The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
== Object XML -> avg_color element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<avg_color r = "100" g = "128" b = "47" /><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should use for rendering acceleration, e.g. if a texture hasn't loaded in, or for simplified lighting.<br><br />
'''TODO''': Is this even remotely correct? Kinda just guessing, without looking at the code. -merlyn<br />
<br />
=== avg_color element -> r attribute ===<br />
<br />
<pre><br />
<avg_color r = "100" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> g attribute ===<br />
<br />
<pre><br />
<avg_color ... g = "128" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> b attribute ===<br />
<br />
<pre><br />
<avg_color ... b = "47" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
== Object XML -> MaterialPath element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
=== MaterialPath element -> element text ===<br />
<br />
<pre><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
== Object XML -> Flags element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of flags that will be applied to this object, if set to true. Some of these flags affect rendering (e.g. <code>double_sided</code>), some affect physics (e.g. <code>no_collision</code>), and others affect gameplay interactions with this object (e.g. <code>bush_collision</code>).<br />
<br />
=== Flags element -> transparent attribute ===<br />
<br />
<pre><br />
<Flags transparent = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be rendered in the transparent rendering pass.<br><br />
This flag doesn't make the object transparent on its own, and must also be coupled with transparent shader flags and a transparency map texture.<br />
<br />
=== Flags element -> no_collision attribute ===<br />
<br />
<pre><br />
<Flags no_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will not trigger collisions with players, items, or weapons.<br><br />
<br />
=== Flags element -> clamp_texture attribute ===<br />
<br />
<pre><br />
<Flags clamp_texture = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will render with its texture clamped at its edges, instead of repeating.<br><br />
<br />
=== Flags element -> bush_collision attribute ===<br />
<br />
<pre><br />
<Flags bush_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will trigger jiggle physics when items and characters collide with it. Physics objects will also be slowed down when interacting with it, but not completely blocked. It will also impact line of sight.<br />
<br />
=== Flags element -> terrain_fixed attribute ===<br />
<br />
<pre><br />
<Flags terrain_fixed = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be locked to the terrain when placed.<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> dynamic attribute ===<br />
<br />
<pre><br />
<Flags dynamic = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be considered to move by script, and the physics engine will use that information for optimization<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> double_sided attribute ===<br />
<br />
<pre><br />
<Flags double_sided = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will have its polygons rendered double-sided. This is useful for objects such as flags and cloth, that have no thickness.<br />
<br />
== Object XML -> GroundOffset element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<GroundOffset>0.5</GroundOffset><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
=== GroundOffset element -> element text ===<br />
<br />
<pre><br />
<GroundOffset>0.5</GroundOffset><br />
</pre><br />
<br />
'''Required''' - Decimal value. The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
== Object XML -> ColorTint element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should be tinted, by default. This can be overridden in the editor after the object is placed in the world.<br />
<br />
=== ColorTint element -> r attribute ===<br />
<br />
<pre><br />
<ColorTint r = "101" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> g attribute ===<br />
<br />
<pre><br />
<ColorTint ... g = "129" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> b attribute ===<br />
<br />
<pre><br />
<ColorTint ... b = "46" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the tint color. Value is between <code>0</code> and <code>255</code>.</div>Merlynhttp://wiki.wolfire.com/index.php?title=Overgrowth_Object_Xml_File_Format&diff=6257Overgrowth Object Xml File Format2023-09-11T03:40:23Z<p>Merlyn: /* DetailObject element -> view_distance attribute */</p>
<hr />
<div>This is the top-level XML file for a level object. It specifies visual parameters, some gameplay parameters, and paths for visual assets.<br><br />
Other XML file types reference this XML file type, such as [[Xml File Formats#Character XML|Character XML files]] and [[Xml File Formats#Item XML|Item XML files]].<br />
<br />
== Object XML Example ==<br />
<onlyinclude><br />
<pre><br />
<?xml version="1.0" ?><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
<Label>impale</Label><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gray_metal_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gray_metal_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/cat_cobbles_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/cat_cobbles_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gold_hexagons_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gold_hexagons_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
</DetailMaps><br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="2" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="20" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/Objects/Environment/Rocks/lichen_rock_a.xml" weight_path="Data/Textures/Terrain/forest_hills/forest_hills_not_grass.tga"<br />
normal_conform="1" density="20" min_embed="0.3" max_embed="0.7" min_scale="0.08" max_scale="0.12"<br />
view_distance="10" jitter_degrees="45" overbright="0.4" tint_weight="0.5" collision_type="static" /><br />
</DetailObjects><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
<avg_color r = "100" g = "128" b = "47" /><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
<GroundOffset>0.5</GroundOffset><br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
</onlyinclude><br />
<br />
== Object XML -> Model element ==<br />
<br />
<pre><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the obj format model file.<br />
<br />
=== Model element -> element text ===<br />
<br />
<pre><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
</pre><br />
<br />
'''Required''' - String value. Path to the obj format model file.<br />
<br />
== Object XML -> ColorMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the color map texture for the object.<br />
<br />
=== ColorMap element -> element text ===<br />
<br />
<pre><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color map texture for the object.<br />
<br />
== Object XML -> NormalMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the normal map texture for the object.<br />
<br />
=== NormalMap element -> element text ===<br />
<br />
<pre><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the normal map texture for the object.<br />
<br />
== Object XML -> TranslucencyMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the translucency map texture for the object.<br />
<br />
=== TranslucencyMap element -> element text ===<br />
<br />
<pre><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the translucency map texture for the object.<br />
<br />
== Object XML -> WindMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the wind map texture for the object.<br />
<br />
=== WindMap element -> element text ===<br />
<br />
<pre><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the wind map texture for the object.<br />
<br />
== Object XML -> SharpnessMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br><br />
'''TODO''': links to/from other file types for this field?<br />
<br />
=== SharpnessMap element -> element text ===<br />
<br />
<pre><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br />
<br />
== Object XML -> Label element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Label>impale</Label><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
=== Label element -> element text ===<br />
<br />
<pre><br />
<Label>impale</Label><br />
</pre><br />
<br />
'''Required''' - String value. This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
== Object XML -> WeightMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the weight map texture for the object.<br />
<br />
=== WeightMap element -> element text ===<br />
<br />
<pre><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the weight map texture for the object.<br />
<br />
== Object XML -> PaletteMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies a set of different tintable areas on this object. The labels are the text displayed in the editor interface. Each color channel of the specified image will be used as a mask to specify where on the object's model the tinting should be limited to.<br />
<br />
=== PaletteMap element -> element text ===<br />
<br />
<pre><br />
<PaletteMap ...><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color masks, used when there's tint parameters that limit the tint to a specific area on the object, such as character clothing colors, a tintable area on a weapon, etc.<br />
<br />
=== PaletteMap element -> label_red attribute ===<br />
<br />
<pre><br />
<PaletteMap label_red="Clothing Color 1"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the red channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_green attribute ===<br />
<br />
<pre><br />
<PaletteMap label_green="Clothing Color 2"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the green channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_blue attribute ===<br />
<br />
<pre><br />
<PaletteMap label_blue="Clothing Color 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the blue channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_alpha attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 4"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the alpha channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_other attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 5"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the "other" channel of the tint mask image.<br><br />
'''TODO''': What the heck even is a "other" channel on an image? Does this even do anything in code, besides get parsed? -merlyn<br />
<br />
== Object XML -> DetailMaps element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
...<br />
</DetailMaps><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary material layers that provide fine, repeated visual detail on top of the object's main texture layers.<br />
<br />
== Object XML -> DetailMaps element -> DetailMap element ==<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
</pre><br />
<br />
'''Optional''' - The parameters for the detail map textures that repeat across the model, providing finer-scale detail. There can be up to four of these.<br />
<br />
=== DetailMap element -> colorpath attribute ===<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for this detail map's color map texture.<br />
<br />
=== DetailMap element -> normalpath attribute ===<br />
<br />
<pre><br />
<DetailMap normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the detail map's normal map texture.<br />
<br />
=== DetailMap element -> materialpath attribute ===<br />
<br />
<pre><br />
<DetailMap materialpath="Data/Materials/wood.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the given detail map level.<br><br />
'''TODO''': What is this used for? Aren't detail maps a visual-only thing? -merlyn<br />
<br />
== Object XML -> DetailObjects element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml"<br />
weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3"<br />
min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
...<br />
</DetailObjects><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary objects that will be scattered randomly to provide fine, repeated visual detail on top of the object's main surface.<br />
<br />
== Object XML -> DetailObjects element -> DetailObject element ==<br />
<br />
<pre><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml"<br />
weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3"<br />
min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0.4"<br />
tint_weight="0.5" collision_type="static" /><br />
</pre><br />
<br />
'''Optional''' - A secondary object type that will be scattered randomly to provide fine, repeated visual detail on top of the object's main surface.<br />
<br />
=== DetailObject element -> obj_path attribute ===<br />
<br />
<pre><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Object XML|Object XML]] for the given detail object type. Will provide rendering parameters for the detail objects.<br />
<br />
=== DetailObject element -> weight_path attribute ===<br />
<br />
<pre><br />
<DetailObject weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image that specifies the weight densities for the detail object scattering.<br />
<br />
=== DetailObject element -> normal_conform attribute ===<br />
<br />
<pre><br />
<DetailObject normal_conform="0.9" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies how much the normal of the detail objects will be shifted to match the normal of the surface they are decorating.<br><br />
'''TODO''': What are the units? -merlyn<br />
<br />
=== DetailObject element -> density attribute ===<br />
<br />
<pre><br />
<DetailObject density="3" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies how many of the detail objects should be placed per area, upon the surface they decorate.<br><br />
'''TODO''': What are the units? -merlyn<br />
<br />
=== DetailObject element -> min_embed attribute ===<br />
<br />
<pre><br />
<DetailObject min_embed="-0.2" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the deepest that detail objects will be embedded into the surface of the object they decorate. The actual value is random, and this is the deepest range value.<br />
<br />
=== DetailObject element -> max_embed attribute ===<br />
<br />
<pre><br />
<DetailObject max_embed="0.0" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the shallowest that detail objects will be embedded into the surface of the object they decorate. The actual value is random, and this is the shallowest range value.<br />
<br />
=== DetailObject element -> min_scale attribute ===<br />
<br />
<pre><br />
<DetailObject min_scale="4.0" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies the smallest value that detail objects will be scaled to. The actual value is random, and this is the smallest range value.<br />
<br />
=== DetailObject element -> max_scale attribute ===<br />
<br />
<pre><br />
<DetailObject max_scale="6.8" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies the largest value that detail objects will be scaled to. The actual value is random, and this is the largest range value.<br />
<br />
=== DetailObject element -> view_distance attribute ===<br />
<br />
<pre><br />
<DetailObject view_distance="10" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>30.0</code>. Specifies the farthest distance that the detail object will be visible from. Values are specified in game units (meters).<br />
<br />
=== DetailObject element -> jitter_degrees attribute ===<br />
<br />
<pre><br />
<DetailObject jitter_degrees="10" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the maximum number of degrees to randomly rotate the object, to keep detail objects from awkwardly all pointing directly upward, and to increase visual variety.<br><br />
'''TODO''': What's the default value? -merlyn<br />
<br />
=== DetailObject element -> overbright attribute ===<br />
<br />
<pre><br />
<DetailObject overbright="0.4" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the overbright value to render the object with.<br><br />
'''TODO''': Need a better description. Default value? Units? -merlyn<br />
<br />
=== DetailObject element -> tint_weight attribute ===<br />
<br />
<pre><br />
<DetailObject tint_weight="0.5" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the blend percentage between the detail object's tint, and the tint it inherits from the object's surface it decorates. The value should be between <code>0.0</code> and <code>1.0</code>.<br><br />
'''TODO''': Default value? -merlyn<br />
<br />
=== DetailObject element -> collision_type attribute ===<br />
<br />
<pre><br />
<DetailObject collision_type="static" ... /><br />
</pre><br />
<br />
'''Optional''' - Enumerated value. Specifies the type of collision this object should have with moving objects in the world. Valid values are <code>static</code>, <code>plant</code>, and unset.<br><br />
The default value is unset, which will result in an object with dynamic collision.<br />
<br />
== Object XML -> ShaderName element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
=== ShaderName element -> element text ===<br />
<br />
<pre><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
</pre><br />
<br />
'''Required''' - String value. The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
== Object XML -> avg_color element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<avg_color r = "100" g = "128" b = "47" /><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should use for rendering acceleration, e.g. if a texture hasn't loaded in, or for simplified lighting.<br><br />
'''TODO''': Is this even remotely correct? Kinda just guessing, without looking at the code. -merlyn<br />
<br />
=== avg_color element -> r attribute ===<br />
<br />
<pre><br />
<avg_color r = "100" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> g attribute ===<br />
<br />
<pre><br />
<avg_color ... g = "128" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> b attribute ===<br />
<br />
<pre><br />
<avg_color ... b = "47" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
== Object XML -> MaterialPath element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
=== MaterialPath element -> element text ===<br />
<br />
<pre><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
== Object XML -> Flags element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of flags that will be applied to this object, if set to true. Some of these flags affect rendering (e.g. <code>double_sided</code>), some affect physics (e.g. <code>no_collision</code>), and others affect gameplay interactions with this object (e.g. <code>bush_collision</code>).<br />
<br />
=== Flags element -> transparent attribute ===<br />
<br />
<pre><br />
<Flags transparent = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be rendered in the transparent rendering pass.<br><br />
This flag doesn't make the object transparent on its own, and must also be coupled with transparent shader flags and a transparency map texture.<br />
<br />
=== Flags element -> no_collision attribute ===<br />
<br />
<pre><br />
<Flags no_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will not trigger collisions with players, items, or weapons.<br><br />
<br />
=== Flags element -> clamp_texture attribute ===<br />
<br />
<pre><br />
<Flags clamp_texture = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will render with its texture clamped at its edges, instead of repeating.<br><br />
<br />
=== Flags element -> bush_collision attribute ===<br />
<br />
<pre><br />
<Flags bush_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will trigger jiggle physics when items and characters collide with it. Physics objects will also be slowed down when interacting with it, but not completely blocked. It will also impact line of sight.<br />
<br />
=== Flags element -> terrain_fixed attribute ===<br />
<br />
<pre><br />
<Flags terrain_fixed = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be locked to the terrain when placed.<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> dynamic attribute ===<br />
<br />
<pre><br />
<Flags dynamic = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be considered to move by script, and the physics engine will use that information for optimization<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> double_sided attribute ===<br />
<br />
<pre><br />
<Flags double_sided = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will have its polygons rendered double-sided. This is useful for objects such as flags and cloth, that have no thickness.<br />
<br />
== Object XML -> GroundOffset element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<GroundOffset>0.5</GroundOffset><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
=== GroundOffset element -> element text ===<br />
<br />
<pre><br />
<GroundOffset>0.5</GroundOffset><br />
</pre><br />
<br />
'''Required''' - Decimal value. The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
== Object XML -> ColorTint element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should be tinted, by default. This can be overridden in the editor after the object is placed in the world.<br />
<br />
=== ColorTint element -> r attribute ===<br />
<br />
<pre><br />
<ColorTint r = "101" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> g attribute ===<br />
<br />
<pre><br />
<ColorTint ... g = "129" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> b attribute ===<br />
<br />
<pre><br />
<ColorTint ... b = "46" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the tint color. Value is between <code>0</code> and <code>255</code>.</div>Merlynhttp://wiki.wolfire.com/index.php?title=Overgrowth_Object_Xml_File_Format&diff=6256Overgrowth Object Xml File Format2023-09-11T03:39:55Z<p>Merlyn: /* DetailObject element -> max_scale attribute */</p>
<hr />
<div>This is the top-level XML file for a level object. It specifies visual parameters, some gameplay parameters, and paths for visual assets.<br><br />
Other XML file types reference this XML file type, such as [[Xml File Formats#Character XML|Character XML files]] and [[Xml File Formats#Item XML|Item XML files]].<br />
<br />
== Object XML Example ==<br />
<onlyinclude><br />
<pre><br />
<?xml version="1.0" ?><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
<Label>impale</Label><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gray_metal_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gray_metal_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/cat_cobbles_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/cat_cobbles_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gold_hexagons_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gold_hexagons_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
</DetailMaps><br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="2" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="20" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/Objects/Environment/Rocks/lichen_rock_a.xml" weight_path="Data/Textures/Terrain/forest_hills/forest_hills_not_grass.tga"<br />
normal_conform="1" density="20" min_embed="0.3" max_embed="0.7" min_scale="0.08" max_scale="0.12"<br />
view_distance="10" jitter_degrees="45" overbright="0.4" tint_weight="0.5" collision_type="static" /><br />
</DetailObjects><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
<avg_color r = "100" g = "128" b = "47" /><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
<GroundOffset>0.5</GroundOffset><br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
</onlyinclude><br />
<br />
== Object XML -> Model element ==<br />
<br />
<pre><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the obj format model file.<br />
<br />
=== Model element -> element text ===<br />
<br />
<pre><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
</pre><br />
<br />
'''Required''' - String value. Path to the obj format model file.<br />
<br />
== Object XML -> ColorMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the color map texture for the object.<br />
<br />
=== ColorMap element -> element text ===<br />
<br />
<pre><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color map texture for the object.<br />
<br />
== Object XML -> NormalMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the normal map texture for the object.<br />
<br />
=== NormalMap element -> element text ===<br />
<br />
<pre><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the normal map texture for the object.<br />
<br />
== Object XML -> TranslucencyMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the translucency map texture for the object.<br />
<br />
=== TranslucencyMap element -> element text ===<br />
<br />
<pre><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the translucency map texture for the object.<br />
<br />
== Object XML -> WindMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the wind map texture for the object.<br />
<br />
=== WindMap element -> element text ===<br />
<br />
<pre><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the wind map texture for the object.<br />
<br />
== Object XML -> SharpnessMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br><br />
'''TODO''': links to/from other file types for this field?<br />
<br />
=== SharpnessMap element -> element text ===<br />
<br />
<pre><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br />
<br />
== Object XML -> Label element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Label>impale</Label><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
=== Label element -> element text ===<br />
<br />
<pre><br />
<Label>impale</Label><br />
</pre><br />
<br />
'''Required''' - String value. This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
== Object XML -> WeightMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the weight map texture for the object.<br />
<br />
=== WeightMap element -> element text ===<br />
<br />
<pre><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the weight map texture for the object.<br />
<br />
== Object XML -> PaletteMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies a set of different tintable areas on this object. The labels are the text displayed in the editor interface. Each color channel of the specified image will be used as a mask to specify where on the object's model the tinting should be limited to.<br />
<br />
=== PaletteMap element -> element text ===<br />
<br />
<pre><br />
<PaletteMap ...><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color masks, used when there's tint parameters that limit the tint to a specific area on the object, such as character clothing colors, a tintable area on a weapon, etc.<br />
<br />
=== PaletteMap element -> label_red attribute ===<br />
<br />
<pre><br />
<PaletteMap label_red="Clothing Color 1"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the red channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_green attribute ===<br />
<br />
<pre><br />
<PaletteMap label_green="Clothing Color 2"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the green channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_blue attribute ===<br />
<br />
<pre><br />
<PaletteMap label_blue="Clothing Color 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the blue channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_alpha attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 4"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the alpha channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_other attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 5"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the "other" channel of the tint mask image.<br><br />
'''TODO''': What the heck even is a "other" channel on an image? Does this even do anything in code, besides get parsed? -merlyn<br />
<br />
== Object XML -> DetailMaps element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
...<br />
</DetailMaps><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary material layers that provide fine, repeated visual detail on top of the object's main texture layers.<br />
<br />
== Object XML -> DetailMaps element -> DetailMap element ==<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
</pre><br />
<br />
'''Optional''' - The parameters for the detail map textures that repeat across the model, providing finer-scale detail. There can be up to four of these.<br />
<br />
=== DetailMap element -> colorpath attribute ===<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for this detail map's color map texture.<br />
<br />
=== DetailMap element -> normalpath attribute ===<br />
<br />
<pre><br />
<DetailMap normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the detail map's normal map texture.<br />
<br />
=== DetailMap element -> materialpath attribute ===<br />
<br />
<pre><br />
<DetailMap materialpath="Data/Materials/wood.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the given detail map level.<br><br />
'''TODO''': What is this used for? Aren't detail maps a visual-only thing? -merlyn<br />
<br />
== Object XML -> DetailObjects element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml"<br />
weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3"<br />
min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
...<br />
</DetailObjects><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary objects that will be scattered randomly to provide fine, repeated visual detail on top of the object's main surface.<br />
<br />
== Object XML -> DetailObjects element -> DetailObject element ==<br />
<br />
<pre><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml"<br />
weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3"<br />
min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0.4"<br />
tint_weight="0.5" collision_type="static" /><br />
</pre><br />
<br />
'''Optional''' - A secondary object type that will be scattered randomly to provide fine, repeated visual detail on top of the object's main surface.<br />
<br />
=== DetailObject element -> obj_path attribute ===<br />
<br />
<pre><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Object XML|Object XML]] for the given detail object type. Will provide rendering parameters for the detail objects.<br />
<br />
=== DetailObject element -> weight_path attribute ===<br />
<br />
<pre><br />
<DetailObject weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image that specifies the weight densities for the detail object scattering.<br />
<br />
=== DetailObject element -> normal_conform attribute ===<br />
<br />
<pre><br />
<DetailObject normal_conform="0.9" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies how much the normal of the detail objects will be shifted to match the normal of the surface they are decorating.<br><br />
'''TODO''': What are the units? -merlyn<br />
<br />
=== DetailObject element -> density attribute ===<br />
<br />
<pre><br />
<DetailObject density="3" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies how many of the detail objects should be placed per area, upon the surface they decorate.<br><br />
'''TODO''': What are the units? -merlyn<br />
<br />
=== DetailObject element -> min_embed attribute ===<br />
<br />
<pre><br />
<DetailObject min_embed="-0.2" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the deepest that detail objects will be embedded into the surface of the object they decorate. The actual value is random, and this is the deepest range value.<br />
<br />
=== DetailObject element -> max_embed attribute ===<br />
<br />
<pre><br />
<DetailObject max_embed="0.0" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the shallowest that detail objects will be embedded into the surface of the object they decorate. The actual value is random, and this is the shallowest range value.<br />
<br />
=== DetailObject element -> min_scale attribute ===<br />
<br />
<pre><br />
<DetailObject min_scale="4.0" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies the smallest value that detail objects will be scaled to. The actual value is random, and this is the smallest range value.<br />
<br />
=== DetailObject element -> max_scale attribute ===<br />
<br />
<pre><br />
<DetailObject max_scale="6.8" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies the largest value that detail objects will be scaled to. The actual value is random, and this is the largest range value.<br />
<br />
=== DetailObject element -> view_distance attribute ===<br />
<br />
<pre><br />
<DetailObject view_distance="10" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the farthest distance that the detail object will be visible from. The default value is <code>30</code>. Values are specified in game units (meters).<br />
<br />
=== DetailObject element -> jitter_degrees attribute ===<br />
<br />
<pre><br />
<DetailObject jitter_degrees="10" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the maximum number of degrees to randomly rotate the object, to keep detail objects from awkwardly all pointing directly upward, and to increase visual variety.<br><br />
'''TODO''': What's the default value? -merlyn<br />
<br />
=== DetailObject element -> overbright attribute ===<br />
<br />
<pre><br />
<DetailObject overbright="0.4" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the overbright value to render the object with.<br><br />
'''TODO''': Need a better description. Default value? Units? -merlyn<br />
<br />
=== DetailObject element -> tint_weight attribute ===<br />
<br />
<pre><br />
<DetailObject tint_weight="0.5" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the blend percentage between the detail object's tint, and the tint it inherits from the object's surface it decorates. The value should be between <code>0.0</code> and <code>1.0</code>.<br><br />
'''TODO''': Default value? -merlyn<br />
<br />
=== DetailObject element -> collision_type attribute ===<br />
<br />
<pre><br />
<DetailObject collision_type="static" ... /><br />
</pre><br />
<br />
'''Optional''' - Enumerated value. Specifies the type of collision this object should have with moving objects in the world. Valid values are <code>static</code>, <code>plant</code>, and unset.<br><br />
The default value is unset, which will result in an object with dynamic collision.<br />
<br />
== Object XML -> ShaderName element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
=== ShaderName element -> element text ===<br />
<br />
<pre><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
</pre><br />
<br />
'''Required''' - String value. The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
== Object XML -> avg_color element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<avg_color r = "100" g = "128" b = "47" /><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should use for rendering acceleration, e.g. if a texture hasn't loaded in, or for simplified lighting.<br><br />
'''TODO''': Is this even remotely correct? Kinda just guessing, without looking at the code. -merlyn<br />
<br />
=== avg_color element -> r attribute ===<br />
<br />
<pre><br />
<avg_color r = "100" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> g attribute ===<br />
<br />
<pre><br />
<avg_color ... g = "128" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> b attribute ===<br />
<br />
<pre><br />
<avg_color ... b = "47" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
== Object XML -> MaterialPath element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
=== MaterialPath element -> element text ===<br />
<br />
<pre><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
== Object XML -> Flags element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of flags that will be applied to this object, if set to true. Some of these flags affect rendering (e.g. <code>double_sided</code>), some affect physics (e.g. <code>no_collision</code>), and others affect gameplay interactions with this object (e.g. <code>bush_collision</code>).<br />
<br />
=== Flags element -> transparent attribute ===<br />
<br />
<pre><br />
<Flags transparent = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be rendered in the transparent rendering pass.<br><br />
This flag doesn't make the object transparent on its own, and must also be coupled with transparent shader flags and a transparency map texture.<br />
<br />
=== Flags element -> no_collision attribute ===<br />
<br />
<pre><br />
<Flags no_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will not trigger collisions with players, items, or weapons.<br><br />
<br />
=== Flags element -> clamp_texture attribute ===<br />
<br />
<pre><br />
<Flags clamp_texture = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will render with its texture clamped at its edges, instead of repeating.<br><br />
<br />
=== Flags element -> bush_collision attribute ===<br />
<br />
<pre><br />
<Flags bush_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will trigger jiggle physics when items and characters collide with it. Physics objects will also be slowed down when interacting with it, but not completely blocked. It will also impact line of sight.<br />
<br />
=== Flags element -> terrain_fixed attribute ===<br />
<br />
<pre><br />
<Flags terrain_fixed = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be locked to the terrain when placed.<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> dynamic attribute ===<br />
<br />
<pre><br />
<Flags dynamic = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be considered to move by script, and the physics engine will use that information for optimization<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> double_sided attribute ===<br />
<br />
<pre><br />
<Flags double_sided = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will have its polygons rendered double-sided. This is useful for objects such as flags and cloth, that have no thickness.<br />
<br />
== Object XML -> GroundOffset element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<GroundOffset>0.5</GroundOffset><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
=== GroundOffset element -> element text ===<br />
<br />
<pre><br />
<GroundOffset>0.5</GroundOffset><br />
</pre><br />
<br />
'''Required''' - Decimal value. The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
== Object XML -> ColorTint element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should be tinted, by default. This can be overridden in the editor after the object is placed in the world.<br />
<br />
=== ColorTint element -> r attribute ===<br />
<br />
<pre><br />
<ColorTint r = "101" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> g attribute ===<br />
<br />
<pre><br />
<ColorTint ... g = "129" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> b attribute ===<br />
<br />
<pre><br />
<ColorTint ... b = "46" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the tint color. Value is between <code>0</code> and <code>255</code>.</div>Merlynhttp://wiki.wolfire.com/index.php?title=Overgrowth_Object_Xml_File_Format&diff=6255Overgrowth Object Xml File Format2023-09-11T03:39:44Z<p>Merlyn: /* DetailObject element -> min_scale attribute */</p>
<hr />
<div>This is the top-level XML file for a level object. It specifies visual parameters, some gameplay parameters, and paths for visual assets.<br><br />
Other XML file types reference this XML file type, such as [[Xml File Formats#Character XML|Character XML files]] and [[Xml File Formats#Item XML|Item XML files]].<br />
<br />
== Object XML Example ==<br />
<onlyinclude><br />
<pre><br />
<?xml version="1.0" ?><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
<Label>impale</Label><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gray_metal_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gray_metal_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/cat_cobbles_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/cat_cobbles_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gold_hexagons_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gold_hexagons_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
</DetailMaps><br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="2" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="20" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/Objects/Environment/Rocks/lichen_rock_a.xml" weight_path="Data/Textures/Terrain/forest_hills/forest_hills_not_grass.tga"<br />
normal_conform="1" density="20" min_embed="0.3" max_embed="0.7" min_scale="0.08" max_scale="0.12"<br />
view_distance="10" jitter_degrees="45" overbright="0.4" tint_weight="0.5" collision_type="static" /><br />
</DetailObjects><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
<avg_color r = "100" g = "128" b = "47" /><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
<GroundOffset>0.5</GroundOffset><br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
</onlyinclude><br />
<br />
== Object XML -> Model element ==<br />
<br />
<pre><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the obj format model file.<br />
<br />
=== Model element -> element text ===<br />
<br />
<pre><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
</pre><br />
<br />
'''Required''' - String value. Path to the obj format model file.<br />
<br />
== Object XML -> ColorMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the color map texture for the object.<br />
<br />
=== ColorMap element -> element text ===<br />
<br />
<pre><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color map texture for the object.<br />
<br />
== Object XML -> NormalMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the normal map texture for the object.<br />
<br />
=== NormalMap element -> element text ===<br />
<br />
<pre><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the normal map texture for the object.<br />
<br />
== Object XML -> TranslucencyMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the translucency map texture for the object.<br />
<br />
=== TranslucencyMap element -> element text ===<br />
<br />
<pre><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the translucency map texture for the object.<br />
<br />
== Object XML -> WindMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the wind map texture for the object.<br />
<br />
=== WindMap element -> element text ===<br />
<br />
<pre><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the wind map texture for the object.<br />
<br />
== Object XML -> SharpnessMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br><br />
'''TODO''': links to/from other file types for this field?<br />
<br />
=== SharpnessMap element -> element text ===<br />
<br />
<pre><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br />
<br />
== Object XML -> Label element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Label>impale</Label><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
=== Label element -> element text ===<br />
<br />
<pre><br />
<Label>impale</Label><br />
</pre><br />
<br />
'''Required''' - String value. This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
== Object XML -> WeightMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the weight map texture for the object.<br />
<br />
=== WeightMap element -> element text ===<br />
<br />
<pre><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the weight map texture for the object.<br />
<br />
== Object XML -> PaletteMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies a set of different tintable areas on this object. The labels are the text displayed in the editor interface. Each color channel of the specified image will be used as a mask to specify where on the object's model the tinting should be limited to.<br />
<br />
=== PaletteMap element -> element text ===<br />
<br />
<pre><br />
<PaletteMap ...><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color masks, used when there's tint parameters that limit the tint to a specific area on the object, such as character clothing colors, a tintable area on a weapon, etc.<br />
<br />
=== PaletteMap element -> label_red attribute ===<br />
<br />
<pre><br />
<PaletteMap label_red="Clothing Color 1"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the red channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_green attribute ===<br />
<br />
<pre><br />
<PaletteMap label_green="Clothing Color 2"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the green channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_blue attribute ===<br />
<br />
<pre><br />
<PaletteMap label_blue="Clothing Color 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the blue channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_alpha attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 4"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the alpha channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_other attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 5"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the "other" channel of the tint mask image.<br><br />
'''TODO''': What the heck even is a "other" channel on an image? Does this even do anything in code, besides get parsed? -merlyn<br />
<br />
== Object XML -> DetailMaps element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
...<br />
</DetailMaps><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary material layers that provide fine, repeated visual detail on top of the object's main texture layers.<br />
<br />
== Object XML -> DetailMaps element -> DetailMap element ==<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
</pre><br />
<br />
'''Optional''' - The parameters for the detail map textures that repeat across the model, providing finer-scale detail. There can be up to four of these.<br />
<br />
=== DetailMap element -> colorpath attribute ===<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for this detail map's color map texture.<br />
<br />
=== DetailMap element -> normalpath attribute ===<br />
<br />
<pre><br />
<DetailMap normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the detail map's normal map texture.<br />
<br />
=== DetailMap element -> materialpath attribute ===<br />
<br />
<pre><br />
<DetailMap materialpath="Data/Materials/wood.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the given detail map level.<br><br />
'''TODO''': What is this used for? Aren't detail maps a visual-only thing? -merlyn<br />
<br />
== Object XML -> DetailObjects element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml"<br />
weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3"<br />
min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
...<br />
</DetailObjects><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary objects that will be scattered randomly to provide fine, repeated visual detail on top of the object's main surface.<br />
<br />
== Object XML -> DetailObjects element -> DetailObject element ==<br />
<br />
<pre><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml"<br />
weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3"<br />
min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0.4"<br />
tint_weight="0.5" collision_type="static" /><br />
</pre><br />
<br />
'''Optional''' - A secondary object type that will be scattered randomly to provide fine, repeated visual detail on top of the object's main surface.<br />
<br />
=== DetailObject element -> obj_path attribute ===<br />
<br />
<pre><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Object XML|Object XML]] for the given detail object type. Will provide rendering parameters for the detail objects.<br />
<br />
=== DetailObject element -> weight_path attribute ===<br />
<br />
<pre><br />
<DetailObject weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image that specifies the weight densities for the detail object scattering.<br />
<br />
=== DetailObject element -> normal_conform attribute ===<br />
<br />
<pre><br />
<DetailObject normal_conform="0.9" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies how much the normal of the detail objects will be shifted to match the normal of the surface they are decorating.<br><br />
'''TODO''': What are the units? -merlyn<br />
<br />
=== DetailObject element -> density attribute ===<br />
<br />
<pre><br />
<DetailObject density="3" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies how many of the detail objects should be placed per area, upon the surface they decorate.<br><br />
'''TODO''': What are the units? -merlyn<br />
<br />
=== DetailObject element -> min_embed attribute ===<br />
<br />
<pre><br />
<DetailObject min_embed="-0.2" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the deepest that detail objects will be embedded into the surface of the object they decorate. The actual value is random, and this is the deepest range value.<br />
<br />
=== DetailObject element -> max_embed attribute ===<br />
<br />
<pre><br />
<DetailObject max_embed="0.0" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the shallowest that detail objects will be embedded into the surface of the object they decorate. The actual value is random, and this is the shallowest range value.<br />
<br />
=== DetailObject element -> min_scale attribute ===<br />
<br />
<pre><br />
<DetailObject min_scale="4.0" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies the smallest value that detail objects will be scaled to. The actual value is random, and this is the smallest range value.<br />
<br />
=== DetailObject element -> max_scale attribute ===<br />
<br />
<pre><br />
<DetailObject max_scale="6.8" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the largest value that detail objects will be scaled to. The actual value is random, and this is the largest range value.<br />
<br />
=== DetailObject element -> view_distance attribute ===<br />
<br />
<pre><br />
<DetailObject view_distance="10" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the farthest distance that the detail object will be visible from. The default value is <code>30</code>. Values are specified in game units (meters).<br />
<br />
=== DetailObject element -> jitter_degrees attribute ===<br />
<br />
<pre><br />
<DetailObject jitter_degrees="10" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the maximum number of degrees to randomly rotate the object, to keep detail objects from awkwardly all pointing directly upward, and to increase visual variety.<br><br />
'''TODO''': What's the default value? -merlyn<br />
<br />
=== DetailObject element -> overbright attribute ===<br />
<br />
<pre><br />
<DetailObject overbright="0.4" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the overbright value to render the object with.<br><br />
'''TODO''': Need a better description. Default value? Units? -merlyn<br />
<br />
=== DetailObject element -> tint_weight attribute ===<br />
<br />
<pre><br />
<DetailObject tint_weight="0.5" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the blend percentage between the detail object's tint, and the tint it inherits from the object's surface it decorates. The value should be between <code>0.0</code> and <code>1.0</code>.<br><br />
'''TODO''': Default value? -merlyn<br />
<br />
=== DetailObject element -> collision_type attribute ===<br />
<br />
<pre><br />
<DetailObject collision_type="static" ... /><br />
</pre><br />
<br />
'''Optional''' - Enumerated value. Specifies the type of collision this object should have with moving objects in the world. Valid values are <code>static</code>, <code>plant</code>, and unset.<br><br />
The default value is unset, which will result in an object with dynamic collision.<br />
<br />
== Object XML -> ShaderName element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
=== ShaderName element -> element text ===<br />
<br />
<pre><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
</pre><br />
<br />
'''Required''' - String value. The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
== Object XML -> avg_color element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<avg_color r = "100" g = "128" b = "47" /><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should use for rendering acceleration, e.g. if a texture hasn't loaded in, or for simplified lighting.<br><br />
'''TODO''': Is this even remotely correct? Kinda just guessing, without looking at the code. -merlyn<br />
<br />
=== avg_color element -> r attribute ===<br />
<br />
<pre><br />
<avg_color r = "100" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> g attribute ===<br />
<br />
<pre><br />
<avg_color ... g = "128" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> b attribute ===<br />
<br />
<pre><br />
<avg_color ... b = "47" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
== Object XML -> MaterialPath element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
=== MaterialPath element -> element text ===<br />
<br />
<pre><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
== Object XML -> Flags element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of flags that will be applied to this object, if set to true. Some of these flags affect rendering (e.g. <code>double_sided</code>), some affect physics (e.g. <code>no_collision</code>), and others affect gameplay interactions with this object (e.g. <code>bush_collision</code>).<br />
<br />
=== Flags element -> transparent attribute ===<br />
<br />
<pre><br />
<Flags transparent = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be rendered in the transparent rendering pass.<br><br />
This flag doesn't make the object transparent on its own, and must also be coupled with transparent shader flags and a transparency map texture.<br />
<br />
=== Flags element -> no_collision attribute ===<br />
<br />
<pre><br />
<Flags no_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will not trigger collisions with players, items, or weapons.<br><br />
<br />
=== Flags element -> clamp_texture attribute ===<br />
<br />
<pre><br />
<Flags clamp_texture = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will render with its texture clamped at its edges, instead of repeating.<br><br />
<br />
=== Flags element -> bush_collision attribute ===<br />
<br />
<pre><br />
<Flags bush_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will trigger jiggle physics when items and characters collide with it. Physics objects will also be slowed down when interacting with it, but not completely blocked. It will also impact line of sight.<br />
<br />
=== Flags element -> terrain_fixed attribute ===<br />
<br />
<pre><br />
<Flags terrain_fixed = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be locked to the terrain when placed.<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> dynamic attribute ===<br />
<br />
<pre><br />
<Flags dynamic = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be considered to move by script, and the physics engine will use that information for optimization<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> double_sided attribute ===<br />
<br />
<pre><br />
<Flags double_sided = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will have its polygons rendered double-sided. This is useful for objects such as flags and cloth, that have no thickness.<br />
<br />
== Object XML -> GroundOffset element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<GroundOffset>0.5</GroundOffset><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
=== GroundOffset element -> element text ===<br />
<br />
<pre><br />
<GroundOffset>0.5</GroundOffset><br />
</pre><br />
<br />
'''Required''' - Decimal value. The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
== Object XML -> ColorTint element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should be tinted, by default. This can be overridden in the editor after the object is placed in the world.<br />
<br />
=== ColorTint element -> r attribute ===<br />
<br />
<pre><br />
<ColorTint r = "101" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> g attribute ===<br />
<br />
<pre><br />
<ColorTint ... g = "129" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> b attribute ===<br />
<br />
<pre><br />
<ColorTint ... b = "46" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the tint color. Value is between <code>0</code> and <code>255</code>.</div>Merlynhttp://wiki.wolfire.com/index.php?title=Overgrowth_Object_Xml_File_Format&diff=6254Overgrowth Object Xml File Format2023-09-11T03:39:25Z<p>Merlyn: /* DetailObject element -> max_embed attribute */</p>
<hr />
<div>This is the top-level XML file for a level object. It specifies visual parameters, some gameplay parameters, and paths for visual assets.<br><br />
Other XML file types reference this XML file type, such as [[Xml File Formats#Character XML|Character XML files]] and [[Xml File Formats#Item XML|Item XML files]].<br />
<br />
== Object XML Example ==<br />
<onlyinclude><br />
<pre><br />
<?xml version="1.0" ?><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
<Label>impale</Label><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gray_metal_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gray_metal_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/cat_cobbles_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/cat_cobbles_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gold_hexagons_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gold_hexagons_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
</DetailMaps><br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="2" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="20" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/Objects/Environment/Rocks/lichen_rock_a.xml" weight_path="Data/Textures/Terrain/forest_hills/forest_hills_not_grass.tga"<br />
normal_conform="1" density="20" min_embed="0.3" max_embed="0.7" min_scale="0.08" max_scale="0.12"<br />
view_distance="10" jitter_degrees="45" overbright="0.4" tint_weight="0.5" collision_type="static" /><br />
</DetailObjects><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
<avg_color r = "100" g = "128" b = "47" /><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
<GroundOffset>0.5</GroundOffset><br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
</onlyinclude><br />
<br />
== Object XML -> Model element ==<br />
<br />
<pre><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the obj format model file.<br />
<br />
=== Model element -> element text ===<br />
<br />
<pre><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
</pre><br />
<br />
'''Required''' - String value. Path to the obj format model file.<br />
<br />
== Object XML -> ColorMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the color map texture for the object.<br />
<br />
=== ColorMap element -> element text ===<br />
<br />
<pre><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color map texture for the object.<br />
<br />
== Object XML -> NormalMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the normal map texture for the object.<br />
<br />
=== NormalMap element -> element text ===<br />
<br />
<pre><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the normal map texture for the object.<br />
<br />
== Object XML -> TranslucencyMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the translucency map texture for the object.<br />
<br />
=== TranslucencyMap element -> element text ===<br />
<br />
<pre><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the translucency map texture for the object.<br />
<br />
== Object XML -> WindMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the wind map texture for the object.<br />
<br />
=== WindMap element -> element text ===<br />
<br />
<pre><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the wind map texture for the object.<br />
<br />
== Object XML -> SharpnessMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br><br />
'''TODO''': links to/from other file types for this field?<br />
<br />
=== SharpnessMap element -> element text ===<br />
<br />
<pre><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br />
<br />
== Object XML -> Label element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Label>impale</Label><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
=== Label element -> element text ===<br />
<br />
<pre><br />
<Label>impale</Label><br />
</pre><br />
<br />
'''Required''' - String value. This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
== Object XML -> WeightMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the weight map texture for the object.<br />
<br />
=== WeightMap element -> element text ===<br />
<br />
<pre><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the weight map texture for the object.<br />
<br />
== Object XML -> PaletteMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies a set of different tintable areas on this object. The labels are the text displayed in the editor interface. Each color channel of the specified image will be used as a mask to specify where on the object's model the tinting should be limited to.<br />
<br />
=== PaletteMap element -> element text ===<br />
<br />
<pre><br />
<PaletteMap ...><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color masks, used when there's tint parameters that limit the tint to a specific area on the object, such as character clothing colors, a tintable area on a weapon, etc.<br />
<br />
=== PaletteMap element -> label_red attribute ===<br />
<br />
<pre><br />
<PaletteMap label_red="Clothing Color 1"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the red channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_green attribute ===<br />
<br />
<pre><br />
<PaletteMap label_green="Clothing Color 2"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the green channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_blue attribute ===<br />
<br />
<pre><br />
<PaletteMap label_blue="Clothing Color 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the blue channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_alpha attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 4"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the alpha channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_other attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 5"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the "other" channel of the tint mask image.<br><br />
'''TODO''': What the heck even is a "other" channel on an image? Does this even do anything in code, besides get parsed? -merlyn<br />
<br />
== Object XML -> DetailMaps element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
...<br />
</DetailMaps><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary material layers that provide fine, repeated visual detail on top of the object's main texture layers.<br />
<br />
== Object XML -> DetailMaps element -> DetailMap element ==<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
</pre><br />
<br />
'''Optional''' - The parameters for the detail map textures that repeat across the model, providing finer-scale detail. There can be up to four of these.<br />
<br />
=== DetailMap element -> colorpath attribute ===<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for this detail map's color map texture.<br />
<br />
=== DetailMap element -> normalpath attribute ===<br />
<br />
<pre><br />
<DetailMap normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the detail map's normal map texture.<br />
<br />
=== DetailMap element -> materialpath attribute ===<br />
<br />
<pre><br />
<DetailMap materialpath="Data/Materials/wood.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the given detail map level.<br><br />
'''TODO''': What is this used for? Aren't detail maps a visual-only thing? -merlyn<br />
<br />
== Object XML -> DetailObjects element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml"<br />
weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3"<br />
min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
...<br />
</DetailObjects><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary objects that will be scattered randomly to provide fine, repeated visual detail on top of the object's main surface.<br />
<br />
== Object XML -> DetailObjects element -> DetailObject element ==<br />
<br />
<pre><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml"<br />
weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3"<br />
min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0.4"<br />
tint_weight="0.5" collision_type="static" /><br />
</pre><br />
<br />
'''Optional''' - A secondary object type that will be scattered randomly to provide fine, repeated visual detail on top of the object's main surface.<br />
<br />
=== DetailObject element -> obj_path attribute ===<br />
<br />
<pre><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Object XML|Object XML]] for the given detail object type. Will provide rendering parameters for the detail objects.<br />
<br />
=== DetailObject element -> weight_path attribute ===<br />
<br />
<pre><br />
<DetailObject weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image that specifies the weight densities for the detail object scattering.<br />
<br />
=== DetailObject element -> normal_conform attribute ===<br />
<br />
<pre><br />
<DetailObject normal_conform="0.9" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies how much the normal of the detail objects will be shifted to match the normal of the surface they are decorating.<br><br />
'''TODO''': What are the units? -merlyn<br />
<br />
=== DetailObject element -> density attribute ===<br />
<br />
<pre><br />
<DetailObject density="3" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies how many of the detail objects should be placed per area, upon the surface they decorate.<br><br />
'''TODO''': What are the units? -merlyn<br />
<br />
=== DetailObject element -> min_embed attribute ===<br />
<br />
<pre><br />
<DetailObject min_embed="-0.2" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the deepest that detail objects will be embedded into the surface of the object they decorate. The actual value is random, and this is the deepest range value.<br />
<br />
=== DetailObject element -> max_embed attribute ===<br />
<br />
<pre><br />
<DetailObject max_embed="0.0" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the shallowest that detail objects will be embedded into the surface of the object they decorate. The actual value is random, and this is the shallowest range value.<br />
<br />
=== DetailObject element -> min_scale attribute ===<br />
<br />
<pre><br />
<DetailObject min_scale="4.0" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the smallest value that detail objects will be scaled to. The actual value is random, and this is the smallest range value.<br />
<br />
=== DetailObject element -> max_scale attribute ===<br />
<br />
<pre><br />
<DetailObject max_scale="6.8" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the largest value that detail objects will be scaled to. The actual value is random, and this is the largest range value.<br />
<br />
=== DetailObject element -> view_distance attribute ===<br />
<br />
<pre><br />
<DetailObject view_distance="10" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the farthest distance that the detail object will be visible from. The default value is <code>30</code>. Values are specified in game units (meters).<br />
<br />
=== DetailObject element -> jitter_degrees attribute ===<br />
<br />
<pre><br />
<DetailObject jitter_degrees="10" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the maximum number of degrees to randomly rotate the object, to keep detail objects from awkwardly all pointing directly upward, and to increase visual variety.<br><br />
'''TODO''': What's the default value? -merlyn<br />
<br />
=== DetailObject element -> overbright attribute ===<br />
<br />
<pre><br />
<DetailObject overbright="0.4" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the overbright value to render the object with.<br><br />
'''TODO''': Need a better description. Default value? Units? -merlyn<br />
<br />
=== DetailObject element -> tint_weight attribute ===<br />
<br />
<pre><br />
<DetailObject tint_weight="0.5" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the blend percentage between the detail object's tint, and the tint it inherits from the object's surface it decorates. The value should be between <code>0.0</code> and <code>1.0</code>.<br><br />
'''TODO''': Default value? -merlyn<br />
<br />
=== DetailObject element -> collision_type attribute ===<br />
<br />
<pre><br />
<DetailObject collision_type="static" ... /><br />
</pre><br />
<br />
'''Optional''' - Enumerated value. Specifies the type of collision this object should have with moving objects in the world. Valid values are <code>static</code>, <code>plant</code>, and unset.<br><br />
The default value is unset, which will result in an object with dynamic collision.<br />
<br />
== Object XML -> ShaderName element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
=== ShaderName element -> element text ===<br />
<br />
<pre><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
</pre><br />
<br />
'''Required''' - String value. The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
== Object XML -> avg_color element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<avg_color r = "100" g = "128" b = "47" /><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should use for rendering acceleration, e.g. if a texture hasn't loaded in, or for simplified lighting.<br><br />
'''TODO''': Is this even remotely correct? Kinda just guessing, without looking at the code. -merlyn<br />
<br />
=== avg_color element -> r attribute ===<br />
<br />
<pre><br />
<avg_color r = "100" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> g attribute ===<br />
<br />
<pre><br />
<avg_color ... g = "128" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> b attribute ===<br />
<br />
<pre><br />
<avg_color ... b = "47" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
== Object XML -> MaterialPath element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
=== MaterialPath element -> element text ===<br />
<br />
<pre><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
== Object XML -> Flags element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of flags that will be applied to this object, if set to true. Some of these flags affect rendering (e.g. <code>double_sided</code>), some affect physics (e.g. <code>no_collision</code>), and others affect gameplay interactions with this object (e.g. <code>bush_collision</code>).<br />
<br />
=== Flags element -> transparent attribute ===<br />
<br />
<pre><br />
<Flags transparent = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be rendered in the transparent rendering pass.<br><br />
This flag doesn't make the object transparent on its own, and must also be coupled with transparent shader flags and a transparency map texture.<br />
<br />
=== Flags element -> no_collision attribute ===<br />
<br />
<pre><br />
<Flags no_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will not trigger collisions with players, items, or weapons.<br><br />
<br />
=== Flags element -> clamp_texture attribute ===<br />
<br />
<pre><br />
<Flags clamp_texture = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will render with its texture clamped at its edges, instead of repeating.<br><br />
<br />
=== Flags element -> bush_collision attribute ===<br />
<br />
<pre><br />
<Flags bush_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will trigger jiggle physics when items and characters collide with it. Physics objects will also be slowed down when interacting with it, but not completely blocked. It will also impact line of sight.<br />
<br />
=== Flags element -> terrain_fixed attribute ===<br />
<br />
<pre><br />
<Flags terrain_fixed = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be locked to the terrain when placed.<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> dynamic attribute ===<br />
<br />
<pre><br />
<Flags dynamic = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be considered to move by script, and the physics engine will use that information for optimization<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> double_sided attribute ===<br />
<br />
<pre><br />
<Flags double_sided = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will have its polygons rendered double-sided. This is useful for objects such as flags and cloth, that have no thickness.<br />
<br />
== Object XML -> GroundOffset element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<GroundOffset>0.5</GroundOffset><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
=== GroundOffset element -> element text ===<br />
<br />
<pre><br />
<GroundOffset>0.5</GroundOffset><br />
</pre><br />
<br />
'''Required''' - Decimal value. The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
== Object XML -> ColorTint element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should be tinted, by default. This can be overridden in the editor after the object is placed in the world.<br />
<br />
=== ColorTint element -> r attribute ===<br />
<br />
<pre><br />
<ColorTint r = "101" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> g attribute ===<br />
<br />
<pre><br />
<ColorTint ... g = "129" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> b attribute ===<br />
<br />
<pre><br />
<ColorTint ... b = "46" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the tint color. Value is between <code>0</code> and <code>255</code>.</div>Merlynhttp://wiki.wolfire.com/index.php?title=Overgrowth_Object_Xml_File_Format&diff=6253Overgrowth Object Xml File Format2023-09-11T03:39:13Z<p>Merlyn: /* DetailObject element -> min_embed attribute */</p>
<hr />
<div>This is the top-level XML file for a level object. It specifies visual parameters, some gameplay parameters, and paths for visual assets.<br><br />
Other XML file types reference this XML file type, such as [[Xml File Formats#Character XML|Character XML files]] and [[Xml File Formats#Item XML|Item XML files]].<br />
<br />
== Object XML Example ==<br />
<onlyinclude><br />
<pre><br />
<?xml version="1.0" ?><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
<Label>impale</Label><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gray_metal_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gray_metal_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/cat_cobbles_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/cat_cobbles_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gold_hexagons_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gold_hexagons_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
</DetailMaps><br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="2" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="20" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/Objects/Environment/Rocks/lichen_rock_a.xml" weight_path="Data/Textures/Terrain/forest_hills/forest_hills_not_grass.tga"<br />
normal_conform="1" density="20" min_embed="0.3" max_embed="0.7" min_scale="0.08" max_scale="0.12"<br />
view_distance="10" jitter_degrees="45" overbright="0.4" tint_weight="0.5" collision_type="static" /><br />
</DetailObjects><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
<avg_color r = "100" g = "128" b = "47" /><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
<GroundOffset>0.5</GroundOffset><br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
</onlyinclude><br />
<br />
== Object XML -> Model element ==<br />
<br />
<pre><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the obj format model file.<br />
<br />
=== Model element -> element text ===<br />
<br />
<pre><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
</pre><br />
<br />
'''Required''' - String value. Path to the obj format model file.<br />
<br />
== Object XML -> ColorMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the color map texture for the object.<br />
<br />
=== ColorMap element -> element text ===<br />
<br />
<pre><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color map texture for the object.<br />
<br />
== Object XML -> NormalMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the normal map texture for the object.<br />
<br />
=== NormalMap element -> element text ===<br />
<br />
<pre><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the normal map texture for the object.<br />
<br />
== Object XML -> TranslucencyMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the translucency map texture for the object.<br />
<br />
=== TranslucencyMap element -> element text ===<br />
<br />
<pre><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the translucency map texture for the object.<br />
<br />
== Object XML -> WindMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the wind map texture for the object.<br />
<br />
=== WindMap element -> element text ===<br />
<br />
<pre><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the wind map texture for the object.<br />
<br />
== Object XML -> SharpnessMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br><br />
'''TODO''': links to/from other file types for this field?<br />
<br />
=== SharpnessMap element -> element text ===<br />
<br />
<pre><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br />
<br />
== Object XML -> Label element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Label>impale</Label><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
=== Label element -> element text ===<br />
<br />
<pre><br />
<Label>impale</Label><br />
</pre><br />
<br />
'''Required''' - String value. This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
== Object XML -> WeightMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the weight map texture for the object.<br />
<br />
=== WeightMap element -> element text ===<br />
<br />
<pre><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the weight map texture for the object.<br />
<br />
== Object XML -> PaletteMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies a set of different tintable areas on this object. The labels are the text displayed in the editor interface. Each color channel of the specified image will be used as a mask to specify where on the object's model the tinting should be limited to.<br />
<br />
=== PaletteMap element -> element text ===<br />
<br />
<pre><br />
<PaletteMap ...><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color masks, used when there's tint parameters that limit the tint to a specific area on the object, such as character clothing colors, a tintable area on a weapon, etc.<br />
<br />
=== PaletteMap element -> label_red attribute ===<br />
<br />
<pre><br />
<PaletteMap label_red="Clothing Color 1"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the red channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_green attribute ===<br />
<br />
<pre><br />
<PaletteMap label_green="Clothing Color 2"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the green channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_blue attribute ===<br />
<br />
<pre><br />
<PaletteMap label_blue="Clothing Color 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the blue channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_alpha attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 4"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the alpha channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_other attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 5"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the "other" channel of the tint mask image.<br><br />
'''TODO''': What the heck even is a "other" channel on an image? Does this even do anything in code, besides get parsed? -merlyn<br />
<br />
== Object XML -> DetailMaps element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
...<br />
</DetailMaps><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary material layers that provide fine, repeated visual detail on top of the object's main texture layers.<br />
<br />
== Object XML -> DetailMaps element -> DetailMap element ==<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
</pre><br />
<br />
'''Optional''' - The parameters for the detail map textures that repeat across the model, providing finer-scale detail. There can be up to four of these.<br />
<br />
=== DetailMap element -> colorpath attribute ===<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for this detail map's color map texture.<br />
<br />
=== DetailMap element -> normalpath attribute ===<br />
<br />
<pre><br />
<DetailMap normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the detail map's normal map texture.<br />
<br />
=== DetailMap element -> materialpath attribute ===<br />
<br />
<pre><br />
<DetailMap materialpath="Data/Materials/wood.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the given detail map level.<br><br />
'''TODO''': What is this used for? Aren't detail maps a visual-only thing? -merlyn<br />
<br />
== Object XML -> DetailObjects element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml"<br />
weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3"<br />
min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
...<br />
</DetailObjects><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary objects that will be scattered randomly to provide fine, repeated visual detail on top of the object's main surface.<br />
<br />
== Object XML -> DetailObjects element -> DetailObject element ==<br />
<br />
<pre><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml"<br />
weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3"<br />
min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0.4"<br />
tint_weight="0.5" collision_type="static" /><br />
</pre><br />
<br />
'''Optional''' - A secondary object type that will be scattered randomly to provide fine, repeated visual detail on top of the object's main surface.<br />
<br />
=== DetailObject element -> obj_path attribute ===<br />
<br />
<pre><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Object XML|Object XML]] for the given detail object type. Will provide rendering parameters for the detail objects.<br />
<br />
=== DetailObject element -> weight_path attribute ===<br />
<br />
<pre><br />
<DetailObject weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image that specifies the weight densities for the detail object scattering.<br />
<br />
=== DetailObject element -> normal_conform attribute ===<br />
<br />
<pre><br />
<DetailObject normal_conform="0.9" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies how much the normal of the detail objects will be shifted to match the normal of the surface they are decorating.<br><br />
'''TODO''': What are the units? -merlyn<br />
<br />
=== DetailObject element -> density attribute ===<br />
<br />
<pre><br />
<DetailObject density="3" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies how many of the detail objects should be placed per area, upon the surface they decorate.<br><br />
'''TODO''': What are the units? -merlyn<br />
<br />
=== DetailObject element -> min_embed attribute ===<br />
<br />
<pre><br />
<DetailObject min_embed="-0.2" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies the deepest that detail objects will be embedded into the surface of the object they decorate. The actual value is random, and this is the deepest range value.<br />
<br />
=== DetailObject element -> max_embed attribute ===<br />
<br />
<pre><br />
<DetailObject max_embed="0.0" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the shallowest that detail objects will be embedded into the surface of the object they decorate. The actual value is random, and this is the shallowest range value.<br><br />
'''TODO''': What is the default value? -merlyn<br />
<br />
=== DetailObject element -> min_scale attribute ===<br />
<br />
<pre><br />
<DetailObject min_scale="4.0" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the smallest value that detail objects will be scaled to. The actual value is random, and this is the smallest range value.<br />
<br />
=== DetailObject element -> max_scale attribute ===<br />
<br />
<pre><br />
<DetailObject max_scale="6.8" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the largest value that detail objects will be scaled to. The actual value is random, and this is the largest range value.<br />
<br />
=== DetailObject element -> view_distance attribute ===<br />
<br />
<pre><br />
<DetailObject view_distance="10" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the farthest distance that the detail object will be visible from. The default value is <code>30</code>. Values are specified in game units (meters).<br />
<br />
=== DetailObject element -> jitter_degrees attribute ===<br />
<br />
<pre><br />
<DetailObject jitter_degrees="10" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the maximum number of degrees to randomly rotate the object, to keep detail objects from awkwardly all pointing directly upward, and to increase visual variety.<br><br />
'''TODO''': What's the default value? -merlyn<br />
<br />
=== DetailObject element -> overbright attribute ===<br />
<br />
<pre><br />
<DetailObject overbright="0.4" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the overbright value to render the object with.<br><br />
'''TODO''': Need a better description. Default value? Units? -merlyn<br />
<br />
=== DetailObject element -> tint_weight attribute ===<br />
<br />
<pre><br />
<DetailObject tint_weight="0.5" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the blend percentage between the detail object's tint, and the tint it inherits from the object's surface it decorates. The value should be between <code>0.0</code> and <code>1.0</code>.<br><br />
'''TODO''': Default value? -merlyn<br />
<br />
=== DetailObject element -> collision_type attribute ===<br />
<br />
<pre><br />
<DetailObject collision_type="static" ... /><br />
</pre><br />
<br />
'''Optional''' - Enumerated value. Specifies the type of collision this object should have with moving objects in the world. Valid values are <code>static</code>, <code>plant</code>, and unset.<br><br />
The default value is unset, which will result in an object with dynamic collision.<br />
<br />
== Object XML -> ShaderName element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
=== ShaderName element -> element text ===<br />
<br />
<pre><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
</pre><br />
<br />
'''Required''' - String value. The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
== Object XML -> avg_color element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<avg_color r = "100" g = "128" b = "47" /><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should use for rendering acceleration, e.g. if a texture hasn't loaded in, or for simplified lighting.<br><br />
'''TODO''': Is this even remotely correct? Kinda just guessing, without looking at the code. -merlyn<br />
<br />
=== avg_color element -> r attribute ===<br />
<br />
<pre><br />
<avg_color r = "100" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> g attribute ===<br />
<br />
<pre><br />
<avg_color ... g = "128" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> b attribute ===<br />
<br />
<pre><br />
<avg_color ... b = "47" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
== Object XML -> MaterialPath element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
=== MaterialPath element -> element text ===<br />
<br />
<pre><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
== Object XML -> Flags element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of flags that will be applied to this object, if set to true. Some of these flags affect rendering (e.g. <code>double_sided</code>), some affect physics (e.g. <code>no_collision</code>), and others affect gameplay interactions with this object (e.g. <code>bush_collision</code>).<br />
<br />
=== Flags element -> transparent attribute ===<br />
<br />
<pre><br />
<Flags transparent = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be rendered in the transparent rendering pass.<br><br />
This flag doesn't make the object transparent on its own, and must also be coupled with transparent shader flags and a transparency map texture.<br />
<br />
=== Flags element -> no_collision attribute ===<br />
<br />
<pre><br />
<Flags no_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will not trigger collisions with players, items, or weapons.<br><br />
<br />
=== Flags element -> clamp_texture attribute ===<br />
<br />
<pre><br />
<Flags clamp_texture = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will render with its texture clamped at its edges, instead of repeating.<br><br />
<br />
=== Flags element -> bush_collision attribute ===<br />
<br />
<pre><br />
<Flags bush_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will trigger jiggle physics when items and characters collide with it. Physics objects will also be slowed down when interacting with it, but not completely blocked. It will also impact line of sight.<br />
<br />
=== Flags element -> terrain_fixed attribute ===<br />
<br />
<pre><br />
<Flags terrain_fixed = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be locked to the terrain when placed.<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> dynamic attribute ===<br />
<br />
<pre><br />
<Flags dynamic = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be considered to move by script, and the physics engine will use that information for optimization<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> double_sided attribute ===<br />
<br />
<pre><br />
<Flags double_sided = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will have its polygons rendered double-sided. This is useful for objects such as flags and cloth, that have no thickness.<br />
<br />
== Object XML -> GroundOffset element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<GroundOffset>0.5</GroundOffset><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
=== GroundOffset element -> element text ===<br />
<br />
<pre><br />
<GroundOffset>0.5</GroundOffset><br />
</pre><br />
<br />
'''Required''' - Decimal value. The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
== Object XML -> ColorTint element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should be tinted, by default. This can be overridden in the editor after the object is placed in the world.<br />
<br />
=== ColorTint element -> r attribute ===<br />
<br />
<pre><br />
<ColorTint r = "101" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> g attribute ===<br />
<br />
<pre><br />
<ColorTint ... g = "129" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> b attribute ===<br />
<br />
<pre><br />
<ColorTint ... b = "46" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the tint color. Value is between <code>0</code> and <code>255</code>.</div>Merlynhttp://wiki.wolfire.com/index.php?title=Overgrowth_Object_Xml_File_Format&diff=6252Overgrowth Object Xml File Format2023-09-11T03:38:44Z<p>Merlyn: /* DetailObject element -> normal_conform attribute */</p>
<hr />
<div>This is the top-level XML file for a level object. It specifies visual parameters, some gameplay parameters, and paths for visual assets.<br><br />
Other XML file types reference this XML file type, such as [[Xml File Formats#Character XML|Character XML files]] and [[Xml File Formats#Item XML|Item XML files]].<br />
<br />
== Object XML Example ==<br />
<onlyinclude><br />
<pre><br />
<?xml version="1.0" ?><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
<Label>impale</Label><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gray_metal_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gray_metal_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/cat_cobbles_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/cat_cobbles_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gold_hexagons_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gold_hexagons_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
</DetailMaps><br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="2" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="20" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/Objects/Environment/Rocks/lichen_rock_a.xml" weight_path="Data/Textures/Terrain/forest_hills/forest_hills_not_grass.tga"<br />
normal_conform="1" density="20" min_embed="0.3" max_embed="0.7" min_scale="0.08" max_scale="0.12"<br />
view_distance="10" jitter_degrees="45" overbright="0.4" tint_weight="0.5" collision_type="static" /><br />
</DetailObjects><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
<avg_color r = "100" g = "128" b = "47" /><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
<GroundOffset>0.5</GroundOffset><br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
</onlyinclude><br />
<br />
== Object XML -> Model element ==<br />
<br />
<pre><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the obj format model file.<br />
<br />
=== Model element -> element text ===<br />
<br />
<pre><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
</pre><br />
<br />
'''Required''' - String value. Path to the obj format model file.<br />
<br />
== Object XML -> ColorMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the color map texture for the object.<br />
<br />
=== ColorMap element -> element text ===<br />
<br />
<pre><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color map texture for the object.<br />
<br />
== Object XML -> NormalMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the normal map texture for the object.<br />
<br />
=== NormalMap element -> element text ===<br />
<br />
<pre><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the normal map texture for the object.<br />
<br />
== Object XML -> TranslucencyMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the translucency map texture for the object.<br />
<br />
=== TranslucencyMap element -> element text ===<br />
<br />
<pre><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the translucency map texture for the object.<br />
<br />
== Object XML -> WindMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the wind map texture for the object.<br />
<br />
=== WindMap element -> element text ===<br />
<br />
<pre><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the wind map texture for the object.<br />
<br />
== Object XML -> SharpnessMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br><br />
'''TODO''': links to/from other file types for this field?<br />
<br />
=== SharpnessMap element -> element text ===<br />
<br />
<pre><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br />
<br />
== Object XML -> Label element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Label>impale</Label><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
=== Label element -> element text ===<br />
<br />
<pre><br />
<Label>impale</Label><br />
</pre><br />
<br />
'''Required''' - String value. This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
== Object XML -> WeightMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the weight map texture for the object.<br />
<br />
=== WeightMap element -> element text ===<br />
<br />
<pre><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the weight map texture for the object.<br />
<br />
== Object XML -> PaletteMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies a set of different tintable areas on this object. The labels are the text displayed in the editor interface. Each color channel of the specified image will be used as a mask to specify where on the object's model the tinting should be limited to.<br />
<br />
=== PaletteMap element -> element text ===<br />
<br />
<pre><br />
<PaletteMap ...><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color masks, used when there's tint parameters that limit the tint to a specific area on the object, such as character clothing colors, a tintable area on a weapon, etc.<br />
<br />
=== PaletteMap element -> label_red attribute ===<br />
<br />
<pre><br />
<PaletteMap label_red="Clothing Color 1"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the red channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_green attribute ===<br />
<br />
<pre><br />
<PaletteMap label_green="Clothing Color 2"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the green channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_blue attribute ===<br />
<br />
<pre><br />
<PaletteMap label_blue="Clothing Color 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the blue channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_alpha attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 4"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the alpha channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_other attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 5"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the "other" channel of the tint mask image.<br><br />
'''TODO''': What the heck even is a "other" channel on an image? Does this even do anything in code, besides get parsed? -merlyn<br />
<br />
== Object XML -> DetailMaps element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
...<br />
</DetailMaps><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary material layers that provide fine, repeated visual detail on top of the object's main texture layers.<br />
<br />
== Object XML -> DetailMaps element -> DetailMap element ==<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
</pre><br />
<br />
'''Optional''' - The parameters for the detail map textures that repeat across the model, providing finer-scale detail. There can be up to four of these.<br />
<br />
=== DetailMap element -> colorpath attribute ===<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for this detail map's color map texture.<br />
<br />
=== DetailMap element -> normalpath attribute ===<br />
<br />
<pre><br />
<DetailMap normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the detail map's normal map texture.<br />
<br />
=== DetailMap element -> materialpath attribute ===<br />
<br />
<pre><br />
<DetailMap materialpath="Data/Materials/wood.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the given detail map level.<br><br />
'''TODO''': What is this used for? Aren't detail maps a visual-only thing? -merlyn<br />
<br />
== Object XML -> DetailObjects element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml"<br />
weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3"<br />
min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
...<br />
</DetailObjects><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary objects that will be scattered randomly to provide fine, repeated visual detail on top of the object's main surface.<br />
<br />
== Object XML -> DetailObjects element -> DetailObject element ==<br />
<br />
<pre><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml"<br />
weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3"<br />
min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0.4"<br />
tint_weight="0.5" collision_type="static" /><br />
</pre><br />
<br />
'''Optional''' - A secondary object type that will be scattered randomly to provide fine, repeated visual detail on top of the object's main surface.<br />
<br />
=== DetailObject element -> obj_path attribute ===<br />
<br />
<pre><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Object XML|Object XML]] for the given detail object type. Will provide rendering parameters for the detail objects.<br />
<br />
=== DetailObject element -> weight_path attribute ===<br />
<br />
<pre><br />
<DetailObject weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image that specifies the weight densities for the detail object scattering.<br />
<br />
=== DetailObject element -> normal_conform attribute ===<br />
<br />
<pre><br />
<DetailObject normal_conform="0.9" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>0.0</code>. Specifies how much the normal of the detail objects will be shifted to match the normal of the surface they are decorating.<br><br />
'''TODO''': What are the units? -merlyn<br />
<br />
=== DetailObject element -> density attribute ===<br />
<br />
<pre><br />
<DetailObject density="3" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies how many of the detail objects should be placed per area, upon the surface they decorate.<br><br />
'''TODO''': What are the units? -merlyn<br />
<br />
=== DetailObject element -> min_embed attribute ===<br />
<br />
<pre><br />
<DetailObject min_embed="-0.2" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the deepest that detail objects will be embedded into the surface of the object they decorate. The actual value is random, and this is the deepest range value.<br><br />
'''TODO''': What is the default value? -merlyn<br />
<br />
=== DetailObject element -> max_embed attribute ===<br />
<br />
<pre><br />
<DetailObject max_embed="0.0" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the shallowest that detail objects will be embedded into the surface of the object they decorate. The actual value is random, and this is the shallowest range value.<br><br />
'''TODO''': What is the default value? -merlyn<br />
<br />
=== DetailObject element -> min_scale attribute ===<br />
<br />
<pre><br />
<DetailObject min_scale="4.0" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the smallest value that detail objects will be scaled to. The actual value is random, and this is the smallest range value.<br />
<br />
=== DetailObject element -> max_scale attribute ===<br />
<br />
<pre><br />
<DetailObject max_scale="6.8" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the largest value that detail objects will be scaled to. The actual value is random, and this is the largest range value.<br />
<br />
=== DetailObject element -> view_distance attribute ===<br />
<br />
<pre><br />
<DetailObject view_distance="10" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the farthest distance that the detail object will be visible from. The default value is <code>30</code>. Values are specified in game units (meters).<br />
<br />
=== DetailObject element -> jitter_degrees attribute ===<br />
<br />
<pre><br />
<DetailObject jitter_degrees="10" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the maximum number of degrees to randomly rotate the object, to keep detail objects from awkwardly all pointing directly upward, and to increase visual variety.<br><br />
'''TODO''': What's the default value? -merlyn<br />
<br />
=== DetailObject element -> overbright attribute ===<br />
<br />
<pre><br />
<DetailObject overbright="0.4" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the overbright value to render the object with.<br><br />
'''TODO''': Need a better description. Default value? Units? -merlyn<br />
<br />
=== DetailObject element -> tint_weight attribute ===<br />
<br />
<pre><br />
<DetailObject tint_weight="0.5" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the blend percentage between the detail object's tint, and the tint it inherits from the object's surface it decorates. The value should be between <code>0.0</code> and <code>1.0</code>.<br><br />
'''TODO''': Default value? -merlyn<br />
<br />
=== DetailObject element -> collision_type attribute ===<br />
<br />
<pre><br />
<DetailObject collision_type="static" ... /><br />
</pre><br />
<br />
'''Optional''' - Enumerated value. Specifies the type of collision this object should have with moving objects in the world. Valid values are <code>static</code>, <code>plant</code>, and unset.<br><br />
The default value is unset, which will result in an object with dynamic collision.<br />
<br />
== Object XML -> ShaderName element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
=== ShaderName element -> element text ===<br />
<br />
<pre><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
</pre><br />
<br />
'''Required''' - String value. The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
== Object XML -> avg_color element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<avg_color r = "100" g = "128" b = "47" /><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should use for rendering acceleration, e.g. if a texture hasn't loaded in, or for simplified lighting.<br><br />
'''TODO''': Is this even remotely correct? Kinda just guessing, without looking at the code. -merlyn<br />
<br />
=== avg_color element -> r attribute ===<br />
<br />
<pre><br />
<avg_color r = "100" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> g attribute ===<br />
<br />
<pre><br />
<avg_color ... g = "128" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> b attribute ===<br />
<br />
<pre><br />
<avg_color ... b = "47" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
== Object XML -> MaterialPath element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
=== MaterialPath element -> element text ===<br />
<br />
<pre><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
== Object XML -> Flags element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of flags that will be applied to this object, if set to true. Some of these flags affect rendering (e.g. <code>double_sided</code>), some affect physics (e.g. <code>no_collision</code>), and others affect gameplay interactions with this object (e.g. <code>bush_collision</code>).<br />
<br />
=== Flags element -> transparent attribute ===<br />
<br />
<pre><br />
<Flags transparent = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be rendered in the transparent rendering pass.<br><br />
This flag doesn't make the object transparent on its own, and must also be coupled with transparent shader flags and a transparency map texture.<br />
<br />
=== Flags element -> no_collision attribute ===<br />
<br />
<pre><br />
<Flags no_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will not trigger collisions with players, items, or weapons.<br><br />
<br />
=== Flags element -> clamp_texture attribute ===<br />
<br />
<pre><br />
<Flags clamp_texture = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will render with its texture clamped at its edges, instead of repeating.<br><br />
<br />
=== Flags element -> bush_collision attribute ===<br />
<br />
<pre><br />
<Flags bush_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will trigger jiggle physics when items and characters collide with it. Physics objects will also be slowed down when interacting with it, but not completely blocked. It will also impact line of sight.<br />
<br />
=== Flags element -> terrain_fixed attribute ===<br />
<br />
<pre><br />
<Flags terrain_fixed = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be locked to the terrain when placed.<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> dynamic attribute ===<br />
<br />
<pre><br />
<Flags dynamic = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be considered to move by script, and the physics engine will use that information for optimization<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> double_sided attribute ===<br />
<br />
<pre><br />
<Flags double_sided = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will have its polygons rendered double-sided. This is useful for objects such as flags and cloth, that have no thickness.<br />
<br />
== Object XML -> GroundOffset element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<GroundOffset>0.5</GroundOffset><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
=== GroundOffset element -> element text ===<br />
<br />
<pre><br />
<GroundOffset>0.5</GroundOffset><br />
</pre><br />
<br />
'''Required''' - Decimal value. The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
== Object XML -> ColorTint element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should be tinted, by default. This can be overridden in the editor after the object is placed in the world.<br />
<br />
=== ColorTint element -> r attribute ===<br />
<br />
<pre><br />
<ColorTint r = "101" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> g attribute ===<br />
<br />
<pre><br />
<ColorTint ... g = "129" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> b attribute ===<br />
<br />
<pre><br />
<ColorTint ... b = "46" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the tint color. Value is between <code>0</code> and <code>255</code>.</div>Merlynhttp://wiki.wolfire.com/index.php?title=Overgrowth_Object_Xml_File_Format&diff=6251Overgrowth Object Xml File Format2023-09-11T03:38:13Z<p>Merlyn: /* DetailObject element -> density attribute */</p>
<hr />
<div>This is the top-level XML file for a level object. It specifies visual parameters, some gameplay parameters, and paths for visual assets.<br><br />
Other XML file types reference this XML file type, such as [[Xml File Formats#Character XML|Character XML files]] and [[Xml File Formats#Item XML|Item XML files]].<br />
<br />
== Object XML Example ==<br />
<onlyinclude><br />
<pre><br />
<?xml version="1.0" ?><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
<Label>impale</Label><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gray_metal_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gray_metal_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/cat_cobbles_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/cat_cobbles_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gold_hexagons_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gold_hexagons_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
</DetailMaps><br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="2" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="20" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/Objects/Environment/Rocks/lichen_rock_a.xml" weight_path="Data/Textures/Terrain/forest_hills/forest_hills_not_grass.tga"<br />
normal_conform="1" density="20" min_embed="0.3" max_embed="0.7" min_scale="0.08" max_scale="0.12"<br />
view_distance="10" jitter_degrees="45" overbright="0.4" tint_weight="0.5" collision_type="static" /><br />
</DetailObjects><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
<avg_color r = "100" g = "128" b = "47" /><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
<GroundOffset>0.5</GroundOffset><br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
</onlyinclude><br />
<br />
== Object XML -> Model element ==<br />
<br />
<pre><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the obj format model file.<br />
<br />
=== Model element -> element text ===<br />
<br />
<pre><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
</pre><br />
<br />
'''Required''' - String value. Path to the obj format model file.<br />
<br />
== Object XML -> ColorMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the color map texture for the object.<br />
<br />
=== ColorMap element -> element text ===<br />
<br />
<pre><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color map texture for the object.<br />
<br />
== Object XML -> NormalMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the normal map texture for the object.<br />
<br />
=== NormalMap element -> element text ===<br />
<br />
<pre><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the normal map texture for the object.<br />
<br />
== Object XML -> TranslucencyMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the translucency map texture for the object.<br />
<br />
=== TranslucencyMap element -> element text ===<br />
<br />
<pre><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the translucency map texture for the object.<br />
<br />
== Object XML -> WindMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the wind map texture for the object.<br />
<br />
=== WindMap element -> element text ===<br />
<br />
<pre><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the wind map texture for the object.<br />
<br />
== Object XML -> SharpnessMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br><br />
'''TODO''': links to/from other file types for this field?<br />
<br />
=== SharpnessMap element -> element text ===<br />
<br />
<pre><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br />
<br />
== Object XML -> Label element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Label>impale</Label><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
=== Label element -> element text ===<br />
<br />
<pre><br />
<Label>impale</Label><br />
</pre><br />
<br />
'''Required''' - String value. This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
== Object XML -> WeightMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the weight map texture for the object.<br />
<br />
=== WeightMap element -> element text ===<br />
<br />
<pre><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the weight map texture for the object.<br />
<br />
== Object XML -> PaletteMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies a set of different tintable areas on this object. The labels are the text displayed in the editor interface. Each color channel of the specified image will be used as a mask to specify where on the object's model the tinting should be limited to.<br />
<br />
=== PaletteMap element -> element text ===<br />
<br />
<pre><br />
<PaletteMap ...><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color masks, used when there's tint parameters that limit the tint to a specific area on the object, such as character clothing colors, a tintable area on a weapon, etc.<br />
<br />
=== PaletteMap element -> label_red attribute ===<br />
<br />
<pre><br />
<PaletteMap label_red="Clothing Color 1"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the red channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_green attribute ===<br />
<br />
<pre><br />
<PaletteMap label_green="Clothing Color 2"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the green channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_blue attribute ===<br />
<br />
<pre><br />
<PaletteMap label_blue="Clothing Color 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the blue channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_alpha attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 4"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the alpha channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_other attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 5"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the "other" channel of the tint mask image.<br><br />
'''TODO''': What the heck even is a "other" channel on an image? Does this even do anything in code, besides get parsed? -merlyn<br />
<br />
== Object XML -> DetailMaps element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
...<br />
</DetailMaps><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary material layers that provide fine, repeated visual detail on top of the object's main texture layers.<br />
<br />
== Object XML -> DetailMaps element -> DetailMap element ==<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
</pre><br />
<br />
'''Optional''' - The parameters for the detail map textures that repeat across the model, providing finer-scale detail. There can be up to four of these.<br />
<br />
=== DetailMap element -> colorpath attribute ===<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for this detail map's color map texture.<br />
<br />
=== DetailMap element -> normalpath attribute ===<br />
<br />
<pre><br />
<DetailMap normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the detail map's normal map texture.<br />
<br />
=== DetailMap element -> materialpath attribute ===<br />
<br />
<pre><br />
<DetailMap materialpath="Data/Materials/wood.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the given detail map level.<br><br />
'''TODO''': What is this used for? Aren't detail maps a visual-only thing? -merlyn<br />
<br />
== Object XML -> DetailObjects element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml"<br />
weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3"<br />
min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
...<br />
</DetailObjects><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary objects that will be scattered randomly to provide fine, repeated visual detail on top of the object's main surface.<br />
<br />
== Object XML -> DetailObjects element -> DetailObject element ==<br />
<br />
<pre><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml"<br />
weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3"<br />
min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0.4"<br />
tint_weight="0.5" collision_type="static" /><br />
</pre><br />
<br />
'''Optional''' - A secondary object type that will be scattered randomly to provide fine, repeated visual detail on top of the object's main surface.<br />
<br />
=== DetailObject element -> obj_path attribute ===<br />
<br />
<pre><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Object XML|Object XML]] for the given detail object type. Will provide rendering parameters for the detail objects.<br />
<br />
=== DetailObject element -> weight_path attribute ===<br />
<br />
<pre><br />
<DetailObject weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image that specifies the weight densities for the detail object scattering.<br />
<br />
=== DetailObject element -> normal_conform attribute ===<br />
<br />
<pre><br />
<DetailObject normal_conform="0.9" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies how much the normal of the detail objects will be shifted to match the normal of the surface they are decorating.<br><br />
'''TODO''': What are the units? What is the default value? -merlyn<br />
<br />
=== DetailObject element -> density attribute ===<br />
<br />
<pre><br />
<DetailObject density="3" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. The default value is <code>1.0</code>. Specifies how many of the detail objects should be placed per area, upon the surface they decorate.<br><br />
'''TODO''': What are the units? -merlyn<br />
<br />
=== DetailObject element -> min_embed attribute ===<br />
<br />
<pre><br />
<DetailObject min_embed="-0.2" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the deepest that detail objects will be embedded into the surface of the object they decorate. The actual value is random, and this is the deepest range value.<br><br />
'''TODO''': What is the default value? -merlyn<br />
<br />
=== DetailObject element -> max_embed attribute ===<br />
<br />
<pre><br />
<DetailObject max_embed="0.0" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the shallowest that detail objects will be embedded into the surface of the object they decorate. The actual value is random, and this is the shallowest range value.<br><br />
'''TODO''': What is the default value? -merlyn<br />
<br />
=== DetailObject element -> min_scale attribute ===<br />
<br />
<pre><br />
<DetailObject min_scale="4.0" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the smallest value that detail objects will be scaled to. The actual value is random, and this is the smallest range value.<br />
<br />
=== DetailObject element -> max_scale attribute ===<br />
<br />
<pre><br />
<DetailObject max_scale="6.8" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the largest value that detail objects will be scaled to. The actual value is random, and this is the largest range value.<br />
<br />
=== DetailObject element -> view_distance attribute ===<br />
<br />
<pre><br />
<DetailObject view_distance="10" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the farthest distance that the detail object will be visible from. The default value is <code>30</code>. Values are specified in game units (meters).<br />
<br />
=== DetailObject element -> jitter_degrees attribute ===<br />
<br />
<pre><br />
<DetailObject jitter_degrees="10" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the maximum number of degrees to randomly rotate the object, to keep detail objects from awkwardly all pointing directly upward, and to increase visual variety.<br><br />
'''TODO''': What's the default value? -merlyn<br />
<br />
=== DetailObject element -> overbright attribute ===<br />
<br />
<pre><br />
<DetailObject overbright="0.4" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the overbright value to render the object with.<br><br />
'''TODO''': Need a better description. Default value? Units? -merlyn<br />
<br />
=== DetailObject element -> tint_weight attribute ===<br />
<br />
<pre><br />
<DetailObject tint_weight="0.5" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the blend percentage between the detail object's tint, and the tint it inherits from the object's surface it decorates. The value should be between <code>0.0</code> and <code>1.0</code>.<br><br />
'''TODO''': Default value? -merlyn<br />
<br />
=== DetailObject element -> collision_type attribute ===<br />
<br />
<pre><br />
<DetailObject collision_type="static" ... /><br />
</pre><br />
<br />
'''Optional''' - Enumerated value. Specifies the type of collision this object should have with moving objects in the world. Valid values are <code>static</code>, <code>plant</code>, and unset.<br><br />
The default value is unset, which will result in an object with dynamic collision.<br />
<br />
== Object XML -> ShaderName element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
=== ShaderName element -> element text ===<br />
<br />
<pre><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
</pre><br />
<br />
'''Required''' - String value. The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
== Object XML -> avg_color element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<avg_color r = "100" g = "128" b = "47" /><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should use for rendering acceleration, e.g. if a texture hasn't loaded in, or for simplified lighting.<br><br />
'''TODO''': Is this even remotely correct? Kinda just guessing, without looking at the code. -merlyn<br />
<br />
=== avg_color element -> r attribute ===<br />
<br />
<pre><br />
<avg_color r = "100" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> g attribute ===<br />
<br />
<pre><br />
<avg_color ... g = "128" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> b attribute ===<br />
<br />
<pre><br />
<avg_color ... b = "47" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
== Object XML -> MaterialPath element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
=== MaterialPath element -> element text ===<br />
<br />
<pre><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
== Object XML -> Flags element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of flags that will be applied to this object, if set to true. Some of these flags affect rendering (e.g. <code>double_sided</code>), some affect physics (e.g. <code>no_collision</code>), and others affect gameplay interactions with this object (e.g. <code>bush_collision</code>).<br />
<br />
=== Flags element -> transparent attribute ===<br />
<br />
<pre><br />
<Flags transparent = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be rendered in the transparent rendering pass.<br><br />
This flag doesn't make the object transparent on its own, and must also be coupled with transparent shader flags and a transparency map texture.<br />
<br />
=== Flags element -> no_collision attribute ===<br />
<br />
<pre><br />
<Flags no_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will not trigger collisions with players, items, or weapons.<br><br />
<br />
=== Flags element -> clamp_texture attribute ===<br />
<br />
<pre><br />
<Flags clamp_texture = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will render with its texture clamped at its edges, instead of repeating.<br><br />
<br />
=== Flags element -> bush_collision attribute ===<br />
<br />
<pre><br />
<Flags bush_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will trigger jiggle physics when items and characters collide with it. Physics objects will also be slowed down when interacting with it, but not completely blocked. It will also impact line of sight.<br />
<br />
=== Flags element -> terrain_fixed attribute ===<br />
<br />
<pre><br />
<Flags terrain_fixed = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be locked to the terrain when placed.<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> dynamic attribute ===<br />
<br />
<pre><br />
<Flags dynamic = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be considered to move by script, and the physics engine will use that information for optimization<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> double_sided attribute ===<br />
<br />
<pre><br />
<Flags double_sided = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will have its polygons rendered double-sided. This is useful for objects such as flags and cloth, that have no thickness.<br />
<br />
== Object XML -> GroundOffset element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<GroundOffset>0.5</GroundOffset><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
=== GroundOffset element -> element text ===<br />
<br />
<pre><br />
<GroundOffset>0.5</GroundOffset><br />
</pre><br />
<br />
'''Required''' - Decimal value. The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
== Object XML -> ColorTint element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should be tinted, by default. This can be overridden in the editor after the object is placed in the world.<br />
<br />
=== ColorTint element -> r attribute ===<br />
<br />
<pre><br />
<ColorTint r = "101" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> g attribute ===<br />
<br />
<pre><br />
<ColorTint ... g = "129" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> b attribute ===<br />
<br />
<pre><br />
<ColorTint ... b = "46" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the tint color. Value is between <code>0</code> and <code>255</code>.</div>Merlynhttp://wiki.wolfire.com/index.php?title=Overgrowth_Object_Xml_File_Format&diff=6250Overgrowth Object Xml File Format2023-09-10T11:44:28Z<p>Merlyn: /* Object XML -> DetailObjects element -> DetailObject element */</p>
<hr />
<div>This is the top-level XML file for a level object. It specifies visual parameters, some gameplay parameters, and paths for visual assets.<br><br />
Other XML file types reference this XML file type, such as [[Xml File Formats#Character XML|Character XML files]] and [[Xml File Formats#Item XML|Item XML files]].<br />
<br />
== Object XML Example ==<br />
<onlyinclude><br />
<pre><br />
<?xml version="1.0" ?><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
<Label>impale</Label><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gray_metal_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gray_metal_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/cat_cobbles_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/cat_cobbles_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gold_hexagons_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gold_hexagons_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
</DetailMaps><br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="2" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="20" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/Objects/Environment/Rocks/lichen_rock_a.xml" weight_path="Data/Textures/Terrain/forest_hills/forest_hills_not_grass.tga"<br />
normal_conform="1" density="20" min_embed="0.3" max_embed="0.7" min_scale="0.08" max_scale="0.12"<br />
view_distance="10" jitter_degrees="45" overbright="0.4" tint_weight="0.5" collision_type="static" /><br />
</DetailObjects><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
<avg_color r = "100" g = "128" b = "47" /><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
<GroundOffset>0.5</GroundOffset><br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
</onlyinclude><br />
<br />
== Object XML -> Model element ==<br />
<br />
<pre><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the obj format model file.<br />
<br />
=== Model element -> element text ===<br />
<br />
<pre><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
</pre><br />
<br />
'''Required''' - String value. Path to the obj format model file.<br />
<br />
== Object XML -> ColorMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the color map texture for the object.<br />
<br />
=== ColorMap element -> element text ===<br />
<br />
<pre><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color map texture for the object.<br />
<br />
== Object XML -> NormalMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the normal map texture for the object.<br />
<br />
=== NormalMap element -> element text ===<br />
<br />
<pre><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the normal map texture for the object.<br />
<br />
== Object XML -> TranslucencyMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the translucency map texture for the object.<br />
<br />
=== TranslucencyMap element -> element text ===<br />
<br />
<pre><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the translucency map texture for the object.<br />
<br />
== Object XML -> WindMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the wind map texture for the object.<br />
<br />
=== WindMap element -> element text ===<br />
<br />
<pre><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the wind map texture for the object.<br />
<br />
== Object XML -> SharpnessMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br><br />
'''TODO''': links to/from other file types for this field?<br />
<br />
=== SharpnessMap element -> element text ===<br />
<br />
<pre><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br />
<br />
== Object XML -> Label element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Label>impale</Label><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
=== Label element -> element text ===<br />
<br />
<pre><br />
<Label>impale</Label><br />
</pre><br />
<br />
'''Required''' - String value. This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
== Object XML -> WeightMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the weight map texture for the object.<br />
<br />
=== WeightMap element -> element text ===<br />
<br />
<pre><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the weight map texture for the object.<br />
<br />
== Object XML -> PaletteMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies a set of different tintable areas on this object. The labels are the text displayed in the editor interface. Each color channel of the specified image will be used as a mask to specify where on the object's model the tinting should be limited to.<br />
<br />
=== PaletteMap element -> element text ===<br />
<br />
<pre><br />
<PaletteMap ...><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color masks, used when there's tint parameters that limit the tint to a specific area on the object, such as character clothing colors, a tintable area on a weapon, etc.<br />
<br />
=== PaletteMap element -> label_red attribute ===<br />
<br />
<pre><br />
<PaletteMap label_red="Clothing Color 1"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the red channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_green attribute ===<br />
<br />
<pre><br />
<PaletteMap label_green="Clothing Color 2"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the green channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_blue attribute ===<br />
<br />
<pre><br />
<PaletteMap label_blue="Clothing Color 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the blue channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_alpha attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 4"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the alpha channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_other attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 5"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the "other" channel of the tint mask image.<br><br />
'''TODO''': What the heck even is a "other" channel on an image? Does this even do anything in code, besides get parsed? -merlyn<br />
<br />
== Object XML -> DetailMaps element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
...<br />
</DetailMaps><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary material layers that provide fine, repeated visual detail on top of the object's main texture layers.<br />
<br />
== Object XML -> DetailMaps element -> DetailMap element ==<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
</pre><br />
<br />
'''Optional''' - The parameters for the detail map textures that repeat across the model, providing finer-scale detail. There can be up to four of these.<br />
<br />
=== DetailMap element -> colorpath attribute ===<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for this detail map's color map texture.<br />
<br />
=== DetailMap element -> normalpath attribute ===<br />
<br />
<pre><br />
<DetailMap normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the detail map's normal map texture.<br />
<br />
=== DetailMap element -> materialpath attribute ===<br />
<br />
<pre><br />
<DetailMap materialpath="Data/Materials/wood.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the given detail map level.<br><br />
'''TODO''': What is this used for? Aren't detail maps a visual-only thing? -merlyn<br />
<br />
== Object XML -> DetailObjects element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml"<br />
weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3"<br />
min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
...<br />
</DetailObjects><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary objects that will be scattered randomly to provide fine, repeated visual detail on top of the object's main surface.<br />
<br />
== Object XML -> DetailObjects element -> DetailObject element ==<br />
<br />
<pre><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml"<br />
weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3"<br />
min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0.4"<br />
tint_weight="0.5" collision_type="static" /><br />
</pre><br />
<br />
'''Optional''' - A secondary object type that will be scattered randomly to provide fine, repeated visual detail on top of the object's main surface.<br />
<br />
=== DetailObject element -> obj_path attribute ===<br />
<br />
<pre><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Object XML|Object XML]] for the given detail object type. Will provide rendering parameters for the detail objects.<br />
<br />
=== DetailObject element -> weight_path attribute ===<br />
<br />
<pre><br />
<DetailObject weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image that specifies the weight densities for the detail object scattering.<br />
<br />
=== DetailObject element -> normal_conform attribute ===<br />
<br />
<pre><br />
<DetailObject normal_conform="0.9" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies how much the normal of the detail objects will be shifted to match the normal of the surface they are decorating.<br><br />
'''TODO''': What are the units? What is the default value? -merlyn<br />
<br />
=== DetailObject element -> density attribute ===<br />
<br />
<pre><br />
<DetailObject density="3" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies how many of the detail objects should be placed per area, upon the surface they decorate.<br><br />
'''TODO''': What are the units? What is the default value? -merlyn<br />
<br />
=== DetailObject element -> min_embed attribute ===<br />
<br />
<pre><br />
<DetailObject min_embed="-0.2" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the deepest that detail objects will be embedded into the surface of the object they decorate. The actual value is random, and this is the deepest range value.<br><br />
'''TODO''': What is the default value? -merlyn<br />
<br />
=== DetailObject element -> max_embed attribute ===<br />
<br />
<pre><br />
<DetailObject max_embed="0.0" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the shallowest that detail objects will be embedded into the surface of the object they decorate. The actual value is random, and this is the shallowest range value.<br><br />
'''TODO''': What is the default value? -merlyn<br />
<br />
=== DetailObject element -> min_scale attribute ===<br />
<br />
<pre><br />
<DetailObject min_scale="4.0" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the smallest value that detail objects will be scaled to. The actual value is random, and this is the smallest range value.<br />
<br />
=== DetailObject element -> max_scale attribute ===<br />
<br />
<pre><br />
<DetailObject max_scale="6.8" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the largest value that detail objects will be scaled to. The actual value is random, and this is the largest range value.<br />
<br />
=== DetailObject element -> view_distance attribute ===<br />
<br />
<pre><br />
<DetailObject view_distance="10" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the farthest distance that the detail object will be visible from. The default value is <code>30</code>. Values are specified in game units (meters).<br />
<br />
=== DetailObject element -> jitter_degrees attribute ===<br />
<br />
<pre><br />
<DetailObject jitter_degrees="10" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the maximum number of degrees to randomly rotate the object, to keep detail objects from awkwardly all pointing directly upward, and to increase visual variety.<br><br />
'''TODO''': What's the default value? -merlyn<br />
<br />
=== DetailObject element -> overbright attribute ===<br />
<br />
<pre><br />
<DetailObject overbright="0.4" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the overbright value to render the object with.<br><br />
'''TODO''': Need a better description. Default value? Units? -merlyn<br />
<br />
=== DetailObject element -> tint_weight attribute ===<br />
<br />
<pre><br />
<DetailObject tint_weight="0.5" ... /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. Specifies the blend percentage between the detail object's tint, and the tint it inherits from the object's surface it decorates. The value should be between <code>0.0</code> and <code>1.0</code>.<br><br />
'''TODO''': Default value? -merlyn<br />
<br />
=== DetailObject element -> collision_type attribute ===<br />
<br />
<pre><br />
<DetailObject collision_type="static" ... /><br />
</pre><br />
<br />
'''Optional''' - Enumerated value. Specifies the type of collision this object should have with moving objects in the world. Valid values are <code>static</code>, <code>plant</code>, and unset.<br><br />
The default value is unset, which will result in an object with dynamic collision.<br />
<br />
== Object XML -> ShaderName element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
=== ShaderName element -> element text ===<br />
<br />
<pre><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
</pre><br />
<br />
'''Required''' - String value. The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
== Object XML -> avg_color element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<avg_color r = "100" g = "128" b = "47" /><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should use for rendering acceleration, e.g. if a texture hasn't loaded in, or for simplified lighting.<br><br />
'''TODO''': Is this even remotely correct? Kinda just guessing, without looking at the code. -merlyn<br />
<br />
=== avg_color element -> r attribute ===<br />
<br />
<pre><br />
<avg_color r = "100" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> g attribute ===<br />
<br />
<pre><br />
<avg_color ... g = "128" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> b attribute ===<br />
<br />
<pre><br />
<avg_color ... b = "47" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
== Object XML -> MaterialPath element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
=== MaterialPath element -> element text ===<br />
<br />
<pre><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
== Object XML -> Flags element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of flags that will be applied to this object, if set to true. Some of these flags affect rendering (e.g. <code>double_sided</code>), some affect physics (e.g. <code>no_collision</code>), and others affect gameplay interactions with this object (e.g. <code>bush_collision</code>).<br />
<br />
=== Flags element -> transparent attribute ===<br />
<br />
<pre><br />
<Flags transparent = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be rendered in the transparent rendering pass.<br><br />
This flag doesn't make the object transparent on its own, and must also be coupled with transparent shader flags and a transparency map texture.<br />
<br />
=== Flags element -> no_collision attribute ===<br />
<br />
<pre><br />
<Flags no_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will not trigger collisions with players, items, or weapons.<br><br />
<br />
=== Flags element -> clamp_texture attribute ===<br />
<br />
<pre><br />
<Flags clamp_texture = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will render with its texture clamped at its edges, instead of repeating.<br><br />
<br />
=== Flags element -> bush_collision attribute ===<br />
<br />
<pre><br />
<Flags bush_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will trigger jiggle physics when items and characters collide with it. Physics objects will also be slowed down when interacting with it, but not completely blocked. It will also impact line of sight.<br />
<br />
=== Flags element -> terrain_fixed attribute ===<br />
<br />
<pre><br />
<Flags terrain_fixed = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be locked to the terrain when placed.<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> dynamic attribute ===<br />
<br />
<pre><br />
<Flags dynamic = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be considered to move by script, and the physics engine will use that information for optimization<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> double_sided attribute ===<br />
<br />
<pre><br />
<Flags double_sided = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will have its polygons rendered double-sided. This is useful for objects such as flags and cloth, that have no thickness.<br />
<br />
== Object XML -> GroundOffset element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<GroundOffset>0.5</GroundOffset><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
=== GroundOffset element -> element text ===<br />
<br />
<pre><br />
<GroundOffset>0.5</GroundOffset><br />
</pre><br />
<br />
'''Required''' - Decimal value. The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
== Object XML -> ColorTint element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should be tinted, by default. This can be overridden in the editor after the object is placed in the world.<br />
<br />
=== ColorTint element -> r attribute ===<br />
<br />
<pre><br />
<ColorTint r = "101" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> g attribute ===<br />
<br />
<pre><br />
<ColorTint ... g = "129" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> b attribute ===<br />
<br />
<pre><br />
<ColorTint ... b = "46" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the tint color. Value is between <code>0</code> and <code>255</code>.</div>Merlynhttp://wiki.wolfire.com/index.php?title=Overgrowth_Object_Xml_File_Format&diff=6249Overgrowth Object Xml File Format2023-09-10T11:21:52Z<p>Merlyn: /* Object XML -> DetailObjects element */</p>
<hr />
<div>This is the top-level XML file for a level object. It specifies visual parameters, some gameplay parameters, and paths for visual assets.<br><br />
Other XML file types reference this XML file type, such as [[Xml File Formats#Character XML|Character XML files]] and [[Xml File Formats#Item XML|Item XML files]].<br />
<br />
== Object XML Example ==<br />
<onlyinclude><br />
<pre><br />
<?xml version="1.0" ?><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
<Label>impale</Label><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gray_metal_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gray_metal_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/cat_cobbles_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/cat_cobbles_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gold_hexagons_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gold_hexagons_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
</DetailMaps><br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="2" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="20" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/Objects/Environment/Rocks/lichen_rock_a.xml" weight_path="Data/Textures/Terrain/forest_hills/forest_hills_not_grass.tga"<br />
normal_conform="1" density="20" min_embed="0.3" max_embed="0.7" min_scale="0.08" max_scale="0.12"<br />
view_distance="10" jitter_degrees="45" overbright="0.4" tint_weight="0.5" collision_type="static" /><br />
</DetailObjects><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
<avg_color r = "100" g = "128" b = "47" /><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
<GroundOffset>0.5</GroundOffset><br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
</onlyinclude><br />
<br />
== Object XML -> Model element ==<br />
<br />
<pre><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the obj format model file.<br />
<br />
=== Model element -> element text ===<br />
<br />
<pre><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
</pre><br />
<br />
'''Required''' - String value. Path to the obj format model file.<br />
<br />
== Object XML -> ColorMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the color map texture for the object.<br />
<br />
=== ColorMap element -> element text ===<br />
<br />
<pre><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color map texture for the object.<br />
<br />
== Object XML -> NormalMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the normal map texture for the object.<br />
<br />
=== NormalMap element -> element text ===<br />
<br />
<pre><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the normal map texture for the object.<br />
<br />
== Object XML -> TranslucencyMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the translucency map texture for the object.<br />
<br />
=== TranslucencyMap element -> element text ===<br />
<br />
<pre><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the translucency map texture for the object.<br />
<br />
== Object XML -> WindMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the wind map texture for the object.<br />
<br />
=== WindMap element -> element text ===<br />
<br />
<pre><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the wind map texture for the object.<br />
<br />
== Object XML -> SharpnessMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br><br />
'''TODO''': links to/from other file types for this field?<br />
<br />
=== SharpnessMap element -> element text ===<br />
<br />
<pre><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br />
<br />
== Object XML -> Label element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Label>impale</Label><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
=== Label element -> element text ===<br />
<br />
<pre><br />
<Label>impale</Label><br />
</pre><br />
<br />
'''Required''' - String value. This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
== Object XML -> WeightMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the weight map texture for the object.<br />
<br />
=== WeightMap element -> element text ===<br />
<br />
<pre><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the weight map texture for the object.<br />
<br />
== Object XML -> PaletteMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies a set of different tintable areas on this object. The labels are the text displayed in the editor interface. Each color channel of the specified image will be used as a mask to specify where on the object's model the tinting should be limited to.<br />
<br />
=== PaletteMap element -> element text ===<br />
<br />
<pre><br />
<PaletteMap ...><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color masks, used when there's tint parameters that limit the tint to a specific area on the object, such as character clothing colors, a tintable area on a weapon, etc.<br />
<br />
=== PaletteMap element -> label_red attribute ===<br />
<br />
<pre><br />
<PaletteMap label_red="Clothing Color 1"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the red channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_green attribute ===<br />
<br />
<pre><br />
<PaletteMap label_green="Clothing Color 2"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the green channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_blue attribute ===<br />
<br />
<pre><br />
<PaletteMap label_blue="Clothing Color 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the blue channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_alpha attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 4"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the alpha channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_other attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 5"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the "other" channel of the tint mask image.<br><br />
'''TODO''': What the heck even is a "other" channel on an image? Does this even do anything in code, besides get parsed? -merlyn<br />
<br />
== Object XML -> DetailMaps element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
...<br />
</DetailMaps><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary material layers that provide fine, repeated visual detail on top of the object's main texture layers.<br />
<br />
== Object XML -> DetailMaps element -> DetailMap element ==<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
</pre><br />
<br />
'''Optional''' - The parameters for the detail map textures that repeat across the model, providing finer-scale detail. There can be up to four of these.<br />
<br />
=== DetailMap element -> colorpath attribute ===<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for this detail map's color map texture.<br />
<br />
=== DetailMap element -> normalpath attribute ===<br />
<br />
<pre><br />
<DetailMap normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the detail map's normal map texture.<br />
<br />
=== DetailMap element -> materialpath attribute ===<br />
<br />
<pre><br />
<DetailMap materialpath="Data/Materials/wood.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the given detail map level.<br><br />
'''TODO''': What is this used for? Aren't detail maps a visual-only thing? -merlyn<br />
<br />
== Object XML -> DetailObjects element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml"<br />
weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3"<br />
min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
...<br />
</DetailObjects><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary objects that will be scattered randomly to provide fine, repeated visual detail on top of the object's main surface.<br />
<br />
== Object XML -> DetailObjects element -> DetailObject element ==<br />
<br />
=== DetailObject element -> obj_path attribute ===<br />
=== DetailObject element -> weight_path attribute ===<br />
=== DetailObject element -> normal_conform attribute ===<br />
=== DetailObject element -> density attribute ===<br />
=== DetailObject element -> min_embed attribute ===<br />
=== DetailObject element -> max_embed attribute ===<br />
=== DetailObject element -> min_scale attribute ===<br />
=== DetailObject element -> max_scale attribute ===<br />
=== DetailObject element -> view_distance attribute ===<br />
=== DetailObject element -> jitter_degrees attribute ===<br />
=== DetailObject element -> overbright attribute ===<br />
=== DetailObject element -> tint_weight attribute ===<br />
=== DetailObject element -> collision_type attribute ===<br />
<br />
== Object XML -> ShaderName element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
=== ShaderName element -> element text ===<br />
<br />
<pre><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
</pre><br />
<br />
'''Required''' - String value. The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
== Object XML -> avg_color element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<avg_color r = "100" g = "128" b = "47" /><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should use for rendering acceleration, e.g. if a texture hasn't loaded in, or for simplified lighting.<br><br />
'''TODO''': Is this even remotely correct? Kinda just guessing, without looking at the code. -merlyn<br />
<br />
=== avg_color element -> r attribute ===<br />
<br />
<pre><br />
<avg_color r = "100" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> g attribute ===<br />
<br />
<pre><br />
<avg_color ... g = "128" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> b attribute ===<br />
<br />
<pre><br />
<avg_color ... b = "47" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
== Object XML -> MaterialPath element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
=== MaterialPath element -> element text ===<br />
<br />
<pre><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
== Object XML -> Flags element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of flags that will be applied to this object, if set to true. Some of these flags affect rendering (e.g. <code>double_sided</code>), some affect physics (e.g. <code>no_collision</code>), and others affect gameplay interactions with this object (e.g. <code>bush_collision</code>).<br />
<br />
=== Flags element -> transparent attribute ===<br />
<br />
<pre><br />
<Flags transparent = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be rendered in the transparent rendering pass.<br><br />
This flag doesn't make the object transparent on its own, and must also be coupled with transparent shader flags and a transparency map texture.<br />
<br />
=== Flags element -> no_collision attribute ===<br />
<br />
<pre><br />
<Flags no_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will not trigger collisions with players, items, or weapons.<br><br />
<br />
=== Flags element -> clamp_texture attribute ===<br />
<br />
<pre><br />
<Flags clamp_texture = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will render with its texture clamped at its edges, instead of repeating.<br><br />
<br />
=== Flags element -> bush_collision attribute ===<br />
<br />
<pre><br />
<Flags bush_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will trigger jiggle physics when items and characters collide with it. Physics objects will also be slowed down when interacting with it, but not completely blocked. It will also impact line of sight.<br />
<br />
=== Flags element -> terrain_fixed attribute ===<br />
<br />
<pre><br />
<Flags terrain_fixed = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be locked to the terrain when placed.<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> dynamic attribute ===<br />
<br />
<pre><br />
<Flags dynamic = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be considered to move by script, and the physics engine will use that information for optimization<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> double_sided attribute ===<br />
<br />
<pre><br />
<Flags double_sided = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will have its polygons rendered double-sided. This is useful for objects such as flags and cloth, that have no thickness.<br />
<br />
== Object XML -> GroundOffset element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<GroundOffset>0.5</GroundOffset><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
=== GroundOffset element -> element text ===<br />
<br />
<pre><br />
<GroundOffset>0.5</GroundOffset><br />
</pre><br />
<br />
'''Required''' - Decimal value. The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
== Object XML -> ColorTint element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should be tinted, by default. This can be overridden in the editor after the object is placed in the world.<br />
<br />
=== ColorTint element -> r attribute ===<br />
<br />
<pre><br />
<ColorTint r = "101" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> g attribute ===<br />
<br />
<pre><br />
<ColorTint ... g = "129" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> b attribute ===<br />
<br />
<pre><br />
<ColorTint ... b = "46" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the tint color. Value is between <code>0</code> and <code>255</code>.</div>Merlynhttp://wiki.wolfire.com/index.php?title=Overgrowth_Object_Xml_File_Format&diff=6248Overgrowth Object Xml File Format2023-09-10T11:18:08Z<p>Merlyn: /* Object XML Example */</p>
<hr />
<div>This is the top-level XML file for a level object. It specifies visual parameters, some gameplay parameters, and paths for visual assets.<br><br />
Other XML file types reference this XML file type, such as [[Xml File Formats#Character XML|Character XML files]] and [[Xml File Formats#Item XML|Item XML files]].<br />
<br />
== Object XML Example ==<br />
<onlyinclude><br />
<pre><br />
<?xml version="1.0" ?><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
<Label>impale</Label><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gray_metal_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gray_metal_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/cat_cobbles_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/cat_cobbles_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gold_hexagons_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gold_hexagons_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
</DetailMaps><br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="2" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="20" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/Objects/Environment/Rocks/lichen_rock_a.xml" weight_path="Data/Textures/Terrain/forest_hills/forest_hills_not_grass.tga"<br />
normal_conform="1" density="20" min_embed="0.3" max_embed="0.7" min_scale="0.08" max_scale="0.12"<br />
view_distance="10" jitter_degrees="45" overbright="0.4" tint_weight="0.5" collision_type="static" /><br />
</DetailObjects><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
<avg_color r = "100" g = "128" b = "47" /><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
<GroundOffset>0.5</GroundOffset><br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
</onlyinclude><br />
<br />
== Object XML -> Model element ==<br />
<br />
<pre><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the obj format model file.<br />
<br />
=== Model element -> element text ===<br />
<br />
<pre><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
</pre><br />
<br />
'''Required''' - String value. Path to the obj format model file.<br />
<br />
== Object XML -> ColorMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the color map texture for the object.<br />
<br />
=== ColorMap element -> element text ===<br />
<br />
<pre><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color map texture for the object.<br />
<br />
== Object XML -> NormalMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the normal map texture for the object.<br />
<br />
=== NormalMap element -> element text ===<br />
<br />
<pre><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the normal map texture for the object.<br />
<br />
== Object XML -> TranslucencyMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the translucency map texture for the object.<br />
<br />
=== TranslucencyMap element -> element text ===<br />
<br />
<pre><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the translucency map texture for the object.<br />
<br />
== Object XML -> WindMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the wind map texture for the object.<br />
<br />
=== WindMap element -> element text ===<br />
<br />
<pre><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the wind map texture for the object.<br />
<br />
== Object XML -> SharpnessMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br><br />
'''TODO''': links to/from other file types for this field?<br />
<br />
=== SharpnessMap element -> element text ===<br />
<br />
<pre><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br />
<br />
== Object XML -> Label element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Label>impale</Label><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
=== Label element -> element text ===<br />
<br />
<pre><br />
<Label>impale</Label><br />
</pre><br />
<br />
'''Required''' - String value. This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
== Object XML -> WeightMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the weight map texture for the object.<br />
<br />
=== WeightMap element -> element text ===<br />
<br />
<pre><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the weight map texture for the object.<br />
<br />
== Object XML -> PaletteMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies a set of different tintable areas on this object. The labels are the text displayed in the editor interface. Each color channel of the specified image will be used as a mask to specify where on the object's model the tinting should be limited to.<br />
<br />
=== PaletteMap element -> element text ===<br />
<br />
<pre><br />
<PaletteMap ...><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color masks, used when there's tint parameters that limit the tint to a specific area on the object, such as character clothing colors, a tintable area on a weapon, etc.<br />
<br />
=== PaletteMap element -> label_red attribute ===<br />
<br />
<pre><br />
<PaletteMap label_red="Clothing Color 1"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the red channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_green attribute ===<br />
<br />
<pre><br />
<PaletteMap label_green="Clothing Color 2"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the green channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_blue attribute ===<br />
<br />
<pre><br />
<PaletteMap label_blue="Clothing Color 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the blue channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_alpha attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 4"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the alpha channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_other attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 5"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the "other" channel of the tint mask image.<br><br />
'''TODO''': What the heck even is a "other" channel on an image? Does this even do anything in code, besides get parsed? -merlyn<br />
<br />
== Object XML -> DetailMaps element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
...<br />
</DetailMaps><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary material layers that provide fine, repeated visual detail on top of the object's main texture layers.<br />
<br />
== Object XML -> DetailMaps element -> DetailMap element ==<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
</pre><br />
<br />
'''Optional''' - The parameters for the detail map textures that repeat across the model, providing finer-scale detail. There can be up to four of these.<br />
<br />
=== DetailMap element -> colorpath attribute ===<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for this detail map's color map texture.<br />
<br />
=== DetailMap element -> normalpath attribute ===<br />
<br />
<pre><br />
<DetailMap normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the detail map's normal map texture.<br />
<br />
=== DetailMap element -> materialpath attribute ===<br />
<br />
<pre><br />
<DetailMap materialpath="Data/Materials/wood.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the given detail map level.<br><br />
'''TODO''': What is this used for? Aren't detail maps a visual-only thing? -merlyn<br />
<br />
== Object XML -> DetailObjects element ==<br />
<br />
== Object XML -> DetailObjects element -> DetailObject element ==<br />
<br />
=== DetailObject element -> obj_path attribute ===<br />
=== DetailObject element -> weight_path attribute ===<br />
=== DetailObject element -> normal_conform attribute ===<br />
=== DetailObject element -> density attribute ===<br />
=== DetailObject element -> min_embed attribute ===<br />
=== DetailObject element -> max_embed attribute ===<br />
=== DetailObject element -> min_scale attribute ===<br />
=== DetailObject element -> max_scale attribute ===<br />
=== DetailObject element -> view_distance attribute ===<br />
=== DetailObject element -> jitter_degrees attribute ===<br />
=== DetailObject element -> overbright attribute ===<br />
=== DetailObject element -> tint_weight attribute ===<br />
=== DetailObject element -> collision_type attribute ===<br />
<br />
== Object XML -> ShaderName element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
=== ShaderName element -> element text ===<br />
<br />
<pre><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
</pre><br />
<br />
'''Required''' - String value. The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
== Object XML -> avg_color element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<avg_color r = "100" g = "128" b = "47" /><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should use for rendering acceleration, e.g. if a texture hasn't loaded in, or for simplified lighting.<br><br />
'''TODO''': Is this even remotely correct? Kinda just guessing, without looking at the code. -merlyn<br />
<br />
=== avg_color element -> r attribute ===<br />
<br />
<pre><br />
<avg_color r = "100" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> g attribute ===<br />
<br />
<pre><br />
<avg_color ... g = "128" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> b attribute ===<br />
<br />
<pre><br />
<avg_color ... b = "47" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
== Object XML -> MaterialPath element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
=== MaterialPath element -> element text ===<br />
<br />
<pre><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
== Object XML -> Flags element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of flags that will be applied to this object, if set to true. Some of these flags affect rendering (e.g. <code>double_sided</code>), some affect physics (e.g. <code>no_collision</code>), and others affect gameplay interactions with this object (e.g. <code>bush_collision</code>).<br />
<br />
=== Flags element -> transparent attribute ===<br />
<br />
<pre><br />
<Flags transparent = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be rendered in the transparent rendering pass.<br><br />
This flag doesn't make the object transparent on its own, and must also be coupled with transparent shader flags and a transparency map texture.<br />
<br />
=== Flags element -> no_collision attribute ===<br />
<br />
<pre><br />
<Flags no_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will not trigger collisions with players, items, or weapons.<br><br />
<br />
=== Flags element -> clamp_texture attribute ===<br />
<br />
<pre><br />
<Flags clamp_texture = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will render with its texture clamped at its edges, instead of repeating.<br><br />
<br />
=== Flags element -> bush_collision attribute ===<br />
<br />
<pre><br />
<Flags bush_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will trigger jiggle physics when items and characters collide with it. Physics objects will also be slowed down when interacting with it, but not completely blocked. It will also impact line of sight.<br />
<br />
=== Flags element -> terrain_fixed attribute ===<br />
<br />
<pre><br />
<Flags terrain_fixed = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be locked to the terrain when placed.<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> dynamic attribute ===<br />
<br />
<pre><br />
<Flags dynamic = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be considered to move by script, and the physics engine will use that information for optimization<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> double_sided attribute ===<br />
<br />
<pre><br />
<Flags double_sided = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will have its polygons rendered double-sided. This is useful for objects such as flags and cloth, that have no thickness.<br />
<br />
== Object XML -> GroundOffset element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<GroundOffset>0.5</GroundOffset><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
=== GroundOffset element -> element text ===<br />
<br />
<pre><br />
<GroundOffset>0.5</GroundOffset><br />
</pre><br />
<br />
'''Required''' - Decimal value. The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
== Object XML -> ColorTint element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should be tinted, by default. This can be overridden in the editor after the object is placed in the world.<br />
<br />
=== ColorTint element -> r attribute ===<br />
<br />
<pre><br />
<ColorTint r = "101" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> g attribute ===<br />
<br />
<pre><br />
<ColorTint ... g = "129" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> b attribute ===<br />
<br />
<pre><br />
<ColorTint ... b = "46" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the tint color. Value is between <code>0</code> and <code>255</code>.</div>Merlynhttp://wiki.wolfire.com/index.php?title=Overgrowth_Object_Xml_File_Format&diff=6247Overgrowth Object Xml File Format2023-09-10T11:17:37Z<p>Merlyn: /* Object XML -> ShaderName element */</p>
<hr />
<div>This is the top-level XML file for a level object. It specifies visual parameters, some gameplay parameters, and paths for visual assets.<br><br />
Other XML file types reference this XML file type, such as [[Xml File Formats#Character XML|Character XML files]] and [[Xml File Formats#Item XML|Item XML files]].<br />
<br />
== Object XML Example ==<br />
<onlyinclude><br />
<pre><br />
<?xml version="1.0" ?><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
<Label>impale</Label><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gray_metal_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gray_metal_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/cat_cobbles_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/cat_cobbles_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gold_hexagons_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gold_hexagons_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
</DetailMaps><br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="2" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="20" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/Objects/Environment/Rocks/lichen_rock_a.xml" weight_path="Data/Textures/Terrain/forest_hills/forest_hills_not_grass.tga"<br />
normal_conform="1" density="20" min_embed="0.3" max_embed="0.7" min_scale="0.08" max_scale="0.12"<br />
view_distance="10" jitter_degrees="45" overbright="0.4" tint_weight="0.5" collision_type="static" /><br />
</DetailObjects><br />
<ShaderName>detailmap4</ShaderName><br />
<avg_color r = "100" g = "128" b = "47" /><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
<GroundOffset>0.5</GroundOffset><br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
</onlyinclude><br />
== Object XML -> Model element ==<br />
<br />
<pre><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the obj format model file.<br />
<br />
=== Model element -> element text ===<br />
<br />
<pre><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
</pre><br />
<br />
'''Required''' - String value. Path to the obj format model file.<br />
<br />
== Object XML -> ColorMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the color map texture for the object.<br />
<br />
=== ColorMap element -> element text ===<br />
<br />
<pre><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color map texture for the object.<br />
<br />
== Object XML -> NormalMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the normal map texture for the object.<br />
<br />
=== NormalMap element -> element text ===<br />
<br />
<pre><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the normal map texture for the object.<br />
<br />
== Object XML -> TranslucencyMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the translucency map texture for the object.<br />
<br />
=== TranslucencyMap element -> element text ===<br />
<br />
<pre><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the translucency map texture for the object.<br />
<br />
== Object XML -> WindMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the wind map texture for the object.<br />
<br />
=== WindMap element -> element text ===<br />
<br />
<pre><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the wind map texture for the object.<br />
<br />
== Object XML -> SharpnessMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br><br />
'''TODO''': links to/from other file types for this field?<br />
<br />
=== SharpnessMap element -> element text ===<br />
<br />
<pre><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br />
<br />
== Object XML -> Label element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Label>impale</Label><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
=== Label element -> element text ===<br />
<br />
<pre><br />
<Label>impale</Label><br />
</pre><br />
<br />
'''Required''' - String value. This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
== Object XML -> WeightMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the weight map texture for the object.<br />
<br />
=== WeightMap element -> element text ===<br />
<br />
<pre><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the weight map texture for the object.<br />
<br />
== Object XML -> PaletteMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies a set of different tintable areas on this object. The labels are the text displayed in the editor interface. Each color channel of the specified image will be used as a mask to specify where on the object's model the tinting should be limited to.<br />
<br />
=== PaletteMap element -> element text ===<br />
<br />
<pre><br />
<PaletteMap ...><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color masks, used when there's tint parameters that limit the tint to a specific area on the object, such as character clothing colors, a tintable area on a weapon, etc.<br />
<br />
=== PaletteMap element -> label_red attribute ===<br />
<br />
<pre><br />
<PaletteMap label_red="Clothing Color 1"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the red channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_green attribute ===<br />
<br />
<pre><br />
<PaletteMap label_green="Clothing Color 2"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the green channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_blue attribute ===<br />
<br />
<pre><br />
<PaletteMap label_blue="Clothing Color 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the blue channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_alpha attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 4"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the alpha channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_other attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 5"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the "other" channel of the tint mask image.<br><br />
'''TODO''': What the heck even is a "other" channel on an image? Does this even do anything in code, besides get parsed? -merlyn<br />
<br />
== Object XML -> DetailMaps element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
...<br />
</DetailMaps><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary material layers that provide fine, repeated visual detail on top of the object's main texture layers.<br />
<br />
== Object XML -> DetailMaps element -> DetailMap element ==<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
</pre><br />
<br />
'''Optional''' - The parameters for the detail map textures that repeat across the model, providing finer-scale detail. There can be up to four of these.<br />
<br />
=== DetailMap element -> colorpath attribute ===<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for this detail map's color map texture.<br />
<br />
=== DetailMap element -> normalpath attribute ===<br />
<br />
<pre><br />
<DetailMap normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the detail map's normal map texture.<br />
<br />
=== DetailMap element -> materialpath attribute ===<br />
<br />
<pre><br />
<DetailMap materialpath="Data/Materials/wood.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the given detail map level.<br><br />
'''TODO''': What is this used for? Aren't detail maps a visual-only thing? -merlyn<br />
<br />
== Object XML -> DetailObjects element ==<br />
<br />
== Object XML -> DetailObjects element -> DetailObject element ==<br />
<br />
=== DetailObject element -> obj_path attribute ===<br />
=== DetailObject element -> weight_path attribute ===<br />
=== DetailObject element -> normal_conform attribute ===<br />
=== DetailObject element -> density attribute ===<br />
=== DetailObject element -> min_embed attribute ===<br />
=== DetailObject element -> max_embed attribute ===<br />
=== DetailObject element -> min_scale attribute ===<br />
=== DetailObject element -> max_scale attribute ===<br />
=== DetailObject element -> view_distance attribute ===<br />
=== DetailObject element -> jitter_degrees attribute ===<br />
=== DetailObject element -> overbright attribute ===<br />
=== DetailObject element -> tint_weight attribute ===<br />
=== DetailObject element -> collision_type attribute ===<br />
<br />
== Object XML -> ShaderName element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
=== ShaderName element -> element text ===<br />
<br />
<pre><br />
<ShaderName>envobject #DETAILMAP4</ShaderName><br />
</pre><br />
<br />
'''Required''' - String value. The shader name and shader <code>#HASH_PARAMS</code> that specify how the object will be rendered.<br />
<br />
== Object XML -> avg_color element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<avg_color r = "100" g = "128" b = "47" /><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should use for rendering acceleration, e.g. if a texture hasn't loaded in, or for simplified lighting.<br><br />
'''TODO''': Is this even remotely correct? Kinda just guessing, without looking at the code. -merlyn<br />
<br />
=== avg_color element -> r attribute ===<br />
<br />
<pre><br />
<avg_color r = "100" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> g attribute ===<br />
<br />
<pre><br />
<avg_color ... g = "128" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> b attribute ===<br />
<br />
<pre><br />
<avg_color ... b = "47" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
== Object XML -> MaterialPath element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
=== MaterialPath element -> element text ===<br />
<br />
<pre><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
== Object XML -> Flags element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of flags that will be applied to this object, if set to true. Some of these flags affect rendering (e.g. <code>double_sided</code>), some affect physics (e.g. <code>no_collision</code>), and others affect gameplay interactions with this object (e.g. <code>bush_collision</code>).<br />
<br />
=== Flags element -> transparent attribute ===<br />
<br />
<pre><br />
<Flags transparent = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be rendered in the transparent rendering pass.<br><br />
This flag doesn't make the object transparent on its own, and must also be coupled with transparent shader flags and a transparency map texture.<br />
<br />
=== Flags element -> no_collision attribute ===<br />
<br />
<pre><br />
<Flags no_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will not trigger collisions with players, items, or weapons.<br><br />
<br />
=== Flags element -> clamp_texture attribute ===<br />
<br />
<pre><br />
<Flags clamp_texture = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will render with its texture clamped at its edges, instead of repeating.<br><br />
<br />
=== Flags element -> bush_collision attribute ===<br />
<br />
<pre><br />
<Flags bush_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will trigger jiggle physics when items and characters collide with it. Physics objects will also be slowed down when interacting with it, but not completely blocked. It will also impact line of sight.<br />
<br />
=== Flags element -> terrain_fixed attribute ===<br />
<br />
<pre><br />
<Flags terrain_fixed = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be locked to the terrain when placed.<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> dynamic attribute ===<br />
<br />
<pre><br />
<Flags dynamic = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be considered to move by script, and the physics engine will use that information for optimization<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> double_sided attribute ===<br />
<br />
<pre><br />
<Flags double_sided = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will have its polygons rendered double-sided. This is useful for objects such as flags and cloth, that have no thickness.<br />
<br />
== Object XML -> GroundOffset element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<GroundOffset>0.5</GroundOffset><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
=== GroundOffset element -> element text ===<br />
<br />
<pre><br />
<GroundOffset>0.5</GroundOffset><br />
</pre><br />
<br />
'''Required''' - Decimal value. The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
== Object XML -> ColorTint element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should be tinted, by default. This can be overridden in the editor after the object is placed in the world.<br />
<br />
=== ColorTint element -> r attribute ===<br />
<br />
<pre><br />
<ColorTint r = "101" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> g attribute ===<br />
<br />
<pre><br />
<ColorTint ... g = "129" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> b attribute ===<br />
<br />
<pre><br />
<ColorTint ... b = "46" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the tint color. Value is between <code>0</code> and <code>255</code>.</div>Merlynhttp://wiki.wolfire.com/index.php?title=Xml_File_Formats&diff=6246Xml File Formats2023-09-10T11:11:10Z<p>Merlyn: /* Object XML */</p>
<hr />
<div>= TODO: =<br />
<br />
Level, Saved Object, Prefab - These have more confusing schemas, to the point where I'm not entirely sure they're distinct types from one another, and I haven't nailed them down yet -merlyn<br />
<br />
= Actor XML =<br />
<br />
This is the top-level XML file for an NPC or combat character. It binds a [[Xml File Formats#Character XML|Character XML]] file to an [[Character Scripting|AI angelscript]] file.<br><br />
When a level references a character, this is the file type that is referenced.<br />
<br />
== Actor XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<Actor><br />
<Character>Data/Characters/rabbot.xml</Character><br />
<ControlScript>enemycontrol.as</ControlScript><br />
</Actor><br />
</pre><br />
<br />
== Actor XML -> Character element ==<br />
<pre><br />
<Actor><br />
<Character>Data/Characters/rabbot.xml</Character><br />
...<br />
</Actor><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Xml File Formats#Character XML|Character XML]]<br />
<br />
== Actor XML -> ControlScript element ==<br />
<pre><br />
<Actor><br />
...<br />
<ControlScript>enemycontrol.as</ControlScript><br />
</Actor><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Character Scripting|AI angelscript]]. Relative to <code>Data/Scripts</code> folder<br />
<br />
= Asset Preload XML =<br />
<br />
'''TODO:'''<br />
<br />
= Attachment XML =<br />
<br />
'''TODO:'''<br />
<br />
= Attack XML =<br />
<br />
'''TODO:'''<br />
<br />
= Character XML =<br />
<br />
'''TODO:'''<br />
<br />
= Decal XML =<br />
<br />
'''TODO:'''<br />
<br />
= Events XML =<br />
<br />
'''TODO:'''<br />
<br />
= Hotspot XML =<br />
<br />
This is the top-level XML file for a hotspot game object. It specifies the billboard image, and the [[Hotspot Scripting|Hotspot angelscript]] file.<br><br />
When a level references a hotspot, this is the file type that is referenced.<br />
<br />
== Hotspot XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<Type>generic</Type><br />
<Hotspot><br />
<BillboardColorMap>Data/UI/spawner/thumbs/Hotspot/empty.png</BillboardColorMap><br />
<Script>hotspots/sound_hotspot.as</Script><br />
</Hotspot><br />
</pre><br />
<br />
== Hotspot XML -> Type element ==<br />
<pre><br />
<Type>generic</Type><br />
<Hotspot><br />
...<br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. This should always have the value <code><Type>generic</Type></code>.<br><br />
Note: Having two document elements is not valid XML, and I'm not sure what purpose this element serves. But leave it in, since all the hotspots do it. -merlyn<br />
<br />
== Hotspot XML -> Character element ==<br />
<pre><br />
<Hotspot><br />
<BillboardColorMap>Data/UI/spawner/thumbs/Hotspot/empty.png</BillboardColorMap><br />
...<br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. Path to image file. If you don't want a billboard image, you can use <code>Data/UI/spawner/thumbs/Hotspot/empty.png</code>.<br />
<br />
== Hotspot XML -> Script element ==<br />
<pre><br />
<Hotspot><br />
...<br />
<Script>hotspots/sound_hotspot.as</Script><br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Hotspot Scripting|Hotspot angelscript]]. Relative to <code>Data/Scripts</code> folder.<br />
<br />
= Item XML =<br />
<br />
'''TODO:'''<br />
<br />
= Layered Song XML =<br />
<br />
'''TODO:'''<br />
<br />
= Level Meta XML =<br />
<br />
'''TODO:'''<br />
<br />
= Material XML =<br />
<br />
This XML file specifies the sounds that will be played when a character or item interacts with a world object. It is used to model the sound differences between wood, metal, soil, ice, etc.<br><br />
<br />
<code>Data/Materials/default.xml</code> is the global "default" material, if the material isn't specified by the world object.<br><br />
<br />
When the engine or a gameplay script detects a physics event, the code will do a lookup against the current material, for an event with that event name. If the event name is found, then the corresponding sound will be triggered.<br><br />
<br />
Some of these events and materials might specify modifiers (<code>soft</code>, <code>heavy</code>, etc). If they do, the code will first do the lookup against the <code><events mod="themod"></code> version of the event.<br><br />
If an event with the given name is not found with that modifier, the code will then lookup a version of the same event name, but with no modifiers specified.<br><br />
<br />
Some of the values, if not specified, will look at a global "base" material to find the value of the parameter. <code>max_distance</code> is the only one of those parameters right now.<br />
<br />
<code>Data/Materials/base.xml</code> is the global "base" material.<br><br />
<br />
== Material XML Example ==<br />
From <code>Data/Materials/dirt.xml</code> - this is not the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_light_dirt.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_medium_dirt.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_heavy_dirt.xml" attached="true"/><br />
<-- Note: more sound events in the real file than just these --><br />
</events> <br />
<events mod="soft"><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
</events><br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"<br />
shader="stepdecalfast"/><br />
<skid color="Data/Textures/Decals/Footprints/rabbitdirtsmear_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtsmear_n.tga"<br />
shader="stepdecalfast"/><br />
</decals><br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
<skid path="Data/Particles/heavydirt.xml"/><br />
</particles><br />
<physics hardness = "0.8" friction = "1.0" sharp_penetration = "1.0" /><br />
</material><br />
</pre><br />
<br />
From <code>Data/Materials/default.xml</code>, which is the default Material XML file. It is used when other XML file types call for a Material XML, but one is not specified.<br><br />
This is the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
<rightrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
<leftwallstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_wallrun.xml" attached="true"/><br />
<rightwallstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_wallrun.xml" attached="true"/><br />
<leftwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_walk.xml" attached="true"/><br />
<rightwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_walk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<land soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land.xml" attached="true"/><br />
<land_soft soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land_soft.xml" attached="true"/><br />
<land_slide soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land_slide.xml" attached="true"/><br />
<slide soundgroup="Data/Sounds/concrete_foley/slide_concrete_short.xml" attached="true"/><br />
<kick soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_kick.xml" attached="true"/><br />
<sweep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_sweep.xml" attached="true"/><br />
<jump soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump.xml" attached="true"/><br />
<roll soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_roll.xml" attached="true"/><br />
<edge_grab soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_edge_grab.xml" attached="true"/><br />
<edge_crawl soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_edgecrawl.xml" attached="true"/><br />
<bodyfall soundgroup="Data/Sounds/concrete_foley/bf_concrete.xml" attached="true"/><br />
<bodyfall_light soundgroup="Data/Sounds/concrete_foley/bf_concrete_light.xml" attached="true"/><br />
<bodyfall_medium soundgroup="Data/Sounds/concrete_foley/bf_concrete_medium.xml" attached="true"/><br />
<bodyfall_heavy soundgroup="Data/Sounds/concrete_foley/bf_concrete_heavy.xml" attached="true"/><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_light_stone.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_medium_stone.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_heavy_stone.xml" attached="true"/><br />
<blood_spatter soundgroup="Data/Sounds/blood/spatter_hard.xml"/><br />
<blood_drip soundgroup="Data/Sounds/blood/drip_lowpass.xml"/><br />
</events><br />
<events mod="heavy"><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_run.xml" attached="true"/><br />
<rightrunstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_run.xml" attached="true"/><br />
<leftwallstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_wallrun.xml" attached="true"/><br />
<rightwallstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_wallrun.xml" attached="true"/><br />
<leftwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_walk.xml" attached="true"/><br />
<rightwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_walk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<land soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<land_soft soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<land_slide soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<kick soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_kick.xml" attached="true"/><br />
<sweep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_sweep.xml" attached="true"/><br />
<jump soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump.xml" attached="true"/><br />
<roll soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_roll.xml" attached="true"/><br />
<edge_grab soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_edge_grab.xml" attached="true"/><br />
</events><br />
<events mod="soft"><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
</events><br />
<physics hardness = "1.0" friction = "1.0" sharp_penetration = "0.0" /><br />
</material><br />
</pre><br />
<br />
From <code>Data/Materials/base.xml</code>, which specifies the default '''max_distance''' values for all materials.<br><br />
This is the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<leftrunstep max_distance = "40.0"/><br />
<rightrunstep max_distance = "40.0"/><br />
<leftwallstep max_distance = "40.0"/><br />
<rightwallstep max_distance = "40.0"/><br />
<leftwalkstep max_distance = "25.0"/><br />
<rightwalkstep max_distance = "25.0"/><br />
<leftcrouchwalkstep max_distance = "10.0"/><br />
<rightcrouchwalkstep max_distance = "10.0"/><br />
<land max_distance = "60.0"/><br />
<land_soft max_distance = "30.0"/><br />
<land_slide max_distance = "20.0"/><br />
<slide max_distance = "30.0"/><br />
<kick max_distance = "25.0"/><br />
<sweep max_distance = "25.0"/><br />
<jump max_distance = "40.0"/><br />
<roll max_distance = "15.0"/><br />
<edge_grab max_distance = "25.0"/><br />
<edge_crawl max_distance = "15.0"/><br />
<bodyfall max_distance = "80.0"/><br />
<bodyfall_light max_distance = "40.0"/><br />
<bodyfall_medium max_distance = "60.0"/><br />
<bodyfall_heavy max_distance = "80.0"/><br />
<weapon_drop_light max_distance = "80.0"/><br />
<weapon_drop_medium max_distance = "80.0"/><br />
<weapon_drop_heavy max_distance = "80.0"/><br />
<blood_spatter max_distance = "30.0"/><br />
<blood_drip max_distance = "20.0"/><br />
<flip max_distance = "20.0"/><br />
<choke_grab max_distance = "10.0"/>;<br />
<choke_move max_distance = "10.0"/>;<br />
<choke_fall max_distance = "10.0"/>;<br />
</events><br />
<events mod="heavy"><br />
<leftrunstep max_distance = "50.0"/><br />
<rightrunstep max_distance = "50.0"/><br />
<leftwallstep max_distance = "50.0"/><br />
<rightwallstep max_distance = "50.0"/><br />
<leftwalkstep max_distance = "30.0"/><br />
<rightwalkstep max_distance = "30.0"/><br />
<leftcrouchwalkstep max_distance = "20.0"/><br />
<rightcrouchwalkstep max_distance = "20.0"/><br />
<land max_distance = "80.0"/><br />
<land_soft max_distance = "40.0"/><br />
<land_slide max_distance = "40.0"/><br />
<kick max_distance = "30.0"/><br />
<sweep max_distance = "30.0"/><br />
<jump max_distance = "50.0"/><br />
<roll max_distance = "25.0"/><br />
<edge_grab max_distance = "40.0"/><br />
</events><br />
</material><br />
</pre><br />
<br />
== Material XML -> Events element ==<br />
<pre><br />
<material><br />
<events><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision sound events for the material.<br />
<br />
=== Events element -> mod attribute ===<br />
<br />
<pre><br />
<material><br />
<events mod="soft"><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
'''Optional''' - String value. Specifies that this list of collision sound events only apply when the given modifier is specified.<br><br />
The modifiers are different ways the sounds will be presented, such as <code>soft</code>, <code>heavy</code>, etc.<br />
<br />
== Material XML -> Events element -> Sound element ==<br />
<pre><br />
<material><br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true" max_distance = "40.0"/><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
The sound (and physical properties of the sound) for a given collision sound event. The name of the element corresponds to the name of the collision sound event (in this example, '''leftrunstep''').<br />
<br />
=== Sound element -> soundgroup attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - String value. Specifies the [[Xml File Formats#Sound Group XML|Sound Group XML]] for the material interaction event.<br><br />
'''TODO:''': Is this really optional? If so, what is the default behavior?<br />
<br />
=== Sound element -> attached attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep attached="true"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - Boolean value. '''Default''': false<br><br />
If true, the sound (group) will be played as a sound that is attached to the character that triggered the collision sound event.<br />
<br />
=== Sound element -> max_distance attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep max_distance = "40.0"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0<br><br />
The max distance that the sound will still be audible to the player.<br><br />
If the value is 0.0, then the max distance will be considered infinite.<br><br />
If it is not specified for a given sound collision event, then the corresponding value in <code>Data/Materials/base.xml</code> will be used instead.<br />
<br />
== Material XML -> Decals element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision decal events for the material.<br />
<br />
== Material XML -> Decals element -> Decal element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"<br />
shader="stepdecalfast"/><br />
<skid color="Data/Textures/Decals/Footprints/rabbitdirtsmear_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtsmear_n.tga"<br />
shader="stepdecalfast"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
The decal (and rendering properties of the decal) for a given collision decal event. The name of the element corresponds to the name of the collision decal event (in these examples, '''step''' and '''skid''').<br />
<br />
=== Decal element -> color attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the decal's color texture.<br />
<br />
=== Decal element -> normal attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the decal's normal texture.<br />
<br />
=== Decal element -> shader attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step shader="stepdecalfast"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the shader name that will be used when rendering the decal.<br />
<br />
== Material XML -> Particles element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
...<br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision particle events for the material. <br />
<br />
== Material XML -> Particles element -> Particle element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
<skid path="Data/Particles/heavydirt.xml"/><br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
The particle for a given collision particle event. The name of the element corresponds to the name of the collision particle event (in these examples, '''step''' and '''skid'''). <br />
<br />
=== Particle element -> path attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
...<br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Xml File Formats#Particle XML|Particle XML]]<br />
<br />
== Material XML -> Physics element ==<br />
<br />
<pre><br />
<material><br />
<physics hardness = "0.8" friction = "1.0" sharp_penetration = "1.0" /><br />
</material><br />
</pre><br />
<br />
The physics properties of the the material. Collision gameplay events will use these properties to determine how to make other objects respond when they collide with the object this material is applied to.<br />
<br />
=== Physics element -> hardness attribute ===<br />
<br />
<pre><br />
<material><br />
<physics hardness = "0.8"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0<br><br />
'''TODO: Describe'''<br />
<br />
=== Physics element -> friction attribute ===<br />
<br />
<pre><br />
<material><br />
<physics friction = "1.0"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0<br><br />
The friction between any other object and the object this material is applied to.<br><br />
In real life this would depend on the materials for both objects, but the game makes simplifying assumptions to make the mapping a bit less complicated.<br />
<br />
=== Physics element -> sharp_penetration attribute ===<br />
<br />
<pre><br />
<material><br />
<physics sharp_penetration = "1.0"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0<br><br />
'''TODO: Describe'''<br />
<br />
= Mod XML =<br />
<br />
'''TODO:'''<br />
<br />
= Music XML =<br />
<br />
'''TODO:'''<br />
<br />
= Nav Mesh Meta XML =<br />
<br />
'''TODO:'''<br />
<br />
= Object XML =<br />
This is the top-level XML file for a level object. It specifies visual parameters, some gameplay parameters, and paths for visual assets.<br><br />
Other XML file types reference this XML file type, such as [[Xml File Formats#Character XML|Character XML files]] and [[Xml File Formats#Item XML|Item XML files]].<br><br />
<br />
[[Overgrowth_Object_Xml_File_Format|See the Object XML Format article for more detailed information]].<br><br />
An example is shown below:<br />
{{:Overgrowth_Object_Xml_File_Format}}<br />
<br />
= Particle XML =<br />
<br />
'''TODO:'''<br />
<br />
= Path XML =<br />
<br />
'''TODO:'''<br />
<br />
= Reaction XML =<br />
<br />
'''TODO:'''<br />
<br />
= Retarget XML =<br />
<br />
'''TODO:'''<br />
<br />
= Rig XML =<br />
<br />
This is the XML file for a character skeleton. It binds a [[Xml File Formats#Character XML|Character XML]] file to an [[Character Scripting|AI angelscript]] file.<br><br />
When a level references a character, this is the file type that is referenced.<br />
<br />
== Rig XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<rig bone_path = "Data/Skeletons/r_wolf2.phxbn"<br />
model_path = "Data/Models/Characters/IGF_Wolf/IGF_Wolf.obj"<br />
mass_path = "Data/Skeletons/r_lt_dog.xml"/><br />
</pre><br />
<br />
== Rig element -> bone_path attribute ==<br />
<pre><br />
<rig bone_path = "Data/Skeletons/r_wolf2.phxbn"/><br />
</pre><br />
<br />
'''Required''' - String value. Path to the skeleton file, using the custom Phoenix Engine skeleton file type ([[Binary File Formats#PHXBN|PHXBN]]. This file MUST have been exported using the mesh specified in <code>model_path</code>.<br />
<br />
== Rig element -> model_path attribute ==<br />
<pre><br />
<rig model_path = "Data/Models/Characters/IGF_Wolf/IGF_Wolf.obj"/><br />
</pre><br />
<br />
'''Required''' - String value. Path to Obj model file to use as skinned the character mesh. This file MUST be the same as the one used when exporting the skeleton specified in <code>bone_path</code>.<br />
<br />
== Rig element -> mass_path attribute ==<br />
<pre><br />
<rig mass_path = "Data/Skeletons/r_lt_dog.xml"/><br />
</pre><br />
<br />
'''Optional''' - String value. Path to [[Xml File Formats#Rig XML|Rig XML]]. Used to override the current skeleton with the bone masses from a different skeleton.<br><br />
'''TODO''': Why you'd want to do this? Who knows! -merlyn<br />
<br />
= Shader Preload XML =<br />
<br />
'''TODO:'''<br />
<br />
= Sound Group XML =<br />
<br />
This is the XML file that describes a group of sounds. One of those sounds will be randomly chosen and played whenever the sound group is triggered.<br><br />
<br />
The file will specify a count of the number of <code>variants</code> that exist, and a sound file will need to exist for each of those variants.<br><br />
For a Sound Group XML with three variants, the XML file and and corresponding sound variants should follow a naming scheme like this:<br />
* <code>Data/Sounds/example_subdir/example_sound_group.xml</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_1.wav</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_2.wav</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_3.wav</code><br><br />
<br />
== Sound Group XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<soundgroup<br />
variants = "3"<br />
delay = "5.3"<br />
volume = "0.1"<br />
max_distance = "77.5"<br />
/><br />
</pre><br />
<br />
== Sound Group element -> variants attribute ==<br />
<pre><br />
<soundgroup variants = "3" /><br />
</pre><br />
<br />
'''Optional''' - Integer value. '''Default''': 1.<br><br />
The count of variants. There must also be a corresponding <code>SoundGroupXmlName_1.wav</code> file for every variant, numbered incrementally up to the variant count.<br><br />
E.g. if there was 3 variants, there would need to be files named <code>SoundGroupXmlName_1.wav</code>, <code>SoundGroupXmlName_2.wav</code>, and <code>SoundGroupXmlName_3.wav</code>.<br />
<br />
== Sound Group element -> delay attribute ==<br />
<pre><br />
<soundgroup delay = "5.3" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0.<br><br />
A delay to add to the start of sound playback, in seconds.<br />
<br />
== Sound Group element -> volume attribute ==<br />
<pre><br />
<soundgroup volume = "0.1" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0.<br><br />
The volume to play back the sound.<br><br />
This is further multiplied by the gain specified when triggering the sound group in gameplay code.<br />
<br />
== Sound Group element -> max_distance attribute ==<br />
<pre><br />
<soundgroup max_distance = "77.5" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 30.0.<br><br />
The maximum distance that the sound can be heard by the player.<br><br />
It will be overridden by the <code>max_distance</code> in the collision sound event, in the [[Xml File Formats#Material XML -> Events element -> Event element|Material XML]], if specified for the given collision sound event.<br />
<br />
= Synced Animation Group XML =<br />
<br />
'''TODO:'''<br />
<br />
= Version Manifest XML =<br />
<br />
'''TODO:'''<br />
<br />
= Voice XML =<br />
<br />
'''TODO:'''</div>Merlynhttp://wiki.wolfire.com/index.php?title=Overgrowth_Object_Xml_File_Format&diff=6245Overgrowth Object Xml File Format2023-09-10T11:09:00Z<p>Merlyn: </p>
<hr />
<div>This is the top-level XML file for a level object. It specifies visual parameters, some gameplay parameters, and paths for visual assets.<br><br />
Other XML file types reference this XML file type, such as [[Xml File Formats#Character XML|Character XML files]] and [[Xml File Formats#Item XML|Item XML files]].<br />
<br />
== Object XML Example ==<br />
<onlyinclude><br />
<pre><br />
<?xml version="1.0" ?><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
<Label>impale</Label><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gray_metal_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gray_metal_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/cat_cobbles_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/cat_cobbles_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gold_hexagons_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gold_hexagons_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
</DetailMaps><br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="2" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="20" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/Objects/Environment/Rocks/lichen_rock_a.xml" weight_path="Data/Textures/Terrain/forest_hills/forest_hills_not_grass.tga"<br />
normal_conform="1" density="20" min_embed="0.3" max_embed="0.7" min_scale="0.08" max_scale="0.12"<br />
view_distance="10" jitter_degrees="45" overbright="0.4" tint_weight="0.5" collision_type="static" /><br />
</DetailObjects><br />
<ShaderName>detailmap4</ShaderName><br />
<avg_color r = "100" g = "128" b = "47" /><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
<GroundOffset>0.5</GroundOffset><br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
</onlyinclude><br />
== Object XML -> Model element ==<br />
<br />
<pre><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the obj format model file.<br />
<br />
=== Model element -> element text ===<br />
<br />
<pre><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
</pre><br />
<br />
'''Required''' - String value. Path to the obj format model file.<br />
<br />
== Object XML -> ColorMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the color map texture for the object.<br />
<br />
=== ColorMap element -> element text ===<br />
<br />
<pre><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color map texture for the object.<br />
<br />
== Object XML -> NormalMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the normal map texture for the object.<br />
<br />
=== NormalMap element -> element text ===<br />
<br />
<pre><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the normal map texture for the object.<br />
<br />
== Object XML -> TranslucencyMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the translucency map texture for the object.<br />
<br />
=== TranslucencyMap element -> element text ===<br />
<br />
<pre><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the translucency map texture for the object.<br />
<br />
== Object XML -> WindMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the wind map texture for the object.<br />
<br />
=== WindMap element -> element text ===<br />
<br />
<pre><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the wind map texture for the object.<br />
<br />
== Object XML -> SharpnessMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br><br />
'''TODO''': links to/from other file types for this field?<br />
<br />
=== SharpnessMap element -> element text ===<br />
<br />
<pre><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br />
<br />
== Object XML -> Label element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Label>impale</Label><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
=== Label element -> element text ===<br />
<br />
<pre><br />
<Label>impale</Label><br />
</pre><br />
<br />
'''Required''' - String value. This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
== Object XML -> WeightMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the weight map texture for the object.<br />
<br />
=== WeightMap element -> element text ===<br />
<br />
<pre><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the weight map texture for the object.<br />
<br />
== Object XML -> PaletteMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies a set of different tintable areas on this object. The labels are the text displayed in the editor interface. Each color channel of the specified image will be used as a mask to specify where on the object's model the tinting should be limited to.<br />
<br />
=== PaletteMap element -> element text ===<br />
<br />
<pre><br />
<PaletteMap ...><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color masks, used when there's tint parameters that limit the tint to a specific area on the object, such as character clothing colors, a tintable area on a weapon, etc.<br />
<br />
=== PaletteMap element -> label_red attribute ===<br />
<br />
<pre><br />
<PaletteMap label_red="Clothing Color 1"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the red channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_green attribute ===<br />
<br />
<pre><br />
<PaletteMap label_green="Clothing Color 2"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the green channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_blue attribute ===<br />
<br />
<pre><br />
<PaletteMap label_blue="Clothing Color 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the blue channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_alpha attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 4"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the alpha channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_other attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 5"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the "other" channel of the tint mask image.<br><br />
'''TODO''': What the heck even is a "other" channel on an image? Does this even do anything in code, besides get parsed? -merlyn<br />
<br />
== Object XML -> DetailMaps element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
...<br />
</DetailMaps><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary material layers that provide fine, repeated visual detail on top of the object's main texture layers.<br />
<br />
== Object XML -> DetailMaps element -> DetailMap element ==<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
</pre><br />
<br />
'''Optional''' - The parameters for the detail map textures that repeat across the model, providing finer-scale detail. There can be up to four of these.<br />
<br />
=== DetailMap element -> colorpath attribute ===<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for this detail map's color map texture.<br />
<br />
=== DetailMap element -> normalpath attribute ===<br />
<br />
<pre><br />
<DetailMap normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the detail map's normal map texture.<br />
<br />
=== DetailMap element -> materialpath attribute ===<br />
<br />
<pre><br />
<DetailMap materialpath="Data/Materials/wood.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the given detail map level.<br><br />
'''TODO''': What is this used for? Aren't detail maps a visual-only thing? -merlyn<br />
<br />
== Object XML -> DetailObjects element ==<br />
<br />
== Object XML -> DetailObjects element -> DetailObject element ==<br />
<br />
=== DetailObject element -> obj_path attribute ===<br />
=== DetailObject element -> weight_path attribute ===<br />
=== DetailObject element -> normal_conform attribute ===<br />
=== DetailObject element -> density attribute ===<br />
=== DetailObject element -> min_embed attribute ===<br />
=== DetailObject element -> max_embed attribute ===<br />
=== DetailObject element -> min_scale attribute ===<br />
=== DetailObject element -> max_scale attribute ===<br />
=== DetailObject element -> view_distance attribute ===<br />
=== DetailObject element -> jitter_degrees attribute ===<br />
=== DetailObject element -> overbright attribute ===<br />
=== DetailObject element -> tint_weight attribute ===<br />
=== DetailObject element -> collision_type attribute ===<br />
<br />
== Object XML -> ShaderName element ==<br />
<br />
=== ShaderName element -> element text ===<br />
<br />
== Object XML -> avg_color element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<avg_color r = "100" g = "128" b = "47" /><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should use for rendering acceleration, e.g. if a texture hasn't loaded in, or for simplified lighting.<br><br />
'''TODO''': Is this even remotely correct? Kinda just guessing, without looking at the code. -merlyn<br />
<br />
=== avg_color element -> r attribute ===<br />
<br />
<pre><br />
<avg_color r = "100" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> g attribute ===<br />
<br />
<pre><br />
<avg_color ... g = "128" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> b attribute ===<br />
<br />
<pre><br />
<avg_color ... b = "47" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
== Object XML -> MaterialPath element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
=== MaterialPath element -> element text ===<br />
<br />
<pre><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
== Object XML -> Flags element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of flags that will be applied to this object, if set to true. Some of these flags affect rendering (e.g. <code>double_sided</code>), some affect physics (e.g. <code>no_collision</code>), and others affect gameplay interactions with this object (e.g. <code>bush_collision</code>).<br />
<br />
=== Flags element -> transparent attribute ===<br />
<br />
<pre><br />
<Flags transparent = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be rendered in the transparent rendering pass.<br><br />
This flag doesn't make the object transparent on its own, and must also be coupled with transparent shader flags and a transparency map texture.<br />
<br />
=== Flags element -> no_collision attribute ===<br />
<br />
<pre><br />
<Flags no_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will not trigger collisions with players, items, or weapons.<br><br />
<br />
=== Flags element -> clamp_texture attribute ===<br />
<br />
<pre><br />
<Flags clamp_texture = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will render with its texture clamped at its edges, instead of repeating.<br><br />
<br />
=== Flags element -> bush_collision attribute ===<br />
<br />
<pre><br />
<Flags bush_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will trigger jiggle physics when items and characters collide with it. Physics objects will also be slowed down when interacting with it, but not completely blocked. It will also impact line of sight.<br />
<br />
=== Flags element -> terrain_fixed attribute ===<br />
<br />
<pre><br />
<Flags terrain_fixed = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be locked to the terrain when placed.<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> dynamic attribute ===<br />
<br />
<pre><br />
<Flags dynamic = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be considered to move by script, and the physics engine will use that information for optimization<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> double_sided attribute ===<br />
<br />
<pre><br />
<Flags double_sided = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will have its polygons rendered double-sided. This is useful for objects such as flags and cloth, that have no thickness.<br />
<br />
== Object XML -> GroundOffset element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<GroundOffset>0.5</GroundOffset><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
=== GroundOffset element -> element text ===<br />
<br />
<pre><br />
<GroundOffset>0.5</GroundOffset><br />
</pre><br />
<br />
'''Required''' - Decimal value. The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
== Object XML -> ColorTint element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should be tinted, by default. This can be overridden in the editor after the object is placed in the world.<br />
<br />
=== ColorTint element -> r attribute ===<br />
<br />
<pre><br />
<ColorTint r = "101" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> g attribute ===<br />
<br />
<pre><br />
<ColorTint ... g = "129" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> b attribute ===<br />
<br />
<pre><br />
<ColorTint ... b = "46" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the tint color. Value is between <code>0</code> and <code>255</code>.</div>Merlynhttp://wiki.wolfire.com/index.php?title=Overgrowth_Object_Xml_File_Format&diff=6244Overgrowth Object Xml File Format2023-09-10T11:06:44Z<p>Merlyn: </p>
<hr />
<div><onlyinclude><br />
This is the top-level XML file for a level object. It specifies visual parameters, some gameplay parameters, and paths for visual assets.<br><br />
Other XML file types reference this XML file type, such as [[Xml File Formats#Character XML|Character XML files]] and [[Xml File Formats#Item XML|Item XML files]].<br />
<br />
== Object XML Example ==<br />
<br />
<pre><br />
<?xml version="1.0" ?><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
<Label>impale</Label><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gray_metal_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gray_metal_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/cat_cobbles_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/cat_cobbles_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gold_hexagons_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gold_hexagons_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
</DetailMaps><br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="2" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="20" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/Objects/Environment/Rocks/lichen_rock_a.xml" weight_path="Data/Textures/Terrain/forest_hills/forest_hills_not_grass.tga"<br />
normal_conform="1" density="20" min_embed="0.3" max_embed="0.7" min_scale="0.08" max_scale="0.12"<br />
view_distance="10" jitter_degrees="45" overbright="0.4" tint_weight="0.5" collision_type="static" /><br />
</DetailObjects><br />
<ShaderName>detailmap4</ShaderName><br />
<avg_color r = "100" g = "128" b = "47" /><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
<GroundOffset>0.5</GroundOffset><br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
</onlyinclude><br />
== Object XML -> Model element ==<br />
<br />
<pre><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the obj format model file.<br />
<br />
=== Model element -> element text ===<br />
<br />
<pre><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
</pre><br />
<br />
'''Required''' - String value. Path to the obj format model file.<br />
<br />
== Object XML -> ColorMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the color map texture for the object.<br />
<br />
=== ColorMap element -> element text ===<br />
<br />
<pre><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color map texture for the object.<br />
<br />
== Object XML -> NormalMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the normal map texture for the object.<br />
<br />
=== NormalMap element -> element text ===<br />
<br />
<pre><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the normal map texture for the object.<br />
<br />
== Object XML -> TranslucencyMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the translucency map texture for the object.<br />
<br />
=== TranslucencyMap element -> element text ===<br />
<br />
<pre><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the translucency map texture for the object.<br />
<br />
== Object XML -> WindMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the wind map texture for the object.<br />
<br />
=== WindMap element -> element text ===<br />
<br />
<pre><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the wind map texture for the object.<br />
<br />
== Object XML -> SharpnessMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br><br />
'''TODO''': links to/from other file types for this field?<br />
<br />
=== SharpnessMap element -> element text ===<br />
<br />
<pre><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br />
<br />
== Object XML -> Label element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Label>impale</Label><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
=== Label element -> element text ===<br />
<br />
<pre><br />
<Label>impale</Label><br />
</pre><br />
<br />
'''Required''' - String value. This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
== Object XML -> WeightMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the weight map texture for the object.<br />
<br />
=== WeightMap element -> element text ===<br />
<br />
<pre><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the weight map texture for the object.<br />
<br />
== Object XML -> PaletteMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies a set of different tintable areas on this object. The labels are the text displayed in the editor interface. Each color channel of the specified image will be used as a mask to specify where on the object's model the tinting should be limited to.<br />
<br />
=== PaletteMap element -> element text ===<br />
<br />
<pre><br />
<PaletteMap ...><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color masks, used when there's tint parameters that limit the tint to a specific area on the object, such as character clothing colors, a tintable area on a weapon, etc.<br />
<br />
=== PaletteMap element -> label_red attribute ===<br />
<br />
<pre><br />
<PaletteMap label_red="Clothing Color 1"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the red channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_green attribute ===<br />
<br />
<pre><br />
<PaletteMap label_green="Clothing Color 2"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the green channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_blue attribute ===<br />
<br />
<pre><br />
<PaletteMap label_blue="Clothing Color 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the blue channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_alpha attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 4"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the alpha channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_other attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 5"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the "other" channel of the tint mask image.<br><br />
'''TODO''': What the heck even is a "other" channel on an image? Does this even do anything in code, besides get parsed? -merlyn<br />
<br />
== Object XML -> DetailMaps element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
...<br />
</DetailMaps><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary material layers that provide fine, repeated visual detail on top of the object's main texture layers.<br />
<br />
== Object XML -> DetailMaps element -> DetailMap element ==<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
</pre><br />
<br />
'''Optional''' - The parameters for the detail map textures that repeat across the model, providing finer-scale detail. There can be up to four of these.<br />
<br />
=== DetailMap element -> colorpath attribute ===<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for this detail map's color map texture.<br />
<br />
=== DetailMap element -> normalpath attribute ===<br />
<br />
<pre><br />
<DetailMap normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the detail map's normal map texture.<br />
<br />
=== DetailMap element -> materialpath attribute ===<br />
<br />
<pre><br />
<DetailMap materialpath="Data/Materials/wood.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the given detail map level.<br><br />
'''TODO''': What is this used for? Aren't detail maps a visual-only thing? -merlyn<br />
<br />
== Object XML -> DetailObjects element ==<br />
<br />
== Object XML -> DetailObjects element -> DetailObject element ==<br />
<br />
=== DetailObject element -> obj_path attribute ===<br />
=== DetailObject element -> weight_path attribute ===<br />
=== DetailObject element -> normal_conform attribute ===<br />
=== DetailObject element -> density attribute ===<br />
=== DetailObject element -> min_embed attribute ===<br />
=== DetailObject element -> max_embed attribute ===<br />
=== DetailObject element -> min_scale attribute ===<br />
=== DetailObject element -> max_scale attribute ===<br />
=== DetailObject element -> view_distance attribute ===<br />
=== DetailObject element -> jitter_degrees attribute ===<br />
=== DetailObject element -> overbright attribute ===<br />
=== DetailObject element -> tint_weight attribute ===<br />
=== DetailObject element -> collision_type attribute ===<br />
<br />
== Object XML -> ShaderName element ==<br />
<br />
=== ShaderName element -> element text ===<br />
<br />
== Object XML -> avg_color element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<avg_color r = "100" g = "128" b = "47" /><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should use for rendering acceleration, e.g. if a texture hasn't loaded in, or for simplified lighting.<br><br />
'''TODO''': Is this even remotely correct? Kinda just guessing, without looking at the code. -merlyn<br />
<br />
=== avg_color element -> r attribute ===<br />
<br />
<pre><br />
<avg_color r = "100" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> g attribute ===<br />
<br />
<pre><br />
<avg_color ... g = "128" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> b attribute ===<br />
<br />
<pre><br />
<avg_color ... b = "47" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
== Object XML -> MaterialPath element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
=== MaterialPath element -> element text ===<br />
<br />
<pre><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
== Object XML -> Flags element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of flags that will be applied to this object, if set to true. Some of these flags affect rendering (e.g. <code>double_sided</code>), some affect physics (e.g. <code>no_collision</code>), and others affect gameplay interactions with this object (e.g. <code>bush_collision</code>).<br />
<br />
=== Flags element -> transparent attribute ===<br />
<br />
<pre><br />
<Flags transparent = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be rendered in the transparent rendering pass.<br><br />
This flag doesn't make the object transparent on its own, and must also be coupled with transparent shader flags and a transparency map texture.<br />
<br />
=== Flags element -> no_collision attribute ===<br />
<br />
<pre><br />
<Flags no_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will not trigger collisions with players, items, or weapons.<br><br />
<br />
=== Flags element -> clamp_texture attribute ===<br />
<br />
<pre><br />
<Flags clamp_texture = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will render with its texture clamped at its edges, instead of repeating.<br><br />
<br />
=== Flags element -> bush_collision attribute ===<br />
<br />
<pre><br />
<Flags bush_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will trigger jiggle physics when items and characters collide with it. Physics objects will also be slowed down when interacting with it, but not completely blocked. It will also impact line of sight.<br />
<br />
=== Flags element -> terrain_fixed attribute ===<br />
<br />
<pre><br />
<Flags terrain_fixed = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be locked to the terrain when placed.<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> dynamic attribute ===<br />
<br />
<pre><br />
<Flags dynamic = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be considered to move by script, and the physics engine will use that information for optimization<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> double_sided attribute ===<br />
<br />
<pre><br />
<Flags double_sided = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will have its polygons rendered double-sided. This is useful for objects such as flags and cloth, that have no thickness.<br />
<br />
== Object XML -> GroundOffset element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<GroundOffset>0.5</GroundOffset><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
=== GroundOffset element -> element text ===<br />
<br />
<pre><br />
<GroundOffset>0.5</GroundOffset><br />
</pre><br />
<br />
'''Required''' - Decimal value. The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
== Object XML -> ColorTint element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should be tinted, by default. This can be overridden in the editor after the object is placed in the world.<br />
<br />
=== ColorTint element -> r attribute ===<br />
<br />
<pre><br />
<ColorTint r = "101" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> g attribute ===<br />
<br />
<pre><br />
<ColorTint ... g = "129" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> b attribute ===<br />
<br />
<pre><br />
<ColorTint ... b = "46" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the tint color. Value is between <code>0</code> and <code>255</code>.</div>Merlynhttp://wiki.wolfire.com/index.php?title=Overgrowth_Object_Xml_File_Format&diff=6243Overgrowth Object Xml File Format2023-09-10T11:06:19Z<p>Merlyn: </p>
<hr />
<div><onlyinclude><br />
This is the top-level XML file for a level object. It specifies visual parameters, some gameplay parameters, and paths for visual assets.<br><br />
Other XML file types reference this XML file type, such as [[Xml File Formats#Character XML|Character XML files]] and [[Xml File Formats#Item XML|Item XML files]].<br />
<br />
== Object XML Example ==<br />
<br />
<pre><br />
<?xml version="1.0" ?><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
<Label>impale</Label><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gray_metal_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gray_metal_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/cat_cobbles_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/cat_cobbles_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gold_hexagons_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gold_hexagons_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
</DetailMaps><br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="2" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="20" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/Objects/Environment/Rocks/lichen_rock_a.xml" weight_path="Data/Textures/Terrain/forest_hills/forest_hills_not_grass.tga"<br />
normal_conform="1" density="20" min_embed="0.3" max_embed="0.7" min_scale="0.08" max_scale="0.12"<br />
view_distance="10" jitter_degrees="45" overbright="0.4" tint_weight="0.5" collision_type="static" /><br />
</DetailObjects><br />
<ShaderName>detailmap4</ShaderName><br />
<avg_color r = "100" g = "128" b = "47" /><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
<GroundOffset>0.5</GroundOffset><br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
</onlyinclude><br />
<br />
== Object XML -> Model element ==<br />
<br />
<pre><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the obj format model file.<br />
<br />
=== Model element -> element text ===<br />
<br />
<pre><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
</pre><br />
<br />
'''Required''' - String value. Path to the obj format model file.<br />
<br />
== Object XML -> ColorMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the color map texture for the object.<br />
<br />
=== ColorMap element -> element text ===<br />
<br />
<pre><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color map texture for the object.<br />
<br />
== Object XML -> NormalMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the normal map texture for the object.<br />
<br />
=== NormalMap element -> element text ===<br />
<br />
<pre><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the normal map texture for the object.<br />
<br />
== Object XML -> TranslucencyMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the translucency map texture for the object.<br />
<br />
=== TranslucencyMap element -> element text ===<br />
<br />
<pre><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the translucency map texture for the object.<br />
<br />
== Object XML -> WindMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the wind map texture for the object.<br />
<br />
=== WindMap element -> element text ===<br />
<br />
<pre><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the wind map texture for the object.<br />
<br />
== Object XML -> SharpnessMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br><br />
'''TODO''': links to/from other file types for this field?<br />
<br />
=== SharpnessMap element -> element text ===<br />
<br />
<pre><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br />
<br />
== Object XML -> Label element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Label>impale</Label><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
=== Label element -> element text ===<br />
<br />
<pre><br />
<Label>impale</Label><br />
</pre><br />
<br />
'''Required''' - String value. This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
== Object XML -> WeightMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the weight map texture for the object.<br />
<br />
=== WeightMap element -> element text ===<br />
<br />
<pre><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the weight map texture for the object.<br />
<br />
== Object XML -> PaletteMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies a set of different tintable areas on this object. The labels are the text displayed in the editor interface. Each color channel of the specified image will be used as a mask to specify where on the object's model the tinting should be limited to.<br />
<br />
=== PaletteMap element -> element text ===<br />
<br />
<pre><br />
<PaletteMap ...><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color masks, used when there's tint parameters that limit the tint to a specific area on the object, such as character clothing colors, a tintable area on a weapon, etc.<br />
<br />
=== PaletteMap element -> label_red attribute ===<br />
<br />
<pre><br />
<PaletteMap label_red="Clothing Color 1"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the red channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_green attribute ===<br />
<br />
<pre><br />
<PaletteMap label_green="Clothing Color 2"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the green channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_blue attribute ===<br />
<br />
<pre><br />
<PaletteMap label_blue="Clothing Color 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the blue channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_alpha attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 4"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the alpha channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_other attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 5"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the "other" channel of the tint mask image.<br><br />
'''TODO''': What the heck even is a "other" channel on an image? Does this even do anything in code, besides get parsed? -merlyn<br />
<br />
== Object XML -> DetailMaps element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
...<br />
</DetailMaps><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary material layers that provide fine, repeated visual detail on top of the object's main texture layers.<br />
<br />
== Object XML -> DetailMaps element -> DetailMap element ==<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
</pre><br />
<br />
'''Optional''' - The parameters for the detail map textures that repeat across the model, providing finer-scale detail. There can be up to four of these.<br />
<br />
=== DetailMap element -> colorpath attribute ===<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for this detail map's color map texture.<br />
<br />
=== DetailMap element -> normalpath attribute ===<br />
<br />
<pre><br />
<DetailMap normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the detail map's normal map texture.<br />
<br />
=== DetailMap element -> materialpath attribute ===<br />
<br />
<pre><br />
<DetailMap materialpath="Data/Materials/wood.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the given detail map level.<br><br />
'''TODO''': What is this used for? Aren't detail maps a visual-only thing? -merlyn<br />
<br />
== Object XML -> DetailObjects element ==<br />
<br />
== Object XML -> DetailObjects element -> DetailObject element ==<br />
<br />
=== DetailObject element -> obj_path attribute ===<br />
=== DetailObject element -> weight_path attribute ===<br />
=== DetailObject element -> normal_conform attribute ===<br />
=== DetailObject element -> density attribute ===<br />
=== DetailObject element -> min_embed attribute ===<br />
=== DetailObject element -> max_embed attribute ===<br />
=== DetailObject element -> min_scale attribute ===<br />
=== DetailObject element -> max_scale attribute ===<br />
=== DetailObject element -> view_distance attribute ===<br />
=== DetailObject element -> jitter_degrees attribute ===<br />
=== DetailObject element -> overbright attribute ===<br />
=== DetailObject element -> tint_weight attribute ===<br />
=== DetailObject element -> collision_type attribute ===<br />
<br />
== Object XML -> ShaderName element ==<br />
<br />
=== ShaderName element -> element text ===<br />
<br />
== Object XML -> avg_color element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<avg_color r = "100" g = "128" b = "47" /><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should use for rendering acceleration, e.g. if a texture hasn't loaded in, or for simplified lighting.<br><br />
'''TODO''': Is this even remotely correct? Kinda just guessing, without looking at the code. -merlyn<br />
<br />
=== avg_color element -> r attribute ===<br />
<br />
<pre><br />
<avg_color r = "100" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> g attribute ===<br />
<br />
<pre><br />
<avg_color ... g = "128" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> b attribute ===<br />
<br />
<pre><br />
<avg_color ... b = "47" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
== Object XML -> MaterialPath element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
=== MaterialPath element -> element text ===<br />
<br />
<pre><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
== Object XML -> Flags element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of flags that will be applied to this object, if set to true. Some of these flags affect rendering (e.g. <code>double_sided</code>), some affect physics (e.g. <code>no_collision</code>), and others affect gameplay interactions with this object (e.g. <code>bush_collision</code>).<br />
<br />
=== Flags element -> transparent attribute ===<br />
<br />
<pre><br />
<Flags transparent = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be rendered in the transparent rendering pass.<br><br />
This flag doesn't make the object transparent on its own, and must also be coupled with transparent shader flags and a transparency map texture.<br />
<br />
=== Flags element -> no_collision attribute ===<br />
<br />
<pre><br />
<Flags no_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will not trigger collisions with players, items, or weapons.<br><br />
<br />
=== Flags element -> clamp_texture attribute ===<br />
<br />
<pre><br />
<Flags clamp_texture = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will render with its texture clamped at its edges, instead of repeating.<br><br />
<br />
=== Flags element -> bush_collision attribute ===<br />
<br />
<pre><br />
<Flags bush_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will trigger jiggle physics when items and characters collide with it. Physics objects will also be slowed down when interacting with it, but not completely blocked. It will also impact line of sight.<br />
<br />
=== Flags element -> terrain_fixed attribute ===<br />
<br />
<pre><br />
<Flags terrain_fixed = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be locked to the terrain when placed.<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> dynamic attribute ===<br />
<br />
<pre><br />
<Flags dynamic = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be considered to move by script, and the physics engine will use that information for optimization<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> double_sided attribute ===<br />
<br />
<pre><br />
<Flags double_sided = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will have its polygons rendered double-sided. This is useful for objects such as flags and cloth, that have no thickness.<br />
<br />
== Object XML -> GroundOffset element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<GroundOffset>0.5</GroundOffset><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
=== GroundOffset element -> element text ===<br />
<br />
<pre><br />
<GroundOffset>0.5</GroundOffset><br />
</pre><br />
<br />
'''Required''' - Decimal value. The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
== Object XML -> ColorTint element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should be tinted, by default. This can be overridden in the editor after the object is placed in the world.<br />
<br />
=== ColorTint element -> r attribute ===<br />
<br />
<pre><br />
<ColorTint r = "101" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> g attribute ===<br />
<br />
<pre><br />
<ColorTint ... g = "129" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> b attribute ===<br />
<br />
<pre><br />
<ColorTint ... b = "46" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the tint color. Value is between <code>0</code> and <code>255</code>.</div>Merlynhttp://wiki.wolfire.com/index.php?title=Overgrowth_Object_Xml_File_Format&diff=6242Overgrowth Object Xml File Format2023-09-10T11:05:52Z<p>Merlyn: </p>
<hr />
<div><onlyinclude><br />
This is the top-level XML file for a level object. It specifies visual parameters, some gameplay parameters, and paths for visual assets.<br><br />
Other XML file types reference this XML file type, such as [[Xml File Formats#Character XML|Character XML files]] and [[Xml File Formats#Item XML|Item XML files]].<br />
</onlyinclude><br />
<br />
== Object XML Example ==<br />
<br />
<pre><br />
<?xml version="1.0" ?><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
<Label>impale</Label><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gray_metal_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gray_metal_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/cat_cobbles_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/cat_cobbles_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gold_hexagons_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gold_hexagons_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
</DetailMaps><br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="2" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="20" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/Objects/Environment/Rocks/lichen_rock_a.xml" weight_path="Data/Textures/Terrain/forest_hills/forest_hills_not_grass.tga"<br />
normal_conform="1" density="20" min_embed="0.3" max_embed="0.7" min_scale="0.08" max_scale="0.12"<br />
view_distance="10" jitter_degrees="45" overbright="0.4" tint_weight="0.5" collision_type="static" /><br />
</DetailObjects><br />
<ShaderName>detailmap4</ShaderName><br />
<avg_color r = "100" g = "128" b = "47" /><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
<GroundOffset>0.5</GroundOffset><br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<onlyinclude><br />
== Object XML -> Model element ==<br />
<br />
<pre><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the obj format model file.<br />
<br />
=== Model element -> element text ===<br />
<br />
<pre><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
</pre><br />
<br />
'''Required''' - String value. Path to the obj format model file.<br />
<br />
== Object XML -> ColorMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the color map texture for the object.<br />
<br />
=== ColorMap element -> element text ===<br />
<br />
<pre><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color map texture for the object.<br />
<br />
== Object XML -> NormalMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the normal map texture for the object.<br />
<br />
=== NormalMap element -> element text ===<br />
<br />
<pre><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the normal map texture for the object.<br />
<br />
== Object XML -> TranslucencyMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the translucency map texture for the object.<br />
<br />
=== TranslucencyMap element -> element text ===<br />
<br />
<pre><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the translucency map texture for the object.<br />
<br />
== Object XML -> WindMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the wind map texture for the object.<br />
<br />
=== WindMap element -> element text ===<br />
<br />
<pre><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the wind map texture for the object.<br />
<br />
== Object XML -> SharpnessMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br><br />
'''TODO''': links to/from other file types for this field?<br />
<br />
=== SharpnessMap element -> element text ===<br />
<br />
<pre><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br />
<br />
== Object XML -> Label element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Label>impale</Label><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
=== Label element -> element text ===<br />
<br />
<pre><br />
<Label>impale</Label><br />
</pre><br />
<br />
'''Required''' - String value. This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
== Object XML -> WeightMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the weight map texture for the object.<br />
<br />
=== WeightMap element -> element text ===<br />
<br />
<pre><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the weight map texture for the object.<br />
<br />
== Object XML -> PaletteMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies a set of different tintable areas on this object. The labels are the text displayed in the editor interface. Each color channel of the specified image will be used as a mask to specify where on the object's model the tinting should be limited to.<br />
<br />
=== PaletteMap element -> element text ===<br />
<br />
<pre><br />
<PaletteMap ...><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color masks, used when there's tint parameters that limit the tint to a specific area on the object, such as character clothing colors, a tintable area on a weapon, etc.<br />
<br />
=== PaletteMap element -> label_red attribute ===<br />
<br />
<pre><br />
<PaletteMap label_red="Clothing Color 1"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the red channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_green attribute ===<br />
<br />
<pre><br />
<PaletteMap label_green="Clothing Color 2"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the green channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_blue attribute ===<br />
<br />
<pre><br />
<PaletteMap label_blue="Clothing Color 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the blue channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_alpha attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 4"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the alpha channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_other attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 5"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the "other" channel of the tint mask image.<br><br />
'''TODO''': What the heck even is a "other" channel on an image? Does this even do anything in code, besides get parsed? -merlyn<br />
<br />
== Object XML -> DetailMaps element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
...<br />
</DetailMaps><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary material layers that provide fine, repeated visual detail on top of the object's main texture layers.<br />
<br />
== Object XML -> DetailMaps element -> DetailMap element ==<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
</pre><br />
<br />
'''Optional''' - The parameters for the detail map textures that repeat across the model, providing finer-scale detail. There can be up to four of these.<br />
<br />
=== DetailMap element -> colorpath attribute ===<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for this detail map's color map texture.<br />
<br />
=== DetailMap element -> normalpath attribute ===<br />
<br />
<pre><br />
<DetailMap normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the detail map's normal map texture.<br />
<br />
=== DetailMap element -> materialpath attribute ===<br />
<br />
<pre><br />
<DetailMap materialpath="Data/Materials/wood.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the given detail map level.<br><br />
'''TODO''': What is this used for? Aren't detail maps a visual-only thing? -merlyn<br />
<br />
== Object XML -> DetailObjects element ==<br />
<br />
== Object XML -> DetailObjects element -> DetailObject element ==<br />
<br />
=== DetailObject element -> obj_path attribute ===<br />
=== DetailObject element -> weight_path attribute ===<br />
=== DetailObject element -> normal_conform attribute ===<br />
=== DetailObject element -> density attribute ===<br />
=== DetailObject element -> min_embed attribute ===<br />
=== DetailObject element -> max_embed attribute ===<br />
=== DetailObject element -> min_scale attribute ===<br />
=== DetailObject element -> max_scale attribute ===<br />
=== DetailObject element -> view_distance attribute ===<br />
=== DetailObject element -> jitter_degrees attribute ===<br />
=== DetailObject element -> overbright attribute ===<br />
=== DetailObject element -> tint_weight attribute ===<br />
=== DetailObject element -> collision_type attribute ===<br />
<br />
== Object XML -> ShaderName element ==<br />
<br />
=== ShaderName element -> element text ===<br />
<br />
== Object XML -> avg_color element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<avg_color r = "100" g = "128" b = "47" /><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should use for rendering acceleration, e.g. if a texture hasn't loaded in, or for simplified lighting.<br><br />
'''TODO''': Is this even remotely correct? Kinda just guessing, without looking at the code. -merlyn<br />
<br />
=== avg_color element -> r attribute ===<br />
<br />
<pre><br />
<avg_color r = "100" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> g attribute ===<br />
<br />
<pre><br />
<avg_color ... g = "128" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> b attribute ===<br />
<br />
<pre><br />
<avg_color ... b = "47" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
== Object XML -> MaterialPath element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
=== MaterialPath element -> element text ===<br />
<br />
<pre><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
== Object XML -> Flags element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of flags that will be applied to this object, if set to true. Some of these flags affect rendering (e.g. <code>double_sided</code>), some affect physics (e.g. <code>no_collision</code>), and others affect gameplay interactions with this object (e.g. <code>bush_collision</code>).<br />
<br />
=== Flags element -> transparent attribute ===<br />
<br />
<pre><br />
<Flags transparent = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be rendered in the transparent rendering pass.<br><br />
This flag doesn't make the object transparent on its own, and must also be coupled with transparent shader flags and a transparency map texture.<br />
<br />
=== Flags element -> no_collision attribute ===<br />
<br />
<pre><br />
<Flags no_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will not trigger collisions with players, items, or weapons.<br><br />
<br />
=== Flags element -> clamp_texture attribute ===<br />
<br />
<pre><br />
<Flags clamp_texture = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will render with its texture clamped at its edges, instead of repeating.<br><br />
<br />
=== Flags element -> bush_collision attribute ===<br />
<br />
<pre><br />
<Flags bush_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will trigger jiggle physics when items and characters collide with it. Physics objects will also be slowed down when interacting with it, but not completely blocked. It will also impact line of sight.<br />
<br />
=== Flags element -> terrain_fixed attribute ===<br />
<br />
<pre><br />
<Flags terrain_fixed = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be locked to the terrain when placed.<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> dynamic attribute ===<br />
<br />
<pre><br />
<Flags dynamic = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be considered to move by script, and the physics engine will use that information for optimization<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> double_sided attribute ===<br />
<br />
<pre><br />
<Flags double_sided = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will have its polygons rendered double-sided. This is useful for objects such as flags and cloth, that have no thickness.<br />
<br />
== Object XML -> GroundOffset element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<GroundOffset>0.5</GroundOffset><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
=== GroundOffset element -> element text ===<br />
<br />
<pre><br />
<GroundOffset>0.5</GroundOffset><br />
</pre><br />
<br />
'''Required''' - Decimal value. The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
== Object XML -> ColorTint element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should be tinted, by default. This can be overridden in the editor after the object is placed in the world.<br />
<br />
=== ColorTint element -> r attribute ===<br />
<br />
<pre><br />
<ColorTint r = "101" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> g attribute ===<br />
<br />
<pre><br />
<ColorTint ... g = "129" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> b attribute ===<br />
<br />
<pre><br />
<ColorTint ... b = "46" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the tint color. Value is between <code>0</code> and <code>255</code>.</div>Merlynhttp://wiki.wolfire.com/index.php?title=Xml_File_Formats&diff=6241Xml File Formats2023-09-10T11:05:12Z<p>Merlyn: /* Object XML */</p>
<hr />
<div>= TODO: =<br />
<br />
Level, Saved Object, Prefab - These have more confusing schemas, to the point where I'm not entirely sure they're distinct types from one another, and I haven't nailed them down yet -merlyn<br />
<br />
= Actor XML =<br />
<br />
This is the top-level XML file for an NPC or combat character. It binds a [[Xml File Formats#Character XML|Character XML]] file to an [[Character Scripting|AI angelscript]] file.<br><br />
When a level references a character, this is the file type that is referenced.<br />
<br />
== Actor XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<Actor><br />
<Character>Data/Characters/rabbot.xml</Character><br />
<ControlScript>enemycontrol.as</ControlScript><br />
</Actor><br />
</pre><br />
<br />
== Actor XML -> Character element ==<br />
<pre><br />
<Actor><br />
<Character>Data/Characters/rabbot.xml</Character><br />
...<br />
</Actor><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Xml File Formats#Character XML|Character XML]]<br />
<br />
== Actor XML -> ControlScript element ==<br />
<pre><br />
<Actor><br />
...<br />
<ControlScript>enemycontrol.as</ControlScript><br />
</Actor><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Character Scripting|AI angelscript]]. Relative to <code>Data/Scripts</code> folder<br />
<br />
= Asset Preload XML =<br />
<br />
'''TODO:'''<br />
<br />
= Attachment XML =<br />
<br />
'''TODO:'''<br />
<br />
= Attack XML =<br />
<br />
'''TODO:'''<br />
<br />
= Character XML =<br />
<br />
'''TODO:'''<br />
<br />
= Decal XML =<br />
<br />
'''TODO:'''<br />
<br />
= Events XML =<br />
<br />
'''TODO:'''<br />
<br />
= Hotspot XML =<br />
<br />
This is the top-level XML file for a hotspot game object. It specifies the billboard image, and the [[Hotspot Scripting|Hotspot angelscript]] file.<br><br />
When a level references a hotspot, this is the file type that is referenced.<br />
<br />
== Hotspot XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<Type>generic</Type><br />
<Hotspot><br />
<BillboardColorMap>Data/UI/spawner/thumbs/Hotspot/empty.png</BillboardColorMap><br />
<Script>hotspots/sound_hotspot.as</Script><br />
</Hotspot><br />
</pre><br />
<br />
== Hotspot XML -> Type element ==<br />
<pre><br />
<Type>generic</Type><br />
<Hotspot><br />
...<br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. This should always have the value <code><Type>generic</Type></code>.<br><br />
Note: Having two document elements is not valid XML, and I'm not sure what purpose this element serves. But leave it in, since all the hotspots do it. -merlyn<br />
<br />
== Hotspot XML -> Character element ==<br />
<pre><br />
<Hotspot><br />
<BillboardColorMap>Data/UI/spawner/thumbs/Hotspot/empty.png</BillboardColorMap><br />
...<br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. Path to image file. If you don't want a billboard image, you can use <code>Data/UI/spawner/thumbs/Hotspot/empty.png</code>.<br />
<br />
== Hotspot XML -> Script element ==<br />
<pre><br />
<Hotspot><br />
...<br />
<Script>hotspots/sound_hotspot.as</Script><br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Hotspot Scripting|Hotspot angelscript]]. Relative to <code>Data/Scripts</code> folder.<br />
<br />
= Item XML =<br />
<br />
'''TODO:'''<br />
<br />
= Layered Song XML =<br />
<br />
'''TODO:'''<br />
<br />
= Level Meta XML =<br />
<br />
'''TODO:'''<br />
<br />
= Material XML =<br />
<br />
This XML file specifies the sounds that will be played when a character or item interacts with a world object. It is used to model the sound differences between wood, metal, soil, ice, etc.<br><br />
<br />
<code>Data/Materials/default.xml</code> is the global "default" material, if the material isn't specified by the world object.<br><br />
<br />
When the engine or a gameplay script detects a physics event, the code will do a lookup against the current material, for an event with that event name. If the event name is found, then the corresponding sound will be triggered.<br><br />
<br />
Some of these events and materials might specify modifiers (<code>soft</code>, <code>heavy</code>, etc). If they do, the code will first do the lookup against the <code><events mod="themod"></code> version of the event.<br><br />
If an event with the given name is not found with that modifier, the code will then lookup a version of the same event name, but with no modifiers specified.<br><br />
<br />
Some of the values, if not specified, will look at a global "base" material to find the value of the parameter. <code>max_distance</code> is the only one of those parameters right now.<br />
<br />
<code>Data/Materials/base.xml</code> is the global "base" material.<br><br />
<br />
== Material XML Example ==<br />
From <code>Data/Materials/dirt.xml</code> - this is not the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_light_dirt.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_medium_dirt.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_heavy_dirt.xml" attached="true"/><br />
<-- Note: more sound events in the real file than just these --><br />
</events> <br />
<events mod="soft"><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
</events><br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"<br />
shader="stepdecalfast"/><br />
<skid color="Data/Textures/Decals/Footprints/rabbitdirtsmear_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtsmear_n.tga"<br />
shader="stepdecalfast"/><br />
</decals><br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
<skid path="Data/Particles/heavydirt.xml"/><br />
</particles><br />
<physics hardness = "0.8" friction = "1.0" sharp_penetration = "1.0" /><br />
</material><br />
</pre><br />
<br />
From <code>Data/Materials/default.xml</code>, which is the default Material XML file. It is used when other XML file types call for a Material XML, but one is not specified.<br><br />
This is the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
<rightrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
<leftwallstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_wallrun.xml" attached="true"/><br />
<rightwallstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_wallrun.xml" attached="true"/><br />
<leftwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_walk.xml" attached="true"/><br />
<rightwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_walk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<land soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land.xml" attached="true"/><br />
<land_soft soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land_soft.xml" attached="true"/><br />
<land_slide soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land_slide.xml" attached="true"/><br />
<slide soundgroup="Data/Sounds/concrete_foley/slide_concrete_short.xml" attached="true"/><br />
<kick soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_kick.xml" attached="true"/><br />
<sweep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_sweep.xml" attached="true"/><br />
<jump soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump.xml" attached="true"/><br />
<roll soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_roll.xml" attached="true"/><br />
<edge_grab soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_edge_grab.xml" attached="true"/><br />
<edge_crawl soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_edgecrawl.xml" attached="true"/><br />
<bodyfall soundgroup="Data/Sounds/concrete_foley/bf_concrete.xml" attached="true"/><br />
<bodyfall_light soundgroup="Data/Sounds/concrete_foley/bf_concrete_light.xml" attached="true"/><br />
<bodyfall_medium soundgroup="Data/Sounds/concrete_foley/bf_concrete_medium.xml" attached="true"/><br />
<bodyfall_heavy soundgroup="Data/Sounds/concrete_foley/bf_concrete_heavy.xml" attached="true"/><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_light_stone.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_medium_stone.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_heavy_stone.xml" attached="true"/><br />
<blood_spatter soundgroup="Data/Sounds/blood/spatter_hard.xml"/><br />
<blood_drip soundgroup="Data/Sounds/blood/drip_lowpass.xml"/><br />
</events><br />
<events mod="heavy"><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_run.xml" attached="true"/><br />
<rightrunstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_run.xml" attached="true"/><br />
<leftwallstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_wallrun.xml" attached="true"/><br />
<rightwallstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_wallrun.xml" attached="true"/><br />
<leftwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_walk.xml" attached="true"/><br />
<rightwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_walk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<land soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<land_soft soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<land_slide soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<kick soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_kick.xml" attached="true"/><br />
<sweep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_sweep.xml" attached="true"/><br />
<jump soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump.xml" attached="true"/><br />
<roll soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_roll.xml" attached="true"/><br />
<edge_grab soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_edge_grab.xml" attached="true"/><br />
</events><br />
<events mod="soft"><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
</events><br />
<physics hardness = "1.0" friction = "1.0" sharp_penetration = "0.0" /><br />
</material><br />
</pre><br />
<br />
From <code>Data/Materials/base.xml</code>, which specifies the default '''max_distance''' values for all materials.<br><br />
This is the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<leftrunstep max_distance = "40.0"/><br />
<rightrunstep max_distance = "40.0"/><br />
<leftwallstep max_distance = "40.0"/><br />
<rightwallstep max_distance = "40.0"/><br />
<leftwalkstep max_distance = "25.0"/><br />
<rightwalkstep max_distance = "25.0"/><br />
<leftcrouchwalkstep max_distance = "10.0"/><br />
<rightcrouchwalkstep max_distance = "10.0"/><br />
<land max_distance = "60.0"/><br />
<land_soft max_distance = "30.0"/><br />
<land_slide max_distance = "20.0"/><br />
<slide max_distance = "30.0"/><br />
<kick max_distance = "25.0"/><br />
<sweep max_distance = "25.0"/><br />
<jump max_distance = "40.0"/><br />
<roll max_distance = "15.0"/><br />
<edge_grab max_distance = "25.0"/><br />
<edge_crawl max_distance = "15.0"/><br />
<bodyfall max_distance = "80.0"/><br />
<bodyfall_light max_distance = "40.0"/><br />
<bodyfall_medium max_distance = "60.0"/><br />
<bodyfall_heavy max_distance = "80.0"/><br />
<weapon_drop_light max_distance = "80.0"/><br />
<weapon_drop_medium max_distance = "80.0"/><br />
<weapon_drop_heavy max_distance = "80.0"/><br />
<blood_spatter max_distance = "30.0"/><br />
<blood_drip max_distance = "20.0"/><br />
<flip max_distance = "20.0"/><br />
<choke_grab max_distance = "10.0"/>;<br />
<choke_move max_distance = "10.0"/>;<br />
<choke_fall max_distance = "10.0"/>;<br />
</events><br />
<events mod="heavy"><br />
<leftrunstep max_distance = "50.0"/><br />
<rightrunstep max_distance = "50.0"/><br />
<leftwallstep max_distance = "50.0"/><br />
<rightwallstep max_distance = "50.0"/><br />
<leftwalkstep max_distance = "30.0"/><br />
<rightwalkstep max_distance = "30.0"/><br />
<leftcrouchwalkstep max_distance = "20.0"/><br />
<rightcrouchwalkstep max_distance = "20.0"/><br />
<land max_distance = "80.0"/><br />
<land_soft max_distance = "40.0"/><br />
<land_slide max_distance = "40.0"/><br />
<kick max_distance = "30.0"/><br />
<sweep max_distance = "30.0"/><br />
<jump max_distance = "50.0"/><br />
<roll max_distance = "25.0"/><br />
<edge_grab max_distance = "40.0"/><br />
</events><br />
</material><br />
</pre><br />
<br />
== Material XML -> Events element ==<br />
<pre><br />
<material><br />
<events><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision sound events for the material.<br />
<br />
=== Events element -> mod attribute ===<br />
<br />
<pre><br />
<material><br />
<events mod="soft"><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
'''Optional''' - String value. Specifies that this list of collision sound events only apply when the given modifier is specified.<br><br />
The modifiers are different ways the sounds will be presented, such as <code>soft</code>, <code>heavy</code>, etc.<br />
<br />
== Material XML -> Events element -> Sound element ==<br />
<pre><br />
<material><br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true" max_distance = "40.0"/><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
The sound (and physical properties of the sound) for a given collision sound event. The name of the element corresponds to the name of the collision sound event (in this example, '''leftrunstep''').<br />
<br />
=== Sound element -> soundgroup attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - String value. Specifies the [[Xml File Formats#Sound Group XML|Sound Group XML]] for the material interaction event.<br><br />
'''TODO:''': Is this really optional? If so, what is the default behavior?<br />
<br />
=== Sound element -> attached attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep attached="true"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - Boolean value. '''Default''': false<br><br />
If true, the sound (group) will be played as a sound that is attached to the character that triggered the collision sound event.<br />
<br />
=== Sound element -> max_distance attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep max_distance = "40.0"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0<br><br />
The max distance that the sound will still be audible to the player.<br><br />
If the value is 0.0, then the max distance will be considered infinite.<br><br />
If it is not specified for a given sound collision event, then the corresponding value in <code>Data/Materials/base.xml</code> will be used instead.<br />
<br />
== Material XML -> Decals element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision decal events for the material.<br />
<br />
== Material XML -> Decals element -> Decal element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"<br />
shader="stepdecalfast"/><br />
<skid color="Data/Textures/Decals/Footprints/rabbitdirtsmear_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtsmear_n.tga"<br />
shader="stepdecalfast"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
The decal (and rendering properties of the decal) for a given collision decal event. The name of the element corresponds to the name of the collision decal event (in these examples, '''step''' and '''skid''').<br />
<br />
=== Decal element -> color attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the decal's color texture.<br />
<br />
=== Decal element -> normal attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the decal's normal texture.<br />
<br />
=== Decal element -> shader attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step shader="stepdecalfast"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the shader name that will be used when rendering the decal.<br />
<br />
== Material XML -> Particles element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
...<br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision particle events for the material. <br />
<br />
== Material XML -> Particles element -> Particle element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
<skid path="Data/Particles/heavydirt.xml"/><br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
The particle for a given collision particle event. The name of the element corresponds to the name of the collision particle event (in these examples, '''step''' and '''skid'''). <br />
<br />
=== Particle element -> path attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
...<br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Xml File Formats#Particle XML|Particle XML]]<br />
<br />
== Material XML -> Physics element ==<br />
<br />
<pre><br />
<material><br />
<physics hardness = "0.8" friction = "1.0" sharp_penetration = "1.0" /><br />
</material><br />
</pre><br />
<br />
The physics properties of the the material. Collision gameplay events will use these properties to determine how to make other objects respond when they collide with the object this material is applied to.<br />
<br />
=== Physics element -> hardness attribute ===<br />
<br />
<pre><br />
<material><br />
<physics hardness = "0.8"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0<br><br />
'''TODO: Describe'''<br />
<br />
=== Physics element -> friction attribute ===<br />
<br />
<pre><br />
<material><br />
<physics friction = "1.0"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0<br><br />
The friction between any other object and the object this material is applied to.<br><br />
In real life this would depend on the materials for both objects, but the game makes simplifying assumptions to make the mapping a bit less complicated.<br />
<br />
=== Physics element -> sharp_penetration attribute ===<br />
<br />
<pre><br />
<material><br />
<physics sharp_penetration = "1.0"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0<br><br />
'''TODO: Describe'''<br />
<br />
= Mod XML =<br />
<br />
'''TODO:'''<br />
<br />
= Music XML =<br />
<br />
'''TODO:'''<br />
<br />
= Nav Mesh Meta XML =<br />
<br />
'''TODO:'''<br />
<br />
= Object XML =<br />
<br />
{{:Overgrowth_Object_Xml_File_Format}}<br />
<br />
= Particle XML =<br />
<br />
'''TODO:'''<br />
<br />
= Path XML =<br />
<br />
'''TODO:'''<br />
<br />
= Reaction XML =<br />
<br />
'''TODO:'''<br />
<br />
= Retarget XML =<br />
<br />
'''TODO:'''<br />
<br />
= Rig XML =<br />
<br />
This is the XML file for a character skeleton. It binds a [[Xml File Formats#Character XML|Character XML]] file to an [[Character Scripting|AI angelscript]] file.<br><br />
When a level references a character, this is the file type that is referenced.<br />
<br />
== Rig XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<rig bone_path = "Data/Skeletons/r_wolf2.phxbn"<br />
model_path = "Data/Models/Characters/IGF_Wolf/IGF_Wolf.obj"<br />
mass_path = "Data/Skeletons/r_lt_dog.xml"/><br />
</pre><br />
<br />
== Rig element -> bone_path attribute ==<br />
<pre><br />
<rig bone_path = "Data/Skeletons/r_wolf2.phxbn"/><br />
</pre><br />
<br />
'''Required''' - String value. Path to the skeleton file, using the custom Phoenix Engine skeleton file type ([[Binary File Formats#PHXBN|PHXBN]]. This file MUST have been exported using the mesh specified in <code>model_path</code>.<br />
<br />
== Rig element -> model_path attribute ==<br />
<pre><br />
<rig model_path = "Data/Models/Characters/IGF_Wolf/IGF_Wolf.obj"/><br />
</pre><br />
<br />
'''Required''' - String value. Path to Obj model file to use as skinned the character mesh. This file MUST be the same as the one used when exporting the skeleton specified in <code>bone_path</code>.<br />
<br />
== Rig element -> mass_path attribute ==<br />
<pre><br />
<rig mass_path = "Data/Skeletons/r_lt_dog.xml"/><br />
</pre><br />
<br />
'''Optional''' - String value. Path to [[Xml File Formats#Rig XML|Rig XML]]. Used to override the current skeleton with the bone masses from a different skeleton.<br><br />
'''TODO''': Why you'd want to do this? Who knows! -merlyn<br />
<br />
= Shader Preload XML =<br />
<br />
'''TODO:'''<br />
<br />
= Sound Group XML =<br />
<br />
This is the XML file that describes a group of sounds. One of those sounds will be randomly chosen and played whenever the sound group is triggered.<br><br />
<br />
The file will specify a count of the number of <code>variants</code> that exist, and a sound file will need to exist for each of those variants.<br><br />
For a Sound Group XML with three variants, the XML file and and corresponding sound variants should follow a naming scheme like this:<br />
* <code>Data/Sounds/example_subdir/example_sound_group.xml</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_1.wav</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_2.wav</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_3.wav</code><br><br />
<br />
== Sound Group XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<soundgroup<br />
variants = "3"<br />
delay = "5.3"<br />
volume = "0.1"<br />
max_distance = "77.5"<br />
/><br />
</pre><br />
<br />
== Sound Group element -> variants attribute ==<br />
<pre><br />
<soundgroup variants = "3" /><br />
</pre><br />
<br />
'''Optional''' - Integer value. '''Default''': 1.<br><br />
The count of variants. There must also be a corresponding <code>SoundGroupXmlName_1.wav</code> file for every variant, numbered incrementally up to the variant count.<br><br />
E.g. if there was 3 variants, there would need to be files named <code>SoundGroupXmlName_1.wav</code>, <code>SoundGroupXmlName_2.wav</code>, and <code>SoundGroupXmlName_3.wav</code>.<br />
<br />
== Sound Group element -> delay attribute ==<br />
<pre><br />
<soundgroup delay = "5.3" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0.<br><br />
A delay to add to the start of sound playback, in seconds.<br />
<br />
== Sound Group element -> volume attribute ==<br />
<pre><br />
<soundgroup volume = "0.1" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0.<br><br />
The volume to play back the sound.<br><br />
This is further multiplied by the gain specified when triggering the sound group in gameplay code.<br />
<br />
== Sound Group element -> max_distance attribute ==<br />
<pre><br />
<soundgroup max_distance = "77.5" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 30.0.<br><br />
The maximum distance that the sound can be heard by the player.<br><br />
It will be overridden by the <code>max_distance</code> in the collision sound event, in the [[Xml File Formats#Material XML -> Events element -> Event element|Material XML]], if specified for the given collision sound event.<br />
<br />
= Synced Animation Group XML =<br />
<br />
'''TODO:'''<br />
<br />
= Version Manifest XML =<br />
<br />
'''TODO:'''<br />
<br />
= Voice XML =<br />
<br />
'''TODO:'''</div>Merlynhttp://wiki.wolfire.com/index.php?title=Overgrowth_Object_Xml_File_Format&diff=6240Overgrowth Object Xml File Format2023-09-10T11:01:42Z<p>Merlyn: Move Overgrowth Object XML to its own page</p>
<hr />
<div><onlyinclude><br />
This is the top-level XML file for a level object. It specifies visual parameters, some gameplay parameters, and paths for visual assets.<br><br />
Other XML file types reference this XML file type, such as [[Xml File Formats#Character XML|Character XML files]] and [[Xml File Formats#Item XML|Item XML files]].<br />
<br />
== Object XML Example ==<br />
<br />
<pre><br />
<?xml version="1.0" ?><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
<Label>impale</Label><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gray_metal_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gray_metal_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/cat_cobbles_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/cat_cobbles_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gold_hexagons_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gold_hexagons_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
</DetailMaps><br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="2" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="20" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/Objects/Environment/Rocks/lichen_rock_a.xml" weight_path="Data/Textures/Terrain/forest_hills/forest_hills_not_grass.tga"<br />
normal_conform="1" density="20" min_embed="0.3" max_embed="0.7" min_scale="0.08" max_scale="0.12"<br />
view_distance="10" jitter_degrees="45" overbright="0.4" tint_weight="0.5" collision_type="static" /><br />
</DetailObjects><br />
<ShaderName>detailmap4</ShaderName><br />
<avg_color r = "100" g = "128" b = "47" /><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
<GroundOffset>0.5</GroundOffset><br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<onlyinclude><br />
== Object XML -> Model element ==<br />
<br />
<pre><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the obj format model file.<br />
<br />
=== Model element -> element text ===<br />
<br />
<pre><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
</pre><br />
<br />
'''Required''' - String value. Path to the obj format model file.<br />
<br />
== Object XML -> ColorMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the color map texture for the object.<br />
<br />
=== ColorMap element -> element text ===<br />
<br />
<pre><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color map texture for the object.<br />
<br />
== Object XML -> NormalMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the normal map texture for the object.<br />
<br />
=== NormalMap element -> element text ===<br />
<br />
<pre><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the normal map texture for the object.<br />
<br />
== Object XML -> TranslucencyMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the translucency map texture for the object.<br />
<br />
=== TranslucencyMap element -> element text ===<br />
<br />
<pre><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the translucency map texture for the object.<br />
<br />
== Object XML -> WindMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the wind map texture for the object.<br />
<br />
=== WindMap element -> element text ===<br />
<br />
<pre><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the wind map texture for the object.<br />
<br />
== Object XML -> SharpnessMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br><br />
'''TODO''': links to/from other file types for this field?<br />
<br />
=== SharpnessMap element -> element text ===<br />
<br />
<pre><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br />
<br />
== Object XML -> Label element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Label>impale</Label><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
=== Label element -> element text ===<br />
<br />
<pre><br />
<Label>impale</Label><br />
</pre><br />
<br />
'''Required''' - String value. This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
== Object XML -> WeightMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the weight map texture for the object.<br />
<br />
=== WeightMap element -> element text ===<br />
<br />
<pre><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the weight map texture for the object.<br />
<br />
== Object XML -> PaletteMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies a set of different tintable areas on this object. The labels are the text displayed in the editor interface. Each color channel of the specified image will be used as a mask to specify where on the object's model the tinting should be limited to.<br />
<br />
=== PaletteMap element -> element text ===<br />
<br />
<pre><br />
<PaletteMap ...><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color masks, used when there's tint parameters that limit the tint to a specific area on the object, such as character clothing colors, a tintable area on a weapon, etc.<br />
<br />
=== PaletteMap element -> label_red attribute ===<br />
<br />
<pre><br />
<PaletteMap label_red="Clothing Color 1"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the red channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_green attribute ===<br />
<br />
<pre><br />
<PaletteMap label_green="Clothing Color 2"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the green channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_blue attribute ===<br />
<br />
<pre><br />
<PaletteMap label_blue="Clothing Color 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the blue channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_alpha attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 4"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the alpha channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_other attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 5"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the "other" channel of the tint mask image.<br><br />
'''TODO''': What the heck even is a "other" channel on an image? Does this even do anything in code, besides get parsed? -merlyn<br />
<br />
== Object XML -> DetailMaps element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
...<br />
</DetailMaps><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary material layers that provide fine, repeated visual detail on top of the object's main texture layers.<br />
<br />
== Object XML -> DetailMaps element -> DetailMap element ==<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
</pre><br />
<br />
'''Optional''' - The parameters for the detail map textures that repeat across the model, providing finer-scale detail. There can be up to four of these.<br />
<br />
=== DetailMap element -> colorpath attribute ===<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for this detail map's color map texture.<br />
<br />
=== DetailMap element -> normalpath attribute ===<br />
<br />
<pre><br />
<DetailMap normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the detail map's normal map texture.<br />
<br />
=== DetailMap element -> materialpath attribute ===<br />
<br />
<pre><br />
<DetailMap materialpath="Data/Materials/wood.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the given detail map level.<br><br />
'''TODO''': What is this used for? Aren't detail maps a visual-only thing? -merlyn<br />
<br />
== Object XML -> DetailObjects element ==<br />
<br />
== Object XML -> DetailObjects element -> DetailObject element ==<br />
<br />
=== DetailObject element -> obj_path attribute ===<br />
=== DetailObject element -> weight_path attribute ===<br />
=== DetailObject element -> normal_conform attribute ===<br />
=== DetailObject element -> density attribute ===<br />
=== DetailObject element -> min_embed attribute ===<br />
=== DetailObject element -> max_embed attribute ===<br />
=== DetailObject element -> min_scale attribute ===<br />
=== DetailObject element -> max_scale attribute ===<br />
=== DetailObject element -> view_distance attribute ===<br />
=== DetailObject element -> jitter_degrees attribute ===<br />
=== DetailObject element -> overbright attribute ===<br />
=== DetailObject element -> tint_weight attribute ===<br />
=== DetailObject element -> collision_type attribute ===<br />
<br />
== Object XML -> ShaderName element ==<br />
<br />
=== ShaderName element -> element text ===<br />
<br />
== Object XML -> avg_color element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<avg_color r = "100" g = "128" b = "47" /><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should use for rendering acceleration, e.g. if a texture hasn't loaded in, or for simplified lighting.<br><br />
'''TODO''': Is this even remotely correct? Kinda just guessing, without looking at the code. -merlyn<br />
<br />
=== avg_color element -> r attribute ===<br />
<br />
<pre><br />
<avg_color r = "100" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> g attribute ===<br />
<br />
<pre><br />
<avg_color ... g = "128" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> b attribute ===<br />
<br />
<pre><br />
<avg_color ... b = "47" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
== Object XML -> MaterialPath element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
=== MaterialPath element -> element text ===<br />
<br />
<pre><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
== Object XML -> Flags element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of flags that will be applied to this object, if set to true. Some of these flags affect rendering (e.g. <code>double_sided</code>), some affect physics (e.g. <code>no_collision</code>), and others affect gameplay interactions with this object (e.g. <code>bush_collision</code>).<br />
<br />
=== Flags element -> transparent attribute ===<br />
<br />
<pre><br />
<Flags transparent = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be rendered in the transparent rendering pass.<br><br />
This flag doesn't make the object transparent on its own, and must also be coupled with transparent shader flags and a transparency map texture.<br />
<br />
=== Flags element -> no_collision attribute ===<br />
<br />
<pre><br />
<Flags no_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will not trigger collisions with players, items, or weapons.<br><br />
<br />
=== Flags element -> clamp_texture attribute ===<br />
<br />
<pre><br />
<Flags clamp_texture = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will render with its texture clamped at its edges, instead of repeating.<br><br />
<br />
=== Flags element -> bush_collision attribute ===<br />
<br />
<pre><br />
<Flags bush_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will trigger jiggle physics when items and characters collide with it. Physics objects will also be slowed down when interacting with it, but not completely blocked. It will also impact line of sight.<br />
<br />
=== Flags element -> terrain_fixed attribute ===<br />
<br />
<pre><br />
<Flags terrain_fixed = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be locked to the terrain when placed.<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> dynamic attribute ===<br />
<br />
<pre><br />
<Flags dynamic = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be considered to move by script, and the physics engine will use that information for optimization<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> double_sided attribute ===<br />
<br />
<pre><br />
<Flags double_sided = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will have its polygons rendered double-sided. This is useful for objects such as flags and cloth, that have no thickness.<br />
<br />
== Object XML -> GroundOffset element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<GroundOffset>0.5</GroundOffset><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
=== GroundOffset element -> element text ===<br />
<br />
<pre><br />
<GroundOffset>0.5</GroundOffset><br />
</pre><br />
<br />
'''Required''' - Decimal value. The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
== Object XML -> ColorTint element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should be tinted, by default. This can be overridden in the editor after the object is placed in the world.<br />
<br />
=== ColorTint element -> r attribute ===<br />
<br />
<pre><br />
<ColorTint r = "101" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> g attribute ===<br />
<br />
<pre><br />
<ColorTint ... g = "129" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> b attribute ===<br />
<br />
<pre><br />
<ColorTint ... b = "46" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the tint color. Value is between <code>0</code> and <code>255</code>.</div>Merlynhttp://wiki.wolfire.com/index.php?title=Xml_File_Formats&diff=6239Xml File Formats2023-09-10T10:57:13Z<p>Merlyn: /* Object XML -> Label element */</p>
<hr />
<div>= TODO: =<br />
<br />
Level, Saved Object, Prefab - These have more confusing schemas, to the point where I'm not entirely sure they're distinct types from one another, and I haven't nailed them down yet -merlyn<br />
<br />
= Actor XML =<br />
<br />
This is the top-level XML file for an NPC or combat character. It binds a [[Xml File Formats#Character XML|Character XML]] file to an [[Character Scripting|AI angelscript]] file.<br><br />
When a level references a character, this is the file type that is referenced.<br />
<br />
== Actor XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<Actor><br />
<Character>Data/Characters/rabbot.xml</Character><br />
<ControlScript>enemycontrol.as</ControlScript><br />
</Actor><br />
</pre><br />
<br />
== Actor XML -> Character element ==<br />
<pre><br />
<Actor><br />
<Character>Data/Characters/rabbot.xml</Character><br />
...<br />
</Actor><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Xml File Formats#Character XML|Character XML]]<br />
<br />
== Actor XML -> ControlScript element ==<br />
<pre><br />
<Actor><br />
...<br />
<ControlScript>enemycontrol.as</ControlScript><br />
</Actor><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Character Scripting|AI angelscript]]. Relative to <code>Data/Scripts</code> folder<br />
<br />
= Asset Preload XML =<br />
<br />
'''TODO:'''<br />
<br />
= Attachment XML =<br />
<br />
'''TODO:'''<br />
<br />
= Attack XML =<br />
<br />
'''TODO:'''<br />
<br />
= Character XML =<br />
<br />
'''TODO:'''<br />
<br />
= Decal XML =<br />
<br />
'''TODO:'''<br />
<br />
= Events XML =<br />
<br />
'''TODO:'''<br />
<br />
= Hotspot XML =<br />
<br />
This is the top-level XML file for a hotspot game object. It specifies the billboard image, and the [[Hotspot Scripting|Hotspot angelscript]] file.<br><br />
When a level references a hotspot, this is the file type that is referenced.<br />
<br />
== Hotspot XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<Type>generic</Type><br />
<Hotspot><br />
<BillboardColorMap>Data/UI/spawner/thumbs/Hotspot/empty.png</BillboardColorMap><br />
<Script>hotspots/sound_hotspot.as</Script><br />
</Hotspot><br />
</pre><br />
<br />
== Hotspot XML -> Type element ==<br />
<pre><br />
<Type>generic</Type><br />
<Hotspot><br />
...<br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. This should always have the value <code><Type>generic</Type></code>.<br><br />
Note: Having two document elements is not valid XML, and I'm not sure what purpose this element serves. But leave it in, since all the hotspots do it. -merlyn<br />
<br />
== Hotspot XML -> Character element ==<br />
<pre><br />
<Hotspot><br />
<BillboardColorMap>Data/UI/spawner/thumbs/Hotspot/empty.png</BillboardColorMap><br />
...<br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. Path to image file. If you don't want a billboard image, you can use <code>Data/UI/spawner/thumbs/Hotspot/empty.png</code>.<br />
<br />
== Hotspot XML -> Script element ==<br />
<pre><br />
<Hotspot><br />
...<br />
<Script>hotspots/sound_hotspot.as</Script><br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Hotspot Scripting|Hotspot angelscript]]. Relative to <code>Data/Scripts</code> folder.<br />
<br />
= Item XML =<br />
<br />
'''TODO:'''<br />
<br />
= Layered Song XML =<br />
<br />
'''TODO:'''<br />
<br />
= Level Meta XML =<br />
<br />
'''TODO:'''<br />
<br />
= Material XML =<br />
<br />
This XML file specifies the sounds that will be played when a character or item interacts with a world object. It is used to model the sound differences between wood, metal, soil, ice, etc.<br><br />
<br />
<code>Data/Materials/default.xml</code> is the global "default" material, if the material isn't specified by the world object.<br><br />
<br />
When the engine or a gameplay script detects a physics event, the code will do a lookup against the current material, for an event with that event name. If the event name is found, then the corresponding sound will be triggered.<br><br />
<br />
Some of these events and materials might specify modifiers (<code>soft</code>, <code>heavy</code>, etc). If they do, the code will first do the lookup against the <code><events mod="themod"></code> version of the event.<br><br />
If an event with the given name is not found with that modifier, the code will then lookup a version of the same event name, but with no modifiers specified.<br><br />
<br />
Some of the values, if not specified, will look at a global "base" material to find the value of the parameter. <code>max_distance</code> is the only one of those parameters right now.<br />
<br />
<code>Data/Materials/base.xml</code> is the global "base" material.<br><br />
<br />
== Material XML Example ==<br />
From <code>Data/Materials/dirt.xml</code> - this is not the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_light_dirt.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_medium_dirt.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_heavy_dirt.xml" attached="true"/><br />
<-- Note: more sound events in the real file than just these --><br />
</events> <br />
<events mod="soft"><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
</events><br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"<br />
shader="stepdecalfast"/><br />
<skid color="Data/Textures/Decals/Footprints/rabbitdirtsmear_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtsmear_n.tga"<br />
shader="stepdecalfast"/><br />
</decals><br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
<skid path="Data/Particles/heavydirt.xml"/><br />
</particles><br />
<physics hardness = "0.8" friction = "1.0" sharp_penetration = "1.0" /><br />
</material><br />
</pre><br />
<br />
From <code>Data/Materials/default.xml</code>, which is the default Material XML file. It is used when other XML file types call for a Material XML, but one is not specified.<br><br />
This is the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
<rightrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
<leftwallstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_wallrun.xml" attached="true"/><br />
<rightwallstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_wallrun.xml" attached="true"/><br />
<leftwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_walk.xml" attached="true"/><br />
<rightwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_walk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<land soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land.xml" attached="true"/><br />
<land_soft soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land_soft.xml" attached="true"/><br />
<land_slide soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land_slide.xml" attached="true"/><br />
<slide soundgroup="Data/Sounds/concrete_foley/slide_concrete_short.xml" attached="true"/><br />
<kick soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_kick.xml" attached="true"/><br />
<sweep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_sweep.xml" attached="true"/><br />
<jump soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump.xml" attached="true"/><br />
<roll soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_roll.xml" attached="true"/><br />
<edge_grab soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_edge_grab.xml" attached="true"/><br />
<edge_crawl soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_edgecrawl.xml" attached="true"/><br />
<bodyfall soundgroup="Data/Sounds/concrete_foley/bf_concrete.xml" attached="true"/><br />
<bodyfall_light soundgroup="Data/Sounds/concrete_foley/bf_concrete_light.xml" attached="true"/><br />
<bodyfall_medium soundgroup="Data/Sounds/concrete_foley/bf_concrete_medium.xml" attached="true"/><br />
<bodyfall_heavy soundgroup="Data/Sounds/concrete_foley/bf_concrete_heavy.xml" attached="true"/><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_light_stone.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_medium_stone.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_heavy_stone.xml" attached="true"/><br />
<blood_spatter soundgroup="Data/Sounds/blood/spatter_hard.xml"/><br />
<blood_drip soundgroup="Data/Sounds/blood/drip_lowpass.xml"/><br />
</events><br />
<events mod="heavy"><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_run.xml" attached="true"/><br />
<rightrunstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_run.xml" attached="true"/><br />
<leftwallstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_wallrun.xml" attached="true"/><br />
<rightwallstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_wallrun.xml" attached="true"/><br />
<leftwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_walk.xml" attached="true"/><br />
<rightwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_walk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<land soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<land_soft soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<land_slide soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<kick soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_kick.xml" attached="true"/><br />
<sweep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_sweep.xml" attached="true"/><br />
<jump soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump.xml" attached="true"/><br />
<roll soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_roll.xml" attached="true"/><br />
<edge_grab soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_edge_grab.xml" attached="true"/><br />
</events><br />
<events mod="soft"><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
</events><br />
<physics hardness = "1.0" friction = "1.0" sharp_penetration = "0.0" /><br />
</material><br />
</pre><br />
<br />
From <code>Data/Materials/base.xml</code>, which specifies the default '''max_distance''' values for all materials.<br><br />
This is the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<leftrunstep max_distance = "40.0"/><br />
<rightrunstep max_distance = "40.0"/><br />
<leftwallstep max_distance = "40.0"/><br />
<rightwallstep max_distance = "40.0"/><br />
<leftwalkstep max_distance = "25.0"/><br />
<rightwalkstep max_distance = "25.0"/><br />
<leftcrouchwalkstep max_distance = "10.0"/><br />
<rightcrouchwalkstep max_distance = "10.0"/><br />
<land max_distance = "60.0"/><br />
<land_soft max_distance = "30.0"/><br />
<land_slide max_distance = "20.0"/><br />
<slide max_distance = "30.0"/><br />
<kick max_distance = "25.0"/><br />
<sweep max_distance = "25.0"/><br />
<jump max_distance = "40.0"/><br />
<roll max_distance = "15.0"/><br />
<edge_grab max_distance = "25.0"/><br />
<edge_crawl max_distance = "15.0"/><br />
<bodyfall max_distance = "80.0"/><br />
<bodyfall_light max_distance = "40.0"/><br />
<bodyfall_medium max_distance = "60.0"/><br />
<bodyfall_heavy max_distance = "80.0"/><br />
<weapon_drop_light max_distance = "80.0"/><br />
<weapon_drop_medium max_distance = "80.0"/><br />
<weapon_drop_heavy max_distance = "80.0"/><br />
<blood_spatter max_distance = "30.0"/><br />
<blood_drip max_distance = "20.0"/><br />
<flip max_distance = "20.0"/><br />
<choke_grab max_distance = "10.0"/>;<br />
<choke_move max_distance = "10.0"/>;<br />
<choke_fall max_distance = "10.0"/>;<br />
</events><br />
<events mod="heavy"><br />
<leftrunstep max_distance = "50.0"/><br />
<rightrunstep max_distance = "50.0"/><br />
<leftwallstep max_distance = "50.0"/><br />
<rightwallstep max_distance = "50.0"/><br />
<leftwalkstep max_distance = "30.0"/><br />
<rightwalkstep max_distance = "30.0"/><br />
<leftcrouchwalkstep max_distance = "20.0"/><br />
<rightcrouchwalkstep max_distance = "20.0"/><br />
<land max_distance = "80.0"/><br />
<land_soft max_distance = "40.0"/><br />
<land_slide max_distance = "40.0"/><br />
<kick max_distance = "30.0"/><br />
<sweep max_distance = "30.0"/><br />
<jump max_distance = "50.0"/><br />
<roll max_distance = "25.0"/><br />
<edge_grab max_distance = "40.0"/><br />
</events><br />
</material><br />
</pre><br />
<br />
== Material XML -> Events element ==<br />
<pre><br />
<material><br />
<events><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision sound events for the material.<br />
<br />
=== Events element -> mod attribute ===<br />
<br />
<pre><br />
<material><br />
<events mod="soft"><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
'''Optional''' - String value. Specifies that this list of collision sound events only apply when the given modifier is specified.<br><br />
The modifiers are different ways the sounds will be presented, such as <code>soft</code>, <code>heavy</code>, etc.<br />
<br />
== Material XML -> Events element -> Sound element ==<br />
<pre><br />
<material><br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true" max_distance = "40.0"/><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
The sound (and physical properties of the sound) for a given collision sound event. The name of the element corresponds to the name of the collision sound event (in this example, '''leftrunstep''').<br />
<br />
=== Sound element -> soundgroup attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - String value. Specifies the [[Xml File Formats#Sound Group XML|Sound Group XML]] for the material interaction event.<br><br />
'''TODO:''': Is this really optional? If so, what is the default behavior?<br />
<br />
=== Sound element -> attached attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep attached="true"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - Boolean value. '''Default''': false<br><br />
If true, the sound (group) will be played as a sound that is attached to the character that triggered the collision sound event.<br />
<br />
=== Sound element -> max_distance attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep max_distance = "40.0"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0<br><br />
The max distance that the sound will still be audible to the player.<br><br />
If the value is 0.0, then the max distance will be considered infinite.<br><br />
If it is not specified for a given sound collision event, then the corresponding value in <code>Data/Materials/base.xml</code> will be used instead.<br />
<br />
== Material XML -> Decals element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision decal events for the material.<br />
<br />
== Material XML -> Decals element -> Decal element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"<br />
shader="stepdecalfast"/><br />
<skid color="Data/Textures/Decals/Footprints/rabbitdirtsmear_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtsmear_n.tga"<br />
shader="stepdecalfast"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
The decal (and rendering properties of the decal) for a given collision decal event. The name of the element corresponds to the name of the collision decal event (in these examples, '''step''' and '''skid''').<br />
<br />
=== Decal element -> color attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the decal's color texture.<br />
<br />
=== Decal element -> normal attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the decal's normal texture.<br />
<br />
=== Decal element -> shader attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step shader="stepdecalfast"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the shader name that will be used when rendering the decal.<br />
<br />
== Material XML -> Particles element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
...<br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision particle events for the material. <br />
<br />
== Material XML -> Particles element -> Particle element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
<skid path="Data/Particles/heavydirt.xml"/><br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
The particle for a given collision particle event. The name of the element corresponds to the name of the collision particle event (in these examples, '''step''' and '''skid'''). <br />
<br />
=== Particle element -> path attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
...<br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Xml File Formats#Particle XML|Particle XML]]<br />
<br />
== Material XML -> Physics element ==<br />
<br />
<pre><br />
<material><br />
<physics hardness = "0.8" friction = "1.0" sharp_penetration = "1.0" /><br />
</material><br />
</pre><br />
<br />
The physics properties of the the material. Collision gameplay events will use these properties to determine how to make other objects respond when they collide with the object this material is applied to.<br />
<br />
=== Physics element -> hardness attribute ===<br />
<br />
<pre><br />
<material><br />
<physics hardness = "0.8"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0<br><br />
'''TODO: Describe'''<br />
<br />
=== Physics element -> friction attribute ===<br />
<br />
<pre><br />
<material><br />
<physics friction = "1.0"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0<br><br />
The friction between any other object and the object this material is applied to.<br><br />
In real life this would depend on the materials for both objects, but the game makes simplifying assumptions to make the mapping a bit less complicated.<br />
<br />
=== Physics element -> sharp_penetration attribute ===<br />
<br />
<pre><br />
<material><br />
<physics sharp_penetration = "1.0"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0<br><br />
'''TODO: Describe'''<br />
<br />
= Mod XML =<br />
<br />
'''TODO:'''<br />
<br />
= Music XML =<br />
<br />
'''TODO:'''<br />
<br />
= Nav Mesh Meta XML =<br />
<br />
'''TODO:'''<br />
<br />
= Object XML =<br />
<br />
This is the top-level XML file for a level object. It specifies visual parameters, some gameplay parameters, and paths for visual assets.<br><br />
Other XML file types reference this XML file type, such as [[Xml File Formats#Character XML|Character XML files]] and [[Xml File Formats#Item XML|Item XML files]].<br />
<br />
== Object XML Example ==<br />
<br />
<pre><br />
<?xml version="1.0" ?><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
<Label>impale</Label><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gray_metal_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gray_metal_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/cat_cobbles_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/cat_cobbles_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gold_hexagons_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gold_hexagons_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
</DetailMaps><br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="2" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="20" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/Objects/Environment/Rocks/lichen_rock_a.xml" weight_path="Data/Textures/Terrain/forest_hills/forest_hills_not_grass.tga"<br />
normal_conform="1" density="20" min_embed="0.3" max_embed="0.7" min_scale="0.08" max_scale="0.12"<br />
view_distance="10" jitter_degrees="45" overbright="0.4" tint_weight="0.5" collision_type="static" /><br />
</DetailObjects><br />
<ShaderName>detailmap4</ShaderName><br />
<avg_color r = "100" g = "128" b = "47" /><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
<GroundOffset>0.5</GroundOffset><br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
== Object XML -> Model element ==<br />
<br />
<pre><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the obj format model file.<br />
<br />
=== Model element -> element text ===<br />
<br />
<pre><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
</pre><br />
<br />
'''Required''' - String value. Path to the obj format model file.<br />
<br />
== Object XML -> ColorMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the color map texture for the object.<br />
<br />
=== ColorMap element -> element text ===<br />
<br />
<pre><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color map texture for the object.<br />
<br />
== Object XML -> NormalMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the normal map texture for the object.<br />
<br />
=== NormalMap element -> element text ===<br />
<br />
<pre><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the normal map texture for the object.<br />
<br />
== Object XML -> TranslucencyMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the translucency map texture for the object.<br />
<br />
=== TranslucencyMap element -> element text ===<br />
<br />
<pre><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the translucency map texture for the object.<br />
<br />
== Object XML -> WindMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the wind map texture for the object.<br />
<br />
=== WindMap element -> element text ===<br />
<br />
<pre><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the wind map texture for the object.<br />
<br />
== Object XML -> SharpnessMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br><br />
'''TODO''': links to/from other file types for this field?<br />
<br />
=== SharpnessMap element -> element text ===<br />
<br />
<pre><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br />
<br />
== Object XML -> Label element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Label>impale</Label><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
=== Label element -> element text ===<br />
<br />
<pre><br />
<Label>impale</Label><br />
</pre><br />
<br />
'''Required''' - String value. This is referenced by the editor to display a label for the object in the level, while in edit mode.<br><br />
'''TODO''': Is this right? Or is it for gameplay scripting? -merlyn<br />
<br />
== Object XML -> WeightMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the weight map texture for the object.<br />
<br />
=== WeightMap element -> element text ===<br />
<br />
<pre><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the weight map texture for the object.<br />
<br />
== Object XML -> PaletteMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies a set of different tintable areas on this object. The labels are the text displayed in the editor interface. Each color channel of the specified image will be used as a mask to specify where on the object's model the tinting should be limited to.<br />
<br />
=== PaletteMap element -> element text ===<br />
<br />
<pre><br />
<PaletteMap ...><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color masks, used when there's tint parameters that limit the tint to a specific area on the object, such as character clothing colors, a tintable area on a weapon, etc.<br />
<br />
=== PaletteMap element -> label_red attribute ===<br />
<br />
<pre><br />
<PaletteMap label_red="Clothing Color 1"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the red channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_green attribute ===<br />
<br />
<pre><br />
<PaletteMap label_green="Clothing Color 2"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the green channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_blue attribute ===<br />
<br />
<pre><br />
<PaletteMap label_blue="Clothing Color 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the blue channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_alpha attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 4"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the alpha channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_other attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 5"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the "other" channel of the tint mask image.<br><br />
'''TODO''': What the heck even is a "other" channel on an image? Does this even do anything in code, besides get parsed? -merlyn<br />
<br />
== Object XML -> DetailMaps element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
...<br />
</DetailMaps><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary material layers that provide fine, repeated visual detail on top of the object's main texture layers.<br />
<br />
== Object XML -> DetailMaps element -> DetailMap element ==<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
</pre><br />
<br />
'''Optional''' - The parameters for the detail map textures that repeat across the model, providing finer-scale detail. There can be up to four of these.<br />
<br />
=== DetailMap element -> colorpath attribute ===<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for this detail map's color map texture.<br />
<br />
=== DetailMap element -> normalpath attribute ===<br />
<br />
<pre><br />
<DetailMap normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the detail map's normal map texture.<br />
<br />
=== DetailMap element -> materialpath attribute ===<br />
<br />
<pre><br />
<DetailMap materialpath="Data/Materials/wood.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the given detail map level.<br><br />
'''TODO''': What is this used for? Aren't detail maps a visual-only thing? -merlyn<br />
<br />
== Object XML -> DetailObjects element ==<br />
<br />
== Object XML -> DetailObjects element -> DetailObject element ==<br />
<br />
=== DetailObject element -> obj_path attribute ===<br />
=== DetailObject element -> weight_path attribute ===<br />
=== DetailObject element -> normal_conform attribute ===<br />
=== DetailObject element -> density attribute ===<br />
=== DetailObject element -> min_embed attribute ===<br />
=== DetailObject element -> max_embed attribute ===<br />
=== DetailObject element -> min_scale attribute ===<br />
=== DetailObject element -> max_scale attribute ===<br />
=== DetailObject element -> view_distance attribute ===<br />
=== DetailObject element -> jitter_degrees attribute ===<br />
=== DetailObject element -> overbright attribute ===<br />
=== DetailObject element -> tint_weight attribute ===<br />
=== DetailObject element -> collision_type attribute ===<br />
<br />
== Object XML -> ShaderName element ==<br />
<br />
=== ShaderName element -> element text ===<br />
<br />
== Object XML -> avg_color element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<avg_color r = "100" g = "128" b = "47" /><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should use for rendering acceleration, e.g. if a texture hasn't loaded in, or for simplified lighting.<br><br />
'''TODO''': Is this even remotely correct? Kinda just guessing, without looking at the code. -merlyn<br />
<br />
=== avg_color element -> r attribute ===<br />
<br />
<pre><br />
<avg_color r = "100" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> g attribute ===<br />
<br />
<pre><br />
<avg_color ... g = "128" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> b attribute ===<br />
<br />
<pre><br />
<avg_color ... b = "47" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
== Object XML -> MaterialPath element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
=== MaterialPath element -> element text ===<br />
<br />
<pre><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
== Object XML -> Flags element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of flags that will be applied to this object, if set to true. Some of these flags affect rendering (e.g. <code>double_sided</code>), some affect physics (e.g. <code>no_collision</code>), and others affect gameplay interactions with this object (e.g. <code>bush_collision</code>).<br />
<br />
=== Flags element -> transparent attribute ===<br />
<br />
<pre><br />
<Flags transparent = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be rendered in the transparent rendering pass.<br><br />
This flag doesn't make the object transparent on its own, and must also be coupled with transparent shader flags and a transparency map texture.<br />
<br />
=== Flags element -> no_collision attribute ===<br />
<br />
<pre><br />
<Flags no_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will not trigger collisions with players, items, or weapons.<br><br />
<br />
=== Flags element -> clamp_texture attribute ===<br />
<br />
<pre><br />
<Flags clamp_texture = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will render with its texture clamped at its edges, instead of repeating.<br><br />
<br />
=== Flags element -> bush_collision attribute ===<br />
<br />
<pre><br />
<Flags bush_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will trigger jiggle physics when items and characters collide with it. Physics objects will also be slowed down when interacting with it, but not completely blocked. It will also impact line of sight.<br />
<br />
=== Flags element -> terrain_fixed attribute ===<br />
<br />
<pre><br />
<Flags terrain_fixed = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be locked to the terrain when placed.<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> dynamic attribute ===<br />
<br />
<pre><br />
<Flags dynamic = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be considered to move by script, and the physics engine will use that information for optimization<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> double_sided attribute ===<br />
<br />
<pre><br />
<Flags double_sided = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will have its polygons rendered double-sided. This is useful for objects such as flags and cloth, that have no thickness.<br />
<br />
== Object XML -> GroundOffset element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<GroundOffset>0.5</GroundOffset><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
=== GroundOffset element -> element text ===<br />
<br />
<pre><br />
<GroundOffset>0.5</GroundOffset><br />
</pre><br />
<br />
'''Required''' - Decimal value. The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
== Object XML -> ColorTint element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should be tinted, by default. This can be overridden in the editor after the object is placed in the world.<br />
<br />
=== ColorTint element -> r attribute ===<br />
<br />
<pre><br />
<ColorTint r = "101" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> g attribute ===<br />
<br />
<pre><br />
<ColorTint ... g = "129" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> b attribute ===<br />
<br />
<pre><br />
<ColorTint ... b = "46" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
= Particle XML =<br />
<br />
'''TODO:'''<br />
<br />
= Path XML =<br />
<br />
'''TODO:'''<br />
<br />
= Reaction XML =<br />
<br />
'''TODO:'''<br />
<br />
= Retarget XML =<br />
<br />
'''TODO:'''<br />
<br />
= Rig XML =<br />
<br />
This is the XML file for a character skeleton. It binds a [[Xml File Formats#Character XML|Character XML]] file to an [[Character Scripting|AI angelscript]] file.<br><br />
When a level references a character, this is the file type that is referenced.<br />
<br />
== Rig XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<rig bone_path = "Data/Skeletons/r_wolf2.phxbn"<br />
model_path = "Data/Models/Characters/IGF_Wolf/IGF_Wolf.obj"<br />
mass_path = "Data/Skeletons/r_lt_dog.xml"/><br />
</pre><br />
<br />
== Rig element -> bone_path attribute ==<br />
<pre><br />
<rig bone_path = "Data/Skeletons/r_wolf2.phxbn"/><br />
</pre><br />
<br />
'''Required''' - String value. Path to the skeleton file, using the custom Phoenix Engine skeleton file type ([[Binary File Formats#PHXBN|PHXBN]]. This file MUST have been exported using the mesh specified in <code>model_path</code>.<br />
<br />
== Rig element -> model_path attribute ==<br />
<pre><br />
<rig model_path = "Data/Models/Characters/IGF_Wolf/IGF_Wolf.obj"/><br />
</pre><br />
<br />
'''Required''' - String value. Path to Obj model file to use as skinned the character mesh. This file MUST be the same as the one used when exporting the skeleton specified in <code>bone_path</code>.<br />
<br />
== Rig element -> mass_path attribute ==<br />
<pre><br />
<rig mass_path = "Data/Skeletons/r_lt_dog.xml"/><br />
</pre><br />
<br />
'''Optional''' - String value. Path to [[Xml File Formats#Rig XML|Rig XML]]. Used to override the current skeleton with the bone masses from a different skeleton.<br><br />
'''TODO''': Why you'd want to do this? Who knows! -merlyn<br />
<br />
= Shader Preload XML =<br />
<br />
'''TODO:'''<br />
<br />
= Sound Group XML =<br />
<br />
This is the XML file that describes a group of sounds. One of those sounds will be randomly chosen and played whenever the sound group is triggered.<br><br />
<br />
The file will specify a count of the number of <code>variants</code> that exist, and a sound file will need to exist for each of those variants.<br><br />
For a Sound Group XML with three variants, the XML file and and corresponding sound variants should follow a naming scheme like this:<br />
* <code>Data/Sounds/example_subdir/example_sound_group.xml</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_1.wav</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_2.wav</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_3.wav</code><br><br />
<br />
== Sound Group XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<soundgroup<br />
variants = "3"<br />
delay = "5.3"<br />
volume = "0.1"<br />
max_distance = "77.5"<br />
/><br />
</pre><br />
<br />
== Sound Group element -> variants attribute ==<br />
<pre><br />
<soundgroup variants = "3" /><br />
</pre><br />
<br />
'''Optional''' - Integer value. '''Default''': 1.<br><br />
The count of variants. There must also be a corresponding <code>SoundGroupXmlName_1.wav</code> file for every variant, numbered incrementally up to the variant count.<br><br />
E.g. if there was 3 variants, there would need to be files named <code>SoundGroupXmlName_1.wav</code>, <code>SoundGroupXmlName_2.wav</code>, and <code>SoundGroupXmlName_3.wav</code>.<br />
<br />
== Sound Group element -> delay attribute ==<br />
<pre><br />
<soundgroup delay = "5.3" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0.<br><br />
A delay to add to the start of sound playback, in seconds.<br />
<br />
== Sound Group element -> volume attribute ==<br />
<pre><br />
<soundgroup volume = "0.1" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0.<br><br />
The volume to play back the sound.<br><br />
This is further multiplied by the gain specified when triggering the sound group in gameplay code.<br />
<br />
== Sound Group element -> max_distance attribute ==<br />
<pre><br />
<soundgroup max_distance = "77.5" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 30.0.<br><br />
The maximum distance that the sound can be heard by the player.<br><br />
It will be overridden by the <code>max_distance</code> in the collision sound event, in the [[Xml File Formats#Material XML -> Events element -> Event element|Material XML]], if specified for the given collision sound event.<br />
<br />
= Synced Animation Group XML =<br />
<br />
'''TODO:'''<br />
<br />
= Version Manifest XML =<br />
<br />
'''TODO:'''<br />
<br />
= Voice XML =<br />
<br />
'''TODO:'''</div>Merlynhttp://wiki.wolfire.com/index.php?title=Xml_File_Formats&diff=6238Xml File Formats2023-09-10T10:55:38Z<p>Merlyn: /* Object XML -> avg_color element */</p>
<hr />
<div>= TODO: =<br />
<br />
Level, Saved Object, Prefab - These have more confusing schemas, to the point where I'm not entirely sure they're distinct types from one another, and I haven't nailed them down yet -merlyn<br />
<br />
= Actor XML =<br />
<br />
This is the top-level XML file for an NPC or combat character. It binds a [[Xml File Formats#Character XML|Character XML]] file to an [[Character Scripting|AI angelscript]] file.<br><br />
When a level references a character, this is the file type that is referenced.<br />
<br />
== Actor XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<Actor><br />
<Character>Data/Characters/rabbot.xml</Character><br />
<ControlScript>enemycontrol.as</ControlScript><br />
</Actor><br />
</pre><br />
<br />
== Actor XML -> Character element ==<br />
<pre><br />
<Actor><br />
<Character>Data/Characters/rabbot.xml</Character><br />
...<br />
</Actor><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Xml File Formats#Character XML|Character XML]]<br />
<br />
== Actor XML -> ControlScript element ==<br />
<pre><br />
<Actor><br />
...<br />
<ControlScript>enemycontrol.as</ControlScript><br />
</Actor><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Character Scripting|AI angelscript]]. Relative to <code>Data/Scripts</code> folder<br />
<br />
= Asset Preload XML =<br />
<br />
'''TODO:'''<br />
<br />
= Attachment XML =<br />
<br />
'''TODO:'''<br />
<br />
= Attack XML =<br />
<br />
'''TODO:'''<br />
<br />
= Character XML =<br />
<br />
'''TODO:'''<br />
<br />
= Decal XML =<br />
<br />
'''TODO:'''<br />
<br />
= Events XML =<br />
<br />
'''TODO:'''<br />
<br />
= Hotspot XML =<br />
<br />
This is the top-level XML file for a hotspot game object. It specifies the billboard image, and the [[Hotspot Scripting|Hotspot angelscript]] file.<br><br />
When a level references a hotspot, this is the file type that is referenced.<br />
<br />
== Hotspot XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<Type>generic</Type><br />
<Hotspot><br />
<BillboardColorMap>Data/UI/spawner/thumbs/Hotspot/empty.png</BillboardColorMap><br />
<Script>hotspots/sound_hotspot.as</Script><br />
</Hotspot><br />
</pre><br />
<br />
== Hotspot XML -> Type element ==<br />
<pre><br />
<Type>generic</Type><br />
<Hotspot><br />
...<br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. This should always have the value <code><Type>generic</Type></code>.<br><br />
Note: Having two document elements is not valid XML, and I'm not sure what purpose this element serves. But leave it in, since all the hotspots do it. -merlyn<br />
<br />
== Hotspot XML -> Character element ==<br />
<pre><br />
<Hotspot><br />
<BillboardColorMap>Data/UI/spawner/thumbs/Hotspot/empty.png</BillboardColorMap><br />
...<br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. Path to image file. If you don't want a billboard image, you can use <code>Data/UI/spawner/thumbs/Hotspot/empty.png</code>.<br />
<br />
== Hotspot XML -> Script element ==<br />
<pre><br />
<Hotspot><br />
...<br />
<Script>hotspots/sound_hotspot.as</Script><br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Hotspot Scripting|Hotspot angelscript]]. Relative to <code>Data/Scripts</code> folder.<br />
<br />
= Item XML =<br />
<br />
'''TODO:'''<br />
<br />
= Layered Song XML =<br />
<br />
'''TODO:'''<br />
<br />
= Level Meta XML =<br />
<br />
'''TODO:'''<br />
<br />
= Material XML =<br />
<br />
This XML file specifies the sounds that will be played when a character or item interacts with a world object. It is used to model the sound differences between wood, metal, soil, ice, etc.<br><br />
<br />
<code>Data/Materials/default.xml</code> is the global "default" material, if the material isn't specified by the world object.<br><br />
<br />
When the engine or a gameplay script detects a physics event, the code will do a lookup against the current material, for an event with that event name. If the event name is found, then the corresponding sound will be triggered.<br><br />
<br />
Some of these events and materials might specify modifiers (<code>soft</code>, <code>heavy</code>, etc). If they do, the code will first do the lookup against the <code><events mod="themod"></code> version of the event.<br><br />
If an event with the given name is not found with that modifier, the code will then lookup a version of the same event name, but with no modifiers specified.<br><br />
<br />
Some of the values, if not specified, will look at a global "base" material to find the value of the parameter. <code>max_distance</code> is the only one of those parameters right now.<br />
<br />
<code>Data/Materials/base.xml</code> is the global "base" material.<br><br />
<br />
== Material XML Example ==<br />
From <code>Data/Materials/dirt.xml</code> - this is not the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_light_dirt.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_medium_dirt.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_heavy_dirt.xml" attached="true"/><br />
<-- Note: more sound events in the real file than just these --><br />
</events> <br />
<events mod="soft"><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
</events><br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"<br />
shader="stepdecalfast"/><br />
<skid color="Data/Textures/Decals/Footprints/rabbitdirtsmear_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtsmear_n.tga"<br />
shader="stepdecalfast"/><br />
</decals><br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
<skid path="Data/Particles/heavydirt.xml"/><br />
</particles><br />
<physics hardness = "0.8" friction = "1.0" sharp_penetration = "1.0" /><br />
</material><br />
</pre><br />
<br />
From <code>Data/Materials/default.xml</code>, which is the default Material XML file. It is used when other XML file types call for a Material XML, but one is not specified.<br><br />
This is the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
<rightrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
<leftwallstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_wallrun.xml" attached="true"/><br />
<rightwallstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_wallrun.xml" attached="true"/><br />
<leftwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_walk.xml" attached="true"/><br />
<rightwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_walk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<land soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land.xml" attached="true"/><br />
<land_soft soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land_soft.xml" attached="true"/><br />
<land_slide soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land_slide.xml" attached="true"/><br />
<slide soundgroup="Data/Sounds/concrete_foley/slide_concrete_short.xml" attached="true"/><br />
<kick soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_kick.xml" attached="true"/><br />
<sweep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_sweep.xml" attached="true"/><br />
<jump soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump.xml" attached="true"/><br />
<roll soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_roll.xml" attached="true"/><br />
<edge_grab soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_edge_grab.xml" attached="true"/><br />
<edge_crawl soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_edgecrawl.xml" attached="true"/><br />
<bodyfall soundgroup="Data/Sounds/concrete_foley/bf_concrete.xml" attached="true"/><br />
<bodyfall_light soundgroup="Data/Sounds/concrete_foley/bf_concrete_light.xml" attached="true"/><br />
<bodyfall_medium soundgroup="Data/Sounds/concrete_foley/bf_concrete_medium.xml" attached="true"/><br />
<bodyfall_heavy soundgroup="Data/Sounds/concrete_foley/bf_concrete_heavy.xml" attached="true"/><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_light_stone.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_medium_stone.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_heavy_stone.xml" attached="true"/><br />
<blood_spatter soundgroup="Data/Sounds/blood/spatter_hard.xml"/><br />
<blood_drip soundgroup="Data/Sounds/blood/drip_lowpass.xml"/><br />
</events><br />
<events mod="heavy"><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_run.xml" attached="true"/><br />
<rightrunstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_run.xml" attached="true"/><br />
<leftwallstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_wallrun.xml" attached="true"/><br />
<rightwallstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_wallrun.xml" attached="true"/><br />
<leftwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_walk.xml" attached="true"/><br />
<rightwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_walk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<land soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<land_soft soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<land_slide soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<kick soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_kick.xml" attached="true"/><br />
<sweep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_sweep.xml" attached="true"/><br />
<jump soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump.xml" attached="true"/><br />
<roll soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_roll.xml" attached="true"/><br />
<edge_grab soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_edge_grab.xml" attached="true"/><br />
</events><br />
<events mod="soft"><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
</events><br />
<physics hardness = "1.0" friction = "1.0" sharp_penetration = "0.0" /><br />
</material><br />
</pre><br />
<br />
From <code>Data/Materials/base.xml</code>, which specifies the default '''max_distance''' values for all materials.<br><br />
This is the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<leftrunstep max_distance = "40.0"/><br />
<rightrunstep max_distance = "40.0"/><br />
<leftwallstep max_distance = "40.0"/><br />
<rightwallstep max_distance = "40.0"/><br />
<leftwalkstep max_distance = "25.0"/><br />
<rightwalkstep max_distance = "25.0"/><br />
<leftcrouchwalkstep max_distance = "10.0"/><br />
<rightcrouchwalkstep max_distance = "10.0"/><br />
<land max_distance = "60.0"/><br />
<land_soft max_distance = "30.0"/><br />
<land_slide max_distance = "20.0"/><br />
<slide max_distance = "30.0"/><br />
<kick max_distance = "25.0"/><br />
<sweep max_distance = "25.0"/><br />
<jump max_distance = "40.0"/><br />
<roll max_distance = "15.0"/><br />
<edge_grab max_distance = "25.0"/><br />
<edge_crawl max_distance = "15.0"/><br />
<bodyfall max_distance = "80.0"/><br />
<bodyfall_light max_distance = "40.0"/><br />
<bodyfall_medium max_distance = "60.0"/><br />
<bodyfall_heavy max_distance = "80.0"/><br />
<weapon_drop_light max_distance = "80.0"/><br />
<weapon_drop_medium max_distance = "80.0"/><br />
<weapon_drop_heavy max_distance = "80.0"/><br />
<blood_spatter max_distance = "30.0"/><br />
<blood_drip max_distance = "20.0"/><br />
<flip max_distance = "20.0"/><br />
<choke_grab max_distance = "10.0"/>;<br />
<choke_move max_distance = "10.0"/>;<br />
<choke_fall max_distance = "10.0"/>;<br />
</events><br />
<events mod="heavy"><br />
<leftrunstep max_distance = "50.0"/><br />
<rightrunstep max_distance = "50.0"/><br />
<leftwallstep max_distance = "50.0"/><br />
<rightwallstep max_distance = "50.0"/><br />
<leftwalkstep max_distance = "30.0"/><br />
<rightwalkstep max_distance = "30.0"/><br />
<leftcrouchwalkstep max_distance = "20.0"/><br />
<rightcrouchwalkstep max_distance = "20.0"/><br />
<land max_distance = "80.0"/><br />
<land_soft max_distance = "40.0"/><br />
<land_slide max_distance = "40.0"/><br />
<kick max_distance = "30.0"/><br />
<sweep max_distance = "30.0"/><br />
<jump max_distance = "50.0"/><br />
<roll max_distance = "25.0"/><br />
<edge_grab max_distance = "40.0"/><br />
</events><br />
</material><br />
</pre><br />
<br />
== Material XML -> Events element ==<br />
<pre><br />
<material><br />
<events><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision sound events for the material.<br />
<br />
=== Events element -> mod attribute ===<br />
<br />
<pre><br />
<material><br />
<events mod="soft"><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
'''Optional''' - String value. Specifies that this list of collision sound events only apply when the given modifier is specified.<br><br />
The modifiers are different ways the sounds will be presented, such as <code>soft</code>, <code>heavy</code>, etc.<br />
<br />
== Material XML -> Events element -> Sound element ==<br />
<pre><br />
<material><br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true" max_distance = "40.0"/><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
The sound (and physical properties of the sound) for a given collision sound event. The name of the element corresponds to the name of the collision sound event (in this example, '''leftrunstep''').<br />
<br />
=== Sound element -> soundgroup attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - String value. Specifies the [[Xml File Formats#Sound Group XML|Sound Group XML]] for the material interaction event.<br><br />
'''TODO:''': Is this really optional? If so, what is the default behavior?<br />
<br />
=== Sound element -> attached attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep attached="true"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - Boolean value. '''Default''': false<br><br />
If true, the sound (group) will be played as a sound that is attached to the character that triggered the collision sound event.<br />
<br />
=== Sound element -> max_distance attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep max_distance = "40.0"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0<br><br />
The max distance that the sound will still be audible to the player.<br><br />
If the value is 0.0, then the max distance will be considered infinite.<br><br />
If it is not specified for a given sound collision event, then the corresponding value in <code>Data/Materials/base.xml</code> will be used instead.<br />
<br />
== Material XML -> Decals element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision decal events for the material.<br />
<br />
== Material XML -> Decals element -> Decal element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"<br />
shader="stepdecalfast"/><br />
<skid color="Data/Textures/Decals/Footprints/rabbitdirtsmear_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtsmear_n.tga"<br />
shader="stepdecalfast"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
The decal (and rendering properties of the decal) for a given collision decal event. The name of the element corresponds to the name of the collision decal event (in these examples, '''step''' and '''skid''').<br />
<br />
=== Decal element -> color attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the decal's color texture.<br />
<br />
=== Decal element -> normal attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the decal's normal texture.<br />
<br />
=== Decal element -> shader attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step shader="stepdecalfast"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the shader name that will be used when rendering the decal.<br />
<br />
== Material XML -> Particles element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
...<br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision particle events for the material. <br />
<br />
== Material XML -> Particles element -> Particle element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
<skid path="Data/Particles/heavydirt.xml"/><br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
The particle for a given collision particle event. The name of the element corresponds to the name of the collision particle event (in these examples, '''step''' and '''skid'''). <br />
<br />
=== Particle element -> path attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
...<br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Xml File Formats#Particle XML|Particle XML]]<br />
<br />
== Material XML -> Physics element ==<br />
<br />
<pre><br />
<material><br />
<physics hardness = "0.8" friction = "1.0" sharp_penetration = "1.0" /><br />
</material><br />
</pre><br />
<br />
The physics properties of the the material. Collision gameplay events will use these properties to determine how to make other objects respond when they collide with the object this material is applied to.<br />
<br />
=== Physics element -> hardness attribute ===<br />
<br />
<pre><br />
<material><br />
<physics hardness = "0.8"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0<br><br />
'''TODO: Describe'''<br />
<br />
=== Physics element -> friction attribute ===<br />
<br />
<pre><br />
<material><br />
<physics friction = "1.0"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0<br><br />
The friction between any other object and the object this material is applied to.<br><br />
In real life this would depend on the materials for both objects, but the game makes simplifying assumptions to make the mapping a bit less complicated.<br />
<br />
=== Physics element -> sharp_penetration attribute ===<br />
<br />
<pre><br />
<material><br />
<physics sharp_penetration = "1.0"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0<br><br />
'''TODO: Describe'''<br />
<br />
= Mod XML =<br />
<br />
'''TODO:'''<br />
<br />
= Music XML =<br />
<br />
'''TODO:'''<br />
<br />
= Nav Mesh Meta XML =<br />
<br />
'''TODO:'''<br />
<br />
= Object XML =<br />
<br />
This is the top-level XML file for a level object. It specifies visual parameters, some gameplay parameters, and paths for visual assets.<br><br />
Other XML file types reference this XML file type, such as [[Xml File Formats#Character XML|Character XML files]] and [[Xml File Formats#Item XML|Item XML files]].<br />
<br />
== Object XML Example ==<br />
<br />
<pre><br />
<?xml version="1.0" ?><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
<Label>impale</Label><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gray_metal_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gray_metal_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/cat_cobbles_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/cat_cobbles_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gold_hexagons_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gold_hexagons_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
</DetailMaps><br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="2" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="20" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/Objects/Environment/Rocks/lichen_rock_a.xml" weight_path="Data/Textures/Terrain/forest_hills/forest_hills_not_grass.tga"<br />
normal_conform="1" density="20" min_embed="0.3" max_embed="0.7" min_scale="0.08" max_scale="0.12"<br />
view_distance="10" jitter_degrees="45" overbright="0.4" tint_weight="0.5" collision_type="static" /><br />
</DetailObjects><br />
<ShaderName>detailmap4</ShaderName><br />
<avg_color r = "100" g = "128" b = "47" /><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
<GroundOffset>0.5</GroundOffset><br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
== Object XML -> Model element ==<br />
<br />
<pre><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the obj format model file.<br />
<br />
=== Model element -> element text ===<br />
<br />
<pre><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
</pre><br />
<br />
'''Required''' - String value. Path to the obj format model file.<br />
<br />
== Object XML -> ColorMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the color map texture for the object.<br />
<br />
=== ColorMap element -> element text ===<br />
<br />
<pre><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color map texture for the object.<br />
<br />
== Object XML -> NormalMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the normal map texture for the object.<br />
<br />
=== NormalMap element -> element text ===<br />
<br />
<pre><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the normal map texture for the object.<br />
<br />
== Object XML -> TranslucencyMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the translucency map texture for the object.<br />
<br />
=== TranslucencyMap element -> element text ===<br />
<br />
<pre><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the translucency map texture for the object.<br />
<br />
== Object XML -> WindMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the wind map texture for the object.<br />
<br />
=== WindMap element -> element text ===<br />
<br />
<pre><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the wind map texture for the object.<br />
<br />
== Object XML -> SharpnessMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br><br />
'''TODO''': links to/from other file types for this field?<br />
<br />
=== SharpnessMap element -> element text ===<br />
<br />
<pre><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br />
<br />
== Object XML -> Label element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Label>impale</Label><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - This is referenced by gameplay scripts to figure out if this object is one of a more generalized type.<br />
<br />
=== Label element -> element text ===<br />
<br />
<pre><br />
<Label>impale</Label><br />
</pre><br />
<br />
'''Required''' - String value. This is referenced by gameplay scripts to figure out if this object is one of a more generalized type.<br />
<br />
== Object XML -> WeightMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the weight map texture for the object.<br />
<br />
=== WeightMap element -> element text ===<br />
<br />
<pre><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the weight map texture for the object.<br />
<br />
== Object XML -> PaletteMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies a set of different tintable areas on this object. The labels are the text displayed in the editor interface. Each color channel of the specified image will be used as a mask to specify where on the object's model the tinting should be limited to.<br />
<br />
=== PaletteMap element -> element text ===<br />
<br />
<pre><br />
<PaletteMap ...><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color masks, used when there's tint parameters that limit the tint to a specific area on the object, such as character clothing colors, a tintable area on a weapon, etc.<br />
<br />
=== PaletteMap element -> label_red attribute ===<br />
<br />
<pre><br />
<PaletteMap label_red="Clothing Color 1"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the red channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_green attribute ===<br />
<br />
<pre><br />
<PaletteMap label_green="Clothing Color 2"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the green channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_blue attribute ===<br />
<br />
<pre><br />
<PaletteMap label_blue="Clothing Color 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the blue channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_alpha attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 4"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the alpha channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_other attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 5"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the "other" channel of the tint mask image.<br><br />
'''TODO''': What the heck even is a "other" channel on an image? Does this even do anything in code, besides get parsed? -merlyn<br />
<br />
== Object XML -> DetailMaps element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
...<br />
</DetailMaps><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary material layers that provide fine, repeated visual detail on top of the object's main texture layers.<br />
<br />
== Object XML -> DetailMaps element -> DetailMap element ==<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
</pre><br />
<br />
'''Optional''' - The parameters for the detail map textures that repeat across the model, providing finer-scale detail. There can be up to four of these.<br />
<br />
=== DetailMap element -> colorpath attribute ===<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for this detail map's color map texture.<br />
<br />
=== DetailMap element -> normalpath attribute ===<br />
<br />
<pre><br />
<DetailMap normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the detail map's normal map texture.<br />
<br />
=== DetailMap element -> materialpath attribute ===<br />
<br />
<pre><br />
<DetailMap materialpath="Data/Materials/wood.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the given detail map level.<br><br />
'''TODO''': What is this used for? Aren't detail maps a visual-only thing? -merlyn<br />
<br />
== Object XML -> DetailObjects element ==<br />
<br />
== Object XML -> DetailObjects element -> DetailObject element ==<br />
<br />
=== DetailObject element -> obj_path attribute ===<br />
=== DetailObject element -> weight_path attribute ===<br />
=== DetailObject element -> normal_conform attribute ===<br />
=== DetailObject element -> density attribute ===<br />
=== DetailObject element -> min_embed attribute ===<br />
=== DetailObject element -> max_embed attribute ===<br />
=== DetailObject element -> min_scale attribute ===<br />
=== DetailObject element -> max_scale attribute ===<br />
=== DetailObject element -> view_distance attribute ===<br />
=== DetailObject element -> jitter_degrees attribute ===<br />
=== DetailObject element -> overbright attribute ===<br />
=== DetailObject element -> tint_weight attribute ===<br />
=== DetailObject element -> collision_type attribute ===<br />
<br />
== Object XML -> ShaderName element ==<br />
<br />
=== ShaderName element -> element text ===<br />
<br />
== Object XML -> avg_color element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<avg_color r = "100" g = "128" b = "47" /><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should use for rendering acceleration, e.g. if a texture hasn't loaded in, or for simplified lighting.<br><br />
'''TODO''': Is this even remotely correct? Kinda just guessing, without looking at the code. -merlyn<br />
<br />
=== avg_color element -> r attribute ===<br />
<br />
<pre><br />
<avg_color r = "100" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> g attribute ===<br />
<br />
<pre><br />
<avg_color ... g = "128" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== avg_color element -> b attribute ===<br />
<br />
<pre><br />
<avg_color ... b = "47" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the average color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
== Object XML -> MaterialPath element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
=== MaterialPath element -> element text ===<br />
<br />
<pre><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
== Object XML -> Flags element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of flags that will be applied to this object, if set to true. Some of these flags affect rendering (e.g. <code>double_sided</code>), some affect physics (e.g. <code>no_collision</code>), and others affect gameplay interactions with this object (e.g. <code>bush_collision</code>).<br />
<br />
=== Flags element -> transparent attribute ===<br />
<br />
<pre><br />
<Flags transparent = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be rendered in the transparent rendering pass.<br><br />
This flag doesn't make the object transparent on its own, and must also be coupled with transparent shader flags and a transparency map texture.<br />
<br />
=== Flags element -> no_collision attribute ===<br />
<br />
<pre><br />
<Flags no_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will not trigger collisions with players, items, or weapons.<br><br />
<br />
=== Flags element -> clamp_texture attribute ===<br />
<br />
<pre><br />
<Flags clamp_texture = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will render with its texture clamped at its edges, instead of repeating.<br><br />
<br />
=== Flags element -> bush_collision attribute ===<br />
<br />
<pre><br />
<Flags bush_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will trigger jiggle physics when items and characters collide with it. Physics objects will also be slowed down when interacting with it, but not completely blocked. It will also impact line of sight.<br />
<br />
=== Flags element -> terrain_fixed attribute ===<br />
<br />
<pre><br />
<Flags terrain_fixed = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be locked to the terrain when placed.<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> dynamic attribute ===<br />
<br />
<pre><br />
<Flags dynamic = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be considered to move by script, and the physics engine will use that information for optimization<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> double_sided attribute ===<br />
<br />
<pre><br />
<Flags double_sided = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will have its polygons rendered double-sided. This is useful for objects such as flags and cloth, that have no thickness.<br />
<br />
== Object XML -> GroundOffset element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<GroundOffset>0.5</GroundOffset><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
=== GroundOffset element -> element text ===<br />
<br />
<pre><br />
<GroundOffset>0.5</GroundOffset><br />
</pre><br />
<br />
'''Required''' - Decimal value. The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
== Object XML -> ColorTint element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should be tinted, by default. This can be overridden in the editor after the object is placed in the world.<br />
<br />
=== ColorTint element -> r attribute ===<br />
<br />
<pre><br />
<ColorTint r = "101" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> g attribute ===<br />
<br />
<pre><br />
<ColorTint ... g = "129" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> b attribute ===<br />
<br />
<pre><br />
<ColorTint ... b = "46" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
= Particle XML =<br />
<br />
'''TODO:'''<br />
<br />
= Path XML =<br />
<br />
'''TODO:'''<br />
<br />
= Reaction XML =<br />
<br />
'''TODO:'''<br />
<br />
= Retarget XML =<br />
<br />
'''TODO:'''<br />
<br />
= Rig XML =<br />
<br />
This is the XML file for a character skeleton. It binds a [[Xml File Formats#Character XML|Character XML]] file to an [[Character Scripting|AI angelscript]] file.<br><br />
When a level references a character, this is the file type that is referenced.<br />
<br />
== Rig XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<rig bone_path = "Data/Skeletons/r_wolf2.phxbn"<br />
model_path = "Data/Models/Characters/IGF_Wolf/IGF_Wolf.obj"<br />
mass_path = "Data/Skeletons/r_lt_dog.xml"/><br />
</pre><br />
<br />
== Rig element -> bone_path attribute ==<br />
<pre><br />
<rig bone_path = "Data/Skeletons/r_wolf2.phxbn"/><br />
</pre><br />
<br />
'''Required''' - String value. Path to the skeleton file, using the custom Phoenix Engine skeleton file type ([[Binary File Formats#PHXBN|PHXBN]]. This file MUST have been exported using the mesh specified in <code>model_path</code>.<br />
<br />
== Rig element -> model_path attribute ==<br />
<pre><br />
<rig model_path = "Data/Models/Characters/IGF_Wolf/IGF_Wolf.obj"/><br />
</pre><br />
<br />
'''Required''' - String value. Path to Obj model file to use as skinned the character mesh. This file MUST be the same as the one used when exporting the skeleton specified in <code>bone_path</code>.<br />
<br />
== Rig element -> mass_path attribute ==<br />
<pre><br />
<rig mass_path = "Data/Skeletons/r_lt_dog.xml"/><br />
</pre><br />
<br />
'''Optional''' - String value. Path to [[Xml File Formats#Rig XML|Rig XML]]. Used to override the current skeleton with the bone masses from a different skeleton.<br><br />
'''TODO''': Why you'd want to do this? Who knows! -merlyn<br />
<br />
= Shader Preload XML =<br />
<br />
'''TODO:'''<br />
<br />
= Sound Group XML =<br />
<br />
This is the XML file that describes a group of sounds. One of those sounds will be randomly chosen and played whenever the sound group is triggered.<br><br />
<br />
The file will specify a count of the number of <code>variants</code> that exist, and a sound file will need to exist for each of those variants.<br><br />
For a Sound Group XML with three variants, the XML file and and corresponding sound variants should follow a naming scheme like this:<br />
* <code>Data/Sounds/example_subdir/example_sound_group.xml</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_1.wav</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_2.wav</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_3.wav</code><br><br />
<br />
== Sound Group XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<soundgroup<br />
variants = "3"<br />
delay = "5.3"<br />
volume = "0.1"<br />
max_distance = "77.5"<br />
/><br />
</pre><br />
<br />
== Sound Group element -> variants attribute ==<br />
<pre><br />
<soundgroup variants = "3" /><br />
</pre><br />
<br />
'''Optional''' - Integer value. '''Default''': 1.<br><br />
The count of variants. There must also be a corresponding <code>SoundGroupXmlName_1.wav</code> file for every variant, numbered incrementally up to the variant count.<br><br />
E.g. if there was 3 variants, there would need to be files named <code>SoundGroupXmlName_1.wav</code>, <code>SoundGroupXmlName_2.wav</code>, and <code>SoundGroupXmlName_3.wav</code>.<br />
<br />
== Sound Group element -> delay attribute ==<br />
<pre><br />
<soundgroup delay = "5.3" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0.<br><br />
A delay to add to the start of sound playback, in seconds.<br />
<br />
== Sound Group element -> volume attribute ==<br />
<pre><br />
<soundgroup volume = "0.1" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0.<br><br />
The volume to play back the sound.<br><br />
This is further multiplied by the gain specified when triggering the sound group in gameplay code.<br />
<br />
== Sound Group element -> max_distance attribute ==<br />
<pre><br />
<soundgroup max_distance = "77.5" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 30.0.<br><br />
The maximum distance that the sound can be heard by the player.<br><br />
It will be overridden by the <code>max_distance</code> in the collision sound event, in the [[Xml File Formats#Material XML -> Events element -> Event element|Material XML]], if specified for the given collision sound event.<br />
<br />
= Synced Animation Group XML =<br />
<br />
'''TODO:'''<br />
<br />
= Version Manifest XML =<br />
<br />
'''TODO:'''<br />
<br />
= Voice XML =<br />
<br />
'''TODO:'''</div>Merlynhttp://wiki.wolfire.com/index.php?title=Xml_File_Formats&diff=6237Xml File Formats2023-09-10T10:52:25Z<p>Merlyn: /* Object XML -> MaterialPath element */</p>
<hr />
<div>= TODO: =<br />
<br />
Level, Saved Object, Prefab - These have more confusing schemas, to the point where I'm not entirely sure they're distinct types from one another, and I haven't nailed them down yet -merlyn<br />
<br />
= Actor XML =<br />
<br />
This is the top-level XML file for an NPC or combat character. It binds a [[Xml File Formats#Character XML|Character XML]] file to an [[Character Scripting|AI angelscript]] file.<br><br />
When a level references a character, this is the file type that is referenced.<br />
<br />
== Actor XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<Actor><br />
<Character>Data/Characters/rabbot.xml</Character><br />
<ControlScript>enemycontrol.as</ControlScript><br />
</Actor><br />
</pre><br />
<br />
== Actor XML -> Character element ==<br />
<pre><br />
<Actor><br />
<Character>Data/Characters/rabbot.xml</Character><br />
...<br />
</Actor><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Xml File Formats#Character XML|Character XML]]<br />
<br />
== Actor XML -> ControlScript element ==<br />
<pre><br />
<Actor><br />
...<br />
<ControlScript>enemycontrol.as</ControlScript><br />
</Actor><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Character Scripting|AI angelscript]]. Relative to <code>Data/Scripts</code> folder<br />
<br />
= Asset Preload XML =<br />
<br />
'''TODO:'''<br />
<br />
= Attachment XML =<br />
<br />
'''TODO:'''<br />
<br />
= Attack XML =<br />
<br />
'''TODO:'''<br />
<br />
= Character XML =<br />
<br />
'''TODO:'''<br />
<br />
= Decal XML =<br />
<br />
'''TODO:'''<br />
<br />
= Events XML =<br />
<br />
'''TODO:'''<br />
<br />
= Hotspot XML =<br />
<br />
This is the top-level XML file for a hotspot game object. It specifies the billboard image, and the [[Hotspot Scripting|Hotspot angelscript]] file.<br><br />
When a level references a hotspot, this is the file type that is referenced.<br />
<br />
== Hotspot XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<Type>generic</Type><br />
<Hotspot><br />
<BillboardColorMap>Data/UI/spawner/thumbs/Hotspot/empty.png</BillboardColorMap><br />
<Script>hotspots/sound_hotspot.as</Script><br />
</Hotspot><br />
</pre><br />
<br />
== Hotspot XML -> Type element ==<br />
<pre><br />
<Type>generic</Type><br />
<Hotspot><br />
...<br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. This should always have the value <code><Type>generic</Type></code>.<br><br />
Note: Having two document elements is not valid XML, and I'm not sure what purpose this element serves. But leave it in, since all the hotspots do it. -merlyn<br />
<br />
== Hotspot XML -> Character element ==<br />
<pre><br />
<Hotspot><br />
<BillboardColorMap>Data/UI/spawner/thumbs/Hotspot/empty.png</BillboardColorMap><br />
...<br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. Path to image file. If you don't want a billboard image, you can use <code>Data/UI/spawner/thumbs/Hotspot/empty.png</code>.<br />
<br />
== Hotspot XML -> Script element ==<br />
<pre><br />
<Hotspot><br />
...<br />
<Script>hotspots/sound_hotspot.as</Script><br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Hotspot Scripting|Hotspot angelscript]]. Relative to <code>Data/Scripts</code> folder.<br />
<br />
= Item XML =<br />
<br />
'''TODO:'''<br />
<br />
= Layered Song XML =<br />
<br />
'''TODO:'''<br />
<br />
= Level Meta XML =<br />
<br />
'''TODO:'''<br />
<br />
= Material XML =<br />
<br />
This XML file specifies the sounds that will be played when a character or item interacts with a world object. It is used to model the sound differences between wood, metal, soil, ice, etc.<br><br />
<br />
<code>Data/Materials/default.xml</code> is the global "default" material, if the material isn't specified by the world object.<br><br />
<br />
When the engine or a gameplay script detects a physics event, the code will do a lookup against the current material, for an event with that event name. If the event name is found, then the corresponding sound will be triggered.<br><br />
<br />
Some of these events and materials might specify modifiers (<code>soft</code>, <code>heavy</code>, etc). If they do, the code will first do the lookup against the <code><events mod="themod"></code> version of the event.<br><br />
If an event with the given name is not found with that modifier, the code will then lookup a version of the same event name, but with no modifiers specified.<br><br />
<br />
Some of the values, if not specified, will look at a global "base" material to find the value of the parameter. <code>max_distance</code> is the only one of those parameters right now.<br />
<br />
<code>Data/Materials/base.xml</code> is the global "base" material.<br><br />
<br />
== Material XML Example ==<br />
From <code>Data/Materials/dirt.xml</code> - this is not the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_light_dirt.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_medium_dirt.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_heavy_dirt.xml" attached="true"/><br />
<-- Note: more sound events in the real file than just these --><br />
</events> <br />
<events mod="soft"><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
</events><br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"<br />
shader="stepdecalfast"/><br />
<skid color="Data/Textures/Decals/Footprints/rabbitdirtsmear_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtsmear_n.tga"<br />
shader="stepdecalfast"/><br />
</decals><br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
<skid path="Data/Particles/heavydirt.xml"/><br />
</particles><br />
<physics hardness = "0.8" friction = "1.0" sharp_penetration = "1.0" /><br />
</material><br />
</pre><br />
<br />
From <code>Data/Materials/default.xml</code>, which is the default Material XML file. It is used when other XML file types call for a Material XML, but one is not specified.<br><br />
This is the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
<rightrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
<leftwallstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_wallrun.xml" attached="true"/><br />
<rightwallstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_wallrun.xml" attached="true"/><br />
<leftwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_walk.xml" attached="true"/><br />
<rightwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_walk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<land soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land.xml" attached="true"/><br />
<land_soft soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land_soft.xml" attached="true"/><br />
<land_slide soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land_slide.xml" attached="true"/><br />
<slide soundgroup="Data/Sounds/concrete_foley/slide_concrete_short.xml" attached="true"/><br />
<kick soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_kick.xml" attached="true"/><br />
<sweep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_sweep.xml" attached="true"/><br />
<jump soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump.xml" attached="true"/><br />
<roll soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_roll.xml" attached="true"/><br />
<edge_grab soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_edge_grab.xml" attached="true"/><br />
<edge_crawl soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_edgecrawl.xml" attached="true"/><br />
<bodyfall soundgroup="Data/Sounds/concrete_foley/bf_concrete.xml" attached="true"/><br />
<bodyfall_light soundgroup="Data/Sounds/concrete_foley/bf_concrete_light.xml" attached="true"/><br />
<bodyfall_medium soundgroup="Data/Sounds/concrete_foley/bf_concrete_medium.xml" attached="true"/><br />
<bodyfall_heavy soundgroup="Data/Sounds/concrete_foley/bf_concrete_heavy.xml" attached="true"/><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_light_stone.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_medium_stone.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_heavy_stone.xml" attached="true"/><br />
<blood_spatter soundgroup="Data/Sounds/blood/spatter_hard.xml"/><br />
<blood_drip soundgroup="Data/Sounds/blood/drip_lowpass.xml"/><br />
</events><br />
<events mod="heavy"><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_run.xml" attached="true"/><br />
<rightrunstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_run.xml" attached="true"/><br />
<leftwallstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_wallrun.xml" attached="true"/><br />
<rightwallstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_wallrun.xml" attached="true"/><br />
<leftwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_walk.xml" attached="true"/><br />
<rightwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_walk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<land soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<land_soft soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<land_slide soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<kick soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_kick.xml" attached="true"/><br />
<sweep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_sweep.xml" attached="true"/><br />
<jump soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump.xml" attached="true"/><br />
<roll soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_roll.xml" attached="true"/><br />
<edge_grab soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_edge_grab.xml" attached="true"/><br />
</events><br />
<events mod="soft"><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
</events><br />
<physics hardness = "1.0" friction = "1.0" sharp_penetration = "0.0" /><br />
</material><br />
</pre><br />
<br />
From <code>Data/Materials/base.xml</code>, which specifies the default '''max_distance''' values for all materials.<br><br />
This is the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<leftrunstep max_distance = "40.0"/><br />
<rightrunstep max_distance = "40.0"/><br />
<leftwallstep max_distance = "40.0"/><br />
<rightwallstep max_distance = "40.0"/><br />
<leftwalkstep max_distance = "25.0"/><br />
<rightwalkstep max_distance = "25.0"/><br />
<leftcrouchwalkstep max_distance = "10.0"/><br />
<rightcrouchwalkstep max_distance = "10.0"/><br />
<land max_distance = "60.0"/><br />
<land_soft max_distance = "30.0"/><br />
<land_slide max_distance = "20.0"/><br />
<slide max_distance = "30.0"/><br />
<kick max_distance = "25.0"/><br />
<sweep max_distance = "25.0"/><br />
<jump max_distance = "40.0"/><br />
<roll max_distance = "15.0"/><br />
<edge_grab max_distance = "25.0"/><br />
<edge_crawl max_distance = "15.0"/><br />
<bodyfall max_distance = "80.0"/><br />
<bodyfall_light max_distance = "40.0"/><br />
<bodyfall_medium max_distance = "60.0"/><br />
<bodyfall_heavy max_distance = "80.0"/><br />
<weapon_drop_light max_distance = "80.0"/><br />
<weapon_drop_medium max_distance = "80.0"/><br />
<weapon_drop_heavy max_distance = "80.0"/><br />
<blood_spatter max_distance = "30.0"/><br />
<blood_drip max_distance = "20.0"/><br />
<flip max_distance = "20.0"/><br />
<choke_grab max_distance = "10.0"/>;<br />
<choke_move max_distance = "10.0"/>;<br />
<choke_fall max_distance = "10.0"/>;<br />
</events><br />
<events mod="heavy"><br />
<leftrunstep max_distance = "50.0"/><br />
<rightrunstep max_distance = "50.0"/><br />
<leftwallstep max_distance = "50.0"/><br />
<rightwallstep max_distance = "50.0"/><br />
<leftwalkstep max_distance = "30.0"/><br />
<rightwalkstep max_distance = "30.0"/><br />
<leftcrouchwalkstep max_distance = "20.0"/><br />
<rightcrouchwalkstep max_distance = "20.0"/><br />
<land max_distance = "80.0"/><br />
<land_soft max_distance = "40.0"/><br />
<land_slide max_distance = "40.0"/><br />
<kick max_distance = "30.0"/><br />
<sweep max_distance = "30.0"/><br />
<jump max_distance = "50.0"/><br />
<roll max_distance = "25.0"/><br />
<edge_grab max_distance = "40.0"/><br />
</events><br />
</material><br />
</pre><br />
<br />
== Material XML -> Events element ==<br />
<pre><br />
<material><br />
<events><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision sound events for the material.<br />
<br />
=== Events element -> mod attribute ===<br />
<br />
<pre><br />
<material><br />
<events mod="soft"><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
'''Optional''' - String value. Specifies that this list of collision sound events only apply when the given modifier is specified.<br><br />
The modifiers are different ways the sounds will be presented, such as <code>soft</code>, <code>heavy</code>, etc.<br />
<br />
== Material XML -> Events element -> Sound element ==<br />
<pre><br />
<material><br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true" max_distance = "40.0"/><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
The sound (and physical properties of the sound) for a given collision sound event. The name of the element corresponds to the name of the collision sound event (in this example, '''leftrunstep''').<br />
<br />
=== Sound element -> soundgroup attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - String value. Specifies the [[Xml File Formats#Sound Group XML|Sound Group XML]] for the material interaction event.<br><br />
'''TODO:''': Is this really optional? If so, what is the default behavior?<br />
<br />
=== Sound element -> attached attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep attached="true"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - Boolean value. '''Default''': false<br><br />
If true, the sound (group) will be played as a sound that is attached to the character that triggered the collision sound event.<br />
<br />
=== Sound element -> max_distance attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep max_distance = "40.0"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0<br><br />
The max distance that the sound will still be audible to the player.<br><br />
If the value is 0.0, then the max distance will be considered infinite.<br><br />
If it is not specified for a given sound collision event, then the corresponding value in <code>Data/Materials/base.xml</code> will be used instead.<br />
<br />
== Material XML -> Decals element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision decal events for the material.<br />
<br />
== Material XML -> Decals element -> Decal element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"<br />
shader="stepdecalfast"/><br />
<skid color="Data/Textures/Decals/Footprints/rabbitdirtsmear_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtsmear_n.tga"<br />
shader="stepdecalfast"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
The decal (and rendering properties of the decal) for a given collision decal event. The name of the element corresponds to the name of the collision decal event (in these examples, '''step''' and '''skid''').<br />
<br />
=== Decal element -> color attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the decal's color texture.<br />
<br />
=== Decal element -> normal attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the decal's normal texture.<br />
<br />
=== Decal element -> shader attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step shader="stepdecalfast"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the shader name that will be used when rendering the decal.<br />
<br />
== Material XML -> Particles element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
...<br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision particle events for the material. <br />
<br />
== Material XML -> Particles element -> Particle element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
<skid path="Data/Particles/heavydirt.xml"/><br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
The particle for a given collision particle event. The name of the element corresponds to the name of the collision particle event (in these examples, '''step''' and '''skid'''). <br />
<br />
=== Particle element -> path attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
...<br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Xml File Formats#Particle XML|Particle XML]]<br />
<br />
== Material XML -> Physics element ==<br />
<br />
<pre><br />
<material><br />
<physics hardness = "0.8" friction = "1.0" sharp_penetration = "1.0" /><br />
</material><br />
</pre><br />
<br />
The physics properties of the the material. Collision gameplay events will use these properties to determine how to make other objects respond when they collide with the object this material is applied to.<br />
<br />
=== Physics element -> hardness attribute ===<br />
<br />
<pre><br />
<material><br />
<physics hardness = "0.8"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0<br><br />
'''TODO: Describe'''<br />
<br />
=== Physics element -> friction attribute ===<br />
<br />
<pre><br />
<material><br />
<physics friction = "1.0"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0<br><br />
The friction between any other object and the object this material is applied to.<br><br />
In real life this would depend on the materials for both objects, but the game makes simplifying assumptions to make the mapping a bit less complicated.<br />
<br />
=== Physics element -> sharp_penetration attribute ===<br />
<br />
<pre><br />
<material><br />
<physics sharp_penetration = "1.0"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0<br><br />
'''TODO: Describe'''<br />
<br />
= Mod XML =<br />
<br />
'''TODO:'''<br />
<br />
= Music XML =<br />
<br />
'''TODO:'''<br />
<br />
= Nav Mesh Meta XML =<br />
<br />
'''TODO:'''<br />
<br />
= Object XML =<br />
<br />
This is the top-level XML file for a level object. It specifies visual parameters, some gameplay parameters, and paths for visual assets.<br><br />
Other XML file types reference this XML file type, such as [[Xml File Formats#Character XML|Character XML files]] and [[Xml File Formats#Item XML|Item XML files]].<br />
<br />
== Object XML Example ==<br />
<br />
<pre><br />
<?xml version="1.0" ?><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
<Label>impale</Label><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gray_metal_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gray_metal_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/cat_cobbles_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/cat_cobbles_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gold_hexagons_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gold_hexagons_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
</DetailMaps><br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="2" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="20" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/Objects/Environment/Rocks/lichen_rock_a.xml" weight_path="Data/Textures/Terrain/forest_hills/forest_hills_not_grass.tga"<br />
normal_conform="1" density="20" min_embed="0.3" max_embed="0.7" min_scale="0.08" max_scale="0.12"<br />
view_distance="10" jitter_degrees="45" overbright="0.4" tint_weight="0.5" collision_type="static" /><br />
</DetailObjects><br />
<ShaderName>detailmap4</ShaderName><br />
<avg_color r = "100" g = "128" b = "47" /><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
<GroundOffset>0.5</GroundOffset><br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
== Object XML -> Model element ==<br />
<br />
<pre><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the obj format model file.<br />
<br />
=== Model element -> element text ===<br />
<br />
<pre><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
</pre><br />
<br />
'''Required''' - String value. Path to the obj format model file.<br />
<br />
== Object XML -> ColorMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the color map texture for the object.<br />
<br />
=== ColorMap element -> element text ===<br />
<br />
<pre><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color map texture for the object.<br />
<br />
== Object XML -> NormalMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the normal map texture for the object.<br />
<br />
=== NormalMap element -> element text ===<br />
<br />
<pre><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the normal map texture for the object.<br />
<br />
== Object XML -> TranslucencyMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the translucency map texture for the object.<br />
<br />
=== TranslucencyMap element -> element text ===<br />
<br />
<pre><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the translucency map texture for the object.<br />
<br />
== Object XML -> WindMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the wind map texture for the object.<br />
<br />
=== WindMap element -> element text ===<br />
<br />
<pre><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the wind map texture for the object.<br />
<br />
== Object XML -> SharpnessMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br><br />
'''TODO''': links to/from other file types for this field?<br />
<br />
=== SharpnessMap element -> element text ===<br />
<br />
<pre><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br />
<br />
== Object XML -> Label element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Label>impale</Label><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - This is referenced by gameplay scripts to figure out if this object is one of a more generalized type.<br />
<br />
=== Label element -> element text ===<br />
<br />
<pre><br />
<Label>impale</Label><br />
</pre><br />
<br />
'''Required''' - String value. This is referenced by gameplay scripts to figure out if this object is one of a more generalized type.<br />
<br />
== Object XML -> WeightMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the weight map texture for the object.<br />
<br />
=== WeightMap element -> element text ===<br />
<br />
<pre><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the weight map texture for the object.<br />
<br />
== Object XML -> PaletteMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies a set of different tintable areas on this object. The labels are the text displayed in the editor interface. Each color channel of the specified image will be used as a mask to specify where on the object's model the tinting should be limited to.<br />
<br />
=== PaletteMap element -> element text ===<br />
<br />
<pre><br />
<PaletteMap ...><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color masks, used when there's tint parameters that limit the tint to a specific area on the object, such as character clothing colors, a tintable area on a weapon, etc.<br />
<br />
=== PaletteMap element -> label_red attribute ===<br />
<br />
<pre><br />
<PaletteMap label_red="Clothing Color 1"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the red channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_green attribute ===<br />
<br />
<pre><br />
<PaletteMap label_green="Clothing Color 2"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the green channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_blue attribute ===<br />
<br />
<pre><br />
<PaletteMap label_blue="Clothing Color 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the blue channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_alpha attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 4"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the alpha channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_other attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 5"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the "other" channel of the tint mask image.<br><br />
'''TODO''': What the heck even is a "other" channel on an image? Does this even do anything in code, besides get parsed? -merlyn<br />
<br />
== Object XML -> DetailMaps element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
...<br />
</DetailMaps><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary material layers that provide fine, repeated visual detail on top of the object's main texture layers.<br />
<br />
== Object XML -> DetailMaps element -> DetailMap element ==<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
</pre><br />
<br />
'''Optional''' - The parameters for the detail map textures that repeat across the model, providing finer-scale detail. There can be up to four of these.<br />
<br />
=== DetailMap element -> colorpath attribute ===<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for this detail map's color map texture.<br />
<br />
=== DetailMap element -> normalpath attribute ===<br />
<br />
<pre><br />
<DetailMap normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the detail map's normal map texture.<br />
<br />
=== DetailMap element -> materialpath attribute ===<br />
<br />
<pre><br />
<DetailMap materialpath="Data/Materials/wood.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the given detail map level.<br><br />
'''TODO''': What is this used for? Aren't detail maps a visual-only thing? -merlyn<br />
<br />
== Object XML -> DetailObjects element ==<br />
<br />
== Object XML -> DetailObjects element -> DetailObject element ==<br />
<br />
=== DetailObject element -> obj_path attribute ===<br />
=== DetailObject element -> weight_path attribute ===<br />
=== DetailObject element -> normal_conform attribute ===<br />
=== DetailObject element -> density attribute ===<br />
=== DetailObject element -> min_embed attribute ===<br />
=== DetailObject element -> max_embed attribute ===<br />
=== DetailObject element -> min_scale attribute ===<br />
=== DetailObject element -> max_scale attribute ===<br />
=== DetailObject element -> view_distance attribute ===<br />
=== DetailObject element -> jitter_degrees attribute ===<br />
=== DetailObject element -> overbright attribute ===<br />
=== DetailObject element -> tint_weight attribute ===<br />
=== DetailObject element -> collision_type attribute ===<br />
<br />
== Object XML -> ShaderName element ==<br />
<br />
=== ShaderName element -> element text ===<br />
<br />
== Object XML -> avg_color element ==<br />
<br />
=== avg_color element -> r attribute ===<br />
=== avg_color element -> g attribute ===<br />
=== avg_color element -> b attribute ===<br />
<br />
== Object XML -> MaterialPath element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
=== MaterialPath element -> element text ===<br />
<br />
<pre><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the object.<br><br />
This is used for physics interaction events with this object, including sounds, particles, and decals that will be applied when collisions occur.<br />
<br />
== Object XML -> Flags element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of flags that will be applied to this object, if set to true. Some of these flags affect rendering (e.g. <code>double_sided</code>), some affect physics (e.g. <code>no_collision</code>), and others affect gameplay interactions with this object (e.g. <code>bush_collision</code>).<br />
<br />
=== Flags element -> transparent attribute ===<br />
<br />
<pre><br />
<Flags transparent = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be rendered in the transparent rendering pass.<br><br />
This flag doesn't make the object transparent on its own, and must also be coupled with transparent shader flags and a transparency map texture.<br />
<br />
=== Flags element -> no_collision attribute ===<br />
<br />
<pre><br />
<Flags no_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will not trigger collisions with players, items, or weapons.<br><br />
<br />
=== Flags element -> clamp_texture attribute ===<br />
<br />
<pre><br />
<Flags clamp_texture = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will render with its texture clamped at its edges, instead of repeating.<br><br />
<br />
=== Flags element -> bush_collision attribute ===<br />
<br />
<pre><br />
<Flags bush_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will trigger jiggle physics when items and characters collide with it. Physics objects will also be slowed down when interacting with it, but not completely blocked. It will also impact line of sight.<br />
<br />
=== Flags element -> terrain_fixed attribute ===<br />
<br />
<pre><br />
<Flags terrain_fixed = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be locked to the terrain when placed.<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> dynamic attribute ===<br />
<br />
<pre><br />
<Flags dynamic = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be considered to move by script, and the physics engine will use that information for optimization<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> double_sided attribute ===<br />
<br />
<pre><br />
<Flags double_sided = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will have its polygons rendered double-sided. This is useful for objects such as flags and cloth, that have no thickness.<br />
<br />
== Object XML -> GroundOffset element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<GroundOffset>0.5</GroundOffset><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
=== GroundOffset element -> element text ===<br />
<br />
<pre><br />
<GroundOffset>0.5</GroundOffset><br />
</pre><br />
<br />
'''Required''' - Decimal value. The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
== Object XML -> ColorTint element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should be tinted, by default. This can be overridden in the editor after the object is placed in the world.<br />
<br />
=== ColorTint element -> r attribute ===<br />
<br />
<pre><br />
<ColorTint r = "101" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> g attribute ===<br />
<br />
<pre><br />
<ColorTint ... g = "129" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> b attribute ===<br />
<br />
<pre><br />
<ColorTint ... b = "46" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
= Particle XML =<br />
<br />
'''TODO:'''<br />
<br />
= Path XML =<br />
<br />
'''TODO:'''<br />
<br />
= Reaction XML =<br />
<br />
'''TODO:'''<br />
<br />
= Retarget XML =<br />
<br />
'''TODO:'''<br />
<br />
= Rig XML =<br />
<br />
This is the XML file for a character skeleton. It binds a [[Xml File Formats#Character XML|Character XML]] file to an [[Character Scripting|AI angelscript]] file.<br><br />
When a level references a character, this is the file type that is referenced.<br />
<br />
== Rig XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<rig bone_path = "Data/Skeletons/r_wolf2.phxbn"<br />
model_path = "Data/Models/Characters/IGF_Wolf/IGF_Wolf.obj"<br />
mass_path = "Data/Skeletons/r_lt_dog.xml"/><br />
</pre><br />
<br />
== Rig element -> bone_path attribute ==<br />
<pre><br />
<rig bone_path = "Data/Skeletons/r_wolf2.phxbn"/><br />
</pre><br />
<br />
'''Required''' - String value. Path to the skeleton file, using the custom Phoenix Engine skeleton file type ([[Binary File Formats#PHXBN|PHXBN]]. This file MUST have been exported using the mesh specified in <code>model_path</code>.<br />
<br />
== Rig element -> model_path attribute ==<br />
<pre><br />
<rig model_path = "Data/Models/Characters/IGF_Wolf/IGF_Wolf.obj"/><br />
</pre><br />
<br />
'''Required''' - String value. Path to Obj model file to use as skinned the character mesh. This file MUST be the same as the one used when exporting the skeleton specified in <code>bone_path</code>.<br />
<br />
== Rig element -> mass_path attribute ==<br />
<pre><br />
<rig mass_path = "Data/Skeletons/r_lt_dog.xml"/><br />
</pre><br />
<br />
'''Optional''' - String value. Path to [[Xml File Formats#Rig XML|Rig XML]]. Used to override the current skeleton with the bone masses from a different skeleton.<br><br />
'''TODO''': Why you'd want to do this? Who knows! -merlyn<br />
<br />
= Shader Preload XML =<br />
<br />
'''TODO:'''<br />
<br />
= Sound Group XML =<br />
<br />
This is the XML file that describes a group of sounds. One of those sounds will be randomly chosen and played whenever the sound group is triggered.<br><br />
<br />
The file will specify a count of the number of <code>variants</code> that exist, and a sound file will need to exist for each of those variants.<br><br />
For a Sound Group XML with three variants, the XML file and and corresponding sound variants should follow a naming scheme like this:<br />
* <code>Data/Sounds/example_subdir/example_sound_group.xml</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_1.wav</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_2.wav</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_3.wav</code><br><br />
<br />
== Sound Group XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<soundgroup<br />
variants = "3"<br />
delay = "5.3"<br />
volume = "0.1"<br />
max_distance = "77.5"<br />
/><br />
</pre><br />
<br />
== Sound Group element -> variants attribute ==<br />
<pre><br />
<soundgroup variants = "3" /><br />
</pre><br />
<br />
'''Optional''' - Integer value. '''Default''': 1.<br><br />
The count of variants. There must also be a corresponding <code>SoundGroupXmlName_1.wav</code> file for every variant, numbered incrementally up to the variant count.<br><br />
E.g. if there was 3 variants, there would need to be files named <code>SoundGroupXmlName_1.wav</code>, <code>SoundGroupXmlName_2.wav</code>, and <code>SoundGroupXmlName_3.wav</code>.<br />
<br />
== Sound Group element -> delay attribute ==<br />
<pre><br />
<soundgroup delay = "5.3" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0.<br><br />
A delay to add to the start of sound playback, in seconds.<br />
<br />
== Sound Group element -> volume attribute ==<br />
<pre><br />
<soundgroup volume = "0.1" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0.<br><br />
The volume to play back the sound.<br><br />
This is further multiplied by the gain specified when triggering the sound group in gameplay code.<br />
<br />
== Sound Group element -> max_distance attribute ==<br />
<pre><br />
<soundgroup max_distance = "77.5" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 30.0.<br><br />
The maximum distance that the sound can be heard by the player.<br><br />
It will be overridden by the <code>max_distance</code> in the collision sound event, in the [[Xml File Formats#Material XML -> Events element -> Event element|Material XML]], if specified for the given collision sound event.<br />
<br />
= Synced Animation Group XML =<br />
<br />
'''TODO:'''<br />
<br />
= Version Manifest XML =<br />
<br />
'''TODO:'''<br />
<br />
= Voice XML =<br />
<br />
'''TODO:'''</div>Merlynhttp://wiki.wolfire.com/index.php?title=Xml_File_Formats&diff=6236Xml File Formats2023-09-10T10:48:29Z<p>Merlyn: /* Object XML -> Flags element */</p>
<hr />
<div>= TODO: =<br />
<br />
Level, Saved Object, Prefab - These have more confusing schemas, to the point where I'm not entirely sure they're distinct types from one another, and I haven't nailed them down yet -merlyn<br />
<br />
= Actor XML =<br />
<br />
This is the top-level XML file for an NPC or combat character. It binds a [[Xml File Formats#Character XML|Character XML]] file to an [[Character Scripting|AI angelscript]] file.<br><br />
When a level references a character, this is the file type that is referenced.<br />
<br />
== Actor XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<Actor><br />
<Character>Data/Characters/rabbot.xml</Character><br />
<ControlScript>enemycontrol.as</ControlScript><br />
</Actor><br />
</pre><br />
<br />
== Actor XML -> Character element ==<br />
<pre><br />
<Actor><br />
<Character>Data/Characters/rabbot.xml</Character><br />
...<br />
</Actor><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Xml File Formats#Character XML|Character XML]]<br />
<br />
== Actor XML -> ControlScript element ==<br />
<pre><br />
<Actor><br />
...<br />
<ControlScript>enemycontrol.as</ControlScript><br />
</Actor><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Character Scripting|AI angelscript]]. Relative to <code>Data/Scripts</code> folder<br />
<br />
= Asset Preload XML =<br />
<br />
'''TODO:'''<br />
<br />
= Attachment XML =<br />
<br />
'''TODO:'''<br />
<br />
= Attack XML =<br />
<br />
'''TODO:'''<br />
<br />
= Character XML =<br />
<br />
'''TODO:'''<br />
<br />
= Decal XML =<br />
<br />
'''TODO:'''<br />
<br />
= Events XML =<br />
<br />
'''TODO:'''<br />
<br />
= Hotspot XML =<br />
<br />
This is the top-level XML file for a hotspot game object. It specifies the billboard image, and the [[Hotspot Scripting|Hotspot angelscript]] file.<br><br />
When a level references a hotspot, this is the file type that is referenced.<br />
<br />
== Hotspot XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<Type>generic</Type><br />
<Hotspot><br />
<BillboardColorMap>Data/UI/spawner/thumbs/Hotspot/empty.png</BillboardColorMap><br />
<Script>hotspots/sound_hotspot.as</Script><br />
</Hotspot><br />
</pre><br />
<br />
== Hotspot XML -> Type element ==<br />
<pre><br />
<Type>generic</Type><br />
<Hotspot><br />
...<br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. This should always have the value <code><Type>generic</Type></code>.<br><br />
Note: Having two document elements is not valid XML, and I'm not sure what purpose this element serves. But leave it in, since all the hotspots do it. -merlyn<br />
<br />
== Hotspot XML -> Character element ==<br />
<pre><br />
<Hotspot><br />
<BillboardColorMap>Data/UI/spawner/thumbs/Hotspot/empty.png</BillboardColorMap><br />
...<br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. Path to image file. If you don't want a billboard image, you can use <code>Data/UI/spawner/thumbs/Hotspot/empty.png</code>.<br />
<br />
== Hotspot XML -> Script element ==<br />
<pre><br />
<Hotspot><br />
...<br />
<Script>hotspots/sound_hotspot.as</Script><br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Hotspot Scripting|Hotspot angelscript]]. Relative to <code>Data/Scripts</code> folder.<br />
<br />
= Item XML =<br />
<br />
'''TODO:'''<br />
<br />
= Layered Song XML =<br />
<br />
'''TODO:'''<br />
<br />
= Level Meta XML =<br />
<br />
'''TODO:'''<br />
<br />
= Material XML =<br />
<br />
This XML file specifies the sounds that will be played when a character or item interacts with a world object. It is used to model the sound differences between wood, metal, soil, ice, etc.<br><br />
<br />
<code>Data/Materials/default.xml</code> is the global "default" material, if the material isn't specified by the world object.<br><br />
<br />
When the engine or a gameplay script detects a physics event, the code will do a lookup against the current material, for an event with that event name. If the event name is found, then the corresponding sound will be triggered.<br><br />
<br />
Some of these events and materials might specify modifiers (<code>soft</code>, <code>heavy</code>, etc). If they do, the code will first do the lookup against the <code><events mod="themod"></code> version of the event.<br><br />
If an event with the given name is not found with that modifier, the code will then lookup a version of the same event name, but with no modifiers specified.<br><br />
<br />
Some of the values, if not specified, will look at a global "base" material to find the value of the parameter. <code>max_distance</code> is the only one of those parameters right now.<br />
<br />
<code>Data/Materials/base.xml</code> is the global "base" material.<br><br />
<br />
== Material XML Example ==<br />
From <code>Data/Materials/dirt.xml</code> - this is not the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_light_dirt.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_medium_dirt.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_heavy_dirt.xml" attached="true"/><br />
<-- Note: more sound events in the real file than just these --><br />
</events> <br />
<events mod="soft"><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
</events><br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"<br />
shader="stepdecalfast"/><br />
<skid color="Data/Textures/Decals/Footprints/rabbitdirtsmear_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtsmear_n.tga"<br />
shader="stepdecalfast"/><br />
</decals><br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
<skid path="Data/Particles/heavydirt.xml"/><br />
</particles><br />
<physics hardness = "0.8" friction = "1.0" sharp_penetration = "1.0" /><br />
</material><br />
</pre><br />
<br />
From <code>Data/Materials/default.xml</code>, which is the default Material XML file. It is used when other XML file types call for a Material XML, but one is not specified.<br><br />
This is the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
<rightrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
<leftwallstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_wallrun.xml" attached="true"/><br />
<rightwallstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_wallrun.xml" attached="true"/><br />
<leftwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_walk.xml" attached="true"/><br />
<rightwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_walk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<land soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land.xml" attached="true"/><br />
<land_soft soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land_soft.xml" attached="true"/><br />
<land_slide soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land_slide.xml" attached="true"/><br />
<slide soundgroup="Data/Sounds/concrete_foley/slide_concrete_short.xml" attached="true"/><br />
<kick soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_kick.xml" attached="true"/><br />
<sweep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_sweep.xml" attached="true"/><br />
<jump soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump.xml" attached="true"/><br />
<roll soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_roll.xml" attached="true"/><br />
<edge_grab soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_edge_grab.xml" attached="true"/><br />
<edge_crawl soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_edgecrawl.xml" attached="true"/><br />
<bodyfall soundgroup="Data/Sounds/concrete_foley/bf_concrete.xml" attached="true"/><br />
<bodyfall_light soundgroup="Data/Sounds/concrete_foley/bf_concrete_light.xml" attached="true"/><br />
<bodyfall_medium soundgroup="Data/Sounds/concrete_foley/bf_concrete_medium.xml" attached="true"/><br />
<bodyfall_heavy soundgroup="Data/Sounds/concrete_foley/bf_concrete_heavy.xml" attached="true"/><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_light_stone.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_medium_stone.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_heavy_stone.xml" attached="true"/><br />
<blood_spatter soundgroup="Data/Sounds/blood/spatter_hard.xml"/><br />
<blood_drip soundgroup="Data/Sounds/blood/drip_lowpass.xml"/><br />
</events><br />
<events mod="heavy"><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_run.xml" attached="true"/><br />
<rightrunstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_run.xml" attached="true"/><br />
<leftwallstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_wallrun.xml" attached="true"/><br />
<rightwallstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_wallrun.xml" attached="true"/><br />
<leftwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_walk.xml" attached="true"/><br />
<rightwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_walk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<land soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<land_soft soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<land_slide soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<kick soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_kick.xml" attached="true"/><br />
<sweep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_sweep.xml" attached="true"/><br />
<jump soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump.xml" attached="true"/><br />
<roll soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_roll.xml" attached="true"/><br />
<edge_grab soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_edge_grab.xml" attached="true"/><br />
</events><br />
<events mod="soft"><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
</events><br />
<physics hardness = "1.0" friction = "1.0" sharp_penetration = "0.0" /><br />
</material><br />
</pre><br />
<br />
From <code>Data/Materials/base.xml</code>, which specifies the default '''max_distance''' values for all materials.<br><br />
This is the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<leftrunstep max_distance = "40.0"/><br />
<rightrunstep max_distance = "40.0"/><br />
<leftwallstep max_distance = "40.0"/><br />
<rightwallstep max_distance = "40.0"/><br />
<leftwalkstep max_distance = "25.0"/><br />
<rightwalkstep max_distance = "25.0"/><br />
<leftcrouchwalkstep max_distance = "10.0"/><br />
<rightcrouchwalkstep max_distance = "10.0"/><br />
<land max_distance = "60.0"/><br />
<land_soft max_distance = "30.0"/><br />
<land_slide max_distance = "20.0"/><br />
<slide max_distance = "30.0"/><br />
<kick max_distance = "25.0"/><br />
<sweep max_distance = "25.0"/><br />
<jump max_distance = "40.0"/><br />
<roll max_distance = "15.0"/><br />
<edge_grab max_distance = "25.0"/><br />
<edge_crawl max_distance = "15.0"/><br />
<bodyfall max_distance = "80.0"/><br />
<bodyfall_light max_distance = "40.0"/><br />
<bodyfall_medium max_distance = "60.0"/><br />
<bodyfall_heavy max_distance = "80.0"/><br />
<weapon_drop_light max_distance = "80.0"/><br />
<weapon_drop_medium max_distance = "80.0"/><br />
<weapon_drop_heavy max_distance = "80.0"/><br />
<blood_spatter max_distance = "30.0"/><br />
<blood_drip max_distance = "20.0"/><br />
<flip max_distance = "20.0"/><br />
<choke_grab max_distance = "10.0"/>;<br />
<choke_move max_distance = "10.0"/>;<br />
<choke_fall max_distance = "10.0"/>;<br />
</events><br />
<events mod="heavy"><br />
<leftrunstep max_distance = "50.0"/><br />
<rightrunstep max_distance = "50.0"/><br />
<leftwallstep max_distance = "50.0"/><br />
<rightwallstep max_distance = "50.0"/><br />
<leftwalkstep max_distance = "30.0"/><br />
<rightwalkstep max_distance = "30.0"/><br />
<leftcrouchwalkstep max_distance = "20.0"/><br />
<rightcrouchwalkstep max_distance = "20.0"/><br />
<land max_distance = "80.0"/><br />
<land_soft max_distance = "40.0"/><br />
<land_slide max_distance = "40.0"/><br />
<kick max_distance = "30.0"/><br />
<sweep max_distance = "30.0"/><br />
<jump max_distance = "50.0"/><br />
<roll max_distance = "25.0"/><br />
<edge_grab max_distance = "40.0"/><br />
</events><br />
</material><br />
</pre><br />
<br />
== Material XML -> Events element ==<br />
<pre><br />
<material><br />
<events><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision sound events for the material.<br />
<br />
=== Events element -> mod attribute ===<br />
<br />
<pre><br />
<material><br />
<events mod="soft"><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
'''Optional''' - String value. Specifies that this list of collision sound events only apply when the given modifier is specified.<br><br />
The modifiers are different ways the sounds will be presented, such as <code>soft</code>, <code>heavy</code>, etc.<br />
<br />
== Material XML -> Events element -> Sound element ==<br />
<pre><br />
<material><br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true" max_distance = "40.0"/><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
The sound (and physical properties of the sound) for a given collision sound event. The name of the element corresponds to the name of the collision sound event (in this example, '''leftrunstep''').<br />
<br />
=== Sound element -> soundgroup attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - String value. Specifies the [[Xml File Formats#Sound Group XML|Sound Group XML]] for the material interaction event.<br><br />
'''TODO:''': Is this really optional? If so, what is the default behavior?<br />
<br />
=== Sound element -> attached attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep attached="true"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - Boolean value. '''Default''': false<br><br />
If true, the sound (group) will be played as a sound that is attached to the character that triggered the collision sound event.<br />
<br />
=== Sound element -> max_distance attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep max_distance = "40.0"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0<br><br />
The max distance that the sound will still be audible to the player.<br><br />
If the value is 0.0, then the max distance will be considered infinite.<br><br />
If it is not specified for a given sound collision event, then the corresponding value in <code>Data/Materials/base.xml</code> will be used instead.<br />
<br />
== Material XML -> Decals element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision decal events for the material.<br />
<br />
== Material XML -> Decals element -> Decal element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"<br />
shader="stepdecalfast"/><br />
<skid color="Data/Textures/Decals/Footprints/rabbitdirtsmear_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtsmear_n.tga"<br />
shader="stepdecalfast"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
The decal (and rendering properties of the decal) for a given collision decal event. The name of the element corresponds to the name of the collision decal event (in these examples, '''step''' and '''skid''').<br />
<br />
=== Decal element -> color attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the decal's color texture.<br />
<br />
=== Decal element -> normal attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the decal's normal texture.<br />
<br />
=== Decal element -> shader attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step shader="stepdecalfast"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the shader name that will be used when rendering the decal.<br />
<br />
== Material XML -> Particles element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
...<br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision particle events for the material. <br />
<br />
== Material XML -> Particles element -> Particle element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
<skid path="Data/Particles/heavydirt.xml"/><br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
The particle for a given collision particle event. The name of the element corresponds to the name of the collision particle event (in these examples, '''step''' and '''skid'''). <br />
<br />
=== Particle element -> path attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
...<br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Xml File Formats#Particle XML|Particle XML]]<br />
<br />
== Material XML -> Physics element ==<br />
<br />
<pre><br />
<material><br />
<physics hardness = "0.8" friction = "1.0" sharp_penetration = "1.0" /><br />
</material><br />
</pre><br />
<br />
The physics properties of the the material. Collision gameplay events will use these properties to determine how to make other objects respond when they collide with the object this material is applied to.<br />
<br />
=== Physics element -> hardness attribute ===<br />
<br />
<pre><br />
<material><br />
<physics hardness = "0.8"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0<br><br />
'''TODO: Describe'''<br />
<br />
=== Physics element -> friction attribute ===<br />
<br />
<pre><br />
<material><br />
<physics friction = "1.0"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0<br><br />
The friction between any other object and the object this material is applied to.<br><br />
In real life this would depend on the materials for both objects, but the game makes simplifying assumptions to make the mapping a bit less complicated.<br />
<br />
=== Physics element -> sharp_penetration attribute ===<br />
<br />
<pre><br />
<material><br />
<physics sharp_penetration = "1.0"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0<br><br />
'''TODO: Describe'''<br />
<br />
= Mod XML =<br />
<br />
'''TODO:'''<br />
<br />
= Music XML =<br />
<br />
'''TODO:'''<br />
<br />
= Nav Mesh Meta XML =<br />
<br />
'''TODO:'''<br />
<br />
= Object XML =<br />
<br />
This is the top-level XML file for a level object. It specifies visual parameters, some gameplay parameters, and paths for visual assets.<br><br />
Other XML file types reference this XML file type, such as [[Xml File Formats#Character XML|Character XML files]] and [[Xml File Formats#Item XML|Item XML files]].<br />
<br />
== Object XML Example ==<br />
<br />
<pre><br />
<?xml version="1.0" ?><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
<Label>impale</Label><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gray_metal_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gray_metal_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/cat_cobbles_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/cat_cobbles_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gold_hexagons_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gold_hexagons_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
</DetailMaps><br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="2" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="20" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/Objects/Environment/Rocks/lichen_rock_a.xml" weight_path="Data/Textures/Terrain/forest_hills/forest_hills_not_grass.tga"<br />
normal_conform="1" density="20" min_embed="0.3" max_embed="0.7" min_scale="0.08" max_scale="0.12"<br />
view_distance="10" jitter_degrees="45" overbright="0.4" tint_weight="0.5" collision_type="static" /><br />
</DetailObjects><br />
<ShaderName>detailmap4</ShaderName><br />
<avg_color r = "100" g = "128" b = "47" /><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
<GroundOffset>0.5</GroundOffset><br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
== Object XML -> Model element ==<br />
<br />
<pre><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the obj format model file.<br />
<br />
=== Model element -> element text ===<br />
<br />
<pre><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
</pre><br />
<br />
'''Required''' - String value. Path to the obj format model file.<br />
<br />
== Object XML -> ColorMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the color map texture for the object.<br />
<br />
=== ColorMap element -> element text ===<br />
<br />
<pre><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color map texture for the object.<br />
<br />
== Object XML -> NormalMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the normal map texture for the object.<br />
<br />
=== NormalMap element -> element text ===<br />
<br />
<pre><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the normal map texture for the object.<br />
<br />
== Object XML -> TranslucencyMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the translucency map texture for the object.<br />
<br />
=== TranslucencyMap element -> element text ===<br />
<br />
<pre><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the translucency map texture for the object.<br />
<br />
== Object XML -> WindMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the wind map texture for the object.<br />
<br />
=== WindMap element -> element text ===<br />
<br />
<pre><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the wind map texture for the object.<br />
<br />
== Object XML -> SharpnessMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br><br />
'''TODO''': links to/from other file types for this field?<br />
<br />
=== SharpnessMap element -> element text ===<br />
<br />
<pre><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br />
<br />
== Object XML -> Label element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Label>impale</Label><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - This is referenced by gameplay scripts to figure out if this object is one of a more generalized type.<br />
<br />
=== Label element -> element text ===<br />
<br />
<pre><br />
<Label>impale</Label><br />
</pre><br />
<br />
'''Required''' - String value. This is referenced by gameplay scripts to figure out if this object is one of a more generalized type.<br />
<br />
== Object XML -> WeightMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the weight map texture for the object.<br />
<br />
=== WeightMap element -> element text ===<br />
<br />
<pre><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the weight map texture for the object.<br />
<br />
== Object XML -> PaletteMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies a set of different tintable areas on this object. The labels are the text displayed in the editor interface. Each color channel of the specified image will be used as a mask to specify where on the object's model the tinting should be limited to.<br />
<br />
=== PaletteMap element -> element text ===<br />
<br />
<pre><br />
<PaletteMap ...><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color masks, used when there's tint parameters that limit the tint to a specific area on the object, such as character clothing colors, a tintable area on a weapon, etc.<br />
<br />
=== PaletteMap element -> label_red attribute ===<br />
<br />
<pre><br />
<PaletteMap label_red="Clothing Color 1"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the red channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_green attribute ===<br />
<br />
<pre><br />
<PaletteMap label_green="Clothing Color 2"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the green channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_blue attribute ===<br />
<br />
<pre><br />
<PaletteMap label_blue="Clothing Color 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the blue channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_alpha attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 4"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the alpha channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_other attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 5"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the "other" channel of the tint mask image.<br><br />
'''TODO''': What the heck even is a "other" channel on an image? Does this even do anything in code, besides get parsed? -merlyn<br />
<br />
== Object XML -> DetailMaps element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
...<br />
</DetailMaps><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary material layers that provide fine, repeated visual detail on top of the object's main texture layers.<br />
<br />
== Object XML -> DetailMaps element -> DetailMap element ==<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
</pre><br />
<br />
'''Optional''' - The parameters for the detail map textures that repeat across the model, providing finer-scale detail. There can be up to four of these.<br />
<br />
=== DetailMap element -> colorpath attribute ===<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for this detail map's color map texture.<br />
<br />
=== DetailMap element -> normalpath attribute ===<br />
<br />
<pre><br />
<DetailMap normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the detail map's normal map texture.<br />
<br />
=== DetailMap element -> materialpath attribute ===<br />
<br />
<pre><br />
<DetailMap materialpath="Data/Materials/wood.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the given detail map level.<br><br />
'''TODO''': What is this used for? Aren't detail maps a visual-only thing? -merlyn<br />
<br />
== Object XML -> DetailObjects element ==<br />
<br />
== Object XML -> DetailObjects element -> DetailObject element ==<br />
<br />
=== DetailObject element -> obj_path attribute ===<br />
=== DetailObject element -> weight_path attribute ===<br />
=== DetailObject element -> normal_conform attribute ===<br />
=== DetailObject element -> density attribute ===<br />
=== DetailObject element -> min_embed attribute ===<br />
=== DetailObject element -> max_embed attribute ===<br />
=== DetailObject element -> min_scale attribute ===<br />
=== DetailObject element -> max_scale attribute ===<br />
=== DetailObject element -> view_distance attribute ===<br />
=== DetailObject element -> jitter_degrees attribute ===<br />
=== DetailObject element -> overbright attribute ===<br />
=== DetailObject element -> tint_weight attribute ===<br />
=== DetailObject element -> collision_type attribute ===<br />
<br />
== Object XML -> ShaderName element ==<br />
<br />
=== ShaderName element -> element text ===<br />
<br />
== Object XML -> avg_color element ==<br />
<br />
=== avg_color element -> r attribute ===<br />
=== avg_color element -> g attribute ===<br />
=== avg_color element -> b attribute ===<br />
<br />
== Object XML -> MaterialPath element ==<br />
<br />
=== MaterialPath element -> element text ===<br />
<br />
== Object XML -> Flags element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of flags that will be applied to this object, if set to true. Some of these flags affect rendering (e.g. <code>double_sided</code>), some affect physics (e.g. <code>no_collision</code>), and others affect gameplay interactions with this object (e.g. <code>bush_collision</code>).<br />
<br />
=== Flags element -> transparent attribute ===<br />
<br />
<pre><br />
<Flags transparent = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be rendered in the transparent rendering pass.<br><br />
This flag doesn't make the object transparent on its own, and must also be coupled with transparent shader flags and a transparency map texture.<br />
<br />
=== Flags element -> no_collision attribute ===<br />
<br />
<pre><br />
<Flags no_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will not trigger collisions with players, items, or weapons.<br><br />
<br />
=== Flags element -> clamp_texture attribute ===<br />
<br />
<pre><br />
<Flags clamp_texture = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will render with its texture clamped at its edges, instead of repeating.<br><br />
<br />
=== Flags element -> bush_collision attribute ===<br />
<br />
<pre><br />
<Flags bush_collision = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will trigger jiggle physics when items and characters collide with it. Physics objects will also be slowed down when interacting with it, but not completely blocked. It will also impact line of sight.<br />
<br />
=== Flags element -> terrain_fixed attribute ===<br />
<br />
<pre><br />
<Flags terrain_fixed = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be locked to the terrain when placed.<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> dynamic attribute ===<br />
<br />
<pre><br />
<Flags dynamic = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will be considered to move by script, and the physics engine will use that information for optimization<br><br />
'''TODO''': Is this an accurate description, or does it do something else? -merlyn<br />
<br />
=== Flags element -> double_sided attribute ===<br />
<br />
<pre><br />
<Flags double_sided = "true" ... /><br />
</pre><br />
<br />
'''Optional''' - Boolean value. If <code>true</code>, then the object will have its polygons rendered double-sided. This is useful for objects such as flags and cloth, that have no thickness.<br />
<br />
== Object XML -> GroundOffset element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<GroundOffset>0.5</GroundOffset><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
=== GroundOffset element -> element text ===<br />
<br />
<pre><br />
<GroundOffset>0.5</GroundOffset><br />
</pre><br />
<br />
'''Required''' - Decimal value. The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
== Object XML -> ColorTint element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should be tinted, by default. This can be overridden in the editor after the object is placed in the world.<br />
<br />
=== ColorTint element -> r attribute ===<br />
<br />
<pre><br />
<ColorTint r = "101" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> g attribute ===<br />
<br />
<pre><br />
<ColorTint ... g = "129" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> b attribute ===<br />
<br />
<pre><br />
<ColorTint ... b = "46" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
= Particle XML =<br />
<br />
'''TODO:'''<br />
<br />
= Path XML =<br />
<br />
'''TODO:'''<br />
<br />
= Reaction XML =<br />
<br />
'''TODO:'''<br />
<br />
= Retarget XML =<br />
<br />
'''TODO:'''<br />
<br />
= Rig XML =<br />
<br />
This is the XML file for a character skeleton. It binds a [[Xml File Formats#Character XML|Character XML]] file to an [[Character Scripting|AI angelscript]] file.<br><br />
When a level references a character, this is the file type that is referenced.<br />
<br />
== Rig XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<rig bone_path = "Data/Skeletons/r_wolf2.phxbn"<br />
model_path = "Data/Models/Characters/IGF_Wolf/IGF_Wolf.obj"<br />
mass_path = "Data/Skeletons/r_lt_dog.xml"/><br />
</pre><br />
<br />
== Rig element -> bone_path attribute ==<br />
<pre><br />
<rig bone_path = "Data/Skeletons/r_wolf2.phxbn"/><br />
</pre><br />
<br />
'''Required''' - String value. Path to the skeleton file, using the custom Phoenix Engine skeleton file type ([[Binary File Formats#PHXBN|PHXBN]]. This file MUST have been exported using the mesh specified in <code>model_path</code>.<br />
<br />
== Rig element -> model_path attribute ==<br />
<pre><br />
<rig model_path = "Data/Models/Characters/IGF_Wolf/IGF_Wolf.obj"/><br />
</pre><br />
<br />
'''Required''' - String value. Path to Obj model file to use as skinned the character mesh. This file MUST be the same as the one used when exporting the skeleton specified in <code>bone_path</code>.<br />
<br />
== Rig element -> mass_path attribute ==<br />
<pre><br />
<rig mass_path = "Data/Skeletons/r_lt_dog.xml"/><br />
</pre><br />
<br />
'''Optional''' - String value. Path to [[Xml File Formats#Rig XML|Rig XML]]. Used to override the current skeleton with the bone masses from a different skeleton.<br><br />
'''TODO''': Why you'd want to do this? Who knows! -merlyn<br />
<br />
= Shader Preload XML =<br />
<br />
'''TODO:'''<br />
<br />
= Sound Group XML =<br />
<br />
This is the XML file that describes a group of sounds. One of those sounds will be randomly chosen and played whenever the sound group is triggered.<br><br />
<br />
The file will specify a count of the number of <code>variants</code> that exist, and a sound file will need to exist for each of those variants.<br><br />
For a Sound Group XML with three variants, the XML file and and corresponding sound variants should follow a naming scheme like this:<br />
* <code>Data/Sounds/example_subdir/example_sound_group.xml</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_1.wav</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_2.wav</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_3.wav</code><br><br />
<br />
== Sound Group XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<soundgroup<br />
variants = "3"<br />
delay = "5.3"<br />
volume = "0.1"<br />
max_distance = "77.5"<br />
/><br />
</pre><br />
<br />
== Sound Group element -> variants attribute ==<br />
<pre><br />
<soundgroup variants = "3" /><br />
</pre><br />
<br />
'''Optional''' - Integer value. '''Default''': 1.<br><br />
The count of variants. There must also be a corresponding <code>SoundGroupXmlName_1.wav</code> file for every variant, numbered incrementally up to the variant count.<br><br />
E.g. if there was 3 variants, there would need to be files named <code>SoundGroupXmlName_1.wav</code>, <code>SoundGroupXmlName_2.wav</code>, and <code>SoundGroupXmlName_3.wav</code>.<br />
<br />
== Sound Group element -> delay attribute ==<br />
<pre><br />
<soundgroup delay = "5.3" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0.<br><br />
A delay to add to the start of sound playback, in seconds.<br />
<br />
== Sound Group element -> volume attribute ==<br />
<pre><br />
<soundgroup volume = "0.1" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0.<br><br />
The volume to play back the sound.<br><br />
This is further multiplied by the gain specified when triggering the sound group in gameplay code.<br />
<br />
== Sound Group element -> max_distance attribute ==<br />
<pre><br />
<soundgroup max_distance = "77.5" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 30.0.<br><br />
The maximum distance that the sound can be heard by the player.<br><br />
It will be overridden by the <code>max_distance</code> in the collision sound event, in the [[Xml File Formats#Material XML -> Events element -> Event element|Material XML]], if specified for the given collision sound event.<br />
<br />
= Synced Animation Group XML =<br />
<br />
'''TODO:'''<br />
<br />
= Version Manifest XML =<br />
<br />
'''TODO:'''<br />
<br />
= Voice XML =<br />
<br />
'''TODO:'''</div>Merlynhttp://wiki.wolfire.com/index.php?title=Xml_File_Formats&diff=6235Xml File Formats2023-09-10T10:35:05Z<p>Merlyn: /* Object XML -> GroundOffset element */</p>
<hr />
<div>= TODO: =<br />
<br />
Level, Saved Object, Prefab - These have more confusing schemas, to the point where I'm not entirely sure they're distinct types from one another, and I haven't nailed them down yet -merlyn<br />
<br />
= Actor XML =<br />
<br />
This is the top-level XML file for an NPC or combat character. It binds a [[Xml File Formats#Character XML|Character XML]] file to an [[Character Scripting|AI angelscript]] file.<br><br />
When a level references a character, this is the file type that is referenced.<br />
<br />
== Actor XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<Actor><br />
<Character>Data/Characters/rabbot.xml</Character><br />
<ControlScript>enemycontrol.as</ControlScript><br />
</Actor><br />
</pre><br />
<br />
== Actor XML -> Character element ==<br />
<pre><br />
<Actor><br />
<Character>Data/Characters/rabbot.xml</Character><br />
...<br />
</Actor><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Xml File Formats#Character XML|Character XML]]<br />
<br />
== Actor XML -> ControlScript element ==<br />
<pre><br />
<Actor><br />
...<br />
<ControlScript>enemycontrol.as</ControlScript><br />
</Actor><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Character Scripting|AI angelscript]]. Relative to <code>Data/Scripts</code> folder<br />
<br />
= Asset Preload XML =<br />
<br />
'''TODO:'''<br />
<br />
= Attachment XML =<br />
<br />
'''TODO:'''<br />
<br />
= Attack XML =<br />
<br />
'''TODO:'''<br />
<br />
= Character XML =<br />
<br />
'''TODO:'''<br />
<br />
= Decal XML =<br />
<br />
'''TODO:'''<br />
<br />
= Events XML =<br />
<br />
'''TODO:'''<br />
<br />
= Hotspot XML =<br />
<br />
This is the top-level XML file for a hotspot game object. It specifies the billboard image, and the [[Hotspot Scripting|Hotspot angelscript]] file.<br><br />
When a level references a hotspot, this is the file type that is referenced.<br />
<br />
== Hotspot XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<Type>generic</Type><br />
<Hotspot><br />
<BillboardColorMap>Data/UI/spawner/thumbs/Hotspot/empty.png</BillboardColorMap><br />
<Script>hotspots/sound_hotspot.as</Script><br />
</Hotspot><br />
</pre><br />
<br />
== Hotspot XML -> Type element ==<br />
<pre><br />
<Type>generic</Type><br />
<Hotspot><br />
...<br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. This should always have the value <code><Type>generic</Type></code>.<br><br />
Note: Having two document elements is not valid XML, and I'm not sure what purpose this element serves. But leave it in, since all the hotspots do it. -merlyn<br />
<br />
== Hotspot XML -> Character element ==<br />
<pre><br />
<Hotspot><br />
<BillboardColorMap>Data/UI/spawner/thumbs/Hotspot/empty.png</BillboardColorMap><br />
...<br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. Path to image file. If you don't want a billboard image, you can use <code>Data/UI/spawner/thumbs/Hotspot/empty.png</code>.<br />
<br />
== Hotspot XML -> Script element ==<br />
<pre><br />
<Hotspot><br />
...<br />
<Script>hotspots/sound_hotspot.as</Script><br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Hotspot Scripting|Hotspot angelscript]]. Relative to <code>Data/Scripts</code> folder.<br />
<br />
= Item XML =<br />
<br />
'''TODO:'''<br />
<br />
= Layered Song XML =<br />
<br />
'''TODO:'''<br />
<br />
= Level Meta XML =<br />
<br />
'''TODO:'''<br />
<br />
= Material XML =<br />
<br />
This XML file specifies the sounds that will be played when a character or item interacts with a world object. It is used to model the sound differences between wood, metal, soil, ice, etc.<br><br />
<br />
<code>Data/Materials/default.xml</code> is the global "default" material, if the material isn't specified by the world object.<br><br />
<br />
When the engine or a gameplay script detects a physics event, the code will do a lookup against the current material, for an event with that event name. If the event name is found, then the corresponding sound will be triggered.<br><br />
<br />
Some of these events and materials might specify modifiers (<code>soft</code>, <code>heavy</code>, etc). If they do, the code will first do the lookup against the <code><events mod="themod"></code> version of the event.<br><br />
If an event with the given name is not found with that modifier, the code will then lookup a version of the same event name, but with no modifiers specified.<br><br />
<br />
Some of the values, if not specified, will look at a global "base" material to find the value of the parameter. <code>max_distance</code> is the only one of those parameters right now.<br />
<br />
<code>Data/Materials/base.xml</code> is the global "base" material.<br><br />
<br />
== Material XML Example ==<br />
From <code>Data/Materials/dirt.xml</code> - this is not the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_light_dirt.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_medium_dirt.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_heavy_dirt.xml" attached="true"/><br />
<-- Note: more sound events in the real file than just these --><br />
</events> <br />
<events mod="soft"><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
</events><br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"<br />
shader="stepdecalfast"/><br />
<skid color="Data/Textures/Decals/Footprints/rabbitdirtsmear_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtsmear_n.tga"<br />
shader="stepdecalfast"/><br />
</decals><br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
<skid path="Data/Particles/heavydirt.xml"/><br />
</particles><br />
<physics hardness = "0.8" friction = "1.0" sharp_penetration = "1.0" /><br />
</material><br />
</pre><br />
<br />
From <code>Data/Materials/default.xml</code>, which is the default Material XML file. It is used when other XML file types call for a Material XML, but one is not specified.<br><br />
This is the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
<rightrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
<leftwallstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_wallrun.xml" attached="true"/><br />
<rightwallstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_wallrun.xml" attached="true"/><br />
<leftwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_walk.xml" attached="true"/><br />
<rightwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_walk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<land soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land.xml" attached="true"/><br />
<land_soft soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land_soft.xml" attached="true"/><br />
<land_slide soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land_slide.xml" attached="true"/><br />
<slide soundgroup="Data/Sounds/concrete_foley/slide_concrete_short.xml" attached="true"/><br />
<kick soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_kick.xml" attached="true"/><br />
<sweep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_sweep.xml" attached="true"/><br />
<jump soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump.xml" attached="true"/><br />
<roll soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_roll.xml" attached="true"/><br />
<edge_grab soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_edge_grab.xml" attached="true"/><br />
<edge_crawl soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_edgecrawl.xml" attached="true"/><br />
<bodyfall soundgroup="Data/Sounds/concrete_foley/bf_concrete.xml" attached="true"/><br />
<bodyfall_light soundgroup="Data/Sounds/concrete_foley/bf_concrete_light.xml" attached="true"/><br />
<bodyfall_medium soundgroup="Data/Sounds/concrete_foley/bf_concrete_medium.xml" attached="true"/><br />
<bodyfall_heavy soundgroup="Data/Sounds/concrete_foley/bf_concrete_heavy.xml" attached="true"/><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_light_stone.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_medium_stone.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_heavy_stone.xml" attached="true"/><br />
<blood_spatter soundgroup="Data/Sounds/blood/spatter_hard.xml"/><br />
<blood_drip soundgroup="Data/Sounds/blood/drip_lowpass.xml"/><br />
</events><br />
<events mod="heavy"><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_run.xml" attached="true"/><br />
<rightrunstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_run.xml" attached="true"/><br />
<leftwallstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_wallrun.xml" attached="true"/><br />
<rightwallstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_wallrun.xml" attached="true"/><br />
<leftwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_walk.xml" attached="true"/><br />
<rightwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_walk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<land soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<land_soft soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<land_slide soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<kick soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_kick.xml" attached="true"/><br />
<sweep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_sweep.xml" attached="true"/><br />
<jump soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump.xml" attached="true"/><br />
<roll soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_roll.xml" attached="true"/><br />
<edge_grab soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_edge_grab.xml" attached="true"/><br />
</events><br />
<events mod="soft"><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
</events><br />
<physics hardness = "1.0" friction = "1.0" sharp_penetration = "0.0" /><br />
</material><br />
</pre><br />
<br />
From <code>Data/Materials/base.xml</code>, which specifies the default '''max_distance''' values for all materials.<br><br />
This is the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<leftrunstep max_distance = "40.0"/><br />
<rightrunstep max_distance = "40.0"/><br />
<leftwallstep max_distance = "40.0"/><br />
<rightwallstep max_distance = "40.0"/><br />
<leftwalkstep max_distance = "25.0"/><br />
<rightwalkstep max_distance = "25.0"/><br />
<leftcrouchwalkstep max_distance = "10.0"/><br />
<rightcrouchwalkstep max_distance = "10.0"/><br />
<land max_distance = "60.0"/><br />
<land_soft max_distance = "30.0"/><br />
<land_slide max_distance = "20.0"/><br />
<slide max_distance = "30.0"/><br />
<kick max_distance = "25.0"/><br />
<sweep max_distance = "25.0"/><br />
<jump max_distance = "40.0"/><br />
<roll max_distance = "15.0"/><br />
<edge_grab max_distance = "25.0"/><br />
<edge_crawl max_distance = "15.0"/><br />
<bodyfall max_distance = "80.0"/><br />
<bodyfall_light max_distance = "40.0"/><br />
<bodyfall_medium max_distance = "60.0"/><br />
<bodyfall_heavy max_distance = "80.0"/><br />
<weapon_drop_light max_distance = "80.0"/><br />
<weapon_drop_medium max_distance = "80.0"/><br />
<weapon_drop_heavy max_distance = "80.0"/><br />
<blood_spatter max_distance = "30.0"/><br />
<blood_drip max_distance = "20.0"/><br />
<flip max_distance = "20.0"/><br />
<choke_grab max_distance = "10.0"/>;<br />
<choke_move max_distance = "10.0"/>;<br />
<choke_fall max_distance = "10.0"/>;<br />
</events><br />
<events mod="heavy"><br />
<leftrunstep max_distance = "50.0"/><br />
<rightrunstep max_distance = "50.0"/><br />
<leftwallstep max_distance = "50.0"/><br />
<rightwallstep max_distance = "50.0"/><br />
<leftwalkstep max_distance = "30.0"/><br />
<rightwalkstep max_distance = "30.0"/><br />
<leftcrouchwalkstep max_distance = "20.0"/><br />
<rightcrouchwalkstep max_distance = "20.0"/><br />
<land max_distance = "80.0"/><br />
<land_soft max_distance = "40.0"/><br />
<land_slide max_distance = "40.0"/><br />
<kick max_distance = "30.0"/><br />
<sweep max_distance = "30.0"/><br />
<jump max_distance = "50.0"/><br />
<roll max_distance = "25.0"/><br />
<edge_grab max_distance = "40.0"/><br />
</events><br />
</material><br />
</pre><br />
<br />
== Material XML -> Events element ==<br />
<pre><br />
<material><br />
<events><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision sound events for the material.<br />
<br />
=== Events element -> mod attribute ===<br />
<br />
<pre><br />
<material><br />
<events mod="soft"><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
'''Optional''' - String value. Specifies that this list of collision sound events only apply when the given modifier is specified.<br><br />
The modifiers are different ways the sounds will be presented, such as <code>soft</code>, <code>heavy</code>, etc.<br />
<br />
== Material XML -> Events element -> Sound element ==<br />
<pre><br />
<material><br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true" max_distance = "40.0"/><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
The sound (and physical properties of the sound) for a given collision sound event. The name of the element corresponds to the name of the collision sound event (in this example, '''leftrunstep''').<br />
<br />
=== Sound element -> soundgroup attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - String value. Specifies the [[Xml File Formats#Sound Group XML|Sound Group XML]] for the material interaction event.<br><br />
'''TODO:''': Is this really optional? If so, what is the default behavior?<br />
<br />
=== Sound element -> attached attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep attached="true"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - Boolean value. '''Default''': false<br><br />
If true, the sound (group) will be played as a sound that is attached to the character that triggered the collision sound event.<br />
<br />
=== Sound element -> max_distance attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep max_distance = "40.0"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0<br><br />
The max distance that the sound will still be audible to the player.<br><br />
If the value is 0.0, then the max distance will be considered infinite.<br><br />
If it is not specified for a given sound collision event, then the corresponding value in <code>Data/Materials/base.xml</code> will be used instead.<br />
<br />
== Material XML -> Decals element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision decal events for the material.<br />
<br />
== Material XML -> Decals element -> Decal element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"<br />
shader="stepdecalfast"/><br />
<skid color="Data/Textures/Decals/Footprints/rabbitdirtsmear_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtsmear_n.tga"<br />
shader="stepdecalfast"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
The decal (and rendering properties of the decal) for a given collision decal event. The name of the element corresponds to the name of the collision decal event (in these examples, '''step''' and '''skid''').<br />
<br />
=== Decal element -> color attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the decal's color texture.<br />
<br />
=== Decal element -> normal attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the decal's normal texture.<br />
<br />
=== Decal element -> shader attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step shader="stepdecalfast"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the shader name that will be used when rendering the decal.<br />
<br />
== Material XML -> Particles element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
...<br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision particle events for the material. <br />
<br />
== Material XML -> Particles element -> Particle element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
<skid path="Data/Particles/heavydirt.xml"/><br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
The particle for a given collision particle event. The name of the element corresponds to the name of the collision particle event (in these examples, '''step''' and '''skid'''). <br />
<br />
=== Particle element -> path attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
...<br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Xml File Formats#Particle XML|Particle XML]]<br />
<br />
== Material XML -> Physics element ==<br />
<br />
<pre><br />
<material><br />
<physics hardness = "0.8" friction = "1.0" sharp_penetration = "1.0" /><br />
</material><br />
</pre><br />
<br />
The physics properties of the the material. Collision gameplay events will use these properties to determine how to make other objects respond when they collide with the object this material is applied to.<br />
<br />
=== Physics element -> hardness attribute ===<br />
<br />
<pre><br />
<material><br />
<physics hardness = "0.8"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0<br><br />
'''TODO: Describe'''<br />
<br />
=== Physics element -> friction attribute ===<br />
<br />
<pre><br />
<material><br />
<physics friction = "1.0"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0<br><br />
The friction between any other object and the object this material is applied to.<br><br />
In real life this would depend on the materials for both objects, but the game makes simplifying assumptions to make the mapping a bit less complicated.<br />
<br />
=== Physics element -> sharp_penetration attribute ===<br />
<br />
<pre><br />
<material><br />
<physics sharp_penetration = "1.0"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0<br><br />
'''TODO: Describe'''<br />
<br />
= Mod XML =<br />
<br />
'''TODO:'''<br />
<br />
= Music XML =<br />
<br />
'''TODO:'''<br />
<br />
= Nav Mesh Meta XML =<br />
<br />
'''TODO:'''<br />
<br />
= Object XML =<br />
<br />
This is the top-level XML file for a level object. It specifies visual parameters, some gameplay parameters, and paths for visual assets.<br><br />
Other XML file types reference this XML file type, such as [[Xml File Formats#Character XML|Character XML files]] and [[Xml File Formats#Item XML|Item XML files]].<br />
<br />
== Object XML Example ==<br />
<br />
<pre><br />
<?xml version="1.0" ?><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
<Label>impale</Label><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gray_metal_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gray_metal_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/cat_cobbles_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/cat_cobbles_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gold_hexagons_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gold_hexagons_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
</DetailMaps><br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="2" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="20" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/Objects/Environment/Rocks/lichen_rock_a.xml" weight_path="Data/Textures/Terrain/forest_hills/forest_hills_not_grass.tga"<br />
normal_conform="1" density="20" min_embed="0.3" max_embed="0.7" min_scale="0.08" max_scale="0.12"<br />
view_distance="10" jitter_degrees="45" overbright="0.4" tint_weight="0.5" collision_type="static" /><br />
</DetailObjects><br />
<ShaderName>detailmap4</ShaderName><br />
<avg_color r = "100" g = "128" b = "47" /><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
<GroundOffset>0.5</GroundOffset><br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
== Object XML -> Model element ==<br />
<br />
<pre><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the obj format model file.<br />
<br />
=== Model element -> element text ===<br />
<br />
<pre><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
</pre><br />
<br />
'''Required''' - String value. Path to the obj format model file.<br />
<br />
== Object XML -> ColorMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the color map texture for the object.<br />
<br />
=== ColorMap element -> element text ===<br />
<br />
<pre><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color map texture for the object.<br />
<br />
== Object XML -> NormalMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the normal map texture for the object.<br />
<br />
=== NormalMap element -> element text ===<br />
<br />
<pre><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the normal map texture for the object.<br />
<br />
== Object XML -> TranslucencyMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the translucency map texture for the object.<br />
<br />
=== TranslucencyMap element -> element text ===<br />
<br />
<pre><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the translucency map texture for the object.<br />
<br />
== Object XML -> WindMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the wind map texture for the object.<br />
<br />
=== WindMap element -> element text ===<br />
<br />
<pre><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the wind map texture for the object.<br />
<br />
== Object XML -> SharpnessMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br><br />
'''TODO''': links to/from other file types for this field?<br />
<br />
=== SharpnessMap element -> element text ===<br />
<br />
<pre><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br />
<br />
== Object XML -> Label element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Label>impale</Label><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - This is referenced by gameplay scripts to figure out if this object is one of a more generalized type.<br />
<br />
=== Label element -> element text ===<br />
<br />
<pre><br />
<Label>impale</Label><br />
</pre><br />
<br />
'''Required''' - String value. This is referenced by gameplay scripts to figure out if this object is one of a more generalized type.<br />
<br />
== Object XML -> WeightMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the weight map texture for the object.<br />
<br />
=== WeightMap element -> element text ===<br />
<br />
<pre><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the weight map texture for the object.<br />
<br />
== Object XML -> PaletteMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies a set of different tintable areas on this object. The labels are the text displayed in the editor interface. Each color channel of the specified image will be used as a mask to specify where on the object's model the tinting should be limited to.<br />
<br />
=== PaletteMap element -> element text ===<br />
<br />
<pre><br />
<PaletteMap ...><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color masks, used when there's tint parameters that limit the tint to a specific area on the object, such as character clothing colors, a tintable area on a weapon, etc.<br />
<br />
=== PaletteMap element -> label_red attribute ===<br />
<br />
<pre><br />
<PaletteMap label_red="Clothing Color 1"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the red channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_green attribute ===<br />
<br />
<pre><br />
<PaletteMap label_green="Clothing Color 2"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the green channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_blue attribute ===<br />
<br />
<pre><br />
<PaletteMap label_blue="Clothing Color 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the blue channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_alpha attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 4"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the alpha channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_other attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 5"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the "other" channel of the tint mask image.<br><br />
'''TODO''': What the heck even is a "other" channel on an image? Does this even do anything in code, besides get parsed? -merlyn<br />
<br />
== Object XML -> DetailMaps element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
...<br />
</DetailMaps><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary material layers that provide fine, repeated visual detail on top of the object's main texture layers.<br />
<br />
== Object XML -> DetailMaps element -> DetailMap element ==<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
</pre><br />
<br />
'''Optional''' - The parameters for the detail map textures that repeat across the model, providing finer-scale detail. There can be up to four of these.<br />
<br />
=== DetailMap element -> colorpath attribute ===<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for this detail map's color map texture.<br />
<br />
=== DetailMap element -> normalpath attribute ===<br />
<br />
<pre><br />
<DetailMap normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the detail map's normal map texture.<br />
<br />
=== DetailMap element -> materialpath attribute ===<br />
<br />
<pre><br />
<DetailMap materialpath="Data/Materials/wood.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the given detail map level.<br><br />
'''TODO''': What is this used for? Aren't detail maps a visual-only thing? -merlyn<br />
<br />
== Object XML -> DetailObjects element ==<br />
<br />
== Object XML -> DetailObjects element -> DetailObject element ==<br />
<br />
=== DetailObject element -> obj_path attribute ===<br />
=== DetailObject element -> weight_path attribute ===<br />
=== DetailObject element -> normal_conform attribute ===<br />
=== DetailObject element -> density attribute ===<br />
=== DetailObject element -> min_embed attribute ===<br />
=== DetailObject element -> max_embed attribute ===<br />
=== DetailObject element -> min_scale attribute ===<br />
=== DetailObject element -> max_scale attribute ===<br />
=== DetailObject element -> view_distance attribute ===<br />
=== DetailObject element -> jitter_degrees attribute ===<br />
=== DetailObject element -> overbright attribute ===<br />
=== DetailObject element -> tint_weight attribute ===<br />
=== DetailObject element -> collision_type attribute ===<br />
<br />
== Object XML -> ShaderName element ==<br />
<br />
=== ShaderName element -> element text ===<br />
<br />
== Object XML -> avg_color element ==<br />
<br />
=== avg_color element -> r attribute ===<br />
=== avg_color element -> g attribute ===<br />
=== avg_color element -> b attribute ===<br />
<br />
== Object XML -> MaterialPath element ==<br />
<br />
=== MaterialPath element -> element text ===<br />
<br />
== Object XML -> Flags element ==<br />
<br />
=== Flags element -> transparent attribtue ===<br />
=== Flags element -> no_collision attribtue ===<br />
=== Flags element -> clamp_texture attribtue ===<br />
=== Flags element -> bush_collision attribtue ===<br />
=== Flags element -> terrain_fixed attribtue ===<br />
=== Flags element -> dynamic attribtue ===<br />
=== Flags element -> double_sided attribtue ===<br />
<br />
== Object XML -> GroundOffset element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<GroundOffset>0.5</GroundOffset><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
=== GroundOffset element -> element text ===<br />
<br />
<pre><br />
<GroundOffset>0.5</GroundOffset><br />
</pre><br />
<br />
'''Required''' - Decimal value. The Y offset to position this object away from the ground, when placed in the world.<br />
<br />
== Object XML -> ColorTint element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should be tinted, by default. This can be overridden in the editor after the object is placed in the world.<br />
<br />
=== ColorTint element -> r attribute ===<br />
<br />
<pre><br />
<ColorTint r = "101" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> g attribute ===<br />
<br />
<pre><br />
<ColorTint ... g = "129" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> b attribute ===<br />
<br />
<pre><br />
<ColorTint ... b = "46" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
= Particle XML =<br />
<br />
'''TODO:'''<br />
<br />
= Path XML =<br />
<br />
'''TODO:'''<br />
<br />
= Reaction XML =<br />
<br />
'''TODO:'''<br />
<br />
= Retarget XML =<br />
<br />
'''TODO:'''<br />
<br />
= Rig XML =<br />
<br />
This is the XML file for a character skeleton. It binds a [[Xml File Formats#Character XML|Character XML]] file to an [[Character Scripting|AI angelscript]] file.<br><br />
When a level references a character, this is the file type that is referenced.<br />
<br />
== Rig XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<rig bone_path = "Data/Skeletons/r_wolf2.phxbn"<br />
model_path = "Data/Models/Characters/IGF_Wolf/IGF_Wolf.obj"<br />
mass_path = "Data/Skeletons/r_lt_dog.xml"/><br />
</pre><br />
<br />
== Rig element -> bone_path attribute ==<br />
<pre><br />
<rig bone_path = "Data/Skeletons/r_wolf2.phxbn"/><br />
</pre><br />
<br />
'''Required''' - String value. Path to the skeleton file, using the custom Phoenix Engine skeleton file type ([[Binary File Formats#PHXBN|PHXBN]]. This file MUST have been exported using the mesh specified in <code>model_path</code>.<br />
<br />
== Rig element -> model_path attribute ==<br />
<pre><br />
<rig model_path = "Data/Models/Characters/IGF_Wolf/IGF_Wolf.obj"/><br />
</pre><br />
<br />
'''Required''' - String value. Path to Obj model file to use as skinned the character mesh. This file MUST be the same as the one used when exporting the skeleton specified in <code>bone_path</code>.<br />
<br />
== Rig element -> mass_path attribute ==<br />
<pre><br />
<rig mass_path = "Data/Skeletons/r_lt_dog.xml"/><br />
</pre><br />
<br />
'''Optional''' - String value. Path to [[Xml File Formats#Rig XML|Rig XML]]. Used to override the current skeleton with the bone masses from a different skeleton.<br><br />
'''TODO''': Why you'd want to do this? Who knows! -merlyn<br />
<br />
= Shader Preload XML =<br />
<br />
'''TODO:'''<br />
<br />
= Sound Group XML =<br />
<br />
This is the XML file that describes a group of sounds. One of those sounds will be randomly chosen and played whenever the sound group is triggered.<br><br />
<br />
The file will specify a count of the number of <code>variants</code> that exist, and a sound file will need to exist for each of those variants.<br><br />
For a Sound Group XML with three variants, the XML file and and corresponding sound variants should follow a naming scheme like this:<br />
* <code>Data/Sounds/example_subdir/example_sound_group.xml</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_1.wav</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_2.wav</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_3.wav</code><br><br />
<br />
== Sound Group XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<soundgroup<br />
variants = "3"<br />
delay = "5.3"<br />
volume = "0.1"<br />
max_distance = "77.5"<br />
/><br />
</pre><br />
<br />
== Sound Group element -> variants attribute ==<br />
<pre><br />
<soundgroup variants = "3" /><br />
</pre><br />
<br />
'''Optional''' - Integer value. '''Default''': 1.<br><br />
The count of variants. There must also be a corresponding <code>SoundGroupXmlName_1.wav</code> file for every variant, numbered incrementally up to the variant count.<br><br />
E.g. if there was 3 variants, there would need to be files named <code>SoundGroupXmlName_1.wav</code>, <code>SoundGroupXmlName_2.wav</code>, and <code>SoundGroupXmlName_3.wav</code>.<br />
<br />
== Sound Group element -> delay attribute ==<br />
<pre><br />
<soundgroup delay = "5.3" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0.<br><br />
A delay to add to the start of sound playback, in seconds.<br />
<br />
== Sound Group element -> volume attribute ==<br />
<pre><br />
<soundgroup volume = "0.1" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0.<br><br />
The volume to play back the sound.<br><br />
This is further multiplied by the gain specified when triggering the sound group in gameplay code.<br />
<br />
== Sound Group element -> max_distance attribute ==<br />
<pre><br />
<soundgroup max_distance = "77.5" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 30.0.<br><br />
The maximum distance that the sound can be heard by the player.<br><br />
It will be overridden by the <code>max_distance</code> in the collision sound event, in the [[Xml File Formats#Material XML -> Events element -> Event element|Material XML]], if specified for the given collision sound event.<br />
<br />
= Synced Animation Group XML =<br />
<br />
'''TODO:'''<br />
<br />
= Version Manifest XML =<br />
<br />
'''TODO:'''<br />
<br />
= Voice XML =<br />
<br />
'''TODO:'''</div>Merlynhttp://wiki.wolfire.com/index.php?title=Xml_File_Formats&diff=6234Xml File Formats2023-09-10T10:32:03Z<p>Merlyn: /* ColorTint element -> g attribute */</p>
<hr />
<div>= TODO: =<br />
<br />
Level, Saved Object, Prefab - These have more confusing schemas, to the point where I'm not entirely sure they're distinct types from one another, and I haven't nailed them down yet -merlyn<br />
<br />
= Actor XML =<br />
<br />
This is the top-level XML file for an NPC or combat character. It binds a [[Xml File Formats#Character XML|Character XML]] file to an [[Character Scripting|AI angelscript]] file.<br><br />
When a level references a character, this is the file type that is referenced.<br />
<br />
== Actor XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<Actor><br />
<Character>Data/Characters/rabbot.xml</Character><br />
<ControlScript>enemycontrol.as</ControlScript><br />
</Actor><br />
</pre><br />
<br />
== Actor XML -> Character element ==<br />
<pre><br />
<Actor><br />
<Character>Data/Characters/rabbot.xml</Character><br />
...<br />
</Actor><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Xml File Formats#Character XML|Character XML]]<br />
<br />
== Actor XML -> ControlScript element ==<br />
<pre><br />
<Actor><br />
...<br />
<ControlScript>enemycontrol.as</ControlScript><br />
</Actor><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Character Scripting|AI angelscript]]. Relative to <code>Data/Scripts</code> folder<br />
<br />
= Asset Preload XML =<br />
<br />
'''TODO:'''<br />
<br />
= Attachment XML =<br />
<br />
'''TODO:'''<br />
<br />
= Attack XML =<br />
<br />
'''TODO:'''<br />
<br />
= Character XML =<br />
<br />
'''TODO:'''<br />
<br />
= Decal XML =<br />
<br />
'''TODO:'''<br />
<br />
= Events XML =<br />
<br />
'''TODO:'''<br />
<br />
= Hotspot XML =<br />
<br />
This is the top-level XML file for a hotspot game object. It specifies the billboard image, and the [[Hotspot Scripting|Hotspot angelscript]] file.<br><br />
When a level references a hotspot, this is the file type that is referenced.<br />
<br />
== Hotspot XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<Type>generic</Type><br />
<Hotspot><br />
<BillboardColorMap>Data/UI/spawner/thumbs/Hotspot/empty.png</BillboardColorMap><br />
<Script>hotspots/sound_hotspot.as</Script><br />
</Hotspot><br />
</pre><br />
<br />
== Hotspot XML -> Type element ==<br />
<pre><br />
<Type>generic</Type><br />
<Hotspot><br />
...<br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. This should always have the value <code><Type>generic</Type></code>.<br><br />
Note: Having two document elements is not valid XML, and I'm not sure what purpose this element serves. But leave it in, since all the hotspots do it. -merlyn<br />
<br />
== Hotspot XML -> Character element ==<br />
<pre><br />
<Hotspot><br />
<BillboardColorMap>Data/UI/spawner/thumbs/Hotspot/empty.png</BillboardColorMap><br />
...<br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. Path to image file. If you don't want a billboard image, you can use <code>Data/UI/spawner/thumbs/Hotspot/empty.png</code>.<br />
<br />
== Hotspot XML -> Script element ==<br />
<pre><br />
<Hotspot><br />
...<br />
<Script>hotspots/sound_hotspot.as</Script><br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Hotspot Scripting|Hotspot angelscript]]. Relative to <code>Data/Scripts</code> folder.<br />
<br />
= Item XML =<br />
<br />
'''TODO:'''<br />
<br />
= Layered Song XML =<br />
<br />
'''TODO:'''<br />
<br />
= Level Meta XML =<br />
<br />
'''TODO:'''<br />
<br />
= Material XML =<br />
<br />
This XML file specifies the sounds that will be played when a character or item interacts with a world object. It is used to model the sound differences between wood, metal, soil, ice, etc.<br><br />
<br />
<code>Data/Materials/default.xml</code> is the global "default" material, if the material isn't specified by the world object.<br><br />
<br />
When the engine or a gameplay script detects a physics event, the code will do a lookup against the current material, for an event with that event name. If the event name is found, then the corresponding sound will be triggered.<br><br />
<br />
Some of these events and materials might specify modifiers (<code>soft</code>, <code>heavy</code>, etc). If they do, the code will first do the lookup against the <code><events mod="themod"></code> version of the event.<br><br />
If an event with the given name is not found with that modifier, the code will then lookup a version of the same event name, but with no modifiers specified.<br><br />
<br />
Some of the values, if not specified, will look at a global "base" material to find the value of the parameter. <code>max_distance</code> is the only one of those parameters right now.<br />
<br />
<code>Data/Materials/base.xml</code> is the global "base" material.<br><br />
<br />
== Material XML Example ==<br />
From <code>Data/Materials/dirt.xml</code> - this is not the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_light_dirt.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_medium_dirt.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_heavy_dirt.xml" attached="true"/><br />
<-- Note: more sound events in the real file than just these --><br />
</events> <br />
<events mod="soft"><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
</events><br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"<br />
shader="stepdecalfast"/><br />
<skid color="Data/Textures/Decals/Footprints/rabbitdirtsmear_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtsmear_n.tga"<br />
shader="stepdecalfast"/><br />
</decals><br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
<skid path="Data/Particles/heavydirt.xml"/><br />
</particles><br />
<physics hardness = "0.8" friction = "1.0" sharp_penetration = "1.0" /><br />
</material><br />
</pre><br />
<br />
From <code>Data/Materials/default.xml</code>, which is the default Material XML file. It is used when other XML file types call for a Material XML, but one is not specified.<br><br />
This is the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
<rightrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
<leftwallstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_wallrun.xml" attached="true"/><br />
<rightwallstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_wallrun.xml" attached="true"/><br />
<leftwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_walk.xml" attached="true"/><br />
<rightwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_walk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<land soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land.xml" attached="true"/><br />
<land_soft soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land_soft.xml" attached="true"/><br />
<land_slide soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land_slide.xml" attached="true"/><br />
<slide soundgroup="Data/Sounds/concrete_foley/slide_concrete_short.xml" attached="true"/><br />
<kick soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_kick.xml" attached="true"/><br />
<sweep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_sweep.xml" attached="true"/><br />
<jump soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump.xml" attached="true"/><br />
<roll soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_roll.xml" attached="true"/><br />
<edge_grab soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_edge_grab.xml" attached="true"/><br />
<edge_crawl soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_edgecrawl.xml" attached="true"/><br />
<bodyfall soundgroup="Data/Sounds/concrete_foley/bf_concrete.xml" attached="true"/><br />
<bodyfall_light soundgroup="Data/Sounds/concrete_foley/bf_concrete_light.xml" attached="true"/><br />
<bodyfall_medium soundgroup="Data/Sounds/concrete_foley/bf_concrete_medium.xml" attached="true"/><br />
<bodyfall_heavy soundgroup="Data/Sounds/concrete_foley/bf_concrete_heavy.xml" attached="true"/><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_light_stone.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_medium_stone.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_heavy_stone.xml" attached="true"/><br />
<blood_spatter soundgroup="Data/Sounds/blood/spatter_hard.xml"/><br />
<blood_drip soundgroup="Data/Sounds/blood/drip_lowpass.xml"/><br />
</events><br />
<events mod="heavy"><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_run.xml" attached="true"/><br />
<rightrunstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_run.xml" attached="true"/><br />
<leftwallstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_wallrun.xml" attached="true"/><br />
<rightwallstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_wallrun.xml" attached="true"/><br />
<leftwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_walk.xml" attached="true"/><br />
<rightwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_walk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<land soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<land_soft soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<land_slide soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<kick soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_kick.xml" attached="true"/><br />
<sweep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_sweep.xml" attached="true"/><br />
<jump soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump.xml" attached="true"/><br />
<roll soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_roll.xml" attached="true"/><br />
<edge_grab soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_edge_grab.xml" attached="true"/><br />
</events><br />
<events mod="soft"><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
</events><br />
<physics hardness = "1.0" friction = "1.0" sharp_penetration = "0.0" /><br />
</material><br />
</pre><br />
<br />
From <code>Data/Materials/base.xml</code>, which specifies the default '''max_distance''' values for all materials.<br><br />
This is the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<leftrunstep max_distance = "40.0"/><br />
<rightrunstep max_distance = "40.0"/><br />
<leftwallstep max_distance = "40.0"/><br />
<rightwallstep max_distance = "40.0"/><br />
<leftwalkstep max_distance = "25.0"/><br />
<rightwalkstep max_distance = "25.0"/><br />
<leftcrouchwalkstep max_distance = "10.0"/><br />
<rightcrouchwalkstep max_distance = "10.0"/><br />
<land max_distance = "60.0"/><br />
<land_soft max_distance = "30.0"/><br />
<land_slide max_distance = "20.0"/><br />
<slide max_distance = "30.0"/><br />
<kick max_distance = "25.0"/><br />
<sweep max_distance = "25.0"/><br />
<jump max_distance = "40.0"/><br />
<roll max_distance = "15.0"/><br />
<edge_grab max_distance = "25.0"/><br />
<edge_crawl max_distance = "15.0"/><br />
<bodyfall max_distance = "80.0"/><br />
<bodyfall_light max_distance = "40.0"/><br />
<bodyfall_medium max_distance = "60.0"/><br />
<bodyfall_heavy max_distance = "80.0"/><br />
<weapon_drop_light max_distance = "80.0"/><br />
<weapon_drop_medium max_distance = "80.0"/><br />
<weapon_drop_heavy max_distance = "80.0"/><br />
<blood_spatter max_distance = "30.0"/><br />
<blood_drip max_distance = "20.0"/><br />
<flip max_distance = "20.0"/><br />
<choke_grab max_distance = "10.0"/>;<br />
<choke_move max_distance = "10.0"/>;<br />
<choke_fall max_distance = "10.0"/>;<br />
</events><br />
<events mod="heavy"><br />
<leftrunstep max_distance = "50.0"/><br />
<rightrunstep max_distance = "50.0"/><br />
<leftwallstep max_distance = "50.0"/><br />
<rightwallstep max_distance = "50.0"/><br />
<leftwalkstep max_distance = "30.0"/><br />
<rightwalkstep max_distance = "30.0"/><br />
<leftcrouchwalkstep max_distance = "20.0"/><br />
<rightcrouchwalkstep max_distance = "20.0"/><br />
<land max_distance = "80.0"/><br />
<land_soft max_distance = "40.0"/><br />
<land_slide max_distance = "40.0"/><br />
<kick max_distance = "30.0"/><br />
<sweep max_distance = "30.0"/><br />
<jump max_distance = "50.0"/><br />
<roll max_distance = "25.0"/><br />
<edge_grab max_distance = "40.0"/><br />
</events><br />
</material><br />
</pre><br />
<br />
== Material XML -> Events element ==<br />
<pre><br />
<material><br />
<events><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision sound events for the material.<br />
<br />
=== Events element -> mod attribute ===<br />
<br />
<pre><br />
<material><br />
<events mod="soft"><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
'''Optional''' - String value. Specifies that this list of collision sound events only apply when the given modifier is specified.<br><br />
The modifiers are different ways the sounds will be presented, such as <code>soft</code>, <code>heavy</code>, etc.<br />
<br />
== Material XML -> Events element -> Sound element ==<br />
<pre><br />
<material><br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true" max_distance = "40.0"/><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
The sound (and physical properties of the sound) for a given collision sound event. The name of the element corresponds to the name of the collision sound event (in this example, '''leftrunstep''').<br />
<br />
=== Sound element -> soundgroup attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - String value. Specifies the [[Xml File Formats#Sound Group XML|Sound Group XML]] for the material interaction event.<br><br />
'''TODO:''': Is this really optional? If so, what is the default behavior?<br />
<br />
=== Sound element -> attached attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep attached="true"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - Boolean value. '''Default''': false<br><br />
If true, the sound (group) will be played as a sound that is attached to the character that triggered the collision sound event.<br />
<br />
=== Sound element -> max_distance attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep max_distance = "40.0"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0<br><br />
The max distance that the sound will still be audible to the player.<br><br />
If the value is 0.0, then the max distance will be considered infinite.<br><br />
If it is not specified for a given sound collision event, then the corresponding value in <code>Data/Materials/base.xml</code> will be used instead.<br />
<br />
== Material XML -> Decals element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision decal events for the material.<br />
<br />
== Material XML -> Decals element -> Decal element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"<br />
shader="stepdecalfast"/><br />
<skid color="Data/Textures/Decals/Footprints/rabbitdirtsmear_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtsmear_n.tga"<br />
shader="stepdecalfast"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
The decal (and rendering properties of the decal) for a given collision decal event. The name of the element corresponds to the name of the collision decal event (in these examples, '''step''' and '''skid''').<br />
<br />
=== Decal element -> color attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the decal's color texture.<br />
<br />
=== Decal element -> normal attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the decal's normal texture.<br />
<br />
=== Decal element -> shader attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step shader="stepdecalfast"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the shader name that will be used when rendering the decal.<br />
<br />
== Material XML -> Particles element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
...<br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision particle events for the material. <br />
<br />
== Material XML -> Particles element -> Particle element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
<skid path="Data/Particles/heavydirt.xml"/><br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
The particle for a given collision particle event. The name of the element corresponds to the name of the collision particle event (in these examples, '''step''' and '''skid'''). <br />
<br />
=== Particle element -> path attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
...<br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Xml File Formats#Particle XML|Particle XML]]<br />
<br />
== Material XML -> Physics element ==<br />
<br />
<pre><br />
<material><br />
<physics hardness = "0.8" friction = "1.0" sharp_penetration = "1.0" /><br />
</material><br />
</pre><br />
<br />
The physics properties of the the material. Collision gameplay events will use these properties to determine how to make other objects respond when they collide with the object this material is applied to.<br />
<br />
=== Physics element -> hardness attribute ===<br />
<br />
<pre><br />
<material><br />
<physics hardness = "0.8"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0<br><br />
'''TODO: Describe'''<br />
<br />
=== Physics element -> friction attribute ===<br />
<br />
<pre><br />
<material><br />
<physics friction = "1.0"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0<br><br />
The friction between any other object and the object this material is applied to.<br><br />
In real life this would depend on the materials for both objects, but the game makes simplifying assumptions to make the mapping a bit less complicated.<br />
<br />
=== Physics element -> sharp_penetration attribute ===<br />
<br />
<pre><br />
<material><br />
<physics sharp_penetration = "1.0"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0<br><br />
'''TODO: Describe'''<br />
<br />
= Mod XML =<br />
<br />
'''TODO:'''<br />
<br />
= Music XML =<br />
<br />
'''TODO:'''<br />
<br />
= Nav Mesh Meta XML =<br />
<br />
'''TODO:'''<br />
<br />
= Object XML =<br />
<br />
This is the top-level XML file for a level object. It specifies visual parameters, some gameplay parameters, and paths for visual assets.<br><br />
Other XML file types reference this XML file type, such as [[Xml File Formats#Character XML|Character XML files]] and [[Xml File Formats#Item XML|Item XML files]].<br />
<br />
== Object XML Example ==<br />
<br />
<pre><br />
<?xml version="1.0" ?><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
<Label>impale</Label><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gray_metal_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gray_metal_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/cat_cobbles_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/cat_cobbles_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gold_hexagons_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gold_hexagons_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
</DetailMaps><br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="2" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="20" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/Objects/Environment/Rocks/lichen_rock_a.xml" weight_path="Data/Textures/Terrain/forest_hills/forest_hills_not_grass.tga"<br />
normal_conform="1" density="20" min_embed="0.3" max_embed="0.7" min_scale="0.08" max_scale="0.12"<br />
view_distance="10" jitter_degrees="45" overbright="0.4" tint_weight="0.5" collision_type="static" /><br />
</DetailObjects><br />
<ShaderName>detailmap4</ShaderName><br />
<avg_color r = "100" g = "128" b = "47" /><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
<GroundOffset>0.5</GroundOffset><br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
== Object XML -> Model element ==<br />
<br />
<pre><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the obj format model file.<br />
<br />
=== Model element -> element text ===<br />
<br />
<pre><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
</pre><br />
<br />
'''Required''' - String value. Path to the obj format model file.<br />
<br />
== Object XML -> ColorMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the color map texture for the object.<br />
<br />
=== ColorMap element -> element text ===<br />
<br />
<pre><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color map texture for the object.<br />
<br />
== Object XML -> NormalMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the normal map texture for the object.<br />
<br />
=== NormalMap element -> element text ===<br />
<br />
<pre><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the normal map texture for the object.<br />
<br />
== Object XML -> TranslucencyMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the translucency map texture for the object.<br />
<br />
=== TranslucencyMap element -> element text ===<br />
<br />
<pre><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the translucency map texture for the object.<br />
<br />
== Object XML -> WindMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the wind map texture for the object.<br />
<br />
=== WindMap element -> element text ===<br />
<br />
<pre><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the wind map texture for the object.<br />
<br />
== Object XML -> SharpnessMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br><br />
'''TODO''': links to/from other file types for this field?<br />
<br />
=== SharpnessMap element -> element text ===<br />
<br />
<pre><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br />
<br />
== Object XML -> Label element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Label>impale</Label><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - This is referenced by gameplay scripts to figure out if this object is one of a more generalized type.<br />
<br />
=== Label element -> element text ===<br />
<br />
<pre><br />
<Label>impale</Label><br />
</pre><br />
<br />
'''Required''' - String value. This is referenced by gameplay scripts to figure out if this object is one of a more generalized type.<br />
<br />
== Object XML -> WeightMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the weight map texture for the object.<br />
<br />
=== WeightMap element -> element text ===<br />
<br />
<pre><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the weight map texture for the object.<br />
<br />
== Object XML -> PaletteMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies a set of different tintable areas on this object. The labels are the text displayed in the editor interface. Each color channel of the specified image will be used as a mask to specify where on the object's model the tinting should be limited to.<br />
<br />
=== PaletteMap element -> element text ===<br />
<br />
<pre><br />
<PaletteMap ...><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color masks, used when there's tint parameters that limit the tint to a specific area on the object, such as character clothing colors, a tintable area on a weapon, etc.<br />
<br />
=== PaletteMap element -> label_red attribute ===<br />
<br />
<pre><br />
<PaletteMap label_red="Clothing Color 1"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the red channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_green attribute ===<br />
<br />
<pre><br />
<PaletteMap label_green="Clothing Color 2"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the green channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_blue attribute ===<br />
<br />
<pre><br />
<PaletteMap label_blue="Clothing Color 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the blue channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_alpha attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 4"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the alpha channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_other attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 5"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the "other" channel of the tint mask image.<br><br />
'''TODO''': What the heck even is a "other" channel on an image? Does this even do anything in code, besides get parsed? -merlyn<br />
<br />
== Object XML -> DetailMaps element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
...<br />
</DetailMaps><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary material layers that provide fine, repeated visual detail on top of the object's main texture layers.<br />
<br />
== Object XML -> DetailMaps element -> DetailMap element ==<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
</pre><br />
<br />
'''Optional''' - The parameters for the detail map textures that repeat across the model, providing finer-scale detail. There can be up to four of these.<br />
<br />
=== DetailMap element -> colorpath attribute ===<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for this detail map's color map texture.<br />
<br />
=== DetailMap element -> normalpath attribute ===<br />
<br />
<pre><br />
<DetailMap normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the detail map's normal map texture.<br />
<br />
=== DetailMap element -> materialpath attribute ===<br />
<br />
<pre><br />
<DetailMap materialpath="Data/Materials/wood.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the given detail map level.<br><br />
'''TODO''': What is this used for? Aren't detail maps a visual-only thing? -merlyn<br />
<br />
== Object XML -> DetailObjects element ==<br />
<br />
== Object XML -> DetailObjects element -> DetailObject element ==<br />
<br />
=== DetailObject element -> obj_path attribute ===<br />
=== DetailObject element -> weight_path attribute ===<br />
=== DetailObject element -> normal_conform attribute ===<br />
=== DetailObject element -> density attribute ===<br />
=== DetailObject element -> min_embed attribute ===<br />
=== DetailObject element -> max_embed attribute ===<br />
=== DetailObject element -> min_scale attribute ===<br />
=== DetailObject element -> max_scale attribute ===<br />
=== DetailObject element -> view_distance attribute ===<br />
=== DetailObject element -> jitter_degrees attribute ===<br />
=== DetailObject element -> overbright attribute ===<br />
=== DetailObject element -> tint_weight attribute ===<br />
=== DetailObject element -> collision_type attribute ===<br />
<br />
== Object XML -> ShaderName element ==<br />
<br />
=== ShaderName element -> element text ===<br />
<br />
== Object XML -> avg_color element ==<br />
<br />
=== avg_color element -> r attribute ===<br />
=== avg_color element -> g attribute ===<br />
=== avg_color element -> b attribute ===<br />
<br />
== Object XML -> MaterialPath element ==<br />
<br />
=== MaterialPath element -> element text ===<br />
<br />
== Object XML -> Flags element ==<br />
<br />
=== Flags element -> transparent attribtue ===<br />
=== Flags element -> no_collision attribtue ===<br />
=== Flags element -> clamp_texture attribtue ===<br />
=== Flags element -> bush_collision attribtue ===<br />
=== Flags element -> terrain_fixed attribtue ===<br />
=== Flags element -> dynamic attribtue ===<br />
=== Flags element -> double_sided attribtue ===<br />
<br />
== Object XML -> GroundOffset element ==<br />
<br />
=== GroundOffset element -> element text ===<br />
<br />
== Object XML -> ColorTint element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should be tinted, by default. This can be overridden in the editor after the object is placed in the world.<br />
<br />
=== ColorTint element -> r attribute ===<br />
<br />
<pre><br />
<ColorTint r = "101" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> g attribute ===<br />
<br />
<pre><br />
<ColorTint ... g = "129" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> b attribute ===<br />
<br />
<pre><br />
<ColorTint ... b = "46" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
= Particle XML =<br />
<br />
'''TODO:'''<br />
<br />
= Path XML =<br />
<br />
'''TODO:'''<br />
<br />
= Reaction XML =<br />
<br />
'''TODO:'''<br />
<br />
= Retarget XML =<br />
<br />
'''TODO:'''<br />
<br />
= Rig XML =<br />
<br />
This is the XML file for a character skeleton. It binds a [[Xml File Formats#Character XML|Character XML]] file to an [[Character Scripting|AI angelscript]] file.<br><br />
When a level references a character, this is the file type that is referenced.<br />
<br />
== Rig XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<rig bone_path = "Data/Skeletons/r_wolf2.phxbn"<br />
model_path = "Data/Models/Characters/IGF_Wolf/IGF_Wolf.obj"<br />
mass_path = "Data/Skeletons/r_lt_dog.xml"/><br />
</pre><br />
<br />
== Rig element -> bone_path attribute ==<br />
<pre><br />
<rig bone_path = "Data/Skeletons/r_wolf2.phxbn"/><br />
</pre><br />
<br />
'''Required''' - String value. Path to the skeleton file, using the custom Phoenix Engine skeleton file type ([[Binary File Formats#PHXBN|PHXBN]]. This file MUST have been exported using the mesh specified in <code>model_path</code>.<br />
<br />
== Rig element -> model_path attribute ==<br />
<pre><br />
<rig model_path = "Data/Models/Characters/IGF_Wolf/IGF_Wolf.obj"/><br />
</pre><br />
<br />
'''Required''' - String value. Path to Obj model file to use as skinned the character mesh. This file MUST be the same as the one used when exporting the skeleton specified in <code>bone_path</code>.<br />
<br />
== Rig element -> mass_path attribute ==<br />
<pre><br />
<rig mass_path = "Data/Skeletons/r_lt_dog.xml"/><br />
</pre><br />
<br />
'''Optional''' - String value. Path to [[Xml File Formats#Rig XML|Rig XML]]. Used to override the current skeleton with the bone masses from a different skeleton.<br><br />
'''TODO''': Why you'd want to do this? Who knows! -merlyn<br />
<br />
= Shader Preload XML =<br />
<br />
'''TODO:'''<br />
<br />
= Sound Group XML =<br />
<br />
This is the XML file that describes a group of sounds. One of those sounds will be randomly chosen and played whenever the sound group is triggered.<br><br />
<br />
The file will specify a count of the number of <code>variants</code> that exist, and a sound file will need to exist for each of those variants.<br><br />
For a Sound Group XML with three variants, the XML file and and corresponding sound variants should follow a naming scheme like this:<br />
* <code>Data/Sounds/example_subdir/example_sound_group.xml</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_1.wav</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_2.wav</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_3.wav</code><br><br />
<br />
== Sound Group XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<soundgroup<br />
variants = "3"<br />
delay = "5.3"<br />
volume = "0.1"<br />
max_distance = "77.5"<br />
/><br />
</pre><br />
<br />
== Sound Group element -> variants attribute ==<br />
<pre><br />
<soundgroup variants = "3" /><br />
</pre><br />
<br />
'''Optional''' - Integer value. '''Default''': 1.<br><br />
The count of variants. There must also be a corresponding <code>SoundGroupXmlName_1.wav</code> file for every variant, numbered incrementally up to the variant count.<br><br />
E.g. if there was 3 variants, there would need to be files named <code>SoundGroupXmlName_1.wav</code>, <code>SoundGroupXmlName_2.wav</code>, and <code>SoundGroupXmlName_3.wav</code>.<br />
<br />
== Sound Group element -> delay attribute ==<br />
<pre><br />
<soundgroup delay = "5.3" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0.<br><br />
A delay to add to the start of sound playback, in seconds.<br />
<br />
== Sound Group element -> volume attribute ==<br />
<pre><br />
<soundgroup volume = "0.1" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0.<br><br />
The volume to play back the sound.<br><br />
This is further multiplied by the gain specified when triggering the sound group in gameplay code.<br />
<br />
== Sound Group element -> max_distance attribute ==<br />
<pre><br />
<soundgroup max_distance = "77.5" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 30.0.<br><br />
The maximum distance that the sound can be heard by the player.<br><br />
It will be overridden by the <code>max_distance</code> in the collision sound event, in the [[Xml File Formats#Material XML -> Events element -> Event element|Material XML]], if specified for the given collision sound event.<br />
<br />
= Synced Animation Group XML =<br />
<br />
'''TODO:'''<br />
<br />
= Version Manifest XML =<br />
<br />
'''TODO:'''<br />
<br />
= Voice XML =<br />
<br />
'''TODO:'''</div>Merlynhttp://wiki.wolfire.com/index.php?title=Xml_File_Formats&diff=6233Xml File Formats2023-09-10T10:31:50Z<p>Merlyn: /* Object XML -> ColorTint element */</p>
<hr />
<div>= TODO: =<br />
<br />
Level, Saved Object, Prefab - These have more confusing schemas, to the point where I'm not entirely sure they're distinct types from one another, and I haven't nailed them down yet -merlyn<br />
<br />
= Actor XML =<br />
<br />
This is the top-level XML file for an NPC or combat character. It binds a [[Xml File Formats#Character XML|Character XML]] file to an [[Character Scripting|AI angelscript]] file.<br><br />
When a level references a character, this is the file type that is referenced.<br />
<br />
== Actor XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<Actor><br />
<Character>Data/Characters/rabbot.xml</Character><br />
<ControlScript>enemycontrol.as</ControlScript><br />
</Actor><br />
</pre><br />
<br />
== Actor XML -> Character element ==<br />
<pre><br />
<Actor><br />
<Character>Data/Characters/rabbot.xml</Character><br />
...<br />
</Actor><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Xml File Formats#Character XML|Character XML]]<br />
<br />
== Actor XML -> ControlScript element ==<br />
<pre><br />
<Actor><br />
...<br />
<ControlScript>enemycontrol.as</ControlScript><br />
</Actor><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Character Scripting|AI angelscript]]. Relative to <code>Data/Scripts</code> folder<br />
<br />
= Asset Preload XML =<br />
<br />
'''TODO:'''<br />
<br />
= Attachment XML =<br />
<br />
'''TODO:'''<br />
<br />
= Attack XML =<br />
<br />
'''TODO:'''<br />
<br />
= Character XML =<br />
<br />
'''TODO:'''<br />
<br />
= Decal XML =<br />
<br />
'''TODO:'''<br />
<br />
= Events XML =<br />
<br />
'''TODO:'''<br />
<br />
= Hotspot XML =<br />
<br />
This is the top-level XML file for a hotspot game object. It specifies the billboard image, and the [[Hotspot Scripting|Hotspot angelscript]] file.<br><br />
When a level references a hotspot, this is the file type that is referenced.<br />
<br />
== Hotspot XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<Type>generic</Type><br />
<Hotspot><br />
<BillboardColorMap>Data/UI/spawner/thumbs/Hotspot/empty.png</BillboardColorMap><br />
<Script>hotspots/sound_hotspot.as</Script><br />
</Hotspot><br />
</pre><br />
<br />
== Hotspot XML -> Type element ==<br />
<pre><br />
<Type>generic</Type><br />
<Hotspot><br />
...<br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. This should always have the value <code><Type>generic</Type></code>.<br><br />
Note: Having two document elements is not valid XML, and I'm not sure what purpose this element serves. But leave it in, since all the hotspots do it. -merlyn<br />
<br />
== Hotspot XML -> Character element ==<br />
<pre><br />
<Hotspot><br />
<BillboardColorMap>Data/UI/spawner/thumbs/Hotspot/empty.png</BillboardColorMap><br />
...<br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. Path to image file. If you don't want a billboard image, you can use <code>Data/UI/spawner/thumbs/Hotspot/empty.png</code>.<br />
<br />
== Hotspot XML -> Script element ==<br />
<pre><br />
<Hotspot><br />
...<br />
<Script>hotspots/sound_hotspot.as</Script><br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Hotspot Scripting|Hotspot angelscript]]. Relative to <code>Data/Scripts</code> folder.<br />
<br />
= Item XML =<br />
<br />
'''TODO:'''<br />
<br />
= Layered Song XML =<br />
<br />
'''TODO:'''<br />
<br />
= Level Meta XML =<br />
<br />
'''TODO:'''<br />
<br />
= Material XML =<br />
<br />
This XML file specifies the sounds that will be played when a character or item interacts with a world object. It is used to model the sound differences between wood, metal, soil, ice, etc.<br><br />
<br />
<code>Data/Materials/default.xml</code> is the global "default" material, if the material isn't specified by the world object.<br><br />
<br />
When the engine or a gameplay script detects a physics event, the code will do a lookup against the current material, for an event with that event name. If the event name is found, then the corresponding sound will be triggered.<br><br />
<br />
Some of these events and materials might specify modifiers (<code>soft</code>, <code>heavy</code>, etc). If they do, the code will first do the lookup against the <code><events mod="themod"></code> version of the event.<br><br />
If an event with the given name is not found with that modifier, the code will then lookup a version of the same event name, but with no modifiers specified.<br><br />
<br />
Some of the values, if not specified, will look at a global "base" material to find the value of the parameter. <code>max_distance</code> is the only one of those parameters right now.<br />
<br />
<code>Data/Materials/base.xml</code> is the global "base" material.<br><br />
<br />
== Material XML Example ==<br />
From <code>Data/Materials/dirt.xml</code> - this is not the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_light_dirt.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_medium_dirt.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_heavy_dirt.xml" attached="true"/><br />
<-- Note: more sound events in the real file than just these --><br />
</events> <br />
<events mod="soft"><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
</events><br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"<br />
shader="stepdecalfast"/><br />
<skid color="Data/Textures/Decals/Footprints/rabbitdirtsmear_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtsmear_n.tga"<br />
shader="stepdecalfast"/><br />
</decals><br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
<skid path="Data/Particles/heavydirt.xml"/><br />
</particles><br />
<physics hardness = "0.8" friction = "1.0" sharp_penetration = "1.0" /><br />
</material><br />
</pre><br />
<br />
From <code>Data/Materials/default.xml</code>, which is the default Material XML file. It is used when other XML file types call for a Material XML, but one is not specified.<br><br />
This is the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
<rightrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
<leftwallstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_wallrun.xml" attached="true"/><br />
<rightwallstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_wallrun.xml" attached="true"/><br />
<leftwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_walk.xml" attached="true"/><br />
<rightwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_walk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<land soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land.xml" attached="true"/><br />
<land_soft soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land_soft.xml" attached="true"/><br />
<land_slide soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land_slide.xml" attached="true"/><br />
<slide soundgroup="Data/Sounds/concrete_foley/slide_concrete_short.xml" attached="true"/><br />
<kick soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_kick.xml" attached="true"/><br />
<sweep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_sweep.xml" attached="true"/><br />
<jump soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump.xml" attached="true"/><br />
<roll soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_roll.xml" attached="true"/><br />
<edge_grab soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_edge_grab.xml" attached="true"/><br />
<edge_crawl soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_edgecrawl.xml" attached="true"/><br />
<bodyfall soundgroup="Data/Sounds/concrete_foley/bf_concrete.xml" attached="true"/><br />
<bodyfall_light soundgroup="Data/Sounds/concrete_foley/bf_concrete_light.xml" attached="true"/><br />
<bodyfall_medium soundgroup="Data/Sounds/concrete_foley/bf_concrete_medium.xml" attached="true"/><br />
<bodyfall_heavy soundgroup="Data/Sounds/concrete_foley/bf_concrete_heavy.xml" attached="true"/><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_light_stone.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_medium_stone.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_heavy_stone.xml" attached="true"/><br />
<blood_spatter soundgroup="Data/Sounds/blood/spatter_hard.xml"/><br />
<blood_drip soundgroup="Data/Sounds/blood/drip_lowpass.xml"/><br />
</events><br />
<events mod="heavy"><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_run.xml" attached="true"/><br />
<rightrunstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_run.xml" attached="true"/><br />
<leftwallstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_wallrun.xml" attached="true"/><br />
<rightwallstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_wallrun.xml" attached="true"/><br />
<leftwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_walk.xml" attached="true"/><br />
<rightwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_walk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<land soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<land_soft soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<land_slide soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<kick soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_kick.xml" attached="true"/><br />
<sweep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_sweep.xml" attached="true"/><br />
<jump soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump.xml" attached="true"/><br />
<roll soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_roll.xml" attached="true"/><br />
<edge_grab soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_edge_grab.xml" attached="true"/><br />
</events><br />
<events mod="soft"><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
</events><br />
<physics hardness = "1.0" friction = "1.0" sharp_penetration = "0.0" /><br />
</material><br />
</pre><br />
<br />
From <code>Data/Materials/base.xml</code>, which specifies the default '''max_distance''' values for all materials.<br><br />
This is the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<leftrunstep max_distance = "40.0"/><br />
<rightrunstep max_distance = "40.0"/><br />
<leftwallstep max_distance = "40.0"/><br />
<rightwallstep max_distance = "40.0"/><br />
<leftwalkstep max_distance = "25.0"/><br />
<rightwalkstep max_distance = "25.0"/><br />
<leftcrouchwalkstep max_distance = "10.0"/><br />
<rightcrouchwalkstep max_distance = "10.0"/><br />
<land max_distance = "60.0"/><br />
<land_soft max_distance = "30.0"/><br />
<land_slide max_distance = "20.0"/><br />
<slide max_distance = "30.0"/><br />
<kick max_distance = "25.0"/><br />
<sweep max_distance = "25.0"/><br />
<jump max_distance = "40.0"/><br />
<roll max_distance = "15.0"/><br />
<edge_grab max_distance = "25.0"/><br />
<edge_crawl max_distance = "15.0"/><br />
<bodyfall max_distance = "80.0"/><br />
<bodyfall_light max_distance = "40.0"/><br />
<bodyfall_medium max_distance = "60.0"/><br />
<bodyfall_heavy max_distance = "80.0"/><br />
<weapon_drop_light max_distance = "80.0"/><br />
<weapon_drop_medium max_distance = "80.0"/><br />
<weapon_drop_heavy max_distance = "80.0"/><br />
<blood_spatter max_distance = "30.0"/><br />
<blood_drip max_distance = "20.0"/><br />
<flip max_distance = "20.0"/><br />
<choke_grab max_distance = "10.0"/>;<br />
<choke_move max_distance = "10.0"/>;<br />
<choke_fall max_distance = "10.0"/>;<br />
</events><br />
<events mod="heavy"><br />
<leftrunstep max_distance = "50.0"/><br />
<rightrunstep max_distance = "50.0"/><br />
<leftwallstep max_distance = "50.0"/><br />
<rightwallstep max_distance = "50.0"/><br />
<leftwalkstep max_distance = "30.0"/><br />
<rightwalkstep max_distance = "30.0"/><br />
<leftcrouchwalkstep max_distance = "20.0"/><br />
<rightcrouchwalkstep max_distance = "20.0"/><br />
<land max_distance = "80.0"/><br />
<land_soft max_distance = "40.0"/><br />
<land_slide max_distance = "40.0"/><br />
<kick max_distance = "30.0"/><br />
<sweep max_distance = "30.0"/><br />
<jump max_distance = "50.0"/><br />
<roll max_distance = "25.0"/><br />
<edge_grab max_distance = "40.0"/><br />
</events><br />
</material><br />
</pre><br />
<br />
== Material XML -> Events element ==<br />
<pre><br />
<material><br />
<events><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision sound events for the material.<br />
<br />
=== Events element -> mod attribute ===<br />
<br />
<pre><br />
<material><br />
<events mod="soft"><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
'''Optional''' - String value. Specifies that this list of collision sound events only apply when the given modifier is specified.<br><br />
The modifiers are different ways the sounds will be presented, such as <code>soft</code>, <code>heavy</code>, etc.<br />
<br />
== Material XML -> Events element -> Sound element ==<br />
<pre><br />
<material><br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true" max_distance = "40.0"/><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
The sound (and physical properties of the sound) for a given collision sound event. The name of the element corresponds to the name of the collision sound event (in this example, '''leftrunstep''').<br />
<br />
=== Sound element -> soundgroup attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - String value. Specifies the [[Xml File Formats#Sound Group XML|Sound Group XML]] for the material interaction event.<br><br />
'''TODO:''': Is this really optional? If so, what is the default behavior?<br />
<br />
=== Sound element -> attached attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep attached="true"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - Boolean value. '''Default''': false<br><br />
If true, the sound (group) will be played as a sound that is attached to the character that triggered the collision sound event.<br />
<br />
=== Sound element -> max_distance attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep max_distance = "40.0"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0<br><br />
The max distance that the sound will still be audible to the player.<br><br />
If the value is 0.0, then the max distance will be considered infinite.<br><br />
If it is not specified for a given sound collision event, then the corresponding value in <code>Data/Materials/base.xml</code> will be used instead.<br />
<br />
== Material XML -> Decals element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision decal events for the material.<br />
<br />
== Material XML -> Decals element -> Decal element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"<br />
shader="stepdecalfast"/><br />
<skid color="Data/Textures/Decals/Footprints/rabbitdirtsmear_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtsmear_n.tga"<br />
shader="stepdecalfast"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
The decal (and rendering properties of the decal) for a given collision decal event. The name of the element corresponds to the name of the collision decal event (in these examples, '''step''' and '''skid''').<br />
<br />
=== Decal element -> color attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the decal's color texture.<br />
<br />
=== Decal element -> normal attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the decal's normal texture.<br />
<br />
=== Decal element -> shader attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step shader="stepdecalfast"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the shader name that will be used when rendering the decal.<br />
<br />
== Material XML -> Particles element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
...<br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision particle events for the material. <br />
<br />
== Material XML -> Particles element -> Particle element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
<skid path="Data/Particles/heavydirt.xml"/><br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
The particle for a given collision particle event. The name of the element corresponds to the name of the collision particle event (in these examples, '''step''' and '''skid'''). <br />
<br />
=== Particle element -> path attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
...<br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Xml File Formats#Particle XML|Particle XML]]<br />
<br />
== Material XML -> Physics element ==<br />
<br />
<pre><br />
<material><br />
<physics hardness = "0.8" friction = "1.0" sharp_penetration = "1.0" /><br />
</material><br />
</pre><br />
<br />
The physics properties of the the material. Collision gameplay events will use these properties to determine how to make other objects respond when they collide with the object this material is applied to.<br />
<br />
=== Physics element -> hardness attribute ===<br />
<br />
<pre><br />
<material><br />
<physics hardness = "0.8"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0<br><br />
'''TODO: Describe'''<br />
<br />
=== Physics element -> friction attribute ===<br />
<br />
<pre><br />
<material><br />
<physics friction = "1.0"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0<br><br />
The friction between any other object and the object this material is applied to.<br><br />
In real life this would depend on the materials for both objects, but the game makes simplifying assumptions to make the mapping a bit less complicated.<br />
<br />
=== Physics element -> sharp_penetration attribute ===<br />
<br />
<pre><br />
<material><br />
<physics sharp_penetration = "1.0"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0<br><br />
'''TODO: Describe'''<br />
<br />
= Mod XML =<br />
<br />
'''TODO:'''<br />
<br />
= Music XML =<br />
<br />
'''TODO:'''<br />
<br />
= Nav Mesh Meta XML =<br />
<br />
'''TODO:'''<br />
<br />
= Object XML =<br />
<br />
This is the top-level XML file for a level object. It specifies visual parameters, some gameplay parameters, and paths for visual assets.<br><br />
Other XML file types reference this XML file type, such as [[Xml File Formats#Character XML|Character XML files]] and [[Xml File Formats#Item XML|Item XML files]].<br />
<br />
== Object XML Example ==<br />
<br />
<pre><br />
<?xml version="1.0" ?><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
<Label>impale</Label><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gray_metal_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gray_metal_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/cat_cobbles_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/cat_cobbles_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gold_hexagons_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gold_hexagons_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
</DetailMaps><br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="2" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="20" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/Objects/Environment/Rocks/lichen_rock_a.xml" weight_path="Data/Textures/Terrain/forest_hills/forest_hills_not_grass.tga"<br />
normal_conform="1" density="20" min_embed="0.3" max_embed="0.7" min_scale="0.08" max_scale="0.12"<br />
view_distance="10" jitter_degrees="45" overbright="0.4" tint_weight="0.5" collision_type="static" /><br />
</DetailObjects><br />
<ShaderName>detailmap4</ShaderName><br />
<avg_color r = "100" g = "128" b = "47" /><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
<GroundOffset>0.5</GroundOffset><br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
== Object XML -> Model element ==<br />
<br />
<pre><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the obj format model file.<br />
<br />
=== Model element -> element text ===<br />
<br />
<pre><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
</pre><br />
<br />
'''Required''' - String value. Path to the obj format model file.<br />
<br />
== Object XML -> ColorMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the color map texture for the object.<br />
<br />
=== ColorMap element -> element text ===<br />
<br />
<pre><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color map texture for the object.<br />
<br />
== Object XML -> NormalMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the normal map texture for the object.<br />
<br />
=== NormalMap element -> element text ===<br />
<br />
<pre><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the normal map texture for the object.<br />
<br />
== Object XML -> TranslucencyMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the translucency map texture for the object.<br />
<br />
=== TranslucencyMap element -> element text ===<br />
<br />
<pre><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the translucency map texture for the object.<br />
<br />
== Object XML -> WindMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the wind map texture for the object.<br />
<br />
=== WindMap element -> element text ===<br />
<br />
<pre><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the wind map texture for the object.<br />
<br />
== Object XML -> SharpnessMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br><br />
'''TODO''': links to/from other file types for this field?<br />
<br />
=== SharpnessMap element -> element text ===<br />
<br />
<pre><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br />
<br />
== Object XML -> Label element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Label>impale</Label><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - This is referenced by gameplay scripts to figure out if this object is one of a more generalized type.<br />
<br />
=== Label element -> element text ===<br />
<br />
<pre><br />
<Label>impale</Label><br />
</pre><br />
<br />
'''Required''' - String value. This is referenced by gameplay scripts to figure out if this object is one of a more generalized type.<br />
<br />
== Object XML -> WeightMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the weight map texture for the object.<br />
<br />
=== WeightMap element -> element text ===<br />
<br />
<pre><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the weight map texture for the object.<br />
<br />
== Object XML -> PaletteMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies a set of different tintable areas on this object. The labels are the text displayed in the editor interface. Each color channel of the specified image will be used as a mask to specify where on the object's model the tinting should be limited to.<br />
<br />
=== PaletteMap element -> element text ===<br />
<br />
<pre><br />
<PaletteMap ...><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color masks, used when there's tint parameters that limit the tint to a specific area on the object, such as character clothing colors, a tintable area on a weapon, etc.<br />
<br />
=== PaletteMap element -> label_red attribute ===<br />
<br />
<pre><br />
<PaletteMap label_red="Clothing Color 1"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the red channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_green attribute ===<br />
<br />
<pre><br />
<PaletteMap label_green="Clothing Color 2"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the green channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_blue attribute ===<br />
<br />
<pre><br />
<PaletteMap label_blue="Clothing Color 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the blue channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_alpha attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 4"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the alpha channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_other attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 5"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the "other" channel of the tint mask image.<br><br />
'''TODO''': What the heck even is a "other" channel on an image? Does this even do anything in code, besides get parsed? -merlyn<br />
<br />
== Object XML -> DetailMaps element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
...<br />
</DetailMaps><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary material layers that provide fine, repeated visual detail on top of the object's main texture layers.<br />
<br />
== Object XML -> DetailMaps element -> DetailMap element ==<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
</pre><br />
<br />
'''Optional''' - The parameters for the detail map textures that repeat across the model, providing finer-scale detail. There can be up to four of these.<br />
<br />
=== DetailMap element -> colorpath attribute ===<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for this detail map's color map texture.<br />
<br />
=== DetailMap element -> normalpath attribute ===<br />
<br />
<pre><br />
<DetailMap normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the detail map's normal map texture.<br />
<br />
=== DetailMap element -> materialpath attribute ===<br />
<br />
<pre><br />
<DetailMap materialpath="Data/Materials/wood.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the given detail map level.<br><br />
'''TODO''': What is this used for? Aren't detail maps a visual-only thing? -merlyn<br />
<br />
== Object XML -> DetailObjects element ==<br />
<br />
== Object XML -> DetailObjects element -> DetailObject element ==<br />
<br />
=== DetailObject element -> obj_path attribute ===<br />
=== DetailObject element -> weight_path attribute ===<br />
=== DetailObject element -> normal_conform attribute ===<br />
=== DetailObject element -> density attribute ===<br />
=== DetailObject element -> min_embed attribute ===<br />
=== DetailObject element -> max_embed attribute ===<br />
=== DetailObject element -> min_scale attribute ===<br />
=== DetailObject element -> max_scale attribute ===<br />
=== DetailObject element -> view_distance attribute ===<br />
=== DetailObject element -> jitter_degrees attribute ===<br />
=== DetailObject element -> overbright attribute ===<br />
=== DetailObject element -> tint_weight attribute ===<br />
=== DetailObject element -> collision_type attribute ===<br />
<br />
== Object XML -> ShaderName element ==<br />
<br />
=== ShaderName element -> element text ===<br />
<br />
== Object XML -> avg_color element ==<br />
<br />
=== avg_color element -> r attribute ===<br />
=== avg_color element -> g attribute ===<br />
=== avg_color element -> b attribute ===<br />
<br />
== Object XML -> MaterialPath element ==<br />
<br />
=== MaterialPath element -> element text ===<br />
<br />
== Object XML -> Flags element ==<br />
<br />
=== Flags element -> transparent attribtue ===<br />
=== Flags element -> no_collision attribtue ===<br />
=== Flags element -> clamp_texture attribtue ===<br />
=== Flags element -> bush_collision attribtue ===<br />
=== Flags element -> terrain_fixed attribtue ===<br />
=== Flags element -> dynamic attribtue ===<br />
=== Flags element -> double_sided attribtue ===<br />
<br />
== Object XML -> GroundOffset element ==<br />
<br />
=== GroundOffset element -> element text ===<br />
<br />
== Object XML -> ColorTint element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
'''Optional''' - The color that the object should be tinted, by default. This can be overridden in the editor after the object is placed in the world.<br />
<br />
=== ColorTint element -> r attribute ===<br />
<br />
<pre><br />
<ColorTint r = "101" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the red channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> g attribute ===<br />
<br />
<pre><br />
<ColorTint g = "129" ... /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the green channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
=== ColorTint element -> b attribute ===<br />
<br />
<pre><br />
<ColorTint ... b = "46" /><br />
</pre><br />
<br />
'''Required''' - Integer value. Specifies the intensity of the blue channel of the tint color. Value is between <code>0</code> and <code>255</code>.<br />
<br />
= Particle XML =<br />
<br />
'''TODO:'''<br />
<br />
= Path XML =<br />
<br />
'''TODO:'''<br />
<br />
= Reaction XML =<br />
<br />
'''TODO:'''<br />
<br />
= Retarget XML =<br />
<br />
'''TODO:'''<br />
<br />
= Rig XML =<br />
<br />
This is the XML file for a character skeleton. It binds a [[Xml File Formats#Character XML|Character XML]] file to an [[Character Scripting|AI angelscript]] file.<br><br />
When a level references a character, this is the file type that is referenced.<br />
<br />
== Rig XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<rig bone_path = "Data/Skeletons/r_wolf2.phxbn"<br />
model_path = "Data/Models/Characters/IGF_Wolf/IGF_Wolf.obj"<br />
mass_path = "Data/Skeletons/r_lt_dog.xml"/><br />
</pre><br />
<br />
== Rig element -> bone_path attribute ==<br />
<pre><br />
<rig bone_path = "Data/Skeletons/r_wolf2.phxbn"/><br />
</pre><br />
<br />
'''Required''' - String value. Path to the skeleton file, using the custom Phoenix Engine skeleton file type ([[Binary File Formats#PHXBN|PHXBN]]. This file MUST have been exported using the mesh specified in <code>model_path</code>.<br />
<br />
== Rig element -> model_path attribute ==<br />
<pre><br />
<rig model_path = "Data/Models/Characters/IGF_Wolf/IGF_Wolf.obj"/><br />
</pre><br />
<br />
'''Required''' - String value. Path to Obj model file to use as skinned the character mesh. This file MUST be the same as the one used when exporting the skeleton specified in <code>bone_path</code>.<br />
<br />
== Rig element -> mass_path attribute ==<br />
<pre><br />
<rig mass_path = "Data/Skeletons/r_lt_dog.xml"/><br />
</pre><br />
<br />
'''Optional''' - String value. Path to [[Xml File Formats#Rig XML|Rig XML]]. Used to override the current skeleton with the bone masses from a different skeleton.<br><br />
'''TODO''': Why you'd want to do this? Who knows! -merlyn<br />
<br />
= Shader Preload XML =<br />
<br />
'''TODO:'''<br />
<br />
= Sound Group XML =<br />
<br />
This is the XML file that describes a group of sounds. One of those sounds will be randomly chosen and played whenever the sound group is triggered.<br><br />
<br />
The file will specify a count of the number of <code>variants</code> that exist, and a sound file will need to exist for each of those variants.<br><br />
For a Sound Group XML with three variants, the XML file and and corresponding sound variants should follow a naming scheme like this:<br />
* <code>Data/Sounds/example_subdir/example_sound_group.xml</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_1.wav</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_2.wav</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_3.wav</code><br><br />
<br />
== Sound Group XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<soundgroup<br />
variants = "3"<br />
delay = "5.3"<br />
volume = "0.1"<br />
max_distance = "77.5"<br />
/><br />
</pre><br />
<br />
== Sound Group element -> variants attribute ==<br />
<pre><br />
<soundgroup variants = "3" /><br />
</pre><br />
<br />
'''Optional''' - Integer value. '''Default''': 1.<br><br />
The count of variants. There must also be a corresponding <code>SoundGroupXmlName_1.wav</code> file for every variant, numbered incrementally up to the variant count.<br><br />
E.g. if there was 3 variants, there would need to be files named <code>SoundGroupXmlName_1.wav</code>, <code>SoundGroupXmlName_2.wav</code>, and <code>SoundGroupXmlName_3.wav</code>.<br />
<br />
== Sound Group element -> delay attribute ==<br />
<pre><br />
<soundgroup delay = "5.3" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0.<br><br />
A delay to add to the start of sound playback, in seconds.<br />
<br />
== Sound Group element -> volume attribute ==<br />
<pre><br />
<soundgroup volume = "0.1" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0.<br><br />
The volume to play back the sound.<br><br />
This is further multiplied by the gain specified when triggering the sound group in gameplay code.<br />
<br />
== Sound Group element -> max_distance attribute ==<br />
<pre><br />
<soundgroup max_distance = "77.5" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 30.0.<br><br />
The maximum distance that the sound can be heard by the player.<br><br />
It will be overridden by the <code>max_distance</code> in the collision sound event, in the [[Xml File Formats#Material XML -> Events element -> Event element|Material XML]], if specified for the given collision sound event.<br />
<br />
= Synced Animation Group XML =<br />
<br />
'''TODO:'''<br />
<br />
= Version Manifest XML =<br />
<br />
'''TODO:'''<br />
<br />
= Voice XML =<br />
<br />
'''TODO:'''</div>Merlynhttp://wiki.wolfire.com/index.php?title=Xml_File_Formats&diff=6232Xml File Formats2023-09-10T10:25:40Z<p>Merlyn: /* Object XML -> DetailMaps element */</p>
<hr />
<div>= TODO: =<br />
<br />
Level, Saved Object, Prefab - These have more confusing schemas, to the point where I'm not entirely sure they're distinct types from one another, and I haven't nailed them down yet -merlyn<br />
<br />
= Actor XML =<br />
<br />
This is the top-level XML file for an NPC or combat character. It binds a [[Xml File Formats#Character XML|Character XML]] file to an [[Character Scripting|AI angelscript]] file.<br><br />
When a level references a character, this is the file type that is referenced.<br />
<br />
== Actor XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<Actor><br />
<Character>Data/Characters/rabbot.xml</Character><br />
<ControlScript>enemycontrol.as</ControlScript><br />
</Actor><br />
</pre><br />
<br />
== Actor XML -> Character element ==<br />
<pre><br />
<Actor><br />
<Character>Data/Characters/rabbot.xml</Character><br />
...<br />
</Actor><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Xml File Formats#Character XML|Character XML]]<br />
<br />
== Actor XML -> ControlScript element ==<br />
<pre><br />
<Actor><br />
...<br />
<ControlScript>enemycontrol.as</ControlScript><br />
</Actor><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Character Scripting|AI angelscript]]. Relative to <code>Data/Scripts</code> folder<br />
<br />
= Asset Preload XML =<br />
<br />
'''TODO:'''<br />
<br />
= Attachment XML =<br />
<br />
'''TODO:'''<br />
<br />
= Attack XML =<br />
<br />
'''TODO:'''<br />
<br />
= Character XML =<br />
<br />
'''TODO:'''<br />
<br />
= Decal XML =<br />
<br />
'''TODO:'''<br />
<br />
= Events XML =<br />
<br />
'''TODO:'''<br />
<br />
= Hotspot XML =<br />
<br />
This is the top-level XML file for a hotspot game object. It specifies the billboard image, and the [[Hotspot Scripting|Hotspot angelscript]] file.<br><br />
When a level references a hotspot, this is the file type that is referenced.<br />
<br />
== Hotspot XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<Type>generic</Type><br />
<Hotspot><br />
<BillboardColorMap>Data/UI/spawner/thumbs/Hotspot/empty.png</BillboardColorMap><br />
<Script>hotspots/sound_hotspot.as</Script><br />
</Hotspot><br />
</pre><br />
<br />
== Hotspot XML -> Type element ==<br />
<pre><br />
<Type>generic</Type><br />
<Hotspot><br />
...<br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. This should always have the value <code><Type>generic</Type></code>.<br><br />
Note: Having two document elements is not valid XML, and I'm not sure what purpose this element serves. But leave it in, since all the hotspots do it. -merlyn<br />
<br />
== Hotspot XML -> Character element ==<br />
<pre><br />
<Hotspot><br />
<BillboardColorMap>Data/UI/spawner/thumbs/Hotspot/empty.png</BillboardColorMap><br />
...<br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. Path to image file. If you don't want a billboard image, you can use <code>Data/UI/spawner/thumbs/Hotspot/empty.png</code>.<br />
<br />
== Hotspot XML -> Script element ==<br />
<pre><br />
<Hotspot><br />
...<br />
<Script>hotspots/sound_hotspot.as</Script><br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Hotspot Scripting|Hotspot angelscript]]. Relative to <code>Data/Scripts</code> folder.<br />
<br />
= Item XML =<br />
<br />
'''TODO:'''<br />
<br />
= Layered Song XML =<br />
<br />
'''TODO:'''<br />
<br />
= Level Meta XML =<br />
<br />
'''TODO:'''<br />
<br />
= Material XML =<br />
<br />
This XML file specifies the sounds that will be played when a character or item interacts with a world object. It is used to model the sound differences between wood, metal, soil, ice, etc.<br><br />
<br />
<code>Data/Materials/default.xml</code> is the global "default" material, if the material isn't specified by the world object.<br><br />
<br />
When the engine or a gameplay script detects a physics event, the code will do a lookup against the current material, for an event with that event name. If the event name is found, then the corresponding sound will be triggered.<br><br />
<br />
Some of these events and materials might specify modifiers (<code>soft</code>, <code>heavy</code>, etc). If they do, the code will first do the lookup against the <code><events mod="themod"></code> version of the event.<br><br />
If an event with the given name is not found with that modifier, the code will then lookup a version of the same event name, but with no modifiers specified.<br><br />
<br />
Some of the values, if not specified, will look at a global "base" material to find the value of the parameter. <code>max_distance</code> is the only one of those parameters right now.<br />
<br />
<code>Data/Materials/base.xml</code> is the global "base" material.<br><br />
<br />
== Material XML Example ==<br />
From <code>Data/Materials/dirt.xml</code> - this is not the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_light_dirt.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_medium_dirt.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_heavy_dirt.xml" attached="true"/><br />
<-- Note: more sound events in the real file than just these --><br />
</events> <br />
<events mod="soft"><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
</events><br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"<br />
shader="stepdecalfast"/><br />
<skid color="Data/Textures/Decals/Footprints/rabbitdirtsmear_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtsmear_n.tga"<br />
shader="stepdecalfast"/><br />
</decals><br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
<skid path="Data/Particles/heavydirt.xml"/><br />
</particles><br />
<physics hardness = "0.8" friction = "1.0" sharp_penetration = "1.0" /><br />
</material><br />
</pre><br />
<br />
From <code>Data/Materials/default.xml</code>, which is the default Material XML file. It is used when other XML file types call for a Material XML, but one is not specified.<br><br />
This is the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
<rightrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
<leftwallstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_wallrun.xml" attached="true"/><br />
<rightwallstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_wallrun.xml" attached="true"/><br />
<leftwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_walk.xml" attached="true"/><br />
<rightwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_walk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<land soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land.xml" attached="true"/><br />
<land_soft soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land_soft.xml" attached="true"/><br />
<land_slide soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land_slide.xml" attached="true"/><br />
<slide soundgroup="Data/Sounds/concrete_foley/slide_concrete_short.xml" attached="true"/><br />
<kick soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_kick.xml" attached="true"/><br />
<sweep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_sweep.xml" attached="true"/><br />
<jump soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump.xml" attached="true"/><br />
<roll soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_roll.xml" attached="true"/><br />
<edge_grab soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_edge_grab.xml" attached="true"/><br />
<edge_crawl soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_edgecrawl.xml" attached="true"/><br />
<bodyfall soundgroup="Data/Sounds/concrete_foley/bf_concrete.xml" attached="true"/><br />
<bodyfall_light soundgroup="Data/Sounds/concrete_foley/bf_concrete_light.xml" attached="true"/><br />
<bodyfall_medium soundgroup="Data/Sounds/concrete_foley/bf_concrete_medium.xml" attached="true"/><br />
<bodyfall_heavy soundgroup="Data/Sounds/concrete_foley/bf_concrete_heavy.xml" attached="true"/><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_light_stone.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_medium_stone.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_heavy_stone.xml" attached="true"/><br />
<blood_spatter soundgroup="Data/Sounds/blood/spatter_hard.xml"/><br />
<blood_drip soundgroup="Data/Sounds/blood/drip_lowpass.xml"/><br />
</events><br />
<events mod="heavy"><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_run.xml" attached="true"/><br />
<rightrunstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_run.xml" attached="true"/><br />
<leftwallstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_wallrun.xml" attached="true"/><br />
<rightwallstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_wallrun.xml" attached="true"/><br />
<leftwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_walk.xml" attached="true"/><br />
<rightwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_walk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<land soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<land_soft soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<land_slide soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<kick soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_kick.xml" attached="true"/><br />
<sweep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_sweep.xml" attached="true"/><br />
<jump soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump.xml" attached="true"/><br />
<roll soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_roll.xml" attached="true"/><br />
<edge_grab soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_edge_grab.xml" attached="true"/><br />
</events><br />
<events mod="soft"><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
</events><br />
<physics hardness = "1.0" friction = "1.0" sharp_penetration = "0.0" /><br />
</material><br />
</pre><br />
<br />
From <code>Data/Materials/base.xml</code>, which specifies the default '''max_distance''' values for all materials.<br><br />
This is the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<leftrunstep max_distance = "40.0"/><br />
<rightrunstep max_distance = "40.0"/><br />
<leftwallstep max_distance = "40.0"/><br />
<rightwallstep max_distance = "40.0"/><br />
<leftwalkstep max_distance = "25.0"/><br />
<rightwalkstep max_distance = "25.0"/><br />
<leftcrouchwalkstep max_distance = "10.0"/><br />
<rightcrouchwalkstep max_distance = "10.0"/><br />
<land max_distance = "60.0"/><br />
<land_soft max_distance = "30.0"/><br />
<land_slide max_distance = "20.0"/><br />
<slide max_distance = "30.0"/><br />
<kick max_distance = "25.0"/><br />
<sweep max_distance = "25.0"/><br />
<jump max_distance = "40.0"/><br />
<roll max_distance = "15.0"/><br />
<edge_grab max_distance = "25.0"/><br />
<edge_crawl max_distance = "15.0"/><br />
<bodyfall max_distance = "80.0"/><br />
<bodyfall_light max_distance = "40.0"/><br />
<bodyfall_medium max_distance = "60.0"/><br />
<bodyfall_heavy max_distance = "80.0"/><br />
<weapon_drop_light max_distance = "80.0"/><br />
<weapon_drop_medium max_distance = "80.0"/><br />
<weapon_drop_heavy max_distance = "80.0"/><br />
<blood_spatter max_distance = "30.0"/><br />
<blood_drip max_distance = "20.0"/><br />
<flip max_distance = "20.0"/><br />
<choke_grab max_distance = "10.0"/>;<br />
<choke_move max_distance = "10.0"/>;<br />
<choke_fall max_distance = "10.0"/>;<br />
</events><br />
<events mod="heavy"><br />
<leftrunstep max_distance = "50.0"/><br />
<rightrunstep max_distance = "50.0"/><br />
<leftwallstep max_distance = "50.0"/><br />
<rightwallstep max_distance = "50.0"/><br />
<leftwalkstep max_distance = "30.0"/><br />
<rightwalkstep max_distance = "30.0"/><br />
<leftcrouchwalkstep max_distance = "20.0"/><br />
<rightcrouchwalkstep max_distance = "20.0"/><br />
<land max_distance = "80.0"/><br />
<land_soft max_distance = "40.0"/><br />
<land_slide max_distance = "40.0"/><br />
<kick max_distance = "30.0"/><br />
<sweep max_distance = "30.0"/><br />
<jump max_distance = "50.0"/><br />
<roll max_distance = "25.0"/><br />
<edge_grab max_distance = "40.0"/><br />
</events><br />
</material><br />
</pre><br />
<br />
== Material XML -> Events element ==<br />
<pre><br />
<material><br />
<events><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision sound events for the material.<br />
<br />
=== Events element -> mod attribute ===<br />
<br />
<pre><br />
<material><br />
<events mod="soft"><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
'''Optional''' - String value. Specifies that this list of collision sound events only apply when the given modifier is specified.<br><br />
The modifiers are different ways the sounds will be presented, such as <code>soft</code>, <code>heavy</code>, etc.<br />
<br />
== Material XML -> Events element -> Sound element ==<br />
<pre><br />
<material><br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true" max_distance = "40.0"/><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
The sound (and physical properties of the sound) for a given collision sound event. The name of the element corresponds to the name of the collision sound event (in this example, '''leftrunstep''').<br />
<br />
=== Sound element -> soundgroup attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - String value. Specifies the [[Xml File Formats#Sound Group XML|Sound Group XML]] for the material interaction event.<br><br />
'''TODO:''': Is this really optional? If so, what is the default behavior?<br />
<br />
=== Sound element -> attached attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep attached="true"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - Boolean value. '''Default''': false<br><br />
If true, the sound (group) will be played as a sound that is attached to the character that triggered the collision sound event.<br />
<br />
=== Sound element -> max_distance attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep max_distance = "40.0"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0<br><br />
The max distance that the sound will still be audible to the player.<br><br />
If the value is 0.0, then the max distance will be considered infinite.<br><br />
If it is not specified for a given sound collision event, then the corresponding value in <code>Data/Materials/base.xml</code> will be used instead.<br />
<br />
== Material XML -> Decals element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision decal events for the material.<br />
<br />
== Material XML -> Decals element -> Decal element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"<br />
shader="stepdecalfast"/><br />
<skid color="Data/Textures/Decals/Footprints/rabbitdirtsmear_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtsmear_n.tga"<br />
shader="stepdecalfast"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
The decal (and rendering properties of the decal) for a given collision decal event. The name of the element corresponds to the name of the collision decal event (in these examples, '''step''' and '''skid''').<br />
<br />
=== Decal element -> color attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the decal's color texture.<br />
<br />
=== Decal element -> normal attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the decal's normal texture.<br />
<br />
=== Decal element -> shader attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step shader="stepdecalfast"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the shader name that will be used when rendering the decal.<br />
<br />
== Material XML -> Particles element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
...<br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision particle events for the material. <br />
<br />
== Material XML -> Particles element -> Particle element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
<skid path="Data/Particles/heavydirt.xml"/><br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
The particle for a given collision particle event. The name of the element corresponds to the name of the collision particle event (in these examples, '''step''' and '''skid'''). <br />
<br />
=== Particle element -> path attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
...<br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Xml File Formats#Particle XML|Particle XML]]<br />
<br />
== Material XML -> Physics element ==<br />
<br />
<pre><br />
<material><br />
<physics hardness = "0.8" friction = "1.0" sharp_penetration = "1.0" /><br />
</material><br />
</pre><br />
<br />
The physics properties of the the material. Collision gameplay events will use these properties to determine how to make other objects respond when they collide with the object this material is applied to.<br />
<br />
=== Physics element -> hardness attribute ===<br />
<br />
<pre><br />
<material><br />
<physics hardness = "0.8"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0<br><br />
'''TODO: Describe'''<br />
<br />
=== Physics element -> friction attribute ===<br />
<br />
<pre><br />
<material><br />
<physics friction = "1.0"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0<br><br />
The friction between any other object and the object this material is applied to.<br><br />
In real life this would depend on the materials for both objects, but the game makes simplifying assumptions to make the mapping a bit less complicated.<br />
<br />
=== Physics element -> sharp_penetration attribute ===<br />
<br />
<pre><br />
<material><br />
<physics sharp_penetration = "1.0"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0<br><br />
'''TODO: Describe'''<br />
<br />
= Mod XML =<br />
<br />
'''TODO:'''<br />
<br />
= Music XML =<br />
<br />
'''TODO:'''<br />
<br />
= Nav Mesh Meta XML =<br />
<br />
'''TODO:'''<br />
<br />
= Object XML =<br />
<br />
This is the top-level XML file for a level object. It specifies visual parameters, some gameplay parameters, and paths for visual assets.<br><br />
Other XML file types reference this XML file type, such as [[Xml File Formats#Character XML|Character XML files]] and [[Xml File Formats#Item XML|Item XML files]].<br />
<br />
== Object XML Example ==<br />
<br />
<pre><br />
<?xml version="1.0" ?><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
<Label>impale</Label><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gray_metal_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gray_metal_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/cat_cobbles_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/cat_cobbles_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gold_hexagons_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gold_hexagons_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
</DetailMaps><br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="2" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="20" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/Objects/Environment/Rocks/lichen_rock_a.xml" weight_path="Data/Textures/Terrain/forest_hills/forest_hills_not_grass.tga"<br />
normal_conform="1" density="20" min_embed="0.3" max_embed="0.7" min_scale="0.08" max_scale="0.12"<br />
view_distance="10" jitter_degrees="45" overbright="0.4" tint_weight="0.5" collision_type="static" /><br />
</DetailObjects><br />
<ShaderName>detailmap4</ShaderName><br />
<avg_color r = "100" g = "128" b = "47" /><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
<GroundOffset>0.5</GroundOffset><br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
== Object XML -> Model element ==<br />
<br />
<pre><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the obj format model file.<br />
<br />
=== Model element -> element text ===<br />
<br />
<pre><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
</pre><br />
<br />
'''Required''' - String value. Path to the obj format model file.<br />
<br />
== Object XML -> ColorMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the color map texture for the object.<br />
<br />
=== ColorMap element -> element text ===<br />
<br />
<pre><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color map texture for the object.<br />
<br />
== Object XML -> NormalMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the normal map texture for the object.<br />
<br />
=== NormalMap element -> element text ===<br />
<br />
<pre><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the normal map texture for the object.<br />
<br />
== Object XML -> TranslucencyMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the translucency map texture for the object.<br />
<br />
=== TranslucencyMap element -> element text ===<br />
<br />
<pre><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the translucency map texture for the object.<br />
<br />
== Object XML -> WindMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the wind map texture for the object.<br />
<br />
=== WindMap element -> element text ===<br />
<br />
<pre><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the wind map texture for the object.<br />
<br />
== Object XML -> SharpnessMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br><br />
'''TODO''': links to/from other file types for this field?<br />
<br />
=== SharpnessMap element -> element text ===<br />
<br />
<pre><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br />
<br />
== Object XML -> Label element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Label>impale</Label><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - This is referenced by gameplay scripts to figure out if this object is one of a more generalized type.<br />
<br />
=== Label element -> element text ===<br />
<br />
<pre><br />
<Label>impale</Label><br />
</pre><br />
<br />
'''Required''' - String value. This is referenced by gameplay scripts to figure out if this object is one of a more generalized type.<br />
<br />
== Object XML -> WeightMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the weight map texture for the object.<br />
<br />
=== WeightMap element -> element text ===<br />
<br />
<pre><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the weight map texture for the object.<br />
<br />
== Object XML -> PaletteMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies a set of different tintable areas on this object. The labels are the text displayed in the editor interface. Each color channel of the specified image will be used as a mask to specify where on the object's model the tinting should be limited to.<br />
<br />
=== PaletteMap element -> element text ===<br />
<br />
<pre><br />
<PaletteMap ...><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color masks, used when there's tint parameters that limit the tint to a specific area on the object, such as character clothing colors, a tintable area on a weapon, etc.<br />
<br />
=== PaletteMap element -> label_red attribute ===<br />
<br />
<pre><br />
<PaletteMap label_red="Clothing Color 1"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the red channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_green attribute ===<br />
<br />
<pre><br />
<PaletteMap label_green="Clothing Color 2"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the green channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_blue attribute ===<br />
<br />
<pre><br />
<PaletteMap label_blue="Clothing Color 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the blue channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_alpha attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 4"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the alpha channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_other attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 5"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the "other" channel of the tint mask image.<br><br />
'''TODO''': What the heck even is a "other" channel on an image? Does this even do anything in code, besides get parsed? -merlyn<br />
<br />
== Object XML -> DetailMaps element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
...<br />
</DetailMaps><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - A list of secondary material layers that provide fine, repeated visual detail on top of the object's main texture layers.<br />
<br />
== Object XML -> DetailMaps element -> DetailMap element ==<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
</pre><br />
<br />
'''Optional''' - The parameters for the detail map textures that repeat across the model, providing finer-scale detail. There can be up to four of these.<br />
<br />
=== DetailMap element -> colorpath attribute ===<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for this detail map's color map texture.<br />
<br />
=== DetailMap element -> normalpath attribute ===<br />
<br />
<pre><br />
<DetailMap normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the detail map's normal map texture.<br />
<br />
=== DetailMap element -> materialpath attribute ===<br />
<br />
<pre><br />
<DetailMap materialpath="Data/Materials/wood.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the given detail map level.<br><br />
'''TODO''': What is this used for? Aren't detail maps a visual-only thing? -merlyn<br />
<br />
== Object XML -> DetailObjects element ==<br />
<br />
== Object XML -> DetailObjects element -> DetailObject element ==<br />
<br />
=== DetailObject element -> obj_path attribute ===<br />
=== DetailObject element -> weight_path attribute ===<br />
=== DetailObject element -> normal_conform attribute ===<br />
=== DetailObject element -> density attribute ===<br />
=== DetailObject element -> min_embed attribute ===<br />
=== DetailObject element -> max_embed attribute ===<br />
=== DetailObject element -> min_scale attribute ===<br />
=== DetailObject element -> max_scale attribute ===<br />
=== DetailObject element -> view_distance attribute ===<br />
=== DetailObject element -> jitter_degrees attribute ===<br />
=== DetailObject element -> overbright attribute ===<br />
=== DetailObject element -> tint_weight attribute ===<br />
=== DetailObject element -> collision_type attribute ===<br />
<br />
== Object XML -> ShaderName element ==<br />
<br />
=== ShaderName element -> element text ===<br />
<br />
== Object XML -> avg_color element ==<br />
<br />
=== avg_color element -> r attribute ===<br />
=== avg_color element -> g attribute ===<br />
=== avg_color element -> b attribute ===<br />
<br />
== Object XML -> MaterialPath element ==<br />
<br />
=== MaterialPath element -> element text ===<br />
<br />
== Object XML -> Flags element ==<br />
<br />
=== Flags element -> transparent attribtue ===<br />
=== Flags element -> no_collision attribtue ===<br />
=== Flags element -> clamp_texture attribtue ===<br />
=== Flags element -> bush_collision attribtue ===<br />
=== Flags element -> terrain_fixed attribtue ===<br />
=== Flags element -> dynamic attribtue ===<br />
=== Flags element -> double_sided attribtue ===<br />
<br />
== Object XML -> GroundOffset element ==<br />
<br />
=== GroundOffset element -> element text ===<br />
<br />
== Object XML -> ColorTint element ==<br />
<br />
=== ColorTint element -> r attribute ===<br />
=== ColorTint element -> g attribute ===<br />
=== ColorTint element -> b attribute ===<br />
<br />
= Particle XML =<br />
<br />
'''TODO:'''<br />
<br />
= Path XML =<br />
<br />
'''TODO:'''<br />
<br />
= Reaction XML =<br />
<br />
'''TODO:'''<br />
<br />
= Retarget XML =<br />
<br />
'''TODO:'''<br />
<br />
= Rig XML =<br />
<br />
This is the XML file for a character skeleton. It binds a [[Xml File Formats#Character XML|Character XML]] file to an [[Character Scripting|AI angelscript]] file.<br><br />
When a level references a character, this is the file type that is referenced.<br />
<br />
== Rig XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<rig bone_path = "Data/Skeletons/r_wolf2.phxbn"<br />
model_path = "Data/Models/Characters/IGF_Wolf/IGF_Wolf.obj"<br />
mass_path = "Data/Skeletons/r_lt_dog.xml"/><br />
</pre><br />
<br />
== Rig element -> bone_path attribute ==<br />
<pre><br />
<rig bone_path = "Data/Skeletons/r_wolf2.phxbn"/><br />
</pre><br />
<br />
'''Required''' - String value. Path to the skeleton file, using the custom Phoenix Engine skeleton file type ([[Binary File Formats#PHXBN|PHXBN]]. This file MUST have been exported using the mesh specified in <code>model_path</code>.<br />
<br />
== Rig element -> model_path attribute ==<br />
<pre><br />
<rig model_path = "Data/Models/Characters/IGF_Wolf/IGF_Wolf.obj"/><br />
</pre><br />
<br />
'''Required''' - String value. Path to Obj model file to use as skinned the character mesh. This file MUST be the same as the one used when exporting the skeleton specified in <code>bone_path</code>.<br />
<br />
== Rig element -> mass_path attribute ==<br />
<pre><br />
<rig mass_path = "Data/Skeletons/r_lt_dog.xml"/><br />
</pre><br />
<br />
'''Optional''' - String value. Path to [[Xml File Formats#Rig XML|Rig XML]]. Used to override the current skeleton with the bone masses from a different skeleton.<br><br />
'''TODO''': Why you'd want to do this? Who knows! -merlyn<br />
<br />
= Shader Preload XML =<br />
<br />
'''TODO:'''<br />
<br />
= Sound Group XML =<br />
<br />
This is the XML file that describes a group of sounds. One of those sounds will be randomly chosen and played whenever the sound group is triggered.<br><br />
<br />
The file will specify a count of the number of <code>variants</code> that exist, and a sound file will need to exist for each of those variants.<br><br />
For a Sound Group XML with three variants, the XML file and and corresponding sound variants should follow a naming scheme like this:<br />
* <code>Data/Sounds/example_subdir/example_sound_group.xml</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_1.wav</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_2.wav</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_3.wav</code><br><br />
<br />
== Sound Group XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<soundgroup<br />
variants = "3"<br />
delay = "5.3"<br />
volume = "0.1"<br />
max_distance = "77.5"<br />
/><br />
</pre><br />
<br />
== Sound Group element -> variants attribute ==<br />
<pre><br />
<soundgroup variants = "3" /><br />
</pre><br />
<br />
'''Optional''' - Integer value. '''Default''': 1.<br><br />
The count of variants. There must also be a corresponding <code>SoundGroupXmlName_1.wav</code> file for every variant, numbered incrementally up to the variant count.<br><br />
E.g. if there was 3 variants, there would need to be files named <code>SoundGroupXmlName_1.wav</code>, <code>SoundGroupXmlName_2.wav</code>, and <code>SoundGroupXmlName_3.wav</code>.<br />
<br />
== Sound Group element -> delay attribute ==<br />
<pre><br />
<soundgroup delay = "5.3" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0.<br><br />
A delay to add to the start of sound playback, in seconds.<br />
<br />
== Sound Group element -> volume attribute ==<br />
<pre><br />
<soundgroup volume = "0.1" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0.<br><br />
The volume to play back the sound.<br><br />
This is further multiplied by the gain specified when triggering the sound group in gameplay code.<br />
<br />
== Sound Group element -> max_distance attribute ==<br />
<pre><br />
<soundgroup max_distance = "77.5" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 30.0.<br><br />
The maximum distance that the sound can be heard by the player.<br><br />
It will be overridden by the <code>max_distance</code> in the collision sound event, in the [[Xml File Formats#Material XML -> Events element -> Event element|Material XML]], if specified for the given collision sound event.<br />
<br />
= Synced Animation Group XML =<br />
<br />
'''TODO:'''<br />
<br />
= Version Manifest XML =<br />
<br />
'''TODO:'''<br />
<br />
= Voice XML =<br />
<br />
'''TODO:'''</div>Merlynhttp://wiki.wolfire.com/index.php?title=Xml_File_Formats&diff=6231Xml File Formats2023-09-10T10:23:02Z<p>Merlyn: /* Object XML -> DetailMaps element -> DetailMap element */</p>
<hr />
<div>= TODO: =<br />
<br />
Level, Saved Object, Prefab - These have more confusing schemas, to the point where I'm not entirely sure they're distinct types from one another, and I haven't nailed them down yet -merlyn<br />
<br />
= Actor XML =<br />
<br />
This is the top-level XML file for an NPC or combat character. It binds a [[Xml File Formats#Character XML|Character XML]] file to an [[Character Scripting|AI angelscript]] file.<br><br />
When a level references a character, this is the file type that is referenced.<br />
<br />
== Actor XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<Actor><br />
<Character>Data/Characters/rabbot.xml</Character><br />
<ControlScript>enemycontrol.as</ControlScript><br />
</Actor><br />
</pre><br />
<br />
== Actor XML -> Character element ==<br />
<pre><br />
<Actor><br />
<Character>Data/Characters/rabbot.xml</Character><br />
...<br />
</Actor><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Xml File Formats#Character XML|Character XML]]<br />
<br />
== Actor XML -> ControlScript element ==<br />
<pre><br />
<Actor><br />
...<br />
<ControlScript>enemycontrol.as</ControlScript><br />
</Actor><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Character Scripting|AI angelscript]]. Relative to <code>Data/Scripts</code> folder<br />
<br />
= Asset Preload XML =<br />
<br />
'''TODO:'''<br />
<br />
= Attachment XML =<br />
<br />
'''TODO:'''<br />
<br />
= Attack XML =<br />
<br />
'''TODO:'''<br />
<br />
= Character XML =<br />
<br />
'''TODO:'''<br />
<br />
= Decal XML =<br />
<br />
'''TODO:'''<br />
<br />
= Events XML =<br />
<br />
'''TODO:'''<br />
<br />
= Hotspot XML =<br />
<br />
This is the top-level XML file for a hotspot game object. It specifies the billboard image, and the [[Hotspot Scripting|Hotspot angelscript]] file.<br><br />
When a level references a hotspot, this is the file type that is referenced.<br />
<br />
== Hotspot XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<Type>generic</Type><br />
<Hotspot><br />
<BillboardColorMap>Data/UI/spawner/thumbs/Hotspot/empty.png</BillboardColorMap><br />
<Script>hotspots/sound_hotspot.as</Script><br />
</Hotspot><br />
</pre><br />
<br />
== Hotspot XML -> Type element ==<br />
<pre><br />
<Type>generic</Type><br />
<Hotspot><br />
...<br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. This should always have the value <code><Type>generic</Type></code>.<br><br />
Note: Having two document elements is not valid XML, and I'm not sure what purpose this element serves. But leave it in, since all the hotspots do it. -merlyn<br />
<br />
== Hotspot XML -> Character element ==<br />
<pre><br />
<Hotspot><br />
<BillboardColorMap>Data/UI/spawner/thumbs/Hotspot/empty.png</BillboardColorMap><br />
...<br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. Path to image file. If you don't want a billboard image, you can use <code>Data/UI/spawner/thumbs/Hotspot/empty.png</code>.<br />
<br />
== Hotspot XML -> Script element ==<br />
<pre><br />
<Hotspot><br />
...<br />
<Script>hotspots/sound_hotspot.as</Script><br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Hotspot Scripting|Hotspot angelscript]]. Relative to <code>Data/Scripts</code> folder.<br />
<br />
= Item XML =<br />
<br />
'''TODO:'''<br />
<br />
= Layered Song XML =<br />
<br />
'''TODO:'''<br />
<br />
= Level Meta XML =<br />
<br />
'''TODO:'''<br />
<br />
= Material XML =<br />
<br />
This XML file specifies the sounds that will be played when a character or item interacts with a world object. It is used to model the sound differences between wood, metal, soil, ice, etc.<br><br />
<br />
<code>Data/Materials/default.xml</code> is the global "default" material, if the material isn't specified by the world object.<br><br />
<br />
When the engine or a gameplay script detects a physics event, the code will do a lookup against the current material, for an event with that event name. If the event name is found, then the corresponding sound will be triggered.<br><br />
<br />
Some of these events and materials might specify modifiers (<code>soft</code>, <code>heavy</code>, etc). If they do, the code will first do the lookup against the <code><events mod="themod"></code> version of the event.<br><br />
If an event with the given name is not found with that modifier, the code will then lookup a version of the same event name, but with no modifiers specified.<br><br />
<br />
Some of the values, if not specified, will look at a global "base" material to find the value of the parameter. <code>max_distance</code> is the only one of those parameters right now.<br />
<br />
<code>Data/Materials/base.xml</code> is the global "base" material.<br><br />
<br />
== Material XML Example ==<br />
From <code>Data/Materials/dirt.xml</code> - this is not the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_light_dirt.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_medium_dirt.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_heavy_dirt.xml" attached="true"/><br />
<-- Note: more sound events in the real file than just these --><br />
</events> <br />
<events mod="soft"><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
</events><br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"<br />
shader="stepdecalfast"/><br />
<skid color="Data/Textures/Decals/Footprints/rabbitdirtsmear_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtsmear_n.tga"<br />
shader="stepdecalfast"/><br />
</decals><br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
<skid path="Data/Particles/heavydirt.xml"/><br />
</particles><br />
<physics hardness = "0.8" friction = "1.0" sharp_penetration = "1.0" /><br />
</material><br />
</pre><br />
<br />
From <code>Data/Materials/default.xml</code>, which is the default Material XML file. It is used when other XML file types call for a Material XML, but one is not specified.<br><br />
This is the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
<rightrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
<leftwallstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_wallrun.xml" attached="true"/><br />
<rightwallstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_wallrun.xml" attached="true"/><br />
<leftwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_walk.xml" attached="true"/><br />
<rightwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_walk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<land soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land.xml" attached="true"/><br />
<land_soft soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land_soft.xml" attached="true"/><br />
<land_slide soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land_slide.xml" attached="true"/><br />
<slide soundgroup="Data/Sounds/concrete_foley/slide_concrete_short.xml" attached="true"/><br />
<kick soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_kick.xml" attached="true"/><br />
<sweep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_sweep.xml" attached="true"/><br />
<jump soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump.xml" attached="true"/><br />
<roll soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_roll.xml" attached="true"/><br />
<edge_grab soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_edge_grab.xml" attached="true"/><br />
<edge_crawl soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_edgecrawl.xml" attached="true"/><br />
<bodyfall soundgroup="Data/Sounds/concrete_foley/bf_concrete.xml" attached="true"/><br />
<bodyfall_light soundgroup="Data/Sounds/concrete_foley/bf_concrete_light.xml" attached="true"/><br />
<bodyfall_medium soundgroup="Data/Sounds/concrete_foley/bf_concrete_medium.xml" attached="true"/><br />
<bodyfall_heavy soundgroup="Data/Sounds/concrete_foley/bf_concrete_heavy.xml" attached="true"/><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_light_stone.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_medium_stone.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_heavy_stone.xml" attached="true"/><br />
<blood_spatter soundgroup="Data/Sounds/blood/spatter_hard.xml"/><br />
<blood_drip soundgroup="Data/Sounds/blood/drip_lowpass.xml"/><br />
</events><br />
<events mod="heavy"><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_run.xml" attached="true"/><br />
<rightrunstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_run.xml" attached="true"/><br />
<leftwallstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_wallrun.xml" attached="true"/><br />
<rightwallstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_wallrun.xml" attached="true"/><br />
<leftwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_walk.xml" attached="true"/><br />
<rightwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_walk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<land soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<land_soft soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<land_slide soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<kick soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_kick.xml" attached="true"/><br />
<sweep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_sweep.xml" attached="true"/><br />
<jump soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump.xml" attached="true"/><br />
<roll soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_roll.xml" attached="true"/><br />
<edge_grab soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_edge_grab.xml" attached="true"/><br />
</events><br />
<events mod="soft"><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
</events><br />
<physics hardness = "1.0" friction = "1.0" sharp_penetration = "0.0" /><br />
</material><br />
</pre><br />
<br />
From <code>Data/Materials/base.xml</code>, which specifies the default '''max_distance''' values for all materials.<br><br />
This is the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<leftrunstep max_distance = "40.0"/><br />
<rightrunstep max_distance = "40.0"/><br />
<leftwallstep max_distance = "40.0"/><br />
<rightwallstep max_distance = "40.0"/><br />
<leftwalkstep max_distance = "25.0"/><br />
<rightwalkstep max_distance = "25.0"/><br />
<leftcrouchwalkstep max_distance = "10.0"/><br />
<rightcrouchwalkstep max_distance = "10.0"/><br />
<land max_distance = "60.0"/><br />
<land_soft max_distance = "30.0"/><br />
<land_slide max_distance = "20.0"/><br />
<slide max_distance = "30.0"/><br />
<kick max_distance = "25.0"/><br />
<sweep max_distance = "25.0"/><br />
<jump max_distance = "40.0"/><br />
<roll max_distance = "15.0"/><br />
<edge_grab max_distance = "25.0"/><br />
<edge_crawl max_distance = "15.0"/><br />
<bodyfall max_distance = "80.0"/><br />
<bodyfall_light max_distance = "40.0"/><br />
<bodyfall_medium max_distance = "60.0"/><br />
<bodyfall_heavy max_distance = "80.0"/><br />
<weapon_drop_light max_distance = "80.0"/><br />
<weapon_drop_medium max_distance = "80.0"/><br />
<weapon_drop_heavy max_distance = "80.0"/><br />
<blood_spatter max_distance = "30.0"/><br />
<blood_drip max_distance = "20.0"/><br />
<flip max_distance = "20.0"/><br />
<choke_grab max_distance = "10.0"/>;<br />
<choke_move max_distance = "10.0"/>;<br />
<choke_fall max_distance = "10.0"/>;<br />
</events><br />
<events mod="heavy"><br />
<leftrunstep max_distance = "50.0"/><br />
<rightrunstep max_distance = "50.0"/><br />
<leftwallstep max_distance = "50.0"/><br />
<rightwallstep max_distance = "50.0"/><br />
<leftwalkstep max_distance = "30.0"/><br />
<rightwalkstep max_distance = "30.0"/><br />
<leftcrouchwalkstep max_distance = "20.0"/><br />
<rightcrouchwalkstep max_distance = "20.0"/><br />
<land max_distance = "80.0"/><br />
<land_soft max_distance = "40.0"/><br />
<land_slide max_distance = "40.0"/><br />
<kick max_distance = "30.0"/><br />
<sweep max_distance = "30.0"/><br />
<jump max_distance = "50.0"/><br />
<roll max_distance = "25.0"/><br />
<edge_grab max_distance = "40.0"/><br />
</events><br />
</material><br />
</pre><br />
<br />
== Material XML -> Events element ==<br />
<pre><br />
<material><br />
<events><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision sound events for the material.<br />
<br />
=== Events element -> mod attribute ===<br />
<br />
<pre><br />
<material><br />
<events mod="soft"><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
'''Optional''' - String value. Specifies that this list of collision sound events only apply when the given modifier is specified.<br><br />
The modifiers are different ways the sounds will be presented, such as <code>soft</code>, <code>heavy</code>, etc.<br />
<br />
== Material XML -> Events element -> Sound element ==<br />
<pre><br />
<material><br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true" max_distance = "40.0"/><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
The sound (and physical properties of the sound) for a given collision sound event. The name of the element corresponds to the name of the collision sound event (in this example, '''leftrunstep''').<br />
<br />
=== Sound element -> soundgroup attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - String value. Specifies the [[Xml File Formats#Sound Group XML|Sound Group XML]] for the material interaction event.<br><br />
'''TODO:''': Is this really optional? If so, what is the default behavior?<br />
<br />
=== Sound element -> attached attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep attached="true"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - Boolean value. '''Default''': false<br><br />
If true, the sound (group) will be played as a sound that is attached to the character that triggered the collision sound event.<br />
<br />
=== Sound element -> max_distance attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep max_distance = "40.0"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0<br><br />
The max distance that the sound will still be audible to the player.<br><br />
If the value is 0.0, then the max distance will be considered infinite.<br><br />
If it is not specified for a given sound collision event, then the corresponding value in <code>Data/Materials/base.xml</code> will be used instead.<br />
<br />
== Material XML -> Decals element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision decal events for the material.<br />
<br />
== Material XML -> Decals element -> Decal element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"<br />
shader="stepdecalfast"/><br />
<skid color="Data/Textures/Decals/Footprints/rabbitdirtsmear_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtsmear_n.tga"<br />
shader="stepdecalfast"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
The decal (and rendering properties of the decal) for a given collision decal event. The name of the element corresponds to the name of the collision decal event (in these examples, '''step''' and '''skid''').<br />
<br />
=== Decal element -> color attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the decal's color texture.<br />
<br />
=== Decal element -> normal attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the decal's normal texture.<br />
<br />
=== Decal element -> shader attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step shader="stepdecalfast"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the shader name that will be used when rendering the decal.<br />
<br />
== Material XML -> Particles element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
...<br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision particle events for the material. <br />
<br />
== Material XML -> Particles element -> Particle element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
<skid path="Data/Particles/heavydirt.xml"/><br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
The particle for a given collision particle event. The name of the element corresponds to the name of the collision particle event (in these examples, '''step''' and '''skid'''). <br />
<br />
=== Particle element -> path attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
...<br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Xml File Formats#Particle XML|Particle XML]]<br />
<br />
== Material XML -> Physics element ==<br />
<br />
<pre><br />
<material><br />
<physics hardness = "0.8" friction = "1.0" sharp_penetration = "1.0" /><br />
</material><br />
</pre><br />
<br />
The physics properties of the the material. Collision gameplay events will use these properties to determine how to make other objects respond when they collide with the object this material is applied to.<br />
<br />
=== Physics element -> hardness attribute ===<br />
<br />
<pre><br />
<material><br />
<physics hardness = "0.8"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0<br><br />
'''TODO: Describe'''<br />
<br />
=== Physics element -> friction attribute ===<br />
<br />
<pre><br />
<material><br />
<physics friction = "1.0"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0<br><br />
The friction between any other object and the object this material is applied to.<br><br />
In real life this would depend on the materials for both objects, but the game makes simplifying assumptions to make the mapping a bit less complicated.<br />
<br />
=== Physics element -> sharp_penetration attribute ===<br />
<br />
<pre><br />
<material><br />
<physics sharp_penetration = "1.0"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0<br><br />
'''TODO: Describe'''<br />
<br />
= Mod XML =<br />
<br />
'''TODO:'''<br />
<br />
= Music XML =<br />
<br />
'''TODO:'''<br />
<br />
= Nav Mesh Meta XML =<br />
<br />
'''TODO:'''<br />
<br />
= Object XML =<br />
<br />
This is the top-level XML file for a level object. It specifies visual parameters, some gameplay parameters, and paths for visual assets.<br><br />
Other XML file types reference this XML file type, such as [[Xml File Formats#Character XML|Character XML files]] and [[Xml File Formats#Item XML|Item XML files]].<br />
<br />
== Object XML Example ==<br />
<br />
<pre><br />
<?xml version="1.0" ?><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
<Label>impale</Label><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gray_metal_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gray_metal_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/cat_cobbles_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/cat_cobbles_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gold_hexagons_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gold_hexagons_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
</DetailMaps><br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="2" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="20" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/Objects/Environment/Rocks/lichen_rock_a.xml" weight_path="Data/Textures/Terrain/forest_hills/forest_hills_not_grass.tga"<br />
normal_conform="1" density="20" min_embed="0.3" max_embed="0.7" min_scale="0.08" max_scale="0.12"<br />
view_distance="10" jitter_degrees="45" overbright="0.4" tint_weight="0.5" collision_type="static" /><br />
</DetailObjects><br />
<ShaderName>detailmap4</ShaderName><br />
<avg_color r = "100" g = "128" b = "47" /><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
<GroundOffset>0.5</GroundOffset><br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
== Object XML -> Model element ==<br />
<br />
<pre><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the obj format model file.<br />
<br />
=== Model element -> element text ===<br />
<br />
<pre><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
</pre><br />
<br />
'''Required''' - String value. Path to the obj format model file.<br />
<br />
== Object XML -> ColorMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the color map texture for the object.<br />
<br />
=== ColorMap element -> element text ===<br />
<br />
<pre><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color map texture for the object.<br />
<br />
== Object XML -> NormalMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the normal map texture for the object.<br />
<br />
=== NormalMap element -> element text ===<br />
<br />
<pre><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the normal map texture for the object.<br />
<br />
== Object XML -> TranslucencyMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the translucency map texture for the object.<br />
<br />
=== TranslucencyMap element -> element text ===<br />
<br />
<pre><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the translucency map texture for the object.<br />
<br />
== Object XML -> WindMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the wind map texture for the object.<br />
<br />
=== WindMap element -> element text ===<br />
<br />
<pre><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the wind map texture for the object.<br />
<br />
== Object XML -> SharpnessMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br><br />
'''TODO''': links to/from other file types for this field?<br />
<br />
=== SharpnessMap element -> element text ===<br />
<br />
<pre><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br />
<br />
== Object XML -> Label element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Label>impale</Label><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - This is referenced by gameplay scripts to figure out if this object is one of a more generalized type.<br />
<br />
=== Label element -> element text ===<br />
<br />
<pre><br />
<Label>impale</Label><br />
</pre><br />
<br />
'''Required''' - String value. This is referenced by gameplay scripts to figure out if this object is one of a more generalized type.<br />
<br />
== Object XML -> WeightMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the weight map texture for the object.<br />
<br />
=== WeightMap element -> element text ===<br />
<br />
<pre><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the weight map texture for the object.<br />
<br />
== Object XML -> PaletteMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies a set of different tintable areas on this object. The labels are the text displayed in the editor interface. Each color channel of the specified image will be used as a mask to specify where on the object's model the tinting should be limited to.<br />
<br />
=== PaletteMap element -> element text ===<br />
<br />
<pre><br />
<PaletteMap ...><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color masks, used when there's tint parameters that limit the tint to a specific area on the object, such as character clothing colors, a tintable area on a weapon, etc.<br />
<br />
=== PaletteMap element -> label_red attribute ===<br />
<br />
<pre><br />
<PaletteMap label_red="Clothing Color 1"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the red channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_green attribute ===<br />
<br />
<pre><br />
<PaletteMap label_green="Clothing Color 2"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the green channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_blue attribute ===<br />
<br />
<pre><br />
<PaletteMap label_blue="Clothing Color 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the blue channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_alpha attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 4"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the alpha channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_other attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 5"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the "other" channel of the tint mask image.<br><br />
'''TODO''': What the heck even is a "other" channel on an image? Does this even do anything in code, besides get parsed? -merlyn<br />
<br />
== Object XML -> DetailMaps element ==<br />
<br />
== Object XML -> DetailMaps element -> DetailMap element ==<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
</pre><br />
<br />
'''Optional''' - The parameters for the detail map textures that repeat across the model, providing finer-scale detail. There can be up to four of these.<br />
<br />
=== DetailMap element -> colorpath attribute ===<br />
<br />
<pre><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for this detail map's color map texture.<br />
<br />
=== DetailMap element -> normalpath attribute ===<br />
<br />
<pre><br />
<DetailMap normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the detail map's normal map texture.<br />
<br />
=== DetailMap element -> materialpath attribute ===<br />
<br />
<pre><br />
<DetailMap materialpath="Data/Materials/wood.xml" ... /><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the [[Xml File Formats#Material XML|Material XML]] for the given detail map level.<br><br />
'''TODO''': What is this used for? Aren't detail maps a visual-only thing? -merlyn<br />
<br />
== Object XML -> DetailObjects element ==<br />
<br />
== Object XML -> DetailObjects element -> DetailObject element ==<br />
<br />
=== DetailObject element -> obj_path attribute ===<br />
=== DetailObject element -> weight_path attribute ===<br />
=== DetailObject element -> normal_conform attribute ===<br />
=== DetailObject element -> density attribute ===<br />
=== DetailObject element -> min_embed attribute ===<br />
=== DetailObject element -> max_embed attribute ===<br />
=== DetailObject element -> min_scale attribute ===<br />
=== DetailObject element -> max_scale attribute ===<br />
=== DetailObject element -> view_distance attribute ===<br />
=== DetailObject element -> jitter_degrees attribute ===<br />
=== DetailObject element -> overbright attribute ===<br />
=== DetailObject element -> tint_weight attribute ===<br />
=== DetailObject element -> collision_type attribute ===<br />
<br />
== Object XML -> ShaderName element ==<br />
<br />
=== ShaderName element -> element text ===<br />
<br />
== Object XML -> avg_color element ==<br />
<br />
=== avg_color element -> r attribute ===<br />
=== avg_color element -> g attribute ===<br />
=== avg_color element -> b attribute ===<br />
<br />
== Object XML -> MaterialPath element ==<br />
<br />
=== MaterialPath element -> element text ===<br />
<br />
== Object XML -> Flags element ==<br />
<br />
=== Flags element -> transparent attribtue ===<br />
=== Flags element -> no_collision attribtue ===<br />
=== Flags element -> clamp_texture attribtue ===<br />
=== Flags element -> bush_collision attribtue ===<br />
=== Flags element -> terrain_fixed attribtue ===<br />
=== Flags element -> dynamic attribtue ===<br />
=== Flags element -> double_sided attribtue ===<br />
<br />
== Object XML -> GroundOffset element ==<br />
<br />
=== GroundOffset element -> element text ===<br />
<br />
== Object XML -> ColorTint element ==<br />
<br />
=== ColorTint element -> r attribute ===<br />
=== ColorTint element -> g attribute ===<br />
=== ColorTint element -> b attribute ===<br />
<br />
= Particle XML =<br />
<br />
'''TODO:'''<br />
<br />
= Path XML =<br />
<br />
'''TODO:'''<br />
<br />
= Reaction XML =<br />
<br />
'''TODO:'''<br />
<br />
= Retarget XML =<br />
<br />
'''TODO:'''<br />
<br />
= Rig XML =<br />
<br />
This is the XML file for a character skeleton. It binds a [[Xml File Formats#Character XML|Character XML]] file to an [[Character Scripting|AI angelscript]] file.<br><br />
When a level references a character, this is the file type that is referenced.<br />
<br />
== Rig XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<rig bone_path = "Data/Skeletons/r_wolf2.phxbn"<br />
model_path = "Data/Models/Characters/IGF_Wolf/IGF_Wolf.obj"<br />
mass_path = "Data/Skeletons/r_lt_dog.xml"/><br />
</pre><br />
<br />
== Rig element -> bone_path attribute ==<br />
<pre><br />
<rig bone_path = "Data/Skeletons/r_wolf2.phxbn"/><br />
</pre><br />
<br />
'''Required''' - String value. Path to the skeleton file, using the custom Phoenix Engine skeleton file type ([[Binary File Formats#PHXBN|PHXBN]]. This file MUST have been exported using the mesh specified in <code>model_path</code>.<br />
<br />
== Rig element -> model_path attribute ==<br />
<pre><br />
<rig model_path = "Data/Models/Characters/IGF_Wolf/IGF_Wolf.obj"/><br />
</pre><br />
<br />
'''Required''' - String value. Path to Obj model file to use as skinned the character mesh. This file MUST be the same as the one used when exporting the skeleton specified in <code>bone_path</code>.<br />
<br />
== Rig element -> mass_path attribute ==<br />
<pre><br />
<rig mass_path = "Data/Skeletons/r_lt_dog.xml"/><br />
</pre><br />
<br />
'''Optional''' - String value. Path to [[Xml File Formats#Rig XML|Rig XML]]. Used to override the current skeleton with the bone masses from a different skeleton.<br><br />
'''TODO''': Why you'd want to do this? Who knows! -merlyn<br />
<br />
= Shader Preload XML =<br />
<br />
'''TODO:'''<br />
<br />
= Sound Group XML =<br />
<br />
This is the XML file that describes a group of sounds. One of those sounds will be randomly chosen and played whenever the sound group is triggered.<br><br />
<br />
The file will specify a count of the number of <code>variants</code> that exist, and a sound file will need to exist for each of those variants.<br><br />
For a Sound Group XML with three variants, the XML file and and corresponding sound variants should follow a naming scheme like this:<br />
* <code>Data/Sounds/example_subdir/example_sound_group.xml</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_1.wav</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_2.wav</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_3.wav</code><br><br />
<br />
== Sound Group XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<soundgroup<br />
variants = "3"<br />
delay = "5.3"<br />
volume = "0.1"<br />
max_distance = "77.5"<br />
/><br />
</pre><br />
<br />
== Sound Group element -> variants attribute ==<br />
<pre><br />
<soundgroup variants = "3" /><br />
</pre><br />
<br />
'''Optional''' - Integer value. '''Default''': 1.<br><br />
The count of variants. There must also be a corresponding <code>SoundGroupXmlName_1.wav</code> file for every variant, numbered incrementally up to the variant count.<br><br />
E.g. if there was 3 variants, there would need to be files named <code>SoundGroupXmlName_1.wav</code>, <code>SoundGroupXmlName_2.wav</code>, and <code>SoundGroupXmlName_3.wav</code>.<br />
<br />
== Sound Group element -> delay attribute ==<br />
<pre><br />
<soundgroup delay = "5.3" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0.<br><br />
A delay to add to the start of sound playback, in seconds.<br />
<br />
== Sound Group element -> volume attribute ==<br />
<pre><br />
<soundgroup volume = "0.1" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0.<br><br />
The volume to play back the sound.<br><br />
This is further multiplied by the gain specified when triggering the sound group in gameplay code.<br />
<br />
== Sound Group element -> max_distance attribute ==<br />
<pre><br />
<soundgroup max_distance = "77.5" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 30.0.<br><br />
The maximum distance that the sound can be heard by the player.<br><br />
It will be overridden by the <code>max_distance</code> in the collision sound event, in the [[Xml File Formats#Material XML -> Events element -> Event element|Material XML]], if specified for the given collision sound event.<br />
<br />
= Synced Animation Group XML =<br />
<br />
'''TODO:'''<br />
<br />
= Version Manifest XML =<br />
<br />
'''TODO:'''<br />
<br />
= Voice XML =<br />
<br />
'''TODO:'''</div>Merlynhttp://wiki.wolfire.com/index.php?title=Xml_File_Formats&diff=6230Xml File Formats2023-09-10T10:10:20Z<p>Merlyn: /* Object XML */</p>
<hr />
<div>= TODO: =<br />
<br />
Level, Saved Object, Prefab - These have more confusing schemas, to the point where I'm not entirely sure they're distinct types from one another, and I haven't nailed them down yet -merlyn<br />
<br />
= Actor XML =<br />
<br />
This is the top-level XML file for an NPC or combat character. It binds a [[Xml File Formats#Character XML|Character XML]] file to an [[Character Scripting|AI angelscript]] file.<br><br />
When a level references a character, this is the file type that is referenced.<br />
<br />
== Actor XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<Actor><br />
<Character>Data/Characters/rabbot.xml</Character><br />
<ControlScript>enemycontrol.as</ControlScript><br />
</Actor><br />
</pre><br />
<br />
== Actor XML -> Character element ==<br />
<pre><br />
<Actor><br />
<Character>Data/Characters/rabbot.xml</Character><br />
...<br />
</Actor><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Xml File Formats#Character XML|Character XML]]<br />
<br />
== Actor XML -> ControlScript element ==<br />
<pre><br />
<Actor><br />
...<br />
<ControlScript>enemycontrol.as</ControlScript><br />
</Actor><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Character Scripting|AI angelscript]]. Relative to <code>Data/Scripts</code> folder<br />
<br />
= Asset Preload XML =<br />
<br />
'''TODO:'''<br />
<br />
= Attachment XML =<br />
<br />
'''TODO:'''<br />
<br />
= Attack XML =<br />
<br />
'''TODO:'''<br />
<br />
= Character XML =<br />
<br />
'''TODO:'''<br />
<br />
= Decal XML =<br />
<br />
'''TODO:'''<br />
<br />
= Events XML =<br />
<br />
'''TODO:'''<br />
<br />
= Hotspot XML =<br />
<br />
This is the top-level XML file for a hotspot game object. It specifies the billboard image, and the [[Hotspot Scripting|Hotspot angelscript]] file.<br><br />
When a level references a hotspot, this is the file type that is referenced.<br />
<br />
== Hotspot XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<Type>generic</Type><br />
<Hotspot><br />
<BillboardColorMap>Data/UI/spawner/thumbs/Hotspot/empty.png</BillboardColorMap><br />
<Script>hotspots/sound_hotspot.as</Script><br />
</Hotspot><br />
</pre><br />
<br />
== Hotspot XML -> Type element ==<br />
<pre><br />
<Type>generic</Type><br />
<Hotspot><br />
...<br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. This should always have the value <code><Type>generic</Type></code>.<br><br />
Note: Having two document elements is not valid XML, and I'm not sure what purpose this element serves. But leave it in, since all the hotspots do it. -merlyn<br />
<br />
== Hotspot XML -> Character element ==<br />
<pre><br />
<Hotspot><br />
<BillboardColorMap>Data/UI/spawner/thumbs/Hotspot/empty.png</BillboardColorMap><br />
...<br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. Path to image file. If you don't want a billboard image, you can use <code>Data/UI/spawner/thumbs/Hotspot/empty.png</code>.<br />
<br />
== Hotspot XML -> Script element ==<br />
<pre><br />
<Hotspot><br />
...<br />
<Script>hotspots/sound_hotspot.as</Script><br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Hotspot Scripting|Hotspot angelscript]]. Relative to <code>Data/Scripts</code> folder.<br />
<br />
= Item XML =<br />
<br />
'''TODO:'''<br />
<br />
= Layered Song XML =<br />
<br />
'''TODO:'''<br />
<br />
= Level Meta XML =<br />
<br />
'''TODO:'''<br />
<br />
= Material XML =<br />
<br />
This XML file specifies the sounds that will be played when a character or item interacts with a world object. It is used to model the sound differences between wood, metal, soil, ice, etc.<br><br />
<br />
<code>Data/Materials/default.xml</code> is the global "default" material, if the material isn't specified by the world object.<br><br />
<br />
When the engine or a gameplay script detects a physics event, the code will do a lookup against the current material, for an event with that event name. If the event name is found, then the corresponding sound will be triggered.<br><br />
<br />
Some of these events and materials might specify modifiers (<code>soft</code>, <code>heavy</code>, etc). If they do, the code will first do the lookup against the <code><events mod="themod"></code> version of the event.<br><br />
If an event with the given name is not found with that modifier, the code will then lookup a version of the same event name, but with no modifiers specified.<br><br />
<br />
Some of the values, if not specified, will look at a global "base" material to find the value of the parameter. <code>max_distance</code> is the only one of those parameters right now.<br />
<br />
<code>Data/Materials/base.xml</code> is the global "base" material.<br><br />
<br />
== Material XML Example ==<br />
From <code>Data/Materials/dirt.xml</code> - this is not the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_light_dirt.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_medium_dirt.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_heavy_dirt.xml" attached="true"/><br />
<-- Note: more sound events in the real file than just these --><br />
</events> <br />
<events mod="soft"><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
</events><br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"<br />
shader="stepdecalfast"/><br />
<skid color="Data/Textures/Decals/Footprints/rabbitdirtsmear_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtsmear_n.tga"<br />
shader="stepdecalfast"/><br />
</decals><br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
<skid path="Data/Particles/heavydirt.xml"/><br />
</particles><br />
<physics hardness = "0.8" friction = "1.0" sharp_penetration = "1.0" /><br />
</material><br />
</pre><br />
<br />
From <code>Data/Materials/default.xml</code>, which is the default Material XML file. It is used when other XML file types call for a Material XML, but one is not specified.<br><br />
This is the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
<rightrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
<leftwallstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_wallrun.xml" attached="true"/><br />
<rightwallstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_wallrun.xml" attached="true"/><br />
<leftwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_walk.xml" attached="true"/><br />
<rightwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_walk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<land soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land.xml" attached="true"/><br />
<land_soft soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land_soft.xml" attached="true"/><br />
<land_slide soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land_slide.xml" attached="true"/><br />
<slide soundgroup="Data/Sounds/concrete_foley/slide_concrete_short.xml" attached="true"/><br />
<kick soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_kick.xml" attached="true"/><br />
<sweep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_sweep.xml" attached="true"/><br />
<jump soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump.xml" attached="true"/><br />
<roll soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_roll.xml" attached="true"/><br />
<edge_grab soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_edge_grab.xml" attached="true"/><br />
<edge_crawl soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_edgecrawl.xml" attached="true"/><br />
<bodyfall soundgroup="Data/Sounds/concrete_foley/bf_concrete.xml" attached="true"/><br />
<bodyfall_light soundgroup="Data/Sounds/concrete_foley/bf_concrete_light.xml" attached="true"/><br />
<bodyfall_medium soundgroup="Data/Sounds/concrete_foley/bf_concrete_medium.xml" attached="true"/><br />
<bodyfall_heavy soundgroup="Data/Sounds/concrete_foley/bf_concrete_heavy.xml" attached="true"/><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_light_stone.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_medium_stone.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_heavy_stone.xml" attached="true"/><br />
<blood_spatter soundgroup="Data/Sounds/blood/spatter_hard.xml"/><br />
<blood_drip soundgroup="Data/Sounds/blood/drip_lowpass.xml"/><br />
</events><br />
<events mod="heavy"><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_run.xml" attached="true"/><br />
<rightrunstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_run.xml" attached="true"/><br />
<leftwallstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_wallrun.xml" attached="true"/><br />
<rightwallstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_wallrun.xml" attached="true"/><br />
<leftwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_walk.xml" attached="true"/><br />
<rightwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_walk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<land soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<land_soft soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<land_slide soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<kick soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_kick.xml" attached="true"/><br />
<sweep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_sweep.xml" attached="true"/><br />
<jump soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump.xml" attached="true"/><br />
<roll soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_roll.xml" attached="true"/><br />
<edge_grab soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_edge_grab.xml" attached="true"/><br />
</events><br />
<events mod="soft"><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
</events><br />
<physics hardness = "1.0" friction = "1.0" sharp_penetration = "0.0" /><br />
</material><br />
</pre><br />
<br />
From <code>Data/Materials/base.xml</code>, which specifies the default '''max_distance''' values for all materials.<br><br />
This is the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<leftrunstep max_distance = "40.0"/><br />
<rightrunstep max_distance = "40.0"/><br />
<leftwallstep max_distance = "40.0"/><br />
<rightwallstep max_distance = "40.0"/><br />
<leftwalkstep max_distance = "25.0"/><br />
<rightwalkstep max_distance = "25.0"/><br />
<leftcrouchwalkstep max_distance = "10.0"/><br />
<rightcrouchwalkstep max_distance = "10.0"/><br />
<land max_distance = "60.0"/><br />
<land_soft max_distance = "30.0"/><br />
<land_slide max_distance = "20.0"/><br />
<slide max_distance = "30.0"/><br />
<kick max_distance = "25.0"/><br />
<sweep max_distance = "25.0"/><br />
<jump max_distance = "40.0"/><br />
<roll max_distance = "15.0"/><br />
<edge_grab max_distance = "25.0"/><br />
<edge_crawl max_distance = "15.0"/><br />
<bodyfall max_distance = "80.0"/><br />
<bodyfall_light max_distance = "40.0"/><br />
<bodyfall_medium max_distance = "60.0"/><br />
<bodyfall_heavy max_distance = "80.0"/><br />
<weapon_drop_light max_distance = "80.0"/><br />
<weapon_drop_medium max_distance = "80.0"/><br />
<weapon_drop_heavy max_distance = "80.0"/><br />
<blood_spatter max_distance = "30.0"/><br />
<blood_drip max_distance = "20.0"/><br />
<flip max_distance = "20.0"/><br />
<choke_grab max_distance = "10.0"/>;<br />
<choke_move max_distance = "10.0"/>;<br />
<choke_fall max_distance = "10.0"/>;<br />
</events><br />
<events mod="heavy"><br />
<leftrunstep max_distance = "50.0"/><br />
<rightrunstep max_distance = "50.0"/><br />
<leftwallstep max_distance = "50.0"/><br />
<rightwallstep max_distance = "50.0"/><br />
<leftwalkstep max_distance = "30.0"/><br />
<rightwalkstep max_distance = "30.0"/><br />
<leftcrouchwalkstep max_distance = "20.0"/><br />
<rightcrouchwalkstep max_distance = "20.0"/><br />
<land max_distance = "80.0"/><br />
<land_soft max_distance = "40.0"/><br />
<land_slide max_distance = "40.0"/><br />
<kick max_distance = "30.0"/><br />
<sweep max_distance = "30.0"/><br />
<jump max_distance = "50.0"/><br />
<roll max_distance = "25.0"/><br />
<edge_grab max_distance = "40.0"/><br />
</events><br />
</material><br />
</pre><br />
<br />
== Material XML -> Events element ==<br />
<pre><br />
<material><br />
<events><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision sound events for the material.<br />
<br />
=== Events element -> mod attribute ===<br />
<br />
<pre><br />
<material><br />
<events mod="soft"><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
'''Optional''' - String value. Specifies that this list of collision sound events only apply when the given modifier is specified.<br><br />
The modifiers are different ways the sounds will be presented, such as <code>soft</code>, <code>heavy</code>, etc.<br />
<br />
== Material XML -> Events element -> Sound element ==<br />
<pre><br />
<material><br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true" max_distance = "40.0"/><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
The sound (and physical properties of the sound) for a given collision sound event. The name of the element corresponds to the name of the collision sound event (in this example, '''leftrunstep''').<br />
<br />
=== Sound element -> soundgroup attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - String value. Specifies the [[Xml File Formats#Sound Group XML|Sound Group XML]] for the material interaction event.<br><br />
'''TODO:''': Is this really optional? If so, what is the default behavior?<br />
<br />
=== Sound element -> attached attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep attached="true"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - Boolean value. '''Default''': false<br><br />
If true, the sound (group) will be played as a sound that is attached to the character that triggered the collision sound event.<br />
<br />
=== Sound element -> max_distance attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep max_distance = "40.0"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0<br><br />
The max distance that the sound will still be audible to the player.<br><br />
If the value is 0.0, then the max distance will be considered infinite.<br><br />
If it is not specified for a given sound collision event, then the corresponding value in <code>Data/Materials/base.xml</code> will be used instead.<br />
<br />
== Material XML -> Decals element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision decal events for the material.<br />
<br />
== Material XML -> Decals element -> Decal element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"<br />
shader="stepdecalfast"/><br />
<skid color="Data/Textures/Decals/Footprints/rabbitdirtsmear_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtsmear_n.tga"<br />
shader="stepdecalfast"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
The decal (and rendering properties of the decal) for a given collision decal event. The name of the element corresponds to the name of the collision decal event (in these examples, '''step''' and '''skid''').<br />
<br />
=== Decal element -> color attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the decal's color texture.<br />
<br />
=== Decal element -> normal attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the decal's normal texture.<br />
<br />
=== Decal element -> shader attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step shader="stepdecalfast"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the shader name that will be used when rendering the decal.<br />
<br />
== Material XML -> Particles element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
...<br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision particle events for the material. <br />
<br />
== Material XML -> Particles element -> Particle element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
<skid path="Data/Particles/heavydirt.xml"/><br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
The particle for a given collision particle event. The name of the element corresponds to the name of the collision particle event (in these examples, '''step''' and '''skid'''). <br />
<br />
=== Particle element -> path attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
...<br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Xml File Formats#Particle XML|Particle XML]]<br />
<br />
== Material XML -> Physics element ==<br />
<br />
<pre><br />
<material><br />
<physics hardness = "0.8" friction = "1.0" sharp_penetration = "1.0" /><br />
</material><br />
</pre><br />
<br />
The physics properties of the the material. Collision gameplay events will use these properties to determine how to make other objects respond when they collide with the object this material is applied to.<br />
<br />
=== Physics element -> hardness attribute ===<br />
<br />
<pre><br />
<material><br />
<physics hardness = "0.8"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0<br><br />
'''TODO: Describe'''<br />
<br />
=== Physics element -> friction attribute ===<br />
<br />
<pre><br />
<material><br />
<physics friction = "1.0"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0<br><br />
The friction between any other object and the object this material is applied to.<br><br />
In real life this would depend on the materials for both objects, but the game makes simplifying assumptions to make the mapping a bit less complicated.<br />
<br />
=== Physics element -> sharp_penetration attribute ===<br />
<br />
<pre><br />
<material><br />
<physics sharp_penetration = "1.0"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0<br><br />
'''TODO: Describe'''<br />
<br />
= Mod XML =<br />
<br />
'''TODO:'''<br />
<br />
= Music XML =<br />
<br />
'''TODO:'''<br />
<br />
= Nav Mesh Meta XML =<br />
<br />
'''TODO:'''<br />
<br />
= Object XML =<br />
<br />
This is the top-level XML file for a level object. It specifies visual parameters, some gameplay parameters, and paths for visual assets.<br><br />
Other XML file types reference this XML file type, such as [[Xml File Formats#Character XML|Character XML files]] and [[Xml File Formats#Item XML|Item XML files]].<br />
<br />
== Object XML Example ==<br />
<br />
<pre><br />
<?xml version="1.0" ?><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
<Label>impale</Label><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gray_metal_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gray_metal_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/cat_cobbles_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/cat_cobbles_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gold_hexagons_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gold_hexagons_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
</DetailMaps><br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="2" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="20" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/Objects/Environment/Rocks/lichen_rock_a.xml" weight_path="Data/Textures/Terrain/forest_hills/forest_hills_not_grass.tga"<br />
normal_conform="1" density="20" min_embed="0.3" max_embed="0.7" min_scale="0.08" max_scale="0.12"<br />
view_distance="10" jitter_degrees="45" overbright="0.4" tint_weight="0.5" collision_type="static" /><br />
</DetailObjects><br />
<ShaderName>detailmap4</ShaderName><br />
<avg_color r = "100" g = "128" b = "47" /><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
<GroundOffset>0.5</GroundOffset><br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
== Object XML -> Model element ==<br />
<br />
<pre><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the obj format model file.<br />
<br />
=== Model element -> element text ===<br />
<br />
<pre><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
</pre><br />
<br />
'''Required''' - String value. Path to the obj format model file.<br />
<br />
== Object XML -> ColorMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the color map texture for the object.<br />
<br />
=== ColorMap element -> element text ===<br />
<br />
<pre><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color map texture for the object.<br />
<br />
== Object XML -> NormalMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Required''' - Path to the image file for the normal map texture for the object.<br />
<br />
=== NormalMap element -> element text ===<br />
<br />
<pre><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the normal map texture for the object.<br />
<br />
== Object XML -> TranslucencyMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the translucency map texture for the object.<br />
<br />
=== TranslucencyMap element -> element text ===<br />
<br />
<pre><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the translucency map texture for the object.<br />
<br />
== Object XML -> WindMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the wind map texture for the object.<br />
<br />
=== WindMap element -> element text ===<br />
<br />
<pre><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the wind map texture for the object.<br />
<br />
== Object XML -> SharpnessMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br><br />
'''TODO''': links to/from other file types for this field?<br />
<br />
=== SharpnessMap element -> element text ===<br />
<br />
<pre><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the sharpness map texture for the object. Used for weapon objects.<br />
<br />
== Object XML -> Label element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<Label>impale</Label><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - This is referenced by gameplay scripts to figure out if this object is one of a more generalized type.<br />
<br />
=== Label element -> element text ===<br />
<br />
<pre><br />
<Label>impale</Label><br />
</pre><br />
<br />
'''Required''' - String value. This is referenced by gameplay scripts to figure out if this object is one of a more generalized type.<br />
<br />
== Object XML -> WeightMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Path to the image file for the weight map texture for the object.<br />
<br />
=== WeightMap element -> element text ===<br />
<br />
<pre><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the weight map texture for the object.<br />
<br />
== Object XML -> PaletteMap element ==<br />
<br />
<pre><br />
<Object><br />
...<br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
...<br />
</Object><br />
</pre><br />
<br />
'''Optional''' - Specifies a set of different tintable areas on this object. The labels are the text displayed in the editor interface. Each color channel of the specified image will be used as a mask to specify where on the object's model the tinting should be limited to.<br />
<br />
=== PaletteMap element -> element text ===<br />
<br />
<pre><br />
<PaletteMap ...><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Required''' - String value. Path to the image file for the color masks, used when there's tint parameters that limit the tint to a specific area on the object, such as character clothing colors, a tintable area on a weapon, etc.<br />
<br />
=== PaletteMap element -> label_red attribute ===<br />
<br />
<pre><br />
<PaletteMap label_red="Clothing Color 1"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the red channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_green attribute ===<br />
<br />
<pre><br />
<PaletteMap label_green="Clothing Color 2"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the green channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_blue attribute ===<br />
<br />
<pre><br />
<PaletteMap label_blue="Clothing Color 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the blue channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_alpha attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 4"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the alpha channel of the tint mask image.<br />
<br />
=== PaletteMap element -> label_other attribute ===<br />
<br />
<pre><br />
<PaletteMap label_alpha="Clothing Color 5"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
</pre><br />
<br />
'''Optional''' - String value. The text displayed in the editor interface, next to the editable color corresponding to the "other" channel of the tint mask image.<br><br />
'''TODO''': What the heck even is a "other" channel on an image? Does this even do anything in code, besides get parsed? -merlyn<br />
<br />
== Object XML -> DetailMaps element ==<br />
<br />
== Object XML -> DetailMaps element -> DetailMap element ==<br />
<br />
=== DetailMap element -> colorpath attribute ===<br />
=== DetailMap element -> normalpath attribute ===<br />
=== DetailMap element -> materialpath attribute ===<br />
<br />
== Object XML -> DetailObjects element ==<br />
<br />
== Object XML -> DetailObjects element -> DetailObject element ==<br />
<br />
=== DetailObject element -> obj_path attribute ===<br />
=== DetailObject element -> weight_path attribute ===<br />
=== DetailObject element -> normal_conform attribute ===<br />
=== DetailObject element -> density attribute ===<br />
=== DetailObject element -> min_embed attribute ===<br />
=== DetailObject element -> max_embed attribute ===<br />
=== DetailObject element -> min_scale attribute ===<br />
=== DetailObject element -> max_scale attribute ===<br />
=== DetailObject element -> view_distance attribute ===<br />
=== DetailObject element -> jitter_degrees attribute ===<br />
=== DetailObject element -> overbright attribute ===<br />
=== DetailObject element -> tint_weight attribute ===<br />
=== DetailObject element -> collision_type attribute ===<br />
<br />
== Object XML -> ShaderName element ==<br />
<br />
=== ShaderName element -> element text ===<br />
<br />
== Object XML -> avg_color element ==<br />
<br />
=== avg_color element -> r attribute ===<br />
=== avg_color element -> g attribute ===<br />
=== avg_color element -> b attribute ===<br />
<br />
== Object XML -> MaterialPath element ==<br />
<br />
=== MaterialPath element -> element text ===<br />
<br />
== Object XML -> Flags element ==<br />
<br />
=== Flags element -> transparent attribtue ===<br />
=== Flags element -> no_collision attribtue ===<br />
=== Flags element -> clamp_texture attribtue ===<br />
=== Flags element -> bush_collision attribtue ===<br />
=== Flags element -> terrain_fixed attribtue ===<br />
=== Flags element -> dynamic attribtue ===<br />
=== Flags element -> double_sided attribtue ===<br />
<br />
== Object XML -> GroundOffset element ==<br />
<br />
=== GroundOffset element -> element text ===<br />
<br />
== Object XML -> ColorTint element ==<br />
<br />
=== ColorTint element -> r attribute ===<br />
=== ColorTint element -> g attribute ===<br />
=== ColorTint element -> b attribute ===<br />
<br />
= Particle XML =<br />
<br />
'''TODO:'''<br />
<br />
= Path XML =<br />
<br />
'''TODO:'''<br />
<br />
= Reaction XML =<br />
<br />
'''TODO:'''<br />
<br />
= Retarget XML =<br />
<br />
'''TODO:'''<br />
<br />
= Rig XML =<br />
<br />
This is the XML file for a character skeleton. It binds a [[Xml File Formats#Character XML|Character XML]] file to an [[Character Scripting|AI angelscript]] file.<br><br />
When a level references a character, this is the file type that is referenced.<br />
<br />
== Rig XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<rig bone_path = "Data/Skeletons/r_wolf2.phxbn"<br />
model_path = "Data/Models/Characters/IGF_Wolf/IGF_Wolf.obj"<br />
mass_path = "Data/Skeletons/r_lt_dog.xml"/><br />
</pre><br />
<br />
== Rig element -> bone_path attribute ==<br />
<pre><br />
<rig bone_path = "Data/Skeletons/r_wolf2.phxbn"/><br />
</pre><br />
<br />
'''Required''' - String value. Path to the skeleton file, using the custom Phoenix Engine skeleton file type ([[Binary File Formats#PHXBN|PHXBN]]. This file MUST have been exported using the mesh specified in <code>model_path</code>.<br />
<br />
== Rig element -> model_path attribute ==<br />
<pre><br />
<rig model_path = "Data/Models/Characters/IGF_Wolf/IGF_Wolf.obj"/><br />
</pre><br />
<br />
'''Required''' - String value. Path to Obj model file to use as skinned the character mesh. This file MUST be the same as the one used when exporting the skeleton specified in <code>bone_path</code>.<br />
<br />
== Rig element -> mass_path attribute ==<br />
<pre><br />
<rig mass_path = "Data/Skeletons/r_lt_dog.xml"/><br />
</pre><br />
<br />
'''Optional''' - String value. Path to [[Xml File Formats#Rig XML|Rig XML]]. Used to override the current skeleton with the bone masses from a different skeleton.<br><br />
'''TODO''': Why you'd want to do this? Who knows! -merlyn<br />
<br />
= Shader Preload XML =<br />
<br />
'''TODO:'''<br />
<br />
= Sound Group XML =<br />
<br />
This is the XML file that describes a group of sounds. One of those sounds will be randomly chosen and played whenever the sound group is triggered.<br><br />
<br />
The file will specify a count of the number of <code>variants</code> that exist, and a sound file will need to exist for each of those variants.<br><br />
For a Sound Group XML with three variants, the XML file and and corresponding sound variants should follow a naming scheme like this:<br />
* <code>Data/Sounds/example_subdir/example_sound_group.xml</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_1.wav</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_2.wav</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_3.wav</code><br><br />
<br />
== Sound Group XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<soundgroup<br />
variants = "3"<br />
delay = "5.3"<br />
volume = "0.1"<br />
max_distance = "77.5"<br />
/><br />
</pre><br />
<br />
== Sound Group element -> variants attribute ==<br />
<pre><br />
<soundgroup variants = "3" /><br />
</pre><br />
<br />
'''Optional''' - Integer value. '''Default''': 1.<br><br />
The count of variants. There must also be a corresponding <code>SoundGroupXmlName_1.wav</code> file for every variant, numbered incrementally up to the variant count.<br><br />
E.g. if there was 3 variants, there would need to be files named <code>SoundGroupXmlName_1.wav</code>, <code>SoundGroupXmlName_2.wav</code>, and <code>SoundGroupXmlName_3.wav</code>.<br />
<br />
== Sound Group element -> delay attribute ==<br />
<pre><br />
<soundgroup delay = "5.3" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0.<br><br />
A delay to add to the start of sound playback, in seconds.<br />
<br />
== Sound Group element -> volume attribute ==<br />
<pre><br />
<soundgroup volume = "0.1" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0.<br><br />
The volume to play back the sound.<br><br />
This is further multiplied by the gain specified when triggering the sound group in gameplay code.<br />
<br />
== Sound Group element -> max_distance attribute ==<br />
<pre><br />
<soundgroup max_distance = "77.5" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 30.0.<br><br />
The maximum distance that the sound can be heard by the player.<br><br />
It will be overridden by the <code>max_distance</code> in the collision sound event, in the [[Xml File Formats#Material XML -> Events element -> Event element|Material XML]], if specified for the given collision sound event.<br />
<br />
= Synced Animation Group XML =<br />
<br />
'''TODO:'''<br />
<br />
= Version Manifest XML =<br />
<br />
'''TODO:'''<br />
<br />
= Voice XML =<br />
<br />
'''TODO:'''</div>Merlynhttp://wiki.wolfire.com/index.php?title=Xml_File_Formats&diff=6229Xml File Formats2023-09-10T09:26:26Z<p>Merlyn: /* Object XML */ Add example</p>
<hr />
<div>= TODO: =<br />
<br />
Level, Saved Object, Prefab - These have more confusing schemas, to the point where I'm not entirely sure they're distinct types from one another, and I haven't nailed them down yet -merlyn<br />
<br />
= Actor XML =<br />
<br />
This is the top-level XML file for an NPC or combat character. It binds a [[Xml File Formats#Character XML|Character XML]] file to an [[Character Scripting|AI angelscript]] file.<br><br />
When a level references a character, this is the file type that is referenced.<br />
<br />
== Actor XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<Actor><br />
<Character>Data/Characters/rabbot.xml</Character><br />
<ControlScript>enemycontrol.as</ControlScript><br />
</Actor><br />
</pre><br />
<br />
== Actor XML -> Character element ==<br />
<pre><br />
<Actor><br />
<Character>Data/Characters/rabbot.xml</Character><br />
...<br />
</Actor><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Xml File Formats#Character XML|Character XML]]<br />
<br />
== Actor XML -> ControlScript element ==<br />
<pre><br />
<Actor><br />
...<br />
<ControlScript>enemycontrol.as</ControlScript><br />
</Actor><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Character Scripting|AI angelscript]]. Relative to <code>Data/Scripts</code> folder<br />
<br />
= Asset Preload XML =<br />
<br />
'''TODO:'''<br />
<br />
= Attachment XML =<br />
<br />
'''TODO:'''<br />
<br />
= Attack XML =<br />
<br />
'''TODO:'''<br />
<br />
= Character XML =<br />
<br />
'''TODO:'''<br />
<br />
= Decal XML =<br />
<br />
'''TODO:'''<br />
<br />
= Events XML =<br />
<br />
'''TODO:'''<br />
<br />
= Hotspot XML =<br />
<br />
This is the top-level XML file for a hotspot game object. It specifies the billboard image, and the [[Hotspot Scripting|Hotspot angelscript]] file.<br><br />
When a level references a hotspot, this is the file type that is referenced.<br />
<br />
== Hotspot XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<Type>generic</Type><br />
<Hotspot><br />
<BillboardColorMap>Data/UI/spawner/thumbs/Hotspot/empty.png</BillboardColorMap><br />
<Script>hotspots/sound_hotspot.as</Script><br />
</Hotspot><br />
</pre><br />
<br />
== Hotspot XML -> Type element ==<br />
<pre><br />
<Type>generic</Type><br />
<Hotspot><br />
...<br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. This should always have the value <code><Type>generic</Type></code>.<br><br />
Note: Having two document elements is not valid XML, and I'm not sure what purpose this element serves. But leave it in, since all the hotspots do it. -merlyn<br />
<br />
== Hotspot XML -> Character element ==<br />
<pre><br />
<Hotspot><br />
<BillboardColorMap>Data/UI/spawner/thumbs/Hotspot/empty.png</BillboardColorMap><br />
...<br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. Path to image file. If you don't want a billboard image, you can use <code>Data/UI/spawner/thumbs/Hotspot/empty.png</code>.<br />
<br />
== Hotspot XML -> Script element ==<br />
<pre><br />
<Hotspot><br />
...<br />
<Script>hotspots/sound_hotspot.as</Script><br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Hotspot Scripting|Hotspot angelscript]]. Relative to <code>Data/Scripts</code> folder.<br />
<br />
= Item XML =<br />
<br />
'''TODO:'''<br />
<br />
= Layered Song XML =<br />
<br />
'''TODO:'''<br />
<br />
= Level Meta XML =<br />
<br />
'''TODO:'''<br />
<br />
= Material XML =<br />
<br />
This XML file specifies the sounds that will be played when a character or item interacts with a world object. It is used to model the sound differences between wood, metal, soil, ice, etc.<br><br />
<br />
<code>Data/Materials/default.xml</code> is the global "default" material, if the material isn't specified by the world object.<br><br />
<br />
When the engine or a gameplay script detects a physics event, the code will do a lookup against the current material, for an event with that event name. If the event name is found, then the corresponding sound will be triggered.<br><br />
<br />
Some of these events and materials might specify modifiers (<code>soft</code>, <code>heavy</code>, etc). If they do, the code will first do the lookup against the <code><events mod="themod"></code> version of the event.<br><br />
If an event with the given name is not found with that modifier, the code will then lookup a version of the same event name, but with no modifiers specified.<br><br />
<br />
Some of the values, if not specified, will look at a global "base" material to find the value of the parameter. <code>max_distance</code> is the only one of those parameters right now.<br />
<br />
<code>Data/Materials/base.xml</code> is the global "base" material.<br><br />
<br />
== Material XML Example ==<br />
From <code>Data/Materials/dirt.xml</code> - this is not the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_light_dirt.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_medium_dirt.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_heavy_dirt.xml" attached="true"/><br />
<-- Note: more sound events in the real file than just these --><br />
</events> <br />
<events mod="soft"><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
</events><br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"<br />
shader="stepdecalfast"/><br />
<skid color="Data/Textures/Decals/Footprints/rabbitdirtsmear_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtsmear_n.tga"<br />
shader="stepdecalfast"/><br />
</decals><br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
<skid path="Data/Particles/heavydirt.xml"/><br />
</particles><br />
<physics hardness = "0.8" friction = "1.0" sharp_penetration = "1.0" /><br />
</material><br />
</pre><br />
<br />
From <code>Data/Materials/default.xml</code>, which is the default Material XML file. It is used when other XML file types call for a Material XML, but one is not specified.<br><br />
This is the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
<rightrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
<leftwallstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_wallrun.xml" attached="true"/><br />
<rightwallstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_wallrun.xml" attached="true"/><br />
<leftwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_walk.xml" attached="true"/><br />
<rightwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_walk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<land soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land.xml" attached="true"/><br />
<land_soft soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land_soft.xml" attached="true"/><br />
<land_slide soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land_slide.xml" attached="true"/><br />
<slide soundgroup="Data/Sounds/concrete_foley/slide_concrete_short.xml" attached="true"/><br />
<kick soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_kick.xml" attached="true"/><br />
<sweep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_sweep.xml" attached="true"/><br />
<jump soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump.xml" attached="true"/><br />
<roll soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_roll.xml" attached="true"/><br />
<edge_grab soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_edge_grab.xml" attached="true"/><br />
<edge_crawl soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_edgecrawl.xml" attached="true"/><br />
<bodyfall soundgroup="Data/Sounds/concrete_foley/bf_concrete.xml" attached="true"/><br />
<bodyfall_light soundgroup="Data/Sounds/concrete_foley/bf_concrete_light.xml" attached="true"/><br />
<bodyfall_medium soundgroup="Data/Sounds/concrete_foley/bf_concrete_medium.xml" attached="true"/><br />
<bodyfall_heavy soundgroup="Data/Sounds/concrete_foley/bf_concrete_heavy.xml" attached="true"/><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_light_stone.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_medium_stone.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_heavy_stone.xml" attached="true"/><br />
<blood_spatter soundgroup="Data/Sounds/blood/spatter_hard.xml"/><br />
<blood_drip soundgroup="Data/Sounds/blood/drip_lowpass.xml"/><br />
</events><br />
<events mod="heavy"><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_run.xml" attached="true"/><br />
<rightrunstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_run.xml" attached="true"/><br />
<leftwallstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_wallrun.xml" attached="true"/><br />
<rightwallstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_wallrun.xml" attached="true"/><br />
<leftwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_walk.xml" attached="true"/><br />
<rightwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_walk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<land soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<land_soft soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<land_slide soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<kick soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_kick.xml" attached="true"/><br />
<sweep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_sweep.xml" attached="true"/><br />
<jump soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump.xml" attached="true"/><br />
<roll soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_roll.xml" attached="true"/><br />
<edge_grab soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_edge_grab.xml" attached="true"/><br />
</events><br />
<events mod="soft"><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
</events><br />
<physics hardness = "1.0" friction = "1.0" sharp_penetration = "0.0" /><br />
</material><br />
</pre><br />
<br />
From <code>Data/Materials/base.xml</code>, which specifies the default '''max_distance''' values for all materials.<br><br />
This is the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<leftrunstep max_distance = "40.0"/><br />
<rightrunstep max_distance = "40.0"/><br />
<leftwallstep max_distance = "40.0"/><br />
<rightwallstep max_distance = "40.0"/><br />
<leftwalkstep max_distance = "25.0"/><br />
<rightwalkstep max_distance = "25.0"/><br />
<leftcrouchwalkstep max_distance = "10.0"/><br />
<rightcrouchwalkstep max_distance = "10.0"/><br />
<land max_distance = "60.0"/><br />
<land_soft max_distance = "30.0"/><br />
<land_slide max_distance = "20.0"/><br />
<slide max_distance = "30.0"/><br />
<kick max_distance = "25.0"/><br />
<sweep max_distance = "25.0"/><br />
<jump max_distance = "40.0"/><br />
<roll max_distance = "15.0"/><br />
<edge_grab max_distance = "25.0"/><br />
<edge_crawl max_distance = "15.0"/><br />
<bodyfall max_distance = "80.0"/><br />
<bodyfall_light max_distance = "40.0"/><br />
<bodyfall_medium max_distance = "60.0"/><br />
<bodyfall_heavy max_distance = "80.0"/><br />
<weapon_drop_light max_distance = "80.0"/><br />
<weapon_drop_medium max_distance = "80.0"/><br />
<weapon_drop_heavy max_distance = "80.0"/><br />
<blood_spatter max_distance = "30.0"/><br />
<blood_drip max_distance = "20.0"/><br />
<flip max_distance = "20.0"/><br />
<choke_grab max_distance = "10.0"/>;<br />
<choke_move max_distance = "10.0"/>;<br />
<choke_fall max_distance = "10.0"/>;<br />
</events><br />
<events mod="heavy"><br />
<leftrunstep max_distance = "50.0"/><br />
<rightrunstep max_distance = "50.0"/><br />
<leftwallstep max_distance = "50.0"/><br />
<rightwallstep max_distance = "50.0"/><br />
<leftwalkstep max_distance = "30.0"/><br />
<rightwalkstep max_distance = "30.0"/><br />
<leftcrouchwalkstep max_distance = "20.0"/><br />
<rightcrouchwalkstep max_distance = "20.0"/><br />
<land max_distance = "80.0"/><br />
<land_soft max_distance = "40.0"/><br />
<land_slide max_distance = "40.0"/><br />
<kick max_distance = "30.0"/><br />
<sweep max_distance = "30.0"/><br />
<jump max_distance = "50.0"/><br />
<roll max_distance = "25.0"/><br />
<edge_grab max_distance = "40.0"/><br />
</events><br />
</material><br />
</pre><br />
<br />
== Material XML -> Events element ==<br />
<pre><br />
<material><br />
<events><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision sound events for the material.<br />
<br />
=== Events element -> mod attribute ===<br />
<br />
<pre><br />
<material><br />
<events mod="soft"><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
'''Optional''' - String value. Specifies that this list of collision sound events only apply when the given modifier is specified.<br><br />
The modifiers are different ways the sounds will be presented, such as <code>soft</code>, <code>heavy</code>, etc.<br />
<br />
== Material XML -> Events element -> Sound element ==<br />
<pre><br />
<material><br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true" max_distance = "40.0"/><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
The sound (and physical properties of the sound) for a given collision sound event. The name of the element corresponds to the name of the collision sound event (in this example, '''leftrunstep''').<br />
<br />
=== Sound element -> soundgroup attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - String value. Specifies the [[Xml File Formats#Sound Group XML|Sound Group XML]] for the material interaction event.<br><br />
'''TODO:''': Is this really optional? If so, what is the default behavior?<br />
<br />
=== Sound element -> attached attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep attached="true"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - Boolean value. '''Default''': false<br><br />
If true, the sound (group) will be played as a sound that is attached to the character that triggered the collision sound event.<br />
<br />
=== Sound element -> max_distance attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep max_distance = "40.0"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0<br><br />
The max distance that the sound will still be audible to the player.<br><br />
If the value is 0.0, then the max distance will be considered infinite.<br><br />
If it is not specified for a given sound collision event, then the corresponding value in <code>Data/Materials/base.xml</code> will be used instead.<br />
<br />
== Material XML -> Decals element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision decal events for the material.<br />
<br />
== Material XML -> Decals element -> Decal element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"<br />
shader="stepdecalfast"/><br />
<skid color="Data/Textures/Decals/Footprints/rabbitdirtsmear_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtsmear_n.tga"<br />
shader="stepdecalfast"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
The decal (and rendering properties of the decal) for a given collision decal event. The name of the element corresponds to the name of the collision decal event (in these examples, '''step''' and '''skid''').<br />
<br />
=== Decal element -> color attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the decal's color texture.<br />
<br />
=== Decal element -> normal attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the decal's normal texture.<br />
<br />
=== Decal element -> shader attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step shader="stepdecalfast"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the shader name that will be used when rendering the decal.<br />
<br />
== Material XML -> Particles element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
...<br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision particle events for the material. <br />
<br />
== Material XML -> Particles element -> Particle element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
<skid path="Data/Particles/heavydirt.xml"/><br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
The particle for a given collision particle event. The name of the element corresponds to the name of the collision particle event (in these examples, '''step''' and '''skid'''). <br />
<br />
=== Particle element -> path attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
...<br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Xml File Formats#Particle XML|Particle XML]]<br />
<br />
== Material XML -> Physics element ==<br />
<br />
<pre><br />
<material><br />
<physics hardness = "0.8" friction = "1.0" sharp_penetration = "1.0" /><br />
</material><br />
</pre><br />
<br />
The physics properties of the the material. Collision gameplay events will use these properties to determine how to make other objects respond when they collide with the object this material is applied to.<br />
<br />
=== Physics element -> hardness attribute ===<br />
<br />
<pre><br />
<material><br />
<physics hardness = "0.8"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0<br><br />
'''TODO: Describe'''<br />
<br />
=== Physics element -> friction attribute ===<br />
<br />
<pre><br />
<material><br />
<physics friction = "1.0"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0<br><br />
The friction between any other object and the object this material is applied to.<br><br />
In real life this would depend on the materials for both objects, but the game makes simplifying assumptions to make the mapping a bit less complicated.<br />
<br />
=== Physics element -> sharp_penetration attribute ===<br />
<br />
<pre><br />
<material><br />
<physics sharp_penetration = "1.0"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0<br><br />
'''TODO: Describe'''<br />
<br />
= Mod XML =<br />
<br />
'''TODO:'''<br />
<br />
= Music XML =<br />
<br />
'''TODO:'''<br />
<br />
= Nav Mesh Meta XML =<br />
<br />
'''TODO:'''<br />
<br />
= Object XML =<br />
<br />
This is the top-level XML file for a level object. It specifies visual parameters, some gameplay parameters, and paths for visual assets.<br><br />
Other XML file types reference this XML file type, such as [[Xml File Formats#Character XML|Character XML files]] and [[Xml File Formats#Item XML|Item XML files]].<br />
<br />
== Object XML Example ==<br />
<br />
<pre><br />
<?xml version="1.0" ?><br />
<Object><br />
<Model>Data/Models/Buildings/arena/arena_gate.obj</Model><br />
<ColorMap>Data/Textures/Buildings/arena/arena_gate_c.tga</ColorMap><br />
<NormalMap>Data/Textures/Buildings/arena/arena_gate_n.tga</NormalMap><br />
<TranslucencyMap>Data/Textures/Buildings/arena/arena_gate_tl.tga</TranslucencyMap><br />
<WindMap>Data/Textures/Buildings/arena/arena_gate_wind.tga</WindMap><br />
<SharpnessMap>Data/Textures/Buildings/arena/arena_gate_sharpness.tga</SharpnessMap><br />
<Label>impale</Label><br />
<WeightMap>Data/Textures/Buildings/arena/arena_gate_w.tga</WeightMap><br />
<PaletteMap label_red="Bars"<br />
label_green="Ropes"<br />
label_blue="Banner 1"<br />
label_alpha="Banner 2"<br />
label_other="Banner 3"><br />
Data/Textures/Buildings/arena/arena_gate_m.tga<br />
</PaletteMap><br />
<DetailMaps><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/wood_grain_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/wood_grain_n.tga"<br />
materialpath="Data/Materials/wood.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gray_metal_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gray_metal_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/cat_cobbles_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/cat_cobbles_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
<DetailMap colorpath="Data/Textures/Buildings/detail_textures/gold_hexagons_c.tga"<br />
normalpath="Data/Textures/Buildings/detail_textures/gold_hexagons_n.tga"<br />
materialpath="Data/Materials/rocks.xml" /><br />
</DetailMaps><br />
<DetailObjects><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="3" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="10" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/GrassTest/grass_square.xml" weight_path="Data/Textures/Environments/Cliffs/groundbase_02_grass_short.png"<br />
normal_conform="0.9" density="2" min_embed="-0.2" max_embed="0.0" min_scale="4.0" max_scale="6.8"<br />
view_distance="20" jitter_degrees="10" overbright="0" /><br />
<DetailObject obj_path="Data/Objects/Environment/Rocks/lichen_rock_a.xml" weight_path="Data/Textures/Terrain/forest_hills/forest_hills_not_grass.tga"<br />
normal_conform="1" density="20" min_embed="0.3" max_embed="0.7" min_scale="0.08" max_scale="0.12"<br />
view_distance="10" jitter_degrees="45" overbright="0.4" tint_weight="0.5" collision_type="static" /><br />
</DetailObjects><br />
<ShaderName>detailmap4</ShaderName><br />
<avg_color r = "100" g = "128" b = "47" /><br />
<MaterialPath>Data/Materials/wood.xml</MaterialPath><br />
<Flags transparent = "true"<br />
no_collision = "true"<br />
clamp_texture = "true"<br />
bush_collision = "true"<br />
terrain_fixed = "true"<br />
dynamic = "true"<br />
double_sided = "true"<br />
/><br />
<GroundOffset>0.5</GroundOffset><br />
<ColorTint r = "101" g = "129" b = "46" /><br />
</Object><br />
</pre><br />
<br />
= Particle XML =<br />
<br />
'''TODO:'''<br />
<br />
= Path XML =<br />
<br />
'''TODO:'''<br />
<br />
= Reaction XML =<br />
<br />
'''TODO:'''<br />
<br />
= Retarget XML =<br />
<br />
'''TODO:'''<br />
<br />
= Rig XML =<br />
<br />
This is the XML file for a character skeleton. It binds a [[Xml File Formats#Character XML|Character XML]] file to an [[Character Scripting|AI angelscript]] file.<br><br />
When a level references a character, this is the file type that is referenced.<br />
<br />
== Rig XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<rig bone_path = "Data/Skeletons/r_wolf2.phxbn"<br />
model_path = "Data/Models/Characters/IGF_Wolf/IGF_Wolf.obj"<br />
mass_path = "Data/Skeletons/r_lt_dog.xml"/><br />
</pre><br />
<br />
== Rig element -> bone_path attribute ==<br />
<pre><br />
<rig bone_path = "Data/Skeletons/r_wolf2.phxbn"/><br />
</pre><br />
<br />
'''Required''' - String value. Path to the skeleton file, using the custom Phoenix Engine skeleton file type ([[Binary File Formats#PHXBN|PHXBN]]. This file MUST have been exported using the mesh specified in <code>model_path</code>.<br />
<br />
== Rig element -> model_path attribute ==<br />
<pre><br />
<rig model_path = "Data/Models/Characters/IGF_Wolf/IGF_Wolf.obj"/><br />
</pre><br />
<br />
'''Required''' - String value. Path to Obj model file to use as skinned the character mesh. This file MUST be the same as the one used when exporting the skeleton specified in <code>bone_path</code>.<br />
<br />
== Rig element -> mass_path attribute ==<br />
<pre><br />
<rig mass_path = "Data/Skeletons/r_lt_dog.xml"/><br />
</pre><br />
<br />
'''Optional''' - String value. Path to [[Xml File Formats#Rig XML|Rig XML]]. Used to override the current skeleton with the bone masses from a different skeleton.<br><br />
'''TODO''': Why you'd want to do this? Who knows! -merlyn<br />
<br />
= Shader Preload XML =<br />
<br />
'''TODO:'''<br />
<br />
= Sound Group XML =<br />
<br />
This is the XML file that describes a group of sounds. One of those sounds will be randomly chosen and played whenever the sound group is triggered.<br><br />
<br />
The file will specify a count of the number of <code>variants</code> that exist, and a sound file will need to exist for each of those variants.<br><br />
For a Sound Group XML with three variants, the XML file and and corresponding sound variants should follow a naming scheme like this:<br />
* <code>Data/Sounds/example_subdir/example_sound_group.xml</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_1.wav</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_2.wav</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_3.wav</code><br><br />
<br />
== Sound Group XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<soundgroup<br />
variants = "3"<br />
delay = "5.3"<br />
volume = "0.1"<br />
max_distance = "77.5"<br />
/><br />
</pre><br />
<br />
== Sound Group element -> variants attribute ==<br />
<pre><br />
<soundgroup variants = "3" /><br />
</pre><br />
<br />
'''Optional''' - Integer value. '''Default''': 1.<br><br />
The count of variants. There must also be a corresponding <code>SoundGroupXmlName_1.wav</code> file for every variant, numbered incrementally up to the variant count.<br><br />
E.g. if there was 3 variants, there would need to be files named <code>SoundGroupXmlName_1.wav</code>, <code>SoundGroupXmlName_2.wav</code>, and <code>SoundGroupXmlName_3.wav</code>.<br />
<br />
== Sound Group element -> delay attribute ==<br />
<pre><br />
<soundgroup delay = "5.3" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0.<br><br />
A delay to add to the start of sound playback, in seconds.<br />
<br />
== Sound Group element -> volume attribute ==<br />
<pre><br />
<soundgroup volume = "0.1" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0.<br><br />
The volume to play back the sound.<br><br />
This is further multiplied by the gain specified when triggering the sound group in gameplay code.<br />
<br />
== Sound Group element -> max_distance attribute ==<br />
<pre><br />
<soundgroup max_distance = "77.5" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 30.0.<br><br />
The maximum distance that the sound can be heard by the player.<br><br />
It will be overridden by the <code>max_distance</code> in the collision sound event, in the [[Xml File Formats#Material XML -> Events element -> Event element|Material XML]], if specified for the given collision sound event.<br />
<br />
= Synced Animation Group XML =<br />
<br />
'''TODO:'''<br />
<br />
= Version Manifest XML =<br />
<br />
'''TODO:'''<br />
<br />
= Voice XML =<br />
<br />
'''TODO:'''</div>Merlynhttp://wiki.wolfire.com/index.php?title=Portal:Overgrowth&diff=6228Portal:Overgrowth2023-09-10T09:16:54Z<p>Merlyn: /* Asset Creation */</p>
<hr />
<div><noinclude>[[Category:Portals|{{PAGENAME}}]] [[Category:Overgrowth|{{PAGENAME}}]] </noinclude><br />
{{Overgrowth Portal Header}}<br />
<br />
-----<br />
<br />
<br />
[http://www.wolfire.com/overgrowth Overgrowth] is a cross-platform game developed by Wolfire Games, an independent game development company. Overgrowth is the spiritual successor to [[Lugaru]], an earlier game also developed by Wolfire. Development of Overgrowth was officially announced on September 17th, 2008, and version 1.0 was officially released on October 16th, 2017. The game is currently purchasable via [http://www.wolfire.com/overgrowth/preorder direct order], through [https://www.humblebundle.com/store/overgrowth Humble Bundle], and [http://store.steampowered.com/app/25000/Overgrowth/ Steam].<br />
<br />
Overgrowth's Gameplay emphasizes fluid, fast-paced, 3rd-person perspective armed and unarmed melee combat, 3D-platforming, and stealthy infiltration. Overgrowth uses a custom game engine codenamed "[[Phoenix Engine|Phoenix]]", and a lot of work has been put into making it accessible to [[Editor_Interface|modding]].<br />
<br />
The game currently consists of two campaigns - a remastering of Lugaru in the Phoenix engine, and its successor, the new Overgrowth campaign, as well as a collection of maps (many of which are populated by enemies) which the player is able to explore, fight through, and even modify if they are so inclined. There are three additional gameplay modules, one called "Arena", in which the player is pitted against procedurally generated NPC enemies in gladiatorial matches, and "Versus," a two-player local competitive mode in which you can fight your friends, or enemies! There are also numerous player-made characters, weapons, maps, campaigns, and gameplay modifications available through the [https://steamcommunity.com/app/25000/workshop/ Steam Workshop], and a community-made tool called the [http://forums.wolfire.com/viewtopic.php?f=13&t=14201 SUMlauncher].<br />
<br />
The story of Overgrowth features a continuation of [[Turner]]'s journey, 1 year after the events of [[Lugaru]]. In addition to anthropomorphic rabbits and wolves, the Overgrowth Universe now includes cats, dogs, and rats (see article: [[Races]]), all of whom appear in the main campaign.<br />
<br />
== Playing and Configuring Overgrowth ==<br />
* [[Getting Started]]<br />
* [[Control Reference]]<br />
* [[Configuring Overgrowth]]<br />
* [[Overgrowth FAQ]]<br />
<br />
== The Overgrowth Universe ==<br />
* [[Races]]<br />
* [[Locations]]<br />
* [[Characters (lore)]]<br />
* [[Equipment and Weapons]]<br />
* [[Lore]]<br />
<br />
== Phoenix Engine Documentation ==<br />
<br />
Here we aim to provide comprehensive documentation about all features relevant to modding and level editing.<br />
To get started with the editor, level making and modding, Constance has a really well made video tutorial on youtube https://www.youtube.com/watch?v=eS3RujmDQ2M&list=PLuNY3k_ozhofaucF0mq043_QAj8eEgXzV&index=1<br />
<br />
=== General ===<br />
* [[Creating a new Mod]]<br />
<br />
=== Level Editing ===<br />
* [[Editor Interface]]<br />
* [[Overgrowth Levels | Setting Up a Level - XML Files]]<br />
* [[Prefabs]]<br />
* [[Custom Terrain | Choosing or Creating Terrain]]<br />
* [[Lighting]]<br />
* [[Script Parameters]]<br />
* [[Characters]]<br />
* [[Weapons]]<br />
* [[NPC Navigation]]<br />
* [[Hotspots]]<br />
* [[Dialogue Editor]]<br />
* [[Checkpoints]]<br />
* [[Shader And Weather Effects]]<br />
** [[Rain Weather Effects]]<br />
* [[LevelScripts]]<br />
<br />
=== Asset Creation ===<br />
* [[3D Objects]]<br />
* [[Custom Terrain]]<br />
* [[Custom Weapons & Items |Custom Weapons and Equippable Items]]<br />
* [[Character Models]]<br />
* [[Custom Animations]]<br />
* [[Custom Attacks]]<br />
* [[Particle Effects]]<br />
* [[Custom Decals]]<br />
* [[Binary File Formats]]<br />
* [[Xml File Formats]]<br />
* [[Shader Creation]]<br />
<br />
=== Tutorials ===<br />
* [[Making a Pitch Black Level]]<br />
* [[Making New Models & Textures]]<br />
* [[Dialogue]]<br />
<br />
=== Scripting ===<br />
* [[Scripting]]<br />
* [[Common Script External Code]]<br />
* [[Hotspot Scripting]]<br />
** [[Level Script External Code|Hotspot Script External Code]]<br />
* [[LevelScripts]]<br />
** [[Level Script External Code]]<br />
* [[Character Scripting]]<br />
** [[Character Script External Code]]<br />
* [[Editor Camera]]<br />
** [[Editor Camera Script External Code]]<br />
<br />
== Misc ==<br />
* [[Useful Links]]<br />
* [[Supported Video Cards]]<br />
* [[Overgrowth_Linux|Linux]]<br />
* [[Alpha List]]<br />
* [[Overgrowth tests]] {{stub}}<br />
* [[Post Processing Effects]]</div>Merlynhttp://wiki.wolfire.com/index.php?title=Xml_File_Formats&diff=6227Xml File Formats2023-09-05T07:46:00Z<p>Merlyn: /* Material XML -> Events element -> Event element */</p>
<hr />
<div>= TODO: =<br />
<br />
Level, Saved Object, Prefab - These have more confusing schemas, to the point where I'm not entirely sure they're distinct types from one another, and I haven't nailed them down yet -merlyn<br />
<br />
= Actor XML =<br />
<br />
This is the top-level XML file for an NPC or combat character. It binds a [[Xml File Formats#Character XML|Character XML]] file to an [[Character Scripting|AI angelscript]] file.<br><br />
When a level references a character, this is the file type that is referenced.<br />
<br />
== Actor XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<Actor><br />
<Character>Data/Characters/rabbot.xml</Character><br />
<ControlScript>enemycontrol.as</ControlScript><br />
</Actor><br />
</pre><br />
<br />
== Actor XML -> Character element ==<br />
<pre><br />
<Actor><br />
<Character>Data/Characters/rabbot.xml</Character><br />
...<br />
</Actor><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Xml File Formats#Character XML|Character XML]]<br />
<br />
== Actor XML -> ControlScript element ==<br />
<pre><br />
<Actor><br />
...<br />
<ControlScript>enemycontrol.as</ControlScript><br />
</Actor><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Character Scripting|AI angelscript]]. Relative to <code>Data/Scripts</code> folder<br />
<br />
= Asset Preload XML =<br />
<br />
'''TODO:'''<br />
<br />
= Attachment XML =<br />
<br />
'''TODO:'''<br />
<br />
= Attack XML =<br />
<br />
'''TODO:'''<br />
<br />
= Character XML =<br />
<br />
'''TODO:'''<br />
<br />
= Decal XML =<br />
<br />
'''TODO:'''<br />
<br />
= Events XML =<br />
<br />
'''TODO:'''<br />
<br />
= Hotspot XML =<br />
<br />
This is the top-level XML file for a hotspot game object. It specifies the billboard image, and the [[Hotspot Scripting|Hotspot angelscript]] file.<br><br />
When a level references a hotspot, this is the file type that is referenced.<br />
<br />
== Hotspot XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<Type>generic</Type><br />
<Hotspot><br />
<BillboardColorMap>Data/UI/spawner/thumbs/Hotspot/empty.png</BillboardColorMap><br />
<Script>hotspots/sound_hotspot.as</Script><br />
</Hotspot><br />
</pre><br />
<br />
== Hotspot XML -> Type element ==<br />
<pre><br />
<Type>generic</Type><br />
<Hotspot><br />
...<br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. This should always have the value <code><Type>generic</Type></code>.<br><br />
Note: Having two document elements is not valid XML, and I'm not sure what purpose this element serves. But leave it in, since all the hotspots do it. -merlyn<br />
<br />
== Hotspot XML -> Character element ==<br />
<pre><br />
<Hotspot><br />
<BillboardColorMap>Data/UI/spawner/thumbs/Hotspot/empty.png</BillboardColorMap><br />
...<br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. Path to image file. If you don't want a billboard image, you can use <code>Data/UI/spawner/thumbs/Hotspot/empty.png</code>.<br />
<br />
== Hotspot XML -> Script element ==<br />
<pre><br />
<Hotspot><br />
...<br />
<Script>hotspots/sound_hotspot.as</Script><br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Hotspot Scripting|Hotspot angelscript]]. Relative to <code>Data/Scripts</code> folder.<br />
<br />
= Item XML =<br />
<br />
'''TODO:'''<br />
<br />
= Layered Song XML =<br />
<br />
'''TODO:'''<br />
<br />
= Level Meta XML =<br />
<br />
'''TODO:'''<br />
<br />
= Material XML =<br />
<br />
This XML file specifies the sounds that will be played when a character or item interacts with a world object. It is used to model the sound differences between wood, metal, soil, ice, etc.<br><br />
<br />
<code>Data/Materials/default.xml</code> is the global "default" material, if the material isn't specified by the world object.<br><br />
<br />
When the engine or a gameplay script detects a physics event, the code will do a lookup against the current material, for an event with that event name. If the event name is found, then the corresponding sound will be triggered.<br><br />
<br />
Some of these events and materials might specify modifiers (<code>soft</code>, <code>heavy</code>, etc). If they do, the code will first do the lookup against the <code><events mod="themod"></code> version of the event.<br><br />
If an event with the given name is not found with that modifier, the code will then lookup a version of the same event name, but with no modifiers specified.<br><br />
<br />
Some of the values, if not specified, will look at a global "base" material to find the value of the parameter. <code>max_distance</code> is the only one of those parameters right now.<br />
<br />
<code>Data/Materials/base.xml</code> is the global "base" material.<br><br />
<br />
== Material XML Example ==<br />
From <code>Data/Materials/dirt.xml</code> - this is not the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_light_dirt.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_medium_dirt.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_heavy_dirt.xml" attached="true"/><br />
<-- Note: more sound events in the real file than just these --><br />
</events> <br />
<events mod="soft"><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
</events><br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"<br />
shader="stepdecalfast"/><br />
<skid color="Data/Textures/Decals/Footprints/rabbitdirtsmear_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtsmear_n.tga"<br />
shader="stepdecalfast"/><br />
</decals><br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
<skid path="Data/Particles/heavydirt.xml"/><br />
</particles><br />
<physics hardness = "0.8" friction = "1.0" sharp_penetration = "1.0" /><br />
</material><br />
</pre><br />
<br />
From <code>Data/Materials/default.xml</code>, which is the default Material XML file. It is used when other XML file types call for a Material XML, but one is not specified.<br><br />
This is the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
<rightrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
<leftwallstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_wallrun.xml" attached="true"/><br />
<rightwallstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_wallrun.xml" attached="true"/><br />
<leftwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_walk.xml" attached="true"/><br />
<rightwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_walk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<land soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land.xml" attached="true"/><br />
<land_soft soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land_soft.xml" attached="true"/><br />
<land_slide soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land_slide.xml" attached="true"/><br />
<slide soundgroup="Data/Sounds/concrete_foley/slide_concrete_short.xml" attached="true"/><br />
<kick soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_kick.xml" attached="true"/><br />
<sweep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_sweep.xml" attached="true"/><br />
<jump soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump.xml" attached="true"/><br />
<roll soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_roll.xml" attached="true"/><br />
<edge_grab soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_edge_grab.xml" attached="true"/><br />
<edge_crawl soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_edgecrawl.xml" attached="true"/><br />
<bodyfall soundgroup="Data/Sounds/concrete_foley/bf_concrete.xml" attached="true"/><br />
<bodyfall_light soundgroup="Data/Sounds/concrete_foley/bf_concrete_light.xml" attached="true"/><br />
<bodyfall_medium soundgroup="Data/Sounds/concrete_foley/bf_concrete_medium.xml" attached="true"/><br />
<bodyfall_heavy soundgroup="Data/Sounds/concrete_foley/bf_concrete_heavy.xml" attached="true"/><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_light_stone.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_medium_stone.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_heavy_stone.xml" attached="true"/><br />
<blood_spatter soundgroup="Data/Sounds/blood/spatter_hard.xml"/><br />
<blood_drip soundgroup="Data/Sounds/blood/drip_lowpass.xml"/><br />
</events><br />
<events mod="heavy"><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_run.xml" attached="true"/><br />
<rightrunstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_run.xml" attached="true"/><br />
<leftwallstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_wallrun.xml" attached="true"/><br />
<rightwallstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_wallrun.xml" attached="true"/><br />
<leftwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_walk.xml" attached="true"/><br />
<rightwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_walk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<land soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<land_soft soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<land_slide soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<kick soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_kick.xml" attached="true"/><br />
<sweep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_sweep.xml" attached="true"/><br />
<jump soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump.xml" attached="true"/><br />
<roll soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_roll.xml" attached="true"/><br />
<edge_grab soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_edge_grab.xml" attached="true"/><br />
</events><br />
<events mod="soft"><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
</events><br />
<physics hardness = "1.0" friction = "1.0" sharp_penetration = "0.0" /><br />
</material><br />
</pre><br />
<br />
From <code>Data/Materials/base.xml</code>, which specifies the default '''max_distance''' values for all materials.<br><br />
This is the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<leftrunstep max_distance = "40.0"/><br />
<rightrunstep max_distance = "40.0"/><br />
<leftwallstep max_distance = "40.0"/><br />
<rightwallstep max_distance = "40.0"/><br />
<leftwalkstep max_distance = "25.0"/><br />
<rightwalkstep max_distance = "25.0"/><br />
<leftcrouchwalkstep max_distance = "10.0"/><br />
<rightcrouchwalkstep max_distance = "10.0"/><br />
<land max_distance = "60.0"/><br />
<land_soft max_distance = "30.0"/><br />
<land_slide max_distance = "20.0"/><br />
<slide max_distance = "30.0"/><br />
<kick max_distance = "25.0"/><br />
<sweep max_distance = "25.0"/><br />
<jump max_distance = "40.0"/><br />
<roll max_distance = "15.0"/><br />
<edge_grab max_distance = "25.0"/><br />
<edge_crawl max_distance = "15.0"/><br />
<bodyfall max_distance = "80.0"/><br />
<bodyfall_light max_distance = "40.0"/><br />
<bodyfall_medium max_distance = "60.0"/><br />
<bodyfall_heavy max_distance = "80.0"/><br />
<weapon_drop_light max_distance = "80.0"/><br />
<weapon_drop_medium max_distance = "80.0"/><br />
<weapon_drop_heavy max_distance = "80.0"/><br />
<blood_spatter max_distance = "30.0"/><br />
<blood_drip max_distance = "20.0"/><br />
<flip max_distance = "20.0"/><br />
<choke_grab max_distance = "10.0"/>;<br />
<choke_move max_distance = "10.0"/>;<br />
<choke_fall max_distance = "10.0"/>;<br />
</events><br />
<events mod="heavy"><br />
<leftrunstep max_distance = "50.0"/><br />
<rightrunstep max_distance = "50.0"/><br />
<leftwallstep max_distance = "50.0"/><br />
<rightwallstep max_distance = "50.0"/><br />
<leftwalkstep max_distance = "30.0"/><br />
<rightwalkstep max_distance = "30.0"/><br />
<leftcrouchwalkstep max_distance = "20.0"/><br />
<rightcrouchwalkstep max_distance = "20.0"/><br />
<land max_distance = "80.0"/><br />
<land_soft max_distance = "40.0"/><br />
<land_slide max_distance = "40.0"/><br />
<kick max_distance = "30.0"/><br />
<sweep max_distance = "30.0"/><br />
<jump max_distance = "50.0"/><br />
<roll max_distance = "25.0"/><br />
<edge_grab max_distance = "40.0"/><br />
</events><br />
</material><br />
</pre><br />
<br />
== Material XML -> Events element ==<br />
<pre><br />
<material><br />
<events><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision sound events for the material.<br />
<br />
=== Events element -> mod attribute ===<br />
<br />
<pre><br />
<material><br />
<events mod="soft"><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
'''Optional''' - String value. Specifies that this list of collision sound events only apply when the given modifier is specified.<br><br />
The modifiers are different ways the sounds will be presented, such as <code>soft</code>, <code>heavy</code>, etc.<br />
<br />
== Material XML -> Events element -> Sound element ==<br />
<pre><br />
<material><br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true" max_distance = "40.0"/><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
The sound (and physical properties of the sound) for a given collision sound event. The name of the element corresponds to the name of the collision sound event (in this example, '''leftrunstep''').<br />
<br />
=== Sound element -> soundgroup attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - String value. Specifies the [[Xml File Formats#Sound Group XML|Sound Group XML]] for the material interaction event.<br><br />
'''TODO:''': Is this really optional? If so, what is the default behavior?<br />
<br />
=== Sound element -> attached attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep attached="true"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - Boolean value. '''Default''': false<br><br />
If true, the sound (group) will be played as a sound that is attached to the character that triggered the collision sound event.<br />
<br />
=== Sound element -> max_distance attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep max_distance = "40.0"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0<br><br />
The max distance that the sound will still be audible to the player.<br><br />
If the value is 0.0, then the max distance will be considered infinite.<br><br />
If it is not specified for a given sound collision event, then the corresponding value in <code>Data/Materials/base.xml</code> will be used instead.<br />
<br />
== Material XML -> Decals element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision decal events for the material.<br />
<br />
== Material XML -> Decals element -> Decal element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"<br />
shader="stepdecalfast"/><br />
<skid color="Data/Textures/Decals/Footprints/rabbitdirtsmear_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtsmear_n.tga"<br />
shader="stepdecalfast"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
The decal (and rendering properties of the decal) for a given collision decal event. The name of the element corresponds to the name of the collision decal event (in these examples, '''step''' and '''skid''').<br />
<br />
=== Decal element -> color attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the decal's color texture.<br />
<br />
=== Decal element -> normal attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the decal's normal texture.<br />
<br />
=== Decal element -> shader attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step shader="stepdecalfast"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the shader name that will be used when rendering the decal.<br />
<br />
== Material XML -> Particles element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
...<br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision particle events for the material. <br />
<br />
== Material XML -> Particles element -> Particle element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
<skid path="Data/Particles/heavydirt.xml"/><br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
The particle for a given collision particle event. The name of the element corresponds to the name of the collision particle event (in these examples, '''step''' and '''skid'''). <br />
<br />
=== Particle element -> path attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
...<br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Xml File Formats#Particle XML|Particle XML]]<br />
<br />
== Material XML -> Physics element ==<br />
<br />
<pre><br />
<material><br />
<physics hardness = "0.8" friction = "1.0" sharp_penetration = "1.0" /><br />
</material><br />
</pre><br />
<br />
The physics properties of the the material. Collision gameplay events will use these properties to determine how to make other objects respond when they collide with the object this material is applied to.<br />
<br />
=== Physics element -> hardness attribute ===<br />
<br />
<pre><br />
<material><br />
<physics hardness = "0.8"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0<br><br />
'''TODO: Describe'''<br />
<br />
=== Physics element -> friction attribute ===<br />
<br />
<pre><br />
<material><br />
<physics friction = "1.0"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0<br><br />
The friction between any other object and the object this material is applied to.<br><br />
In real life this would depend on the materials for both objects, but the game makes simplifying assumptions to make the mapping a bit less complicated.<br />
<br />
=== Physics element -> sharp_penetration attribute ===<br />
<br />
<pre><br />
<material><br />
<physics sharp_penetration = "1.0"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0<br><br />
'''TODO: Describe'''<br />
<br />
= Mod XML =<br />
<br />
'''TODO:'''<br />
<br />
= Music XML =<br />
<br />
'''TODO:'''<br />
<br />
= Nav Mesh Meta XML =<br />
<br />
'''TODO:'''<br />
<br />
= Object XML =<br />
<br />
'''TODO:'''<br />
<br />
= Particle XML =<br />
<br />
'''TODO:'''<br />
<br />
= Path XML =<br />
<br />
'''TODO:'''<br />
<br />
= Reaction XML =<br />
<br />
'''TODO:'''<br />
<br />
= Retarget XML =<br />
<br />
'''TODO:'''<br />
<br />
= Rig XML =<br />
<br />
This is the XML file for a character skeleton. It binds a [[Xml File Formats#Character XML|Character XML]] file to an [[Character Scripting|AI angelscript]] file.<br><br />
When a level references a character, this is the file type that is referenced.<br />
<br />
== Rig XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<rig bone_path = "Data/Skeletons/r_wolf2.phxbn"<br />
model_path = "Data/Models/Characters/IGF_Wolf/IGF_Wolf.obj"<br />
mass_path = "Data/Skeletons/r_lt_dog.xml"/><br />
</pre><br />
<br />
== Rig element -> bone_path attribute ==<br />
<pre><br />
<rig bone_path = "Data/Skeletons/r_wolf2.phxbn"/><br />
</pre><br />
<br />
'''Required''' - String value. Path to the skeleton file, using the custom Phoenix Engine skeleton file type ([[Binary File Formats#PHXBN|PHXBN]]. This file MUST have been exported using the mesh specified in <code>model_path</code>.<br />
<br />
== Rig element -> model_path attribute ==<br />
<pre><br />
<rig model_path = "Data/Models/Characters/IGF_Wolf/IGF_Wolf.obj"/><br />
</pre><br />
<br />
'''Required''' - String value. Path to Obj model file to use as skinned the character mesh. This file MUST be the same as the one used when exporting the skeleton specified in <code>bone_path</code>.<br />
<br />
== Rig element -> mass_path attribute ==<br />
<pre><br />
<rig mass_path = "Data/Skeletons/r_lt_dog.xml"/><br />
</pre><br />
<br />
'''Optional''' - String value. Path to [[Xml File Formats#Rig XML|Rig XML]]. Used to override the current skeleton with the bone masses from a different skeleton.<br><br />
'''TODO''': Why you'd want to do this? Who knows! -merlyn<br />
<br />
= Shader Preload XML =<br />
<br />
'''TODO:'''<br />
<br />
= Sound Group XML =<br />
<br />
This is the XML file that describes a group of sounds. One of those sounds will be randomly chosen and played whenever the sound group is triggered.<br><br />
<br />
The file will specify a count of the number of <code>variants</code> that exist, and a sound file will need to exist for each of those variants.<br><br />
For a Sound Group XML with three variants, the XML file and and corresponding sound variants should follow a naming scheme like this:<br />
* <code>Data/Sounds/example_subdir/example_sound_group.xml</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_1.wav</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_2.wav</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_3.wav</code><br><br />
<br />
== Sound Group XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<soundgroup<br />
variants = "3"<br />
delay = "5.3"<br />
volume = "0.1"<br />
max_distance = "77.5"<br />
/><br />
</pre><br />
<br />
== Sound Group element -> variants attribute ==<br />
<pre><br />
<soundgroup variants = "3" /><br />
</pre><br />
<br />
'''Optional''' - Integer value. '''Default''': 1.<br><br />
The count of variants. There must also be a corresponding <code>SoundGroupXmlName_1.wav</code> file for every variant, numbered incrementally up to the variant count.<br><br />
E.g. if there was 3 variants, there would need to be files named <code>SoundGroupXmlName_1.wav</code>, <code>SoundGroupXmlName_2.wav</code>, and <code>SoundGroupXmlName_3.wav</code>.<br />
<br />
== Sound Group element -> delay attribute ==<br />
<pre><br />
<soundgroup delay = "5.3" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0.<br><br />
A delay to add to the start of sound playback, in seconds.<br />
<br />
== Sound Group element -> volume attribute ==<br />
<pre><br />
<soundgroup volume = "0.1" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0.<br><br />
The volume to play back the sound.<br><br />
This is further multiplied by the gain specified when triggering the sound group in gameplay code.<br />
<br />
== Sound Group element -> max_distance attribute ==<br />
<pre><br />
<soundgroup max_distance = "77.5" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 30.0.<br><br />
The maximum distance that the sound can be heard by the player.<br><br />
It will be overridden by the <code>max_distance</code> in the collision sound event, in the [[Xml File Formats#Material XML -> Events element -> Event element|Material XML]], if specified for the given collision sound event.<br />
<br />
= Synced Animation Group XML =<br />
<br />
'''TODO:'''<br />
<br />
= Version Manifest XML =<br />
<br />
'''TODO:'''<br />
<br />
= Voice XML =<br />
<br />
'''TODO:'''</div>Merlynhttp://wiki.wolfire.com/index.php?title=Xml_File_Formats&diff=6226Xml File Formats2023-09-05T07:43:53Z<p>Merlyn: /* Event element -> attached attribute */</p>
<hr />
<div>= TODO: =<br />
<br />
Level, Saved Object, Prefab - These have more confusing schemas, to the point where I'm not entirely sure they're distinct types from one another, and I haven't nailed them down yet -merlyn<br />
<br />
= Actor XML =<br />
<br />
This is the top-level XML file for an NPC or combat character. It binds a [[Xml File Formats#Character XML|Character XML]] file to an [[Character Scripting|AI angelscript]] file.<br><br />
When a level references a character, this is the file type that is referenced.<br />
<br />
== Actor XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<Actor><br />
<Character>Data/Characters/rabbot.xml</Character><br />
<ControlScript>enemycontrol.as</ControlScript><br />
</Actor><br />
</pre><br />
<br />
== Actor XML -> Character element ==<br />
<pre><br />
<Actor><br />
<Character>Data/Characters/rabbot.xml</Character><br />
...<br />
</Actor><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Xml File Formats#Character XML|Character XML]]<br />
<br />
== Actor XML -> ControlScript element ==<br />
<pre><br />
<Actor><br />
...<br />
<ControlScript>enemycontrol.as</ControlScript><br />
</Actor><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Character Scripting|AI angelscript]]. Relative to <code>Data/Scripts</code> folder<br />
<br />
= Asset Preload XML =<br />
<br />
'''TODO:'''<br />
<br />
= Attachment XML =<br />
<br />
'''TODO:'''<br />
<br />
= Attack XML =<br />
<br />
'''TODO:'''<br />
<br />
= Character XML =<br />
<br />
'''TODO:'''<br />
<br />
= Decal XML =<br />
<br />
'''TODO:'''<br />
<br />
= Events XML =<br />
<br />
'''TODO:'''<br />
<br />
= Hotspot XML =<br />
<br />
This is the top-level XML file for a hotspot game object. It specifies the billboard image, and the [[Hotspot Scripting|Hotspot angelscript]] file.<br><br />
When a level references a hotspot, this is the file type that is referenced.<br />
<br />
== Hotspot XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<Type>generic</Type><br />
<Hotspot><br />
<BillboardColorMap>Data/UI/spawner/thumbs/Hotspot/empty.png</BillboardColorMap><br />
<Script>hotspots/sound_hotspot.as</Script><br />
</Hotspot><br />
</pre><br />
<br />
== Hotspot XML -> Type element ==<br />
<pre><br />
<Type>generic</Type><br />
<Hotspot><br />
...<br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. This should always have the value <code><Type>generic</Type></code>.<br><br />
Note: Having two document elements is not valid XML, and I'm not sure what purpose this element serves. But leave it in, since all the hotspots do it. -merlyn<br />
<br />
== Hotspot XML -> Character element ==<br />
<pre><br />
<Hotspot><br />
<BillboardColorMap>Data/UI/spawner/thumbs/Hotspot/empty.png</BillboardColorMap><br />
...<br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. Path to image file. If you don't want a billboard image, you can use <code>Data/UI/spawner/thumbs/Hotspot/empty.png</code>.<br />
<br />
== Hotspot XML -> Script element ==<br />
<pre><br />
<Hotspot><br />
...<br />
<Script>hotspots/sound_hotspot.as</Script><br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Hotspot Scripting|Hotspot angelscript]]. Relative to <code>Data/Scripts</code> folder.<br />
<br />
= Item XML =<br />
<br />
'''TODO:'''<br />
<br />
= Layered Song XML =<br />
<br />
'''TODO:'''<br />
<br />
= Level Meta XML =<br />
<br />
'''TODO:'''<br />
<br />
= Material XML =<br />
<br />
This XML file specifies the sounds that will be played when a character or item interacts with a world object. It is used to model the sound differences between wood, metal, soil, ice, etc.<br><br />
<br />
<code>Data/Materials/default.xml</code> is the global "default" material, if the material isn't specified by the world object.<br><br />
<br />
When the engine or a gameplay script detects a physics event, the code will do a lookup against the current material, for an event with that event name. If the event name is found, then the corresponding sound will be triggered.<br><br />
<br />
Some of these events and materials might specify modifiers (<code>soft</code>, <code>heavy</code>, etc). If they do, the code will first do the lookup against the <code><events mod="themod"></code> version of the event.<br><br />
If an event with the given name is not found with that modifier, the code will then lookup a version of the same event name, but with no modifiers specified.<br><br />
<br />
Some of the values, if not specified, will look at a global "base" material to find the value of the parameter. <code>max_distance</code> is the only one of those parameters right now.<br />
<br />
<code>Data/Materials/base.xml</code> is the global "base" material.<br><br />
<br />
== Material XML Example ==<br />
From <code>Data/Materials/dirt.xml</code> - this is not the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_light_dirt.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_medium_dirt.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_heavy_dirt.xml" attached="true"/><br />
<-- Note: more sound events in the real file than just these --><br />
</events> <br />
<events mod="soft"><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
</events><br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"<br />
shader="stepdecalfast"/><br />
<skid color="Data/Textures/Decals/Footprints/rabbitdirtsmear_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtsmear_n.tga"<br />
shader="stepdecalfast"/><br />
</decals><br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
<skid path="Data/Particles/heavydirt.xml"/><br />
</particles><br />
<physics hardness = "0.8" friction = "1.0" sharp_penetration = "1.0" /><br />
</material><br />
</pre><br />
<br />
From <code>Data/Materials/default.xml</code>, which is the default Material XML file. It is used when other XML file types call for a Material XML, but one is not specified.<br><br />
This is the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
<rightrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
<leftwallstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_wallrun.xml" attached="true"/><br />
<rightwallstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_wallrun.xml" attached="true"/><br />
<leftwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_walk.xml" attached="true"/><br />
<rightwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_walk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<land soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land.xml" attached="true"/><br />
<land_soft soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land_soft.xml" attached="true"/><br />
<land_slide soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land_slide.xml" attached="true"/><br />
<slide soundgroup="Data/Sounds/concrete_foley/slide_concrete_short.xml" attached="true"/><br />
<kick soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_kick.xml" attached="true"/><br />
<sweep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_sweep.xml" attached="true"/><br />
<jump soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump.xml" attached="true"/><br />
<roll soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_roll.xml" attached="true"/><br />
<edge_grab soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_edge_grab.xml" attached="true"/><br />
<edge_crawl soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_edgecrawl.xml" attached="true"/><br />
<bodyfall soundgroup="Data/Sounds/concrete_foley/bf_concrete.xml" attached="true"/><br />
<bodyfall_light soundgroup="Data/Sounds/concrete_foley/bf_concrete_light.xml" attached="true"/><br />
<bodyfall_medium soundgroup="Data/Sounds/concrete_foley/bf_concrete_medium.xml" attached="true"/><br />
<bodyfall_heavy soundgroup="Data/Sounds/concrete_foley/bf_concrete_heavy.xml" attached="true"/><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_light_stone.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_medium_stone.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_heavy_stone.xml" attached="true"/><br />
<blood_spatter soundgroup="Data/Sounds/blood/spatter_hard.xml"/><br />
<blood_drip soundgroup="Data/Sounds/blood/drip_lowpass.xml"/><br />
</events><br />
<events mod="heavy"><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_run.xml" attached="true"/><br />
<rightrunstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_run.xml" attached="true"/><br />
<leftwallstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_wallrun.xml" attached="true"/><br />
<rightwallstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_wallrun.xml" attached="true"/><br />
<leftwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_walk.xml" attached="true"/><br />
<rightwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_walk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<land soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<land_soft soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<land_slide soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<kick soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_kick.xml" attached="true"/><br />
<sweep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_sweep.xml" attached="true"/><br />
<jump soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump.xml" attached="true"/><br />
<roll soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_roll.xml" attached="true"/><br />
<edge_grab soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_edge_grab.xml" attached="true"/><br />
</events><br />
<events mod="soft"><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
</events><br />
<physics hardness = "1.0" friction = "1.0" sharp_penetration = "0.0" /><br />
</material><br />
</pre><br />
<br />
From <code>Data/Materials/base.xml</code>, which specifies the default '''max_distance''' values for all materials.<br><br />
This is the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<leftrunstep max_distance = "40.0"/><br />
<rightrunstep max_distance = "40.0"/><br />
<leftwallstep max_distance = "40.0"/><br />
<rightwallstep max_distance = "40.0"/><br />
<leftwalkstep max_distance = "25.0"/><br />
<rightwalkstep max_distance = "25.0"/><br />
<leftcrouchwalkstep max_distance = "10.0"/><br />
<rightcrouchwalkstep max_distance = "10.0"/><br />
<land max_distance = "60.0"/><br />
<land_soft max_distance = "30.0"/><br />
<land_slide max_distance = "20.0"/><br />
<slide max_distance = "30.0"/><br />
<kick max_distance = "25.0"/><br />
<sweep max_distance = "25.0"/><br />
<jump max_distance = "40.0"/><br />
<roll max_distance = "15.0"/><br />
<edge_grab max_distance = "25.0"/><br />
<edge_crawl max_distance = "15.0"/><br />
<bodyfall max_distance = "80.0"/><br />
<bodyfall_light max_distance = "40.0"/><br />
<bodyfall_medium max_distance = "60.0"/><br />
<bodyfall_heavy max_distance = "80.0"/><br />
<weapon_drop_light max_distance = "80.0"/><br />
<weapon_drop_medium max_distance = "80.0"/><br />
<weapon_drop_heavy max_distance = "80.0"/><br />
<blood_spatter max_distance = "30.0"/><br />
<blood_drip max_distance = "20.0"/><br />
<flip max_distance = "20.0"/><br />
<choke_grab max_distance = "10.0"/>;<br />
<choke_move max_distance = "10.0"/>;<br />
<choke_fall max_distance = "10.0"/>;<br />
</events><br />
<events mod="heavy"><br />
<leftrunstep max_distance = "50.0"/><br />
<rightrunstep max_distance = "50.0"/><br />
<leftwallstep max_distance = "50.0"/><br />
<rightwallstep max_distance = "50.0"/><br />
<leftwalkstep max_distance = "30.0"/><br />
<rightwalkstep max_distance = "30.0"/><br />
<leftcrouchwalkstep max_distance = "20.0"/><br />
<rightcrouchwalkstep max_distance = "20.0"/><br />
<land max_distance = "80.0"/><br />
<land_soft max_distance = "40.0"/><br />
<land_slide max_distance = "40.0"/><br />
<kick max_distance = "30.0"/><br />
<sweep max_distance = "30.0"/><br />
<jump max_distance = "50.0"/><br />
<roll max_distance = "25.0"/><br />
<edge_grab max_distance = "40.0"/><br />
</events><br />
</material><br />
</pre><br />
<br />
== Material XML -> Events element ==<br />
<pre><br />
<material><br />
<events><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision sound events for the material.<br />
<br />
=== Events element -> mod attribute ===<br />
<br />
<pre><br />
<material><br />
<events mod="soft"><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
'''Optional''' - String value. Specifies that this list of collision sound events only apply when the given modifier is specified.<br><br />
The modifiers are different ways the sounds will be presented, such as <code>soft</code>, <code>heavy</code>, etc.<br />
<br />
== Material XML -> Events element -> Event element ==<br />
<pre><br />
<material><br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true" max_distance = "40.0"/><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
The sound (and physical properties of the sound) for a given collision sound event. The name of the element corresponds to the name of the collision sound event (in this example, '''leftrunstep''').<br />
<br />
=== Event element -> soundgroup attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - String value. Specifies the [[Xml File Formats#Sound Group XML|Sound Group XML]] for the material interaction event.<br><br />
'''TODO:''': Is this really optional? If so, what is the default behavior?<br />
<br />
=== Event element -> attached attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep attached="true"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - Boolean value. '''Default''': false<br><br />
If true, the sound (group) will be played as a sound that is attached to the character that triggered the collision sound event.<br />
<br />
=== Event element -> max_distance attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep max_distance = "40.0"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0<br><br />
The max distance that the sound will still be audible to the player.<br><br />
If the value is 0.0, then the max distance will be considered infinite.<br><br />
If it is not specified for a given sound collision event, then the corresponding value in <code>Data/Materials/base.xml</code> will be used instead.<br />
<br />
== Material XML -> Decals element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision decal events for the material.<br />
<br />
== Material XML -> Decals element -> Decal element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"<br />
shader="stepdecalfast"/><br />
<skid color="Data/Textures/Decals/Footprints/rabbitdirtsmear_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtsmear_n.tga"<br />
shader="stepdecalfast"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
The decal (and rendering properties of the decal) for a given collision decal event. The name of the element corresponds to the name of the collision decal event (in these examples, '''step''' and '''skid''').<br />
<br />
=== Decal element -> color attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the decal's color texture.<br />
<br />
=== Decal element -> normal attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the decal's normal texture.<br />
<br />
=== Decal element -> shader attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step shader="stepdecalfast"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the shader name that will be used when rendering the decal.<br />
<br />
== Material XML -> Particles element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
...<br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision particle events for the material. <br />
<br />
== Material XML -> Particles element -> Particle element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
<skid path="Data/Particles/heavydirt.xml"/><br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
The particle for a given collision particle event. The name of the element corresponds to the name of the collision particle event (in these examples, '''step''' and '''skid'''). <br />
<br />
=== Particle element -> path attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
...<br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Xml File Formats#Particle XML|Particle XML]]<br />
<br />
== Material XML -> Physics element ==<br />
<br />
<pre><br />
<material><br />
<physics hardness = "0.8" friction = "1.0" sharp_penetration = "1.0" /><br />
</material><br />
</pre><br />
<br />
The physics properties of the the material. Collision gameplay events will use these properties to determine how to make other objects respond when they collide with the object this material is applied to.<br />
<br />
=== Physics element -> hardness attribute ===<br />
<br />
<pre><br />
<material><br />
<physics hardness = "0.8"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0<br><br />
'''TODO: Describe'''<br />
<br />
=== Physics element -> friction attribute ===<br />
<br />
<pre><br />
<material><br />
<physics friction = "1.0"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0<br><br />
The friction between any other object and the object this material is applied to.<br><br />
In real life this would depend on the materials for both objects, but the game makes simplifying assumptions to make the mapping a bit less complicated.<br />
<br />
=== Physics element -> sharp_penetration attribute ===<br />
<br />
<pre><br />
<material><br />
<physics sharp_penetration = "1.0"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0<br><br />
'''TODO: Describe'''<br />
<br />
= Mod XML =<br />
<br />
'''TODO:'''<br />
<br />
= Music XML =<br />
<br />
'''TODO:'''<br />
<br />
= Nav Mesh Meta XML =<br />
<br />
'''TODO:'''<br />
<br />
= Object XML =<br />
<br />
'''TODO:'''<br />
<br />
= Particle XML =<br />
<br />
'''TODO:'''<br />
<br />
= Path XML =<br />
<br />
'''TODO:'''<br />
<br />
= Reaction XML =<br />
<br />
'''TODO:'''<br />
<br />
= Retarget XML =<br />
<br />
'''TODO:'''<br />
<br />
= Rig XML =<br />
<br />
This is the XML file for a character skeleton. It binds a [[Xml File Formats#Character XML|Character XML]] file to an [[Character Scripting|AI angelscript]] file.<br><br />
When a level references a character, this is the file type that is referenced.<br />
<br />
== Rig XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<rig bone_path = "Data/Skeletons/r_wolf2.phxbn"<br />
model_path = "Data/Models/Characters/IGF_Wolf/IGF_Wolf.obj"<br />
mass_path = "Data/Skeletons/r_lt_dog.xml"/><br />
</pre><br />
<br />
== Rig element -> bone_path attribute ==<br />
<pre><br />
<rig bone_path = "Data/Skeletons/r_wolf2.phxbn"/><br />
</pre><br />
<br />
'''Required''' - String value. Path to the skeleton file, using the custom Phoenix Engine skeleton file type ([[Binary File Formats#PHXBN|PHXBN]]. This file MUST have been exported using the mesh specified in <code>model_path</code>.<br />
<br />
== Rig element -> model_path attribute ==<br />
<pre><br />
<rig model_path = "Data/Models/Characters/IGF_Wolf/IGF_Wolf.obj"/><br />
</pre><br />
<br />
'''Required''' - String value. Path to Obj model file to use as skinned the character mesh. This file MUST be the same as the one used when exporting the skeleton specified in <code>bone_path</code>.<br />
<br />
== Rig element -> mass_path attribute ==<br />
<pre><br />
<rig mass_path = "Data/Skeletons/r_lt_dog.xml"/><br />
</pre><br />
<br />
'''Optional''' - String value. Path to [[Xml File Formats#Rig XML|Rig XML]]. Used to override the current skeleton with the bone masses from a different skeleton.<br><br />
'''TODO''': Why you'd want to do this? Who knows! -merlyn<br />
<br />
= Shader Preload XML =<br />
<br />
'''TODO:'''<br />
<br />
= Sound Group XML =<br />
<br />
This is the XML file that describes a group of sounds. One of those sounds will be randomly chosen and played whenever the sound group is triggered.<br><br />
<br />
The file will specify a count of the number of <code>variants</code> that exist, and a sound file will need to exist for each of those variants.<br><br />
For a Sound Group XML with three variants, the XML file and and corresponding sound variants should follow a naming scheme like this:<br />
* <code>Data/Sounds/example_subdir/example_sound_group.xml</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_1.wav</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_2.wav</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_3.wav</code><br><br />
<br />
== Sound Group XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<soundgroup<br />
variants = "3"<br />
delay = "5.3"<br />
volume = "0.1"<br />
max_distance = "77.5"<br />
/><br />
</pre><br />
<br />
== Sound Group element -> variants attribute ==<br />
<pre><br />
<soundgroup variants = "3" /><br />
</pre><br />
<br />
'''Optional''' - Integer value. '''Default''': 1.<br><br />
The count of variants. There must also be a corresponding <code>SoundGroupXmlName_1.wav</code> file for every variant, numbered incrementally up to the variant count.<br><br />
E.g. if there was 3 variants, there would need to be files named <code>SoundGroupXmlName_1.wav</code>, <code>SoundGroupXmlName_2.wav</code>, and <code>SoundGroupXmlName_3.wav</code>.<br />
<br />
== Sound Group element -> delay attribute ==<br />
<pre><br />
<soundgroup delay = "5.3" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0.<br><br />
A delay to add to the start of sound playback, in seconds.<br />
<br />
== Sound Group element -> volume attribute ==<br />
<pre><br />
<soundgroup volume = "0.1" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0.<br><br />
The volume to play back the sound.<br><br />
This is further multiplied by the gain specified when triggering the sound group in gameplay code.<br />
<br />
== Sound Group element -> max_distance attribute ==<br />
<pre><br />
<soundgroup max_distance = "77.5" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 30.0.<br><br />
The maximum distance that the sound can be heard by the player.<br><br />
It will be overridden by the <code>max_distance</code> in the collision sound event, in the [[Xml File Formats#Material XML -> Events element -> Event element|Material XML]], if specified for the given collision sound event.<br />
<br />
= Synced Animation Group XML =<br />
<br />
'''TODO:'''<br />
<br />
= Version Manifest XML =<br />
<br />
'''TODO:'''<br />
<br />
= Voice XML =<br />
<br />
'''TODO:'''</div>Merlynhttp://wiki.wolfire.com/index.php?title=Xml_File_Formats&diff=6225Xml File Formats2023-09-05T07:43:33Z<p>Merlyn: /* Event element -> attached attribute */</p>
<hr />
<div>= TODO: =<br />
<br />
Level, Saved Object, Prefab - These have more confusing schemas, to the point where I'm not entirely sure they're distinct types from one another, and I haven't nailed them down yet -merlyn<br />
<br />
= Actor XML =<br />
<br />
This is the top-level XML file for an NPC or combat character. It binds a [[Xml File Formats#Character XML|Character XML]] file to an [[Character Scripting|AI angelscript]] file.<br><br />
When a level references a character, this is the file type that is referenced.<br />
<br />
== Actor XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<Actor><br />
<Character>Data/Characters/rabbot.xml</Character><br />
<ControlScript>enemycontrol.as</ControlScript><br />
</Actor><br />
</pre><br />
<br />
== Actor XML -> Character element ==<br />
<pre><br />
<Actor><br />
<Character>Data/Characters/rabbot.xml</Character><br />
...<br />
</Actor><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Xml File Formats#Character XML|Character XML]]<br />
<br />
== Actor XML -> ControlScript element ==<br />
<pre><br />
<Actor><br />
...<br />
<ControlScript>enemycontrol.as</ControlScript><br />
</Actor><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Character Scripting|AI angelscript]]. Relative to <code>Data/Scripts</code> folder<br />
<br />
= Asset Preload XML =<br />
<br />
'''TODO:'''<br />
<br />
= Attachment XML =<br />
<br />
'''TODO:'''<br />
<br />
= Attack XML =<br />
<br />
'''TODO:'''<br />
<br />
= Character XML =<br />
<br />
'''TODO:'''<br />
<br />
= Decal XML =<br />
<br />
'''TODO:'''<br />
<br />
= Events XML =<br />
<br />
'''TODO:'''<br />
<br />
= Hotspot XML =<br />
<br />
This is the top-level XML file for a hotspot game object. It specifies the billboard image, and the [[Hotspot Scripting|Hotspot angelscript]] file.<br><br />
When a level references a hotspot, this is the file type that is referenced.<br />
<br />
== Hotspot XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<Type>generic</Type><br />
<Hotspot><br />
<BillboardColorMap>Data/UI/spawner/thumbs/Hotspot/empty.png</BillboardColorMap><br />
<Script>hotspots/sound_hotspot.as</Script><br />
</Hotspot><br />
</pre><br />
<br />
== Hotspot XML -> Type element ==<br />
<pre><br />
<Type>generic</Type><br />
<Hotspot><br />
...<br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. This should always have the value <code><Type>generic</Type></code>.<br><br />
Note: Having two document elements is not valid XML, and I'm not sure what purpose this element serves. But leave it in, since all the hotspots do it. -merlyn<br />
<br />
== Hotspot XML -> Character element ==<br />
<pre><br />
<Hotspot><br />
<BillboardColorMap>Data/UI/spawner/thumbs/Hotspot/empty.png</BillboardColorMap><br />
...<br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. Path to image file. If you don't want a billboard image, you can use <code>Data/UI/spawner/thumbs/Hotspot/empty.png</code>.<br />
<br />
== Hotspot XML -> Script element ==<br />
<pre><br />
<Hotspot><br />
...<br />
<Script>hotspots/sound_hotspot.as</Script><br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Hotspot Scripting|Hotspot angelscript]]. Relative to <code>Data/Scripts</code> folder.<br />
<br />
= Item XML =<br />
<br />
'''TODO:'''<br />
<br />
= Layered Song XML =<br />
<br />
'''TODO:'''<br />
<br />
= Level Meta XML =<br />
<br />
'''TODO:'''<br />
<br />
= Material XML =<br />
<br />
This XML file specifies the sounds that will be played when a character or item interacts with a world object. It is used to model the sound differences between wood, metal, soil, ice, etc.<br><br />
<br />
<code>Data/Materials/default.xml</code> is the global "default" material, if the material isn't specified by the world object.<br><br />
<br />
When the engine or a gameplay script detects a physics event, the code will do a lookup against the current material, for an event with that event name. If the event name is found, then the corresponding sound will be triggered.<br><br />
<br />
Some of these events and materials might specify modifiers (<code>soft</code>, <code>heavy</code>, etc). If they do, the code will first do the lookup against the <code><events mod="themod"></code> version of the event.<br><br />
If an event with the given name is not found with that modifier, the code will then lookup a version of the same event name, but with no modifiers specified.<br><br />
<br />
Some of the values, if not specified, will look at a global "base" material to find the value of the parameter. <code>max_distance</code> is the only one of those parameters right now.<br />
<br />
<code>Data/Materials/base.xml</code> is the global "base" material.<br><br />
<br />
== Material XML Example ==<br />
From <code>Data/Materials/dirt.xml</code> - this is not the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_light_dirt.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_medium_dirt.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_heavy_dirt.xml" attached="true"/><br />
<-- Note: more sound events in the real file than just these --><br />
</events> <br />
<events mod="soft"><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
</events><br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"<br />
shader="stepdecalfast"/><br />
<skid color="Data/Textures/Decals/Footprints/rabbitdirtsmear_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtsmear_n.tga"<br />
shader="stepdecalfast"/><br />
</decals><br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
<skid path="Data/Particles/heavydirt.xml"/><br />
</particles><br />
<physics hardness = "0.8" friction = "1.0" sharp_penetration = "1.0" /><br />
</material><br />
</pre><br />
<br />
From <code>Data/Materials/default.xml</code>, which is the default Material XML file. It is used when other XML file types call for a Material XML, but one is not specified.<br><br />
This is the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
<rightrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
<leftwallstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_wallrun.xml" attached="true"/><br />
<rightwallstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_wallrun.xml" attached="true"/><br />
<leftwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_walk.xml" attached="true"/><br />
<rightwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_walk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<land soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land.xml" attached="true"/><br />
<land_soft soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land_soft.xml" attached="true"/><br />
<land_slide soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land_slide.xml" attached="true"/><br />
<slide soundgroup="Data/Sounds/concrete_foley/slide_concrete_short.xml" attached="true"/><br />
<kick soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_kick.xml" attached="true"/><br />
<sweep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_sweep.xml" attached="true"/><br />
<jump soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump.xml" attached="true"/><br />
<roll soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_roll.xml" attached="true"/><br />
<edge_grab soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_edge_grab.xml" attached="true"/><br />
<edge_crawl soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_edgecrawl.xml" attached="true"/><br />
<bodyfall soundgroup="Data/Sounds/concrete_foley/bf_concrete.xml" attached="true"/><br />
<bodyfall_light soundgroup="Data/Sounds/concrete_foley/bf_concrete_light.xml" attached="true"/><br />
<bodyfall_medium soundgroup="Data/Sounds/concrete_foley/bf_concrete_medium.xml" attached="true"/><br />
<bodyfall_heavy soundgroup="Data/Sounds/concrete_foley/bf_concrete_heavy.xml" attached="true"/><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_light_stone.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_medium_stone.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_heavy_stone.xml" attached="true"/><br />
<blood_spatter soundgroup="Data/Sounds/blood/spatter_hard.xml"/><br />
<blood_drip soundgroup="Data/Sounds/blood/drip_lowpass.xml"/><br />
</events><br />
<events mod="heavy"><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_run.xml" attached="true"/><br />
<rightrunstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_run.xml" attached="true"/><br />
<leftwallstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_wallrun.xml" attached="true"/><br />
<rightwallstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_wallrun.xml" attached="true"/><br />
<leftwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_walk.xml" attached="true"/><br />
<rightwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_walk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<land soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<land_soft soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<land_slide soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<kick soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_kick.xml" attached="true"/><br />
<sweep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_sweep.xml" attached="true"/><br />
<jump soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump.xml" attached="true"/><br />
<roll soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_roll.xml" attached="true"/><br />
<edge_grab soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_edge_grab.xml" attached="true"/><br />
</events><br />
<events mod="soft"><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
</events><br />
<physics hardness = "1.0" friction = "1.0" sharp_penetration = "0.0" /><br />
</material><br />
</pre><br />
<br />
From <code>Data/Materials/base.xml</code>, which specifies the default '''max_distance''' values for all materials.<br><br />
This is the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<leftrunstep max_distance = "40.0"/><br />
<rightrunstep max_distance = "40.0"/><br />
<leftwallstep max_distance = "40.0"/><br />
<rightwallstep max_distance = "40.0"/><br />
<leftwalkstep max_distance = "25.0"/><br />
<rightwalkstep max_distance = "25.0"/><br />
<leftcrouchwalkstep max_distance = "10.0"/><br />
<rightcrouchwalkstep max_distance = "10.0"/><br />
<land max_distance = "60.0"/><br />
<land_soft max_distance = "30.0"/><br />
<land_slide max_distance = "20.0"/><br />
<slide max_distance = "30.0"/><br />
<kick max_distance = "25.0"/><br />
<sweep max_distance = "25.0"/><br />
<jump max_distance = "40.0"/><br />
<roll max_distance = "15.0"/><br />
<edge_grab max_distance = "25.0"/><br />
<edge_crawl max_distance = "15.0"/><br />
<bodyfall max_distance = "80.0"/><br />
<bodyfall_light max_distance = "40.0"/><br />
<bodyfall_medium max_distance = "60.0"/><br />
<bodyfall_heavy max_distance = "80.0"/><br />
<weapon_drop_light max_distance = "80.0"/><br />
<weapon_drop_medium max_distance = "80.0"/><br />
<weapon_drop_heavy max_distance = "80.0"/><br />
<blood_spatter max_distance = "30.0"/><br />
<blood_drip max_distance = "20.0"/><br />
<flip max_distance = "20.0"/><br />
<choke_grab max_distance = "10.0"/>;<br />
<choke_move max_distance = "10.0"/>;<br />
<choke_fall max_distance = "10.0"/>;<br />
</events><br />
<events mod="heavy"><br />
<leftrunstep max_distance = "50.0"/><br />
<rightrunstep max_distance = "50.0"/><br />
<leftwallstep max_distance = "50.0"/><br />
<rightwallstep max_distance = "50.0"/><br />
<leftwalkstep max_distance = "30.0"/><br />
<rightwalkstep max_distance = "30.0"/><br />
<leftcrouchwalkstep max_distance = "20.0"/><br />
<rightcrouchwalkstep max_distance = "20.0"/><br />
<land max_distance = "80.0"/><br />
<land_soft max_distance = "40.0"/><br />
<land_slide max_distance = "40.0"/><br />
<kick max_distance = "30.0"/><br />
<sweep max_distance = "30.0"/><br />
<jump max_distance = "50.0"/><br />
<roll max_distance = "25.0"/><br />
<edge_grab max_distance = "40.0"/><br />
</events><br />
</material><br />
</pre><br />
<br />
== Material XML -> Events element ==<br />
<pre><br />
<material><br />
<events><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision sound events for the material.<br />
<br />
=== Events element -> mod attribute ===<br />
<br />
<pre><br />
<material><br />
<events mod="soft"><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
'''Optional''' - String value. Specifies that this list of collision sound events only apply when the given modifier is specified.<br><br />
The modifiers are different ways the sounds will be presented, such as <code>soft</code>, <code>heavy</code>, etc.<br />
<br />
== Material XML -> Events element -> Event element ==<br />
<pre><br />
<material><br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true" max_distance = "40.0"/><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
The sound (and physical properties of the sound) for a given collision sound event. The name of the element corresponds to the name of the collision sound event (in this example, '''leftrunstep''').<br />
<br />
=== Event element -> soundgroup attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - String value. Specifies the [[Xml File Formats#Sound Group XML|Sound Group XML]] for the material interaction event.<br><br />
'''TODO:''': Is this really optional? If so, what is the default behavior?<br />
<br />
=== Event element -> attached attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep attached="true"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - Boolean value. '''Default''': false<br><br />
If true, the sound (group) will be played as a sound that is attached to the character that triggered the event.<br />
<br />
=== Event element -> max_distance attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep max_distance = "40.0"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0<br><br />
The max distance that the sound will still be audible to the player.<br><br />
If the value is 0.0, then the max distance will be considered infinite.<br><br />
If it is not specified for a given sound collision event, then the corresponding value in <code>Data/Materials/base.xml</code> will be used instead.<br />
<br />
== Material XML -> Decals element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision decal events for the material.<br />
<br />
== Material XML -> Decals element -> Decal element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"<br />
shader="stepdecalfast"/><br />
<skid color="Data/Textures/Decals/Footprints/rabbitdirtsmear_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtsmear_n.tga"<br />
shader="stepdecalfast"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
The decal (and rendering properties of the decal) for a given collision decal event. The name of the element corresponds to the name of the collision decal event (in these examples, '''step''' and '''skid''').<br />
<br />
=== Decal element -> color attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the decal's color texture.<br />
<br />
=== Decal element -> normal attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the decal's normal texture.<br />
<br />
=== Decal element -> shader attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step shader="stepdecalfast"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the shader name that will be used when rendering the decal.<br />
<br />
== Material XML -> Particles element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
...<br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision particle events for the material. <br />
<br />
== Material XML -> Particles element -> Particle element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
<skid path="Data/Particles/heavydirt.xml"/><br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
The particle for a given collision particle event. The name of the element corresponds to the name of the collision particle event (in these examples, '''step''' and '''skid'''). <br />
<br />
=== Particle element -> path attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
...<br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Xml File Formats#Particle XML|Particle XML]]<br />
<br />
== Material XML -> Physics element ==<br />
<br />
<pre><br />
<material><br />
<physics hardness = "0.8" friction = "1.0" sharp_penetration = "1.0" /><br />
</material><br />
</pre><br />
<br />
The physics properties of the the material. Collision gameplay events will use these properties to determine how to make other objects respond when they collide with the object this material is applied to.<br />
<br />
=== Physics element -> hardness attribute ===<br />
<br />
<pre><br />
<material><br />
<physics hardness = "0.8"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0<br><br />
'''TODO: Describe'''<br />
<br />
=== Physics element -> friction attribute ===<br />
<br />
<pre><br />
<material><br />
<physics friction = "1.0"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0<br><br />
The friction between any other object and the object this material is applied to.<br><br />
In real life this would depend on the materials for both objects, but the game makes simplifying assumptions to make the mapping a bit less complicated.<br />
<br />
=== Physics element -> sharp_penetration attribute ===<br />
<br />
<pre><br />
<material><br />
<physics sharp_penetration = "1.0"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0<br><br />
'''TODO: Describe'''<br />
<br />
= Mod XML =<br />
<br />
'''TODO:'''<br />
<br />
= Music XML =<br />
<br />
'''TODO:'''<br />
<br />
= Nav Mesh Meta XML =<br />
<br />
'''TODO:'''<br />
<br />
= Object XML =<br />
<br />
'''TODO:'''<br />
<br />
= Particle XML =<br />
<br />
'''TODO:'''<br />
<br />
= Path XML =<br />
<br />
'''TODO:'''<br />
<br />
= Reaction XML =<br />
<br />
'''TODO:'''<br />
<br />
= Retarget XML =<br />
<br />
'''TODO:'''<br />
<br />
= Rig XML =<br />
<br />
This is the XML file for a character skeleton. It binds a [[Xml File Formats#Character XML|Character XML]] file to an [[Character Scripting|AI angelscript]] file.<br><br />
When a level references a character, this is the file type that is referenced.<br />
<br />
== Rig XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<rig bone_path = "Data/Skeletons/r_wolf2.phxbn"<br />
model_path = "Data/Models/Characters/IGF_Wolf/IGF_Wolf.obj"<br />
mass_path = "Data/Skeletons/r_lt_dog.xml"/><br />
</pre><br />
<br />
== Rig element -> bone_path attribute ==<br />
<pre><br />
<rig bone_path = "Data/Skeletons/r_wolf2.phxbn"/><br />
</pre><br />
<br />
'''Required''' - String value. Path to the skeleton file, using the custom Phoenix Engine skeleton file type ([[Binary File Formats#PHXBN|PHXBN]]. This file MUST have been exported using the mesh specified in <code>model_path</code>.<br />
<br />
== Rig element -> model_path attribute ==<br />
<pre><br />
<rig model_path = "Data/Models/Characters/IGF_Wolf/IGF_Wolf.obj"/><br />
</pre><br />
<br />
'''Required''' - String value. Path to Obj model file to use as skinned the character mesh. This file MUST be the same as the one used when exporting the skeleton specified in <code>bone_path</code>.<br />
<br />
== Rig element -> mass_path attribute ==<br />
<pre><br />
<rig mass_path = "Data/Skeletons/r_lt_dog.xml"/><br />
</pre><br />
<br />
'''Optional''' - String value. Path to [[Xml File Formats#Rig XML|Rig XML]]. Used to override the current skeleton with the bone masses from a different skeleton.<br><br />
'''TODO''': Why you'd want to do this? Who knows! -merlyn<br />
<br />
= Shader Preload XML =<br />
<br />
'''TODO:'''<br />
<br />
= Sound Group XML =<br />
<br />
This is the XML file that describes a group of sounds. One of those sounds will be randomly chosen and played whenever the sound group is triggered.<br><br />
<br />
The file will specify a count of the number of <code>variants</code> that exist, and a sound file will need to exist for each of those variants.<br><br />
For a Sound Group XML with three variants, the XML file and and corresponding sound variants should follow a naming scheme like this:<br />
* <code>Data/Sounds/example_subdir/example_sound_group.xml</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_1.wav</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_2.wav</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_3.wav</code><br><br />
<br />
== Sound Group XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<soundgroup<br />
variants = "3"<br />
delay = "5.3"<br />
volume = "0.1"<br />
max_distance = "77.5"<br />
/><br />
</pre><br />
<br />
== Sound Group element -> variants attribute ==<br />
<pre><br />
<soundgroup variants = "3" /><br />
</pre><br />
<br />
'''Optional''' - Integer value. '''Default''': 1.<br><br />
The count of variants. There must also be a corresponding <code>SoundGroupXmlName_1.wav</code> file for every variant, numbered incrementally up to the variant count.<br><br />
E.g. if there was 3 variants, there would need to be files named <code>SoundGroupXmlName_1.wav</code>, <code>SoundGroupXmlName_2.wav</code>, and <code>SoundGroupXmlName_3.wav</code>.<br />
<br />
== Sound Group element -> delay attribute ==<br />
<pre><br />
<soundgroup delay = "5.3" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0.<br><br />
A delay to add to the start of sound playback, in seconds.<br />
<br />
== Sound Group element -> volume attribute ==<br />
<pre><br />
<soundgroup volume = "0.1" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0.<br><br />
The volume to play back the sound.<br><br />
This is further multiplied by the gain specified when triggering the sound group in gameplay code.<br />
<br />
== Sound Group element -> max_distance attribute ==<br />
<pre><br />
<soundgroup max_distance = "77.5" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 30.0.<br><br />
The maximum distance that the sound can be heard by the player.<br><br />
It will be overridden by the <code>max_distance</code> in the collision sound event, in the [[Xml File Formats#Material XML -> Events element -> Event element|Material XML]], if specified for the given collision sound event.<br />
<br />
= Synced Animation Group XML =<br />
<br />
'''TODO:'''<br />
<br />
= Version Manifest XML =<br />
<br />
'''TODO:'''<br />
<br />
= Voice XML =<br />
<br />
'''TODO:'''</div>Merlynhttp://wiki.wolfire.com/index.php?title=Xml_File_Formats&diff=6224Xml File Formats2023-09-05T07:43:00Z<p>Merlyn: /* Material XML */</p>
<hr />
<div>= TODO: =<br />
<br />
Level, Saved Object, Prefab - These have more confusing schemas, to the point where I'm not entirely sure they're distinct types from one another, and I haven't nailed them down yet -merlyn<br />
<br />
= Actor XML =<br />
<br />
This is the top-level XML file for an NPC or combat character. It binds a [[Xml File Formats#Character XML|Character XML]] file to an [[Character Scripting|AI angelscript]] file.<br><br />
When a level references a character, this is the file type that is referenced.<br />
<br />
== Actor XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<Actor><br />
<Character>Data/Characters/rabbot.xml</Character><br />
<ControlScript>enemycontrol.as</ControlScript><br />
</Actor><br />
</pre><br />
<br />
== Actor XML -> Character element ==<br />
<pre><br />
<Actor><br />
<Character>Data/Characters/rabbot.xml</Character><br />
...<br />
</Actor><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Xml File Formats#Character XML|Character XML]]<br />
<br />
== Actor XML -> ControlScript element ==<br />
<pre><br />
<Actor><br />
...<br />
<ControlScript>enemycontrol.as</ControlScript><br />
</Actor><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Character Scripting|AI angelscript]]. Relative to <code>Data/Scripts</code> folder<br />
<br />
= Asset Preload XML =<br />
<br />
'''TODO:'''<br />
<br />
= Attachment XML =<br />
<br />
'''TODO:'''<br />
<br />
= Attack XML =<br />
<br />
'''TODO:'''<br />
<br />
= Character XML =<br />
<br />
'''TODO:'''<br />
<br />
= Decal XML =<br />
<br />
'''TODO:'''<br />
<br />
= Events XML =<br />
<br />
'''TODO:'''<br />
<br />
= Hotspot XML =<br />
<br />
This is the top-level XML file for a hotspot game object. It specifies the billboard image, and the [[Hotspot Scripting|Hotspot angelscript]] file.<br><br />
When a level references a hotspot, this is the file type that is referenced.<br />
<br />
== Hotspot XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<Type>generic</Type><br />
<Hotspot><br />
<BillboardColorMap>Data/UI/spawner/thumbs/Hotspot/empty.png</BillboardColorMap><br />
<Script>hotspots/sound_hotspot.as</Script><br />
</Hotspot><br />
</pre><br />
<br />
== Hotspot XML -> Type element ==<br />
<pre><br />
<Type>generic</Type><br />
<Hotspot><br />
...<br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. This should always have the value <code><Type>generic</Type></code>.<br><br />
Note: Having two document elements is not valid XML, and I'm not sure what purpose this element serves. But leave it in, since all the hotspots do it. -merlyn<br />
<br />
== Hotspot XML -> Character element ==<br />
<pre><br />
<Hotspot><br />
<BillboardColorMap>Data/UI/spawner/thumbs/Hotspot/empty.png</BillboardColorMap><br />
...<br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. Path to image file. If you don't want a billboard image, you can use <code>Data/UI/spawner/thumbs/Hotspot/empty.png</code>.<br />
<br />
== Hotspot XML -> Script element ==<br />
<pre><br />
<Hotspot><br />
...<br />
<Script>hotspots/sound_hotspot.as</Script><br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Hotspot Scripting|Hotspot angelscript]]. Relative to <code>Data/Scripts</code> folder.<br />
<br />
= Item XML =<br />
<br />
'''TODO:'''<br />
<br />
= Layered Song XML =<br />
<br />
'''TODO:'''<br />
<br />
= Level Meta XML =<br />
<br />
'''TODO:'''<br />
<br />
= Material XML =<br />
<br />
This XML file specifies the sounds that will be played when a character or item interacts with a world object. It is used to model the sound differences between wood, metal, soil, ice, etc.<br><br />
<br />
<code>Data/Materials/default.xml</code> is the global "default" material, if the material isn't specified by the world object.<br><br />
<br />
When the engine or a gameplay script detects a physics event, the code will do a lookup against the current material, for an event with that event name. If the event name is found, then the corresponding sound will be triggered.<br><br />
<br />
Some of these events and materials might specify modifiers (<code>soft</code>, <code>heavy</code>, etc). If they do, the code will first do the lookup against the <code><events mod="themod"></code> version of the event.<br><br />
If an event with the given name is not found with that modifier, the code will then lookup a version of the same event name, but with no modifiers specified.<br><br />
<br />
Some of the values, if not specified, will look at a global "base" material to find the value of the parameter. <code>max_distance</code> is the only one of those parameters right now.<br />
<br />
<code>Data/Materials/base.xml</code> is the global "base" material.<br><br />
<br />
== Material XML Example ==<br />
From <code>Data/Materials/dirt.xml</code> - this is not the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_light_dirt.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_medium_dirt.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_heavy_dirt.xml" attached="true"/><br />
<-- Note: more sound events in the real file than just these --><br />
</events> <br />
<events mod="soft"><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
</events><br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"<br />
shader="stepdecalfast"/><br />
<skid color="Data/Textures/Decals/Footprints/rabbitdirtsmear_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtsmear_n.tga"<br />
shader="stepdecalfast"/><br />
</decals><br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
<skid path="Data/Particles/heavydirt.xml"/><br />
</particles><br />
<physics hardness = "0.8" friction = "1.0" sharp_penetration = "1.0" /><br />
</material><br />
</pre><br />
<br />
From <code>Data/Materials/default.xml</code>, which is the default Material XML file. It is used when other XML file types call for a Material XML, but one is not specified.<br><br />
This is the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
<rightrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
<leftwallstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_wallrun.xml" attached="true"/><br />
<rightwallstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_wallrun.xml" attached="true"/><br />
<leftwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_walk.xml" attached="true"/><br />
<rightwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_walk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<land soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land.xml" attached="true"/><br />
<land_soft soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land_soft.xml" attached="true"/><br />
<land_slide soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land_slide.xml" attached="true"/><br />
<slide soundgroup="Data/Sounds/concrete_foley/slide_concrete_short.xml" attached="true"/><br />
<kick soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_kick.xml" attached="true"/><br />
<sweep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_sweep.xml" attached="true"/><br />
<jump soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump.xml" attached="true"/><br />
<roll soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_roll.xml" attached="true"/><br />
<edge_grab soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_edge_grab.xml" attached="true"/><br />
<edge_crawl soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_edgecrawl.xml" attached="true"/><br />
<bodyfall soundgroup="Data/Sounds/concrete_foley/bf_concrete.xml" attached="true"/><br />
<bodyfall_light soundgroup="Data/Sounds/concrete_foley/bf_concrete_light.xml" attached="true"/><br />
<bodyfall_medium soundgroup="Data/Sounds/concrete_foley/bf_concrete_medium.xml" attached="true"/><br />
<bodyfall_heavy soundgroup="Data/Sounds/concrete_foley/bf_concrete_heavy.xml" attached="true"/><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_light_stone.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_medium_stone.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_heavy_stone.xml" attached="true"/><br />
<blood_spatter soundgroup="Data/Sounds/blood/spatter_hard.xml"/><br />
<blood_drip soundgroup="Data/Sounds/blood/drip_lowpass.xml"/><br />
</events><br />
<events mod="heavy"><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_run.xml" attached="true"/><br />
<rightrunstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_run.xml" attached="true"/><br />
<leftwallstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_wallrun.xml" attached="true"/><br />
<rightwallstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_wallrun.xml" attached="true"/><br />
<leftwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_walk.xml" attached="true"/><br />
<rightwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_walk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<land soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<land_soft soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<land_slide soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<kick soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_kick.xml" attached="true"/><br />
<sweep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_sweep.xml" attached="true"/><br />
<jump soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump.xml" attached="true"/><br />
<roll soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_roll.xml" attached="true"/><br />
<edge_grab soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_edge_grab.xml" attached="true"/><br />
</events><br />
<events mod="soft"><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
</events><br />
<physics hardness = "1.0" friction = "1.0" sharp_penetration = "0.0" /><br />
</material><br />
</pre><br />
<br />
From <code>Data/Materials/base.xml</code>, which specifies the default '''max_distance''' values for all materials.<br><br />
This is the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<leftrunstep max_distance = "40.0"/><br />
<rightrunstep max_distance = "40.0"/><br />
<leftwallstep max_distance = "40.0"/><br />
<rightwallstep max_distance = "40.0"/><br />
<leftwalkstep max_distance = "25.0"/><br />
<rightwalkstep max_distance = "25.0"/><br />
<leftcrouchwalkstep max_distance = "10.0"/><br />
<rightcrouchwalkstep max_distance = "10.0"/><br />
<land max_distance = "60.0"/><br />
<land_soft max_distance = "30.0"/><br />
<land_slide max_distance = "20.0"/><br />
<slide max_distance = "30.0"/><br />
<kick max_distance = "25.0"/><br />
<sweep max_distance = "25.0"/><br />
<jump max_distance = "40.0"/><br />
<roll max_distance = "15.0"/><br />
<edge_grab max_distance = "25.0"/><br />
<edge_crawl max_distance = "15.0"/><br />
<bodyfall max_distance = "80.0"/><br />
<bodyfall_light max_distance = "40.0"/><br />
<bodyfall_medium max_distance = "60.0"/><br />
<bodyfall_heavy max_distance = "80.0"/><br />
<weapon_drop_light max_distance = "80.0"/><br />
<weapon_drop_medium max_distance = "80.0"/><br />
<weapon_drop_heavy max_distance = "80.0"/><br />
<blood_spatter max_distance = "30.0"/><br />
<blood_drip max_distance = "20.0"/><br />
<flip max_distance = "20.0"/><br />
<choke_grab max_distance = "10.0"/>;<br />
<choke_move max_distance = "10.0"/>;<br />
<choke_fall max_distance = "10.0"/>;<br />
</events><br />
<events mod="heavy"><br />
<leftrunstep max_distance = "50.0"/><br />
<rightrunstep max_distance = "50.0"/><br />
<leftwallstep max_distance = "50.0"/><br />
<rightwallstep max_distance = "50.0"/><br />
<leftwalkstep max_distance = "30.0"/><br />
<rightwalkstep max_distance = "30.0"/><br />
<leftcrouchwalkstep max_distance = "20.0"/><br />
<rightcrouchwalkstep max_distance = "20.0"/><br />
<land max_distance = "80.0"/><br />
<land_soft max_distance = "40.0"/><br />
<land_slide max_distance = "40.0"/><br />
<kick max_distance = "30.0"/><br />
<sweep max_distance = "30.0"/><br />
<jump max_distance = "50.0"/><br />
<roll max_distance = "25.0"/><br />
<edge_grab max_distance = "40.0"/><br />
</events><br />
</material><br />
</pre><br />
<br />
== Material XML -> Events element ==<br />
<pre><br />
<material><br />
<events><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision sound events for the material.<br />
<br />
=== Events element -> mod attribute ===<br />
<br />
<pre><br />
<material><br />
<events mod="soft"><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
'''Optional''' - String value. Specifies that this list of collision sound events only apply when the given modifier is specified.<br><br />
The modifiers are different ways the sounds will be presented, such as <code>soft</code>, <code>heavy</code>, etc.<br />
<br />
== Material XML -> Events element -> Event element ==<br />
<pre><br />
<material><br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true" max_distance = "40.0"/><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
The sound (and physical properties of the sound) for a given collision sound event. The name of the element corresponds to the name of the collision sound event (in this example, '''leftrunstep''').<br />
<br />
=== Event element -> soundgroup attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - String value. Specifies the [[Xml File Formats#Sound Group XML|Sound Group XML]] for the material interaction event.<br><br />
'''TODO:''': Is this really optional? If so, what is the default behavior?<br />
<br />
=== Event element -> attached attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - Boolean value. '''Default''': false<br><br />
If true, the sound (group) will be played as a sound that is attached to the character that triggered the event.<br />
<br />
=== Event element -> max_distance attribute ===<br />
<br />
<pre><br />
...<br />
<events><br />
<leftrunstep max_distance = "40.0"/><br />
...<br />
</events><br />
...<br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0<br><br />
The max distance that the sound will still be audible to the player.<br><br />
If the value is 0.0, then the max distance will be considered infinite.<br><br />
If it is not specified for a given sound collision event, then the corresponding value in <code>Data/Materials/base.xml</code> will be used instead.<br />
<br />
== Material XML -> Decals element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision decal events for the material.<br />
<br />
== Material XML -> Decals element -> Decal element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"<br />
shader="stepdecalfast"/><br />
<skid color="Data/Textures/Decals/Footprints/rabbitdirtsmear_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtsmear_n.tga"<br />
shader="stepdecalfast"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
The decal (and rendering properties of the decal) for a given collision decal event. The name of the element corresponds to the name of the collision decal event (in these examples, '''step''' and '''skid''').<br />
<br />
=== Decal element -> color attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the decal's color texture.<br />
<br />
=== Decal element -> normal attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the decal's normal texture.<br />
<br />
=== Decal element -> shader attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step shader="stepdecalfast"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the shader name that will be used when rendering the decal.<br />
<br />
== Material XML -> Particles element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
...<br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision particle events for the material. <br />
<br />
== Material XML -> Particles element -> Particle element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
<skid path="Data/Particles/heavydirt.xml"/><br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
The particle for a given collision particle event. The name of the element corresponds to the name of the collision particle event (in these examples, '''step''' and '''skid'''). <br />
<br />
=== Particle element -> path attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
...<br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Xml File Formats#Particle XML|Particle XML]]<br />
<br />
== Material XML -> Physics element ==<br />
<br />
<pre><br />
<material><br />
<physics hardness = "0.8" friction = "1.0" sharp_penetration = "1.0" /><br />
</material><br />
</pre><br />
<br />
The physics properties of the the material. Collision gameplay events will use these properties to determine how to make other objects respond when they collide with the object this material is applied to.<br />
<br />
=== Physics element -> hardness attribute ===<br />
<br />
<pre><br />
<material><br />
<physics hardness = "0.8"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0<br><br />
'''TODO: Describe'''<br />
<br />
=== Physics element -> friction attribute ===<br />
<br />
<pre><br />
<material><br />
<physics friction = "1.0"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0<br><br />
The friction between any other object and the object this material is applied to.<br><br />
In real life this would depend on the materials for both objects, but the game makes simplifying assumptions to make the mapping a bit less complicated.<br />
<br />
=== Physics element -> sharp_penetration attribute ===<br />
<br />
<pre><br />
<material><br />
<physics sharp_penetration = "1.0"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0<br><br />
'''TODO: Describe'''<br />
<br />
= Mod XML =<br />
<br />
'''TODO:'''<br />
<br />
= Music XML =<br />
<br />
'''TODO:'''<br />
<br />
= Nav Mesh Meta XML =<br />
<br />
'''TODO:'''<br />
<br />
= Object XML =<br />
<br />
'''TODO:'''<br />
<br />
= Particle XML =<br />
<br />
'''TODO:'''<br />
<br />
= Path XML =<br />
<br />
'''TODO:'''<br />
<br />
= Reaction XML =<br />
<br />
'''TODO:'''<br />
<br />
= Retarget XML =<br />
<br />
'''TODO:'''<br />
<br />
= Rig XML =<br />
<br />
This is the XML file for a character skeleton. It binds a [[Xml File Formats#Character XML|Character XML]] file to an [[Character Scripting|AI angelscript]] file.<br><br />
When a level references a character, this is the file type that is referenced.<br />
<br />
== Rig XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<rig bone_path = "Data/Skeletons/r_wolf2.phxbn"<br />
model_path = "Data/Models/Characters/IGF_Wolf/IGF_Wolf.obj"<br />
mass_path = "Data/Skeletons/r_lt_dog.xml"/><br />
</pre><br />
<br />
== Rig element -> bone_path attribute ==<br />
<pre><br />
<rig bone_path = "Data/Skeletons/r_wolf2.phxbn"/><br />
</pre><br />
<br />
'''Required''' - String value. Path to the skeleton file, using the custom Phoenix Engine skeleton file type ([[Binary File Formats#PHXBN|PHXBN]]. This file MUST have been exported using the mesh specified in <code>model_path</code>.<br />
<br />
== Rig element -> model_path attribute ==<br />
<pre><br />
<rig model_path = "Data/Models/Characters/IGF_Wolf/IGF_Wolf.obj"/><br />
</pre><br />
<br />
'''Required''' - String value. Path to Obj model file to use as skinned the character mesh. This file MUST be the same as the one used when exporting the skeleton specified in <code>bone_path</code>.<br />
<br />
== Rig element -> mass_path attribute ==<br />
<pre><br />
<rig mass_path = "Data/Skeletons/r_lt_dog.xml"/><br />
</pre><br />
<br />
'''Optional''' - String value. Path to [[Xml File Formats#Rig XML|Rig XML]]. Used to override the current skeleton with the bone masses from a different skeleton.<br><br />
'''TODO''': Why you'd want to do this? Who knows! -merlyn<br />
<br />
= Shader Preload XML =<br />
<br />
'''TODO:'''<br />
<br />
= Sound Group XML =<br />
<br />
This is the XML file that describes a group of sounds. One of those sounds will be randomly chosen and played whenever the sound group is triggered.<br><br />
<br />
The file will specify a count of the number of <code>variants</code> that exist, and a sound file will need to exist for each of those variants.<br><br />
For a Sound Group XML with three variants, the XML file and and corresponding sound variants should follow a naming scheme like this:<br />
* <code>Data/Sounds/example_subdir/example_sound_group.xml</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_1.wav</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_2.wav</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_3.wav</code><br><br />
<br />
== Sound Group XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<soundgroup<br />
variants = "3"<br />
delay = "5.3"<br />
volume = "0.1"<br />
max_distance = "77.5"<br />
/><br />
</pre><br />
<br />
== Sound Group element -> variants attribute ==<br />
<pre><br />
<soundgroup variants = "3" /><br />
</pre><br />
<br />
'''Optional''' - Integer value. '''Default''': 1.<br><br />
The count of variants. There must also be a corresponding <code>SoundGroupXmlName_1.wav</code> file for every variant, numbered incrementally up to the variant count.<br><br />
E.g. if there was 3 variants, there would need to be files named <code>SoundGroupXmlName_1.wav</code>, <code>SoundGroupXmlName_2.wav</code>, and <code>SoundGroupXmlName_3.wav</code>.<br />
<br />
== Sound Group element -> delay attribute ==<br />
<pre><br />
<soundgroup delay = "5.3" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0.<br><br />
A delay to add to the start of sound playback, in seconds.<br />
<br />
== Sound Group element -> volume attribute ==<br />
<pre><br />
<soundgroup volume = "0.1" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0.<br><br />
The volume to play back the sound.<br><br />
This is further multiplied by the gain specified when triggering the sound group in gameplay code.<br />
<br />
== Sound Group element -> max_distance attribute ==<br />
<pre><br />
<soundgroup max_distance = "77.5" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 30.0.<br><br />
The maximum distance that the sound can be heard by the player.<br><br />
It will be overridden by the <code>max_distance</code> in the collision sound event, in the [[Xml File Formats#Material XML -> Events element -> Event element|Material XML]], if specified for the given collision sound event.<br />
<br />
= Synced Animation Group XML =<br />
<br />
'''TODO:'''<br />
<br />
= Version Manifest XML =<br />
<br />
'''TODO:'''<br />
<br />
= Voice XML =<br />
<br />
'''TODO:'''</div>Merlynhttp://wiki.wolfire.com/index.php?title=Xml_File_Formats&diff=6223Xml File Formats2023-09-05T07:39:14Z<p>Merlyn: /* Rig XML */</p>
<hr />
<div>= TODO: =<br />
<br />
Level, Saved Object, Prefab - These have more confusing schemas, to the point where I'm not entirely sure they're distinct types from one another, and I haven't nailed them down yet -merlyn<br />
<br />
= Actor XML =<br />
<br />
This is the top-level XML file for an NPC or combat character. It binds a [[Xml File Formats#Character XML|Character XML]] file to an [[Character Scripting|AI angelscript]] file.<br><br />
When a level references a character, this is the file type that is referenced.<br />
<br />
== Actor XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<Actor><br />
<Character>Data/Characters/rabbot.xml</Character><br />
<ControlScript>enemycontrol.as</ControlScript><br />
</Actor><br />
</pre><br />
<br />
== Actor XML -> Character element ==<br />
<pre><br />
<Actor><br />
<Character>Data/Characters/rabbot.xml</Character><br />
...<br />
</Actor><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Xml File Formats#Character XML|Character XML]]<br />
<br />
== Actor XML -> ControlScript element ==<br />
<pre><br />
<Actor><br />
...<br />
<ControlScript>enemycontrol.as</ControlScript><br />
</Actor><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Character Scripting|AI angelscript]]. Relative to <code>Data/Scripts</code> folder<br />
<br />
= Asset Preload XML =<br />
<br />
'''TODO:'''<br />
<br />
= Attachment XML =<br />
<br />
'''TODO:'''<br />
<br />
= Attack XML =<br />
<br />
'''TODO:'''<br />
<br />
= Character XML =<br />
<br />
'''TODO:'''<br />
<br />
= Decal XML =<br />
<br />
'''TODO:'''<br />
<br />
= Events XML =<br />
<br />
'''TODO:'''<br />
<br />
= Hotspot XML =<br />
<br />
This is the top-level XML file for a hotspot game object. It specifies the billboard image, and the [[Hotspot Scripting|Hotspot angelscript]] file.<br><br />
When a level references a hotspot, this is the file type that is referenced.<br />
<br />
== Hotspot XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<Type>generic</Type><br />
<Hotspot><br />
<BillboardColorMap>Data/UI/spawner/thumbs/Hotspot/empty.png</BillboardColorMap><br />
<Script>hotspots/sound_hotspot.as</Script><br />
</Hotspot><br />
</pre><br />
<br />
== Hotspot XML -> Type element ==<br />
<pre><br />
<Type>generic</Type><br />
<Hotspot><br />
...<br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. This should always have the value <code><Type>generic</Type></code>.<br><br />
Note: Having two document elements is not valid XML, and I'm not sure what purpose this element serves. But leave it in, since all the hotspots do it. -merlyn<br />
<br />
== Hotspot XML -> Character element ==<br />
<pre><br />
<Hotspot><br />
<BillboardColorMap>Data/UI/spawner/thumbs/Hotspot/empty.png</BillboardColorMap><br />
...<br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. Path to image file. If you don't want a billboard image, you can use <code>Data/UI/spawner/thumbs/Hotspot/empty.png</code>.<br />
<br />
== Hotspot XML -> Script element ==<br />
<pre><br />
<Hotspot><br />
...<br />
<Script>hotspots/sound_hotspot.as</Script><br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Hotspot Scripting|Hotspot angelscript]]. Relative to <code>Data/Scripts</code> folder.<br />
<br />
= Item XML =<br />
<br />
'''TODO:'''<br />
<br />
= Layered Song XML =<br />
<br />
'''TODO:'''<br />
<br />
= Level Meta XML =<br />
<br />
'''TODO:'''<br />
<br />
= Material XML =<br />
<br />
This XML file specifies the sounds that will be played when a character or item interacts with a world object. It is used to model the sound differences between wood, metal, soil, ice, etc.<br><br />
<br />
<code>Data/Materials/default.xml</code> is the global "default" material, if the material isn't specified by the world object.<br><br />
<br />
When the engine or a gameplay script detects a physics event, the code will do a lookup against the current material, for an event with that event name. If the event name is found, then the corresponding sound will be triggered.<br><br />
<br />
Some of these events and materials might specify modifiers (<code>soft</code>, <code>heavy</code>, etc). If they do, the code will first do the lookup against the <code><events mod="themod"></code> version of the event.<br><br />
If an event with the given name is not found with that modifier, the code will then lookup a version of the same event name, but with no modifiers specified.<br><br />
<br />
Some of the values, if not specified, will look at a global "base" material to find the value of the parameter. <code>max_distance</code> is the only one of those parameters right now.<br />
<br />
<code>Data/Materials/base.xml</code> is the global "base" material.<br><br />
<br />
== Material XML Example ==<br />
From <code>Data/Materials/dirt.xml</code> - this is not the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_light_dirt.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_medium_dirt.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_heavy_dirt.xml" attached="true"/><br />
<-- Note: more sound events in the real file than just these --><br />
</events> <br />
<events mod="soft"><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
</events><br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"<br />
shader="stepdecalfast"/><br />
<skid color="Data/Textures/Decals/Footprints/rabbitdirtsmear_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtsmear_n.tga"<br />
shader="stepdecalfast"/><br />
</decals><br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
<skid path="Data/Particles/heavydirt.xml"/><br />
</particles><br />
<physics hardness = "0.8" friction = "1.0" sharp_penetration = "1.0" /><br />
</material><br />
</pre><br />
<br />
From <code>Data/Materials/default.xml</code>, which is the default Material XML file. It is used when other XML file types call for a Material XML, but one is not specified.<br><br />
This is the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
<rightrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
<leftwallstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_wallrun.xml" attached="true"/><br />
<rightwallstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_wallrun.xml" attached="true"/><br />
<leftwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_walk.xml" attached="true"/><br />
<rightwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_walk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<land soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land.xml" attached="true"/><br />
<land_soft soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land_soft.xml" attached="true"/><br />
<land_slide soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land_slide.xml" attached="true"/><br />
<slide soundgroup="Data/Sounds/concrete_foley/slide_concrete_short.xml" attached="true"/><br />
<kick soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_kick.xml" attached="true"/><br />
<sweep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_sweep.xml" attached="true"/><br />
<jump soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump.xml" attached="true"/><br />
<roll soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_roll.xml" attached="true"/><br />
<edge_grab soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_edge_grab.xml" attached="true"/><br />
<edge_crawl soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_edgecrawl.xml" attached="true"/><br />
<bodyfall soundgroup="Data/Sounds/concrete_foley/bf_concrete.xml" attached="true"/><br />
<bodyfall_light soundgroup="Data/Sounds/concrete_foley/bf_concrete_light.xml" attached="true"/><br />
<bodyfall_medium soundgroup="Data/Sounds/concrete_foley/bf_concrete_medium.xml" attached="true"/><br />
<bodyfall_heavy soundgroup="Data/Sounds/concrete_foley/bf_concrete_heavy.xml" attached="true"/><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_light_stone.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_medium_stone.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_heavy_stone.xml" attached="true"/><br />
<blood_spatter soundgroup="Data/Sounds/blood/spatter_hard.xml"/><br />
<blood_drip soundgroup="Data/Sounds/blood/drip_lowpass.xml"/><br />
</events><br />
<events mod="heavy"><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_run.xml" attached="true"/><br />
<rightrunstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_run.xml" attached="true"/><br />
<leftwallstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_wallrun.xml" attached="true"/><br />
<rightwallstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_wallrun.xml" attached="true"/><br />
<leftwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_walk.xml" attached="true"/><br />
<rightwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_walk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<land soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<land_soft soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<land_slide soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<kick soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_kick.xml" attached="true"/><br />
<sweep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_sweep.xml" attached="true"/><br />
<jump soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump.xml" attached="true"/><br />
<roll soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_roll.xml" attached="true"/><br />
<edge_grab soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_edge_grab.xml" attached="true"/><br />
</events><br />
<events mod="soft"><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
</events><br />
<physics hardness = "1.0" friction = "1.0" sharp_penetration = "0.0" /><br />
</material><br />
</pre><br />
<br />
From <code>Data/Materials/base.xml</code>, which specifies the default '''max_distance''' values for all materials.<br><br />
This is the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<leftrunstep max_distance = "40.0"/><br />
<rightrunstep max_distance = "40.0"/><br />
<leftwallstep max_distance = "40.0"/><br />
<rightwallstep max_distance = "40.0"/><br />
<leftwalkstep max_distance = "25.0"/><br />
<rightwalkstep max_distance = "25.0"/><br />
<leftcrouchwalkstep max_distance = "10.0"/><br />
<rightcrouchwalkstep max_distance = "10.0"/><br />
<land max_distance = "60.0"/><br />
<land_soft max_distance = "30.0"/><br />
<land_slide max_distance = "20.0"/><br />
<slide max_distance = "30.0"/><br />
<kick max_distance = "25.0"/><br />
<sweep max_distance = "25.0"/><br />
<jump max_distance = "40.0"/><br />
<roll max_distance = "15.0"/><br />
<edge_grab max_distance = "25.0"/><br />
<edge_crawl max_distance = "15.0"/><br />
<bodyfall max_distance = "80.0"/><br />
<bodyfall_light max_distance = "40.0"/><br />
<bodyfall_medium max_distance = "60.0"/><br />
<bodyfall_heavy max_distance = "80.0"/><br />
<weapon_drop_light max_distance = "80.0"/><br />
<weapon_drop_medium max_distance = "80.0"/><br />
<weapon_drop_heavy max_distance = "80.0"/><br />
<blood_spatter max_distance = "30.0"/><br />
<blood_drip max_distance = "20.0"/><br />
<flip max_distance = "20.0"/><br />
<choke_grab max_distance = "10.0"/>;<br />
<choke_move max_distance = "10.0"/>;<br />
<choke_fall max_distance = "10.0"/>;<br />
</events><br />
<events mod="heavy"><br />
<leftrunstep max_distance = "50.0"/><br />
<rightrunstep max_distance = "50.0"/><br />
<leftwallstep max_distance = "50.0"/><br />
<rightwallstep max_distance = "50.0"/><br />
<leftwalkstep max_distance = "30.0"/><br />
<rightwalkstep max_distance = "30.0"/><br />
<leftcrouchwalkstep max_distance = "20.0"/><br />
<rightcrouchwalkstep max_distance = "20.0"/><br />
<land max_distance = "80.0"/><br />
<land_soft max_distance = "40.0"/><br />
<land_slide max_distance = "40.0"/><br />
<kick max_distance = "30.0"/><br />
<sweep max_distance = "30.0"/><br />
<jump max_distance = "50.0"/><br />
<roll max_distance = "25.0"/><br />
<edge_grab max_distance = "40.0"/><br />
</events><br />
</material><br />
</pre><br />
<br />
== Material XML -> Events element ==<br />
<pre><br />
<material><br />
<events><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision sound events for the material.<br />
<br />
=== Mod attribute ===<br />
<br />
<pre><br />
<material><br />
<events mod="soft"><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
'''Optional''' - String value. Specifies that this list of collision sound events only apply when the given modifier is specified.<br><br />
The modifiers are different ways the sounds will be presented, such as <code>soft</code>, <code>heavy</code>, etc.<br />
<br />
== Material XML -> Events element -> Event element ==<br />
<pre><br />
<material><br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true" max_distance = "40.0"/><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
The sound (and physical properties of the sound) for a given collision sound event. The name of the element corresponds to the name of the collision sound event (in this example, '''leftrunstep''').<br />
<br />
=== soundgroup attribute ===<br />
<br />
<pre><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml"/><br />
</pre><br />
<br />
'''Optional''' - String value. Specifies the [[Xml File Formats#Sound Group XML|Sound Group XML]] for the material interaction event.<br><br />
'''TODO:''': Is this really optional? If so, what is the default behavior?<br />
<br />
=== attached attribute ===<br />
<br />
<pre><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
</pre><br />
<br />
'''Optional''' - Boolean value. '''Default''': false<br><br />
If true, the sound (group) will be played as a sound that is attached to the character that triggered the event.<br />
<br />
=== max_distance attribute ===<br />
<br />
<pre><br />
<leftrunstep max_distance = "40.0"/><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0<br><br />
The max distance that the sound will still be audible to the player.<br><br />
If the value is 0.0, then the max distance will be considered infinite.<br><br />
If it is not specified for a given sound collision event, then the corresponding value in <code>Data/Materials/base.xml</code> will be used instead.<br />
<br />
== Material XML -> Decals element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision decal events for the material.<br />
<br />
== Material XML -> Decals element -> Decal element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"<br />
shader="stepdecalfast"/><br />
<skid color="Data/Textures/Decals/Footprints/rabbitdirtsmear_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtsmear_n.tga"<br />
shader="stepdecalfast"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
The decal (and rendering properties of the decal) for a given collision decal event. The name of the element corresponds to the name of the collision decal event (in these examples, '''step''' and '''skid''').<br />
<br />
=== color attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the decal's color texture.<br />
<br />
=== normal attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the decal's normal texture.<br />
<br />
=== shader attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step shader="stepdecalfast"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the shader name that will be used when rendering the decal.<br />
<br />
== Material XML -> Particles element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
...<br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision particle events for the material. <br />
<br />
== Material XML -> Particles element -> Particle element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
<skid path="Data/Particles/heavydirt.xml"/><br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
The particle for a given collision particle event. The name of the element corresponds to the name of the collision particle event (in these examples, '''step''' and '''skid'''). <br />
<br />
=== path attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
...<br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Xml File Formats#Particle XML|Particle XML]]<br />
<br />
== Material XML -> Physics element ==<br />
<br />
<pre><br />
<material><br />
<physics hardness = "0.8" friction = "1.0" sharp_penetration = "1.0" /><br />
</material><br />
</pre><br />
<br />
The physics properties of the the material. Collision gameplay events will use these properties to determine how to make other objects respond when they collide with the object this material is applied to.<br />
<br />
=== hardness attribute ===<br />
<br />
<pre><br />
<material><br />
<physics hardness = "0.8"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0<br><br />
'''TODO: Describe'''<br />
<br />
=== friction attribute ===<br />
<br />
<pre><br />
<material><br />
<physics friction = "1.0"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0<br><br />
The friction between any other object and the object this material is applied to.<br><br />
In real life this would depend on the materials for both objects, but the game makes simplifying assumptions to make the mapping a bit less complicated.<br />
<br />
=== sharp_penetration attribute ===<br />
<br />
<pre><br />
<material><br />
<physics sharp_penetration = "1.0"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0<br><br />
'''TODO: Describe'''<br />
<br />
= Mod XML =<br />
<br />
'''TODO:'''<br />
<br />
= Music XML =<br />
<br />
'''TODO:'''<br />
<br />
= Nav Mesh Meta XML =<br />
<br />
'''TODO:'''<br />
<br />
= Object XML =<br />
<br />
'''TODO:'''<br />
<br />
= Particle XML =<br />
<br />
'''TODO:'''<br />
<br />
= Path XML =<br />
<br />
'''TODO:'''<br />
<br />
= Reaction XML =<br />
<br />
'''TODO:'''<br />
<br />
= Retarget XML =<br />
<br />
'''TODO:'''<br />
<br />
= Rig XML =<br />
<br />
This is the XML file for a character skeleton. It binds a [[Xml File Formats#Character XML|Character XML]] file to an [[Character Scripting|AI angelscript]] file.<br><br />
When a level references a character, this is the file type that is referenced.<br />
<br />
== Rig XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<rig bone_path = "Data/Skeletons/r_wolf2.phxbn"<br />
model_path = "Data/Models/Characters/IGF_Wolf/IGF_Wolf.obj"<br />
mass_path = "Data/Skeletons/r_lt_dog.xml"/><br />
</pre><br />
<br />
== Rig element -> bone_path attribute ==<br />
<pre><br />
<rig bone_path = "Data/Skeletons/r_wolf2.phxbn"/><br />
</pre><br />
<br />
'''Required''' - String value. Path to the skeleton file, using the custom Phoenix Engine skeleton file type ([[Binary File Formats#PHXBN|PHXBN]]. This file MUST have been exported using the mesh specified in <code>model_path</code>.<br />
<br />
== Rig element -> model_path attribute ==<br />
<pre><br />
<rig model_path = "Data/Models/Characters/IGF_Wolf/IGF_Wolf.obj"/><br />
</pre><br />
<br />
'''Required''' - String value. Path to Obj model file to use as skinned the character mesh. This file MUST be the same as the one used when exporting the skeleton specified in <code>bone_path</code>.<br />
<br />
== Rig element -> mass_path attribute ==<br />
<pre><br />
<rig mass_path = "Data/Skeletons/r_lt_dog.xml"/><br />
</pre><br />
<br />
'''Optional''' - String value. Path to [[Xml File Formats#Rig XML|Rig XML]]. Used to override the current skeleton with the bone masses from a different skeleton.<br><br />
'''TODO''': Why you'd want to do this? Who knows! -merlyn<br />
<br />
= Shader Preload XML =<br />
<br />
'''TODO:'''<br />
<br />
= Sound Group XML =<br />
<br />
This is the XML file that describes a group of sounds. One of those sounds will be randomly chosen and played whenever the sound group is triggered.<br><br />
<br />
The file will specify a count of the number of <code>variants</code> that exist, and a sound file will need to exist for each of those variants.<br><br />
For a Sound Group XML with three variants, the XML file and and corresponding sound variants should follow a naming scheme like this:<br />
* <code>Data/Sounds/example_subdir/example_sound_group.xml</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_1.wav</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_2.wav</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_3.wav</code><br><br />
<br />
== Sound Group XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<soundgroup<br />
variants = "3"<br />
delay = "5.3"<br />
volume = "0.1"<br />
max_distance = "77.5"<br />
/><br />
</pre><br />
<br />
== Sound Group element -> variants attribute ==<br />
<pre><br />
<soundgroup variants = "3" /><br />
</pre><br />
<br />
'''Optional''' - Integer value. '''Default''': 1.<br><br />
The count of variants. There must also be a corresponding <code>SoundGroupXmlName_1.wav</code> file for every variant, numbered incrementally up to the variant count.<br><br />
E.g. if there was 3 variants, there would need to be files named <code>SoundGroupXmlName_1.wav</code>, <code>SoundGroupXmlName_2.wav</code>, and <code>SoundGroupXmlName_3.wav</code>.<br />
<br />
== Sound Group element -> delay attribute ==<br />
<pre><br />
<soundgroup delay = "5.3" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0.<br><br />
A delay to add to the start of sound playback, in seconds.<br />
<br />
== Sound Group element -> volume attribute ==<br />
<pre><br />
<soundgroup volume = "0.1" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0.<br><br />
The volume to play back the sound.<br><br />
This is further multiplied by the gain specified when triggering the sound group in gameplay code.<br />
<br />
== Sound Group element -> max_distance attribute ==<br />
<pre><br />
<soundgroup max_distance = "77.5" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 30.0.<br><br />
The maximum distance that the sound can be heard by the player.<br><br />
It will be overridden by the <code>max_distance</code> in the collision sound event, in the [[Xml File Formats#Material XML -> Events element -> Event element|Material XML]], if specified for the given collision sound event.<br />
<br />
= Synced Animation Group XML =<br />
<br />
'''TODO:'''<br />
<br />
= Version Manifest XML =<br />
<br />
'''TODO:'''<br />
<br />
= Voice XML =<br />
<br />
'''TODO:'''</div>Merlynhttp://wiki.wolfire.com/index.php?title=Xml_File_Formats&diff=6222Xml File Formats2023-09-05T07:38:51Z<p>Merlyn: /* Sound Group XML */</p>
<hr />
<div>= TODO: =<br />
<br />
Level, Saved Object, Prefab - These have more confusing schemas, to the point where I'm not entirely sure they're distinct types from one another, and I haven't nailed them down yet -merlyn<br />
<br />
= Actor XML =<br />
<br />
This is the top-level XML file for an NPC or combat character. It binds a [[Xml File Formats#Character XML|Character XML]] file to an [[Character Scripting|AI angelscript]] file.<br><br />
When a level references a character, this is the file type that is referenced.<br />
<br />
== Actor XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<Actor><br />
<Character>Data/Characters/rabbot.xml</Character><br />
<ControlScript>enemycontrol.as</ControlScript><br />
</Actor><br />
</pre><br />
<br />
== Actor XML -> Character element ==<br />
<pre><br />
<Actor><br />
<Character>Data/Characters/rabbot.xml</Character><br />
...<br />
</Actor><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Xml File Formats#Character XML|Character XML]]<br />
<br />
== Actor XML -> ControlScript element ==<br />
<pre><br />
<Actor><br />
...<br />
<ControlScript>enemycontrol.as</ControlScript><br />
</Actor><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Character Scripting|AI angelscript]]. Relative to <code>Data/Scripts</code> folder<br />
<br />
= Asset Preload XML =<br />
<br />
'''TODO:'''<br />
<br />
= Attachment XML =<br />
<br />
'''TODO:'''<br />
<br />
= Attack XML =<br />
<br />
'''TODO:'''<br />
<br />
= Character XML =<br />
<br />
'''TODO:'''<br />
<br />
= Decal XML =<br />
<br />
'''TODO:'''<br />
<br />
= Events XML =<br />
<br />
'''TODO:'''<br />
<br />
= Hotspot XML =<br />
<br />
This is the top-level XML file for a hotspot game object. It specifies the billboard image, and the [[Hotspot Scripting|Hotspot angelscript]] file.<br><br />
When a level references a hotspot, this is the file type that is referenced.<br />
<br />
== Hotspot XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<Type>generic</Type><br />
<Hotspot><br />
<BillboardColorMap>Data/UI/spawner/thumbs/Hotspot/empty.png</BillboardColorMap><br />
<Script>hotspots/sound_hotspot.as</Script><br />
</Hotspot><br />
</pre><br />
<br />
== Hotspot XML -> Type element ==<br />
<pre><br />
<Type>generic</Type><br />
<Hotspot><br />
...<br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. This should always have the value <code><Type>generic</Type></code>.<br><br />
Note: Having two document elements is not valid XML, and I'm not sure what purpose this element serves. But leave it in, since all the hotspots do it. -merlyn<br />
<br />
== Hotspot XML -> Character element ==<br />
<pre><br />
<Hotspot><br />
<BillboardColorMap>Data/UI/spawner/thumbs/Hotspot/empty.png</BillboardColorMap><br />
...<br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. Path to image file. If you don't want a billboard image, you can use <code>Data/UI/spawner/thumbs/Hotspot/empty.png</code>.<br />
<br />
== Hotspot XML -> Script element ==<br />
<pre><br />
<Hotspot><br />
...<br />
<Script>hotspots/sound_hotspot.as</Script><br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Hotspot Scripting|Hotspot angelscript]]. Relative to <code>Data/Scripts</code> folder.<br />
<br />
= Item XML =<br />
<br />
'''TODO:'''<br />
<br />
= Layered Song XML =<br />
<br />
'''TODO:'''<br />
<br />
= Level Meta XML =<br />
<br />
'''TODO:'''<br />
<br />
= Material XML =<br />
<br />
This XML file specifies the sounds that will be played when a character or item interacts with a world object. It is used to model the sound differences between wood, metal, soil, ice, etc.<br><br />
<br />
<code>Data/Materials/default.xml</code> is the global "default" material, if the material isn't specified by the world object.<br><br />
<br />
When the engine or a gameplay script detects a physics event, the code will do a lookup against the current material, for an event with that event name. If the event name is found, then the corresponding sound will be triggered.<br><br />
<br />
Some of these events and materials might specify modifiers (<code>soft</code>, <code>heavy</code>, etc). If they do, the code will first do the lookup against the <code><events mod="themod"></code> version of the event.<br><br />
If an event with the given name is not found with that modifier, the code will then lookup a version of the same event name, but with no modifiers specified.<br><br />
<br />
Some of the values, if not specified, will look at a global "base" material to find the value of the parameter. <code>max_distance</code> is the only one of those parameters right now.<br />
<br />
<code>Data/Materials/base.xml</code> is the global "base" material.<br><br />
<br />
== Material XML Example ==<br />
From <code>Data/Materials/dirt.xml</code> - this is not the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_light_dirt.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_medium_dirt.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_heavy_dirt.xml" attached="true"/><br />
<-- Note: more sound events in the real file than just these --><br />
</events> <br />
<events mod="soft"><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
</events><br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"<br />
shader="stepdecalfast"/><br />
<skid color="Data/Textures/Decals/Footprints/rabbitdirtsmear_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtsmear_n.tga"<br />
shader="stepdecalfast"/><br />
</decals><br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
<skid path="Data/Particles/heavydirt.xml"/><br />
</particles><br />
<physics hardness = "0.8" friction = "1.0" sharp_penetration = "1.0" /><br />
</material><br />
</pre><br />
<br />
From <code>Data/Materials/default.xml</code>, which is the default Material XML file. It is used when other XML file types call for a Material XML, but one is not specified.<br><br />
This is the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
<rightrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
<leftwallstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_wallrun.xml" attached="true"/><br />
<rightwallstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_wallrun.xml" attached="true"/><br />
<leftwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_walk.xml" attached="true"/><br />
<rightwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_walk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<land soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land.xml" attached="true"/><br />
<land_soft soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land_soft.xml" attached="true"/><br />
<land_slide soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land_slide.xml" attached="true"/><br />
<slide soundgroup="Data/Sounds/concrete_foley/slide_concrete_short.xml" attached="true"/><br />
<kick soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_kick.xml" attached="true"/><br />
<sweep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_sweep.xml" attached="true"/><br />
<jump soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump.xml" attached="true"/><br />
<roll soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_roll.xml" attached="true"/><br />
<edge_grab soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_edge_grab.xml" attached="true"/><br />
<edge_crawl soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_edgecrawl.xml" attached="true"/><br />
<bodyfall soundgroup="Data/Sounds/concrete_foley/bf_concrete.xml" attached="true"/><br />
<bodyfall_light soundgroup="Data/Sounds/concrete_foley/bf_concrete_light.xml" attached="true"/><br />
<bodyfall_medium soundgroup="Data/Sounds/concrete_foley/bf_concrete_medium.xml" attached="true"/><br />
<bodyfall_heavy soundgroup="Data/Sounds/concrete_foley/bf_concrete_heavy.xml" attached="true"/><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_light_stone.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_medium_stone.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_heavy_stone.xml" attached="true"/><br />
<blood_spatter soundgroup="Data/Sounds/blood/spatter_hard.xml"/><br />
<blood_drip soundgroup="Data/Sounds/blood/drip_lowpass.xml"/><br />
</events><br />
<events mod="heavy"><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_run.xml" attached="true"/><br />
<rightrunstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_run.xml" attached="true"/><br />
<leftwallstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_wallrun.xml" attached="true"/><br />
<rightwallstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_wallrun.xml" attached="true"/><br />
<leftwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_walk.xml" attached="true"/><br />
<rightwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_walk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<land soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<land_soft soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<land_slide soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<kick soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_kick.xml" attached="true"/><br />
<sweep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_sweep.xml" attached="true"/><br />
<jump soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump.xml" attached="true"/><br />
<roll soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_roll.xml" attached="true"/><br />
<edge_grab soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_edge_grab.xml" attached="true"/><br />
</events><br />
<events mod="soft"><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
</events><br />
<physics hardness = "1.0" friction = "1.0" sharp_penetration = "0.0" /><br />
</material><br />
</pre><br />
<br />
From <code>Data/Materials/base.xml</code>, which specifies the default '''max_distance''' values for all materials.<br><br />
This is the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<leftrunstep max_distance = "40.0"/><br />
<rightrunstep max_distance = "40.0"/><br />
<leftwallstep max_distance = "40.0"/><br />
<rightwallstep max_distance = "40.0"/><br />
<leftwalkstep max_distance = "25.0"/><br />
<rightwalkstep max_distance = "25.0"/><br />
<leftcrouchwalkstep max_distance = "10.0"/><br />
<rightcrouchwalkstep max_distance = "10.0"/><br />
<land max_distance = "60.0"/><br />
<land_soft max_distance = "30.0"/><br />
<land_slide max_distance = "20.0"/><br />
<slide max_distance = "30.0"/><br />
<kick max_distance = "25.0"/><br />
<sweep max_distance = "25.0"/><br />
<jump max_distance = "40.0"/><br />
<roll max_distance = "15.0"/><br />
<edge_grab max_distance = "25.0"/><br />
<edge_crawl max_distance = "15.0"/><br />
<bodyfall max_distance = "80.0"/><br />
<bodyfall_light max_distance = "40.0"/><br />
<bodyfall_medium max_distance = "60.0"/><br />
<bodyfall_heavy max_distance = "80.0"/><br />
<weapon_drop_light max_distance = "80.0"/><br />
<weapon_drop_medium max_distance = "80.0"/><br />
<weapon_drop_heavy max_distance = "80.0"/><br />
<blood_spatter max_distance = "30.0"/><br />
<blood_drip max_distance = "20.0"/><br />
<flip max_distance = "20.0"/><br />
<choke_grab max_distance = "10.0"/>;<br />
<choke_move max_distance = "10.0"/>;<br />
<choke_fall max_distance = "10.0"/>;<br />
</events><br />
<events mod="heavy"><br />
<leftrunstep max_distance = "50.0"/><br />
<rightrunstep max_distance = "50.0"/><br />
<leftwallstep max_distance = "50.0"/><br />
<rightwallstep max_distance = "50.0"/><br />
<leftwalkstep max_distance = "30.0"/><br />
<rightwalkstep max_distance = "30.0"/><br />
<leftcrouchwalkstep max_distance = "20.0"/><br />
<rightcrouchwalkstep max_distance = "20.0"/><br />
<land max_distance = "80.0"/><br />
<land_soft max_distance = "40.0"/><br />
<land_slide max_distance = "40.0"/><br />
<kick max_distance = "30.0"/><br />
<sweep max_distance = "30.0"/><br />
<jump max_distance = "50.0"/><br />
<roll max_distance = "25.0"/><br />
<edge_grab max_distance = "40.0"/><br />
</events><br />
</material><br />
</pre><br />
<br />
== Material XML -> Events element ==<br />
<pre><br />
<material><br />
<events><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision sound events for the material.<br />
<br />
=== Mod attribute ===<br />
<br />
<pre><br />
<material><br />
<events mod="soft"><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
'''Optional''' - String value. Specifies that this list of collision sound events only apply when the given modifier is specified.<br><br />
The modifiers are different ways the sounds will be presented, such as <code>soft</code>, <code>heavy</code>, etc.<br />
<br />
== Material XML -> Events element -> Event element ==<br />
<pre><br />
<material><br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true" max_distance = "40.0"/><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
The sound (and physical properties of the sound) for a given collision sound event. The name of the element corresponds to the name of the collision sound event (in this example, '''leftrunstep''').<br />
<br />
=== soundgroup attribute ===<br />
<br />
<pre><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml"/><br />
</pre><br />
<br />
'''Optional''' - String value. Specifies the [[Xml File Formats#Sound Group XML|Sound Group XML]] for the material interaction event.<br><br />
'''TODO:''': Is this really optional? If so, what is the default behavior?<br />
<br />
=== attached attribute ===<br />
<br />
<pre><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
</pre><br />
<br />
'''Optional''' - Boolean value. '''Default''': false<br><br />
If true, the sound (group) will be played as a sound that is attached to the character that triggered the event.<br />
<br />
=== max_distance attribute ===<br />
<br />
<pre><br />
<leftrunstep max_distance = "40.0"/><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0<br><br />
The max distance that the sound will still be audible to the player.<br><br />
If the value is 0.0, then the max distance will be considered infinite.<br><br />
If it is not specified for a given sound collision event, then the corresponding value in <code>Data/Materials/base.xml</code> will be used instead.<br />
<br />
== Material XML -> Decals element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision decal events for the material.<br />
<br />
== Material XML -> Decals element -> Decal element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"<br />
shader="stepdecalfast"/><br />
<skid color="Data/Textures/Decals/Footprints/rabbitdirtsmear_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtsmear_n.tga"<br />
shader="stepdecalfast"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
The decal (and rendering properties of the decal) for a given collision decal event. The name of the element corresponds to the name of the collision decal event (in these examples, '''step''' and '''skid''').<br />
<br />
=== color attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the decal's color texture.<br />
<br />
=== normal attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the decal's normal texture.<br />
<br />
=== shader attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step shader="stepdecalfast"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the shader name that will be used when rendering the decal.<br />
<br />
== Material XML -> Particles element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
...<br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision particle events for the material. <br />
<br />
== Material XML -> Particles element -> Particle element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
<skid path="Data/Particles/heavydirt.xml"/><br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
The particle for a given collision particle event. The name of the element corresponds to the name of the collision particle event (in these examples, '''step''' and '''skid'''). <br />
<br />
=== path attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
...<br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Xml File Formats#Particle XML|Particle XML]]<br />
<br />
== Material XML -> Physics element ==<br />
<br />
<pre><br />
<material><br />
<physics hardness = "0.8" friction = "1.0" sharp_penetration = "1.0" /><br />
</material><br />
</pre><br />
<br />
The physics properties of the the material. Collision gameplay events will use these properties to determine how to make other objects respond when they collide with the object this material is applied to.<br />
<br />
=== hardness attribute ===<br />
<br />
<pre><br />
<material><br />
<physics hardness = "0.8"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0<br><br />
'''TODO: Describe'''<br />
<br />
=== friction attribute ===<br />
<br />
<pre><br />
<material><br />
<physics friction = "1.0"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0<br><br />
The friction between any other object and the object this material is applied to.<br><br />
In real life this would depend on the materials for both objects, but the game makes simplifying assumptions to make the mapping a bit less complicated.<br />
<br />
=== sharp_penetration attribute ===<br />
<br />
<pre><br />
<material><br />
<physics sharp_penetration = "1.0"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0<br><br />
'''TODO: Describe'''<br />
<br />
= Mod XML =<br />
<br />
'''TODO:'''<br />
<br />
= Music XML =<br />
<br />
'''TODO:'''<br />
<br />
= Nav Mesh Meta XML =<br />
<br />
'''TODO:'''<br />
<br />
= Object XML =<br />
<br />
'''TODO:'''<br />
<br />
= Particle XML =<br />
<br />
'''TODO:'''<br />
<br />
= Path XML =<br />
<br />
'''TODO:'''<br />
<br />
= Reaction XML =<br />
<br />
'''TODO:'''<br />
<br />
= Retarget XML =<br />
<br />
'''TODO:'''<br />
<br />
= Rig XML =<br />
<br />
This is the XML file for a character skeleton. It binds a [[Xml File Formats#Character XML|Character XML]] file to an [[Character Scripting|AI angelscript]] file.<br><br />
When a level references a character, this is the file type that is referenced.<br />
<br />
== Rig XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<rig bone_path = "Data/Skeletons/r_wolf2.phxbn"<br />
model_path = "Data/Models/Characters/IGF_Wolf/IGF_Wolf.obj"<br />
mass_path = "Data/Skeletons/r_lt_dog.xml"/><br />
</pre><br />
<br />
== Rig XML -> bone_path attribute ==<br />
<pre><br />
<rig bone_path = "Data/Skeletons/r_wolf2.phxbn"/><br />
</pre><br />
<br />
'''Required''' - String value. Path to the skeleton file, using the custom Phoenix Engine skeleton file type ([[Binary File Formats#PHXBN|PHXBN]]. This file MUST have been exported using the mesh specified in <code>model_path</code>.<br />
<br />
== Rig XML -> model_path attribute ==<br />
<pre><br />
<rig model_path = "Data/Models/Characters/IGF_Wolf/IGF_Wolf.obj"/><br />
</pre><br />
<br />
'''Required''' - String value. Path to Obj model file to use as skinned the character mesh. This file MUST be the same as the one used when exporting the skeleton specified in <code>bone_path</code>.<br />
<br />
== Rig XML -> mass_path attribute ==<br />
<pre><br />
<rig mass_path = "Data/Skeletons/r_lt_dog.xml"/><br />
</pre><br />
<br />
'''Optional''' - String value. Path to [[Xml File Formats#Rig XML|Rig XML]]. Used to override the current skeleton with the bone masses from a different skeleton.<br><br />
'''TODO''': Why you'd want to do this? Who knows! -merlyn<br />
<br />
= Shader Preload XML =<br />
<br />
'''TODO:'''<br />
<br />
= Sound Group XML =<br />
<br />
This is the XML file that describes a group of sounds. One of those sounds will be randomly chosen and played whenever the sound group is triggered.<br><br />
<br />
The file will specify a count of the number of <code>variants</code> that exist, and a sound file will need to exist for each of those variants.<br><br />
For a Sound Group XML with three variants, the XML file and and corresponding sound variants should follow a naming scheme like this:<br />
* <code>Data/Sounds/example_subdir/example_sound_group.xml</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_1.wav</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_2.wav</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_3.wav</code><br><br />
<br />
== Sound Group XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<soundgroup<br />
variants = "3"<br />
delay = "5.3"<br />
volume = "0.1"<br />
max_distance = "77.5"<br />
/><br />
</pre><br />
<br />
== Sound Group element -> variants attribute ==<br />
<pre><br />
<soundgroup variants = "3" /><br />
</pre><br />
<br />
'''Optional''' - Integer value. '''Default''': 1.<br><br />
The count of variants. There must also be a corresponding <code>SoundGroupXmlName_1.wav</code> file for every variant, numbered incrementally up to the variant count.<br><br />
E.g. if there was 3 variants, there would need to be files named <code>SoundGroupXmlName_1.wav</code>, <code>SoundGroupXmlName_2.wav</code>, and <code>SoundGroupXmlName_3.wav</code>.<br />
<br />
== Sound Group element -> delay attribute ==<br />
<pre><br />
<soundgroup delay = "5.3" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0.<br><br />
A delay to add to the start of sound playback, in seconds.<br />
<br />
== Sound Group element -> volume attribute ==<br />
<pre><br />
<soundgroup volume = "0.1" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0.<br><br />
The volume to play back the sound.<br><br />
This is further multiplied by the gain specified when triggering the sound group in gameplay code.<br />
<br />
== Sound Group element -> max_distance attribute ==<br />
<pre><br />
<soundgroup max_distance = "77.5" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 30.0.<br><br />
The maximum distance that the sound can be heard by the player.<br><br />
It will be overridden by the <code>max_distance</code> in the collision sound event, in the [[Xml File Formats#Material XML -> Events element -> Event element|Material XML]], if specified for the given collision sound event.<br />
<br />
= Synced Animation Group XML =<br />
<br />
'''TODO:'''<br />
<br />
= Version Manifest XML =<br />
<br />
'''TODO:'''<br />
<br />
= Voice XML =<br />
<br />
'''TODO:'''</div>Merlynhttp://wiki.wolfire.com/index.php?title=Xml_File_Formats&diff=6221Xml File Formats2023-09-05T07:35:24Z<p>Merlyn: /* Sound Group XML -> max_distance attribute */</p>
<hr />
<div>= TODO: =<br />
<br />
Level, Saved Object, Prefab - These have more confusing schemas, to the point where I'm not entirely sure they're distinct types from one another, and I haven't nailed them down yet -merlyn<br />
<br />
= Actor XML =<br />
<br />
This is the top-level XML file for an NPC or combat character. It binds a [[Xml File Formats#Character XML|Character XML]] file to an [[Character Scripting|AI angelscript]] file.<br><br />
When a level references a character, this is the file type that is referenced.<br />
<br />
== Actor XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<Actor><br />
<Character>Data/Characters/rabbot.xml</Character><br />
<ControlScript>enemycontrol.as</ControlScript><br />
</Actor><br />
</pre><br />
<br />
== Actor XML -> Character element ==<br />
<pre><br />
<Actor><br />
<Character>Data/Characters/rabbot.xml</Character><br />
...<br />
</Actor><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Xml File Formats#Character XML|Character XML]]<br />
<br />
== Actor XML -> ControlScript element ==<br />
<pre><br />
<Actor><br />
...<br />
<ControlScript>enemycontrol.as</ControlScript><br />
</Actor><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Character Scripting|AI angelscript]]. Relative to <code>Data/Scripts</code> folder<br />
<br />
= Asset Preload XML =<br />
<br />
'''TODO:'''<br />
<br />
= Attachment XML =<br />
<br />
'''TODO:'''<br />
<br />
= Attack XML =<br />
<br />
'''TODO:'''<br />
<br />
= Character XML =<br />
<br />
'''TODO:'''<br />
<br />
= Decal XML =<br />
<br />
'''TODO:'''<br />
<br />
= Events XML =<br />
<br />
'''TODO:'''<br />
<br />
= Hotspot XML =<br />
<br />
This is the top-level XML file for a hotspot game object. It specifies the billboard image, and the [[Hotspot Scripting|Hotspot angelscript]] file.<br><br />
When a level references a hotspot, this is the file type that is referenced.<br />
<br />
== Hotspot XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<Type>generic</Type><br />
<Hotspot><br />
<BillboardColorMap>Data/UI/spawner/thumbs/Hotspot/empty.png</BillboardColorMap><br />
<Script>hotspots/sound_hotspot.as</Script><br />
</Hotspot><br />
</pre><br />
<br />
== Hotspot XML -> Type element ==<br />
<pre><br />
<Type>generic</Type><br />
<Hotspot><br />
...<br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. This should always have the value <code><Type>generic</Type></code>.<br><br />
Note: Having two document elements is not valid XML, and I'm not sure what purpose this element serves. But leave it in, since all the hotspots do it. -merlyn<br />
<br />
== Hotspot XML -> Character element ==<br />
<pre><br />
<Hotspot><br />
<BillboardColorMap>Data/UI/spawner/thumbs/Hotspot/empty.png</BillboardColorMap><br />
...<br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. Path to image file. If you don't want a billboard image, you can use <code>Data/UI/spawner/thumbs/Hotspot/empty.png</code>.<br />
<br />
== Hotspot XML -> Script element ==<br />
<pre><br />
<Hotspot><br />
...<br />
<Script>hotspots/sound_hotspot.as</Script><br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Hotspot Scripting|Hotspot angelscript]]. Relative to <code>Data/Scripts</code> folder.<br />
<br />
= Item XML =<br />
<br />
'''TODO:'''<br />
<br />
= Layered Song XML =<br />
<br />
'''TODO:'''<br />
<br />
= Level Meta XML =<br />
<br />
'''TODO:'''<br />
<br />
= Material XML =<br />
<br />
This XML file specifies the sounds that will be played when a character or item interacts with a world object. It is used to model the sound differences between wood, metal, soil, ice, etc.<br><br />
<br />
<code>Data/Materials/default.xml</code> is the global "default" material, if the material isn't specified by the world object.<br><br />
<br />
When the engine or a gameplay script detects a physics event, the code will do a lookup against the current material, for an event with that event name. If the event name is found, then the corresponding sound will be triggered.<br><br />
<br />
Some of these events and materials might specify modifiers (<code>soft</code>, <code>heavy</code>, etc). If they do, the code will first do the lookup against the <code><events mod="themod"></code> version of the event.<br><br />
If an event with the given name is not found with that modifier, the code will then lookup a version of the same event name, but with no modifiers specified.<br><br />
<br />
Some of the values, if not specified, will look at a global "base" material to find the value of the parameter. <code>max_distance</code> is the only one of those parameters right now.<br />
<br />
<code>Data/Materials/base.xml</code> is the global "base" material.<br><br />
<br />
== Material XML Example ==<br />
From <code>Data/Materials/dirt.xml</code> - this is not the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_light_dirt.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_medium_dirt.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_heavy_dirt.xml" attached="true"/><br />
<-- Note: more sound events in the real file than just these --><br />
</events> <br />
<events mod="soft"><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
</events><br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"<br />
shader="stepdecalfast"/><br />
<skid color="Data/Textures/Decals/Footprints/rabbitdirtsmear_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtsmear_n.tga"<br />
shader="stepdecalfast"/><br />
</decals><br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
<skid path="Data/Particles/heavydirt.xml"/><br />
</particles><br />
<physics hardness = "0.8" friction = "1.0" sharp_penetration = "1.0" /><br />
</material><br />
</pre><br />
<br />
From <code>Data/Materials/default.xml</code>, which is the default Material XML file. It is used when other XML file types call for a Material XML, but one is not specified.<br><br />
This is the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
<rightrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
<leftwallstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_wallrun.xml" attached="true"/><br />
<rightwallstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_wallrun.xml" attached="true"/><br />
<leftwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_walk.xml" attached="true"/><br />
<rightwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_walk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<land soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land.xml" attached="true"/><br />
<land_soft soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land_soft.xml" attached="true"/><br />
<land_slide soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land_slide.xml" attached="true"/><br />
<slide soundgroup="Data/Sounds/concrete_foley/slide_concrete_short.xml" attached="true"/><br />
<kick soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_kick.xml" attached="true"/><br />
<sweep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_sweep.xml" attached="true"/><br />
<jump soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump.xml" attached="true"/><br />
<roll soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_roll.xml" attached="true"/><br />
<edge_grab soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_edge_grab.xml" attached="true"/><br />
<edge_crawl soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_edgecrawl.xml" attached="true"/><br />
<bodyfall soundgroup="Data/Sounds/concrete_foley/bf_concrete.xml" attached="true"/><br />
<bodyfall_light soundgroup="Data/Sounds/concrete_foley/bf_concrete_light.xml" attached="true"/><br />
<bodyfall_medium soundgroup="Data/Sounds/concrete_foley/bf_concrete_medium.xml" attached="true"/><br />
<bodyfall_heavy soundgroup="Data/Sounds/concrete_foley/bf_concrete_heavy.xml" attached="true"/><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_light_stone.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_medium_stone.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_heavy_stone.xml" attached="true"/><br />
<blood_spatter soundgroup="Data/Sounds/blood/spatter_hard.xml"/><br />
<blood_drip soundgroup="Data/Sounds/blood/drip_lowpass.xml"/><br />
</events><br />
<events mod="heavy"><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_run.xml" attached="true"/><br />
<rightrunstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_run.xml" attached="true"/><br />
<leftwallstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_wallrun.xml" attached="true"/><br />
<rightwallstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_wallrun.xml" attached="true"/><br />
<leftwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_walk.xml" attached="true"/><br />
<rightwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_walk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<land soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<land_soft soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<land_slide soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<kick soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_kick.xml" attached="true"/><br />
<sweep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_sweep.xml" attached="true"/><br />
<jump soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump.xml" attached="true"/><br />
<roll soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_roll.xml" attached="true"/><br />
<edge_grab soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_edge_grab.xml" attached="true"/><br />
</events><br />
<events mod="soft"><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
</events><br />
<physics hardness = "1.0" friction = "1.0" sharp_penetration = "0.0" /><br />
</material><br />
</pre><br />
<br />
From <code>Data/Materials/base.xml</code>, which specifies the default '''max_distance''' values for all materials.<br><br />
This is the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<leftrunstep max_distance = "40.0"/><br />
<rightrunstep max_distance = "40.0"/><br />
<leftwallstep max_distance = "40.0"/><br />
<rightwallstep max_distance = "40.0"/><br />
<leftwalkstep max_distance = "25.0"/><br />
<rightwalkstep max_distance = "25.0"/><br />
<leftcrouchwalkstep max_distance = "10.0"/><br />
<rightcrouchwalkstep max_distance = "10.0"/><br />
<land max_distance = "60.0"/><br />
<land_soft max_distance = "30.0"/><br />
<land_slide max_distance = "20.0"/><br />
<slide max_distance = "30.0"/><br />
<kick max_distance = "25.0"/><br />
<sweep max_distance = "25.0"/><br />
<jump max_distance = "40.0"/><br />
<roll max_distance = "15.0"/><br />
<edge_grab max_distance = "25.0"/><br />
<edge_crawl max_distance = "15.0"/><br />
<bodyfall max_distance = "80.0"/><br />
<bodyfall_light max_distance = "40.0"/><br />
<bodyfall_medium max_distance = "60.0"/><br />
<bodyfall_heavy max_distance = "80.0"/><br />
<weapon_drop_light max_distance = "80.0"/><br />
<weapon_drop_medium max_distance = "80.0"/><br />
<weapon_drop_heavy max_distance = "80.0"/><br />
<blood_spatter max_distance = "30.0"/><br />
<blood_drip max_distance = "20.0"/><br />
<flip max_distance = "20.0"/><br />
<choke_grab max_distance = "10.0"/>;<br />
<choke_move max_distance = "10.0"/>;<br />
<choke_fall max_distance = "10.0"/>;<br />
</events><br />
<events mod="heavy"><br />
<leftrunstep max_distance = "50.0"/><br />
<rightrunstep max_distance = "50.0"/><br />
<leftwallstep max_distance = "50.0"/><br />
<rightwallstep max_distance = "50.0"/><br />
<leftwalkstep max_distance = "30.0"/><br />
<rightwalkstep max_distance = "30.0"/><br />
<leftcrouchwalkstep max_distance = "20.0"/><br />
<rightcrouchwalkstep max_distance = "20.0"/><br />
<land max_distance = "80.0"/><br />
<land_soft max_distance = "40.0"/><br />
<land_slide max_distance = "40.0"/><br />
<kick max_distance = "30.0"/><br />
<sweep max_distance = "30.0"/><br />
<jump max_distance = "50.0"/><br />
<roll max_distance = "25.0"/><br />
<edge_grab max_distance = "40.0"/><br />
</events><br />
</material><br />
</pre><br />
<br />
== Material XML -> Events element ==<br />
<pre><br />
<material><br />
<events><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision sound events for the material.<br />
<br />
=== Mod attribute ===<br />
<br />
<pre><br />
<material><br />
<events mod="soft"><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
'''Optional''' - String value. Specifies that this list of collision sound events only apply when the given modifier is specified.<br><br />
The modifiers are different ways the sounds will be presented, such as <code>soft</code>, <code>heavy</code>, etc.<br />
<br />
== Material XML -> Events element -> Event element ==<br />
<pre><br />
<material><br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true" max_distance = "40.0"/><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
The sound (and physical properties of the sound) for a given collision sound event. The name of the element corresponds to the name of the collision sound event (in this example, '''leftrunstep''').<br />
<br />
=== soundgroup attribute ===<br />
<br />
<pre><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml"/><br />
</pre><br />
<br />
'''Optional''' - String value. Specifies the [[Xml File Formats#Sound Group XML|Sound Group XML]] for the material interaction event.<br><br />
'''TODO:''': Is this really optional? If so, what is the default behavior?<br />
<br />
=== attached attribute ===<br />
<br />
<pre><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
</pre><br />
<br />
'''Optional''' - Boolean value. '''Default''': false<br><br />
If true, the sound (group) will be played as a sound that is attached to the character that triggered the event.<br />
<br />
=== max_distance attribute ===<br />
<br />
<pre><br />
<leftrunstep max_distance = "40.0"/><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0<br><br />
The max distance that the sound will still be audible to the player.<br><br />
If the value is 0.0, then the max distance will be considered infinite.<br><br />
If it is not specified for a given sound collision event, then the corresponding value in <code>Data/Materials/base.xml</code> will be used instead.<br />
<br />
== Material XML -> Decals element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision decal events for the material.<br />
<br />
== Material XML -> Decals element -> Decal element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"<br />
shader="stepdecalfast"/><br />
<skid color="Data/Textures/Decals/Footprints/rabbitdirtsmear_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtsmear_n.tga"<br />
shader="stepdecalfast"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
The decal (and rendering properties of the decal) for a given collision decal event. The name of the element corresponds to the name of the collision decal event (in these examples, '''step''' and '''skid''').<br />
<br />
=== color attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the decal's color texture.<br />
<br />
=== normal attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the decal's normal texture.<br />
<br />
=== shader attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step shader="stepdecalfast"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the shader name that will be used when rendering the decal.<br />
<br />
== Material XML -> Particles element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
...<br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision particle events for the material. <br />
<br />
== Material XML -> Particles element -> Particle element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
<skid path="Data/Particles/heavydirt.xml"/><br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
The particle for a given collision particle event. The name of the element corresponds to the name of the collision particle event (in these examples, '''step''' and '''skid'''). <br />
<br />
=== path attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
...<br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Xml File Formats#Particle XML|Particle XML]]<br />
<br />
== Material XML -> Physics element ==<br />
<br />
<pre><br />
<material><br />
<physics hardness = "0.8" friction = "1.0" sharp_penetration = "1.0" /><br />
</material><br />
</pre><br />
<br />
The physics properties of the the material. Collision gameplay events will use these properties to determine how to make other objects respond when they collide with the object this material is applied to.<br />
<br />
=== hardness attribute ===<br />
<br />
<pre><br />
<material><br />
<physics hardness = "0.8"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0<br><br />
'''TODO: Describe'''<br />
<br />
=== friction attribute ===<br />
<br />
<pre><br />
<material><br />
<physics friction = "1.0"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0<br><br />
The friction between any other object and the object this material is applied to.<br><br />
In real life this would depend on the materials for both objects, but the game makes simplifying assumptions to make the mapping a bit less complicated.<br />
<br />
=== sharp_penetration attribute ===<br />
<br />
<pre><br />
<material><br />
<physics sharp_penetration = "1.0"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0<br><br />
'''TODO: Describe'''<br />
<br />
= Mod XML =<br />
<br />
'''TODO:'''<br />
<br />
= Music XML =<br />
<br />
'''TODO:'''<br />
<br />
= Nav Mesh Meta XML =<br />
<br />
'''TODO:'''<br />
<br />
= Object XML =<br />
<br />
'''TODO:'''<br />
<br />
= Particle XML =<br />
<br />
'''TODO:'''<br />
<br />
= Path XML =<br />
<br />
'''TODO:'''<br />
<br />
= Reaction XML =<br />
<br />
'''TODO:'''<br />
<br />
= Retarget XML =<br />
<br />
'''TODO:'''<br />
<br />
= Rig XML =<br />
<br />
This is the XML file for a character skeleton. It binds a [[Xml File Formats#Character XML|Character XML]] file to an [[Character Scripting|AI angelscript]] file.<br><br />
When a level references a character, this is the file type that is referenced.<br />
<br />
== Rig XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<rig bone_path = "Data/Skeletons/r_wolf2.phxbn"<br />
model_path = "Data/Models/Characters/IGF_Wolf/IGF_Wolf.obj"<br />
mass_path = "Data/Skeletons/r_lt_dog.xml"/><br />
</pre><br />
<br />
== Rig XML -> bone_path attribute ==<br />
<pre><br />
<rig bone_path = "Data/Skeletons/r_wolf2.phxbn"/><br />
</pre><br />
<br />
'''Required''' - String value. Path to the skeleton file, using the custom Phoenix Engine skeleton file type ([[Binary File Formats#PHXBN|PHXBN]]. This file MUST have been exported using the mesh specified in <code>model_path</code>.<br />
<br />
== Rig XML -> model_path attribute ==<br />
<pre><br />
<rig model_path = "Data/Models/Characters/IGF_Wolf/IGF_Wolf.obj"/><br />
</pre><br />
<br />
'''Required''' - String value. Path to Obj model file to use as skinned the character mesh. This file MUST be the same as the one used when exporting the skeleton specified in <code>bone_path</code>.<br />
<br />
== Rig XML -> mass_path attribute ==<br />
<pre><br />
<rig mass_path = "Data/Skeletons/r_lt_dog.xml"/><br />
</pre><br />
<br />
'''Optional''' - String value. Path to [[Xml File Formats#Rig XML|Rig XML]]. Used to override the current skeleton with the bone masses from a different skeleton.<br><br />
'''TODO''': Why you'd want to do this? Who knows! -merlyn<br />
<br />
= Shader Preload XML =<br />
<br />
'''TODO:'''<br />
<br />
= Sound Group XML =<br />
<br />
This is the XML file that describes a group of sounds. One of those sounds will be randomly chosen and played whenever the sound group is triggered.<br><br />
<br />
The file will specify a count of the number of <code>variants</code> that exist, and a sound file will need to exist for each of those variants.<br><br />
For a Sound Group XML with three variants, the XML file and and corresponding sound variants should follow a naming scheme like this:<br />
* <code>Data/Sounds/example_subdir/example_sound_group.xml</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_1.wav</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_2.wav</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_3.wav</code><br><br />
<br />
== Sound Group XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<soundgroup<br />
variants = "3"<br />
delay = "5.3"<br />
volume = "0.1"<br />
max_distance = "77.5"<br />
/><br />
</pre><br />
<br />
== Sound Group XML -> variants attribute ==<br />
<pre><br />
<soundgroup variants = "3" /><br />
</pre><br />
<br />
'''Optional''' - Integer value. '''Default''': 1.<br><br />
The count of variants. There must also be a corresponding <code>SoundGroupXmlName_1.wav</code> file for every variant, numbered incrementally up to the variant count.<br><br />
E.g. if there was 3 variants, there would need to be files named <code>SoundGroupXmlName_1.wav</code>, <code>SoundGroupXmlName_2.wav</code>, and <code>SoundGroupXmlName_3.wav</code>.<br />
<br />
== Sound Group XML -> delay attribute ==<br />
<pre><br />
<soundgroup delay = "5.3" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0.<br><br />
A delay to add to the start of sound playback, in seconds.<br />
<br />
== Sound Group XML -> volume attribute ==<br />
<pre><br />
<soundgroup volume = "0.1" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0.<br><br />
The volume to play back the sound.<br><br />
This is further multiplied by the gain specified when triggering the sound group in gameplay code.<br />
<br />
== Sound Group XML -> max_distance attribute ==<br />
<pre><br />
<soundgroup max_distance = "77.5" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 30.0.<br><br />
The maximum distance that the sound can be heard by the player.<br><br />
It will be overridden by the <code>max_distance</code> in the collision sound event, in the [[Xml File Formats#Material XML -> Events element -> Event element|Material XML]], if specified for the given collision sound event.<br />
<br />
= Synced Animation Group XML =<br />
<br />
'''TODO:'''<br />
<br />
= Version Manifest XML =<br />
<br />
'''TODO:'''<br />
<br />
= Voice XML =<br />
<br />
'''TODO:'''</div>Merlynhttp://wiki.wolfire.com/index.php?title=Xml_File_Formats&diff=6220Xml File Formats2023-09-05T07:35:07Z<p>Merlyn: /* Sound Group XML -> volume attribute */</p>
<hr />
<div>= TODO: =<br />
<br />
Level, Saved Object, Prefab - These have more confusing schemas, to the point where I'm not entirely sure they're distinct types from one another, and I haven't nailed them down yet -merlyn<br />
<br />
= Actor XML =<br />
<br />
This is the top-level XML file for an NPC or combat character. It binds a [[Xml File Formats#Character XML|Character XML]] file to an [[Character Scripting|AI angelscript]] file.<br><br />
When a level references a character, this is the file type that is referenced.<br />
<br />
== Actor XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<Actor><br />
<Character>Data/Characters/rabbot.xml</Character><br />
<ControlScript>enemycontrol.as</ControlScript><br />
</Actor><br />
</pre><br />
<br />
== Actor XML -> Character element ==<br />
<pre><br />
<Actor><br />
<Character>Data/Characters/rabbot.xml</Character><br />
...<br />
</Actor><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Xml File Formats#Character XML|Character XML]]<br />
<br />
== Actor XML -> ControlScript element ==<br />
<pre><br />
<Actor><br />
...<br />
<ControlScript>enemycontrol.as</ControlScript><br />
</Actor><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Character Scripting|AI angelscript]]. Relative to <code>Data/Scripts</code> folder<br />
<br />
= Asset Preload XML =<br />
<br />
'''TODO:'''<br />
<br />
= Attachment XML =<br />
<br />
'''TODO:'''<br />
<br />
= Attack XML =<br />
<br />
'''TODO:'''<br />
<br />
= Character XML =<br />
<br />
'''TODO:'''<br />
<br />
= Decal XML =<br />
<br />
'''TODO:'''<br />
<br />
= Events XML =<br />
<br />
'''TODO:'''<br />
<br />
= Hotspot XML =<br />
<br />
This is the top-level XML file for a hotspot game object. It specifies the billboard image, and the [[Hotspot Scripting|Hotspot angelscript]] file.<br><br />
When a level references a hotspot, this is the file type that is referenced.<br />
<br />
== Hotspot XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<Type>generic</Type><br />
<Hotspot><br />
<BillboardColorMap>Data/UI/spawner/thumbs/Hotspot/empty.png</BillboardColorMap><br />
<Script>hotspots/sound_hotspot.as</Script><br />
</Hotspot><br />
</pre><br />
<br />
== Hotspot XML -> Type element ==<br />
<pre><br />
<Type>generic</Type><br />
<Hotspot><br />
...<br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. This should always have the value <code><Type>generic</Type></code>.<br><br />
Note: Having two document elements is not valid XML, and I'm not sure what purpose this element serves. But leave it in, since all the hotspots do it. -merlyn<br />
<br />
== Hotspot XML -> Character element ==<br />
<pre><br />
<Hotspot><br />
<BillboardColorMap>Data/UI/spawner/thumbs/Hotspot/empty.png</BillboardColorMap><br />
...<br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. Path to image file. If you don't want a billboard image, you can use <code>Data/UI/spawner/thumbs/Hotspot/empty.png</code>.<br />
<br />
== Hotspot XML -> Script element ==<br />
<pre><br />
<Hotspot><br />
...<br />
<Script>hotspots/sound_hotspot.as</Script><br />
</Hotspot><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Hotspot Scripting|Hotspot angelscript]]. Relative to <code>Data/Scripts</code> folder.<br />
<br />
= Item XML =<br />
<br />
'''TODO:'''<br />
<br />
= Layered Song XML =<br />
<br />
'''TODO:'''<br />
<br />
= Level Meta XML =<br />
<br />
'''TODO:'''<br />
<br />
= Material XML =<br />
<br />
This XML file specifies the sounds that will be played when a character or item interacts with a world object. It is used to model the sound differences between wood, metal, soil, ice, etc.<br><br />
<br />
<code>Data/Materials/default.xml</code> is the global "default" material, if the material isn't specified by the world object.<br><br />
<br />
When the engine or a gameplay script detects a physics event, the code will do a lookup against the current material, for an event with that event name. If the event name is found, then the corresponding sound will be triggered.<br><br />
<br />
Some of these events and materials might specify modifiers (<code>soft</code>, <code>heavy</code>, etc). If they do, the code will first do the lookup against the <code><events mod="themod"></code> version of the event.<br><br />
If an event with the given name is not found with that modifier, the code will then lookup a version of the same event name, but with no modifiers specified.<br><br />
<br />
Some of the values, if not specified, will look at a global "base" material to find the value of the parameter. <code>max_distance</code> is the only one of those parameters right now.<br />
<br />
<code>Data/Materials/base.xml</code> is the global "base" material.<br><br />
<br />
== Material XML Example ==<br />
From <code>Data/Materials/dirt.xml</code> - this is not the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_light_dirt.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_medium_dirt.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_heavy_dirt.xml" attached="true"/><br />
<-- Note: more sound events in the real file than just these --><br />
</events> <br />
<events mod="soft"><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
</events><br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"<br />
shader="stepdecalfast"/><br />
<skid color="Data/Textures/Decals/Footprints/rabbitdirtsmear_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtsmear_n.tga"<br />
shader="stepdecalfast"/><br />
</decals><br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
<skid path="Data/Particles/heavydirt.xml"/><br />
</particles><br />
<physics hardness = "0.8" friction = "1.0" sharp_penetration = "1.0" /><br />
</material><br />
</pre><br />
<br />
From <code>Data/Materials/default.xml</code>, which is the default Material XML file. It is used when other XML file types call for a Material XML, but one is not specified.<br><br />
This is the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
<rightrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
<leftwallstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_wallrun.xml" attached="true"/><br />
<rightwallstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_wallrun.xml" attached="true"/><br />
<leftwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_walk.xml" attached="true"/><br />
<rightwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_walk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_crouchwalk.xml" attached="true"/><br />
<land soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land.xml" attached="true"/><br />
<land_soft soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land_soft.xml" attached="true"/><br />
<land_slide soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump_land_slide.xml" attached="true"/><br />
<slide soundgroup="Data/Sounds/concrete_foley/slide_concrete_short.xml" attached="true"/><br />
<kick soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_kick.xml" attached="true"/><br />
<sweep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_sweep.xml" attached="true"/><br />
<jump soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_jump.xml" attached="true"/><br />
<roll soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_roll.xml" attached="true"/><br />
<edge_grab soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_edge_grab.xml" attached="true"/><br />
<edge_crawl soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_edgecrawl.xml" attached="true"/><br />
<bodyfall soundgroup="Data/Sounds/concrete_foley/bf_concrete.xml" attached="true"/><br />
<bodyfall_light soundgroup="Data/Sounds/concrete_foley/bf_concrete_light.xml" attached="true"/><br />
<bodyfall_medium soundgroup="Data/Sounds/concrete_foley/bf_concrete_medium.xml" attached="true"/><br />
<bodyfall_heavy soundgroup="Data/Sounds/concrete_foley/bf_concrete_heavy.xml" attached="true"/><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_light_stone.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_medium_stone.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/weapon_drop_heavy_stone.xml" attached="true"/><br />
<blood_spatter soundgroup="Data/Sounds/blood/spatter_hard.xml"/><br />
<blood_drip soundgroup="Data/Sounds/blood/drip_lowpass.xml"/><br />
</events><br />
<events mod="heavy"><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_run.xml" attached="true"/><br />
<rightrunstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_run.xml" attached="true"/><br />
<leftwallstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_wallrun.xml" attached="true"/><br />
<rightwallstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_wallrun.xml" attached="true"/><br />
<leftwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_walk.xml" attached="true"/><br />
<rightwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_walk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<leftcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<rightcrouchwalkstep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_crouchwalk.xml" attached="true"/><br />
<land soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<land_soft soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<land_slide soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump_land.xml" attached="true"/><br />
<kick soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_kick.xml" attached="true"/><br />
<sweep soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_sweep.xml" attached="true"/><br />
<jump soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_jump.xml" attached="true"/><br />
<roll soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_roll.xml" attached="true"/><br />
<edge_grab soundgroup="Data/Sounds/concrete_foley/fs_heavy_concrete_edge_grab.xml" attached="true"/><br />
</events><br />
<events mod="soft"><br />
<weapon_drop_light soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_medium soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
<weapon_drop_heavy soundgroup="Data/Sounds/weapon_foley/impact/soft_bag_on_hard.xml" attached="true"/><br />
</events><br />
<physics hardness = "1.0" friction = "1.0" sharp_penetration = "0.0" /><br />
</material><br />
</pre><br />
<br />
From <code>Data/Materials/base.xml</code>, which specifies the default '''max_distance''' values for all materials.<br><br />
This is the complete contents of that file.<br />
<pre><br />
<?xml version="1.0" ?><br />
<material><br />
<events><br />
<leftrunstep max_distance = "40.0"/><br />
<rightrunstep max_distance = "40.0"/><br />
<leftwallstep max_distance = "40.0"/><br />
<rightwallstep max_distance = "40.0"/><br />
<leftwalkstep max_distance = "25.0"/><br />
<rightwalkstep max_distance = "25.0"/><br />
<leftcrouchwalkstep max_distance = "10.0"/><br />
<rightcrouchwalkstep max_distance = "10.0"/><br />
<land max_distance = "60.0"/><br />
<land_soft max_distance = "30.0"/><br />
<land_slide max_distance = "20.0"/><br />
<slide max_distance = "30.0"/><br />
<kick max_distance = "25.0"/><br />
<sweep max_distance = "25.0"/><br />
<jump max_distance = "40.0"/><br />
<roll max_distance = "15.0"/><br />
<edge_grab max_distance = "25.0"/><br />
<edge_crawl max_distance = "15.0"/><br />
<bodyfall max_distance = "80.0"/><br />
<bodyfall_light max_distance = "40.0"/><br />
<bodyfall_medium max_distance = "60.0"/><br />
<bodyfall_heavy max_distance = "80.0"/><br />
<weapon_drop_light max_distance = "80.0"/><br />
<weapon_drop_medium max_distance = "80.0"/><br />
<weapon_drop_heavy max_distance = "80.0"/><br />
<blood_spatter max_distance = "30.0"/><br />
<blood_drip max_distance = "20.0"/><br />
<flip max_distance = "20.0"/><br />
<choke_grab max_distance = "10.0"/>;<br />
<choke_move max_distance = "10.0"/>;<br />
<choke_fall max_distance = "10.0"/>;<br />
</events><br />
<events mod="heavy"><br />
<leftrunstep max_distance = "50.0"/><br />
<rightrunstep max_distance = "50.0"/><br />
<leftwallstep max_distance = "50.0"/><br />
<rightwallstep max_distance = "50.0"/><br />
<leftwalkstep max_distance = "30.0"/><br />
<rightwalkstep max_distance = "30.0"/><br />
<leftcrouchwalkstep max_distance = "20.0"/><br />
<rightcrouchwalkstep max_distance = "20.0"/><br />
<land max_distance = "80.0"/><br />
<land_soft max_distance = "40.0"/><br />
<land_slide max_distance = "40.0"/><br />
<kick max_distance = "30.0"/><br />
<sweep max_distance = "30.0"/><br />
<jump max_distance = "50.0"/><br />
<roll max_distance = "25.0"/><br />
<edge_grab max_distance = "40.0"/><br />
</events><br />
</material><br />
</pre><br />
<br />
== Material XML -> Events element ==<br />
<pre><br />
<material><br />
<events><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision sound events for the material.<br />
<br />
=== Mod attribute ===<br />
<br />
<pre><br />
<material><br />
<events mod="soft"><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
'''Optional''' - String value. Specifies that this list of collision sound events only apply when the given modifier is specified.<br><br />
The modifiers are different ways the sounds will be presented, such as <code>soft</code>, <code>heavy</code>, etc.<br />
<br />
== Material XML -> Events element -> Event element ==<br />
<pre><br />
<material><br />
<events><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true" max_distance = "40.0"/><br />
...<br />
</events><br />
...<br />
</material><br />
</pre><br />
<br />
The sound (and physical properties of the sound) for a given collision sound event. The name of the element corresponds to the name of the collision sound event (in this example, '''leftrunstep''').<br />
<br />
=== soundgroup attribute ===<br />
<br />
<pre><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml"/><br />
</pre><br />
<br />
'''Optional''' - String value. Specifies the [[Xml File Formats#Sound Group XML|Sound Group XML]] for the material interaction event.<br><br />
'''TODO:''': Is this really optional? If so, what is the default behavior?<br />
<br />
=== attached attribute ===<br />
<br />
<pre><br />
<leftrunstep soundgroup="Data/Sounds/concrete_foley/fs_light_concrete_run.xml" attached="true"/><br />
</pre><br />
<br />
'''Optional''' - Boolean value. '''Default''': false<br><br />
If true, the sound (group) will be played as a sound that is attached to the character that triggered the event.<br />
<br />
=== max_distance attribute ===<br />
<br />
<pre><br />
<leftrunstep max_distance = "40.0"/><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0<br><br />
The max distance that the sound will still be audible to the player.<br><br />
If the value is 0.0, then the max distance will be considered infinite.<br><br />
If it is not specified for a given sound collision event, then the corresponding value in <code>Data/Materials/base.xml</code> will be used instead.<br />
<br />
== Material XML -> Decals element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision decal events for the material.<br />
<br />
== Material XML -> Decals element -> Decal element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"<br />
shader="stepdecalfast"/><br />
<skid color="Data/Textures/Decals/Footprints/rabbitdirtsmear_c.tga"<br />
normal="Data/Textures/Decals/Footprints/rabbitdirtsmear_n.tga"<br />
shader="stepdecalfast"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
The decal (and rendering properties of the decal) for a given collision decal event. The name of the element corresponds to the name of the collision decal event (in these examples, '''step''' and '''skid''').<br />
<br />
=== color attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step color="Data/Textures/Decals/Footprints/rabbitdirtprint_c.tga"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the decal's color texture.<br />
<br />
=== normal attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step normal="Data/Textures/Decals/Footprints/rabbitdirtprint_n.tga"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the path to the image for the decal's normal texture.<br />
<br />
=== shader attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<decals><br />
<step shader="stepdecalfast"/><br />
...<br />
</decals><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Specifies the shader name that will be used when rendering the decal.<br />
<br />
== Material XML -> Particles element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
...<br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
Contains a list of collision particle events for the material. <br />
<br />
== Material XML -> Particles element -> Particle element ==<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
<skid path="Data/Particles/heavydirt.xml"/><br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
The particle for a given collision particle event. The name of the element corresponds to the name of the collision particle event (in these examples, '''step''' and '''skid'''). <br />
<br />
=== path attribute ===<br />
<br />
<pre><br />
<material><br />
...<br />
<particles><br />
<step path="Data/Particles/heavydirt.xml"/><br />
...<br />
</particles><br />
...<br />
</material><br />
</pre><br />
<br />
'''Required''' - String value. Path to [[Xml File Formats#Particle XML|Particle XML]]<br />
<br />
== Material XML -> Physics element ==<br />
<br />
<pre><br />
<material><br />
<physics hardness = "0.8" friction = "1.0" sharp_penetration = "1.0" /><br />
</material><br />
</pre><br />
<br />
The physics properties of the the material. Collision gameplay events will use these properties to determine how to make other objects respond when they collide with the object this material is applied to.<br />
<br />
=== hardness attribute ===<br />
<br />
<pre><br />
<material><br />
<physics hardness = "0.8"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0<br><br />
'''TODO: Describe'''<br />
<br />
=== friction attribute ===<br />
<br />
<pre><br />
<material><br />
<physics friction = "1.0"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0<br><br />
The friction between any other object and the object this material is applied to.<br><br />
In real life this would depend on the materials for both objects, but the game makes simplifying assumptions to make the mapping a bit less complicated.<br />
<br />
=== sharp_penetration attribute ===<br />
<br />
<pre><br />
<material><br />
<physics sharp_penetration = "1.0"/><br />
</material><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0<br><br />
'''TODO: Describe'''<br />
<br />
= Mod XML =<br />
<br />
'''TODO:'''<br />
<br />
= Music XML =<br />
<br />
'''TODO:'''<br />
<br />
= Nav Mesh Meta XML =<br />
<br />
'''TODO:'''<br />
<br />
= Object XML =<br />
<br />
'''TODO:'''<br />
<br />
= Particle XML =<br />
<br />
'''TODO:'''<br />
<br />
= Path XML =<br />
<br />
'''TODO:'''<br />
<br />
= Reaction XML =<br />
<br />
'''TODO:'''<br />
<br />
= Retarget XML =<br />
<br />
'''TODO:'''<br />
<br />
= Rig XML =<br />
<br />
This is the XML file for a character skeleton. It binds a [[Xml File Formats#Character XML|Character XML]] file to an [[Character Scripting|AI angelscript]] file.<br><br />
When a level references a character, this is the file type that is referenced.<br />
<br />
== Rig XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<rig bone_path = "Data/Skeletons/r_wolf2.phxbn"<br />
model_path = "Data/Models/Characters/IGF_Wolf/IGF_Wolf.obj"<br />
mass_path = "Data/Skeletons/r_lt_dog.xml"/><br />
</pre><br />
<br />
== Rig XML -> bone_path attribute ==<br />
<pre><br />
<rig bone_path = "Data/Skeletons/r_wolf2.phxbn"/><br />
</pre><br />
<br />
'''Required''' - String value. Path to the skeleton file, using the custom Phoenix Engine skeleton file type ([[Binary File Formats#PHXBN|PHXBN]]. This file MUST have been exported using the mesh specified in <code>model_path</code>.<br />
<br />
== Rig XML -> model_path attribute ==<br />
<pre><br />
<rig model_path = "Data/Models/Characters/IGF_Wolf/IGF_Wolf.obj"/><br />
</pre><br />
<br />
'''Required''' - String value. Path to Obj model file to use as skinned the character mesh. This file MUST be the same as the one used when exporting the skeleton specified in <code>bone_path</code>.<br />
<br />
== Rig XML -> mass_path attribute ==<br />
<pre><br />
<rig mass_path = "Data/Skeletons/r_lt_dog.xml"/><br />
</pre><br />
<br />
'''Optional''' - String value. Path to [[Xml File Formats#Rig XML|Rig XML]]. Used to override the current skeleton with the bone masses from a different skeleton.<br><br />
'''TODO''': Why you'd want to do this? Who knows! -merlyn<br />
<br />
= Shader Preload XML =<br />
<br />
'''TODO:'''<br />
<br />
= Sound Group XML =<br />
<br />
This is the XML file that describes a group of sounds. One of those sounds will be randomly chosen and played whenever the sound group is triggered.<br><br />
<br />
The file will specify a count of the number of <code>variants</code> that exist, and a sound file will need to exist for each of those variants.<br><br />
For a Sound Group XML with three variants, the XML file and and corresponding sound variants should follow a naming scheme like this:<br />
* <code>Data/Sounds/example_subdir/example_sound_group.xml</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_1.wav</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_2.wav</code><br><br />
* <code>Data/Sounds/example_subdir/example_sound_group_3.wav</code><br><br />
<br />
== Sound Group XML Example ==<br />
<pre><br />
<?xml version="1.0" ?><br />
<soundgroup<br />
variants = "3"<br />
delay = "5.3"<br />
volume = "0.1"<br />
max_distance = "77.5"<br />
/><br />
</pre><br />
<br />
== Sound Group XML -> variants attribute ==<br />
<pre><br />
<soundgroup variants = "3" /><br />
</pre><br />
<br />
'''Optional''' - Integer value. '''Default''': 1.<br><br />
The count of variants. There must also be a corresponding <code>SoundGroupXmlName_1.wav</code> file for every variant, numbered incrementally up to the variant count.<br><br />
E.g. if there was 3 variants, there would need to be files named <code>SoundGroupXmlName_1.wav</code>, <code>SoundGroupXmlName_2.wav</code>, and <code>SoundGroupXmlName_3.wav</code>.<br />
<br />
== Sound Group XML -> delay attribute ==<br />
<pre><br />
<soundgroup delay = "5.3" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 0.0.<br><br />
A delay to add to the start of sound playback, in seconds.<br />
<br />
== Sound Group XML -> volume attribute ==<br />
<pre><br />
<soundgroup volume = "0.1" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 1.0.<br><br />
The volume to play back the sound.<br><br />
This is further multiplied by the gain specified when triggering the sound group in gameplay code.<br />
<br />
== Sound Group XML -> max_distance attribute ==<br />
<pre><br />
<soundgroup max_distance = "77.5" /><br />
</pre><br />
<br />
'''Optional''' - Decimal value. '''Default''': 30.0. The maximum distance that the sound can be heard by the player. It will be overridden by the <code>max_distance</code> in the collision sound event, in the [[Xml File Formats#Material XML -> Events element -> Event element|Material XML]], if specified for the given collision sound event.<br />
<br />
= Synced Animation Group XML =<br />
<br />
'''TODO:'''<br />
<br />
= Version Manifest XML =<br />
<br />
'''TODO:'''<br />
<br />
= Voice XML =<br />
<br />
'''TODO:'''</div>Merlyn