arma3:terrain:ultimate-terrain-tutorial
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
arma3:terrain:ultimate-terrain-tutorial [2017/08/28 16:20] – added missing DePbo to install list. snakeman | arma3:terrain:ultimate-terrain-tutorial [2024/03/01 04:59] – updated. snakeman | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== PMC ArmA 3 Ultimate Terrain Tutorial ====== | ====== PMC ArmA 3 Ultimate Terrain Tutorial ====== | ||
+ | |||
+ | **2024-03-01T04: | ||
Same as the legendary [[falcon4: | Same as the legendary [[falcon4: | ||
Line 10: | Line 12: | ||
====== Required Tools ====== | ====== Required Tools ====== | ||
- | You need a good text editor, image editor, Mikero Tools, L3DT and obviously steam arma3 tools. | + | You need a good text editor, image editor, Mikero Tools, |
**Do not ever use windows notepad or wordpad to edit text files.** Recommended text editors listed at [[: | **Do not ever use windows notepad or wordpad to edit text files.** Recommended text editors listed at [[: | ||
Line 27: | Line 29: | ||
====== Installing L3DT ====== | ====== Installing L3DT ====== | ||
- | You'll find download link from our [[arma2: | + | You'll find download link from [[tools: |
- | Installing using the L3DT installer is easy, not much more to say about it. At the moment of writing this tutorial the free version | + | Installing using the L3DT installer is easy. At 2019-01-02 L3DT is freeware [[http:// |
- | L3DT comes in limited free version, 90 day trial and professional commercial version. You are fine downloading the free version. | + | This tutorial is written with heightmaps and satellite texture/ |
- | + | ||
- | Make a note that free version only allows | + | |
Line 40: | Line 40: | ||
Basic installation guide at [[arma3: | Basic installation guide at [[arma3: | ||
- | You need to install: | + | You must install |
- | * DePbo | + | |
- | * DeOgg | + | |
- | * DeP3d | + | |
- | * DeRap | + | |
- | * ExtractPbo | + | |
- | * MakePbo | + | |
- | * pboProject | + | |
- | * Rapify | + | |
Line 54: | Line 46: | ||
Guide on [[arma3: | Guide on [[arma3: | ||
+ | |||
+ | **Do not skip setting up P: drive properly**, wrongly setup or missing P: drive is the most common cause of issues when developing addons. | ||
Line 109: | Line 103: | ||
\tut\tut_tutorial_terrain\$PBOPREFIX$ | \tut\tut_tutorial_terrain\$PBOPREFIX$ | ||
</ | </ | ||
- | Yes its a bit odd file name but that how things work in arma land. Now open $PBOPREFIX$ in text editor and write the following line there: | + | Now open $PBOPREFIX$ in text editor and write the following line there: |
< | < | ||
tut\tut_tutorial_terrain | tut\tut_tutorial_terrain | ||
</ | </ | ||
- | This is your namespace \ addon name directory, pboprefix file tells arma3_x64.exe where this addon' | + | This is your namespace \ addon name directory, pboprefix file tells arma3_x64.exe where this addon' |
Next we will have to download maplegend.png file. This file is used by terrain builder in various satellite things, you can download it from the below link (for example open to a new browser tab and save as). | Next we will have to download maplegend.png file. This file is used by terrain builder in various satellite things, you can download it from the below link (for example open to a new browser tab and save as). | ||
Line 138: | Line 132: | ||
class tut_grass_green | class tut_grass_green | ||
{ | { | ||
- | texture = "a3\map_data\gdt_grass_green_co.paa"; | + | texture = ""; |
- | material = " | + | material = " |
}; | }; | ||
}; | }; | ||
Line 164: | Line 158: | ||
</ | </ | ||
- | Create a "gdt_grass_green.rvmat" | + | Create a "tut_grass_green.rvmat" |
<code cpp> | <code cpp> | ||
- | ambient[] = {0.9,0.9,0.9,1}; | + | ambient[] = { 1, 1, 1, 1 }; |
- | diffuse[] = {0.9,0.9,0.9,1}; | + | diffuse[] = { 1, 1, 1, 1 }; |
- | forcedDiffuse[] = {0.02, | + | forcedDiffuse[] = { 0.02, 0.02, 0.02, 1 }; |
- | specular[] = {0.0,0.0,0.0,0}; | + | specular[] = { 0, 0, 0, 0 }; |
specularPower = 1; | specularPower = 1; | ||
- | emmisive[] = {0,0,0,0}; | + | emmisive[] = { 0, 0, 0, 0 }; |
PixelShaderID = " | PixelShaderID = " | ||
Line 182: | Line 176: | ||
class uvTransform | class uvTransform | ||
{ | { | ||
- | aside[] = {10,0,0}; | + | aside[] = { 10, 0, 0 }; |
- | up[] | + | up[] |
- | dir[] | + | dir[] |
- | pos[] | + | pos[] |
}; | }; | ||
}; | }; | ||
Line 195: | Line 189: | ||
class uvTransform | class uvTransform | ||
{ | { | ||
- | aside[] = {10,0,0}; | + | aside[] = { 10, 0, 0 }; |
- | up[] | + | up[] |
- | dir[] | + | dir[] |
- | pos[] | + | pos[] |
}; | }; | ||
}; | }; | ||
Line 207: | Line 201: | ||
In this tutorial example we are using only one texture to keep it simple, but normal terrains use more, dozens more of these textures. You don't have to worry about that now. | In this tutorial example we are using only one texture to keep it simple, but normal terrains use more, dozens more of these textures. You don't have to worry about that now. | ||
- | In our layers.cfg we reference to gdt_grass_green.rvmat material file, which again references to the actual texture found in a3\map_data\ directory. This is kind of cool that our terrain doesn' | + | In our layers.cfg we reference to tut_grass_green.rvmat material file, which again references to the actual texture found in a3\map_data\ directory. This is kind of cool that our terrain doesn' |
Line 218: | Line 212: | ||
Start L3DT and click create a new project or hit CTRL-N | Start L3DT and click create a new project or hit CTRL-N | ||
- | {{ http:// | + | {{ https:// |
Click next (designable map) | Click next (designable map) | ||
Line 224: | Line 218: | ||
Change width/ | Change width/ | ||
- | {{ http:// | + | {{ https:// |
Click next (design map size) | Click next (design map size) | ||
- | {{ http:// | + | {{ https:// |
Design map parameters are easiest to leave default for our tutorial purposes, click next | Design map parameters are easiest to leave default for our tutorial purposes, click next | ||
- | {{ http:// | + | {{ https:// |
Tick to enable; heightfield, | Tick to enable; heightfield, | ||
- | {{ http:// | + | {{ https:// |
Texture settings untick "use light map" and click ok | Texture settings untick "use light map" and click ok | ||
- | {{ http:// | + | {{ https:// |
Now L3DT is processing! wait until its done | Now L3DT is processing! wait until its done | ||
- | {{ http:// | + | {{ https:// |
CTRL-S to save the project, browse to \tut\tut_tutorial_terrain\source\ give file name of " | CTRL-S to save the project, browse to \tut\tut_tutorial_terrain\source\ give file name of " | ||
Line 250: | Line 244: | ||
Export map select file format ASC, and to file name field type: tut_tutorial_project-heightmap, | Export map select file format ASC, and to file name field type: tut_tutorial_project-heightmap, | ||
- | {{ http:// | + | {{ https:// |
Select attributes tab, use CTRL-E to export\\ | Select attributes tab, use CTRL-E to export\\ | ||
Export map select file format BMP, and to file name field type: tut_tutorial_project_satellite_mask_lco, | Export map select file format BMP, and to file name field type: tut_tutorial_project_satellite_mask_lco, | ||
- | {{ http:// | + | {{ https:// |
Select texture map tab, use CTRL-E to export\\ | Select texture map tab, use CTRL-E to export\\ | ||
Export map select file format BMP, and to file name field type: tut_tutorial_project_satellite_texture_lco, | Export map select file format BMP, and to file name field type: tut_tutorial_project_satellite_texture_lco, | ||
- | {{ http:// | + | {{ https:// |
Save project and exit L3DT | Save project and exit L3DT | ||
Line 285: | Line 279: | ||
Open terrain builder and choose mapframes -> add mapframe | Open terrain builder and choose mapframes -> add mapframe | ||
- | {{ http:// | + | {{ https:// |
UTM selection click ok | UTM selection click ok | ||
- | {{ http:// | + | {{ https:// |
Mapframe Properties select location tab\\ | Mapframe Properties select location tab\\ | ||
Line 297: | Line 291: | ||
Location, left-bottom corner, set easting to 200000 and northing to 0 | Location, left-bottom corner, set easting to 200000 and northing to 0 | ||
- | {{ http:// | + | {{ https:// |
Select samplers tab\\ | Select samplers tab\\ | ||
Line 304: | Line 298: | ||
Texture layer -> size (m): 40 x 40 | Texture layer -> size (m): 40 x 40 | ||
- | {{ http:// | + | {{ https:// |
Select processing tab\\ | Select processing tab\\ | ||
Line 311: | Line 305: | ||
Mapframe properties, bottom right, click ok | Mapframe properties, bottom right, click ok | ||
- | {{ http:// | + | {{ https:// |
On main menu make sure "view mapframes", | On main menu make sure "view mapframes", | ||
- | {{ http:// | + | {{ https:// |
Use file -> save project, into \tut\tut_tutorial_terrain\source\TerrainBuilder\ directory, file name tut_tutorial_terrain.tv4p | Use file -> save project, into \tut\tut_tutorial_terrain\source\TerrainBuilder\ directory, file name tut_tutorial_terrain.tv4p | ||
Line 324: | Line 318: | ||
Layer manager -> tut_tutorial_project-heightmap.asc -> RMB -> terrain coordinates and properties | Layer manager -> tut_tutorial_project-heightmap.asc -> RMB -> terrain coordinates and properties | ||
- | {{ http:// | + | {{ https:// |
Type easting 200000 and northing 0, click ok | Type easting 200000 and northing 0, click ok | ||
- | {{ http:// | + | {{ https:// |
The terrain most likely disappears from view, so on layers manager click fit to view button. | The terrain most likely disappears from view, so on layers manager click fit to view button. | ||
- | {{ http:// | + | {{ https:// |
Now use mapframe properties -> processing -> rebuild terrain, this button actually generates the terrain into your project, previously you just imported the heightmap ASC. Don't forget to use rebuild terrain button. | Now use mapframe properties -> processing -> rebuild terrain, this button actually generates the terrain into your project, previously you just imported the heightmap ASC. Don't forget to use rebuild terrain button. | ||
Line 357: | Line 351: | ||
On mapframes dialog seen below: | On mapframes dialog seen below: | ||
- | {{ http:// | + | {{ https:// |
Double click on " | Double click on " | ||
Line 364: | Line 358: | ||
Tick export satellite texture\\ | Tick export satellite texture\\ | ||
Tick export surface mask\\ | Tick export surface mask\\ | ||
- | Make sure 4 materials per cell and save rvmat files in ASCII format are selected | + | Make sure " |
- | {{ http:// | + | {{ https:// |
Click generate layers button and wait... | Click generate layers button and wait... | ||
Line 396: | Line 390: | ||
To start buldozer click the " | To start buldozer click the " | ||
- | {{ http:// | + | {{ https:// |
Now your buldozer will start and if you have configured terrain builder correctly and your P: drive is setup properly, you'll see your terrain in buldozer window. | Now your buldozer will start and if you have configured terrain builder correctly and your P: drive is setup properly, you'll see your terrain in buldozer window. | ||
Line 402: | Line 396: | ||
Buldozer view, your looks different of course. | Buldozer view, your looks different of course. | ||
- | {{ http:// | + | {{ https:// |
You can browse around in your terrain, check out [[arma3: | You can browse around in your terrain, check out [[arma3: | ||
Line 417: | Line 411: | ||
You'll see terrain builder information dialog about status of your exported WRP file, it in our tutorial case says map size 512 and 0 objects placed on map. | You'll see terrain builder information dialog about status of your exported WRP file, it in our tutorial case says map size 512 and 0 objects placed on map. | ||
- | {{ http:// | + | {{ https:// |
Click ok. | Click ok. | ||
Line 441: | Line 435: | ||
class tut_tutorial_terrain | class tut_tutorial_terrain | ||
{ | { | ||
- | units[] = | + | units[] = {}; |
- | { | + | |
- | " | + | |
- | }; | + | |
weapons[] = {}; | weapons[] = {}; | ||
requiredVersion = 1; | requiredVersion = 1; | ||
Line 489: | Line 480: | ||
ilsTaxiIn[] = {}; | ilsTaxiIn[] = {}; | ||
ilsTaxiOff[] = {}; | ilsTaxiOff[] = {}; | ||
- | drawTaxiway = false; | + | drawTaxiway = 0; |
class SecondaryAirports{}; | class SecondaryAirports{}; | ||
class ReplaceObjects{}; | class ReplaceObjects{}; | ||
Line 502: | Line 493: | ||
vehicles[] = {}; | vehicles[] = {}; | ||
}; | }; | ||
+ | |||
+ | minTreesInForestSquare = 2; | ||
+ | minRocksInRockSquare = 2; | ||
class Subdivision{}; | class Subdivision{}; | ||
Line 508: | Line 502: | ||
}; | }; | ||
</ | </ | ||
+ | Important note: if you use pboProject later than v1.73 you must start the GUI, go to Setup and untick "-W warnings are errors" | ||
Line 522: | Line 517: | ||
Click Setup, check that engine drop down is for "Arma 3", every other config should be fine as default (you just installed Mikero Tools, right?). | Click Setup, check that engine drop down is for "Arma 3", every other config should be fine as default (you just installed Mikero Tools, right?). | ||
- | {{ http:// | + | {{ https:// |
Here is full exclude from pbo line that PMC uses: | Here is full exclude from pbo line that PMC uses: | ||
Line 535: | Line 530: | ||
Click Source folder button and browse to P: | Click Source folder button and browse to P: | ||
- | {{ http:// | + | {{ https:// |
Finally click Crunch button to start binarization. If all goes well pboProject should say: | Finally click Crunch button to start binarization. If all goes well pboProject should say: | ||
- | {{ http:// | + | {{ https:// |
With your time and date. | With your time and date. | ||
Line 561: | Line 556: | ||
In order to place objects you need to create an object template library which reads few properties from any added objects. | In order to place objects you need to create an object template library which reads few properties from any added objects. | ||
- | {{ http:// | + | {{ https:// |
Library manager -> template libraries -> RMB -> create library, or simply click " | Library manager -> template libraries -> RMB -> create library, or simply click " | ||
- | {{ http:// | + | {{ https:// |
Give the library a name "a3 structures" | Give the library a name "a3 structures" | ||
Line 573: | Line 568: | ||
Choose colors fill color: red, outline color: black, shape: rectangle | Choose colors fill color: red, outline color: black, shape: rectangle | ||
- | {{ http:// | + | {{ https:// |
Click ok | Click ok | ||
Line 599: | Line 594: | ||
- choose colors fill color: green, outline color: black, shape: ellipse, click ok | - choose colors fill color: green, outline color: black, shape: ellipse, click ok | ||
- | {{ http:// | + | {{ https:// |
Library templates created, please save your project. | Library templates created, please save your project. | ||
Line 614: | Line 609: | ||
On main menu make sure "view scene objects" | On main menu make sure "view scene objects" | ||
- | {{ http:// | + | {{ https:// |
Layers manager select objects tab, click "add new layer" button | Layers manager select objects tab, click "add new layer" button | ||
- | {{ http:// | + | {{ https:// |
Give it name like "rocks 1", click ok\\ | Give it name like "rocks 1", click ok\\ | ||
Line 624: | Line 619: | ||
Select lets say " | Select lets say " | ||
- | {{ http:// | + | {{ https:// |
LMB click on the scene view where you want to place this object | LMB click on the scene view where you want to place this object | ||
- | {{ http:// | + | {{ https:// |
This will place selected object on every LMB click. Notice that you might have to zoom in (mouse wheel) closer to see the placed object as its very small and is " | This will place selected object on every LMB click. Notice that you might have to zoom in (mouse wheel) closer to see the placed object as its very small and is " | ||
- | {{ http:// | + | {{ https:// |
Click connect to buldozer to open it so you can see how your placed objects look in buldozer. | Click connect to buldozer to open it so you can see how your placed objects look in buldozer. | ||
- | {{ http:// | + | {{ https:// |
You can select new object from any of the object template libraries and place them as you please. | You can select new object from any of the object template libraries and place them as you please. | ||
Line 667: | Line 662: | ||
You can also mass delete objects from the layers manager. RMB click on "rocks 1" layer and choose clear. | You can also mass delete objects from the layers manager. RMB click on "rocks 1" layer and choose clear. | ||
- | {{ http:// | + | {{ https:// |
Click yes button to delete all objects in the "rocks 1" layer. | Click yes button to delete all objects in the "rocks 1" layer. | ||
Line 675: | Line 670: | ||
RMB your layer you want to delete and choose " | RMB your layer you want to delete and choose " | ||
- | {{ http:// | + | {{ https:// |
Layer gets completely deleted. You cannot delete " | Layer gets completely deleted. You cannot delete " | ||
Line 686: | Line 681: | ||
Turn on view shapes button in main menu. | Turn on view shapes button in main menu. | ||
- | {{ http:// | + | {{ https:// |
Make sure add polygon button from main menu is selected, you see mouse cursor to change | Make sure add polygon button from main menu is selected, you see mouse cursor to change | ||
- | {{ http:// | + | {{ https:// |
Layers manager select shapes tab\\ | Layers manager select shapes tab\\ | ||
Click add new layer button button, give it name " | Click add new layer button button, give it name " | ||
- | {{ http:// | + | {{ https:// |
Now LMB click points to scene view to create a polygon | Now LMB click points to scene view to create a polygon | ||
- | {{ http:// | + | {{ https:// |
Once you're done double LMB click to close the polygon | Once you're done double LMB click to close the polygon | ||
- | {{ http:// | + | {{ https:// |
Layer manager select objects tab\\ | Layer manager select objects tab\\ | ||
Line 710: | Line 705: | ||
Click to select the polygon in the scene view | Click to select the polygon in the scene view | ||
- | {{ http:// | + | {{ https:// |
Click RMB -> Fill (add new objects) | Click RMB -> Fill (add new objects) | ||
- | {{ http:// | + | {{ https:// |
- fill area dialog select objects, available libraries untick "a3 structures" | - fill area dialog select objects, available libraries untick "a3 structures" | ||
Line 721: | Line 716: | ||
- clusterisation options -> object density 60 | - clusterisation options -> object density 60 | ||
- | {{ http:// | + | {{ https:// |
Click ok | Click ok | ||
Line 730: | Line 725: | ||
(note the image layer says "rocks 1" instead, no worries) | (note the image layer says "rocks 1" instead, no worries) | ||
- | {{ http:// | + | {{ https:// |
It is important to know the difference between shapes and objects layers. Very tricky :) | It is important to know the difference between shapes and objects layers. Very tricky :) | ||
Line 757: | Line 752: | ||
Destination file use " | Destination file use " | ||
- | {{ http:// | + | {{ https:// |
Next you need to create new empty directory, make this as: | Next you need to create new empty directory, make this as: | ||
Line 771: | Line 766: | ||
Now terrain processor is open and you are ready to setup your project. | Now terrain processor is open and you are ready to setup your project. | ||
- | {{ http:// | + | {{ https:// |
Click "add new task" button. | Click "add new task" button. | ||
Line 777: | Line 772: | ||
Select "area: high-density cluster" | Select "area: high-density cluster" | ||
- | {{ http:// | + | {{ https:// |
Click ok. | Click ok. | ||
Line 783: | Line 778: | ||
Click green plus button | Click green plus button | ||
- | {{ http:// | + | {{ https:// |
This adds new object. Click on the "new object name" to edit it and type in lets say " | This adds new object. Click on the "new object name" to edit it and type in lets say " | ||
Line 789: | Line 784: | ||
This " | This " | ||
- | {{ http:// | + | {{ https:// |
To add that template name to terrain processor, just click on the "New object name" and clear it out, then copy-paste CTRL-V the template name from terrain builder to it. Add what template/ | To add that template name to terrain processor, just click on the "New object name" and clear it out, then copy-paste CTRL-V the template name from terrain builder to it. Add what template/ | ||
Line 795: | Line 790: | ||
When you are done adding templates/ | When you are done adding templates/ | ||
- | {{ http:// | + | {{ https:// |
Save your terrain processor project. | Save your terrain processor project. | ||
Line 801: | Line 796: | ||
Click " | Click " | ||
- | {{ http:// | + | {{ https:// |
It takes a while depending on how large shape file you have and what kind of settings you used, don't click the ok button, just wait patiently. When terrain processor is done it will clearly say "All completed" | It takes a while depending on how large shape file you have and what kind of settings you used, don't click the ok button, just wait patiently. When terrain processor is done it will clearly say "All completed" | ||
- | {{ http:// | + | {{ https:// |
Please note that if terrain processor freezes or gets stuck, it just remains this way and nothing happens, so while I just said "wait patiently" | Please note that if terrain processor freezes or gets stuck, it just remains this way and nothing happens, so while I just said "wait patiently" | ||
Line 817: | Line 812: | ||
Use file -> import -> objects, use "pick files" button to browse into " | Use file -> import -> objects, use "pick files" button to browse into " | ||
- | {{ http:// | + | {{ https:// |
Click ok to import. Wait patiently while terrain builder imports, it takes a moment depending on how many hundreds of thousands (heh) objects are you importing. | Click ok to import. Wait patiently while terrain builder imports, it takes a moment depending on how many hundreds of thousands (heh) objects are you importing. | ||
- | {{ http:// | + | {{ https:// |
You can see the increased template library objects count after each object placed by terrain processor. | You can see the increased template library objects count after each object placed by terrain processor. | ||
Line 835: | Line 830: | ||
On main menu click "add polyline" | On main menu click "add polyline" | ||
- | {{ http:// | + | {{ https:// |
Now go to scene view, use LMB to place dots to create a polyline as a road. When done double LMB click to end the road. | Now go to scene view, use LMB to place dots to create a polyline as a road. When done double LMB click to end the road. | ||
- | {{ http:// | + | {{ https:// |
Your first road polyline is done. Now you noticed that polylines do not " | Your first road polyline is done. Now you noticed that polylines do not " | ||
Line 847: | Line 842: | ||
You can edit polyline (which is your road) by making sure "add polyline" | You can edit polyline (which is your road) by making sure "add polyline" | ||
- | {{ http:// | + | {{ https:// |
Then LMB click to one polyline point, not the line but a point. LMB press and drag the point to move it, release LMB to drop it to a new position. | Then LMB click to one polyline point, not the line but a point. LMB press and drag the point to move it, release LMB to drop it to a new position. | ||
- | {{ http:// | + | {{ https:// |
If you click the line instead of a point, then the whole polyline will move, be careful on your selection. | If you click the line instead of a point, then the whole polyline will move, be careful on your selection. | ||
Line 862: | Line 857: | ||
RMB your road polyline and choose " | RMB your road polyline and choose " | ||
- | {{ http:// | + | {{ https:// |
On Shapes Database dialog click " | On Shapes Database dialog click " | ||
- | {{ http:// | + | {{ https:// |
New field dialog give name: " | New field dialog give name: " | ||
- | {{ http:// | + | {{ https:// |
Click new, new field dialog give name: " | Click new, new field dialog give name: " | ||
Line 876: | Line 871: | ||
Click the ORDER cell, type number 0 | Click the ORDER cell, type number 0 | ||
- | {{ http:// | + | {{ https:// |
Shapes database dialog, click ok button to close | Shapes database dialog, click ok button to close | ||
Line 918: | Line 913: | ||
mainMat = " | mainMat = " | ||
map = " | map = " | ||
+ | AIpathOffset = 0; | ||
}; | }; | ||
class Road0002 | class Road0002 | ||
Line 978: | Line 974: | ||
Start buldozer and in there press 1 which is buldozertools " | Start buldozer and in there press 1 which is buldozertools " | ||
+ | |||
+ | **Edit config.cpp newRoadsShape** | ||
+ | |||
+ | In order to get your new roads in-game you need to edit newRoadsShape line in the config.cpp. Find the line: | ||
+ | <code cpp> | ||
+ | newRoadsShape = ""; | ||
+ | </ | ||
+ | And edit, like this: | ||
+ | <code cpp> | ||
+ | newRoadsShape = " | ||
+ | </ | ||
+ | Now your roads show up arma3 in-game (note: this has nothing to do with seeing roads in buldozer). | ||
====== Notes ====== | ====== Notes ====== | ||
- | PMC ArmA 3 Ultimate Terrain Tutorial | + | PMC ArmA 3 Ultimate Terrain Tutorial |
- | You can use [[http:// | + | You can use [[https:// |
arma3/terrain/ultimate-terrain-tutorial.txt · Last modified: 2025/07/01 05:31 by snakeman