[{"id":481,"title":"SPOTREP #00119","created_at":"2025-06-25 11:46:07","excerpt":"<p>Hotfix 2.20 (Miscellaneous Fixes)<br><\/p>","content":"<p>FROM: High Command<br>TO: Arma 3 Users<br>UNIT: Main Branch<br>ACTIVITY: Hotfix 2.20 (Miscellaneous Fixes)<br>SIZE: ~62 MB \/ ~24 MB<br><\/p>\n<h1>NOTES<\/h1>\n<ul>\n\t<li>For more information about the performance optimizations, please read our <a href=\"https:\/\/dev.arma3.com\/post\/oprep-performance-optimizations-in-220\" target=\"\">technical deep dive blog<\/a> (which also mentions updates to the game's <a href=\"https:\/\/store.steampowered.com\/app\/107410\/Arma_3\/\" target=\"\">system requirements<\/a>).<\/li>\n\t<li>Contact consists of 2 data packs \/ folders:\n\t<ul>\n\t\t<li>Contact (via <i>PLAY CONTACT<\/i> or <i>-mod=Contact<\/i>): for the singleplayer \"First Contact\" campaign experience (accessible only to owners - optionally loaded)<\/li>\n\t\t<li>Contact (Platform): for most other use cases, including sandbox multiplayer (loaded by default for all players)<\/li>\n\t<\/ul><\/li>\n\t<li>Consider using the Steam client option to verify the integrity of the local game cache to avoid corrupted data after downloading this update.<\/li>\n\t<li>Consider defragmenting your HDD after downloading large updates.<\/li>\n\t<li>Updating a deeply moddable game and its platform is not without risks. We use various methods to communicate upcoming changes to our awesome modding community, such as via the <a href=\"https:\/\/dev.arma3.com\/\" target=\"\">Dev Hub<\/a>. We also co-operate directly on troubleshooting, and we offer an opportunity to test updates via our <a href=\"https:\/\/dev.arma3.com\/rc-branch\" target=\"\">Release Candidate tests<\/a>. Modders, server administrators, and other members of the community do their best to prepare for updates and to address issues post-release as quickly as possible. Please be mindful of some interruptions (especially in the first hours \/ days after a release) while we all work to improve the game together.<\/li>\n\t<li>A <i>Legacy Build<\/i> Steam branch is available for advanced users. It contains the previous significant main branch version (2.18). It can be used to compare specific changes between major releases. The access code for this branch is: <i>Arma3Legacy218<\/i><\/li>\n\t<li>This update does not yet apply to <a href=\"http:\/\/dev.arma3.com\/ports\" target=\"\">the experimental Mac client ports<\/a>.<\/li>\n\t<li>You can find the servers in the Steam library (switch the filter to \"Tools\") - \"Arma 3 Server\" (based on your OS, it will download the Windows or Linux version).\n\t<ul>\n\t\t<li>Administrators can also use the command-line <a href=\"https:\/\/developer.valvesoftware.com\/wiki\/SteamCMD\" target=\"\">SteamCMD<\/a> utility. The app ID is to be 233780.<\/li>\n\t\t<li>NVIDIA GameWorks\u2122 Technology provided under license from NVIDIA Corporation. Copyright \u00a9 2002-2018 NVIDIA Corporation. All rights reserved. NVIDIA\u00ae and PhysX\u00ae are trademarks of NVIDIA Corporation and are used under license.<\/li>\n\t<\/ul><\/li>\n\t<li>In case of problems, please check the <a href=\"http:\/\/support.bistudio.com\/arma-3\" target=\"\">Bohemia Interactive support F.A.Q.<\/a>, <a href=\"http:\/\/arma3.com\/faq\" target=\"\">Arma 3 F.A.Q.<\/a>, <a href=\"http:\/\/www.battleye.com\/support\/faq\/\" target=\"\">BattlEye F.A.Q.<\/a>, or <a href=\"https:\/\/arma3.com\/launcher\/troubleshooting\" target=\"\">Launcher troubleshooting guide<\/a>.<\/li>\n\t<li>You can help us to further improve the game by posting your feedback on the <a href=\"http:\/\/feedback.arma3.com\/\" target=\"\">Feedback Tracker<\/a>.<br><br><\/li>\n<\/ul>\n<h1>CHANGELOG<\/h1>\n<h2>DATA<\/h2>\n<ul>\n\t<li>Added: <a href=\"https:\/\/community.bistudio.com\/wiki\/DIK_KeyCodes\" target=\"\">DIK scan code<\/a> defines for F16-F24 keys<\/li>\n\t<li>Tweaked: Restored DAGR missiles on AH-99 in its default loadout - <a href=\"https:\/\/feedback.bistudio.com\/T192700\" target=\"\">FT-T192700<\/a><\/li>\n\t<li>Fixed: Penetration materials on the MH-80 fuel pod (thanks <i>Trager<\/i>)<\/li>\n\t<li>Fixed: AH-99 without pylons still had pylon collisions with characters - <a href=\"https:\/\/feedback.bistudio.com\/T192733\" target=\"\">FT-T192733<\/a><\/li>\n\t<li>Fixed: Missing collision of characters with DAR \/ DAGR pods<\/li>\n\t<li>Fixed: Collision of characters with the external fuel pod<br><\/li>\n<\/ul>\n<h2>ENGINE<\/h2>\n<ul>\n\t<li>Fixed: Difficulty option checkboxes were not saving correctly - <a href=\"https:\/\/feedback.bistudio.com\/T192324\" target=\"\">FT-T192324<\/a><\/li>\n\t<li>Fixed: <a href=\"https:\/\/community.bistudio.com\/wiki\/remoteExec\" target=\"\">remoteExec<\/a> failing when used with the <i>#mission<\/i> restart <a href=\"https:\/\/community.bistudio.com\/wiki\/serverCommand\" target=\"\">serverCommand<\/a> - <a href=\"https:\/\/feedback.bistudio.com\/T190364\" target=\"\">FT-T190364<\/a><\/li>\n\t<li>Fixed: <i>stringtable.bin<\/i> would not fall back to \"Original\" &gt; \"English\" &gt; first language, if the desired language is not included in the stringtable (thanks <i>thegamecracks<\/i>)<\/li>\n\t<li>Fixed: Possible crash when AI is repairing a vehicle (thanks <i>Emperor<\/i>)<\/li>\n\t<li>Fixed: Post Processing effects <i>Sharpness<\/i>, <i>Resolution<\/i>, <i>DepthOfField<\/i> and <i>Fisheye<\/i> would get lost when changing video settings (thanks <i>POLPOX<\/i>)<\/li>\n\t<li>Fixed: Helicopters would not land on a helipad placed on an object (thanks <i>Ansible2<\/i>)<\/li>\n\t<li>Fixed: <a href=\"https:\/\/community.bistudio.com\/wiki\/ctrlSetEventHandler\" target=\"\">ctrlSetEventHandler<\/a> started returning the Event Handler index (it is back to returning nothing now)<\/li>\n\t<li>Reverted: <a href=\"https:\/\/community.bistudio.com\/wiki\/setUnitLoadout\" target=\"\">setUnitLoadout<\/a> will now abort if a unit is in the process of switching weapons (may be revisited in future) - <a href=\"https:\/\/feedback.bistudio.com\/T167015\" target=\"\">FT-T167015<\/a><br><\/li>\n<\/ul>\n<h2>SERVER<\/h2>\n<ul>\n\t<li>Updated: Stand-alone Windows Dedicated Server (2.20)<\/li>\n\t<li>Updated: Stand-alone Linux Dedicated Server (2.20)\n\t<ul>\n\t\t<li>The data in <i>-mod=contact<\/i> is not fully multiplayer compatible (it is meant for the singleplayer campaign experience); we recommend only hosting servers with it for special use cases\n\t\t<ul>\n\t\t\t<li>This data is signed by a new A3C key whose presence can be used to control what client data is allowed on the server<\/li>\n\t\t<\/ul><\/li>\n\t\t<li>Known issue: Steam client modifies the <i>steam_appid.txt<\/i> file incorrectly. In case of issues, verify its content is: <b>107410<\/b><\/li>\n\t\t<li>Known issue: Sometimes the add-ons are loaded from the wrong installation (e.g. main game)\n\t\t<ul>\n\t\t\t<li>Try adding <i>-mod=curator;kart;heli;mark;expansion;jets;argo;orange;tacops;tank;enoch;aow<\/i> to your <i>arma3server.exe<\/i> shortcut<\/li>\n\t\t<\/ul><\/li>\n\t<\/ul><\/li>\n<\/ul>","published":"1","hide_from_home_feed":null,"url":"spotrep-00119","post_header_image":null,"animation_interval":"200","author":"Joris-Jan van 't Land","post_thumb":null,"type":"spotrep","updated_at":"2025-06-25 13:42:51","public_date":"2025-06-25 13:37:00"},{"id":480,"title":"OPREP - PERFORMANCE OPTIMIZATIONS IN 2.20","created_at":"2025-06-17 12:45:24","excerpt":"<p>An analysis of recent multithreading improvements for a smoother game experience<br><\/p>","content":"<p><b>UNIT<\/b>: Dedmen, Programmer, Programming<br>\n<b>TO<\/b>: Arma 3 Users<br>\n<b>OPSUM<\/b>: An analysis of recent multithreading improvements for a smoother game experience<\/p>\n\n<h2>SITREP<\/h2>\n\n\n\n\n<p>Welcome to this technical deep dive into <strong>Arma 3<\/strong>'s performance optimizations in <a href=\"https:\/\/dev.arma3.com\/post\/spotrep-00118\"><strong>update 2.20<\/strong><\/a>. Before handing you over to this blog's actual author, I wanted to share a few words on the state of Live Ops. Yes, REPception is now a thing.<\/p>\n\n\n\n\n<p>Some 12 years since its initial release, we still find ourselves releasing free platform updates to the game. This is something we can hardly believe ourselves, and we think you'll agree that it's a splendid situation! Thanks to the continued support from the game's community and Bohemia Interactive leadership, we're still in a position to offer some limited Live Ops development. The hands-on team can be counted on one hand now, but we should not forget it takes a bigger support network to keep things flowing smoothly. Publishing, Quality Assurance, Localization, Legal, IT, and more teams and individuals have a hand in getting these updates out. Meanwhile, some of our longer-term plans, as outlined in <a href=\"https:\/\/dev.arma3.com\/post\/sitrep-00242\">older SITREPs<\/a>, are still on our list. Their roll-out has been slower than anticipated, but that's in part due to it just not being necessary to switch to the next phase of Arma 3's life cycle. Even now that we're steadily traveling the road towards <a href=\"https:\/\/arma4.com\/\">Arma 4<\/a>, there is still plenty of life left in our pinnacle <em><strong>Real Virtuality<\/strong><\/em> (RV) title.<\/p>\n\n\n\n\n<p>Those of you who are on our <a href=\"https:\/\/discord.com\/invite\/arma\">Discord server<\/a> (<em>#perf_prof_branch<\/em> channel) may have been following along with the optimizations now released to main branch in 2.20. You may have already enjoyed Programmer <strong><em>\"Dedmen\"<\/em><\/strong>'s incredible monologues on specific issues, solutions, fixes, and a myriad of other RV topics. You may have also wondered why these optimizations only arrive now. There are many reasons for that, some of which Dedmen will outline below. It's hard to compare the prime-time development circumstances a decade ago to how things are now. There are effectively no hard deadlines for Arma 3 anymore, so there is ample time to investigate and experiment. There also aren't hundreds of commits from tens of people every day, with a constant stream of new features arriving and bugs being squashed. We are building upon the work of legends, going all the way back to the first lines of code for RV by <em>Ond\u0159ej \u0160pan\u011bl<\/em>.<\/p>\n\n\n\n\n<p>Nonetheless, I want to give massive kudos to the incredible work by our talented Dedmen. He has accomplished low-level and risky changes that I would have never anticipated at this stage. They will not magically give everyone the same performance boost across the board, but don't just stare blindly at the numbers. Play the game. Most everyone who's tried the update has said the game feels smoother. Thank you for the passionate and hard work, Dedmen. And a big thanks to everybody who has helped us test these changes via <strong><a href=\"https:\/\/dev.arma3.com\/profiling-branch\">Profiling branch<\/a><\/strong> as well. Your feedback has been very important in testing under real-world conditions.<\/p>\n\n\n\n\n<p>Enough from me, let's finally get to the meat of this Operations Report.<\/p>\n\n\n\n\n<p>- Joris-Jan van 't Land, Project Lead<\/p>\n\n\n\n\n<h2>FRAMES<\/h2>\n\n\n\n\n<p>First of all, <strong>we did not \"add\" multithreading in update 2.20<\/strong>. The RV engine has had multithreading since <a href=\"https:\/\/store.steampowered.com\/app\/33900\/Arma_2\/\">Arma 2<\/a>. But <strong>we did overhaul all of our multithreading code<\/strong> and made some optimizations that are further detailed below.<\/p>\n\n\n\n\n<p>The main focus of our optimizations was to fix lag spikes and raise the minimum Frames per Second (FPS). The maximum FPS may not actually be noticeably higher, and in some cases (at above 100 FPS) it may even be slightly lower than before. But the gameplay should still <strong>feel significantly smoother<\/strong>.<\/p>\n\n\n\n\n<p>This is also visible in these graphs recorded using <em><a href=\"https:\/\/www.capframex.com\/\">CapFrameX<\/a><\/em> on the excellent <em><strong><a href=\"https:\/\/steamcommunity.com\/sharedfiles\/filedetails\/?id=375092418\">Yet Another Arma Benchmark<\/a> (YAAB)<\/strong><\/em> by <em>Sams<\/em>. The frame times should feel more consistent, with fewer spikes:<\/p>\n\n\n<p>\n\n[thumb]2.20_OPREP_1.jpg[\/thumb]<\/p><p>[thumb]2.20_OPREP_2.jpg[\/thumb]\n\n<\/p>\n\n\n<p>The average FPS, meanwhile, has only received a minor bump. And that bump is expected to be even less when mods get involved.<\/p>\n\n\n<p>\n\n[thumb]2.20_OPREP_3.jpg[\/thumb]&nbsp;<\/p><p>[thumb]2.20_OPREP_4.jpg[\/thumb]\n\n<\/p>\n\n\n<h2>COMMAND-LINEAGE<\/h2>\n\n\n\n\n<p>From the feedback on Profiling branch we have seen several times that players had issues caused by setting <strong>wrong <a href=\"http:\/\/community.bistudio.com\/wiki\/Arma_3:_Startup_Parameters\">command-line parameters<\/a><\/strong>. That was typically because an old optimization guide told them it would make their game run better. But now that the game is more multithreaded than it used to be, bad settings have a more noticeable and potentially negative impact.<\/p>\n\n\n\n\n<p>If you are setting custom parameters, please verify that you understand them and you are setting them correctly. Here are some guidelines:<\/p>\n\n\n\n<ul>\n\n\t\n\t\n\t<li>Only use the <a href=\"https:\/\/community.bistudio.com\/wiki\/Arma_3:_Startup_Parameters#cpuCount\">-cpuCount<\/a> parameter if you want to intentionally limit how many CPU cores the game can use. The engine can already automatically detect how many cores you have, so you do not need to tell it that.<\/li>\n\n\t\n\t\n\t<li>The <a href=\"https:\/\/community.bistudio.com\/wiki\/Arma_3:_Startup_Parameters#enableHT\">-enableHT<\/a> parameter has no effect if -cpuCount is set, so setting both is wrong. Our tests have shown that -enableHT performs worse, but it may depend on your hardware. You can use <a href=\"https:\/\/steamcommunity.com\/sharedfiles\/filedetails\/?id=375092418\">YAAB<\/a> to test if it actually helps in your case.<\/li>\n\n\t\n\t\n\t<li>The <a href=\"https:\/\/community.bistudio.com\/wiki\/Arma_3:_Startup_Parameters#exThreads\">-exThreads<\/a> parameter should not be used. If you have a 4 core CPU or better, all of them are already enabled by default. And if you have fewer than 4 cores, enabling more exThreads is more likely to cause harm than to be helpful.<\/li>\n\n\t\n\t\n\t<li>If you are using an external tool to adjust the \"Process Affinity\", which reduces the number of CPU cores the game can access, you need to use -cpuCount to inform the game about how many cores it can actually use.<\/li>\n\n\n\n<\/ul>\n\n\n\n\n<h2>SYSTEM REQUIREMENTS<\/h2>\n\n\n\n\n<p>There is one more bit of housekeeping to get out of the way. Update 2.20 will be the <strong>last version of Arma 3 supporting its 32-bit application<\/strong> to a reasonable degree. We will no longer maintain both builds, and will focus any future efforts purely on 64-bit. The <a href=\"https:\/\/store.steampowered.com\/hwsurvey\/Steam-Hardware-Software-Survey-Welcome-to-Steam\">vast majority of Steam users<\/a> and Arma 3 players have long since switched over, and we hope everyone else will too, especially those who may be unintentionally using the 32-bit version. We will keep a frozen 2.20 legacy branch available on Steam for those who really need it, but it will unfortunately not be possible for it to be forward-compatible (no multiplayer with newer versions). Our motivation for doing this is simply that it has been increasingly restrictive to maintain 32-bit compatibility. It has restricted the usage of newer C++ language features, certain optimizations, etc. Deprecating support will save our very small remaining Live Ops team valuable time, and it will unlock some more optimization opportunities. In a similar vein, we will also <strong>drop support for Windows 7 and 8<\/strong>, just like <a href=\"https:\/\/help.steampowered.com\/en\/faqs\/view\/4784-4F2B-1321-800A\">Steam has already done<\/a> for its client.<\/p>\n\n\n\n\n<p>To reflect the above, as well as the hardware advancements and availability over the past decade, we have finally <strong>refreshed Arma 3's minimum and recommended system requirements<\/strong> (as seen at the bottom of the <a href=\"https:\/\/store.steampowered.com\/app\/107410\/Arma_3\/\">Steam store page<\/a> f.e.). While the original minimum settings were validated to run the game, we now raised them to a level that is more realistic for an entry-level experience. The recommended requirements meanwhile were bumped a bit more, so that such configurations should actually run the game well. That said, it\u2019s possible that setups lower than the new minimum still somehow run the game, but we hope this is a better reflection of the current state of Arma 3 for new purchasers.<\/p>\n\n\n\n\n<h2>OLD VERSUS NEW<\/h2>\n\n\n\n\n<p>To understand what is new since update 2.20, we first need to understand how the game has worked in the past.<\/p>\n\n\n\n\n<p>The core of multithreading is the so-called <strong>\"job system<\/strong><strong>\"<\/strong>. Its purpose is to take our tasks (jobs) and to distribute them over all the CPU cores we have available, so they can run in parallel.<\/p>\n\n\n\n\n<p>The design of the job system decides how we are able to utilize it, and the old design (in use since Arma 2) worked, but it was quite primitive. It only allowed submitting jobs as one block, and there could only be one block active at a time. This means all jobs had to be submitted at once, after which we needed to wait for the jobs to be finished, before we could continue doing other things.<\/p>\n\n\n\n\n<p>This is also called \"Fork-Join\".<\/p>\n\n\n\n\n<p>The system worked fine in bulk processing, for example for particle effect simulation. We can split 1000 particles into five jobs, and run them in parallel, each thread handling 200 particles.<\/p>\n\n\n\n\n<p>This style of multithreading was used in quite a few places, and if we just look at these particle effects in isolation, then this solution seems perfect. We now get the same particles done, in 1\/5th of the time. That is already great, but can we do better?<\/p>\n\n\n\n\n<p>Game engines rarely do just one thing. If we look at what surrounds the <strong>particle simulation<\/strong> as a case study, we get to see the issue with this approach. The actual code around it does the following tasks:<\/p>\n\n\n\n<ul>\n\n\t\n\t\n\t<li>Simulate sounds<\/li>\n\n\t\n\t\n\t<li>Update wind emitters (helicopter blades cause wind vortices, which influence particles)<\/li>\n\n\t\n\t\n\t<li>Simulate \"safe\" particles (these can run in parallel with each other)<\/li>\n\n\t\n\t\n\t<li>Simulate \"scripted\" particles (these execute scripts, which we cannot do in parallel; I will explain the reasons for this below)<\/li>\n\n\t\n\t\n\t<li>Delete expired particles (after all simulation is done)<\/li>\n\n\t\n\t\n\t<li>Simulate Artificial Intelligence (AI)<\/li>\n\n\t\n\t\n\t<li>Present the previous frame (that we have rendered in parallel) to the GPU<\/li>\n\n\n\n<\/ul>\n\n\n\n\n<p>In 2.18 and prior, that would look like this:<\/p>\n\n\n<p>\n\n[thumb]2.20_OPREP_5.jpg[\/thumb]\n\n<\/p>\n\n\n<p>Our particles are nicely parallelized, though things are not evenly distributed. Because we have to cut up the tasks beforehand, balancing them perfectly does not always work out. But there is quite a lot of empty space where our extra CPU cores are just waiting without doing any work for us. We do not want to waste this time.<\/p>\n\n\n\n\n<p>To find out how we can better distribute the work, we need to look at the constraints that apply to our tasks. As we touched upon above, scripted particles cannot run in parallel, and we can only delete expired particles after the simulation is done. Our other tasks also have similar constraints with regards to when they can run in relation to each other.<\/p>\n\n\n\n<ul>\n\n\t\n\t\n\t<li>Sounds do not care about particles, but they cannot run in parallel to AI.<\/li>\n\n\t\n\t\n\t<li>\"Safe\" particles can run in parallel to each other, and must be finished before deleting expired particles.<\/li>\n\n\t\n\t\n\t<li>\"Scripted\" particles cannot run in parallel to each other, but the whole task could run in parallel to the safe particles, and it must be finished before deleting expired particles. It also cannot run in parallel to sound or AI.<\/li>\n\n\t\n\t\n\t<li>AI cannot run in parallel to sounds or scripted particles. It does not care about other particles (AI vision is done elsewhere).<\/li>\n\n\t\n\t\n\t<li>Presenting the frame is not related to any of this. But it must be done only on the main thread, and it must be finished before we continue.<\/li>\n\n\n\n<\/ul>\n\n\n\n\n<p>Now we can try to puzzle these tasks together, in a way that we distribute them across as many cores as possible, while also keeping all of their constraints in check. We could, for example, run sounds and \"safe\" particles together on the worker threads. And as soon as sounds are done, we can run either \"scripted\" particles or AI. Meanwhile, we can present the frame on the main thread, and then delete expired particles once all particles are done.<\/p>\n\n\n\n\n<p>But this is where our old job system blocks us, since we cannot run different kinds of tasks in parallel. We also cannot add some job into the mix while another is running. We also cannot do something different on the main thread while the jobs are running. And it\u2019s not just about particles; the same kind of problem appears in other places. Something as simple as \"run this task in parallel, do something else, then later grab its result\" was not doable. If we wanted to solve this problem, we needed a new solution.<\/p>\n\n\n\n\n<p>There are quite a few existing libraries, like <em><a href=\"https:\/\/github.com\/taskflow\/taskflow\">Taskflow<\/a><\/em> or <em><a href=\"https:\/\/github.com\/dougbinks\/enkiTS\">enkiTS<\/a><\/em>, but in the end we decided to go with <em><strong><a href=\"https:\/\/enfusionengine.com\/\">Enfusion<\/a><\/strong><\/em>'s system. This is a job system our engine team had already developed in-house for new games like <a href=\"https:\/\/store.steampowered.com\/app\/1874880\/Arma_Reforger\/\">Arma Reforger<\/a> and Arma 4. It does the things we need, so how cool is it that Arma 3 can still benefit from such technology!<\/p>\n\n\n\n\n<p>The Enfusion job system is graph-based. So instead of providing a block of tasks, we can set up a graph of connected tasks. This lets us puzzle together our tasks like described above.<\/p>\n\n\n<p>\n\n[thumb]2.20_OPREP_6.jpg[\/thumb]\n\n<\/p>\n\n\n<p>If we give this graph to the job system, and execute it, we will see something like this:<\/p>\n\n\n<p>\n\n[thumb]2.20_OPREP_7.jpg[\/thumb]\n\n<\/p>\n\n\n<p>All of the task blocks and the gaps between blocks are the same as before. Because the task system now knows all the dependencies, it can grab the next task to work on whenever it has some free time. We did the same work, but utilized more of our CPU cores, and we got done with it in about half the time.<\/p>\n\n\n\n\n<p>Previously, our multithreading capabilities were just being able to cut up one block of work into chunks and running them in parallel. By utilizing Enfusion's system, we can now take whole blocks of work, and mesh them together like a giant puzzle.<\/p>\n\n\n\n\n<p>We'll see in the next section how we can use this to multithread things that were previously not possible.<\/p>\n\n\n\n\n<h2>APPLYING NEW CAPABILITIES<\/h2>\n\n\n\n\n<p><strong>Artificial Intelligence (AI)<\/strong> is a big topic for Arma. Players always want more of it, but they also do not want to pay the performance hit for it. While rendering and simulation are often quite stable, we see the biggest lag spikes happening in AI calculations. So, if we wanted to improve performance, we had to focus on that area.<\/p>\n\n\n\n\n<p>The simple approach, one that we would love if it actually worked, would be to compute all AI groups in parallel. But sadly (or not, because this is what makes all the AI mods, which we love so much, possible), AI is running scripts. And we cannot parallelize that. Let\u2019s take a look and try to figure out what we can do.<\/p>\n\n\n\n\n<p>This is a typical AI simulation cycle with a few groups:<\/p>\n\n\n<p>\n\n[thumb]2.20_OPREP_8.jpg[\/thumb]\n\n<\/p>\n\n\n<p>This is greatly simplified; there are a lot of steps missing, and I won\u2019t explain most things here.<\/p>\n\n\n\n\n<p>Like we did before with the particles, we again have to consider the constraints here.<\/p>\n\n\n\n<ul>\n\n\t\n\t\n\t<li>The Finite State Machine (FSM) updates cannot run in parallel.<\/li>\n\n\t\n\t\n\t<li>The \"Scanning for potential targets\" and \"Preparing the Pathfinding Grid\" tasks can.<\/li>\n\n\t\n\t\n\t<li>And the \"Track Targets\" task that every individual unit is doing, also cannot be parallel.<\/li>\n\n\n\n<\/ul>\n\n\n\n\n<p>We cannot run the groups in parallel because the FSM updates would conflict. We cannot even run the units in that first group in parallel, because the \u201cTrack Targets\u201d would conflict.<\/p>\n\n\n\n\n<p>What we would love to do is to somehow pull out the multithreadable parts. Previously, that was not technically possible, but now we have new options. What we would need is a way to run through all groups, collect all the tasks, then run the tasks in parallel, and finally run through the groups a second time and feed them with the results of the tasks that we ran for them.<\/p>\n\n\n\n\n<p>One way would be to split up the AI simulation into chunks, and then run through the groups multiple times. First only run the chunks that give us jobs, then do them, then run through the rest and provide the results. But due to how complex our AI is, that would take weeks of time, and it would be very likely we break something in the process.<\/p>\n\n\n\n\n<p>The other way would be if we could somehow pause the group simulation in the middle, like scheduled scripts do. We'd launch the job and insert a 'waitUntil', and continue with the other groups. And that is actually a thing we can do. Bohemia Interactive is actually doing something like this in DayZ. That game has animation in the middle of simulation. Animations can run in parallel, but simulations cannot. It uses the same approach. It runs the simulation until it gets to the animation, starts the animation as a job to run on another CPU core, pauses the simulation and instead continues with the next simulation. It does this until it went a whole round through all simulations. Then it runs a second round. This time it fetches the job results (potentially waiting for it to finish still), applies the animation, and continues with the second half of simulation.<\/p>\n\n\n\n\n<p>This magic is called <strong>\"coroutines<\/strong><strong>\"<\/strong>, and they are basically the same thing as scheduled scripts. They can be paused at any point, and let you continue with the next coroutine. And their second nice characteristic is that we can decide where to resume them, meaning we can move them between multiple CPU cores. This also allows for running the groups multithreaded. But then before the not multithreadable part, we can suspend them and continue them on only a single core.<\/p>\n\n\n\n\n<p>To cut it short, this is how it would look (excluding Group 1 because it is special):<\/p>\n\n\n<p>\n\n[thumb]2.20_OPREP_9.jpg[\/thumb]\n\n<\/p>\n\n\n<p>The more groups we have, the more work we can extract and parallelize.<\/p>\n\n\n\n\n<p>For group 1 we are using a slightly different solution: we split all the units and actually run them in parallel directly. But then when we suspend them, we move them to the main thread to process the rest on there.<\/p>\n\n\n<p>\n\n[thumb]2.20_OPREP_10.jpg[\/thumb]\n\n<\/p>\n\n\n<p>Now we would like it if we could run this scanning in parallel to the other groups being processed, like we did for the pathfinding preparations above. Why that ended up not working, I will explain more below.<\/p>\n\n\n\n\n<p>Using these techniques:<\/p>\n\n\n\n<ul>\n\n\t\n\t\n\t<li>Job dependency graph to mesh tasks while also considering their constraints<\/li>\n\n\t\n\t\n\t<li>Coroutines to easily extract parallelizable chunks out of a bigger non-parallelizable task<\/li>\n\n\t\n\t\n\t<li>Multithreaded coroutines, for tasks that are mostly parallelizable, but only have a small chunk at the end that cannot be<\/li>\n\n\n\n<\/ul>\n\n\n\n\n<p>We were able to improve quite a few areas of the engine. It is just a matter of finding all the spots.<\/p>\n\n\n\n\n<p>Another example is <strong>explosions<\/strong>, which will do line intersects to all nearby objects to check if they should be hit by damage, or if they are behind cover that protects them. We saw this causing lag spikes. We first had to make line intersect safe to run in parallel, which required some changes to the way we process animations (which actually caused other problems, so we had to go through several iterations on Profiling branch to iron out all the issues). After that, we could run all these checks in parallel. However, again, it is not as simple as that. We do not only do a line intersect per object. It is once more a complex task, made from a mix of elements that are safe to multithread, and some that are not.<\/p>\n\n\n\n\n<p>For each object, we do these steps:<\/p>\n\n\n\n<ul>\n\n\t\n\t\n\t<li>Check if the object is in range of the explosion (safe)<\/li>\n\n\t\n\t\n\t<li>Check if object has \"HitExplosion\" \/ \"HitPart\" <a href=\"https:\/\/community.bistudio.com\/wiki\/Arma_3:_Event_Handlers\">Event Handlers<\/a>, and if yes, then run them (not safe)<\/li>\n\n\t\n\t\n\t<li>Check line of sight to see if the object is behind cover (safe)<\/li>\n\n\t\n\t\n\t<li>If it is not behind cover, we apply damage and call the Explosion Event Handler (not safe)<\/li>\n\n\n\n<\/ul>\n\n\n\n\n<p>But here we can apply the technique we developed for the group\u2019s target scanning: multithreaded coroutines. Instead of moving back to the main thread at the end, we play a round of ping-pong,  kicking the tasks back and forth between singlethreaded and multithreaded.<\/p>\n\n\n\n\n<p>We start out multithreaded and do the range check. If the object does not have Event Handlers (which most objects don\u2019t), we can just skip that part and continue to the line of sight check. And when the object is behind cover (which they often are) we are already done, and we were able to run this whole task without having to go back to being singlethreaded.<\/p>\n\n\n\n\n<p>If the object has Event Handlers, and is not behind cover, we pay the cost of having to move it around. But even with that, because we can extract the expensive line of sight check, we still come out ahead.<\/p>\n\n\n\n\n<h2>MULTITHREADING OPPORTUNITIES<\/h2>\n\n\n\n\n<p>As we\u2019ve seen in the examples above, it is often not as simple as it seems at first. The main factor of whether something can be multithreaded, is whether multiple threads would try to access the same data at the same time.<\/p>\n\n\n\n\n<p>Scripts especially are a problem, because they can do anything and affect basically everything. We could multithread some script commands internally (<a href=\"https:\/\/community.bistudio.com\/wiki\/nearObjects\">nearObjects<\/a>, <a href=\"https:\/\/community.bistudio.com\/wiki\/lineIntersects\">lineIntersects<\/a>, and some others), but the interaction between multiple script commands is where most of the time is spent. We did optimize scripts in general a bit over the last few years, but there is not much more left to be squeezed out of it.<\/p>\n\n\n\n\n<p>For example, let's look again at the group simulation we mentioned above. Could we run Group 1 in parallel  to all the others? Like this for example:<\/p>\n\n\n<p>\n\n[thumb]2.20_OPREP_11.jpg[\/thumb]\n\n<\/p>\n\n\n<p>And yes, we \"can\". This did work in our tests, and we released it to Profiling branch for testing. But very shortly after that, the first crash reports started coming in. While we were scanning for targets, an AI mod ran a script in the group FSM, which spawned new units. Adding new units conflicted with the target scanning, which scans through the list of units, and caused the game to crash.<\/p>\n\n\n\n\n<p>For the vanilla base game without mods, this would have been fine, because we don\u2019t have scripts causing such problems. But mods can do everything and anything, and we need to be very careful with what we do.<\/p> \n\n\n\n\n<p>A very big part of the game\u2019s frametime is simulation for objects (units, vehicles, buildings, etc.). There would be the biggest potential for multithreading, but these are also the hardest to solve. For one, there are scripts and Event Handlers all over the place, but also just the engine simulation has lots of interconnected parts. For example, a unit taking an item out of a box; we cannot have multiple units doing that at the same time. We would need to separate simulation into safe and unsafe parts.<\/p> \n\n\n\n\n<p>For AI simulation that was relatively simple. The heaviest parts are easy to spot and easy to extract. For object simulation, there are generally no heavy parts to take out. Simulation of one object is quite fast, but the problem comes from having to simulate thousands of them. And while it\u2019s fast, simulation is also very big: thousands of lines of code big, organically grown over the last 20 years, with little or no consideration for multithreading back in the early days. Even if we miss just one line of code in there that ends up executing scripts, or interacts with some other object, we run the risk of crashing the game.<\/p> \n\n\n\n\n<p>While it would be possible to unravel it all, we also have to be realistic in that we have limited resources allocated to Arma 3 at this stage. Doing all of this costs time. We focused on the big chunks at first. AI was relatively simple to get relatively big gains from. Simulation is very complex, and expected to yield comparatively small gains.<\/p>\n\n\n\n\n<p>We will continue working on this, but with the biggest and easiest fixes already taken care of, we are only left with small, risky and complex things. And we also have to balance the time investment with everything else that needs doing. We can either give some players one or two more FPS, or we can spend the time on adding cool features like the <a href=\"https:\/\/community.bistudio.com\/wiki\/CT_WEBBROWSER\">web browser UI<\/a> or <a href=\"https:\/\/store.steampowered.com\/gamerecording\">Steam Game Recording<\/a> integration.<\/p>\n\n\n\n\n<p>Due to not everything being able to be multithreaded, <strong>the performance impact of what we did now will also vary per situation and especially with mods loaded<\/strong>. Our improvements to AI and rendering will not have much impact on a script-heavy mod. We try to provide improvements to some script commands, and are always looking for hints as to which ones need some more work, but we cannot fix the overall cost of trying to run many scripts.<\/p>\n\n\n\n\n<h2>WHY NOW?<\/h2>\n\n\n\n\n<p>There has been a steady effort of modernizing our RV engine over the last few years.<\/p>\n\n\n\n\n<p>Back in 2020, we used to build Arma 3 with Visual Studio 2013 and the C++14 standard. Since then, we\u2019ve upgraded all our code and libraries to VS 2022 and C++23. Upgrading over a million lines of code through nine years of language evolution did take a lot of time, especially as we were doing it on the side in parallel with all other development. Plus, we had to make sure we didn\u2019t break anything while doing it. We did break quite a few things along the way, but thanks to everyone participating on the Profiling branch, we were able to find and fix most of them quickly.<\/p>\n\n\n\n\n<p>Upgrading our multithreading code is just a part of that effort, and we are still not done.<\/p>\n\n\n\n\n<p>- Dedmen<\/p>","published":"1","hide_from_home_feed":null,"url":"oprep-performance-optimizations-in-220","post_header_image":null,"animation_interval":"200","author":"Dedmen","post_thumb":null,"type":"oprep","updated_at":"2025-06-18 14:04:36","public_date":"2025-06-17 16:00:00"},{"id":479,"title":"SPOTREP #00118","created_at":"2025-06-17 12:17:28","excerpt":"<p>Game Update 2.20 (Performance Optimizations, Steam Game Recording, UH-80 \/ AH-99 Stub Wings, Illumination Flares)<br><\/p>","content":"<p>FROM: High Command<br>TO: Arma 3 Users<br>UNIT: Main Branch<br>ACTIVITY: Game Update 2.20 (Performance Optimizations, Steam Game Recording, UH-80 \/ AH-99 Stub Wings, Illumination Flares)<br>SIZE: ~127 MB \/ ~57 MB (depends on Contact ownership)<br><\/p>\n<h1>NOTES<\/h1>\n<ul>\n\t<li>For more information about the performance optimizations, please read our <a href=\"https:\/\/dev.arma3.com\/post\/oprep-performance-optimizations-in-220\" target=\"\">technical deep dive blog<\/a> (which also mentions updates to the game's system requirements).<\/li>\n\t<li>Contact consists of 2 data packs \/ folders:\n\t<ul>\n\t\t<li>Contact (via <i>PLAY CONTACT<\/i> or <i>-mod=Contact<\/i>): for the singleplayer \"First Contact\" campaign experience (accessible only to owners - optionally loaded)<\/li>\n\t\t<li>Contact (Platform): for most other use cases, including sandbox multiplayer (loaded by default for all players)<\/li>\n\t<\/ul><\/li>\n\t<li>Consider using the Steam client option to verify the integrity of the local game cache to avoid corrupted data after downloading this update.<\/li>\n\t<li>Consider defragmenting your HDD after downloading large updates.<\/li>\n\t<li>Updating a deeply moddable game and its platform is not without risks. We use various methods to communicate upcoming changes to our awesome modding community, such as via the <a href=\"https:\/\/dev.arma3.com\/\" target=\"\">Dev Hub<\/a>. We also co-operate directly on troubleshooting, and we offer an opportunity to test updates via our <a href=\"https:\/\/dev.arma3.com\/rc-branch\" target=\"\">Release Candidate tests<\/a>. Modders, server administrators, and other members of the community do their best to prepare for updates and to address issues post-release as quickly as possible. Please be mindful of some interruptions (especially in the first hours \/ days after a release) while we all work to improve the game together.<\/li>\n\t<li>A <i>Legacy Build<\/i> Steam branch is available for advanced users. It contains the previous significant main branch version (2.18). It can be used to compare specific changes between major releases. The access code for this branch is: <i>Arma3Legacy218<\/i><\/li>\n\t<li>This update does not yet apply to <a href=\"http:\/\/dev.arma3.com\/ports\" target=\"\">the experimental Mac client ports<\/a>.<\/li>\n\t<li>You can find the servers in the Steam library (switch the filter to \"Tools\") - \"Arma 3 Server\" (based on your OS, it will download the Windows or Linux version).\n\t<ul>\n\t\t<li>Administrators can also use the command-line <a href=\"https:\/\/developer.valvesoftware.com\/wiki\/SteamCMD\" target=\"\">SteamCMD<\/a> utility. The app ID is to be 233780.<\/li>\n\t\t<li>NVIDIA GameWorks\u2122 Technology provided under license from NVIDIA Corporation. Copyright \u00a9 2002-2018 NVIDIA Corporation. All rights reserved. NVIDIA\u00ae and PhysX\u00ae are trademarks of NVIDIA Corporation and are used under license.<\/li>\n\t<\/ul><\/li>\n\t<li>In case of problems, please check the <a href=\"http:\/\/support.bistudio.com\/arma-3\" target=\"\">Bohemia Interactive support F.A.Q.<\/a>, <a href=\"http:\/\/arma3.com\/faq\" target=\"\">Arma 3 F.A.Q.<\/a>, <a href=\"http:\/\/www.battleye.com\/support\/faq\/\" target=\"\">BattlEye F.A.Q.<\/a>, or <a href=\"https:\/\/arma3.com\/launcher\/troubleshooting\" target=\"\">Launcher troubleshooting guide<\/a>.<\/li>\n\t<li>You can help us to further improve the game by posting your feedback on the <a href=\"http:\/\/feedback.arma3.com\/\" target=\"\">Feedback Tracker<\/a>.<br><\/li>\n<\/ul>\n<h1>CHANGELOG<br><\/h1>\n<h2>DATA<\/h2>\n<ul>\n\t<li><b>Added: Stub wing variants with pylon configurations for AH-99 and UH-80 helicopters<\/b><\/li>\n\t<li><b>Added: Illumination flares<\/b> (in addition to the existing signal flares)<\/li>\n\t<li><b>Added: <a href=\"https:\/\/store.steampowered.com\/gamerecording\" target=\"\">Steam Game Recording<\/a> integration for <a href=\"https:\/\/community.bistudio.com\/wiki\/Arma_3:_Time_Trials\" target=\"\">Time Trials<\/a><\/b><\/li>\n\t<li><b>Added: <a href=\"https:\/\/store.steampowered.com\/gamerecording\" target=\"\">Steam Game Recording<\/a> integration for <a href=\"https:\/\/community.bistudio.com\/wiki\/Arma_3:_Firing_Drills\" target=\"\">Firing Drills<\/a><\/b><\/li>\n\t<li><b>Added: <a href=\"https:\/\/store.steampowered.com\/gamerecording\" target=\"\">Steam Game Recording<\/a> integration for <a href=\"https:\/\/community.bistudio.com\/wiki\/Arma_3:_Invaders\" target=\"\">Arma Invaders<\/a><\/b><\/li>\n\t<li><b>Added: More specific <a href=\"https:\/\/community.bistudio.com\/wiki\/Arma_3:_Steam_Branches\" target=\"\">Steam branch<\/a> info to the main menu, pause menu and loading screens<\/b><\/li>\n\t<li>Added: Missing DLC requirement in \"Showcase Sling Loading\"<\/li>\n\t<li>Tweaked: <a href=\"https:\/\/community.bistudio.com\/wiki\/BIS_fnc_setUnitInsignia\" target=\"\">BIS_fnc_setUnitInsignia<\/a>\/<a href=\"https:\/\/community.bistudio.com\/wiki\/BIS_fnc_getUnitInsignia\" target=\"\">BIS_fnc_getUnitInsignia<\/a> updated to work with the new uniform texture mechanic - <a href=\"https:\/\/feedback.bistudio.com\/T161323\" target=\"\">FT-T161323<\/a><\/li>\n\t<li>Tweaked: Eye position when aiming down the sights on M320 and GM6, so the camera is no longer clipping with the rifle's mesh when recoil kicks in<\/li>\n\t<li>Fixed: <a href=\"https:\/\/community.bistudio.com\/wiki\/format\" target=\"\">format<\/a> argument error in AAN function - <a href=\"https:\/\/feedback.bistudio.com\/T182822\" target=\"\">FT-T182822<\/a><\/li>\n\t<li>Fixed: <a href=\"https:\/\/community.bistudio.com\/wiki\/Arma_3:_Utilities\" target=\"\">utils<\/a> format argument error - <a href=\"https:\/\/feedback.bistudio.com\/T182822\" target=\"\">FT-T182822<\/a><\/li>\n\t<li>Fixed: Error in <a href=\"https:\/\/community.bistudio.com\/wiki\/BIS_fnc_kbTellLocal\" target=\"\">BIS_fnc_kbTellLocal<\/a> function - <a href=\"https:\/\/feedback.bistudio.com\/T186857\" target=\"\">FT-T186857<\/a><\/li>\n\t<li>Fixed: Undefined error in <a href=\"https:\/\/community.bistudio.com\/wiki\/BIS_fnc_liveFeedTerminate\" target=\"\">BIS_fnc_liveFeedTerminate<\/a> function - <a href=\"https:\/\/feedback.bistudio.com\/T186558\" target=\"\">FT-T186558<\/a><\/li>\n\t<li>Fixed: Importing exported Arsenal loadout was not importing insignia - <a href=\"https:\/\/feedback.bistudio.com\/T186642\" target=\"\">FT-T186642<\/a><\/li>\n\t<li>Fixed: A Logic was created on the wrong side in a scripted function - <a href=\"https:\/\/feedback.bistudio.com\/T177680\" target=\"\">FT-T177680<\/a><\/li>\n\t<li>Fixed: SAAMI weapon referencing incorrect sounds - <a href=\"https:\/\/feedback.bistudio.com\/T185821\" target=\"\">FT-T185821<\/a><\/li>\n\t<li>Fixed: Script format error in Field Manual - <a href=\"https:\/\/feedback.bistudio.com\/T182822\" target=\"\">FT-T182822<\/a><\/li>\n\t<li>Fixed: Launchers were not always selected properly in Arsenal<\/li>\n\t<li>Fixed: AI jet pilots will now properly eject from their plane when it is damaged more then its <i>ejectDamageLimit<\/i><\/li>\n\t<li>Fixed: One pop-up target in \"CoF: Red 2\" was behaving incorrectly<\/li>\n\t<li>Fixed: Missing windows fire geometry on armed variants of Ifrit - <a href=\"https:\/\/feedback.bistudio.com\/T190093\" target=\"\">FT-T190093<\/a><\/li>\n\t<li>Fixed: Tail wheel missing from \"Camo2\" hidden selection on UH-80 in its first LOD<\/li>\n\t<li>Fixed: <a href=\"https:\/\/community.bistudio.com\/wiki\/format\" target=\"\">format<\/a> related error in the \"Remnants of War\" campaign<br><\/li>\n<\/ul>\n<h2>ENGINE<\/h2>\n<ul>\n\t<li><b>Deprecated: <a href=\"https:\/\/dev.arma3.com\/32-bit\" target=\"\">32-Bit support<\/a><\/b> (not yet removed, but a future update may do so)<\/li>\n\t<li><b>Deprecated: Windows 7 and 8 support<\/b> (not yet removed, but a future update may do so)<\/li>\n\t<li><b>Added: Integration of <a href=\"https:\/\/store.steampowered.com\/gamerecording\" target=\"\">Steam Game Recording<\/a> with custom game events<\/b> (<a href=\"https:\/\/community.bistudio.com\/wiki\/steamGameRecordingEvent\" target=\"\">documentation forthcoming<\/a>)<\/li>\n\t<li><b>Added: Replaced Real Virtuality <a href=\"https:\/\/dev.arma3.com\/post\/oprep-performance-optimizations-in-220\" target=\"\">multithreading<\/a> job system with Enfusion's version<\/b><\/li>\n\t<li><b>Added: Asynchronous JIP queue processing<\/b><\/li>\n\t<li><b>Added: Multithreaded JIP queue processing<\/b><\/li>\n\t<li><b>Added: Multithreaded lights collection<\/b><\/li>\n\t<li><b>Added: More multithreading into rendering<\/b><\/li>\n\t<li><b>Added: Asynchronous AI and sound simulation<\/b><\/li>\n\t<li><b>Added: Partially multithreaded AI simulation<\/b><\/li>\n\t<li><b>Added: Multithreaded AI visibility calculations<\/b><\/li>\n\t<li><b>Added: Multithreaded PhysX simulation<\/b><\/li>\n\t<li><b>Added: Script commands <a href=\"https:\/\/community.bistudio.com\/wiki\/allMissionObjects\" target=\"\">allMissionObjects<\/a>, <a href=\"https:\/\/community.bistudio.com\/wiki\/nearestObjects\" target=\"\">nearestObjects<\/a>, <a href=\"https:\/\/community.bistudio.com\/wiki\/nearObjects\" target=\"\">nearObjects<\/a>, <a href=\"https:\/\/community.bistudio.com\/wiki\/nearSupplies\" target=\"\">nearSupplies<\/a>, <a href=\"https:\/\/community.bistudio.com\/wiki\/nearRoads\" target=\"\">nearRoads<\/a> are now internally multithreaded<\/b><\/li>\n\t<li><b>Added: Scanning for objects in trigger areas is now multithreaded<\/b><\/li>\n\t<li><b>Added: AI sensor updating is now multithreaded<\/b><\/li>\n\t<li><b>Added: AI target list updating\/scanning is now multithreaded<\/b><\/li>\n\t<li><b>Added: PhysX Vehicle suspension update is now multithreaded<\/b><\/li>\n\t<li><b>Added: PhysX Simulation is now multithreaded<\/b><\/li>\n\t<li><b>Added: <\/b><a href=\"https:\/\/community.bistudio.com\/wiki?title=Arma_3:_Server_Config_File#Server_Options\" target=\"\" style=\"font-weight: bold;\">Mission file downloading over HTTP<\/a>&nbsp;- <a href=\"https:\/\/forums.bohemia.net\/forums\/topic\/70345-server-ability-url-forwarding-of-mission-content\" target=\"\">BI Forums<\/a><\/li>\n\t<li><b>Added: <a href=\"https:\/\/community.bistudio.com\/wiki\/CT_WEBBROWSER\" target=\"\">CT_WEBBROWSER<\/a> UI Control<\/b><\/li>\n\t<li><b>Added: <a href=\"https:\/\/community.bistudio.com\/wiki\/CT_EXTENSION\" target=\"\">CT_EXTENSION<\/a> UI Control<\/b><\/li>\n\t<li>Added: Alternative syntax for <a href=\"https:\/\/community.bistudio.com\/wiki\/getObjectTextures\" target=\"\">getObjectTextures<\/a> script command<\/li>\n\t<li>Added: Option to <a href=\"https:\/\/community.bistudio.com\/wiki\/getObjectTextures\" target=\"\">getObjectTextures<\/a> to return default textures - <a href=\"https:\/\/feedback.bistudio.com\/T171318\" target=\"\">FT-T171318<\/a><\/li>\n\t<li>Added: Option to <a href=\"https:\/\/community.bistudio.com\/wiki\/setObjectTexture\" target=\"\">setObjectTexture<\/a> and <a href=\"https:\/\/community.bistudio.com\/wiki\/setObjectMaterial\" target=\"\">setObjectMaterial<\/a> commands to reset to default texture\/material - <a href=\"https:\/\/feedback.bistudio.com\/T171318\" target=\"\">FT-T171318<\/a><\/li>\n\t<li>Added: Ability to set a marker color directly with <a href=\"https:\/\/community.bistudio.com\/wiki\/setMarkerColor\" target=\"\">setMarkerColor<\/a> - <a href=\"https:\/\/feedback.bistudio.com\/T185042\" target=\"\">FT-T185042<\/a><\/li>\n\t<li>Added: Slightly improved efficiency of <a href=\"https:\/\/community.bistudio.com\/wiki\/inAreaArray\" target=\"\">inAreaArray<\/a> for <a href=\"https:\/\/community.bistudio.com\/wiki\/Array\" target=\"\">Array<\/a>s<\/li>\n\t<li>Added: Alternative syntax for <a href=\"https:\/\/community.bistudio.com\/wiki\/inPolygon\" target=\"\">inPolygon<\/a> check to <a href=\"https:\/\/community.bistudio.com\/wiki\/inAreaArray\" target=\"\">inAreaArray<\/a><\/li>\n\t<li>Added: Optional parameter to <a href=\"https:\/\/community.bistudio.com\/wiki\/inArea\" target=\"\">inArea<\/a>\/<a href=\"https:\/\/community.bistudio.com\/wiki\/inAreaArray\" target=\"\">Array<\/a>\/<a href=\"https:\/\/community.bistudio.com\/wiki\/inAreaArrayIndexes\" target=\"\">Indexes<\/a> to force all positions to be treated as <a href=\"https:\/\/community.bistudio.com\/wiki\/Position#PositionWorld\" target=\"\">PositionWorld<\/a> (default was <a href=\"https:\/\/community.bistudio.com\/wiki\/Position#PositionAGL\" target=\"\">PositionAGL<\/a>)<\/li>\n\t<li>Added: New <a href=\"https:\/\/community.bistudio.com\/wiki\/setMarkerShape\" target=\"\">marker shapes<\/a>: \"TRIANGLE\", \"PENTAGON\", \"HEXAGON\", \"HEPTAGON\", \"OCTAGON\", \"NONAGON\", \"DECAGON\"<\/li>\n\t<li>Added: <a href=\"https:\/\/community.bistudio.com\/wiki\/drawXPolygon\" target=\"\">drawXPolygon<\/a> script command<\/li>\n\t<li>Added: <i><a href=\"https:\/\/community.bistudio.com\/wiki\/Multiplayer_Server_Commands\" target=\"\">exportJIPQueue<\/a><\/i> now includes the number of messages per object (to see how many would be removed if said object was deleted)<\/li>\n\t<li>Added: <a href=\"https:\/\/community.bistudio.com\/wiki\/isSwitchingWeapon\" target=\"\">isSwitchingWeapon<\/a> script command<\/li>\n\t<li>Added: Alternative syntax for <a href=\"https:\/\/community.bistudio.com\/wiki\/lineIntersects\" target=\"\">lineIntersects<\/a> command to run multiple intersects in parallel using multithreading<\/li>\n\t<li>Added: FPS limit in main menu with <i>-world=empty<\/i> and when windowed mode is unfocused<\/li>\n\t<li>Added: Option to <a href=\"https:\/\/community.bistudio.com\/wiki\/Multiplayer_Server_Commands\" target=\"\">log<\/a> remains collector entities into a file<\/li>\n\t<li>Added: Servers with no players now limit their FPS to 30 (regardless of <i>-limitFPS<\/i> parameter)<\/li>\n\t<li>Added: <i>-limitFPS<\/i> command-line parameter now also works on clients<\/li>\n\t<li>Added: Ability to configure remains collector force remove times in the server config<\/li>\n\t<li>Added: Uniforms textured by <a href=\"https:\/\/community.bistudio.com\/wiki\/setObjectTexture\" target=\"\">setObjectTexture<\/a>\/<a href=\"https:\/\/community.bistudio.com\/wiki\/setObjectTextureGlobal\" target=\"\">Global<\/a> will now show custom textures in weapon holders<\/li>\n\t<li>Added: <a href=\"https:\/\/community.bistudio.com\/wiki\/uiTime\" target=\"\">uiTime<\/a> script command<\/li>\n\t<li>Added: Alternative syntax to the <a href=\"https:\/\/community.bistudio.com\/wiki\/landAt\" target=\"\">landAt<\/a> command - <a href=\"https:\/\/feedback.bistudio.com\/T187838\" target=\"\">FT-T187838<\/a><\/li>\n\t<li>Added: Confirmation prompt for <a href=\"https:\/\/community.bistudio.com\/wiki\/serverCommand\" target=\"\">serverCommand<\/a> when not using a password<\/li>\n\t<li>Added: <i>RscDisplayPassword<\/i> now stores the server address in the \"guid\" variable on the display<\/li>\n\t<li>Added: Base64 conversion and compression in script via <a href=\"https:\/\/community.bistudio.com\/wiki\/CT_WEBBROWSER#ctrlWebBrowserAction\" target=\"\">ctrlWebBrowserAction<\/a><\/li><li>Added: <a href=\"https:\/\/community.bistudio.com\/wiki\/getServerInfo\" target=\"\">getServerInfo<\/a> script command - <a href=\"https:\/\/feedback.bistudio.com\/T187807\" target=\"\">FT-T187807<\/a><br><\/li>\n\t<li>Added: <i>sourceModulo<\/i> for <a href=\"https:\/\/community.bistudio.com\/wiki\/Arma_3:_Multi-Function_Display_(MFD)_config_reference\" target=\"\">MFD sources<\/a><\/li>\n\t<li>Added: <a href=\"https:\/\/community.bistudio.com\/wiki\/Arma_3:_Multi-Function_Display_(MFD)_config_reference\" target=\"\">MFD sources<\/a> <i>ClockSecondSmooth<\/i> and <i>SidePanelRadarRange<\/i><\/li>\n\t<li>Added: <i>mfdMaxUserValues<\/i> vehicle config entry and raised the maximum MFD user value limit to 256<\/li>\n\t<li>Added: <a href=\"https:\/\/community.bistudio.com\/wiki\/productVersion\" target=\"\">productVersion<\/a> now also lists the Steam Beta branch name<\/li>\n\t<li>Added: <i>\"MaxResolution\"<\/i> to <a href=\"https:\/\/community.bistudio.com\/wiki\/setTIParameter\" target=\"\">setTIParameter<\/a><\/li>\n\t<li>Added: <i>\"useRealViewport\"<\/i> config property for map controls - <a href=\"https:\/\/feedback.bistudio.com\/T189016\" target=\"\">FT-T189016<\/a><\/li>\n\t<li>Added: <i>ctrlRelToScreen<\/i> and <i>ctrlScreenToRel<\/i> script commands - <a href=\"https:\/\/feedback.bistudio.com\/T189016\" target=\"\">FT-T189016<\/a><\/li>\n\t<li>Added: <a href=\"https:\/\/community.bistudio.com\/wiki\/isNil\" target=\"\">isNil<\/a> with namespace argument now also supports control\/display<\/li>\n\t<li>Added: Animal config property <i>canFitUnderADoor<\/i>&nbsp;(when true will stop given animal from opening a door when entering into a house)<\/li>\n\t<li>Added: Option to <a href=\"https:\/\/community.bistudio.com\/wiki\/removeWeapon\" target=\"\">removeWeapon<\/a>\/<a href=\"https:\/\/community.bistudio.com\/wiki\/removeWeaponGlobal\" target=\"\">removeWeaponGlobal<\/a> to abort a new weapon autoselect after primary weapon removal<\/li>\n\t<li>Added: Option to <a href=\"https:\/\/community.bistudio.com\/wiki\/addWeapon\" target=\"\">addWeapon<\/a>\/<a href=\"https:\/\/community.bistudio.com\/wiki\/addWeaponGlobal\" target=\"\">addWeaponGlobal<\/a> to abort a new weapon autoselect if no weapon was selected<\/li>\n\t<li>Added: <i>AIThinkOnlyLocal<\/i> option to <a href=\"https:\/\/community.bistudio.com\/wiki\/setMissionOptions\" target=\"\">setMissionOptions<\/a><\/li>\n\t<li>Added: CfgAmmo <i>explodeParentWhenTriggered<\/i> to complement <i>deleteParentWhenTriggered<\/i> - <a href=\"https:\/\/feedback.bistudio.com\/T190390\" target=\"\">FT-T190390<\/a><\/li>\n\t<li>Added: Mission <a href=\"https:\/\/community.bistudio.com\/wiki\/Arma_3:_Mission_Event_Handlers#MarkerDeleted\" target=\"\">\"MarkerDeleted\"<\/a> Event Handler now returns deleter person - <a href=\"https:\/\/feedback.bistudio.com\/T178348\" target=\"\">FT-T178348<\/a><\/li>\n\t<li>Added: <a href=\"https:\/\/community.bistudio.com\/wiki\/removeAllMagazines\" target=\"\">removeAllMagazines<\/a> and <a href=\"https:\/\/community.bistudio.com\/wiki\/removeAllMagazinesTurret\" target=\"\">removeAllMagazinesTurret<\/a> script commands - <a href=\"https:\/\/feedback.bistudio.com\/T177284\" target=\"\">FT-T177284<\/a><\/li>\n\t<li>Added: <a href=\"https:\/\/community.bistudio.com\/wiki\/Arma_3:_Multi-Function_Display_(MFD)_config_reference#Sources\" target=\"\">MFD Sources<\/a> <i>WPDir<\/i>\/<i>WPDirRel<\/i><\/li>\n\t<li>Added: <a href=\"https:\/\/community.bistudio.com\/wiki\/addMagazineTurret\" target=\"\">addMagazinesTurret<\/a> script command - <a href=\"https:\/\/feedback.bistudio.com\/T174007\" target=\"\">FT-T174007<\/a><\/li>\n\t<li>Added: Some of <a href=\"https:\/\/community.bistudio.com\/wiki\/Arma_3:_Basic_Server_Config_File\" target=\"\">basic.cfg<\/a> network parameters can now be provided as strings<\/li>\n\t<li>Added: <a href=\"https:\/\/community.bistudio.com\/wiki\/Arma_3:_Multi-Function_Display_(MFD)_config_reference#Sources\" target=\"\">MFD Source<\/a> <i>WPTime<\/i><\/li>\n\t<li>Added: <a href=\"https:\/\/community.bistudio.com\/wiki\/connectToServer\" target=\"\">connectToServer<\/a> command and Server Browser Direct-Connect now supports resolving SRV records - <a href=\"https:\/\/feedback.bistudio.com\/T127943\" target=\"\">FT-T127943<\/a><\/li>\n\t<li>Added: <a href=\"https:\/\/community.bistudio.com\/wiki\/getAllPylonsInfo\" target=\"\">getAllPylonsInfo<\/a> now also returns the position of each pylon - <a href=\"https:\/\/feedback.bistudio.com\/T190789\" target=\"\">FT-T190789<\/a><\/li>\n\t<li>Added: Listbox sorting is now multithreaded - <a href=\"https:\/\/feedback.bistudio.com\/T184005\" target=\"\">FT-T184005<\/a><\/li>\n\t<li>Added: <a href=\"https:\/\/community.bistudio.com\/wiki\/Arma_3:_Event_Handlers#PylonChanged\" target=\"\">\"PylonChanged\"<\/a> entity Event Handler - <a href=\"https:\/\/feedback.bistudio.com\/T190875\" target=\"\">FT-T190875<\/a><\/li>\n\t<li>Added: Post-processing effects <i>Sharpness<\/i>, <i>DepthOfField<\/i>, <i>Fisheye<\/i> - <a href=\"https:\/\/feedback.bistudio.com\/T163827\" target=\"\">FT-T163827<\/a><\/li>\n\t<li>Added: Option to the <i>disableChannels<\/i> mission and server parameter to disable map drawing and map marker placement from the UI per chat channel<\/li>\n\t<li>Tweaked: Improved PhysX simulation performance, if many PhysX objects are in close proximity<\/li>\n\t<li>Tweaked: Buildings with lights no longer get faster simulation if they are not animated and static<\/li>\n\t<li>Tweaked: Visibility checks when applying explosion damage are now multithreaded<\/li>\n\t<li>Tweaked: Improved server performance when sending a large JIP queue<\/li>\n\t<li>Tweaked: <a href=\"https:\/\/community.bistudio.com\/wiki\/inAreaArray\" target=\"\">inAreaArray<\/a> efficiency for markers has been slightly improved<\/li>\n\t<li>Tweaked: <a href=\"https:\/\/community.bistudio.com\/wiki\/setUnitLoadout\" target=\"\">setUnitLoadout<\/a> will now abort if a unit is in the process of switching weapons - <a href=\"https:\/\/feedback.bistudio.com\/T167015\" target=\"\">FT-T167015<\/a><\/li>\n\t<li>Tweaked: Uniform textures are now stored on uniform entities<\/li>\n\t<li>Tweaked: Uniform textures now persist in multiplayer<\/li>\n\t<li>Tweaked: Added ability to force remove remains after an additional fixed time<\/li>\n\t<li>Tweaked: Slightly improved efficiency of remains disposal checks<\/li>\n\t<li>Tweaked: Added option to <a href=\"https:\/\/community.bistudio.com\/wiki\/diag_remainsCollector\" target=\"\">diag_remainsCollector<\/a> to return override times<\/li>\n\t<li>Tweaked: <a href=\"https:\/\/community.bistudio.com\/wiki\/setSimulWeatherLayers\" target=\"\">setSimulWeatherLayers<\/a> -1 will now reset SimulWeather<\/li>\n\t<li>Tweaked: Scripted helicopter functionality is extended with more options for handling landing - <a href=\"https:\/\/community.bistudio.com\/wiki\/landAt\" target=\"\">landAt<\/a><\/li>\n\t<li>Tweaked: Added alternative syntax to <a href=\"https:\/\/community.bistudio.com\/wiki\/getObjectMaterials\" target=\"\">getObjectMaterials<\/a> script command<\/li>\n\t<li>Tweaked: UGV follow range is now in increments of 10s instead of 100s<\/li>\n\t<li>Tweaked: <i>Follow<\/i> Unit menu now has a <i>Cancel<\/i> option to unfollow<\/li>\n\t<li>Tweaked: Optimized the game's memory usage (~400 MB, ~1GB on 32-bit)<\/li>\n\t<li>Tweaked: Several memory allocation optimizations<\/li>\n\t<li>Tweaked: Updated Steamworks SDK (libraries) to 1.61<\/li>\n\t<li>Tweaked: <a href=\"https:\/\/community.bistudio.com\/wiki\/drop\" target=\"\">drop<\/a> script command now returns the particle object - <a href=\"https:\/\/feedback.bistudio.com\/T182084\" target=\"\">FT-T182084<\/a><\/li>\n\t<li>Tweaked: <a href=\"https:\/\/community.bistudio.com\/wiki\/inAreaArray\" target=\"\">inAreaArray<\/a>\/<a href=\"https:\/\/community.bistudio.com\/wiki\/inAreaArrayIndexes\" target=\"\">inAreaArrayIndexes<\/a> array of positions has been unified and can accept positions in format array, object, group, location, marker (while ignoring nils)<\/li>\n\t<li>Tweaked: Improved performance of AI pathfinding (sea wave positions are no longer calculated when they would be below terrain)<\/li>\n\t<li>Tweaked: AI no longer calculates light influence on targets during daytime<\/li>\n\t<li>Tweaked: Handling of Eden Editor mouse cursor placement (it is now possible to place objects on top of all objects and upside down and on the sides of objects)<\/li>\n\t<li>Tweaked: AI computation is now done in parallel to <i>d3dPresent<\/i><\/li>\n\t<li>Tweaked: Improved efficiency of listbox sorting - <a href=\"https:\/\/feedback.bistudio.com\/T184005\" target=\"\">FT-T184005<\/a><\/li>\n\t<li><b>Fixed: Snakes opened doors when entering houses<\/b> - <a href=\"https:\/\/feedback.bistudio.com\/T59444\" target=\"\">FT-T59444<\/a>, <a href=\"https:\/\/feedback.bistudio.com\/T66646\" target=\"\">FT-T66646<\/a>, <a href=\"https:\/\/feedback.bistudio.com\/T80719\" target=\"\">FT-T80719<\/a>, <a href=\"https:\/\/feedback.bistudio.com\/T86273\" target=\"\">FT-T86273<\/a>, <a href=\"https:\/\/feedback.bistudio.com\/T66959\" target=\"\">FT-T66959<\/a>, <a href=\"https:\/\/feedback.bistudio.com\/T66520\" target=\"\">FT-T66520<\/a>, <a href=\"https:\/\/feedback.bistudio.com\/T64512\" target=\"\">FT-T64512<\/a>, <a href=\"https:\/\/feedback.bistudio.com\/T63866\" target=\"\">FT-T63866<\/a>, <a href=\"https:\/\/feedback.bistudio.com\/T60776\" target=\"\">FT-T60776<\/a>, <a href=\"https:\/\/feedback.bistudio.com\/T60326\" target=\"\">FT-T60326<\/a>, <a href=\"https:\/\/feedback.bistudio.com\/T67930\" target=\"\">FT-T67930<\/a><\/li>\n\t<li>Fixed: Game could freeze when tabbing out while rendering - <a href=\"https:\/\/feedback.bistudio.com\/T183720\" target=\"\">FT-T183720<\/a><\/li>\n\t<li>Fixed: <a href=\"https:\/\/community.bistudio.com\/wiki\/supportInfo\" target=\"\">supportInfo<\/a> command did not list all commands on \"u:*\" and \"b:*\"<\/li>\n\t<li>Fixed: Sometimes <a href=\"https:\/\/community.bistudio.com\/wiki\/velocity\" target=\"\">velocity<\/a> for EPE objects would return 0 - <a href=\"https:\/\/feedback.bistudio.com\/T185618\" target=\"\">FT-T185618<\/a><\/li>\n\t<li>Fixed: UAV would stop following waypoints after a <a href=\"https:\/\/community.bohemia.net\/wiki\/Waypoints#Land\" target=\"\">Land waypoint<\/a><\/li>\n\t<li>Fixed: <a href=\"https:\/\/community.bistudio.com\/wiki\/getObjectTextures\" target=\"\">getObjectTextures<\/a>\/<a href=\"https:\/\/community.bistudio.com\/wiki\/getObjectMaterials\" target=\"\">getObjectMaterials<\/a> would not work with Simple Objects - <a href=\"https:\/\/feedback.bistudio.com\/T185884\" target=\"\">FT-T185884<\/a><\/li>\n\t<li>Fixed: Inconsistency between <a href=\"https:\/\/community.bistudio.com\/wiki\/inAreaArray\" target=\"\">inAreaArray<\/a> and <a href=\"https:\/\/community.bistudio.com\/wiki\/inAreaArrayIndexes\" target=\"\">inAreaArrayIndexes<\/a> for <a href=\"https:\/\/community.bistudio.com\/wiki\/Array\" target=\"\">Array<\/a> when matching in 3D<\/li>\n\t<li>Fixed: <a href=\"https:\/\/community.bistudio.com\/wiki\/enableReload\" target=\"\">enableReload<\/a> would not work with static weapons<\/li>\n\t<li>Fixed: Removing a magazine from a static weapon would trigger a reload when <a href=\"https:\/\/community.bistudio.com\/wiki\/enableReload\" target=\"\">enableReload<\/a> was false<\/li>\n\t<li>Fixed: <a href=\"https:\/\/community.bistudio.com\/wiki\/removeMagazine\" target=\"\">removeMagazine<\/a> was removing the current magazine from static weapons first<\/li>\n\t<li>Fixed: Game would try to re-download Steam Workshop Compositions repeatedly - <a href=\"https:\/\/feedback.bistudio.com\/T171116\" target=\"\">FT-T171116<\/a><\/li>\n\t<li>Fixed: RPT file header would not print all arguments if arguments were too long<\/li>\n\t<li>Fixed: <a href=\"https:\/\/community.bistudio.com\/wiki\/inArea\" target=\"\">inArea<\/a>\/<a href=\"https:\/\/community.bistudio.com\/wiki\/inAreaArray\" target=\"\">Array<\/a>\/<a href=\"https:\/\/community.bistudio.com\/wiki\/inAreaArrayIndexes\" target=\"\">Indexes<\/a> did not support legacy hexagon - <a href=\"https:\/\/forums.bohemia.net\/forums\/topic\/160288-arma-3-stable-server-218-profiling-performance-binary-feedback\/?do=findComment&amp;comment=3536113\" target=\"\">BI Forums<\/a><\/li>\n\t<li>Fixed: JIP players seeing different uniform on a player for up to a minute<\/li>\n\t<li>Fixed: Unit insignia were sometimes being applied to the whole body - <a href=\"https:\/\/feedback.bistudio.com\/T155459\" target=\"\">FT-T155459<\/a><\/li>\n\t<li>Fixed: Keybinding F16-F23 keys were displaying \"UNEXPECTED_KEY_ID\" instead of the key name - <a href=\"https:\/\/feedback.bistudio.com\/T125049\" target=\"\">FT-T125049<\/a><\/li>\n\t<li>Fixed: Headless Client would not report if connection failed due to <a href=\"https:\/\/community.bistudio.com\/wiki\/Arma_3:_Server_Config_File#Server_Options\" target=\"\">allowedFilePatching<\/a> or <i>equalModRequired<\/i> restrictions<\/li>\n\t<li>Fixed: <a href=\"https:\/\/community.bistudio.com\/wiki\/Arma_3:_CfgWorlds_Config_Reference#class_RainParticles\" target=\"\">snow<\/a> parameter in <i>RainParticles<\/i> config did not work - <a href=\"https:\/\/feedback.bistudio.com\/T185117\" target=\"\">FT-T185117<\/a><\/li>\n\t<li>Fixed: Sections of objects would stop rendering at specific camera angles<\/li>\n\t<li>Fixed: <a href=\"https:\/\/community.bistudio.com\/wiki\/setObjectTexture\" target=\"\">setObjectTexture<\/a> stopped working with VR entities - <a href=\"https:\/\/feedback.bistudio.com\/T155459\" target=\"\">FT-T155459<\/a><\/li>\n\t<li>Fixed: <a href=\"https:\/\/community.bistudio.com\/wiki\/setMissionOptions\" target=\"\">ignoreNoDamage<\/a> mission option was preventing healing using a Medikit - <a href=\"https:\/\/feedback.bistudio.com\/T186874\" target=\"\">FT-T186874<\/a><\/li>\n\t<li>Fixed: Crash in legacy non-PhysX car collision simulation (thanks to <i>Moerderhoschi<\/i> for the reproduction steps)<\/li>\n\t<li>Fixed: When taking off a uniform, modded content would apply its uniform texture to underwear - <a href=\"https:\/\/feedback.bistudio.com\/T155459\" target=\"\">FT-T155459<\/a><\/li>\n\t<li>Fixed: Network spam when deleting units<\/li>\n\t<li>Fixed: <a href=\"https:\/\/community.bistudio.com\/wiki\/uiSleep\" target=\"\">uiSleep<\/a> did not serialize properly<\/li>\n\t<li>Fixed: Helicopters would not respond to a change of helipad during landing<\/li>\n\t<li>Fixed: Some of the player-emitted sounds were not audible in multiplayer - <a href=\"https:\/\/feedback.bistudio.com\/T178500\" target=\"\">FT-T178500<\/a><\/li>\n\t<li>Fixed: SimulWeather would not reset on mission change<\/li>\n\t<li>Fixed: <a href=\"https:\/\/community.bistudio.com\/wiki\/setSimulWeatherLayers\" target=\"\">setSimulWeatherLayers<\/a> stopped working after layers were set to 0<\/li>\n\t<li>Fixed: Countermeasure impact sounds were multiplied in multiplayer - <a href=\"https:\/\/feedback.bistudio.com\/T186402\" target=\"\">FT-T186402<\/a><\/li>\n\t<li>Fixed: UGVs would not follow players from the UAV terminal - <a href=\"https:\/\/feedback.bistudio.com\/T126283\" target=\"\">FT-T126283<\/a><\/li>\n\t<li>Fixed: Switching between UGV and UAV would break the UAV gunner view<\/li>\n\t<li>Fixed: Sometimes the unit follow arrow was not drawn correctly<\/li>\n\t<li>Fixed: Selected follow unit range was not highlighted in the menu<\/li>\n\t<li>Fixed: <a href=\"https:\/\/community.bistudio.com\/wiki\/connectToServer\" target=\"\">connectToServer<\/a> did not support using domain names - <a href=\"https:\/\/feedback.bistudio.com\/T159809\" target=\"\">FT-T159809<\/a><\/li>\n\t<li>Fixed: UGV would continue following dead units<\/li>\n\t<li>Fixed: Steam Rich Presence would display \"__cur_sp\" for single player missions if they were only setting the mission name in the editor attributes<\/li>\n\t<li>Fixed: Crash when <a href=\"https:\/\/community.bistudio.com\/wiki\/Arma_3:_Event_Handlers#MagazineUnloaded\" target=\"\">\"MagazineUnloaded\"<\/a> Event Handler is set and magazine is unloaded in Arsenal<\/li>\n\t<li>Fixed: <i>-init=<\/i> command line parameter did not work<\/li>\n\t<li>Fixed: Crash when using a <a href=\"https:\/\/community.bistudio.com\/wiki\/Arma_3:_Sound:_SoundSet\" target=\"\">SoundSet<\/a> with <i>delay<\/i>&nbsp;inside a vehicle - <a href=\"https:\/\/feedback.bistudio.com\/T188707\" target=\"\">FT-T188707<\/a><\/li>\n\t<li>Fixed: Map controls now correctly handle positioning inside control groups, if \"<a href=\"https:\/\/community.bistudio.com\/wiki\/ctrlMapSetPosition\" target=\"\">ctrlMapSetPosition<\/a> []\" is executed once - <a href=\"https:\/\/feedback.bistudio.com\/T189016\" target=\"\">FT-T189016<\/a><\/li>\n\t<li>Fixed: <a href=\"https:\/\/community.bistudio.com\/wiki\/setPiPEffect\" target=\"\">setPiPEffect<\/a> - Chromatic Aberration and Film Grain did not work<\/li>\n\t<li>Fixed: Weapon muzzle attachments <i>recoilCoef<\/i> was not applied to player-used weapons - <a href=\"https:\/\/feedback.bistudio.com\/T167366\" target=\"\">FT-T167366<\/a><\/li>\n\t<li>Fixed: <i>thermalResolution<\/i> config parameter did not work when setting a single resolution instead of a zoom range<\/li>\n\t<li>Fixed: <a href=\"https:\/\/community.bistudio.com\/wiki\/Procedural_Textures#UI_On_Texture\" target=\"\">UI On Texture<\/a> textures would sometimes think they are not visible on screen and never update their image (thanks <i>Lambda.Tiger<\/i>)<\/li>\n\t<li>Fixed: <a href=\"https:\/\/community.bistudio.com\/wiki\/Arma_3:_Server_Config_File#Server_Options\" target=\"\">skipLobby<\/a> parameter could not assign players into Virtual Spectator or Zeus slots and could get stuck if no other slots are free (thanks <i>Dimon UA<\/i>)<\/li>\n\t<li>Fixed: Helicopter adjusting direction after turning the engine off after landing<\/li>\n\t<li>Fixed: Functions Viewer did not populate list of functions when opening<\/li>\n\t<li>Fixed: Incorrect laser marker positioning on and around water - <a href=\"https:\/\/feedback.bistudio.com\/T188547\" target=\"\">FT-T188547<\/a><\/li>\n\t<li>Fixed: Laser target marker would get stuck on objects - <a href=\"https:\/\/feedback.bistudio.com\/T71322\" target=\"\">FT-T71322<\/a><\/li>\n\t<li>Fixed: <a href=\"https:\/\/community.bistudio.com\/wiki\/currentZeroing\" target=\"\">currentZeroing<\/a> did not respect laser range zeroing - <a href=\"https:\/\/feedback.bistudio.com\/T189309\" target=\"\">FT-T189309<\/a><\/li>\n\t<li>Fixed: Missiles did not consider their <i>fuseDistance<\/i> setting - <a href=\"https:\/\/feedback.bistudio.com\/T189277\" target=\"\">FT-T189277<\/a><\/li>\n\t<li>Fixed: Crash when using <a href=\"https:\/\/community.bistudio.com\/wiki\/loadConfig\" target=\"\">loadConfig<\/a> with binarized configs - <a href=\"https:\/\/feedback.bistudio.com\/T188760\" target=\"\">FT-T188760<\/a><\/li>\n\t<li>Fixed: Crash if OGG sound file is played more than 255 times at once<\/li>\n\t<li>Fixed: <a href=\"https:\/\/community.bistudio.com\/wiki\/Arma_3:_Event_Handlers#Fired\" target=\"\">\"Fired\"<\/a> Event Handler in multiplayer could receive wrong projectile for global projectiles - <a href=\"https:\/\/feedback.bistudio.com\/T190141\" target=\"\">FT-T190141<\/a><\/li>\n\t<li>Fixed: Forced game crash when addon requires addon that was skipped due to <a href=\"https:\/\/community.bistudio.com\/wiki\/CfgPatches\" target=\"\">skipWhenMissingDependencies<\/a> - <a href=\"https:\/\/feedback.bistudio.com\/T172179\" target=\"\">FT-T172179<\/a><\/li>\n\t<li>Fixed: <a href=\"https:\/\/community.bistudio.com\/wiki\/getShotInfo\" target=\"\">getShotInfo<\/a> did not return <i>timeToExplosion<\/i> for mines - <a href=\"https:\/\/feedback.bistudio.com\/T190684\" target=\"\">FT-T190684<\/a><\/li>\n\t<li>Fixed: Zeus did not store allowed addons in savegame (resulting in loss of access to modded units after loading a savegame) - <a href=\"https:\/\/feedback.bistudio.com\/T190333\" target=\"\">FT-T190333<\/a><\/li>\n\t<li>Fixed: Flares did not apply the <i>Attenuation<\/i> config to their light emitter<\/li>\n\t<li>Removed: Log \"context\" is no longer available on 32-bit<br><\/li>\n<\/ul>\n<h2>SERVER<\/h2>\n<ul>\n\t<li>Updated: Stand-alone Windows Dedicated Server (2.20)<\/li>\n\t<li>Updated: Stand-alone Linux Dedicated Server (2.20)\n\t<ul>\n\t\t<li>The data in <i>-mod=contact<\/i> is not fully multiplayer compatible (it is meant for the singleplayer campaign experience); we recommend only hosting servers with it for special use cases\n\t\t<ul>\n\t\t\t<li>This data is signed by a new A3C key whose presence can be used to control what client data is allowed on the server<\/li>\n\t\t<\/ul><\/li>\n\t\t<li>Known issue: Steam client modifies the <i>steam_appid.txt<\/i> file incorrectly. In case of issues, verify its content is: <b>107410<\/b><\/li>\n\t\t<li>Known issue: Sometimes the add-ons are loaded from the wrong installation (e.g. main game)\n\t\t<ul>\n\t\t\t<li>Try adding <i>-mod=curator;kart;heli;mark;expansion;jets;argo;orange;tacops;tank;enoch;aow<\/i> to your <i>arma3server.exe<\/i> shortcut<\/li>\n\t\t<\/ul><\/li>\n\t<\/ul><\/li>\n<\/ul>","published":"1","hide_from_home_feed":null,"url":"spotrep-00118","post_header_image":null,"animation_interval":"200","author":"Joris-Jan van 't Land","post_thumb":null,"type":"spotrep","updated_at":"2025-06-17 16:56:34","public_date":"2025-06-17 15:00:00"},{"id":478,"title":"TECHREP #00057","created_at":"2025-06-17 12:12:01","excerpt":"<p>Update 1.042 (Publisher, Terrain Builder)<br><\/p>","content":"<p>FROM: Tools Commissar<br>TO: Arma 3 Modders<br>MATERIEL CATEGORY: Tools<br>CIRCUMSTANCES:  Update 1.042 (Publisher, Terrain Builder)<br>SIZE: ~26 MB<\/p>\n<h1>CHANGELOG<br><\/h1>\n<h2><a href=\"http:\/\/store.steampowered.com\/app\/233800\/\" target=\"\">TOOLS<\/a><\/h2>\n<ul>\n\t<li><a href=\"https:\/\/community.bistudio.com\/wiki\/Publisher\" target=\"\">Publisher<\/a>\n\t<ul>\n\t\t<li>Added: Support for <a href=\"https:\/\/store.steampowered.com\/app\/2647830\/Arma_3_Creator_DLC_Expeditionary_Forces\/\" target=\"\">Arma 3 Creator DLC: Expeditionary Forces<\/a><\/li>\n\t\t<li>Added: <a href=\"https:\/\/store.steampowered.com\/app\/1175380\/Arma_3_Creator_DLC_Spearhead_1944\/\" target=\"\">Arma 3 Creator DLC: Spearhead 1944<\/a> Mortain terrain Steam Workshop tag<\/li>\n\t<\/ul><\/li>\n\t<li><a href=\"https:\/\/community.bistudio.com\/wiki\/Terrain_Builder\" target=\"\">Terrain Builder<\/a>\n\t<ul>\n\t\t<li>Fixed: Crash when loading P3Ds using the new <a href=\"https:\/\/community.bistudio.com\/wiki\/Arma_3:_P3D_Encryption\" target=\"\">P3D encryption<\/a><\/li>\n\t<\/ul><\/li>\n\t<li>Steam configuration\n\t<ul>\n\t\t<li>Changed: Incremented version number to reflect the current stage (1.042)<\/li>\n\t<\/ul><\/li>\n<\/ul>\n<h1>NOTES<br><\/h1>\n<ul>\n\t<li>Not all <a href=\"https:\/\/community.bistudio.com\/\" target=\"\">documentation<\/a> yet reflects these changes.<\/li>\n\t<li>In case of any issue, please, let us know on our usual channels: <a href=\"https:\/\/feedback.bistudio.com\/project\/view\/1\/\" target=\"\">Feedback Tracker<\/a>, <a href=\"https:\/\/discord.com\/invite\/arma\" target=\"\">Discord<\/a> (<i>#arma3_tools<\/i>), or the <a href=\"http:\/\/forums.bistudio.com\/forumdisplay.php?169-ARMA-3-EDITING\" target=\"\">forums<\/a>.<\/li>\n\t<li>A <i>Legacy Build<\/i> Steam branch is available for advanced users. It contains the previous significant main branch version (1.040). It can be used to compare specific changes between major releases. The access code for this branch is: <i>Arma3ToolsLegacy1040<\/i><\/li>\n\t<li>You can subscribe (for free) to the <a href=\"http:\/\/store.steampowered.com\/app\/233800\/\" target=\"\">Tools<\/a> and <a href=\"http:\/\/store.steampowered.com\/app\/390500\/\" target=\"\">Samples<\/a> packages from the Steam store. Once done, you will find these application in your Steam library (switch the filter to \"Tools\").<\/li>\n\t<li>You will need to start the <a href=\"https:\/\/community.bistudio.com\/wiki\/Arma_3_Tools_Launcher\" target=\"\">primary tool<\/a> once to add all needed registry entries.<\/li>\n\t<li>The 64-bit Binarize executable is provided without any additional support and has to be manually linked should you want to use it.<\/li>\n\t<li>We recommend you to backup your project files frequently!<br><\/li>\n<\/ul>","published":"1","hide_from_home_feed":null,"url":"techrep-00057","post_header_image":null,"animation_interval":"200","author":"Joris-Jan van 't Land","post_thumb":null,"type":"techrep","updated_at":"2025-06-17 14:02:57","public_date":"2025-06-17 14:00:00"},{"id":477,"title":"OPREP - GLOBAL MOBILIZATION UPDATE 1.6","created_at":"2025-05-29 10:12:51","excerpt":"<p>An introduction to Global Mobilization Update 1.6<\/p>","content":"<p><b>UNIT<\/b>: Vertexmacht<br>\n<b>TO<\/b>: Arma 3 Creator DLC Users<br>\n<b>OPSUM<\/b>: Introduction to Global Mobilization Update 1.6\n<\/p>\n\n\n\n\n\n\n\n\n\n<h2>EVALUATION<\/h2>\n\n\n\n\n\n\n\n\n\n<p>Hello Arma 3 Community!<\/p>\n\n\n\n\n\n<p>Today we are introducing the 1.6 update for <a href=\"https:\/\/store.steampowered.com\/app\/1042220\/Arma_3_Creator_DLC_Global_Mobilization__Cold_War_Germany\/\"><strong>Global Mobilization - Cold War Germany<\/strong><\/a>. A lot has changed under the hood of GM, besides new content, new gameplay features have also been introduced, as well as some fundamental adjustments to how GM plays overall. Let's dive right in:<\/p>\n\n\n\n\n\n\n\n<h2>OVERVIEW<\/h2>\n\n\n\n\n\n<h4>Fundamental AI Weapon Rework<\/h4>\n\n\n\n\n<p>GM's weapons were unintentionally too accurate in the hands of AI, while you as a player got the actual ballistics that we encoded. For the longest time, this aspect of GM went unnoticed even by us, as from the technical side (the plain numbers in the code) everything looked correct. The community reported tougher battles against AI, and we couldn't find any reason why this should be. We were going nuts, chasing what seemed to us to be some ghost bug.<\/p>\n\n<p>Turns out there was a parsing issue with the AI weapon accuracy values. We used some more advanced configuration formatting, which happens to explicitly not work with AI values but worked elsewhere just fine. So even when we directly compared the weapon configuration values to those of other A3 weapons, they were not suspicious to us. We couldn\u2019t spot any difference that could explain the reports.<\/p>\n\n\n<p>Long story short, this is now solved and the AI will no longer shoot you with deadly accuracy. You\u2019ll actually hear some bullets whizz by first for a change.<\/p>\n\n\n<h4>RakJPz 2<\/h4>\n\n<p>\n[gallery][thumb]A3_GM_CDLC_1.6_image_7.jpg[\/thumb][\/gallery]\n<\/p>\n\n<p>Based on the chassis of the Light Tank Family, the <strong>Raketenjagdpanzer 2<\/strong> is a light and nimble tank hunter, with a low profile and 14 devastating SS.11 anti-tank missiles. It provides NATO forces with lethal precision all the way out to 3000m.<\/p>\n\n<p>The Multiplayer Coop Mission \u201cMissile Safari\u201d was updated to provide a couple of these for you to go hunting with.<\/p>\n\n<h4>9P133<\/h4>\n\n<p>\n[gallery][thumb]A3_GM_CDLC_1.6_image_1.jpg[\/thumb][\/gallery]\n<\/p>\n\n<p>The East is getting a counterpart to the missile hunter: The <strong>9P133<\/strong>. A BRDM-2 based carrier with six guided missiles, it is viciously fast, small, and very effective at repelling advancing Western tank formations.<\/p>\n\n<h4>KPz 1A4<\/h4>\n\n<p>\n[gallery][thumb]A3_GM_CDLC_1.6_image_5.jpg[\/thumb][\/gallery]\n<\/p>\n\n<p>The <strong>KPz 1A4<\/strong> arrives! This particular variant of the West German Main Battle Tank (MBT) has one specific advantage over all its other siblings: An&nbsp;<strong>advanced Hunter-Killer system<\/strong> was deployed on this variant, enabling the vehicle's commander to temporarily take control of the turret to override the gunner's aim. This greatly enhances the cooperation between the gunner and commander.<\/p>\n\n<p>To make this new feature more accessible in game, we have updated the Multiplayer Co-op Scenario \u201cFat Cats.\u201d You will now be sent to destroy the enemy in this new tank.<\/p>\n\n<p>Additionally, other vehicles like the SpPz 2 and Spz 1 also now have this feature enabled. To use it, simply press <strong>Ctrl + T<\/strong> as commander to toggle the override mode (You can change this hotkey binding in the options).<\/p>\n\n<h4>KPz 1A5DK1<\/h4>\n\n<p>\n[gallery][thumb]A3_GM_CDLC_1.6_image_6.jpg[\/thumb][\/gallery]\n<\/p>\n\n<p>The <strong>KPz 1A5DK1<\/strong> is a unique variant of the large KPz 1 family. Based on the hull and turret of a KPz 1A3, it incorporates all the benefits of the KPz 1A5 in a modern package. One vehicle per platoon was equipped with a dozer blade, similar to that of the BPz 2, ready to move obstacles out of the way.<\/p>\n\n<p>Drivers of vehicles equipped with a dozer blade can operate it via the Dozer Blade Up\/Down controls (You can set these hotkey binding in the options, as they are unbound by default).<\/p>\n\n<h4>Mortars<\/h4>\n\n<p>\n[gallery][thumb]A3_GM_CDLC_1.6_image_3.jpg[\/thumb][\/gallery]\n<\/p>\n\n<p>West Germany is now equipped with the <strong>M120 mortar<\/strong>, both as static and or inside a new <strong>PzMrs M113A1G <\/strong>variant. East Germany and Poland receive the <strong>2B11<\/strong>. Since no mobile equivalent exists for the East, we've enabled these static mortars to be loaded using Arma 3's Vehicle-in-Vehicle system through the action menu. The same loading functionality is available to the SPG-9 as well. The static tripod DSHKM can now be disassembled and carried, albeit slowly.<\/p>\n\n<h4>TPz1 Versions<\/h4>\n\n<p>\n[gallery][thumb]A3_GM_CDLC_1.6_image_4.jpg[\/thumb][\/gallery]\n<\/p>\n\n<p>Battlefield support in the form of Medical and Radio Jamming arrives on the TPz1 Platform. While the medical variant works as all other ambulance vehicles, the <strong>TPz1 VHF Jammer<\/strong> is purely cosmetic and has no deeper gameplay features, besides serving as a great high value target that you don't regularly see in games.<\/p>\n\n<h4>DDR \u201890<\/h4>\n\n<p>\n[gallery][thumb]A3_GM_CDLC_1.6_image_2.jpg[\/thumb][\/gallery]\n<\/p>\n\n<p>East Germany is getting a modernization! We're introducing the <strong>East German Uniform Trials (UTV)<\/strong>, consisting of a new uniform, carry rig, and <strong>M86 helmets<\/strong> - a shorter variant of the M56 helmet. The new motorized infantry will also by default carry the <strong>BESPA armor vest system<\/strong>, giving them ballistic protection equal to Armor Level II. As their default weapon they carry an East German produced all-black <strong>MPi AK74N<\/strong>.<\/p>\n\n<p>Their rides have gotten an upgrade, too: The <strong>BMP-1P<\/strong> with its <strong>9K111 ATGM<\/strong>.<\/p>\n\n<p>All in all we found this to be the most believable selection of real, existing historic gear that would have been a logical upgrade of East Germany\u2019s military throughout the 1990s.<\/p>\n\n<h4>Poland<\/h4>\n\n<p>\n[gallery][thumb]A3_GM_CDLC_1.6_image_9.jpg[\/thumb][\/gallery]\n<\/p>\n\n<p>The Polish and East German special forces are now partially equipped with the Ochra protective vest, a ballistic vest made in Poland, comparable to Armor Level II of other vests in Arma 3. It is available in six different colors.<\/p>\n\n<h4>Scene Building<\/h4>\n\n<p>\n[gallery][thumb]A3_GM_CDLC_1.6_image_8.jpg[\/thumb][\/gallery]\n<\/p>\n\n<p>Various grenades and rockets are now placeable objects. Along with a new selection of crates for both East and West.<\/p>\n\n<h4>Light Features<\/h4>\n\n<p>All vehicles now offer additional light mode settings. With the default keybind of <strong>Ctrl + L<\/strong> you can now switch to blackout lights or convoy light mode for vehicles where appropriate.<\/p>\n\n<p>Additionally, all vehicles that have <strong>turn indicators<\/strong> can now make use of them. The default bindings for this are <strong>Q<\/strong> and <strong>E<\/strong>. You can remap them from the Control Options if you wish to do so.<\/p>\n\n<p>\n[gallery][thumb]A3_GM_CDLC_1.6_lights_image_1.jpg[\/thumb][\/gallery]\n<\/p>\n<p>\n[gallery][thumb]A3_GM_CDLC_1.6_lights_image_2.gif[\/thumb][\/gallery]\n<\/p>\n\n<h2>CLOSING WORDS<\/h2>\n\n\n<p>This now marks our 6th update for this CDLC after it was released <a href=\"https:\/\/arma3.com\/news\/arma-3-creator-dlc-global-mobilization-is-out-now\"><strong>six years ago<\/strong><\/a>. That is quite a long time, which leaves both the community and ourselves wondering if the ride will continue. We can confidently tell you that we are going on further. <strong>There is more to come, a lot more.<\/strong> As usual we cannot reveal any details about what's next, but we can share with you the fact that we are already way too deep into it, and that it will be sooner than later.<\/p>\n\n\n<p>You can reach us on our <a href=\"https:\/\/discord.gg\/XbhfF37\" target=\"\"><b>Discord Server<\/b><\/a> to get into direct contact with us developers should you have feedback, wish to report and resolve issues, or you have a great idea for the project that you want to share!<\/p>\n\n<p>We made the decision to release the GM 1.6 update the way it is now, to not leave you all waiting too long.<\/p>\n\n\n\n<p>Until then,<\/p>\n\n\n\n\n<p>- Vertexmacht<\/p>","published":"1","hide_from_home_feed":null,"url":"oprep-global-mobilization-update-16","post_header_image":null,"animation_interval":"200","author":"Vertexmacht","post_thumb":null,"type":"oprep","updated_at":"2025-05-29 16:01:54","public_date":"2025-05-29 04:36:00"},{"id":476,"title":"OPREP - S.O.G. UPDATE 1.31","created_at":"2024-12-10 12:53:57","excerpt":"<p>A review of the S.O.G. Prairie Fire 1.31 Update<\/p>","content":"<p><strong>UNIT: <\/strong>Savage Game Design<br>\n<strong>TO: <\/strong>Arma 3 Creator DLC Users<br>\n<strong>OPSUM: <\/strong>Overview of S.O.G. Prairie Fire 1.31 Update<\/p>\n\n\n\n<h2>EVALUATION<\/h2>\n\n\n\n<p>Hello Arma 3 players!<br><br>With the release of Update 1.31, S.O.G. Prairie Fire sees a significant focus on quality-of-life improvements across various game elements. This update introduces refined mechanics, enhanced sound effects, and bug fixes, all aimed at elevating the player experience.<\/p>\n\n\n\n<p>Notably, <strong>20 vehicles<\/strong>, <strong>15 weapons<\/strong>, and <strong>multiple terrain assets<\/strong> have undergone improvements, including adjustments to vehicle handling, weapon dexterity, and performance optimizations. These changes are driven by community feedback and our commitment to historical authenticity and gameplay fluidity.<\/p>\n\n\n\n<p>The 1.31 update was just released. Don\u2019t forget to verify Arma 3 local file integrity in your Steam library.<\/p>\n\n\n\n<p>You can read the changelog <a href=\"https:\/\/forums.bohemia.net\/forums\/topic\/234698-sog-prairie-fire-changelog\/\"><b>here<\/b><\/a>.<\/p>\n\n<p>\n\n[gallery][thumb]SOG_PF_1.31_Cover.jpg[\/thumb][\/gallery]\n\n<\/p>\n\n<h2>DEVELOPMENT INSIGHTS<\/h2>\n\n\n\n<p>Our team has been closely monitoring community feedback and bug reports. This update reflects our ongoing commitment to improving the player experience. While we\u2019ve moved new assets to our free mod <a href=\"https:\/\/steamcommunity.com\/sharedfiles\/filedetails\/?id=3083451905&amp;searchtext=nickel+steel\"><b>S.O.G. Nickel Steel<\/b><\/a>, these extensive quality-of-life changes touch nearly every aspect of gameplay.<\/p>\n\n\n\n<p>From refining vehicle handling and fixing weapon animations to enhancing sound design, we\u2019ve worked hard to ensure that S.O.G. Prairie Fire continues to feel immersive and authentic. Every tweak and adjustment has been made with the goal of providing a more seamless and enjoyable battlefield experience.<\/p>\n\n\n\n<p>The <a href=\"https:\/\/wiki.sogpf.com\/index.php\/Main_Page\"><strong>Prairie Fire Wiki<\/strong><\/a> has also been updated to reflect changes made in this patch.<\/p>\n\n\n\n<h2>REFLECTIONS<\/h2>\n\n\n\n<p>As we move forward in our mission, it\u2019s always worth looking back on what we have accomplished.<\/p>\n\n\n\n<p>Forming in 2017, initially from members of the <a href=\"https:\/\/store.steampowered.com\/app\/601670\/Arma_3_Jets\/\"><b>Arma 3 Jets DLC<\/b><\/a> team and the <a href=\"https:\/\/steamcommunity.com\/workshop\/filedetails\/?id=943001311\"><b>Unsung Vietnam War mod<\/b><\/a> team, Team Savage grew to over 150 people, in 37 countries, working mostly part-time to develop <a href=\"https:\/\/store.steampowered.com\/app\/1227700\/Arma_3_Creator_DLC_SOG_Prairie_Fire\/\"><b>S.O.G. Prairie Fire<\/b><\/a>.<\/p>\n\n\n\n<p>The DLC was released in May 2021, and has received three <a href=\"https:\/\/www.sogpf.com\/\"><b>major updates<\/b><\/a> in the last three years. The content available now covers 13 factions with 266 items of equipment, 46 vehicles, 44 static weapons, 85 weapons and 63 items, grenades, mines and traps. There are three terrains to explore, covering 550km2, and 35 songs on the <a href=\"https:\/\/store.steampowered.com\/app\/1616620\/Arma_3_Creator_DLC_SOG_Prairie_Fire_Soundtrack\/\"><b>Original Soundtrack<\/b><\/a>.<\/p>\n\n\n\n<p>For gameplay, the community rallied to the cause, and has created 111 <a href=\"https:\/\/steamcommunity.com\/sharedfiles\/filedetails\/?id=2623469737\"><b>missions<\/b><\/a> for DLC players to enjoy, on top of the eight-mission co-op campaign. For solo campaign players, you can even use <a href=\"https:\/\/steamcommunity.com\/sharedfiles\/filedetails\/?id=2812560646\"><b>JohnnyBoy\u2019s SOG AI mod<\/b><\/a> to enhance the experience.<\/p>\n\n\n\n<h2>COMMUNITY ACHIEVEMENTS<\/h2>\n\n\n\n<p>Beyond the DLC itself lies the SOG Prairie Fire community. Over the past three years, the team and the community have supported SOG (and all) veterans, with a range of outstanding projects:<\/p>\n\n\n\n<ul>\n\n\t\n\t<li>Raised $26,000 to support veteran welfare through the <a href=\"https:\/\/www.hpsys.com\/ARSENAL.htm\"><b>ARSENAL tool<\/b><\/a>, developed by SOG veteran Dick Thompson. This tool saves lives and is available free to veterans - please ask in our Discord <a href=\"https:\/\/discord.gg\/s-o-g-prairie-fire-824223048940519434\"><b>welfare channel<\/b><\/a>. Special thanks to Dolly, ZFDigby, Spoffy, Pi123263, Nemesis, Liru, LongLiveQuebec, Whiplash, and FNF.<\/li>\n\n\n<\/ul>\n\n\n\n<ul>\n\n\t\n\t<li>Assisted <a href=\"https:\/\/www.army.mil\/medalofhonor\/davis\/\"><b>Paris Davis<\/b><\/a> to be awarded the Medal of Honor after a 57 year injustice. Special thanks to Whiplash, Dugong and PapaBear.<\/li>\n\n\n<\/ul>\n\n\n\n<ul>\n\n\t\n\t<li>Helped build a statue of SOG veteran and former Delta Force commander <a href=\"https:\/\/eldonbargewell.org\/delta-park-project\/\"><b>Eldon Bargewell<\/b><\/a>. Special thanks to Preacher and Squike at <a href=\"https:\/\/www.modernforces.com\/\"><b>Modern Forces<\/b><\/a>.<\/li>\n\n\n<\/ul>\n\n\n\n<ul>\n\n\t\n\t<li>Donated $10,000, from sales of the <a href=\"https:\/\/store.steampowered.com\/app\/1616620\/Arma_3_Creator_DLC_SOG_Prairie_Fire_Soundtrack\/\"><b>Original Soundtrack<\/b><\/a>, to the Special Operations Association, with some of the proceeds going towards the <a href=\"https:\/\/www.sfa38.org\/pages\/gabriel-field-legacy-tribute\"><b>Gabriel Field Legacy Project<\/b><\/a>.<\/li>\n\n\n<\/ul>\n\n\n\n<ul>\n\n\t\n\t<li>Helped create a new permanent <a href=\"https:\/\/youtu.be\/8CfROBFaedk?si=37gJvzdlQQqzfD1n\"><b>MACV SOG display<\/b><\/a> at 5th Special Forces Group HQ at Fort Campbell. Special thanks to Preacher, Squike, Beachhead, Don and Ice.<\/li>\n\n\n<\/ul>\n\n\n\n<ul>\n\n\t\n\t<li>Helped preserve history by publishing 30 in-depth interviews with MACV SOG and other US Special Forces veterans on our <a href=\"https:\/\/www.youtube.com\/channel\/UCwwNhHmwOgqJ2cliZ1yi2FA\"><b>YouTube channel<\/b><\/a>. Special thanks to Beachhead, Des, Whiplash and Ice.<\/li>\n\n\n<\/ul>\n\n\n\n<ul>\n\n\t\n\t<li>As part of the forthcoming MACV SOG documentary, recorded over 40 in-depth interviews with MACV SOG operators and the aviators who supported their missions. Special thanks to Beachhead and Ice for this.<\/li>\n\n\n<\/ul>\n\n\n\n<ul>\n\n\t\n\t<li>Escorted <a href=\"https:\/\/youtu.be\/K7kBMPh76kI?si=6OUKCpyx5bGL1mIb\"><b>Larry Trimble<\/b><\/a> back to the SOG CCN camp location at Marble Mountain in Vietnam and supported public talks with him.<\/li>\n\n\n<\/ul>\n\n\n\n<ul>\n\n\t\n\t<li>Supported the release of three SOG veteran memoirs - <a href=\"https:\/\/www.amazon.com\/SOG-Codename-Dynamite-MACV-SOG-Personal\/dp\/B0C9SB8JGP\"><b>SOG Codename Dynamite<\/b><\/a> books 1 <a href=\"https:\/\/www.amazon.com\/SOG-Codename-Dynamite-MACV-SOG-Personal\/dp\/B0CZJF75M3\/\"><b>and 2<\/b><\/a> by Dick Thompson and <a href=\"https:\/\/www.amazon.com\/Operation-Tailwind-Memoirs-Secret-Battle\/dp\/B0CQ8SY2C5\/\"><b>Operation Tailwind<\/b><\/a> by Barry Pencek, with more on the way.<\/li>\n\n\n<\/ul>\n\n\n\n<p>There are more community projects underway, which we\u2019ll tell you about when we can.<\/p>\n\n<p>\n\n[gallery][thumb]SOG_PF_1.31_OPREP_1.jpg[\/thumb][\/gallery]\n\n<\/p>\n\n<h2>COMMUNITY HIGHLIGHTS<\/h2>\n\n\n\n<p>The S.O.G. Prairie Fire community continues to thrive, producing incredible content that expands upon the core experience. Over the past year, creators have developed numerous standout mods and scenarios, enhancing both single-player and co-op gameplay. Among these, the <a href=\"https:\/\/steamcommunity.com\/sharedfiles\/filedetails\/?id=2812560646\"><strong>SOG AI mod<\/strong><\/a> stands out, allowing players to experience the campaign with AI companions, offering a new way to enjoy the game solo.<\/p>\n\n\n\n<p>One of the most exciting upcoming campaigns is <strong>Dunklik\u2019s \"<\/strong><a href=\"https:\/\/www.youtube.com\/watch?v=GkP7aPtxiec\"><strong>Purple Haze<\/strong><\/a>,<strong>\"<\/strong> which features a story-driven experience with heavy narrative elements. The campaign, set in the Vietnam War era, offers a deep, scripted experience where players must navigate the challenges of identifying friend from foe and using combined arms tactics. With fully voiced missions and a focus on immersive storytelling, it promises to be a standout addition to the community\u2019s growing library of content.<\/p>\n\n\n\n<p>With so much creative energy within the community, we're excited to see what new content will emerge in the coming months.<\/p>\n\n\n\n<h2>S.O.G. NICKEL STEEL - OUR LEGACY<\/h2>\n\n\n\n<p>As we said in our <a href=\"https:\/\/dev.arma3.com\/post\/oprep-sog-update-13\"><b>last OPREP<\/b><\/a>, we are continuing to develop assets for Arma 3. These are being released in the <a href=\"https:\/\/steamcommunity.com\/sharedfiles\/filedetails\/?id=3083451905&amp;searchtext=nickel+steel\"><b>S.O.G. Nickel Steel<\/b><\/a> mod on Steam.&nbsp;<\/p>\n\n\n\n\n\n<p>The Savage Nickel Steel team is currently working on:<\/p>\n\n\n\n\n\n<ul>\n\n\t\n\t<li>A new MP \/ SP game mode called Across The Fence<\/li>\n\n\t\n\t<li>New terrains and props<\/li>\n\n\t\n\t<li>10 new vehicles<\/li>\n\n\t\n\t<li>Seven new weapons and four interesting historical weapon variants<\/li>\n\n\t\n\t<li>New clothing and equipment<\/li><\/ul><p> That\u2019s almost enough for a small DLC in itself! If you\u2019d like to help our artists as they continue to create assets like the AC-119, the GJet pistol, the LVTP-5 APC, and more, please consider supporting us on <a href=\"https:\/\/www.patreon.com\/savagegame\"><b>Patreon<\/b><\/a>.<\/p>\n\n<p>\n\n[gallery][thumb]SOG_PF_1.31_OPREP_2.jpg[\/thumb][\/gallery]\n[gallery][thumb]SOG_PF_1.31_OPREP_3.jpg[\/thumb][\/gallery]\n\n\n<\/p>\n\n<h2>LOOKING AHEAD<\/h2>\n\n\n\n<p>So what\u2019s next for the team behind S.O.G. Prairie Fire?<\/p>\n\n\n\n<p>The team has been recognised by the <a href=\"https:\/\/specialoperations.org\/soa\/\"><b>Special Operations Association<\/b><\/a> and made a permanent member with an open invitation to future MACV SOG reunions.<\/p>\n\n\n\n<p><a href=\"https:\/\/www.savage-game.com\"><b>The studio<\/b><\/a> has developed a game design document for a future SOG-based game, and added that into the business plan which includes a MACV SOG TV Show, documentary, graphic novel series, and online Special Operations museum.&nbsp; It\u2019s an ambitious plan, grown out of the project that brought us all together to create S.O.G. Prairie Fire.<\/p>\n\n<p>\n\n[gallery][thumb]SOG_PF_1.31_OPREP_4.jpg[\/thumb][\/gallery]\n\n<\/p>\n\n<p>We wish to thank each and every one of you for your encouragement and support over the past six years, and look forward to engaging in more historic, immersive entertainment with you in future.<\/p>\n\n\n<p style=\"text-align:center;\"><b>De Oppresso Liber!<\/b><br>[gallery][thumb]SF_SOG_Crests.png[\/thumb][\/gallery]<br><!--EndFragment--><br><\/p>","published":"1","hide_from_home_feed":null,"url":"oprep-sog-update-131","post_header_image":null,"animation_interval":"200","author":"Savage Game Design","post_thumb":null,"type":"oprep","updated_at":"2025-07-14 07:09:05","public_date":"2024-12-10 07:53:00"}]