Jump to content
james2464

How to Customize Terrain Dust, Sound and Ocean

Recommended Posts

Hello everyone,

I thought I would share a few things that may be unknown to some as I know new terrain developers and perhaps future ones could find this useful to polish off their terrains.

Dust Effects

You need to assign the dust effects to each mask colour for Man, Car, Tank and Air.

For reference here is the layers.cfg which lists each surface I am using:

class legend
{
picture="****\****_kz\source\maplegend.png";
class colors
{
	kz_sanddesert[] = {{255,0,255}};
	kz_deepdesert[] = {{0,0,255}};
	kz_deepgrass[] = {{0,255,255}};
	kz_lightgrass[] = {{0,255,0}};
	kz_lightdesert[] = {{255,255,0}};
};
};

Here is the CfgVehicles.hpp that needs to be included into the main terrain config as seen below - you will see here each unique surface is listed next to the most appropriate effect for each type of vehicle and the corresponding dust effect of which there are varying types:

#include "cfgVehicles.hpp"

class CfgVehicles
{
class All;
class AllVehicles : All {};
class Land : AllVehicles {};
class LandVehicle : Land {};

class car : LandVehicle
{
	rightDustEffects[] = {{"KzLightGrass","RDustEffects"},{ "KzLightGrass","RGrassDryEffects" },{ "KzLightGrass","RDirtEffects" },{ "KzDeepGrass","RDustEffects" },{ "KzDeepGrass","RGrassEffects" },{ "KzDeepGrass","RDirtEffects" },{ "KzLightDesert","RDirtEffects" },{ "KzLightDesert","RDustEffects" },{ "KzLightDesert","RStonesEffects" },{ "KzSandDesert","RDustEffects" },{ "KzSandDesert","RSandEffects" },{ "KzSandDesert","RDirtEffects" },{ "KzSandDesert","RStonesEffects" },{ "KzDeepDesert","RDustEffects" },{ "KzDeepDesert","RSandEffects" },{ "KzDeepDesert","RDirtEffects" },{ "KzDeepDesert","RStonesEffects"},{ "KzDirtRoad","RDustEffects" },{ "KzDirtRoad","RSandEffects" },{ "KzDirtRoad","RDirtEffects" },{ "KzDirtRoad","RStonesEffects"},{ "KzA7MSR","RDustEffects" },{ "KzA7MSR","RSandEffects" },{ "KzA7MSR","RDirtEffects" },{ "KzA7MSR","RStonesEffects"}};
	leftDustEffects[] = {{"KzLightGrass","LDustEffects"},{ "KzLightGrass","LGrassDryEffects" },{ "KzLightGrass","LDirtEffects" },{ "KzDeepGrass","LDustEffects" },{ "KzDeepGrass","LGrassEffects" },{ "KzDeepGrass","LDirtEffects" },{ "KzLightDesert","LDirtEffects" },{ "KzLightDesert","LDustEffects" },{ "KzLightDesert","LStonesEffects" },{ "KzSandDesert","LDustEffects" },{ "KzSandDesert","LSandEffects" },{ "KzSandDesert","LDirtEffects" },{ "KzSandDesert","LStonesEffects"},{ "KzDeepDesert","LDustEffects" },{ "KzDeepDesert","LSandEffects" },{ "KzDeepDesert","LDirtEffects" },{ "KzDeepDesert","LStonesEffects"},{ "KzDirtRoad","LDustEffects" },{ "KzDirtRoad","LSandEffects" },{ "KzDirtRoad","LDirtEffects" },{ "KzDirtRoad","LStonesEffects"},{ "KzA7MSR","LDustEffects" },{ "KzA7MSR","LSandEffects" },{ "KzA7MSR","LDirtEffects" },{ "KzA7MSR","LStonesEffects"}};
};
class tank: LandVehicle
{
	rightDustEffects[] = {{ "KzLightGrass","RDustEffects" },{ "KzLightGrass","RDirtEffectsBig" },{ "KzLightGrass","RStonesEffectsBig" },{ "KzLightGrass","RGrassEffectsDryBig" },{ "KzLightDesert","RDustEffects" },{ "KzLightDesert","RDirtEffectsBig" },{ "KzLightDesert","RStonesEffectsBig" },{ "KzDeepGrass","RDustEffects" },{ "KzDeepGrass","RGrassEffectsBig" },{ "KzDeepGrass","RDirtEffectsBig" },{ "KzDeepGrass","RStonesEffectsBig" },{ "KzSandDesert","RDustEffects" },{ "KzSandDesert","RDirtEffectsBig" },{ "KzSandDesert","RStonesEffectsBig" },{ "KzDeepDesert","LDustEffects" },{ "KzDeepDesert","LDirtEffectsBig" },{ "KzDeepDesert","LStonesEffectsBig"},{ "KzDirtRoad","RStonesEffectsBig" },{ "KzDirtRoad","LDustEffects" },{ "KzDirtRoad","LDirtEffectsBig" },{ "KzDirtRoad","LStonesEffectsBig"},{ "KzA7MSR","RStonesEffectsBig" },{ "KzA7MSR","LDustEffects" },{ "KzA7MSR","LDirtEffectsBig" },{ "KzA7MSR","LStonesEffectsBig"}};
	leftDustEffects[] = {{ "KzLightGrass","LDustEffects" },{ "KzLightGrass","LDirtEffectsBig" },{ "KzLightGrass","LStonesEffectsBig" },{ "KzLightGrass","LGrassEffectsDryBig" },{ "KzLightDesert","LDustEffects" },{ "KzLightDesert","LDirtEffectsBig" },{ "KzLightDesert","LStonesEffectsBig" },{ "KzDeepGrass","LDustEffects" },{ "KzDeepGrass","LGrassEffectsBig" },{ "KzDeepGrass","LDirtEffectsBig" },{ "KzDeepGrass","LStonesEffectsBig" },{ "KzSandDesert","LDustEffects" },{ "KzSandDesert","LDirtEffectsBig" },{ "KzSandDesert","LStonesEffectsBig" },{ "KzDeepDesert","LDustEffects" },{ "KzDeepDesert","LDirtEffectsBig" },{ "KzDeepDesert","LStonesEffectsBig"},{ "KzDirtRoad","LStonesEffectsBig" },{ "KzDirtRoad","LDustEffects" },{ "KzDirtRoad","LDirtEffectsBig" },{ "KzDirtRoad","LStonesEffectsBig"},{ "KzA7MSR","LStonesEffectsBig" },{ "KzA7MSR","LDustEffects" },{ "KzA7MSR","LDirtEffectsBig" },{ "KzA7MSR","LStonesEffectsBig"}};
};
class Air: AllVehicles
{
	rightDustEffects[] = {{"KzLightGrass","RDustEffectsAir"},{ "KzLightGrass","RGrassDryEffects" },{ "KzLightGrass","RDirtEffects" },{ "KzDeepGrass","RDustEffectsAir" },{ "KzDeepGrass","RGrassEffects" },{ "KzDeepGrass","RDirtEffects" },{ "KzLightDesert","RDirtEffects" },{ "KzLightDesert","RDustEffectsAir" },{ "KzLightDesert","RStonesEffects" },{ "KzSandDesert","RDustEffectsAir" },{ "KzSandDesert","RSandEffects" },{ "KzSandDesert","RDirtEffects" },{ "KzSandDesert","RStonesEffects" },{ "KzDeepDesert","RDustEffectsAir" },{ "KzDeepDesert","RSandEffects" },{ "KzDeepDesert","RDirtEffects" },{ "KzDeepDesert","RStonesEffects"},{ "KzDirtRoad","RDustEffectsAir" },{ "KzDirtRoad","RSandEffects" },{ "KzDirtRoad","RDirtEffects" },{ "KzDirtRoad","RStonesEffects"},{ "KzA7MSR","RDustEffectsAir" },{ "KzA7MSR","RSandEffects" },{ "KzA7MSR","RDirtEffects" },{ "KzA7MSR","RStonesEffects"}};
	leftDustEffects[] = {{"KzLightGrass","LDustEffectsAir"},{ "KzLightGrass","LGrassDryEffects" },{ "KzLightGrass","LDirtEffects" },{ "KzDeepGrass","LDustEffectsAir" },{ "KzDeepGrass","LGrassEffects" },{ "KzDeepGrass","LDirtEffects" },{ "KzLightDesert","LDirtEffects" },{ "KzLightDesert","LDustEffectsAir" },{ "KzLightDesert","LStonesEffects" },{ "KzSandDesert","LDustEffectsAir" },{ "KzSandDesert","LSandEffects" },{ "KzSandDesert","LDirtEffects" },{ "KzSandDesert","LStonesEffects"},{ "KzDeepDesert","LDustEffectsAir" },{ "KzDeepDesert","LSandEffects" },{ "KzDeepDesert","LDirtEffects" },{ "KzDeepDesert","LStonesEffects"},{ "KzDirtRoad","LDustEffectsAir" },{ "KzDirtRoad","LSandEffects" },{ "KzDirtRoad","LDirtEffects" },{ "KzDirtRoad","LStonesEffects"},{ "KzA7MSR","LDustEffectsAir" },{ "KzA7MSR","LSandEffects" },{ "KzA7MSR","LDirtEffects" },{ "KzA7MSR","LStonesEffects"}};
};
class Man: Land
{
	rightDustEffects[] = {{ "KzLightGrass","RDustEffectsMan" },{ "KzDeepGrass","RDustEffectsMan" },{ "KzLightDesert","RDustEffectsMan" },{ "KzDeepDesert","RDustEffectsMan" },{ "KzSandDesert","RDustEffectsMan"},{ "KzDirtRoad","RDustEffectsMan" },{ "KzA7MSR","RDustEffectsMan" }};
	leftDustEffects[] = {{ "KzLightGrass","LDustEffectsMan" },{ "KzDeepGrass","LDustEffectsMan" },{ "KzLightDesert","LDustEffectsMan" },{ "KzDeepDesert","LDustEffectsMan" },{ "KzSandDesert","LDustEffectsMan" },{ "KzDirtRoad","LDustEffectsMan" },{ "KzA7MSR","LDustEffectsMan" }};
};
};

