====== ArmA 1 Visitor 3 Quick Tutorial ====== [[https://www.pmctactical.org/forum/viewforum.php?f=42|ArmA 1 Forum]], [[:arma|ArmA 1 Home]], [[arma:config|ArmA 1 Config]], [[arma:tools|ArmA 1 Tools]], [[arma:file_formats|ArmA 1 File Formats]], [[arma:missions|ArmA 1 Missions]], [[arma:modeling|ArmA 1 3D Modeling]], [[arma:terrain|ArmA 1 Terrain]], [[arma:texturing|ArmA 1 Texturing]], [[arma:scripting|ArmA 1 Scripting]] **ArmA 1** aka Armed Assault (ArmA) **Visitor 3 Quick Tutorial** by Opteryx Foreword: This tutorial is NOT meant as a Know-it-all thing, only reason I'm writing this is to simply gather already existing info on these forums more or less into one place, this tutorial will only cover the very basics of how V3 works and is intended to give you a easier start at taming the Beast. Nota Bene: Please read through the entire quick tut before starting up any project, otherwise you might find out you've made an error and that could cost you valuable time in which you may not have to spare. ====== Getting Started ====== To make Islands (or terrains) for ArmA you're going to need some basic tools, these are: #[[arma:tools:visitor3|Visitor 3]] (DUH!) #An Image Editor such as [[:editing_tools|Photoshop]] (recommended), but there are others you can use. #A PBO packing/Extraction tool like Kegetys [[arma:tools:cpbo|CPBO]], or BI's [[arma:tools:binpbo|BinPBO]]. #[[arma:tools:texview2|TexView 2]] (for easy conversion of PNG files to PAA format) Kegetys [[arma:tools:paaplugin|paa Plugin]] for Photoshop (optional, but could prove useful) #A terrain editor like [[:tools:wilbur|Wilbur]], Terragen, [[tools:l3dt|L3DT]](?) etc. there are many. #A Creative mind (sort of optional) #PATIENCE MADE OF AGGREGATED DIAMOND NANORODS! This is absolutely imperative! ====== Downloads for Tools ====== [[arma:tools:visitor3|Visitor 3]] [[:tools:wilbur|Wilbur]]/[[http://www.planetside.co.uk/terragen/win/downloadwin.shtml|Terragen]] (You can download both, but you MUST download Wilbur since I'll be using in this tutorial.) [[:editing_tools|Photoshop]] [[arma:tools:texview2|TexView 2]] Kegetys [[arma:tools:paaplugin|paa Plugin]] (scroll down to ArmA Tools) ====== Visitor 3 Installation and Setup ====== Alright, from now on I'll explain things mostly in simple 1-2-3 steps to try and keep things as simplistic and understandable as possible, I'll try and keep as much useless crap outta this tut as possible because I hate all that nonsense that leaves you frustrated in most tutorials, but please do bear with me, this is the first tut I've ever written for anything and I am not by a long shot a master with V3. Okay enough crap, let's start. #Step 1: Unpack Visitor 3 and install on your C:\ drive. #Step 2: Start it up and have a look around. #Step 3: Displeased with the stone age like GUI are we? Good, head over to your new P:\ drive which should have been automatically generated when installing Visitor or Oxygen. #Step 4: In P:\ create a folder, this will be your map folder so you can call it MyMap first time around. #Step 5: In the MyMap folder create two folders, one called Data and the other Source, in the Source folder create another folder called Terrain. #Step 6: Go back into V3 and click Project---> New, here you'll see the Project parameters box, this is where you'll choose the size of your Height map, cell size, Satellite/Mask map etc. This is even where I can get a little (or a lot) confused, so for simplification I'll give you a specific setup. #Step 7: In "Terrain Grid Size" select 512 x 512, In "Terrain Cell Size (meters)" write 10.0. #step 8: A bit further down in is a button which says "Calculator...", this is where you'll select your Satellite and Mask texture size. Click on calculator, in "Image Size (pixels):" write 2048, this will mean that your Satellite/Mask texture is going to be 2048 x 2048 pixels, this is relatively small, Sahrani is 20480 x 20480 pixels, images of those size take an extreme amount of time and resources from your PC to process, export/import etc. so we'll start off with something small. #Step 9: Click on "Apply Proposed" and "Close" now that you're back in the Project parameters box click "OK". #Step 10: Now we're going to go back to Project parameters again to edit the Texture Layers ( I don't know why but you can't do this when creating a new project..). Go to Tools--->Project parameters, here you'll see the same box as you saw moments ago, but this time you can edit the Texture Layers. Beneath the title "Texture Layers" there there's a small white box with a text that says "Base (active), click on that text and on it's right hand side there's a buttons which says Edit. Press edit and in the texture Size selector choose 50.0 x 50.0 m. Press "OK" and "OK" back in the Project parameters box again. Note - I'm not sure if this is the optimum Texture size for a map this size, but keeping it around 40/50 meters have always worked pretty good for me, you got to experiment a bit here. #Step 11: Now let's save this project so you have something to work with. Go to Project--->Save As, save in as MyMap.pew in P:\MyMap\Source\Terrain. ====== Create, Export and Import Terrain ====== There are many ways of creating a terrain for your maps in ArmA, using Visitor is NOT one of them, although is is possible you cannot expect anything of real esthetical value, ie. it's going to look blocky and gruesome. Other ways are using XYZ and Landbuilder ( Uh we don't get that, it reserved for t3h über l33t VBS team or something :/ ) In this tutorial I'll be using simple grayscale height maps, if you don't know what that a grayscale height maps is, it is simply a black and white image, in which height data are calculated from the white is maximum height and black is minimum height. Example. Max height = 100meter, Neutral Gray = 50meter, Black = 0meter. So in other words all the gray tones are different heights depending on the brightness, the brighter the higher elevation, the darker the lower elevation. (hope that made sense hehe) Okay so you got Wilbur downloaded, let's start shall we. #Step 1: Unpack Wilbur and start up the exe. #Step 2: Go to File--> New, here you'll decide what size the height map is going to be, remember the "Terrain Grid Size" you set earlier? This must correlate with that so put in the values: Width 512 pixels, Height 512 pixels. Press Finish. #Step 3: Right, so now you're going to start terraforming, let's do it simple. Select the raise tool, but BEFORE you start painting the terrain you should be aware of that the default brush pressure "1" in Wilbur is very hard so set it to something like 0.001 to 0.010, you can of course change the Width and Height of the brush too. Try out the Dig/Blur/Smudge/Sharpen/Add Noise tools too if you like. #Step 4: After you have something more or less usable you could also try out some of the Filter Effects too if you like, such as erosion, these can add more realism to your terrain. Tip: in Window there's an option where you can select 3D Preview Window to view your terrain in three dimensions, this can be useful. #Step 5: Okay so you're more or less happy with the terrain you've created, go to File--> Save As, save it as Terrain.png (PNG surface) in your P:\MyMap\Source\Terrain folder, after you press save you'll get a question "Output as 16.bit values", press yes. #Step 6: So now you have generated your terrain, this is how you import it to Visitor. In P:\MyMap\Source\Terrain, create a .txt file, inside this file you put this: class cfg { PNGfilename = "terrain.png"; squareSize = 20; originX = 0; originY = 0; minHeight = -07.420013; maxHeight = 876.810001; }; #Step 7: Save the .txt file as terrain.pbl Make sure you save it as a pbl format and not as "terrain.pbl.txt" Note- It's important that the .pbl files is located in the same dir. as your height map, but that shouldn't be a problem if you've followed this tutorial correctly. Also this area highlighted in blue: PNGfilename = "**terrain.png**"; must be the same as your heightmap name. #Step 8: Now you're ready to import your terrain into Visitor, start off by opening your project in Visitor, go to Project--> "Import Terrain from picture.." find the terrain.pbl you created in P:\MyMap\Source\Terrain and open it. Now you should be able to see some kind of height map in Visitor. Tip: Is your view in V3 obstructed? Go to View and remove some unwanted panels such as Script panel, what you basically need is Objects panel and Toolbar panel (View Toolbar), you can also move the panels around with your mouse. #Step 9: Okay, now you would probably want to view your terrain in the engine, if you go to Project--> Connect to Buldozer you should start up Buldozer (there might be some problems here, but for me it worked without problems from the start as far as I can remember). If it works you should now be floating around in the air above your untextured terrain, to move around use your mouse and numpad keys. If you don't like the setup you can press F1 in Buldozer mode to change GFX settings and Buldozer navigation. You can also run buldozer in windowed mode (see BIKI) but I just navigate between V3 and Bul with Alt+tabbing. #Step 10: Before we move on to the next part of the tut I should mention that if you're unhappy with your terrain because is has too much contrast, you can go to your Objects panel--->Terrain vertices and press Ctrl+A to select your entire terrain and run an erosion cycle on it, here you can experiment a bit. Additional note- you can also edit your png heightmap in Photoshop, but it appears as if PS does some funky stuff to your height map, in this case just open and save it in Wilbur after editing in PS, this should solve the error. ====== Satellite/mask Creation and Preparation for Import ====== [lie] Woho! here comes the fun part! [lie\] Right, so basically how this stuff works is that there's two different images you make, one is called Sat_LCO.png, this the satellite map texture that you from the distance and the one when showing textures on the map in-game. If you have good resources you can use real world satellite/aerial images for this. The other one is called Mask_LCO.png and uses a RGB color coding to tell the engine where to paint the detail textures (the textures you see up close to you on the ground), making this mask match up good to your Satmap can be areal pain in the ass, especially if you're using a real world satellite image with a lot variation, this is mostly due to the fact that you're only limited to four different detail texture per segment(??), i.e. you can't have much variation on your terrain in small places. Exactly how to figure out where to not put more than four different colors that don't overlap I'm not sure of, maybe set up some kind of grid in Photoshop or something? Anyway your best bet is to start off with just four different detail textures on your entire map to be on the safe side. #Step 1: Start off simply by either getting a satellite image of what your map is going to look like, I'm sure there are many resources out there on the net (Google Earth), alternatively you could make it completely from scratch buy slapping a bunch of textures together and editing it in Photoshop until it looks nice and purty. How you do this is entirely up to you and there's simply no easy short cut for it, find out what works best for you. #Step 2: Now that you got your satellite image, it must match the size of your Project settings, back in Project Parameters you set your image size to 2048, this means that your Satellite image must be 2048 x 2048 pixels in size, this is easy to do in Photoshop and most image editors. To get your satellite image to be 1:1 scale in ArmA can be somewhat tricky, so I'm not going try and explain that, a tip I can give you though is that in Project Parameters there's an output value of how big your map is going to be relative to your settings, here you can experiment (again) to see if you find a formula that gets it right. Save the satellite image in P:\MyMap\Source as Sat_LCO.png. #Step 3: Now that you're done with the SatMap you must create the Mask, let's say your satellite images has four different surfaces # Grass #Sand #Urban/Asphalt #Rock/Mountain Assign an RGB value/color for each one of these textures. Example: # Grass = Green RGB = 0.255.0 #Sand = Yellow RGB = 255.255.0 #Urban/Asphalt = Blue RGB = 0.0.255 #Rock/Mountain = Red RGB = 255.0.0 The RGB values can be viewed and set in the Color Picker in Photoshop. Also it would probably be wise to write down these settings somewhere in a textfile so that you don't forget them. #Step 4:Okay, now you can start making your Mask texture, this must the exact same size as your Satmap, i.e. in this case 2048 x 2048 pixels. There is no right or wrong way to do this, only what works best for you and your map, basically it's just a case of painting all the roads, grass, mountains etc. to match the satmap, only with one color representing each dominant surface. Personally I have Photoshop Elements 2.0 and have found that the way that works best for me is to paint the Mask as a layer on top of the satmap, then when I'm done I copy it into a separate image. One could probably use other ways such as converting your satmap into a gradient map, I however found this impractical. Note- It's important to note that painting your mask with a brush that has a transparent edge will create different colors when painted on top of other colors, this can lead to unwanted texture and possibly interfere with the four color limit thing. Also remember to have Opacity at full strength (100%) #Step 5: Right so now that you're done and happy with your Mask, save it in P:\MyMap\Source as Mask_LCO.png. #Step 6: Before you start importing your Sat/Mask into Visitor your going to need some detail textures and RVMAT files, you can get these by unpbo'ing Sahrani or use those in the SampleMap(Rahmadi) released by BIS. For each texture you're going to need: One RVMAT, one _detail_co. _detail_mco. and a _detail_nohq. Example: Sand texture is painted as Yellow (RGB value = 255.255.0) and needs: #pisekplaz.rvmat #pisekplaz_detail_co.paa #pisekplaz_mco.paa #pisekplaz_detail_nohq.paa Extract all of the relevant textures and RVMATs that you'll need from Sara.pbo and put them in P:\MyMap\Data. If you don't know what they are since their names are in Czech, you can open them up in either in Photoshop using Kegetys paaplugin or with TexView. #Step 7: Now you must open up all of the RVMAT files in an text editor and change their paths, easiest way is to just right click on them and open up in notepad. In each RVMAT there are two lines in which you must change the texture path, make the path into MyMap\Data. Close and save. Example: ambient[] = {0.9,0.9,0.9,1}; diffuse[] = {0.9,0.9,0.9,1}; forcedDiffuse[] = {0.02,0.02,0.02,1}; specular[] = {0.0,0.0,0.0,0}; specularPower = 1; // specular interpolator must be enabled emmisive[] = {0,0,0,0}; PixelShaderID = "NormalMapDiffuse"; VertexShaderID = "NormalMapDiffuseAlpha"; class Stage1 {// normal map texture = "MyMap\data\pisekplaz_detail_nohq.paa"; uvSource = "tex"; class uvTransform { aside[] = {10,0,0}; up[] = {0,10,0}; dir[] = {0,0,10}; pos[] = {0,0,0}; }; }; class Stage2 { texture = "MyMap\data\pisekplaz_detail_co.paa"; uvSource = "tex"; class uvTransform { aside[] = {10,0,0}; up[] = {0,10,0}; dir[] = {0,0,10}; pos[] = {0,0,0}; }; }; #Step 8: When all RVMATs are done you're going to need a Layers.cfg file, this file will assing each color on your Mask to to an individual detail texture. Using the previous examples; here's how your layers.cfg should look like: class Layers { class pisekplaz { texture = "MyMap\data\pisekplaz_mco.png"; material = "MyMap\data\pisekplaz.rvmat"; }; class trava { texture = "MyMap\data\trava_mco.png"; material = "MyMap\data\trava.rvmat"; }; class mesto { texture = "MyMap\data\mesto_mco.png"; material = "MyMap\data\mesto.rvmat"; }; class pisek { texture = "MyMap\data\pisek_mco.png"; material = "MyMap\data\pisek.rvmat"; }; }; class Legend { picture = "MyMap\Source\mapLegend.png"; class Colors { // color names should correspond to surface layer names pisek[] = {{255,0,0}}; trava[] = {{0,255,0}}; mesto[] = {{0,0,255}}; pisekplaz[] = {{255,255,0}}; } }; Note- Notice that the files are referring to png's in data folder? Yeah I know, for some reason this works for me, but you could try and change them to paa, EXCEPT MAPLEGEND.PNG! This one must be a png. The "class Layers" bit tells Visitor what textures and RVMATs you're using and where they are, the second bit "class Colors" tells Visitor what textures colors on your Mask are assigned which detail texture, so here you just put in the RGB color value you want for the texture you have assigned it to when you made the mask. You can also add and subtract texture. Now that you've written your layers.cfg file, just save it as layers.cfg in P:\MyMap\Source. #Step 9: Two more things you'll need to do before importing this in V3, first you need to add the mapLegend.png to P:\MyMap\Source (I honestly have no clue what this does, but apparently you need it) get it [[http://community.bistudio.com/wikidata/images/2/2a/SurfaceMapLegend.png|here]] The second thing you'll need to do is telling Visitor where to save your Layers, in Visitor go to tools---> Project Preferences, in the top line where it says "Folder Textures" write: MyMap\Data. ====== Import and PNG to PAA Conversion ====== So now you're ready to import your Satellite and Mask textures, this can be one of the more time consuming thing when working with Visitor, but with the given example here I'd imagine the process to rather quick. #Step 1: Go to Tools--> "Import Satellite + Mask.." now you get the choice if you want to generate you layers RVMATs in binary or text, by default it should be set to binary, if not select binary and press OK. #Step 2: Now you select what images you're going to use as Sat/Mask and your layers.cfg. open them up, in succession it should be: nr 1: Satellite maps nr 2: Layers.cfg nr.3: Mask Note- If this process fails somewhere along the line and Visitor crashes, it's most likely to do with an error in one of the texture paths or image size, check everything RVMATs, Layers.cfg Visitor settings and again texture sizes. Even the most minute error such as a missing " can crash everything, so be certain everything is correct. #Step 4: After doing that delete all your left over png files in P:\MyMap\Data\Layers. #Step 5: Now you should be able to view your textured terrain in Buldozer, so fire it up and check it out. Note- You're probably going to do something wrong here, either because I wrote something wrong you missed something, but don't let it get you down, things like these takes patience, trial and error to learn. ====== Insertion of Objects / Vegetation ====== This should be fairly easy. # Step 1: Go to your BIS AddOns folder and find the type of objects you want, so for say like Buildings you find the buildings.pbo and unpbo that. Put the buildings folder in P:\ca, if you don't have a folder named ca in P:\ just create one. # Step 2: In Visitor go to Tools--->Artificial Objects, on bottom left hand corner you'll a button that says Add/Browse, click it and navigate from here to P:\ca, now open up the buildings folder and select one or multiple of the p3d files (unfourtunatley it seems as though you cannot select all at once, I think 8 is the maximum that you can add at a time), once that you've selected the objects that you want, press open, now they're added to the Artificial Objects Definition, here you can define some things with the object such as random size etc, don't bother with that yet, press OK. # Step 3: Now you have your objects up in the objects panel, if you can't see the objects panels go to View and check it. # Step 4: Now all you need to do is select the object you want from the objects panel and add it to the map by clicking where you want it, you can move it around by clicking the left muse button, hold and drag it around, also holding down left muse button while holding down Ctrl and moving the mouse will change the orientation of the object. You can move objects around in Buldozer too, but this is a bit guesswork because there's no arrow you can toggle to see exactly where your camera is pointed. # Step 5: Vegetation works the same way as other object except you choose "Nature Objects" in tools, also here it becomes somewhat more important that you randomize the object size in Artificial Objects Definition so that the vegetation doesn't look identical to neighboring objects. ====== Roads ====== Not possible yet, but if you absolutely must have them you can unpbo them and place them like objects for temporary placeholders. Save as MyMap.pew now so you don't lose your work. ====== Getting Map Ingame ====== If you've done everything right this shouldn't be too hard either. # Step 1: First thing to do now is to create a .wrp file of your map, this is easy. Make sure you have Buldozer running otherwise you can't generate a wrp. go to Project---> "Export World.." Now save it as MyMap.wrp in P:\MyMap\Source\Terrain. # Step 1:Second thing you'll need is a config, Here's a working example of one: #define ReadAndWrite 0 #define ReadAndCreate 1 #define ReadOnly 2 #define ReadOnlyVerified 3 class CfgPatches { class MyMap { units[] = {}; worlds[] = { MyMap }; requiredVersion = 1.12; }; }; class DefaultLighting; class DefaultLighting_CA : DefaultLighting {}; class CfgWorlds { class DefaultClutter { scaleMin = 0.9; scaleMax = 1.4; }; class DefaultWorld; class Intro : DefaultWorld {}; class MyMap : Intro { access = 3; cutscenes[] = { "DesertIntro1" }; description = "MyMap"; icon = ""; worldName = "\MyMap\MyMap.wrp"; pictureMap = ""; pictureShot = ""; plateFormat = "ML$ - #####"; plateLetters = ABCDEGHIKLMNOPRSTVXZ; longitude = -40; // positive is east latitude = -40; // positive is south class Grid { offsetX = 0; offsetY = 0; class Zoom0 { zoomMax = 0.2; format = "XY"; formatX = "Aa"; formatY = "00"; stepX = 256; stepY = 256; }; class Zoom1 { zoomMax = 1.0; format = "XY"; formatX = "A-"; formatY = "0-"; stepX = 2560; stepY = 2560; }; }; 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; class clutter { class GrassGeneral : DefaultClutter { model = "ca\plants\clutter_grass_general.p3d"; affectedByWind = 0.3; swLighting = 1; scaleMin = 0.75; scaleMax = 1.0; }; class GrassFlowers : GrassGeneral { model = "ca\plants\clutter_grass_flowers.p3d"; }; class GrassLong : GrassGeneral { model = "ca\plants\clutter_grass_long.p3d"; affectedByWind = 0.6; scaleMin = 0.6; scaleMax = 1.1; }; class GrassSevenbeauty : GrassGeneral { model = "ca\plants\clutter_grass_sevenbaeuty.p3d"; affectedByWind = 0.2; scaleMin = 0.7; scaleMax = 1.1; }; class GrassYellow : GrassGeneral { model = "ca\plants\clutter_grass_yellow.p3d"; affectedByWind = 0.2; scaleMin = 0.7; scaleMax = 1.1; }; class GrassDesert : GrassGeneral { model = "ca\plants\clutter_grass_desert.p3d"; }; class ForestFern : GrassGeneral { model = "ca\plants\clutter_forest_fern.p3d"; affectedByWind = 0.1; scaleMin = 0.9; scaleMax = 1.1; }; class SmallRocks : GrassGeneral { model = "ca\rocks\clutter_stone_small.p3d"; affectedByWind = 0; scaleMin = 0.9; scaleMax = 1.1; }; class FlowersColor : GrassGeneral { model = "ca\plants\clutter_smetanka.p3d"; }; class FlowersWhite : GrassGeneral { model = "ca\plants\clutter_white_flower.p3d"; }; class MushroomsHorcak : GrassGeneral { model = "ca\plants\clutter_horcak.p3d"; affectedByWind = 0; scaleMin = 0.85; scaleMax = 1.25; }; class MushroomsPrasivka : MushroomsHorcak { model = "ca\plants\clutter_prasivky.p3d"; }; class MushroomsBabka : MushroomsHorcak { model = "ca\plants\clutter_babka.p3d"; }; class MushroomsMuchomurka : MushroomsHorcak { model = "ca\plants\clutter_muchomurka.p3d"; }; }; class Subdivision { class Fractal { rougness = 5; maxRoad = 0.02; maxTrack = 0.5; maxSlopeFactor = 0.05; }; class WhiteNoise { rougness = 2; maxRoad = 0.01; maxTrack = 0.05; maxSlopeFactor = 0.0025; }; minY = 0.0; minSlope = 0.02; }; class Ambient { class BigBirds { radius = 300; cost = "((1 + forest + trees) - ((2 * rain)) - houses) * (1 - night) * (1 - sea)"; class Species { class Hawk { probability = 0.2; cost = 1; }; }; }; class Birds { radius = 170; cost = "(1 - night) * ((1 + (3 * sea)) - (2 * rain))"; class Species { class Seagull { probability = 0.2; cost = 1; }; }; }; class BigInsects { radius = 20; cost = "(5 - (2 * houses)) * (1 - night) * (1 - rain) * (1 - sea) * (1 - windy)"; class Species { class DragonFly { probability = "0.6 - (meadow * 0.5) + (forest * 0.4)"; cost = 1; }; class ButterFly { probability = "0.4 + (meadow * 0.5) - (forest * 0.4)"; cost = 1; }; }; }; class BigInsectsAquatic { radius = 20; cost = "(3 * sea) * (1 - night) * (1 - rain) * (1 - windy)"; class Species { class DragonFly { probability = 1; cost = 1; }; }; }; class WindClutter { radius = 10; cost = "((20 - 5 * rain) * (3 * (windy factor [0.2, 0.5]))) * (1 - sea)"; class Species { class FxWindGrass1 { probability = "0.4 - 0.2 * hills - 0.2 * trees"; cost = 1; }; class FxWindGrass2 { probability = "0.4 - 0.2 * hills - 0.2 * trees"; cost = 1; }; class FxWindRock1 { probability = "0.4 * hills"; cost = 1; }; class FxWindLeaf1 { probability = "0.2 * trees"; cost = 1; }; class FxWindLeaf2 { probability = "0.1 * trees + 0.2"; cost = 1; }; class FxWindLeaf3 { probability = "0.1 * trees"; cost = 1; }; }; }; class NoWindClutter { radius = 15; cost = "(20 * (windy factor [0.1, 0.2])) * meadow * (1 - rain) * (1 - sea) * (1 - forest) * (1 - houses)"; class Species { class FxWindPollen1 { probability = 1; cost = 1; }; }; }; class SmallInsects { radius = 3; cost = "(12 - 8 * hills) * (1 - night) * (1 - rain) * (1 - sea) * (1 - windy)"; class Species { class HouseFly { probability = "deadBody + (1 - deadBody) * (0.5 - forest * 0.1 - meadow * 0.2)"; cost = 1; }; class HoneyBee { probability = "(1 - deadBody) * (0.5 - forest * 0.1 + meadow * 0.2)"; cost = 1; }; class Mosquito { probability = "(1 - deadBody) * (0.2 * forest)"; cost = 1; }; }; }; class NightInsects { radius = 3; cost = "(9 - 8 * hills) * night * (1 - rain) * (1 - sea) * (1 - windy)"; class Species { class Mosquito { probability = 1; cost = 1; }; }; }; }; class Names { class Veg_1 { name = ""; position[] = {2713.62, 2140.92}; type = "VegetationPalm"; radiusA = 50; radiusB = 50; }; class Veg_2 { name = ""; position[] = {2446.09, 3038.29}; type = "VegetationPalm"; radiusA = 50; radiusB = 50; }; class Veg_3 { name = ""; position[] = {2940.52, 2923.19}; type = "VegetationPalm"; radiusA = 50; radiusB = 50; }; }; }; }; class CfgWorldList { class MyMap {}; }; In description = "MyMap"; you can call it whatever you want, this is what the name will be in the Island Selector, all the other places where MyMap is written must be the same as your project name. Put the config text in a .txt file and save as config.cpp, you can probably binarize it too now with one of the BIS tools, haven't looked into that yet so I wouldn't know how. # Step 6: Okay now you're ready to pack it all, start off by creating a folder named MyMap, in this folder you put your MyMap.wrp, data folder from P:\MyMap and the config you just made, now pack this folder into a PBO file, all you need to do now is to put the MyMap.pbo in your ArmA addons folder and it should work. If you're getting an error about RVMAT's and there's no textures on the geound ingame I can assure you there's a 99% probability it's related to a texture path error, always make sure all paths are good, triple check if you can't find it. Well that about concludes this short tutorial, I hope you found it usefull, also if anybody else is writing a tutorial feel perfectly free to use any info from this one, share your knowledge and different perspectives. ====== Notes ====== This tutorial was created by Opteryx, he gave us the permissions to post it here.