Difference between revisions of "Overgrowth Levels"

From Wolfire Games Wiki
Jump to: navigation, search
(Header)
(WIP of rewrite.)
Line 1: Line 1:
<!-- Intro taken from this blog post: http://blog.wolfire.com/2010/12/Overgrowth-graphics-overview -->
+
'''NOTE: This page is a work in progress.'''
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.  
 
  
 +
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.
  
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
+
== 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.
  
 
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>
  
<Terrain>
+
<LevelScriptParameters>
     <Heightmap>[path here]</Heightmap>
+
     <parameter name="Achievements" type="string" val="flawless, no_injuries, no_kills" />
    <ColorMap>[path here]</ColorMap>
+
     <parameter name="HDR Black point" type="string" val="0.005" />
    <WeightMap>[path here]</WeightMap>
+
    <parameter name="HDR Bloom multiplier" type="string" val="1" />
     <DetailMaps>
+
    <parameter name="HDR White point" type="string" val="0.971" />
        <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]" />
+
    <parameter name="Level Boundaries" type="string" val="1" />
        <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]" />
+
     <parameter name="Objectives" type="string" val="destroy_all" />
        <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]" />
+
     <parameter name="Saturation" type="float" val="1" />
        <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]" />
+
    <parameter name="Sky Brightness" type="string" val="1" />
     </DetailMaps>
+
    <parameter name="Sky Rotation" type="string" val="-62" />
     <DetailObjects> //for grass and stuff
+
    <parameter name="Sky Tint" type="string" val="255, 255, 255" />
        <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" />
+
</LevelScriptParameters>
    </DetailObjects>
 
</Terrain>
 
  
 
<Sky>
 
<Sky>
     <DomeTexture>Data/Textures/skies/FILE.tga</DomeTexture>
+
     <DomeTexture>Data/Textures/skies/CloudySunset.tga</DomeTexture>
     <SunAngularRad>0.123456</SunAngularRad>
+
     <SunAngularRad>0.153056</SunAngularRad>
     <SunColorAngle>6.8534</SunColorAngle>
+
     <SunColorAngle>353.589</SunColorAngle>
     <RayToSun r0="0.123456" r1="0.123456" r2="0.123456" />
+
     <RayToSun r0="0.843168" r1="0.508385" r2="0.174962" />
    <ExtraAO>0</ExtraAO>
 
 
</Sky>
 
</Sky>
  
<Objectives>[objective here]</Objectives>
+
<ActorObjects>
          //possible objectives: reach_a_trigger, reach_a_trigger_with_no_pursuers, collect
+
 
 +
    <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>
 
</pre>
  
==Header==
+
== Unimportant or Deprecated Tags ==
'''<Type>''' - This value should always be equal to "''saved''"
+
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.
 +
 
 +
== Terrain ==
 +
Terrains in Overgrowth are controlled entirely by manually editing XML files. They are either generated from 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.
  
'''<Name>''' - This tag is currently used in some fashion related to campaign progression, as of OG version 1.0.
+
You can also have no terrain at all in your level. If the player won't be able to access the terrain, you can decrease loading times and improve performance for your level by removing the terrain tag entirely.
  
'''<Description>''' - Map description. This tag does not appear to be used for any purpose as of OG version 1.0.
+
Here is an example of a terrain tag, taken from the '''02_Slaver_Camp.xml''' level from the Overgrowth story:
  
'''<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.
+
<pre>
 +
<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>
 +
</pre>
  
==Terrain==
 
 
'''<HeightMap>''' - A 16-bit grayscale image in the png format, with the value of each pixel corresponding to an elevation in the 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>''' - '''TODO:''' Write this.
 +
 +
'''<DetailMap>''' - '''TODO:''' Write this.
  
 
'''<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.
 
'''<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.
Line 60: Line 102:
 
'''<WeightMap>''' - A .tga in which colors (RGB + Black) are used to define which DetailMap to use on which part of the terrain.
 
'''<WeightMap>''' - A .tga in which colors (RGB + Black) are used to define which DetailMap to use on which part of the terrain.
  
'''<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.
+
'''<DetailMaps>''' - 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.
  
==Sky==
+
'''<DetailObjects>''' - '''TODO:''' Write this.
 +
 
 +
== Sky ==
 
'''<DomeTexture>''' - Filepath to the texture of the skydome. Some already exist in Data/Textures/skies/
 
'''<DomeTexture>''' - Filepath to the texture of the skydome. Some already exist in Data/Textures/skies/
  
'''<SunAngularRad>''' - Size of Sun in Radians?
+
'''<SunAngularRad>''' - Angular size of the sun.
  
 
'''<SunColorAngle>''' - ??
 
'''<SunColorAngle>''' - ??
  
 
'''<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?''
 
'''<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?''
 +
 +
== Other ==
 +
'''<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.

Revision as of 14:58, 30 November 2017

NOTE: This page is a work in progress.

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.

Terrain

Terrains in Overgrowth are controlled entirely by manually editing XML files. They are either generated from 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 in your level. If the player won't be able to access the terrain, you can decrease loading times and improve performance for 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> - TODO: Write this.

<DetailMap> - TODO: Write this.

<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 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.

<DetailObjects> - TODO: Write this.

Sky

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

<SunAngularRad> - Angular size of the sun.

<SunColorAngle> - ??

<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?

Other

<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.