There is one particular effect that is very cool and I think may be missing from the majority if not the whole of Altis and Stratis (not sure) but here is one of them:

http://i.imgur.com/6b4q71d.png

http://i.imgur.com/eBzRfav.png

Ocean Effects

Changing the appearance of the ocean is not as simple as changing an array of RGB values in the main terrain config. You must photoshop 7 textures to change how global light (the sky and sun) reflects colour across the whole surface of ocean.

Before that you need to setup new materials.

Below is a small section of the main config.cpp and the cfgMaterials.hpp that must be included into the main terrain config - here you define part of the reflection which colour's roughly half the surface of the ocean at only a closer distance otherwise the global light takes over from greater distances.

#include "cfgMaterials.hpp"

class Sea
{
seaTexture = "a3\data_f\seatexture_co.paa";
[color="#FF0000"]seaMaterial = "#KZ_water";
shoreMaterial = "#KZ_shore";
shoreFoamMaterial = "#KZ_shorefoam";[/color]
shoreWetMaterial = "#shorewet";
WaterMapScale = 20;
WaterGrid = 50;
MaxTide = 0;
MaxWave = 0.10;
SeaWaveXScale = "2.0/50";
SeaWaveZScale = "1.0/50";
SeaWaveHScale = 1.0;
SeaWaveXDuration = 5000;
SeaWaveZDuration = 10000;
};
class Underwater
{
noWaterFog = -0.001;
fullWaterFog = 0.001;
deepWaterFog = 200;
waterFogDistanceNear = 2;
waterFogDistance = 8;
[color="#FF0000"][color="#FF0000"]waterColor[] = {0.419,0.341,0.172};
deepWaterColor[] = {0.0,0.001,0.009};
surfaceColor[] = {0.643,0.557,0.369};
deepSurfaceColor[] = {0.0,0.001,0.009};[/color][/color]
};

