Difference between revisions of "Overgrowth Levels"

From Wolfire Games Wiki
Jump to: navigation, search
(Removed WIP note)
 
(16 intermediate revisions by 2 users not shown)
Line 1: Line 1:
<!-- Intro taken from this blog post: http://blog.wolfire.com/2010/12/Overgrowth-graphics-overview -->
+
A level for Overgrowth comes in the shape of an XML file. This is a human readable format, so you can open a level up as a text file and see everything that's in it. This page will go through all the aspects of these XML files, with extra focus on the ones you can't change via the editor.
The base for every scene is the land and sky. The sky is [http://blog.wolfire.com/2009/02/creating-our-own-skydomes/ based on a panoramic photo], which is converted to a skybox at run-time. The terrain is based on a heightmap, which is then [http://blog.wolfire.com/2009/06/offthegrid-revisited/ simplified] using quadric error metrics and divided into patches for frustum culling. Finally the terrain and sky are combined into a new [http://blog.wolfire.com/2009/07/blending-land-and-sky/ skybox], and the edges of the terrain are [http://blog.wolfire.com/2009/02/terrain-edge-fading/ faded to blend in]. This new skybox is then blurred to use as a lookup for [http://blog.wolfire.com/2008/12/sky/ lighting and fog color]. The terrain also has [http://blog.wolfire.com/2009/12/Detail-textures four normal-mapped detail textures], which are blended based on a weight map, and [http://blog.wolfire.com/2009/12/Detail-texture-color-matching automatically tinted] to match the base color map. The detail textures [http://blog.wolfire.com/2009/12/Fading-detail-textures fade away in the distance] to avoid any visible tiling, but the heightmap normal mapping keeps the [http://blog.wolfire.com/2009/12/Close-up-and-distant-terrain-lighting large-scale detail]. This same technique is also used for some large objects, like buildings, cliffs and boulders.  
 
  
 +
== Example Level ==
 +
This is what the "new level" file looks like, which can be found in ''../Overgrowth/Data/Levels/nothing.xml''. If you want to you can copy everything in the box below into a text file, save it with the .xml file ending and load it in the game.
  
A detailed explanation on how to create and import terrain maps can be found here: http://forums.wolfire.com/viewtopic.php?f=16&t=12568
 
 
 
This is also an exceptional thread describing in great detail most aspects of level creation: http://forums.wolfire.com/viewtopic.php?f=16&t=14869#p157052
 
 
===XML File===
 
 
<pre>
 
<pre>
 
<?xml version="2.0" ?>
 
<?xml version="2.0" ?>
  
 
<Type>saved</Type>
 
<Type>saved</Type>
<Name></Name>
+
<Name>nothing</Name>
 
<Description></Description>
 
<Description></Description>
 
<Shader>post</Shader>
 
<Shader>post</Shader>
 +
<OutOfDate NavMesh="true" />
 +
<AmbientSounds />
 +
<Script></Script>
 +
 +
<LevelScriptParameters>
 +
    <parameter name="Achievements" type="string" val="flawless, no_injuries, no_kills" />
 +
    <parameter name="HDR Black point" type="string" val="0.005" />
 +
    <parameter name="HDR Bloom multiplier" type="string" val="1" />
 +
    <parameter name="HDR White point" type="string" val="0.971" />
 +
    <parameter name="Level Boundaries" type="string" val="1" />
 +
    <parameter name="Objectives" type="string" val="destroy_all" />
 +
    <parameter name="Saturation" type="float" val="1" />
 +
    <parameter name="Sky Brightness" type="string" val="1" />
 +
    <parameter name="Sky Rotation" type="string" val="-62" />
 +
    <parameter name="Sky Tint" type="string" val="255, 255, 255" />
 +
</LevelScriptParameters>
 +
 +
<Sky>
 +
    <DomeTexture>Data/Textures/skies/CloudySunset.tga</DomeTexture>
 +
    <SunAngularRad>0.153056</SunAngularRad>
 +
    <SunColorAngle>353.589</SunColorAngle>
 +
    <RayToSun r0="0.843168" r1="0.508385" r2="0.174962" />
 +
</Sky>
 +
 +
<ActorObjects>
 +
 +
    <CameraObject t0="-0.344697" t1="0.0453395" t2="2.04932" s0="1" s1="1" s2="1" q0="0.0216842" q1="0.703856" q2="-0.021506" r0="0.00824849" r1="3.72529e-008" r2="-0.999966" r3="0" r4="0.0610501" r5="0.998135" r6="0.000503631" r7="0" r8="0.998101" r9="-0.0610522" r10="0.00823313" r11="0" r12="0" r13="0" r14="0" r15="1" id="1">
 +
        <parameters />
 +
    </CameraObject>
 +
 +
    <EnvObject t0="3.42549" t1="-3.42134" t2="2.37398" s0="6.46988" s1="1" s2="6.38524" q0="0" q1="0" q2="0" r0="1" r1="0" r2="0" r3="0" r4="0" r5="1" r6="0" r7="0" r8="0" r9="0" r10="1" r11="0" r12="0" r13="0" r14="0" r15="1" id="1" color_r="0" color_g="0" color_b="0" type_file="Data/Objects/primitives/edged_cube.xml">
 +
        <parameters />
 +
    </EnvObject>
 +
 +
</ActorObjects>
 +
</pre>
 +
 +
== Unimportant or Deprecated Tags ==
 +
Since Overgrowth has been in development for such a long time, some of these tags are nothing but remnants of old systems that have been replaced with something else during development. For instance, levels used to store their names in their xml file, but now that's stored in the mod file instead.
 +
 +
This is a list of those tags
 +
 +
'''<Type>''' - This value is always equal to "''saved''".
  
 +
'''<Name>''' - Is automatically set to the name of the file without the file ending. Is not used by the engine.
 +
 +
'''<Description>''' - Map description. Is not used by the engine.
 +
 +
'''<AmbientSounds>''' - Ambient sounds used to be global for a level, but now you should use "Load → Sounds → Ambient sound hotspot" hotspots instead so you can have different ambient sounds in different parts of the level.
 +
 +
'''<OutOfDate>''' - Specifies if the nav mesh is out of date, not used anymore as we now use the hash of the level to determine if the nav mesh is out of date.
 +
 +
'''<Script>''' - Specifies a script file that runs for this level, this is not used in official levels anymore. We recommend using a hotspot for this type of functionality instead.
 +
 +
'''<Shader>''' - Shader that is used in this map. This value should be set to "''post''", unless you plan to use a custom shader in your level. Since Overgrowth now uses an uber shader you should use the [[Script_Parameters#Level|Custom Shader script parameter]] in most cases instead.
 +
 +
== Terrain ==
 +
To change the terrain in your level you need to manually edit the level XML file. Terrains are either generated from several textures (a height map, color map, weight map and one or more detail maps), or you can specify a specific object to use as terrain. Using a specific object is useful if you want to create holes in an existing terrain for your level, or if you have a specific model you want to use instead of a heightmap.
 +
 +
You can also have no terrain at all. So if the player won't be able to access the terrain, you can decrease loading times and improve performance in your level by removing the terrain tag entirely.
 +
 +
Here is an example of a terrain tag, taken from the '''02_Slaver_Camp.xml''' level from the Overgrowth story:
 +
 +
<pre>
 
<Terrain>
 
<Terrain>
     <Heightmap>[path here]</Heightmap>
+
     <Heightmap>Data/Textures/Terrain/patchy_highlands/patchy_highlands_hm.png</Heightmap>
     <ColorMap>[path here]</ColorMap>
+
    <ShaderExtra></ShaderExtra>
     <WeightMap>[path here]</WeightMap>
+
    <DetailMap></DetailMap>
 +
     <ColorMap>Data/Textures/Terrain/03_Villagers_vs_Slavers/03_Villagers_vs_Slavers_c.png</ColorMap>
 +
     <WeightMap>Data/Textures/Terrain/03_Villagers_vs_Slavers/03_Villagers_vs_Slavers_weights.png</WeightMap>
 
     <DetailMaps>
 
     <DetailMaps>
         <DetailMap colorpath="[path here to image with color info]" normalpath="[path here to image with normal info]" materialpath="[path here -- to something in the material.xml format]" />
+
         <DetailMap colorpath="Data/Textures/Terrain/DetailTextures/lichen_stone.tga" normalpath="Data/Textures/Terrain/DetailTextures/lichen_stone_n.tga" materialpath="Data/Materials/rock.xml" />
         <DetailMap colorpath="[path here to image with color info]" normalpath="[path here to image with normal info]" materialpath="[path here -- to something in the material.xml format]" />
+
         <DetailMap colorpath="Data/Textures/Terrain/DetailTextures/dirt_rocks.tga" normalpath="Data/Textures/Terrain/DetailTextures/dirt_rocks_normal.tga" materialpath="Data/Materials/dirtyrock.xml" />
         <DetailMap colorpath="[path here to image with color info]" normalpath="[path here to image with normal info]" materialpath="[path here -- to something in the material.xml format]" />
+
         <DetailMap colorpath="Data/Textures/Terrain/DetailTextures/grass.tga" normalpath="Data/Textures/Terrain/DetailTextures/grass_normal.png" materialpath="Data/Materials/grass.xml" />
         <DetailMap colorpath="[path here to image with color info]" normalpath="[path here to image with normal info]" materialpath="[path here -- to something in the material.xml format]" />
+
         <DetailMap colorpath="Data/Textures/Terrain/DetailTextures/dirt_grass.tga" normalpath="Data/Textures/Terrain/DetailTextures/dirt_grass_normal.tga" materialpath="Data/Materials/dirt.xml" />
 
     </DetailMaps>
 
     </DetailMaps>
     <DetailObjects> //for grass and stuff
+
     <DetailObjects>
         <DetailObject obj_path="Data/Objects/Plants/Groundcover/Grass/WildGrass.xml" weight_path="Data/Textures/Terrain/scrubby_hills/scrubby_hills_grass.png" normal_conform="0.900000" density="20.000000" min_embed="0.000000" max_embed="0.400000" min_scale="1.000000" max_scale="2.000000" view_distance="20.000000" jitter_degrees="10.000000" overbright="0.000000" />
+
        <DetailObject obj_path="Data/Objects/Plants/Groundcover/Grass/WildGrass.xml" weight_path="Data/Textures/Terrain/03_Villagers_vs_Slavers/03_Villagers_vs_Slavers_wildgrass.png" normal_conform="0.1" density="10" min_embed="0" max_embed="0" min_scale="1" max_scale="1.3" view_distance="30" jitter_degrees="0" overbright="0" tint_weight="1" />
 +
         <DetailObject obj_path="Data/Objects/Plants/Groundcover/Grass/tall_wild_grass.xml" weight_path="Data/Textures/Terrain/03_Villagers_vs_Slavers/03_Villagers_vs_Slavers_tallgrass.png" normal_conform="0.3" density="7" min_embed="0" max_embed="0" min_scale="0.7" max_scale="1.2" view_distance="30" jitter_degrees="15" overbright="0" tint_weight="1" />
 +
        <DetailObject obj_path="Data/Objects/Plants/Groundcover/Grass/brushgrass_clump.xml" weight_path="Data/Textures/Terrain/03_Villagers_vs_Slavers/03_Villagers_vs_Slavers_grass4.png" normal_conform="0.3" density="12" min_embed="0" max_embed="0" min_scale="0.7" max_scale="1.2" view_distance="30" jitter_degrees="15" overbright="0" tint_weight="0.4" />
 +
        <DetailObject obj_path="Data/Objects/Environment/Rocks/lichen_rock_c.xml" weight_path="Data/Textures/Terrain/03_Villagers_vs_Slavers/03_Villagers_vs_Slavers_grass3.png" normal_conform="0.9" density="0.2" min_embed="0" max_embed="0.4" min_scale="0.3" max_scale="0.8" view_distance="15" jitter_degrees="10" overbright="0" tint_weight="0.35" />
 +
        <DetailObject obj_path="Data/Objects/Environment/Rocks/lichen_rock_e.xml" weight_path="Data/Textures/Terrain/03_Villagers_vs_Slavers/03_Villagers_vs_Slavers_wildgrass.png" normal_conform="0.9" density="0.1" min_embed="0" max_embed="0.4" min_scale="0.3" max_scale="0.7" view_distance="15" jitter_degrees="10" overbright="0" tint_weight="0.35" />
 +
        <DetailObject obj_path="Data/Objects/Plants/Groundcover/Groundcover1.xml" weight_path="Data/Textures/Terrain/03_Villagers_vs_Slavers/03_Villagers_vs_Slavers_grass3.png" normal_conform="0.9" density="7" min_embed="0" max_embed="0.4" min_scale="1.2" max_scale="2" view_distance="15" jitter_degrees="5" overbright="0" tint_weight="0.5" />
 
     </DetailObjects>
 
     </DetailObjects>
 
</Terrain>
 
</Terrain>
 +
</pre>
  
<Sky>
+
'''<HeightMap>''' - A 16-bit grayscale image in the png format, with the value of each pixel corresponding to an elevation in the terrain.
    <DomeTexture>Data/Textures/skies/FILE.tga</DomeTexture>
+
 
    <SunAngularRad>0.123456</SunAngularRad>
+
'''<ShaderExtra>''' - Can be set to #SNOWY to add snow to the terrain, or #HEIGHT_BLEND for more pleasing transitions between terrain textures '''TODO:''' What do these do more exactly?
    <SunColorAngle>6.8534</SunColorAngle>
+
 
    <RayToSun r0="0.123456" r1="0.123456" r2="0.123456" />
+
'''<DetailMap>''' - Deprecated, does nothing.
    <ExtraAO>0</ExtraAO>
+
 
</Sky>
+
'''<ColorMap>''' - A .tga file which maps the color of each pixel to the color of a point on the terrain. This is used for rough texture, and can be used for example to make valleys green and mountain peaks grey.
 +
 
 +
'''<WeightMap>''' - A .tga in which colors (RGB + Black) are used to define which DetailMap to use on which part of the terrain.
 +
 
 +
'''<DetailMaps>''' - DetailMaps are used to tile textures across the terrain for more detail up close. Keep in mind that the color is tinted by the <ColorMap> texture.
 +
 
 +
Example:
  
<Objectives>[objective here]</Objectives>
+
<pre>
          //possible objectives: reach_a_trigger, reach_a_trigger_with_no_pursuers, collect
+
<DetailMap
 +
  colorpath="Data/Textures/Terrain/DetailTextures/grass.tga"
 +
  normalpath="Data/Textures/Terrain/DetailTextures/grass_normal.png"
 +
  materialpath="Data/Materials/grass.xml"
 +
/>
 
</pre>
 
</pre>
 +
The above example will make the surface look like grass up close, and it will make grassy sounds when you step on it. You can find a list of all material types in ../Overgrowth/Data/Materials/.
  
==Header==
+
'''<DetailObjects>''' - Can be used to automatically spread smaller objects across the terrain, such as grass and rocks.
'''<Type>''' - Always equal to ''saved''
 
  
'''<Name>''' - Map name, for use in some menus. Currently only used in challenge maps
+
Example:
  
'''<Description>''' - Map description. Some metadata (possibly for menus?). Currently only used in challenge maps
+
<pre>
 +
<DetailObject
 +
  obj_path="Data/GrassTest/grass_square.xml"
 +
  weight_path="Data/Textures/Terrain/cliffs_uplifting/cliffs_uplifting3_grass.png"
 +
  normal_conform="0.9"
 +
  density="3"
 +
  min_embed="-0.2"
 +
  max_embed="0"
 +
  min_scale="4"
 +
  max_scale="6.8"
 +
  view_distance="10"
 +
  jitter_degrees="10"
 +
  overbright="0"
 +
  tint_weight="0.5"
 +
/>
 +
</pre>
  
'''<Shader>''' - Shader that is used in this map. Nearly always set to ''post'', unless you want to use a custom shader
+
{| class="wikitable"
 +
|-
 +
! Attribute!! Description
 +
|-
 +
! obj_path
 +
| Path to the object you want to use
 +
|-
 +
! weight_path
 +
| Path to a black and white image that the engine uses to know where on the terrain the object should be distributed
 +
|-
 +
! normal_conform
 +
| How closely the object should follow its underlying terrain's normal, between 0 and 1
 +
|-
 +
! density
 +
| How close to each other the objects should be created
 +
|-
 +
! min/max_embed
 +
| The minimum/maximum random distance the objects should be offset vertically
 +
|-
 +
! min/max_scale
 +
| The minimum/maximum random scale of the objects
 +
|-
 +
! view_distance
 +
| How far away the objects start fading in
 +
|-
 +
! jitter_degrees
 +
| How many degrees of random rotation that will be applied to the objects
 +
|-
 +
! overbright
 +
| Higher value makes the object brighter
 +
|-
 +
! tint_weight
 +
| How much of the underlying terrain color should be applied to the object
 +
|}
  
==Terrain==
+
== Sky ==
'''<HeightMap>''' - A 16-bit grayscale image in the png format, with the value of each pixel corresponding to an elevation in the terrain.
+
The sun placement, intensity and color can be changed in the [[Editor_Interface#Sun_Editor|sun editor]]. The sky dome texture can also be changed in the editor via the "Set Sky Texture..." button in the [[Editor_Interface#Edit_menu|edit menu]]. Below is a quick explanation of what each tag in the <Sky> tag does.
  
'''<ColorMap>''' - A .tga file which maps the color of each pixel to the color of a point on the terrain. This is used for rough texture, and can be used for example to make valleys green and mountain peaks grey.
+
'''<DomeTexture>''' - Filepath to the texture of the skydome, some already exist in Data/Textures/skies/.
  
'''<WeightMap>''' - A .tga in which colors (RGB + Black) are used to define which DetailMap to use on which part of the terrain.
+
'''<SunAngularRad>''' - The lower this is, the darker the shadows are.
  
'''<DetailMap>''' - DetailMaps are used to tile various objects across the terrain, for example of a patch of gravel: a local change in terrain color to grey, a normal map that gives the impression of gravel, and the corresponding materialobject which generate a "gravel" sound when interacted with.
+
'''<SunColorAngle>''' - Where the color dot is in the [[Editor_Interface#Sun_Editor|sun editor]], tints the color of the sunlight.
  
==Sky==
+
'''<RayToSun/>''' - The 3 attributes in this tag describes the location of the sun in the sky. Use the [[Editor_Interface#Sun_Editor|sun editor]] to change it.
'''<DomeTexture>''' - Filepath to the texture of the skydome. Some already exist in Data/Textures/skies/
 
  
'''<SunAngularRad>''' - Size of Sun in Radians?
+
== Other ==
 +
'''<NavMeshParameters>''' - The settings when generating the navigation mesh. These are most easily changed in the editor under the [[Editor_Interface#Nav_Mesh_menu|Nav Mesh Menu]]. See the [[Editor_Interface#Nav_Mesh_menu|Nav Mesh Menu]] page to see what each setting does.
  
'''<SunColorAngle>''' - ??
+
'''<ActorObjects>''' - This tag contains all the objects in the level. Everything from characters and models to hotspots and groups.
  
'''<RayToSun/>''' - This Tag has 4 Attributes, r0, r1, and r2. ''NOTE: Range? they have floating point values, generally close to 0. what do they do?''
+
'''<RecentItems>''' - This is a list of objects that have been used in the level. These objects can be found in the editor under "Load → Open Recent..." for easy access.

Latest revision as of 13:26, 11 January 2018

A level for Overgrowth comes in the shape of an XML file. This is a human readable format, so you can open a level up as a text file and see everything that's in it. This page will go through all the aspects of these XML files, with extra focus on the ones you can't change via the editor.

Example Level

This is what the "new level" file looks like, which can be found in ../Overgrowth/Data/Levels/nothing.xml. If you want to you can copy everything in the box below into a text file, save it with the .xml file ending and load it in the game.

<?xml version="2.0" ?>

<Type>saved</Type>
<Name>nothing</Name>
<Description></Description>
<Shader>post</Shader>
<OutOfDate NavMesh="true" />
<AmbientSounds />
<Script></Script>

<LevelScriptParameters>
    <parameter name="Achievements" type="string" val="flawless, no_injuries, no_kills" />
    <parameter name="HDR Black point" type="string" val="0.005" />
    <parameter name="HDR Bloom multiplier" type="string" val="1" />
    <parameter name="HDR White point" type="string" val="0.971" />
    <parameter name="Level Boundaries" type="string" val="1" />
    <parameter name="Objectives" type="string" val="destroy_all" />
    <parameter name="Saturation" type="float" val="1" />
    <parameter name="Sky Brightness" type="string" val="1" />
    <parameter name="Sky Rotation" type="string" val="-62" />
    <parameter name="Sky Tint" type="string" val="255, 255, 255" />
</LevelScriptParameters>

<Sky>
    <DomeTexture>Data/Textures/skies/CloudySunset.tga</DomeTexture>
    <SunAngularRad>0.153056</SunAngularRad>
    <SunColorAngle>353.589</SunColorAngle>
    <RayToSun r0="0.843168" r1="0.508385" r2="0.174962" />
</Sky>

<ActorObjects>

    <CameraObject t0="-0.344697" t1="0.0453395" t2="2.04932" s0="1" s1="1" s2="1" q0="0.0216842" q1="0.703856" q2="-0.021506" r0="0.00824849" r1="3.72529e-008" r2="-0.999966" r3="0" r4="0.0610501" r5="0.998135" r6="0.000503631" r7="0" r8="0.998101" r9="-0.0610522" r10="0.00823313" r11="0" r12="0" r13="0" r14="0" r15="1" id="1">
        <parameters />
    </CameraObject>

    <EnvObject t0="3.42549" t1="-3.42134" t2="2.37398" s0="6.46988" s1="1" s2="6.38524" q0="0" q1="0" q2="0" r0="1" r1="0" r2="0" r3="0" r4="0" r5="1" r6="0" r7="0" r8="0" r9="0" r10="1" r11="0" r12="0" r13="0" r14="0" r15="1" id="1" color_r="0" color_g="0" color_b="0" type_file="Data/Objects/primitives/edged_cube.xml">
        <parameters />
    </EnvObject>

</ActorObjects>

Unimportant or Deprecated Tags

Since Overgrowth has been in development for such a long time, some of these tags are nothing but remnants of old systems that have been replaced with something else during development. For instance, levels used to store their names in their xml file, but now that's stored in the mod file instead.

This is a list of those tags

<Type> - This value is always equal to "saved".

<Name> - Is automatically set to the name of the file without the file ending. Is not used by the engine.

<Description> - Map description. Is not used by the engine.

<AmbientSounds> - Ambient sounds used to be global for a level, but now you should use "Load → Sounds → Ambient sound hotspot" hotspots instead so you can have different ambient sounds in different parts of the level.

<OutOfDate> - Specifies if the nav mesh is out of date, not used anymore as we now use the hash of the level to determine if the nav mesh is out of date.

<Script> - Specifies a script file that runs for this level, this is not used in official levels anymore. We recommend using a hotspot for this type of functionality instead.

<Shader> - Shader that is used in this map. This value should be set to "post", unless you plan to use a custom shader in your level. Since Overgrowth now uses an uber shader you should use the Custom Shader script parameter in most cases instead.

Terrain

To change the terrain in your level you need to manually edit the level XML file. Terrains are either generated from several textures (a height map, color map, weight map and one or more detail maps), or you can specify a specific object to use as terrain. Using a specific object is useful if you want to create holes in an existing terrain for your level, or if you have a specific model you want to use instead of a heightmap.

You can also have no terrain at all. So if the player won't be able to access the terrain, you can decrease loading times and improve performance in your level by removing the terrain tag entirely.

Here is an example of a terrain tag, taken from the 02_Slaver_Camp.xml level from the Overgrowth story:

<Terrain>
    <Heightmap>Data/Textures/Terrain/patchy_highlands/patchy_highlands_hm.png</Heightmap>
    <ShaderExtra></ShaderExtra>
    <DetailMap></DetailMap>
    <ColorMap>Data/Textures/Terrain/03_Villagers_vs_Slavers/03_Villagers_vs_Slavers_c.png</ColorMap>
    <WeightMap>Data/Textures/Terrain/03_Villagers_vs_Slavers/03_Villagers_vs_Slavers_weights.png</WeightMap>
    <DetailMaps>
        <DetailMap colorpath="Data/Textures/Terrain/DetailTextures/lichen_stone.tga" normalpath="Data/Textures/Terrain/DetailTextures/lichen_stone_n.tga" materialpath="Data/Materials/rock.xml" />
        <DetailMap colorpath="Data/Textures/Terrain/DetailTextures/dirt_rocks.tga" normalpath="Data/Textures/Terrain/DetailTextures/dirt_rocks_normal.tga" materialpath="Data/Materials/dirtyrock.xml" />
        <DetailMap colorpath="Data/Textures/Terrain/DetailTextures/grass.tga" normalpath="Data/Textures/Terrain/DetailTextures/grass_normal.png" materialpath="Data/Materials/grass.xml" />
        <DetailMap colorpath="Data/Textures/Terrain/DetailTextures/dirt_grass.tga" normalpath="Data/Textures/Terrain/DetailTextures/dirt_grass_normal.tga" materialpath="Data/Materials/dirt.xml" />
    </DetailMaps>
    <DetailObjects>
        <DetailObject obj_path="Data/Objects/Plants/Groundcover/Grass/WildGrass.xml" weight_path="Data/Textures/Terrain/03_Villagers_vs_Slavers/03_Villagers_vs_Slavers_wildgrass.png" normal_conform="0.1" density="10" min_embed="0" max_embed="0" min_scale="1" max_scale="1.3" view_distance="30" jitter_degrees="0" overbright="0" tint_weight="1" />
        <DetailObject obj_path="Data/Objects/Plants/Groundcover/Grass/tall_wild_grass.xml" weight_path="Data/Textures/Terrain/03_Villagers_vs_Slavers/03_Villagers_vs_Slavers_tallgrass.png" normal_conform="0.3" density="7" min_embed="0" max_embed="0" min_scale="0.7" max_scale="1.2" view_distance="30" jitter_degrees="15" overbright="0" tint_weight="1" />
        <DetailObject obj_path="Data/Objects/Plants/Groundcover/Grass/brushgrass_clump.xml" weight_path="Data/Textures/Terrain/03_Villagers_vs_Slavers/03_Villagers_vs_Slavers_grass4.png" normal_conform="0.3" density="12" min_embed="0" max_embed="0" min_scale="0.7" max_scale="1.2" view_distance="30" jitter_degrees="15" overbright="0" tint_weight="0.4" />
        <DetailObject obj_path="Data/Objects/Environment/Rocks/lichen_rock_c.xml" weight_path="Data/Textures/Terrain/03_Villagers_vs_Slavers/03_Villagers_vs_Slavers_grass3.png" normal_conform="0.9" density="0.2" min_embed="0" max_embed="0.4" min_scale="0.3" max_scale="0.8" view_distance="15" jitter_degrees="10" overbright="0" tint_weight="0.35" />
        <DetailObject obj_path="Data/Objects/Environment/Rocks/lichen_rock_e.xml" weight_path="Data/Textures/Terrain/03_Villagers_vs_Slavers/03_Villagers_vs_Slavers_wildgrass.png" normal_conform="0.9" density="0.1" min_embed="0" max_embed="0.4" min_scale="0.3" max_scale="0.7" view_distance="15" jitter_degrees="10" overbright="0" tint_weight="0.35" />
        <DetailObject obj_path="Data/Objects/Plants/Groundcover/Groundcover1.xml" weight_path="Data/Textures/Terrain/03_Villagers_vs_Slavers/03_Villagers_vs_Slavers_grass3.png" normal_conform="0.9" density="7" min_embed="0" max_embed="0.4" min_scale="1.2" max_scale="2" view_distance="15" jitter_degrees="5" overbright="0" tint_weight="0.5" />
    </DetailObjects>
</Terrain>

<HeightMap> - A 16-bit grayscale image in the png format, with the value of each pixel corresponding to an elevation in the terrain.

<ShaderExtra> - Can be set to #SNOWY to add snow to the terrain, or #HEIGHT_BLEND for more pleasing transitions between terrain textures TODO: What do these do more exactly?

<DetailMap> - Deprecated, does nothing.

<ColorMap> - A .tga file which maps the color of each pixel to the color of a point on the terrain. This is used for rough texture, and can be used for example to make valleys green and mountain peaks grey.

<WeightMap> - A .tga in which colors (RGB + Black) are used to define which DetailMap to use on which part of the terrain.

<DetailMaps> - DetailMaps are used to tile textures across the terrain for more detail up close. Keep in mind that the color is tinted by the <ColorMap> texture.

Example:

<DetailMap
  colorpath="Data/Textures/Terrain/DetailTextures/grass.tga"
  normalpath="Data/Textures/Terrain/DetailTextures/grass_normal.png"
  materialpath="Data/Materials/grass.xml"
/>

The above example will make the surface look like grass up close, and it will make grassy sounds when you step on it. You can find a list of all material types in ../Overgrowth/Data/Materials/.

<DetailObjects> - Can be used to automatically spread smaller objects across the terrain, such as grass and rocks.

Example:

<DetailObject
  obj_path="Data/GrassTest/grass_square.xml"
  weight_path="Data/Textures/Terrain/cliffs_uplifting/cliffs_uplifting3_grass.png"
  normal_conform="0.9"
  density="3"
  min_embed="-0.2"
  max_embed="0"
  min_scale="4"
  max_scale="6.8"
  view_distance="10"
  jitter_degrees="10"
  overbright="0"
  tint_weight="0.5"
/>
Attribute Description
obj_path Path to the object you want to use
weight_path Path to a black and white image that the engine uses to know where on the terrain the object should be distributed
normal_conform How closely the object should follow its underlying terrain's normal, between 0 and 1
density How close to each other the objects should be created
min/max_embed The minimum/maximum random distance the objects should be offset vertically
min/max_scale The minimum/maximum random scale of the objects
view_distance How far away the objects start fading in
jitter_degrees How many degrees of random rotation that will be applied to the objects
overbright Higher value makes the object brighter
tint_weight How much of the underlying terrain color should be applied to the object

Sky

The sun placement, intensity and color can be changed in the sun editor. The sky dome texture can also be changed in the editor via the "Set Sky Texture..." button in the edit menu. Below is a quick explanation of what each tag in the <Sky> tag does.

<DomeTexture> - Filepath to the texture of the skydome, some already exist in Data/Textures/skies/.

<SunAngularRad> - The lower this is, the darker the shadows are.

<SunColorAngle> - Where the color dot is in the sun editor, tints the color of the sunlight.

<RayToSun/> - The 3 attributes in this tag describes the location of the sun in the sky. Use the sun editor to change it.

Other

<NavMeshParameters> - The settings when generating the navigation mesh. These are most easily changed in the editor under the Nav Mesh Menu. See the Nav Mesh Menu page to see what each setting does.

<ActorObjects> - This tag contains all the objects in the level. Everything from characters and models to hotspots and groups.

<RecentItems> - This is a list of objects that have been used in the level. These objects can be found in the editor under "Load → Open Recent..." for easy access.