====== Object Model ====== **Grass Tutorial** By Linker Split Create a little 3x3m grass block, something like this: {{ https://pmc.editing.wiki/images/grass_tutorial1.jpg }} The model must only have some res LODs and Geometry LOD empty, with property names damage no shadow hybrid ====== Config.cpp ====== Here I'll post an example of what should be to have your own clutters: class DefaultLighting; class DefaultLighting_CA : DefaultLighting {}; //+++++++++++++++++++++++++++\\ ///the definition of my own ground textures\\\ //+++++++++++++++++++++++++++\\ class CfgSurfaces { class Default {}; class water {}; class citysand : Default { access = ReadOnly; files = "citysand_*"; rough = 0.01; dust = 0.8; soundEnviron = "road"; character = "citysandClutter"; }; class desertsand : Default { access = ReadOnly; files = "desertsand_*"; rough = 0.03; dust = 0.9; soundEnviron = "sand"; character = "desertsandClutter"; }; class grassdry : Default { access = ReadOnly; files = "grassdry_*"; rough = 0.01; dust = 0.09; soundEnviron = "drygrass"; character = "grassdryClutter"; }; }; //+++++++++++++++++++++++++++\\ ///////the definition of my own clutters\\\\\\\\\ //+++++++++++++++++++++++++++\\ class CfgSurfaceCharacters { class citysandClutter { probability[] = {0.0005000,0.001,0.004}; names[] = {"grassdryLong","cityrocksmall","Cityrockbig"}; }; class desertsandClutter { probability[] = {0.010015,0.005001,0.003001,0.000670,0.00050,0.0002}; names[] = {"grassdryShort","Desertrockssmall", "Desertrocksbig", "Desertrockbig", "Desertrockbig2", "Desertrockbig3"}; }; class grassdryClutter { probability[] = {0.0500,0.0100}; names[] = {"grassgreenLong","grassgreenShort"}; }; }; //+++++++++++++++++++++++++++\\ /////////--island simple definition part--\\\\\\\\\ //+++++++++++++++++++++++++++\\ class CfgWorlds { class DefaultClutter { scaleMin = 0.9; scaleMax = 1.4; }; class DefaultWorld; class BHD_mogadishu : DefaultWorld { access = 3; cutscenes[] = {"DesertIntro1"}; description = "-Mogadishu-"; icon = ""; worldName = "\BHD_mogadishu\BHD_mogadishu.wrp"; pictureMap = ""; pictureShot = ""; plateFormat = "ML$ - #####"; plateLetters = ABCDEGHIKLMNOPRSTVXZ; longitude = +20; // positive is east latitude = +30; // positive is south landGrid = 20; class Grid //OFP style Aa00 - JJ99 { //colorGrid[]={0,0,1,1}; //colorGridMap[]={0,0,1,1}; offsetX=0; offsetY=0; class Zoom1 { zoomMax = 0.5; format = "XY"; formatX = "Aa"; formatY = "00"; stepX = 200; stepY = 200; }; class Zoom2 { zoomMax = 1e030; format = "XY"; formatX = "A"; formatY = "0"; stepX = 2000; stepY = 2000; }; }; startTime = 8:30; startDate = 07/06/2007; startWeather = 0.1; startFog = 0.0; forecastWeather = 0.3; forecastFog = 0.0; seagullPos[] = {1272.84, 150.0, 14035}; centerPosition[] = {2500, 2500, 300}; ilsPosition[] = {2545, 3000}; ilsDirection[] = {0, 0.08, 1}; ilsTaxiIn[] = { 2495, 2725, 2495, 2850, 2508, 2860, 2508, 3000, 2520, 3010, 2545, 3000 }; ilsTaxiOff[] = {2545, 2445, 2520, 2425, 2495, 2445, 2495, 2725}; drawTaxiway = 0; class ReplaceObjects {}; class Sounds { sounds[] = {}; }; class Animation { vehicles[] = {}; }; class Lighting : DefaultLighting {}; clutterGrid = 1.11; clutterDist = 55; noDetailDist = 40; fullDetailDist = 5; minTreesInForestSquare = 3; minRocksInRockSquare = 4; //+++++++++++++++++++++++++++\\ /////the real definition of my own clutters\\\\\\ //+++++++++++++++++++++++++++\\ class clutter { class GrassGeneral: DefaultClutter //main BI grass clutter { model = "ca\plants\clutter_grass_general.p3d"; affectedByWind = 0; swLighting = 1; scaleMin = 0.75; scaleMax = 1.0; }; class grassdryLong: GrassGeneral //my first definition of grass clutters, // see the first part, and find the corrispondence of these classes { model="BHD_m\vege\grassdry.p3d"; affectedByWind = 0.01; scaleMin = 1.0; scaleMax = 1.50; }; class grassdryShort: GrassGeneral //same goes for this class { model="BHD_m\vege\grassdry.p3d"; affectedByWind = 0.001; scaleMin = 0.70; scaleMax = 1.0; }; class grassgreenLong: GrassGeneral //same goes for this class { model="BHD_m\vege\grassgreen.p3d"; affectedByWind = 0.5; scaleMin = 1.0; scaleMax = 1.50; }; class grassgreenShort: GrassGeneral //same goes for this class { model="BHD_m\vege\grassgreen.p3d"; affectedByWind = 0.05; scaleMin = 0.70; scaleMax = 1.00; }; class Desertrockssmall: GrassGeneral //main BI configuration for rocks { model = "ca\rocks\clutter_stone_small.p3d"; affectedByWind = 0; scaleMin = 0.2; scaleMax = 0.4; }; class Desertrockssbig: GrassGeneral //main BI configuration for rocks { model = "ca\rocks\stone3_clutter.p3d"; affectedByWind = 0; scaleMin = 0.2; scaleMax = 0.4; }; class Desertrockbig: GrassGeneral //main BI configuration for rocks { model = "ca\rocks\stone4_invert.p3d"; affectedByWind = 0; scaleMin = 0.4; scaleMax = 0.8; }; class Desertrockbig2: GrassGeneral //main BI configuration for rocks { model = "ca\rocks\stone3a.p3d"; affectedByWind = 0; scaleMin = 0.2; scaleMax = 0.4; }; class Desertrockbig3: GrassGeneral //main BI configuration for rocks { model = "ca\rocks\stone4.p3d"; affectedByWind = 0; scaleMin = 0.2; scaleMax = 0.4; }; class Cityrocksmall: GrassGeneral //main BI configuration for rocks { model = "ca\rocks\clutter_stone_small.p3d"; affectedByWind = 0; scaleMin = 0.1; scaleMax = 0.26; }; class Cityrockbig: GrassGeneral //main BI configuration for rocks { model = "ca\rocks\stone3_clutter.p3d"; affectedByWind = 0; scaleMin = 0.1; scaleMax = 0.3; }; }; }; }; class CfgWorldList { class BHD_Mogadishu {}; }; Ok, let's take a look at our Mod config for Mogadishu in descending order:\\ The first part has been dedicated to define my own ground textures, with my own names (city_dust.paa, grassdry.paa and so on) then I defined the class CfgSurfaceCharacters (where you can also change the probability that indicates the amount of objects placed) to add in a second part of the config my own clutters. So, take a look at the Clutter class part of the config:\\ There you will define your own models to be placed randomly all over the island. ====== Notes ====== hope it will be a good explanation, for any problems, [[https://www.pmctactical.org/forum/privmsg.php?mode=post&u=2318|send Linker Split a private message]]