The material inheritance below defines the intensity of the colours you've chosen above - please note this only changes part of the ocean colour but needs to blend with your Photoshop'd textures.

class CfgMaterials
{
class Water;	
class Shore;
class ShoreFoam;

class KZ_water : Water
{
	ambient[] = {0.039,0.027,0.016,0.3};
	diffuse[] = {0.411,0.470,0.325,0.3};
};	
class KZ_shore : Shore
{
	ambient[] = {0.039,0.027,0.016,0.3};
	diffuse[] = {0.643,0.557,0.369,1.0};
};
class KZ_shoreFoam : ShoreFoam
{
	ambient[] = {0.039,0.027,0.016,0.3};
	diffuse[] = {0.643,0.557,0.369,1.0};
};
};

Now you need to photoshop the textures below and either have river or ocean as the folder name depending on the geography of your terrain.

See the textures in a3\map_stratis\data for reference.

As you can tell each texture defines the colour of the ocean at different points of weather, ever wondered how the engine made the ocean grey when it's overcast? This is how.

class Overcast: Overcast
{
class Weather1: Weather1
{
	skyR = "****\****_kz\data\river\sky_veryclear_lco.paa";
};
class Weather7: Weather1
{
	skyR = "****\****_kz\data\river\sky_clear_lco.paa";
};
class Weather2: Weather2
{
	skyR = "****\****_kz\data\river\sky_almostclear_lco.paa";
};
class Weather3: Weather3
{
	skyR = "****\****_kz\data\river\sky_semicloudy_lco.paa";
};
class Weather4: Weather4
{
	skyR = "****\****_kz\data\river\sky_cloudy_lco.paa";
};
class Weather5: Weather5
{
	skyR = "****\****_kz\data\river\sky_mostlycloudy_lco.paa";
};
class Weather6: Weather6
{
	skyR = "****\****_kz\data\river\sky_overcast_lco.paa";
};
};

Example of settings above: http://i.imgur.com/lL3JAfq.png

Sound Effects

I won't be covering the whole spectrum of environment sounds but a small sound effect that you may miss initially and think is a bug.

Below you will define the roads as surfaces because they are essentially textures layered over the terrain. This will activate infantry and vehicle sounds for road surfaces in the engine.

class CfgSurfaces
{
class Default {};
class GdtDirt;
class GdtSoil;
class GdtGrassDry;
class GdtGrassGreen;
class GdtDesert;
class GdtConcrete;

class KzLightGrass : GdtGrassDry
{
	files = "kz_lightgrass_*";
	character = "KzLightGrassClutter";
	impact = "hitGroundSoft";
};
class KzDeepGrass : GdtGrassGreen
{
	files = "kz_deepgrass_*";
	character = "KzDeepGrassClutter";
};
class KzLightDesert : GdtSoil
{
	files = "kz_lightdesert_*";
	character = "KzLightDesertClutter";
	impact = "hitGroundSoft";
};
class KzDeepDesert : GdtDirt
{
	files = "kz_deepdesert_*";
	character = "KzDeepDesertClutter";
	impact = "hitGroundSoft";
};
class KzSandDesert : GdtDesert
{
	files = "kz_sanddesert_*";
	impact = "hitGroundSoft";
};
class KzDirtRoad : [color="#FF0000"]GdtDirt[/color]
{
	files = "[color="#FF0000"]surf_roadrough_*[/color]";
};
class KzA7MSR : [color="#FF0000"]GdtConcrete[/color]
{
	files = "[color="#FF0000"]surf_roadA7_*[/color]";
};
};

The roads inherit from Altis surfaces because BIS is likely to keep their parameters up-to-date.

The file entries above should correspond to that of the actual file name and RoadsLib.cfg entries below.

class RoadTypesLibrary
{
class Road0001 //A7 MSR Highway
{ 
	width = 10;
	mainStrTex      	= "****\****_roads\Roads\data\[color="#FF0000"]surf_roadA7_[/color]asf3clear_ca.paa";
	mainTerTex      	= "****\****_roads\Roads\data\[color="#FF0000"]surf_roadA7_[/color]asf3clear_end_ca.paa";
	mainMat         	= "****\****_roads\Roads\data\[color="#FF0000"]surf_roadA7_[/color]asf3clear.rvmat";
	map             	= "main road";
	AIpathOffset 	= 3;
};	
class Road0002 //Village path desert
{ 
	width = 2.5;
	mainStrTex      	= "****\****_roads\Paths\data\[color="#FF0000"]surf_roadrough_[/color]pathtak_ca.paa";
	mainTerTex      	= "****\****_roads\Paths\data\[color="#FF0000"]surf_roadrough_[/color]pathtak_end_ca.paa";
	mainMat         	= "****\****_roads\Paths\data\[color="#FF0000"]surf_roadrough_[/color]pathtak.rvmat";
	map             	= "track";
	AIpathOffset 	= 3;
};

...
};

Now the highway will sound like driving or walking on concrete and the dirt tracks respectively. Otherwise without this there is 0 sound and you will be very confused.

Cheers.

Edited by James2464
  • Like 7

Share this post


Link to post
Share on other sites

Thank you for sharing, changing the water color is one of the things I was planning to do but I was never sure how to exactly.

Share this post


Link to post
Share on other sites

is there a way to change water colour for selected water ?

I.e the ocean would remain as its but the rivers I have I would like to change them , would that be possible do you think ?

Share this post


Link to post
Share on other sites
is there a way to change water colour for selected water ?

I.e the ocean would remain as its but the rivers I have I would like to change them , would that be possible do you think ?

To have the brownish rivers and a blue ocean isn't possible unfortunately but if you're very careful with your mixture of colour you could blend both waterways to find a middle ground.

Share this post


Link to post
Share on other sites

Firstly, great stuff thanks for sharing! How do i properly add the Overcast class to my terrains config? My terrain inherits from stratis and I cant just jam the Overcast class under my "terrain Class", I get missing inheritance class(es).

Edit: Ok figured it out by looking at the examples better.

Edited by Juhansson

Share this post


Link to post
Share on other sites

Updated CfgVehicles:

class CfgVehicles
{
class All;
class AllVehicles : All {};
class Land : AllVehicles {};
class LandVehicle : Land {};

class Car : LandVehicle
{
	rightDustEffects[] = 
	{
		{"KzLightDesert","RDustEffects"},{"KzLightDesert","RDirtEffects"},{"KzLightDesert","RStonesEffects"},{"KzLightDesert","RGrassDryEffects"},{"KzLightDesert","RGrassEffects"},
		{"KzLightGrass","RDustEffects"},{"KzLightGrass","RDirtEffects"},{"KzLightGrass","RStonesEffects"},{"KzLightGrass","RGrassDryEffects"},{"KzLightGrass","RGrassEffects"},
		{"KzDeepDesert","RDustEffects"},{"KzDeepDesert","RDirtEffects"},{"KzDeepDesert","RStonesEffects"},{"KzDeepDesert","RGrassDryEffects"},{"KzDeepDesert","RGrassEffects"},
		{"KzSandDesert","RDustEffects"},{"KzSandDesert","RDirtEffects"},{"KzSandDesert","RStonesEffects"},{"KzSandDesert","RGrassDryEffects"},
		{"KzDeepGrass","RDustEffects"},{"KzDeepGrass","RDirtEffects"},{"KzDeepGrass","RStonesEffects"},{"KzDeepGrass","RGrassDryEffects"},{"KzDeepGrass","RGrassEffects"},
		{"KzDirtRoad","RDustEffects"},{"KzDirtRoad","RDirtEffects"},{"KzDirtRoad","RStonesEffects"},{"KzDirtRoad","RGrassDryEffects"},
		{"KzA7MSR","RDustEffects"},{"KzA7MSR","RDirtEffects"},{"KzA7MSR","RStonesEffects"},{"KzA7MSR","RGrassDryEffects"}
	};
	leftDustEffects[] = 
	{
		{"KzLightDesert","LDustEffects"},{"KzLightDesert","LDirtEffects"},{"KzLightDesert","LStonesEffects"},{"KzLightDesert","LGrassDryEffects"},{"KzLightDesert","LGrassEffects"},
		{"KzLightGrass","LDustEffects"},{"KzLightGrass","LDirtEffects"},{"KzLightGrass","LStonesEffects"},{"KzLightGrass","LGrassDryEffects"},{"KzLightGrass","LGrassEffects"},
		{"KzDeepDesert","LDustEffects"},{"KzDeepDesert","LDirtEffects"},{"KzDeepDesert","LStonesEffects"},{"KzDeepDesert","LGrassDryEffects"},{"KzDeepDesert","LGrassEffects"},
		{"KzSandDesert","LDustEffects"},{"KzSandDesert","LDirtEffects"},{"KzSandDesert","LStonesEffects"},{"KzSandDesert","LGrassDryEffects"},
		{"KzDeepGrass","LDustEffects"},{"KzDeepGrass","LDirtEffects"},{"KzDeepGrass","LStonesEffects"},{"KzDeepGrass","LGrassDryEffects"},{"KzDeepGrass","LGrassEffects"},
		{"KzDirtRoad","LDustEffects"},{"KzDirtRoad","LDirtEffects"},{"KzDirtRoad","LStonesEffects"},{"KzDirtRoad","LGrassDryEffects"},
		{"KzA7MSR","LDustEffects"},{"KzA7MSR","LDirtEffects"},{"KzA7MSR","LStonesEffects"},{"KzA7MSR","LGrassDryEffects"}	
	};
};
class Tank : LandVehicle
{
	rightDustEffects[] = 
	{
		{"KzLightDesert","RStonesEffectsBig"},{"KzLightDesert","RDirtEffectsBig"},{"KzLightDesert","RGrassEffectsDryBig"},{"KzLightDesert","RGrassEffectsBig"},{"KzLightDesert","RDustEffects"},
		{"KzLightGrass","RStonesEffectsBig"},{"KzLightGrass","RDirtEffectsBig"},{"KzLightGrass","RGrassEffectsDryBig"},{"KzLightGrass","RGrassEffectsBig"},{"KzLightGrass","RDustEffects"},
		{"KzDeepDesert","RStonesEffectsBig"},{"KzDeepDesert","RDirtEffectsBig"},{"KzDeepDesert","RGrassEffectsDryBig"},{"KzDeepDesert","RGrassEffectsBig"},{"KzDeepDesert","RDustEffects"},
		{"KzSandDesert","RStonesEffectsBig"},{"KzSandDesert","RDirtEffectsBig"},{"KzSandDesert","RGrassEffectsDryBig"},{"KzSandDesert","RDustEffects"},
		{"KzDeepGrass","RStonesEffectsBig"},{"KzDeepGrass","RDirtEffectsBig"},{"KzDeepGrass","RGrassEffectsDryBig"},{"KzDeepGrass","RGrassEffectsBig"},{"KzDeepGrass","RDustEffects"},
		{"KzDirtRoad","RStonesEffectsBig"},{"KzDirtRoad","RDirtEffectsBig"},{"KzDirtRoad","RGrassEffectsDryBig"},{"KzDirtRoad","RDustEffects"},
		{"KzA7MSR","RStonesEffectsBig"},{"KzA7MSR","RDirtEffectsBig"},{"KzA7MSR","RGrassEffectsDryBig"},{"KzA7MSR","RDustEffects"}
	};
	leftDustEffects[] = 
	{
		{"KzLightDesert","LStonesEffectsBig"},{"KzLightDesert","LDirtEffectsBig"},{"KzLightDesert","LGrassEffectsDryBig"},{"KzLightDesert","LGrassEffectsBig"},{"KzLightDesert","LDustEffects"},
		{"KzLightGrass","LStonesEffectsBig"},{"KzLightGrass","LDirtEffectsBig"},{"KzLightGrass","LGrassEffectsDryBig"},{"KzLightGrass","LGrassEffectsBig"},{"KzLightGrass","LDustEffects"},
		{"KzDeepDesert","LStonesEffectsBig"},{"KzDeepDesert","LDirtEffectsBig"},{"KzDeepDesert","LGrassEffectsDryBig"},{"KzDeepDesert","LGrassEffectsBig"},{"KzDeepDesert","LDustEffects"},
		{"KzSandDesert","LStonesEffectsBig"},{"KzSandDesert","LDirtEffectsBig"},{"KzSandDesert","LGrassEffectsDryBig"},{"KzSandDesert","LDustEffects"},
		{"KzDeepGrass","LStonesEffectsBig"},{"KzDeepGrass","LDirtEffectsBig"},{"KzDeepGrass","LGrassEffectsDryBig"},{"KzDeepGrass","LGrassEffectsBig"},{"KzDeepGrass","LDustEffects"},
		{"KzDirtRoad","LStonesEffectsBig"},{"KzDirtRoad","LDirtEffectsBig"},{"KzDirtRoad","LGrassEffectsDryBig"},{"KzDirtRoad","LDustEffects"},
		{"KzA7MSR","LStonesEffectsBig"},{"KzA7MSR","LDirtEffectsBig"},{"KzA7MSR","LGrassEffectsDryBig"},{"KzA7MSR","LDustEffects"}
	};	
};
class Air : AllVehicles
{
	rightDustEffects[] = 
	{
		{"KzLightDesert","RDustEffectsAir"},{"KzLightDesert","RSandEffects"},{"KzLightDesert","RGrassEffects"},{"KzLightDesert","RDirtEffects"},{"KzLightDesert","RStonesEffects"},{"KzLightDesert","RGrassDryEffects"},
		{"KzLightGrass","RDustEffectsAir"},{"KzLightGrass","RSandEffects"},{"KzLightGrass","RGrassEffects"},{"KzLightGrass","RDirtEffects"},{"KzLightGrass","RStonesEffects"},{"KzLightGrass","RGrassDryEffects"},
		{"KzDeepDesert","RDustEffectsAir"},{"KzDeepDesert","RSandEffects"},{"KzDeepDesert","RGrassEffects"},{"KzDeepDesert","RDirtEffects"},{"KzDeepDesert","RStonesEffects"},{"KzDeepDesert","RGrassDryEffects"},
		{"KzSandDesert","RDustEffectsAir"},{"KzSandDesert","RSandEffects"},{"KzSandDesert","RDirtEffects"},{"KzSandDesert","RStonesEffects"},{"KzSandDesert","RGrassDryEffects"},
		{"KzDeepGrass","RDustEffectsAir"},{"KzDeepGrass","RSandEffects"},{"KzDeepGrass","RGrassEffects"},{"KzDeepGrass","RDirtEffects"},{"KzDeepGrass","RStonesEffects"},{"KzDeepGrass","RGrassDryEffects"},
		{"KzDirtRoad","RDustEffectsAir"},{"KzDirtRoad","RSandEffects"},{"KzDirtRoad","RDirtEffects"},{"KzDirtRoad","RStonesEffects"},{"KzDirtRoad","RGrassDryEffects"},
		{"KzA7MSR","RDustEffectsAir"},{"KzA7MSR","RSandEffects"},{"KzA7MSR","RGrassEffects"},{"KzA7MSR","RDirtEffects"},{"KzA7MSR","RStonesEffects"},{"KzA7MSR","RGrassDryEffects"}
	};
	leftDustEffects[] = 
	{
		{"KzLightDesert","LDustEffectsAir"},{"KzLightDesert","LSandEffects"},{"KzLightDesert","LGrassEffects"},{"KzLightDesert","LDirtEffects"},{"KzLightDesert","LStonesEffects"},{"KzLightDesert","LGrassDryEffects"},
		{"KzLightGrass","LDustEffectsAir"},{"KzLightGrass","LSandEffects"},{"KzLightGrass","LGrassEffects"},{"KzLightGrass","LDirtEffects"},{"KzLightGrass","LStonesEffects"},{"KzLightGrass","LGrassDryEffects"},
		{"KzDeepDesert","LDustEffectsAir"},{"KzDeepDesert","LSandEffects"},{"KzDeepDesert","LGrassEffects"},{"KzDeepDesert","LDirtEffects"},{"KzDeepDesert","LStonesEffects"},{"KzDeepDesert","LGrassDryEffects"},
		{"KzSandDesert","LDustEffectsAir"},{"KzSandDesert","LSandEffects"},{"KzSandDesert","LDirtEffects"},{"KzSandDesert","LStonesEffects"},{"KzSandDesert","LGrassDryEffects"},
		{"KzDeepGrass","LDustEffectsAir"},{"KzDeepGrass","LSandEffects"},{"KzDeepGrass","LGrassEffects"},{"KzDeepGrass","LDirtEffects"},{"KzDeepGrass","LStonesEffects"},{"KzDeepGrass","LGrassDryEffects"},
		{"KzDirtRoad","LDustEffectsAir"},{"KzDirtRoad","LSandEffects"},{"KzDirtRoad","LDirtEffects"},{"KzDirtRoad","LStonesEffects"},{"KzDirtRoad","LGrassDryEffects"},
		{"KzA7MSR","LDustEffectsAir"},{"KzA7MSR","LSandEffects"},{"KzA7MSR","LGrassEffects"},{"KzA7MSR","LDirtEffects"},{"KzA7MSR","LStonesEffects"},{"KzA7MSR","LGrassDryEffects"}
	};
};
class Man : Land
{
	rightDustEffects[] = {{"KzLightGrass","RDustEffectsMan"},{"KzLightDesert","RDustEffectsMan"},{"KzDeepDesert","RDustEffectsMan"},{"KzSandDesert","RDustEffectsMan"},{"KzDirtRoad","RDustEffectsMan"},{"KzA7MSR","RDustEffectsMan"}};
	leftDustEffects[] = {{"KzLightGrass","LDustEffectsMan"},{"KzLightDesert","LDustEffectsMan"},{"KzDeepDesert","LDustEffectsMan"},{"KzSandDesert","LDustEffectsMan"},{"KzDirtRoad","LDustEffectsMan"},{"KzA7MSR","LDustEffectsMan"}};
};
};

/*
KzLightDesert
KzLightGrass
KzDeepDesert
KzSandDesert
KzDeepGrass
KzDirtRoad
KzA7MSR

Car :

RDustEffects
RDirtEffects
RStonesEffects
RGrassDryEffects
RGrassEffects

Tank:

RStonesEffectsBig
RDirtEffectsBig
RGrassEffectsDryBig
RGrassEffectsBig
RDustEffects

Air :

RGrassDryEffects
RDustEffectsAir
RDirtEffects
RStonesEffects
RGrassEffects
RSandEffects
*/

Edited by James2464

Share this post


Link to post
Share on other sites

The article is useful. But be careful!

 

Doing this leftDustEffects[]={...}; rightDustEffects[]={...}; you will override global classes and get broken vanilla surfaces dust effects. Thus you will not see dust effects on Altis and Stratis.

 

You must include all vanilla dust effects into your leftDustEffects and rightDustEffects to make your map (island) compatible with vanilla ones.

Example (little part):

rightDustEffects[] = {{ "GdtStratisConcrete","RDustEffects" },{ "GdtStratisConcrete","RDirtEffects" },{ "GdtStratisBeach","RDustEffects" },{ "GdtStratisBeach","RStonesEffects" },{ "GdtStratisDirt","RDustEffects" },{ "GdtStratisDirt","RDirtEffects" },{ "GdtStratisSeabedCluttered","RDustEffects" },{ "GdtStratisSeabed","RDustEffects" },{ "GdtStratisDryGrass","RDustEffects" },{ "GdtStratisDryGrass","RGrassDryEffects" },{ "GdtStratisDryGrass","RDirtEffects" },{ "GdtStratisGreenGrass","RDustEffects" },{ "GdtStratisGreenGrass","RGrassEffects" },{ "GdtStratisGreenGrass","RDirtEffects" },{ "GdtStratisRocky","RDustEffects" },{ "GdtStratisRocky","RGrassEffects" },{ "GdtStratisRocky","RDirtEffects" },{ "GdtStratisThistles","RDustEffects" },{ "GdtStratisThistles","RGrassEffects" },{ "GdtStratisThistles","RDirtEffects" },{ "GdtConcrete","RDustEffects" },{ "GdtConcrete","RDirtEffects" },{ "GdtAsphalt","RDustEffects" },{ "GdtAsphalt","RDirtEffects" },{ "GdtRubble","RDustEffects" },{ "GdtRubble","RDirtEffects" },{ "GdtSoil","RDustEffects" },{ "GdtSoil","RDirtEffects" },{ "GdtBeach","RDustEffects" },{ "GdtBeach","RStonesEffects" },{ "GdtRock","RDustEffects" },{ "GdtRock","RDirtEffects" },{ "GdtDead","RDustEffects" },{ "GdtDead","RDirtEffects" },{ "Default","RDustEffects" },{ "GdtDesert","RDustEffects" },{ "GdtDesert","RStonesEffects" },{ "GdtDesert1","RDustEffects" },{ "GdtDesert1","RSandEffects" },{ "GdtDesert1","RDirtEffects" },{ "GdtDesert1","RStonesEffects" },{ "GdtDesert2","RDustEffects" },{ "GdtDesert2","RSandEffects" },{ "GdtDesert2","RGrassEffects" },{ "GdtDesert2","RDirtEffects" },{ "GdtDirt","RDustEffects" },{ "GdtDirt","RDirtEffects" },{ "GdtGrassGreen","RDustEffects" },{ "GdtGrassGreen","RGrassEffects" },{ "GdtGrassGreen","RDirtEffects" },{ "GdtGrassDry","RDustEffects" },{ "GdtGrassDry","RGrassDryEffects" },{ "GdtGrassDry","RDirtEffects" },{ "GdtGrassWild","RDustEffects" },{ "GdtGrassWild","RGrassEffects" },{ "GdtGrassWild","RDirtEffects" },{ "GdtWildField","RDustEffects" },{ "GdtWildField","RGrassEffects" },{ "GdtWildField","RDirtEffects" },{ "GdtWeed1","RDustEffects" },{ "GdtWeed1","RGrassEffects" },{ "GdtWeed1","RDirtEffects" },{ "GdtWeed2","RDustEffects" },{ "GdtWeed2","RGrassEffects" },{ "GdtWeed2","RDirtEffects" },{ "GdtThorn","RDustEffects" },{ "GdtThorn","RGrassEffects" },{ "GdtThorn","RDirtEffects" },{ "GdtStony","RDustEffects" },{ "GdtStony","RGrassEffects" },{ "GdtStony","RDirtEffects" },{ "GdtStonyGreen","RDustEffects" },{ "GdtStonyGreen","RGrassEffects" },{ "GdtStonyGreen","RDirtEffects" },{ "GdtStonyThistle","RDustEffects" },{ "GdtStonyThistle","RGrassEffects" },{ "GdtStonyThistle","RDirtEffects" },{ "GdtSeabedDeep","RDustEffects" },{ "GdtSeabed","RDustEffects" },{ "SurfRoadDirt","RDustEffects" },{ "SurfRoadConcrete","RDustEffects" },{ "SurfRoadTarmac","RDustEffects" },{ "SurfWood","RDustEffects" },{ "SurfMetal","RDustEffects" },{ "SurfRoofTin","RDustEffects" },{ "SurfRoofTiles","RDustEffects" },{ "SurfIntWood","RDustEffects" },{ "SurfIntConcrete","RDustEffects" },{ "SurfIntTiles","RDustEffects" },{ "SurfIntMetal","RDustEffects" },{ "dirtrunway","RDustEffects" },{"KzLightDesert","RDustEffects"},{"KzLightDesert","RDirtEffects"},{"KzLightDesert","RStonesEffects"},{"KzLightDesert","RGrassDryEffects"},{"KzLightDesert","RGrassEffects"},{"KzLightGrass","RDustEffects"},{"KzLightGrass","RDirtEffects"},{"KzLightGrass","RStonesEffects"},{"KzLightGrass","RGrassDryEffects"},{"KzLightGrass","RGrassEffects"},{"KzDeepDesert","RDustEffects"},{"KzDeepDesert","RDirtEffects"},{"KzDeepDesert","RStonesEffects"},{"KzDeepDesert","RGrassDryEffects"},{"KzDeepDesert","RGrassEffects"},{"KzSandDesert","RDustEffects"},{"KzSandDesert","RDirtEffects"},{"KzSandDesert","RStonesEffects"},{"KzSandDesert","RGrassDryEffects"},{"KzDeepGrass","RDustEffects"},{"KzDeepGrass","RDirtEffects"},{"KzDeepGrass","RStonesEffects"},{"KzDeepGrass","RGrassDryEffects"},{"KzDeepGrass","RGrassEffects"},{"KzDirtRoad","RDustEffects"},{"KzDirtRoad","RDirtEffects"},{"KzDirtRoad","RStonesEffects"},{"KzDirtRoad","RGrassDryEffects"},{"KzA7MSR","RDustEffects"},{"KzA7MSR","RDirtEffects"},{"KzA7MSR","RStonesEffects"},{"KzA7MSR","RGrassDryEffects"}};

 

See \a3\data_f\config.cpp for all vanilla dust effects.

 

Moreover, if you want your map to be compatible with AiA maps (for example), you must include all AiA dust effects into your leftDustEffects and rightDustEffects and make dependency on AiA (via requiredAddons[]={...,"AiA_Worlds_DustEffects"};), thus your map config must be last loaded to override AiA settings. Otherwise (if AiA will be last loaded) you will loose all your dust effects, because AiA will override them.

 

So if end user wants to use several islands simultaneously, they must be compatible otherwise user will not see dust effects on some of them (deepening on loading order).

 

This problem could be solved by using operator += instead of = (for appending but not overriding). But currently operator += doesn't work (issue #21443).

 

So you have choice:

1. Make your map compatible (and dependent on) some islands (vanilla, AiA etc.).

2. Make your map incompatible with other maps (you cannot make your map compatible with all possible maps anyway).

3. Ping BI to make working operator +=.

4. Use vanilla surface types with predefined dust effects (I don't know actually if it's possible or not)

5. To not use dust effects at all.

 

What we have currently (some examples):

1. All AiA maps have the only common surfaces config including all vanilla dust effects. So they are compatible with Altis and Stratis.

2. Kunduz has own dust effects, but overrides vanilla ones. So it's not compatible with Altis, Stratis and AiA.

3. Bornholm has no any own dust effects. So it's compatible with all other maps. But has no dust effects at all.

4. SMD Sahrani has own dust effects, but overrides vanilla ones. So it's not compatible with Altis, Stratis and AiA.

 

However end users always can create their own addon to solve compatible issues between several maps (islands) using them simultaneously. This addon must override global vehicle classes with all dust effects used in all maps.

  • Like 1

Share this post


Link to post
Share on other sites

Hey Buddy thanks a lot for your post, but I have some problems when I tried to make a muddy like river for my Rain Forest map.
I've already tried your configuration exactly as you wrote above but I still face a black and white surface instead of my river.
Please take a lokk at the images below...

http://prnt.sc/8lreel

 

http://prnt.sc/8lrf0u

 

Dou you have any of what could be happening?

Cheers from Brazil! ;)

Share this post


Link to post
Share on other sites

Hey Buddy thanks a lot for your post, but I have some problems when I tried to make a muddy like river for my Rain Forest map.

I've already tried your configuration exactly as you wrote above but I still face a black and white surface instead of my river.

Please take a lokk at the images below...

http://prnt.sc/8lreel

 

http://prnt.sc/8lrf0u

 

Dou you have any of what could be happening?

Cheers from Brazil! ;)

 

are you sure that you can see your surface in Buldozer?

missing surface, wrong path on your layers.cfg or something like that, and check your rvmat for this surface

Share this post


Link to post
Share on other sites

are you sure that you can see your surface in Buldozer?

missing surface, wrong path on your layers.cfg or something like that, and check your rvmat for this surface

Yes, all my surfaces are ok.

I solved the problem. I was watching a video about ponds in Arma 3 and the fog caused a very similar problem, so I decided to change some values for fog parameters and my river is now brown muddy!

 

:) 

 

Thanks for the suggestions! 

Share this post


Link to post
Share on other sites

Hi,

​I have a couple of questions.
​

1. How would I replace the ocean sound with a more calm lake sound and perhaps change the distance the sound travels?

​2. (off topic) Do you know how the "enableTerrainSynth" works except having it on or off? I get very high frequent hills in some areas (in the far distance of the screenshot) and more nice geometry in others. What controls this?
3. (off topic) Any idea what causes the white lines (reference screenshot again)? The line gets thinner as you get closer to it.

EDF0517CB118B0F5259DFB5FDD7952AABDC264E2
 

Share this post


Link to post
Share on other sites

Have you got a white border on your sat map image? Never seen that before

Share this post


Link to post
Share on other sites

Have you got a white border on your sat map image? Never seen that before

​No. However I think I know what causes it. I am offsetting satmap and surface mask 1 meter in each direction to match the height data. It still doesn't completely match but it helped a bit. I think the white line is a product of this however.

​Do you know a better way of aligning height with satmap and mask or why they don't match? Height is 4096px and satmap/masks are 8192px. All created with L3DT and Photoshop. They match in L3DT.

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now

×