Bohemia Interactive Community
community
https://community.bistudio.com/wiki/Main_Page
MediaWiki 1.39.0
case-sensitive
Media
Special
Talk
User
User talk
Bohemia Interactive Community
Bohemia Interactive Community talk
File
File talk
MediaWiki
MediaWiki talk
Template
Template talk
Help
Help talk
Category
Category talk
Extension
Campaign
Campaign talk
DayZ
DayZ talk
Ylands
Ylands talk
Arma Reforger
Arma Reforger talk
Arma 4
Arma 4 talk

# Arma Reforger:Experimental Branch

5050
35017
363554
347747
2024-04-05T19:11:32Z
Lou Montana
10739
Fix links
363554
wikitext
text/x-wiki
{{TOC|side}} Owning {{armaR}} on Steam offers an Experimental version as two different applications named '''{{armaR}} Experimental {{Link|steam://install/1890860|(install on Steam)}}''' and '''{{armaR}} Experimental Tools''' '''{{Link|steam://run/1890880|(install and run on Steam)}}'''.

These versions provide access to new features earlier with more frequent updates but also potentially less stable ones.

{{Feature|important| * In order to launch the Experimental {{GameCategory|armaR|Modding|Official Tools|text= Workbench}}, it is '''required''' to have {{armaR}} Experimental installed and to [[Arma_Reforger:Mod_Project_Setup#Manual_Method|add its Game Data's {{hl|ArmaReforger.gproj}} to the addons list manually]] * Both versions '''share the same player profile/addon directory''' - beware of sneaking Experimental features into Stable mods and vice versa ** It might be worth considering using different profile (f.e. ArmaReforgerExperimental & ArmaReforgerWorkbenchExperimental) via [[Arma_Reforger:Startup_Parameters#profile|-profile]] CLI parameter for both Game and Workbench * The Experimental version may be '''outdated''' when Stable version releases }} {{Feature|warning|Experimental version of the game and tools are using '''separate backend''' from Stable game. This means that i.e. '''mods created for Stable game are not visible in Experimental workshop'''.

When '''publishing mods, it is also necessary to create new, separate account'''.}}

== Differences ==

{| class="wikitable align-center" ! rowspan="2" | Information ! colspan="2" | {{GameCategory|armaR|link= y}} |- ! Stable ! Experimental |- | Game Steam AppID | {{Link|https://store.steampowered.com/app/1874880|1874880}} | 1890860 |- | Server Steam AppID | {{Link|https://store.steampowered.com/app/1874900|1874900}} | 1890870 |- | Tools Steam AppID | {{Link|https://store.steampowered.com/app/1874910|1874910}} | 1890880 |- | Workshop | colspan="2" | Each version has its own {{Link|Arma Reforger:Workshop|Workshop}};<br> mods and accounts are not shared (another {{Name|bi|short}} account must be {{Link|https://accounts-sub-ar.bistudio.com/auth/register|created on experimental backend}}) |}

== Third Party Software ==

=== DRED ===

{{Link|https://learn.microsoft.com/en-us/windows/win32/direct3d12/use-dred|DRED}} (Device Removal Extended Data) is a Microsoft DirectX 12 software used to obtain additional information on render crashes. * It is (re)installed if missing when the Experimental game executable is launched * It is not uninstalled when the Experimental branch is uninstalled, as it is impossible to distinguish between a usermade installation and an {{armaR}}-related installation * The performance overhead is minimal and should not be noticeable * To manage the software, go to Windows Settings > Apps > Apps & Features > Optional Features: ** To install it, click on Add a feature and select '''Graphics Tools''' ** To uninstall it, click on '''Graphics Tools''' then click its Uninstall button.

{{GameCategory|armaR}}
st3cnl7cse9fsiw9b21gbarlgd9i7yr

# Arma Reforger:Getting Started

5050
33178
370451
370448
2024-12-12T11:15:49Z
Lou Montana
10739
Fix PS link
370451
wikitext
text/x-wiki
{{TOC|side}} {{GameCategory|armaR|link=y}} is the first game revealing the full power of the new [[Enfusion]] Engine to the public.

== Buy {{armaR}} ==

Where to {{Link|https://reforger.armaplatform.com/buygame|buy {{armaR}}}}:

{| class="wikitable align-center-col-1" ! Platform ! Links |- | PC | * {{Link|https://store.bistudio.com/products/reforger-digital-steam-key|Buy {{armaR}} on {{Name|bi}} Store}} * {{Link|https://store.steampowered.com/app/1874880/Arma_Reforger/|Buy {{armaR}} on Steam}} |- | Xbox | * {{Link|https://www.xbox.com/en-us/games/store/arma-reforger-game-preview/9nkckd1wndq0|Buy {{armaR}} on Xbox}} |- | PlayStation | * {{Link|https://store.playstation.com/product/EP2601-PPSA24605_00-0538909601464686|Buy {{armaR}} on PlayStation}} |}

== Start with the Game ==

<div class="float-right">{{Youtube|UPsSCyrOllE|Quickstart Guide for {{armaR}}||500}}</div>

* Read the {{Link|https://reforger.armaplatform.com/news/boot-camp|Boot Camp}} article - useful both for beginners' boarding and veteran users to be up-to-date on the game's many aspects! * Read the in-game {{Link|Arma Reforger:Field Manual|Field Manual}} ('''Main Menu > Field Manual''' or '''Pause Menu > Field Manual''') * Set your Settings: ** Set your graphical preferences ('''Main Menu > Settings > Video''') ** Set your controls ('''Main Menu > Settings > Controls''')

then…

{{Clear}} == Play in Single Player ==

=== Tutorial ===

The tutorial is available from the main menu through '''Play > Tutorial''' (scrolling through the entries may be required).

=== Scenarios ===

'''Resistance Ops''' has been introduced with {{GVI|armaR|1.1.0}}; see its {{Link|https://reforger.armaplatform.com/news/update-march-13-2024|Update News}} on the official website. See also the [[Arma Reforger:Workshop|Workshop]] to find and download community-made Single Player Scenarios!

== Playing in Multiplayer ==

The '''Multiplayer''' main menu tile offers an interface to choose from various servers - from Official to Community-hosted ones.

== Use Mods ==

The '''Workshop''' main menu tile opens the {{Link|Arma Reforger:Workshop}} that hosts all game-accessible community-created content - missions, assets, features.

Download and activate mods from the Workshop to expand the game's possibilities!

== Find Players, Communities, Assistance ==

=== Official Communication Channels ===

* {{Link|https://forums.bohemia.net/forums/forum/401-arma-reforger/|Official {{armaR}} Forums}} ** * {{Link|https://discord.gg/arma|Official {{arma}} Discord}} ** Players and Community *** {{hl|#looking_for_game}} channel if you are looking for players *** {{hl|#looking_for_game_xbox}} channel if you are looking for players on Xbox *** {{hl|#looking_for_game_ps5}} channel if you are looking for players on PlayStation *** {{hl|#looking_for_unit}} channel if you are looking for a group of players *** {{hl|#communities_arma}} channel to browse advertising communities ** Assistance *** {{hl|#reforger_troubleshooting}} for technical assistance *** {{hl|#reforger_workbench}}, {{hl|#enfusion_scripting}} and all {{hl|Enfusion Modifications}} category channels *** {{hl|#community_wiki}} channel where discussions about articles on this wiki happen *** And for '''all your other questions''', {{hl|#reforger_questions}} is the channel to be!

== See Also ==

* {{Link|https://www.armaplatform.com/|{{arma}} Platform}} * {{Link|https://reforger.armaplatform.com/faq|{{armaR}} FAQ}}

{{GameCategory|armaR}}
h0evflk59ltc144682p0wqyyromi8tx

# Steam

0
34301
376904
376903
2025-12-20T22:55:14Z
Lou Montana
10739
Add games to list
376904
wikitext
text/x-wiki
{{TOC|side}} {{Link|https://store.steampowered.com/|Steam}} is a video game distribution platform that hosts, sometimes exclusively, {{GameCategory|bi|link= y}} games such as {{arma3}}, {{tkoh}} and {{armaR}}. {{Feature|informative|See {{Link|https://en.wikipedia.org/wiki/Steam_(service)}}.}}

== Available {{Name|bi}} Games ==

{{Columns|3| * {{GameCategory|ofp|link= y}} * {{GameCategory|arma1|link= y}} * {{GameCategory|arma2|link= y}} * {{GameCategory|arma2oa|link= y}} * {{GameCategory|arma3|link= y}} * {{GameCategory|armaR|link= y}} * {{GameCategory|dayz|link= y}} * {{GameCategory|ylands|link= y}} * {{GameCategory|carriercommand|link= y}} * {{GameCategory|tkoh|link= y}} * {{GameCategory|tkom|link= y}} * {{GameCategory|vigor|link= y}} * {{GameCategory|silica|link= y}}

}}

== Assistance ==

=== Verify Game Files ===

In the event of a game issue, it is sometimes recommended to make Steam verify the game files: * right-click on the game in the Steam list * select "Properties" * click on "Local Files" * press "Verify integrity of game files" Steam will now verify and repair modified files. This will not erase any personal files; game progress, controls and other configurations will remain unchanged.

{{Feature|informative|See {{Link|https://help.steampowered.com/en/faqs/view/0C48-FCBD-DA71-93EB|Steam's tutorial}}.}}

=== Move {{arma3}} Workshop Items ===

Mods in {{arma3}} can often take a lot of space, and storage capacity can quickly be overwhelmed. In order to circumvent this issue, it is possible to change the mods storage location.<br> A {{Link|https://en.wikipedia.org/wiki/Symbolic_link}} (also known as Symlink) can make this happen, making the game see data from another location in the directory it expects.

# Locate the Workshop directory, in which the {{hl|107410}} directory (which has the entire {{arma3}} related Workshop items) is present.<!-- -->{{Feature|informative|Usually {{hl|C:\Program Files (x86)\Steam\steamapps\workshop\content}} or if SteamLibrary is installed on another drive (e.g {{hl|D:}}), {{hl|D:\SteamLibrary\steamapps\workshop\content}}.}} # '''Copy''' the {{hl|107410}} directory to its new location (e.g {{hl|E:\NewArma3WorkshopDirectory}}) # Rename the {{hl|<workshop directory>\107410}} source directory to make a backup and ensure it is not used accidentally(e.g {{hl|107410_backup}}) # Open Command Prompt in Administrator mode (Windows Search > type "cmd", right-click > "Run as Administrator") # Enter this command: <code style="display: block">mklink /d ''target'' ''source''</code>, where: #* ''target'' is the original {{hl|107410}} location, e.g {{hl|C:\Program Files (x86)\Steam\steamapps\workshop\content\107410}} #* ''source'' is the actual data directory, e.g {{hl|E:\NewArma3WorkshopDirectory}} # Press {{Controls|Enter}} to run the command, here <code style="display: block">mklink /d "C:\Program Files (x86)\Steam\steamapps\workshop\content\107410" "E:\NewArma3WorkshopDirectory"</code> # This is it! There is nothing else to configure and nothing to change Launcher-wise. Start the game to make sure it recognizes the items properly. # If everything went well, the backup can be safely deleted ({{hl|C:\Program Files (x86)\Steam\steamapps\workshop\content\107410_backup}}).

{{Feature|informative| To delete a symbolic link, simply delete the ''target'' directory from Windows Explorer (here {{hl|C:\Program Files (x86)\Steam\steamapps\workshop\content\107410}} > right-click > delete).<br> See also {{Link|https://www.howtogeek.com/16226/complete-guide-to-symbolic-links-symlinks-on-windows-or-linux/|How-To Geek tutorial}}. }}

{{GameCategory|arma0}} {{GameCategory|arma1}} {{GameCategory|arma2}} {{GameCategory|arma2oa}} {{GameCategory|arma3}} {{GameCategory|armaR}} {{GameCategory|arma4}} {{GameCategory|dayz}} {{GameCategory|carriercommand}} {{GameCategory|tkoh}} {{GameCategory|tkom}} {{GameCategory|vigor}} {{GameCategory|silica}}
pzya57od4mniadl3ut5h6elp0xxqem0

# Arma Reforger:Armavision

5050
33053
341812
328969
2023-06-27T11:04:09Z
Lou Montana
10739
Fix icons
341812
wikitext
text/x-wiki
{{TOC|side}} '''Armavision''' is a camera mode that allows the player to move the camera in a 1m radius around their character and take screenshots with filters, effects and other helpers.

== Controls ==

{| class="wikitable" ! Keyboard/Mouse ! Controller ! Description |- | {{Controls|W}}{{Controls|A}}{{Controls|S}}{{Controls|D}} | {{Controls|padLJoyMove}} | Move the camera horizontally |- | {{Controls|Q}}{{Controls|Z}} | {{Controls|padLT}}{{Controls|padRT}} | Move the camera vertically |- | {{Controls|RMB|Mouse}} | {{Controls|padRJoyMove}} | Rotate the camera |- | {{Controls|V}} | Hold {{Controls|padBack}} | Edit Armavision properties |- | Hold {{Controls|Y}} | {{Controls|padStart|padLB}} | Exit the interface |}

== Interface ==

=== Map ===

Shortcut: {{Controls|M}} / Hold {{Controls|padStart}}

Toggle the in-game map.

=== Flashlight ===

Shortcut: {{Controls|L}} / {{Controls|padRB|padRSB}}

Toggle flashlight for improved visibility in the dark. Note that other players cannot see this light.

=== Toggle Interface ===

Shortcut: {{Controls|I}} / {{Controls|padRB|padUp}}

=== Edit Armavision Properties ===

Shortcut: {{Controls|V}} / Hold {{Controls|padBack}}

Open the global attributes window to change Armavision overlays, effects and editor settings.

== Armavision Properties ==

=== Frame ===

Applies an effect/framing/format over the screen.

Possible values: None, Viewfinder, Polaroid, Cinema (2.35:1), Cinema (4:3), Poster

=== Logo ===

Offers a choice between logos to apply over the picture.

Possible values: None, Bohemia Interactive, Enfusion, Arma Reforger, Arma Reforger - black, Default

=== Logo position ===

Sets the Logo position over the image. The position will also adapt depending on the Frame.

Possible values: Bottom right, Bottom center, Bottom left, Center, Top right, Top center, Top left

=== Player character effects ===

Sets a player character effect - only on player (i.e non-AI) units.

Possible values: None, Name tags, Redacted faces - black bars, Redacted faces - blur

=== Vignette ===

Sets a vignette (darkened borders) effect.

Possible values: None, Light, Strong

=== Grids ===

Applies an image composition overlay - Thirds (3&times;3) and Grid (10&times;10).

Possible values: None, Thirds, Grid

=== Filter ===

Sets a colour and post-process filter over the image (not applied to Frame).

* World War I: monochrome sepia * World War II: monochrome * Cold War: desaturated + chromatic aberration

Possible values: None, World War I, World War II, Cold War

{{GameCategory|armaR|Content}}
ldlyghx4zsgg3xprwauiqqz24si99ly

# Arma Reforger:Assets

5050
35074
376303
376302
2025-10-03T18:18:54Z
Lou Montana
10739
Some wiki formatting
376303
wikitext
text/x-wiki
{{TOC|side}} {{Feature|informative|The latest list can be found in the following config files, under '''Entity Catalogs''': * {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Factions/US.conf}} * {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Factions/USSR.conf}} * {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Factions/FIA.conf}} * {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Factions/CIV.conf}} }}

== US ==

=== Character ===

{| class="wikitable sortable valign-top" style="min-width: 60em" ! style="min-width: 25%" | Name ! Prefab ! class="unsortable" | Details |- | Random US Soldier | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/BLUFOR/US_Army/Character_US_Randomized.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Equipment: ** BDU Blouse ** BDU Trousers ** PASGT Helmet ** US Combat Boots {{!}} * Items: ** AN/PRC-68 Radio ** 2&times; Bandage ** Compass ** Flashlight ** M1967 Entrenching Tool ** Map (NATO) ** Morphine Injector ** Tourniquet {{!}}} </spoiler> |- | Rifleman | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/BLUFOR/US_Army/Character_US_Rifleman.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** M16A2 + A2 Flash Hider * Equipment: ** ALICE - Standard ** BDU Blouse ** BDU Trousers ** PASGT Helmet ** PASGT Vest ** US Combat Boots {{!}} * Items: ** 6&times; 5.56×45mm 30rnd STANAG Mag ** 2&times; AN-M8 HC ** AN/PRC-68 Radio ** 2&times; Bandage ** Compass ** Flashlight ** M1967 Entrenching Tool ** M67 ** Map (NATO) ** Morphine Injector ** Tourniquet {{!}}} </spoiler> |- | Officer | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/BLUFOR/US_Army/Character_US_Officer.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** M9 * Equipment: ** ALICE - Officer ** BDU Blouse - Rolled-up ** BDU Trousers ** Patrol Cap ** US Combat Boots {{!}} * Items: ** 2&times; 9×19mm 15rnd M9 Mag ** AN/PRC-68 Radio ** 2&times; Bandage ** Compass ** Flashlight ** M1967 Entrenching Tool ** Map (NATO) ** Morphine Injector ** Tourniquet {{!}}} </spoiler> |- | Platoon Leader | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/BLUFOR/US_Army/Character_US_PL.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** M16A2 + A2 Flash Hider ** M9 * Equipment: ** ALICE - Commander ** BDU Blouse ** BDU Trousers ** PASGT Helmet - Goggles ** PASGT Vest ** US Combat Boots {{!}} * Items: ** 3&times; 5.56×45mm 30rnd STANAG Mag ** 3&times; 5.56×45mm 30rnd STANAG Tracer Mag ** 2&times; 9×19mm 15rnd M9 Mag ** AN/PRC-68 Radio ** 2&times; Bandage ** Compass ** Flashlight ** M18 - Purple ** M18 - Yellow ** M1967 Entrenching Tool ** M67 ** Map (NATO) ** Morphine Injector ** Tourniquet {{!}}} </spoiler> |- | Platoon Sergeant | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/BLUFOR/US_Army/Character_US_Sergeant.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** M16A2 + A2 Flash Hider * Equipment: ** ALICE - Standard ** BDU Blouse - Rolled-up ** BDU Trousers ** PASGT Helmet ** PASGT Vest ** US Combat Boots {{!}} * Items: ** 6&times; 5.56×45mm 30rnd STANAG Mag ** AN/PRC-68 Radio ** 2&times; Bandage ** Compass ** Flashlight ** M18 - Green ** M18 - Red ** M1967 Entrenching Tool ** M67 ** Map (NATO) ** Morphine Injector ** Tourniquet {{!}}} </spoiler> |- | Squad Leader | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/BLUFOR/US_Army/Character_US_SL.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** M16A2 + A2 Flash Hider * Equipment: ** ALICE - Standard ** BDU Blouse ** BDU Trousers ** PASGT Helmet - Camouflaged Netting ** PASGT Vest ** US Combat Boots {{!}} * Items: ** 3&times; 5.56×45mm 30rnd STANAG Mag ** 3&times; 5.56×45mm 30rnd STANAG Tracer Mag ** AN/PRC-68 Radio ** 2&times; Bandage ** Compass ** Flashlight ** M18 - Purple ** M18 - Yellow ** M1967 Entrenching Tool ** M67 ** Map (NATO) ** Morphine Injector ** Tourniquet {{!}}} </spoiler> |- | Team Leader | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/BLUFOR/US_Army/Character_US_TL.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** M16A2 *** 4×20 Carry Handle Scope *** A2 Flash Hider * Equipment: ** ALICE - Standard ** BDU Blouse ** BDU Trousers ** PASGT Helmet - Goggles ** PASGT Vest ** US Combat Boots {{!}} * Items: ** 3&times; 5.56×45mm 30rnd STANAG Mag ** 3&times; 5.56×45mm 30rnd STANAG Tracer Mag ** 2&times; AN-M8 HC ** AN/PRC-68 Radio ** 2&times; Bandage ** Compass ** Flashlight ** M18 - Green ** M18 - Red ** M1967 Entrenching Tool ** M67 ** Map (NATO) ** Morphine Injector ** Tourniquet {{!}}} </spoiler> |- | Light AT Rifleman | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/BLUFOR/US_Army/Character_US_LAT.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** M16A2 + A2 Flash Hider ** M72A3 LAW * Equipment: ** ALICE - Standard ** BDU Blouse ** BDU Trousers ** PASGT Helmet ** PASGT Vest ** US Combat Boots {{!}} * Items: ** 6&times; 5.56×45mm 30rnd STANAG Mag ** 2&times; AN-M8 HC ** AN/PRC-68 Radio ** 2&times; Bandage ** Compass ** Flashlight ** M1967 Entrenching Tool ** M67 ** Map (NATO) ** Morphine Injector ** Tourniquet {{!}}} </spoiler> |- | Grenadier | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/BLUFOR/US_Army/Character_US_GL.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** M16A2 *** A2 Flash Hider *** M203 * Equipment: ** ALICE - Grenadier ** BDU Blouse ** BDU Trousers ** PASGT Helmet ** US Combat Boots {{!}} * Items: ** 11&times; 40mm M433 HEDP Grenade ** 2&times; 40mm M583A1 White Flare ** 40mm M661 Green Flare ** 40mm M662 Red Flare ** 6&times; 5.56×45mm 30rnd STANAG Mag ** 2&times; AN-M8 HC ** AN/PRC-68 Radio ** 2&times; Bandage ** Compass ** Flashlight ** M1967 Entrenching Tool ** 3&times; M67 ** Map (NATO) ** Morphine Injector ** Tourniquet {{!}}} </spoiler> |- | Automatic Rifleman | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/BLUFOR/US_Army/Character_US_AR.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** M249 SAW * Equipment: ** ALICE - Automatic Rifleman ** BDU Blouse - Rolled-up ** BDU Trousers ** PASGT Helmet - Goggles ** PASGT Vest ** US Combat Boots {{!}} * Items: ** 2&times; 5.56×45mm 200rnd M249 Belt ** AN-M8 HC ** AN/PRC-68 Radio ** 2&times; Bandage ** Compass ** Flashlight ** M1967 Entrenching Tool ** Map (NATO) ** Morphine Injector ** Tourniquet {{!}}} </spoiler> |- | Machine-Gunner | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/BLUFOR/US_Army/Character_US_MG.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** M60 ** M9 * Equipment: ** ALICE - Machine Gunner ** BDU Blouse - Rolled-up ** BDU Trousers ** M69 Vest ** PASGT Helmet ** US Combat Boots {{!}} * Items: ** 7.62×51mm 100rnd M60 Belt ** 2&times; 9×19mm 15rnd M9 Mag ** AN-M8 HC ** AN/PRC-68 Radio ** 2&times; Bandage ** Compass ** Flashlight ** M1967 Entrenching Tool ** Map (NATO) ** Morphine Injector ** Tourniquet {{!}}} </spoiler> |- | Machine-Gunner Assistant | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/BLUFOR/US_Army/Character_US_AMG.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** M16A2 + A2 Flash Hider * Equipment: ** ALICE - Standard ** ALICE Medium Backpack ** BDU Blouse ** BDU Trousers ** M69 Vest ** PASGT Helmet ** US Combat Boots {{!}} * Items: ** 6&times; 5.56×45mm 30rnd STANAG Mag ** 4&times; 7.62×51mm 100rnd M60 Belt ** 2&times; AN-M8 HC ** AN/PRC-68 Radio ** 2&times; Bandage ** Compass ** Flashlight ** M1967 Entrenching Tool ** M67 ** Map (NATO) ** Morphine Injector ** Tourniquet {{!}}} </spoiler> |- | Medic | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/BLUFOR/US_Army/Character_US_Medic.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** M16A2 + A2 Flash Hider * Equipment: ** ALICE - Standard ** BDU Blouse - Rolled-up ** BDU Trousers ** M5 Medical Backpack ** M69 Vest ** PASGT Helmet - Goggles ** US Combat Boots {{!}} * Items: ** 6&times; 5.56×45mm 30rnd STANAG Mag ** AN-M8 HC ** AN/PRC-68 Radio ** 8&times; Bandage ** Compass ** Flashlight ** M1967 Entrenching Tool ** Map (NATO) ** 7&times; Morphine Injector ** 6&times; Saline Solution ** 7&times; Tourniquet {{!}}} </spoiler> |- | Combat Signaler | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/BLUFOR/US_Army/Character_US_RTO.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** M16A2 + A2 Flash Hider * Equipment: ** ALICE - Standard ** AN/PRC-77 Radio ** BDU Blouse ** BDU Trousers ** M69 Vest ** PASGT Helmet - Camouflaged Netting ** US Combat Boots {{!}} * Items: ** 6&times; 5.56×45mm 30rnd STANAG Mag ** 2&times; AN-M8 HC ** AN/PRC-68 Radio ** 2&times; Bandage ** Compass ** Flashlight ** M1967 Entrenching Tool ** M67 ** Map (NATO) ** Morphine Injector ** Tourniquet {{!}}} </spoiler> |- | Sniper | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/BLUFOR/US_Army/Character_US_Sniper.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** M21 SWS + ART II Scope ** M9 * Equipment: ** ALICE - Sniper ** BDU Blouse ** BDU Trousers ** Boonie Hat ** Jungle Boots {{!}} * Items: ** 4&times; 7.62×51mm 20rnd M14 SB Mag ** 2&times; 9×19mm 15rnd M9 Mag ** AN-M8 HC ** AN/PRC-68 Radio ** 2&times; Bandage ** Compass ** Flashlight ** M1967 Entrenching Tool ** M67 ** Map (NATO) ** Morphine Injector ** Tourniquet {{!}}} </spoiler> |- | Spotter | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/BLUFOR/US_Army/Character_US_Spotter.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** M16 Carbine - Olive *** A2 Flash Hider *** M203 * Equipment: ** ALICE - Grenadier ** AN/PRC-77 Radio ** BDU Blouse - Rolled-up ** BDU Trousers ** Boonie Hat ** Jungle Boots {{!}} * Items: ** 11&times; 40mm M433 HEDP Grenade ** 2&times; 40mm M583A1 White Flare ** 40mm M661 Green Flare ** 40mm M662 Red Flare ** 6&times; 5.56×45mm 30rnd STANAG Mag ** 2&times; AN-M8 HC ** AN/PRC-68 Radio ** 2&times; Bandage ** Compass ** Flashlight ** M1967 Entrenching Tool ** 3&times; M67 ** Map (NATO) ** Morphine Injector ** Tourniquet {{!}}} </spoiler> |- | Helicopter Pilot | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/BLUFOR/US_Army/Character_US_HeliPilot.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** M9 * Equipment: ** CWU-27/P Pilot Coveralls ** Pilot Gloves ** SPH-4 Helmet ** SRU-21/P Survival Vest ** US Combat Boots {{!}} * Items: ** 3&times; 9×19mm 15rnd M9 Mag ** AN/PRC-68 Radio ** 2&times; Bandage ** Compass ** Flashlight ** M18 - Purple ** Map (NATO) ** Morphine Injector ** Tourniquet {{!}}} </spoiler> |- | Helicopter Crew | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/BLUFOR/US_Army/Character_US_HeliCrew.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** M9 * Equipment: ** CWU-27/P Pilot Coveralls ** Pilot Gloves ** SPH-4 Helmet ** SRU-21/P Survival Vest ** US Combat Boots {{!}} * Items: ** 3&times; 9×19mm 15rnd M9 Mag ** AN/PRC-68 Radio ** 2&times; Bandage ** Compass ** Flashlight ** M18 - Purple ** Map (NATO) ** Morphine Injector ** Tourniquet {{!}}} </spoiler> |- | Crewman | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/BLUFOR/US_Army/Character_US_Crew.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** M16 Carbine + A2 Flash Hider * Equipment: ** CVC Coveralls ** DH-132A Helmet ** PASGT Vest ** Tanker Boots {{!}} * Items: ** 3&times; 5.56×45mm 30rnd STANAG Mag ** AN/PRC-68 Radio ** 2&times; Bandage ** Compass ** Flashlight ** M1967 Entrenching Tool ** Map (NATO) ** Morphine Injector ** Tourniquet {{!}}} </spoiler> |- | Crew Commander | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/BLUFOR/US_Army/Character_US_CC.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** M16 Carbine + A2 Flash Hider * Equipment: ** CVC Coveralls ** DH-132A Helmet ** PASGT Vest ** Tanker Boots {{!}} * Items: ** 3&times; 5.56×45mm 30rnd STANAG Mag ** AN/PRC-68 Radio ** 2&times; Bandage ** Compass ** Flashlight ** M1967 Entrenching Tool ** Map (NATO) ** Morphine Injector ** Tourniquet {{!}}} </spoiler> |- | Scout | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/BLUFOR/US_Army/Character_US_Scout.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** M16A2 - Olive + A2 Flash Hider * Equipment: ** ALICE - Standard ** BDU Blouse ** BDU Trousers ** Patrol Cap ** US Combat Boots {{!}} * Items: ** 6&times; 5.56×45mm 30rnd STANAG Mag ** 2&times; AN-M8 HC ** AN/PRC-68 Radio ** 2&times; Bandage ** Compass ** Flashlight ** M1967 Entrenching Tool ** M67 ** Map (NATO) ** Morphine Injector ** Tourniquet {{!}}} </spoiler> |- | Scout Radio Operator | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/BLUFOR/US_Army/Character_US_Scout_RTO.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** M16A2 - Olive + A2 Flash Hider * Equipment: ** ALICE - Standard ** AN/PRC-77 Radio ** BDU Blouse ** BDU Trousers ** Boonie Hat ** US Combat Boots {{!}} * Items: ** 6&times; 5.56×45mm 30rnd STANAG Mag ** 2&times; AN-M8 HC ** AN/PRC-68 Radio ** 2&times; Bandage ** Compass ** Flashlight ** M1967 Entrenching Tool ** M67 ** Map (NATO) ** Morphine Injector ** Tourniquet {{!}}} </spoiler> |- | Sapper | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/BLUFOR/US_Army/Character_US_Sapper.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** M16A2 + A2 Flash Hider * Equipment: ** ALICE - Standard ** ALICE Medium Backpack ** BDU Blouse ** BDU Trousers ** PASGT Helmet ** PASGT Vest ** US Combat Boots {{!}} * Items: ** 6&times; 5.56×45mm 30rnd STANAG Mag ** 2&times; AN-M8 HC ** AN/PRC-68 Radio ** 2&times; Bandage ** Compass ** Flashlight ** 5&times; M112 Demolition Block ** M1967 Entrenching Tool ** M34 Blasting Machine ** M67 ** Map (NATO) ** Morphine Injector ** Repair Tool ** Tourniquet {{!}}} </spoiler> |- | Ammunition Bearer | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/BLUFOR/US_Army/Character_US_Ammo.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** M16A2 + A2 Flash Hider * Equipment: ** ALICE - Standard ** ALICE Medium Backpack ** BDU Blouse - Rolled-up ** BDU Trousers ** M69 Vest ** PASGT Helmet ** US Combat Boots {{!}} * Items: ** 2&times; 5.56×45mm 200rnd M249 Belt ** 30&times; 5.56×45mm 30rnd STANAG Mag ** 6&times; AN-M8 HC ** AN/PRC-68 Radio ** 2&times; Bandage ** Compass ** Flashlight ** M1967 Entrenching Tool ** 5&times; M67 ** Map (NATO) ** Morphine Injector ** Tourniquet {{!}}} </spoiler> |- | Unarmed | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/BLUFOR/US_Army/Character_US_Unarmed.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Equipment: ** BDU Blouse - Rolled-up ** BDU Trousers ** Patrol Cap ** US Combat Boots {{!}} * Items: ** AN/PRC-68 Radio ** 2&times; Bandage ** Compass ** Flashlight ** M1967 Entrenching Tool ** Map (NATO) ** Morphine Injector ** Tourniquet {{!}}} </spoiler> |- | Special Forces | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/BLUFOR/US_Army/GreenBerets/Character_US_SF.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** M16 Carbine - Camouflaged *** A2 Flash Hider *** Carry Handle Red Dot Sight - Camouflaged * Equipment: ** ALICE - Standard ** BDU Blouse ** BDU Trousers ** Jungle Boots ** Knit Cap - Black ** Pilot Gloves {{!}} * Items: ** 6&times; 5.56×45mm 30rnd STANAG Mag ** 2&times; AN-M8 HC ** AN/PRC-68 Radio ** 2&times; Bandage ** Compass ** Flashlight ** 2&times; M112 Demolition Block ** M1967 Entrenching Tool ** M67 ** Map (NATO) ** Morphine Injector ** Tourniquet {{!}}} </spoiler> |- | Special Forces Officer | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/BLUFOR/US_Army/GreenBerets/Character_US_SF_Officer.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** M16 Carbine - Olive + A2 Flash Hider ** M9 * Equipment: ** ALICE - Commander ** BDU Blouse ** BDU Trousers ** Jungle Boots ** Patrol Cap ** Pilot Gloves {{!}} * Items: ** 3&times; 5.56×45mm 30rnd STANAG Mag ** 3&times; 5.56×45mm 30rnd STANAG Tracer Mag ** 2&times; 9×19mm 15rnd M9 Mag ** AN/PRC-68 Radio ** 2&times; Bandage ** Compass ** Flashlight ** M18 - Purple ** M18 - Yellow ** M1967 Entrenching Tool ** M67 ** Map (NATO) ** Morphine Injector ** Tourniquet {{!}}} </spoiler> |- | Special Forces Squad Leader | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/BLUFOR/US_Army/GreenBerets/Character_US_SF_SL.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** M16 Carbine - Camouflaged *** A2 Flash Hider *** M203 * Equipment: ** ALICE - Grenadier ** BDU Blouse - Rolled-up ** BDU Trousers ** Jungle Boots ** Patrol Cap ** Pilot Gloves {{!}} * Items: ** 11&times; 40mm M433 HEDP Grenade ** 2&times; 40mm M583A1 White Flare ** 40mm M661 Green Flare ** 40mm M662 Red Flare ** 3&times; 5.56×45mm 30rnd STANAG Mag ** 3&times; 5.56×45mm 30rnd STANAG Tracer Mag ** AN/PRC-68 Radio ** 2&times; Bandage ** Compass ** Flashlight ** M18 - Green ** M18 - Red ** M1967 Entrenching Tool ** M67 ** Map (NATO) ** Morphine Injector ** Tourniquet {{!}}} </spoiler> |- | Special Forces Grenadier | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/BLUFOR/US_Army/GreenBerets/Character_US_SF_GL.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** M16 Carbine - Camouflaged *** A2 Flash Hider *** M203 * Equipment: ** ALICE - Grenadier ** BDU Blouse - Rolled-up ** BDU Trousers ** Boonie Hat ** Jungle Boots ** Pilot Gloves {{!}} * Items: ** 11&times; 40mm M433 HEDP Grenade ** 2&times; 40mm M583A1 White Flare ** 40mm M661 Green Flare ** 40mm M662 Red Flare ** 6&times; 5.56×45mm 30rnd STANAG Mag ** 2&times; AN-M8 HC ** AN/PRC-68 Radio ** 2&times; Bandage ** Compass ** Flashlight ** M1967 Entrenching Tool ** 3&times; M67 ** Map (NATO) ** Morphine Injector ** Tourniquet {{!}}} </spoiler> |- | Special Forces Machine-Gunner | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/BLUFOR/US_Army/GreenBerets/Character_US_SF_LMG.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** M249 SAW * Equipment: ** ALICE - Automatic Rifleman ** BDU Blouse - Rolled-up ** BDU Trousers ** Boonie Hat ** Jungle Boots ** Pilot Gloves {{!}} * Items: ** 2&times; 5.56×45mm 200rnd M249 Belt ** AN-M8 HC ** AN/PRC-68 Radio ** 2&times; Bandage ** Compass ** Flashlight ** M1967 Entrenching Tool ** Map (NATO) ** Morphine Injector ** Tourniquet {{!}}} </spoiler> |- | Special Forces Medic | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/BLUFOR/US_Army/GreenBerets/Character_US_SF_Medic.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** M16 Carbine - Olive + A2 Flash Hider * Equipment: ** ALICE - Standard ** BDU Blouse ** BDU Trousers ** Jungle Boots ** M5 Medical Backpack ** Patrol Cap ** Pilot Gloves {{!}} * Items: ** 6&times; 5.56×45mm 30rnd STANAG Mag ** AN-M8 HC ** AN/PRC-68 Radio ** 8&times; Bandage ** Compass ** Flashlight ** M1967 Entrenching Tool ** Map (NATO) ** 7&times; Morphine Injector ** 6&times; Saline Solution ** 7&times; Tourniquet {{!}}} </spoiler> |- | Special Forces Radio Operator | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/BLUFOR/US_Army/GreenBerets/Character_US_SF_RTO.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** M16 Carbine - Olive + A2 Flash Hider * Equipment: ** ALICE - Standard ** AN/PRC-77 Radio ** BDU Blouse - Rolled-up ** BDU Trousers ** Jungle Boots ** Knit Cap - Black ** Pilot Gloves {{!}} * Items: ** 6&times; 5.56×45mm 30rnd STANAG Mag ** 2&times; AN-M8 HC ** AN/PRC-68 Radio ** 2&times; Bandage ** Compass ** Flashlight ** M1967 Entrenching Tool ** M67 ** Map (NATO) ** Morphine Injector ** Tourniquet {{!}}} </spoiler> |- | Special Forces Sharpshooter | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/BLUFOR/US_Army/GreenBerets/Character_US_SF_Sharpshooter.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** M16A2 - Camouflaged *** 4×20 Carry Handle Scope - Olive *** A2 Flash Hider * Equipment: ** ALICE - Standard ** BDU Blouse ** BDU Trousers ** Jungle Boots ** Knit Cap - Black ** Pilot Gloves {{!}} * Items: ** 6&times; 5.56×45mm 30rnd STANAG Mag ** 2&times; AN-M8 HC ** AN/PRC-68 Radio ** 2&times; Bandage ** Compass ** Flashlight ** M1967 Entrenching Tool ** M67 ** Map (NATO) ** Morphine Injector ** Tourniquet {{!}}} </spoiler> |- | Special Forces Sapper | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/BLUFOR/US_Army/GreenBerets/Character_US_SF_Sapper.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** M16 Carbine - Camouflaged + A2 Flash Hider ** M72A3 LAW * Equipment: ** ALICE - Standard ** ALICE Medium Backpack ** BDU Blouse ** BDU Trousers ** Boonie Hat ** Jungle Boots ** Pilot Gloves {{!}} * Items: ** 6&times; 5.56×45mm 30rnd STANAG Mag ** 2&times; AN-M8 HC ** AN/PRC-68 Radio ** 2&times; Bandage ** Compass ** Flashlight ** 5&times; M112 Demolition Block ** M1967 Entrenching Tool ** M34 Blasting Machine ** M67 ** Map (NATO) ** Morphine Injector ** Repair Tool ** Tourniquet {{!}}} </spoiler> |- | Special Forces - Recon | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/BLUFOR/US_Army/GreenBerets/Suppressed/Character_US_SF_S.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** M16 Carbine - Camouflaged *** Carry Handle Red Dot Sight - Camouflaged *** Mark 3 Suppressor - Camouflaged * Equipment: ** ALICE - Standard ** BDU Blouse ** BDU Trousers ** Jungle Boots ** Knit Cap - Black ** Pilot Gloves {{!}} * Items: ** 6&times; 5.56×45mm 30rnd STANAG Mag ** 2&times; AN-M8 HC ** AN/PRC-68 Radio ** 2&times; Bandage ** Compass ** Flashlight ** 2&times; M112 Demolition Block ** M1967 Entrenching Tool ** M67 ** Map (NATO) ** Morphine Injector ** Tourniquet {{!}}} </spoiler> |- | Special Forces Squad Leader - Recon | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/BLUFOR/US_Army/GreenBerets/Suppressed/Character_US_SF_SL_S.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** M16 Carbine - Camouflaged + Mark 3 Suppressor - Camouflaged * Equipment: ** ALICE - Standard ** BDU Blouse - Rolled-up ** BDU Trousers ** Jungle Boots ** Patrol Cap ** Pilot Gloves {{!}} * Items: ** 6&times; 5.56×45mm 30rnd STANAG Mag ** AN/PRC-68 Radio ** 2&times; Bandage ** Compass ** Flashlight ** M18 - Green ** M18 - Red ** M1967 Entrenching Tool ** M67 ** Map (NATO) ** Morphine Injector ** Tourniquet {{!}}} </spoiler> |- | Special Forces Grenadier - Recon | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/BLUFOR/US_Army/GreenBerets/Suppressed/Character_US_SF_GL_S.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** M16A2 - Camouflaged *** M203 *** Mark 3 Suppressor - Camouflaged * Equipment: ** ALICE - Grenadier ** BDU Blouse - Rolled-up ** BDU Trousers ** Boonie Hat ** Jungle Boots ** Pilot Gloves {{!}} * Items: ** 11&times; 40mm M433 HEDP Grenade ** 2&times; 40mm M583A1 White Flare ** 40mm M661 Green Flare ** 40mm M662 Red Flare ** 6&times; 5.56×45mm 30rnd STANAG Mag ** 2&times; AN-M8 HC ** AN/PRC-68 Radio ** 2&times; Bandage ** Compass ** Flashlight ** M1967 Entrenching Tool ** 3&times; M67 ** Map (NATO) ** Morphine Injector ** Tourniquet {{!}}} </spoiler> |- | Special Forces Medic - Recon | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/BLUFOR/US_Army/GreenBerets/Suppressed/Character_US_SF_Medic_S.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** M16 Carbine - Camouflaged + Mark 3 Suppressor - Camouflaged * Equipment: ** ALICE - Standard ** BDU Blouse ** BDU Trousers ** Jungle Boots ** M5 Medical Backpack ** Patrol Cap ** Pilot Gloves {{!}} * Items: ** 6&times; 5.56×45mm 30rnd STANAG Mag ** AN-M8 HC ** AN/PRC-68 Radio ** 8&times; Bandage ** Compass ** Flashlight ** M1967 Entrenching Tool ** M67 ** Map (NATO) ** 7&times; Morphine Injector ** 6&times; Saline Solution ** 7&times; Tourniquet {{!}}} </spoiler> |- | Special Forces Radio Operator - Recon | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/BLUFOR/US_Army/GreenBerets/Suppressed/Character_US_SF_RTO_S.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** M16 Carbine - Camouflaged + Mark 3 Suppressor - Camouflaged * Equipment: ** ALICE - Standard ** AN/PRC-77 Radio ** BDU Blouse - Rolled-up ** BDU Trousers ** Jungle Boots ** Knit Cap - Black ** Pilot Gloves {{!}} * Items: ** 6&times; 5.56×45mm 30rnd STANAG Mag ** 2&times; AN-M8 HC ** AN/PRC-68 Radio ** 2&times; Bandage ** Compass ** Flashlight ** M1967 Entrenching Tool ** M67 ** Map (NATO) ** Morphine Injector ** Tourniquet {{!}}} </spoiler> |- | Special Forces Sharpshooter - Recon | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/BLUFOR/US_Army/GreenBerets/Suppressed/Character_US_SF_Sharpshooter_S.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** M16A2 - Camouflaged *** 4×20 Carry Handle Scope - Camouflaged *** Mark 3 Suppressor - Camouflaged * Equipment: ** ALICE - Standard ** BDU Blouse ** BDU Trousers ** Jungle Boots ** Knit Cap - Black ** Pilot Gloves {{!}} * Items: ** 6&times; 5.56×45mm 30rnd STANAG Mag ** 2&times; AN-M8 HC ** AN/PRC-68 Radio ** 2&times; Bandage ** Compass ** Flashlight ** M1967 Entrenching Tool ** M67 ** Map (NATO) ** Morphine Injector ** Tourniquet {{!}}} </spoiler> |- | Special Forces Sapper - Recon | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/BLUFOR/US_Army/GreenBerets/Suppressed/Character_US_SF_Sapper_S.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** M16 Carbine - Camouflaged + Mark 3 Suppressor - Camouflaged ** M72A3 LAW * Equipment: ** ALICE - Standard ** ALICE Medium Backpack ** BDU Blouse ** BDU Trousers ** Boonie Hat ** Jungle Boots ** Pilot Gloves {{!}} * Items: ** 6&times; 5.56×45mm 30rnd STANAG Mag ** 2&times; AN-M8 HC ** AN/PRC-68 Radio ** 2&times; Bandage ** Compass ** Flashlight ** 5&times; M112 Demolition Block ** M1967 Entrenching Tool ** M34 Blasting Machine ** M67 ** Map (NATO) ** Morphine Injector ** Repair Tool ** Tourniquet {{!}}} </spoiler> |- | Rifleman | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Campaign/Final/Campaign_US_Player.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** M16A2 + A2 Flash Hider * Equipment: ** ALICE - Standard ** BDU Blouse ** BDU Trousers ** PASGT Helmet ** PASGT Vest ** US Combat Boots {{!}} * Items: ** 6&times; 5.56×45mm 30rnd STANAG Mag ** 2&times; AN-M8 HC ** AN/PRC-68 Radio ** 2&times; Bandage ** Compass ** Flashlight ** M1967 Entrenching Tool ** M67 ** Map (NATO) ** Morphine Injector ** Tourniquet {{!}}} </spoiler> |- | Rifleman | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/BLUFOR/US_Army/Character_US_Rifleman_Variant_1.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** M16A2 + A2 Flash Hider * Equipment: ** ALICE - Standard ** BDU Blouse - Rolled-up ** BDU Trousers ** PASGT Helmet ** PASGT Vest ** US Combat Boots {{!}} * Items: ** 6&times; 5.56×45mm 30rnd STANAG Mag ** 2&times; AN-M8 HC ** AN/PRC-68 Radio ** 2&times; Bandage ** Compass ** Flashlight ** M1967 Entrenching Tool ** M67 ** Map (NATO) ** Morphine Injector ** Tourniquet {{!}}} </spoiler> |- | Rifleman | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Campaign/Final/PlayerVariant/Campaign_US_Player_Variant_1.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** M16A2 + A2 Flash Hider * Equipment: ** ALICE - Standard ** BDU Blouse - Rolled-up ** BDU Trousers ** PASGT Helmet ** PASGT Vest ** US Combat Boots {{!}} * Items: ** 6&times; 5.56×45mm 30rnd STANAG Mag ** 2&times; AN-M8 HC ** AN/PRC-68 Radio ** 2&times; Bandage ** Compass ** Flashlight ** M1967 Entrenching Tool ** M67 ** Map (NATO) ** Morphine Injector ** Tourniquet {{!}}} </spoiler> |}

=== Group ===

{| class="wikitable sortable valign-top" style="min-width: 60em" ! style="min-width: 25%" | Name ! Prefab ! class="unsortable" | Details |- | Rifle Squad | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/BLUFOR/Group_US_RifleSquad.et}} | style="font-size: smaller" | * 2&times; Automatic Rifleman * 2&times; Grenadier * 2&times; Light AT Rifleman * Squad Leader * 2&times; Team Leader |- | Fire Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/BLUFOR/Group_US_FireTeam.et}} | style="font-size: smaller" | * Automatic Rifleman * Grenadier * Light AT Rifleman * Team Leader |- | Light Fire Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/BLUFOR/Group_US_LightFireTeam.et}} | style="font-size: smaller" | * 3&times; Rifleman * Team Leader |- | Grenadier Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/BLUFOR/Group_US_Team_GL.et}} | style="font-size: smaller" | * Automatic Rifleman * 2&times; Grenadier * Team Leader |- | Light Anti-Tank Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/BLUFOR/Group_US_Team_LAT.et}} | style="font-size: smaller" | * Automatic Rifleman * 2&times; Light AT Rifleman * Team Leader |- | Base of Fire Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/BLUFOR/Group_US_Team_Suppress.et}} | style="font-size: smaller" | * 2&times; Automatic Rifleman * Grenadier * Team Leader |- | Machine Gun Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/BLUFOR/Group_US_MachineGunTeam.et}} | style="font-size: smaller" | * Machine-Gunner * Machine-Gunner Assistant |- | Patrol Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/BLUFOR/Group_US_SentryTeam.et}} | style="font-size: smaller" | * 2&times; Rifleman |- | Recon Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/BLUFOR/Group_US_ReconTeam.et}} | style="font-size: smaller" | * Scout * Scout Radio Operator |- | Platoon HQ | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/BLUFOR/Group_US_PlatoonHQ.et}} | style="font-size: smaller" | * Combat Signaler * Medic * Platoon Leader * Platoon Sergeant |- | Medical Support Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/BLUFOR/Group_US_MedicalSection.et}} | style="font-size: smaller" | * 2&times; Medic |- | Ammunition Supply Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/BLUFOR/Group_US_AmmoTeam.et}} | style="font-size: smaller" | * 2&times; Ammunition Bearer * 2&times; Machine-Gunner Assistant |- | Sapper Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/BLUFOR/Group_US_SapperTeam.et}} | style="font-size: smaller" | * 2&times; Sapper |- | Special Forces Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/BLUFOR/GreenBerets/Group_US_GreenBeret_SentryTeam.et}} | style="font-size: smaller" | * 2&times; Special Forces |- | Special Forces Squad | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/BLUFOR/GreenBerets/Group_US_GreenBeret_Squad.et}} | style="font-size: smaller" | * Special Forces Machine-Gunner * Special Forces Medic * Special Forces Radio Operator * Special Forces Sapper * Special Forces Sharpshooter * Special Forces Squad Leader |- | Special Forces Recon Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/BLUFOR/GreenBerets/Suppressed/Group_US_GreenBeret_ReconTeam.et}} | style="font-size: smaller" | * 2&times; Special Forces - Recon |- | Special Forces Recon Squad | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/BLUFOR/GreenBerets/Suppressed/Group_US_GreenBeret_ReconSquad.et}} | style="font-size: smaller" | * Special Forces - Recon * Special Forces Medic - Recon * Special Forces Radio Operator - Recon * Special Forces Sapper - Recon * Special Forces Sharpshooter - Recon * Special Forces Squad Leader - Recon |- | Fire Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/BLUFOR/AmbientPatrols/Group_US_FireTeam_NotSpawned.et}} | style="font-size: smaller" | * Automatic Rifleman * Grenadier * Light AT Rifleman * Team Leader |- | Machine Gun Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/BLUFOR/AmbientPatrols/Group_US_MachineGunTeam_NotSpawned.et}} | style="font-size: smaller" | * Machine-Gunner * Machine-Gunner Assistant |- | Rifle Squad | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/BLUFOR/AmbientPatrols/Group_US_RifleSquad_NotSpawned.et}} | style="font-size: smaller" | * 2&times; Automatic Rifleman * 2&times; Grenadier * 2&times; Light AT Rifleman * Squad Leader * 2&times; Team Leader |- | Patrol Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/BLUFOR/AmbientPatrols/Group_US_SentryTeam_NotSpawned.et}} | style="font-size: smaller" | * 2&times; Rifleman |- | Light Anti-Tank Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/BLUFOR/AmbientPatrols/Group_US_Team_LAT_NotSpawned.et}} | style="font-size: smaller" | * Automatic Rifleman * 2&times; Light AT Rifleman * Team Leader |}

=== Vehicle ===

{| class="wikitable sortable valign-top" style="min-width: 60em" ! style="min-width: 25%" | Name ! Prefab ! class="unsortable" | Details |- | M151A2 Off-road - Open Top | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/M151A2/M151A2.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.05&nbsp;T * Horsepower: 71&nbsp;HP / 72&nbsp;PS * Max. theoretical speed: approx. 123.8&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 48.75/65&nbsp;L (75% fill, Petrol) * Estimated range: 410&nbsp;km in 3h15m * Idle/red/max RPM: 840/4200/6000&nbsp;RPM * Capacity: 4 persons (1 driver, 3 cargo) </spoiler> |- | M151A2 Off-road - Open Top | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/M151A2/M151A2_MERDC.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.05&nbsp;T * Horsepower: 71&nbsp;HP / 72&nbsp;PS * Max. theoretical speed: approx. 123.8&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 48.75/65&nbsp;L (75% fill, Petrol) * Estimated range: 410&nbsp;km in 3h15m * Idle/red/max RPM: 840/4200/6000&nbsp;RPM * Capacity: 4 persons (1 driver, 3 cargo) </spoiler> |- | M151A2 Off-road | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/M151A2/M151A2_transport.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.05&nbsp;T * Horsepower: 71&nbsp;HP / 72&nbsp;PS * Max. theoretical speed: approx. 123.8&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 48.75/65&nbsp;L (75% fill, Petrol) * Estimated range: 410&nbsp;km in 3h15m * Idle/red/max RPM: 840/4200/6000&nbsp;RPM * Capacity: 4 persons (1 driver, 3 cargo) </spoiler> |- | M151A2 Off-road | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/M151A2/M151A2_transport_MERDC.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.05&nbsp;T * Horsepower: 71&nbsp;HP / 72&nbsp;PS * Max. theoretical speed: approx. 123.8&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 48.75/65&nbsp;L (75% fill, Petrol) * Estimated range: 410&nbsp;km in 3h15m * Idle/red/max RPM: 840/4200/6000&nbsp;RPM * Capacity: 4 persons (1 driver, 3 cargo) </spoiler> |- | M998 Light Utility Vehicle - Open Top | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/M998/M998.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 2.36&nbsp;T * Horsepower: 150&nbsp;HP / 152&nbsp;PS * Max. theoretical speed: approx. 98.3&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 70.95/94.6&nbsp;L (75% fill, Petrol) * Estimated range: 290&nbsp;km in 3h00m * Idle/red/max RPM: 650/3400/4000&nbsp;RPM * Capacity: 4 persons (1 driver, 3 cargo) </spoiler> |- | M998 Light Utility Vehicle - Open Top | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/M998/M998_MERDC.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 2.36&nbsp;T * Horsepower: 150&nbsp;HP / 152&nbsp;PS * Max. theoretical speed: approx. 98.3&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 70.95/94.6&nbsp;L (75% fill, Petrol) * Estimated range: 290&nbsp;km in 3h00m * Idle/red/max RPM: 650/3400/4000&nbsp;RPM * Capacity: 4 persons (1 driver, 3 cargo) </spoiler> |- | M998 Light Utility Vehicle | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/M998/M998_covered.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 2.54&nbsp;T * Horsepower: 150&nbsp;HP / 152&nbsp;PS * Max. theoretical speed: approx. 98.3&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 70.95/94.6&nbsp;L (75% fill, Petrol) * Estimated range: 290&nbsp;km in 3h00m * Idle/red/max RPM: 650/3400/4000&nbsp;RPM * Capacity: 4 persons (1 driver, 3 cargo) </spoiler> |- | M998 Light Utility Vehicle | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/M998/M998_covered_MERDC.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 2.54&nbsp;T * Horsepower: 150&nbsp;HP / 152&nbsp;PS * Max. theoretical speed: approx. 98.3&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 70.95/94.6&nbsp;L (75% fill, Petrol) * Estimated range: 290&nbsp;km in 3h00m * Idle/red/max RPM: 650/3400/4000&nbsp;RPM * Capacity: 4 persons (1 driver, 3 cargo) </spoiler> |- | M998 Light Utility Vehicle - Canopy | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/M998/M998_covered_long.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 2.56&nbsp;T * Horsepower: 150&nbsp;HP / 152&nbsp;PS * Max. theoretical speed: approx. 98.3&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 70.95/94.6&nbsp;L (75% fill, Petrol) * Estimated range: 290&nbsp;km in 3h00m * Idle/red/max RPM: 650/3400/4000&nbsp;RPM * Capacity: 4 persons (1 driver, 3 cargo) </spoiler> |- | M998 Light Utility Vehicle - Canopy | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/M998/M998_covered_long_MERDC.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 2.56&nbsp;T * Horsepower: 150&nbsp;HP / 152&nbsp;PS * Max. theoretical speed: approx. 98.3&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 70.95/94.6&nbsp;L (75% fill, Petrol) * Estimated range: 290&nbsp;km in 3h00m * Idle/red/max RPM: 650/3400/4000&nbsp;RPM * Capacity: 4 persons (1 driver, 3 cargo) </spoiler> |- | M1025 Light Armored Vehicle | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/M998/M1025.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 2.74&nbsp;T * Horsepower: 150&nbsp;HP / 152&nbsp;PS * Max. theoretical speed: approx. 98.3&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 70.95/94.6&nbsp;L (75% fill, Petrol) * Estimated range: 290&nbsp;km in 3h00m * Idle/red/max RPM: 650/3400/4000&nbsp;RPM * Capacity: 4 persons (1 driver, 3 cargo) </spoiler> |- | M1025 Light Armored Vehicle | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/M998/M1025_MERDC.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 2.74&nbsp;T * Horsepower: 150&nbsp;HP / 152&nbsp;PS * Max. theoretical speed: approx. 98.3&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 70.95/94.6&nbsp;L (75% fill, Petrol) * Estimated range: 290&nbsp;km in 3h00m * Idle/red/max RPM: 650/3400/4000&nbsp;RPM * Capacity: 4 persons (1 driver, 3 cargo) </spoiler> |- | M997 Ambulance | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/M998/M997_maxi_ambulance.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 2.36&nbsp;T * Horsepower: 150&nbsp;HP / 152&nbsp;PS * Max. theoretical speed: approx. 98.3&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 70.95/94.6&nbsp;L (75% fill, Petrol) * Estimated range: 290&nbsp;km in 3h00m * Idle/red/max RPM: 650/3400/4000&nbsp;RPM * Capacity: 5 persons (1 driver, 4 cargo) </spoiler> |- | M997 Ambulance | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/M998/M997_maxi_ambulance_MERDC.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 2.36&nbsp;T * Horsepower: 150&nbsp;HP / 152&nbsp;PS * Max. theoretical speed: approx. 98.3&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 70.95/94.6&nbsp;L (75% fill, Petrol) * Estimated range: 290&nbsp;km in 3h00m * Idle/red/max RPM: 650/3400/4000&nbsp;RPM * Capacity: 5 persons (1 driver, 4 cargo) </spoiler> |- | M923A1 Transport Truck | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/M923A1/M923A1_transport.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 9.80&nbsp;T * Horsepower: 241&nbsp;HP / 245&nbsp;PS * Max. theoretical speed: approx. 79.2&nbsp;km/h * Automatic gearbox: 5 forward, 1 reverse gears * Fuel capacity: 229.5/306&nbsp;L (75% fill, Petrol) * Estimated range: 640&nbsp;km in 8h00m * Idle/red/max RPM: 600/2500/3000&nbsp;RPM * Capacity: 15 persons (1 driver, 14 cargo) </spoiler> |- | M923A1 Transport Truck | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/M923A1/M923A1_transport_MERDC.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 9.80&nbsp;T * Horsepower: 241&nbsp;HP / 245&nbsp;PS * Max. theoretical speed: approx. 79.2&nbsp;km/h * Automatic gearbox: 5 forward, 1 reverse gears * Fuel capacity: 229.5/306&nbsp;L (75% fill, Petrol) * Estimated range: 640&nbsp;km in 8h00m * Idle/red/max RPM: 600/2500/3000&nbsp;RPM * Capacity: 15 persons (1 driver, 14 cargo) </spoiler> |- | M923A1 Transport Truck - Canopy | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/M923A1/M923A1_transport_covered.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 9.80&nbsp;T * Horsepower: 241&nbsp;HP / 245&nbsp;PS * Max. theoretical speed: approx. 79.2&nbsp;km/h * Automatic gearbox: 5 forward, 1 reverse gears * Fuel capacity: 229.5/306&nbsp;L (75% fill, Petrol) * Estimated range: 640&nbsp;km in 8h00m * Idle/red/max RPM: 600/2500/3000&nbsp;RPM * Capacity: 15 persons (1 driver, 14 cargo) </spoiler> |- | M923A1 Transport Truck - Canopy | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/M923A1/M923A1_transport_covered_MERDC.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 9.80&nbsp;T * Horsepower: 241&nbsp;HP / 245&nbsp;PS * Max. theoretical speed: approx. 79.2&nbsp;km/h * Automatic gearbox: 5 forward, 1 reverse gears * Fuel capacity: 229.5/306&nbsp;L (75% fill, Petrol) * Estimated range: 640&nbsp;km in 8h00m * Idle/red/max RPM: 600/2500/3000&nbsp;RPM * Capacity: 15 persons (1 driver, 14 cargo) </spoiler> |- | M923A1 Fuel Truck | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/M923A1/M923A1_tanker.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 9.80&nbsp;T * Horsepower: 241&nbsp;HP / 245&nbsp;PS * Max. theoretical speed: approx. 79.2&nbsp;km/h * Automatic gearbox: 5 forward, 1 reverse gears * Fuel capacity: 229.5/306&nbsp;L (75% fill, Petrol) * Estimated range: 640&nbsp;km in 8h00m * Idle/red/max RPM: 600/2500/3000&nbsp;RPM * Capacity: 3 persons (1 driver, 2 cargo) </spoiler> |- | M923A1 Fuel Truck | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/M923A1/M923A1_tanker_MERDC.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 9.80&nbsp;T * Horsepower: 241&nbsp;HP / 245&nbsp;PS * Max. theoretical speed: approx. 79.2&nbsp;km/h * Automatic gearbox: 5 forward, 1 reverse gears * Fuel capacity: 229.5/306&nbsp;L (75% fill, Petrol) * Estimated range: 640&nbsp;km in 8h00m * Idle/red/max RPM: 600/2500/3000&nbsp;RPM * Capacity: 3 persons (1 driver, 2 cargo) </spoiler> |- | M934A1 Command Truck | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/M923A1/M923A1_command.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 9.80&nbsp;T * Horsepower: 241&nbsp;HP / 245&nbsp;PS * Max. theoretical speed: approx. 79.2&nbsp;km/h * Automatic gearbox: 5 forward, 1 reverse gears * Fuel capacity: 229.5/306&nbsp;L (75% fill, Petrol) * Estimated range: 640&nbsp;km in 8h00m * Idle/red/max RPM: 600/2500/3000&nbsp;RPM * Capacity: 3 persons (1 driver, 2 cargo) </spoiler> |- | M934A1 Command Truck | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/M923A1/M923A1_command_MERDC.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 9.80&nbsp;T * Horsepower: 241&nbsp;HP / 245&nbsp;PS * Max. theoretical speed: approx. 79.2&nbsp;km/h * Automatic gearbox: 5 forward, 1 reverse gears * Fuel capacity: 229.5/306&nbsp;L (75% fill, Petrol) * Estimated range: 640&nbsp;km in 8h00m * Idle/red/max RPM: 600/2500/3000&nbsp;RPM * Capacity: 3 persons (1 driver, 2 cargo) </spoiler> |- | M923A1 Arsenal Truck | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/M923A1/M923A1_arsenal.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 11.40&nbsp;T * Horsepower: 241&nbsp;HP / 245&nbsp;PS * Max. theoretical speed: approx. 79.2&nbsp;km/h * Automatic gearbox: 5 forward, 1 reverse gears * Fuel capacity: 229.5/306&nbsp;L (75% fill, Petrol) * Estimated range: 640&nbsp;km in 8h00m * Idle/red/max RPM: 600/2500/3000&nbsp;RPM * Capacity: 3 persons (1 driver, 2 cargo) </spoiler> |- | M923A1 Arsenal Truck | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/M923A1/M923A1_arsenal_MERDC.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 11.40&nbsp;T * Horsepower: 241&nbsp;HP / 245&nbsp;PS * Max. theoretical speed: approx. 79.2&nbsp;km/h * Automatic gearbox: 5 forward, 1 reverse gears * Fuel capacity: 229.5/306&nbsp;L (75% fill, Petrol) * Estimated range: 640&nbsp;km in 8h00m * Idle/red/max RPM: 600/2500/3000&nbsp;RPM * Capacity: 3 persons (1 driver, 2 cargo) </spoiler> |- | M923A1 Ammo Truck | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/M923A1/M923A1_ammo.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 11.40&nbsp;T * Horsepower: 241&nbsp;HP / 245&nbsp;PS * Max. theoretical speed: approx. 79.2&nbsp;km/h * Automatic gearbox: 5 forward, 1 reverse gears * Fuel capacity: 229.5/306&nbsp;L (75% fill, Petrol) * Estimated range: 640&nbsp;km in 8h00m * Idle/red/max RPM: 600/2500/3000&nbsp;RPM * Capacity: 3 persons (1 driver, 2 cargo) </spoiler> |- | M923A1 Ammo Truck | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/M923A1/M923A1_ammo_MERDC.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 11.40&nbsp;T * Horsepower: 241&nbsp;HP / 245&nbsp;PS * Max. theoretical speed: approx. 79.2&nbsp;km/h * Automatic gearbox: 5 forward, 1 reverse gears * Fuel capacity: 229.5/306&nbsp;L (75% fill, Petrol) * Estimated range: 640&nbsp;km in 8h00m * Idle/red/max RPM: 600/2500/3000&nbsp;RPM * Capacity: 3 persons (1 driver, 2 cargo) </spoiler> |- | M923A1 Repair Truck | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/M923A1/M923A1_repair.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 9.80&nbsp;T * Horsepower: 241&nbsp;HP / 245&nbsp;PS * Max. theoretical speed: approx. 79.2&nbsp;km/h * Automatic gearbox: 5 forward, 1 reverse gears * Fuel capacity: 229.5/306&nbsp;L (75% fill, Petrol) * Estimated range: 640&nbsp;km in 8h00m * Idle/red/max RPM: 600/2500/3000&nbsp;RPM * Capacity: 3 persons (1 driver, 2 cargo) </spoiler> |- | M923A1 Repair Truck | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/M923A1/M923A1_repair_MERDC.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 9.80&nbsp;T * Horsepower: 241&nbsp;HP / 245&nbsp;PS * Max. theoretical speed: approx. 79.2&nbsp;km/h * Automatic gearbox: 5 forward, 1 reverse gears * Fuel capacity: 229.5/306&nbsp;L (75% fill, Petrol) * Estimated range: 640&nbsp;km in 8h00m * Idle/red/max RPM: 600/2500/3000&nbsp;RPM * Capacity: 3 persons (1 driver, 2 cargo) </spoiler> |- | M923A1 Construction Truck | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/M923A1/M923A1_engineer.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 9.80&nbsp;T * Horsepower: 241&nbsp;HP / 245&nbsp;PS * Max. theoretical speed: approx. 79.2&nbsp;km/h * Automatic gearbox: 5 forward, 1 reverse gears * Fuel capacity: 229.5/306&nbsp;L (75% fill, Petrol) * Estimated range: 640&nbsp;km in 8h00m * Idle/red/max RPM: 600/2500/3000&nbsp;RPM * Capacity: 3 persons (1 driver, 2 cargo) </spoiler> |- | M923A1 Construction Truck | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/M923A1/M923A1_engineer_MERDC.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 9.80&nbsp;T * Horsepower: 241&nbsp;HP / 245&nbsp;PS * Max. theoretical speed: approx. 79.2&nbsp;km/h * Automatic gearbox: 5 forward, 1 reverse gears * Fuel capacity: 229.5/306&nbsp;L (75% fill, Petrol) * Estimated range: 640&nbsp;km in 8h00m * Idle/red/max RPM: 600/2500/3000&nbsp;RPM * Capacity: 3 persons (1 driver, 2 cargo) </spoiler> |- | M151A2 Armed Off-road - M2 | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/M151A2/M151A2_M2HB.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.15&nbsp;T * Horsepower: 71&nbsp;HP / 72&nbsp;PS * Max. theoretical speed: approx. 123.8&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 48.75/65&nbsp;L (75% fill, Petrol) * Estimated range: 410&nbsp;km in 3h15m * Idle/red/max RPM: 840/4200/6000&nbsp;RPM * Capacity: 3 persons (1 driver, 1 gunner, 1 cargo) * Turret: M2HB </spoiler> |- | M151A2 Armed Off-road - M2 | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/M151A2/M151A2_M2HB_MERDC.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.15&nbsp;T * Horsepower: 71&nbsp;HP / 72&nbsp;PS * Max. theoretical speed: approx. 123.8&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 48.75/65&nbsp;L (75% fill, Petrol) * Estimated range: 410&nbsp;km in 3h15m * Idle/red/max RPM: 840/4200/6000&nbsp;RPM * Capacity: 3 persons (1 driver, 1 gunner, 1 cargo) * Turret: M2HB </spoiler> |- | M1025 Light Armored Vehicle - M2 | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/M998/M1025_armed_M2HB.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 2.84&nbsp;T * Horsepower: 150&nbsp;HP / 152&nbsp;PS * Max. theoretical speed: approx. 98.3&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 70.95/94.6&nbsp;L (75% fill, Petrol) * Estimated range: 290&nbsp;km in 3h00m * Idle/red/max RPM: 650/3400/4000&nbsp;RPM * Capacity: 5 persons (1 driver, 1 gunner, 3 cargo) * Turret: M2HB </spoiler> |- | M1025 Light Armored Vehicle - M2 | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/Conflict_Variants/M1025_armed_M2HB_Conflict.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 2.84&nbsp;T * Horsepower: 150&nbsp;HP / 152&nbsp;PS * Max. theoretical speed: approx. 98.3&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 70.95/94.6&nbsp;L (75% fill, Petrol) * Estimated range: 290&nbsp;km in 3h00m * Idle/red/max RPM: 650/3400/4000&nbsp;RPM * Capacity: 5 persons (1 driver, 1 gunner, 3 cargo) * Turret: M2HB </spoiler> |- | M1025 Light Armored Vehicle - M2 | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/M998/M1025_armed_M2HB_MERDC.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 2.84&nbsp;T * Horsepower: 150&nbsp;HP / 152&nbsp;PS * Max. theoretical speed: approx. 98.3&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 70.95/94.6&nbsp;L (75% fill, Petrol) * Estimated range: 290&nbsp;km in 3h00m * Idle/red/max RPM: 650/3400/4000&nbsp;RPM * Capacity: 5 persons (1 driver, 1 gunner, 3 cargo) * Turret: M2HB </spoiler> |- | M1025 Light Armored Vehicle - M2 | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/Conflict_Variants/M1025_armed_M2HB_MERDC_Conflict.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 2.84&nbsp;T * Horsepower: 150&nbsp;HP / 152&nbsp;PS * Max. theoretical speed: approx. 98.3&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 70.95/94.6&nbsp;L (75% fill, Petrol) * Estimated range: 290&nbsp;km in 3h00m * Idle/red/max RPM: 650/3400/4000&nbsp;RPM * Capacity: 5 persons (1 driver, 1 gunner, 3 cargo) * Turret: M2HB </spoiler> |- | LAV-25 Reconnaissance Vehicle | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/LAV25/LAV25.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 12.90&nbsp;T * Horsepower: 271&nbsp;HP / 275&nbsp;PS * Max. theoretical speed: approx. 94.1&nbsp;km/h * Automatic gearbox: 5 forward, 1 reverse gears * Fuel capacity: 201.75/269&nbsp;L (75% fill, Diesel) * Estimated range: 730&nbsp;km in 7h45m * Idle/red/max RPM: 600/2800/3000&nbsp;RPM * Capacity: 9 persons (1 driver, 1 gunner, 1 commander, 6 cargo) * Turrets: 3&times; Machine gun </spoiler> |- | LAV-25 Reconnaissance Vehicle | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/Conflict_Variants/LAV25_Conflict.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 12.90&nbsp;T * Horsepower: 271&nbsp;HP / 275&nbsp;PS * Max. theoretical speed: approx. 94.1&nbsp;km/h * Automatic gearbox: 5 forward, 1 reverse gears * Fuel capacity: 201.75/269&nbsp;L (75% fill, Diesel) * Estimated range: 730&nbsp;km in 7h45m * Idle/red/max RPM: 600/2800/3000&nbsp;RPM * Capacity: 9 persons (1 driver, 1 gunner, 1 commander, 6 cargo) * Turrets: 3&times; Machine gun </spoiler> |- | LAV-25 Reconnaissance Vehicle | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/LAV25/LAV25_MERDC.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 12.90&nbsp;T * Horsepower: 271&nbsp;HP / 275&nbsp;PS * Max. theoretical speed: approx. 94.1&nbsp;km/h * Automatic gearbox: 5 forward, 1 reverse gears * Fuel capacity: 201.75/269&nbsp;L (75% fill, Diesel) * Estimated range: 730&nbsp;km in 7h45m * Idle/red/max RPM: 600/2800/3000&nbsp;RPM * Capacity: 9 persons (1 driver, 1 gunner, 1 commander, 6 cargo) * Turrets: 3&times; Machine gun </spoiler> |- | LAV-25 Reconnaissance Vehicle | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/Conflict_Variants/LAV25_MERDC_Conflict.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 12.90&nbsp;T * Horsepower: 271&nbsp;HP / 275&nbsp;PS * Max. theoretical speed: approx. 94.1&nbsp;km/h * Automatic gearbox: 5 forward, 1 reverse gears * Fuel capacity: 201.75/269&nbsp;L (75% fill, Diesel) * Estimated range: 730&nbsp;km in 7h45m * Idle/red/max RPM: 600/2800/3000&nbsp;RPM * Capacity: 9 persons (1 driver, 1 gunner, 1 commander, 6 cargo) * Turrets: 3&times; Machine gun </spoiler> |- | UH-1H Transport Helicopter | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Helicopters/UH1H/UH1H.et}} | style="font-size: smaller" | * Mass: 2.37&nbsp;T * Horsepower: 910&nbsp;HP / 923&nbsp;PS * Fuel capacity: 622.5/830&nbsp;L (75% fill, Kerosene) * Idle/max RPM: 3000/6600&nbsp;RPM * Capacity: 10 persons (2 pilots, 8 cargo) |- | UH-1H Armed Transport Helicopter | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Helicopters/UH1H/UH1H_armed.et}} | style="font-size: smaller" | * Mass: 2.37&nbsp;T * Horsepower: 910&nbsp;HP / 923&nbsp;PS * Fuel capacity: 622.5/830&nbsp;L (75% fill, Kerosene) * Idle/max RPM: 3000/6600&nbsp;RPM * Capacity: 10 persons (2 pilots, 2 gunners, 6 cargo) * Turrets: 2&times; M60D |- | UH-1H Helicopter Gunship – HE | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Helicopters/UH1H/UH1H_armed_gunship_HE.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 2.37&nbsp;T * Horsepower: 910&nbsp;HP / 923&nbsp;PS * Fuel capacity: 622.5/830&nbsp;L (75% fill, Kerosene) * Idle/max RPM: 3000/6600&nbsp;RPM * Capacity: 11 persons (2 pilots, 3 gunners, 6 cargo) * Turrets: ** 2&times; M260 Rocket Pod ** 2&times; M60D </spoiler> |- | UH-1H Helicopter Gunship – HEDP | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Helicopters/UH1H/UH1H_armed_gunship_HEDP.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 2.37&nbsp;T * Horsepower: 910&nbsp;HP / 923&nbsp;PS * Fuel capacity: 622.5/830&nbsp;L (75% fill, Kerosene) * Idle/max RPM: 3000/6600&nbsp;RPM * Capacity: 11 persons (2 pilots, 3 gunners, 6 cargo) * Turrets: ** 2&times; M260 Rocket Pod ** 2&times; M60D </spoiler> |}

=== Weapons Tripod ===

{| class="wikitable sortable valign-top" style="min-width: 60em" ! style="min-width: 25%" | Name ! Prefab ! class="unsortable" | Details |- | M60 - Tripod | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Tripods/Tripod_M122_MG_M60.et}} | style="font-size: smaller" | * Mounted weapon: M60 * Angles: ** from -45 to 45° (90° horizontal range) ** from -25 to 30° (55° vertical range) |- | M2HB - Tripod | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Tripods/Tripod_M3_M2HB.et}} | style="font-size: smaller" | * Mounted weapon: M2HB * Angles: ** from -50 to 50° (100° horizontal range) ** from -20 to 25° (45° vertical range) |- | M252 - Mortar | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Mortars/M252/Mortar_M252.et}} | style="font-size: smaller" | * Angles: ** from -180 to 180° (360° horizontal range) ** from 45 to 85° (40° vertical range) |}

== USSR ==

=== Character ===

{| class="wikitable sortable valign-top" style="min-width: 60em" ! style="min-width: 25%" | Name ! Prefab ! class="unsortable" | Details |- | Random Soviet Soldier | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_Randomized.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Equipment: ** M88 Jacket ** M88 Trousers ** SSh-68 Helmet ** Soviet Combat Boots {{!}} * Items: ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** Tourniquet {{!}}} </spoiler> |- | Rifleman | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_Rifleman.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AK-74 + 6P20 Muzzle Brake * Equipment: ** 6B2 Vest ** Lifchik ** M88 Jacket ** M88 Trousers ** SSh-68 Helmet ** Soviet Combat Boots {{!}} * Items: ** 6&times; 5.45×39mm 30rnd AK Mag ** 6Kh4 Bayonet ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** 2&times; RDG-2 ** RGD-5 ** Tourniquet {{!}}} </spoiler> |- | Officer | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_Officer.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** PM * Equipment: ** Harness - Officer ** M88 Jacket - Rolled-up ** M88 Trousers ** Officer's Cap ** Soviet Combat Boots {{!}} * Items: ** 3&times; 9×18mm 8rnd PM Mag ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** Tourniquet {{!}}} </spoiler> |- | Platoon Leader | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_PL.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AK-74 + 6P20 Muzzle Brake ** PM * Equipment: ** 6B2 Vest ** Harness - Commander ** M88 Jacket ** M88 Trousers ** SSh-68 Helmet - Netting ** Soviet Combat Boots {{!}} * Items: ** 4&times; 5.45×39mm 30rnd AK Mag ** 9×18mm 8rnd PM Mag ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** 2&times; RDG-2 ** RGD-5 ** Tourniquet {{!}}} </spoiler> |- | Platoon Sergeant | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_Sergeant.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AK-74 + 6P20 Muzzle Brake * Equipment: ** 6B2 Vest ** Harness - Standard ** M88 Jacket ** M88 Trousers ** SSh-68 Helmet ** Soviet Combat Boots {{!}} * Items: ** 4&times; 5.45×39mm 30rnd AK Mag ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** 2&times; RDG-2 ** RGD-5 ** Tourniquet {{!}}} </spoiler> |- | Squad Leader | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_SL.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AK-74 *** 6P20 Muzzle Brake *** GP-25 * Equipment: ** 6B2 Vest ** Lifchik - Grenadier ** M88 Jacket ** M88 Trousers ** SSh-68 Helmet - Camouflaged ** Soviet Combat Boots {{!}} * Items: ** 2&times; 40mm VG-40OP White Flare Grenade ** 7&times; 40mm VOG-25 Fragmentation Grenade ** 4&times; 5.45×39mm 30rnd AK Mag ** 2&times; 5.45×39mm 30rnd AK Tracer Mag ** 6Kh4 Bayonet ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** 2&times; RDG-2 ** RGD-5 ** Tourniquet {{!}}} </spoiler> |- | Senior Rifleman | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_SR.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AK-74N *** 1P29 Scope *** 6P20 Muzzle Brake * Equipment: ** 6B3 Vest ** M88 Jacket ** M88 Trousers ** SSh-68 Helmet - Netting ** Soviet Combat Boots {{!}} * Items: ** 6&times; 5.45×39mm 30rnd AK Mag ** 6Kh4 Bayonet ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** 2&times; RDG-2 ** RGD-5 ** Tourniquet {{!}}} </spoiler> |- | Grenadier | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_GL.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AK-74 *** 6P20 Muzzle Brake *** GP-25 * Equipment: ** 6B2 Vest ** Lifchik - Grenadier ** M88 Jacket - Rolled-up ** M88 Trousers ** SSh-68 Helmet - Netting ** Soviet Combat Boots {{!}} * Items: ** 2&times; 40mm VG-40OP White Flare Grenade ** 7&times; 40mm VOG-25 Fragmentation Grenade ** 6&times; 5.45×39mm 30rnd AK Mag ** 6Kh4 Bayonet ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** 2&times; RDG-2 ** 3&times; RGD-5 ** Tourniquet {{!}}} </spoiler> |- | Automatic Rifleman | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_AR.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** RPK-74 * Equipment: ** 6B2 Vest ** Harness - Automatic Rifleman ** M88 Jacket ** M88 Trousers ** SSh-68 Helmet - Netting ** Soviet Combat Boots {{!}} * Items: ** 8&times; 5.45×39mm 45rnd RPK-74 Mag ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** RDG-2 ** Tourniquet {{!}}} </spoiler> |- | Machine-Gunner | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_MG.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** PKM ** PM * Equipment: ** 6B2 Vest ** Harness - Machine Gunner ** M88 Jacket ** M88 Trousers ** SSh-68 Helmet ** Soviet Combat Boots {{!}} * Items: ** 7.62×54mmR 100rnd PK Belt ** 9×18mm 8rnd PM Mag ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** RDG-2 ** Tourniquet {{!}}} </spoiler> |- | Machine-Gunner Assistant | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_AMG.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AK-74 + 6P20 Muzzle Brake * Equipment: ** Harness - Standard ** Kolobok Backpack ** M88 Jacket - Rolled-up ** M88 Trousers ** SSh-68 Helmet - Netting ** Soviet Combat Boots {{!}} * Items: ** 4&times; 5.45×39mm 30rnd AK Mag ** 4&times; 7.62×54mmR 100rnd PK Belt ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** 2&times; RDG-2 ** RGD-5 ** Tourniquet {{!}}} </spoiler> |- | Anti-Tank Specialist | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_AT.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AKS-74U + 6P26 Flash Hider ** RPG-7V1 + PGO-7V3 Scope * Equipment: ** Harness - Standard ** M88 Jacket ** M88 Trousers ** RPG Specialist Backpack ** SSh-68 Helmet - Netting ** Soviet Combat Boots {{!}} * Items: ** 4&times; 5.45×39mm 30rnd AK Mag ** 2&times; 70mm HEAT PG-7VM Grenade ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** 2&times; RDG-2 ** RGD-5 ** Tourniquet {{!}}} </spoiler> |- | Anti-Tank Specialist Assistant | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_AAT.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AK-74 + 6P20 Muzzle Brake * Equipment: ** Harness - Standard ** M88 Jacket - Rolled-up ** M88 Trousers ** RPG Assistant Backpack ** SSh-68 Helmet ** Soviet Combat Boots {{!}} * Items: ** 4&times; 5.45×39mm 30rnd AK Mag ** 3&times; 70mm HEAT PG-7VM Grenade ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** 2&times; RDG-2 ** RGD-5 ** Tourniquet {{!}}} </spoiler> |- | Sharpshooter | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_Sharpshooter.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** SVD + PSO-1 Scope * Equipment: ** 6B2 Vest ** Harness - Sharpshooter ** M88 Jacket ** M88 Trousers ** SSh-68 Helmet - Netting ** Soviet Combat Boots {{!}} * Items: ** 6&times; 7.62×54mmR 10rnd SVD Sniper Mag ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** 2&times; RDG-2 ** RGD-5 ** Tourniquet {{!}}} </spoiler> |- | Medic | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_Medic.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AK-74 + 6P20 Muzzle Brake * Equipment: ** Harness - Medic ** M88 Jacket ** M88 Trousers ** SSh-68 Helmet ** Soviet Combat Boots ** Soviet Medic Bag {{!}} * Items: ** 4&times; 5.45×39mm 30rnd AK Mag ** Adrianov Compass ** 8&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** 8&times; Morphine Injector ** R-148 Radio ** RDG-2 ** 4&times; Saline Solution ** 8&times; Tourniquet {{!}}} </spoiler> |- | Combat Signaler | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_RTO.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AK-74 + 6P20 Muzzle Brake * Equipment: ** Harness - Standard ** M88 Jacket ** M88 Trousers ** R-107M Radio ** SSh-68 Helmet - Camouflaged ** Soviet Combat Boots {{!}} * Items: ** 4&times; 5.45×39mm 30rnd AK Mag ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** 2&times; RDG-2 ** RGD-5 ** Tourniquet {{!}}} </spoiler> |- | Helicopter Pilot | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_HeliPilot.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** PM * Equipment: ** Pilot Survival Vest ** Soviet Combat Boots ** Soviet Pilot Jacket ** Soviet Pilot Pants ** ZSh-5 Helmet {{!}} * Items: ** 3&times; 9×18mm 8rnd PM Mag ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** RDG-2 ** Tourniquet {{!}}} </spoiler> |- | Helicopter Crew | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_HeliCrew.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** PM * Equipment: ** Pilot Survival Vest ** Soviet Combat Boots ** Soviet Pilot Jacket ** Soviet Pilot Pants ** ZSh-5 Helmet {{!}} * Items: ** 3&times; 9×18mm 8rnd PM Mag ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** RDG-2 ** Tourniquet {{!}}} </spoiler> |- | Crewman | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_Crew.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AKS-74U + 6P26 Flash Hider * Equipment: ** Harness - Standard ** Soviet Combat Boots ** TSh-4 Helmet ** Tanker Jacket ** Tanker Pants {{!}} * Items: ** 4&times; 5.45×39mm 30rnd AK Mag ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** RDG-2 ** Tourniquet {{!}}} </spoiler> |- | Crew Commander | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_CC.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AKS-74U + 6P26 Flash Hider * Equipment: ** Harness - Standard ** Soviet Combat Boots ** TSh-4 Helmet ** Tanker Jacket ** Tanker Pants {{!}} * Items: ** 4&times; 5.45×39mm 30rnd AK Mag ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** RDG-2 ** Tourniquet {{!}}} </spoiler> |- | Scout | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_Scout.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AK-74 + 6P20 Muzzle Brake * Equipment: ** KLMK Coveralls ** Lifchik ** SSh-68 Helmet - KLMK ** Soviet Combat Boots {{!}} * Items: ** 6&times; 5.45×39mm 30rnd AK Mag ** 6Kh4 Bayonet ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** 2&times; RDG-2 ** RGD-5 ** Tourniquet {{!}}} </spoiler> |- | Scout Radio Operator | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_Scout_RTO.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AK-74 + 6P20 Muzzle Brake * Equipment: ** KLMK Coveralls ** Lifchik ** R-107M Radio ** SSh-68 Helmet - KLMK, Netting ** Soviet Combat Boots {{!}} * Items: ** 6&times; 5.45×39mm 30rnd AK Mag ** 6Kh4 Bayonet ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** 2&times; RDG-2 ** RGD-5 ** Tourniquet {{!}}} </spoiler> |- | Sapper | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_Sapper.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AK-74 + 6P20 Muzzle Brake * Equipment: ** 6B2 Vest ** Kolobok Backpack ** Lifchik ** M88 Jacket ** M88 Trousers ** SSh-68 Helmet ** Soviet Combat Boots {{!}} * Items: ** 5&times; 400g TNT Demolition Block ** 6&times; 5.45×39mm 30rnd AK Mag ** 6Kh4 Bayonet ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** KPM-3U1 Detonator ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** 2&times; RDG-2 ** RGD-5 ** Repair Tool ** Tourniquet {{!}}} </spoiler> |- | Ammunition Bearer | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_Ammo.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AK-74 + 6P20 Muzzle Brake * Equipment: ** Harness - Standard ** Kolobok Backpack ** M88 Jacket ** M88 Trousers ** SSh-68 Helmet ** Soviet Combat Boots {{!}} * Items: ** 24&times; 5.45×39mm 30rnd AK Mag ** 8&times; 5.45×39mm 45rnd RPK-74 Mag ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** 6&times; RDG-2 ** 5&times; RGD-5 ** Tourniquet {{!}}} </spoiler> |- | Unarmed | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_Unarmed.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Equipment: ** M88 Field Cap ** M88 Jacket - Rolled-up ** M88 Trousers ** Soviet Combat Boots {{!}} * Items: ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** Tourniquet {{!}}} </spoiler> |- | Random Soviet Soldier | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/KLMK/Character_USSR_Randomized_KLMK.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Equipment: ** KLMK Coveralls ** SSh-68 Helmet - KLMK ** Soviet Combat Boots {{!}} * Items: ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** Tourniquet {{!}}} </spoiler> |- | Rifleman | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/KLMK/Character_USSR_Rifleman_KLMK.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AK-74 + 6P20 Muzzle Brake * Equipment: ** 6B2 Vest ** KLMK Coveralls ** Lifchik ** SSh-68 Helmet - KLMK ** Soviet Combat Boots {{!}} * Items: ** 6&times; 5.45×39mm 30rnd AK Mag ** 6Kh4 Bayonet ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** 2&times; RDG-2 ** RGD-5 ** Tourniquet {{!}}} </spoiler> |- | Platoon Leader | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/KLMK/Character_USSR_PL_KLMK.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AK-74 + 6P20 Muzzle Brake ** PM * Equipment: ** 6B2 Vest ** Harness - Commander ** KLMK Coveralls ** SSh-68 Helmet - KLMK, Netting ** Soviet Combat Boots {{!}} * Items: ** 4&times; 5.45×39mm 30rnd AK Mag ** 9×18mm 8rnd PM Mag ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** 2&times; RDG-2 ** RGD-5 ** Tourniquet {{!}}} </spoiler> |- | Platoon Sergeant | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/KLMK/Character_USSR_Sergeant_KLMK.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AK-74 + 6P20 Muzzle Brake * Equipment: ** 6B2 Vest ** Harness - Standard ** KLMK Coveralls ** SSh-68 Helmet - KLMK ** Soviet Combat Boots {{!}} * Items: ** 4&times; 5.45×39mm 30rnd AK Mag ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** 2&times; RDG-2 ** RGD-5 ** Tourniquet {{!}}} </spoiler> |- | Squad Leader | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/KLMK/Character_USSR_SL_KLMK.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AK-74 *** 6P20 Muzzle Brake *** GP-25 * Equipment: ** 6B2 Vest ** KLMK Coveralls ** Lifchik - Grenadier ** SSh-68 Helmet - KLMK, Netting ** Soviet Combat Boots {{!}} * Items: ** 2&times; 40mm VG-40OP White Flare Grenade ** 7&times; 40mm VOG-25 Fragmentation Grenade ** 4&times; 5.45×39mm 30rnd AK Mag ** 2&times; 5.45×39mm 30rnd AK Tracer Mag ** 6Kh4 Bayonet ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** 2&times; RDG-2 ** RGD-5 ** Tourniquet {{!}}} </spoiler> |- | Senior Rifleman | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/KLMK/Character_USSR_SR_KLMK.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AK-74N *** 1P29 Scope *** 6P20 Muzzle Brake * Equipment: ** 6B3 Vest ** KLMK Coveralls ** SSh-68 Helmet - KLMK, Netting ** Soviet Combat Boots {{!}} * Items: ** 6&times; 5.45×39mm 30rnd AK Mag ** 6Kh4 Bayonet ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** 2&times; RDG-2 ** RGD-5 ** Tourniquet {{!}}} </spoiler> |- | Grenadier | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/KLMK/Character_USSR_GL_KLMK.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AK-74 *** 6P20 Muzzle Brake *** GP-25 * Equipment: ** 6B2 Vest ** KLMK Coveralls ** Lifchik - Grenadier ** SSh-68 Helmet - KLMK, Netting ** Soviet Combat Boots {{!}} * Items: ** 2&times; 40mm VG-40OP White Flare Grenade ** 7&times; 40mm VOG-25 Fragmentation Grenade ** 6&times; 5.45×39mm 30rnd AK Mag ** 6Kh4 Bayonet ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** 2&times; RDG-2 ** 3&times; RGD-5 ** Tourniquet {{!}}} </spoiler> |- | Automatic Rifleman | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/KLMK/Character_USSR_AR_KLMK.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** RPK-74 * Equipment: ** 6B2 Vest ** Harness - Automatic Rifleman ** KLMK Coveralls ** SSh-68 Helmet - KLMK, Netting ** Soviet Combat Boots {{!}} * Items: ** 8&times; 5.45×39mm 45rnd RPK-74 Mag ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** RDG-2 ** Tourniquet {{!}}} </spoiler> |- | Machine-Gunner | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/KLMK/Character_USSR_MG_KLMK.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** PKM ** PM * Equipment: ** 6B2 Vest ** Harness - Machine Gunner ** KLMK Coveralls ** SSh-68 Helmet - KLMK ** Soviet Combat Boots {{!}} * Items: ** 7.62×54mmR 100rnd PK Belt ** 9×18mm 8rnd PM Mag ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** RDG-2 ** Tourniquet {{!}}} </spoiler> |- | Machine-Gunner Assistant | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/KLMK/Character_USSR_AMG_KLMK.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AK-74 + 6P20 Muzzle Brake * Equipment: ** Harness - Standard ** KLMK Coveralls ** Kolobok Backpack ** SSh-68 Helmet - KLMK ** Soviet Combat Boots {{!}} * Items: ** 4&times; 5.45×39mm 30rnd AK Mag ** 4&times; 7.62×54mmR 100rnd PK Belt ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** 2&times; RDG-2 ** RGD-5 ** Tourniquet {{!}}} </spoiler> |- | Anti-Tank Specialist | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/KLMK/Character_USSR_AT_KLMK.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AKS-74U + 6P26 Flash Hider ** RPG-7V1 + PGO-7V3 Scope * Equipment: ** Harness - Standard ** KLMK Coveralls ** RPG Specialist Backpack ** SSh-68 Helmet - KLMK, Netting ** Soviet Combat Boots {{!}} * Items: ** 4&times; 5.45×39mm 30rnd AK Mag ** 2&times; 70mm HEAT PG-7VM Grenade ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** 2&times; RDG-2 ** RGD-5 ** Tourniquet {{!}}} </spoiler> |- | Anti-Tank Specialist Assistant | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/KLMK/Character_USSR_AAT_KLMK.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AK-74 + 6P20 Muzzle Brake * Equipment: ** Harness - Standard ** KLMK Coveralls ** RPG Assistant Backpack ** SSh-68 Helmet - KLMK ** Soviet Combat Boots {{!}} * Items: ** 4&times; 5.45×39mm 30rnd AK Mag ** 3&times; 70mm HEAT PG-7VM Grenade ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** 2&times; RDG-2 ** RGD-5 ** Tourniquet {{!}}} </spoiler> |- | Sharpshooter | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/KLMK/Character_USSR_Sharpshooter_KLMK.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** SVD + PSO-1 Scope * Equipment: ** 6B2 Vest ** Harness - Sharpshooter ** KLMK Coveralls ** SSh-68 Helmet - KLMK, Netting ** Soviet Combat Boots {{!}} * Items: ** 6&times; 7.62×54mmR 10rnd SVD Sniper Mag ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** 2&times; RDG-2 ** RGD-5 ** Tourniquet {{!}}} </spoiler> |- | Medic | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/KLMK/Character_USSR_Medic_KLMK.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AK-74 + 6P20 Muzzle Brake * Equipment: ** Harness - Medic ** KLMK Coveralls ** SSh-68 Helmet - KLMK ** Soviet Combat Boots ** Soviet Medic Bag {{!}} * Items: ** 4&times; 5.45×39mm 30rnd AK Mag ** Adrianov Compass ** 8&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** 8&times; Morphine Injector ** R-148 Radio ** RDG-2 ** 4&times; Saline Solution ** 8&times; Tourniquet {{!}}} </spoiler> |- | Combat Signaler | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/KLMK/Character_USSR_RTO_KLMK.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AK-74 + 6P20 Muzzle Brake * Equipment: ** Harness - Standard ** KLMK Coveralls ** R-107M Radio ** SSh-68 Helmet - KLMK ** Soviet Combat Boots {{!}} * Items: ** 4&times; 5.45×39mm 30rnd AK Mag ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** 2&times; RDG-2 ** RGD-5 ** Tourniquet {{!}}} </spoiler> |- | Sapper | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/KLMK/Character_USSR_Sapper_KLMK.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AK-74 + 6P20 Muzzle Brake * Equipment: ** 6B2 Vest ** KLMK Coveralls ** Kolobok Backpack ** Lifchik ** SSh-68 Helmet - KLMK ** Soviet Combat Boots {{!}} * Items: ** 5&times; 400g TNT Demolition Block ** 6&times; 5.45×39mm 30rnd AK Mag ** 6Kh4 Bayonet ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** KPM-3U1 Detonator ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** 2&times; RDG-2 ** RGD-5 ** Repair Tool ** Tourniquet {{!}}} </spoiler> |- | Ammunition Bearer | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/KLMK/Character_USSR_Ammo_KLMK.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AK-74 + 6P20 Muzzle Brake * Equipment: ** Harness - Standard ** KLMK Coveralls ** Kolobok Backpack ** SSh-68 Helmet - KLMK ** Soviet Combat Boots {{!}} * Items: ** 24&times; 5.45×39mm 30rnd AK Mag ** 8&times; 5.45×39mm 45rnd RPK-74 Mag ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** 6&times; RDG-2 ** 5&times; RGD-5 ** Tourniquet {{!}}} </spoiler> |- | Special Forces | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/Spetsnaz/Character_USSR_SF.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AK-74N + 6P20 Muzzle Brake * Equipment: ** KZS Blouse ** KZS Pants ** Lifchik ** M88 Field Cap ** Soviet Combat Boots {{!}} * Items: ** 2&times; 400g TNT Demolition Block ** 6&times; 5.45×39mm 30rnd AK Mag ** 6Kh4 Bayonet ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** 2&times; RDG-2 ** RGD-5 ** Tourniquet {{!}}} </spoiler> |- | Special Forces Officer | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/Spetsnaz/Character_USSR_SF_Officer.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AKS-74UN + 6P26 Flash Hider ** PM * Equipment: ** Harness - Commander ** KZS Blouse ** KZS Pants ** M88 Field Cap ** Soviet Combat Boots ** Woolen gloves {{!}} * Items: ** 4&times; 5.45×39mm 30rnd AK Mag ** 9×18mm 8rnd PM Mag ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** 2&times; RDG-2 ** RGD-5 ** Tourniquet {{!}}} </spoiler> |- | Special Forces Squad Leader | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/Spetsnaz/Character_USSR_SF_SL.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AK-74N *** 6P20 Muzzle Brake *** GP-25 * Equipment: ** KZS Pants ** Lifchik - Grenadier ** M88 Field Cap ** Soviet Combat Boots ** Turtleneck - Beige ** Woolen gloves {{!}} * Items: ** 2&times; 40mm VG-40OP White Flare Grenade ** 7&times; 40mm VOG-25 Fragmentation Grenade ** 4&times; 5.45×39mm 30rnd AK Mag ** 2&times; 5.45×39mm 30rnd AK Tracer Mag ** 6Kh4 Bayonet ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** 2&times; RDG-2 ** RGD-5 ** Tourniquet {{!}}} </spoiler> |- | Special Forces Grenadier | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/Spetsnaz/Character_USSR_SF_GL.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AK-74N *** 6P20 Muzzle Brake *** GP-25 * Equipment: ** KZS Blouse ** KZS Pants ** Lifchik - Grenadier ** M88 Field Cap ** Soviet Combat Boots ** Woolen gloves {{!}} * Items: ** 2&times; 40mm VG-40OP White Flare Grenade ** 7&times; 40mm VOG-25 Fragmentation Grenade ** 6&times; 5.45×39mm 30rnd AK Mag ** 6Kh4 Bayonet ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** 2&times; RDG-2 ** 3&times; RGD-5 ** Tourniquet {{!}}} </spoiler> |- | Special Forces Machine-Gunner | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/Spetsnaz/Character_USSR_SF_LMG.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** RPK-74N * Equipment: ** Harness - Automatic Rifleman ** KZS Pants ** Panamka ** Soviet Combat Boots ** Turtleneck - Beige {{!}} * Items: ** 8&times; 5.45×39mm 45rnd RPK-74 Mag ** 6Kh4 Bayonet ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** RDG-2 ** Tourniquet {{!}}} </spoiler> |- | Special Forces Medic | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/Spetsnaz/Character_USSR_SF_Medic.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AKS-74UN + 6P26 Flash Hider * Equipment: ** KZS Blouse ** KZS Pants ** Lifchik ** M88 Field Cap ** Soviet Combat Boots ** Soviet Medic Bag {{!}} * Items: ** 6&times; 5.45×39mm 30rnd AK Mag ** 6Kh4 Bayonet ** Adrianov Compass ** 6&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** 7&times; Morphine Injector ** R-148 Radio ** RDG-2 ** 4&times; Saline Solution ** 7&times; Tourniquet {{!}}} </spoiler> |- | Special Forces Radio Operator | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/Spetsnaz/Character_USSR_SF_RTO.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AKS-74UN + 6P26 Flash Hider * Equipment: ** KZS Pants ** Lifchik ** Panamka ** R-107M Radio ** Soviet Combat Boots ** Turtleneck - Beige {{!}} * Items: ** 6&times; 5.45×39mm 30rnd AK Mag ** 6Kh4 Bayonet ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** 2&times; RDG-2 ** RGD-5 ** Tourniquet {{!}}} </spoiler> |- | Special Forces Sharpshooter | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/Spetsnaz/Character_USSR_SF_Sharpshooter.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** SVD + PSO-1 Scope * Equipment: ** Harness - Sharpshooter ** KZS Blouse ** KZS Pants ** M88 Field Cap ** Soviet Combat Boots ** Woolen gloves {{!}} * Items: ** 6Kh4 Bayonet ** 6&times; 7.62×54mmR 10rnd SVD Sniper Mag ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** 2&times; RDG-2 ** RGD-5 ** Tourniquet {{!}}} </spoiler> |- | Special Forces Sapper | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/Spetsnaz/Character_USSR_SF_Sapper.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AKS-74UN + 6P26 Flash Hider * Equipment: ** KZS Blouse ** KZS Pants ** Kolobok Backpack ** Lifchik ** M88 Field Cap ** Soviet Combat Boots {{!}} * Items: ** 5&times; 400g TNT Demolition Block ** 6&times; 5.45×39mm 30rnd AK Mag ** 6Kh4 Bayonet ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** KPM-3U1 Detonator ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** 2&times; RDG-2 ** RGD-5 ** Repair Tool ** Tourniquet {{!}}} </spoiler> |- | Special Forces - Recon | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/Spetsnaz/Suppressed/Character_USSR_SF_S.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AK-74N + PBS-4 Suppressor * Equipment: ** KZS Blouse ** KZS Pants ** Lifchik ** M88 Field Cap ** Soviet Combat Boots {{!}} * Items: ** 2&times; 400g TNT Demolition Block ** 6&times; 5.45×39mm 30rnd AK Mag ** 6Kh4 Bayonet ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** 2&times; RDG-2 ** RGD-5 ** Tourniquet {{!}}} </spoiler> |- | Special Forces Squad Leader - Recon | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/Spetsnaz/Suppressed/Character_USSR_SF_SL_S.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AK-74N + PBS-4 Suppressor * Equipment: ** KZS Pants ** Lifchik ** M88 Field Cap ** Soviet Combat Boots ** Turtleneck - Beige ** Woolen gloves {{!}} * Items: ** 6&times; 5.45×39mm 30rnd AK Mag ** 6Kh4 Bayonet ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** 2&times; RDG-2 ** RGD-5 ** Tourniquet {{!}}} </spoiler> |- | Special Forces Grenadier - Recon | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/Spetsnaz/Suppressed/Character_USSR_SF_GL_S.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AK-74N *** GP-25 *** PBS-4 Suppressor * Equipment: ** KZS Blouse ** KZS Pants ** Lifchik - Grenadier ** M88 Field Cap ** Soviet Combat Boots ** Woolen gloves {{!}} * Items: ** 2&times; 40mm VG-40OP White Flare Grenade ** 7&times; 40mm VOG-25 Fragmentation Grenade ** 6&times; 5.45×39mm 30rnd AK Mag ** 6Kh4 Bayonet ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** 2&times; RDG-2 ** 3&times; RGD-5 ** Tourniquet {{!}}} </spoiler> |- | Special Forces Medic - Recon | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/Spetsnaz/Suppressed/Character_USSR_SF_Medic_S.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AKS-74UN + PBS-4 Suppressor * Equipment: ** KZS Blouse ** KZS Pants ** Lifchik ** M88 Field Cap ** Soviet Combat Boots ** Soviet Medic Bag {{!}} * Items: ** 6&times; 5.45×39mm 30rnd AK Mag ** 6Kh4 Bayonet ** Adrianov Compass ** 6&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** 7&times; Morphine Injector ** R-148 Radio ** RDG-2 ** 4&times; Saline Solution ** 7&times; Tourniquet {{!}}} </spoiler> |- | Special Forces Radio Operator - Recon | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/Spetsnaz/Suppressed/Character_USSR_SF_RTO_S.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AKS-74UN + PBS-4 Suppressor * Equipment: ** KZS Pants ** Lifchik ** Panamka ** R-107M Radio ** Soviet Combat Boots ** Turtleneck - Beige {{!}} * Items: ** 6&times; 5.45×39mm 30rnd AK Mag ** 6Kh4 Bayonet ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** 2&times; RDG-2 ** RGD-5 ** Tourniquet {{!}}} </spoiler> |- | Special Forces Sharpshooter - Recon | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/Spetsnaz/Suppressed/Character_USSR_SF_Sharpshooter_S.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AK-74N *** 1P29 Scope *** PBS-4 Suppressor * Equipment: ** KZS Blouse ** KZS Pants ** Lifchik ** M88 Field Cap ** Soviet Combat Boots ** Woolen gloves {{!}} * Items: ** 6&times; 5.45×39mm 30rnd AK Mag ** 6Kh4 Bayonet ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** 2&times; RDG-2 ** RGD-5 ** Tourniquet {{!}}} </spoiler> |- | Special Forces Sapper - Recon | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/Spetsnaz/Suppressed/Character_USSR_SF_Sapper_S.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AKS-74UN + PBS-4 Suppressor * Equipment: ** KZS Blouse ** KZS Pants ** Kolobok Backpack ** Lifchik ** M88 Field Cap ** Soviet Combat Boots {{!}} * Items: ** 5&times; 400g TNT Demolition Block ** 6&times; 5.45×39mm 30rnd AK Mag ** 6Kh4 Bayonet ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** KPM-3U1 Detonator ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** 2&times; RDG-2 ** RGD-5 ** Repair Tool ** Tourniquet {{!}}} </spoiler> |- | Rifleman | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Campaign/Final/Campaign_USSR_Player.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AK-74 + 6P20 Muzzle Brake * Equipment: ** 6B2 Vest ** Lifchik ** M88 Jacket ** M88 Trousers ** SSh-68 Helmet ** Soviet Combat Boots {{!}} * Items: ** 6&times; 5.45×39mm 30rnd AK Mag ** 6Kh4 Bayonet ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** 2&times; RDG-2 ** RGD-5 ** Tourniquet {{!}}} </spoiler> |- | Rifleman | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_Rifleman_Variant_1.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AK-74 + 6P20 Muzzle Brake * Equipment: ** 6B2 Vest ** Lifchik ** M88 Jacket - Rolled-up ** M88 Trousers ** SSh-68 Helmet ** Soviet Combat Boots {{!}} * Items: ** 6&times; 5.45×39mm 30rnd AK Mag ** 6Kh4 Bayonet ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** 2&times; RDG-2 ** RGD-5 ** Tourniquet {{!}}} </spoiler> |- | Rifleman | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Campaign/Final/PlayerVariant/Campaign_USSR_Player_Variant_1.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** AK-74 + 6P20 Muzzle Brake * Equipment: ** 6B2 Vest ** Lifchik ** M88 Jacket - Rolled-up ** M88 Trousers ** SSh-68 Helmet ** Soviet Combat Boots {{!}} * Items: ** 6&times; 5.45×39mm 30rnd AK Mag ** 6Kh4 Bayonet ** Adrianov Compass ** 2&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** 2&times; RDG-2 ** RGD-5 ** Tourniquet {{!}}} </spoiler> |}

=== Group ===

{| class="wikitable sortable valign-top" style="min-width: 60em" ! style="min-width: 25%" | Name ! Prefab ! class="unsortable" | Details |- | Rifle Squad | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/OPFOR/Group_USSR_RifleSquad.et}} | style="font-size: smaller" | * Anti-Tank Specialist * Anti-Tank Specialist Assistant * Automatic Rifleman * Rifleman * Senior Rifleman * Squad Leader |- | Fire Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/OPFOR/Group_USSR_FireGroup.et}} | style="font-size: smaller" | * Anti-Tank Specialist * Anti-Tank Specialist Assistant * Automatic Rifleman * Squad Leader |- | Maneuver Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/OPFOR/Group_USSR_ManeuverGroup.et}} | style="font-size: smaller" | * Rifleman * Senior Rifleman |- | Light Fire Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/OPFOR/Group_USSR_LightFireTeam.et}} | style="font-size: smaller" | * 3&times; Rifleman * Senior Rifleman |- | Grenadier Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/OPFOR/Group_USSR_Team_GL.et}} | style="font-size: smaller" | * Automatic Rifleman * 2&times; Grenadier * Senior Rifleman |- | Anti-Tank Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/OPFOR/Group_USSR_Team_AT.et}} | style="font-size: smaller" | * 2&times; Anti-Tank Specialist * Anti-Tank Specialist Assistant * Senior Rifleman |- | Base of Fire Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/OPFOR/Group_USSR_Team_Suppress.et}} | style="font-size: smaller" | * 2&times; Automatic Rifleman * Grenadier * Senior Rifleman |- | Machine Gun Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/OPFOR/Group_USSR_MachineGunTeam.et}} | style="font-size: smaller" | * Machine-Gunner * Machine-Gunner Assistant |- | Patrol Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/OPFOR/Group_USSR_SentryTeam.et}} | style="font-size: smaller" | * 2&times; Rifleman |- | Platoon HQ | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/OPFOR/Group_USSR_PlatoonHQ.et}} | style="font-size: smaller" | * Combat Signaler * Medic * Platoon Leader * Platoon Sergeant * Sharpshooter |- | Medical Support Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/OPFOR/Group_USSR_MedicalSection.et}} | style="font-size: smaller" | * 2&times; Medic |- | Ammunition Supply Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/OPFOR/Group_USSR_AmmoTeam.et}} | style="font-size: smaller" | * 2&times; Ammunition Bearer * Anti-Tank Specialist Assistant * Machine-Gunner Assistant |- | Sapper Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/OPFOR/Group_USSR_SapperTeam.et}} | style="font-size: smaller" | * 2&times; Sapper |- | Rifle Squad | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/OPFOR/KLMK/Group_USSR_RifleSquad_KLMK.et}} | style="font-size: smaller" | * Anti-Tank Specialist * Anti-Tank Specialist Assistant * Automatic Rifleman * Rifleman * Senior Rifleman * Squad Leader |- | Fire Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/OPFOR/KLMK/Group_USSR_FireGroup_KLMK.et}} | style="font-size: smaller" | * Anti-Tank Specialist * Anti-Tank Specialist Assistant * Automatic Rifleman * Squad Leader |- | Maneuver Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/OPFOR/KLMK/Group_USSR_ManeuverGroup_KLMK.et}} | style="font-size: smaller" | * Rifleman * Senior Rifleman |- | Light Fire Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/OPFOR/KLMK/Group_USSR_LightFireTeam_KLMK.et}} | style="font-size: smaller" | * 3&times; Rifleman * Senior Rifleman |- | Grenadier Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/OPFOR/KLMK/Group_USSR_Team_GL_KLMK.et}} | style="font-size: smaller" | * Automatic Rifleman * 2&times; Grenadier * Senior Rifleman |- | Anti-Tank Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/OPFOR/KLMK/Group_USSR_Team_AT_KLMK.et}} | style="font-size: smaller" | * 2&times; Anti-Tank Specialist * Anti-Tank Specialist Assistant * Senior Rifleman |- | Base of Fire Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/OPFOR/KLMK/Group_USSR_Team_Suppress_KLMK.et}} | style="font-size: smaller" | * 2&times; Automatic Rifleman * Grenadier * Senior Rifleman |- | Machine Gun Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/OPFOR/KLMK/Group_USSR_MachineGunTeam_KLMK.et}} | style="font-size: smaller" | * Machine-Gunner * Machine-Gunner Assistant |- | Patrol Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/OPFOR/KLMK/Group_USSR_SentryTeam_KLMK.et}} | style="font-size: smaller" | * 2&times; Rifleman |- | Recon Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/OPFOR/KLMK/Group_USSR_ReconTeam.et}} | style="font-size: smaller" | * Scout * Scout Radio Operator |- | Platoon HQ | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/OPFOR/KLMK/Group_USSR_PlatoonHQ_KLMK.et}} | style="font-size: smaller" | * Combat Signaler * Medic * Platoon Leader * Platoon Sergeant * Sharpshooter |- | Medical Support Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/OPFOR/KLMK/Group_USSR_MedicalSection_KLMK.et}} | style="font-size: smaller" | * 2&times; Medic |- | Ammunition Supply Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/OPFOR/KLMK/Group_USSR_AmmoTeam_KLMK.et}} | style="font-size: smaller" | * 2&times; Ammunition Bearer * Anti-Tank Specialist Assistant * Machine-Gunner Assistant |- | Sapper Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/OPFOR/KLMK/Group_USSR_SapperTeam_KLMK.et}} | style="font-size: smaller" | * 2&times; Sapper |- | Special Forces Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/OPFOR/Spetsnaz/Group_USSR_Spetsnaz_SentryTeam.et}} | style="font-size: smaller" | * 2&times; Special Forces |- | Special Forces Squad | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/OPFOR/Spetsnaz/Group_USSR_Spetsnaz_Squad.et}} | style="font-size: smaller" | * Special Forces Machine-Gunner * Special Forces Medic * Special Forces Radio Operator * Special Forces Sapper * Special Forces Sharpshooter * Special Forces Squad Leader |- | Special Forces Recon Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/OPFOR/Spetsnaz/Suppressed/Group_USSR_Spetsnaz_ReconTeam.et}} | style="font-size: smaller" | * 2&times; Special Forces - Recon |- | Special Forces Recon Squad | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/OPFOR/Spetsnaz/Suppressed/Group_USSR_Spetsnaz_ReconSquad.et}} | style="font-size: smaller" | * Special Forces - Recon * Special Forces Medic - Recon * Special Forces Radio Operator - Recon * Special Forces Sapper - Recon * Special Forces Sharpshooter - Recon * Special Forces Squad Leader - Recon |- | Fire Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/OPFOR/AmbientPatrols/Group_USSR_FireGroup_NotSpawned.et}} | style="font-size: smaller" | * Anti-Tank Specialist * Anti-Tank Specialist Assistant * Automatic Rifleman * Squad Leader |- | Machine Gun Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/OPFOR/AmbientPatrols/Group_USSR_MachineGunTeam_NotSpawned.et}} | style="font-size: smaller" | * Machine-Gunner * Machine-Gunner Assistant |- | Rifle Squad | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/OPFOR/AmbientPatrols/Group_USSR_RifleSquad_NotSpawned.et}} | style="font-size: smaller" | * Anti-Tank Specialist * Anti-Tank Specialist Assistant * Automatic Rifleman * Rifleman * Senior Rifleman * Squad Leader |- | Patrol Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/OPFOR/AmbientPatrols/Group_USSR_SentryTeam_NotSpawned.et}} | style="font-size: smaller" | * 2&times; Rifleman |- | Anti-Tank Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/OPFOR/AmbientPatrols/Group_USSR_Team_AT_NotSpawned.et}} | style="font-size: smaller" | * 2&times; Anti-Tank Specialist * Anti-Tank Specialist Assistant * Senior Rifleman |}

=== Vehicle ===

{| class="wikitable sortable valign-top" style="min-width: 60em" ! style="min-width: 25%" | Name ! Prefab ! class="unsortable" | Details |- | UAZ-469 Off-road - Open Top | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/UAZ469/UAZ469_uncovered.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.65&nbsp;T * Horsepower: 71&nbsp;HP / 72&nbsp;PS * Max. theoretical speed: approx. 133.1&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 58.5/78&nbsp;L (75% fill, Petrol) * Estimated range: 460&nbsp;km in 3h30m * Idle/red/max RPM: 800/5000/6000&nbsp;RPM * Capacity: 5 persons (1 driver, 4 cargo) </spoiler> |- | UAZ-469 Off-road | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.65&nbsp;T * Horsepower: 71&nbsp;HP / 72&nbsp;PS * Max. theoretical speed: approx. 133.1&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 58.5/78&nbsp;L (75% fill, Petrol) * Estimated range: 460&nbsp;km in 3h30m * Idle/red/max RPM: 800/5000/6000&nbsp;RPM * Capacity: 5 persons (1 driver, 4 cargo) </spoiler> |- | UAZ-469 Off-road - PKM | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/UAZ469/UAZ469_PKM.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.65&nbsp;T * Horsepower: 71&nbsp;HP / 72&nbsp;PS * Max. theoretical speed: approx. 133.1&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 58.5/78&nbsp;L (75% fill, Petrol) * Estimated range: 460&nbsp;km in 3h30m * Idle/red/max RPM: 800/5000/6000&nbsp;RPM * Capacity: 3 persons (1 driver, 1 gunner, 1 cargo) * Turret: PKM </spoiler> |- | UAZ-452A Ambulance | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/UAZ452/UAZ452_ambulance.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.65&nbsp;T * Horsepower: 71&nbsp;HP / 72&nbsp;PS * Max. theoretical speed: approx. 139.4&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 64.5/86&nbsp;L (75% fill, Petrol) * Estimated range: 800&nbsp;km in 5h45m * Idle/red/max RPM: 800/5000/6000&nbsp;RPM * Capacity: 5 persons (1 driver, 4 cargo) </spoiler> |- | UAZ-452 Transport Van | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/UAZ452/UAZ452_transport.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.65&nbsp;T * Horsepower: 71&nbsp;HP / 72&nbsp;PS * Max. theoretical speed: approx. 139.4&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 64.5/86&nbsp;L (75% fill, Petrol) * Estimated range: 800&nbsp;km in 5h45m * Idle/red/max RPM: 800/5000/6000&nbsp;RPM * Capacity: 8 persons (1 driver, 7 cargo) </spoiler> |- | UAZ-452 Cargo Van | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/UAZ452/UAZ452_cargo.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.65&nbsp;T * Horsepower: 71&nbsp;HP / 72&nbsp;PS * Max. theoretical speed: approx. 139.4&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 64.5/86&nbsp;L (75% fill, Petrol) * Estimated range: 800&nbsp;km in 5h45m * Idle/red/max RPM: 800/5000/6000&nbsp;RPM * Capacity: 2 persons (1 driver, 1 cargo) </spoiler> |- | Ural-4320 Transport Truck | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/Ural4320/Ural4320_transport.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 7.97&nbsp;T * Horsepower: 236&nbsp;HP / 239&nbsp;PS * Max. theoretical speed: approx. 88.1&nbsp;km/h * Automatic gearbox: 5 forward, 1 reverse gears * Fuel capacity: 270/360&nbsp;L (75% fill, Diesel) * Estimated range: 1060&nbsp;km in 12h00m * Idle/red/max RPM: 600/2600/4000&nbsp;RPM * Capacity: 15 persons (1 driver, 14 cargo) </spoiler> |- | Ural-4320 Transport Truck - Canopy | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/Ural4320/Ural4320_transport_covered.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 7.97&nbsp;T * Horsepower: 236&nbsp;HP / 239&nbsp;PS * Max. theoretical speed: approx. 88.1&nbsp;km/h * Automatic gearbox: 5 forward, 1 reverse gears * Fuel capacity: 270/360&nbsp;L (75% fill, Diesel) * Estimated range: 1060&nbsp;km in 12h00m * Idle/red/max RPM: 600/2600/4000&nbsp;RPM * Capacity: 15 persons (1 driver, 14 cargo) </spoiler> |- | Ural-4320 Fuel Truck | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/Ural4320/Ural4320_tanker.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 7.97&nbsp;T * Horsepower: 236&nbsp;HP / 239&nbsp;PS * Max. theoretical speed: approx. 88.1&nbsp;km/h * Automatic gearbox: 5 forward, 1 reverse gears * Fuel capacity: 270/360&nbsp;L (75% fill, Diesel) * Estimated range: 1060&nbsp;km in 12h00m * Idle/red/max RPM: 600/2600/4000&nbsp;RPM * Capacity: 3 persons (1 driver, 2 cargo) </spoiler> |- | Ural-4320 Command Truck | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/Ural4320/Ural4320_command.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 7.97&nbsp;T * Horsepower: 236&nbsp;HP / 239&nbsp;PS * Max. theoretical speed: approx. 88.1&nbsp;km/h * Automatic gearbox: 5 forward, 1 reverse gears * Fuel capacity: 270/360&nbsp;L (75% fill, Diesel) * Estimated range: 1060&nbsp;km in 12h00m * Idle/red/max RPM: 600/2600/4000&nbsp;RPM * Capacity: 3 persons (1 driver, 2 cargo) </spoiler> |- | Ural-4320 Arsenal Truck | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/Ural4320/Ural4320_Arsenal.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 7.97&nbsp;T * Horsepower: 236&nbsp;HP / 239&nbsp;PS * Max. theoretical speed: approx. 88.1&nbsp;km/h * Automatic gearbox: 5 forward, 1 reverse gears * Fuel capacity: 270/360&nbsp;L (75% fill, Diesel) * Estimated range: 1060&nbsp;km in 12h00m * Idle/red/max RPM: 600/2600/4000&nbsp;RPM * Capacity: 3 persons (1 driver, 2 cargo) </spoiler> |- | Ural-4320 Ammo Truck | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/Ural4320/Ural4320_ammo.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 7.97&nbsp;T * Horsepower: 236&nbsp;HP / 239&nbsp;PS * Max. theoretical speed: approx. 88.1&nbsp;km/h * Automatic gearbox: 5 forward, 1 reverse gears * Fuel capacity: 270/360&nbsp;L (75% fill, Diesel) * Estimated range: 1060&nbsp;km in 12h00m * Idle/red/max RPM: 600/2600/4000&nbsp;RPM * Capacity: 3 persons (1 driver, 2 cargo) </spoiler> |- | Ural-4320 Repair Truck | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/Ural4320/Ural4320_repair.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 7.97&nbsp;T * Horsepower: 236&nbsp;HP / 239&nbsp;PS * Max. theoretical speed: approx. 88.1&nbsp;km/h * Automatic gearbox: 5 forward, 1 reverse gears * Fuel capacity: 270/360&nbsp;L (75% fill, Diesel) * Estimated range: 1060&nbsp;km in 12h00m * Idle/red/max RPM: 600/2600/4000&nbsp;RPM * Capacity: 3 persons (1 driver, 2 cargo) </spoiler> |- | Ural-4320 Construction Truck | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/Ural4320/Ural4320_engineer.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 7.97&nbsp;T * Horsepower: 236&nbsp;HP / 239&nbsp;PS * Max. theoretical speed: approx. 88.1&nbsp;km/h * Automatic gearbox: 5 forward, 1 reverse gears * Fuel capacity: 270/360&nbsp;L (75% fill, Diesel) * Estimated range: 1060&nbsp;km in 12h00m * Idle/red/max RPM: 600/2600/4000&nbsp;RPM * Capacity: 3 persons (1 driver, 2 cargo) </spoiler> |- | BTR-70 Armored Personnel Carrier | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/BTR70/BTR70.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 11.50&nbsp;T * Horsepower: 240&nbsp;HP / 243&nbsp;PS * Max. theoretical speed: approx. 82.5&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 217.5/290&nbsp;L (75% fill, Petrol) * Estimated range: 360&nbsp;km in 4h15m * Idle/red/max RPM: 600/3650/5000&nbsp;RPM * Capacity: 10 persons (1 driver, 1 gunner, 1 commander, 7 cargo) * Turrets: 2&times; PKMT </spoiler> |- | BTR-70 Armored Personnel Carrier | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/Conflict_Variants/BTR70_Conflict.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 11.50&nbsp;T * Horsepower: 240&nbsp;HP / 243&nbsp;PS * Max. theoretical speed: approx. 82.5&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 217.5/290&nbsp;L (75% fill, Petrol) * Estimated range: 360&nbsp;km in 4h15m * Idle/red/max RPM: 600/3650/5000&nbsp;RPM * Capacity: 10 persons (1 driver, 1 gunner, 1 commander, 7 cargo) * Turrets: 2&times; PKMT </spoiler> |- | BRDM-2 Reconnaissance Vehicle | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/BRDM2/BRDM2.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 7.00&nbsp;T * Horsepower: 138&nbsp;HP / 140&nbsp;PS * Max. theoretical speed: approx. 101.9&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 217.5/290&nbsp;L (75% fill, Petrol) * Estimated range: 360&nbsp;km in 3h30m * Idle/red/max RPM: 600/3650/4000&nbsp;RPM * Capacity: 4 persons (1 driver, 1 gunner, 1 commander, 1 cargo) * Turrets: 2&times; PKMT </spoiler> |- | BRDM-2 Reconnaissance Vehicle | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/Conflict_Variants/BRDM2_Conflict.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 7.00&nbsp;T * Horsepower: 138&nbsp;HP / 140&nbsp;PS * Max. theoretical speed: approx. 101.9&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 217.5/290&nbsp;L (75% fill, Petrol) * Estimated range: 360&nbsp;km in 3h30m * Idle/red/max RPM: 600/3650/4000&nbsp;RPM * Capacity: 4 persons (1 driver, 1 gunner, 1 commander, 1 cargo) * Turrets: 2&times; PKMT </spoiler> |- | Mi-8MT Transport Helicopter | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et}} | style="font-size: smaller" | * Mass: 9.00&nbsp;T * Horsepower: 1101&nbsp;HP / 1116&nbsp;PS * Fuel capacity: 1938.75/2585&nbsp;L (75% fill, Kerosene) * Idle/max RPM: 15000/19500&nbsp;RPM * Capacity: 17 persons (2 pilots, 15 cargo) |- | Mi-8MT Armed Transport Helicopter | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_armed.et}} | style="font-size: smaller" | * Mass: 9.00&nbsp;T * Horsepower: 1101&nbsp;HP / 1116&nbsp;PS * Fuel capacity: 1938.75/2585&nbsp;L (75% fill, Kerosene) * Idle/max RPM: 15000/19500&nbsp;RPM * Capacity: 18 persons (2 pilots, 2 gunners, 14 cargo) * Turrets: 2&times; PKMT |- | Mi-8MT Helicopter Gunship – HE | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_armed_gunship_HE.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 9.00&nbsp;T * Horsepower: 1101&nbsp;HP / 1116&nbsp;PS * Fuel capacity: 1938.75/2585&nbsp;L (75% fill, Kerosene) * Idle/max RPM: 15000/19500&nbsp;RPM * Capacity: 19 persons (2 pilots, 3 gunners, 14 cargo) * Turrets: ** 2&times; PKMT ** 6&times; UB-16-57 UMP </spoiler> |- | Mi-8MT Helicopter Gunship – HEDP | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_armed_gunship_HEDP.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 9.00&nbsp;T * Horsepower: 1101&nbsp;HP / 1116&nbsp;PS * Fuel capacity: 1938.75/2585&nbsp;L (75% fill, Kerosene) * Idle/max RPM: 15000/19500&nbsp;RPM * Capacity: 19 persons (2 pilots, 3 gunners, 14 cargo) * Turrets: ** 2&times; PKMT ** 6&times; UB-16-57 UMP </spoiler> |}

=== Weapons Tripod ===

{| class="wikitable sortable valign-top" style="min-width: 60em" ! style="min-width: 25%" | Name ! Prefab ! class="unsortable" | Details |- | PKM - Tripod | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Tripods/Tripod_6T5_PKM.et}} | style="font-size: smaller" | * Mounted weapon: PKM * Angles: ** from -50 to 50° (100° horizontal range) ** from -14 to 25° (39° vertical range) |- | NSV - Tripod | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Tripods/6T7/Tripod_6T7_NSV.et}} | style="font-size: smaller" | * Mounted weapon: NSV * Angles: ** from -50 to 50° (100° horizontal range) ** from -20 to 25° (45° vertical range) |- | NSV - Tripod | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Tripods/6T7/Tripod_6T7_NSV_SPP.et}} | style="font-size: smaller" | * Mounted weapon: NSV * Angles: ** from -50 to 50° (100° horizontal range) ** from -20 to 25° (45° vertical range) |- | 2B14 - Mortar | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Mortars/2B14/Mortar_2B14.et}} | style="font-size: smaller" | * Angles: ** from -180 to 180° (360° horizontal range) ** from 45 to 85° (40° vertical range) |}

== FIA ==

=== Character ===

{| class="wikitable sortable valign-top" style="min-width: 60em" ! style="min-width: 25%" | Name ! Prefab ! class="unsortable" | Details |- | Random FIA Guerrilla | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/INDFOR/FIA/Character_FIA_Randomized.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Equipment: ** M70 Cap ** M70 Parka ** M70 Trousers ** Soviet Combat Boots {{!}} * Items: ** Adrianov Compass ** Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** R-148 Radio ** Sa-58 Bayonet ** Tourniquet {{!}}} </spoiler> |- | Rifleman | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/INDFOR/FIA/Character_FIA_Rifleman.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** Sa-58P * Equipment: ** Knit Cap - Black ** M70 Parka ** M70 Trousers ** Soviet Combat Boots {{!}} * Items: ** 6&times; 7.62×39mm 30rnd Sa-58 Mag ** Adrianov Compass ** Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** RDG-2 ** Sa-58 Bayonet ** Tourniquet {{!}}} </spoiler> |- | Platoon Leader | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/INDFOR/FIA/Character_FIA_PL.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** Sa-58V ** PM * Equipment: ** M70 Cap ** M70 Parka ** M70 Trousers ** Soviet Combat Boots {{!}} * Items: ** 4&times; 7.62×39mm 30rnd Sa-58 Mag ** 2&times; 9×18mm 8rnd PM Mag ** Adrianov Compass ** Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** RDG-2 ** Sa-58 Bayonet ** Tourniquet {{!}}} </spoiler> |- | Squad Leader | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/INDFOR/FIA/Character_FIA_SL.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** Sa-58V * Equipment: ** 6B2 Vest ** Leather Gloves ** M70 Cap ** Soviet Combat Boots ** TAZ 83 Blouse ** TAZ 83 Pants ** Type 56 Chest Rig {{!}} * Items: ** 2&times; 7.62×39mm 30rnd Sa-58 Mag ** 2&times; 7.62×39mm 30rnd Sa-58 Tracer Mag ** Adrianov Compass ** Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** RDG-2 ** Sa-58 Bayonet ** Tourniquet {{!}}} </spoiler> |- | Machine-Gunner | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/INDFOR/FIA/Character_FIA_MG.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** UK-59L ** PM * Equipment: ** Knit Cap - Black ** Leather Gloves ** M70 Backpack ** M70 Parka ** M70 Trousers ** Soviet Combat Boots {{!}} * Items: ** 3&times; 7.62×54mmR 50rnd UK-59 Belt ** 2&times; 9×18mm 8rnd PM Mag ** Adrianov Compass ** Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** R-148 Radio ** Sa-58 Bayonet ** Tourniquet {{!}}} </spoiler> |- | Machine-Gunner Assistant | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/INDFOR/FIA/Character_FIA_AMG.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** Sa-58P * Equipment: ** M70 Backpack ** M70 Cap ** M70 Parka ** M70 Trousers ** Soviet Combat Boots {{!}} * Items: ** 6&times; 7.62×39mm 30rnd Sa-58 Mag ** 6&times; 7.62×54mmR 50rnd UK-59 Belt ** Adrianov Compass ** Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** R-148 Radio ** RDG-2 ** Sa-58 Bayonet ** Tourniquet {{!}}} </spoiler> |- | Anti-Tank Specialist | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/INDFOR/FIA/Character_FIA_AT.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** Sa-58P ** RPG-7V1 * Equipment: ** 6B2 Vest ** M70 Cap ** RPG Specialist Backpack ** Soviet Combat Boots ** TAZ 83 Blouse ** TAZ 83 Pants ** Type 56 Chest Rig {{!}} * Items: ** 4&times; 7.62×39mm 30rnd Sa-58 Mag ** 2&times; 70mm HEAT PG-7VM Grenade ** Adrianov Compass ** Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** R-148 Radio ** RDG-2 ** Sa-58 Bayonet ** Tourniquet {{!}}} </spoiler> |- | Anti-Tank Specialist Assistant | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/INDFOR/FIA/Character_FIA_AAT.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** Sa-58P * Equipment: ** Knit Cap - Black ** M70 Parka ** M70 Trousers ** RPG Assistant Backpack ** Soviet Combat Boots {{!}} * Items: ** 6&times; 7.62×39mm 30rnd Sa-58 Mag ** 3&times; 70mm HEAT PG-7VM Grenade ** Adrianov Compass ** Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** R-148 Radio ** RDG-2 ** Sa-58 Bayonet ** Tourniquet {{!}}} </spoiler> |- | Sharpshooter | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/INDFOR/FIA/Character_FIA_Sharpshooter.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** SVD + PSO-1 Scope ** PM * Equipment: ** Leather Gloves ** M70 Cap ** M70 Parka ** M70 Trousers ** Soviet Combat Boots {{!}} * Items: ** 4&times; 7.62×54mmR 10rnd SVD Sniper Mag ** 2&times; 9×18mm 8rnd PM Mag ** Adrianov Compass ** Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** RDG-2 ** Sa-58 Bayonet ** Tourniquet {{!}}} </spoiler> |- | Medic | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/INDFOR/FIA/Character_FIA_Medic.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** Sa-58V * Equipment: ** M70 Cap ** Medical Bag ** Soviet Combat Boots ** TAZ 83 Blouse ** TAZ 83 Pants ** Type 56 Chest Rig {{!}} * Items: ** 4&times; 7.62×39mm 30rnd Sa-58 Mag ** Adrianov Compass ** 5&times; Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** 5&times; Morphine Injector ** R-148 Radio ** Sa-58 Bayonet ** 4&times; Saline Solution ** 5&times; Tourniquet {{!}}} </spoiler> |- | Combat Signaler | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/INDFOR/FIA/Character_FIA_RTO.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** Sa-58P * Equipment: ** Knit Cap - Black ** RF-10 Radio ** Soviet Combat Boots ** TAZ 83 Blouse ** TAZ 83 Pants ** Type 56 Chest Rig {{!}} * Items: ** 4&times; 7.62×39mm 30rnd Sa-58 Mag ** Adrianov Compass ** Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** R-148 Radio ** RDG-2 ** Sa-58 Bayonet ** Tourniquet {{!}}} </spoiler> |- | Crewman | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/INDFOR/FIA/Character_FIA_Crew.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** Sa-58V * Equipment: ** Soviet Combat Boots ** TAZ 83 Blouse ** TAZ 83 Pants ** TSh-4 Helmet - Unbuttoned ** Type 56 Chest Rig {{!}} * Items: ** 4&times; 7.62×39mm 30rnd Sa-58 Mag ** Adrianov Compass ** Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** R-148 Radio ** RDG-2 ** Sa-58 Bayonet ** Tourniquet {{!}}} </spoiler> |- | Crew Commander | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/INDFOR/FIA/Character_FIA_CC.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** Sa-58V * Equipment: ** Soviet Combat Boots ** TAZ 83 Blouse ** TAZ 83 Pants ** TSh-4 Helmet - Unbuttoned ** Type 56 Chest Rig {{!}} * Items: ** 4&times; 7.62×39mm 30rnd Sa-58 Mag ** Adrianov Compass ** Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** R-148 Radio ** RDG-2 ** Sa-58 Bayonet ** Tourniquet {{!}}} </spoiler> |- | Scout | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/INDFOR/FIA/Character_FIA_Scout.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** Sa-58V * Equipment: ** Knit Cap - Brown ** Leather Gloves ** M70 Parka ** M70 Trousers ** Soviet Combat Boots {{!}} * Items: ** 6&times; 7.62×39mm 30rnd Sa-58 Mag ** Adrianov Compass ** Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** Morphine Injector ** R-148 Radio ** RDG-2 ** Sa-58 Bayonet ** Tourniquet {{!}}} </spoiler> |- | Sapper | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/INDFOR/FIA/Character_FIA_Sapper.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** Sa-58P * Equipment: ** M70 Backpack ** M70 Cap ** Soviet Combat Boots ** TAZ 83 Blouse ** TAZ 83 Pants ** Type 56 Chest Rig {{!}} * Items: ** 5&times; 400g TNT Demolition Block ** 4&times; 7.62×39mm 30rnd Sa-58 Mag ** Adrianov Compass ** Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** R-148 Radio ** RDG-2 ** Repair Tool ** Sa-58 Bayonet ** Tourniquet {{!}}} </spoiler> |- | Ammunition Bearer | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/INDFOR/FIA/Character_FIA_Ammo.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** Sa-58P * Equipment: ** Knit Cap - Black ** M70 Backpack ** M70 Parka ** M70 Trousers ** Soviet Combat Boots {{!}} * Items: ** ** 26&times; 7.62×39mm 30rnd Sa-58 Mag ** Adrianov Compass ** Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** R-148 Radio ** 5&times; RDG-2 ** 4&times; RGD-5 ** Sa-58 Bayonet ** Tourniquet {{!}}} </spoiler> |- | Unarmed | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/INDFOR/FIA/Character_FIA_Unarmed.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Equipment: ** M70 Cap ** M70 Parka ** M70 Trousers ** Soviet Combat Boots {{!}} * Items: ** Adrianov Compass ** Bandage ** Flashlight ** MPL-50 Entrenching Tool ** Map (Soviet) ** R-148 Radio ** Sa-58 Bayonet ** Tourniquet {{!}}} </spoiler> |- | Guerrilla | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/INDFOR/FIA/Character_FIA_AC.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** PM * Equipment: ** Flat Cap - Dark Gray ** M70 Trousers ** Shoulder Bag ** Soviet Combat Boots ** Turtleneck - Gray {{!}} * Items: ** 6&times; 9×18mm 8rnd PM Mag ** Adrianov Compass ** Bandage ** Flashlight ** Map (Soviet) ** R-148 Radio ** Tourniquet {{!}}} </spoiler> |- | Guerrilla - Grenadier | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/INDFOR/FIA/Character_FIA_AC_Grenadier.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** PM * Equipment: ** Beret - Black ** Leather Shoulder Bag ** Pants - Dark Gray ** Soviet Combat Boots ** Turtleneck - Blue {{!}} * Items: ** 4&times; 9×18mm 8rnd PM Mag ** Adrianov Compass ** Bandage ** Flashlight ** Map (Soviet) ** R-148 Radio ** RGD-5 ** Tourniquet {{!}}} </spoiler> |- | Guerrilla - Medic | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/INDFOR/FIA/Character_FIA_AC_Medic.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** PM * Equipment: ** Beret - Brown ** M70 Trousers ** Medical Bag ** Soviet Combat Boots ** Turtleneck - Beige {{!}} * Items: ** 2&times; 9×18mm 8rnd PM Mag ** Adrianov Compass ** 7&times; Bandage ** Flashlight ** Map (Soviet) ** 2&times; Morphine Injector ** R-148 Radio ** 3&times; Tourniquet {{!}}} </spoiler> |- | Guerrilla - Spotter | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/INDFOR/FIA/Character_FIA_AC_Scout.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Weapons: ** PM * Equipment: ** Flat Cap - Blue ** Jean Jacket ** Kolobok Backpack ** Pants - Dark Gray ** Soviet Combat Boots {{!}} * Items: ** 2&times; 9×18mm 8rnd PM Mag ** Adrianov Compass ** Bandage ** Flashlight ** Map (Soviet) ** R-148 Radio ** Tourniquet {{!}}} </spoiler> |}

=== Group ===

{| class="wikitable sortable valign-top" style="min-width: 60em" ! style="min-width: 25%" | Name ! Prefab ! class="unsortable" | Details |- | Rifle Squad | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/INDFOR/Group_FIA_RifleSquad.et}} | style="font-size: smaller" | * Anti-Tank Specialist * Machine-Gunner * Machine-Gunner Assistant * 3&times; Rifleman * Squad Leader |- | Fire Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/INDFOR/Group_FIA_FireTeam.et}} | style="font-size: smaller" | * Anti-Tank Specialist * 3&times; Rifleman * Squad Leader |- | Light Fire Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/INDFOR/Group_FIA_LightFireTeam.et}} | style="font-size: smaller" | * 4&times; Rifleman |- | Anti-Tank Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/INDFOR/Group_FIA_Team_AT.et}} | style="font-size: smaller" | * 2&times; Anti-Tank Specialist * Anti-Tank Specialist Assistant * Rifleman |- | Machine Gun Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/INDFOR/Group_FIA_MachineGunTeam.et}} | style="font-size: smaller" | * Machine-Gunner * Machine-Gunner Assistant |- | Patrol Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/INDFOR/Group_FIA_SentryTeam.et}} | style="font-size: smaller" | * 2&times; Rifleman |- | Recon Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/INDFOR/Group_FIA_ReconTeam.et}} | style="font-size: smaller" | * Combat Signaler * Scout |- | Sharpshooter Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/INDFOR/Group_FIA_SharpshooterTeam.et}} | style="font-size: smaller" | * Scout * Sharpshooter |- | Platoon HQ | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/INDFOR/Group_FIA_PlatoonHQ.et}} | style="font-size: smaller" | * Combat Signaler * Medic * Platoon Leader |- | Medical Support Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/INDFOR/Group_FIA_MedicalSection.et}} | style="font-size: smaller" | * 2&times; Medic |- | Ammunition Supply Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/INDFOR/Group_FIA_AmmoTeam.et}} | style="font-size: smaller" | * 2&times; Ammunition Bearer * Anti-Tank Specialist Assistant * Machine-Gunner Assistant |- | Sapper Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/INDFOR/Group_FIA_SapperTeam.et}} | style="font-size: smaller" | * 2&times; Sapper |- | Fire Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/INDFOR/AmbientPatrols/Group_FIA_FireTeam_NotSpawned.et}} | style="font-size: smaller" | * Anti-Tank Specialist * 3&times; Rifleman * Squad Leader |- | Machine Gun Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/INDFOR/AmbientPatrols/Group_FIA_MachineGunTeam_NotSpawned.et}} | style="font-size: smaller" | * Machine-Gunner * Machine-Gunner Assistant |- | Recon Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/INDFOR/AmbientPatrols/Group_FIA_ReconTeam_NotSpawned.et}} | style="font-size: smaller" | * Combat Signaler * Scout |- | Rifle Squad | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/INDFOR/AmbientPatrols/Group_FIA_RifleSquad_NotSpawned.et}} | style="font-size: smaller" | * Anti-Tank Specialist * Machine-Gunner * Machine-Gunner Assistant * 3&times; Rifleman * Squad Leader |- | Anti-Tank Team | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/INDFOR/AmbientPatrols/Group_FIA_Team_AT_NotSpawned.et}} | style="font-size: smaller" | * 2&times; Anti-Tank Specialist * Anti-Tank Specialist Assistant * Rifleman |}

=== Vehicle ===

{| class="wikitable sortable valign-top" style="min-width: 60em" ! style="min-width: 25%" | Name ! Prefab ! class="unsortable" | Details |- | UAZ-469 Off-road - Open Top | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/UAZ469/UAZ469_FIA_uncovered.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.65&nbsp;T * Horsepower: 71&nbsp;HP / 72&nbsp;PS * Max. theoretical speed: approx. 133.1&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 58.5/78&nbsp;L (75% fill, Petrol) * Estimated range: 460&nbsp;km in 3h30m * Idle/red/max RPM: 800/5000/6000&nbsp;RPM * Capacity: 5 persons (1 driver, 4 cargo) </spoiler> |- | UAZ-469 Off-road | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/UAZ469/UAZ469_FIA.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.65&nbsp;T * Horsepower: 71&nbsp;HP / 72&nbsp;PS * Max. theoretical speed: approx. 133.1&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 58.5/78&nbsp;L (75% fill, Petrol) * Estimated range: 460&nbsp;km in 3h30m * Idle/red/max RPM: 800/5000/6000&nbsp;RPM * Capacity: 5 persons (1 driver, 4 cargo) </spoiler> |- | UAZ-469 Off-road - PKM | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/UAZ469/UAZ469_PKM_FIA.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.65&nbsp;T * Horsepower: 71&nbsp;HP / 72&nbsp;PS * Max. theoretical speed: approx. 133.1&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 58.5/78&nbsp;L (75% fill, Petrol) * Estimated range: 460&nbsp;km in 3h30m * Idle/red/max RPM: 800/5000/6000&nbsp;RPM * Capacity: 3 persons (1 driver, 1 gunner, 1 cargo) * Turret: PKM </spoiler> |- | UAZ-469 Off-road - UK-59 | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/UAZ469/UAZ469_UK59_FIA.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.65&nbsp;T * Horsepower: 71&nbsp;HP / 72&nbsp;PS * Max. theoretical speed: approx. 133.1&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 58.5/78&nbsp;L (75% fill, Petrol) * Estimated range: 460&nbsp;km in 3h30m * Idle/red/max RPM: 800/5000/6000&nbsp;RPM * Capacity: 3 persons (1 driver, 1 gunner, 1 cargo) * Turret: UK-59L </spoiler> |- | Ural-4320 Transport Truck | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/Ural4320/Ural4320_FIA_transport.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 7.97&nbsp;T * Horsepower: 236&nbsp;HP / 239&nbsp;PS * Max. theoretical speed: approx. 88.1&nbsp;km/h * Automatic gearbox: 5 forward, 1 reverse gears * Fuel capacity: 270/360&nbsp;L (75% fill, Diesel) * Estimated range: 1060&nbsp;km in 12h00m * Idle/red/max RPM: 600/2600/4000&nbsp;RPM * Capacity: 15 persons (1 driver, 14 cargo) </spoiler> |- | Ural-4320 Transport Truck - Canopy | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/Ural4320/Ural4320_FIA_transport_covered.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 7.97&nbsp;T * Horsepower: 236&nbsp;HP / 239&nbsp;PS * Max. theoretical speed: approx. 88.1&nbsp;km/h * Automatic gearbox: 5 forward, 1 reverse gears * Fuel capacity: 270/360&nbsp;L (75% fill, Diesel) * Estimated range: 1060&nbsp;km in 12h00m * Idle/red/max RPM: 600/2600/4000&nbsp;RPM * Capacity: 15 persons (1 driver, 14 cargo) </spoiler> |- | Ural-4320 Fuel Truck | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/Ural4320/Ural4320_FIA_tanker.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 7.97&nbsp;T * Horsepower: 236&nbsp;HP / 239&nbsp;PS * Max. theoretical speed: approx. 88.1&nbsp;km/h * Automatic gearbox: 5 forward, 1 reverse gears * Fuel capacity: 270/360&nbsp;L (75% fill, Diesel) * Estimated range: 1060&nbsp;km in 12h00m * Idle/red/max RPM: 600/2600/4000&nbsp;RPM * Capacity: 3 persons (1 driver, 2 cargo) </spoiler> |- | Ural-4320 Command Truck | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/Ural4320/Ural4320_FIA_command.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 7.97&nbsp;T * Horsepower: 236&nbsp;HP / 239&nbsp;PS * Max. theoretical speed: approx. 88.1&nbsp;km/h * Automatic gearbox: 5 forward, 1 reverse gears * Fuel capacity: 270/360&nbsp;L (75% fill, Diesel) * Estimated range: 1060&nbsp;km in 12h00m * Idle/red/max RPM: 600/2600/4000&nbsp;RPM * Capacity: 3 persons (1 driver, 2 cargo) </spoiler> |- | Ural-4320 Arsenal Truck | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/Ural4320/Ural4320_Arsenal_FIA.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 7.97&nbsp;T * Horsepower: 236&nbsp;HP / 239&nbsp;PS * Max. theoretical speed: approx. 88.1&nbsp;km/h * Automatic gearbox: 5 forward, 1 reverse gears * Fuel capacity: 270/360&nbsp;L (75% fill, Diesel) * Estimated range: 1060&nbsp;km in 12h00m * Idle/red/max RPM: 600/2600/4000&nbsp;RPM * Capacity: 3 persons (1 driver, 2 cargo) </spoiler> |- | Ural-4320 Ammo Truck | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/Ural4320/Ural4320_ammo_FIA.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 7.97&nbsp;T * Horsepower: 236&nbsp;HP / 239&nbsp;PS * Max. theoretical speed: approx. 88.1&nbsp;km/h * Automatic gearbox: 5 forward, 1 reverse gears * Fuel capacity: 270/360&nbsp;L (75% fill, Diesel) * Estimated range: 1060&nbsp;km in 12h00m * Idle/red/max RPM: 600/2600/4000&nbsp;RPM * Capacity: 3 persons (1 driver, 2 cargo) </spoiler> |- | Ural-4320 Repair Truck | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/Ural4320/Ural4320_repair_FIA.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 7.97&nbsp;T * Horsepower: 236&nbsp;HP / 239&nbsp;PS * Max. theoretical speed: approx. 88.1&nbsp;km/h * Automatic gearbox: 5 forward, 1 reverse gears * Fuel capacity: 270/360&nbsp;L (75% fill, Diesel) * Estimated range: 1060&nbsp;km in 12h00m * Idle/red/max RPM: 600/2600/4000&nbsp;RPM * Capacity: 3 persons (1 driver, 2 cargo) </spoiler> |- | Ural-4320 Construction Truck | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/Ural4320/Ural4320_engineer_FIA.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 7.97&nbsp;T * Horsepower: 236&nbsp;HP / 239&nbsp;PS * Max. theoretical speed: approx. 88.1&nbsp;km/h * Automatic gearbox: 5 forward, 1 reverse gears * Fuel capacity: 270/360&nbsp;L (75% fill, Diesel) * Estimated range: 1060&nbsp;km in 12h00m * Idle/red/max RPM: 600/2600/4000&nbsp;RPM * Capacity: 3 persons (1 driver, 2 cargo) </spoiler> |- | BTR-70 Armored Personnel Carrier | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/BTR70/BTR70_FIA.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 11.50&nbsp;T * Horsepower: 240&nbsp;HP / 243&nbsp;PS * Max. theoretical speed: approx. 82.5&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 217.5/290&nbsp;L (75% fill, Petrol) * Estimated range: 360&nbsp;km in 4h15m * Idle/red/max RPM: 600/3650/5000&nbsp;RPM * Capacity: 11 persons (1 driver, 1 gunner, 1 commander, 8 cargo) * Turrets: 2&times; PKMT </spoiler> |- | BRDM-2 Reconnaissance Vehicle | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/BRDM2/BRDM2_FIA.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 7.00&nbsp;T * Horsepower: 138&nbsp;HP / 140&nbsp;PS * Max. theoretical speed: approx. 101.9&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 217.5/290&nbsp;L (75% fill, Petrol) * Estimated range: 360&nbsp;km in 3h30m * Idle/red/max RPM: 600/3650/4000&nbsp;RPM * Capacity: 4 persons (1 driver, 1 gunner, 1 commander, 1 cargo) * Turrets: 2&times; PKMT </spoiler> |- | UAZ-452A Ambulance | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/UAZ452/UAZ452_ambulance_FIA.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.65&nbsp;T * Horsepower: 71&nbsp;HP / 72&nbsp;PS * Max. theoretical speed: approx. 139.4&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 64.5/86&nbsp;L (75% fill, Petrol) * Estimated range: 800&nbsp;km in 5h45m * Idle/red/max RPM: 800/5000/6000&nbsp;RPM * Capacity: 5 persons (1 driver, 4 cargo) </spoiler> |- | UAZ-452 Cargo Van | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/UAZ452/UAZ452_cargo_FIA.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.65&nbsp;T * Horsepower: 71&nbsp;HP / 72&nbsp;PS * Max. theoretical speed: approx. 139.4&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 64.5/86&nbsp;L (75% fill, Petrol) * Estimated range: 800&nbsp;km in 5h45m * Idle/red/max RPM: 800/5000/6000&nbsp;RPM * Capacity: 2 persons (1 driver, 1 cargo) </spoiler> |- | UAZ-452 Transport Van | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/UAZ452/UAZ452_transport_FIA.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.65&nbsp;T * Horsepower: 71&nbsp;HP / 72&nbsp;PS * Max. theoretical speed: approx. 139.4&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 64.5/86&nbsp;L (75% fill, Petrol) * Estimated range: 800&nbsp;km in 5h45m * Idle/red/max RPM: 800/5000/6000&nbsp;RPM * Capacity: 8 persons (1 driver, 7 cargo) </spoiler> |}

=== Weapons Tripod ===

{| class="wikitable sortable valign-top" style="min-width: 60em" ! style="min-width: 25%" | Name ! Prefab ! class="unsortable" | Details |- | PKM - Tripod | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Tripods/Tripod_6T5_PKM.et}} | style="font-size: smaller" | * Mounted weapon: PKM * Angles: ** from -50 to 50° (100° horizontal range) ** from -14 to 25° (39° vertical range) |}

== CIV ==

=== Character ===

{| class="wikitable sortable valign-top" style="min-width: 60em" ! style="min-width: 25%" | Name ! Prefab ! class="unsortable" | Details |- | Random Civilian | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/CIV/GenericCivilians/Character_CIV_Randomized.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Equipment: ** Cotton Shirt ** Pants - Light Brown ** Soviet Combat Boots {{!}} * Items: ** Map (Soviet) {{!}}} </spoiler> |- | Random Businessman | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/CIV/Businessman/Character_CIV_Businessman_Randomized.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Equipment: ** Soviet Combat Boots ** Suit - Gray Jacket ** Suit - Gray Pants {{!}} * Items: ** Map (Soviet) {{!}}} </spoiler> |- | Random Dockworker | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/CIV/Dockworker/Character_CIV_Dockworker_Randomized.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Equipment: ** Fisherman's Pants - Yellow ** Knit Cap - Black ** Raincoat - Yellow ** Soviet Combat Boots {{!}} * Items: ** Map (Soviet) {{!}}} </spoiler> |- | Random Construction Worker | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/CIV/ConstructionWorker/Character_CIV_ConstructionWorker_Randomized.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Equipment: ** Cotton Shirt ** Hard Hat - Yellow ** Pants - Dark Gray ** Soviet Combat Boots {{!}} * Items: ** Map (Soviet) ** Repair Tool {{!}}} </spoiler> |- | Civilian | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/CIV/GenericCivilians/Character_CIV_DenimJacket_1.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Equipment: ** Cap - Everon ** Jean Jacket ** Pants - Dark Gray ** Soviet Combat Boots {{!}} * Items: ** Map (Soviet) {{!}}} </spoiler> |- | Civilian | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/CIV/GenericCivilians/Character_CIV_DenimJacket_2.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Equipment: ** Jean Jacket ** Pants - Dark Brown ** Soviet Combat Boots {{!}} * Items: ** Map (Soviet) {{!}}} </spoiler> |- | Civilian | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/CIV/GenericCivilians/Character_CIV_Turtleneck_1.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Equipment: ** Flat Cap - Dark Gray ** Leather Shoulder Bag ** Pants - Dark Brown ** Soviet Combat Boots ** Turtleneck - Gray {{!}} * Items: ** Map (Soviet) {{!}}} </spoiler> |- | Civilian | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/CIV/GenericCivilians/Character_CIV_Turtleneck_2.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Equipment: ** Beret - Brown ** Pants - Dark Brown ** Soviet Combat Boots ** Turtleneck - Beige {{!}} * Items: ** Map (Soviet) {{!}}} </spoiler> |- | Civilian | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/CIV/GenericCivilians/Character_CIV_Turtleneck_3.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Equipment: ** Pants - Dark Gray ** Soviet Combat Boots ** Turtleneck - Blue {{!}} * Items: ** Map (Soviet) {{!}}} </spoiler> |- | Civilian | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/CIV/GenericCivilians/Character_CIV_CottonShirt_1.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Equipment: ** Cotton Shirt ** Pants - Light Brown ** Soviet Combat Boots {{!}} * Items: ** Map (Soviet) {{!}}} </spoiler> |- | Civilian | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/CIV/GenericCivilians/Character_CIV_CottonShirt_2.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Equipment: ** Cotton Shirt ** Pants - Dark Gray ** Soviet Combat Boots {{!}} * Items: ** Map (Soviet) {{!}}} </spoiler> |- | Civilian | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/CIV/GenericCivilians/Character_CIV_CottonShirt_3.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Equipment: ** Cotton Shirt ** Flat Cap - Light Gray ** Pants - Dark Brown ** Soviet Combat Boots {{!}} * Items: ** Map (Soviet) {{!}}} </spoiler> |- | Civilian | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/CIV/GenericCivilians/Character_CIV_CottonShirt_4.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Equipment: ** Cotton Shirt ** Pants - Light Brown ** Soviet Combat Boots {{!}} * Items: ** Map (Soviet) {{!}}} </spoiler> |- | Civilian | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/CIV/GenericCivilians/Character_CIV_CottonShirt_5.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Equipment: ** Cotton Shirt ** Pants - Dark Gray ** Soviet Combat Boots {{!}} * Items: ** Map (Soviet) {{!}}} </spoiler> |- | Civilian | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/CIV/GenericCivilians/Character_CIV_CottonShirt_6.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Equipment: ** Beret - Black ** Cotton Shirt ** Leather Shoulder Bag ** Pants - Dark Gray ** Soviet Combat Boots {{!}} * Items: ** Map (Soviet) {{!}}} </spoiler> |- | Businessman | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/CIV/Businessman/Character_CIV_Businessman_1.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Equipment: ** Soviet Combat Boots ** Suit - Gray Jacket ** Suit - Gray Pants {{!}} * Items: ** Map (Soviet) {{!}}} </spoiler> |- | Businessman | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/CIV/Businessman/Character_CIV_Businessman_2.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Equipment: ** Soviet Combat Boots ** Suit - Brown Jacket ** Suit - Brown Pants {{!}} * Items: ** Map (Soviet) {{!}}} </spoiler> |- | Businessman | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/CIV/Businessman/Character_CIV_Businessman_3.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Equipment: ** Soviet Combat Boots ** Suit - Black Jacket ** Suit - Black Pants {{!}} * Items: ** Map (Soviet) {{!}}} </spoiler> |- | Dockworker | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/CIV/Dockworker/Character_CIV_Dockworker_1.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Equipment: ** Fisherman's Pants - Green ** Knit Cap - Red ** Raincoat - Orange ** Soviet Combat Boots {{!}} * Items: ** Map (Soviet) {{!}}} </spoiler> |- | Dockworker | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/CIV/Dockworker/Character_CIV_Dockworker_2.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Equipment: ** Fisherman's Pants - Yellow ** Knit Cap - Black ** Raincoat - Yellow ** Soviet Combat Boots {{!}} * Items: ** Map (Soviet) {{!}}} </spoiler> |- | Dockworker | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/CIV/Dockworker/Character_CIV_Dockworker_3.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Equipment: ** Fisherman's Pants - Orange ** Knit Cap - Brown ** Raincoat - Green ** Soviet Combat Boots {{!}} * Items: ** Map (Soviet) {{!}}} </spoiler> |- | Dockworker | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/CIV/Dockworker/Character_CIV_Dockworker_4.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Equipment: ** Fisherman's Pants - Green ** Raincoat - Orange ** Soviet Combat Boots {{!}} * Items: ** Map (Soviet) {{!}}} </spoiler> |- | Dockworker | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/CIV/Dockworker/Character_CIV_Dockworker_5.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Equipment: ** Fisherman's Pants - Yellow ** Raincoat - Yellow ** Soviet Combat Boots {{!}} * Items: ** Map (Soviet) {{!}}} </spoiler> |- | Dockworker | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/CIV/Dockworker/Character_CIV_Dockworker_6.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Equipment: ** Fisherman's Pants - Orange ** Raincoat - Green ** Soviet Combat Boots {{!}} * Items: ** Map (Soviet) {{!}}} </spoiler> |- | Construction Worker | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/CIV/ConstructionWorker/Character_CIV_ConstructionWorker_1.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Equipment: ** Cotton Shirt ** Hard Hat - Yellow ** Pants - Dark Gray ** Soviet Combat Boots {{!}} * Items: ** Map (Soviet) ** Repair Tool {{!}}} </spoiler> |- | Construction Worker | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/CIV/ConstructionWorker/Character_CIV_ConstructionWorker_2.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Equipment: ** Cotton Shirt ** Hard Hat - Blue ** Pants - Dark Gray ** Soviet Combat Boots {{!}} * Items: ** Map (Soviet) ** Repair Tool {{!}}} </spoiler> |- | Construction Worker | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/CIV/ConstructionWorker/Character_CIV_ConstructionWorker_3.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Equipment: ** Cotton Shirt ** Hard Hat - Yellow ** Pants - Dark Gray ** Soviet Combat Boots {{!}} * Items: ** Map (Soviet) ** Repair Tool {{!}}} </spoiler> |- | Construction Worker | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/CIV/ConstructionWorker/Character_CIV_ConstructionWorker_4.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Equipment: ** Cotton Shirt ** Hard Hat - Green ** Pants - Dark Brown ** Soviet Combat Boots {{!}} * Items: ** Map (Soviet) ** Repair Tool {{!}}} </spoiler> |- | Construction Worker | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Factions/CIV/ConstructionWorker/Character_CIV_ConstructionWorker_5.et}} | style="font-size: smaller" | <spoiler text="Show details">{{{!}} {{!}} * Equipment: ** Cotton Shirt ** Hard Hat - White ** Pants - Dark Brown ** Soviet Combat Boots {{!}} * Items: ** Map (Soviet) ** Repair Tool {{!}}} </spoiler> |}

=== Vehicle ===

{| class="wikitable sortable valign-top" style="min-width: 60em" ! style="min-width: 25%" | Name ! Prefab ! class="unsortable" | Details |- | Random UAZ-469 Off-road | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/UAZ469/UAZ469_covered_CIV_Randomized.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.65&nbsp;T * Horsepower: 71&nbsp;HP / 72&nbsp;PS * Max. theoretical speed: approx. 133.1&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 58.5/78&nbsp;L (75% fill, Petrol) * Estimated range: 460&nbsp;km in 3h30m * Idle/red/max RPM: 800/5000/6000&nbsp;RPM * Capacity: 5 persons (1 driver, 4 cargo) </spoiler> |- | Random UAZ-469 Off-road - Open Top | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/UAZ469/UAZ469_uncovered_CIV_Randomized.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.65&nbsp;T * Horsepower: 71&nbsp;HP / 72&nbsp;PS * Max. theoretical speed: approx. 133.1&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 58.5/78&nbsp;L (75% fill, Petrol) * Estimated range: 460&nbsp;km in 3h30m * Idle/red/max RPM: 800/5000/6000&nbsp;RPM * Capacity: 5 persons (1 driver, 4 cargo) </spoiler> |- | Random Civilian Ural-4320 Transport Truck | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/Ural4320/Ural4320_transport_CIV_randomized.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 7.97&nbsp;T * Horsepower: 236&nbsp;HP / 239&nbsp;PS * Max. theoretical speed: approx. 88.1&nbsp;km/h * Automatic gearbox: 5 forward, 1 reverse gears * Fuel capacity: 270/360&nbsp;L (75% fill, Diesel) * Estimated range: 1060&nbsp;km in 12h00m * Idle/red/max RPM: 600/2600/4000&nbsp;RPM * Capacity: 15 persons (1 driver, 14 cargo) </spoiler> |- | Random Civilian Ural-4320 Fuel Truck | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/Ural4320/Ural4320_tanker_CIV_ranomized.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 7.97&nbsp;T * Horsepower: 236&nbsp;HP / 239&nbsp;PS * Max. theoretical speed: approx. 88.1&nbsp;km/h * Automatic gearbox: 5 forward, 1 reverse gears * Fuel capacity: 270/360&nbsp;L (75% fill, Diesel) * Estimated range: 1060&nbsp;km in 12h00m * Idle/red/max RPM: 600/2600/4000&nbsp;RPM * Capacity: 3 persons (1 driver, 2 cargo) </spoiler> |- | Random S1203 Minibus | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/S1203/S1203_transport_randomized.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.21&nbsp;T * Horsepower: 50&nbsp;HP / 51&nbsp;PS * Max. theoretical speed: approx. 109.1&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 30/40&nbsp;L (75% fill, Petrol) * Estimated range: 410&nbsp;km in 3h45m * Idle/red/max RPM: 650/5000/6000&nbsp;RPM * Capacity: 8 persons (1 driver, 7 cargo) </spoiler> |- | Random S1203 Cargo | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/S1203/S1203_cargo_randomized.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.21&nbsp;T * Horsepower: 50&nbsp;HP / 51&nbsp;PS * Max. theoretical speed: approx. 109.1&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 30/40&nbsp;L (75% fill, Petrol) * Estimated range: 410&nbsp;km in 3h45m * Idle/red/max RPM: 650/5000/6000&nbsp;RPM * Capacity: 2 persons (1 driver, 1 cargo) </spoiler> |- | Random S105 Car | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/S105/S105_randomized.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 875.00&nbsp;kg * Horsepower: 44&nbsp;HP / 45&nbsp;PS * Max. theoretical speed: approx. 151.2&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 28.5/38&nbsp;L (75% fill, Petrol) * Estimated range: 1300&nbsp;km in 8h45m * Idle/red/max RPM: 800/5800/8000&nbsp;RPM * Capacity: 4 persons (1 driver, 3 cargo) </spoiler> |- | Random UAZ-452 Transport Van | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/UAZ452/UAZ452_transport_CIV_randomized.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.65&nbsp;T * Horsepower: 71&nbsp;HP / 72&nbsp;PS * Max. theoretical speed: approx. 139.4&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 64.5/86&nbsp;L (75% fill, Petrol) * Estimated range: 800&nbsp;km in 5h45m * Idle/red/max RPM: 800/5000/6000&nbsp;RPM * Capacity: 8 persons (1 driver, 7 cargo) </spoiler> |- | Random UAZ-452 Cargo Van | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/UAZ452/UAZ452_cargo_CIV_randomized.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.65&nbsp;T * Horsepower: 71&nbsp;HP / 72&nbsp;PS * Max. theoretical speed: approx. 139.4&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 64.5/86&nbsp;L (75% fill, Petrol) * Estimated range: 800&nbsp;km in 5h45m * Idle/red/max RPM: 800/5000/6000&nbsp;RPM * Capacity: 2 persons (1 driver, 1 cargo) </spoiler> |- | UAZ-469 Off-road | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/UAZ469/UAZ469_covered_CIV_blue.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.65&nbsp;T * Horsepower: 71&nbsp;HP / 72&nbsp;PS * Max. theoretical speed: approx. 133.1&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 58.5/78&nbsp;L (75% fill, Petrol) * Estimated range: 460&nbsp;km in 3h30m * Idle/red/max RPM: 800/5000/6000&nbsp;RPM * Capacity: 5 persons (1 driver, 4 cargo) </spoiler> |- | UAZ-469 Off-road | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/UAZ469/UAZ469_covered_CIV_brown.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.65&nbsp;T * Horsepower: 71&nbsp;HP / 72&nbsp;PS * Max. theoretical speed: approx. 133.1&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 58.5/78&nbsp;L (75% fill, Petrol) * Estimated range: 460&nbsp;km in 3h30m * Idle/red/max RPM: 800/5000/6000&nbsp;RPM * Capacity: 5 persons (1 driver, 4 cargo) </spoiler> |- | UAZ-469 Off-road - Forestry | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/UAZ469/UAZ469_covered_CIV_forest.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.65&nbsp;T * Horsepower: 71&nbsp;HP / 72&nbsp;PS * Max. theoretical speed: approx. 133.1&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 58.5/78&nbsp;L (75% fill, Petrol) * Estimated range: 460&nbsp;km in 3h30m * Idle/red/max RPM: 800/5000/6000&nbsp;RPM * Capacity: 5 persons (1 driver, 4 cargo) </spoiler> |- | UAZ-469 Off-road - Farm | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/UAZ469/UAZ469_covered_CIV_JZD.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.65&nbsp;T * Horsepower: 71&nbsp;HP / 72&nbsp;PS * Max. theoretical speed: approx. 133.1&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 58.5/78&nbsp;L (75% fill, Petrol) * Estimated range: 460&nbsp;km in 3h30m * Idle/red/max RPM: 800/5000/6000&nbsp;RPM * Capacity: 5 persons (1 driver, 4 cargo) </spoiler> |- | UAZ-469 Off-road - Maintenance | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/UAZ469/UAZ469_covered_CIV_PTS.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.65&nbsp;T * Horsepower: 71&nbsp;HP / 72&nbsp;PS * Max. theoretical speed: approx. 133.1&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 58.5/78&nbsp;L (75% fill, Petrol) * Estimated range: 460&nbsp;km in 3h30m * Idle/red/max RPM: 800/5000/6000&nbsp;RPM * Capacity: 5 persons (1 driver, 4 cargo) </spoiler> |- | UAZ-469 Off-road | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/UAZ469/UAZ469_covered_CIV_red.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.65&nbsp;T * Horsepower: 71&nbsp;HP / 72&nbsp;PS * Max. theoretical speed: approx. 133.1&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 58.5/78&nbsp;L (75% fill, Petrol) * Estimated range: 460&nbsp;km in 3h30m * Idle/red/max RPM: 800/5000/6000&nbsp;RPM * Capacity: 5 persons (1 driver, 4 cargo) </spoiler> |- | UAZ-469 Off-road | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/UAZ469/UAZ469_covered_CIV_teal.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.65&nbsp;T * Horsepower: 71&nbsp;HP / 72&nbsp;PS * Max. theoretical speed: approx. 133.1&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 58.5/78&nbsp;L (75% fill, Petrol) * Estimated range: 460&nbsp;km in 3h30m * Idle/red/max RPM: 800/5000/6000&nbsp;RPM * Capacity: 5 persons (1 driver, 4 cargo) </spoiler> |- | UAZ-469 Off-road - Water Treatment | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/UAZ469/UAZ469_covered_CIV_VAK.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.65&nbsp;T * Horsepower: 71&nbsp;HP / 72&nbsp;PS * Max. theoretical speed: approx. 133.1&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 58.5/78&nbsp;L (75% fill, Petrol) * Estimated range: 460&nbsp;km in 3h30m * Idle/red/max RPM: 800/5000/6000&nbsp;RPM * Capacity: 5 persons (1 driver, 4 cargo) </spoiler> |- | UAZ-469 Off-road - Open Top | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/UAZ469/UAZ469_uncovered_CIV_blue.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.65&nbsp;T * Horsepower: 71&nbsp;HP / 72&nbsp;PS * Max. theoretical speed: approx. 133.1&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 58.5/78&nbsp;L (75% fill, Petrol) * Estimated range: 460&nbsp;km in 3h30m * Idle/red/max RPM: 800/5000/6000&nbsp;RPM * Capacity: 5 persons (1 driver, 4 cargo) </spoiler> |- | UAZ-469 Off-road - Open Top | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/UAZ469/UAZ469_uncovered_CIV_brown.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.65&nbsp;T * Horsepower: 71&nbsp;HP / 72&nbsp;PS * Max. theoretical speed: approx. 133.1&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 58.5/78&nbsp;L (75% fill, Petrol) * Estimated range: 460&nbsp;km in 3h30m * Idle/red/max RPM: 800/5000/6000&nbsp;RPM * Capacity: 5 persons (1 driver, 4 cargo) </spoiler> |- | UAZ-469 Off-road - Open Top | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/UAZ469/UAZ469_uncovered_CIV_red.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.65&nbsp;T * Horsepower: 71&nbsp;HP / 72&nbsp;PS * Max. theoretical speed: approx. 133.1&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 58.5/78&nbsp;L (75% fill, Petrol) * Estimated range: 460&nbsp;km in 3h30m * Idle/red/max RPM: 800/5000/6000&nbsp;RPM * Capacity: 5 persons (1 driver, 4 cargo) </spoiler> |- | UAZ-469 Off-road - Open Top | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/UAZ469/UAZ469_uncovered_CIV_teal.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.65&nbsp;T * Horsepower: 71&nbsp;HP / 72&nbsp;PS * Max. theoretical speed: approx. 133.1&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 58.5/78&nbsp;L (75% fill, Petrol) * Estimated range: 460&nbsp;km in 3h30m * Idle/red/max RPM: 800/5000/6000&nbsp;RPM * Capacity: 5 persons (1 driver, 4 cargo) </spoiler> |- | Ural-4320 Fuel Truck | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/Ural4320/Ural4320_tanker_CIV_orange.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 7.97&nbsp;T * Horsepower: 236&nbsp;HP / 239&nbsp;PS * Max. theoretical speed: approx. 88.1&nbsp;km/h * Automatic gearbox: 5 forward, 1 reverse gears * Fuel capacity: 270/360&nbsp;L (75% fill, Diesel) * Estimated range: 1060&nbsp;km in 12h00m * Idle/red/max RPM: 600/2600/4000&nbsp;RPM * Capacity: 3 persons (1 driver, 2 cargo) </spoiler> |- | Ural-4320 Fuel Truck - Fuel Company | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/Ural4320/Ural4320_tanker_CIV_pohona.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 7.97&nbsp;T * Horsepower: 236&nbsp;HP / 239&nbsp;PS * Max. theoretical speed: approx. 88.1&nbsp;km/h * Automatic gearbox: 5 forward, 1 reverse gears * Fuel capacity: 270/360&nbsp;L (75% fill, Diesel) * Estimated range: 1060&nbsp;km in 12h00m * Idle/red/max RPM: 600/2600/4000&nbsp;RPM * Capacity: 3 persons (1 driver, 2 cargo) </spoiler> |- | Ural-4320 Transport Truck - Forestry | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/Ural4320/Ural4320_transport_CIV_forest.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 7.97&nbsp;T * Horsepower: 236&nbsp;HP / 239&nbsp;PS * Max. theoretical speed: approx. 88.1&nbsp;km/h * Automatic gearbox: 5 forward, 1 reverse gears * Fuel capacity: 270/360&nbsp;L (75% fill, Diesel) * Estimated range: 1060&nbsp;km in 12h00m * Idle/red/max RPM: 600/2600/4000&nbsp;RPM * Capacity: 15 persons (1 driver, 14 cargo) </spoiler> |- | Ural-4320 Transport Truck | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/Ural4320/Ural4320_transport_covered_CIV_blue.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 7.97&nbsp;T * Horsepower: 236&nbsp;HP / 239&nbsp;PS * Max. theoretical speed: approx. 88.1&nbsp;km/h * Automatic gearbox: 5 forward, 1 reverse gears * Fuel capacity: 270/360&nbsp;L (75% fill, Diesel) * Estimated range: 1060&nbsp;km in 12h00m * Idle/red/max RPM: 600/2600/4000&nbsp;RPM * Capacity: 15 persons (1 driver, 14 cargo) </spoiler> |- | Ural-4320 Transport Truck - Farm | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/Ural4320/Ural4320_transport_covered_CIV_JZD.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 7.97&nbsp;T * Horsepower: 236&nbsp;HP / 239&nbsp;PS * Max. theoretical speed: approx. 88.1&nbsp;km/h * Automatic gearbox: 5 forward, 1 reverse gears * Fuel capacity: 270/360&nbsp;L (75% fill, Diesel) * Estimated range: 1060&nbsp;km in 12h00m * Idle/red/max RPM: 600/2600/4000&nbsp;RPM * Capacity: 15 persons (1 driver, 14 cargo) </spoiler> |- | Ural-4320 Transport Truck | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/Ural4320/Ural4320_transport_covered_CIV_orange.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 7.97&nbsp;T * Horsepower: 236&nbsp;HP / 239&nbsp;PS * Max. theoretical speed: approx. 88.1&nbsp;km/h * Automatic gearbox: 5 forward, 1 reverse gears * Fuel capacity: 270/360&nbsp;L (75% fill, Diesel) * Estimated range: 1060&nbsp;km in 12h00m * Idle/red/max RPM: 600/2600/4000&nbsp;RPM * Capacity: 15 persons (1 driver, 14 cargo) </spoiler> |- | S1203 Minibus | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/S1203/S1203_transport_red.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.21&nbsp;T * Horsepower: 50&nbsp;HP / 51&nbsp;PS * Max. theoretical speed: approx. 109.1&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 30/40&nbsp;L (75% fill, Petrol) * Estimated range: 410&nbsp;km in 3h45m * Idle/red/max RPM: 650/5000/6000&nbsp;RPM * Capacity: 8 persons (1 driver, 7 cargo) </spoiler> |- | S1203 Minibus | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/S1203/S1203_transport_beige.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.21&nbsp;T * Horsepower: 50&nbsp;HP / 51&nbsp;PS * Max. theoretical speed: approx. 109.1&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 30/40&nbsp;L (75% fill, Petrol) * Estimated range: 410&nbsp;km in 3h45m * Idle/red/max RPM: 650/5000/6000&nbsp;RPM * Capacity: 8 persons (1 driver, 7 cargo) </spoiler> |- | S1203 Minibus | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/S1203/S1203_transport_blue.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.21&nbsp;T * Horsepower: 50&nbsp;HP / 51&nbsp;PS * Max. theoretical speed: approx. 109.1&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 30/40&nbsp;L (75% fill, Petrol) * Estimated range: 410&nbsp;km in 3h45m * Idle/red/max RPM: 650/5000/6000&nbsp;RPM * Capacity: 8 persons (1 driver, 7 cargo) </spoiler> |- | S1203 Minibus | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/S1203/S1203_transport_brown.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.21&nbsp;T * Horsepower: 50&nbsp;HP / 51&nbsp;PS * Max. theoretical speed: approx. 109.1&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 30/40&nbsp;L (75% fill, Petrol) * Estimated range: 410&nbsp;km in 3h45m * Idle/red/max RPM: 650/5000/6000&nbsp;RPM * Capacity: 8 persons (1 driver, 7 cargo) </spoiler> |- | S1203 Minibus | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/S1203/S1203_transport_yellow.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.21&nbsp;T * Horsepower: 50&nbsp;HP / 51&nbsp;PS * Max. theoretical speed: approx. 109.1&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 30/40&nbsp;L (75% fill, Petrol) * Estimated range: 410&nbsp;km in 3h45m * Idle/red/max RPM: 650/5000/6000&nbsp;RPM * Capacity: 8 persons (1 driver, 7 cargo) </spoiler> |- | S1203 Minibus | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/S1203/S1203_transport_white.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.21&nbsp;T * Horsepower: 50&nbsp;HP / 51&nbsp;PS * Max. theoretical speed: approx. 109.1&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 30/40&nbsp;L (75% fill, Petrol) * Estimated range: 410&nbsp;km in 3h45m * Idle/red/max RPM: 650/5000/6000&nbsp;RPM * Capacity: 8 persons (1 driver, 7 cargo) </spoiler> |- | S1203 Cargo | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/S1203/S1203_cargo_red.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.21&nbsp;T * Horsepower: 50&nbsp;HP / 51&nbsp;PS * Max. theoretical speed: approx. 109.1&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 30/40&nbsp;L (75% fill, Petrol) * Estimated range: 410&nbsp;km in 3h45m * Idle/red/max RPM: 650/5000/6000&nbsp;RPM * Capacity: 2 persons (1 driver, 1 cargo) </spoiler> |- | S1203 Cargo | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/S1203/S1203_cargo_beige.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.21&nbsp;T * Horsepower: 50&nbsp;HP / 51&nbsp;PS * Max. theoretical speed: approx. 109.1&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 30/40&nbsp;L (75% fill, Petrol) * Estimated range: 410&nbsp;km in 3h45m * Idle/red/max RPM: 650/5000/6000&nbsp;RPM * Capacity: 2 persons (1 driver, 1 cargo) </spoiler> |- | S1203 Cargo | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/S1203/S1203_cargo_blue.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.21&nbsp;T * Horsepower: 50&nbsp;HP / 51&nbsp;PS * Max. theoretical speed: approx. 109.1&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 30/40&nbsp;L (75% fill, Petrol) * Estimated range: 410&nbsp;km in 3h45m * Idle/red/max RPM: 650/5000/6000&nbsp;RPM * Capacity: 2 persons (1 driver, 1 cargo) </spoiler> |- | S1203 Cargo | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/S1203/S1203_cargo_brown.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.21&nbsp;T * Horsepower: 50&nbsp;HP / 51&nbsp;PS * Max. theoretical speed: approx. 109.1&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 30/40&nbsp;L (75% fill, Petrol) * Estimated range: 410&nbsp;km in 3h45m * Idle/red/max RPM: 650/5000/6000&nbsp;RPM * Capacity: 2 persons (1 driver, 1 cargo) </spoiler> |- | S1203 Cargo | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/S1203/S1203_cargo_yellow.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.21&nbsp;T * Horsepower: 50&nbsp;HP / 51&nbsp;PS * Max. theoretical speed: approx. 109.1&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 30/40&nbsp;L (75% fill, Petrol) * Estimated range: 410&nbsp;km in 3h45m * Idle/red/max RPM: 650/5000/6000&nbsp;RPM * Capacity: 2 persons (1 driver, 1 cargo) </spoiler> |- | S1203 Cargo | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/S1203/S1203_cargo_white.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.21&nbsp;T * Horsepower: 50&nbsp;HP / 51&nbsp;PS * Max. theoretical speed: approx. 109.1&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 30/40&nbsp;L (75% fill, Petrol) * Estimated range: 410&nbsp;km in 3h45m * Idle/red/max RPM: 650/5000/6000&nbsp;RPM * Capacity: 2 persons (1 driver, 1 cargo) </spoiler> |- | S105 Car | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/S105/S105_beige.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 875.00&nbsp;kg * Horsepower: 44&nbsp;HP / 45&nbsp;PS * Max. theoretical speed: approx. 151.2&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 28.5/38&nbsp;L (75% fill, Petrol) * Estimated range: 1300&nbsp;km in 8h45m * Idle/red/max RPM: 800/5800/8000&nbsp;RPM * Capacity: 4 persons (1 driver, 3 cargo) </spoiler> |- | S105 Car | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/S105/S105_darkblue.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 875.00&nbsp;kg * Horsepower: 44&nbsp;HP / 45&nbsp;PS * Max. theoretical speed: approx. 151.2&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 28.5/38&nbsp;L (75% fill, Petrol) * Estimated range: 1300&nbsp;km in 8h45m * Idle/red/max RPM: 800/5800/8000&nbsp;RPM * Capacity: 4 persons (1 driver, 3 cargo) </spoiler> |- | S105 Car | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/S105/S105_darkbrown.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 875.00&nbsp;kg * Horsepower: 44&nbsp;HP / 45&nbsp;PS * Max. theoretical speed: approx. 151.2&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 28.5/38&nbsp;L (75% fill, Petrol) * Estimated range: 1300&nbsp;km in 8h45m * Idle/red/max RPM: 800/5800/8000&nbsp;RPM * Capacity: 4 persons (1 driver, 3 cargo) </spoiler> |- | S105 Car | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/S105/S105_darkred.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 875.00&nbsp;kg * Horsepower: 44&nbsp;HP / 45&nbsp;PS * Max. theoretical speed: approx. 151.2&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 28.5/38&nbsp;L (75% fill, Petrol) * Estimated range: 1300&nbsp;km in 8h45m * Idle/red/max RPM: 800/5800/8000&nbsp;RPM * Capacity: 4 persons (1 driver, 3 cargo) </spoiler> |- | S105 Car | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/S105/S105_green.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 875.00&nbsp;kg * Horsepower: 44&nbsp;HP / 45&nbsp;PS * Max. theoretical speed: approx. 151.2&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 28.5/38&nbsp;L (75% fill, Petrol) * Estimated range: 1300&nbsp;km in 8h45m * Idle/red/max RPM: 800/5800/8000&nbsp;RPM * Capacity: 4 persons (1 driver, 3 cargo) </spoiler> |- | S105 Car | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/S105/S105_lightblue.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 875.00&nbsp;kg * Horsepower: 44&nbsp;HP / 45&nbsp;PS * Max. theoretical speed: approx. 151.2&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 28.5/38&nbsp;L (75% fill, Petrol) * Estimated range: 1300&nbsp;km in 8h45m * Idle/red/max RPM: 800/5800/8000&nbsp;RPM * Capacity: 4 persons (1 driver, 3 cargo) </spoiler> |- | S105 Car | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/S105/S105_lightgreen.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 875.00&nbsp;kg * Horsepower: 44&nbsp;HP / 45&nbsp;PS * Max. theoretical speed: approx. 151.2&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 28.5/38&nbsp;L (75% fill, Petrol) * Estimated range: 1300&nbsp;km in 8h45m * Idle/red/max RPM: 800/5800/8000&nbsp;RPM * Capacity: 4 persons (1 driver, 3 cargo) </spoiler> |- | S105 Car | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/S105/S105_red.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 875.00&nbsp;kg * Horsepower: 44&nbsp;HP / 45&nbsp;PS * Max. theoretical speed: approx. 151.2&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 28.5/38&nbsp;L (75% fill, Petrol) * Estimated range: 1300&nbsp;km in 8h45m * Idle/red/max RPM: 800/5800/8000&nbsp;RPM * Capacity: 4 persons (1 driver, 3 cargo) </spoiler> |- | S105 Car | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/S105/S105_white.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 875.00&nbsp;kg * Horsepower: 44&nbsp;HP / 45&nbsp;PS * Max. theoretical speed: approx. 151.2&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 28.5/38&nbsp;L (75% fill, Petrol) * Estimated range: 1300&nbsp;km in 8h45m * Idle/red/max RPM: 800/5800/8000&nbsp;RPM * Capacity: 4 persons (1 driver, 3 cargo) </spoiler> |- | S105 Car | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/S105/S105_yellow.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 875.00&nbsp;kg * Horsepower: 44&nbsp;HP / 45&nbsp;PS * Max. theoretical speed: approx. 151.2&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 28.5/38&nbsp;L (75% fill, Petrol) * Estimated range: 1300&nbsp;km in 8h45m * Idle/red/max RPM: 800/5800/8000&nbsp;RPM * Capacity: 4 persons (1 driver, 3 cargo) </spoiler> |- | UAZ-452 Transport Van | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/UAZ452/UAZ452_transport_CIV_blue.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.65&nbsp;T * Horsepower: 71&nbsp;HP / 72&nbsp;PS * Max. theoretical speed: approx. 139.4&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 64.5/86&nbsp;L (75% fill, Petrol) * Estimated range: 800&nbsp;km in 5h45m * Idle/red/max RPM: 800/5000/6000&nbsp;RPM * Capacity: 8 persons (1 driver, 7 cargo) </spoiler> |- | UAZ-452 Transport Van | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/UAZ452/UAZ452_transport_CIV_grey.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.65&nbsp;T * Horsepower: 71&nbsp;HP / 72&nbsp;PS * Max. theoretical speed: approx. 139.4&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 64.5/86&nbsp;L (75% fill, Petrol) * Estimated range: 800&nbsp;km in 5h45m * Idle/red/max RPM: 800/5000/6000&nbsp;RPM * Capacity: 8 persons (1 driver, 7 cargo) </spoiler> |- | UAZ-452 Transport Van | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/UAZ452/UAZ452_transport_CIV_orange.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.65&nbsp;T * Horsepower: 71&nbsp;HP / 72&nbsp;PS * Max. theoretical speed: approx. 139.4&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 64.5/86&nbsp;L (75% fill, Petrol) * Estimated range: 800&nbsp;km in 5h45m * Idle/red/max RPM: 800/5000/6000&nbsp;RPM * Capacity: 8 persons (1 driver, 7 cargo) </spoiler> |- | UAZ-452 Cargo Van | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/UAZ452/UAZ452_cargo_CIV_blue.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.65&nbsp;T * Horsepower: 71&nbsp;HP / 72&nbsp;PS * Max. theoretical speed: approx. 139.4&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 64.5/86&nbsp;L (75% fill, Petrol) * Estimated range: 800&nbsp;km in 5h45m * Idle/red/max RPM: 800/5000/6000&nbsp;RPM * Capacity: 2 persons (1 driver, 1 cargo) </spoiler> |- | UAZ-452 Cargo Van | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/UAZ452/UAZ452_cargo_CIV_grey.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.65&nbsp;T * Horsepower: 71&nbsp;HP / 72&nbsp;PS * Max. theoretical speed: approx. 139.4&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 64.5/86&nbsp;L (75% fill, Petrol) * Estimated range: 800&nbsp;km in 5h45m * Idle/red/max RPM: 800/5000/6000&nbsp;RPM * Capacity: 2 persons (1 driver, 1 cargo) </spoiler> |- | UAZ-452 Cargo Van | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/UAZ452/UAZ452_cargo_CIV_orange.et}} | style="font-size: smaller" | <spoiler text="Show details"> * Mass: 1.65&nbsp;T * Horsepower: 71&nbsp;HP / 72&nbsp;PS * Max. theoretical speed: approx. 139.4&nbsp;km/h * Automatic gearbox: 4 forward, 1 reverse gears * Fuel capacity: 64.5/86&nbsp;L (75% fill, Petrol) * Estimated range: 800&nbsp;km in 5h45m * Idle/red/max RPM: 800/5000/6000&nbsp;RPM * Capacity: 2 persons (1 driver, 1 cargo) </spoiler> |- | UH-1H Transport Helicopter | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Helicopters/UH1H/UH1H_civ_livery_v1.et}} | style="font-size: smaller" | * Mass: 2.37&nbsp;T * Horsepower: 910&nbsp;HP / 923&nbsp;PS * Fuel capacity: 622.5/830&nbsp;L (75% fill, Kerosene) * Idle/max RPM: 3000/6600&nbsp;RPM * Capacity: 10 persons (2 pilots, 8 cargo) |- | Mi-8MT Transport Helicopter | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_civ_blue.et}} | style="font-size: smaller" | * Mass: 9.00&nbsp;T * Horsepower: 1101&nbsp;HP / 1116&nbsp;PS * Fuel capacity: 1938.75/2585&nbsp;L (75% fill, Kerosene) * Idle/max RPM: 15000/19500&nbsp;RPM * Capacity: 17 persons (2 pilots, 15 cargo) |- | Mi-8MT Transport Helicopter | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_civ_red.et}} | style="font-size: smaller" | * Mass: 9.00&nbsp;T * Horsepower: 1101&nbsp;HP / 1116&nbsp;PS * Fuel capacity: 1938.75/2585&nbsp;L (75% fill, Kerosene) * Idle/max RPM: 15000/19500&nbsp;RPM * Capacity: 17 persons (2 pilots, 15 cargo) |}

Generated on 2025-10-03 18:18:09 UTC by {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/BIKI/SCR_BIKIFactionAssetsExportPlugin.c}}

{{GameCategory|armaR|Content}}
92z5pugaxvq09bwzszux6q2kpa1u4xc

# Arma Reforger:Dictionary

5050
38004
378102
351828
2026-02-13T23:29:20Z
Lou Montana
10739
Fix 1.6
378102
wikitext
text/x-wiki
{{Feature|informative| See also {{Link|Arma: Dictionary}}. }}

== Conflict ==

This glossary targets the {{Link|Arma Reforger:Conflict}} game mode and its terminology.

{| class="wikitable sortable valign-top" <!-- ! Type --> ! Name ! Meaning ! Description/Notes <!-- ! Scope --> |-

<!-- A -->

| Ammunition Supply Point | A military storage facility for live ammunition and explosives. | |- | Ammunition Truck | Military truck for transporting ammunition. | |- | Anti-Tank Defense | Defences to prevent the free movements of tanks and similar armoured vehicles. |- | Arsenal Crate | A supply crate containing a Virtual Arsenal. | |-

<!-- B -->

| Base Management Point | A functional composition where support structures and fortifications can be constructed. | |- | Building Mode | The in-game mode that allows players to build support structures and fortifications. | |- | Bunker | A shelter dug into the ground and made strong against attack. | |-

<!-- C -->

| Checkpoint | A barrier or manned entrance, typically at a border, where security checks are carried out on travellers. | |- | Command Post | The place from which a unit commander controls a military unit. | |- | Command Truck | Military truck for transporting a mobile command unit. | |- | Composition | The nature of something's ingredients or constituents; the way in which a whole or mixture is made up. | |- | Construction Truck | Military truck for transporting construction supplies. | |-

<!-- D -->

| Defensive Position | A reinforced defensive position. | |-

<!-- E -->

| Encampment | A place with temporary accommodation consisting of huts or tents, typically for troops or nomads. | |-

<!-- F -->

| Field Hospital | a temporary hospital set up to provide emergency medical care for people wounded in military action or affected by a natural disaster or outbreak of infectious disease. | |- | Fortification | A defensive wall or other reinforcement built to strengthen a place against attack. | |- | Free Roam Building | The process of using the building mode to build support structures and fortifications. | |- | Fuel Point | A gas station, fuel supply point, refueling area, or fuel truck. | |- | Fuel Supply Point | A military storage area for fuel cisterns. | |- | Fuel Truck | Military truck with a cistern for transporting fuel. | |-

<!-- G -->

<!-- H -->

| Heavy Machine-Gun Nest | A machine-gun nest is a fixed position where a machine gun crew sets up their weapon. | |- | Heavy Vehicle Maintenance Point | A temporary motorpool and repair area for heavy military vehicles. | |- | Helipad | A landing and take-off area for helicopters. | |-

<!-- I --> <!-- J --> <!-- K -->

<!-- L -->

| Light Vehicle Maintenance Point | A temporary motorpool, refuel and repair area for light military vehicles. | |- | Living Quarters | Rooms or lodgings, especially those allocated to people in military or domestic service. | |-

<!-- M -->

| Machine-Gun Nest | A machine-gun nest is a fixed position where a machine gun crew sets up their weapon. | |- | Medical Area | An abstract zone that acts as a non-physical field hospital in the Game Master mode. | |- | Medical Point | A field hospital, ambulance, or medical area. | |- | Mobile Command Unit | The deployable command module transported by a command truck. | |-

<!-- N --> <!-- O -->

<!-- P -->

| Placement Preview | Semi-opaque projection of a composition, allowing player to preview its orientation and placement. | |-

<!-- Q -->

<!-- R -->

| Radio Relay Station | A rod, wire, or other device used to transmit or receive radio or television signals; an aerial. | |- | Repair Point | A vehicle maintenance point, vehicle repair area, or repair truck. | |- | Repair Truck | Military truck capable of conducting field repairs to other vehicles. | |-

<!-- S -->

| Squad Management Point | A functional composition where squads can be managed. | |- | Supply Cache | A stash of weapons and supplies, used by guerrilla forces. | |- | Supply Depot | A type of military installation used by militaries to store battlefield supplies temporarily on or near the front lines until they can be distributed to military units. Supply depots are responsible for nearly all other types of material, except ammunition. | |- | Support Item | An inventory item that relates to repairing, refuelling, etc. | |- | Support Structure | A structure that provides support for combat operations. | |- | Support Vehicle | A support vehicle that provides support for combat operations. | |-

<!-- T -->

| Transport Truck | Military truck for transportation. | |-

<!-- U -->

<!-- V -->

| Vehicle Maintenance Point | A temporary motorpool and repair area for military vehicles used by guerrilla forces. | |- | Vehicle Management Point | A functional composition where vehicles can be managed. | |- | Vehicle Refuel Area | An abstract zone that acts as a non-physical fuel supply point in the Game Master mode. | |- | Vehicle Repair Area | An abstract zone that acts as a non-physical vehicle maintenance point in the Game Master mode. |

<!-- W --> <!-- X --> <!-- Y --> <!-- Z --> |}

{{GameCategory|armaR|Content}}
j3plevelljg0iazt7bvfemd85s6ox1u

# Arma Reforger:Field Manual

5050
47101
370331
370329
2024-11-29T15:50:25Z
Lou Montana
10739
Some wiki formatting
370331
wikitext
text/x-wiki
<div class="float-right" style="font-size: .9em; margin-left: 3em"> <div style="font-family: 'Segoe UI', sans-serif; font-size: 8em; margin: -.375em auto -.25em">'''RTFM'''</div> <div style="color: grey; margin-left: -1em; text-align: center">'''R'''ead '''T'''he '''F'''ield '''M'''anual.</div> </div> The '''Field Manual''' is the in-game manual providing detailed, illustrated information about game modes ({{Link|Arma Reforger:Conflict}}, {{Link|Arma Reforger:Game Master}}), gameplay (movement, commanding, etc), and equipment.

It is accessible through '''Main Menu > Field Manual''' or '''Pause Menu > Field Manual'''.

{{Feature|informative|See also {{Link|Arma Reforger:Field Manual Modding}}.}}

{{GameCategory|armaR|Content}}
3aig7ukqhxxa3nz3070sblsmb1i89th

# Arma Reforger:Conflict

5050
32559
378103
370349
2026-02-13T23:29:59Z
Lou Montana
10739
/* Fuel Depot */ Fix 1.6
378103
wikitext
text/x-wiki
<div class="float-right"> {{Youtube|i0c4uVzPO-E|Original presentation|right|500}} {{Youtube|02HJJDhO8UA|Overview|right|500}} </div>

'''Conflict''' is an {{armaR}} game mode that was introduced with the Early Access of the game.

The Conflict game mode sees two groups of players fighting for supremacy of an island. To win, one side must capture a certain number of strategic positions and hold them for a given time. These have to be in your faction's radio signal range, otherwise they cannot be properly secured. The more military sites and communication arrays you seize, the greater your operational remit.

Read more about it in the in-game's {{Link|Arma Reforger:Field Manual}}!

=== Seizing === Players can only seize enemy positions that are within their faction's radio range. This radiates outwards from a Main Operating Base and can be extended by exercising control over communication stations and relay towers at various military sites, as well as '''Mobile Command Units'''. All locations available for capture are listed as tasks and can be identified on your map by way of connecting lines and joining strategically important transceivers. To secure a base, you must maintain a superior military presence in the vicinity of a command tent. In other words, you should try to overwhelm the enemy by force of numbers. The more troops your side has nearby, the faster you can take control of the objective.

=== Respawn === In the Conflict game mode, if you are killed in action, you will have the option of returning to the fight. Players can rejoin the battle from a Main Operating Base. Fully operational Mobile Command Units are another option. Furthermore, where server settings allow, '''radio operators''' may also offer insertion choices. To deploy at other military locations, '''supplies''' are required. These are diminished by a small amount with each soldier deployed. However, this expenditure can be reduced by 50% if '''living quarters''' are constructed.

=== Supplies === All military bases in the Conflict game mode have supplies. These are stored at command tents or supply depots and include building materials, which can be loaded onto trucks and distributed to other locations for the construction of support structures and field defenses. Such reserves are periodically '''replenished''' at each side's Main Operating Base, although in very small quantities. Opposing factions, therefore, will need to focus their attention on capturing supply depots from independent forces. Despite being well-defended, these locations offer plentiful resources and can be immediately located on your map. To ensure logistics and effective resupply, you will need to request an appropriate transport with ample cargo space from a '''vehicle maintenance point''' and maneuver it to a supply depot. At this point, you will be able to access the Construction Interface from the rear of the vehicle and assign building materials, which can then be conveyed to another base and unloaded in the same way.

=== Construction Interface === A unique mechanic in Conflict is the ability to create fixed defenses and '''support structures''' to help your faction secure objectives. In addition, you will also need to carefully manage your '''building materials''' and decide which structures to raise first at your Main Operating Base. This is achieved through the construction interface utilizing the '''Game Master''' layout. Vehicle depots, ammunition supply points, bunkers, and more can be raised within the perimeter of your base or near a supply truck, using materials loaded from in-base supply depots. To open the construction interface, approach a command tent and interact with the sign inside. Alternatively, open the Game Master interface while in the vicinity of your base. Previews for all assets that can be built nearby will appear at the bottom of the screen. Click on a preview, then click anywhere within the allowed perimeter to build the structure. Grayed-out previews require more materials than your depot is currently holding. In addition, by accessing the supply interface from the back of a vehicle, assets can be placed at strategic sites beyond the perimeters of friendly bases. This is especially helpful when placing fortifications to consolidate positions.

=== Service depots === In the Conflict game mode, support structures can be '''built''' using '''supply materials'''. Each provides a unique advantage for your faction. They can be utilized for many purposes. Some may be available from the start of a match, while others must be built.

==== Vehicle Maintenance Points ==== Allows for various types of vehicles to be requested in exchange for local base supplies.

==== Fuel Depot ==== An area with several fuel cisterns that can be established in many base types. It is used specifically for refueling ground vehicles. Vehicles requested in a base with a fuel depot arrive with an almost-full fuel tank.

==== Ammunition Supply Point ==== Provides a temporary storage area for ammunition, where players can rearm.

==== Field Hospital ==== A medical tent where players can replenish first aid supplies as well as fully heal others.

==== Radio relay station ==== Extends the radio signal range for the base where it is constructed.

==== Living Quarters ==== Spawns a group of soldiers that can patrol the perimeter of a base and defend against attacks. Also reduces deployment costs by 50%.

=== Mobile Command Unit === Command trucks can be requested from '''vehicle maintenance points''' and enable all players of a particular faction to '''respawn''' on its location. Moreover, it also extends your side's radio coverage, offering an alternative to '''seizing nearby bases'''. However, both features require the mobile command unit on the command truck to be properly deployed. This is achieved by interacting with the rear of the vehicle. Once deployed, the position of a mobile command unit is revealed to all friendly forces. Only one of these vehicle types can be active at any given time and there is a short delay before respawn options become available. If a Mobile Command Unit is prepped for relocation, on the move, or destroyed, you will lose your extended radio range and the ability to respawn nearby.

=== Ranks === Through exemplary conduct you may receive a battlefield promotion. By successfully completing objectives, such as '''seizing''' and '''resupplying''' bases, supporting friendly units, or eliminating enemies, you are liable to rise through the ranks. As you advance in your career, better vehicles will be available from vehicle maintenance points, and other advantages will be unlocked. Progress can be expedited by supporting friendly units and accepting secondary objectives from the objectives menu. Be aware that you may also be demoted or even engaged by your own side if you are consistently responsible for friendly fire.{{GameCategory|armaR|Content|Game Modes}}
0ei2vizal98n90rvfc7ez4wzg19qzl3

# Arma Reforger:Game Master

5050
32545
369543
365164
2024-09-17T10:11:51Z
Lou Montana
10739
Text replacement - "/$Arma" to "/~Arma"
369543
wikitext
text/x-wiki
{{TOC|side}} [[File:armareforger-game_master_everon.png|thumb|The Game Master tile.]] '''Game Master''' is a game mode where nothing is planned, and where a player chooses what the next events will be. It allows to create a real-time experience as a dedicated Game Master; curating events, placing assets, or just exploring by oneself.

It is equivalent to, and is the generic game mode name of [[Arma 3 Zeus]].

"Game Master" is also used to designate the player in the role of the current curator.

== Description ==

* the player that is '''Server Host''' (or the declared '''Server Admin''') ''always'' has access to the Game Master interface * if no Game Master is present, the '''first player to connect''' obtains the Game Master role * the role cannot be transferred unless that player disconnects

{| class="wikitable valign-top" ! Possible ! Not Possible |- | * create, edit, move and kill the AI units and vehicles present in the world * edit, move and kill a player * provide groups with waypoints * create, move and delete prefabs on the fly * spawn at will into the game | * modify the base terrain |}

== Controls ==

{| class="wikitable" ! Keyboard/Mouse ! Controller ! Description |- | {{Controls|W}}{{Controls|A}}{{Controls|S}}{{Controls|D}} | {{Controls|padLJoyMove}} | Move the camera horizontally |- | {{Controls|Q}}{{Controls|Z}} | {{Controls|padLT}}{{Controls|padRT}} | Move the camera vertically |- | {{Controls|RMB|Mouse}} | {{Controls|padRJoyMove}} | Rotate the camera |- | {{Controls|V}} | Hold {{Controls|padBack}} | Edit scenario properties |- | Hold {{Controls|Y}} | {{Controls|padStart|padLB}} | Exit the interface |}

== Interface ==

The interface is split into four panels: * {{Link|#Mode}} * {{Link|#Toolbar}} * {{Link|#Scenario Menu}} * {{Link|#Entity Menu}}

== Mode ==

{{Feature|gamepad|The Mode interface is accessible using {{Controls|padUp}}.}}

The top interface allows to switch between Game Master and Armavision. {{Feature|informative|See [[Arma Reforger:Armavision|Armavision]] for more information.}}

== Toolbar ==

{{Feature|gamepad|The Toolbar interface is accessible using {{Controls|padDown}}.}}

=== Map ===

Shortcut: {{Controls|M}} / Hold {{Controls|padStart}}

Toggle the in-game map.

=== Flashlight ===

Shortcut: {{Controls|L}} / {{Controls|padRB|padRSB}}

Toggle flashlight for improved visibility in the dark. The light is only visible when it is dark and only to the Game Master, not to other players or AI.

=== Toggle Interface ===

Shortcut: {{Controls|I}} / {{Controls|padRB|padUp}}

Hide editor interface. When hidden, use the shortcut to reveal it again.

=== Guided Tour ===

Step-by-step introduction of the current mode.

=== Clear Destroyed Entities ===

Delete all killed soldiers and destroyed vehicles. This will free up budget they may still occupy.

== Scenario Menu ==

{{Feature|gamepad|The Scenario Menu interface is accessible using {{Controls|padLeft}}.}}

Scenario properties shortcut: {{Controls|V}} / Hold {{Controls|padBack}}

=== Scenario Menu Interface ===

This interface allows to define playable factions when none are defined (by clicking the big {{hl|"+"}}) and to create faction spawn points as well as set ''faction'' '''objectives''' addressed to the '''players''' - the AI will ignore them.

{{Feature|gamepad|The objectives menu is accessible by selecting a faction and holding {{Controls|padY}}.}}

==== Move ==== Shortcut: {{Controls|Alt|2}}

==== Seize ==== Shortcut: {{Controls|Alt|3}}

==== Defend ==== Shortcut: {{Controls|Alt|4}}

==== Custom ==== Shortcut: {{Controls|Alt|5}}

Can be one of: {{Columns|3| * Objective * Recon * Suppress * Stand down * Wait * Assemble * Prepare * Rescue captive * Rescue captives * Board vehicle * Locate contact * Take captive * Target killing * Locate vehicle * Steal vehicle * Destroy vehicle * Locate intel * Locate asset * Ambush * Locate base * Prepare defenses }}

=== Playable Factions ===

Set which factions can be joined by players. This interface is also accessible by clicking the big {{hl|"+"}} when no factions are configured. {{Feature|important|Be aware that removing a playable faction will kill any players already assigned to it.}}

=== Game ===

* Enable respawn ** Spawn near radio operators ** Respawn time * Server-wide ambient music

=== Time and Date ===

* Time of the day (quick selection: 05:45, 08:52, 12:00, 20:12, 22:06, 00:00) ** Time (slider, 00:00..24:00 by 15 minutes steps) * Date (day, month, year, default 8 August 1989) * Time progression (Y/N) ** Time progression multiplier (default 1.0×, range 0.1×..12.0×, step 0.1×)

=== Weather ===

* Automate weather (Y/N) ** Weather: choose between Clear, Cloudy, Overcast, Rain and Fog * Automate wind (Y/N) ** Wind speed (range 0.0..15.0 m/s) ** Wind direction (North, Northeast, East, Southeast, South, Southwest, West, Northwest)

== Entity Browser ==

Shortcut: {{Controls|Tab}} / {{Controls|padBack}}

Open the Entity Browser to place various characters, vehicles, structures and more.

=== Controls ===

{| class="wikitable" ! Keyboard/Mouse ! Controller ! Description |- | {{Controls|Z}} / {{Controls|C}} | {{Controls|padLT}} / {{Controls|padRT}} |- | {{Controls|R}} | {{Controls|padRSB}} | Reset filters |- | {{Controls|Esc}} | {{Controls|padB}} | Close |}

=== Filters ===

The Entity Browser allows to sort by:

* Faction * Entity type * Role * Trait * Content (if an entity is modded or not)

=== Budgets ===

Budgets are the available "resources" that can be allocated on each Game Master aspects. They are shown at the bottom-right of the screen in the Entity Browser interface.

Once a budget reaches 100%, it is impossible to add more of its items unless previous ones are removed from the game.

For example, placing too many units will make the '''AI Budget''' reach 100% - more AI cannot be placed, and some previously placed ones (usually the unused ones) must be deleted in order to place new ones.

Other budget items (e.g vehicles) can still be placed.

; Object Budget Budget for all objects such as props and compositions.

; AI Budget Budget for computer-controlled entities such as non-player characters.

; Vehicle Budget Budget for cars, armored vehicles, etc.

; System Budget Budget for respawn points, objectives, arsenals, etc.

=== Entity Placement ===

Once an entity has been selected in the Entity Browser, it can be placed in the world.

{| class="wikitable" ! Keyboard Controls ! Gamepad Controls ! Description |- | {{Controls|LMB}} | {{Controls|padA}} | Place |- | {{Controls|Space}} | Hold {{Controls|padA}} | Place as a player |- | {{Controls|Ctrl|LMB}} | {{Controls|padRB|padA}} | Place and keep placing |- | {{Controls|Shift}} | {{Controls|padRB|padLjoyLeftRight}} | Rotate |- | {{Controls|Alt}} Move vertically | {{Controls|padRB|padLjoyUpDown}} | Move vertically |- | {{n/a}} | {{Controls|padRB|padLSB}} | Snap to surface |- | {{Controls|RMB}} | {{Controls|padB}} | Cancel placing |}

== Gamepad-Specific Menu ==

Holding {{Controls|padX}} will open a radial menu which content depends on what is under the cursor.

Possible options: {| class="wikitable ! Action ! Keyboard equivalent |- | Ping | {{Controls|Y}} |- | Move Camera | {{Controls|F}} |- | Teleport Player | {{Controls|Space}} |- | Take Control | {{Controls|C}} |- | Create new AI group | {{Controls|RMB}} option (on AI unit(s)) |- | Snap to terrain | {{Controls|RMB}} option |- | Play | {{Controls|Space}} |- | Heal | {{Controls|RMB}} option |- | Resupply | {{Controls|RMB}} option |- | Start Bleeding | {{Controls|RMB}} option |- | Stop Bleeding | {{Controls|RMB}} option |- | Cast Lightning | 2&times; {{Controls|G}} |- | Neutralize | {{Controls|End}} |- | Find in Entity Browser | {{n/a}} |- | Edit Properties | 2&times; {{Controls|LMB}} |}

== Waypoints ==

A waypoint is a move/action order provided to an AI '''group'''. {{Feature|important|Not to be confused with '''Objectives''', which are "waypoints" but for factions.}}

{{Feature|gamepad|The waypoints menu is accessible by selecting the group then holding {{Controls|padY}}.}}

{| class="wikitable align-center-col-2" ! Name ! Keyboard Shortcut ! Prefab ! Description ! Priority ! Radius ! Timeout ! Behaviour Tree |- | === Move === | {{Controls|Alt|1}} | {{Link|enfusion://ResourceManager/~ArmaReforger:PrefabsEditable/Auto/AI/Waypoints/E_AIWaypoint_Move.et}} | * Simple move waypoint * Completes once the group leader reaches the waypoint radius. | 0.0 | 5.0 | {{n/a}} | {{Link|enfusion://BehaviorEditor/~ArmaReforger:AI/BehaviorTrees/Waypoints/WP_Move.bt}} |- | === Forced Move === | {{Controls|Alt|2}} | {{Link|enfusion://ResourceManager/~ArmaReforger:PrefabsEditable/Auto/AI/Waypoints/E_AIWaypoint_ForcedMove.et}} | * Move waypoint ignoring autonomous behavior * Completes once the group leader reaches the waypoint radius. | 2000.0 | 5.0 | {{n/a}} | {{Link|enfusion://BehaviorEditor/~ArmaReforger:AI/BehaviorTrees/Waypoints/WP_Move.bt}} |- | === Move Relaxed === | {{Controls|Alt|3}} | {{Link|enfusion://ResourceManager/~ArmaReforger:PrefabsEditable/Auto/AI/Waypoints/E_AIWaypoint_Patrol.et}} | * Like simple move only different move type, slower | 0.0 | 5.0 | {{n/a}} | {{Link|enfusion://BehaviorEditor/~ArmaReforger:AI/BehaviorTrees/Waypoints/WP_Patrol.bt}} |- | === Search and Destroy === | {{Controls|Alt|4}} | {{Link|enfusion://ResourceManager/~ArmaReforger:PrefabsEditable/Auto/AI/Waypoints/E_AIWaypoint_SearchAndDestroy.et}} | * Timed waypoint, for which duration the waypoint radius must not contain any known enemies. When it does during that time, the timer resets. * AI investigate area inside given waypoint radius. | 0.0 | 20.0 | 600.0 | {{Link|enfusion://BehaviorEditor/~ArmaReforger:AI/BehaviorTrees/Waypoints/WP_Move.bt}} > {{Link|enfusion://BehaviorEditor/~ArmaReforger:AI/BehaviorTrees/Waypoints/WP_SearchAndDestroy.bt}} |- | === Defend === | {{Controls|Alt|5}} | {{Link|enfusion://ResourceManager/~ArmaReforger:PrefabsEditable/Auto/AI/Waypoints/E_AIWaypoint_Defend.et}} | * Timed waypoint for which duration AI will stand guard inside given radius. * By default never completes | 0.0 | 30.0 | Never completes | {{Link|enfusion://BehaviorEditor/~ArmaReforger:AI/BehaviorTrees/Waypoints/WP_Move.bt}} > {{Link|enfusion://BehaviorEditor/~ArmaReforger:AI/BehaviorTrees/Waypoints/WP_Defend.bt}} |- | === Get In === | {{Controls|Alt|6}} | {{Link|enfusion://ResourceManager/~ArmaReforger:PrefabsEditable/Auto/AI/Waypoints/E_AIWaypoint_GetInNearest.et}} | * Timed waypoint for which duration AI checks inside WP radius for available functional vehicle to mount * Completes once all units have found a position and mounted, or times out. * It is possible to adjust boarding parameters in prefab (driver/gunner/cargo allowance) | 0.0 | 20.0 | 30.0 | {{Link|enfusion://BehaviorEditor/~ArmaReforger:AI/BehaviorTrees/Waypoints/WP_Move.bt}} > {{Link|enfusion://BehaviorEditor/~ArmaReforger:AI/BehaviorTrees/Waypoints/WP_GetInNearest.bt}} |- | === Get Out === | {{Controls|Alt|7}} | {{Link|enfusion://ResourceManager/~ArmaReforger:PrefabsEditable/Auto/AI/Waypoints/E_AIWaypoint_GetOut.et}} | * AI moves to waypoint radius and disembarks * It is possible to adjust boarding parameters in prefab (driver/gunner/cargo allowance) | 0.0 | 9.0 | {{n/a}} | {{Link|enfusion://BehaviorEditor/~ArmaReforger:AI/BehaviorTrees/Waypoints/WP_Move.bt}} > {{Link|enfusion://BehaviorEditor/~ArmaReforger:AI/BehaviorTrees/Waypoints/WP_GetOut.bt}} |- | === Suppressive Fire === | {{Controls|Alt|8}} | {{Link|enfusion://ResourceManager/~ArmaReforger:PrefabsEditable/Auto/AI/Waypoints/E_AIWaypoint_Suppress_Editor.et}} | * Units shoot at WP position * waypoint does not complete | 2000 | {{n/a}} | Never completes | {{Link|enfusion://BehaviorEditor/~ArmaReforger:AI/BehaviorTrees/Waypoints/WP_Suppress.bt}}

<!--

|- | === Not implemented inside GM === | {{Link|enfusion://ResourceManager/~ArmaReforger:PrefabsEditable/Auto/AI/Waypoints/E_AIWaypoint_DefendSmall.et}} | * Timed waypoint for which duration AI will stand guard inside given radius. * By default never completes | 0.0 | 15.0 | never completes | {{Link|enfusion://BehaviorEditor/~ArmaReforger:AI/BehaviorTrees/Waypoints/WP_Move.bt}} > {{Link|enfusion://BehaviorEditor/~ArmaReforger:AI/BehaviorTrees/Waypoints/WP_Defend.bt}} |- | | {{Link|enfusion://ResourceManager/~ArmaReforger:PrefabsEditable/Auto/AI/Waypoints/E_AIWaypoint_GetIn.et}} | * AI checks inside WP radius for available functional vehicle to mount * It is possible to adjust boarding parameters in prefab (driver/gunner/cargo allowance) | 0.0 | 9.0 | {{n/a}} | {{Link|enfusion://BehaviorEditor/~ArmaReforger:AI/BehaviorTrees/Waypoints/WP_Move.bt}} > {{Link|enfusion://BehaviorEditor/~ArmaReforger:AI/BehaviorTrees/Waypoints/WP_GetIn.bt}} |- | | ===== E_AIWaypoint_Scout.et ===== | * Timed waypoint, for which duration the waypoint radius must not contain any known enemies. When it does during that time, the timer resets. * AI investigate area inside given waypoint radius. | 0.0 | 20.0 | 600.0 | {{Link|enfusion://BehaviorEditor/~ArmaReforger:AI/BehaviorTrees/Waypoints/WP_Move.bt}} > {{Link|enfusion://BehaviorEditor/~ArmaReforger:AI/BehaviorTrees/Waypoints/WP_Scout.bt}} |- | | ===== E_AIWaypoint_Wait.et ===== | * Timed waypoint that waits * designed to introduce a pause between cycled waypoints | 0.0 | 5.0 | 60.0 | {{Link|enfusion://BehaviorEditor/~ArmaReforger:AI/BehaviorTrees/Waypoints/WP_Move.bt}} > {{Link|enfusion://BehaviorEditor/~ArmaReforger:AI/BehaviorTrees/Waypoints/WP_Wait.bt}} --> |}

{{GameCategory|armaR|Content|Game Modes}}
mol8mdgqdsh5st9mkklyp5kedtzk618

# Arma Reforger:Server Area Code

5050
47264
373038
373035
2025-03-20T14:11:47Z
Lou Montana
10739
Some wiki formatting
373038
wikitext
text/x-wiki
Official servers sport a letters code that is an area code. Here is a list of them with their meaning:

{| class="wikitable align-center-col-2" ! rowspan="2" | Code ! colspan="2" | Description |- ! Area ! City |- | EU-FFM | Europe | Frankfurt am Main |- | US-LA | rowspan="5" | United States | Los Angeles |- | US-MI | Miami |- | US-NY | New York |- | US-SF | San Francisco |- | US-WA | Washington DC |- | AP-SG | rowspan="3" | Asia-Pacific | Singapore |- | AP-TO | Tokyo |- | AP-SY | Sydney |}

{{GameCategory|armaR|Content|Official Servers}}
tbs0zm24aym66zpeduo7c128jl56rek

# Arma Reforger:Arland

5050
35047
376395
376388
2025-10-10T15:02:49Z
Lou Montana
10739
Some wiki formatting
376395
wikitext
text/x-wiki
{{Infobox/Terrain |name= Arland |wbLink= enfusion://WorldEditor/worlds/Arland/Arland.ent |image= [[File:armareforger_arland-postcard.jpg|300px]]<br>Arland is awaiting! |defaultDateTime= 1989-08-20 12:00:00 |season= Summer |coords= {{Link|https://www.google.com/maps/?q{{=}}47.411%20N%2027.184%20W|47.411&nbsp;N<br>27.184&nbsp;W}} |landArea= 6.38&nbsp;km&sup2; (1&nbsp;m step) |totalArea= 16.78&nbsp;km&sup2; |minMaxAltitude= min. -163&nbsp;m<br>max. 148.38&nbsp;m |dimensions= 4096&nbsp;m &times; 4096&nbsp;m |resolution= 2&nbsp;m |basedOn= {{n/a}} }} {{Feature|quote|A small overseas territory, Arland officially belongs to the microstate of {{Link|Arma Reforger:Everon}}. Although remote and sparsely populated, this link in the Malden Islands chain is tempered by the presence of a major Soviet airbase — putting it at the forefront of Cold War tensions. Beyond the razor wire fences, close-knit communities can also be found. Arleville and Beauregard. Here, Czech-speaking locals carry on as they have for hundreds of years. Toiling the sea and working the land, attentive to the natural beauty that surrounds them. | {{Link|https://reforger.armaplatform.com/game|{{armaR}} website}} }}

== Gallery ==

<gallery mode="slideshow" showthumbnails> File:armareforger_arland-1.jpg File:armareforger_arland-2.jpg File:armareforger_arland-3.jpg File:armareforger_arland-4.jpg File:armareforger_arland-5.jpg File:armareforger_arland-6.jpg File:armareforger_arland-7.jpg </gallery>

{{GameCategory|armaR|Content|Terrains}}
9aq127l91tcosqmzz3a82si8jwsk3kf

# Arma Reforger:Everon

5050
35046
376396
376389
2025-10-10T15:02:58Z
Lou Montana
10739
Some wiki formatting
376396
wikitext
text/x-wiki
{{Infobox/Terrain |name= Eden |wbLink= enfusion://WorldEditor/worlds/Eden/Eden.ent |image= [[File:armareforger_everon-postcard.jpg|300px]]<br>Welcome to Everon! |defaultDateTime= 1989-08-14 12:00:00 |season= Summer |coords= {{Link|https://www.google.com/maps/?q{{=}}47.685%20N%2027.311%20W|47.685&nbsp;N<br>27.311&nbsp;W}} |landArea= 51.59&nbsp;km&sup2; (1&nbsp;m step) |totalArea= 163.84&nbsp;km&sup2; |minMaxAltitude= min. -204.78&nbsp;m<br>max. 375.53&nbsp;m |dimensions= 12.8&nbsp;km &times; 12.8&nbsp;km |resolution= 2&nbsp;m |basedOn= {{Link|https://en.wikipedia.org/Krk|Krk}} island }} '''Everon''' is an island of the Malden archipelago. It was historically [[Everon|first introduced]] in {{GameCategory|ofp|link= y}} and is revisited in {{GameCategory|armaR|link= y}}.

Its landscape is based on the Croatian island of {{Link|https://en.wikipedia.org/Krk|Krk}}.

{{Feature|quote|Part of a Mid-Atlantic archipelago, this independent nation gained international attention in 1985 when a rogue Soviet general staged an unsuccessful invasion.<!-- --> Although a small and tranquil island, quietly pursuing its own socialist ideals, it remains a geostrategic prize and home to a permanent US garrison.<!-- --> Following years of peace, Everon awaits the consequences of a war, arising beyond its shores.<!-- --> Torn between the machinations of world powers, it is only a matter of time before the first expeditionary force arrives and returns the so-called 'Naval of the Sea' to a state of bitter conflict. | {{Link|https://reforger.armaplatform.com/game|{{armaR}} website}} }}

{{Feature|informative|See also the first [[Everon]] from 2001.}}

== Gallery ==

<gallery mode="slideshow" showthumbnails> File:armareforger_everon-1.jpg File:armareforger_everon-2.jpg File:armareforger_everon-3.jpg File:armareforger_everon-4.jpg File:armareforger_everon-5.jpg File:armareforger_everon-6.jpg File:armareforger_everon-7.jpg File:armareforger_everon-8.jpg File:armareforger_everon-9.jpg </gallery>

{{GameCategory|armaR|Content|Terrains}}
adl7qnz5apalgkiknkmls6vyryenm6e

# Arma Reforger:Kolguyev

5050
49323
377231
376907
2026-01-02T02:48:17Z
Lou Montana
10739
Add gallery and website description
377231
wikitext
text/x-wiki
{{Infobox/Terrain |name= Kolguyev |wbLink= enfusion://WorldEditor/worlds/Cain/Cain.ent |image= [[File:armaR-cain_preview.jpg|300px]]<br>Return to Kolguyev! |defaultDateTime= 1989-10-09 12:00:00 |season= Autumn |coords= {{Link|https://www.google.com/maps/?q{{=}}52.372%20N%2024.024%20W|52.372&nbsp;N<br>24.024&nbsp;W}} |landArea= 39.47&nbsp;km&sup2; (1&nbsp;m step) |totalArea= 163.84&nbsp;km&sup2; |minMaxAltitude= min. -204.78&nbsp;m<br>max. 699.28&nbsp;m |dimensions= 12.8&nbsp;km &times; 12.8&nbsp;km |resolution= 2&nbsp;m |basedOn= <nowiki/> * {{Link|https://en.wikipedia.org/wiki/Tenerife}} for the landscape * {{Link|https://en.wikipedia.org/wiki/Kolguyev_Island|Kolguyev}} for the name }}<!-- [[File:armaR-kolguyev-postcard.jpg|thumb|right|Welcome to Kolguyev!]] yeah, I don't think so :D --> '''Kolguyev''' (Kolgujev (CZ), Колгу́ев (RU), Kolguyev (EN)) is an island of the Malden archipelago and part of the Soviet Union's territory. It was historically [[Kolgujev|first introduced]] in {{GameCategory|ofp|link= y}} and is revisited in {{GameCategory|armaR|link= y}}.

Its landscape is based on {{Link|https://en.wikipedia.org/wiki/Tenerife}} island, while its name is based on the real-life {{Link|https://en.wikipedia.org/wiki/Kolguyev_Island|Kolguyev}} island in the Barents Sea. <!-- {{Feature|quote | TBA | {{Link|https://reforger.armaplatform.com/game|{{armaR}} website}} }} -->

{{Feature|informative|See also the first [[Kolgujev|Kolgu''j''ev]] from 2001's {{Name|ofp}}.}}

{{Feature|quote| Kolguyev is a small landmass around 300 km north of the Malden archipelago, its dominant feature being a dormant volcanic mountain peak.<!-- -->A territory of the Soviet Union, Kolguyev has suffered decades of severe environmental degradation from mining operations and is now virtually deserted, its settlements long abandoned.<!-- -->All that remains is a strong Soviet military garrison due to the strategic value of the island on the geopolitical stage. | {{Link|https://reforger.armaplatform.com/game|{{armaR}} website}} }}

== Gallery ==

<gallery mode="slideshow" showthumbnails> File:armaR-kolguyev_1.jpg File:armaR-kolguyev_2.jpg File:armaR-kolguyev_3.jpg File:armaR-kolguyev_4.jpg File:armaR-kolguyev_5.jpg File:armaR-kolguyev_6.jpg File:armaR-kolguyev_7.jpg </gallery>

{{GameCategory|armaR|Content|Terrains}}
75v11a623cokveqt4io0f7tzajr716n

# Arma Reforger:Game Master Tutorial

5050
33054
336140
329014
2022-12-08T12:46:50Z
Lou Montana
10739
Add the hosting back
336140
wikitext
text/x-wiki
{{Wiki|WIP}} {{TOC|side}} {{Feature|informative|See [[Arma Reforger:Game Master|Game Master]] for information about controls and the interface.}} == Start Game Master ==

The game then shows the following screen: it allows to choose the terrain on which the Conflict game will happen, as well as the option to play in single player ("Play") or in multiplayer by joining a network session ("Find server") or hosting a new one ("Host").

== Place Assets ==

=== Place an Asset ===

* Press {{Controls|Tab}} to display the Asset Browser * If needed, click the filters on the right * Click the wanted asset * Click where the asset should be placed

=== Place a Player Unit ===

* Press {{Controls|Space}} ** if a player unit does not exist, the Asset Browser comes up to pick an infantry unit ** if a player unit does exist and is alive, it is teleported under the cursor

== Asset Operations ==

=== Select Assets ===

Many of the following operations apply to selected assets. In order to select assets, hover or select (by click or rectangle selection) one or multiple assets. A click on a group icon selects all its units.

=== Move Assets ===

Drag and drop the asset to its wanted position.

Hold {{Controls|Alt}} and move the mouse / Hold {{Controls|padRB}} and {{Controls|padLS}} left/right to change the asset's altitude.

Hold {{Controls|Shift}} and move the mouse / Hold {{Controls|padRB}} and {{Controls|padLS}} up/down to change the asset's orientation.

Use {{Controls|RMB}} to cancel position/direction changes.

=== Change Status ===

Heal, Resupply, Set On Fire, Extinguish are some of the options found in the contextual menu. To open the contextual menu, right-click on an Asset.

==== Heal ==== Set asset's health back to 100%.

==== Resupply ==== Refill asset's magazines/ammunition to their default value.

==== Set On Fire ==== Set the asset on fire.

==== Extinguish ==== Extinguish the fire.

==== Cast Lightning ==== This creates a lightning strike on the target, destroying it

==== Start Bleeding ==== (soldier only)

This makes the soldier start bleeding and need a bandage

==== Refuel ==== (vehicle only)

This refills the vehicle's fuel tank instantly

=== Edit Advanced Settings ===

Double-click on the asset or right-click and pick the "Edit Properties" option from the contextual menu to edit advanced asset settings, such as damage, blood level for human or fuel level for vehicles.

A dead human or a destroyed vehicle cannot be resurrected this way.

=== Duplicate Assets ===

Right-click on the asset and pick the "Place entity anew" option from the contextual menu.

=== Neutralise Assets ===

Press {{Controls|End}}. Alternatively, right-click on the asset and pick the "Neutralize" option from the contextual menu to neutralise the asset.

=== Remove Assets ===

Press {{Controls|Del}}. Alternatively, right-click on the asset and pick the "Delete" option from the contextual menu.

== Group Operations ==

=== Move ===

Move the group by drag and drop action.

{{Wiki|TODO|Add more operations}}

{{GameCategory|armaR|Content|Tutorials}}
hwu0lsw5qh3s322acc14w089wbr0jw0

# Arma Reforger:Development Executables

5050
38191
353224
353223
2024-03-13T13:46:21Z
Lou Montana
10739
Some wiki formatting
353224
wikitext
text/x-wiki
{{GVI|armaR|1.1.0}}

The Workbench now boasts the capabilities to be connected to new special versions of the game client and server executables. It is now possible to debug not only Workbench Game and/or Peer Tool but also proper Client and Server environments.

{{Feature|important| Trying to connect Workbench debugging tools into a non Diag executable is not possible, and non Diag executables can not connect to Diag environments. This means that a non Diag client can not connect to a Diag server, and non Diag executables can not connect to Workbench debugging tools. }}

The executables that provide this functionality are suffixed by {{hl|Diag}} on their file name, making it clear to understand what executables are compatible for debugging capabilities: * Renamed executables: ** {{hl|ArmaReforgerWorkbenchSteam.exe}} is now {{hl|ArmaReforgerWorkbenchSteam'''Diag'''.exe}} * New executables: ** {{hl|ArmaReforgerSteam'''Diag'''.exe}} which is the same as {{hl|ArmaReforgerSteam.exe}} but with debugging capabilities ** {{hl|ArmaReforgerServer'''Diag'''.exe}} which is the same as {{hl|ArmaReforgerServer.exe}} but with debugging capabilities<!-- -->{{Feature|important|This affects Windows and Linux server environments.}}

The Diag executables provides the ability to connect the Workbench to them but also to use all the developer options for the game that can be found in the Workbench internal game, meaning that the {{Link|Arma Reforger:Diag Menu}} and other tools are available.

{{GameCategory|armaR|Modding}}
bcc4fmb2o9x0b9n3xouebh70aazaskd

# Arma Reforger:Directory Structure

5050
32509
321710
2022-05-19T11:59:11Z
Lou Montana
10739
Page creation
321710
wikitext
text/x-wiki
{{TOC|side||3}} __NOEDITSECTION__ This page represents the internal organisation of assets/game files. The directories are usually well named and self-explanatory; see below for more detailed explanations.

{| class="wikitable" ! colspan="5" | Directory Tree ! Description |- | ==== {{Color|green|AI}} ==== | | | | | This directory contains AI-related information, such as behaviour trees. AI is used in computer-managed human entities, but also in environmental wildlife |- | ==== {{Color|green|Anims}} ==== | | | | | Main category holding configuration and actual character animations

Contains also procedural animations shared between assets |- | | style="color: darkorange" | anm | | | | Folder with actual animations |- | | style="color: darkorange" | export_profiles | | | | |- | | style="color: darkorange" | proc | | | | Place for shared procedural animations (wheel or turret movement, small props animations) |- | | style="color: darkorange" | workspaces | | | | Contains main character configuration |- | ==== {{Color|green|Assets}} ==== | | | | | |- | | style="color: darkorange" | _SharedData | | | | Data that can be shared between all the assets |- | | style="color: darkorange" | _SharedMaterials | | | | Materials that can be shared between all the assets |- | | style="color: darkorange" | Characters | | | | This folder contains human characters and various equipment models and materials |- | | | style="color: brown" | Basebody | | | Contains models and materials for base character - without any equipment (only tactical underwear) |- | | | style="color: brown" | Footwear | | | Contains footwear models and materials |- | | | style="color: brown" | HeadGear | | | Contains head gear (caps, helmets, etc) models and materials |- | | | style="color: brown" | Heads | | | Contains character heads models and materials |- | | | style="color: brown" | Uniforms | | | Contains character uniforms (jackets, pants, etc) models and materials |- | | | style="color: brown" | Vests | | | Contains character vests (suspenders, bullet proof vests, chestrigs, etc) models and materials |- | | style="color: darkorange" | Clutter | | | | This folder contains various terrain clutter data - both masks and 3D models and materials |- | | | style="color: brown" | Masks | | | Contains distribution mask (per surface clutter) - a 2D texture which store information of distribution and max height for clutter '''Sets''' which define where (per pixel in texture) will appear each of clutter Sets |- | | | style="color: brown" | Procedural | | | Contains procedural 2D clutter mask |- | | | style="color: brown" | Rocks | | | Contains 3D model and materials for clutter rocks |- | | | style="color: brown" | Vegetation | | | Contains 3D model and materials for clutter vegetation |- | | | | Debris | | |- | | | | Grass | | |- | | | | Mushrooms | | |- | | | | Plants | | |- | | style="color: darkorange" | Conflict | | | | |- | | style="color: darkorange" | Decals | | | | Contains 2D models and materials for various in game decals (road dirt, debris, grass, runway markings, etc) |- | | style="color: darkorange" | Editor | | | | Contains models and materials used by in-game editor |- | | style="color: darkorange" | Items | | | | Contains models and materials for various interactive items like food, part of equipment (flash lights, backpacks, radios, etc) and similar |- | | style="color: darkorange" | Props | | | | Contains models and materials for props |- | | style="color: darkorange" | Rocks | | | | Contains models and materials for large rocks |- | | style="color: darkorange" | Structures | | | | Contains models and materials for various structures like houses, harbours, sheds, etc |- | | style="color: darkorange" | Vegetation | | | | Contains models and materials for vegetation like trees or bushes |- | | style="color: darkorange" | Vehicles | | | | Contains data related to vehicles like models, materials, textures and animations |- | | | style="color: brown" | Airplanes | | | Category for fixed wing aircrafts |- | | | style="color: brown" | Boats | | | Category for boats (ships, kayaks, pontoons, etc) |- | | | style="color: brown" | Helicopters | | | Category for helicopters |- | | | style="color: brown" | Tracked | | | Category for tracked vehicles (tanks, APCs, etc) |- | | | style="color: brown" | Wheeled | | | Category for wheeled vehicles (cars, trucks, wheeled APCs) |- | | | | Ural4320 | | In this folder there are models, animations, materials and textures related to Ural-4320 |- | | | | | anm | Animation files specific to given asset - they are injected to main graph through prefab |- | | | | | Data | Materials and textures tied to specific vehicle |- | | | | | Dst | Dst folders contains destructible parts of the vehicle |- | | | | | Lights | This folder contains various light parts of the model like emissive surfaces when given light bulb is turned on |- | | | | | workspaces | Animation workspace specific to given asset - those workspaces are |- | | style="color: darkorange" | Weapons | | | | Contains models and materials for weapons, ammunitions, tracers and accessories (optics, flashlights etc) |- | | | style="color: brown" | Ammo | | | |- | | | | Bullets | | |- | | | | Grenades | | |- | | | | Missiles | | |- | | | | Shells | | |- | | | | Tracers | | |- | | | style="color: brown" | Accessories | | | |- | | | | Scopes | | |- | | | | Lasers | | |- | | | style="color: brown" | Attachments | | | |- | | | | Bayonets | | |- | | | | Flashlights | | |- | | | | Muzzle | | |- | | | | Optics | | |- | | | | Underbarrel | | |- | | | style="color: brown" | Flares | | | |- | | | style="color: brown" | Grenades | | | |- | | | style="color: brown" | Handguns | | | |- | | | style="color: brown" | HeavyWeapons | | | |- | | | style="color: brown" | Launchers | | | |- | | | style="color: brown" | MachineGuns | | | |- | | | style="color: brown" | Magazines | | | |- | | | style="color: brown" | Melee | | | Melee weapons - empty as of now |- | | | style="color: brown" | Mortars | | | |- | | | style="color: brown" | Pods | | | |- | | | style="color: brown" | Rifles | | | |- | | | | M16A2 | | Contains the 3D model |- | | | | | Data | Contains textures and materials |- | | | style="color: brown" | Tripods | | | |- | ==== {{Color|green|Backend}} ==== | | | | | - |- |- | ==== {{Color|green|Brushes}} ==== | | | | | Contains custom brushes for sculpting and surfaces painting |- | ==== {{Color|green|Common}} ==== | | | | | Contains the most common data, like shared textures/particles/config/default keybinds/physics materials |- | | style="color: darkorange" | Materials | | | | This folder contains common materials used across the game |- | | | style="color: brown" | ColorPalette | | | Contains very simple materials used for assets last LODs |- | | | style="color: brown" | Game | | | Contains game materials |- | | | style="color: brown" | Physics | | | Contains physics materials |- | | | style="color: brown" | Vehicles | | | Contains Contact Surface materials - vehicle contact material that defines the behavior of vehicles on such surface (friction, bumpiness, wheel resistance) |- | | style="color: darkorange" | Models | | | | |- | | style="color: darkorange" | Postprocess | | | | |- | | style="color: darkorange" | Textures | | | | |- | ==== {{Color|green|Configs}} ==== | | | | | |- | | style="color: darkorange" | Campaign | | | | This folder contains configs related to Conflict game mode: vehicle list, mission settings, etc |- | | style="color: darkorange" | Core | | | | |- | | style="color: darkorange" | Editor | | | | Contains configs related to Game Master (in-game editor): placeable unit list, compositions, editor settings, etc |- | | style="color: darkorange" | Weapons | | | | Contains configs related to weapon configuration (ammo mix in magazine) |- | | style="color: darkorange" | Workbench | | | | Contains config files for Workbench-related utilities (plugins/extensions) |- | | style="color: darkorange" | WorldHeaders | | | | Contains configs for world headers - files which contain information about the terrain like user-friendly name |- | ==== {{Color|green|Docs}} ==== | | | | | Contains configuration for generation documentation via Doxygen |- | ==== {{Color|green|Extern}} ==== | | | | | Contains External libraries such as e.g BattlEye |- | ==== {{Color|green|Language}} ==== | | | | | Localisation files. Every language has its file, unlike older Stringtable CSV/XML |- | ==== {{Color|green|Missions}} ==== | | | | | This folder contains scenario configurations |- | ==== {{Color|green|Particles}} ==== | | | | | Shared particles |- | ==== {{Color|green|PrefabLibrary}} ==== | | | | | Used for terrain making; includes templates of all maps assets |- | ==== {{Color|green|Prefabs}} ==== | | | | | Configuration. Its structure almost mirrors the Assets directory's ('''not''' a 1:1) |- | ==== {{Color|green|PrefabsEditable}} ==== | | | | | Contains prefabs which are available in in-game editor |- | | style="color: darkorange" | Auto | | | | Contains prefabs which are '''automatically generated''' by Workbench plugin. Don't touch it manually unless you know what you are doing! |- | ==== {{Color|green|Publishing}} ==== | | | | | Contains installation information |- | ==== {{Color|green|Scripts}} ==== | | | | | Contains scripting and logic for Arma Reforger and Workbench |- | | style="color: darkorange" | Game | | | | Contains common scripts used across multiple games |- | | style="color: darkorange" | GameCode | | | | Script layer (main editor work environment)

Specific for current project |- | | style="color: darkorange" | Workbench | | | | Contains common editor plugins/tools |- | | style="color: darkorange" | WorkbenchGame | | | | Editor plugins/tools

Specific for current project |- | ==== {{Color|green|Sounds}} ==== | | | | | Contains samples (wav) and configuration (audio configuration projects and signals) for all sounds in game |- | | style="color: darkorange" | _SharedData | | | | |- | | style="color: darkorange" | Character | | | | |- | | style="color: darkorange" | Compositions | | | | |- | | style="color: darkorange" | Destruction | | | | |- | | style="color: darkorange" | Editor | | | | |- | | style="color: darkorange" | Environment | | | | |- | | style="color: darkorange" | Explosions | | | | |- | | style="color: darkorange" | Impacts | | | | |- | | style="color: darkorange" | Items | | | | |- | | style="color: darkorange" | Music | | | | |- | | style="color: darkorange" | Props | | | | |- | | style="color: darkorange" | RadioBroadcast | | | | |- | | style="color: darkorange" | RadioProtocol | | | | |- | | style="color: darkorange" | Structures | | | | |- | | style="color: darkorange" | UI | | | | |- | | style="color: darkorange" | Vegetation | | | | |- | | style="color: darkorange" | Vehicles | | | | |- | | style="color: darkorange" | VON | | | | |- | | style="color: darkorange" | Weapons | | | | |- | ==== {{Color|green|Terrains}} ==== | | | | | |- | | style="color: darkorange" | Common | | | | Contains common data |- | | | style="color: brown" | Sky | | | |- | | | style="color: brown" | Surfaces | | | |- | | | style="color: brown" | Water | | | |- | | | style="color: brown" | WeatherPresets | | | |- | | style="color: darkorange" | FlatLand | | | | |- | ==== {{Color|green|UI}} ==== | | | | | Contains UI layouts, fonts, textures and sounds |- | | style="color: darkorange" | Data | | | | |- | | style="color: darkorange" | Fonts | | | | |- | | style="color: darkorange" | Imagesets | | | | |- | | style="color: darkorange" | Layouts | | | | |- | | style="color: darkorange" | Materials | | | | |- | | style="color: darkorange" | Styles | | | | |- | | style="color: darkorange" | Textures | | | | |- | ==== {{Color|green|WBData}} ==== | | | | | Contains Workbench-related data like custom components icons |- | ==== {{Color|green|Worlds}} ==== | | | | | Contains worlds |- | | style="color: darkorange" | Eden | | | | |}

{{GameCategory|armaR|Modding}}
7gej1h5ljwkrw7av2p551nhcy64pf1z

# Arma Reforger:File Types

5050
32448
376371
363551
2025-10-08T18:27:10Z
Lou Montana
10739
Add 1.6.0 .snd file format
376371
wikitext
text/x-wiki
__NOEDITSECTION__ This page lists file types and their respective extensions with which {{GameCategory|armaR|link= y}} and the {{GameCategory|armaR|Modding|Official Tools|text= Workbench}} work. {{TOC|horizontal|||y}}

{| class="wikitable sortable" ! style="font-size: 0.8em" | Extension ! File Type ! style="min-width: 10em" | Saved/Used by ! style="width: 100%" | Description |- | ==== .acp ==== | Audio component | {{Link|Arma Reforger:Audio Editor}} | Describe audio playback Manages sound events:

* event ("SOUND_SHOT", "SOUND_RELOAD" etc) * sound file + parameters (signals, playback rules etc) Referenced by BaseSoundComponent children |- | ==== .adeb ==== | Animation debug | Animation offline debugger | Binary stream format

Contains: * 16b - File version defined in AnimDebuggerSerializationVersion * List of all debugged descriptors * For each frame list of all debug instances File can be loaded in animation editor using Live debug tab |- | ==== .ae ==== | Animation Events Table | {{Link|Arma Reforger:Animation Editor}} | Lists all events used in the animation workspace

StepEvent, SoundEvent, SynchronizationEvent, etc |- | ==== .afm ==== | Audio Final Mixer | {{Link|Arma Reforger:Audio Editor}} | "Sound mixer" referenced by the {{Link|#.acp}}

Takes all the sound inputs and produces the final sound output |- | ==== .agf ==== | Animation graph file | {{Link|Arma Reforger:Animation Editor}} | Contains sheets (that contain {{Link|Arma Reforger:Animation Editor: Nodes|Animation Nodes}}) of an animation graph <!-- [[File:armar_file-types-agf-illustration.png|frameless|232px]] --> |- | ==== .agr ==== | Animation graph | {{Link|Arma Reforger:Animation Editor}} | "root format" sheets collection with graph parameters, e.g commands, variables, IK chains, etc

Depends on {{Link|#.ast}} |- | ==== .anm ==== | Animation file | {{Link|Arma Reforger:Animation Editor}} + various plugins | Binary animation file |- | ==== .asc ==== | Height map (Esri grid) | {{Link|Arma Reforger:World Editor}} | Height map file which can be exported or imported in Workbench (Terrain tools in World Editor) {{Feature|informative|Not used in runtime neither directly by the editor - only for import/export.}} |- | ==== .asi ==== | Animation Set Instance | {{Link|Arma Reforger:Animation Editor}} | Bridges {{Link|#.anm}} with {{Link|#.ast}} abstract names

Depends on {{Link|#.ast}} See {{Link|Arma Reforger:Animation Editor: Templates and Instances Tutorial|Animation Editor: Templates and Instances Tutorial}} |- | ==== .ast ==== | Animation Set Template | {{Link|Arma Reforger:Animation Editor}} | Structural skeleton to be filled by {{Link|#.asi}}

Provides a list of entries to be filled See {{Link|Arma Reforger:Animation Editor: Templates and Instances Tutorial|Animation Editor: Templates and Instances Tutorial}} |- | ==== .asy ==== | Animation Sync Table | {{Link|Arma Reforger:Animation Editor}} | See {{Link|Arma Reforger:Animation Editor: Sync Tutorial|Animation Editor: Sync Tutorial}} |- | ==== .aw ==== | Animation Workspace | {{Link|Arma Reforger:Animation Editor}} | {{GameCategory|armaR|Modding|Official Tools|text= Workbench}}'s Animation Editor "project" - saves/opens current workspace |- | ==== .bt ==== | Behavior tree | {{Link|Arma Reforger:Behavior Editor}} | AI behaviour tree |- | ==== .bterr ==== | Terrain data | {{Link|Arma Reforger:World Editor}} | Terrain data - general terrain height map editor information |- | ==== .bttile ==== | Terrain data | {{Link|Arma Reforger:World Editor}} | Terrain data, height-map data for terrain tile used by the editor (original imported height map without modifications by roads etc) |- | ==== .c ==== | Enforce Script Source | {{Link|Arma Reforger:Script Editor}} | Enforce Script Source file |- | ==== .conf ==== | Generic config | {{Link|Arma Reforger:Resource Manager}}'s {{Link|Arma Reforger:Resource Manager: Config Editor|Config Editor}} | |- | ==== .ct ==== | Component Template | {{Link|Arma Reforger:World Editor}} | Defines an Entity Component |- | ==== .dds ==== | Texture | Art Tools | Source image format - other formats are also supported like png, jpeg, tiff, tga, hdr |- | ==== .desc ==== | Terrain dialogs configuration | {{Link|Arma Reforger:World Editor}} | Configuration of terrain texture import/generating dialogs (height map, satellite texture, normal map) |- | ==== .edds ==== | Enfusion DDS Texture | {{Link|Arma Reforger:Resource Manager}}'s {{Link|Arma Reforger:Resource Manager: Texture Editor|Texture Editor}} | Enfusion proprietary (extended) compressed DDS texture |- | ==== .emat ==== | Material Definition | {{Link|Arma Reforger:Resource Manager}} | Defines material for 3D objects, terrain, post processes, water, sky objects etc |- | ==== .ent ==== | World Scene | {{Link|Arma Reforger:World Editor}} | World contains terrain and all other objects that make up the your game world |- | ==== .et ==== | Entity Template | {{Link|Arma Reforger:World Editor}} | Defines an Entity content (prefab) |- | ==== .fbx ==== | 3D model source file | 3D software | {{Link|#.txo}} and {{Link|#.xob}} source format |- | ==== .fnt ==== | Font | {{Link|Arma Reforger:Resource Manager}}'s {{Link|Arma Reforger:Resource Manager: Font Viewer|Font Viewer}} | Font for UI widget system, binary format |- | ==== .gamemat ==== | Game material | {{Link|Arma Reforger:Resource Manager}}'s {{Link|Arma Reforger:Resource Manager: Config Editor|Config Editor}} | Definition of in-game material (properties, sound, etc) |- | ==== .gproj ==== | Project-specific Settings | {{Link|Arma Reforger:World Editor}} | Every Project has its own settings stored here |- | ==== .imageset ==== | ImageSet Definition | {{Link|Arma Reforger:Resource Manager}}'s {{Link|Arma Reforger:Resource Manager: Imageset Editor|Imageset Editor}} | Defines a set of images by cuts from a texture <!-- [[File:armar_file-types-imageset-illustration.png|frameless|300px]] --> |- | ==== .layer ==== | World Layer | {{Link|Arma Reforger:World Editor}} | World file (.ent) can have mutliple layers stored in separate .layer files - can only be opened through the {{Link|#.ent}} file |- | ==== .layout ==== | Layout Definition | {{Link|Arma Reforger:Resource Manager}}'s {{Link|Arma Reforger:Resource Manager: Layout Editor|Layout Editor}} | UI layout definition <!-- [[File:armar_file-types-layout-illustration.png|frameless|289px]] --> |- | ==== .meta ==== | Meta Information | {{Link|Arma Reforger:Resource Manager}} | Every registered asset has its meta file containing asset-specific settings and asset GUID |- | ==== .nmn ==== | Navmesh | Navmesh Generator Tool | Binary file with single navmesh instance - see {{Link|Arma Reforger:Navmesh Tutorial|Navmesh Tutorial}} |- | ==== .pak ==== | Package (of data) | {{GameCategory|armaR|Modding|Official Tools|text= Workbench}} | Game or Mod data archive |- | ==== .pap ==== | PA project | {{Link|Arma Reforger:Procedural Animation Editor}} | See {{Link|Arma Reforger:Procedural Animation Editor}} |- | ==== .physmat ==== | Physics material | {{Link|Arma Reforger:Resource Manager: Config Editor|Config Editor}} | Physical material (bounciness, adherence etc) |- | ==== .pre ==== | ResourceViewer Preset | Resource Browser | A preset with several options to allow customisation of Workbench's preview windows (usually saved in {{hl|%userprofile%\Documents\My Games\ArmaReforgerWorkbench\profile\ResourceViewerPresets}}) |- | ==== .ptc ==== | Particle System Definition | {{Link|Arma Reforger:Particle Editor}} | Particle effects definition |- | ==== .ragdoll ==== | Ragdoll Definition | {{Link|Arma Reforger:Resource Manager}} | Character ragdoll file |- | ==== .rdb ==== | Resource Database | {{GameCategory|armaR|Modding|Official Tools|text= Workbench}} | Resource database listing all resources in the project |- | ==== .sig ==== | Signal | {{Link|Arma Reforger:Audio Editor}} | Describes the logic of playing an audio component or encapsulate manipulation parameters - this audio resource is shared among audio components |- | ==== .siga ==== | PA signal | {{Link|Arma Reforger:Procedural Animation Editor}} | Describes the control logic for parts of a PA project - this resource is shared among PA projects |- | ==== .smap ==== | Soundmap data | {{Link|Arma Reforger:World Editor}} | Information for music and audio effects |- | ==== .snd ==== | Sound container | {{Link|Arma Reforger:Audio Editor}} | {{GVI|armaR|1.6.0}} A wrapper for {{Link|#.wav}} and {{Link|https://en.wikipedia.org/wiki/Opus_(audio_format)|Opus}} .ogg files |- | ==== .st ==== | String Table | {{Link|Arma Reforger:String Editor}} | Strings used for localisation |- | ==== .stars ==== | Database | Proprietary format | Runtime database of stars. Contains up to 100.000 stars describing their real positions and colors<br> Array of Hunks (ID = "ITEM") each Hunk describes a Star object with following data: * Ra - Right ascension (float) * Dec - Declination (float) * ProMoRa - Proper motion in right ascension (float) * Parallax - (float) * Magnitude - Star brightness (float) * Color - Star color (uint32 RGBA) * HIP Catalog - Dummy (not used uint32) * Name - Star name, with max. 256 characters length {{Link|https://cdsarc.cds.unistra.fr/viz-bin/Cat?I/311|Source data}} |- | ==== .styles ==== | Widget Style Definition | {{Link|Arma Reforger:Resource Manager}}'s {{Link|Arma Reforger:Resource Manager: Styles Editor|Styles Editor}} | Defines UI style |- | ==== .terr ==== | Terrain data | {{Link|Arma Reforger:World Editor}} | Terrain height map information |- | ==== .topo ==== | Topography data | {{Link|Arma Reforger:World Editor}} | Information for 2D map |- | ==== .ttf ==== | TrueType Font | Resource Browser | Source font file format supported by Enfusion |- | ==== .ttile ==== | Terrain data | {{Link|Arma Reforger:World Editor}} | Terrain data, height-map data for terrain tile used in run time (here are baked modifications by roads etc) |- | ==== .txa ==== | Animation file | {{Link|Arma Reforger:Animation Editor}} | Text animation file (source for {{Link|#.anm}}) - source animation |- | ==== .txo ==== | Model | Resource Browser + various plugins (see {{Link|Arma Reforger:Enfusion Blender Tools|Enfusion Blender Tools}}) | Text model file (source for {{Link|#.xob}}) - source model |- | ==== .vhcsurf ==== | Vehicle surface | {{Link|Arma Reforger:Resource Manager: Config Editor|Config Editor}} | Surface properties that are used inside vehicle simulation (roughness, steering noise etc.) |- | ==== .wav ==== | Supported audio file format | Audio software | WAV file format |- | ==== .xob ==== | Model | Resource Browser | Binary model file |}

{{GameCategory|armaR|Modding}}
8t5a6l1bgse5m7ozqcr9nnjcxw6dij9

# Arma Reforger:Script Profiling

5050
34233
339184
336162
2023-04-27T15:28:09Z
Lou Montana
10739
Remove External Profiler possibility
339184
wikitext
text/x-wiki
'''Script Profiling''' allows to profile script performance while it is running.

== In-Game Profiler ==

Enable the in-game profiler from the {{hl|[[Arma Reforger:Diag Menu|Diag Menu]] > Statistics > Script Profiler}} - the value can be set to {{hl|frame}} or {{hl|continuous}}.

<!-- nope, sorry! == External Profiler ==

Allow an external profiler by either:

* {{hl|[[Arma Reforger:Diag Menu|Diag Menu]] > Statistics > Script prof. External}} - set the value to {{hl|true}} * start the game with the {{hl|[[Arma Reforger:Startup Parameters#scriptExtProfiler|-scriptExtProfiler]]}} startup parameter

In the profiler tool look for the "Scr::" prefix, or expand "#Main thread" in the stack view. -->

== Memory Allocation ==

It is possible to dump all allocations from script:

* Run the game with the {{hl|[[Arma Reforger:Startup Parameters#checkInstance|-checkInstance]]}} startup parameter * Call the following from script: <enforce inline>DumpInstances(/* bool csvFormatting = */ true);</enforce> * This outputs memory allocations in the logs to the CSV format <spoiler text="Show example"> ==== Script allocations (script side) ==== count,class,file,line,method 144,array<@AnimSoundEvent>,scripts/3_Game/InventoryItemType.c,16,LoadSoundEvents 1,ActionEatTetracyclineAntibiotics,scripts/4_World/Classes/UserActionsComponent/ActionConstructor.c,123,ConstructActions 1,Wetness,scripts/4_World/Classes/PlayerNotifiers/NotifiersManager.c,19,NotifiersManager 55,map<string,@WidgetCacheObject>,scripts/5_Mission/GUI/WidgetCacheObject.c,16,WidgetCacheObject 1,Param1<int>,scripts/3_Game/tools/UtilityClasses.c,24,Init 1,CraftGhillieTop,Scripts/4_World/Classes/Recipes/Recipes/_RecipeList.inc,11,CreateAllRecipes 1,array<@Param>,scripts/4_World/Plugins/PluginBase/PluginItemDiagnostic.c,23,PluginItemDiagnostic 861,array<SoundObjectBuilder>,scripts/3_Game/DayZAnimEventMaps.c,34,LoadTable </spoiler>

{{GameCategory|armaR|Modding}}
ik2ndqji8gsg4bbfcogkbpmmbmv8egs

# Arma Reforger:Workshop

5050
33079
373589
373588
2025-05-23T09:18:44Z
Lou Montana
10739
Fix
373589
wikitext
text/x-wiki
{{TOC|side}} The '''Workshop''' is where {{GameCategory|armaR|link= y}}'s mods are uploaded and can get obtained. It can be browsed and interacted directly in-game or on the {{Link|https://reforger.armaplatform.com/workshop|Workshop website}}.

== Usage ==

* Authors can upload mods on the Workshop: ** Using the {{GameCategory|armaR|Modding|Official Tools|text= Workbench}} ** The Workshop also stores the previous mod versions. {{Feature|warning|Only the last '''50''' versions are kept!}} * Users can download mods from the Workshop: ** by browsing the Workshop and subscribing to mods ** by joining a server that requires mods ** Removed mods (by author, by version, by administrator, etc) are deleted on user's system when synchronised

== Interface ==

<gallery mode="packed-hover" heights="150" style="max-width: 900px"> File:armareforger_workshop-mod-tile-subscribe.png|Default tile File:armareforger_workshop-mod-tile-download.png|Download File:armareforger_workshop-mod-tile-downloading.png|Downloading File:armareforger_workshop-mod-tile-canceldownload.png|Cancel download File:armareforger_workshop-mod-tile-enabled.png|Enabled File:armareforger_workshop-mod-tile-favourited.png|Favourited File:armareforger_workshop-mod-tile-disabled.png|Disabled </gallery>

=== Workshop ===

The Workshop is accessed through the game's main menu ("Workshop" tile). The main page lists pages of mods available on the workshop.

Top buttons allow to sort results by Popularity, Subscribers count, Rating, Recently added and Name.

==== Navigation ==== Go to left/right pages by clicking the left-right buttons, pressing {{Controls|Z}}/{{Controls|C}}, or pressing {{Controls|padLT}}/{{Controls|padRT}} on gamepad.

==== Filter ==== Access to filters by clicking on the the top-right Filter icon, pressing {{Controls|X}}, or pressing {{Controls|padX}} on gamepad.

=== Mod Details ===

Access the Mod Details by clicking on the tile (out of the centre's Download button) or using {{Controls|padA}} on gamepad.

== Actions ==

=== Download ===

Click on the tile's centre, enter the Mod Details page and click "Download", or press {{Controls|padY}} on gamepad. {{Feature|informative|A download can be cancelled by using the same action as to download it.}} {{Feature|consoles|<nowiki/> Due to console restrictions, download speed is limited to around 25 Mbps / '''~3.125 MB/s''' (see e.g {{Link|https://learn.microsoft.com/en-us/gaming/gdk/_content/gc/policies/console/certification-requirements#xr-133-local-storage-write-limitations-|XR-133: Local Storage Write Limitations}}).<br> Storage is also limited to '''25 GB''' on consoles. }}

=== Enable/Disable ===

Click on the on/off button, press {{Controls|T}}, or press {{Controls|padRSB}} on gamepad.

=== Like/Dislike ===

'''Mod Details''' action - use the "Like"/"Dislike" buttons to add/remove a like/dislike (positive/negative vote regarding this mod).

=== Add to Favorites ===

Click the star top-left of the tile, press {{Controls|F}}, or press {{Controls|padX}} on gamepad.

=== Remove ===

'''Mod Details''' action - use the "Delete" button to remove the Mod from your computer entirely.

=== Report ===

'''Mod Details''' action - use the "Report" button to report the Mod to {{Name|bi}}. The report reason can be one of: * Inappropriate content - e.g purposely offensive, warcrime promotion content etc. * Offensive language * Misleading/non-functional item - e.g game-crashing, or a vehicle mod only adding music and no vehicles * Other - e.g ripped content

{{Feature|warning|Do '''not''' report a mod for a wrong reason (e.g "I don't like it")! Misusing the report function on purpose may lead to Workshop usage sanctions.}} {{Feature|important| * Reporting a mod removes it from the local machine and hides it from Workshop view. * It is important to provide as much valid information as possible. :{{{!}} class{{=}}"wikitable valign-top" style{{=}}"margin: auto" ! style{{=}}"width: 50%" {{!}} Correct feedback ! Incorrect feedback {{!}}- {{!}} * This 3D model has been ripped from X game (or Y website) * This mod pretends to add AR-15 but it actually adds a chicken * This mod crashes my game when I place it from Game Master {{!}} * It's a stolen mod * It doesn't work * I don't like it {{!}}} }} <!-- === Report Author === -->

=== View Downloads ===

Press {{Controls|Tab}}, or press {{Controls|padY}} on gamepad to open Downloads; this window displays past and current downloads.

=== Downloaded Tab ===

Click the wanted tab, press {{Controls|Q}}/{{Controls|E}}, or press {{Controls|padLB}}/{{Controls|padRB}} to change tabs.

This tab allows to manage downloaded mods the same way as other mods.

== Development ==

=== Installation Directory ===

On PC, by default mods are downloaded to %userprofile%\Documents\My Games\ArmaReforger\addons

This can be changed by using the {{Link|Arma Reforger:Startup Parameters#addonDownloadDir|{{hl|addonDownloadDir}}}} startup parameter.

{{Feature|consoles|On consoles it is '''impossible''' to change the download location. The user is limited to '''25 GB''' of total storage for mods.}}

=== Debug Mode ===

Using the {{hl|WORKSHOP_DEBUG}} define through the {{Link|Arma Reforger:Startup Parameters#scrDefine|{{hl|scrDefine}}}} startup parameter adds a combo box allowing a mod creator to select a specific Workshop mod version.

; Example ArmaReforgerSteam.exe -scrDefine WORKSHOP_DEBUG

{{GameCategory|armaR|Modding}}
tg7ntfpq9wzl79vzq92z5irlk1q5xmr

# Arma Reforger:Animation Editor: Character Action Commands

5050
47102
371154
370971
2025-02-28T17:15:44Z
Lou Montana
10739
Fix categories
371154
wikitext
text/x-wiki
{{TOC|side}} == Commands ==

=== CMD_Weapon_Reload ===

<div class="float-right"> * 0 - none * 1 - rack bolt * 2 - attach the magazine, without racking the bolt * 3 - attach the magazine, with racking the bolt * 4 - detach + attach the magazine, without racking the bolt * 5 - detach + attach the magazine, with racking the bolt * 6 - detach mag (no attachment will follow) * 7 - insert a single projectile (rn for UGLs) * 8 - remove a single projectile (rn for UGLs) * 9 - remove all projectiles and then reinsert them (on UGLs) * 10 - skip all animations and reload </div> {| class="wikitable" ! Int ! Float ! Action |- | 1 | 0.0 | Racks the bolt on the weapon |- | 2 | {{n/a}} | Inserts a mag into the gun |- | 3 | 0.0 | Inserts a mag into the gun, and then racks the bolt |- | 4 | {{n/a}} | Removes the current magazine, and inserts a new one |- | 5 | 0.0 | Removes the current magazine, and inserts a new one, then racks the bolt |- | 1 | 1.0 | Releases the bolt on the weapon |- | 3 | 1.0 | Inserts a mag into the gun, and then releases the bolt |- | 5 | 1.0 | Removes the current magazine, and inserts a new one, then releases the bolt |}

{{GameCategory|armaR|Modding|Assets|Guidelines}} <!-- {{GameCategory|armaR|Modding|Assets|Weapon Animation|Tutorials}} -->
74r3qfzljm60xhsvwqhptk91qhksbz7

# Arma Reforger:Animation Instances Reference Table

5050
34363
373368
371155
2025-05-02T08:46:12Z
MarioE
11153
Player Instance made to not overflow the page, and show scrollbar instead.
373368
wikitext
text/x-wiki
Below tables provide reference of animations and [[Arma Reforger:Animation Export Profiles|export profiles]] which should be used when [[Arma Reforger:Enfusion Blender Tools: Import/Export Animation#Export animations from Blender|exporting TXA animations from Blender]].

== Rifle ==

[[Arma Reforger:Weapon Creation|'''Sample New Weapon''']] ({{Link|https://github.com/BohemiaInteractive/Arma-Reforger-Samples/blob/main/SampleMod_NewWeapon/Assets/Weapons/Rifles/SampleWeapon_01/Anims/SampleWeapon_01_Animations.blend|download link}}) is used here as a '''reference''', so not all animations are present - like ''Finger_trigger_in'' or ''Sight''. In such a case, '''animations of AK74''' are provided to give some guidance on what should be filled in. [[File:armareforger-export-profiles-rifle-reference.png|center|thumb|800x800px|Sample New Weapon export profiles example]]

=== Weapon Instance ===

{| class="wikitable sortable" ! Action name ! Description ! Animation take used ! Action used ! Export profile ! Export as |- | BoltPose | Poses of the bolt.

* First frame represents closed bolt * Last frame represents open bolt | 4 | w_sampleweapon_fire | 724_Weapon_Bolt | w_rfl_sampleweapon_01_bolt_pose |- | Finger_trigger_in | | 6 | | 999_Empty | |- | Finger_trigger_out | | 6 | | 999_Empty | |- | Fire | Animation of weapon being fired - trigger is pressed and bolt is doing one full cycle | 3 | w_sampleweapon_fire | 724_Weapon_Bolt_Trigger | w_rfl_sampleweapon_01_fire |- | Idle | Empty animation | 1 | | 999_Empty | |- | Idle_finger | Empty animation | 1 | | 999_Empty | |- | IKOffset | No animation assigned | - | - | - | - |- | Reload_InsertMag | Animation of inserting magazine into the weapon. 722_Weapon_MagRelease profile can be used if there is animated weapon magazine release on the weapon | 72 | rfl_sampleweapon_erc_insert_mag | 999_Empty | w_rfl_sampleweapon_01_mag_insert |- | Reload_RemoveMag | Animation of removing magazine from the weapon. 722_Weapon_MagRelease profile can be used if there is animated weapon magazine release on the weapon | 59 | rfl_sampleweapon_erc_remove_mag | 999_Empty | w_rfl_sampleweapon_01_mag_remove |- | ReloadActionBolt | Animation of racking the bolt | 36 | rfl_sampleweapon_erc_bolt_rack | 999_Empty | w_rfl_sampleweapon_01_bolt_rack |- | Safety | Safety mode animation. First frame safety mode, second single mode and third one is used for full auto | 3 | w_sampleweapon_safety | 701_Rifle_Idle | w_rfl_sampleweapon_01_safety |- | Sight | Iron sight adjustment animation. Amount of frames is equal to amount of zeroing modes defined in the weapon | 11 | | 723_Weapon_Sight | |- | Switch_Mode_Off | Empty animation for switching safety switch off. This animation need to have same amount of frames as the one in player instance | 16 | | 999_Empty | |- | Switch_Mode_On | Empty animation for switching safety switch on. This animation need to have same amount of frames as the one in player instance | 16 | | 999_Empty | |- | Trigger | Animation of trigger when its pressed | 4 | w_sampleweapon_fire | 721_Weapon_Trigger | w_rfl_sampleweapon_01_trigger |}

== Player Instance ==

{| class="wikitable sortable" style="overflow: auto;display: block;" ! Action name ! Description ! Number of frames ! Animation take used ! Export profile ! Exported as |- | BoltPose | - | - | - | - | - |- | Finger_trigger_in | | 6 | | 502_IK_RightHand | |- | Finger_trigger_out | | 6 | | 502_IK_RightHand | |- | Fire | Animation of weapon being fired - trigger is pressed and bolt is doing one full cycle | 3 | | 401_RIndexABS | |- | Idle | Empty animation | 1 | colspan="3" | using same animation as '''Safety''' |- | Idle_finger | Empty animation | 1 | | 502_IK_RightHand | |- | IKOffset | IK offset animation | 1 | p_sampleweapon_ik | 101_FullBodyABS | p_rfl_sampleweapon_01_offset |- | Reload_InsertMag | Animation of inserting magazine into the weapon | 72 | rfl_sampleweapon_erc_insert_mag

rfl_sampleweapon_pne_insert_mag | 252_UpperbodyADD_ArmsABS | p_rfl_sampleweapon_01_erc_mag_insert

p_rfl_sampleweapon_01_pne_mag_insert |- | Reload_RemoveMag | Animation of removing magazine from the weapon | 59 | rfl_sampleweapon_erc_remove_mag

rfl_sampleweapon_pne_remove_mag | 252_UpperbodyADD_ArmsABS | p_rfl_sampleweapon_01_erc_mag_remove

p_rfl_sampleweapon_01_pne_mag_remove |- | ReloadActionBolt | Animation of racking the bolt | 36 | rfl_sampleweapon_erc_bolt_rack

rfl_sampleweapon_pne_bolt_rack | 252_UpperbodyADD_ArmsABS | p_rfl_sampleweapon_01_erc_bolt_rack

p_rfl_sampleweapon_01_pne_bolt_rack |- | Safety | Safety mode animation. First frame safety mode, second single mode and third one is used for full auto | 3 | p_sampleweapon_ik | 502_IK_RightHand | p_rfl_sampleweapon_01_safety |- | Sight | Iron sight adjustment animation. Amount of frames is equal to amount of zeroing modes defined in the weapon | 11 | ''empty anim, need same length as Sight in weapon'' | 999_Empty | - |- | Switch_Mode_Off | Empty animation for switching safety switch off. This animation need to have same amount of frames as the one in player instance | 16 | ''it is possible to use same anim as Switch_Mode_On'' | 262_ArmsADD_RHandABS | - |- | Switch_Mode_On | Empty animation for switching safety switch on. This animation need to have same amount of frames as the one in player instance | 16 | p_rfl_sampleweapon_01_modes_on | 262_ArmsADD_RHandABS | p_rfl_sampleweapon_01_modes_on |- | Trigger | Animation of finger when trigger is pressed | 4 | colspan="3" | using same animation as '''Fire''' |- | Animation IK Pose | Inverted Kinematics pose defined inside '''SCR_WeaponAttachmentsStorageComponent''' in Item '''Animation Attributes''' sections under name '''Animation IK Pose''' | 1 | p_sampleweapon_ik | 501_IK | p_rfl_sampleweapon_01_ik |}

<!-- == Machinegun == -->

{{GameCategory|armaR|Modding|Assets|Guidelines}}
h5kfpyxjya9wov89chqqg5mglcsbb89

# Arma Reforger:BaseDoorComponent

5050
49322
376338
376336
2025-10-07T13:19:24Z
Lou Montana
10739
Fix category
376338
wikitext
text/x-wiki
{{GVI|armaR|1.6.0}}

Starting with {{armaR}} 1.6.0, a new base class was created for doors named <enforce inline>BaseDoorComponent</enforce>. Both <enforce inline>DoorComponent</enforce> and <enforce inline>SlidingDoorComponent</enforce> derive from this class. This means that <enforce inline>entity.FindComponent(DoorComponent)</enforce> does not detect sliding doors anymore.

== Removed Angles from Sliding Doors ==

Sliding doors now derive from <enforce inline>BaseDoorComponent</enforce> and use distance parameters as they should.

Before 1.6.0, sliding doors derived from <enforce inline>DoorComponent</enforce> and had the "angle" parameters for their opening and closing distances (e.g. "Angle Range" and "Closed Angle").

{{Feature|informative| The angle parameters are kept (hidden) for the sake of backward compatibility; however data must still be updated using the new distance parameters or log warnings will happen. }}

== Door Width Axis ==

The axis plays a very important role in collision checking for both sliding and rotating doors. For rotating doors, rotation is always around the Y axis, so that should never be the door width axis. If a door does not stop when it hits a character, it probably means the door width axis is incorrect, or when using the Test Contacts option, the provided collider is incorrect.

Before 1.6.0, the door width axis was not used consistently.

== Smoothing Animations ==

Doors now support smoothing animations. There are 4 presets, '''Linear''' (default, old behavior), '''EaseIn''' (start of the animation is smoothed), '''EaseOut''' (end of the animation is smoothed), and '''EaseInOut''' (both ends are smoothed). {{Feature|informative| The animation is still played over the same time period, so when smoothing curves are used the door will move faster at some points during the animation. }} <gallery mode="slideshow"> File:armar-doorcomponent_linear.gif|Linear interpolation File:armar-doorcomponent_easein.gif|Ease in interpolation File:armar-doorcomponent_easeout.gif|Ease out interpolation File:armar-doorcomponent_easeinout.gif|Ease in/out interpolation </gallery>

The smoothing curve is a {{Link|https://en.wikipedia.org/wiki/Smoothstep#5th-order_equation|5th order Smoothstep}} curve. It is also possible to to provide the smoothing slope at each end of the curve using the '''Custom''' curve mode.

The first value ({{hl|X}}) is the slope of the curve at the start of the animation, and the second value ({{hl|Y}}) is the slope of the curve at the end of the animation. Slope must be between 0 and 1. A slope of 0 means flat (very smooth) and 1 means a 45 degrees slope, so lower values mean smoother animations. For example, X=0 and Y=1 is similar to an EaseIn curve, X=1 and Y=0 is similar to an {{hl|EaseOut}} curve, and X=0 and Y=0 is similar to an {{hl|EaseInOut}} curve.

{{GameCategory|armaR|Modding|Assets|Guidelines}}
ela2ob4xbir0ekgj5j1s09ymbuchmah

# Arma Reforger:Character SoundInfo Signals Reference

5050
37826
371030
346849
2025-02-26T12:32:11Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
371030
wikitext
text/x-wiki
{{TOC|side}}

== SoundInt ==

* SoundInt parameter defined on the component is passed to the corresponding signal, based on the character slot where the item is. * If slot is empty signal value = -1 * Coding of Weapon SoundInt example: '''1 02 01 00''' ** 1 - Weapons ** 02 - Group (Pistol, LMG) ** 01 - Type (AK74) ** 00 - Variation * Those signals then trigger extra sounds when i.e. character moves. Example: metal rattle when harness is worn

== List of signal and item hierarchy == {| class="wikitable sortable" !Prefab !Signal !SoundInt ! colspan="1" |Component |- | colspan="1" |'''Helmets''' | colspan="1" |HeadCoverSoundInfo | colspan="1" |100 | colspan="1" |BaseLoadoutComponent |- | colspan="1" |Helmet_PASGT | colspan="1" |HeadCoverSoundInfo | colspan="1" |110 | colspan="1" |BaseLoadoutComponent |- | colspan="1" |Helmet_PASGT_cover | colspan="1" |HeadCoverSoundInfo | colspan="1" |115 | colspan="1" |BaseLoadoutComponent |- | colspan="1" |Helmet_SSh68 | colspan="1" |HeadCoverSoundInfo | colspan="1" |120 | colspan="1" |BaseLoadoutComponent |- | colspan="1" |Helmet_SSh68_cover | colspan="1" |HeadCoverSoundInfo | colspan="1" |125 | colspan="1" |BaseLoadoutComponent |- | colspan="1" |'''FaceCover''' | colspan="1" |FaceCoverSoundInfo | colspan="1" |200 | colspan="1" |BaseLoadoutComponent |- | colspan="1" |'''Jackets''' | colspan="1" |JacketSoundInfo | colspan="1" |300 | colspan="1" |BaseLoadoutComponent |- | colspan="1" |Jacket_US_BDU | colspan="1" |JacketSoundInfo | colspan="1" |310 | colspan="1" |BaseLoadoutComponent |- | colspan="1" |Jacket_M88 | colspan="1" |JacketSoundInfo | colspan="1" |320 | colspan="1" |BaseLoadoutComponent |- | colspan="1" |'''Vest''' | colspan="1" |VestSoundInfo | colspan="1" |400 | colspan="1" |BaseLoadoutComponent |- | colspan="1" |PASGT Vest | colspan="1" |VestSoundInfo | colspan="1" |410 | colspan="1" |BaseLoadoutComponent |- | colspan="1" |6B2_Vest | colspan="1" |VestSoundInfo | colspan="1" |420 | colspan="1" |BaseLoadoutComponent |- | colspan="1" |Vest_SovietHarness_suspenders_base | colspan="1" |VestSoundInfo | colspan="1" |440 | colspan="1" |BaseLoadoutComponent |- | colspan="1" |'''Pants''' | colspan="1" |PantsSoundInfo | colspan="1" |500 | colspan="1" |BaseLoadoutComponent |- | colspan="1" |Pants_BDU | colspan="1" |PantsSoundInfo | colspan="1" |510 | colspan="1" |BaseLoadoutComponent |- | colspan="1" |Pants_M88 | colspan="1" |PantsSoundInfo | colspan="1" |520 | colspan="1" |BaseLoadoutComponent |- | colspan="1" |'''Boots''' | colspan="1" |BootsSoundInfo | colspan="1" |600 | colspan="1" |BaseLoadoutComponent |- | colspan="1" |CombatBoots_US_01 | colspan="1" |BootsSoundInfo | colspan="1" |610 | colspan="1" |BaseLoadoutComponent |- | colspan="1" |CombatBoots_Soviet_01 | colspan="1" |BootsSoundInfo | colspan="1" |620 | colspan="1" |BaseLoadoutComponent |- | colspan="1" |JungleBoots | colspan="1" |BootsSoundInfo | colspan="1" |630 | colspan="1" |BaseLoadoutComponent |- | colspan="1" |'''Cover''' | colspan="1" |CoverSoundInfo | colspan="1" |700 | colspan="1" |BaseLoadoutComponent |- | colspan="1" |'''Backpack''' | colspan="1" |BackPackSoundInfo | colspan="1" |800 | colspan="1" |BaseLoadoutComponent |- | colspan="1" |Backpack_ALICE_Medium | colspan="1" |BackPackSoundInfo | colspan="1" |810 | colspan="1" |BaseLoadoutComponent |- | colspan="1" |Backpack_ALICE_Medium_Frame | colspan="1" |BackPackSoundInfo | colspan="1" |815 | colspan="1" |BaseLoadoutComponent |- | colspan="1" |Veshmeshok | colspan="1" |BackPackSoundInfo | colspan="1" |820 | colspan="1" |BaseLoadoutComponent |- | colspan="1" |Kolobok | colspan="1" |BackPackSoundInfo | colspan="1" |830 | colspan="1" |BaseLoadoutComponent |- | colspan="1" |Vest_ALICE_suspenders_base | colspan="1" |Attachment1SoundInfo | colspan="1" |1100 | colspan="1" |BaseLoadoutComponent |- | colspan="1" |'''Underbarrel-Attachments''' | colspan="1" |SightSoundInfo | colspan="1" |'''9000 - 9999''' | colspan="1" |WeaponComponent |- | colspan="1" |M203 | colspan="1" |SightSoundInfo | colspan="1" |9001 | colspan="1" |WeaponComponent |- | colspan="1" |GP25 | colspan="1" |SightSoundInfo | colspan="1" |9002 | colspan="1" |WeaponComponent |- | colspan="1" |'''Scopes/Optics''' | colspan="1" |ZeroingSoundInt | colspan="1" |10000 | colspan="1" |SCR_2DPIPSightsComponent |- | colspan="1" |PSO-1 | colspan="1" |ZeroingSoundInt | colspan="1" |10001 | colspan="1" |SCR_2DPIPSightsComponent |- | colspan="1" |ARTII | colspan="1" |ZeroingSoundInt | colspan="1" |10002 | colspan="1" |SCR_2DPIPSightsComponent |- | colspan="1" |Colt 4x20 | colspan="1" |ZeroingSoundInt | colspan="1" |10004 | colspan="1" |SCR_2DPIPSightsComponent |- | colspan="1" |'''Weapons''' | colspan="1" |SightSoundInt / RHItemSoundInfo / BackItemSoundInfo | colspan="1" |'''1000000 - 1999999''' | colspan="1" |WeaponComponent |- |'''Grenades / Throwables''' |SightSoundInt / RHItemSoundInfo / BackItemSoundInfo |'''1000000 - 1099999''' | colspan="1" |WeaponComponent |- | colspan="1" |Generic Grenade | colspan="1" |SightSoundInt / RHItemSoundInfo / BackItemSoundInfo | colspan="1" |1000000 | colspan="1" |WeaponComponent |- | colspan="1" |RGD2 | colspan="1" |SightSoundInt / RHItemSoundInfo / BackItemSoundInfo | colspan="1" |1000100 | colspan="1" |WeaponComponent |- | colspan="1" | | colspan="1" | | colspan="1" | | colspan="1" |WeaponComponent |- |'''Pistols''' |SightSoundInt / RHItemSoundInfo / BackItemSoundInfo |'''1010000 - 1019999''' | colspan="1" |WeaponComponent |- | colspan="1" |Generic Pistol | colspan="1" |SightSoundInt / RHItemSoundInfo / BackItemSoundInfo | colspan="1" |1010000 | colspan="1" |WeaponComponent |- | colspan="1" |Makarov | colspan="1" |SightSoundInt / RHItemSoundInfo / BackItemSoundInfo | colspan="1" |1010100 | colspan="1" |WeaponComponent |- | colspan="1" |Beretta | colspan="1" |SightSoundInt / RHItemSoundInfo / BackItemSoundInfo | colspan="1" |1010200 | colspan="1" |WeaponComponent |- | colspan="1" | | colspan="1" | | colspan="1" | | colspan="1" |WeaponComponent |- | colspan="1" |'''Rifles''' | colspan="1" |SightSoundInt / RHItemSoundInfo / BackItemSoundInfo | colspan="1" |'''1020000 - 1029999''' | colspan="1" |WeaponComponent |- | colspan="1" |Generic | colspan="1" |SightSoundInt / RHItemSoundInfo / BackItemSoundInfo | colspan="1" |1020000 | colspan="1" |WeaponComponent |- | colspan="1" |AK 74 / 47 / VZ 58 Family | colspan="1" |SightSoundInt / RHItemSoundInfo / BackItemSoundInfo | colspan="1" |1020100 | colspan="1" |WeaponComponent |- | colspan="1" |AK with UGL attachment | colspan="1" |SightSoundInt / RHItemSoundInfo / BackItemSoundInfo | colspan="1" |1020101 | colspan="1" |WeaponComponent |- | colspan="1" |M16 | colspan="1" |SightSoundInt / RHItemSoundInfo / BackItemSoundInfo | colspan="1" |1020200 | colspan="1" |WeaponComponent |- | colspan="1" |M16 with UGL attachment | colspan="1" |SightSoundInt / RHItemSoundInfo / BackItemSoundInfo | colspan="1" |1020201 | colspan="1" |WeaponComponent |- | colspan="1" | | colspan="1" | | colspan="1" | | colspan="1" |WeaponComponent |- | colspan="1" |'''Long Rifles''' | colspan="1" | | colspan="1" |'''1030000 - 1039999''' | colspan="1" |WeaponComponent |- | colspan="1" |SVD | colspan="1" |SightSoundInt / RHItemSoundInfo / BackItemSoundInfo | colspan="1" |1030100 | colspan="1" |WeaponComponent |- | colspan="1" |M21 | colspan="1" |SightSoundInt / RHItemSoundInfo / BackItemSoundInfo | colspan="1" |1030200 | colspan="1" |WeaponComponent |- | colspan="1" | | colspan="1" | | colspan="1" | | colspan="1" |WeaponComponent |- | colspan="1" |'''LMGs''' | colspan="1" | | colspan="1" |'''1040000 - 1049999''' | colspan="1" |WeaponComponent |- | colspan="1" |Generic LMG | colspan="1" |SightSoundInt / RHItemSoundInfo / BackItemSoundInfo | colspan="1" |1040000 | colspan="1" |WeaponComponent |- | colspan="1" |M249 | colspan="1" |SightSoundInt / RHItemSoundInfo / BackItemSoundInfo | colspan="1" |1040100 | colspan="1" |WeaponComponent |- | colspan="1" |M60 | colspan="1" |SightSoundInt / RHItemSoundInfo / BackItemSoundInfo | colspan="1" |1040200 | colspan="1" |WeaponComponent |- | colspan="1" |M60 (mounted on tripod, exterior) | colspan="1" |SightSoundInt / RHItemSoundInfo / BackItemSoundInfo | colspan="1" |1040250 | colspan="1" |WeaponComponent |- | colspan="1" |PKM | colspan="1" |SightSoundInt / RHItemSoundInfo / BackItemSoundInfo | colspan="1" |1040300 | colspan="1" |WeaponComponent |- | colspan="1" |PKM (mounted on tripod, exterior) | colspan="1" |SightSoundInt / RHItemSoundInfo / BackItemSoundInfo | colspan="1" |1040350 | colspan="1" |WeaponComponent |- | colspan="1" |RPK7 | colspan="1" |SightSoundInt / RHItemSoundInfo / BackItemSoundInfo | colspan="1" |1040400 | colspan="1" |WeaponComponent |- | colspan="1" | | colspan="1" | | colspan="1" | | colspan="1" |WeaponComponent |- | colspan="1" |'''Launchers''' | colspan="1" | | colspan="1" |'''1050000 - 1059999''' | colspan="1" |WeaponComponent |- | colspan="1" |Generic Launcher | colspan="1" |SightSoundInt / RHItemSoundInfo / BackItemSoundInfo | colspan="1" |1050000 | colspan="1" |WeaponComponent |- | colspan="1" |RPG7 | colspan="1" |SightSoundInt / RHItemSoundInfo / BackItemSoundInfo | colspan="1" |1050100 | colspan="1" |WeaponComponent |- | colspan="1" |RPG22 | colspan="1" |SightSoundInt / RHItemSoundInfo / BackItemSoundInfo | colspan="1" |1050200 | colspan="1" |WeaponComponent |- | colspan="1" |M72 LAW | colspan="1" |SightSoundInt / RHItemSoundInfo / BackItemSoundInfo | colspan="1" |1050300 | colspan="1" |WeaponComponent |} {{GameCategory|armaR|Modding|Assets|Guidelines}}
dnu2m8s5w3e9rgfxgbwqyp40b2ryg0s

# Arma Reforger:Collision Layer

5050
32903
371035
338698
2025-02-26T12:32:12Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
371035
wikitext
text/x-wiki
{{TOC|side}} == Layers Setup ==

{{Columns|3| * Buoyancy * Camera - Special layer for camera collision * Character - For collider capsule of characters * CharacterAI - For collider capsule of AI characters * CharCollide - Used for Character-only collisions (e.g. wheels, which are otherwise raytraced) * CharNoCollide - Only for objects, which are NOT supposed to collide with character * Cover ''- deprecated?'' * Debris - Special layer for debris, we want it to collide with e.g. static, but not dynamic objects or character * Default - Default layer, will collide with everything * Dynamic - For dynamic objects like props are moveable in world * FireGeometry - Used only for damage, projectile tracing, etc. * Foliage - Layer used foliage on vegetation (mainly on trees) * Interaction - Special layer for interaction (usually not really used, only for special cases when any other collision layer used for interaction wouldn't be enough) * Ladder - For detection of ladders vs character (used for get in on ladder) * Navmesh - Navmesh layer for soldiers * NavmeshVehicle - Navmesh layer for vehicles * Perception - For trace to collide with ViewGeometry layer * Projectile - for bigger projectiles (bigger than bullet - e.g. RPG rocket) * Ragdoll - Special layer for ragdoll, e.g. character shouldn't collide with dead soldiers, when they are in ragdoll * Static - For static objects like buildings * Terrain - Special layers just for terrain * Vegetation - use for "soft" parts of vegetation - e.g. leaves * Vehicle - Original layer for vehicles * VehicleCast - used by wheels * VehicleSimple - used to collision between vehicles and static assets, should be more "rough" and made from as little as possible colliders * VehicleComplex - used for collision between vehicles and characters

* ViewGeometry - Used only for perception (AI) * Water - }}

== LayerPresets Setup ==

(this is what must be set in the value of "usage" custom property in FBX)

{{Columns|6| * '''Main''' ** Default * '''Building''' ** Static ** Navmesh * '''BuildingFire''' ** Static ** FireGeometry ** Navmesh * '''BuildingFireView''' ** Static ** FireGeometry ** ViewGeometry ** Navmesh * '''Bush''' ** Foliage * '''Cover''' ** Cover * '''Character''' ** Character * '''CharacterAI''' ** CharacterAI * '''CharNoCollide''' ** CharNoCollide * '''Debris''' ** Debris * '''Door''' ** Static * '''DoorFireView''' ** Static ** FireGeometry ** ViewGeometry

* '''FireGeo''' ** FireGeometry * '''FireView''' ** FireGeometry ** ViewGeometry * '''Foliage''' ** Foliage * '''Interaction''' ** Interaction * '''ItemFireView''' ** CharNoCollide ** FireGeometry ** ViewGeometry * '''Ladder''' ** Static ** Ladder * '''Projectile''' ** Projectile * '''Prop''' ** Dynamic * '''PropView''' ** Dynamic ** ViewGeometry * '''PropFireView''' ** Dynamic ** FireGeometry ** ViewGeometry * '''RockFireView''' ** Static ** FireGeometry ** ViewGeometry ** Navmesh * '''Terrain''' ** Terrain ** Navmesh

* '''Tree''' ** Static ** Foliage * '''TreeFireView''' ** Static ** FireGeometry ** ViewGeometry * '''TreePart''' ** Dynamic * '''Vehicle''' ** Vehicle * '''VehicleFire''' ** Vehicle ** FireGeometry * '''VehicleFireView''' ** Vehicle ** FireGeometry ** ViewGeometry * '''Weapon''' ** CharNoCollide * '''Wheel''' ** Static ** FireGeometry }}

{| class="wikitable" ! LayerPresets ! List of active layers ! Description ! Examples of usage |- | Main | Default | Default LayerPreset | Not really used anywhere |- | Cover | Cover | colspan="2" | To be removed? |- | Character | Character | colspan="2" | Used on character colliders |- | CharacterAI | CharacterAI | colspan="2" | Special layerpreset with layer just for AI (they don't collide with vehicles for now, etc.) |- | Projectile | Projectile | colspan="2" | Used by projectiles (bullets, rockets), interacts with FireGeometry |- | Vehicle | Vehicle | Collides with static and dynamic objects like buildings, props, other vehicles, etc. | On vehicles |- | VehicleFire | Vehicle

FireGeometry | Same as above + Fire Geometry layer | On vehicles parts which can used both for collision and fire geometry |- | VehicleFireView | Vehicle

FireGeometry

ViewGeometry | Same as above + View Geometry layer | On vehicles parts which can used for collision, Fire and View |- | ItemFireView | CharNoCollide

FireGeometry

ViewGeometry | colspan="2" | Used on props, items where collision with player is not desired - e.g. really small objects like chocolate bar |- | Door | Static

Navmesh | colspan="2" | Used on doors |- | DoorFireView | Static

FireGeometry

ViewGeometry

Navmesh | Used on doors, | Same as above |- | Weapon | CharNoCollide | colspan="2" | Used on weapons |- | Terrain | Terrain

Navmesh | Special preset for terrain mesh, is set in GenericTerrainEntity | On terrain meshes |- | Prop | Dynamic | Used on dynamic assets - props | Used on assets like e.g. bottle, ammo box, chair, etc. |- | PropView | Dynamic

ViewGeometry | colspan="2" | + View Geometry layer |- | PropFireView | Dynamic

FireGeometry

ViewGeometry

NavmeshVehicle | colspan="2" | Used on props which has only one geometry (no separated Fire geometry) |- | Tree | Static

NavmeshVehicle | colspan="2" | Used on tree/bush trunks (hard parts) |- | TreeFireView | Static

FireGeometry

ViewGeometry

NavmeshVehicle | colspan="2" |Used on tree/bush trunks (hard parts) where one collider can be used for both collision with soldier and then as Fire Geometry |- | TreePart | Dynamic | colspan="2" |Used on tree parts - branches, twigs, etc. |- | CharNoCollide | CharNoCollide | colspan="2" | Not used? |- | FireGeo | FireGeometry | Collides only with projectiles | Used on Fire Geometry type of colliders |- | Building | Static

Navmesh | colspan="2" | Used on buildings as they use static colliders (+ special layer for detecting for Navmesh) |- | BuildingFire | Static

FireGeometry

Navmesh | + Fire and View Geometry layer | Used on buildings |- | BuildingFireView | Static

FireGeometry

ViewGeometry

Navmesh | + View Geometry layer | Used on buildings |- | RockFireView | Static

FireGeometry

ViewGeometry

Navmesh | colspan="2" |Used on rocks |- | Debris | Debris | Used on small debris pieces which should not collide with dynamic assets | |- | Interaction | Interaction | Not used? | |- | Ladder | Static

Ladder | Used on ladders, mainly for detecting ladder itself, so player can "snap" on it, but also used as collision | |- | Bush | Foliage | Used on "soft" parts of bushes | |- | Foliage | Foliage | Used on "soft" parts of trees - leaves, needles | |- | Wheel | FireGeometry

CharCollide | Used on vehicle wheels | |- | Glass | Static | colspan="2" | Used on glass, in case Fire Geometry would need to be separated from normal collisions |- | GlassFire | Static

FireGeometry | colspan="2" | Same as above + Fire Geometry layer |}

== InteractionMatrixRow Setup ==

[[File:armareforger_interactionmatrixrow-setup.png]]

{{GameCategory|armaR|Modding|Assets|Guidelines}}
jju0zsnxdibw4fozvno4g0pshj81x5m

# Arma Reforger:Editor Entity Naming Conventions

5050
33074
378041
370915
2026-01-27T16:04:56Z
Lou Montana
10739
Some wiki formatting
378041
wikitext
text/x-wiki
{{TOC|side}} == Localisation String Naming ==

The string naming conventions in {{armaR}} regarding Editor Entities goes as follows: '''{{Color|grey|AR-}}EditableEntity_{{Color|grey|Beehive_}}01_{{Color|grey|Small_}}Blue_{{Color|grey|Name}}'''

{| class="wikitable align-center-col-2 align-center-col-3" ! Part ! Followed by ! Mandatory ! Description |- ! AR- | dash<br>{{hl|-}} | {{Icon|checked}} | Code for the name of the project (AR = {{armaR}}, A4 = {{arma4}}, etc), separated from the next variable by a hyphen {{hl|-}}. |- ! EditableEntity_ | underscore<br>{{hl|_}} | {{Icon|unchecked}} | Always use {{hl|EditableEntity}} for an in-game asset that is not a character, vehicle, weapon, or item of equipment. This variable should be followed by an underscore. |- ! Beehive_ | underscore<br>{{hl|_}} | {{Icon|checked}} | Noun, pertaining to the entity. If the noun is two words, such as "Beer Bottle", it must be arranged in PascalCase (e.g "BeerBottle") and ''not'' be connected with underscores (e.g "Beer_Bottle"). |- ! 01_ | underscore<br>{{hl|_}} | {{Icon|checked}} | Number with a leading zero, allowing for the possibility of future variants. |- ! Small_ | underscore<br>{{hl|_}} | {{Icon|unchecked}} | Defines the asset's size. |- ! Blue_ | underscore<br>{{hl|_}} | {{Icon|unchecked}} | Defines the colour. |- ! Name | {{n/a}} | {{Icon|checked}} | Finally, all names for Editor Entities end with the label 'Name', indicating their function in-game. |}

== Localisation Content Naming ==

The string naming conventions in {{armaR}} regarding Editor Entities goes as follows: '''{{Color|grey|Small}} Cyan {{Color|grey|Table}} - Broken'''

All names should be in {{Link|https://en.wikipedia.org/wiki/Title_case}}. Also, ensure links to images are included in the String Editor so nomenclature can be checked by a native speaker. This is essential, as many assets are misnamed on our initial pass.

{| class="wikitable align-center-col-2" ! Part ! Mandatory ! Description |- ! Small | {{Icon|unchecked}} | Size. The first component in the name relates to the asset's size, which may be either: * Miniature * Small * Medium * Large * Massive {{Feature|informative|"Miniature" should only be used when the asset is far smaller than it should be; as in a replica or model (e.g "Miniature Belfry").<br>Similarly, "Massive" should only be used for assets that are extraordinarily larger than normal.}} |- ! Cyan | {{Icon|unchecked}} | Colour This component relates to the asset's colour. It can be one of:

{| class="wikitable" style="max-width: 10em !important; overflow: auto" |- style="writing-mode: sideways-lr" ! style="writing-mode: initial" | Colour | Red | Orange | Yellow | Green | Cyan | Blue | Magenta | Purple | White | Black | Gray | Silver | Pink | Maroon | Brown | Beige | Tan | Peach | Lime | Olive | Turquoise | Teal | Navy blue | Indigo | Violet |- ! Sample | style="background-color: red" | | style="background-color: orange" | | style="background-color: yellow" | | style="background-color: green" | | style="background-color: cyan" | | style="background-color: blue" | | style="background-color: magenta" | | style="background-color: purple" | | style="background-color: white" | | style="background-color: black" | | style="background-color: grey" | | style="background-color: silver" | | style="background-color: pink" | | style="background-color: maroon" | | style="background-color: brown" | | style="background-color: beige" | | style="background-color: tan" | | style="background-color: peachpuff" | | style="background-color: lime" | | style="background-color: olive" | | style="background-color: turquoise" | | style="background-color: teal" | | style="background-color: navy" | | style="background-color: indigo" | | style="background-color: violet" | |}

If the asset contains a myriad of colours, the prefix 'multi-colored' can be used. Try to avoid colours that are also materials, as this can be confusing (e.g., 'Ivory Crate' or 'Gold Container').<br> When a colour combination is involved, it is acceptable to use the conjunction 'and' (e.g., Blue and Red). Precedence in such pairings should be alphabetical (e.g., Beige and Black, Tan and Teal, etc.). |- ! Table | {{Icon|checked}} | Base Descriptor. This part is the most essential and complex. It must consist of at least a noun, but will often be preceded by an adjective. It may also be split by a preposition or conjunction, although prepositions should be avoided if grammatically possible. Note; any adjective relating to the state of the asset (e.g., 'Old', 'New', 'Rusted', 'Broken', 'Open', 'Closed') should be separated as a hyphenated adjective (see below).

{| class="wikitable" ! Correct ! Incorrect |- | * Standing Lamp * Brick Stack * Mop and Bucket * Flowers in Pot * Wicker Basket with Firewood | * Stack of Bricks (> Brick Stack) * Pile of Scrap (> Scrap Pile) * Mop in Bucket (> Mop and Bucket) * Old Water Cistern (> Water Cistern - Old) * Old Opened Barrel (> Barrel - Old, Open) |}

|- ! Broken | {{Icon|unchecked}} | Adjectives. Finally, certain adjectives may be tacked to the end of the name ''via'' a hyphen. This can be particularly useful for specification, where the noun of the base descriptor is not sufficient (e.g., 'Statue' > 'Statue - Soldier', 'Sign' > 'Sign - Slow Speed'). Common hyphenated adjectives can be taken from the list below. Assets where a pair of adjectives are needed should be divided by a comma and a space (e.g., - Old, Open), and should be ordered alphabetically ''except'' with non-permanent states, which should always be last (e.g., 'Open', 'Closed', 'Locked', 'Unlocked', 'On', 'Off', etc.).

{| class="wikitable" ! Correct (permanent states) ! Incorrect (temporary states) |- | * Old * New * Rusted * Broken * Dismantled * Camouflaged | * On * Off * Empty * Full * Open * Closed |}

|}

== See Also ==

* Localisation plugin, accessible in [[Arma Reforger:Resource Manager|Resource Manager]] with {{Controls|Ctrl|Alt|L}}

{{GameCategory|armaR|Modding|Assets|Guidelines}}
tamddlgeip2f5a18akoz0d29qovmfo0

# Arma Reforger:Environment Metrics

5050
34424
373113
373112
2025-03-31T13:09:58Z
Lou Montana
10739
Fix back to cm
373113
wikitext
text/x-wiki
{{TOC|side}} This document provides metrics used to design vanilla gameplay and assets.

{{Feature|warning|Values in this document are provided '''in centimeters''' and degrees.}}

== Character ==

The Vault/Climb distinction is made at '''145 cm'''. Anything below will make the character vault, anything over will make the character climb.

{| class="wikitable align-right align-left-col-1 align-center-row-1" ! Measurement ! Prone ! Crouch ! Stand |- | Pass under | 70 cm | 150 cm | 195 cm |- | Cover | 55 cm | 115 cm | 185 cm |- | Shoot Over | 5 cm | 65 cm | 125 cm |- | Move Over | colspan="2" | 20 cm | 40 cm |- | Ignore | colspan="3" | 5 cm |}

== Vehicle ==

* '''Small Vehicles''' represent car-like and civilian-sized vehicles * '''Large Vehicles''' represent armored-like and military-sized vehicles

=== Underpasses ===

{| class="wikitable" ! Measurement ! Small Vehicles ! Large Vehicles |- | Width | &ge; 340 cm | &ge; 440 cm |- | Height | 270-300 cm | &ge; 400 cm |}

== Building ==

* '''Common metrics''' represent "normal" buildings (civilian houses, offices, etc) * '''Uncommon metrics''' represent special buildings (bunkers, sheds, etc)

{| class="wikitable" ! Measurement ! Value |- | Maximum intended terrain slope | 20° |- | Maximum foundation height | 600 cm |}

=== Foundation Cheat Sheet ===

{| class="wikitable align-center" ! Width (cm) | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | 1000 | 1100 | 1200 | 1300 | 1400 | 1500 | 1600 | 1700 | 1800 | 1900 | 2000 |- ! Foundation height (cm) | 37 | 73 | 110 | 146 | 182 | 219 | 255 | 292 | 328 | 364 | 401 | 437 | 474 | 510 | 546 | 583 | colspan="4" | 600 |}

=== Floor and Walls ===

{| class="wikitable" ! Measurement ! Common ! Uncommon |- | Ceiling/floor thickness | 30-50 cm | &ge; 15 cm |- | Ceiling height | 270-330 cm | &ge; 220 cm |- | Load-bearing wall thickness | 40 cm | - |- | Partition wall thickness | 20 cm | &ge; 10 cm |}

=== Door ===

{| class="wikitable" ! Measurement ! Common ! Uncommon |- | Width | 125 cm | 90 cm |- | Height | 237 cm | 200 cm |- | Handle height | colspan="2" | 115 cm |- | Frameless width | 141 | 106 |- | Frameless height | 245 | 208 |- | Garage width | 400 |- | Garage height | 350 |}

=== Window ===

{| class="wikitable" ! Measurement ! Small Window ! Large Window |- | Min distance from the floor | 169 cm | 99 cm |}

{| class="wikitable align-center" |+ Common dimensions ! rowspan="2" colspan="2" | ! colspan="5" | Height |- ! 47 ! 72 ! 118 ! 142 ! 182* |- ! rowspan="6" | Width ! 70 | 70 &times; 47 | 70 &times; 72 | - | 70 &times; 142 | 70 &times; 182

|- ! 90 | - | 90 &times; 72 | - | 90 &times; 142 | 90 &times; 182

|- ! 110 | - | - | 110 &times; 118 | 110 &times; 142 | -

|- ! 130 | - | 130 &times; 72 | - | 130 &times; 142 | 130 &times; 182

|- ! 170 | - | 170 &times; 72 | - | 170 &times; 142 | 170 &times; 182

|- ! 195 | - | 195 &times; 72 | 195 &times; 142 | 195 &times; 182 | - |}

''* recommended ceiling height: 330 cm''

{{Feature|informative|Some other uncommon formats exist, such as e.g {{hl|260&times;230}} for the air control tower.}}

=== Stairs ===

* use only simple shapes (straight, U-shaped, L-shaped) * narrow stairs should only be straight

{| class="wikitable" ! Measurement ! Common ! Uncommon |- | Staircase width | 185 cm | 125 cm |- | Recommended step height | colspan="2" | 19 cm |- | Recommended step depth | colspan="2" | 30 cm |- | Ceiling height | colspan="2" | &ge; 270 cm |- | Maximum slope angle | colspan="2" | 45° |}

== Furniture ==

{| class="wikitable" ! Measurement ! Dimensions |- | Seating (Chair, Sofa, Bed) | 50 cm |- | Bed length | 230 cm |- | Regular table height | 90 cm |- | Work place height | 100 cm |}

== Ladder ==

{| class="wikitable" ! Measurement ! Value |- | First step | 34 cm |- | Step height | 32 cm |- | Width | 44 cm |- | Bar diameter | 4.2 cm |- | Side bars's height above the last step | 70 cm |- | Automatic animation adjustment range | 90-75° (forward slope) |- | Minimum distance from nearby colliders | 80 cm total width, 100 cm behind |}

{{GameCategory|armaR|Modding|Assets|Guidelines}}
crozuzrjuil7p2dasc39ig4urdp0vyr

# Arma Reforger:Level Of Detail

5050
32888
370935
370367
2025-02-26T12:31:52Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370935
wikitext
text/x-wiki
{{TOC|side}} == Basics ==

'''L'''evel '''O'''f '''D'''etail ('''LOD''') in words one LOD or more LODs ('''LOD0, LOD1 - LODn''') are versions of a '''model with specific triangle and shader complexity'''. The lower the LOD number is the better the quality/higher complexity is. LOD0 stands for the nicest and most performance heavy one. Then the higher the number, the less complex and often also worse looking the model is.

These performance-cheaper model variants (all but LOD0) are to be rendered generally at higher distances in order to save performance on the GPU. The closer the LODs are rendered, the more GPU performance it saves. A user who will set lower quality in '''Settings/Video/Model geometric detail''' in the game's options will get closer switching to worse LODs to save more performance.

How to set which model part will be part of which LOD is described elsewhere (FBX import), but generally put the {{hl|_LODn}} suffix into object name inside FBX.

== Preview ==

How each LOD is looking, what materials they have and how much triangles or vertices they have can be directly checked in Workbench. Just find the desired XOB model in the Resource Browser and double-click on it. Then check the Details tab on the right part of the viewport and open its LODs sub-tab. Then, if "Force selected LOD to render" is checked, it is possible to scroll through the LODs and actually see them.

[[File:armareforger_levelofdetail-preview.png|400px]]

== Debug ==

There is a diagnostic tool which tells which LOD is currently visible on any visible entity instance in a map in {{Link|Arma Reforger:World Editor|World Editor}}. Turn it on with the {{Link|Arma Reforger:Diag Menu|Diag Menu}} by pressing {{Controls|Alt|Win}} &rarr; '''Scene/Colorize objects LODs'''. Now each LOD except for LOD0 will have color overlay. If no other than LOD0 is present for the object, then it will constantly switch all colors. {| class="wikitable" | no color overlay | style="background-color: #DE350B" | | style="background-color: #00875A" | | style="background-color: #0052CC" | | style="background-color: #FFC400" | | style="background-color: #6554C0" | | style="background-color: #79F2C0" | | ... |- | LOD0 | LOD1 | LOD2 | LOD3 | LOD4 | LOD5 | LOD6 | ... |}

== Automatic System ==

Why an automatic system, when other engines offer manual control of LOD behaviour? The automatic system is much less prone to human error and always ensures LOD functionality, even though it might not be always ideal. For these "not ideal" cases there are manual overrides which will be presented later.

The LOD system tries to keep a constant triangle/pixel ratio across the screen. It is possible to estimate LOD distances considering LOD factors as a multiplier of triangle count that will change the system's behaviour into earlier/further LODing distance.

=== LOD0 - LOD1 ===

When the model switches from LOD0 to LOD1 (generally begins to switch LODs) depends on several parameters:

* Spherical size of the object - the larger the object is, the further away it starts to switch to worse LODs[[File:armareforger_levelofdetail-boundingsphere.jpg|200px|right]]{{Clear}} * Triangle count of LOD0 - the more triangles the closer it starts to switch to LOD1[[File:armareforger_levelofdetail-trianglecount.png|200px|right]]{{Clear}} * Field of View (FOV) - the larger FOV the closer it starts to switch to worse LODs[[File:armareforger_levelofdetail-fov.png|500px|right]]{{Clear}} * Graphic settings - "Model geometric detail" on Ultra results in switching to worse LODs further away, Lowest vice-versa[[File:armareforger_levelofdetail-model-geometric-detail.png|500px|right]]{{Clear}}

[[File:armareforger_levelofdetail-lod-1-2-3.png|300px|thumb|LOD1-2-3 size and triangle count]] === LOD1 - LOD2 - LOD3+ ===

When the model starts to switch from LOD1 to LOD2, LOD2 to LOD3 and so on depends on two criteria:

* The LOD switch happens roughly when the spherical surface size of the currently loaded LOD on the screen reaches '''half the size compared to the moment of its first appearance''', and the same goes for the next LOD.<!-- --> "Roughly" because it also depends on the other criterion: * Relative '''triangle count between LODs''' - when each LODs have exactly '''half the triangle count of the previous one''', then the first rule based on surface size applies exactly.<!-- --> When the relative triangle count is not done more or less by half, then it might switch a lot sooner or later.<br><br><!-- -->Sometimes the LODs are not switching ideally. To save the most performance and get the most from LODs, there are manual overrides.

{{Clear}} == Manual Override ==

The "triangle count" parameter, which heavily influence how fast or slowly prefab is LODing, can be overridden with '''"LOD Factors"'''.

Yet it multiplies it only for the LOD switching behaviour and it is not really increasing/decreasing number of triangles in the model. By setting it, it just forces the specific LOD to remain in the scene for shorter (more triangles) or longer (less triangles) distance from the camera until it switches to the next LOD.

The parameter can be found in '''Entity/Mesh object component/LOD Factors'''.<br>[[File:armareforger_levelofdetail-meshobject.png]]

There needs to have as many "LOD Factors" as there are LODs in XOB model, which are inserted in Mesh object component, in order to influence all the LODs. The good news is that the number of factor fills in automatically based on the number of LODs in the inserted XOB model. Each factor corresponds with respective LOD, so factor 3 influence LOD3 and so on. When there are less factors than there are LODs in a model, then these LODs, which do not have their factors assigned, are simply not affected at all... or they simply behave like if the factors for them were set to 1 - as multiplying by 1 means no change.

[[File:armareforger_levelofdetail-lodfactor.png]]

An important note is that '''LOD Factors are inherited from parent prefabs to children prefabs''' as all the other mesh object component parameters. So it is possible to have some factors setup for the "base" or "core" prefab which fits most of the prefabs inheriting from it; yet there is always the possibility to not inherit and to change the factors for any specific prefab/entity in the prefab hierarchy.

=== Save Process ===

Saving of the LOD Factors is done the same way as any other parameters saved on entity components. Here is a guide for the saving process just in case:

The LOD factors for specific prefab can be saved by:

# Changing the factor values on "Entity instance" placed in map, applying them to specific inherited prefab by "Apply to prefab" button and then save the world... which saves also all changes in prefabs. <!-- -->Just be aware that this applies all the parameters that you changed on the mesh object component so be sure have not touched anything else on the Entity instance # Selecting specific inherited prefab first (on the Entity instance placed in the world), then changing the factors values and saving the world.

{{GameCategory|armaR|Modding|Assets|Guidelines}}
hl9f4jlr26nuermb353ulvxh6k9necr

# Arma Reforger:Model Performance

5050
49394
378084
378081
2026-02-11T22:50:18Z
Lou Montana
10739
Italicise UAZ missing lower LODs
378084
wikitext
text/x-wiki
* '''''In general''''', try to keep the polycount as low as possible; of course, such decision depends on the asset type and its specific use case. * '''''In general''''', the '''vertex density''' of different types of assets goes in this order of importance (descending, #1 = biggest density): *# weapon and gadget *# character and gear *# vehicle *# prop *# structure *# vegetation : {{Feature|important| This does '''not''' mean that e.g a vehicle must always have less vertices than a weapon; it means that '''''relative to its size''''', a vehicle '''in general''' has less vertices.<!-- -->A knife (weapon) will definitely have less vertices compared to a haul truck (vehicle)...! }} * '''''In general''''', create LODs using {{Name|bi}}'s {{Link|Arma Reforger:Enfusion Blender Tools}}; don't hesitate fixing them too. ** LOD0, LOD1 and the last LOD are usually created manually, intermediate LODs being creatable by tools. : {{Feature|warning|<!-- -->If you import a heavily detailed 3D model as LOD0 without retouching it/creating smaller LODs,<!-- -->the game will keep this model in memory for as long as it will be in game's world.<br>Do not then be surprised by the mod's negative performance impact! }}

== Instance ==

Repetitive complex elements must be split to save on memory, allowing then to assemble them in Prefabs. {{Wiki|WIP}}

== Vanilla Values ==

As a point of reference, here are vanilla values for multiple common assets; be sure to aim for the general category's ballpark.

{| class="wikitable sortable" ! rowspan="2" | Asset ! rowspan="2" | Category ! colspan="5" | LOD 0 ! colspan="5" | Last LOD |- ! Vertices ! Faces ! Materials ! Meshes ! Bones ! Vertices ! Faces ! Materials ! Meshes ! Bones <!-- WEAPON --> |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Assets/Weapons/Rifles/M16A2/M16A2_body.xob}} | Weapon (Assault Rifle) | 42631 | 49842 | 7 | 7 |12 | 1142 | 674 | 6 | 6 | 7 |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Assets/Weapons/Rifles/AK74/AK74_body.xob}} | Weapon (Assault Rifle) | 34614 | 41452 | 6 | 6 | 9 | 660 | 391 | 6 | 6 | 2 |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Assets/Weapons/Handguns/M9/M9_body.xob}} | Weapon (Handgun) | 14891 | 17515 | 2 | 2 | 6 | 213 | 114 | 1 | 1 | 2 |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Assets/Weapons/Handguns/PM/PM_body.xob}} | Weapon (Handgun) | 5888 | 7551 | 1 | 1 | 6 | 341 | 309 | 1 | 1 | 2 <!-- GADGET --> |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Assets/Items/Equipment/Binoculars/Binoculars_B12/Binoculars_B12.xob}} | Gadget | 4719 | 5774 | 1 | 1 | 0 | 56 | 34 | 1 | 1 | 0 |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Assets/Items/Equipment/Binoculars/Binoculars_B8/Binoculars_B8.xob}} | Gadget | 6919 | 8681 | 4 | 4 | 0 | 311 | 250 | 1 | 1 | 0 |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Assets/Items/Equipment/Binoculars/Binoculars_M22/Binoculars_M22.xob}} | Gadget | 7245 | 9965 | 1 | 1 | 0 | 107 | 76 | 1 | 1 | 0 <!-- CHARACTER --> |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Assets/Characters/Basebody/Basebody_Male_Head_01.xob}} | Character (Head) | 18932 | 34278 | 7 | 7 | 89 | 654 | 928 | 2 | 2 | 69 |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Assets/Characters/Basebody/Basebody_Male_01.xob}} | Character (Body) | 33181 | 57088 | 4 | 32 | 100 | 1230 | 1296 | 4 | 32 | 29 |- <!-- GEAR (HELMET) --> |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Assets/Characters/HeadGear/Helmet_M1/Helmet_M1_01.xob}} | Gear (Helmet) | 7876 | 11342 | 1 | 1 | 1 | 156 | 228 | 1 | 1 | 1 |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Assets/Characters/HeadGear/Helmet_M1/Helmet_M1_Cover.xob}} | Gear (Helmet) | 8391 | 12199 | 2 | 2 | 1 | 123 | 183 | 1 | 1 | 1 |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Assets/Characters/HeadGear/Helmet_SSh68/Helmet_SSh68_01.xob}} | Gear (Helmet) | 2976 | 3779 | 1 | 1 | 1 | 51 | 70 | 1 | 1 | 1 |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Assets/Characters/HeadGear/Helmet_SSh68/Helmet_SSh68_01_cover.xob}} | Gear (Helmet) | 3320 | 3673 | 1 | 1 | 1 | 50 | 48 | 1 | 1 | 1 |- <!-- GEAR (TOP) - Top Gear hehehe --> |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Assets/Characters/Uniforms/Jacket_BDU_M81/Jacket_BDU_M81.xob}} | Gear (Top) | 6129 | 7950 | 1 | 1 | 49 | 237 | 208 | 1 | 1 | 45 |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Assets/Characters/Uniforms/Jacket_KZS/Jacket_KZS.xob}} | Gear (Top) | 6016 | 9968 | 1 | 1 | 35 | 252 | 278 | 1 | 1 | 34 |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Assets/Characters/Uniforms/Jacket_M70/Jacket_M70_01.xob}} | Gear (Top) | 11003 | 17090 | 1 | 1 | 48 | 284 | 205 | 1 | 1 | 10 <!-- GEAR (LEGWEAR) --> |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Assets/Characters/Uniforms/Pants_BDU_M81/Pants_BDU_M81.xob}} | Gear (Legwear) | 4023 | 5554 | 1 | 1 | 20 | 117 | 100 | 1 | 1 | 10 |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Assets/Characters/Uniforms/Pants_KZS/Pants_KZS.xob}} | Gear (Legwear) | 2856 | 5092 | 1 | 1 | 16 | 176 | 220 | 1 | 1 | 20 |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Assets/Characters/Uniforms/Pants_M70/Pants_M70_01.xob}} | Gear (Legwear) | 6129 | 7950 | 1 | 1 | 19 | 237 | 208 | 1 | 1 | 10 <!-- GEAR (FOOTWEAR) --> |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Assets/Characters/Footwear/CombatBoots_US_01/CombatBoots_US_01.xob}} | Gear (Footwear) | 2176 | 3148 | 1 | 1 | 6 | 133 | 100 | 1 | 1 | 4 |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Assets/Characters/Footwear/CombatBoots_Soviet_01/CombatBoots_Soviet_01.xob}} | Gear (Footwear) | 2054 | 3140 | 1 | 1 | 9 | 122 | 100 | 1 | 1 | 4 <!-- VEHICLE --> |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Assets/Vehicles/Wheeled/M151A2/m151a2_base.xob}} | Vehicle | 34709 | 36022 | 12 | 12 | 45 | 131 | 70 | 1 | 1 | 0 |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Assets/Vehicles/Wheeled/UAZ469/UAZ469_base.xob}} | Vehicle | 32826 | 34755 | 13 | 13 | 37 | ''2658'' | ''1448'' | 4 | 4 | 5 <!-- STRUCTURE --> |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Assets/Structures/Military/Houses/Barracks_01/Barracks_01.xob}} | Structure | 13455 | 11036 | 4 | 4 | 0 | 194 | 98 | 1 | 1 | 0 |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Assets/Structures/Military/Houses/Barracks_E_02/Barracks_E_02.xob}} | Structure | 95272 | 98776 | 15 | 15 | 0 | 178 | 94 | 1 | 1 | 0 |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Assets/Structures/Military/Houses/Barracks_E_03/Barracks_E_03.xob}} | Structure | 129523 | 119760 | 14 | 14 | 0 | 168 | 92 | 1 | 1 | 0 |}

{{GameCategory|armaR|Modding|Assets|Guidelines}}
786733did8zkppv2q4mjoehw6endazo

# Arma Reforger:Vehicle: Wheeled Simulation

5050
32901
370961
337159
2025-02-26T12:31:58Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370961
wikitext
text/x-wiki
{{TOC|side}} == Input (Controller) ==

=== SCR_CarControllerComponent ===

==== General ====

{| class="wikitable sortable" ! Param ! Type ! Unit ! Description |- | ====== Type ====== | | | Type of gearbox

* '''Automatic''' - Automatic shifting and transition to reversing, W/S - throttle/brake or brake/throttle when reversing. * '''Manual''' - Manual shifting, W - always throttle, S - always brake, Q/E to shift gears |- | ====== Transmission RND ====== | ''bool'' | | Transmission have three settings: reverse, neutral and drive |}

==== Steering speed coefficients ====

The following are properties for smoothing the digital or small range/insensitive analog input (gamepad thumbstick). The setup should be quick and responsive enough while allowing the player to keep a smooth ride (e.g. by tapping the keys), without having to constantly counter compensate.

{| class="wikitable sortable" ! Param ! Type ! Unit ! Description |- | ====== Steering Forward Speed ====== | ''pairs of floats'' | <code style="display: block">[vehicle speed in km/h, steering speed in °/s]</code> | Pairs of velocity and steering speed at the given velocity |- | ====== Steering Backward Speed ====== | ''pairs of floats'' | <code style="display: block">[vehicle speed in km/h, steering speed in °/s]</code> | Pairs of velocity and counter-steering speed (recentering via input) at the given velocity |- | ====== Steering Center Speed ====== | ''pairs of floats'' | <code style="display: block">[vehicle speed in km/h, centering speed in °/s]</code> | Pairs of velocity and recentering speed (when no steering input is given / caster effect) at the given velocity |}

==== Throttle ====

{| class="wikitable sortable" ! Param ! Type ! Unit ! Description |- | ====== Throttle Curve ====== | ''pairs of floats'' | <code style="display: block">[engine rpm, amount of throttle]</code> | Throttle application with respect to engine's RPM |- | ====== Reverse Curve ====== | ''pairs of floats'' | <code style="display: block">[engine rpm, amount of throttle]</code> | Throttle application with respect to engine's RPM while in reverse |- | ====== Throttle Reaction Time ====== | ''float'' | <code style="display: block">s</code> | Time (in seconds) it takes to get wanted value of throttle - e.g. to interpolate from 0.0 to 1.0 throttle input |- | ====== Throttle Turbo Time ====== | ''float'' | <code style="display: block">s</code> | Time (in seconds) to reach wanted value of throttle in turbo mode |- | ====== Throttle Turbo ====== | ''float'' | | Amount of throttle that is reserved for turbo mode. For instance 0.2 means that without turbo, vehicle will be moving with maximum 0.8 throttle |}

==== Brake ====

{| class="wikitable sortable" ! Param ! Type ! Unit ! Description |- | ====== Braking Curve ====== | ''pairs of floats'' | <code style="display: block">[time in seconds, amount of braking force]</code> | Brake application over time |- | ====== Brake Turbo Time ====== | ''float'' | <code style="display: block">s</code> | Time to reach wanted value of brake in turbo mode |}

==== Engine ====

{| class="wikitable sortable" ! Param ! Type ! Unit ! Description |- | ====== Max Startup Time ====== | ''float'' | <code style="display: block">seconds</code> | Failsafe time for the engine to start (it can also bypass animations if it is shorter) |- | ====== Max Startup Attempts ====== | ''float'' | | How many times you can be "stuck" in the startup loop animation |- | ====== Engine Startup Chance ====== | ''float'' | <code style="display: block">%</code> | Probability that each startup attempt has to turn on the engine (0 - 100) (should be tied to engine below "damaged" threshold) |- | ====== Air Intakes ====== | ''float'' | <code style="display: block">array of PointInfo classes</code> | Air intake positions in local vehicle space |- | ====== Drowning Time ====== | ''float'' | <code style="display: block">s</code> | Amount of time needed to completely drown the engine when all air intakes are underwater |- | ====== Shutdown Time ====== | ''float'' | <code style="display: block">s</code> | Amount of time (some) vehicle systems automatically toggle off after the shutdown |- | ====== Max Lights Time ====== | ''float'' | <code style="display: block">s</code> | Maximum amount of time the light toggle should take (or if there are no animations) |}

==== Clutch ====

{| class="wikitable sortable" ! Param ! Type ! Unit ! Description |- | ====== Clutch Uncouple Time ====== | ''float'' | <code style="display: block">seconds</code> | Time to disengage clutch before switching gears |- | ====== Clutch Couple Time ====== | ''float'' | <code style="display: block">seconds</code> | Time to engage clutch after switching gears |- | ====== Clutch Uncouple Rpm ====== | ''float'' | <code style="display: block">RPM</code> | Engine RPM at which clutch is fully uncoupled while moving off |- | ====== Clutch Couple Rpm ====== | ''float'' | <code style="display: block">RPM</code> | Engine RPM at which clutch is fully coupled while moving off |- | ====== Clutch Uncouple Factor ====== | ''float'' | | Clutch uncouple RPM factor while moving off uphill or downhill |- | ====== Clutch Couple Factor ====== | ''float'' | | Clutch couple RPM factor while moving off uphill or downhill |- | ====== Clutch Minimum Position ====== | ''float'' | | Minimum clutch position while moving off |- | ====== Clutch Minimum Factor ====== | ''float'' | | Minimum clutch position factor while moving off uphill or downhill |}

==== Shifting ====

{| class="wikitable sortable" ! Param ! Type ! Unit ! Description |- | ====== Slope Smoothing ====== | ''float'' | | Factor of filter that smooths out upshift and downshift RPMs |- | ====== Latency ====== | ''float'' | <code style="display: block">seconds</code> | Minimum time between gear switches |- | ====== Up Shift Factor ====== | ''float'' | | Upshift RPM factor while going uphill or downhill |- | ====== Up Shift Rpm ====== | ''float'' | <code style="display: block">RPM</code> | Engine RPM required for upshifting |- | ====== Down Shift Factor ====== | ''float'' | | Downshift RPM factor while going uphill or downhill |- | ====== Down Shift Rpm ====== | ''float'' | <code style="display: block">RPM</code> | Engine RPM required for downshifting |- | ====== Turbo Shift Factor ====== | ''float'' | | Upshifting and downshifting RPM ratio in Turbo mode |}

== Simulation ==

=== VehicleWheeledSimulation ===

==== General ====

{| class="wikitable sortable" ! Param ! Type ! Unit ! Description |- | ====== Solver Type ====== | | | Solver selector - only V1 solver is available right now |- | ====== Solver Update Rate ====== | | <code style="display: block">Hz</code> | Solver update rate in Hz (number of ticks per second) |}

==== Engine ==== Controls engine power and its other properties. All values must be greater than 0 to be accepted as valid.

The engine is simulated as rotating cylinder around its central axis (simplification of crankshaft). {| class="wikitable" ! Param ! Type ! Unit ! Description ! References |- | ====== Inertia ====== | ''float'' | <code style="display: block">kg.m<sup>2</sup></code> | Moment of inertia |[[File:armareforger-new-engine-inertia.png|500px]] <nowiki>https://www.researchgate.net/publication/258176892_Evaluation_of_variable_mass_moment_of_inertia_of_the_piston-crank_mechanism_of_an_internal_combustion_engine</nowiki> |- | ====== Max Power ====== | ''float'' | <code style="display: block">kW</code> | Maximum power that the engine can provide | rowspan="9" | * * [[File:armareforger-vehicle-wheeled-engine-graph.png|500px]] You can use [https://www.desmos.com/calculator/j63rwoyvnh '''this calculator'''] to visualize RPM curve * <code style="display: block">maxTorqueRPM <= maxPowerRPM < maxRPM</code> * Use <nowiki>https://www.automobile-catalog.com/</nowiki>, <nowiki>https://www.dieselhub.com/</nowiki> and similar sources to check for real torque/power curves of the engines |- | ====== Max Torque ====== | ''float'' | <code style="display: block">Nm</code> | Maximum torque that engine can provide (peak torque) |- | ====== Rpm Max Power ====== | ''float'' | <code style="display: block">RPM</code> | RPM where engine outputs maximum power |- | ====== Rpm MaxT orque ====== | ''float'' | <code style="display: block">RPM</code> | RPM where maximum torque is produced |- | ====== Rpm Idle ====== | ''float'' | <code style="display: block">RPM</code> | RPM when engine is idling, e.g. in neutral |- | ====== Rpm Redline ====== | ''float'' | <code style="display: block">RPM</code> | Redline RPM

'''This parameter is currently ignored''' |- | ====== Rpm Max ====== | ''float'' | <code style="display: block">RPM</code> | Maximum RPM |- | ====== Steepness ====== | ''float'' | | Controls how fast engine can reach max torque. It can be used to flatten the torque curve before max torque rpm are reached |- | ====== Friction ====== | ''float'' | | Engine's braking torque |- | ====== Output ====== | | | Powertrain part driven by the engine (clutch) | |}

==== Clutch ====

{| class="wikitable sortable" ! Param ! Type ! Unit ! Description |- | ====== Max Clutch Torque ====== | ''float'' | <code style="display: block">Nm</code> | Maximum torque that clutch can provide. (1.6*MaxTorque can be a good starting point)

'''This parameter is currently ignored''' |- | ====== Output ====== | | | Powertrain part driven by the clutch (gearbox) |}

==== Gearbox ====

{| class="wikitable sortable" ! Param ! Type ! Unit ! Description |- | ====== Reverse ====== | ''float'' | | Reverse gear ratio |- | ====== Forward ====== | ''array of floats'' | | Array of forward gear ratios, order of the values are mapped to gears respectively |- | ====== Efficiency ====== | ''float'' | | Transmission efficiency - scales the engine output passed down |- | ====== Output ====== | | | Powertrain part driven by the gearbox (differential) |}

==== Differentials ==== {| class="wikitable" ! Param ! Type ! Unit ! Description |- | rowspan="2" | ====== Type ====== | '''Open''' | | Same torque on both outputs, different rotational speeds |- | '''LSD''' | | Limited slip differential - limiting rotational difference between outputs. Opens Anti slip and Anti slip torque parameters. |- | ====== Ratio ====== | ''float'' | | Differential ratio (sometime "final drive") |- | ====== Strength ====== | ''float'' | | Determines the magnitude of the extra force that is applied to the gripping wheel |- | ====== Output0 ====== | | | rowspan="2" |Powertrain parts driven by the differential (other differential or axle differential) |- | ====== Output1 ====== | | |}

==== Axles ====

{| class="wikitable sortable" ! Param ! Type ! Unit ! Description |- | ====== Torque Share ====== | ''float'' | | Defines how much torque is delivered to this axle. Sum of Torque Share for all axles should be equal to 1 |- | ====== Has Handbrake ====== | ''bool'' | | Determines whether this axle is used for handbrakes. Handbrake force is same as Brake Torque |}

===== (Axle) Differential ===== {| class="wikitable" ! Param ! Type ! Unit ! Description |- | colspan="4" |<same as differentials> |- | ====== Output0 ====== | | | rowspan="2" |Driven wheels |- | ====== Output1 ====== | | |}

===== Suspension ===== Accelerating/braking/turning should noticeably shift the weight of the vehicle. Weight shifting affects the grip of the tires - allowing more grip on the side with more weight. Center of mass should be set realistically high and the tendency to roll should be limited by a sway (anti-roll) bar if necesary, not by setting the CoM below the vehicle or just the wheel center.

{| class="wikitable sortable" ! Param ! Type ! Unit ! Description |- | ====== Max Steering Angle ====== | ''float'' | <code style="display: block">degrees</code> | Specifies the maximum steering angle of this axle, if negative value is given, the axis will steer in opposite direction of the steering wheel. |- | ====== Spring Rate ====== | ''float'' | N/mm | Spring force per mm. |- | ====== Compression Damper ====== | ''float'' | Ns/m | Compression damper force per 1m/s. |- | ====== Relaxation Damper ====== | ''float'' | Ns/m | Relaxation damper force per 1m/s. |- | ====== Max Travel Up ====== | ''float'' | <code style="display: block">m</code> | Maximum distance that the suspension can be compressed from modeled position. Standard cars 0.06 - 0.1 m. Off-road cars >0.1 m. |- | ====== Max Travel Down ====== | ''float'' | <code style="display: block">m</code> | Maximum distance that the suspension can be expanded from modeled position. Standard cars 0.07 - 0.12 m. Off-road cars >0.1 m. |}

===== Wheel =====

{| class="wikitable sortable" ! Param ! Type ! Unit ! Description |- | ====== Radius ====== | ''float'' | <code style="display: block">m</code> | Radius of the wheel |- | ====== Ratio ====== | ''float'' | | Wheel reduction ratio |- | ====== Mass ====== | ''float'' | <code style="display: block">kg</code> | Mass of the wheel on this axle |- | ====== Brake Torque ====== | ''float'' | <code style="display: block">Nm</code> | Amount of brake torque applied to each wheel on this axle |}

===== Tyre =====

{| class="wikitable sortable" ! Param ! Type ! Unit ! Description |- | ====== Rolling Resistance ====== | ''float'' | | '''Currently not used in game '''

Linearly proportional to speed. Acts against the wheel torque. For limiting acceleration. (in addition to surface property) |- | ====== Rolling Drag ====== | ''float'' | | '''Currently not used in game '''

Proportional to speed squared. For limiting high speeds. (in addition to surface property) |- | ====== Roughness ====== | ''float'' | <code style="display: block">m</code> | Bumpiness height - how bumpy is the wheel itself (in addition to surface property) |- | ====== Longitudinal Friction ====== | ''float'' | | Directly affects tyre grip in longitudinal direction |- | ====== Lateral Friction ====== | ''float'' | | Directly affects tyre grip in lateral direction |- | ====== Tread ====== | ''float'' | | Ratio of the "Thread" - related to how well wheel performs on specific surface. |}

===== Swaybar =====

{| class="wikitable sortable" ! Param ! Type ! Unit ! Description |- | ====== Stiffness ====== | ''float'' | <code style="display: block">N</code> | Sway bar stiffness ( anti-roll force ) |}

===== WheelPositions =====

==== Inertia ====

[[Image:armareforger-vehicle-wheeled-inertia.png|right]] * '''InertiaOverrideEnable''' ** Enables manual override of vehicle inertia - the way how to "simulate" mass distribution on the vehicle. * '''InertiaOverride''' ** Inertia values around each axis. Copy initial values from diag or via context menu opened on <code style="display: block">VehicleWheeledSimulation</code> on the Entity instance (you have to ''Apply to prefab'' later) {{Clear}}

===== Aerodynamics =====

{| class="wikitable sortable" ! Param ! Type ! Unit ! Description |- | ====== Reference Area ====== | ''float'' | <code style="display: block">m<sup>2</sup></code> | Drag reference area - see following page for more details <nowiki>https://en.wikipedia.org/wiki/Automobile_drag_coefficient#Drag_area</nowiki> |- | ====== Drag coefficient ====== | ''float'' | | Drag coefficient - see following page for more details <nowiki>https://en.wikipedia.org/wiki/Automobile_drag_coefficient#Typical_drag_coefficients</nowiki> |}

==== Pacejka ==== [[Image:armareforger-vehicle-wheeled-pacejka.png|right]] * <nowiki>https://www.edy.es/dev/docs/pacejka-94-parameters-explained-a-comprehensive-guide/</nowiki> * <nowiki>http://www.racer.nl/pacejka/pacplay.htm</nowiki>

Fill in initial values via context menu opened on <code style="display: block">VehicleWheeledSimulation</code> on the Entity instance (you have to ''Apply to prefab'' later) {{Clear}} ===== Longitudinal =====

{| class="wikitable sortable" ! Param ! Role ! Units ! Typical range ! Sample ! Description ! Dependency |- ====== b0 ====== | Shape factor | | <code style="display: block">1.4 .. 1.8</code> | <code style="display: block">1.5</code> | General shape of the curve. Defines the amount of falloff after the peak. ''The Pacejka model defines b0 = 1.65 for the longitudinal force.'' | ''Load-independent'' |- | ====== b1 ====== | Load influence on longitudinal friction coefficient (*1000) | <code style="display: block">1/kN</code> | <code style="display: block">-80 .. +80</code> | <code style="display: block">0</code> | Change of the friction coefficient at the peak.

Positive = more friction with more load. Negative = less friction with more load. | Load-dependent |- | ====== b2 ====== | Longitudinal friction coefficient (*1000) | | <code style="display: block">900 .. 1700</code> | <code style="display: block">1100</code> | Friction coefficient at the peak (vertical coordinate) *1000. | ''Load-independent'' |- | ====== b3 ====== | Curvature factor of stiffness/load | <code style="display: block">N/%/kN^2</code> | <code style="display: block">-20 .. +20</code> | <code style="display: block">0</code> | Change of the peak’s horizontal position.

Positive = increases ascent rate with load (moves to the left). Negative = decreases ascent rate with load (moves to the right). | Load-dependent |- | ====== b4 ====== | Change of stiffness with slip | <code style="display: block">N/%</code> | <code style="display: block">100 .. 500</code> | <code style="display: block">300</code> | Peak’s horizontal position specified as “ascent rate”. | ''Load-independent'' |- | ====== b5 ====== | Change of progressivity of stiffness/load | <code style="display: block">1/kN</code> | <code style="display: block">-1 .. +1</code> | <code style="display: block">0</code> | Lineal change of the peak’s horizontal position. Similar to b3 but more lineal and with reverse effect positive-negative.

Positive = decreases ascent rate with load. Negative = increases ascent rate with load. | Load-dependent |- | ====== b6 ====== | Curvature change with load^2 | | <code style="display: block">-0.1 .. +0.1</code> | <code style="display: block">0</code> | Quadratic change of the curvature at the peak.

Positive = more flat with load. Negative = sharper with load. | Load-dependent |- | ====== b7 ====== | Curvature change with load | | <code style="display: block">-1 .. +1</code> | <code style="display: block">0</code> | Change of the curvature at the peak. Same as b6 but more lineal.

Positive = more flat with load. Negative = sharper with load. | Load-dependent |- | ====== b8 ====== | Curvature factor | | <code style="display: block">-20 .. +1</code> | <code style="display: block">-2</code> | Curvature at the peak. The more negative = more “sharp”. Has influence on the falloff afterwards. | ''Load-independent'' |- | ====== b9 ====== | Load influence on horizontal shift | <code style="display: block">%/kN</code> | <code style="display: block">-1 .. +1</code> | <code style="display: block">0</code> | Change of the horizontal shift.

Positive = shifts to the left with more load. Negative = shifts to the right with more load. | Load-dependent |- | ====== b10 ====== | Horizontal shift | <code style="display: block">%</code> | <code style="display: block">-5 .. +5</code> | <code style="display: block">0</code> | Curve’s horizontal shift | ''Load-independent'' |}

===== Lateral =====

{| class="wikitable sortable" ! Param ! Role ! Units ! Typical range ! Sample ! Description ! Dependency |- ====== a0 ====== | Shape factor | | <code style="display: block">1.2 .. 18</code> | <code style="display: block">1.4</code> | General shape of the curve. Defines the amount of falloff after the peak. ''The Pacejka model defines a0 = 1.3 for the lateral force.'' | |- | ====== a1 ====== | Load influence on lateral friction coefficient (*1000) | <code style="display: block">1/kN</code> | <code style="display: block">-80 .. +80</code> | <code style="display: block">0</code> | Change of the friction coefficient at the peak.

Positive = more friction with more load. Negative = less friction with more load. | Load-dependent |- | ====== a2 ====== | Lateral friction coefficient (*1000) | | <code style="display: block">900 .. 1700</code> | <code style="display: block">1100</code> | Friction coefficient at the peak (vertical coordinate) *1000. | |- | ====== a3* ====== | Change of stiffness with slip | <code style="display: block">N/deg</code> | <code style="display: block">500 .. 2000</code> | <code style="display: block">1100</code> | Peak’s horizontal position at the reference load, specified as “ascent rate”. | |- | ====== a4* ====== | Change of progressivity of stiffness / load | <code style="display: block">1/kN</code> | <code style="display: block">0 .. 50</code> | <code style="display: block">10</code> | Change of the peak’s horizontal position with load. Smaller value = bigger change with load. | |- | ====== a5 ====== | Camber influence on stiffness | <code style="display: block">%/deg/100</code> | <code style="display: block">-0.1 .. +0.1</code> | <code style="display: block">0</code> | Change of the peak’s horizontal position.

Positive = decreases ascent rate with camber (moves to the right).

Negative = increases ascent rate with load (moves to the left). | Camber-dependent |- | ====== a6 ====== | Curvature change with load | | <code style="display: block">-2 .. +2</code> | <code style="display: block">0</code> | Change of the curvature at the peak.

Positive = more flat with load. Negative = sharper with load. | Load-dependent |- | ====== a7 ====== | Curvature factor | | <code style="display: block">-20 .. +1</code> | <code style="display: block">-2</code> | Curvature at the peak. The more negative = more “sharp”. Has influence on the falloff afterwards | |- | ====== a8 ====== | Load influence on horizontal shift | <code style="display: block">deg/kN</code> | <code style="display: block">-1 .. +1</code> | <code style="display: block">0</code> | Change of the horizontal shift.

Positive = shifts to the left with more load. Negative = shifts to the right with more load. | Load-dependent |- | ====== a9 ====== | Horizontal shift at load = 0 and camber = 0 | <code style="display: block">deg</code> | <code style="display: block">-1 .. +1</code> | <code style="display: block">0</code> | Curve’s horizontal shift | |- | ====== a10 ====== | Camber influence on horizontal shift | <code style="display: block">deg/deg</code> | -0.1 .. +0.1 | 0 | Change of the horizontal shift.

Same sign as camber = shifts to the left. Opposite sign as camber = shifts to the right. | Camber-dependent |- | ====== a11 ====== | Vertical shift | <code style="display: block">N</code> | -200 .. +200 | 0 | Curve’s vertical shift | |- | ====== a12 ====== | Vertical shift at load = 0 | <code style="display: block">N</code> | -10 .. +10 | 0 | Vertical shift when approaching zero load.

Must be verified for coherency at the configured minimum load. | Load-dependent |- | ====== a13 ====== | Camber influence on vertical shift, load dependent | <code style="display: block">N/deg/kN</code> | -10 .. +10 | 0 | Change of the vertical shift according to camber and load.

Same sign as camber = shifts upwards. Opposite sign as camber = shifts downwards.

The more load the more camber effect. | Camber-dependent |- | ====== a14 ====== | Camber influence on vertical shift | <code style="display: block">N/deg</code> | -15 .. +15 | 0 | Change of the vertical shift.

Same sign as camber = shifts upwards. Opposite sign as camber = shifts downwards. | Camber-dependent |} <sup>* Configure the horizontal behavior with load</sup>

===== Aligning =====

{| class="wikitable sortable" ! Param ! Role ! Units ! Typical range ! Sample ! Description ! Dependency |- | ====== c0 ====== | | | | | | |- | ====== c1 ====== | | | | | | |- | ====== c2 ====== | | | | | | |- | ====== c3 ====== | | | | | | |- | ====== c4 ====== | | | | | | |- | ====== c5 ====== | | | | | | |- | ====== c6 ====== | | | | | | |- | ====== c7 ====== | | | | | | |- | ====== c8 ====== | | | | | | |- | ====== c9 ====== | | | | | | |- | ====== c10 ====== | | | | | | |- | ====== c11 ====== | | | | | | |- | ====== c12 ====== | | | | | | |- | ====== c13 ====== | | | | | | |- | ====== c14 ====== | | | | | | |- | ====== c15 ====== | | | | | | |- | ====== c16 ====== | | | | | | |- | ====== c17 ====== | | | | | | |- | ====== c18 ====== | | | | | | |}

==== RaycastLayer ====

* LayerPreset in which the wheel raycast is performed (should be "Vehicle")

== RigidBody and Center of Mass ==

* All vehicles are set to curb weight (assuming dynamic weight could happen at some point in the future) * Center of Mass plays a crucial role in vehicle handling - it should be high enough to allow for weight shifting and changes in the wheel grip due to the changing pressure.

{{GameCategory|armaR|Modding|Assets|Guidelines}}
5qg6k6lp21p76x72rmfrg6jkowr0pti

# Arma Reforger:Weapon Components

5050
32929
371004
370755
2025-02-26T12:32:06Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
371004
wikitext
text/x-wiki
{{TOC|side}} = Slot Classes =

== PointInfo ==

{| class="wikitable" ! Param ! Type ! Unit ! Description |- | ==== Pivot ID ==== | ''string'' | | Name of Pivot ID. This list is populated by bones and empty object from the mesh. Please note that sometimes that list might be empty, even though mesh has bones. In such situation it is enough to go to another component and then get back to it again. |- | ==== Offset ==== | ''vector'' | meters | Offset from the origin |- | ==== Angles ==== | ''vector'' | degrees | Orientation around axes |}

== EntitySlotInfo ==

''Inherits from PointInfo''

''Requires name'' {| class="wikitable" ! Param ! Type ! Unit ! Description |- | ==== Auto Transform ==== | ''bool'' | | If this option is set to true, then attached prefab will move with parent object |- | ==== Child Pivot ID ==== | ''string'' | | Offset defined by child node |- | ==== Enabled ==== | | | |- | ==== Prefab ==== | ''resource'' | .et | Name of the resource which should be attached to parent object |- | ==== Disable Physics Interaction ==== | ''bool'' | | Should attached object not collide with any parent |- | ==== Inherit Parent Skeleton ==== | ''bool'' | | Should attached object inherit parent skeleton |- | ==== Activate Physics On Detaching ==== | ''bool'' | | Should physics be activated when entity is detached from slot? |- | ==== Deactivate Physics On Attaching ==== | ''bool'' | | Should physics be deactivated when entity is atached to slot? |}

== InventoryStorageSlot ==

''Inherits from EntitySlotInfo'' {| class="wikitable" ! Param ! Type ! Unit ! Description |- | ==== Name ==== | string | | '''editor only''' human readable name of the slot. Has no effect on the functionality whatsoever |}

== EquipmentStorageSlot ==

''Inherits from InventoryStorageSlot'' {| class="wikitable" ! Param ! Type ! Unit ! Description |- | ==== Allowed Item Types ==== | ''array of strings'' | | Item types that are allowed to be attached to current slot (see ECommonItemType enum for possible values) |- | ==== Affected By Occluders ==== | ''array of strings'' | | Loadout ocluder types that disable item in this slot |- | ==== Animated Mesh Reference ==== | ''resource'' | xob | In case of entity owner have changeable mesh at runtime, setting animated mesh reference allows you to configure alternative state of slot transformation |}

== SCR_EquipmentStorageSlot ==

''Inherits from EquipmentStorageSlot''

== LoadoutSlotInfo ==

''Inherits from InventoryStorageSlot'' {| class="wikitable" ! Param ! Type ! Unit ! Description |- | ==== Area ==== | ''integer'' | | Area this item is assigned to. Available options:

* None * HeadCover * FaceCover * Jacket * Vest * Pants * Boots * Cover * Backpack * Attachment1 * Attachment2 * Attachment3 * Attachment4 * Attachment5 * Attachment6 * Attachment7 * Attachment8 |- | ==== Meshes To Hide ==== | ''array of strings'' | | Array of meshes which should be hidden when this item is equipped. List of meshes can be obtained by looking at the base body '''Meshes''' section under LOD settings |}

== RegisteringComponentSlotInfo ==

''Inherits from EntitySlotInfo'' {| class="wikitable" ! Param ! Type ! Unit ! Description |- | ==== Register Actions ==== | ''bool'' | | register actions (defined in '''ActionsManagerComponent''') to parent entity |- | ==== Register Damage ==== | ''bool'' | | register damage to parent entity |- | ==== Register Controllers ==== | ''bool'' | | register controllers to parent entity |- | ==== Register Weapons ==== | ''bool'' | | register weapons to parent entity |- | ==== Register Compartments ==== | ''bool'' | | register compartments (defined in '''SCR_BaseCompartmentManagerComponent''') to parent entity |- | ==== Register Lights ==== | ''bool'' | | register lights (defined in '''BaseLightManagerComponent''') to parent entity |}

== SoundPointInfo ==

''Inherits from PointInfo''

== DecalSlotInfo ==

''Inherits from PointInfo'' {| class="wikitable" ! Param ! Type ! Unit ! Description |- | ==== Projection Offset ==== | ''float'' | | Projection offset from PointInfo target transform |- | ==== Projection Rotation ==== | ''vector'' | | Projection rotation around PointInfo target transform |- | ==== Far Plane ==== | ''float'' | | Far plane - maximum distance for decal projection box |- | ==== Stretch ==== | ''float'' | | Stretch of decal |- | ==== Scale ==== | ''float'' | | Scale |- | ==== Lifetime ==== | ''float'' | | Decal lifetime, value <= 0 is indeffinite |- | ==== Create On Init ==== | ''bool'' | | Create this decal on entity init |- | ==== Debug Draw ==== | ''bool'' | | Enable debug |- | ==== Material ==== | ''resource'' | emat | Decal material |}

== EmissiveGlassSlot ==

''Inherits fromEntitySlotInfo''

== EmissiveLightSurfaceSlot ==

''Inherits fromEntitySlotInfo'' {| class="wikitable" ! Param ! Type ! Unit ! Description |- | ==== Light Type ==== | | | |- | ==== Light Side ==== | | | |- | ==== Emissive On Multiplier ==== | | | |- | ==== Emissive Off Multiplier ==== | | | |- | ==== Configurations Override ==== | | | |}

= UI Info Classes =

== UIInfo ==

{| class="wikitable" ! Param ! Type ! Unit ! Description |- | ==== Name ==== | ''string'' | | Name to be displayed in player UI |- | ==== Description ==== | ''string'' | | Description text to be displayed in player UI |- | ==== Icon ==== | ''resource'' | | Resource for icon to be displayed in player UI |}

== GrenadeUIInfo ==

''Inherits parameters from WeaponUIInfo & UIInfo'' {| class="wikitable" ! Param ! Type ! Unit ! Description |- | ==== Icon Ammo Type ==== | ''resource'' | | |- | ==== Ammo Type ==== | | | Magazine type (AP, Tracer, Ball, ...). Used for Weapon Info UI. |- | ==== Show Ammo Type Text ==== | | | Show ammo type extra text next to ammo type icon(s) in Weapon Info UI. |- | ==== Ammo Type Flags ==== | | | Set magazine ammo type flags |}

== MagazineUIInfo ==

''Inherits parameters from UIInfo'' {| class="wikitable" | ==== Show Caliber ==== | ''bool'' | | |- | ==== Ammo Caliber ==== | ''string'' | | Magazine ammunition caliber |- | ==== Ammo Type ==== | string | | Magazine type (AP, Tracer, Ball, ...). Used for Weapon Info UI. |- | ==== Show Ammo Type Text ==== | bool | | Show ammo type extra text next to ammo type icon(s) in Weapon Info UI. |- | ==== Ammo Type Flags ==== | | | Set magazine ammo type flags |- | ==== Mag Indicator ==== | class | | |}

== MuzzleUIInfo ==

''Inherits parameters from UIInfo'' {| class="wikitable" ! Param ! Type ! Unit ! Description |- | ==== Show Caliber ==== | ''bool'' | | Show caliber indicator in weapon UI. |- | ==== Caliber ==== | ''string'' | | Caliber identification, e.g. 7.62×39mm |- | ==== Firemode Icon Imageset ==== | ''resource'' | imageset | Imageset with most of weapon info textures |- | ==== Firemode Glow Imageset ==== | ''resource'' | | Imageset with most of weapon info textures |- | ==== Firemode Single ==== | string | | Name of the icon representing single fire mode in '''Firemode Icon Imageset''' |- | ==== Firemode Burst ==== | string | | Name of the icon representing burst fire mode in '''Firemode Icon Imageset''' |- | ==== Firemode Auto ==== | string | | Name of the icon representing full auto fire mode in '''Firemode Icon Imageset''' |- | ==== Firemode Safty ==== | string | | Name of the icon representing safe mode in '''Firemode Icon Imageset''' |- | ==== Mag Indicator ==== | | | |}

== SCR_FactionUIInfo ==

''Inherits parameters from UIInfo'' {| class="wikitable" ! Param ! Type ! Unit ! Description |- | Name Upper | ''string'' | | Name of the faction in upper case |}

== WeaponUIInfo ==

''Inherits parameters from UIInfo'' {| class="wikitable" ! Param ! Type ! Unit ! Description |- | ==== Show Weapon Name ==== | ''string'' | | Show weapon name indicator in weapon UI |- | ==== Mag Indicator ==== | ''string'' | | |}

= General components =

== ActionsManagerComponent ==

This component is responsible for various interactions like picking up the weapon or some special interactions (custom action for i.e. folding iron sights)

== MeshObject ==

Ideally, weapon should have some kind of mesh

* '''Object''' - path to weapon model

== RigidBody ==

Component responsible for physic simulation (including interactions) of the weapon. Requires MeshObject with at least one collider. Weapon should ideally have collision

* '''Layer Preset''' - should be empty * '''Model Geometry''' - should be checked - to use colliders in weapon model

== Hierarchy ==

Enables entity hierarchy (required by RplComponent)

== SignalsManagerComponent ==

Can be used for controlling values by animations, sounds, UI, particles and so on.

* Doesn't require any extra configuration for weapon

== RplComponent ==

Enables proper replication of this entity over network

= Weapon related components =

== MuzzleEffectComponent ==

Component responsible for muzzle flash effects. On weapons, scripted version (SCR_MuzzleEffectComponent) should be used {| class="wikitable" ! Param ! Type ! Unit ! Description |- | ===== Auto Update ===== | ''bool'' | | Should be updated independently of the component? |- | ===== Attach To Parent ===== | ''bool'' | | Should be attached to parent entity |- | ===== Emitter Entity Class ===== | ''resource (.et)'' | | Entity class to be spawned, it will have particle effect as visual object |- | ===== Particle Effect ===== | ''resource (.ptc)'' | | Particle effect |- | ===== Effect Orient Up ===== | ''bool'' | | Should effect be oriented Y up (true) or using parent entity normal (false)? |- | ===== Enabled On Dedicated Server ===== | ''bool'' | | Should the effect works on a dedicated server? |- | ===== Effect Position ===== | ''EntitySlotInfo'' | | Position from which particle effect will originate |- | ===== Reset On Fire ===== | ''bool'' | | Resets emitter when muzzle is fired |}

== SCR_MuzzleEffectComponent ==

Defines muzzle flash particle effects (.ptc) and its effects

Should be child of of '''MuzzleComponent'''

''Inherits from MuzzleEffectComponent''

=== Muzzle Flash ===

{| class="wikitable" ! Param ! Type ! Unit ! Description |- | ===== Col ===== | ''vector'' | color | Color of muzzle flash effect |- | ===== Radius Of Flash ===== | ''float'' | | Radius of muzzle flash effect |- | ===== LV ===== | ''float'' | | LV of muzzle flash effect |- | ===== EV Clip ===== | ''float'' | | EVClip of muzzle flash effect |- | ===== Shadows ===== | ''bool'' | | Should muzzle effect cast shadows |- | ===== Max Time Of Flash ===== | ''float'' | seconds | Maximumum time of muzzle flash effect |- | ===== Offset ===== | ''vector'' | | Offset of light from muzzle flash origin |}

== CaseEjectingEffectComponent ==

Component responsible for simpler (compared to '''SCR_MuzzleEffectComponent''') particle effects when muzzle is being fired. Used for spent case effects and gun barrel smoke.

Should be child of of '''MuzzleComponent'''

''Inherits from MuzzleEffectComponent'' {| class="wikitable" ! Param ! Type ! Unit ! Description |- | ===== Water Surface ===== | ''float'' | | Surface value for water |- | ===== Has Sound ===== | ''bool'' | | Should the effect trigger sound? |}

== SCR_MeleeWeaponProperties ==

Defines melee attack properties of the weapon

=== Global ===

{| class="wikitable" ! Param ! Type ! Unit ! Description |- | ===== Damage ===== | ''float'' | | Size of damage dealt by the weapon |- | ===== Range ===== | ''float'' | meters | Range of the weapon |- | ===== Execution Time ===== | ''float'' | seconds | How long it takes to execute the attack |}

=== Hit detection ===

{| class="wikitable" ! Param ! Type ! Unit ! Description |- | ===== Num Of Measurements ===== | ''integer'' | | Number of measurements in frame |- | ===== Collision Probes Pos ===== | ''array of vectors'' | | List of coords where the collision probes will be placed (related to model) |- | ===== Num Of Failed Probes Tolerance ===== | ''integer'' | | Number of failed probes check that cause the attack will be canceled immediately |}

== SCR_WeaponStatsManagerComponent == The SCR_WeaponStatsManagerComponent is a base component applied to weapons, allowing them to be modified by attachments like bayonets and silencers, which change both global and muzzle-specific stats. This component can be extended by mods to introduce additional moddable weapon attributes.

More info can be found on [[Arma Reforger:Weapon Stats-Modifing Attachments|Weapon Stats-Modifing Attachments]] page {| class="wikitable" ! Param ! Type ! Unit ! Description |- | ===== Enabled ===== | ''bool'' | |Determines if components is active or not |} == SCR_WeaponAttachmentsStorageComponent ==

Defines inventory properties of the weapon like display name, size, preview image and also '''weapon IK pose''' {| class="wikitable" ! Param ! Type ! Unit ! Description |- | ===== Attributes ===== | ''class'' | SCR_ItemAttributeCollection | Class containing various item attributes |- | ===== Wb Placement From Attributes ===== | | | When placing item in world editor, respect properties specified in ItemAttributeCollection (listed in Attributes class) |- | ===== Priority ===== | ''integer'' | | Storage priority |- | ===== Storage Purpose ===== | ''array of bools'' | | Storage usage purpose |- | ===== Use Capacity Coefficient ===== | ''bool'' | | Use item volume coefficient for capacity |- | ===== Capacity Coefficient ===== | ''flooat'' | | Ammount of item volume to be considered as allowed cumulative capacity. Only visible when Use Capacity Coefficient is set to true |- | ===== Max Cumulative Volume ===== | ''float'' | cm^3 | Maximum cumulative volume capacity in cm^3. Only visible when Use Capacity Coefficient is set to false |- | ===== Max Item Size ===== | ''float'' | cm^3 | Maximum allowed item size (item can be rotated) cm^3 Only visible when Use Capacity Coefficient is set to false |}

=== SCR_ItemAttributeCollection ===

{| class="wikitable" ! Param ! Type ! Unit ! Description |- | ===== Item Display Name ===== | ''class'' | MagazineUIInfo | UI related attributes |- | ===== Item Phys Attributes ===== | ''class'' | ItemPhysicalAttributes | Physical attributes |- | ===== Item Animation Attributes ===== | ''class'' | ItemAnimationAttributes | Animation attributes |- | ===== Custom Attributes ===== | ''array of classes'' | | Item specific attributes can be set here |- | ===== Common Item Type ===== | ''enum'' | | Common item type identifier. Available options:

* NONE * BANDAGE * AMMO * MG_AMMO * FOOD * BINOCULARS * COMPASS * FLASHLIGHT * RADIO * WATCH |- | ===== Size ===== | ''enum'' | | Slot size. Available options:

* SLOT_1x1 * SLOT_2x1 * SLOT_2x2 * SLOT_3x3 |- | ===== Slot Type ===== | ''enum'' | | Slot type. Available options:

* SLOT_ANY * SLOT_BACKPACK * SLOT_LBS_BUTTPACK * SLOT_VEST * SLOT_WEAPONS_STORAGE * SLOT_GADGETS_STORAGE * SLOT_LOADOUT_STORAGE * SLOT_LOOT_STORAGE |- | ===== Draggable ===== | ''bool'' | | Sets item movable by drag'n'drop |}

== WeaponSoundComponent ==

Provides (signals) connection to sound engine {| class="wikitable" ! Param ! Type ! Unit ! Description |- | ===== Mute ===== | ''bool'' | | Should this component be muted by default? |- | ===== Filenames ===== | ''array of resources'' | | List of audio projects which are assigned to this asset |- | ===== On Frame Update ===== | ''bool'' | | Enable/disable on-frame updating of the component |- | ===== Script Callbacks ===== | ''bool'' | | Callbacks for scripted methods |- | ===== Distance Management ===== | ''bool'' | | Updating sounds and ability to play them automatically enabled or disabled based on their distance from camera |- | ===== Include Inactive ===== | ''bool'' | | Distance management for inactive component |- | ===== Sound Points ===== | ''array of classes'' | SountPointInfo | Array of custom of sound position. With this parameter it is possible to specify place from which the sound will be played |}

== WeaponAnimationComponent ==

General weapon animation components (includes weapon related animations for characters)

Should be child of of '''WeaponComponent'''

''Inherits from BaseItemAnimationComponent''

Exposes following variables to be used in animation

* TriggerPulled (bool) - Indicates if weapon's trigger is pulled * Firing (bool) - Indicates if weapon is currently firing * State (int) - Represents the firemode state * SightElevation (float) - Controls weapon sight elevation/zeroing * Cocked (bool) - Indicates if weapon's hammer is cocked * Empty (bool) - Indicates if weapon barrel is empty * LastBullet (bool) - Indicates if last bullet is in the weapon * Bipod (bool) - Indicates if bipod is deployed * BipodPitch (float) - Bipod pitch angle * BipodYaw (float) - Bipod yaw angle * BipodRoll (float) - Bipod roll angle * OpenBoltState (bool) - Indicates bolt position state

Additionally, following commands are exposed

# [[Arma Reforger:Animation Editor: Character Action Commands|CMD_Weapon_Reload]] - Controls reload animations # CMD_Weapon_MagRelease - Controls magazine release animations (not used anywhere) # CMD_Weapon_OpenCover - Controls weapon cover opening animations (was used on MG, currently not functional) # CMD_Weapon_Unfold - Controls weapon folding/unfolding animations (used on LAW)

{| class="wikitable" ! Param ! Type ! Unit ! Description |- | ===== Anim Graph ===== | ''resource'' | | Animation graph resource |- | ===== Anim Instance ===== | ''resource'' | | Animation graph instance |- | ===== Start Node ===== | ''string'' | | Node where to start from |- | ===== Always Active ===== | ''bool'' | | Should component be always active? Otherwise will be active only when synced with Character. |- | ===== Anim Injection ===== | ''class'' | AnimationAttachmentInfo | Character animation injection to be set to character's anim graph attachment node |- | ===== Bind With Injection ===== | ''bool'' | | Bind commands only when character injection is setup |- | ===== Auto Command Bind ===== | ''bool'' | | Automatically Bind all commands from template |- | ===== Anim Commands To Bind ===== | ''array of classes'' | | Only visible when Auto Command Bind is set to false |- | ===== Auto Variables Bind ===== | ''bool'' | | Automatically Bind all variables from template |- | ===== Anim Variables To Bind ===== | ''array of classes'' | | Variables which should be additionally bind to weapon animation graph. Only visible when Auto Variables Bind is set to false |- | ===== Mesh Visibility Configuration ===== | ''class'' | MeshesVisibilitySwitchConfig | Animation commands to be synchronised with character graph |- | ===== Rest On Deactivation ===== | ''bool'' | | On component deactivation, should the internal animation state be reset and the base pose applied? |- | ===== Simulate On Headless ===== | ''bool'' | | Should we simulate current animations on headless builds? |- | ===== Deactivation Delay ===== | ''float'' | | Delay before animations go to sleep when inactive state was requested |}

=== AnimationAttachmentInfo ===

{| class="wikitable" ! Param ! Type ! Unit ! Description |- | ===== Anim Graph ===== | ''resource'' | | Animation graph name |- | ===== Anim Instance ===== | ''resource'' | | Animation graph instance |- | ===== Start Node ===== | ''string'' | | Node where to start from |- | ===== Binding Name ===== | ''string'' | | Binding name in root graph |}

== SightsComponent ==

GameComponet responsible for sights mechanics (like weapon ironsights)

Should be child of of '''MuzzleComponent'''

''Has two special actions in context menu available after clicking on Component name with Right Mouse Button:''

* ''Process zeroing data'' * ''Toggle sight point diag''

=== BaseSights ===

{| class="wikitable" ! Param ! Type ! Unit ! Description |- | ===== Sights Positions ===== | ''class'' | PointInfo | Position of the aiming down sight camera. Usually "eye" Pivot ID is used |- | ===== Sights Ranges ===== | array | SightRangeInfo | Zeroing Range, Rotation and Translation |- | ===== Sights Ranges Default Index ===== | integer | | |- | ===== Sights FOV Info ===== | ''class'' | SCR_FixedFOVInfo | Field of View defining info object |- | ===== Sights Point Front ===== | ''class'' | PointInfo | The sight point further from the character's eye |- | ===== Sights Point Rear ===== | ''class'' | PointInfo | The sight point closer to the character's eye |- | ===== ADS Time ===== | float | seconds | Time to ADS in seconds |- | ===== ADS Update Owner Activate State ===== | bool | | Activate/Deactivate owner on ADS |- | ===== Camera Recoil Amount ===== | float | | Percentage of recoil applied to camera (0-300%) |}

=== Sound ===

{| class="wikitable" ! Param ! Type ! Unit ! Description |- | ===== Sound Int ===== | ''integer'' | | Value of corresponding sound signal when sight is used. |}

=== SCR_FixedFOVInfo ===

{| class="wikitable" ! Param ! Type ! Unit ! Description |- | ===== Field Of View ===== | ''float'' | degrees | Fixed field of view in degrees |}

=== SightRangeInfo ===

{| class="wikitable" ! Param ! Type ! Unit ! Description |- | ===== Range ===== | ''integer'' | | Range information (x = animation value, y = range in meters) |- | ===== Weapon Position ===== | class | PointInfo | ADS camera position adjustments for this Range |}

== AttachmentSlotComponent ==

For attaching various attachment on weapon (scopes, flashlights, etc.).

Should be child component of '''WeaponComponent''' (''for weapon related accessories like scopes, flashlights, etc'') '''or MuzzleComponent''' (''for muzzle related attachments like suppressors'') {| class="wikitable" ! Param ! Type ! Unit ! Description |- | ===== Attachment Slot ===== | ''class'' | | Defines position of the attachment |- | ===== Attachment Type ===== | ''class'' | | Object which specifies compatibility. |}

== WeaponComponent ==

General weapon components.

''Has two special actions in context menu available after clicking on Component name with Right Mouse Button:''

* ''Process zeroing data'' * ''Toggle sight point diag''

=== Weapon Obstruction ===

This category contains properties that control how the weapon handles obstruction when the character is in close proximity to objects in the environment. These settings affect how the weapon and character respond to obstructions to prevent clipping and enhance authenticity .

{| class="wikitable" |+ !Param !Type !Default value !Unit !Description |- | ===== Should Handle Obstruction ===== |''bool'' |<code>true</code> | |Determines whether the weapon should handle obstruction when equipped. If set to '''''true,''''' obstruction handling is enabled for this weapon. |- | ===== Obstruction Test Character Offset ===== |''vector'' |<code>(0.0, 0.0, 0.0)</code> |m |Specifies an offset from the character's reference point (usually the neck) to the weapon handling point. This offset is used during obstruction tests to accurately represent the weapon's position relative to the character. |- | ===== Obstruction Test Added Length ===== |''float'' |<code>0.0</code> |m |Defines additional length added to the end of the obstruction test ray (which extends from the character's reference point plus any offsets). This accounts for extra distance beyond the weapon's length that should be considered during obstruction tests. |- | ===== Obstruction Max Torso Z Offset ===== |''float'' |<code>0.15</code> |m |Specifies the maximum distance along the Z-axis (forward/backward direction) that the character's torso can move back when in significant or full obstruction. During slight obstruction, the torso position is smoothly interpolated up to this maximum value. This prevents the weapon from clipping through objects by adjusting the character's posture. |- | ===== Sign Obstr Weapon Constant Offset ===== |''vector'' |<code>(0.1, -0.25, -0.1)</code> |m |'''''Significant Obstruction Weapon Constant Offset'''''

Sets a base offset for the weapon's position when in significant obstruction. This constant offset is applied via Inverse Kinematics (IK) to reposition the weapon appropriately when obstructions are detected. |- |'''Slight Obstr Weapon Max Z Offset''' |''float'' |<code>0.05</code> |m |'''''Slight Obstruction Weapon Max Z Offset'''''

Specifies the maximum distance along the Z-axis that the weapon can be moved back via IK during maximum slight obstruction. The weapon's position is smoothly interpolated up to this maximum value based on the level of obstruction. |- | ===== Sign Obstr Max Weapon Z Offset ===== |''float'' |<code>0.2</code> |m |'''''Significant Obstruction Max Weapon Z Offset'''''

Specifies the maximum distance along the Z-axis that the weapon can be moved back via IK during maximum significant obstruction. This provides additional repositioning for more severe obstructions. |- | ===== Can Go to Full Obstruction ===== |''bool'' |<code>true</code> | |Determines whether the weapon can enter a full obstruction state. If set to <code>false</code>, the weapon will not go into full obstruction regardless of how much it clips into objects, potentially allowing firing but causing visual clipping. |- | ===== Obstruction Test BB Scale ===== |''vector'' |<code>(0.05, 0.05, 0.025)</code> |% |Determines the scale applied to the weapon's bounding box during obstruction tests. Adjusting this scale changes the sensitivity of obstruction detection by effectively altering the size of the weapon's collision volume used in tests. Only bounding box of model defined in Mesh Object component is used, meaning if you have modular weapon where stock is attachment that is extending the size of the weapon, then you should consider adjusting this bounding box parameter. |}

=== Camera Impact ===

{| class="wikitable" ! Param ! Type ! Unit ! Description |- | ===== Sights Camera Roll Scaler ===== | ''float'' | | Recoil Roll (angular Z rotation) camera scaler, 0 allowed |}

=== Sound ===

{| class="wikitable" ! Param ! Type ! Unit ! Description |- | ====== Sound Int ====== | ''integer'' | | Value of corresponding sound signal when weapon is hold |}

=== Rest ===

{| class="wikitable" ! Param ! Type ! Unit ! Description |- | ===== Signals Source Access ===== | ''class'' | | |- | ===== Use Aiming Type ===== | ''string'' | | Defines which aiming component will be used

Available options:

* None * Weapon * MainTurret * TargetingPod |- | ===== Is Throwable ===== | ''bool'' | | Is this weapon a throwable item (like grenade)? |- | ===== Weapon Type ===== | ''string'' | | Defines how AI will recognize this weapon.

Available options:

* None * Rifle * GrenadeLauncher * SniperRifle * RocketLauncher * MachineGun * Handgun * FragGrenade * SmokeGrenade |- | ===== UI Info ===== | ''class'' | WeaponUIInfo | |- | ===== Weapon Slot Type ===== | ''string'' | | Weapon slot type |- | ===== Weapon Offset ===== | ''vector'' | | Linear offset of weapon when held |- | ===== Weapon Offset ADS ===== | ''vector'' | | Linear offset of weapon when aiming |- | ===== Can Be On Sling ===== | ''bool'' | | Should current weapon be allowed to be placed on sling? |}

== MuzzleComponent ==

Responsible for "firing" part of weapon, has definition of muzzle, fire modes, magazine compatibility (magwells), magazine position, recoil, spread and sway

Should be child component of one of the '''WeaponComponent'''

=== Magazine ===

{| class="wikitable" ! Param ! Type ! Unit ! Description |- | ===== Magazine Well ===== | ''class'' | | This parameter defines Magazine Well class of muzzle. All magazines which are also using same '''Magazine Well''' class (or one parented to it) will be usable in this muzzle |- | ===== Magazine Template ===== | ''resource'' | | This parameter defines which magazine prefab is pre-attached to weapon. If you want to have no magazine attached to weapon by default, leave this parameter empty |- | ===== Magazine Position ===== | ''class'' | InventoryStorageSlot | Defines where magazines are attached. Usually '''Pivot ID''' "''slot_magazine''" is used and '''Child Pivot ID''' "''snap_weapon''" |}

=== Weapon moddifiers ===

{| class="wikitable" ! Param ! Type ! Unit ! Description |- | ===== Weapon Aim Modifiers ===== | ''array of classes'' | ''...AimModifier'' classes | |- | ===== Bullet Init Speed Coef ===== | ''float'' | coefficient | How much this muzzle changes initial speed of bullet. F.e. longer barrels achieve higher velocity. |- | ===== Dispersion Diameter ===== | ''float'' | meters | Diameter of dispersion cone at Dispersion Range. |- | ===== Dispersion Range ===== | ''float'' | meters | Distance from target where Dispersion Diameter is being measured |}

=== Fire Modes ===

{| class="wikitable" ! Param ! Type ! Unit ! Description |- | ===== Fire Modes ===== | ==== ''array of classes'' ==== | ==== BaseFireMode ==== | Array of weapon fire modes |}

==== BaseFireMode ==== {| class="wikitable" ! Param ! Type ! Unit ! Description |- | ===== Max Burst ===== | ''float'' | rounds | Max amount of bullets that will be fired one after another when trigger is pressed. Behavior is further defined by '''Burst Type''' parameter |- | ===== Burst Type ===== | ''string'' | | Only visible when '''Max Burst''' is above 0

Available options

* '''Uninterruptable -''' Burst cannot be interrupted - after pressing the fire button, weapon will fire exactly as many bullets as it is specified by Max Burst parameter (unless magazine will run out of ammo * '''Interruptable -''' Weapon will file as many rounds as defined in Max Burst as long as trigger is pressed. Weapon will have burst memory * '''InterruptableAndReseting -''' As above but without burst memory |- | ===== Max Salvo ===== | ''float'' | rounds | Amount of bullets fired at once after pressing trigger once |- | ===== Rounds Per Minute ===== | ''float'' | rounds per minute | Cyclic rate of fire of weapon in rounds per minute |- | ===== UI Name ===== | ''string'' | | UI Name - unused |}

{{GameCategory|armaR|Modding|Assets|Guidelines}} {{GameCategory|armaR|Modding|Assets|Weapon Creation|Tutorials}}
gvtjpo8y3yc8q9jiidznlob9h6yduc3

# Arma Reforger:Weapon Slots And Bones

5050
34359
371020
370372
2025-02-26T12:32:09Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
371020
wikitext
text/x-wiki
{{TOC|side}} == Splitting Weapon ==

Weapon should be split into two parts - body and attachments - and all attachments can be connected to body via slots.

=== Body ===

There are few guidelines when it comes to setting up weapon model: * weapon itself has to be without magazine or any attachments * the body has a "'''slot'''" points (dummy objects), into which attachments are being snapped in a prefab. We always name this point "'''slot_description'''". [[File:armareforger-weaponslots-body.png|none|frame|AK74 body with slots and bones visible]]

{{Feature|informative|You can always check position of the existing weapons by loading them in [[Arma_Reforger:Resource_Manager:_Model_Editor#Bones|Resource Browser]] model viewer and switching to '''Bones''' tab.}}

=== Attachments ===

* everything, which is not core part of a weapon, like optics, magazines, grenade launchers, etc. * each attachment has a "'''snap'''" point (dummy object), which is being snapped to a "slot" point on a weapon body in a prefab. We always name this point "'''snap_description'''". <gallery widths="422" heights="433"> File:armareforger-weaponslots-magazine-snap.png|AK-74 magazine snap point File:armareforger-weaponslots-snappoint-gp25.png|GP-25 snap point </gallery>

== Slot/Snap points ==

When figuring out the position of slot points on weapons and snap points on attachments, following steps will help to avoid complications with possible badly modeled mesh or badly placed slot and snap points:

# Before a production of new assets starts, create rough placeholders for all attachments and set their snap points following the rules below # When modeling the weapon and setting up the slot point, try as early as possible to attach all possible attachments exactly '''"snap point on slot point"''' (even just placeholders if final mesh is not possible) and see if all fits. # If some attach mechanism is the same for more weapons, the slot point must be on the the same spot in relation to the attach mechanism on these weapons (so all relevant attachments always fit in).

=== Conventions ===

==== Slots ==== {| class="wikitable" ! What ! Naming ! Notes ! Example |- | Magazine well | <code>slot_magazine</code> | Used in '''MuzzleComponent''' * Should be setup according to the magazine * in a place, where front side of the magazine touches the bottom side of the weapon body | [[File:armareforger-weaponslots-magazinewell.png|border|frameless]] |- | Optics mount '''''(non-standard rail)''''' | <code>slot_optics</code> | Used in '''AttachmentSlotComponent''' * node should be placed on contact surfaces * for AK dovetail mount - on center of a rounded niche on outer side of the weapon body attach mechanism | [[File:armareforger-weaponslots-slot-optics.png|border|frameless]] |- | Muzzle | <code>slot_barrel_muzzle</code> | Used in '''AttachmentSlotComponent''' * suppressors, compensator, etc.

* node for slot should be positioned on the end of the muzzle thread | [[File:armareforger-weaponslots-slot-barrel-muzzle.png|border|frameless]] |- | Top rail | | rowspan="3" | Used in '''AttachmentSlotComponent''' * should be mainly used for Picatinny rail or any other universal mounting solution | rowspan="3" | Slot placement (from [https://github.com/BohemiaInteractive/Arma-Reforger-Samples/blob/main/SampleMod_NewWeapon/Assets/Weapons/Rifles/SampleWeapon_01/SampleWeapon_01.blend Sample New Weapon]) [[File:armareforger-weaponslots-picatinny-top.png|frameless]]

[[File:armareforger-weaponslots-picatinny-sample.png|frameless]]

Example of mount - Picatinny rail (+dimensions)

[[File:armareforger-weaponslots-picatinny.png|frameless]] |- | Bottom rail | |- | Side rail | |- |Under-barrel | <code>slot_underbarrel</code> | Used in '''AttachmentSlotComponent''' * to be used with underbarrel devices such as UGL or grip | [[File:armareforger-weaponslots-slot-underbarrel.png|border|frameless]] |- | Bayonet mount | <code>slot_bayonet</code> | Used in '''AttachmentSlotComponent''' | |- | Flash-light | <code>slot_flashlight</code> | Used in '''AttachmentSlotComponent''' | |}

==== Attachments ==== {| class="wikitable" ! What ! Naming ! Notes !Example |- | Magazine | <code>snap_weapon</code> | * snap is located on front upper edge, in the center of the magazine | [[File:armareforger-weaponslots-magazine-snap.png|frameless|263x263px|alt=]] |- | Optics | <code>snap_weapon</code> | | [[File:armareforger-weaponslots-snap-optic.png|frameless|alt=]] |- | Muzzle device | <code>snap_weapon</code> | * model is centered on the end of the thread | |- | Under-barrel | <code>snap_weapon</code> | * UGLs often use specialised mounts, so it needs to be fitted according to weapon | [[File:armareforger-weaponslots-snappoint-gp25.png|frameless]] |- |Bayonet | <code>snap_weapon</code> | | |- | Bipod | <code>snap_weapon</code> | | |- | Flashlight | <code>snap_weapon</code> | | |- | Laser | <code>snap_weapon</code> | | |- | Barrel | <code>snap_weapon</code> | machineguns | |}

==== Simulation ==== Slots used by various weapon related components {| class="wikitable" ! What ! Naming ! Notes ! Example |- | Eye (aiming) | <code>eye</code> | Used by '''SightsComponent''' * for each muzzle (if needed - e.g. integrated UGL yes, double-barrel shotgun no) | [[File:armareforger-weaponslots-eye-point.png|frameless]] |- | Barrel (firing dir) - Position | <code>barrel_chamber</code> | Used by '''MuzzleComponent''' * for each muzzle | [[File:armareforger-weaponslots-barrel-chamber.png|frameless]] |- | Barrel (firing dir) - Direction | <code>barrel_muzzle</code> | Used by '''MuzzleComponent''' * for each muzzle | [[File:armareforger-weaponslots-barrel-muzzle.png|frameless]] |}

====Bones==== Below names are compatible with existing [[Arma Reforger:Animation Export Profiles|animation export profiles]] {| class="wikitable" ! What ! Naming ! Notes |- | Magazine release | <code>w_mag_release</code> | |- | Bipod legs | <code>w_bipodleg</code> <code>w_bipodleg_left</code> <code>w_bipodleg_right</code> | |- | Trigger | <code>w_trigger</code> | |- | Safety | <code>w_safety</code> | Use only in case weapon has separate safety lever. If not, use firemode selector |- | Firemode selector | <code>w_fire_mode</code> | |- | Buttstock | <code>w_buttstock</code> | |- | Charging handle | <code>w_ch_handle</code> | |- | Ejection port | <code>w_ejection_port</code> | |- | Bolt | <code>w_bolt</code> | |- | Bolt release | <code>w_bolt_release</code> | |- | Slide | <code>w_slide</code> | pistols |- | Hammer / Striker | <code>w_hammer / w_striker</code> | |- | Cylinder | <code>w_cylinder</code> | revolvers |- | Rear sight | <code>w_rear_sight</code> | |- | Front sight | <code>w_front_sight</code> | |- | Barrel | <code>w_barrel</code> | single - recoil operated guns, multiple - rotary cannons |}

{{GameCategory|armaR|Modding|Assets|Guidelines}} {{GameCategory|armaR|Modding|Assets|Weapon Creation|Tutorials}}
7ad0cw3xaw9x9zfbmg7zuhn6pg4a5vm

# Arma Reforger:2D Map Creation

5050
34234
370960
349578
2025-02-26T12:31:58Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370960
wikitext
text/x-wiki
{{TOC|side}} In order to display a 2D map when using the map item in-game, a {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/World/Game/MapEntity.et}} must be placed.<br> It is possible to use custom geometry and/or texture using the following fields:

* Map Geometry Data - this file contains road network, buildings, airfields etc information for them to be displayed on the 2D map * Satellite Background Image - this file contains the map background texture: forests, shaded relief, etc.<!-- -->{{Feature|informative| This tutorial explains how to generate a '''Terrain Rasterization Background Image''' to be used as Satellite Background Image, but any other texture can be used (e.g a satellite map).}}

[[File:armareforger_2D-map-tutorial-generate.png|thumb| 1. Export Map Data Tool button<br> 2. Export Map Data Tool tab<br> 3. Export button ]] == Generate Map Geometry Data ==

The Map Geometry Data field takes a topography data file ({{hl|.topo}} extension).

=== Generate TOPO ===

# Run [[Arma Reforger:World Editor|World Editor]] with the wanted world # Locate '''Export Map Data''' tool in toolbar (marked as 1) # Click '''Export Map Data''' tab (marked as 2) to display the tool's panel if needed # Set the '''Type''' to Geometry2D # Set up the settings under the '''Geometry 2D''' category, such as color and scale # Click the '''Export''' button (marked as 3){{Feature|important|Be patient, as the {{hl|Geometry2D}} export operation '''will''' take time.}}

== Generate Terrain Rasterization Background Image ==

The Satellite Background Image field takes a {{hl|.edds}} file.

=== Generate TGA ===

# Run [[Arma Reforger:World Editor|World Editor]] with the wanted world # Locate '''Export Map Data''' tool in toolbar (1) # Click '''Export Map Data''' tab (2) to display the tool's panel if needed # Set the '''Type''' to Rasterization # Set up the settings under the '''Rasterization''' category, such as color and scale # Click the '''Export''' button (3)

This will have generated the 4096&times;4096 upside-down {{hl|''worldname''.tga}} file - it now needs to be converted to PNG in order to be properly imported in Enfusion to the {{hl|.edds}} format.

=== Convert to PNG ===

TGA can be converted with an image editor - here {{Link|https://www.getpaint.net/download.html#download|Paint.NET}} and {{Link|https://www.gimp.org/downloads/|GIMP}} will be used.

==== Paint.NET ==== * Open Paint.NET * Open the TGA file {{Controls|Ctrl|O}} * Flip it vertically: {{hl|Image > Flip Vertical}} * Use the Save As option {{Controls|Ctrl|Shift|S}} * Save as PNG using the dialog's dropdown

==== GIMP ==== * Open GIMP * Open the TGA file {{Controls|Ctrl|O}} * Flip it vertically: {{hl|Image > Transform > Flip Vertically}} * Use the Export As option {{Controls|Ctrl|Shift|E}} * Select PNG file type and click Export

=== Import PNG ===

* Place the PNG file in the {{hl|Data\UI\Textures\Map\worlds}} directory * Navigate to the PNG file in [[Arma Reforger:Resource Manager|Resource Manager]] * Right-click > Register * Go to the Import Settings tab, set Color Space to '''ToSRGB''' * Click the '''Import resource''' button at the top of the tab to generate the {{hl|.edds}} file.

== Setup ==

# Find the world's {{hl|MapEntity}} by using the Hierarchy tab's Search field - if it does not exist, create it by drag-and-dropping a {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/World/Game/MapEntity.et}} Prefab into the world. # Fill '''Map Geometry Data''' with the {{hl|.topo}} file generated previously # Fill '''Satellite Background Image''' with the {{hl|.edds}} file generated previously

{{GameCategory|armaR|Modding|Assets|Tutorials}}
lniyqdysy8t4xolyxushz2otoycj75b

# Arma Reforger:Car Creation

5050
32499
370918
364062
2025-02-26T12:31:50Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370918
wikitext
text/x-wiki
{{TOC|side}} {{Wiki|TODO}}

= Goals of this tutorial = In this tutorial you will learn about:

* Importing your first FBX file * Adding sockets & skeleton * How to configure new car

{{Feature|informative|If you '''don't have any experience with Workbench''' yet, it is recommended to '''go through [[Arma_Reforger:Car_Modding|modded car tutorial]]''' to familiarize with some of the concepts present in the '''Workbench''' and general car configuration.}} {{Messagebox|Sources files for this tutorial can be found on [https://github.com/BohemiaInteractive/Arma-Reforger-Samples/tree/main/SampleMod_NewCar '''Arma Reforger Samples Github repository''']|📥|orange}}

= Adding new car = '''Overview'''

Preparation phase consist of things like:

* Preparing basic structure * Preparing mesh * Exporting mesh

=== Preparing structure ===

While keeping to official structure is not mandatory and there are no engine restrictions asset wise about it, it's recommended to follow guidelines listed here - [[Arma_Reforger:Directory_Structure|Data (file) structure]] - to ensure that all automation plugins are parsing your assets correctly and make it later easy to navigate.

Below is recommended structure of addon which contains a new car asset

[[Image:armareforger-new-car-file-structure.png|1200px]]

== Creation Steps ==

* {{Link|Arma Reforger:Car Creation/Asset Preparation}} * {{Link|Arma Reforger:Car Creation/Prefab Configuration}} * {{Link|Arma Reforger:Car Creation/Simulation Configuration}}

{{GameCategory|armaR|Modding|Assets|Tutorials}}
q8di8b0n366pe2xytwje0y37jhqiuzc

# Arma Reforger:Car Modding

5050
32451
370945
370394
2025-02-26T12:31:54Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370945
wikitext
text/x-wiki
{{TOC|side}} = Goals of this tutorial = {{Messagebox|'''Overview'''

In this tutorial you will learn about:

* How to modify basic damage characteristics of the vehicle * How to change fuel consumption * How to change basic driving characteristics * Changing exhaust particle effects * Adding additional elements to the vehicle with '''BaseSlotComponent''' * How actions are working and how to add custom one|💬|#CDF}} {{Feature|informative|If you '''don't have any experience with Workbench''' yet, it is recommended to '''go through [[Arma_Reforger:Weapon_Modding|modded weapon tutorial]]''' to familiarise with some of the concepts present in the '''Workbench'''}} {{Messagebox|Sources files for this tutorial can be found on [https://github.com/BohemiaInteractive/Arma-Reforger-Samples/tree/main/SampleMod_ModdedCar '''Arma Reforger Samples Github repository''']|📥|orange}}

= Modifying existing car = '''Overview'''

Before going deeper into vehicle configuration, first we will prepare basic prefab to work with. In this chapter we will take a look at:

* Basic file structure * Preparing basic prefab inheriting from UAZ-469 * Briefly check already assigned components to UAZ-469

==== File structure ==== While keeping to official structure is not mandatory and there are no engine restrictions asset wise about it, it's recommended to follow guidelines listed here - [[Arma_Reforger:Directory_Structure|Data (file) structure]] - to ensure that all automation plugins are parsing your assets correctly and make it later easy to navigate.

Therefore, your first task will be preparing following file structure

[[Image:armareforger-modded-car-file-structure2.png|1200px]]

==== Preparing prefab ==== Let's start with creating new prefab. Look for [enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et '''UAZ469.et'''] in '''Resource Browser''' and then by using of the methods mentioned in Sample Modded Weapon documentation. To make it obvious what we are doing, call that new prefab '''UAZ469_modded'''.et.

{{Feature|informative|In this article, [[Arma_Reforger:Resource_Manager:_Options#Register_.22enfusion:.2F.2F.22_protocol|'''Enfusion links''']] are used. With those links it is possible to open specific resource just by simply clicking on that link. Enfusion links '''has to be manually activated in Workbench options''' (Workbench -> Options -> Workbench -> Register "enfusion://" protocol) before it can be used]}}

==== Changing Multi Material base color ==== Next thing that we will quickly do is replacement of currently assigned materials. In principle, everything works exactly same as on weapons so try to locate [enfusion://ResourceManager/~ArmaReforger:Assets/Vehicles/Wheeled/UAZ469/Data/UAZ469_Body.emat '''UAZ469_Body.emat'''] and create duplicated material (as described here for instance) called "'''UAZ469_Body_Modded.emat'''" and afterwards move it Sample Mod structure. '''MatPBRMulti''' is powerful kind of material which is going to be described more in detail in Sample New Car page. For now, try changing '''Material 1 (Base)''' to get some interesting variation and just to play with sliders. You can try to play with adjusting other mask this way too but as mentioned before, this material will be described in detail at later stage.

[[Image:armareforger-modded-car-changing-material.mp4|1200px]]

==== Components overview ==== As you can notice, list of components attached to vehicle is bit larger comparing to weapon we were editing before. From that list, we will use following components: [[File:armareforger-modded-car-component-overview.png|frame|left|400px|Overview]] * '''ActionsManagerComponent''' - To manage contextual actions (including get in/out) * '''SCR_VehicleDamageMangerComponent'''- To modify damage our vehicle is taking * '''MeshObject -''' To change used material * '''SCR_FuelConsumptionComponent & FuelManagerComponent -''' To change fuel consumption and capacity of fuel tanks * '''SCR_MotorExhaustEffectGeneralComponent''' - To change exhaust particle effects * '''VehicleWheeledSimulation -''' To change general driving behavior

Full list of components with some brief info on what they are doing can be obtained from Vehicle Components page. As you probably noticed, components listed in '''Object Properties''' list have different colors & shapes. Those are some visual cues whether they are for instance scripted or handled by game. {| class="wikitable" |'''Icon''' |'''Description''' |- |[[Image:armareforger-component-engine.png|32px]] |Engine component - Implemented deeply in Enfusion code |- |[[Image:armareforger-component-game.png|32px]] |Game component - Implemented in game code - ''may vary from game to game'' |- |[[Image:armareforger-component-hybrid.png|32px]] |Hybrid component - component is partially handled by engine and partially by script |- |[[Image:armareforger-component-scripted.png|32px]] |Scripted component - Component is fully scripted |- |[[Image:armareforger-component-editor.png|32px]] |Editor scripted component - Behaves in same way as any other scripted component. It is using custom icon to distinguish it from other components. |}

{{Clear}} == Modifying damage behaviour == '''Overview'''

In this chapter following topics will be explained

* How to increase armor on vehicle * ...yet make it super fragile to collisions!

[[File:armareforger-modded-car-damage-overview.png|frame|right|300px|Overview]] ==== Damage manager overview ==== Whole vehicle damage simulation is contained in '''SCR_VehicleDamageMangerComponent.''' There you can modify various parameters controlling how object will react to projectiles, explosions and collisions. The main hit. This ''Vehicle Hit Zone'' element serve as global damage collector - once Total HP is destroyed, whole vehicle is considered destroyed and damage particles will spawn (like '''''Destruction Particle''''' , '''''Burning Particle Resource''''' ) together with wreck model (defined in '''Wreck Model'''). More information about how damage is handled can be found here - Damage - Vehicles.

==== Increasing armor ==== In order to increase armor of our vehicle, we will have to change '''HP Max''' parameter. To ensure that it survives even the strongest projectiles in game, I would recommend to add 2 zeros to '''HP Max''' value. Similarly '''HP Damaged''', which controls when damaged particles are started to be played (dark exhaust smoke in this case) can be increased too so smoke doesn't start to appear to early.

==== Increasing collision impulse ==== Next thing on our ''to do list'' is increasing amount of damage received from collision with environment. To do so, simply increase '''Collision multiplier''' to i.e. '''100000,''' which will result in huge damage being applied upon collision & decrease '''Collision Velocity Threshold''' to 1.

As a result, you should end up with thing which can survive direct RPG hit yet it will be destroyed by slightly bumping into obstacle [[File:armareforger-modded-car-damage-tweak.png|frame|left|400px|Overview]]

{{Clear}} == Changing fuel consumption == '''Overview'''

In this chapter we will learn how fuel is simulated in game and we will change following things:

* Type of fuel vehicle is using * Amount of fuel in fuel tanks * Fuel consumption

==== Fuel handling overview ==== After filtering down components containing "''Fuel''" in their name, we should see 2 components in '''Object Properties''' list.

{| class="wikitable" |'''FuelManagerComponent''' |'''SCR_FuelConsumptionComponent''' |- |[[Image:armareforger-fuel-manager.png|400px]] |[[Image:armareforger-fuel-consumption.png|400px]] |} How both '''FuelManagerComponent''' & '''SCR_FuelConsumptionComponents''' works is described quite in detail on Fuel: Fuel System & Fuel: Fuel Consumption pages, so I recommend to read those pages first before proceeding further in this tutorial.

When looking at the UAZ-469 '''Fuel Nodes''' array, you might notice that it has two '''SCR_FuelNode''' elements. This is due to fact, that UAZ-469, like quite plenty of military vehicles, has 2 separate fuel tanks and this thing is simulated in game.

==== Changing fuel type ==== To change fuel type, select one of the '''SCR_FuelNodes''' in '''FuelManagerComponent''' components, and then simply click on '''"Fuel Type"''' list box and change fuel type from '''Petrol''' to '''Diesel.''' Repeat same procedure with 2nd fuel tank.

==== Changing fuel tanks capacity ==== Changing fuel capacity is as simple as previous change to fuel type. To change maximum capacity, increase "'''Max Fuel'''" parameter from '''39 to 69 liters''' on both fuel tanks. Beside that, it might be also wise to change initial fuel tank state by increasing '''Initial Fuel Tank State''' on one engine from 39 to 69 too. Just for sake of experimentation, we will leave 2nd fuel tank with same amount of '''initial fuel''' as before.

==== Increasing fuel consumption ==== Next, let's move to changing fuel consumption. Select '''SCR_FuelConsumptionComponents''' and locate '''Fuel Consumption''' property. This property controls amount of '''liters''' fuel consumed '''at max power RPM per hour'''. Change it to '''145''' and voila - your vehicle will consume fuel quite fast even though it has larger fuel tanks.

== Changing driving behaviour == '''Overview'''

Following topics will be covered in this paragraph

* Basics of wheeled simulation * How to change engine parameters * Changing of driving characteristics

==== Wheeled simulation overview ==== Wheeled vehicles simulation is contained in '''VehicleWheeledSimulation''' component. In that component, after expanding '''Simulation''' list, you can find five major categories:

* '''Engine''' - responsible for engine simulation * '''Clutch''' - contains all parameters controlling clutch simulation * '''Gearbox''' - here you can change gearbox settings like amount of gears, gear ratios or gearbox latency * '''Differentials''' - differentials controls * '''Axles -''' contains definition of each axle together with wheels and tyres

Whole topic is rather complex so lets start with some simple changes first.

==== Changing engine parameters ====

[[Image:armareforger-modded-car-max-power.gif|left]]

{{Feature|informative|One such simple change might be for sure changing engine power. To do so, search for '''Max Power''' parameter, which describes maximal engine power output in '''kW'''. To get a nice power boost, let's change it from 55 to 255! Next, we can change engine torque by '''100Nm ''' by modifying '''Max Torque''' parameters from 172Nm to 272Nm. After that change, our modded vehicle should gain speed much faster! Be careful though - don't forget it's still super fragile!}}

{{Feature|informative|To see how the parameters affect the engine maximal torque you can check [[Arma_Reforger:Vehicle_Creation#Engine_parameters|Vehicle Creation - Engine Parameters]] page}}

{{Clear}} ==== Changing driving characteristics ==== Another thing that we might try is changing turning radius of front axle. To do so, navigate & expand '''Axels''' list and then select top one '''Axle.''' Over there you should see '''Max Steering Angle''' parameter, which controls maximum rotation of front axle. Parameter is in degrees. To gain some more maneuverability on tight corners, we will increase that value to 48.

Above changes are just quickly demonstration on how simulation works so feel free to play with those values mores. A bit more information can be also found in Sample New Car - Documentation page where things like wheel position and setting up gearbox are described.

== Adding turret to vehicle == '''Overview'''

Time to add some extra firepower to our vehicle! In this chapter we will learn how to add working'''*''' turret our vehicle

* Adding turret via '''SlotManagerComponent'''

While it might look quite advanced at first glance, adding turrets to vehicle is not that complicated if you want to use one of the already existing turrets. Whole procedure can be done in two steps: {{Feature|important|If you are adding component to '''entity instance''' , don't forget to click "'''Apply to prefab'''" button once you are done with making changes!}}

{| class="wikitable" |1. Adding base slot component |2. Filling in proper values to base slot component |- |[[Image:armareforger-modded-car-new-component.gif]] |[[Image:armareforger-modded-car-register-slot.gif]] |- |Click on "'''+ Add Component'''" and from that list pick up " '''SlotManagerComponent'''". |Once you have that component ready, assign [enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/M151A2/M151A2_gun_mount_M2HB.et '''M151A2_gun_mount_M2HB.et'''] prefab to '''EntityPrefab''' slot & then change '''AttachType''' to '''RegisteringComponentSlotInfo.''' After that, you should few more parameters should be available to you - toggle all of them on and adjust '''Offset''' value to your liking. |} As a result, you should end up with something like this

[[Image:armareforger-modded-car-turret-result.png|center|400px]] == Changing exhaust effects == '''Overview'''

As last thing, we will try to do some modifications to particle effects to get some sparks going out of exhaust tubes. To do so, we will learn about

* Adding additional emitor to particle effect * Changing exhaust particle effects

[[File:armareforger-modded-car-exhaust-sfx.png|frame|left|300px|SCR_MotorExhaustEffectGeneralComponent]]

Vehicle exhaust effects configuration is located in '''SCR_MotorExhaustEffectGeneralComponent. ''' Assuming you already know how to handle particle from [[Arma_Reforger:Weapon_Modding#Particle_Effects_Change|Weapon Modding page]], let's move to creating derivative of [enfusion://ResourceManager/~ArmaReforger:Particles/Vehicle/Vehicle_smoke_car_exhaust_normal.ptc|'''Vehicle_smoke_car_exhaust_normal.ptc'''] and call that new effect '''Vehicle_smoke_car_exhaust_black_02_modded.ptc.''' If you want, you can straight away go to changing '''Particle Effect''' parameter in '''SCR_MotorExhaustEffectGeneralComponent.''' [[Image:armareforger-modded-car-exhaust-sfx2.gif|right]]

Once you are '''Particle Editor,''' try to adding new editor by clicking on "'''+ Add'''" button. Name that new emitor "'''s1_sparks'''" and proceed to creating new particle effect. This it's time for some challenge - '''try to replicate effect on the right by doing it on your own.''' If you have troubles with recreating it, try looking at previously made explosion effect or take a look at the spoiler below.

Small tip: make sure that "Repeat" parameter is checked!

[[File:armareforger-modded-car-exhaust-add.png|frame|left|300px|Viewport]]

{{Clear}} {{Feature|informative|Click on "Show text" button to see full example configuration &rarr; <spoiler>[[File:armareforger-modded-car-exhaust-full.png|frame|left|300px|Viewport]]</spoiler>}}

{{Clear}} == Testing results in-game ==

[[File:armareforger-modded-testing-play.png|frame|left|300px|Switching to play mode]] Once everything is complete, it is finally possible to place this prefab on some terrain and spawn in-game.

Easiest way to do it would be selecting of "'''Play from camera position"''' option in Play menu (accessible by clicking on little arrow to right of green one)

Additionally, it is worth to consider adding this new asset to [[Arma_Reforger:Game_Master#Entity_Browser|'''Game Master Entity Browser''']]. All instructions for that are listed on [[Arma_Reforger:Asset_Browser_Mod_Integration|'''Asset Browser Mod Integration page''']]

{{GameCategory|armaR|Modding|Assets|Tutorials}}
f4haqlyjdmju9val0a8ylyyaitwq319

# Arma Reforger:Character Gear Creation

5050
37837
371012
347095
2025-02-26T12:32:07Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
371012
wikitext
text/x-wiki
Tutorials related to creating various parts of character gear

* [[Arma_Reforger:Character_Gear_Creation/Headgear|Headgear Creation]] ** [[Arma_Reforger:Character_Gear_Creation/Headgear/Asset_Preparation|Headgear - Asset Preparation]] ** [[Arma_Reforger:Character_Gear_Creation/Headgear/Prefab_Configuration|Headgear - Prefab Configuration]]

* [[Arma_Reforger:Character_Gear_Creation/Vest|Vest Creation]] ** [[Arma_Reforger:Character_Gear_Creation/Vest/Asset_Preparation|Vest - Asset Preparation]] ** [[Arma_Reforger:Character_Gear_Creation/Vest/Prefab_Configuration|Vest - Prefab Configuration]]

{{GameCategory|armaR|Modding|Assets|Tutorials}}
jfx9a88aswjuwjhxyx9h2hfmbn8rmgl

# Arma Reforger:Data Modding Basics

5050
32799
376298
376064
2025-09-30T19:38:44Z
Reyhard
10671
/* Basics */ GUID linking
376298
wikitext
text/x-wiki
{{TOC|side}}

= Content Moddability Overview =

== Can Be Replaced ==

This means that certain resource can be fully replaced. Usually such resources are created manually by creating same asset with same GUID

{{Feature|informative|'''Example''':

Variant of ''Model.xob'' from ArmaReforger is created in Addon1 via '''''Override in "Addon1" addon...'''''. This new file share same GUID of original file and can contain completely different mesh}}

== Can Be Modified ==

Certain elements of the resource can be modified while rest of them is kept

{{Feature|informative|'''Example''':

Vehicle_Base.et is copied from ArmaReforger to Addon1 with exactly same GUID as original file via '''''Override in "Addon1"''''' action. Copy of Vehicle_Base.et, located in Addon1, contain only changes introduced in this addon and those changes are later applied to original prefab.}}

== Can Be Inherited From ==

A new resource can inherit from an existing file: {{Feature|informative| '''Example:'''

Inherited version of ArsenalConfig_BLUEFOR.conf is created ''via'' '''''Create Inherited File''''' or '''''Inherit in "Addon1"''''' option. This new file has unique ID and inherits all data from its parent.}}

== Moddability table ==

{| class="wikitable" ! Extension ! File Type ! Can be replaced ! Can be modified ! Can be inherited from |- | '''.et''' | Prefab | {{Icon|warning}}<ref name="note_table_override" /> | {{Icon|checked}} | {{Icon|checked}} |- | '''.conf''' | Config | {{Icon|warning}}<ref name="note_table_override" /> | {{Icon|checked}} | {{Icon|checked}} |- | '''.xob''' | Model | {{Icon|checked}} | {{Icon|unchecked}} | {{Icon|unchecked}} |- | '''.emat''' | Material Definition | {{Icon|warning}}<ref name="note_table_override" /> | {{Icon|checked}} | {{Icon|checked}} |- | '''.edds''' | Enfusion DDS Texture | {{Icon|checked}} | {{Icon|unchecked}} | {{Icon|unchecked}} |- | '''.c''' | Enforce Script Source | {{Icon|warning}}<ref name="note_table_1" /> | {{Icon|warning}}<ref name="note_table_2" /> | {{Icon|checked}} |- | '''.layout''' | Layout Definition | {{Icon|warning}}<ref name="note_table_override" /> | {{Icon|checked}} | {{Icon|checked}} |- | '''.ptc''' | Particle System Definition | {{Icon|warning}}<ref name="note_table_override" /> | {{Icon|checked}} | {{Icon|unchecked}} |- | '''.ent''' | World Scene | {{Icon|checked}} | {{Icon|unchecked}} | {{Icon|unchecked}} |- | '''.layer''' | World Layer | {{Icon|unchecked}} | {{Icon|unchecked}} | {{Icon|unchecked}} |- | '''.bt''' | Behavior tree | {{Icon|checked}} | {{Icon|warning}}<ref name="note_table_3" /> | {{Icon|unchecked}} |- | '''.anm''' | Animation file | {{Icon|checked}} | {{Icon|unchecked}} | {{Icon|unchecked}} |- | '''.agf''' | Animation graph file | {{Icon|checked}} | {{Icon|unchecked}} | {{Icon|unchecked}} |- | '''.agr''' | Animation graph | {{Icon|checked}} |{{Icon|checked}} | {{Icon|unchecked}} |- | '''.aw''' | Animation Workspace | {{Icon|checked}} | {{Icon|unchecked}} | {{Icon|unchecked}} |- | '''.asi''' | Animation Set Template | {{Icon|checked}} | {{Icon|unchecked}} | {{Icon|unchecked}} |- | '''.pap''' | Procedural Animation | {{Icon|checked}} | {{Icon|unchecked}} | {{Icon|unchecked}} |- | '''.siga''' | Procedural Animation Signal | {{Icon|checked}} | {{Icon|unchecked}} | {{Icon|unchecked}} |- | '''.st''' | String Table | {{Icon|checked}} | {{Icon|unchecked}} | {{Icon|unchecked}} |- | '''.acp''' | Audio component | {{Icon|checked}} | {{Icon|unchecked}} | {{Icon|unchecked}} |- | '''.sig''' | Signal (Audio) | {{Icon|checked}} | {{Icon|unchecked}} | {{Icon|unchecked}} |- | '''.wav''' | Supported audio file format | {{Icon|checked}} | {{Icon|unchecked}} | {{Icon|unchecked}} |}

=== Footnotes ===

<references> <ref name="note_table_override">Following assets are always overridden and cannot be fully replaced</ref> <ref name="note_table_1">Script files are fully replaced if script in other addon (''filesystem)'' has same path as the one which is supposed to be replaced. For example '''AIAutotest.c''' located in ''$ArmaReforger:scripts\Game\AI\'' will be replaced by variant from '''Addon1''' if it is placed in same location and same name in '''Addon1''' file system - ''$Addon1:scripts\Game\AI\ AIAutotest.c''</ref> <ref name="note_table_2">Usage of ''modded'' keyword is required + few other restrictions apply like method in class must not be private in order to allow overloading it</ref> <ref name="note_table_3">Behavior trees attempts to override each other, instead of replace</ref> </references>

= Data manipulation =

== Basics ==

In principle, any file with meta file and unique '''[[Arma Reforger:Workbench Metadata#GUID|GUID]] -''' ''global unique identifier -'' can be be overridden or replaced . This means however, that files without meta file have to be modified in different way (scripts ) or cannot be replaced at all.

That means that for instance '''models, textures, layout, prefabs, configs or animations can be replaced using this method.'''

{{Feature|informative|When replacing assets, engine cares '''only about [[Arma_Reforger:Workbench_Metadata#GUID|GUID]] -''' that means neither '''file name''' or '''location''' doesn't have to be same as source file.}}

Creating overrides, duplicates or inherited files can be performed from context menu which is available in '''Resource Browser'''. This menu is visible after clicking with '''Right Mouse Button''' on selected asset. Availability of the actions depends on the type of the assets, so for instance models (''XOBs)'' have only ''Navigate to ...'' options.

[[Image:armareforger-data-modding-context-menu.png|center]] {{Clear}}

{| class="wikitable" | | '''Override''' | '''Replacement''' | '''Duplicate''' | '''Inherit''' |- | '''Description''' | Override creates a new file which shares same [[Arma Reforger:Workbench Metadata#GUID|GUID]] as original asset. This action allows to selectively replaces or add new elements to selected asset.

For instance it is possible to change value

'''It is not possible to remove elements from the overridden asset this way.'''

This action can be performed by selecting '''"Override in '...'"''' action from the '''Addons''' menu. | Replacement, as name suggest, completely replace original file with the new file.

[[Image:armareforger-data-modding-resource-variant.png]] In '''Particle Editor''', it is possible to use "'''Create variant for '...' addon..."''' action but beside that, in all other cases it user has to create duplicates on his own by ensuring that replacing file has same GUID as original one.

This can be done by either copy pasting meta file (if we have access to it) or changing GUID of asset in text editor, so it matches the original file GUID.

'''Prefabs''', '''configs''' and '''layouts cannot be replaced''' - they will be always in override mode. | Duplication creates a new file, with new, unique GUID. Duplicated file contains all the data from the original file (including inheritance) but doesn't modify in any way original file.

This action can be performed by selecting '''"Duplicate in '...'"''' action from the '''Addons''' menu. | Inherit action creates a new child file which inherits all the data from the parent.

This action can be performed by selecting '''"Inherit in '...'"''' action from the '''Addons''' menu.

Inheritance of '''prefabs''' can be only performed in '''Resource Browser''' attached to '''World Editor''' |- | '''Where it can be used''' | Prefabs, configs, materials and layouts | Sounds, models, textures, animations, particle effects, world files or behavior trees | Prefabs, configs, materials or layouts | Prefabs'''*''', configs or layouts |}

{{Feature|informative| When using [[Arma_Reforger:Startup_Parameters#addons|CLI parameter]] to load addons, '''working addon''' is equal to the last addon listed in addons list.

''Example:'' <enforce>-addons addon2, addon1, NewAddon</enforce> ''In above example '''NewAddon''' is current work addon'' }}

== Overriding assets ==

=== Using "Override in..." function ===

"'''Override to..."''' function can be used to modify (override) existing assets like configs, layouyts or prefabs.

[[Image:armareforger-data-modding-override-action.gif|left]] {{Feature|informative|'''Override to "..."''' option is available only for prefabs, layouts or configs. If there is already override in '''working addon''', this option will be missing from the context menu.

After this option is clicked, '''Resource Browser''' will create new overridden file in '''working addon''' (retaining original folder structure) and then navigate to '''overridden instance''' of selected asset.}}

{{Clear}} === Using "Navigate to..." function ===

Once you have file in addon which is overriding some data, you can quickly navigate

==== Navigate to Original ==== [[Image:armareforger-data-modding-navigate-original-action.gif|left]] {{Feature|informative|'''''Navigate to Original''''' button is available in file context menu only if selected file overridden or replaced in some addon. If selected asset is not overridden in any currently loaded addon then this option will appear greyed out.

After this option is clicked, '''Resource Browser''' will navigate to '''original instance''' of selected asset.}}

{{Clear}} ==== Navigate to Override ==== [[Image:armareforger-data-modding-navigate-override-action.gif|left]] {{Feature|informative|'''''Navigate to Override''''' button is available in file context menu only if selected file overridden or replaced in some addon. If selected asset is not overridden in any currently loaded addon then this option will appear greyed out.

After clicking that option, '''Resource Browser''' will navigate to the first '''overridden instance''' of selected asset.

In scenario where multiple addons are present and they are overriding same file, '''Navigate to Override''' can be used multiple times until last override is reached.}}

{{Clear}} ==== Navigate to Ancestor ====

[[Image:armareforger-data-modding-navigate-ancestor-action.gif|left]] {{Feature|informative|'''''Navigate to Ancestor''''' button is available in file context menu only if selected file overridden or replaced in some addon. If selected asset is not overridden in any currently loaded addon then this option will appear greyed out.

After clicking that option, '''Resource Browser''' will navigate to the first '''ancestor of overridden instance''' of selected asset.

In the scenario where multiple addons are present and they are overriding the same file, '''Navigate to Override''' can be used multiple times until the last override is reached. }}

{{Clear}} === Scripts ===

In Enfusion it's possible to modify already existing scripts by using some of special keyword

* '''[[Arma_Reforger:Object_Oriented_Programming_Advanced_Usage#Modding|modded]] -''' keyword used to modify existing scripting class * '''[[Arma_Reforger:Object_Oriented_Programming_Basics#override|override]] -''' keyword to override methods in modded classes * '''[[Arma_Reforger:Object_Oriented_Programming_Basics#super|super]] -''' allows you to invoke content of overridden method

==== Modded keyword ==== <enforce>modded class SCR_PlayerScoreInfo {

}</enforce>

==== Override keyword ==== <enforce>modded class SCR_ScoringSystemComponent : SCR_BaseGameModeComponent { override void AddSuicide(int playerID) { {

} }</enforce>

==== Super keyword ==== <enforce> modded class SCR_ScoringSystemComponent : SCR_BaseGameModeComponent { override void AddSuicide(int playerID) { super.AddSuicide(playerID); // Your example code below AudioSystem.PlaySound("{9BB653FF9E065943}Sounds/Animals/Bos_Taurus/Samples/bawl/bawl_0.wav"); } } </enforce>

=== Using "Duplicate to..." function ===

In '''Resource Browser''' you can quickly create new, duplicated file in project you are currently working on. This file is exact copy of original file and will be used from that point when any part of the game will try use asset with this '''GUID'''. Any changes that you are going to do to that file are going to be applied applied to that copy are not going to be propagated to it.

[[Image:armareforger-data-modding-duplicate-action.gif|left]] {{Feature|informative|'''Duplicate to "..."''' option is available only for prefabs, layouts or configs.

After this option is clicked, '''Resource Browser''' will create new duplicated file - with name selected by the user - in '''working addon''' (retaining original folder structure) and then navigate to that duplicate.}}

{{Clear}} == Inheriting ==

=== Using "Inherit in..." function ===

Inheriting from the prefabs, config files or layouts can be performed via "'''Inherit in...'''" function. After clicking with '''Right Mouse Button''' on appropriate file and then selecting Inherit in function, a new pop up window will appear asking for a new file name. Once name is confirmed, a new file will be created in '''working addon''' with same folder structure as original file. As expected, all of the attributes will be '''inherited from parent file'''.

[[Image:armareforger-data-modding-inheriting.png|center]]

{{Clear}}

=== Using "Transfer to..." function ===

Transfer to function is a functionality for moving data & merging partially overridden files (like prefabs or configs) from current working addon to parent addon. Parent addon need to be unpacked in order to have this functionality working.

{{Clear}} == Replacing assets ==

Replacing assets means that i.e. AK-74 model can be with a simple gray box and all prefabs which are referencing that AK-74 are going to use that new gray box from now. Such replacement can be performed with sounds, models, textures, animations, particle effects, world files or behavior trees.

[[Image:armareforger-data-modding-resource-variant.png|left]] In '''Particle Editor''' replacement can be performed quite easily by using "'''Create variant for "..." addon..'''." function. This action creates new '''ptc''' file with same '''GUID''' and '''content''' as '''original file'''. {{Clear}}

{{Feature|important|Extreme caution is advised when doing such replacement - tinkering with Workbench generated files in text editor might break those files if you don't know what you are doing }}

In all other cases, replacing files is slightly more complicated and requires operations outside of Workbench.

==== Getting file GUID ==== [[Image:armareforger-data-modding-getting-guid.png|left]] First step towards creating such replacement would be obtaining GUID - this can be done via '''Copy Resource GUID(s)''' action, available in '''context menu''' after clicking on file with '''Right Mouse Button.'''

Once '''GUID''' is obtained, it can be manually typed into meta file of some newly created model. After that action is completed, restart of the '''Workbench''' might be necessary.

{{Clear}} == Replacing script ==

Scripts can be replace each other simply when they are in same relative location with same name.

For instance, to replace [enfusion://ResourceManager/~ArmaReforger:scripts/Game/UserActions/PickupAction.c PickupAction.c] located in base '''ArmaReforger''' data, you would need to create a new script in your addon in same location and with exact name.<syntaxhighlight lang="c#"> MyAddon\scripts\Game\UserActions\PickupAction.c </syntaxhighlight>

If multiple addons are trying to replace same file, then the last one in the loading chain will be used.

{{GameCategory|armaR|Modding|Assets|Tutorials}}
8pspzwgfnfhrn77w40s1rhe3j8urcfa

# Arma Reforger:Faction Creation

5050
32597
370968
369663
2025-02-26T12:31:59Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370968
wikitext
text/x-wiki
{{TOC|side}} == Goals of this tutorial ==

In this tutorial you will learn about:

* Configuration of characters * Preparation of units groups * Creation of new factions * Integration of new faction into [[Arma_Reforger:Game_Master|Game Master]] * Integration of new faction into [[Arma_Reforger:Conflict|Conflict game mode]]

{{Feature|informative|This tutorial touches quite a lot of topics and it is recommended to familiarise yourself with [[Arma_Reforger:Weapon_Modding|'''modded weapon''' ]] and [[Arma_Reforger:Car_Modding|'''modded car''' ]] tutorials.}} {{Messagebox|Sources files for this tutorial can be found on [https://github.com/BohemiaInteractive/Arma-Reforger-Samples/tree/main/SampleMod_NewFaction '''Arma Reforger Samples Github repository''']|📥|orange}}

== Introduction ==

In this tutorial, process of creating new faction is explained and as an example''''', secrets of preparing '''Sample Faction - REDFOR'' will be unveiled'''.'''

This page goes through topics like '''preparing new characters''', '''tweaking their configuration''', '''creating new groups''', preparing general '''faction configs''' & finally, '''integration into''' both '''in-game editor''' & '''Conflict''' game mode.

While the tutorial covers mostly process of creating faction out of already existing assets (or retextures of that content), same principle applies also to new content.

Since process of '''retexturing character equipment''' is slightly different from other assets like cars, buildings or weapons, this tutorial also contains small explanatory chapter about it.

Sample New Faction contains three new factions & this tutorial describes only steps necessary to prepare '''SampleFactionREDFOR'''. Steps for '''BLUFOR''' & '''GREENFOR''' factions are basically the same as for '''REDFOR''' faction.

=== File structure ===

New faction requires quite elaborate structure (''based on [[Arma_Reforger:Directory_Structure]] page'') and below there is tear down of it:

[[File:armareforger-new-faction-file-structure.png|800px]]

== Character configuration ==

=== Retexturing existing equipment ===

One of the first steps of creating a retextured piece of equipment is actually creating a new prefab. In this tutorial, a new '''red''' variant of {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Footwear/CombatBoots_Soviet_01.et|CombatBoots_Soviet_01.et}} prefab will be created. This can be done either through:

* '''[[Arma Reforger:Prefabs Basics#Using Inherit Prefab option|Inherit]]''' option in '''Resource Browser''' * [[Arma Reforger:Prefabs Basics#Drag and drop method|By dropping instance of prefab to '''World Editor''' & then making a new prefab by grabbing that instance back selected folder in '''Resource Browser''']]

{{Feature|informative|In this article, [[Arma_Reforger:Resource_Manager:_Options#Register_.22enfusion:.2F.2F.22_protocol|'''Enfusion links''']] are used. With those links it is possible to open specific resource just by simply clicking on that link. Enfusion links '''has to be manually activated in Workbench options''' (Workbench -> Options -> Workbench -> Register "enfusion://" protocol) before it can be used]}}

In both cases, goal is to create '''CombatBoots_Soviet_01_red.et''' prefab inside Sample New Faction addon structure.

In comparison to other assets, character equipment is bit more complicated to retexture. '''MeshObject''' component of wearable equipment is actually not being used for showing the object and instead, visuals are controlled through '''Worn Model''' & '''Item Model''' properties. One of them define model which is visible when character is '''wearing given object''' ''('''Worn Model''' property)'' and the other one is used when item is lying on a ground as an prop which can be picked up by other characters ''('''Item Model''' property).''

Those two parameters accept both '''XOB''' models and '''prefabs''' as well. In both cases, '''new materials''' can be created by for instance '''[[Arma Reforger:Data Modding Basics#Using .22Duplicate to....22 function|duplicating existing materials]]'''. In this case, {{Link|enfusion://ResourceManager/~ArmaReforger:Assets/Characters/Footwear/CombatBoots_Soviet_01/Data/CombatBoots_Soviet_01.emat|CombatBoots_Soviet_01.emat}} was duplicated to SampleMod_NewFaction addon as ''CombatBoots_Soviet_01_red.emat'' and then color was changed by simply editing '''Color''' property in that new material.{{Messagebox|'''Recommended read:''' More details about creating new material creation & some practical example can be found in [[Arma_Reforger:Weapon_Modding#New_Materials|'''Weapon Modding''']] tutorial. Keep in mind that in a lot of cases it might be necessary to use MatPBRMulti shadder, so usage of MatPBRCamo might not be an option.|📖|lightgrey}}Before proceeding further, prepare new materials

=== Creating retextures using prefabs ===

Creating '''prefabs''' for retextures is quite easy since process process is exactly same as for regular items.

[[File:armareforger-new-faction-equipment-prefabs-1.png|600px]][[File:armareforger-new-faction-equipment-prefabs-2.png|600px]]

Those new prefabs should be as simple as possible and they can be created by simply dragging XOB model to '''World Editor''' view port. As a result of that action, a new '''Generic Entity''' instance with '''MeshObject''' component is created and there, assigned materials can be changed as on any other entity. Once assigned '''materials''' are adjusted, this entity can be transformed to prefab by grabbing it from '''Hierarchy''' list to desired folder in '''Resource Browser''' window.

[[File:armareforger-new-faction-equipment-new-variant.mp4|1600px]]

=== Creating retextures using overrides ===

[[File:armareforger-new-faction-overrides.png|left]] Alternatively, as mentioned before, it is also possible to use '''Materials Override''' parameters which are located under '''Worn & Item Model parameters.'''

In this case, it is necessary to add new element in '''Materials Override''' list and after that '''assign desired material''' to that property. If everything is done correctly, Workbench view port should show changed materials.

Under the hood, engine is remaping all materials assigned to this asset in order specified by '''Materials Override''' list, therefore caution is recommended since it might happen that order of materials changes after some data tweak. In this case responsibility falls into user hands and '''order of the materials has to be adjusted manually by the author of mod'''! {{Clear}} Those steps need to be performed for '''both Worn & Item Models'''. After that is completed, those new prefabs can be assigned to those two respective fields in '''BaseLoadoutClothComponent'''.

Additionally, it might be also worth to adjust '''Preview Model''' in '''SCR_UniveralInventoryStorageComponent''' > Custom Attributes > PreviewRenderAttributes, which controls how equipment is visible in inventory menu. Please note that right now this entry doesn't support material overrides and only prefabs with custom materials can be used.

In this tutorial, following prefabs (''with respective item & worn variants'') were created for '''REDFOR''' faction:

* '''CombatBoots_Soviet_01_red'''.et + (''CombatBoots_Soviet_01_item_red.et & CombatBoots_Soviet_01_wear_red.et'') - retexture of {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Footwear/CombatBoots_Soviet_01.et}} * '''Helmet_SSh68_01_red.'''et '''+''' (''Helmet_SSh68_01_item_red.et & Helmet_SSh68_01_wear_red.et'' ''')''' - retexture of {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/HeadGear/Helmet_SSh68_01/Helmet_SSh68_01.et}} * '''Jacket_M88_red.'''et '''+''' ''(Jacket_M88_item_red.et & Jacket_M88_wear_red.et)'' - retexture of {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Uniforms/Jacket_M88.et}} * '''Pants_M88_red.'''et + (''Pants_M88_item_red.et & Pants_M88_wear_red.et'') - retexture of {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Uniforms/Pants_M88.et}} * '''Vest_Lifchik_red.'''et '''+''' ''(Vest_Lifchik_item_red.et & Vest_Lifchik_wear_red.et)'' - retexture of {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Vests/Vest_Lifchik/Vest_Lifchik.et}} * '''Vest_Lifchik_GL_red'''.et + (''Vest_Lifchik_GrenadeBelt_item_red.et & Vest_Lifchik_GrenadeBelt_wear_red.et '') - retexture of {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Vests/Vest_Lifchik/Vest_Lifchik_GL.et}}

This set should be enough to have truly red faction.

{{Feature|warning|'''Materials Override''' tend to be less reliable than prefab method so its recommend to use '''Prefabs''' for retextures.}}

== Creating new characters prefabs ==

=== Preparing base character ===

Before proceeding with creating specific characters types like rifleman, medic or driver, it is generally a good practice to establish a base prefab, which will be used through the faction. Such prefab can contain common configuration like:

* Faction * Radio protocol * Identity * Common parts of equipment (jacket, pants, boots and accessories)

In this example, {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Core/Character_Base.et}} prefab is used to create '''Character_SampleFactionREDFOR_Base'''.et - a base for all REDFOR faction characters. Inheriting from {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Core/Character_Base.et}} prefab should provide a solid base with all necessary components in a state, where only minor adjustments are necessary.

=== Configuring new characters ===

Below there is a table with most essential components which will be adjusted in further steps {| class="wikitable" | '''SCR_CommunicationSoundComponent''' | Defines '''radio protocol''' which will be used by this character |- | '''SCR_CharacterInventoryStorageComponent''' | Main component which controls character inventory |- | '''CharacterIdentityComponent''' | This component holds information about identity of character like '''head''', '''base body''' & '''voice type''' |- | '''BaseWeaponManagerComponent''' | This component controls which weapon is equipped by default |- | '''BaseLoadoutManagerComponent''' | Defines character '''loadout''' like '''uniform, vest or harness, headgear, etc''' |- | '''FactionAffiliationComponent''' | Defines to which '''faction''' this unit belongs to. |- | '''SCR_EditableCharacterComponent''' | This component contains in-game related configuration like '''preview pictures, attributes, display name or budget''' |- | '''SCR_InventoryStorageManagerComponent''' | This components controls what items are preassigned to character & in which part of equipment they should be stored in |- | '''CharacterWeaponSlotComponent''' | Those components are used to control how many weapons (& what types of weapons) can have, |- | '''CharacterGrenadeSlotComponent''' | This slot controls hand grenade logic |}

==== Changing used radio protocol ==== [[File:armareforger-new-faction-character-protocol.png|right]] Starting with '''SCR_CommunicationSoundComponent''', a default radio protocol will be changed by adjusting assigned '''audio configuration project files''' in '''Filenames''' property''''''. In this tutorial, default, English radio protocol will be replaced with Russian variant, which uses '''_RU suffix.'''

{{Clear}} ==== Changing character identity ==== [[File:armareforger-new-faction-character-identity.png|right]] Identity of character defines their '''voice variant''' ''(Voice parameter)'', visual '''appearance''' (''Head & Body parameters'') & '''name -''' all that configuration is stored in '''CharacterIdentityComponent'''. Unless working with custom model, there is no need to touch '''Body Meshes Config''', since default values provide optimal configuration for wounded & healthy character materials.

By default, '''character identity will be randomly generated using parameters stored in faction config''' (this described later on that page) and values used in this component will be used only if '''Override''' property is checked.

{{Clear}} ==== Changing character faction ==== [[File:armareforger-new-faction-character-faction.png|right]] Character faction affiliation determines faction to which unit belongs to. Unlike in previous Arma titles made on Real Virtuality engine, characters in Reforger are no longer divided into few hardcoded sides but instead, faction system is used. In this setup, it is possible to setup alliances between factions in more flexible way depending on the mission creator needs.

Faction affiliation property is stored in '''FactionAffiliationComponent'''. This is fairly simple component which accepts name of faction provided as string in '''Faction affiliation''' parameter. Even without faction config ready (which creation process will be described in later part of this document), it is possible to write name of desired faction - in this case it is '''SampleFactionREDFOR -''' and create rest of configuration later.

{{Clear}} ==== Changing character outfit ==== Main character equipment configuration is stored in '''BaseLoadoutManagerComponent'''. In this component, it is possible to add '''slots''', which determine what kind of prefabs are attached to the character, their type (''used by inventory system)'' and what part of base body should be hidden when selected piece of equipment is worn - both to save performance and avoid mesh clipping.

'''Character_Base''' prefab contains six major slots which are currently handled by inventory system and in most cases there is no need to add more of them. Below is list of all currently supported slots:

* '''Helmet''' * '''Jacket''' * '''Pants''' * '''Boots''' * '''Vest''' * '''Backpack'''

Slots inherited from '''Character_Base''' contain properly defined '''Name, Area & Meshes To Hide''' properties so in this case, only thing to do is changing '''prefab''' (''through '''Prefab''' property'' ''')''' which is used on selected slots.

In this tutorial all '''REDFOR''' faction characters are using same '''Helmet''', '''Jacket''', '''Pants''' & '''Boots''', so it's safe to proceed further and assign previously created '''Helmet_SSh68_01_red.et''', '''Jacket_M88_red.et''', '''Pants_M88_red.et''', '''CombatBoots_Soviet_01_red.et''' to their respective slots in '''SampleFactionREDFOR_Base''' prefab. '''Vest & backpack''' will be assigned in later part of this tutorial to appropriate character classes.

[[File:armareforger-new-faction-character-overview.png]][[File:armareforger-new-faction-character-overview-components.png|500px]]

==== Adding items to character storage ==== [[File:armareforger-new-faction-character-storage-items.png|right]] Once character have basic clothing assigned, it is possible to start linking some key items to REDFOR faction base prefab. Items are linked via '''SCR_InventoryStorageManagerComponent''' and with this component it is possible to precisely select where given items are stored.

Goal here would be equipping '''Character_SampleFactionREDFOR_Base ''' with single '''first aid kit to jacket''' & few other elementary items like '''compass, map & radio''' to character '''pants'''.

By default, '''Initial Inventory Items''' array is empty and new elements have to be added via '''plus button''' . Each element in the array represents a single container which is linked through '''Target Storage''' property to one of the prefabs attached to character. Jacket & pants are two separate containers so two new '''ItemsInitConfigurationItem''' elements have to be created in '''Initial Inventory Items''' array.

Once that is done, it is possible to change '''Target Storage''' of those newly created '''Initial Inventory Items''' elements. Starting with first element, '''Prefabs/Characters/Uniforms/Jacket_M88_red.et''' was selected from '''Target Storage''' drop-down menu of first entry of '''Initial Inventory Items''' array. This mean that '''Jacket_M88_red''' that all prefabs listed in '''Prefabs to Spawn''' array will be created in this container. New elements in '''Prefabs To Spawn''' array can be added via '''plus button''' and in this case only single new entry has to be added. After that is complete, '''first aid kit''' ({{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Items/Medicine/FieldDressing_USSR_01.et}}) prefab can be assigned to that newly created slot.

Exactly same procedure can be used to add map ({{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Items/Equipment/Maps/PaperMap_01_folded.et}}), compass ({{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Items/Equipment/Compass/Compass_Adrianov.et}}), flash light ({{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Items/Equipment/Flashlights/Flashlight_Soviet_01.et}}) & radio ({{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Items/Equipment/Radios/Radio_R148.et}}) to pants. In this case '''Prefabs/Characters/Uniforms/Jacket_M88_red.et''' should be used as '''Target Storage''' and '''Prefabs To Spawn''' array should consist from 3 elements. {{Clear}}

=== Creating character variants ===

==== Creating inherited variants ==== [[File:armareforger-new-faction-character-equipment-in.png|thumb|200px|right]] With base character ready, it is time to create actual units which can be used in various game modes or in-game editor. Using  '''Inherit''' option in '''Resource Browser''', following new prefabs were prepared:

* '''Unarmed''' - ''Character_SampleFactionREDFOR_Unarmed.et'' * '''Grenadier''' - ''Character_SampleFactionREDFOR_GL.et'' * '''Rifleman''' - ''Character_SampleFactionREDFOR_Rifleman.et'' * '''Medic''' - ''Character_SampleFactionREDFOR_Medic.et'' * '''Machine Gunner''' - ''Character_SampleFactionREDFOR_MG.et'' * '''Squad Leader''' - ''Character_SampleFactionREDFOR_SL.et'' At this point, all those prefabs have identical equipment and their individual equipment can be tweaked. In case of '''Unarmed''' character, it can be left as it is, since equipment from base class should fit that role. Rest of the classes require some additional work and in this tutorial whole process of adding weapon & additional equipment to character will be explained on '''Machine Gunner''' character.

First thing in that process is adding additional equipment - in this case it is harness with pouch for machine gun magazine & backpack. Machine gunner harness ({{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Vests/Vest_SovietHarness/Variants/Vest_SovietHarness_MG.et}}) has to be assigned to '''Vest''' slot & backpack for extra magazines ({{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Items/Equipment/Backpacks/Backpack_Veshmeshok.et}}) has to be assigned to '''Backpack''' slot.

{{Clear}} ==== Changing weapons ==== [[File:armareforger-new-faction-character-weapons.png|left]] Characters inheriting from {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Core/Character_Base.et}} are using '''4 weapon slots'''. Three of them are using '''CharacterWeaponSlotComponent''', where two of those are used '''for primary weapons''' like rifles or launchers, one is used for '''secondary armament''' like handguns and single '''CharacterGrenadeSlotComponent''' is used, as name would suggest, for throw able items like '''hand grenades'''.

'''Machine Gunner''' class prepared in this tutorial is supposed to have following loadout:

* PKM machine gun on first primary slot ('''MG_PKM.et''') * Makarov handgun on secondary slot ('''Handgun_Makarov.et''') * RGD-5 grenade on grenade slot ('''Grenade_RGD5.et)'''

Starting with '''PKM machine gun''', first thing to do is locating correct '''CharacterWeaponSlotComponent'''. Since goal is to have that PKM machine gun in first primary slot, values of '''Weapon Slot Type & Weapon Slot Index''' has to be verified. In this case, component with '''Weapon Slot Type''' should have value " '''''primary'''"'' and '''Weapon Slot Index''' should be set to '''0.'''

Once that component is located, the only thing left to do is changing assigned prefab in '''Weapon Template''' by either clicking on '''select button''' or by dragging & dropping {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/MachineGuns/PKM/MG_PKM.et}} prefab on '''Weapon Template''' property.

Next on the list is '''PM handgun''', which should be assigned to '''CharacterWeaponSlotComponent''' with '''Weapon Slot Type''' set to " '''''secondary'''"'' and '''Weapon Slot Index''' set to '''2'''. Same as with PKM machine gun, '''Weapon Template''' property has to be modified so {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Handguns/PM/Handgun_PM.et}} is assigned to that field.

Grenades follow exactly same logic and in this case its even bit easier, since there is only one '''CharacterGrenadeSlotComponent '''. After locating that component, Grenade_RGD5.et prefab can be assigned to '''Weapon Template''' property.

{{Clear}} ==== Adding magazines to loadout ==== [[File:armareforger-new-faction-character-loadout.png|right]] In principle, procedure of adding magazines to loadout is same as for items. In case of '''machine gunner''', additional complication is fact that there are more prefabs to choose from due to additional loadout elements like harness and backpack. Equipment prefabs can consist of multiple child prefabs and in case of {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Vests/Vest_SovietHarness/Variants/Vest_SovietHarness_MG.et}}, magazine pouch is a separate item attached to the harness itself.

In this example, one magazine is added to '''Prefabs/Items/Equipment/Accessories/Pouch_Soviet_100rnd_PKM/Pouch_Soviet_100rnd_PKM.et -''' which is part of {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Vests/Vest_SovietHarness/Variants/Vest_SovietHarness_MG.et}} prefab - and two magazines goes to backpack '''Prefabs/Items/Equipment/Backpacks/Backpack_Veshmeshok.et'''. Additionally, one smoke grenade was added to backpack

{{Clear}} == Vehicle configuration ==

=== Creating vehicle variants ===

Creating vehicle variants is fairly simple as it can be done in two steps:

# Creating inherited variant (either through ''' [[Arma Reforger:Data Modding Basics#Using .22Inherit in....22 function|Inherit in]]''' action in '''Resource Browser''' in '''World Editor''' view port itself) of selected vehicle prefab in target addon # Changing '''Faction affiliation''' parameter in '''FactionAffiliationComponent'''

[[File:armareforger-new-faction-vehicle-faction.png]]

Even if materials of vehicles are not changed, changing faction affiliation is quite important for AI systems and some of the game modes, so those extra faction specific prefabs are sort of mandatory if its planned to equip new faction with some vehicles.

{{Feature|informative|Please note that this page is not describing how to create vehicle retextures itself. For more information go to [[Arma_Reforger:Vehicle_Modding#Changing_Multi_Material_base_color|Vehicle Modding]] page.}}

== Groups ==

=== Creating groups ===

It is recommended to create new groups by inheriting from {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/AI/Groups/Group_Base.et}} prefab which has all necessary components already in place. Procedure for it is same as for any other prefabs and it is possible to either use '''[[Arma Reforger:Data Modding Basics#Using .22Inherit in....22 function|Inherit in Addon]]''' option in '''Resource Browser''' or go through [[Arma Reforger:Prefabs Basics#Drag and drop method|'''World Editor''' view port flow]].

Similar as with characters, when preparing set of new groups for a faction, it is also good habit to create base prefab for all groups so the first step here will be creating '''Group_SampleFactionREDFOR_Base'''.et which is inheriting from '''Group_Base'''.et . After that, rest of the groups can be created using previously prepared '''Group_SampleFactionREDFOR_Base'''.et prefab as base. In this tutorial, following small unit rooster is prepared:

* '''Group_SampleFactionREDFOR_RifleSquad'''.et * '''Group_SampleFactionREDFOR_FireGroup'''.et * '''Group_SampleFactionREDFOR_LightFireTeam'''.et

'''Basic group setup'''

Starting with adjusting '''Group_SampleFactionREDFOR_Base.et''', adjustment has to be performed in properties located directly in entity configuration.

First step towards having a working group prefab will be modifying '''Faction''' property located in '''Groups''' tab & filling into that property name of target faction - '''SampleFactionREDFOR''' in this case.

[[File:armareforger-new-faction-group-composition.png]]

Next on the list is adjusting of '''SCR_GroupIdentityComponent''' and setting there '''identity''' used by all '''SampleFactionREDFOR''' unit. This component is purely used for UI representation of group in game and it affects what kind of icon is used in both 3D interface and on 2D map. Changing '''Identity''' property to '''OPFOR''' will be result in hostile forces markers according to NATO APP-6 specification. Rest of those parameters like '''Icons''' or '''Amplifiers''' can be changed per specific group and is described in detail in later part of this tutorial.

'''Changing group composition'''

After basics are done, it is time to move forward and start editing actual composition of groups. Composition of groups is set directly in entity properties and is controlled through '''Unit Prefab Slot''' parameter in '''Group Members''' tab. Over there it is possible to simple add new groups slots via '''plus button''' and then assign character prefabs to them.

[[File:armareforger-new-faction-group-overview.png]]

== Factions ==

=== Creating faction config ===

==== Basic configuration ==== New faction configs can be only created either by '''duplicating''' (via '''''Dup[[Arma Reforger:Data Modding Basics#Using .22Duplicate to....22 function|licate in "addon name"]]''''' ''option'') one of the existing configs one or by '''inheriting from existing faction''' through''' ''' '''[[Arma Reforger:Data Modding Basics#Using .22Inherit in....22 function|Inherit in "''addon name"'']]''' option.

[[File:armareforger-new-faction-inherit-config.png|600px]]

First of all, it is necessary to get configs which we want to duplicate or inherit from in the addon itself. To do so, first we navigate to Configs→ Factions folder and there, it is possible to use '''[[Arma Reforger:Data Modding Basics#Using .22Override in....22 function|Override in]]''' [[Arma Reforger:Data Modding Basics#Using .22Override in....22 function|'''addon''']] functionality located in context menu of '''Resource Browser'''. '''OPFOR.conf''' (both of them are located in Configs/Faction folder) can be used for inheritance and '''USSR.conf''' for duplication.

Retail version of game has packed data and its content locked - that's why such workaround has to applied. In all other cases this step can be skipped

Next step is creating either inherited config (in case '''OPFOR.conf''' was copied) through '''''' '''Inherit''' option or creating duplicated file via '''Duplicate''' option if '''USSR.conf''' was transferred to addon. In both cases, a new config will be ready to be filled with actual data relevant to new faction. {| class="wikitable" | '''Faction Key''' | Unique identifier of the faction that was filled in i.e. '''FactionAffiliationComponent''' | ''SampleFactionREDFOR'' |- | '''Faction Color''' | This option determines which color will be used to represent this faction in various UIs like in-game editor or game modes | ''244,5,6,255'' |- | '''Name''' | Display name of faction | ''Sample Faction - REDFOR'' |- | '''Description''' | Description to be displayed in players UI | |- | '''Icon''' | Icon representing this faction in players UI. Recommended size: 128x128px | ''flag_red_ca.edds'' |- | '''Name Upper''' | Display name of faction in upper case | ''SAMPLE NEW FACTION - REDFOR'' |- | '''Identity of soldiers''' | | {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Identities/FactionIdentity_USSR.conf}} |- | '''Is Playable''' | Controls if the faction will appear in players respawn menu | True |- | '''Faction Flag''' | Flag representing this faction in players UI. Recommended size: 800x400px. Same texture as for '''Icon''' can be used | ''flag_red_ca.edds'' |- | '''Faction Flag Material''' | Faction flag material - used on flag poles in f.e. Conflict | |- | '''Faction Label''' | Default faction loadout - this option is currently used (& defined) in Conflict only | |- | '''Friendly To Self''' | Are units in this faction friendly to itself? Used in Death Match scenarios | |- | '''Friendly Factions Ids''' | List of friendly Faction Keys | |- | '''Callsign Info''' | This class controls group callsigns available to this faction. Used in Conflict & in-game editor | {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Callsigns/Callsigns_USSR.conf}} |- | '''Ranks''' | Military ranks available to given faction. Can be used to give custom, localised titles per faction | |- | '''Entity Catalogs''' | List of [[Arma Reforger:Entity Catalog|'''Entity Catalogs''']] used by this faction. Determines what is i.e. available in Arsenal crates of selected faction | |- | '''Group Flags''' | Flag icon for group | |- | '''Group Flags Image Set''' | Flag imageset for groups of this faction | |- | '''Flag Names''' | Markers names available in Group Flags Image Set | |- | '''Base Callsigns''' | Call signs of bases. Used i.e. in Conflict for randomised bases names. | |}

[[File:armareforger-new-faction-config-faction.png]]

{{Feature|warning|Respawn system requires [[Arma_Reforger:Mod_Localisation|localised string ]] in '''Name''' field - without that you will be greeted with message stating that are no spawn points available. }}

==== Faction identity ==== In case of '''Identity of soldiers''' and '''Callsign Info''', it is possible to use already existing configs, which can serve as a templates. Here, '''SampleFactionREDFOR''' is going to use {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Identities/FactionIdentity_USSR.conf}} and {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Callsigns/Callsigns_USSR.conf}}. This can be achieved by '''drag & dropping those config files''' on respective fields:

* {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Identities/FactionIdentity_USSR.conf}} (''Configs/Identities'') is assigned to '''Identity of soldiers''' parameter * {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Callsigns/Callsigns_USSR.conf}} (''Configs/Callsigns'') is assigned to '''Callsign Info''' property

[[File:armareforger-new-faction-assign-identity.gif]]

== Integration with in-game editor ==

=== Adding new faction to in-game editor ===

==== Adding new faction label ==== All labels usable by in-game editor are defined in '''EEditableEntityLabel''' enumerator. New entries can be added to it by using '''[[Arma Reforger:Scripting: Keywords#modded|modded]]''' keyword. To do so, a '''new script''' '''file''' '''with''' '''unique name''' (you can use [[Scripting Tags|mod tag]] as prefix) have to be created and in this tutorial '''EEditableEntityLabel.c''' file was created in ''Scripts\Game\Editor\Enums\Modded'' folder. Afterwards, adding new labels is as simple as adding new '''all caps entry''' & assigning to it a '''number.''' <enforce> modded enum EEditableEntityLabel { FACTION_REDFOR = 1653989487, FACTION_BLUFOR = 1653989182, FACTION_GREENFOR = 1691580533 } </enforce> Once that is done, scripts can be recompiled and new label should be available in drop down menu of various in-game editor properties.

{{Feature|warning|To avoid duplicated enum values, it is necessary to use some '''large random number'''. It is also possible to use current [https://en.wikipedia.org/wiki/Unix_time Unix time] to reduce likeness of enum values clash.}}{{Messagebox|'''Recommended read''': You can learn more about script modding on [[Arma_Reforger:Scripting_Modding|'''Script Modding''']] page|📖|lightgrey}} ==== Adding new faction to Editable Entity Core ==== Once there is a label available, it is possible to

# Use '''Override in addon''' function on {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Core/EditableEntityCore.conf}} located in ''Configs/Core'' folder # Add new entry to '''Entity Labels''' array. Info part is using typical '''SCR_UIInfo''' layout

{| class="wikitable" | Name | Display name of faction | ''REDFOR'' |- | Description | Description to be displayed in players UI | |- | Icon | Icon representing this faction in players UI. Recommended size: 64x64px | ''flag_red._ca.edds'' |- | Icon Set Name | - | |- | Order | Integer used to manually modify order of label. Labels with higher numbers are listed first | |- | Label Type | Label from EEditableEntityLabel enum which should be evaluated | ''FACTION_REDFOR'' |- | Label Group Type | Type of label - is it faction, trait, vehicle? | ''FACTION'' |- | Filter Enabled | | ''True'' |}

=== Registering characters, groups & vehicles ===

Detailed instructions on how to add assets to in-game editor can be found on [[Arma Reforger:Asset Browser Mod Integration|'''Asset Browser Mod Integration''']] page and it is highly recommended to make yourself familiar with before proceeding anywhere further. Below are some general notes on how the process was performed for '''SampleFactionREDFOR''' related assets.

==== Adjusting generators configs ==== Before registering new assets, it is necessary to make some adjustments in config, so  '''Register Placeable Entities''' plugin can work as intended. This plugin is using '''EditablePrefabsConfig.conf''' to run some rules which populate register of prefabs. This config links to few more sub configs and in case of '''Characters''' & '''Vehicles''', '''EditablePrefabsComponent_EditableEntity.conf''' is used to determine faction label.

[[File:armareforger-new-faction-generator-config.png|center]] {{Clear}}

New rule can be added to '''EditablePrefabsComponent_EditableEntity.conf''' in few steps described below:

# Use '''[[Arma Reforger:Data Modding Basics#Using .22Override in....22 function|Override in]]''' [[Arma Reforger:Data Modding Basics#Using .22Override in....22 function|'''addon''']] function on '''EditablePrefabsComponent_EditableEntity.conf ''' located in ''Configs/Workbench/EditablePrefabs'' folder # Add '''EditablePrefabsLabel_Faction''' entry to '''Entity Label Rules''' array # Select '''FACTION_REDFOR''' in '''Label''' drop down menu # Adjust '''Faction To Check''' parameter by typing name of faction: '''SampleFactionREDFOR''' (it should be same string as in '''Faction affiliation''' parameter in '''FactionAffiliationComponent''' of characters or units)

Once those steps are complete, it is important to save all changes through Ctrl+S shortcut. In some rare cases changes applied to that config might need full restart of the Workbench.

==== Adding assets to register ==== After '''EditablePrefabsComponent_EditableEntity.conf ''' is adjusted, it is time to move forward and start t

# Create new config files using '''SCR_PlaceableEntitiesRegistry''' class for: ## '''Characters (''' ''Characters_SampleFactionREDFOR.conf'' ''')''' ## '''Groups (''' ''Groups_SampleFaction.conf'' ''')''' ## '''Vehicles''' (''Vehicles_SampleFaction.conf'') # Adjust '''Addon''' parameter in all those configs so it matches target addon (''SampleMod_NewFaction)'' # Adjust '''Source Directory''' to match location of the prefabs

[[File:armareforger-new-faction-register-assets.png|center]] {{Clear}}

Once those steps are completed, it is now possible to use  '''Register Placeable Entities''' plugin on all assets which should be available in in-game editor. To do so, select in '''Resource Browser''' prefabs which you want to register and then navigate to '''Plugins -> In-game editor''' section in top bar and click on '''Register Placeable Entities'''. In new pop up window select config for assets which you want to register (i.e. if you have characters selected, select ''Characters_SampleFactionREDFOR.conf'') and click on '''Run''' button.

This action should both generate '''placeholder images''' for assets previews & '''adjust''' '''Auto''' '''Labels''' assigned in one of the respective components like '''SCR_EditableCharacterComponent, SCR_EditableVehicleComponent ''' or '''SCR_EditableGroupComponent.'''

[[File:armareforger-new-faction-editable-components.png|center]]

{{Clear}} ===== Adjusting editable prefabs configuration ===== After processing prefabs with  '''Register Placeable Entities ''' plugin, assets will still need some manual adjustment to i.e. '''Authored Labels''' or '''Military Symbol''' ''(in case of groups)'' configuration. Also, in most cases it will be necessary to add proper display name to assets. In case of characters, some existing localised strings can be used

Table with localised strings

====== Characters ====== In case of characters, beside changing '''Name''' of assets in in-game content browser, few additions are necessary to '''Authored Labels''' array in '''SCR_EditableCharacterComponent'''. Plugin responsible for automatic assignment of labels is not being able to distinguish character types automatically in current state so character role types has to be adjusted by hand. For example, Squad Leader (''Character_SampleFactionREDFOR_SL)'' can receive '''ROLE_LEADER''', Medic can get '''ROLE_MEDIC''', Machine gunner - '''ROLE_MACHINEGUNNER''' and so on.

Additionally, characters can also receive additional traits like, '''TRAIT_ARMED''', '''TRAIT_UNARMED''' or '''TRAIT_MEDICAL''', which improves filtering in in-game content browser.

====== Vehicles ====== When it comes to vehicles, it usually boils down to adding special vehicle traits like '''TRAIT_ARMED''', '''TRAIT_UNARMED, TRAIT_REFUELING''', etc. Some custom labels can be also established based on the needs but by no means its not necessary.

====== Groups ====== Similar to characters, also groups can use one of the already existing strings for '''Name''' property.

Table with localised strings <spoiler> {| class="wikitable" | '''String''' | '''Display Name''' |- | AR-Group_AntiTankTeam | Anti-Tank Team |- | AR-Group_Default | Infantry Group |- | AR-Group_FireTeam | Fire Team |- | AR-Group_FireTeamLight | Light Fire Team |- | AR-Group_GrenadierTeam | Grenadier Team |- | AR-Group_Guerrilla_FireTeam | Guerrilla Fire Team |- | AR-Group_Guerrilla_HQ | Guerrilla HQ |- | AR-Group_Guerrilla_MGTeam | Guerrilla Machine Gun Team |- | AR-Group_Guerrilla_ReconTeam | Guerrilla Recon Team |- | AR-Group_Guerrilla_SharpshooterTeam | Guerrilla Sharpshooter Team |- | AR-Group_Guerrilla_Squad | Guerrilla Squad |- | AR-Group_LightAntiTankTeam | Light Anti-Tank Team |- | AR-Group_ManeuverGroup | Maneuver Team |- | AR-Group_MedicalSection | Medical Support Team |- | AR-Group_MGTeam | Machine Gun Team |- | AR-Group_MortarSquad | Mortar Team |- | AR-Group_PlatoonHQ | Platoon HQ |- | AR-Group_SniperTeam | Sniper Team |- | AR-Group_Squad | Rifle Squad |- | AR-Group_SuppressiveFireTeam | Base of Fire Team |} </spoiler>

Compared to vehicles & characters though, there are no group related labels which have to be filled manually. However, groups also have special '''Military Symbol''' class, which holds information about icon which is visible in in-game editor above groups. Using checkboxes & drop menus available there, it is possible to assign one of [https://en.wikipedia.org/wiki/NATO_Joint_Military_Symbology NATO APP-6] icon to selected group.

=== Adding new faction to Faction Manager ===

[[File:armareforger-new-faction-is-playable-change.jpg|thumb|Changing '''Is Playable''' parameter]] One of the remaining steps towards integrating new faction into in-game editor is adding it to list of available factions. This can be done in two easy steps:

# Use '''[[Arma Reforger:Data Modding Basics#Using .22Override in....22 function|Override in '''addon''']] function on {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/MP/Managers/Factions/FactionManager_Editor.et}} located in ''Prefabs/MP/Managers/Factions'' folder # Add new element to '''Factions''' array by drag and dropping faction config on that property # Uncheck '''Is Playable''' parameter inside of '''SCR_Faction''' entry inside '''Factions''' array - by default, when Game Master session starts, there should be no factions available and it should be up to Game Master to decide which are

After that, faction should be selectable in respawn menu during game master sessions & assets should be using proper colorization in content browser.

[[File:armareforger-new-faction-adding-faction-to-manager.gif]]

=== Creating new spawn points ===

Spawn points are a special type of prefabs which are used to determine where player of given faction can spawn.

==== Preparing new spawn point prefab ==== First step will be creating new spawn point prefab - it is quite easy and involves following steps:

* Using '''Resource Browser''', find {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/MP/Spawning/SpawnPoint_Base.et}} prefab * Click on it with '''Right Mouse Button''' and select option '''[[Arma Reforger:Data Modding Basics#Using .22Inherit in....22 function|Inherit in Addon]]''' * Type name of new prefab (i.e. '''SpawnPoint_REDFOR''') * Open prefab created in previous step (''SpawnPoint_REDFOR in this case)'' either by by using '''[[Arma Reforger:Prefabs Basics#Prefab edit mode|prefab edit mode]]''' or placing this prefab in World Editor * In that prefab type name of your faction (''SampleModFactionREDFOR'') in '''Faction''' parameter * Save your changes (using e.g {{Controls|Ctrl|S}})

[[File:Image armareforger-new-faction-spawnpoint-creation.gif]]

==== Creating editable variant of spawn point ==== After creating base variants, it will be still necessary to make editable variant, which can be used directly in Game Master. Unlike before, editable variant of spawn point have to be created manually and below you can find instructions how to do it:

* In '''Resource Browser''', find {{Link|enfusion://ResourceManager/~ArmaReforger:PrefabsEditable/SpawnPoints/E_SpawnPoint.et}} * Click on it with '''Right Mouse Button''' and select option '''[[Arma Reforger:Data Modding Basics#Using .22Inherit in....22 function|Inherit in Addon]]''' * Type name of new prefab (i.e. '''E_SpawnPoint_REDFOR''') * Open prefab created in previous step (''E_SpawnPoint_REDFOR in this case)'' either by by using '''[[Arma Reforger:Prefabs Basics#Prefab edit mode|prefab edit mode]]''' or placing this prefab in World Editor <gallery mode="nolines" widths="500" heights="666"> File:armareforger-new-faction-setting-editable-spawnpoint.png|'''SCR_SpawnPoint''' File:armareforger-new-faction-spawnpoint-editable-component.png|'''SCR_EditableSpawnPointComponent''' File:armareforger-new-faction-spawnpoint-faction-affilation.png|'''SCR_FactionAffiliationComponent''' </gallery> * In properties of '''SCR_SpawnPoint''' entity locate '''Faction''' parameter in unsorted category and write there name of the faction (''SampleFactionREDFOR'') * In '''SCR_EditableSpawnPointComponent''' component do following changes: ** Write name of your faction in '''Faction''' parameter ** Assign '''texture''' to '''Image''' property. Currently all factions are using same texture, even though there are separate file names for them, so it's possible to use i.e. {{Link|enfusion://ResourceManager/~ArmaReforger:UI/Textures/EditorPreviews/Auto/Systems/SpawnPoints/E_SpawnPoint_USSR.edds}} ** In Authored Labels array add two new elements: '''TRAIT_SPAWNPOINT''' (''it is missing in base class)'' and '''label of your faction''' (in this case it is '''FACTION_REDFOR''') * In '''SCR_FactionAffiliationComponent''' adjusted '''Faction''' property and write there name of your faction (''SampleFactionREDFOR)'' If everything went fine, spawn point should be ready to be plugged in into Game Master

==== Registering spawn point ==== Once editable spawn point prefab is ready, it is still necessary to register it in Game Master. This process is well described on [[Arma Reforger:Asset Browser Mod Integration|'''Asset Browser Mod Integration''']] and below is shortened version of it:

* [[Arma Reforger:Data Modding Basics#Using .22Duplicate to....22 function|Duplicate to]] addon {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Editor/PlaceableEntities/Systems/Systems.conf}} and call it i.e. ''Systems_SampleFaction.conf'' * Open new config in '''Resource Manager''' * Clear '''Prefabs''' array by clicking on little '''arrow (1)''' on the right side * Add editable Spawn Point (''E_SpawnPoint_REDFOR.conf'') to '''Prefabs''' array * ''Optionally:'' Modify Addon field so it matches addon name - in this case it would be '''SampleMod_NewFaction''' * Save the config [[File:armareforger-new-faction-registering-system.png|center|frame|Registering spawn point in Systems.conf]]

When config is ready, it is possible to register it in '''EditorModeEdit.et prefab''' as described on [[Arma Reforger:Asset Browser Mod Integration#Adding new register file to Editor|Asset Browser Mod Integration]] page.

=== Generating editor previews ===

Units, groups & vehicle previews used by in-game editor can be easily generated by using steps described on [[Arma_Reforger:Game_Master:_Image_Generation_Tutorial|Game Master: Image Generation Tutorial]] page & by loading {{Link|enfusion://WorldEditor/~worlds/Editor/Slots/AssetImages/Eden_AssetImages.ent}} world to generate those pictures. If previous steps were done correctly & assets were properly registered, then new images should be immediately available after generation process is completed.

{{Feature|important|Making screenshots disables debug console. It is necessary to restart whole Workbench to restore that functionality!}}

== Integration with Conflict game mode ==

=== Adding Conflict specific prefabs & configs ===

==== Creating Conflict specific configs ====

===== Faction config ===== Conflict is using extended version of regular faction config, which allows to configure '''ranks''', available '''structures''', default '''AI groups''', '''vehicles''' or '''radio equipment'''. Since this specialised version of config is extension of default '''SCR_Faction''' class, it is recommended to inherit from previously created '''SCR_Faction''' config - in this case it is '''SampleFactionREDFOR.conf.'''

{{Feature|important| Currently configs have to be adjusted in text editor of your choice since Workbench doesn't offer ability to change config class!}}

Easiest way to create such config is using '''''' '''Inherit''' option on '''SampleFactionREDFOR.conf'''. Once new config is created - named i.e. '''SampleFactionREDFOR_Campaign.conf'''. After this is complete, this file can be edited in text editor of your choice and '''SCR_Faction''' on first line of file

<enforce> SCR_Faction : "{C93D9F19E9F3CD97}Configs/Factions/SampleFactionREDFOR.conf" { [...] </enforce>

can be replaced with '''SCR_CampaignFaction''' like on example below.

<enforce> SCR_CampaignFaction : "{C93D9F19E9F3CD97}Configs/Factions/SampleFactionREDFOR.conf" { [...] </enforce>

Once this adjustment is saved, it might be necessary to restart whole '''Workbench''' in order to have that change correctly loaded.

{{Feature|informative|'''Campaign''' is one of the code names of '''Conflict''' game mode and it is still referenced this way in few places.}}

Afterward, class indication '''SampleFactionREDFOR_Campaign.conf''' should correctly show '''SCR_CampaignFaction''' class (see green area on picture below).

[[File:armareforger-new-faction-conflict-config.gif]]

By default, resulting config will be quite empty and most of the '''Conflict''' specific parameters have to be filled by hand. Using table below, '''SampleFactionREDFOR_Campaign.conf''' was populated with all necessary data.

{| class="wikitable" ! Group ! Parameters ! Description |- | Ranks | | Ranks that players can gain through the game |- | Radio | Faction Radio Encryption Key

Faction Radio Frequency | Controls default frequency and |- | AI | AI Group Prefab

AI Vehicle Prefab

Defenders Group Prefab

Default Transport Prefab

Spawn AIs | Configuration of AI groups like base defenders or attacking squads |- | AI (Independent) | Remnant Groups | AI groups spawned by '''INDFOR''' side on territory they are controlling. |- | Structures | Radio Prefab

Base Building XXX | Buildings & equipment used by factions |- | Compositions | Campaign Slot Compositions | Compositions which can be build by this faction |}

{{Feature|informative|Since setting all those parameters might be time consuming, it is also possible to '''copy paste in text editor''' some of the values from other '''existing Campaign configs'''.

'''Example code below can be used for inspiration'''

<spoiler> <syntaxhighlight lang="cpp"> SCR_CampaignFaction : "{C93D9F19E9F3CD97}Configs/Factions/SampleFactionREDFOR.conf" { m_aRanks { SCR_CharacterRank "{528E9D9FAAB617C6}" { m_sRankName "#AR-Rank_WestPrivate" m_sRankNameUpper "#AR-Rank_WestPrivate-UC" m_sRankNameShort "#AR-Rank_WestPrivateShort" m_sInsignia "{2AA43D26EB40FF32}UI/Textures/Nametags/nametagPointerRankPrivate_ca.edds" } SCR_CharacterRank "{528E9D9FAB192253}" { m_iRank CORPORAL m_sRankName "#AR-Rank_WestCorporal" m_sRankNameUpper "#AR-Rank_WestCorporal-UC" m_sRankNameShort "#AR-Rank_WestCorporalShort" m_sInsignia "{9EB262BC94EA46F3}UI/Textures/Nametags/nametagPointerRankCorporal_ca.edds" } SCR_CharacterRank "{528E9D9FAB87F519}" { m_iRank SERGEANT m_sRankName "#AR-Rank_WestSergeant" m_sRankNameUpper "#AR-Rank_WestSergeant-UC" m_sRankNameShort "#AR-Rank_WestSergeantShort" m_sInsignia "{F879E808E02C9442}UI/Textures/Nametags/nametagPointerRankSergeant_ca.edds" } SCR_CharacterRank "{528E9D9FA4EA5C39}" { m_iRank LIEUTENANT m_sRankName "#AR-Rank_WestLieutenant" m_sRankNameUpper "#AR-Rank_WestLieutenant-UC" m_sRankNameShort "#AR-Rank_WestLieutenantShort" m_sInsignia "{F879E808E02C9442}UI/Textures/Nametags/nametagPointerRankSergeant_ca.edds" } SCR_CharacterRank "{528E9D9FA563C005}" { m_iRank CAPTAIN m_sRankName "#AR-Rank_WestCaptain" m_sRankNameUpper "#AR-Rank_WestCaptain-UC" m_sRankNameShort "#AR-Rank_WestCaptainShort" m_sInsignia "{F879E808E02C9442}UI/Textures/Nametags/nametagPointerRankSergeant_ca.edds" } SCR_CharacterRank "{528E9D9FA64A043C}" { m_iRank MAJOR m_sRankName "#AR-Rank_WestMajor" m_sRankNameUpper "#AR-Rank_WestMajor-UC" m_sRankNameShort "#AR-Rank_WestMajorShort" m_sInsignia "{F879E808E02C9442}UI/Textures/Nametags/nametagPointerRankSergeant_ca.edds" } SCR_CharacterRank "{528E9D9FA77F696E}" { m_iRank RENEGADE m_sRankName "#AR-Rank_Renegade" m_sRankNameUpper "#AR-Rank_Renegade-UC" m_sInsignia "{F879E808E02C9442}UI/Textures/Nametags/nametagPointerRankSergeant_ca.edds" } } m_sFactionRadioEncryptionKey "coldBorscht" m_iFactionRadioFrequency 42000 m_AIGroupPrefab "{912FC8862E1726D3}Prefabs/Groups/Campaign/Group_SampleFactionREDFOR_Campaign.et" m_AIVehiclePrefab "{16C1F16C9B053801}Prefabs/Vehicles/Wheeled/Ural4320/Ural4320_transport.et" m_DefendersGroupPrefab "{75D9E5BA9FB3B532}Prefabs/Groups/Campaign/Group_SampleFactionREDFOR_Campaign_Defenders.et" m_DefaultTransportPrefab "{AF946468919822C9}Prefabs/Vehicles/Wheeled/UAZ469/UAZ469_SampleFactionREDFOR.et" m_RadioPrefab "{54C68E438DD34265}Prefabs/Items/Equipment/Radios/Radio_R107M.et" m_BaseBuildingHQ "{85A010184F03C74F}Prefabs/Compositions/Slotted/SlotFlatSmall/Headquarters_S_USSR_01_Campaign.et" m_BaseBuildingHQNoSlot "{D9237E85B53087C3}Prefabs/MP/Campaign/Bases/Campaign_HQ_USSR.et" m_BaseBuildingStash0 "{F141E5C48AD5EC60}Prefabs/Compositions/Slotted/SlotFlatSmall/SupplyStorage_S_USSR_01_Campaign.et" m_BaseBuildingStash0NoSlot "{541E61B144E350AD}Prefabs/MP/Campaign/Bases/Campaign_SupplyDepot_US_Empty.et" m_BaseBuildingStash1 "{F141E5C48AD5EC60}Prefabs/Compositions/Slotted/SlotFlatSmall/SupplyStorage_S_USSR_01_Campaign.et" m_BaseBuildingStash1NoSlot "{F9EFB460031EA15E}Prefabs/MP/Campaign/Bases/Campaign_SupplyDepot_US_01.et" m_BaseBuildingStash2 "{F141E5C48AD5EC60}Prefabs/Compositions/Slotted/SlotFlatSmall/SupplyStorage_S_USSR_01_Campaign.et" m_BaseBuildingStash2NoSlot "{95BB8080BFDA2E70}Prefabs/MP/Campaign/Bases/Campaign_SupplyDepot_US_02.et" m_BaseBuildingStash3 "{F141E5C48AD5EC60}Prefabs/Compositions/Slotted/SlotFlatSmall/SupplyStorage_S_USSR_01_Campaign.et" m_BaseBuildingStash3NoSlot "{20F10D990F83A691}Prefabs/MP/Campaign/Bases/Campaign_SupplyDepot_US_Full.et" m_BaseBuildingFuel0 "{4D1E4357BC178D19}Prefabs/Compositions/Slotted/SlotFlatSmall/FuelStorage_S_USSR_01_Campaign.et" m_BaseBuildingFuel0NoSlot "{5DC8135B3259C4CA}Prefabs/MP/Campaign/Bases/Campaign_FuelDepot_US.et" m_BaseBuildingFuel1 "{BFE69F51F235930E}Prefabs/Compositions/Slotted/SlotFlatSmall/FuelStorage_S_US_01_Campaign.et" m_BaseBuildingFuel2 "{BFE69F51F235930E}Prefabs/Compositions/Slotted/SlotFlatSmall/FuelStorage_S_US_01_Campaign.et" m_BaseBuildingFuel3 "{BFE69F51F235930E}Prefabs/Compositions/Slotted/SlotFlatSmall/FuelStorage_S_US_01_Campaign.et" m_BaseBuildingArmory "{A9A977F2EE4056E1}Prefabs/Compositions/Slotted/SlotFlatSmall/AmmoStorage_S_USSR_01_Campaign.et" m_BaseBuildingArmoryNoSlot "{6C05433C85E0FD0C}Prefabs/MP/Campaign/Bases/Campaign_ArmoryDepot_US.et" m_BaseBuildingRepair "{FE5831BC3D5E33CD}Prefabs/Compositions/Slotted/SlotFlatSmall/VehicleMaintenance_S_USSR_01_Campaign.et" m_BaseBuildingRepairNoSlot "{3D4F99916E1B0AD7}Prefabs/MP/Campaign/Bases/Campaign_VehicleMaintenanceGarage.et" m_BaseBuildingHospital "{70BEEEC472F2CD7D}Prefabs/Compositions/Slotted/SlotFlatMedium/FieldHospital_M_USSR_01.et" m_BaseBuildingBarracks "{F68F3B7247F6E80F}Prefabs/Compositions/Slotted/SlotFlatLarge/LivingArea_L_USSR_01.et" m_BaseBuildingBarracksNoSlot "{1540BCCF536C2895}Prefabs/MP/Campaign/Bases/Campaign_LivingArea_US.et" m_BaseBuildingRadioAntenna "{B453B160E6D37FD4}Prefabs/Compositions/Slotted/SlotFlatSmall/Antenna_S_USSR_01_Campaign.et" m_BaseBuildingRadioAntennaNoSlot "{1AF9E0A02075CBB0}Prefabs/MP/Campaign/Bases/Campaign_Antenna_US.et" m_aCampaignSlotCompositions { SCR_CampaignSlotComposition "{5496D16E528E4C29}" { m_Resource "{4885DEA01D687DB2}PrefabsEditable/Auto/Compositions/Slotted/SlotFlatSmall/E_Bunker_S_USSR_01.et" m_sDisplayName "#AR-Campaign_Building_SandbagBunker-UC" m_sMarkerImage "Building_Fortification" m_sIconImage "Slot_Fortification" m_iPrice 25 m_SlotType FlatSmall m_bIsServiceComposition 0 } SCR_CampaignSlotComposition "{5496D16E532917AC}" { m_Resource "{1200F6499BA275FA}PrefabsEditable/Auto/Compositions/Slotted/SlotFlatSmall/E_SandbagPosition_S_USSR_03.et" m_sDisplayName "#AR-Campaign_Building_SandbagPosition-UC" m_sMarkerImage "Building_Fortification" m_sIconImage "Slot_Fortification" m_iPrice 25 m_SlotType FlatSmall m_bIsServiceComposition 0 } SCR_CampaignSlotComposition "{5496D16E6079CB08}" { m_Resource "{047B9C8AAB50CE0E}PrefabsEditable/Auto/Compositions/Slotted/SlotFlatSmall/E_MachineGunNest_S_USSR_01.et" m_sDisplayName "#AR-Campaign_Building_MachineGunNest-UC" m_sMarkerImage "Building_Fortification" m_sIconImage "Slot_Fortification" m_iPrice 25 m_SlotType FlatSmall m_bIsServiceComposition 0 } SCR_CampaignSlotComposition "{5496FB6B9D439DCD}" { m_Resource "{5AF4E84CA11058F3}PrefabsEditable/Auto/Compositions/Slotted/SlotRoadSmall/E_Checkpoint_S_USSR_01.et" m_sDisplayName "#AR-Campaign_Building_SmallRoadCheckpoint-UC" m_sMarkerImage "Building_RoadBlock" m_sIconImage "Slot_Roadblock" m_iPrice 75 m_SlotType CheckpointSmall m_bCanBeRotated 0 m_bIsServiceComposition 0 } SCR_CampaignSlotComposition "{5496FB6B958EA37C}" { m_Resource "{1DF9835399B603EA}PrefabsEditable/Auto/Compositions/Slotted/SlotRoadMedium/E_Checkpoint_M_USSR_01.et" m_sDisplayName "#AR-Campaign_Building_MediumRoadCheckpoint-UC" m_sMarkerImage "Building_RoadBlock" m_sIconImage "Slot_Roadblock" m_iPrice 125 m_SlotType CheckpointMedium m_bCanBeRotated 0 m_bIsServiceComposition 0 } SCR_CampaignSlotComposition "{5496FB6B95ED9102}" { m_Resource "{612AB9E420809988}PrefabsEditable/Auto/Compositions/Slotted/SlotRoadLarge/E_Checkpoint_L_USSR_01.et" m_sDisplayName "#AR-Campaign_Building_LargeRoadCheckpoint-UC" m_sMarkerImage "Building_RoadBlock" m_sIconImage "Slot_Roadblock" m_iPrice 150 m_SlotType CheckpointLarge m_bCanBeRotated 0 } SCR_CampaignSlotComposition "{54A088BB7FA2DFDA}" { m_Resource "{4D1E4357BC178D19}Prefabs/Compositions/Slotted/SlotFlatSmall/FuelStorage_S_USSR_01_Campaign.et" m_vBuildingControllerOffset -1.5 0 0 m_sDisplayName "#AR-Campaign_Building_FuelDepot-UC" m_sMarkerImage "Building_FuelDepot" m_sIconImage "Slot_Fuel" m_iPrice 750 m_SlotType Services m_bCanBeRotated 0 m_bIsServiceComposition 1 } SCR_CampaignSlotComposition "{54A0A94A1B28CA0A}" { m_Resource "{A9A977F2EE4056E1}Prefabs/Compositions/Slotted/SlotFlatSmall/AmmoStorage_S_USSR_01_Campaign.et" m_vBuildingControllerOffset -5 0 0 m_sDisplayName "#AR-Campaign_Building_Armory-UC" m_sMarkerImage "Building_Armory" m_sIconImage "Slot_Armory" m_iPrice 750 m_SlotType Services m_bCanBeRotated 0 m_bIsServiceComposition 1 } SCR_CampaignSlotComposition "{54A0A94A1AE6C81B}" { m_Resource "{FE5831BC3D5E33CD}Prefabs/Compositions/Slotted/SlotFlatSmall/VehicleMaintenance_S_USSR_01_Campaign.et" m_vBuildingControllerOffset -4 0 0 m_sDisplayName "#AR-Campaign_Building_RepairDepot-UC" m_sMarkerImage "Building_VehicleWorkshop" m_sIconImage "Slot_Repair" m_iPrice 750 m_SlotType Services m_bCanBeRotated 0 m_bIsServiceComposition 1 } SCR_CampaignSlotComposition "{54A0E082FF414F1D}" { m_Resource "{70BEEEC472F2CD7D}Prefabs/Compositions/Slotted/SlotFlatMedium/FieldHospital_M_USSR_01.et" m_sDisplayName "#AR-Campaign_Building_FieldHospital-UC" m_sMarkerImage "Building_Hospital" m_sIconImage "Slot_Medical" m_iPrice 750 m_SlotType Services m_bCanBeRotated 0 m_bIsServiceComposition 1 } SCR_CampaignSlotComposition "{54A0E082D40B2C4D}" { m_Resource "{F68F3B7247F6E80F}Prefabs/Compositions/Slotted/SlotFlatLarge/LivingArea_L_USSR_01.et" m_vBuildingControllerOffset 0 0 0 m_sDisplayName "#AR-Campaign_Building_Barracks-UC" m_iPrice 750 m_SlotType Services m_bCanBeRotated 0 m_bIsServiceComposition 1 } } } </syntaxhighlight> </spoiler> }}

==== Vehicle list ==== Pool of available for request vehicles is defined in config file using '''SCR_CampaignVehicleAssetList''' class. By default, Conflict is using {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Campaign/VehicleAssetList.conf}} located in ''Configs/Campaign'' folder and this file is a good candidate for a custom variant. After clicking on {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Campaign/VehicleAssetList.conf}} with Right Mouse Button , '''Duplicate''' option can be selected from context menu and new config file - like '''VehicleAssetList_SampleNewFaction.conf''' - can be prepared.

It is also possible to create new '''SCR_CampaignVehicleAssetList''' config from scratch through ''Create→ Config File'' too.

Having a new config file ready, it is possible to start adjusting thing inside of it. Every element inside of '''Vehicle Asset List''' array represents an vehicle which can be requested at '''Vehicle Depot''' by one of the sides participating in Conflict game mode. In case when {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Campaign/VehicleAssetList.conf}} was duplicated, only things which need to be changed are '''Prefab & Prefab Opposite''' parameter.

[[File:armareforger-new-faction-conflict-vehicles.png|link=Special:FilePath/armareforger-new-faction-conflict-vehicles.png]]

'''Prefab''' parameter controls which asset will be spawned when this vehicle is requested in-game. In this tutorial '''REDFOR''' faction vehicles are going to be replaced with variants used by '''SampleFactionREDFOR''' faction and for instance {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et}} prefab is being replaced with '''UAZ469_SampleFactionREDFOR.et.'''

Once replacement is completed on '''REDFOR''' vehicles, it also necessary to go through '''BLUFOR''' vehicles and update there assets assigned in '''Prefab Opposite''' parameter with current '''SampleFactionREDFOR''' counterparts. This parameter is mainly used when opposing faction captures vehicle depot with some vehicles being still available there. In this scenario, enemy vehicles will be still available to request but they will also consume total capacity of such depot. For instance if '''BLUFOR''' captures depot with 8 UAZs, then in next reinforcement wave only two additional M151A2 cars will be added to the pool.

Conflict game mode supports only three sides in game and those are available in '''Faction''' drop down menu:

* '''BLUFOR''' - represent first playable team, which fights for control over the island with '''REDFOR''' & '''INDFOR''' forces * '''REDFOR''' - represent second playable team, which fights for control over the island with '''BLUFOR''' & '''INDFOR''' forces * '''INDFOR'<nowiki/>'' - represent non playable independent forces which are fighting with both '''''<nowiki/>''BLUFOR''' & '''REDFOR''' forces'<nowiki/>'''''. This faction holds at the beginning majority of the bases

Actual factions linked to '''BLUFOR''', '''REDFOR''' & '''INDFOR''' are defined in '''CampaignMPGameMode''' prefab which is placed and can be modified in Campaign world itself. More information about this feature can be found in chapter describing '''Conflict''' world.

Since '''SampleFactionREDFOR''' is using color retextures of existing vehicles, it is possible to leave '''Display Name & Display Name UC''' parameters intact.

In case config is being set of scratch, following table can be used as reference for making list of available vehicles.

{| class="wikitable" ! Property ! Description |- | '''Prefab''' | Prefab of a vehicle which can be requested |- | '''Faction''' | One of the |- | '''Display Name''' | Name which will be shown in UI (i.e. request menu) |- | '''Display Name UC''' | Same as above but in upper case |- | '''Rank ID''' | Lowest rank which can request this vehicle |- | '''Max''' | Max amount of assets of that type that a base can hold |- | '''Starting Amount''' | Amount of vehicles available at mission start |- | '''Reinforcements Amount''' | Amount of vehicles which are added in reinforcement wave |- | '''Prefab Opposite''' | Opposing faction vehicle counterpart. This parameter is used mainly to correctly recognise maximal capacity of a vehicle depot |}

=== Adding Conflict specific prefabs ===

Conflict game mode requires few specialised prefabs in order to run properly. For starter, '''Conflict''' requires unique character prefabs - both for AI & players. All those '''Conflict''' specific characters are located in ''Prefabs/Characters/Campaign'' folder and similar structure is used also for '''REDFOR''' faction. Player characters used in Conflict game are typical characters, often derived from existing troops, with addition of few extra components:

* '''SCR_ResourceComponent -''' used for handling '''Conflict''' related '''interactions with supplies''' * '''SCR_CampaignBuildingComponent -''' used for handling of in-game '''construction of structures''' * '''MapDescriptorComponent -''' used for correctly '''showing unit on map'''

==== Player Character ==== Beginning with '''Conflict player character''', a new '''Campaign_SampleFactionREDFOR_Player.et''' prefab can be created by inheriting from one of already existing '''SampleFactionREDFOR''' character - i.e. '''Character_SampleFactionREDFOR_Rifleman.et''' '''-''' using for example '''''' '''[[Arma Reforger:Prefabs Basics#Using Inherit Prefab option|Inherit]]''' option.

In case of '''SCR_ResourceComponent''', it is necessary to add new component via '''"+ Add Component"''' . After that, it will be still necessary to add one element to '''Consumers''' array of that component. This can be achieved by drag & dropping {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Resources/Supplies/Consumers/Generic/Consumer_Self.conf}} from '''Resource Browser''' onto '''Consumers array in SCR_ResourceComponent''' in '''Object Properties''' window. After that, a '''SCR_ResourceComponent''' component should contain all necessary data for Conflict game mode'''.'''

[[File:armareforger-new-faction-resource-component.gif.gif]]

Similar to '''SCR_ResourceComponent''', the other two components - '''SCR_CampaignBuildingComponent''' & '''MapDescriptorComponent''' have to be added manually through "'''+ Add Component'''" button. Once those components are added, the following tweaks can be applied:

* '''SCR_CampaignBuildingComponent''' ** No changes are necessary * '''MapDescriptorComponent''' ** '''Descriptor Visible''' should be '''unchecked''' ** '''Descriptor Type Enum''' should be changed to '''Unit''' ** '''Descriptor Unit Enum''' should be changed to '''Infantry'''

==== AI Character ==== Next on the list is preparing friendly AI prefab - '''Campaign_SampleFactionREDFOR_AI.et''' - which can be i.e. spotted in friendly bases. Similar to player character, '''Character_SampleFactionREDFOR_Rifleman.et ''' can be used as base for such prefab.

Once new AI character is created, '''CampaignInteractions.ct''' can be applied to this prefab in same way as for player prefab. This is the only required prefab for AI character and after it is added, '''Campaign_SampleFactionREDFOR_AI.et''' should be ready for action!

=== Adding Conflict specific groups ===

Main playable factions require only few extra groups which can be created based on existing group prefabs. The main difference for non playable factions (''INDFOR'') is the presence of '''Remnants Groups''', which are using '''unique group compositions''' and their group members are also '''not being spawned immediately''' when given prefab is created.

{{Feature|informative| '''Remnants Groups''' are only relevant for given faction if its used as '''INDFOR''' forces. If it's not planned to use given faction as independent side then this step can be skipped. }}

This delayed spawning behavior is achieved by setting '''Spawn Immediately''' property to unchecked state.

Remnants group can be prepared in few simple steps. The whole process begins with creating faction specific Remnant group base ('''''Group_SampleFactionREDFOR_Remnants_Base.et''''') prefab using {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Groups/Campaign/Group_Remnants_Base.et}} prefab as parent.

In this new base prefab it is necessary to adjust '''Faction''' parameter and change it to name faction code name '''- SampleFactionREDFOR'''.

Next, it is possible to use that new prefab to create some extra groups like:

* Patrol Group ('''Group_SampleFactionGREENFOR_Remnants_Patrol.et''') * Fire Team ('''Group_SampleFactionGREENFOR_Remnants_FireTeamet''') * AT Team ('''Group_SampleFactionGREENFOR_Remnants_AT.et''') * MG Squad ('''Group_SampleFactionGREENFOR_Remnants_MG.et''') * Sniper Team ('''Group_SampleFactionGREENFOR_Remnants_Sniper.et''')

Once those prefabs are created, only remaining thing to do is adjusting composition of those groups according to their purpose. This can be done by changing '''Unit Prefab Slots array'''. It is worth mentioning that '''remnants groups can use regular character prefabs'''. For example, AT group can consist of '''Character_SampleFactionREDFOR_AT.et''' prefab.

After all groups are created & adjusted, it is possible to assign them to remnants forces rooster. This can be done by adding new elements to '''Remnant Groups''' array in '''SampleFactionREDFOR_Campaign.conf'''. From this list, game will try to pick random groups depending on the context of area where they are supposed to be spawn (''SCR_CampaignREmnantsSpawnPoint''). This is done by setting '''Probability & Type in SCR_CampaignRemnantsGroup''' entry in '''Remnant Groups''' array.

{{Feature|important|Currently BLUFOR & OPFOR AI forces are only assigned to base defence and '''cannot capture bases on their own'''. Configuration of attacking squads & their vehicles is therefor '''highly optional'''.}}

Conflict attackers & defenders AI groups consist of previously created Conflict variant of AI characters. Configuration of those groups is basically the same as regular ones. '''Defenders''' groups are spawned '''in bases controlled by this faction''' and they are tasked with defending this territory. '''Attackers''' on the other hand should actively try to '''capture enemy bases''' using vehicle defined in faction config.

[[File:armareforger-new-faction-conflict-attackers.png]]

Starting with creation of base group for '''both attackers & defender''', a new '''Group_SampleFactionREDFOR_Campaign_Base.et''' prefab, inheriting from regular '''Group_SampleFactionREDFOR_Base.et ''' group, was created.

In this base prefab there is only one thing which need to be adjusted''':'''

* '''Unit Prefab Slots''' array should be tweaked so only '''3''' '''Campaign_SampleFactionREDFOR_AI.et''' prefabs are present.

Next, using '''Group_SampleFactionREDFOR_Campaign_Base.et''' as paraent, '''Group_SampleFactionREDFOR_Campaign_Defenders.et''' was prepared. This prefab doesn't need any additional refinements.

Similar to defenders group, attacker group - '''Group_SampleFactionREDFOR_Campaign.et''' - was prepared using '''Group_SampleFactionREDFOR_Campaign_Base.et''' as parent. This prefab needs two tweaks:

* '''Unit Prefab Slots''' array should consist from '''7''' '''Campaign_SampleFactionREDFOR_AI.et''' characters * '''Spawn Immediately''' parameter should be '''unchecked'''. This is done to avoid spike in load when spawning those groups across the island

Finally, when those groups are ready, they can be assigned to appropriate fields in '''SampleFactionREDFOR_Campaign.conf'''

* '''AI Group Prefab → Attacker group - Group_SampleFactionREDFOR_Campaign.et ''' * '''Defenders Group Prefab → Defenders group - Group_SampleFactionREDFOR_Campaign_Defenders.et '''

=== Creating new Conflict world ===

==== Using Conflict template ====

==== Adjusting scenario ==== After successfully copying template to the addon, it's time to change playable faction in this scenario.

{{Feature|informative|All changes performed below are only applied to entities existing in that scenario and '''Apply To Prefab''' button '''shouldn't be used.'''}}

[[File:armareforger-new-faction-conflict-scenario.png]]

In '''logic layer''', there are three entities which have to be adjusted:

# '''CampaignFactionManager1 → ''' This entity holds information about factions which can be used in this scenario # '''CampaignMPGameMode1 → ''' One of the core '''Conflict''' entities - here it is possible to adjust all kind of '''Conflict gameplay options.''' # '''CampaignLoadoutManager_1 → ''' Defines '''characters''' (''loadouts'') which players can select in respawn menu

===== Faction Manager ===== SCR_CampaignFactionManager Faction Manager contains list of all factions that participate in Conflict game-mode. Main parameter of that entity is '''Factions''' array where it is possible to add or replace existing factions with custom ones.

[[File:armareforger-new-faction-conflict-manager.gif]]

In this tutorial, default '''USSR''' faction is being replaced with '''SampleFactionREDFOR'''. Such replacement can be achieved by drag & dropping '''SampleFactionREDFOR_Campaing.conf''' on '''SCR_CampaignFaction''' element representing '''USSR''' faction inside '''Factions''' array.

Another notable thing which is set in '''CampaignFactionManager1''' is '''Vehicle Asset List''', which contains link to a config file containing '''list of available for request vehicles'''. In this tutorial, previously created '''VehicleAssetList_SampleNewFaction.conf''' is assigned to this parameter.

===== Game Mode tweaking ===== SCR_GameModeCampaignMP

[[File:armareforger-new-faction-conflict-gamemode.png]]

'''CampaignMPGameMode1''' entity contains also of various parameters but since goal here is just to change the playable faction, only '''faction key''' will be changed. Faction keys are used to connect factions defined in faction manger to one of the three playable sides in '''Conflict''' game mode.

In this tutorial, '''OPFOR Faction Key''', located in '''Unsorted''' group of parameters, is changed from '''USSR''' to '''SampleFactionREDFOR.'''

==== Loadouts ==== SCR_LoadoutManger

[[File:armareforger-new-faction-conflict-loadout.png]]

Loadout manager controls which classes player can select in respawn menu. In this case, '''USSR loadout''' will be replaced with '''SampleFactionREDFOR''' variant and following parameters will have to be adjusted:

# '''Loadout Name''' → Display name of loadout in respawn menu. Here it is replaced with '''REDFOR''' string # '''Loadout Resource''' → Prefab of spawned character. This parameter can be replaced with previously created Conflict character - '''Campaign_SampleFactionREDFOR_Player.et''' . # '''Affiliated Faction →''' '''<nowiki/>'''Defines to which factions belongs this loadout. '''''<nowiki/>'''''Parameter was replaced with '''SampleFactionREDFOR'''

==== Testing results in game ==== Once all those changes are done, it is possible to switch into play mode by either clicking on button with green arrow or by pressing F5 shortcut.

[[File:armareforger-new-faction-conflict-result.png|1200px]]

{{GameCategory|armaR|Modding|Assets|Tutorials}}
ife74zqui19738yqhgm0wvdo1fvyb3j

# Arma Reforger:FBX Import

5050
32512
373984
370944
2025-07-14T13:00:23Z
Lou Montana
10739
Add # to special symbols list
373984
wikitext
text/x-wiki
{{TOC|side}} * following pipeline is verified as compatible with 3ds Max, Maya and Blender * it is possible to export the FBX from any of the software and import it into any other software and edit it without loosing any data

== General Rules and Habits ==

* syntax is not case-sensitive (all can be written with both small and large letters) * do not use spaces or any special symbols like {{hl|/\<>:"{{!}}?*#}} ** if such symbol is used in material name it gets converted to "_"(underscore) during FBX import, what causes inconsistency between source(fbx) vs. engine (xob.meta file) data, what prevents Bohemia Blender Tools addon to properly match material name(stored in FBX) -> emat

[[File:armareforger-fbx-import-general.png|1200px]]

* for good readability it is strongly recommended to use LARGE letters for prefixes and suffixes and small letter for text in the core name of an object * the import into Enfusion doesn't take into account any layers, so you can put your models into any layers you want. In other words, you can organize you source file however you want. * keep in mind that duplicated object names might problem from Blender and sometimes might confuse Workbench FBX importer, therefore it is recommend to use unique names for objects

== Alignment ==

'''Always'''' align assets pointing along Z+ axis '''in Enfusion'''; for this, said asset must be oriented as pointing along/towards the '''Y+ axis in Blender, 3ds Max and Maya''': * Weapons: Barrel along Z+ * Vehicles: Nose pointing towards Z+ * Buildings: Main entrance pointing towards Z+ * Walls: Going from origin (0,0,0) '''along X+''' ("facing" Z+) e.g 0,0,0 to 8,0,0 for an 8m wall, '''not''' centred like -4,0,0 to 4,0,0

[[File:armareforger-fbx-import-weapon.png|300px]] [[File:armareforger-fbx-import-house.png|300px]] [[File:armareforger-fbx-import-car.png|300px]]

== LODs == {{Messagebox|'''Recommended read''': '''{{Link|Arma_Reforger:Level_Of_Detail}}''' page.|📖|lightgrey}} * to detect what mesh object is part of what LOD, the engine is looking at '''a suffix in a name of a model''' * name for LOD model object must look like this = '''name_of_the_object_LODx''' = Car_LOD0, Bowl_big_LOD3.... * LODs suffixes are starting with '''LOD0''', '''LOD1, LOD2''' and can go to whatever '''LODx''' number you want. * more meshes/models per LOD are possible = Car_LOD0, Trunk_LOD0, Wheel_LOD0 will all be imported to LOD0. * if the mesh doesn't meet any known prefix or suffix convention, it will go to LOD0 * if mesh has for example only _LOD0, _LOD2 and LOD4 meshes, LOD2 will behave like LOD1 and LOD4 like LOD2

{| class="wikitable" | [[File:armareforger-fbx-import-blender-lod.png|300px]] | [[File:armareforger-fbx-import-enfusion-lod.png|300px]] |- | Blender setup | Enfusion after import |}

== Collider shape ==

{| class="wikitable" | [[File:armareforger-fbx-import-colliders-all.jpg|300px]] | [[File:armareforger-fbx-import-colliders-max.png|300px]] | [[File:armareforger-fbx-import-colliders-enfusion.png|300px]] |- | All possible collider shapes | 3ds Max setup | Enfusion after import |}

* name for collider shape model = '''COLLIDER SHAPE_name_of_the_object''' = UBX_Car or UCS_wall1_part1 for example. * collider shapes (primitives, which can be created in most 3d software): ** '''UBX_''' - box ** '''UCX'''_ - convex ** '''USP_''' - sphere ** '''UCS_''' - capsule ** '''UCL_''' - cylinder ** '''UTM'''_ - triangle mesh (trimesh) * most collider shapes can't be scaled just by one or two axis, otherwise they will lost their shape and will not be imported. The only scaling that will work will be scale along vertical axis of capsule and cylinder + '''trimesh and box can be scaled along all axis.''' ** In '''Blender''' it can be achieved via [https://docs.blender.org/manual/en/latest/scene_layout/object/editing/apply.html#options '''Apply -> Rotation & Scale'''] (but not Location!) function * origin of '''UCL, UCS or USP''' colliders need to be at '''center of the object''' ** In '''Blender''' it can be done by selecting collider object and then using [https://docs.blender.org/manual/en/latest/scene_layout/object/origin.html#set-origin '''Set Origin -> Origin to Geometry'''] function * Maximum number of verts of faces of any of the collider is '''65535''' **If you will reach this limit, you will get following error{{Feature|important|RESOURCES (W): Trimesh collider exceeded maximal number of vertices/faces}} * collider shape with corrupted/not recognised shape is ignored (current solution) ** Incorrect colliders will be reported in Log Console in following way {{Feature|important|RESOURCES (W): Invalid collider 'name_of_collider'. Export skipped}}If you encounter such issue, check '''origin''' first and then '''rotation and scale''' of object. You can also take a look at example colliders linked below

{{Feature|informative| Example colliders models can be downloaded from {{Link|https://github.com/BohemiaInteractive/Arma-Reforger-Misc/blob/main/Art/Model%20Examples/collider_shapes_examples.FBX|'''Arma-Reforger-Misc'''}} Github repository. }}

== Collider Hierarchy ==

* collider hierarchy in FBX is important for correct hit-zone detection and possibly other simulations. Rules are simple: ** when asset contains animated and non-animated parts, '''The static colliders must not have any parent in the hierarchy'''. Only animated parts must be children of corespondent bones. In other words...if static collider, which always moves and rotates with asset's root, is child of root bone, it is wrong. There must simply be no parent for such a collider.

== Collider Usage ==

=== General Rules ===

{{Feature|important| Two main rules apply: # every collider should be '''as simple as possible''' # when artist is in doubt, refer to rule number 1 }}

'''Other things worth to consider:'''

* Primitives and Convex colliders can have only one physical material per collider * Triangle mesh collider (Trimesh) can have assigned physical material per triangle [[File:armareforger-fbx-colliders-merge-mesh.png|right|400px]] ** must have checked '''Merge Tri Meshes''', otherwise all UTMs will stay separate even if they share the same Layer Preset ** UTMs with different Layer Preset (custom property) will not be merged even with "'''Merge Tri Meshes'''" ON

* Trimesh objects should have closed mesh, as backface don't react. Can be left open if backface is not accessible (access closed by different mesh) * in Trimesh avoid very small, degenerated or huge triangles...make the triangle mesh as uniform as possible, even if its gonna have a bit more triangles because of that * the less triangles in Trimesh the better

* '''the smaller number of colliders the better''' * '''avoid overlapping colliders as much as possible'''

=== Performance ===

Fewer complex colliders is always '''much''' better than bigger amount of less complex colliders with the same amount of triangles.

[[File:armareforger-fbx-colliders-performance.png|600px]]

=== Restrictions ===

{| class="wikitable" ! ! Static ! Dynamic |- | Collisions | All | '''NEVER''' Trimesh, otherwise all |- | Fire / View | All | All |}

=== How To ===

==== Static (buildings, infrastructure, trees) ==== * '''prefer one triangle mesh over multiple primitive shapes''' (houses with lots of windows, doors etc....door and windows separate colliders though) ** try to make the triangle mesh as uniform as possible ** try to make the number of triangles as low as possible * '''prefer primitive or convex shapes where it makes sense''' ** street light can be approximated as two cylinders in collision ** simple street mail box could be one box shape in collision ** power transmitters can often be approximated by several (less than 10) convex shapes, if not use one triangle mesh in collision * '''if the geometry is very similar to View or Fire geometry, consider sharing View / Fire and Collision as one slightly more complex Collision layer that can be shared with Fire/View... it is better than to have multiple layers just because of few triangles'''

==== Dynamic Objects ==== (e.g vehicles, weapons, magazines, small destructible objects (also tree {{hl|_dst}} parts) etc.) * the process of selecting a correct shape should follow these rules: ** '''use one primitive shape if possible (ideal case)''' ** if multiple primitive shapes can be replaced with one convex shape then use the convex ** avoid trimesh ( '''just''' '''static parts of vehicles should be merged in trimesh in fire/view; wheels can by cylinders''')

== Avoid Overlaps ==

* overlap of more objects is totally unacceptable * overlap of just two object is acceptable in edge-cases when necessary * best is to split the the overlapping collider

[[File:armareforger-fbx-colliders-overlaps.png|400px]]

== Setting Layer Preset on colliders (usage parameter) ==

* We are talking here about models for simulations like Collision, and possible others like NavMesh, Fire geometry, View geometry or others * One collider shape can have many usages (can serve for different simulations), '''different mix of usages are defined through a Layer preset''' as custom parameter/attribute/property in the data...we name it '''COLLIDER USAGE''' * General rules: ** it is a '''string parameter''' ** its name is '''"usage"''' and in value are/will be all defined usages like this: '''"FireGeo"''' (only for detection of bullet impacts in this case) and possible others ** if a collider shape '''has no usage parameter''', then it '''collides (simulates) in every layer''' and warning message will appear in console log ** '''for creating custom attributes in 3ds Max, use only the Parameter editor in Animation menu''', otherwise the properties in exported FBX can't be edited in Maya. So doing it with Object Properties/User defined is '''FORBIDDEN'''

{{Feature|informative|For list of '''Layers''', '''Layer Presets''' and how '''Collision Matrix''' is setup in Arma Reforger, visit [[Arma_Reforger:Collision_Layer]] page}}

[[File:armareforger-fbx-layers-enfusion.png|frame|right|300px|Setting Layer Presets in Workbench]] [[File:armareforger-fbx-layers-blender-1.png|frame|left|200px|Blender - manual input]] [[File:armareforger-fbx-layers-blender-2.png|frame|left|200px|Blender - using plugin]] [[File:armareforger-fbx-layers-max.png|frame|left|200px|3ds Max example]] [[File:armareforger-fbx-layers-maya.png|frame|left|200px|Maya example]]

{{Clear}} == Physical material (Game material) ==

* Game materials ''(used for physics, vehicles, sound, vfx)'' like dirt, concrete, glass, snow, etc. are being assigned to colliders through material name in 3D software (3ds Max, Maya, Blender,...) * If you want to have your material automatically linked to existing game material, you should use following naming convention for material ** MaterialName_MaterialGUID - example: ''Weapon_metal_3B2D2687F56BB4EF'' ** GUID of material can be obtained by clicking with right mouse button on gamemat and then selecting "'''Get Resource GUID(s)'''" option from contextual menu ** Blender users can use Collider Setup menu if they have '''Enfusion Blender Tools''' installed * triangle mesh collider shape (trimesh) can have more materials assigned (each polygon different), '''other colliders shapes can have only one material per object assigned'''

[[File:armareforger-fbx-geometry-reset.png|frame|right|200px|Resetting Geometry Params]]

{{Feature|informative| '''Whenever you wanna changed Game material on any collider''', first reset '''Geometry Parameters''' in '''Import Settings''' for an asset (.xob), otherwise new .gamemat won't be assigned and you will still see the old one. This can be done in two ways: * By clicking with Right Mouse Button on Geometry Params property and selecting Reset do default value option * By clicking on arrow on the right side of Geometry Params property Once that is done, Reimport resource button can be pressed. After resource was reimported, proper Layer Presets should be visible in the Geometry Params array. }}

[[File:armareforger-fbx-geometry-reimport.png|frame|left |200px|Reimport button]] {{Clear}} == Materials ==

* names of the materials in your 3D software are used by '''Enfusion''', when '''Enfusion''' creates materials automatically after import. So name them carefully, so we don't have names of materials like ''Default1'' and so on. * please avoid using special characters in material's name as Enfusion alter them during FBX import ** in case of: {{hl|/\<>:"{{!}}?*}}, Enfusion replaces them with {{hl|_}} (underscore) character ** in case of: . (dot) , Enfusion strip string eg. M923A1_Base_Grating.008 -> M923A1_Base_Grating, mainly '''Blender''' user should pay attention as Blender names duplicates with '''.xxx''' ** both cases cause inconsistency between source(fbx) vs. engine(xob.meta file) data, what prevents Bohemia Blender Tools addon to properly match material name(stored in FBX) -> emat

== Center of Mass ==

* center of mass can be defined through empty dummy/null object, with prefix '''COM_''' * when FBX doesn't have center of mass defined via empty object with COM_ prefix, engine will create center of mass in 0,0,0 coordinates * when there are two or more COM_dummies, engine will take the first one it find and ignore the rest

== Occluders ==

* occluders are defined as plane / box mesh with prefix '''OCC_''' * general hint about occluders: ** Make them as big as possible. If it covers only small part of building, it's not worth it. Choose another place instead. ** You can extend them little bit under ground. 1-2m is enough. If you'll extend them too much, you'll make them artificially bigger so the system will count with them on mucg bigger distance without a benefit - they become burden instead of speed-up. ** Total number per building should be rather low. Max 3-4 is reasonable ** Occluder must be aligned with one of the axes (X, Y, Z) ** Minimum reasonable size is about 4-5 m ** Boxes thinner than 30 cm are turned into planes ** '''Occluders cannot be triangulated!!!'''

== Probes and Probe Volumes ==

* define area which is affected by interior lighting probe * they are defined either as '''box primitive''' which '''can be scaled in any axis'''. They must be named following naming conventions ('''even for SPHVOL create box shape'''. It will transform to sphere during import in engine. It must be done with box as engine can't currently recognize object transformations from actual sphere mesh): ** name '''BOXVOL_n''' = box volume where '''n''' stands for volume ID number like (01, 02, etc.) ** name '''SPHVOL_n''' = sphere volume where '''n''' stands for volume ID number like (01, 02, etc.) ** example: '''BOXVOL_01 , SPHVOL_02 , BOXVOL_03 , SPHVOL_04 , ...''' ** assign them material named "'''dummyvolume'''" *** upon FBX import dummyvolume.emat is created. In '''Material Assigned''' re-link the material to the one in /Common/Materials and delete the newly created one. * we are able to cut off peaces of volume by defining cutting planes with '''plane primitive'''. We can do this in order to make volume shapes more precise and matching actual visual model. They must be created following some rules: ** create them '''as mesh part (mesh element)''' of the volume (BOXVOL or SPHVOL) objects. In other words, after you created the planes for a particular volume, merge them with the volume object. ** planes create '''infinitely large cutting planes''' in the engine ** orient them with '''vertex normals pointing towards the area you want to cut out''' ** you can create '''4 cutting planes per volume as maximum. These influence only the volume they are merged with.''' * '''we can set how hard or smooth the border of the volume is''' by: ** legacy support '''should not be used on new assets''' ** correct way - setting it in Enfusion workbench, in building *.xob import settings in '''Visual/Volume Params''' * Probe itself must be created in engine as a '''child of building entity in the building prefab'''. Upon creation the probe is paired with volumes existing in the model. * '''Probes should be [[Arma Reforger:Data Modding Basics#Using .22Inherit in....22 function|inherited]] from respective base prefabs''': ** {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Structures/Core/ProbeHouse_Base.et|\Prefabs\Structures\Core\ProbeHouse_Base.et}} ** {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Structures/Core/ProbeExterior_Base.et|\Prefabs\Structures\Core\ProbeExterior_Base.et}} ** {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Structures/Core/ProbeEnvCave_base.et|\Prefabs\Structures\Core\ProbeEnvCave_base.et}} * When you wanna have an '''extra probes using its custom volumes''' in a building prefab, the only way right now is by creating the volumes in engine in world editor, ideally inheriting from respective prefab and attaching the volume as a child of the second probe that is child of the building prefab. ** these volumes created in engine can't be adjusted by cutting planes and are just simple box or sphere shapes. ** volume base prefab: {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Structures/Core/ProbeVolume_Base.et|\Prefabs\Structures\Core\ProbeVolume_Base.et}}

== Portals & BSP Geometry ==

=== BSP Geometry ===

'''BSP geometry''' is used in conjunction with portals for volume analysis, i.e., room placement, connectivity. The geometry should represent simplified sketch of the building with walls, openings, etc.

* The geometry should be as simple as possible (close to or simpler than tri-mesh colliders used for player collisions) ** If there's a narrow wall, all vertices of that wall should lay in a single plane ** When in doubt lock view to certain cardinal direction and scale wall vertices to 0 ** Ideally create the BSP geometry from scratch by extruding a cube...safest way ** Difference between UTM and BSP geometry can be seen below in the embedded .gif, the BSP geometry covers only the area with active portals, attic is not covered because it is not accessible by player: ** Naming is '''BSP_xxx''' where '''xxx''' is some convenience name, there can be many of these as separate geometry which will be merged together ** Material must be '''[enfusion://ResourceManager/~ArmaReforger:Common/Materials/dummyvolume.emat dummyvolume] ( GUID: D3975B51F51E6BD5)'''

The BSP geometry should represent enclosed space by walls, ceilings, with openings for doors and windows

An example building with portal placement is below right, it shows a top-down orthographic view of {{Link|enfusion://ResourceManager/~ArmaReforger:Assets/Structures/Houses/Village/House_Village_E_1I01/House_Village_E_1I01.xob}}

[[File:armareforger-fbx-UTM-BSP.gif]]

* Walls outline is in orange * Probe volume is yellow-ish * Portal placement is highlighted in blue * Portals '''1-7''' are outside windows/doors '''aligned with probe volume''' and '''configured to emit light''' * Portals '''a, b''' are structural to split the living room, bathroom and L shape corridor apart. They have '''"Emit light" checkbox disabled''' in their material * Placement of a, b portals is close to wall geometry due to door prefab placement in the resulting model - these '''portals should be in the middle of door geometry if possible'''

=== Portals === {{Feature|informative|Light portals will show correctly only in "building prefab" with necessary components}}

Portals define openings (hence the name) in the geometry through which light and sound can be propagated from the outside of the model to the inside and between rooms in the model, i.e., doors, windows, etc.

* They are specified as '''plane primitive''' with '''4 vertices''' w/o triangulation (see screenshot below), their '''normal should be facing inwards the model''' (if they are representing door or windows to the exterior) * The '''size should be slightly larger than the actual opening''' in the geometry * The position should be '''in the middle of the window/opening''' - ideally aligned with probe volume if possible (see below right). Must not be aligned with the inner or outer wall of the window or be in front of it - that leads to incorrect or degenerate cases * A material specifying portal properties must be assigned - '''material class''' must be set to '''MatLightPortal''' (see below right middle) * Naming is '''PRT_n''' where '''n''' stands for portal id (not used anywhere in the code, it's for your convenience)

Optional portal volume may be assigned as parent, i.e., several portals can have single portal volume. Volumes are used for clipping to light to prevent leaking through thin walls, ceilings etc.

* Naming is '''PRTVOL_m''' where '''m''' stands for volume id (not used anywhere in the code, it's for your convenience) * Rules for creation are the same as for boxvolumes for probes, see above '''BOXVOL''' * Material must be '''[enfusion://ResourceManager/~ArmaReforger:Common/Materials/dummyvolume.emat dummyvolume] ( GUID: D3975B51F51E6BD5)'''

There are rules to the hierarchy inside the FBX (see an example from Blender below left):

* One window/door <==> one portal - portal model can be child of window/door socket, must be child of optional portal volume

Upon import, portals will be consumed and used for BSP construction - you first need to visit '''Import settings''' in Workbench, go to general → common and '''check that you want to Generate BSP''' and reimport the model (see below left middle). Excluding the generate BSP option itself, these are:

* Force create portals - ''ideally should not be used.'' It overrides BSP creation by forcing single root node with all the portals registered to it, BSP geometry is skipped altogether * Export opaque leaves - use this for '''debugging only''' as it increases the resulting model size and opaque leaves aren't useful for anything besides debugging * BSP grid cell size - use this to increase/decrease the granularity of the helper grid, e.g., if you have very thin geometry that isn't properly registered as opaque * Export BSP occupancy - use this for '''debugging only''', it increases resulting model size and is used only for visualization of the occupancy grid used during construction, it doesn't have any runtime usage besides that * Export BSP connectivity - use this for '''debugging only''', it increases resulting model size and is used for active leaf visualization (i.e., the one with camera inside) and all leaves connected to it * Export BSP geometry - use this for '''debugging only''', it increases resulting model size and is used for visualization of the input geometry used for BSP construction, so you can asses the builder output {{Feature|important|Make sure before publishing mod that the '''debugging only''' options are left '''unchecked'''.}} <gallery mode="packed-overlay" widths="300" heights="500"> File:armareforger-fbx-prt-vol-setup.png|Portal Volumes and Portals hierarchy File:armareforger-fbx-light-portals-import-options.png|Model BSP related import settings File:armareforger-fbx-portal-material-settings.png|MatLightPortal material settings File:armareforger-fbx-house-bsp-portals.png|Portals in BSP </gallery>

== Sockets ==

* defined as dummy/null object * dummies/sockets can be parented into hierarchical structure if needed * points of origins for various things like particle effects, prefabs,... * based on purpose of these, there are various naming conventions for different types of assets (weapon, vehicle, character,..) * currently there is no naming convention that will influence the import, except for '''COM_''' ('''center of mass''')

== Land Contacts ==

* defined as dummy/null object, with prefix '''LC_''' * used for snapping object to the ground and at least 2 '''Land Contact''' points must be created for this to work * object will be snapped and skewed following the ground slope under the object

[[File:armareforger-fbx-land-contact.png|400px]]

== FBX Export ==

There are few rules which have to be followed when exporting FBX: * Export mesh with reset/applied transforms

[[File:armareforger-fbx-export-transform2.png|frame|left|800px|Applying transforms in various software]]

{{Clear}} * [[File:armareforger-new-weapon-export-blender2.png|frame|800px|Blender export settings]]Always export FBX with smoothing groups/hard edges, otherwise the FBX is worthless as a potential source file * '''Autodesk software''': Type must be '''Binary''', so it can be opened in all 3D suites, and '''Version''' parameter should be set to '''FBX 2014/2015''' ''(version 7.4)'' [[File:armareforger-fbx-export-smoothing.png|frame|left|800px|Autodesk: Smoothing]] [[File:armareforger-fbx-export-format.png|frame|left|800px|Autodesk: Format]]

{{Clear}} Do not forget to check '''"Custom Properties"''' property when exporting to FBX from Blender - otherwise '''Layer Presets''' settings (among with other properties) '''will be lost'''! In case of exporting '''model with skeleton''', it is also important to make sure that '''Armature''' is selected in '''Object Types''' and that '''Add Leaf Bones''' option is '''unchecked'''. {{Clear}}

== Import Process in the Workbench ==

[[File:armareforger-fbx-import-register2.png|frame|left|400px|Resource Browser]]

# Put the FBX into your game template data structure and find it in the Resource browser # Right-click on it and you have two options: '''Register''' or '''Register and Import'''{{Clear}}<br>[[File:armareforger-fbx-import-model.png|frame|right|400px|Import as model]][[File:armareforger-fbx-import-settings2.png|frame|left|400px|Import Settings]] # Upon clicking on '''Register''', then as a Model, a meta file is created and you can set '''Import Settings''' # Upon clicking on '''Register and Import''', then as a '''Model''', it will give you '''Import Settings''' and create '''.txo''' and '''.xob''' (''binary version of .txo'') file, which is now our converted FBX.<br><br><!-- -->'''Import Settings''': #* '''Merge Meshes:''' means merge all meshes of each visual LOD geometry with the same material into one mesh (optimization for faster render) - meshes with different number of UV sets don't merge! #* '''Export Skinning:''' loads skinning data (required only if there is skeleton available, maximum 4 bones can affect single vertex) #* '''Export Scene Hierarchy:''' loads bones/dummies as a sockets (slot, snap points and others) #* '''Modify material names:''' ... #* '''Legacy Support:''' turns ON old import pipeline, which overrides the new one. '''It should not be used!'''{{Clear}}[[File:armareforger-fbx-import-context.png|frame|left|400px|Reimport option in context menu]] # When the '''Import Settings''' are set, click either on '''Import Resource button''' (above '''Import Settings''' tab) or right-click on the FBX or XOB file in resource browser and click on '''Reimport'''<br>[[File:armareforger-fbx-import-files.png|frame|right|400px|Skeleton]] # After import, more files are created'''. All materials and meta files are automatically created in data folder next to FBX''', using names from materials in the FBX.<br>[[File:armareforger-fbx-geometry-reimport.png|frame|center|400px|Reimport button]]{{Clear}} # If you were importing model with skinning or hierarchy, you can verify skeleton in Bones section<br>{{Clear}}[[File:armareforger-fbx-import-bones.png|frame|left|400px|bones]]

{{GameCategory|armaR|Modding|Assets|Tutorials}}
r0o4dz77ui0vomt1ir6e1wxrghf61bs

# Arma Reforger:Character Gear Creation/Headgear

5050
37838
370939
364675
2025-02-26T12:31:53Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370939
wikitext
text/x-wiki
{{TOC|side}} == Tutorial Goal == {{Messagebox|In this tutorial you will learn about:

* Importing your first FBX file * Adding sockets & skeleton * How to configure new helmet|💬|#CDF}}{{Feature|informative|If you '''don't have any experience with Workbench''' yet, it is recommended to '''go through [[Arma_Reforger:Weapon_Creation|weapon creation tutorial]]''' to familiarise with some of the concepts present in the '''Workbench'''.}} {{Messagebox|Sources files for this tutorial can be found at '''{{Link|https://github.com/BohemiaInteractive/Arma-Reforger-Samples/tree/main/SampleMod_NewCharacter|Arma Reforger Samples Github repository}}'''.|📥|orange}}

== Add New Helmet == {{Feature|informative|Preparation phase consist of things like:

* '''Preparing basic structure''' }} == Structure Preparation ==

While sticking to official structure is not mandatory and there are no engine restrictions asset wise about it, it is recommended to follow guidelines listed here - [[Arma_Reforger:Directory_Structure|Data (file) structure]] - to ensure that all automation plugins are parsing your assets correctly and make it later easy to navigate.

Therefore, your first task will be preparing following file structure

[[File:armareforger-new-helmet-file-structure.png]] == Creation Steps ==

#{{Link|Arma_Reforger:Character_Gear_Creation/Headgear/Asset Preparation}} #{{Link|Arma_Reforger:Character_Gear_Creation/Headgear/Prefab Configuration}} {{GameCategory|armaR|Modding|Assets|Tutorials}}
ffhsy8wz80d3wi0qvziu0710ufvyv0l

# Arma Reforger:Prefabs Basics

5050
32798
370963
370664
2025-02-26T12:31:58Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370963
wikitext
text/x-wiki
{{TOC|side}}

= Glossary =

=== Prefab ===

* Prefab is in generally a set of properties stored in a standalone file. * In world editor we use prefabs as a template to create entity and component instances so we have '''entity prefabs''' and '''component prefabs'''. * Prefab can be inherited from another prefab and all the inherited parameters can be overridden there. * All prefab parameters can be overridden in a final prefab instance in scene.

=== Entity prefab ===

* A file with '''.et''' extension. It means '''entity template''' but it's a legacy name. * Entity prefab contains '''entities with hierarchy''', '''components''' and '''config objects'''. * Entity prefabs can be recursively nested inside of another entity prefabs without any restrictions.

=== Component prefab ===

* A file with '''.ct''' extension. It means '''component template''' but it's a legacy name. * Component prefabs contain only '''components''' and their '''config objects'''.

=== Config object prefab ===

* A file with '''.conf''' extension that can be referenced from entities, components and config objects. * Can contain a config object, its children, sub-children etc (recursively).

=== Config object ===

* Config object is a small sub-object of entity, component or any other config object. * In GUI it's visible only as a set of sub-properties. * Config objects can be recursively nested inside of other config objects.

=== Prefab member ===

* It's an entity stored in a prefab file. It's only a valid term for entity prefabs. * Prefab contains one or more prefab members with hierarchy.

=== Prefab root ===

* It's a prefab member (entity) on the top level of prefab hierarchy. All other prefab members are its children or sub-children.

=== Prefab instance ===

* It's a set of entities in scene that are created together from a specific prefab at the same moment. * Prefab instance is always exact mirror of Prefab and because of that it can't have a different count of members than '''Prefab'''.

=== Prefab instance member ===

* It's a single entity of prefab instance. * There is no possibility to delete only one instance member. You can delete only whole prefab instance.

=== Prefab edit mode ===

* Special mode of World Editor which is initiated when user opens [[#Prefab|prefab (.et)]] file (initiated from '''prefabs opened in tab''' of '''Resource Manager''' via '''Edit prefab''' button - see [[Arma Reforger:Prefabs Basics#Opening prefab in Prefab Edit Mode|opening prefab in Prefab Edit Mode]] paragraph) * This mode is specialised in editing prefabs - i.e. ''Save World'' option is replaced with '''''Save prefab''''' action * In this mode, no world is being stored on drive and '''World Editor''' and when save occurs, only changes to currently edited prefab are stored on drive. '''Changes done to entities are lost after editor is closed'''

= Prefabs operations =

== Creating entity prefab in World Editor ==

=== Creating entity instance === Create and setup one or more entities in scene as you wish to have it in prefab. There are three methods to do this:

==== Create tab ==== Create new empty entity instances by selecting entry some entry from '''Create tab''' (''for example GenericEntity'') and then drag and dropping it into '''World Editor viewport'''. This method is good to create first base prefabs that will not inherit any other prefabs.

[[Image:armareforger-prefabs-basics-create-tab.gif]]

==== Drag and drop prefab ==== Create entity instances of other existing prefabs by drag and dropping some existing prefab (''file with .et extension'') from '''Resource Browser''' into '''World Editor viewport'''. Using this method you will create inherited or nested entity prefabs.

[[Image:armareforger-prefabs-basics-drag-and-drop.gif]]

==== Drag and drop model ==== Create a new ''GenericEntity'' by drag and dropping some registered '''XOB model''' from Resource Browser into '''World Editor viewport'''. This action will create a new '''GenericEntity''' entity with '''MeshObject''' component using the model that was dropped into viewport.

[[Image:armareforger-prefabs-basics-drag-and-drop-xob.gif]]

=== Adding new components to entity instance === Once entity instance is present in the world and selected in hierarchy, it is now possible to add new components to it. There are two methods to do it.

==== Add component button ==== New empty components can be added via '''Add component''' button in '''Object Properties''' window. Once that button is pressed, desired component can be selected from pop up list.

[[Image:armareforger-prefabs-basics-add-new-component-button.gif]]

==== Component prefabs ==== New components can be also created from existing '''Component Prefabs'''. By using this method, you will create inherited '''Component Prefabs'''. Just drag '''.ct''' file and drop it to property grid

[[Image:armareforger-prefabs-basics-add-new-component-ct.gif]]

=== Adding child component === Some components might only work when they have certain components set as their children (''f.e. WeaponComponent''). New '''Child Components''' can be added by right clicking on some existing component in '''Object Properties''' list and then selecting the '''Add child component''' option from the context menu

[[Image:armareforger-prefabs-basics-add-new-child-component.gif]]

=== Removing components === Components can be removed from an entity instance by simply clicking on them with '''Right Mouse Button''' and then selecting the '''Delete Component''' option from the context menu. Removing components from prefabs is a bit more tricky, since you need to select the desired prefab in inheritance list first and after that you should be able to delete such components.

[[Image:armareforger-prefabs-basics-remove-component.gif]]

=== Saving entity instance as new prefab === Set up your entities into common hierarchy (use drag & drop in the '''Hierarchy''' window). There must to be only one entity root. Then finish the prefab creation process by following the next two steps.

1) drag the root entity of hierarchy and drop it into '''Resource Browser''' window to an arbitrary folder where you want to create the new prefab file

2) after the drop, enter a prefab name into dialog. That's it - your entity prefab file will be created in selected location.

[[Image:armareforger-prefabs-basics-new-prefab.gif]]

== Creating component prefab == Creating a new [[#Component_prefab|Component Prefabs (.ct)]] can be done in two steps. Assuming that you have already selected some entity with required component, you need to perform the following actions:

1) drag the component item from '''Object Properties''' window and drop it into '''Resource Browser''' window (see the picture).

2) after drop, enter a prefab name into dialog (picture). That's all. Your component prefab file will be created.

[[Image:armareforger-prefabs-basics-new-component-prefab.gif]]

== Changing class == Already present '''components''' or '''entities''' can be changed to different, compatible class by:

1) Clicking on selected '''component/entity''' with '''Right Mouse Button'''

2) Selecting '''Change class''' option from the context menu

3) Selecting one of the '''compatible class'''es from the list{{Feature|important|Only compatible classes are shown in the '''Change class''' list! In case there are no compatible classes available, a pop up window with '''There are no compatible classes to change!''' message will appear.}}{{Feature|informative|Entities can be basically changed to any available class. For instance clicking on '''GenericEntity''' and then selecting '''Change Class''' option will let you select all classes that are normally available in '''Create''' window.}}[[File:armareforger-prefabs-basics-change-component-class.gif]]

== Creating config object prefab == To create a new config object prefab, the following steps have to be performed:

1) Select an arbitrary config object in property grid.

2) Drag the config object item from property grid to and drop it into resource browser window.

[[Image:armareforger-prefabs-basics-new-config-prefab.gif]]

== Duplicating prefab == Any existing prefab can be duplicated - during such operation, selected prefab will be literally duplicated - meaning all parameters and settings are copied over - but the file will get a new GUID.

[[Image:armareforger-prefabs-basics-duplicate-prefab.gif]]

== Creating inherited prefab == There are two methods to create a prefab inherited from another prefab.

=== Using Inherit Prefab option === Use the dedicated action in the context menu of '''Resource Browser''' window. Select a prefab and choose '''Inherit''' from the context menu.

[[Image:armareforger-prefabs-basics-new-inherited-prefab.gif]]

=== Drag and drop method === Create a prefab by drag & drop as described above in [[Arma_Reforger:Prefabs_Basics#Creating_entity_instance|'''Create new entity prefab''']] segment and then [[Arma_Reforger:Prefabs_Basics#Saving_entity_instance_as_new_prefab|save this entity instance as a new prefab]]. This method will create an inherited prefab automatically.

== Editing entity prefab properties == Select an entity which is an instance of the prefab. Then use one of the following two methods to continue {{Feature|important|In both cases, changes to prefabs are permanently stored on the drive '''only after saving currently opened world'''. Without save, all your '''changes will be lost after World Editor is closed'''.}}{{Messagebox|'''Tip''': If you are editing some world and just want to save changes to prefabs, use '''Save world with options''' ({{Controls|1=Ctrl|2=Shift|3=S}}) to selectively store your changes on the drive permanently|✩|#88cc88}} === Using inheritance tree === Switch combo box in '''Object Properties''' window from "'''Entity instance'''" to one of inherited prefabs which you can see there (picture). Then you can edit properties of the prefab directly. Changes will instantly affect all entities that use the prefab (include all inherited prefabs).

[[Image:armareforger-prefabs-basics-change-prefab-inheritance-tree.gif]]

=== Using Apply to prefab button === Keep the combo box in '''Object properties''' window on '''Entity instance''' selection. Then you will edit entity and component properties on local entity instance only, but when you are satisfied with your changes, you can apply (propagate) changes from '''local entity instance''' to a specific inherited prefab by '''Apply to prefab''' action which is available in bottom section of the '''Object Properties''' window. The action transfers all the changes from '''entity instance''' and its components instance to any specific inherited prefab.

If entity or component is inherited from more than one prefab, then you can choose to which prefab you wish apply your changes.

This method is good when you want to test your changes before applying to prefab.

[[Image:armareforger-prefabs-basics-change-prefab-apply-to-button.gif]]

Alternatively, it is also possible to use '''Apply value to prefab''' option from property context menu. In this case, only that single change will be applied to selected prefab.

[[Image:armareforger-prefabs-basics-change-prefab-apply-to-value.gif]]

=== Using Prefab Edit Mode === Prefabs opened in [[Arma Reforger:Prefabs Basics#Opening prefab in Prefab Edit Mode|Prefab Edit Mode]] will be using the inheritance tree by default. It is still necessary to use '''Save Prefab''' option ('''{{Controls|Ctrl|S}}''') to '''store your changes permanently on the drive'''.

== Editing component prefab properties == Editing of '''Component Prefabs''' is very similar to doing modifications to regular prefabs. In this case, when selected '''Component''' is inheriting from '''Component Prefab,''' it will be possible to select that '''Component Prefab''' from inheritance tree property. To exit that mode, click on '''Go to object ''' button located to the right of inheritance tree drop down menu.

[[Image:armareforger-prefabs-basics-change-component-prefab.gif]]

== Adding entities to prefab == You can add a new entity to an existing prefab by these steps:

1) Create a temporary prefab instance somewhere in the scene (just drop entity prefab file to scene) or use any existing prefab instance.

2) Create and set up a temporary entity instance which you want to add to the prefab. Place it in the scene somewhere near the prefab instance. It can be a new unique entity or any prefab instance.

3) Transform the entity to the exact position/orientation as you wish to have it in prefab.

4) {{Icon|warning}} '''Press and hold '''{{Controls|Alt}} key. {{Icon|warning}}

5) Drag the entity item in '''Hierarchy''' window and drop it somewhere into hierarchy of your prefab instance.

6) That's all. Your entity will be added to the prefab. This action will instantly affect all prefab instances in scene that use the prefab (include all inherited prefabs). Using '''Apply To Prefab''' button is necessary.

Note: If your entity has some children, they will be added to prefab with hierarchy as well.

[[Image:armareforger-prefabs-basics-add-prefab-hierarchy.gif]]

== Deleting entities from prefab == In case you want to delete some child entity from prefab, following action has to performed:

1) Select a prefab instance entity in map and use context menu action '''Delete from prefab.'''

[[Image:armareforger-prefabs-basics-remove-prefab-hierarchy.gif]]

== Instancing entity prefab == There are three methods to do it.

=== Drag and drop prefab method === Drag prefab file icon from '''Resource browser''' window and drop it to '''Scene''' window as described in previous segment

=== F1 method === Select prefab in '''Resource browser''' window, place mouse cursor somewhere to scene and press '''F1''' key. Prefab instance will be created at mouse cursor position. This method is very convenient when you want to place a lot of prefab instances repeatedly.

[[Image:armareforger-prefabs-basics-add-entity-f1.gif]]

=== Copy & paste method === Use copy & paste functionality - ctrl+c & ctrl+v. Just copy an arbitrary prefab instance root entity and paste it to scene. Result will the same like method 1 or method 2 described above.

== Instancing component prefab == See [[#Component_prefabs|'''Component prefabs''']] segment for more information

== Instancing config object prefab == 1) Select an arbitrary config object prefab file (.conf) in '''Resource browser''' window.

2) Drag config object prefab file item and drop it into a property grid window. You can drop it only to a compatible single object properties that have no assigned object yet or into an compatible object array.

3) After drop config an object prefab instance will be created. It's indicated by blue color icon.

[[Image:armareforger-prefabs-basics-add-config-prefab.gif]]

== Prefab instance identification: == There are few methods how to identify if entity is a member of some prefab instance or not.

1) Prefab column in '''Hierarchy''' window contains prefab names of all entities in scene.

2) Some functions in context menu of Hierarchy window can help you identify a whole prefab instance.

* '''Select prefab instance root''' - Selects the root entity of the prefab instance form which is selected entity from. * '''Select prefab instance members''' - Selects whole prefab instance (all prefab members). * '''Show prefab in resource manager''' - Selects prefab file in Resource manager window. Using this you can see whole prefab instance in empty scene.

3) If you want to know which prefabs are inherited by some specific entity, you can see it in combo box of '''Object properties''' window.

[[Image:armareforger-prefabs-basics-instance-identification.png]]

== Prefab overriding == It's very important to know which parameters in prefab are overridden (stored in a prefab file). For this purpose there are property indicators in '''Object properties''' window. There's a simple rule. If property name is highlighted by '''bold font (1)''', then the property is overridden. If prefab inherits some other prefab then highlighted property indicates that property value overrides value of the '''inherited prefab'''. In case where prefab is a base (it does not inherit other prefab) highlighted property indicates that property value overrides a '''default value'''. It is also possible to revert user made changes in entity instance to prefab values by selecting '''Restore to prefab value (2)''' option from property context menu.

[[Image:armareforger-prefabs-basics-prefab-overriding.png]]

Second important thing is to know that some prefab parameter is overridden in a specific prefab instance in scene. '''Indicators''' of changed properties in '''Object properties''' window works for it as well, but in this case there are very useful another indicators in '''Hierarchy''' window.

[[Image:armareforger-entity.png|left]] this entity icon indicates that entity is not a prefab instance. It's just simple class instance. {{Clear}} [[Image:armareforger-entity-template.png|left]] this entity icon indicates that entity is a prefab instance. {{Clear}}

[[Image:armareforger-prefabs-basics-prefabs-and-entities.png]]

== Unprefabing == There is a possibility how to convert one or more prefab instances to normal entities without any links to prefabs. For this purpose you have to select just simple entity called '''prefab instance root''' and choose a '''Break prefab instance''' action from context menu (picture). That's all. Alternatively you can select more entities where are some prefab instances included and use a '''Break prefab instance''' action again. The action will affect all prefab instances inside selection.

[[Image:armareforger-prefabs-basics-break-prefab.png]]

== Opening prefab in Prefab Edit Mode == Prefabs can be opened in '''Prefab Edit Mode''' either via:

1) '''Edit prefab''' button if prefab is opened in '''Resource Manager'''

[[File:armareforger-prefabs-basics-edit-prefab.gif]]

2) Using context menu option '''Edit prefab(s)''' available after clicking with '''{{Controls|RMB}}'''on prefab(s) in '''Resource Browser'''. In this method it is possible to open multiple prefabs at once

[[File:armareforger-prefabs-basics-edit-prefab-context-menu.gif]]{{Feature|important|Warning, opening prefabs in '''Prefab Edit Mode''' will load special empty terrain in '''World Editor''' so make sure you '''don't have any unsaved changes''' in World Editor! '''Otherwise you are risking loosing changes made in currently opened world.'''}}{{GameCategory|armaR|Modding|Assets|Tutorials}}
2g4ivvrq95ci59tb8i6s60st64zesvf

# Arma Reforger:Prop Creation

5050
33078
376304
376292
2025-10-04T15:51:11Z
Lou Montana
10739
/* Wrong Game Material */ Some wiki formatting
376304
wikitext
text/x-wiki
{{TOC|side}} = Goals of this tutorial =

In this tutorial you will learn about:

* How to prepare prop in FBX format for Enfusion * How to import FBX into Workbench * How to configure new prop in Workbench * How to add procedural animation with sound & custom action to prop prefab

{{Feature|informative|If you '''don't have any experience with Workbench''' yet, it is recommended to '''go through [[Arma_Reforger:Weapon_Modding|modded weapon tutorial]]''' to familiarize with some of the concepts present in the '''Workbench'''}} {{Messagebox|Sources files for this tutorial can be found on [https://github.com/BohemiaInteractive/Arma-Reforger-Samples/tree/main/SampleMod_NewProp '''Arma Reforger Samples Github repository''']|📥|orange}}

= Preparation =

{{Messagebox|'''Overview''' Preparation phase consist of things like:

* Preparing basic structure * Preparing mesh * Exporting mesh|💬|#CDF}}

{{Feature|informative|It is recommend to read before [[Arma_Reforger:FBX_Import|FBX Import]] & [[Arma_Reforger:Textures|Textures]] pages before proceeding.}}

== Preparing structure ==

While keeping to official structure is not mandatory and there are no engine restrictions asset wise about it, it's recommended to follow guidelines listed here - [[Arma_Reforger:Directory_Structure|Data (file) structure]] - to ensure that all automation plugins are parsing your assets correctly and make it later easy to navigate.

Therefore, your first task will be preparing following file structure

[[Image:armareforger-new-prop-file-structure.png|800px]]

=== Cutting object to parts ===

Portable desk source model contained all optional elements, like desk wing and lids, in single model. In Arma 3, subvariants of such assets would be created by '''hiding each element via model config animations'''. Something like that is '''no longer necessary nor recommended''' (''hiding of mesh has some performance drawback'') - instead, additional parts of the model can be either added by '''SlotManagerComponent ''' or through '''Hierarchy'''.

[[Image:armareforger-new-prop-object-builder-parts.gif|center]] {{Clear}} In case of those asset, '''one wing''' ''(PortableDesk_01_wing.fbx)'' and '''one lid''' ''(PortableDesk_01_lid.fbx)'' should be moved to separate FBX files and then all of them should be removed from the main mesh (''PortableDesk_01.fbx)''

[[Image:armareforger-new-prop-split-object.png|center]]

{{Clear}} === Adding sockets ===

[[Image:armareforger-new-weapon-empty-create.png|right]] Sockets are empty objects ''(in Blender nomenclature)'' which can be used to attach elements (prefabs) or actions to it. In Blender, such sockets can be added via '''Add→ Empty→ Plain Axis''' option.

It is quite important to properly orientate those empty objects since their position & rotation will be used in various systems, like in '''SlotManagerComponent''' for attaching various parts of rugged desk (''this is covered in detail in later part of this tutorial'').

At this stage, main, '''PortableDesk_01.fbx''', file should have following sockets

* '''socket_wing_01''' & '''socket_wing_02''' - for both wing models * '''socket_lid_01''' & '''socket_lid_02 -''' for both lids

[[Image:armareforger-new-prop-sockets-model.png]] {{Clear}} Then, '''PortableDesk_01_lid.fbx''' & '''PortableDesk_01_wing.fbx''' should have corresponding snappoints - i.e. '''snap_wing''' and '''snap_lid'''.

Those points would be used later to '''connect''' (aka snap) '''both models together''' so their '''position and orientation is extremely important'''!

[[Image:armareforger-new-prop-snap-points.png]]

=== Setting skeleton & rigging mesh ===

This asset has six drawers which can be animated. In order to make those drawers animated, it is necessary to add proper skeleton to the model and then skin those movable selections to newly created bones.

[[Image:armareforger-new-prop-blender-add-bone.png|left]]

In Blender, new armature can be easily created by adding new '''Single Bone''' in ''Add → Armature '' menu when in '''Object Mode'''. This new bone can be called '''root''' and it will be serving as main bone of this skeleton.

Similar to sockets, orientation of bones is quite important for animation. Unlike in RV engine, animations are '''no longer using two vertices to create axis of transformation''' but instead '''rotation & position of bone''' is used to determine origin of animation.

Once root '''bone''' was created, it is possible to add bone for each of the drawers like on picture below and then proceed with adding '''vertex groups''', '''Armature modifier''' and general skinning.{{Messagebox|'''Tip''': If you are not familiar with skinning assets in Blender, it is recommend to read or watch some Youtube tutorials. On [[Arma_Reforger:Weapon_Creation/Asset_Preparation#Mesh_Skinning|Weapon Creation tutorial]] there is also segment explaining quite well how skinning can be done.|✩|#88cc88}} {{Clear}}

[[Image:armareforger-new-prop-blender-full-skeleton.png]]

=== Colliders & material names ===

[[Image:armareforger-new-prop-blender-scene-colection.png|right]] Colliders are special type of objects which are used to calculate various kinds of collisions - be it physic simulation or tracing of bullet penetration. There are few rules regarding those colliders and most of them listed on [[Arma_Reforger:FBX_Import#Collider_usage|'''collider related segment of FBX Import page''']].

When importing asset from previous Arma game - like in this example - you are most likely going to have already convex components ready from '''Geometry''', '''Fire Geometry''', '''View Geometry''' or '''Geometry Physx''' LODs. If you are using [[Arma_Reforger:Enfusion_Blender_Tools:_P3D_Conversion|P3D importer]] which is part of [[Arma_Reforger:Enfusion_Blender_Tools|Enfusion Blender Tools]], then those components will be automatically converted to trimesh colliders ( ''UTM_ prefix''). Since trimesh colliders are not recommended for general collision, it might be wise to verify if object can be converted to trimesh.

If you are using Blender, there is small handy tool to assist you with assigning correct game materials & layer presets on colliders - more details about can be found on [[Arma_Reforger:Enfusion_Blender_Tools:_Objects_Tools]].

In this sample, rugged desk uses simple box mesh, so usage of '''UBX_ prefix is recommended'''.

Next thing when it comes to configuration of colliders is '''configuration of Layer Preset'''. This is done through '''usage''' custom property (''details about adding that property can be found on following [[Arma_Reforger:FBX_Import#Setting_Layer_Preset_on_colliders_.28usage_parameter.29|'''FBX Import page''']]). For simple prop like this one, layer preset should be set to '''PropFireView'''. If you have multiple colliders, you have to add that property to each of them!

After layer preset is set, it is time for setting [[Arma_Reforger:FBX_Import#Physical_material_.28Game_material.29|'''Game Material''']]. This is done by assigning to collider a material with specific name and again, details of naming are described on FBX Import page. For this example prop, '''Plastic_6mm''' game materials is used, since it is assumed that single wall is 3mm thick and due to geometry is a simple box, those walls are counted twice.

Below is screen showing [[Arma_Reforger:Enfusion_Blender_Tools:_Objects_Tools#Colliders_.26_Layer_Presets_setup|'''Game Materials''' & '''Layer Presets''' selection menu]] from '''Enfusion Blender Tools'''. Using this simple tool it is possible to easily select desired game material and layer preset, which will be automatically. Please note that before using that feature it is necessary to [[Arma_Reforger:Enfusion_Blender_Tools:_Objects_Tools#Automatic_sorting_of_objects|sort objects]] and [[Arma_Reforger:Enfusion_Blender_Tools#Installation|setup plugin]] correctly.

[[Image:armareforger-new-prop-blender-game-materials.png]]

{{Clear}} == FBX export settings ==

Most of the general rules can be found on [[Arma_Reforger:FBX_Import#FBX_Export|'''FBX Import page''']] . In principle, when exporting from i.e. 3DS Max, you have to make sure that you are exporting in '''binary format in version 2014/2015'''. Furthermore, '''Triangulation''' & '''Preserve Edge Orientation should be turned off.'''

'''Blender''' wise, there are 3 most important things to keep in mind when exporting FBX {| class="wikitable" | '''1. Object Types''': For animated object like this prop, you need to have '''checked on''' at least:

'''Empty -''' handles all snap points

'''Armature''' '''-''' exports skeleton of your weapon

'''Mesh -''' self explanatory | rowspan="3" | [[Image:armareforger-new-weapon-export-blender2.png|200px]] |- | '''2. Custom Properties''': Without this option all custom properties like '''LayerPresets''' would be lost! |- | '''3. Leaf bones''': Leaf bones are completely unnecessary in Enfusion and it's better to have that option '''turned off''' |}

== Preparing textures ==

When importing textures of weapon from previous Real Virtuality games like Arma 3 there is no real automated or simple method of conversion spec-gloss textures to PBR (''Physicial Based Rendering'') Metal Rough ones - current industry standard. Therefore in most cases it's much easier to do textures from scratch in i.e. Substance Painter.

There are tons of materials on the internet how to create proper PBR texture and it's highly recommend to search for it via some popular search engines. More information about maps and textures used by Reforger can be found on [[Arma_Reforger:Textures]] page

For this asset, assuming that Substance Painter is used, it is recommended to use one of the shared export profiles - Arma Reforger - BCR + NMO, which should create textures compatible with Reforger.

== Importing & registering new model ==

Importing and registering of new model is quite simple and this involves following steps:

* Locating FBX file that you wish to convert in '''Resource Browser''' * Clicking on that FBX with RMB and then selecting "'''Register and Import'''" option from the context menu * From pop up menu with title '''Register Resource (File(s)''', select "'''as Model'''" option

After that, conversion of FBX into XOB will begin and depending on complexity of the model it might take some time. In case of that simple prop.

Once model is imported, a '''new XOB''' should appear in '''Resource Browser -''' this file can be now opened in new '''Resource Manager''' tab for '''preview''' and '''game related parameters tweaking''' by double clicking with {{Controls|LMB}} on it.

[[Image:armareforger-new-prop-register-fbx.gif]]

{{Feature|warning|While Workbench still supports relative paths for materials, this method is discouraged and should not be used.}}

{{Feature|important|Both Layer Preset and Game Material can be changed in Import Settings window, although it is recommended to have that stored in model itself. Otherwise you might loose your data if colliders are changed (by f.e. renaming of objects).}}

=== Import settings ===

If everything went fine, main '''Resource Manager''' window should look like that:

[[Image:armareforger-new-prop-imported-model-xob.png]]

On the right side of the viewport, there is a panel where you can select between two tabs:

* [[Arma_Reforger:Resource_Manager:_Model_Editor#Details_Tab|'''Details''']] - shows various statistics (i.e. vertex, face or face count) and information about materials, colliders, skeleton or LODs present in the imported model. This tab is by '''default selected''' when opening new model. * [[Arma_Reforger:Resource_Manager:_Model_Editor#Import_Settings_Tab|'''Import Settings''']] - in this tab it is possible to modify how FBX is imported to the game and it is possible to modify '''transformation, materials, physics or other misc parameters''' here.

After briefly checking if model has correct number of [[Arma_Reforger:Resource_Manager:_Model_Editor#LODs|LOD (''levels of details'')]] and it looks visually fine, it's time to move to '''Import Settings''' tab, where there are couple important things to set.

=== Physics setup ===

After initial import was done it's time to make sure that materials & colliders are using proper materials & colliders. If it fails to find such texture, new dummy material (see area marked in orange on screen below) will be created in '''data''' folder next to the FBX model.

If everything was setup correctly in Blender, imported model should already have one collider imported with correctly assigned '''Layer Preset''' ''(PropFireView)'' and '''Surface Properties''' (''plastic_3mm.gamemat''). Otherwise, here is the list of some common issues:

==== Geometry Params list is empty ==== If both '''Colliders''' array in '''Details''' and '''Geometry Params''' array in '''Import Settings''' are empty, check for following errors:

# Check if objects which are supposed to be colliders have '''correct prefix''' - i.e. UBX, UCX, etc. See [[Arma_Reforger:FBX_Import#Collider_shape|FBX Import]] page for more information # Check '''Console Log''' if there are no errors regarding convexity or shape of the collider. See [[Arma_Reforger:FBX_Import#Collider_shape|FBX Import]] page for more information

==== Wrong Game Material ==== If impact effect on the asset are using default dirt impact effects or the following error appears in console RESOURCES : GetResourceObject @"{411A617924FC3D61}Assets/Props/Military/Camps/PortableDesk_01/PortableDesk_01.xob" RESOURCES (E): Wrong&patched resource GUID in @"Assets/Props/Military/Camps/PortableDesk_01/PortableDesk_01.xob" for property UBX_Component01 resource name @"Plastic_6m.gamemat" RESOURCES : GetResourceObject @"{D4D49F200A5937E1}Plastic_6m.gamemat" RESOURCES (E): Failed to open

then check for following errors:

# Make sure in 3D software of your choice that material assigned to collider is correctly named, i.e. ''Plastic_6mm_6A7CBD6BBCFC5148 - see [[Arma_Reforger:FBX_Import#Physical_material_.28Game_material.29|Game Material section of FBX Import page]].''

{{Feature|warning|Keep in mind that '''changes to materials or layer presets in FBX''' are only imported if '''Geometry Params list is empty'''. See '''[[Arma_Reforger:FBX_Import#Physical_material_.28Game_material.29|FBX Import - Game Materials]]''' page for more information}}

==== Wrong Layer Preset ==== If you see warning triangle '''Colliders''' section of '''Details''' tab or ''All interaction layers used'' error, then check for following things:

# Make sure that collider has correct Layer Preset assigned # Make sure that '''Custom Properties''' option is checked in FBX export settings

[[Image:armareforger-new-weapon-collider-errors.png]]

==== Changing parameters ==== If for some reason you don't want to touch FBX and want to change Layer Preset or assigned game materials in Workbench itself, then it is possible to do that by manipulating '''Layer Preset & Surface Properties''' parameters in '''Physics''' section of '''Import Settings''' tab. Changes to those parameters require usage of '''Reimport resource''' button - otherwise information stored in XOB would not be updated. This method is '''not recommended though.'''

[[Image:armareforger-new-prop-import-change-params.gif]]

=== Skeleton & Hierarchy ===

In case of models with skeleton (''Armature)'' it is quite important to check '''Export''' '''Skinning''' option in '''Miscellaneous''' section of '''Import Settings.'''

Since Rugged Desk is supposed to have six animated drawers, it is important to '''enable''' that option and then '''reimport''' the model via '''Reimport resource (PC)''' button.

[[Image:armareforger-new-prop-export-skinning.png]]

If skeleton was imported correctly'''''', '''Details tab''' in right section of the Resource Manger view port should show some '''non zero number''' in [[Arma_Reforger:Resource_Manager:_Model_Editor#Bones|'''Bones section''']]. In case of '''Rugged Desk''', this object should have '''6''' '''skinned bones, 4 sockets''' and '''one dummy hierarchy element (root), which should be visible as Bones (6 + 5)'''. First number in the bracket indicates number of skinned bones and 2nd one indicates of empty bones (''either bones which are not skinned to anything or empty objects'')

[[Image:armareforger-new-prop-skeleton-full-imported.png]]

For Rugged Desk '''wing''' & '''lid''' it is possible to just use '''Export Scene Hierarchy''' - this should allow to use empty objects created before for snapping purposes.

== Importing textures ==

By default, '''Workbench''' importer will create '''new materials''' (emats) using '''MatPBRBasic''' shader in '''Data''' folder next to the imported model, based on material names located in FBX. If material suitable for the mesh already exist somewhere in available projects, it is possible to change linked material by changing elements in [[Arma_Reforger:Resource_Manager:_Model_Editor#Material_Assigns|'''Material Assigns''']] located in '''Visual''' section of [[Arma_Reforger:Resource_Manager:_Model_Editor#Import_Settings_Tab|'''Import Settings -''']] this option will be later used for '''Portable Desk''' lid & wing, which share same materials.

Once those materials are ready, you can use same procedures as the ones described on Sample Modded Weapon - Documentation - Creating New Materials page.

= Adding basic configuration =

{{Messagebox|'''Overview''' Following topics will be covered in this paragraph

* Creating prefab * Basic asset configuration|💬|#CDF}}

== Creating prefab ==

Prefabs for props can be prepared in multiple ways and it also depends on amount of functions that are planned to be added to such asset.

In general, it is recommend to use one of those two prefabs as a base:

* [enfusion://ResourceManager/~ArmaReforger:Prefabs/Props/Core/Props_Base.et|'''Props_Base.et'''] - prefab for simple, '''non destructible''' assets * [enfusion://ResourceManager/~ArmaReforger:Prefabs/Props/Core/Destructible_Props_Base.et|'''Destructible_Props_Base.et'''] - prefab dedicated for assets which '''can be destroyed'''

{{Feature|important|If you don't use one of the mentioned prefabs as a base, then you will have to go through more steps like setting collision. In some cases base prefabs might be missing '''RigidBody''' component and in such scenario, it will be necessary to add such component and enable '''Model Geometry''' option inside of it.}}

Since this sample is planned to have destruction, [enfusion://ResourceManager/~ArmaReforger:Prefabs/Props/Core/Destructible_Props_Base.et|'''Destructible_Props_Base.et'''] prefab can be used as a base.

{{Feature|informative|In this article, [[Arma_Reforger:Resource_Manager:_Options#Register_.22enfusion:.2F.2F.22_protocol|'''Enfusion links''']] are used. With those links it is possible to open specific resource just by simply clicking on that link. Enfusion links '''has to be manually activated in Workbench options''' (Workbench -> Options -> Workbench -> Register "enfusion://" protocol) before it can be used]}}

In general, it is possible to create new inherited prefab in two ways: * [[Arma_Reforger:Prefabs_Basics#Drag_and_drop_method|By dropping parent prefab in World Editor and drag and dropping that entity into Resource Browser field]] * By using '''[[Arma Reforger:Data Modding Basics#Using .22Inherit in....22 function|Inherit in Addon]]''' action on prefab selected in '''Resource Browser'''

No matter what method was picked, it is recommended to create base prefab for props, which might have some variants. In this tutorial '''Portable Desk''' have 3 texture variants prepared, so such base class will be more than welcome.

In this case, new prefab, which inherits from [enfusion://ResourceManager/~ArmaReforger:Prefabs/Props/Core/Destructible_Props_Base.et|'''Destructible_Props_Base.et'''] , should be called '''PortableDesk_01_Base.et'''

Final step in initial configuration will be assigning previously imported mesh. This can be done by simply assigning '''Rugged Desk XOB''' into '''Object''' property of '''MeshObject''' component in '''PortableDesk_01_Base.et''' prefab.

[[Image:armareforger-new-prop-desk-prefab.png]]

If change was applied to '''MeshObject''' component of '''prefab instance''', don't forget to press '''Apply to prefab''' button and then save currently loaded world!

'''Creating texture variants'''

[[Image:armareforger-new-prop-prefab-material-assign.png|right]] Since this assets is supposed to have three color variants, new prefab variants have to be prepared

# Create new prefabs, inheriting from '''PortableDesk_01_Base.et''', either via '''World Editor''' viewport '''drag and drop''' method or via '''Inherit Prefab''' action available in '''Resource Browser''' attached to '''World Editor''' # Once new prefabs are created, open them and one by one, change assigned materials in '''Materials''' array inside '''MeshObject''' component to appropriate material created before. # '''Apply changes to the prefabs''' if changes were applied to entity instance, otherwise (''if hierarchy tree was used'') this step can be skipped # '''Permanently save changes''' to the prefabs by either '''saving current world''' or, if in '''prefab edit mode''', '''save the prefab''' directly.

In the end, following files should be present in next to the '''PortableDesk_01_Base.et'''

* '''PortableDesk_01_Black.et''' * '''PortableDesk_01_Olive.et''' * '''PortableDesk_01_Sand.et''' {{Clear}}

== Creating prefabs for smaller parts ==

[[Image:armareforger-new-prop-prefab-variants-list.png|right]] Procedure described above should be also applied to '''lid''' and '''wing prefabs''' so they have base prefab (inheriting from [enfusion://ResourceManager/~ArmaReforger:Prefabs/Props/Core/Destructible_Props_Base.et|'''Destructible_Props_Base.et'''] ) and color variants. Those prefabs should be really simple at this stage so '''MeshObject''' and '''RigidBody''' components which they inheriting from [enfusion://ResourceManager/~ArmaReforger:Prefabs/Props/Core/Destructible_Props_Base.et|'''Destructible_Props_Base'''] should be enough.

In the end, following set of prefabs should be created

* '''PortableDesk_01_wing_base.et''' ** '''PortableDesk_01_wing_Black.et''' ** '''PortableDesk_01_wing_Olive.et''' ** '''PortableDesk_01_wing_Sand.et''' * '''PortableDesk_01_lid_base.et''' ** '''PortableDesk_01_lid_Black.et''' ** '''PortableDesk_01_lid_Olive.et''' ** '''PortableDesk_01_lid_Sand.et'''

{{Clear}} == Creating prop variants ==

In order to create a variant of Portable Rugged Desk with for instance both wings and lids attached, it is possible to utilize '''SlotManagerComponent''' to attach additional elements. Before going any further though, it is recommend to start with creating a new base prefab - '''PortableDesk_01_Base_Full.et''' - which will serve as a base asset with all additions attached. Since the core of the desk remains the same, this new base prefab should inherit from '''PortableDesk_01_Base.et'''

Once base prefab is there, follow below steps to :

* Add new '''SlotManagerComponent''' via '''[[Arma_Reforger:Prefabs_Basics#Adding_new_components_to_entity_instance|+ Add Component]]''' button * Select '''SlotManagerComponent''' and add new element to '''Slots''' array by clicking on plus sign on the right side of that property ** Select '''EntitySlotInfo''' from the list that appeared ** Type new name of that slot. For instance slot for wing can be called '''Wing_L''' ** In '''Wing_L''' element, locate '''Pivot ID''' property and select '''socket_wing_01''' from the list ** In '''Child Pivot ID''' type name of the snap point which is located in the mesh - in this case it is called '''snap_wing''' ** In '''Prefab''' property, assign prefab which you want to use - in this case it will be '''PortableDesk_01_Base_Wing.et'''

This procedure should be repeated for the rest of the slots - '''Wing_R, Lid_1''' & '''Lid2'''. In case the prefabs from the slots are incorrectly attached, please make sure that orientation of sockets and snap points is correct. Otherwise, the new '''PortableDesk_01_Base_Full.et''' should look like that:

[[Image:armareforger-new-prop-prefab-slot-manager.png]]

Beside using '''SlotManagerComponent''', it is also possible to utilize hierarchy. This is especially useful when you for instance want to create a mini composition out of prefab, like add a telephone, some notebooks or ashtrays to it. After adding '''Hierarchy''' component to both parent and children prefab, it is even possible to utilize '''Pivot ID''' to snap prefabs to desired place. There is no way to define '''Child Pivot ID''' using that method though and thats why '''SlotManagerComponent''' was used here.

Principles of adding entity to prefab are described on [[Arma_Reforger:Prefabs_Basics#Adding_entities_to_prefab|Prefabs Basics page]]

[[Image:armareforger-new-prop-prefab-add-hierarchy.gif]]

= Adding procedural animation =

{{Messagebox|'''Overview''' Following topics will be covered in this paragraph

* Creating basic procedural animation * Applying animation to the asset|💬|#CDF}}

{{Feature|informative|Before proceeding further it is recommend to make yourself familiar with [[Arma_Reforger:Procedural_Animation_Editor|Procedural Animation Editor documentation]] & [[Arma_Reforger:Procedural_Animation_Editor_Basics_Tutorial|Procedural Animation Editor tutorial]].}}

== Creating new procedural animation project ==

[[Image:armareforger-new-prop-procedural-animation-new-project.png]] [[Image:armareforger-new-prop-procedural-animation-create-project.png|left]] First step in creation of new procedural animation project would be launching of '''Procedural Animation Editor'''. After that, new project can be created by navigating to '''File → New → Project..'''. ( ''alternatively, {{Controls|Ctrl|Shift|N}} shortcut can be used'') in order to create new '''Procedural Animation Project'''. '''Procedural Animation Project''' is quite similar in purpose to animation definitions in '''Real Virtuality''' '''Model Config''' but with '''much better signal processing''' ''(more about it next chapter)''.

Once that step is completed, a new pop up window will appear asking for save location. In '''Arma Reforger''', asset specific procedural animations are stored next to the model somewhere in inside '''Asset''' folder structure. Common animations, like turrets or wheel animations which are used by multiple vehicles, are located in '''Anims/Proc''' folder.

Here, situation is quite simplified and '''Rugged Desk''' animations are assumed to be specific to this asset and are placed in '''Assets/Props/Military/Camps/PortableDesk_01/Anims/''' folder.

{{Clear}} == Creating new procedural animation signal ==

Once new '''Procedural Animation Project''' is created, it is possible to populate it with actual data. First step towards this goal would be creating new '''signal'''. To differentiate it from '''Audio Editor''' signals, '''Procedural Animation Editor signals have .siga''' extension.

Signals are quite essential part of procedural animation since they are controlling how signals from scripted or engine events are processed. For those familiar with '''Real Virtuality Engine''', '''signals''' are somewhat similar in their purpose to '''source''' parameter in '''Model Config -''' this time though it is possible to do much more complex processing of signals like mixing values, non linear movement and mixing two or more '''signals''' together.

== Setting up signal ==

To create '''new signal''', navigate to '''File -> New -> Signal...''' in top bar. This should open new '''Create Signal''' dialog. Select location for your new signal and after clicking on '''Ok''' button, this file should be opened in new tab. After that, get back to the '''Procedural Animation Project and''' click with '''{{Controls|LMB}}''' on [[Arma_Reforger:Procedural_Animation_Editor:_Nodes#Signal|'''Signal''']] button located in the top bar of '''Procedural Animation Editor'''. Over there, try to locate previously created '''signal''' ''(.sig)'' file and confirm the selection by pressing on '''Ok''' button.

Once that is completed, this signal should be assigned to the currently opened project.

Alternatively, instead of using '''Signal''' button, it is possible to '''drag & drop''' signal from '''Resource Browser''' the main window.

[[Image:armareforger-new-prop-procedural-animation-create-signal.gif]]

At minimum, '''signal''' should contain [[Arma_Reforger:Procedural_Animation_Editor:_Nodes#Input|'''Input''']] and [[Arma_Reforger:Procedural_Animation_Editor:_Nodes#Output|'''Output''']] node and those can be added by clicking with {{Controls|LMB}} on '''Input''' and '''Output''' buttons respectively in the '''top section of main window'''. At this point, it is possible to simply connect '''Out''' connector from '''Input''' node to '''In''' connector from '''Output''' node and such signal would already work. However, beauty of '''Procedural Animator Editor''' lies in nodes that can be used to process the signal and therefore, [[Arma_Reforger:Procedural_Animation_Editor:_Nodes#Smoother|'''Smoother''']] node will be added in this signal project to, as name suggest, smooth the signal.

Same as with the '''Input''' and '''Output''' nodes, '''Smoother''' can be simply added by clicking on '''Smoother''' button in top section of main window.

Once that newly created node is present in the window, it is possible to connect '''Out''' from '''Input''' node with '''In''' from '''Smoother''' node''''''. Similar thing should be done with '''Output''' node where its '''In''' connector should be linked with '''Out''' connector of '''Smoother''' node.

[[Image:armareforger-new-prop-procedural-animation-adding-smoother.gif]]

[[Image:armareforger-new-prop-procedural-animation-smoother-settings.png|left]] With those nodes being properly connected, now it's time to adjust behavior of '''Smoother''' node itself. To do so, click on it and navigate to '''Item detail''' window and go to '''Data''' section over there.

'''Fade In Time & Type''' will correspond to '''opening of drawer''' and '''Fade Out Time & Type''' to '''closing of drawer'''. In this case, '''Fade In Time''' was set to 700 and '''Type''' was set to '''S-curve''' (See {{Link|https://en.wikipedia.org/wiki/Sigmoid_function}}) - this should give it quite nice & natural motion. Closing of the drawer should behave more like you slam it so that's why '''Power of 2''' was selected in '''Fade Out Type''' drop-down list.

At later stage, '''once scripted user action are configured''', it might be wise to '''play with those parameters in-game''' and observe what kind of results you can get by changing time or type of fade effect. {{Clear}} Once first set of '''Input, Smoother & Output''' nodes is completed, it is now possible to create rest of the signals for all separate drawers. This could be achieved in two ways:

# By '''repeating whole procedure''' and manually adding '''Input, Smoother & Output''' nodes and then, adjusting content of '''Smoother''' node # By using '''copy and paste procedure'''

Naturally, since all those signals are supposed to work almost exactly the same, using '''copy paste procedure is recommend''' way of dealing with rest of the signal.

To copy paste nodes, simply click and then hold '''{{Controls|LMB}}''' and select all nodes that you want copy. If everything was done correctly, nodes should have now '''golden stroke''' around them. After that, use '''{{Controls|Ctrl|C}}''' combination to copy files and then use '''{{Controls|Ctrl|V}}''' combo to paste those nodes under the cursor. Voila, now this action has to be repeated till '''signal project has 6 sets of Input, Smoother & Output''' nodes.

=== Aligning and grouping nodes === {{Feature|informative|Both '''Procedural Animation Editor''' and [[Arma_Reforger:Audio_Editor|'''Audio Editor''']] offers way to adjust position of the nodes making it look more pleasant and aesthetical. This is done by '''selecting multiple nodes''' and then '''clicking on of them with RMB''' and then, selecting '''one of the alignment options from the context menu'''. It is also possible to catch few nodes in a single group by selecting '''Group''' option but again - this option has purely aesthetical function. [[Image:armareforger-new-prop-procedural-animation-align-nodes.gif|center]]}}

Last step in setting up signal will be changing of '''Name''' property in all '''Signal''' nodes. This '''Name''' property will be later used to '''link script source to signal''', therefore, some reasonable name should be picked - in case of that project all '''Input''' nodes were named '''Drawer 1''' to '''Drawer 6'''. Names of rest of the nodes is not important but it is usually quite helpful to maintain some reasonable names - especially with '''Output''' nodes - since it helps with navigation and understanding of project that you are working on.

In the end, you should end up with following setup in '''Procedural Animation Signal'''

[[Image:armareforger-new-prop-procedural-animation-signal-ready.png|center]]

== Setting up Procedural Animation Project ==

After '''signal''' is configured, it is possible to proceed further with '''Procedural Animation Project''' itself. To put in motion things, '''nodes''' are required.

The goal here would be to '''make drawers move'''. To achieve that goal, let's take a look Motion of the drawer is quite simple and simple '''translation''' could be used. In '''Procedural Animation Editor''', this translates into following procedure:

* Add [[Arma_Reforger:Procedural_Animation_Editor:_Nodes#TranslateMake|'''TranslateMake''']] node and connect signal from '''Signal''' node to '''Z axis''' of that newly created item ** Select '''TranslateMake''' node that was just created and in '''Item detail''' window, navigate to '''Z ''' '''axis''' parameter in '''Data''' section - over there change the value to -0.5 ''(meters)-'' that will be the maximal movement of the bone. * Create [[Arma_Reforger:Procedural_Animation_Editor:_Nodes#TranslateSet|'''TranslateSet''']] node and connect '''TranslateMake''' node to translation input on '''TranslateSet''' * Create [[Arma_Reforger:Procedural_Animation_Editor:_Nodes#Bone|'''Bone''']] node and connect it to '''In''' input in '''TranslateSet'''

[[Image:armareforger-new-prop-procedural-animation-setting-pap.gif]]

Those actions should be repeated for all 6 drawers present in that model - '''similar to signal setup''', it is possible to utilize '''copy paste process''' to speed up whole procedure. In the end, Procedural Animation Project should look like that:

[[Image:armareforger-new-prop-procedural-animation-pap-ready.png]]

== Previewing animation ==

After adding nodes, drawer animations should be already in working state but without any means to test it, it is rather hard to verify if the motion is fully correct. To preview those animations, it will be necessary to set up few things.

{{Feature|warning|Previewing animations which have smoother node is only working in 0.9.6 version of Workbench and beyond}}

In '''View''' window, located by default in right section of '''Procedural Animation Editor''', it is possible to quickly preview animation that is currently developed. To do so, follow below steps:

[[Image:armareforger-new-prop-procedural-animation-setting-preview.gif]]

* Click on '''Select Model''' button (''in 0.96 version this button is replaced by icon'') and in pop up window select preview model (in this case it will be '''PortableDesk_01.xob''') * On all '''Bone''' nodes that were previously created, go to Item detail window and over there, pick from '''Bone name''' list correct bone for particular signal ** For example '''Drawer''' '''1''' signal should use '''Drawer_1''' bone * Select '''signal''' node in the '''main window''' * In '''Signal Simulation''' window change of the inputs (''i.e. Drawer 1)'' '''-''' either with mouse or by typing the value

{{Feature|informative|Please note that it might be necessary to '''save & close project after selecting model''' in order to have those changes being correctly applied.}}

With that knowledge, previewing animations in '''View''' window should not longer be a problem

[[Image:armareforger-new-prop-procedural-animation-preview.gif|center]]

== Applying procedural animation to prefab ==

At this stage, it is finally possible to plug in animation to rugged desk prefab. It will be still not possible to animate it in game via some user action but it will be good base for further endeavors.

First step towards it would be adding two new components to '''Rugged Desk''' base prefab

* '''ProcAnimComponent -''' links Procedural Animation Projects to prefab and defines which bones are linked to PAP file * '''SignalsManagerComponent -''' enables usage of signals which are either provided by game code or scripts

Those components can be added via '''Add Component +''' button located in bottom section of '''Object Properties''' window - whole process of adding new components is described in detail on [[Arma_Reforger:Prefabs_Basics#Adding_new_components_to_entity_instance|'''Prefabs Basics''']] page.

[[Image:armareforger-new-prop-procedural-adding-component.gif|center]]

While '''SignalsManagerComponent''' basically doesn't need any further tweaking, '''ProcAnimComponent''' needs some configuration. In this component, locate '''Parameters''' array and add new element by clicking on '''plus symbol''' on the right side of that parameter. This should add new element to the array of '''ProcAnimParams''' type. Over there, there are two new parameters available:

* '''Resource Name''' - this parameter is used to link '''Procedural Animation Project (.pap)''' to the prefab. In this case '''drawer_move.pap''' should be selected. * '''Bone Names''' - array of bones (list is filled automatically if '''MeshObject''' has bones/pivots available) which should be animated. This list should match bones order (the stored in .pap file itself!) and sometimes it might be necessary to verify in game which entry in array corresponds to '''Bone''' node in '''Procedural Animation Project.'''

If components were added to entity instance of '''Rugged Desk base prefab''', then don't forget to use '''Apply to prefab''' button and then remember to '''save current world''' to store previously made changes '''permanently on the drive'''. After that, initial implementation of procedural animations should be completed.

= Adding scripted action = {{Messagebox|'''Overview''' Following topics will be covered in this paragraph

* Creating user action for drawer * Adding new user action to prefab|💬|#CDF}}

{{Feature|informative|Before proceeding further it is recommend to make yourself familiar with [[Arma_Reforger:Object_Oriented_Programming_Basics|scripting basics]] & [[Arma_Reforger:Scripting_Example|example]] or [[Arma_Reforger:Scripting_Modding|tutorial]].}}

To add new scripted action for opening and closing of drawers following elements are needed:

* '''New script''' for drawer action * Properly configured '''Action Contexts''' and '''Additional Actions''' in '''ActionsManagerComponent'''

Before going any further, first step towards adding new user action would be '''adding of ActionsManagerComponent''' to '''PortableDesk_01_Base.et''' prefab. Similar as in [[#Applying_procedural_animation_to_prefab|'''applying procedural animation to prefab''']] segment, this can be done in few ways and all those methods are described on [[Arma_Reforger:Prefabs_Basics|'''Prefabs Basics''']] page.

In this tutorial, it is assumed that user have already some experience with scripts in general. If not, a good starting point might be {{GameCategory|armaR|Modding|Scripting|Guidelines|link= y}} and then checking one of the scripting tutorials [[Arma Reforger:Scripting Example|Scripting Example]] or [[Arma Reforger:Scripting Modding|Scripting Modding]].

In [[Arma_Reforger:Script_Editor|'''Script Editor''']], in [[Arma_Reforger:Script_Editor#Projects|'''Projects''']] tab, it is possible to check some of the already existing '''User Actions''' in '''Game('Scripts/Game')''' → '''Scripts → Game → UserActions.''' A good candidate for inspiration might be '''[enfusion://ScriptEditor/Scripts/Game/UserActions/SCR_DoorUserAction.c SCR_DoorUserAction]''' which has some of parts, which could be potentially reused for '''drawer open/close''' action.

== Creating new user action ==

Starting with creation of new scripted user action, it will be necessary to prepare correct folder structure first. In this case, new script should be created in '''Scripts → Game → UserActions''' folder.

By default, game is evaluating scripts located in few predefined locations (''which are defined in [[Arma_Reforger:Resource_Manager:_Options#Modules|'''Resource Manager options''' in '''Modules''' section'']]), so '''Scripts → Game''' part of the structure is extremely important - script outside of that folder would not be compiled otherwise. '''UserActions ''' folder is recommendation though since all other vanilla user actions are located over there.

[[Image:armareforger-new-prop-script-structure.png|900px]]

[[Image:armareforger-new-prop-script-rb.png|right]] When folder structure is ready, it is time to create a new script called '''SCR_DrawerUserAction.c'''. In general, it can be done in at least three ways:

# Via '''Create''' button in '''Resource Browser''' (doesn't matter if its attached to which editor it is attached, '''Resource Manager''' will work fine though) ## To use this method, navigate to '''Scripts → Game → UserActions''' folder and then either click on '''Create''' button or use RMB on file list. In both cases, a new menu will appear from which you can select '''Script''' option. This will # Via '''Add New Script..'''. context menu in '''Projects''' window # Via '''Script Wizard'''

In principle, to make your new user action selectable in '''Additional Actions''' inside '''ActionsManagerComponent''', you have to inherit from '''ScriptedUserAction''' class - just like '''SCR_DoorUserACtion''' does. This can be simply achieved by writing following code in '''SCR_DrawerUserAction.c''' <enforce> class SCR_DrawerUserAction : ScriptedUserAction { } </enforce> Next step would be getting reference to '''SingalsManagerComponent'''. It is done once in init and reference to it is cached in memory. <enforce> class SCR_DrawerUserAction : ScriptedUserAction { //! Signal manager to pass signals into procedural animation private SignalsManagerComponent m_SignalsManager;

//------------------------------------------------------------------------------------------------ override void Init(IEntity pOwnerEntity, GenericComponent pManagerComponent) { m_SignalsManager = SignalsManagerComponent.Cast(pOwnerEntity.FindComponent(SignalsManagerComponent)); } } </enforce> {{Clear}} Once that is set, it is a proper moment to add new attribute to the action itself. To do so, add {{Link|enfusion://ScriptEditor/scripts/Core/attributes.c;221|[Attribute()] }} tag above variable that you want to expose. Attributes can be provided in two ways:

* Without parameters names, just values are typed, separated by coma. Example: ''[Attribute("hello", UIWidgets.EditBox)]'' * With parameter names, list of parameters can be checked in Script Editor [enfusion://ScriptEditor/scripts/Core/attributes.c;231 over there].

In this tutorial, the 2nd method was used. <enforce> class SCR_DrawerUserAction : ScriptedUserAction { [Attribute( defvalue: "Drawer 1", uiwidget: UIWidgets.EditBox, desc: "Signal index of drawer" )] private string m_sSignalName; // string for pairing with the user action } </enforce> Above code should translate to parameter being visible in '''SCR_DrawerUserAction''' as on picture below. This part is detailed more in detail later, so for now we can continue with writing script.

[[Image:armareforger-new-prop-script-action-parameter.png]]

Further step is finding of signal index in '''SingalsManagerComponent''' using name provided by attribute exposed before. To do so, it is necessary to override two methods:

* '''CanBeShownScript''' - controls if this action can be performed by the provided user entity * '''CanBePerformedScript''' - controls if this action can be shown in the UI by the provided user entity

In case of '''CanBeShownScript''', work is quite simple since it is assumed that action should be always visible if it can be performed.

'''CanBePerformedScript''' does some simple validation of input and verifies if '''SingalsManagerComponent''' is present on entity, if not, then the script will exit. Afterwards, code is validating '''m_iSignalIndex''' variable. By default it is set to -1 and in such case, code will try to find '''m_sSignalName''' in '''SingalsManagerComponent ''' and return correct index. If its not found, then action won't be visible. <enforce> class SCR_DrawerUserAction : ScriptedUserAction { [...] private int m_iSignalIndex = -1;

//------------------------------------------------------------------------------------------------ override bool CanBeShownScript(IEntity user) { return CanBePerformedScript(user); }

//------------------------------------------------------------------------------------------------ override bool CanBePerformedScript(IEntity user) { if(!m_SignalsManager) // Do nothing if there is no signal manager return false;

if (m_iSignalIndex < 0) // Check if signal index is valid { m_iSignalIndex = m_SignalsManager.FindSignal(m_sSignalName); return false; }

return true; } [...] } </enforce> After that, code for sending signal to '''Procedural Animation Project''' can be added. This is done by finding signal (''via [enfusion://ScriptEditor/Scripts/Game/generated/Components/SignalsManagerComponent.c;35 FindSignal] method'') in '''SignalManagerComponent''', which was automatically registered by linked procedural animation in '''ProcAnimComponent'''.

Since setting '''ValRT''' in '''Procedural Animation Projects''' do a full movement of the drawer, '''targetValue''' variable switches between 0 and '''MAX_SIGNAL_VALUE''' constants, so the drawer is not fully opened. Of course, this can be changed/optimised and this is mainly a '''showcase how to work with signals'''. Value of '''targetValue''' is then passed to '''SignalsManagerComponent''' through [enfusion://ScriptEditor/Scripts/Game/generated/Components/SignalsManagerComponent.c;37 '''SetSignalValue'''] method, which is finally passed to procedural animation. <enforce> class SCR_DrawerUserAction : ScriptedUserAction { [...] const float MAX_SIGNAL_VALUE = 0.25; [...] //--------------------------------------------------------- override void PerformAction(IEntity pOwnerEntity, IEntity pUserEntity) { float targetValue = Math.AbsFloat((m_SignalsManager.GetSignalValue(m_iSignalIndex)) - MAX_SIGNAL_VALUE);

m_SignalsManager.SetSignalValue(m_iSignalIndex, targetValue); } [...] } </enforce> Last step will be handling of UI part and changing name of the action depending whether drawer is going to be closed or opened. This is done by '''overriding GetActionNameScript''' method and changing '''outName''' string. If signal connected to that particular drawer is '''equal to 0''', then we can assume that '''drawer is closed''' and action that should be visible by player should be called "'''Open'''". Otherwise, '''"Close"''' action should be presented to player.<enforce> class SCR_DrawerUserAction : ScriptedUserAction { [...] //------------------------------------------------------------------------------------------------ override bool GetActionNameScript(out string outName) { if((m_SignalsManager.GetSignalValue(m_iSignalIndex)) == 0) { outName = "Open"; } else { outName = "Close"; } return true; } [...] } </enforce> If all described above steps were done correctly, then new, '''SCR_DrawerUserAction''' action should be ready to use in '''ActionsManagerComponent'''. Below you can find full script code.

Full code <spoiler> <enforce> class SCR_DrawerUserAction : ScriptedUserAction { [Attribute( defvalue: "Drawer 1", uiwidget: UIWidgets.EditBox, desc: "Signal index of drawer" )] private string m_sSignalName; // for pairing with the user action

private int m_iSignalIndex; const float MAX_SIGNAL_VALUE = 0.25;

//! Signal manager to pass signals into procedural animation private SignalsManagerComponent m_SignalsManager;

//------------------------------------------------------------------------------------------------ override bool CanBeShownScript(IEntity user) { return CanBePerformedScript(user); }

//------------------------------------------------------------------------------------------------ override bool CanBePerformedScript(IEntity user) { if(!m_SignalsManager) // Do nothing if there is no signal manager return false;

if (m_iSignalIndex < 0) // Check if signal index is valid { m_iSignalIndex = m_SignalsManager.FindSignal(m_sSignalName); return false; }

return true; }

//--------------------------------------------------------- override void PerformAction(IEntity pOwnerEntity, IEntity pUserEntity) { float targetValue = Math.AbsFloat((m_SignalsManager.GetSignalValue(m_iSignalIndex)) - MAX_SIGNAL_VALUE);

m_SignalsManager.SetSignalValue(m_iSignalIndex, targetValue); }

//------------------------------------------------------------------------------------------------ override bool GetActionNameScript(out string outName) { if((m_SignalsManager.GetSignalValue(m_iSignalIndex)) == 0) { outName = "Open"; } else { outName = "Close"; } return true; }

//------------------------------------------------------------------------------------------------ override void Init(IEntity pOwnerEntity, GenericComponent pManagerComponent) { m_SignalsManager = SignalsManagerComponent.Cast(pOwnerEntity.FindComponent(SignalsManagerComponent)); } } </enforce> </spoiler>

== Adding action contexts ==

[[Image:armareforger-new-prop-script-action-manager.png|right]] With '''SCR_DrawerUserAction''' being properly setup, it is possible to move forward and start adding new '''Action Contexts''' in '''ActionsManagerComponent.'''

'''Action Contexts''' serves as a sort of list of interactable places , where other systems requiring user input can use them.

Each '''action context''' have following properties:

* '''Context Name''' - used by other systems to distinguish this action from the rest of action contexts * '''Position -''' defines position of the action. Using '''PointInfo''' class, it is possible to define following things ** '''Pivot ID -''' in this drop-down list box it is possible to attach '''action context''' to '''selected bone'''. Action will follow the bone if its animated ** '''Offset''' - offset from the center of model or (''Pivot ID has some valid bone selected'') from center of the '''Pivot ID''' ** '''Angles -''' orientation of the action - it is especially important when '''Omnidirectional''' property is set to false * '''Radius''' - this parameter defines how far, from the origin defined by '''Position''' parameter, action context is visible. * '''Omnidirectional -''' defines if context is available from both sides or not.

{{Feature|informative|Some of the extra details can be found on [[Arma_Reforger:Action_Context_Setup]] page}} {{Clear}} New '''Action Contexts''' can be added to '''ActionsManagerComponent''' by clicking on '''plus + sign (1)''' located to the right of the parameter. '''ActionsManagerComponent''' component has also some interesting options available '''which can speed up process of debug and setup of new actions.'''

After clicking with RMB on '''ActionsManagerComponent''' in '''Object Properties''' windows, a new context menu should appear containing various options for debuging and one action for '''assisted creation of new action contexts''' - '''Create user action context(s) from bones.'''

After clicking '''Create user action context(s) from bones''' option, a new window will appear listing all bones that '''don't have action context defined yet'''. By clicking on '''drawer_1 with {{Controls|LMB}}''' and clicking on '''drawer_6''' with {{Controls|LMB}} while holding left {{Controls|Shift}}, you can select multiple entries at once. It is also possible to select multiple elements by holding left control and then clicking with {{Controls|LMB}}. Once all drawer related bones (from 1 to 6) are selected, it is possible to confirm selection by clicking on '''OK''' button.

[[Image:armareforger-new-prop-script-action-manager-create-actions-bones.gif]]

It's also worth to mention that this context menu has few other options, which are quite useful for setting up & debugging of context actions. Below you can see in action transform gizmos (activated via ''Toggle context(s) transform gizmo visualization'' ) and radius visualization (activated via ''Toggle context(s) radius visualization'' option). ''Toggle context(s) visibility angle visualization'' is also quite handy in setting non '''Omnidirectional''' actions.

[[Image:armareforger-new-prop-script-action-manager-context-menu.png]]

Position of the action context can be further tweaked by changing '''Offset''' values in '''Position''' object.

[[Image:armareforger-new-prop-script-action-adjustments.gif]]

== Adding additional actions == [[Image:armareforger-new-prop-script-action-manager-additional-actions.gif|right]] Additional actions are actions, which are scripted. Some of the actions like get in, '''switch seat or opening of doors are handled''' by respective components like '''DoorComponent''' or '''SCR_BaseCompartmentComponent'''. Other more specific actions, which don't necessarily need a whole component to be handled, are handled via '''Additional Actions''' array. In vanilla game, '''flushing toilet''' or '''opening hatches in BTR-70''' are handled via this kind of actions and '''drawer open/close action is also a good candidate to use this method'''.

New '''additional actions''' can be added to the asset by clicking on plus icon to the right of '''Additional Actions''' property inside '''ActionsManagerComponent'''. Once that plus sign is clicked, a new menu pops up asking for a type of action which should be added to the asset. In this case '''SCR_DrawerUserAction ''' should be selected from the list.

After adding first '''SCR_DrawerUserAction''' element to the array'''''', there are '''few things that need to be adjusted over there'''. First task will be configuring '''Parent Context List''' parameter. This array contain list of contexts where this action will be visible. It is possible to use multiple contexts for such action but in this case, only single context - '''previously created drawer_1 -''' should be present in '''Parent Context List''' array.

Next thing will be defining of '''Signal Name''' parameter. This is custom property which was added by '''SCR_DrawerUserAction''' and, as it was mentioned before, it should contain name of the '''signal''' defined in '''Input''' node of '''Procedural Animation Editor Signal''' (.''siga file''). In this case it will be '''Drawer 1'''

If all steps were properly followed, then it should be already possible to test it in-game and verify if the user action is visible & usable. If action is not visible, verify if bone used as '''Pivot ID''' is correctly rotated and that radius of action is correct.

{{Clear}} = Adding sounds =

{{Messagebox|'''Overview''' Following topics will be covered in this paragraph

* Creating audio project * Assigning it to object|💬|#CDF}}

{{Feature|informative|Before proceeding further, it is recommended to make yourself familiar with the [[Arma Reforger:Audio Editor|Audio Editor]] documentation and the [[Arma Reforger:Audio Editor: Getting Started Tutorial|Audio Editor: Getting Started Tutorial]].}}

== Creating new audio project ==

New '''audio project''' can be created quite easily inside '''Audio Editor'''. To do so, open '''Audio Editor''' and either select from '''File → New → Project..'''. option or use '''{{Controls|Ctrl|Shift|N}}''' shortcut.

[[Image:armareforger-new-prop-sound-new-project.png|center]]

== Setting nodes in audio project ==

For drawer open/close action following things will be required in audio project:

* '''2 [[Arma_Reforger:Audio_Editor:_Nodes#BankLocal|BankLocal nodes]]''' (''aka Bank node)'' - one for opening and another for closing of drawer * '''2 [[Arma_Reforger:Audio_Editor:_Nodes#Shader|Shader nodes]]''' - separate for opening and drawer. Applies panning and attenuation based on the spatial relation between the in-game listener and emitter * '''2 [[Arma_Reforger:Audio_Editor:_Nodes#Sound |Sound nodes]]''' - same as above. The root node of a signal chain. Must be present in every chain in order for sound to be playable. Name of the '''Sound''' node can be later to trigger '''Sound Event''' via scripts * '''[[Arma_Reforger:Audio_Editor:_Nodes#Amplitude|Amplitude node]]''' - controls amplitude attenuation that is applied by the '''Shader -''' shared with both '''Shader nodes''' * '''[[Arma_Reforger:Audio_Editor:_Nodes#Frequency |Frequency node]]''' - controls frequency attenuation that is applied by the '''Shader -''' shared with both '''Shader nodes''' * '''[[Arma_Reforger:Audio_Editor:_Nodes#Spatiality |Spatiality node]]''' - controls spatiality that is applied by the '''Shader''' '''-''' shared with both '''Shader nodes''' * '''[[Arma_Reforger:Audio_Editor:_Nodes#Mixer|OutputState node]]''' ''(aka Mixer or [enfusion://ResourceManager/~ArmaReforger:Sounds/FinalMix.afm FinalMix.afm])'' - This node serves as a way to group sounds based on type so that they can be processed as a unit before being sent to the final output(s). As with the Signal node, this node contains some internal logic that defines how each sound group is processed. This internal logic can be edited by double-clicking on the node.

=== Adding audio banks ===

Starting configuration of '''audio project''' with creation of '''audio banks''', new '''Bank nodes''' can be easily added by following below steps:

* Click on '''BankLocal''' button in the upper section of the editor * Click on that new '''Bank''' node and navigate to '''Unsorted section''' in '''Item Detail''' window * Fill in '''Samples''' array with audio files (''start with Sfx_RuggedDesk_Drawer_Open_01.wav)'' that should be played when this audio bank is used. This can be done in two ways: ** By drag and dropping registered audio file in wav format on '''Bank''' node ** By adding new element to '''Samples''' array via plus button and then assigning wav file in '''Filename''' field

This should be enough to have it in working state. Additionally, following steps can be performed to make it more pleasant to look at:

* Rename '''Bank''' node to f.e. ''"Open"'' by changing '''Name''' parameter in '''Item Detail''' window * Reposition '''Bank''' node to make space for another '''Bank''' node

After that, above steps can be repeated to create ''Close'' '''Bank''' node, which would contain ''Sfx_RuggedDesk_Drawer_Close_01.wav'' sample. With two bank nodes in place, it is also possible to already start process of beautification of the audio project by aligning and then grouping those nodes in '''Audio Bank'''s group.

[[Image:armareforger-new-prop-sound-audio-bank.gif]]

=== Adding shaders ===

Process of adding '''new shaders''' to '''audio project''' is quite similar, if not even simpler, to explained above procedure of adding audio banks.

In principle, those two steps have to be done for both '''Close''' and '''Open''' variants:

* Click on '''Shader''' button in top section of the main window * Connect '''Out''' port on '''Bank node''' with '''In port on Shader node'''

Once again, it is also recommended to '''change names''' of the nodes and then '''group''' them improve readability of the audio project.

[[Image:armareforger-new-prop-sound-adding-shader.gif]]

=== Adding special nodes ===

Next in audio project configuration will be adding of '''Amplitude, Frequency & Spatiality''' nodes to the working file. Adding of those nodes should be at this point quite straightforward so in this chapter we will focus more on '''configuration of new nodes'''.

Beginning with '''Amplitude''' node, here are few things that has be done in order to have it working correctly:

* In '''Item Detail''' window, change '''Curve''' parameter from '''None''' to '''Logarithm'''. This action will enable '''attenuation of the sound''' or in other words, sound will be more '''silent the further away you are from the sound source'''. ** After changing '''Curve''' parameter to '''Logarithm''', two new parameters should appear''':''' *** '''Inner Range''' - this parameter define distance in meters below no attenuation is applied. By default it is set to 1 and for this asset we can leave it as it is *** '''Outer Range''' - this parameter define distance in meters beyond sound is muted. For such small drawer as this, '''5 meters''' would be a sensible number * '''Amplitude Out''' port should be connected to '''Amplitude''' port on both '''Close & Open''' shaders.

Second on the list is '''Frequency''' node, which also affects attenuation of the sound & similar to '''Amplitude''' node, following things have to be adjusted on that node

* In '''Item Detail''' window, enable '''Enable Distance Att''' parameter ** Default values should be fine for this rugged desk - for more information see Audio Editor nodes documentation * '''Frequency Out''' port should be connected to '''Frequency''' port on both '''Close & Open''' shaders.

Last but not least it is time to configure '''Spatiality''' node, which controls 3D sound perception.

* In '''Item Detail''' window, change '''Spatial Factor''' parameter '''to 1.0 -''' this will enable 3D like perception of the sound. * '''Spatiality Out''' port should be connected to '''Spatiality''' port on both '''Close & Open''' shaders.

[[Image:armareforger-new-prop-sound-adding-special-nodes.gif]]

=== Adding sound nodes ===

With shaders being properly configured, it is time to move to '''Sound''' nodes. In this case, '''name of the Sound node is important''', since it will be later used in script to trigger '''playing of the sound event'''. Sound nodes can be added by clicking on '''Sound''' button in top section of the main window. Both '''close and open action need a separate Sound node''', so two '''Sound''' nodes are necessary.

Once both nodes are present in work board, change their name to '''SOUND_DRAWER_CLOSE''' and '''SOUND_DRAWER_OPEN''' and then connect it to respective shaders.

'''Sound''' nodes have quite a lot of parameters which can be tweaked so at later stage, when whole asset is configured, it is recommended to play with parameters that are available over there.

[[Image:armareforger-new-prop-sound-adding-sound-node.gif]]

=== Adding final mix ===

Final step will be adding of [enfusion://ResourceManager/~ArmaReforger:Sounds/FinalMix.afm FinalMix.afm] (''also known as [[Arma_Reforger:Audio_Editor:_Nodes#Mixer|Mixer]]'') to the audio project and then connecting outputs of '''Sound''' nodes to '''ENV_Objects''' port on '''OutputState''' node.

[[Image:armareforger-new-prop-sound-final-mix.gif]]

=== Result ===

In the end, audio project should look somewhat similar to the picture below. Since '''Procedural Animation Editor''' & '''Audio Editor''' are sharing a lot of code, it is also possible to [[#Aligning_and_grouping_nodes|'''align & group nodes''']] here too.

[[Image:armareforger-new-prop-sound-audio-project-result.png|center]] {{Clear}} It is also possible to check playback of the sounds inside '''Audio Editor''' - without switching to play mode - by selecting node and then hitting '''space''' button. Example of using sound debug can be found on [[Arma_Reforger:Weapon_Modding#Audio_Bank_Content_Change|Weapon Modding]] tutorial page.

== Applying sound to prefab ==

[[Image:armareforger-new-prop-sound-adding-component.png|left]]

In order to apply sounds to prefab, first step towards would be '''adding of SoundComponent''' to it. As described before, this can be achieved by using '''[[Arma_Reforger:Prefabs_Basics#Adding_new_components_to_entity_instance|+ Add Component]]''' button and selecting '''SoundComponent''' from list.

Once that component is present and selected, it is possible to add new element to '''Filenames''' array. Since in this tutorial only single '''.acp''' file was created, one element in this array should be enough.

After new element in array is present, it is possible to fill that property either by drag and dropping '''audio project file''' on that resource field or by clicking on button with two dots and the selecting '''Rugged Desk .acp file.''' {{Clear}}

== Playing sound in script ==

First step towards triggering a sound from the script will be fetching of '''SoundComponent''' in '''SCR_DrawerUserAction script'''. Similar to '''SignalManagerComponent''', this can done by using [enfusion://ScriptEditor/scripts/Core/generated/Entities/IEntity.c;536 '''FindComponent'''] method. <enforce> class SCR_DrawerUserAction : ScriptedUserAction { [...] //! Sound component private SoundComponent m_SoundComponent;

//------------------------------------------------------------------------------------------------ override void Init(IEntity pOwnerEntity, GenericComponent pManagerComponent) { [...] // get Sound component m_SoundComponent = SoundComponent.Cast(pOwnerEntity.FindComponent(SoundComponent)); } } </enforce> Next, at the bottom of '''PerformAction''' method, code for triggering sounds can be added. This is done by calling '''SoundEvent''' method and passing name of the '''Sound''' node, which was previously defined in '''audio project''', as a parameter. <enforce> class SCR_DrawerUserAction : ScriptedUserAction { //--------------------------------------------------------- override void PerformAction(IEntity pOwnerEntity, IEntity pUserEntity) { [...] // Check if sound component exist if (m_SoundComponent) { // If target value is above 0, then trigger SOUND_DRAWER_OPEN event, which will play sound of drawer opening // Otherwise drawer closing sound will be played via SOUND_DRAWER_CLOSE sound event if(targetValue > 0) { m_SoundComponent.SoundEvent("SOUND_DRAWER_OPEN"); } else { m_SoundComponent.SoundEvent("SOUND_DRAWER_CLOSE"); } } } } </enforce> Once those changes are saved and compiled, this desk should be already in state where closing and opening of drawers plays some sounds! Below you can find full code in case you had some troubles with implementing those extra bits of code

Full code <spoiler> <enforce> class SCR_DrawerUserAction : ScriptedUserAction { [Attribute( defvalue: "Drawer 1", uiwidget: UIWidgets.EditBox, desc: "Signal index of drawer" )] private string m_sSignalName; // for pairing with the user action

private int m_iSignalIndex; const float MAX_SIGNAL_VALUE = 0.25;

//! Signal manager to pass signals into procedural animation private SignalsManagerComponent m_SignalsManager; //! Sound component private SoundComponent m_SoundComponent;

//------------------------------------------------------------------------------------------------ override bool CanBeShownScript(IEntity user) { return CanBePerformedScript(user); }

//------------------------------------------------------------------------------------------------ override bool CanBePerformedScript(IEntity user) { if(!m_SignalsManager) // Do nothing if there is no signal manager return false;

if (m_iSignalIndex < 0) // Check if signal index is valid { m_iSignalIndex = m_SignalsManager.FindSignal(m_sSignalName); return false; }

return true; }

//--------------------------------------------------------- override void PerformAction(IEntity pOwnerEntity, IEntity pUserEntity) { float targetValue = Math.AbsFloat((m_SignalsManager.GetSignalValue(m_iSignalIndex)) - MAX_SIGNAL_VALUE);

m_SignalsManager.SetSignalValue(m_iSignalIndex, targetValue);

// Check if sound component exist if (m_SoundComponent) { // If target value is above 0, then trigger SOUND_DRAWER_OPEN event, which will play sound of drawer opening // Otherwise drawer closing sound will be played via SOUND_DRAWER_CLOSE sound event if(targetValue > 0) { m_SoundComponent.SoundEvent("SOUND_DRAWER_OPEN"); } else { m_SoundComponent.SoundEvent("SOUND_DRAWER_CLOSE"); } } }

//------------------------------------------------------------------------------------------------ override bool GetActionNameScript(out string outName) { if((m_SignalsManager.GetSignalValue(m_iSignalIndex)) == 0) { outName = "Open"; } else { outName = "Close"; } return true; }

//------------------------------------------------------------------------------------------------ override void Init(IEntity pOwnerEntity, GenericComponent pManagerComponent) { m_SignalsManager = SignalsManagerComponent.Cast(pOwnerEntity.FindComponent(SignalsManagerComponent)); m_SoundComponent = SoundComponent.Cast(pOwnerEntity.FindComponent(SoundComponent)); } } </enforce></spoiler>

= Editor integration =

{{Messagebox|'''Overview''' Following topics will be covered in this paragraph

* Creating placeable entities for in-game editor * Configuring placeable entities appearance in entity browser|💬|#CDF}}

{{Feature|informative|Recommended pages to familirize with: [[Arma_Reforger:Game_Master:_Editable_Entities_Configuration]], [[Arma_Reforger:Game_Master:_Image_Generation_Tutorial]], [[Arma_Reforger:Mod_Localisation]], [[Arma_Reforger:Asset_Browser_Mod_Integration]] }}

== Generating placeable entity ==

Once the configuration of the prefab is done, it is possible to use one of the editor plugins to prepare '''Editable Entities'''. This can be done by using '''Create/Update Selected Editable Prefabs''' plugin, which will create '''new, editable prefabs''' for assets which usually are not replicated (''like props)'' and don't have one of the ''Editable Components'' attached to it.

Usage of that plugin is quite well explained on [[Arma_Reforger:Game_Master:_Editable_Entities_Configuration#Existing_Prefab|Game Master Existing Prefab Configuration]] page and therefore some of the details are skipped here. In case of that set of rugged desk props following steps were performed:

* In '''Resource Browser''' (''main one, it doesn't work with Resource Browser 2!'') attached to '''Resource Manager''', all prefabs in '''PrefabsEditable → Military → Camps ''' folder were selected. Assets with '''_base,_Base,_dst,_Dst or_DST suffix are automatically omitted''' by the plugin so they can be also selected without any issues - this behavior can be tweaked in [enfusion://ResourceManager/~ArmaReforger:Configs/Workbench/EditablePrefabs/EditablePrefabsConfig.conf '''EditablePrefabsConfig.conf''']. * From '''Plugins→ Editor''' menu '''Create/Update Selected Editable Prefabs''' plugin was selected. Alternatively '''{{Controls|Ctrl|Shift|U}}''' shortcut can be used

After that, new prefabs should be automatically generated. Those new '''editable prefabs''' created by the plugin are stored in '''Auto''' folder of filesystem ''(aka addon/mod)'' they belong to. Over there, new inherited prefabs with '''E_''' prefix are present, which are '''inheriting from original, non editable prefabs''' and they are '''mimicking file structure of the original prefab'''. In this case, it means that all editable prefabs should be located in '''PrefabsEditable → Auto → Military → Camps''' folder.

Additionally, plugin also prepares '''placeholder preview images''' for all assets - without it, it is impossible to go through next step which is generation of proper preview images.

[[Image:armareforger-new-prop-editor-placeable-entities.gif]]

== Generating preview images ==

New, proper preview images can be created using special world located within Arma Reforger data ({{Link|enfusion://WorldEditor/worlds/Editor/Slots/AssetImages/Eden_AssetImages.ent;6454.71,171.752,6435.05;-27.5997,25.4986,0|link}}) . Instructions about usage of that special world can be found on [[Arma Reforger:Game Master: Image Generation Tutorial|Game Master: Image Generation Tutorial]] and here you can find a short instruction on how it was done for '''Sample New Prop''' addon:

* Load {{Link|enfusion://WorldEditor/worlds/Editor/Slots/AssetImages/Eden_AssetImages.ent;6454.71,171.752,6435.05;-27.5997,25.4986,0|Eden_AssetImages.ent}} * Select '''SCR_EditorImageGeneratorEntity''' from Hierarchy window * Adjust viewport to 400x300 * In diagnostic menu, set ''Game > Compressed format in WB'' to ''true'' * Select prefabs in '''Resource Browser''' attached to '''World Editor''' which should be '''subject of preview image generation'''. In this case all '''prefabs in PrefabsEditable → Auto → Military → Camps folder were selected''' * Switch to '''Play''' mode

If editable prefabs were correctly generated in previous step, then new pictures should be ready to use. If not, check '''Console Log''' for hints about what went wrong.

== Changing display name ==

[[Image:armareforger-new-prop-editor-display-name.png|left]] Display name of the prefab can be changed in prefabs located in '''PrefabsEditable''' folder inside '''Auto''' subfolder which was described in paragraph about generating placeable entities.

Once those editable prefabs are located and present in World Editor (either by placing them or using Edit prefab button), it is time to change their configuration. Bunch of editor related configuration is located in '''SCR_EditableEntityComponent''' and among parameters that you can change there you can find '''Name''' parameter in '''Visualization''' section of that component.

Over here, change '''Name''' parameter so it reflects desired display name of that asset in [[Arma_Reforger:Game_Master#Entity_Browser|'''Entity Browser''']] - in this case ''Sand Rugged Desk'' was picked, and it was made inline with [[Arma_Reforger:Editor_Entity_Naming_Conventions]]

{{Clear}} === Setting up localization table === {{Feature|warning|Currently, non localised entities cannot be searched in Entity Browser, therefore it is '''highly recommend to localize editable prefabs!'''}}

After changing the strings in the prefab, it is possible to use '''localization plugin''' to add string to localization table. It is also worth to note, that in some case it might be faster to first '''localize placeholder strings''' and then '''change those strings inside''' '''String Editor -''' in any case, both workflows have their advantages and its matter of preference which one to use.

In this example, first method was used - adjusting display names in prefab and then putting those strings to '''localization table (.st)''' via '''Localize Selected Assets''' plugin. Before that, it is necessary to create localization table and runtime variant of it and the register those elements in game project. Whole process is described in detail on [[Arma Reforger:Mod Localisation|Mod Localisation]] so here is short version of that procedure:

* Create "'''Language'''" folder in the root addon file system * Inside of that folder, following files have to be created: ** '''GUI string table''' - this is main file which is used by '''String Editor'''. It is important to assign to it unique name so it doesn't clash with other mods - in this case file was called ''samplenewprop_localization.st'' *** ''After samplenewprop_localization.st'' was created, click on it with {{Controls|RMB}} and select '''Open File in New Tab''' option from '''Context Menu''' and set parameters to '''following values'':''''' **** ''Target Prefix'': '''Target_''' **** ''Item Class Name'': '''CustomStringTableItem''' ** '''StringTableRuntime -''' version of localization table used by the game - it is stripped from all '''String Editor''' related content. Each language needs separate config file. In this tutorial, ''samplenewprop_localization.en_us.conf'' was created

[[Image:armareforger-new-prop-editor-creating-localization.gif]]

Once files are created, it is time to plug them into game project:

* Open '''Workbench options''' by clicking on '''Options''' from '''Workbench''' top menu. * Navigate to '''Widget Manager Settings → String Tables''' * Added new '''StringTableDefinition''' * Assign ''samplenewprop_localization.st'' to '''String Table Source''' property * Add new element to '''Languages''' array ** Change '''Code''' property to '''en_us''' ** Assign ''samplenewprop_localization.en_us.conf'' to '''String Table Runtime''' property * Save changes by clicking on '''OK''' button

[[Image:armareforger-new-prop-editor-configuring-localization.gif]]

=== Adding strings to localization table ===

With string table in place, it is possible to actually fill it with data. This can be done by following below steps (see [[Arma Reforger:Mod Localisation|Mod Localisation]] for more details):

* Select all prefabs inside '''PrefabsEditable → Auto → Military → Camps''' folder in '''Resource Browser''' (it can be either '''Resource Browser''' attached to '''Resource Manager''' or '''World Editor''') * Click on '''Localize Selected Assets''' in '''Plugins''' tab or use {{Controls|Ctrl|Shift|L}} shortcut * In window that appeard make following adjustment: ** Change '''Config Path''' config and use ** Assign ''samplenewprop_localization.st'' in '''String Table Override''' property ** Type '''SampleMod-''' in '''Prefix Override''' property ** Click on '''Localize''' button

Plugin now should open ''samplenewprop_localization.st '' in '''String Editor''' and fill all the detected strings. If file is empty, then make sure that '''String Table Override''' property is correctly assigned and check '''Console Log''' for errors or warnings.

[[Image:armareforger-new-prop-editor-localizing-assets.gif]]

== Adjusting labels ==

[[Image:armareforger-new-prop-editor-labels.png|left]] Entity labels are used by in-game Editor Entity Browser to [[Arma_Reforger:Game_Master#Filters|filter]] content. By default, some of those labels are automatically assigned by '''Create/Update Selected Editable Prefabs''' plugin base on their '''type ('''''is it GenericEntity or Vehicle class?),'' '''folder in which they are located''' (''Prefabs in Prefabs/Military folder will get Theme_Military'' ''label)'', '''parameters in their prefabs''' (''Mass in RigidBody, size of the group by counting elements in Unit Prefab Slots, etc),'' '''size of bounding box''' and so on. Most of those rules can be checked by opening [enfusion://ResourceManager/~ArmaReforger:Configs/Workbench/EditablePrefabs/EditablePrefabsConfig.conf '''EditablePrefabsConfig.conf''']. It is also possible to add some custom rules as it was for instance described in the [[Arma Reforger:Faction Creation#Adjusting generators configs|Faction creation guide]].

Beside that, it is also possible to manually add extra labels or even custom ones by changing content of '''Authored Labels''' array in '''SCR_EditableEntityComponent''' . In case of that prop, it is recommended to add '''CONTENT_MODDED''' label to '''Authored Labels''' array (''Auto Labels array shouldn't be touched by the user since content of that array might get overridden by editor plugin!)'' for each asset prefab in '''PrefabsEditable → Auto → Military → Camps''' folder. This can be done by clicking on '''button with plus sign''' on the right side of the '''Authored Labels''' property and then select from that new element in array '''CONTENT_MODDED''' label from drop down menu. {{Clear}}

== Registering asset ==

The final step in editor integration is adding editable props to register of placeable assets. Whole process is described in detail on [[Arma Reforger:Asset Browser Mod Integration|Asset Browser Mod Integration]] page so here is simplified list of steps that had to be done:

* Create new '''SCR_PlaceableEntitiesRegistry''' register in ''SampleMod_NewProp\Configs\Editor\PlaceableEntities'' called '''NewProp_Props.conf''' * Override in addon [enfusion://ResourceManager/~ArmaReforger:Prefabs/Editor/Modes/EditorModeEdit.et '''EditorModeEdit.et'''] * Open [enfusion://ResourceManager/~ArmaReforger:Prefabs/Editor/Modes/EditorModeEdit.et '''EditorModeEdit.et'''] and in '''SCR_PlacingEditorComponent, add new entry to Registries''' array by i.e. drag and dropping '''NewProp_Props.conf''' * Save changes in [enfusion://ResourceManager/~ArmaReforger:Prefabs/Editor/Modes/EditorModeEdit.et '''EditorModeEdit.et'''] * Open'''NewProp_Props.conf''', select all prefabs in '''PrefabsEditable → Auto → Military → Camps ''' inside '''Resource Browser''' attached to '''Resource Manager''' and then drop that selection onto '''Prefabs''' array inside of that config ** Furthermore, you can also change '''Addon''' & '''Source Directory''' property so plugin can in future '''semi-automatically fill or update''' that '''Prefabs''' array

[[Image:armareforger-new-prop-editor-register.png]]

{{Feature|informative|Please note that GUID of any new file is '''generated from filesystem path + file name'''. In order to avoid conflicts with other mods, it is recommended to use '''unique name for registers by i.e. adding tag as prefix'''.}}

After all those steps, assets should be available in in-game [[Arma_Reforger:Game_Master#Entity_Browser|'''Entity Browser!''']]

= Testing result = {{Messagebox|'''Overview''' In this paragraph you can read about:

* Testing your creation in Game Master * Testing your creation in new world|💬|#CDF}}

In '''Workbench''', new prop can be tested either by '''launching [[Arma_Reforger:Game_Master|Game Master scenario]]''' and then placing new assets through '''Asset Browser''' or by '''simply creating a new sub-world in World Editor''' and then placing asset in game

== Testing in Game Master ==

To test new prop in '''Game Master''', load [enfusion://WorldEditor/worlds/GameMaster/GM_Eden.ent;4657.23,50.7969,10727.1;-33.3344,23.4751,0;1385091 '''GM_Eden.ent '''] world in [[Arma_Reforger:World_Editor|'''World Editor''']] and once it's ready, switch to [[Arma_Reforger:World_Editor#Play_Game|'''Play mode''']] by either pressing on green arrow or via '''F5 shortcut''' (''furthermore, that option is also available in '''Game''' tab''). This should initiate loading of scenario and once it's completed, regular Game Master interface should be present.

[[Image:armareforger-new-prop-testing-playmode.png]]

Now, by bringing up [[Arma_Reforger:Game_Master#Entity_Browser|'''Entity Browser''']] either by pressing '''Tab''' or by clicking on '''Place entities''' button in bottom right section of the interface

[[Image:armareforger-new-prop-testing-gamemaster.png]]

== Testing in new world ==

Simplest & fastest way to do it might be loading [enfusion://WorldEditor/worlds/MP/MpTest.ent;110.145,5.1562,100.424;-35.2569,46.3466,0 '''MpTest'''] world and then creating a new subworld of it. To do so, follow this instruction:

[[Image:armareforger-new-prop-testing-subworld.png]]

* Click on '''File → New World''' ('''''{{Controls|Ctrl|N}} shortcut''''') or on '''New World''' icon in the toolbar * Select '''Sub-scene (of current world)''' option and confirm it with '''OK''' button * Save current world by selecting '''File → Save World''' option ('''{{Controls|Ctrl|S}} shortcut''') and save it somewhere inside your addon

[[Image:armareforger-new-prop-testing-subworld-creation.gif]]

After that, you can place prop prefab - i.e. ''PortableDesk_01_Sand.et'' - into the world and switch to '''Play mode'''. Once in play mode, you should be able to interact with the prop!

[[Image:armareforger-new-prop-testing-subworld-result.png]]

{{GameCategory|armaR|Modding|Assets|Tutorials}}
7u7a2hiwx9sadnv96c5chwqf7awt3hi

# Arma Reforger:Character Gear Creation/Vest

5050
37898
371011
364665
2025-02-26T12:32:07Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
371011
wikitext
text/x-wiki
{{TOC|side}} == Tutorial Goal == {{Messagebox|In this tutorial you will learn about:

* Importing vest FBX file * Adding sockets & skeleton * How to configure new vest|💬|#CDF}}{{Feature|informative|If you '''don't have any experience with Workbench''' yet, it is recommended to '''go through [[Arma_Reforger:Weapon_Creation|weapon creation tutorial]]''' to familiarise with some of the concepts present in the '''Workbench'''.}} {{Messagebox|Sources files for this tutorial can be found at '''{{Link|https://github.com/BohemiaInteractive/Arma-Reforger-Samples/tree/main/SampleMod_NewCharacter|Arma Reforger Samples Github repository}}'''.|📥|orange}}

== Add New Vest == {{Feature|informative|Preparation phase consist of things like:

* '''Preparing basic structure''' }} == Structure Preparation ==

While sticking to official structure is not mandatory and there are no engine restrictions asset wise about it, it is recommended to follow guidelines listed here - [[Arma_Reforger:Directory_Structure|Data (file) structure]] - to ensure that all automation plugins are parsing your assets correctly and make it later easy to navigate.

Therefore, your first task will be preparing following file structure

[[File:armareforger-new-vest-file-structure.png]] == Creation Steps ==

#{{Link|Arma_Reforger:Character_Gear_Creation/Vest/Asset Preparation}} #{{Link|Arma_Reforger:Character_Gear_Creation/Vest/Prefab Configuration}} {{GameCategory|armaR|Modding|Assets|Tutorials}}
hyb0fdxreef7mtvr6x8dbrxbknoyr4f

# Arma Reforger:Weapon Animation

5050
34380
373623
370990
2025-05-27T13:19:10Z
Reyhard
10671
Added links to some video related to subject + updated LTS version
373623
wikitext
text/x-wiki
This tutorial assumes that the weapon has some basic skinning and configuration. Instructions for those can be found on the [[Arma_Reforger:Weapon Creation|Weapon Creation]] page.

Beside that, it is also expected that at least '''Blender 3.6 LTS''' is installed together with the latest version of the [[Arma Reforger:Enfusion Blender Tools#Export TXA Enfusion Blender Tools plugin|Enfusion Blender Tools]].

The Weapon animation tutorial is divided into 3 parts:

* {{Link|Arma Reforger:Weapon Animation/Setup|Setup}} - in this part you will get familiar with the [[Arma Reforger:Animation Editor|Animation Editor]], preparing new animation workspace for weapon by duplicating some existing files and linking this new workspace to the weapon prefab * {{Link|Arma Reforger:Weapon Animation/Basic Tutorial|Basic Tutorial}} - this page covers actual creation of animations in '''Blender''' and their export to Workbench, preparation of weapon IK pose and some basic weapon animation * {{Link|Arma Reforger:Weapon Animation/Advanced Tutorial|Advanced Tutorial}} - this part describes process of creating more complex animations - additive motion, creation of prone variants of weapon animations, retargeting animations using Reforger source data and more

== Supplementary video materials{{GameCategory|armaR|Modding|Assets|Tutorials}} ==

=== Official videos === [https://www.youtube.com/watch?v=ko0CZacVUZg Modding Bootcamp #8 - Animation Workshop 1]

[https://www.youtube.com/watch?v=_8n6G3HXEJk Modding Bootcamp #9 - Animation Workshop 2]

[https://www.youtube.com/watch?v=8Vvd0o5oQFU Modding Bootcamp #10 - Animation Workshop 3]

=== Community videos === [https://youtu.be/rmbZS-hOhWI Arma Reforger NLA Editor]
nsu2bcjyqmu5r1t337k2tehg4phqkbq

# Arma Reforger:Weapon Collimator Creation

5050
35129
370991
370371
2025-02-26T12:32:03Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370991
wikitext
text/x-wiki
{{TOC|side}}

== Tutorial Goal ==

{{Messagebox | In this tutorial you will learn about: * Adjusting collimator mesh & UVs * Proper placement of sockets for collimator related functionality * Collimator material configuration * Collimator prefab configuration |💬 |#CDF }}

{{Feature|informative|If you do not have any experience with Workbench yet, it is recommended to go through [[Arma Reforger:Weapon Modding|modded weapon tutorial]] to familiarise with some of the Workbench concepts.}} {{Messagebox | Sources files for this tutorial can be found at {{Link|https://github.com/BohemiaInteractive/Arma-Reforger-Samples/tree/main/SampleMod_NewWeapon|Arma Reforger Samples Github repository}}. |📥 | orange }}

== Structure Preparation ==

While sticking to official structure is not mandatory and there are no engine restrictions asset wise about it, it is recommended to follow guidelines listed here - [[Arma Reforger:Directory Structure|Data (file) structure]] - to ensure that all automation plugins are parsing your assets correctly and make it later easy to navigate.

Therefore, your first task will be preparing following file structure

[[File:armareforger-new-weapon-collimator-structure.png]]

== Model Preparation ==

The model must be prepared in Blender accordingly. Besides the normal setup of colliders, optics memory points and weapon snap point there are two additional considerations

=== Plane UV ===

We need a grayscale reticle texture of square aspect ratio with the "aimpoint" in the center. The geometry of the projection plane needs to extend all the way to the edge of the texture (for now). See the image below for an idea on how this should look

Note that if the model's geometry allows it, you can use a simple rectangular projection plane instead, but it cannot "stick out" of the casing. Some optics like the Russian OKP-7 which have a completely open projection plane must be shaped accordingly.<gallery mode="nolines" widths="400" heights="400"> File:armareforger-new-weapon-collimator-uv-1.png File:armareforger-new-weapon-collimator-uv-2.png File:armareforger-new-weapon-collimator-uv-3.png </gallery>

=== Geometry Definition ===

In the prefab for the collimator, you will need to define the upper and lower edge of the projection plane. While this can be done without any memory points, using two empties is the easiest and most precise way.

In examples below, '''collimator_BR''' (''for bottom right'') and '''collimator_TL''' (''for top left'') is used: <gallery mode="nolines" widths="450" heights="400"> File:armareforger-new-weapon-collimator-sockets-1.png File:armareforger-new-weapon-collimator-sockets-2.png File:armareforger-new-weapon-collimator-sockets-3.png </gallery>{{Feature|1=informative|2=Don't forget to import sockets by checking [[Arma_Reforger:Weapon_Optic_Creation#Model_Import_.26_Registration|'''Export Scene Hierarchy''']] option in '''Import Settings''' of the model - without that, your sockets won't be imported.}}Since collimator plane need to use separate material, don't forget to assign different material to this selection.

[[File:armareforger-new-weapon-collimator-material-slot.png]]

The rest of the model is the same as usual - you can find more info about mesh configuration (including RIS setup) and import procedure in [[Arma Reforger:Weapon Optic Creation#Mesh preparation|'''Weapon Optic Creation''' tutorial]].

== Reticle Material ==

[[File:armareforger-new-weapon-collimator-material-settings2.png|thumb|629x629px|Basic material settings]] Once model is imported and material is created, it is time to start work on material. If you named your material in model "''collimator''" then by default, a new Enfusion material called .emat will be created in '''Data''' folder next to the FBX file. This new material is also using PBRBasic class which is more than sufficient for collimator reticle.

[[File:armareforger-new-weapon-collimator-material-settings1.png]]

Open collimator material and then in '''Basic material maps and its modifiers''' section assign '''black and white texture''' (''where black represents transparent pixels'') to '''Opacity Map''' field. It is possible to assign multiple textures - this can be done by expanding '''textures''' parameter and then adding new entries in the array via plus button.

In theory, for an addon you can have one "master collimator" material that contains all possible reticles, since we will be able to "filter" them later in the prefab config. It is also possible to '''switch between reticles''' via the {{Link|enfusion://ScriptEditor/Scripts/Game/Weapon/Sights/SCR_CollimatorSightsComponent.c;102|API which is provided by SCR_CollimatorSightsComponent}} although keep in mind, that such feature is not implemented in vanilla game.

After setting reticle (or multiple reticles), make sure to set '''ClampU''' and '''ClampV''' so that the texture does not wrap.

Next, in '''General''' section of the material settings, modify following properties

* Change '''Sort''' to '''Translucent''' * Disable '''Cast Shadow & Receive Shadow''' properties * Add '''TCModFunc''' array in the general section, click the "+" sign and add a '''TCModShift''' & '''TCModScale''' to it. * Change '''Blend Mode''' to '''AlphaBlend''' * Adjust '''Alpha Test & Alpha Mul''' to achieve desired reticle transparency

{{Messagebox|'''Optional''': You can set Color, Emissive color and EmissiveLV. The emissive color should match the one set in the color settings, and EmissiveLV should be around 9, depending on the reticle. Go by taste. Keep in mind that those settings are '''overwritten by the prefab''' settings and they only serve as some quick '''preview of the settings'''. Restart of the Workbench is required after fiddling with those boxes - see warning infobox in Manual Material Corrections paragraph.|✩|#88cc88}}

{{Clear}} === Manual Material Corrections ===

Unfortunately, at the time of writing, there is no way to set script bindings within the workbench, everything needs to be done in a text editor. You need to load the emat file into a text editor and manually add the following segments{{Feature|1=important|2=This manual tweak is also necessary when inheriting from material with such tweaks. In most cases though, it is enough to copy paste '''Refs''' section}}

After opening .emat file in text editor, located TCModFuncs segment and Refs segments to both '''TCModShift & TCModScale''' classes (''you can also paste & replace whole TCModFunc segment'')<syntaxhighlight lang="c#"> TCModFuncs { TCModShift "{5CDCD917EA1E1A1B}" { ShiftU 0 ShiftV 0 Refs { "ShiftU" "SCR_CollimatorControllerComponent.m_fUCoord" "ShiftV" "SCR_CollimatorControllerComponent.m_fVCoord" } } TCModScale "{5D60B8B11F689A05}" { ScaleU 1 ScaleV 1 CenterU 0.5 CenterV 0.5 Refs { "ScaleU" "SCR_CollimatorControllerComponent.m_fUScale" "ScaleV" "SCR_CollimatorControllerComponent.m_fVScale" } } } </syntaxhighlight>

Next ,copy paste those refs at the bottom of the material: <syntaxhighlight lang="c#"> Refs { "Color" "SCR_CollimatorControllerComponent.m_vColor" "Emissive" "SCR_CollimatorControllerComponent.m_vEmissive" "EmissiveLV" "SCR_CollimatorControllerComponent.m_fEmissiveLV" "OpacityMap" "SCR_CollimatorControllerComponent.m_ReticleMap" } </syntaxhighlight>

{{Feature|warning| Also note that while the Refs at the bottom gets saved when you save the emat in Workbench, '''the one at the top (inside the TCModShift) will not''', so you will have to add them again if you make changes. }}

Full material example: <spoiler><syntaxhighlight lang="c#"> MatPBRBasic { Color 1 0 0 1 Emissive 1 0 0 0 EmissiveLV 9.538 ApplyAlbedoToEmissive 0 Sort translucent CastShadow 0 ReceiveShadow 0 TCModFuncs { TCModShift "{5CDCD917EA1E1A1B}" { ShiftU 0 ShiftV 0 Refs { "ShiftU" "SCR_CollimatorControllerComponent.m_fUCoord" "ShiftV" "SCR_CollimatorControllerComponent.m_fVCoord" } } TCModScale "{5D60B8B11F689A05}" { ScaleU 1 ScaleV 1 CenterU 0.5 CenterV 0.5 Refs { "ScaleU" "SCR_CollimatorControllerComponent.m_fUScale" "ScaleV" "SCR_CollimatorControllerComponent.m_fVScale" } } } AlphaTest 0.088 AlphaMul 0.707 BlendMode AlphaBlend OpacityMap "{C9DCB787E3AA1C41}Assets/Weapons/Attachments/Optics/SampleCollimator_01/Data/collimator_dot_A.edds" "{2BBE7CC9FAEEC02B}Assets/Weapons/Attachments/Optics/SampleCollimator_01/Data/collimator_chevron_A.edds" clampu clampv anim( 0 ) Refs { "Color" "SCR_CollimatorControllerComponent.m_vColor" "Emissive" "SCR_CollimatorControllerComponent.m_vEmissive" "EmissiveLV" "SCR_CollimatorControllerComponent.m_fEmissiveLV" "OpacityMap" "SCR_CollimatorControllerComponent.m_ReticleMap" } } </syntaxhighlight> </spoiler>

When you are done with those modifications, '''save your changes''' in text editor and '''restart the Workbench'''. {{Feature|warning| Refs will stop working every time you do some changes in the material like modification of color or emissive value.<br>A full Workbench restart is required to fix this issue. }}

== Prefab ==

=== Creation ===

Collimator prefab setup is quite similar to regular optic as described in [[Arma Reforger:Weapon Optic Creation#Creation|'''Weapon Optic Creation''' tutorial]] but there are some differences. Main difference is fact that {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Attachments/Optics/WeaponOptic_Base.et|WeaponOptic_Base.et}} contains '''SCR_2DPIPSightsComponent''' which is not desired in this case. Since you cannot delete inherited components and disabled prefabs still have some memory footprint, it is recommended to either:

* Create new prefab [[Arma Reforger:Data Modding Basics#Using .22Inherit in....22 function|inheriting]] from {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Core/Attachment_Base.et|Attachment_Base.et}} and manually add components which are present in {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Attachments/Optics/WeaponOptic_Base.et|WeaponOptic_Base.et}} except '''SCR_2DPIPSightsComponent''' * [[Arma Reforger:Data Modding Basics#Using .22Duplicate to....22 function|Duplicate in addon]] {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Attachments/Optics/WeaponOptic_Base.et|WeaponOptic_Base.et}} prefab and [[Arma Reforger:Prefabs Basics#Removing components|remove from it]] '''SCR_2DPIPSightsComponent''' component

In most cases, it will be '''easier to use 2nd method (duplication)''' for creation of the new prefab. Once new prefab is created and adjusted, don't forget to put it in some proper folder (check structure paragraph at the top of the page).{{Feature|1=informative|2=In future updates, base prefab for collimator sights might be added to the vanilla data.}}

=== Adding Components ===

Next, it will be necessary to add two, collimator specific, components to the prefab - '''SCR_CollimatorSightsComponent & SCR_CollimatorControllerComponent.'''

First, begin by [[Arma Reforger:Prefabs Basics#Add component button|adding '''SCR_CollimatorSightsComponent''' to collimator prefab]], which is quite standard procedure. After that, it will be necessary to add '''SCR_CollimatorControllerComponent''' as a child component of '''SCR_CollimatorSightsComponent''' via [[Arma Reforger:Prefabs Basics#Adding child component|Add child component action]]. If everything was done correctly, you should end up with something like this

[[File:armareforger-new-weapon-collimator-components.png]]

=== Configuration ===

'''SCR_CollimatorSightsComponent''' does not have any attributes that need to be taken care of, all set up is done in '''SCR_CollimatorSightsComponent'''.

Set up the sight points, eye point and all other parameters of the '''SCR_CollimatorSightsComponent''' normally - you can referer to [[Arma Reforger:Weapon Optic Creation#Setting base sight properties|Weapon Optic Tutorial]] for more info.

[[File:armareforger-new-weapon-collimator-basesights.png]] {{Feature|informative|'''The Front and Rear Sight Points are optional'''; if undefined the direction of the sight is calculated from the given Collimator projection plane (see below).}} [[File:armareforger-new-weapon-collimator-main-configuration.png|thumb|580x580px|Collimator section]] The "'''Collimator'''" category contains all the relevant settings and most of the work will be performed in this section: * '''Collimator Top Left''', '''Collimator Bottom Right''' and '''Collimator Center''': **These settings are used to define the projection plane of the collimator sight. The Top Left and Bottom right points are mandatory. The center point is optional, and it is highly recommended to leave it empty. You can specify bone names and offset or just a numerical offset in the PointInfo. * '''Collimator Aspect Ratio''' ** Set to true by default, it specifies that the collimator reticle textures have a 1:1 aspect ratio. There is usually no good reason to disable this

==== Reticle Setup ==== [[File:armareforger-new-weapon-collimator-reticle-size.png|thumb|412x412px|Example showing proportions of reticle width to whole texture|alt=|left]]'''Reticle Default Angular Size''' and '''Reticle Default Texture Portion''' * This defines the angular size of the reticle. A collimator reticle will always appear a certain size, regardless of how close the observer is to the projection plane. Angular size is specified in degrees. The default HWS Holo sight has a reticle angular size of 68 MOA (minutes of arc), which translates to about 1.13 degrees (60 MOA is one degree). This means that the reticle is approximately the size of a human at 100 meters distance. * '''Reticle Default Texture Portion''' describes how much of the given texture is actually covered by the reticle. Principle is same as described in [[Arma Reforger:Weapon Optic Creation#Reticle 2|Weapon Optic Tutorial]]. In the above case, the reticle is 9% of the entire texture (see image) *Note that both of these values can be overridden in the '''Reticle Infos''' array, see below. If any or both of these values are zero, then the reticle is taken "as-is" and no angular size adjustment is made at all.

{{Clear}} ==== Default Reticle Color and Reticle Colors array ==== [[File:armareforger-new-weapon-collimator-color-array.png|alt=|left|550x550px]]

The settings here are ignored if there are no reticle colors defined, and the settings of the emat are used. Otherwise the color in the emat is ignored and the default reticle color specifies the color used for the reticle. Each '''BaseCollimatorReticleColor''' entry has two color values, a reticle color and a glow color. The glow color is the emissive part of the material, while the reticle color is the base color used. They should normally be relatively close, but experimentation is possible.{{Clear}}

==== Default Reticle Index and Reticle Info array ==== [[File:armareforger-new-weapon-collimator-reticle-array.png|alt=|left|550x550px]]

If the reticle info array is empty, then the default reticle index specifies the texture index in the emat texture array of the collimator material. Otherwise, the '''Default Reticle Index''' specifies the index into the Reticle Info array. The '''Reticle Infos''' array consists of '''BaseCollimatorReticleInfo''' structures. The first field, Reticle Index, specifies the texture index from the emat. The second field is a checkbox which defaults to off. If disabled like this, the angular size and reticle portion are taken from the specified default values. If checked, two new fields will appear - an override for the '''Reticle Default Angular Size''' and one for the '''Reticle Default Texture Portion'''. Again, either one of these set to 0 will disabled reticle angular size ''FOR THIS RETICLE'' only. The example in the picture below specifies three different reticles: The first one is using the default values with the first reticle texture in the emat. The second one overrides the angular size to be twice as big. The third one uses a different texture but does not override any of the angular size/portion settings.{{Clear}}

==== Misc Parameters ==== * '''ADS Activation/Deactivation percentage''' ** The collimator sight is disabled when not aiming down sights to avoid unnecessary calculations. During the blend-in and blend-out of the Aim Down Sights, the sight is enabled. These two values give a percentage when the sights are enabled during the blend in. The default is 50% (0.5), which causes the reticle to "slide in" and "slide out" of view. If the sights are very open, a smaller value might be required for either. * '''Daylight/Night brightness''' ** These values specify the brightness of the glowy bits of the reticle during daytime or night time. The night time brightness is selected via the '''Reticle Illumination toggle''' feature also available on some scopes, only that this makes the reticle less bright, but the semantics are the same.

{{Clear}} == Testing == Once all those steps were completed, you should be to verify in game if collimator is working correctly. First thing to test might be parallax effect when freelook is turned - reticle should stay on target no matter at which angle you are looking at it. During movement, you should also observe natural sway of the reticle which is showing actual aiming point of the rifle.

[[File:armareforger-new-weapon-collimator-test1.gif]] [[File:armareforger-new-weapon-collimator-test2.gif]]

=== Potential Traps ===

There are a number of things you can check to see why the sights do not work as expected: * Check that the UV mapping of the collimator projection is correct. Since most reticles are at least symmetrical in one axis, a flipped UV map is hard to detect. If the movement looks highly exaggerated in one direction, or simply wrong, check the UV coordinates first. A collimator should look like there is a glowing reticle floating in mid-air, and head movement should move the sights itself but not the collimator. * The collimator functionality only works in game and does not work in World editor. Weapon sights only work when in ADS, while vehicle sights only work from a specific seat.

== Script API ==

{| class="wikitable" ! Method ! Description |- | <enforce>void SetReticleSize(float angularSize, float reticlePortion)</enforce> | Set the reticle size in degrees. <enforce inline>reticlePortion</enforce> determines the portion of the reticle that is covered by this (see above) |- | <enforce>float GetReticleAngularSize()</enforce> | Return the current angular size of the reticle |- | <enforce>float GetReticlePortion()</enforce> | Return the current reticle portion (see above) |- | <enforce>int GetNumReticles()</enforce> | Get the number of different reticles confiigured for this sight. Typically 1, but might have more that can be switched around |- | <enforce>bool IsReticleValid(int index)</enforce> | Check if the given reticle index is a valid reticle or not. Returns false if invalid |- | <enforce>BaseCollimatorReticleInfo GetReticleByIndex(int index)</enforce> | If valid, returns the reticle info for the given reticle index, which includes angular size, reticle portion, index and a boolean that indicates whether or not this reticle overrides the globally set reticle size and portion. |- | <enforce>int GetCurrentReticleShape()</enforce> | Returns the index of the currently active reticle. |- | <enforce>void ReticleNextShape()</enforce> <enforce>void ReticlePreviousShape()</enforce> | Cycles forward or backward through the array of reticles, wrapping at the ends. |- | <enforce>bool SetReticleShapeByIndex(int iIndex)</enforce> | Set the current reticle by specifiyng its index. Returns false if the index was invalid. |- | <enforce>int GetNumColors()</enforce> | Get the number of defined reticle colors. Typically 1, but a sight can define multiple colors for its reticles. |- | <enforce>int IsColorValid(int index)</enforce> | Returns true if the given index is a valid color. |- | <enforce>BaseCollimatorReticleColor GetColorByIndex(int index)</enforce> | Returns the indexed reticle color, or null if the color is invalid. Colors are defined by two fields, reticle and glow color, which can be gotten ''via'' <enforce inline>vector GetReticleColor()</enforce> and <enforce inline>vector GetGlowColor()</enforce> from the structure |- | <enforce>int GetCurrentColor()</enforce> | Get the currently active color index |- | <enforce>void ReticleNextColor()</enforce> <enforce>void ReticlePreviousColor()</enforce> |Cycle up or down the current reticle color, wrapping at the edge cases. If only one color is defined, this does nothing. |- | <enforce>bool SetReticleColorByIndex(int iIndex)</enforce> | Set the color by index. If index is invalid, the function returns false. |- | <enforce>float GetNormalizedLightIntensity()</enforce> | Returns a floating point value between 0 and 1 which represents the normalized light intensity currently "experienced" by the sights. Internally, this is used to calculate the dot brightness for auto brightness correction. The value is only valid if auto brightness is enabled. |- | <enforce>void SetVerticalAngularCorrection(float fAngle)</enforce> | Sets the vertical angular correction of the reticle, in mils. This value can be used for zeroing, for example in the XM60 helicopter sight |- | <enforce>float GetVerticalAngularCorrection()</enforce> | Returns the current angular correction of the reticle, in mils. |- | <enforce>void SetHorizontalAngularCorrection(float fAngle)</enforce> | Sets the horizontal angular correction of the reticle, in mils. This value can be used for windage adjustments |- | <enforce>float GetHorizontalAngularCorrection()</enforce> | Returns the current horizontal angular correction for the reticle, in mils. |- | <enforce>bool IsSightActive()</enforce> | Returns false if the sight is disabled by script. If the sight is NOT disabled by script, it will return true, but that doesn't necessarily mean that the sight is actually active, only that it isn't forced off. |- | <enforce>void SetSightForcedOff(bool forceOff)</enforce> | Force the sight off if <enforce inline>forceOff</enforce> is true. This will suppress any display of the reticle. Setting this to false might or might not make the reticle visible. This can only force the sight off, otherwise it behaves normally, as expected. |- | <enforce>void EnableManualBrightness(bool bEnable)</enforce> | Enables manual brightness control. If enabled, all other functionality for brightness control (automatic brightness, day/night toggle) is inhibited. |- | <enforce>bool IsManualBrightnessEnabled()</enforce> | Returns true if manual brightness control is active, false otherwise |- | <enforce>void SetManualBrightness(float fBrightness, bool bClamp)</enforce> | Set the manual brightness to the given floating point value. The <enforce inline>fBrightness</enforce> value MUST be greater or equal to zero, and SHOULD be between 0 and 1. Values higher than 1 are possible. Typically, if <enforce inline>bClamp</enforce> is true, the brightness value interpolates between daylight and night time invensity. If <enforce inline>bClamp</enforce> is false, then night time intensity is ignored, and the <enforce inline>fBrightness</enforce> factor interpolates between zero and daylight brightness. Values greater than 1 boost the brightness beyond daylight brightness. Internally, the value will be capped to the maximum brightness supported by Enfusion (which is 22). So if your daylight brightness is, say, 10, setting the fBrightness factor to 2 will make the reticle appear with a brightness of 20. |- | <enforce>float GetManualBrightness()</enforce> | Return the currently selected brightness factor. |- | <enforce>bool GetManualBrightnessClamp()</enforce> | Returns true if the manual brightness is currently clamped between day and night. |}

{{GameCategory|armaR|Modding|Assets|Tutorials}} {{GameCategory|armaR|Modding|Assets|Weapon Creation|Tutorials}}
hh0icsr958dc4j7w2m1h3wvzkmbtahz

# Arma Reforger:Weapon Creation

5050
32500
370975
370383
2025-02-26T12:32:00Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370975
wikitext
text/x-wiki
{{TOC|side}} == Tutorial Goal == {{Messagebox|'''Overview''' In this tutorial you will learn about:

* Importing your first FBX file * Adding sockets & skeleton * How to configure new weapon|💬|#CDF}}{{Feature|informative|If you '''don't have any experience with Workbench''' yet, it is recommended to '''go through [[Arma Reforger:Weapon Modding|modded weapon tutorial]]''' to familiarise with some of the concepts present in the '''Workbench'''.}} {{Messagebox|Sources files for this tutorial can be found at '''{{Link|https://github.com/BohemiaInteractive/Arma-Reforger-Samples/tree/main/SampleMod_NewWeapon|Arma Reforger Samples Github repository}}'''.|📥|orange}}

== Add New Weapon == {{Feature|informative|Preparation phase consist of things like:

* '''Preparing basic structure''' * '''Preparing mesh''' * '''Exporting mesh''' }}

== Structure Preparation ==

While sticking to official structure is not mandatory and there are no engine restrictions asset wise about it, it is recommended to follow guidelines listed here - [[Arma_Reforger:Directory_Structure|Data (file) structure]] - to ensure that all automation plugins are parsing your assets correctly and make it later easy to navigate.

Therefore, your first task will be preparing following file structure

[[Image:armareforger-new-weapon-file-structure.png|1200px]]

== Creation Steps ==

* {{Link|Arma Reforger:Weapon Creation/Asset Preparation}} * {{Link|Arma Reforger:Weapon Creation/Prefab Configuration}}

Then you may want to see: * {{Link|Arma Reforger:Weapon Animation}}

{{GameCategory|armaR|Modding|Assets|Tutorials}}
h70ah8ujz10leexa6oaz4j2vund4w0f

# Arma Reforger:Weapon Modding

5050
32496
373130
371009
2025-04-02T20:27:42Z
Lou Montana
10739
Fix
373130
wikitext
text/x-wiki
{{TOC|side}} == Goals ==

This tutorial will explain how to:

* Create inherited entity prefab instance * Differences between entity instance and prefab * How to change some basic firing characteristics of weapon * Adding new magazine type * How to change materials assigned to the weapon (retexture of the weapon) * How to change sounds of the weapon, including firing sound, reload & bullet impacts * How to change muzzle flash & bullet impact particle effects * Configuring animations {{Feature|informative| It is assumed that you already have some know how to [[Arma_Reforger:Mod_Project_Setup|'''create new project''']]. It is also recommended to make yourself familiar with '''{{GameCategory|armaR|Modding|Official Tools|text= Workbench editors}}''' and [[Arma_Reforger:Prefabs_Basics|'''prefabs basic operations''']]. }} {{Messagebox|Sources files for this tutorial can be found on [https://github.com/BohemiaInteractive/Arma-Reforger-Samples/tree/main/SampleMod_ModdedWeapon '''Arma Reforger Samples Github repository''']|📥|orange}}

== Modification ==

=== Structure Overview ===

It is recommended to follow the structure of '''Arma Reforger''', as listed in [[Arma Reforger:Directory Structure|Directory Structure]], to ensure that all automation plugins are parsing assets correctly and also to make it later easier to navigate.

Therefore, the first task is to prepare the following file structure:<br> [[File:armareforger-vehicle_modding_file_structure.png|900px]]

=== New Variant Creation ===

In this part of the tutorial the following topics will be covered:

* How to place entity prefabs into the world * Creation of new entity prefab which inherits from other, already existing prefab

{{Feature|informative|For more information about what a Prefab is, see the [[Arma_Reforger:Prefabs_Basics|Prefabs Basics]] page.}}

==== Method 1: Create Inherited Prefab ==== [[File:armareforger-vehicle_modding_inherited_prefab.png]]

The simplest method to create a Prefab inheriting from another one is using the "'''[[Arma Reforger:Data Modding Basics#Using .22Inherit in....22 function|Inherit in]]'''" action which is located in '''Resource Browser''' context menu. This method has similar amount of steps compared to the following (Method 2) one and it's matter of user choice on which one to use:

* Find [enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Rifles/AK74/Rifle_AK74.et '''Rifle_AK74.et'''] file in World Editor's '''Resource Browser''' window and use {{Controls|rmb}} on this prefab * In the context menu that appeared,select '''[[Arma Reforger:Data Modding Basics#Using .22Inherit in....22 function|Inherit in 'AddonName]]'''' * After typing name for that inherited prefab, a new prefab file will be created in '''SampleMod_ModdedWeapon''' addon.

{{Feature|informative|In this article, [[Arma_Reforger:Resource_Manager:_Options#Register_.22enfusion:.2F.2F.22_protocol|'''Enfusion links''']] are used. With those links it is possible to open specific resource just by simply clicking on that link. Enfusion links '''has to be manually activated in Workbench options''' (Workbench -> Options -> Workbench -> Register "enfusion://" protocol) before it can be used]}}

[[File:armareforger-vehicle_modding_create_prefab_1.gif]]

==== Method 2: Drag & Drop ==== [[File:armareforger-vehicle_modding_dragndrop_prefab.png]]

* Find [enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Rifles/AK74/Rifle_AK74.et '''Rifle_AK74.et'''] file in World Editor's '''Resource Browser''' window * Drag and drop this prefab into World Editor's viewport * An '''instance''' of '''Rifle_AK74 entity prefab''' is created in the world; it should be listed in the hierarchy window (by default on World Editor's left side)<!-- -->{{Feature|informative|Changing values on instance doesn't change them on parent prefabs unless "'''Apply to prefab'''" button is clicked - more explanations below.}} * Navigate to the ''SampleMod/Prefabs/Weapons/Rifles'' directory in the '''Resource Browser''' * Click on the '''entity instance''' in '''Hierarchy''' window and drag it back to Resource Browser, still in the World Editor window. '''A new window will pop up''' and ask to specify the name of the new entity prefab * Type in there "'''Rifle_AK74_Modded'''" and click the '''OK''' button - this action triggers the creation of a new '''Rifle_AK74_Modded.et''' file in the previously selected location * Delete the existing instance of AK74 in "Hierarchy" tab * Drag and drop the new '''Rifle_AK74_modded''' prefab from Resource Browser to the viewport to instanciate the new prefab

[[File:armareforger-vehicle_modding_create_prefab_2.gif]]

=== Configuration ===

In this part of the tutorial we will try to do following changes to our newly created variant of AK74:

* We will learn how prefab inheritance works * We will change '''rate of fire to 200 rounds per fire''' * We will add new '''2 rounds burst mode''' * And finally, we will add '''new magazine''' type for this weapon which will be using '''custom high explosive blob bullets'''!

==== Prefab Inheritance & Structure ==== As mentioned earlier, placing a Prefab into World Editor creates an instance (entity) of that Prefab. This means that any change done to the instance '''are only applied to that single entity'''.

If the changes should be applied to the Prefab itself, two methods are offered:

===== Method 1: Apply to Prefab ===== First one involves using "'''Apply to prefab'''" button which is available in "'''Object Properties'''" window's bottom-right corner. The button will be available only if there are any changes to merge '''and''' the instance is selected. Clicking on that button will open a new window listing the whole inheritance tree. Selecting "'''Rifle_AK74_Modded.et'''" would mean that all changes that have been made will be stored in that Prefab.

<div><ul> <li style="display: inline-block;vertical-align: top"> [[File:armareforger-weapon_modding_object_properties.png|thumb|none|400px|Object Properties window]]</li> <li style="display: inline-block;vertical-align: top"> [[File:armareforger-weapon_modding_prefab_selection.png|thumb|none|400px|Prefab selection window]] </li> </ul></div>

{{Clear}}

{{Feature|important|In order to save changes, the currently loaded world '''must''' be saved.}}

===== Method 2: Use Inheritance Tree =====

[[File:armareforger-vehicle_modding_inheritance_tree.gif|left]]

Clicking on "'''Entity instance'''" in Object Properties window will expand a list with current inheritance of our asset. Selecting i.e. "'''Rifle_AK74_Modded.et"''' will show the current configuration of that prefab (together with already inherited parameters). Any change made in this mode will be automatically propagated to all entities instance using "'''Rifle_AK74_Modded.et'''" prefab; this means that using "'''Apply to prefab'''" button is not necessary. However, the same rule applies as for "Apply to prefab" button - anything done to prefabs must be manually saved to them by '''saving the currently loaded world!'''

{{Clear}} ==== Components Parameters ====

[[File:armareforger-vehicle_modding_changing_parameters.gif|right]] Now knowing how to save changes, it is time to actually modify some parameters!

The goal at hand is to change weapon's '''name''', '''rate of fire''' and add a '''2 rounds burst mode''' to it. Taking a look at [[Arma Reforger:Weapon Components|Weapon Components]] list, the '''name''' is defined in '''SCR_WeaponAttachmentsStorageComponent''' whereas '''rate of fire''', along with '''burst behaviour''', is defined in the '''FireModes''' section of '''MuzzleComponent'''.

After selecting the '''Rifle_AK74_Modded''' instance in World Editor, let's navigate first to its '''SCR_WeaponAttachmentsStorageComponent''' in the '''Object Properties''' window. There should be "'''Name'''" property with string inherited from '''Rifle_AK74.et'''. Type in there the new weapon name; once done, navigate to '''MuzzleComponent'''.

Weapons' rate of fire is controlled by the '''"Rounds Per Minute"''' parameter which exists in all fire modes. The way fire modes are controlled should be quite familiar to anyone who did {{arma3}} modding - weapon can have multiple muzzles and each muzzle (which defines for instance muzzle-specific parameters like muzzle speed coefficients, available magazines, etc) can have fire modes with separate firing characteristics. The main difference with {{arma3}} is that all of it is handled in the Workbench itself.

To have values consistent, '''Rounds Per Minute''' should be changed in all fire modes. Adding new fire mode is as simple as pressing "+" sign next to "'''Fire Modes'''" parameter. A new '''BaseFireModeClass''' will be created at the bottom and there, the '''Max Burst''' parameter can be set to '''2''' and '''UI Name''' to "''Burst''".

{{Feature|informative|It may be noted that default '''Name''' & '''Description''' fields began with a hash key; this means these text entries are '''localised''' (using '''String Editor''').}}

"'''Filter components'''" can be used to filter specific components and "'''Search'''" to look for desired parameter.

[[File:armareforger-vehicle_modding_filter_components.png]]

{{Clear}}

=== New Ammo Type === The goal is going to create new ammo variant with the following attributes:

* High explosive rounds * Slow flying visible orb like bullet

In order to create a new variant of ammo, a new Prefab must be created, inheriting from [enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Ammo/Ammo_545x39_Ball_7N6.et '''Ammo_545x39_ball_7N6.et''']. Use one of the aforementioned methods to create a new Prefab called "'''Ammo_545x39_ball_modded.et'''". Once the new Prefab is placed in '''World Editor''', its modification can happen.

Projectile type Prefabs have 4 parameters: [[File:armareforger-modded-weapon-projectile-overview.png|frame|left|400px|Overview]] * '''Spawn As Cartridge''' - When the projectile is created, it will use cartridge model * '''Projectile Visible Time Scale''' - Below this value shell will start being visible. For always visible use 2, for never 0 * '''Projectile Model''' - Model of the flying projectile * '''Cartridge Model''' - Model of the whole cartridge

{{Clear}}

The '''Projectile Model''' property has to change in order to see the wanted flying orb. To do so, click on it and use the already existing '''Orb.XOB''' model in '''''SampleMod'''''.

==== Add Explosive Effects ==== Next, ballistic characteristics of our new ammo. For bullets, '''ShellMoveComponent''' is responsible for kinetic ammo simulation, while '''CollisionTriggerComponent''' is being triggered upon impact with obstacle.

==== Add New Components ====

[[File:armareforger-modded-weapon-adding-new-component.gif|right]] Before going any further, it is necessary to add two missing components: '''CollisionTriggerComponent''' and '''BaseProjectileComponent.'''

New components can be added to entity via "'''+ Add Component'''" button in the bottom section of '''Object Properties''' window. Once that is pressed, it possible to select desired component from the pop up list. To speed up things, it is recommended to use search function in that components list and start typing names of wanted components.

If those components were added to entity and not via hierarchy tree, then it might be necessary to use '''Apply to prefab''' button afterwards.

{{Clear}}

===== Components Configuration ===== In '''CollisionTriggerComponent''', a new element has to be added to '''Projectile Effects''' array: '''ExplosionEffect'''. This element is merely a link to the prefab which controls the explosion effects itself; this means a new '''warhead''' type prefab has to be created first.

[[File:armareforger-modded-weapon-base-trigger.png|left|600px]] A new warhead can be prepared by inheriting from [enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Warheads/Warhead_Grenade_HE.et {{hl|Warhead_Grenade_HE.et}}] prefab, located in ''Prefabs/Weapons/Warheads.'' This new prefab can be called '''Warhead_Grenade_HE_545x39_Modded'''. Once it is ready, parameters inside of that prefab can be adjusted.

If inheritance was done properly, the newly created '''Warhead_Grenade_HE_545x39_Modded''' should already contain '''BaseTriggerComponent''' with some default explosive parameters in '''ExplosionImpulseEffect''' & '''ExplosionFragmentationEffect''' classes.

{{Clear}}

'''ExplosionImpulseEffect''' is responsible for simulating the blast wave. Changing '''Damage Value''' to '''25''' & '''Damage Distance''' to '''5''' (meters) will translate to '''25 damage point''' being dealt at point blank'''.''' This value will drop in non-linear way according to '''Damage Falloff Curve''' parameter, scaled with '''Damage Distance''' on a 0..1 range.

As its name suggests, '''ExplosionFragmentationEffect''' is responsible for simulating of deadly shrapnel, which usually have few times higher deadly range compared to the blast wave. In this class, '''Damage Fragment Count''' is an interesting parameter since it controls how many small fragments are being simulated. Since '''Ammo_545x39_ball_Modded.et''' is a rather small projectile, '''Damage Distance''' can be reduced to '''40''' and '''Damage Fragment Count''' can be set to '''200'''.

[[File:armareforger-modded-weapon-damage-fall.png|thumb|800px|center|''Damage Fallof Curve example'']]

{{Clear}} '''HitEffectComponent''' controls which particle effects are being played upon projectile impact. Those effects are linked ''via'' '''Particle Effect''' property and in this case, they are referencing to [enfusion://ResourceManager/~ArmaReforger:Particles/Weapon/Explosion_VOG25.ptc '''Explosion_VOG25.ptc''']. Changing this parameter should conclude work on '''Warhead_Shell_HE_545x39_Modded''' prefab and it should be now possible to get back to '''Ammo_545x39_ball_Modded.et'''.

Back in '''Ammo_545x39_ball_Modded''' prefab, the new warhead can be finally linked in '''CollisionTriggerComponent'''. To do so, '''ExplosionEffect''' class has to be added to the '''Projectile Effects''' array and it then should be possible to change '''Effect Prefab''' parameter so it is linking to '''Warhead_Shell_HE_545x39_Modded'''. After that step is completed, '''Ammo_545x39_ball_Modded''' is ready to produce some nice explosive effects.

[[File:armareforger-modded-weapon-warhead.gif]]

{{Clear}}

==== New Ammo AI Config ==== [[File:armareforger-modded-weapon-new-bt-ai.png|thumb|New ballistic table creation]]Once ballistic properties of the ammo are set, it is possible to configure data necessary for AI. Without it, AI won't be able to accurately engage enemies.

First step towards creation of new '''AI Ballistic Table''' will be creation of new config in ''Configs->Weapons->AIBallisticTables'' folder. To do so, use either '''Create''' (1) button in '''Resource Browser''' window or click with RMB somewhere inside the folder (2). Then select from '''Config''' (3) the context menu, type name of the new config (''in this case it is AIBT_545x39_Ball_Modded)'' , confirm it and once prompted to select type of config, pick '''BallisticTableArray''' type from the menu.

[[File:armareforger-modded-weapon-new-bt-ai-generation.png|left|thumb|Generating ballistic tables|503x503px]]

After new config is created, it is time to go back to the '''Ammo_545x39_ball_Modded.et''' prefab. Over there, in '''Ballistic Tables''' tab section of '''ShellMoveComponent''', a '''Ballistic Table Config''' (1) property can be found. Once this property is located, assign previously created ''AIBT_545x39_Ball_Modded.conf'' to it by either by drag and dropping it or by clicking on button with two dots and the selecting this config from the resource selection window.

If that step was done properly, it is now possible to generate data for '''Ballistic Tables''' by clicking with RMB on '''ShellMoveComponent''' (2) and selecting '''Generate ballistic tables''' (3) option from the context menu. Processing of the data should be fairly quickly and once it is complete, it will be necessary to save current world (''via '''Save''' button or '''Ctrl+S''' shortcut'') in order to permanently store data on the drive. After that, AI should be able to use such weapon without problems.

{{Feature|informative|Ballistic Tables are also relevant to other AI operated weapon like rocket launchers. In such scenario, select relevant '''xMoveComponent''' from the list and apply there '''Ballistic Table Config'''.}}

{{Clear}}

==== New Magazine ==== With new '''ammo''' prefab ready in game data, a '''new magazine''' must be created to host it and use it in the new weapon. its capacity will also be '''increased to 200 rounds'''.

First step is the creation of "'''Magazine_545x39_AK_30rnd_modded'''" prefab inheriting from [enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Magazines/Magazine_545x39_AK_30rnd_Base.et '''Magazine_545x39_AK_30rnd_Base.et''']. Then, the '''assigned ammo''' and '''magazine capacity''' will be changed. Both these parameters are located in '''MagazineComponent'''. '''Ammo Config''' along with '''Ammo Mapping''', defining which round will be used in the magazine, and '''Max Ammo''', which is the magazine's total capacity.

===== New Ammo Config ===== New '''Ammo Config''' can be created in '''Resource Browser''' by using in Resource List. From that context menu select "'''Config File'''" under "'''Create Resource'''" tab and type the name of the new config, e.g '''Ammo_545x39_Modded.conf'''. It will ask to specify the kind of config to be created; search for ''Magazine'' and select "'''MagazineConfig'''" from the filtered list.

[[File:armareforger-modded-ammo-config.png]]

Once the config is ready, double-click on it to open it. This opens the new config in Asset Preview Window with empty '''Ammo Resource Array'''. Click the + sign to add a new entry to the array. At least one bullet type must be defined in order for the config to be considered valid.

==== Apply Ammo Config to Magazine ==== Once the new '''Ammo Config''' is ready, apply it to the previously created magazine by using one of the presented below methods. Once done, start filling '''Ammo Mapping''' values with different bullet types that were defined in ''Ammo Config''. There are 2 rules:

* 0 in '''Ammo Mapping''' array means that the first bullet from '''Ammo Resource Array''' will be used. 1 = second bullet from ''Ammo Resource Array'', 2 = third one and so on. If an invalid index is provided, no bullet will be created * If the amount of entries in '''Ammo Mapping''' is smaller than '''Magazine Capacity''', then the first round from '''Ammo Resource''' array will be used '''until the end of magazine'''. In the example below, there are 30 entries in '''Ammo Mapping''' array and the magazine capacity is set at 200. This means that after the '''30th round''' the weapon will only be firing '''Ammo_545x39_ball_Modded''' rounds.

'''Assigning resource by clicking on 3 dots or resource icon'''

[[File:armareforger-modded-weapon-assign-resource-dot.gif|none|Assigning resource by clicking on 3 dots or resource icon]]

'''Drag and drop method''' [[File:armareforger-modded-weapon-assign-resource-dragdrop.gif|none|Drag and drop method]]

==== Changing AI properties ==== [[File:armareforger-modded-weapon-ai-combat-properties.png|thumb|'''AICombatPropertiesComponent''' in '''Magazine_AK74_30rnd_Modded''' prefab]] Since this magazine contain some really explosive ammunition, it might be worth to tweak AI properties of the magazine. In '''AICombatPropertiesComponent''' inside of the magazine prefab, you can define how AI is going to use this magazine - will it '''decided to use it against vehicles, infantry or aircraft'''. Additionally, it is also possible to set if this magazine should be '''preferred when engaging vehicles''' or whether it should be used when '''engaging enemies indirectly''' (i.e. behind some cover). In this case, we want to have a magazine which can:

* Engage infantry directly * Engage unarmored & medium vehicles directly & prefer such targets over infantry * Engage infantry indirectly

To do so, change following parameters:

* '''Priority Against Vehicles''' - change it from -1 to '''35'''. Since priority is higher than regular '''Priority''' parameter, AI will prefer engaging vehicles if both infantry and vehicles are present on the battlefield. * In '''Used Against''' array enable '''Vehicle Medium''' property - vehicles like armored M1025 or BTR-70 (''unit type is defined in '''VehiclePerceivableComponent''' inside those vehicle prefabs'') should be engaged using this magazine * In '''Indirectly Used Against''' array enable '''Infantry''' parameter - AI will try to engage enemy infantry if its behind some light cover

{{Clear}}

==== Apply New Magazine to Weapon ====

[[File:armareforger-modded-weapon-aplying-magazine.png|right]] After configuring '''Magazine_545x39_AK_30rnd_modded''' prefab, it is time to apply this magazine to the modded variant of AK-74.

Once '''Rifle_AK74_Modded''' prefab is present in World Editor, it is possible to move to '''Object Properties''' window. Over there, navigate to '''MuzzleComponent''' and try to locate '''Magazine Template''' property.

When '''Magazine Template''' property is in sight, it possible to finally change the prefab which is assigned to it. This can be done in two ways:

* By clicking on two dots '''(1)''' and selecting '''Magazine_545x39_AK_30rnd_modded ''' in pop up window that appeared * Drag and dropping '''Magazine_545x39_AK_30rnd_modded ''' prefab into '''Magazine Template''' property ''(see Applying Ammo Config to weapon segment about drag and drop method)''

As soon as this action is completed, don't forget to save the result. If change was applied to entity instance, don't forget to use '''Apply to prefab''' button and save current world afterwards!

{{Clear}}

=== Retexturing asset ===

In this chapter the following operations will be performed on the modified AK74:

* '''Create new materials''' based on original one and convert them to '''''MatPBRCamo''''' * '''Apply new materials''' to the modded weapon

==== New Materials ==== When making a retexture of an asset there are basically two choices; creating new material from scratch and assigning all the texture parameters manually or duplicating existing material and only change wanted parameters. For purpose of this tutorial we will cover both ways and begin with creation of new material from scratch.

===== From Scratch ===== New material can be created by moving the mouse over Resource Browser asset list and using RMB. A small context menu should pop up, click "'''''Material'''''" from "'''''Create Resource'''''" list. After clicking that, write the new material's name in the separate window that popped up. The material has been created! It is now time to change its properties. In order to do so, double click on the new material in the assets list to open it, then navigate to '''ChangeClass''' button on the right side of the resource browser in the "'''Details'''" tab. By default, all materials are created as ''MatPBRBasic'' and since this is a simple retexture, '''MatPBRCamo''' will do. More about different kind of materials can be read in Naming Conventions and File Formats.

[[File:armareforger-vehicle_modding_create_new_material.gif]]

===== Duplicating Existing Material ===== Another way to create new material is duplication of an existing one. Search for ".emat AK74" in '''Resource Browser''' and right-click on [enfusion://ResourceManager/~ArmaReforger:Assets/Weapons/Rifles/AK74/Data/ak74_body1.emat ''ak74_body1.emat'']. Next, select "'''Duplicate to 'SampleMod_ModdedWeapon'''" option from the context menu and type the new file name e.g '''''ak74_body1_camo'''''. Duplicated material will use the same type as parent asset so before proceeding further, the class type still needs to be changed: this is done the same way as when creating a new material.

The main difference between these two methods is that '''duplicated material will retain the original configuration'''; after changing its class to '''MatPBRCamo''', the only thing to be filled would be camo-related parameters.

Once this is done, apply the same method to ''ak74_body2.emat'' then relocate duplicated materials to the target location (in this case '''SampleMod_ModdedWeapon''') by dragging them in Resource Browser.

[[File:armareforger-vehicle_modding_duplicate_material.gif]]

===== Material Configuration ===== [[File:armareforger-modded-weapon-material-configuration.png|frame|right|400px|Example MatPBRCamo configuration]] With materials ready and in place it is time to set them up correctly. If duplication has been used then most of the basic parameters should be there, otherwise see the picture on the right to fill in correct values.

===== Retexturing using MatPBRCamo ===== '''MatPBRCamo''' is an extension of the '''MatPBRBasic''' material which easily allows overlay camouflage pattern on the asset. In "'''Camo textures'''" tab the following maps can be assigned:

* '''Camo Albedo Map''' - RGB Albedo - seamless texture which will be overlaid on base albedo texture. Many camouflage patterns are available in '''"data\Common\Textures\Camouflage".''' * '''Camo Normal Map''' - Optional. Classic normal map. It can be used to add additional bumpiness like some mud smudges or deep scratches * '''Camo CRM Map''' - CRM stands for '''C'''amo/'''R'''oughness/'''M'''etallic. Textures per channel: ** '''Red''' = Mask - white color defines where all Camo textures are applied ** '''Green''' = Roughness - classic roughness ** '''Blue''' = Metallic - classic metallic

'''Camo Albedo Map UV Transform''' is quite a useful transform, since it lets control the size of the camo texture.

"'''Camo modifiers'''" contains opacity controls of each mask. If no '''Camo Normal Map''' is provided then '''Camo Normal Opacity should be set to 0'''.

Below is an example of '''Camo CRM Map.''' Roughness and metalness were copy pasted from base material but custom maps can be exported to these channels easily if that mask is created in a program like Substance Painter.

[[File:armareforger-modded-weapon-material-camor-crm-map.jpg|thumb|frame|left|600px|Camo CRM Map channels]]

Texture that have been created should be in '''RGB Color''' mode with '''8 Bits/Channel''' and saved in '''.tiff format with following settings.'''

[[File:armareforger-modded-weapon-saving-texture.png|frame|left|600px|TIFF Export settings]] ''More information over that can be found on the [[Arma Reforger:Textures|'''Textures''']] page''

{{Clear}} ===== Texture Import ===== The TIFF file being processed, it is ready to be imported in Workbench. To do so, locate the file in '''Resource Browser''' and right-click on it. Select "'''Register and import'''" from the contextual menu. This action will import and convert the texture to '''Enfusion DDS''' file (.'''''EDDS'''''). In import tab there are few parameters which are quite crucial for some of the texture types but for more information, please take a look at ''Materials and Textures'' page again. With the texture imported, it is now possible to assign that mask in the new material.

[[File:armareforger-vehicle_modding_register_material.gif]]

Additional read

<!-- {{Feature|informative|See also Weapon Pipeline page or Textures / Materials - Textures.}} -->

==== Apply Materials to Asset ==== It is possible to change materials on each prefab and entity instance which are using '''MeshObject''' component. After clicking on '''MeshObject''' component there is a small arrow next to the "'''Materials'''" property which will expand the list with currently selected materials. Once that list is expanded, the material can either be drag and dropped from '''Resource Browser''' to material field, or selected by clicking on material and selecting '''new material''' in the pop-up window that appeared.

[[File:armareforger-vehicle_modding_apply_material.gif]]

=== Sounds Change ===

In this chapter, let's tinker with the weapon's sound effects through the following operations:

* Creating variant of existing audio project configuration * Replacing firing sounds of a weapon * Replacing bullet impacts sounds

==== Audio Editor Basics ==== Most of the audio configuration is performed in '''Audio Editor''' where it is possible to create quite complex things in a user-friendly visual environment. In this tutorial [enfusion://ResourceManager/~ArmaReforger:Sounds/Weapons/Rifles/AK-74/Weapons_Rifles_AK-74_Shot.acp '''Weapons_Rifles_AK-74_Shot.acp'''] will be used as weapon configuration base. After opening it in '''Audio Editor''', it is now possible to create a copy of it through ''File → Save As'' option and new '''Weapons_Rifles_AK-74_Shot_modded.acp''' can be created in desired addon.

Without going too deep in the audio structure, a typical weapon sound uses multiple '''sound banks''' and '''sound shaders''' to create a final mix. Shaders are affected by '''various signals''' like distance from camera, environment around shooter or current weather conditions.

[[File:armareforger-weapon_modding_audio_overview.png]]

===== Audio Bank Content Change ===== In this tutorial, only smart part of the audio project will be modified - bodies & tails sounds.

Some of the shortcuts used in audio project files might be confusing at first glance. Please refer to following table in case something is not clear:

{| class="wikitable" | ''AL'' | Add Layer |- | ''FP'' or ''1p'' | First Person |- | ''EQ'' | Equalizer |- | ''EL'' or ''EnvLayer'' | Environment Layer |}

Starting with '''bodies'''' sounds, following audio banks will be adjusted:

* Body FP (Body First Person) * Body Mid (Body medium range sound) * Body Far (Body far range sound)

Sound banks contain list of files in their '''Samples''' array and some basic sound configuration like volume or pitch. New sounds can easily be added to an existing Sound Bank by simply drag & dropping wav files on a bank. Since the goal here is to completely replace an existing audio bank, + will be used to replace the bank.

In this example,

* Prototype_Cannon_01_Discharge_01.wav * Prototype_Cannon_01_Discharge_02.wav * Prototype_Cannon_01_Discharge_03.wav * Prototype_Cannon_01_Discharge_04.wav

are assigned to '''Body FP''' & '''Body Mid''' banks and

* Prototype_Cannon_01_Discharge_Distant_01.wav * Prototype_Cannon_01_Discharge_Distant_02.wav * Prototype_Cannon_01_Discharge_Distant_03.wav * Prototype_Cannon_01_Discharge_Distant_04.wav

are assigned to '''Body Far''' bank.

[[File:armareforger-weapon_modding_audio_replacing_bank.gif]]

Once that action is complete, it is possible to preview the firing sound by selecting '''SOUND_SHOT''' in '''Routing and Mixing''' group and then pressing once . This should result in the playback of the whole mix with signals being set to some default values.

[[File:armareforger-weapon_modding_audio_playback.gif]] {{Feature|important|Keep in mind that wav files have to be registered first! This means that each wav should have meta file next to it.

[[File:armareforger-weapon_modding_register_wav.png]] In workbench, it is possible to verify if file was registered by clicking on it with {{Controls|rmb}} and checking if '''Register''' & '''Register and Import''' option are active in context menu. If yes, that means that file is not registered. Otherwise, those two options will be greyed out & inactive.}}

The same method can be applied to '''Tail Meadows Far, Tail Hills Far, Tail Forest Far & Tail Houses Far''' banks. Those banks are used for various sound tails - kind of echo which gun shot generates. Since this example has only one type of tail samples - ''Prototype_Cannon_01_Tail_Open - all of the''

===== Apply New Sounds to Weapon =====

[[File:armareforger-weapon_modding_apply_sounds.gif|right]] Once all adjustments in ACP are done, it is now possible to link those new firing sounds to the '''Rifle_AK74_Modded''' prefab.

Weapon sounds are defined in '''WeaponSoundComponent''' and over there multiple ACP files are listed in '''Filenames''' array.

Here the goal would be replacing first entry in the array with index 0 - '''Weapons_Rifles_AK-74_Shot.acp.''' This will ensure that the modded variant of the firing sounds will be used instead of the original files. To do so, '''Weapons_Rifles_AK-74_Shot.acp ''' has to be changed and this can be achieved in two ways:

* By clicking on two dots '''(1)''' a next to '''Weapons_Rifles_AK-74_Shot.acp''' ''(first entry in Filenames array)'' and selecting '''Weapons_Rifles_AK-74_Shot_modded.acp''' in pop up window that appeared. * Drag and dropping '''Weapons_Rifles_AK-74_Shot_modded.acp''' prefab onto first element in the '''Filenames''' array ''(see Applying Ammo Config to weapon segment about drag and drop method)''

As soon as this action is completed, don't forget to save the result. If change was applied to entity instance, don't forget to use '''Apply to prefab''' button and save current world afterwards!

{{Clear}}

=== Particle Effects Change ===

In this last chapter the weapon's particle effects will be affected through the following operations:

* Create new particle effects for muzzle flash & explosion using one of the existing effects as a base * Link those particle effects to the modified weapon

==== Particles Editor Basics ==== Particles Editor opens on the new window with five main sections visible:

* '''Particle effect''' tab - allows to manage particle effects playback as well as add new emitters * '''Emitter Properties''' tab - contains all possible parameters that can be used with selected emitter * '''Particle-Lifetime''' '''Graphs''' tab - visualisation of emitter changes over time * '''Log Console''' tab - listing all errors that Workbench detects * '''Preview window''' - the final particle effect can be seen there

'''AK74_Muzzle.ptc''' will be the base for the new muzzle flash base - to do so, open particle selection menu (by either clicking on File > Open or clicking on the yellow folder icon in the top-left corner).

===== Particle Effect Playback ===== Once the particle effect is loaded, the list of emitters gets populated with a couple of entries but preview window remains most likely empty. To start playing the particle animation, click on the loop icon in the Playback options. This will activate looped playback which should allow to view the effect properly. Alternatively, the animation can be paused and browsed through in steps.

[[File:armareforger-weapon_modding_particles_playback.gif]]

===== Muzzle flash ===== For the purpose of this tutorial, the muzzle effect's size will be multiplied by 10 and its colour will change to green and blue.

To do so, the '''Size Multiplier''' property in ''Particle appearance'' tab and '''Color''' in ''Particle lifetime'' tab will both be used.

'''Emitter properties'''

[[File:armareforger-modded-weapon-emitter-properties.png|none]]

'''Particle lifetime''' [[File:armareforger-modded-weapon-particle-liftime.gif|none]]

{{Clear}}

'''Size Multiplier,''' as the name suggest, is a size coefficient to the whole emitter. By changing that, the size of the muzzle flash can easily be increased.

'''Particle life time''' '''editor''' on the other hand is a bit more complicated yet more interesting tool since it allows changing the particles' colour over its lifetime. By dragging dots on chart, it is possible to change values of each channel (Red/Green/Blue) over time. The right side represents the particle's life end ('''Life Time''' + '''Life Time RND'''). For instance, on the above short video's end state, the particle will gradually change its colour from green to blue. It is possible to add additional points to that curve to have the best, most accurate settings.

Note that the following procedure has to be performed on all the emitters!

Once all the values have been properly adjusted, it is time to save the new particle effect. To do so, navigate to "'''File'''" (top-left corner) and click on "'''Save effect as"''' button - save it as "'''''Muzzle_AK74_Modded'''''" in Sample Mod structure and this is it!

===== Explosion effect ===== Similar to the muzzle effect, [enfusion://ResourceManager/~ArmaReforger:Particles/Weapon/Explosion_VOG25.ptc '''Explosion_VOG25.ptc'''] will be the base for the new explosion effect. Try changing the colour of this particle effect the same way as before then try to experiment with sparks "Alpha" setting in Particle lifetime editor just to see how powerful that tool is. To highlight that change, increase sparks' '''Life Time''' to 3 seconds - this way '''Alpha''' changes should be easier to spot.

[[File:armareforger-weapon_modding_particles_lifetime.png|center]]

===== Link Particle Effect to Weapon =====

[[File:armareforger-weapon_modding_link_weapon.png|left]] Muzzle particle effects are stored in '''SCR_MuzzleEffectComponent''' in the modded weapon'''. T'''hat component can be filtered by typing ''MuzzleEffect'' in the components filter input field (red box). Once that component has been selected, set the '''Particle Effect''' property to the new particle effect '''Muzzle_AK74_Modded.ptc'''.

{{Clear}} ===== Link Particle Effect to Explosion Effect =====

[[File:armareforger-weapon_modding_link_explosion.png|right]] Explosion effects are stored in the ammunition Prefab that got created before (click here to get back to that paragraph). In '''Projectile Effects''' array try to locate '''Explosion Effect''' entry and then, fill the '''Particle Effect''' property with the new one (see the green box on the picture below).

Do not forget to apply that change to the Prefab once all the changes have been done!

{{Clear}}

=== Test Results In-Game ===

In this closing chapter the following steps will be mentioned:

* Placing the new creation in World Editor... * ...and testing it in game!

The Prefab is now fully working and modded, it can now be used in some real scenario. First of all, in World Editor navigate to '''File → Load World''' (or alternatively use icon or the + shortcut) option and select '''Assets_Showcase_Base.ent''' file from main Sample Mod.

This world is very simple with an already prepared respawn system, the only thing to do is to place an instance of '''Rifle_AK74_Modded.et''' prefab from the '''Resource Browser''' somewhere on the terrain.

To do so, just search for '''Rifle_AK74_Modded.et ''' in '''Resource Browser''' then drag and drop this asset into '''World Editor'''<nowiki/>'s main window.

[[Image:armareforger-modded-weapon-result.png|600px|center]] {{Clear}} Once this operation is done, press the '''Play Button''' which is going to switch World Editor preview window into Game Mode. In this mode, the player spawns as an unarmed Soviet soldier and should be able to pick up the placed rifle. Now remains to try and behold this modded weapon in game!

[[Image:armareforger-modded-weapon-testing.mp4|1200px]]

{{GameCategory|armaR|Modding|Assets|Tutorials}}
1hsr55szgi1hk9l8afjlwskukywcml5

# Arma Reforger:Weapon Optic Creation

5050
35077
373080
370964
2025-03-28T12:41:03Z
Reyhard
10671
/* Material */ Removed mention of non existing material
373080
wikitext
text/x-wiki
{{TOC|side}} =Goals= {{Messagebox|'''Overview''' This tutorial will explain how to:

* Prepare optic mesh for import into the game * Setting accessories slots * 2D & PIP optic configuration|💬|#CDF}}{{Feature|informative|This tutorial is continuation of [[Arma_Reforger:Weapon_Creation|'''Weapon Creation''']] tutorial - some of the things on this page are interlinked with '''Sample New Weapon''' so prior knowledge of that tutorial is '''necessary'''}} {{Messagebox|Sources files for this tutorial can be found on [https://github.com/BohemiaInteractive/Arma-Reforger-Samples/tree/main/SampleMod_NewWeapon '''Arma Reforger Samples Github repository''']|📥|orange}}

==Structure Preparation== While sticking to official structure is not mandatory and there are no engine restrictions asset wise about it, it is recommended to follow guidelines listed here - [[Arma Reforger:Directory Structure|Data (file) structure]] - to ensure that all automation plugins are parsing your assets correctly and make it later easy to navigate.

Therefore, your first task will be preparing following file structure

[[File:armareforger-new-weapon-optic-structure.png]] = Mesh preparation=

==General== In principle, mesh preparation is not that different from [[Arma Reforger:Weapon Creation/Asset Preparation#Prepare the Mesh|weapon preparation]] itself. Again, '''[[Arma Reforger:Weapon Creation/Asset Preparation#Object Orientation|orientation of the mesh is very important]]''' and there are few extra elements needed on the model which are described below.

When it comes to the mesh itself, keep in mind that rear part of the scope will be really close to the players camera when aiming down sights so its worth investing extra polygons in that place. For instance, don't be afraid to use '''32 or more sides for cylinders''' right in front of the player eye. If you are worried about performance impact, you can reduce poly count quite sharply in next LOD, so that detailed mesh will be visible only when player is really close to it.

==Colliders== Accessories should have collider with two [[Arma Reforger:Collision Layer|'''collision layers''']] - '''Weapon''' & '''FireGeo'''.

'''Weapon''' layer preset is responsible for physical interaction of the accessory, like '''collisions with other objects''', while '''FireGeo''' is used for '''collisions with projectiles''' and also for detection of '''inventory''' actions. In case you don't see your actions in game, double check if item is using correct Layer Preset.

Depending on the complexity of accessory, collision of optic can be done either with single collider convex (''UCX or UBX''), which is using '''WeaponFire''' layer preset or by using two colliders - one simple convex (''UCX'') collider for '''Weapon''' layer preset and second, more complex trimesh (''UTM'') collider for '''FireGeo''' preset. In case of Sample Optic, second method was used.

[[File:armareforger-new-weapon-optic-colliders.gif]]

In both cases, it is recommended to use one of the '''Weapon_xxx Game Materials''' on those colliders like: *{{Link|enfusion://ResourceManager/~ArmaReforger:Common/Materials/Game/WeaponParts/weapon_metal.gamemat|weapon_metal.gamemat}} *{{Link|enfusion://ResourceManager/~ArmaReforger:Common/Materials/Game/WeaponParts/weapon_plastic.gamemat|weapon_plastic.gamemat}} *{{Link|enfusion://ResourceManager/~ArmaReforger:Common/Materials/Game/WeaponParts/weapon_wood.gamemat|weapon_wood.gamemat}} This will ensure that attachment doesn't stop every bullet on impact.{{Feature|informative|More information about colliders can be found on [[Arma_Reforger:FBX_Import#Collider_usage|FBX Import page]]}} ==Memory points ==

===Slots === [[File:armareforger-new-weapon-optic-snap-weapon.png]]

Attachments like optics are attached to slots and while technically it is not mandatory, adding '''snap point''' is a very handy thing. Procedure for [[Arma Reforger:Weapon Creation/Asset Preparation#Add Slots.2FSnap Points|adding that is same as on weapon]]. Below are few tips regarding

*Place '''snap_weapon''' empty object at location, where you want to snap with the weapon. See [[Arma Reforger:Weapon Slots And Bones|'''Weapon Slots and Bones page''']] for more details. **'''snap_weapon''' works together with '''slot_optic''' point on parent weapon **Without '''snap_weapon''' point, origin of the model would be used for snapping *In case of RIS rail, '''middle point in Y axis is sort of way to go'''. **Some freedom is allowed though - for instance accessories like '''Carry Handle Optics''', middle location would most likely make it an unusable accessory on most weapons

===Points=== In order to make configuration of '''SCR_2DPIPSightsComponent''' component bit easier, it is recommended to add few points directly in model for setting things like eye position when aiming down sight and front/rear points for camera calculation. '''Sample Optic''' has two sights - '''primary, optical sight with 4x zoom''' and '''backup ironsights''' located on top of it.

Starting with primary sight, perform following actions:

*Create '''optic_rear''' empty object at the middle of '''ocular''' *Create '''optic_front''' empty object at the '''front glass''' *Create '''eye''' empty object - it should be placed few cm away from the middle of the '''ocular''' **This point will be used for main optic, when character is '''aiming down sights''' (ADS {{Feature|informative|'''Sights Point Rear''' , '''Sights Front Position''' and '''Sights Position''' should all be aligned on single axis for simplicity sake}}[[File:armareforger-new-weapon-optic-primary-points.png]] *Create '''eye_ironsight''' - place it in line with ironsights located at the top of the optic **This point will be used for backup ironsights [[File:armareforger-new-weapon-optic-ironsights-points.png]]{{Feature|informative|Keep in mind that rotation of those points matters and will be used by the engine!}}

==Creating Optic Mesh for PIP== [[File:armareforger-new-weapon-optic-uvmapping.png]]

Next step in weapon optic creation is adding additional mesh to the scope on which scope view will be rendered. This can be done in few steps:

*Create flat mesh for '''picture in picture (PIP)''' sight rendering and place it at the '''ocular''' **Scope view will be rendered on this surface so make sure it is detailed enough **UVs of that mesh should cover whole UV island ***If texture is not render correctly (i.e. rotated by 45 degrees to the left or right) and you are sure that , make sure that UVs are rotated correctly *Create new material called for instance "'''Optic_pip'''" and '''assign it to mesh created in previous step''' [[File:armareforger-new-weapon-optic-pip-material.png|1200x1200px]]

Additionally, it is a good idea to have additional layer of mesh in front of the PIP selection which has glass like material with some tint and subtle reflections. To do so, follow below steps: *Create 2nd, more round and convex, mesh for glass optic. Place it in front of PIP mesh. Additionally, you can also use same mesh on the opposite side of the scope **This is mesh would be only used as eye candy, showing i.e. glass reflection, so don't be afraid to put some extra polygons there *Create new material called for instance "'''Optic_lensglass'''" and '''assign it to mesh created in previous step''' [[File:armareforger-new-weapon-optic-lens-glass.png|1200x1200px]]

= Model Import & Registration = [[File:armareforger-new-weapon-optic-materials.png|thumb|593x593px|Sample Optic materials]] Once that is done, it is possible to import the model into Workbench. Process itself is same as for the weapon, so refer to [[Arma Reforger:Weapon Creation/Asset Preparation#Model Import .26 Registration|Model Import & Registration]] segment of '''Weapon Creation''' tutorial.

After model is imported, open it in Resource Manager and change default materials which are assigned to '''Optic_pip & Optic_lensglass''' material slots. A nice starting point could be simply assigning to those fields following materials:

*{{Link|enfusion://ResourceManager/~ArmaReforger:Assets/Weapons/Attachments/Optics/ARTII/Data/Optic_ARTII_Lensglass.emat|Optic_ARTII_Lensglass.emat}} to '''Optic_lensglass''' slot * {{Link|enfusion://ResourceManager/~ArmaReforger:Assets/Weapons/Attachments/Optics/PSO1/Data/Optic_PSO1_PIPMaterial.emat|Optic_PSO1_PIPMaterial.emat}} to '''Optic_pip''' slot

Of course, if you wish to make some tweaks to those materials then it is also possible to duplicate above mentioned materials, do tweaks to them and then assign it to the optic you are working on.

Since this model is using '''empty objects as snap/slot points''', it is necessary to '''check Export hierarchy''' in '''Import Settings''' section. Of course, once this step is performed, don't forget to click on '''Reimport resource''' button!

[[File:armareforger-new-weapon-optic-hierarchy.png]]

{{Clear}} =Texture & Material=

==Reticle== [[File:armareforger-new-weapon-optic-reticle-texture.png|thumb|Reticle channels in Photoshop]] Next step in optic creation will be making of a reticle texture. Create a new texture in graphic editor of your choice and start painting the texture. In case of Sample Optic, TGA texture with '''Alpha''' channel was used. In Alpha channel section, which is supposed to be '''transparent was painted in black'''.

Vanilla reticles also tends to use PNGs with transparency in the background although creation of such might be troublesome if software that you are using doesn't allow preservation of RGB values when alpha is set to 0.

Below are few tips to keep in mind while making such texture: *1024x1024px size is recommended for smaller, less detailed reticles **If its needed, higher resolution could be used but caution is suggested *Reticle should fill most of the canvas *Color of the reticle doesn't mater - it is later replaced by the engine - therefor using just white for the reticle is recommended **To fix reticle texture blurriness or artifacts you can either: ***Change manually in reticle EDDS '''Import Settings''' two parameters - '''Conversion Quality''' to '''100''' and uncheck '''Generate Mips''' checkbox. In this scenario, you need to use '''_UI suffix for your textures!''' ***Replace the '''Configuration''' section of .meta file (open it in text editor) as following, then reimport the texture. You might use '''_Reticle suffix''' for your texture {{Feature|important|Replace '''TGAResourceClass''' with '''PNGResourceClass''' if you are using PNG textures!}}{{Messagebox|'''Recommended read''': '''{{Link|Arma_Reforger:Textures#Basics}}''' documentation. Read to learn about importance of suffixes of textures and their impact on in-game visual quality of texture.|📖|lightgrey}}<syntaxhighlight lang="csharp"> Configurations { TGAResourceClass PC : "{33F97FFE35E57E1D}Configs/System/ResourceTypes/PC/TextureReticle.conf" { } TGAResourceClass XBOX_ONE : "{0B42FA7CFD77120F}Configs/System/ResourceTypes/XBOX_ONE/TextureReticle.conf" { } TGAResourceClass PS4 : "{C1FA7DC8973FA4A1}Configs/System/ResourceTypes/PS4/TextureReticle.conf" { } TGAResourceClass HEADLESS : "{9664EF94CE7C4525}Configs/System/ResourceTypes/HEADLESS/TextureReticle.conf" { } TGAResourceClass XBOX_SERIES : "{A4AA0C6FDF186747}Configs/System/ResourceTypes/XBOX_SERIES/TextureReticle.conf" { } } </syntaxhighlight>

==Material== [[File:armareforger-new-weapon-optic-hdr-material.png|left|thumb|334x334px|'''Optic_SampleOptic_HDR.emat and Reticle Map''']] With reticle textures ready, it is possible to prepare material for '''picture in picture''' sight: *Duplicate one of the existing optic HDR materials ('''HDREffect''' class) like - {{Link|enfusion://ResourceManager/~ArmaReforger:Assets/Weapons/Attachments/Optics/ARTII/Data/Optic_ARTII_HDR.emat|Optic_ARTII_HDR.emat}} . In this case this file was called '''Optic_SampleOptic_HDR.emat''' *Open that new material and in '''Details''' tab locate '''Reticle Map''' property. **Assign previously created reticle texture to '''Reticle Map property''' and save the material with {{Controls|Ctrl|S}} key combination. Rest of the properties can be left unchanged compared to source material although some tweaks to effects are permitted if you i.e. want to achieve some tint on the PIP view. T

{{Clear}} =Prefab=

==Creation== Next step in Optic creation is preparing a prefab. *Create new prefab which [[Arma Reforger:Data Modding Basics#Using .22Inherit in....22 function|inherits]] from {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Attachments/Optics/WeaponOptic_Base.et|WeaponOptic_Base.et}} prefab **Alternatively you can try to [[Arma Reforger:Data Modding Basics#Using .22Duplicate to....22 function|duplicate one of the existing scopes]] like {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Attachments/Optics/Optic_PSO1/Optic_PSO1_base.et|PSO-1}}or {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Attachments/Optics/Optic_ARTII/Optic_ARTII_base.et|ART II}} scope Once prefab is duplicated, start editing it in for instance '''Prefab Edit''' mode and adjust following parameters *Assign scope mesh in '''Object''' property of '''MeshObject''' component *Check '''Model Geometry''' option in '''RigidBody''' component - this will ensure that interactions with the item are working correctly and that it is possible to pick up this attachment from the ground This should be enough to see your accessory in the '''World Editor''', although there is more to do to get it to work properly.

==Inventory configuration== With some basic prefab configuration in place, it is time to move on to setting of inventory parameters, which affects things like '''appearance, mass and size''' in loadout system, '''character modifiers''' when scope is equipped and also '''compatibility of attachment''' with weapon slots. All of these things are configured in the '''InventoryItemComponent''' component, and that's where tweaks need to be made.

=== Inventory system configuration === [[File:armareforger-new-weapon-optic-inventory.png|thumb|Inventory configuration]] Starting with inventory configuration, this part is quite similar to what was already described in [[Arma Reforger:Weapon Creation/Prefab Configuration#Inventory Configuration|Weapon Creation tutorial]], so below is quick recap (with differences) of what has to be done in '''Attributes''' section of '''InventoryItemComponent'''

*'''Item Display Name''' **Adjust '''Name''' & '''Description''' - both will be shown in in-game inventory system ***Name '''need to be [[Arma Reforger:Mod Localisation|localised]] -''' otherwise item will be displayed incorrectly in for instance '''Attach''' action visible in '''weapon inspection''' mode *'''Item Phys Attributes''' **Adjust '''Weight''' - weight in game affects for instance how fast character is tired. Try to use real life values here (of course, if such data is available) - other wise you might try to set value similar to other scopes with similar dimensions. **Change '''Size Setup Strategy''' to '''Manual''' and adjust '''Item Dimensions''' & '''Item Volume -''' those two parameters define much space this item will occupy in containers (like pouches or bags) that are available to player. In case of accessories it is recommended to use '''Manual''' mode, since '''Volume''' mode might result in an item where you cannot put it anywhere in inventory. **Change '''Resting UP''' parameter to '''Right''' Unlike as on weapon, '''Item Animation Attributes''' should be '''left empty/undefined'''.

Next on the list is setting of the visual appearance of the scope in loadout view. Parameter related to it are stored in '''Custom Attributes''' section of '''InventoryItemComponent''' inside of '''PreviewRenderAttributes''' class. Over there, you can find familiar looking attributes which were mentioned in [[Arma Reforger:Weapon Creation/Prefab Configuration#Inventory Configuration|Weapon Creation tutorial]]. In case of Sample Optic, default values were good enough but of course, depending on the accessory that you are making, some adjustments to '''Camera Orbit Angles''' or '''Camera Distance To Item''' might be required.

=== Character modifiers setup === In '''CharacterModifierAttributes''' class inside '''Custom Attributes,''' it is possible to change behavior of the character when given accessory is attached to currently used weapon. {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Attachments/Optics/WeaponOptic_Base.et|WeaponOptic_Base.et}} contains some of the values typical for scopes, like '''ADS Speed Limit''' set to 1.5 m/s - this parameter dictates '''how fast character can move when''' '''aiming down sights'''. In most cases, 1.5 value is fine for scopes but if you are trying to achieve some more snappy optic, then increasing that limit might make sense. Similarly, reducing that limit to even lower value could be a valid method if you are dealing with some large optic with high magnification.

===Attachments configuration=== In '''Custom Attributes''' section of '''InventoryItemComponent''' attributes you can find '''WeaponAttachmentAttributes''' class, which has one important parameter - '''Attachment Type.''' This parameter, similar to [[Arma Reforger:Weapon Creation/Prefab Configuration#Magazine Well|'''Magazine Well''' class]], controls what type of attachment it is and where it can be attached.

Since Sample Optic is using a [https://en.wikipedia.org/wiki/Rail_integration_system RIS rail], one of the RIS attachment classes should be selected. If you are creating some non standard rifle, then take a look [[Arma Reforger:Weapon Creation/Prefab Configuration#Magazine Well|'''Magazine Well''']] configuration paragraph - process is very similar to creation of new attachment. {{Feature|informative|If you are not sure what attachment slot you should use, you can head to one of the [enfusion://ScriptEditor/Scripts/Game/Weapon/Attachments/Attachments_optics.c;73 attachment scripts] and check if there are comments in code regarding selected class.}}

* '''AttachmentOpticsRIS1913''' ** Optics like scope + night vision sights combos can be attached to it ** Length of this rail is above or equal 250mm * '''AttachmentOpticsRIS1913Medium''' ** Optics like larger scopes, collimator + magnifier combos or similar can be attached to it ** Length of this rail is up to 120mm * '''AttachmentOpticsRIS1913Short''' ** Optics like collimators, scopes or similar can be attached to it ** Length of this rail is up to 120mm * '''AttachmentOpticsRIS1913VeryShort''' ** Optics like small collimators, ris ironsights or similar can be attached to it ** Length of this rail is up to 80mm

How does it work in practice? If weapon attachment slot is using '''AttachmentOpticsRIS1913Medium,''' then scopes which are using '''AttachmentOpticsRIS1913Medium, AttachmentOpticsRIS1913Short''' or '''AttachmentOpticsRIS1913VeryShort''' can be attached to it. If weapon has slot with '''AttachmentOpticsRIS1913VeryShort''' then only scopes with '''AttachmentOpticsRIS1913VeryShort Attachment Type''' can be used on it and '''AttachmentOpticsRIS1913Short or larger cannot be attached to such slot.'''

In this case, '''Sample Optic''' is longer than 250mm so '''AttachmentOpticsRIS1913''' was picked.{{Feature|informative|You can change '''Attachment Type''' class after initial selection by clicking on that property with '''Right Mouse Button''' and selecting '''Change Class''' option from the context menu.}} == Optics configuration== Configuration of the optic is stored in '''SCR_2DPIPSightsComponent''' component. As name suggest, this component enables both '''2D & PIP''' mode on the scope depending on the preferences selected in '''Gameplay''' section of the in-game settings.

===Diagnostic tools === Before proceeding any further, it is recommended to enable some of the debugs located in [[Arma Reforger:Diag Menu|Diag Menu]] located in '''GameCode > Weapons''' category. Main debugs for reticles are: *'''Show optics diag''' - used to debug, experiment and verify reticle or scope settings **The debug rendering circle in PIP can be inaccurate. It has precise on screen angular size in 2D optics mode *'''Show PIP settings diag -''' used to debug '''Picture in Picture''' related scope settings Both of the above debugs will be available only when you are aiming down sights. Once you have enabled one of the debugs mentioned above, you will be able to move the debug window to preferred place by simply holding combination of keys required to show the [[Arma Reforger:Diag Menu|Diag Menu]] and then using mouse to drag it. With same key combo, you can also click on the one of the fields to change data in the debug window.

[[File:armareforger-new-weapon-optic-enabling-debug.gif]]

Additionally, it is recommended to enable following debug options in '''GameCode > Weapons''' category:

* '''Disable aim modifiers''' - disables weapon sway - this is especially handy when trying to do some small tweaks to zeroing * '''Disable character aim modifiers''' * '''Disable weapon offset''' {{Feature|informative|You can change '''Attachment Type''' class after initial selection by clicking on that property with '''Right Mouse Button''' and selecting '''Change Class''' option from the context menu.}} === Setting base sight properties === [[File:armareforger-new-weapon-optic-base-sights-setup.png|thumb|631x631px|'''BaseSights''' parameters]] Starting with properties defined in '''BaseSights''' section of '''SCR_2DPIPSightsComponent,''' following parameters, affecting general view properties, need to be adjusted: * Set '''Sight FOV Info''' by clicking on '''set class''' button next to it and selecting one of the available classes: **'''SCR_SightsZoomFOVInfo''' for fixed power scopes ***Set '''Base Zoom''' to match the lowest magnification ***Set '''Zoom Max''' to match the highest magnification ***Since '''Sample Optic''' has fixed 4x magnification, both '''Base Zoom''' & '''Zoom Max''' were set to value 4.0 **'''SCR_VariableSightsFOVInfo''' for variable power scopes [[File:armareforger-new-weapon-optic-primary-points.png|alt=|none|thumb|958x958px|Positions of various pivots in model]] Next on the list is setting of various Sights Points. Above you can find picture showing how they located *Set '''Sights Point Rear''' by clicking on '''set class''' button next to it and selecting '''PointInfo''' class **If you have placed '''empty object in the model''' itself like it was mentioned before, you can select in '''Pivot ID''' property '''optic_rear''' **If you '''don't have such object''' or you want to '''tweak position''' compared to position provided by '''Pivot ID''', then use '''Offset & Angels''' parameters and place this point at the center of '''rear ocular''' *Set '''Sights Point Front''' by clicking on set class button next to it and selecting '''PointInfo''' class **Select '''optic_front''' in '''Pivot ID''' parameter or set offsets manually **Point should be placed straight in front of rear sight point (X and Y should match) on the plane of the '''Objective''' - front glass *Set '''Sights Position''' (main camera eye) behind the rear sight **'''Sights Point Rear''' , '''Sights Front Position''' and '''Sights Position''' should all be aligned on single axis for simplicity sake **Use '''Camera Offset''' property to move camera to middle of the objective if the objective is in not aligned with Sights **Use '''Camera Angles''' property to rotate the scope camera if necessary *Enable '''Sights Priority''' parameter if you want to automatically use that optic when its attached instead of i.e. ironsights. {{Messagebox|'''Tip''': You can set '''Offset''' by moving transformation widget in '''World Editor''' viewport|✩|#88cc88}}[[File:armareforger-new-weapon-optic-moving-offset.gif]]

===Setting 2D scope=== 2D scope configuration involves making changes in two sections of '''SCR_2DPIPSightsComponent - Sights & 2DSights.''' As name might suggest, '''Sights''' section contain elements which are shared between both 2D & PIP modes.

====Scope view====

* Set '''[https://en.wikipedia.org/wiki/Objective_(optics) Objective] [https://en.wikipedia.org/wiki/Field_of_view FOV]''' in degrees ** Try to find real life value, searching for "''optic name FOV"'' should usually yield some results. *** '''Examples''': Field of View value of PSO-1 can be [https://en.wikipedia.org/wiki/PSO-1#Specifications found on Wikipedia] , and [https://www.trijicon.com/products/details/ta31rco-m4cp TA-31RCO specification] is published on producer page *** '''Sample Optic''' is sort of fictional design loosely based on some existing carry handle integrated sights like G36 or VHS-2 have. Usually, such scopes suffered from poor to mediocore FOV so in this case it was set at '''4.9 degree''' - bit more that Colt 4x20 but less than PSO-1 *Set '''Magnification''' in '''Sights''' section to match '''Base Zoom''' in '''Sight FOV Info''' *Tweak '''Objective Scale''' so that the optic does not leak out of Full HD 16:9 screen (''recommended, optional'') - expected values are between 1 and 0.5 *Tweak '''Vignette''' scale similarly, style it as you like {{Messagebox|'''Tip''': You can tweak '''Objective Scale''' & '''Vignette Scale''' parameters by changing values in the Diag Menu and then copy paste those values to prefab|✩|#88cc88}}[[File:armareforger-new-weapon-optic-debug-vignette.gif]]

====Reticle ==== [[File:armareforger-new-weapon-optic-pos-markings.png|thumb|PSO-1 texture with measurements in '''pixels''' and in '''Warsaw Pact miliradians''']]Next step will be configuration of reticle itself. Steps to that are listed below: * Set '''Reticle Texture''' and '''Reticle Glow Texture''' ** Here you should assign texture created in previous steps

*Set '''Reticle Base Zoom -''' this will define whether reticle will behave like [https://www.leupold.com/blog/post/front-focal-plane-optics-vs-rear-focal-plane-optics front or rear focal plane optic] **For '''front focal plane''' reticle, this should be set to zero ***'''Front focal plane''' reticle stays the same in relation to target no matter the magnification. In other words, reticle '''changes its size depending on the current magnification'''. **For '''rear focal plane''' reticle, this should match '''Magnification''' or any zoom level that should be used as reference for '''Reticle Angular Size''' ***'''Rear focal plane''' reticle stays the same in all magnification levels.

*Set '''Reticle Angular Size''' in degrees **Reference marks angular size/distance **The further away these marks are from each other, the better

*Set '''Reticle Portion''' in percent **Part of reticle that should match the specified '''Reticle Angular Size''', allowing quick adaptation and verification of different reticle textures

===== Example 1: PSO-1 ===== [[File:armareforger-new-weapon-optic-1p78-reticle.png|thumb|1P78 reticle with measurements of lines in Warsaw Pact miliradians]] PSO-1 small vertical markings are spaced in 1 USSR mils apart. Large notch with number 10 below it represents '''10 [https://en.wikipedia.org/wiki/Milliradian Warsaw Pact miliradians]''' from the center of the reticle.

As it was mentioned above, the large the distance, the better result, so in this case distance between two large notches with 10 under was used. Those notches are 20 Warsaw Pact mils apart and we still need to convert it to degrees. This can be done [https://en.wikipedia.org/wiki/Milliradian#Conversion_table_for_compasses using miliradian conversion table] - from that page you can get that one '''Warsaw Pact milliradian''' equal to 0.06 degrees.

By doing quick math, we get <math>20 * 0.06 = 1.2</math> degree, which can be filled in '''Reticle Angular Size''' parameter field.

Next, '''Reticle Portion''' parameter can be quickly determined by measuring distance in pixels between previously used reference points (''large notches with 10 under it - see picture on the right side'') in 2D software (''GIMP/Photoshop'') and then determining proportion of that distance to total width of reticle image.

In this case PSO-1 the horizontal 10 mils marks are 304 pixels apart on 1024x1024 texture. By dividing that distance by width, we get the ratio which can be filled in that parameter <math>304 / 1024 = 0.29687</math>

===== Example 2: Sample Optic ===== Sample Optic is sort of semi fictional design so no concrete data is available in this case. Usually reticles, on such sights with poor FOV, takes large portion of AFOV. Since this scope was set to 4.9 degrees of FOV, setting '''Reticle Angular Size''' parameter to '''2.2''' seems plausible.

Reticle of Sample Optic fills most of the texture, which is kind of the most efficient method quality/file size wise. Reticle itself is 985 pixels wide, while whole textures is 1024x1024px square. By doing quick math and dividing reticle with by texture width (<math>985 / 1024 \approx 0.96</math>), we get '''Reticle Portion''' which is equal to around '''0.96.'''{{Clear}} ===Setting PIP scope=== After 2D settings are set, it is possible to move to configuration of '''Picture in Picture''' sight. Parameters related to PIP optic are located in '''PiPSights''' section of '''SCR_2DPIPSightsComponent'''

==== Scope view ==== Starting with scope view, here are steps:{{Feature|important|Make sure your '''2D scope is set up properly''', otherwise you may have to set it up again}} *Tweak sight point distance from rear sight, until '''[http://www.handprint.com/ASTRO/IMG/tfov.gif apparent FOV]''' matches the FOV of 2D sight closely **You can switch between 2D & PIP mode in Gameplay section of in game settings. Use F10 key to access pause menu in Workbench **[[File:armareforger-new-weapon-optic-changing-settings.gif]] [[File:armareforger-new-weapon-optic-pip-sights-reticle.png|thumb|515x515px|'''PIPSights''' section]]

* Tweak '''Scope Radius''' until the PIP sight image is as close match with 2D as possible

*Tip: Use '''Show PIP settings diag''' to quickly find correct value

*'''Sight Position''' attribute '''Angles''' can be used to rotate the main camera if necessary <gallery mode="nolines" widths="500" heights="300"> File:armareforger-new-weapon-optic-view-PIP.png|'''PIP view''' File:armareforger-new-weapon-optic-view-2d.png|'''2D view''' </gallery>

====Reticle==== First step in configuring PIP reticle is assigning [[Arma Reforger:Weapon Optic Creation#Material|previously created reticle material]] (in this case it is '''''Optic_SampleOptic_HDR.emat''''') to '''Scope HDR Matrial''' property in '''PiPSights''' section.{{Feature|important|'''Matrial''' is known typo of material}} Once that is done, perform following steps: *To avoid misalignment, the '''reticle movement''' option in HDR material should be disabled *Tweak vignette settings in HDR material so that it looks similarly to 2D sight {{GameCategory|armaR|Modding|Assets|Tutorials}}

{{GameCategory|armaR|Modding|Assets|Weapon Creation|Tutorials}}

= Arsenal integration =

To make your optics more accessible to players in-game, you can add it to the arsenal. This involves including the optics prefab in the '''Entity Catalog''' so that it appears in the game's inventory and supply systems.

'''Include in Entity Catalog:''' *Ensure that your suppressor prefab is added to the '''Weapon Attachments''' '''Entities''' list within the '''Entity Catalog''' of selected faction that you want to expose your weapon.'''Item Type''' should be set to '''WEAPON_ATTACHMENT''' ** '''Item Mode''' should be set to '''ATTACHMENT''' **Adjust '''Supply Cost''' in line with vanilla *This allows the game to recognize the suppressor as available equipment. For detailed instructions on how to add items to the '''Entity Catalog''' and configure arsenals, please refer to the [[Arma Reforger:Weapon Creation/Prefab Configuration#Crate%20Filling|Crate Filling]] section of the '''Weapon Creation''' documentation.
5yl7046w4ucdm07l6n3ktvrnr349eww

# Arma Reforger:Weapon Stats-Modifing Attachments

5050
47105
371015
370690
2025-02-26T12:32:08Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
371015
wikitext
text/x-wiki
{{TOC|side}}

= Overview = Some attachments, like Bayonets and Silencers, change vital internal stats of a weapon they are attached to. These changes are maintained and controlled by the weapon stats manager. The basic variant is '''SCR_WeaponStatsManagerComponent''' and needs to be put on a weapon in order to make it "modifiable". The class can be overridden/inherited by a mod in order to introduce more moddable weapon attributes.

There are a number of rules that need to be followed to make this work. I'll go over them below. Every attachment is its own entity, and must have an '''InventoryItemComponent'''. The latter has a list of custom attributes which we use as a basis for modification. If an attachment adds muzzles, like an UGL, it also '''''must have''''' its own '''SCR_WeaponStatsManagerComponent''' or subclass thereof.

=Weapon Stats that can be modified= There are a number of stats on a weapon that can be modified without resorting to modding. We divide these into two groups:

*'''Muzzle-Specific''': Attributes that override the specifics of a muzzle '''''MUST have''''' an attachment slot that is a child of the '''MuzzleComponent''', so that the system can easily assign the right muzzle to the attachment. That means that if a weapon has more than one muzzle, or there are extra muzzles on attachments (like a Grenade Launcher), a muzzle specific attachment only modifies the muzzle it is attached to. For example, a silencer makes the rifle more quiet, but not the UGL. *'''Global''': Attributes that override global parameters of the weapon, for example obstruction length.

Any attachment can have any number of global attributes it modifies, but only muzzle attachments can have extra muzzle specific attributes.

The following table lists all stats that can currently be modified, their data type, and whether they are global or muzzle specific:

{| class="wikitable" |+ !Parameter !Scope !Data Type !Purpose |- |Muzzle Velocity Coefficient |Muzzle |float |A modifier for the muzzle velocity of the bullet being fired. This is a floating point value that is multiplied with the existing muzzle velocity coefficient as defined by the weapon. A value of 1.0 does not change anything, any value greater than one will make the bullet faster, while a lower value will make it slower. Most suppressors add a bit of muzzle velocity because of the extra barrel length |- |Dispersion Factor |Muzzle |float |A modifier for the muzzle dispersion. Normally, a longer barrel means less dispersion. A value of 1.0 is neutral, while a value between 0 and 1 will make the weapon shoot more precise. This value scales the dispersion diameter specified in the muzzle component, ''not'' the range. |- |Linear Recoil Factors |Muzzle |vector |A three element vector that is used to scale the linear recoil curve of a muzzle. 1.0 again is a neutral value, while values between 0 and 1 make the weapon have less linear recoil in that direction, and values greater than 1 will make the recoil stronger. The values in the vector are applied to x, y and z direction, respectively |- |Angular Recoil Factors |Muzzle |vector |As above, but with angular instead of linear recoil |- | Turn Factor Recoil Factors |Muzzle |vector |As above but for turn recoil curves. The Z value is stored but since the Z value is usually set to zero in a weapon, it will likely not have any inmpact. |- |Override Shot Sound |Muzzle |boolean |A boolean that specifies that the weapon is silenced. A silenced weapon will trigger SOUND_SUPPRESSED_SHOT sound event instead of the normal SOUND_SHOT. It can also be used to modify AI reaction. |- |Extra Obstruction Length |Global |float |A floating point number (in meters) that defines how much longer the weapon becomes through this attachment. This is used for weapon obstruction, meaning that a mounted suppressor will trigger obstruction earlier than a normal weapon.

See also Hierarchies below |- |Muzzle Effect Override |Muzzle | boolean |If set, muzzle effects of the weapon may be disabled and replaced by those on the attachment. Most notably, effects that have the "Override by Attachment" flag set will not play if the attachment sets this flag. Instead, it will use the effects on the attachment. Some effects like case ejection and ejection port smoke normally come without the override flag set, and those will always be played.

See also Hierarchies below |- |Is Bayonet |Global |bool |If this flag is set, then the melee attacks with this weapon will use a different animation and sound effects to make it look like the player is stabbing with a bayonet instead of the buttstock hit. |- |Melee Damage |Global | float |This is a floating point multiplier that is applied to the weapon damage when this attachment is fitted to the weapon. Typically this would be used for bayonets, but it isn't restricted to it. |- |Melee Range |Global |float |A factor for the weapon range when using melee attacks. It's a multiplier applied to the existing melee range of the weapon |- |Melee Accuracy |Global |float |A factor for weapon accuracy with melee attacks. The factor is multiplied by the existing melee accuracy of the weapon, meaning that positive values lower than 1.0 make the attack more accurate (the accuracy specifies the radius of a sphere that is used to "track" for hit objects). |}

==Hierarchies== Attachments can be mounted on other attachments. Certain rules apply here:

*If an attachment is attached to a muzzle, all subsequent attachments that are attached to this specific attachment inherit the muzzle they are assigned. A usage example is given below. *Rules apply to the values depending on hierarchy. Most factors are multiplied along the chain of attachments, while booleans usually only require a single attachment in the chain to have this flag set for it to take effect. *Overridden muzzle effects are subject to the same rules as the original muzzle's effect, meaning that if an attachment further down the chain overrides muzzle effects, then muzzle effects on all attachments before that may be skipped if the have the "override by attachment" flag. * '''Obstruction Length''' is a special case - for this, the longest chain of attachments is used, measured in the given obstruction length (not number of attachments)

Let's take as an example a weapon that has its barrels as attachments, You would have a generic 16 inch barrel, and a 14 inch barrel. Both barrels have an attachment point at the tip to mount a flash hider/muzzle brake or suppressor.

*The ammo would be attuned to the 16 inch barrel, making its muzzle velocity factor 1.0. *A muzzle brake would not change that, so it doesn't override the value *A suppressor would make the bullet 5 percent faster.

That means the 16 inch barrel has a factor of 1.0 , and the suppressor has 1.05.

The 14 inch barrel is shorter so it's muzzle velocity factor is 0.9.

This gives a total velocity factor of:

*1.0 with the 16 inch barrel *0.9 with the 14 inch barrel. * 1.05 with a silenced 16 inch barrel *0.945 with a silenced 14 inch barrel

Likewise, both barrels would have a muzzle effect attached that has an exaggerated muzzle flash which is set to be overridden by attachment. A typical basket-type muzzle brake would have an effect with the typical "bloom".-effect. Finally a silencer would have its own, subdued effect. The muzzle brake must be removed (at least on the M4/M16) in order to attach a silencer, so any attachment would always override the barrel's effect.

{{Messagebox|More details about relations between barrel length and velocity can be found on [[Arma_Reforger:Weapon_Creation/Prefab_Configuration#Barrel_Length_vs_Muzzle_Velocity|Weapon Creation]] page|✩|#88cc88}} ===Attaching/Detaching Hierarchies=== An entity getting attached may, by itself, already have other attachments on it, and it may do so without having its own stats manager. For example, consider a weapon whose barrel is an attachment itself (Attachment resp. attaching doesn't necessarily be a user action, prefabs will also get "attached" to the weapon in terms of code path). That barrel might come with a muzzle brake already attached, and both might modify certain aspects of the weapon, like muzzle velocity, dispersion etc. There will definitely be a difference in muzzle flash between a naked barrel and a barrel with a muzzle brake or flash hider.

When a hierarchy is attached (runtime or during initialization), the attachment is performed from the weapon outwards. This means that the barrel is handled first, followed by the muzzle brake. This is so that the muzzle break "overlays" any changes done through the barrel, since they will be more relevant.

Detaching works the other way around. The attachment furthest down the chain is detached first (in the example, the muzzle brake), then the barrel.

It is of course sill possible to only detach the muzzle brake and replace it with a flash hider or suppressor.

=How to Configure an Attachment=

==SCR_WeaponAttachmentAttributes== As part of its custom attribute list, the typical '''InventoryItemComponent''' has a '''WeaponAttachmentAttributes''' entry that, by default, only lists an Attachment Type class that is used to find out if an attachment fits a certain slot. '''SCR_WeaponAttachmentAttributes''' is a "smart" subclass of that, but in itself doesn't add functionality. That is done by subclasses. These are the currently defined subclasses:

{| class="wikitable" |{{Link|enfusion://ScriptEditor/Scripts/Game/Inventory/SCR_WeaponAttachmentSuppressorAttributes.c;1|SCR_WeaponAttachmentSuppressorAttributes}} |This offers the typical values of a weapon suppressor attached to a muzzle like muzzle velocity coefficient, dispersion, muzzle effects, silenced, obstruction length and recoil factors |- |{{Link|enfusion://ScriptEditor/Scripts/Game/Inventory/SCR_WeaponAttachmentBayonetAttributes.c;1|SCR_WeaponAttachmentBayonetAttributes}} |This offers the typical values of a bayonet, like weapon melee damage/range/accuracy, is bayonet and obstruction length |} Currently, only one of these can be added at any time (all subsequent ones are ignored). In the future, though, this behaviour might change. This is because the '''ItemAttributeCollection''' API does not currently support anything but finding a single attribute.

=Under the Hood - How to make your own attachments=

==Custom SCR_WeaponAttachmentAttributes== If an attachment doesn't fit in the above categories, a subclass of '''SCR_WeaponAttachmentAttributes''' can be used. Any subclass must implement two scripted functions:<enforce> class SCR_WeaponAttachmentAttributes : WeaponAttachmentAttributes { /*! Apply Modifiers to weapon on attach

This is called when an attachment has been attached to a weapon. \param statsManager The stats manager that called this function. All modifiers should be set through this \param muzzleIndex The index of the muzzle, if applicable. This has no real meaning to this function except that it should be passed on to muzzle related functions. Can be -1 (which indicates that this attachment was done on a non-muzzle attachment slot) or a non-zero integer. See below \param attachedEntity The entity being attached

The muzzle index can be interpreted only as a far as -1 means that the attachment was not attached to a muzzle. Other than that, the index should be passed on to functions without modification.

*/ bool ApplyModifiers(BaseWeaponStatsManagerComponent statsManager, int muzzleIndex, IEntity attachedEntity) { return false; }

/*! Clear the modifiers from a weapon on detach This is called before an attachment is removed from a weapon. \param statsManager The stats manager that called this function. All modifiers should be set through this \param muzzleIndex The index of the muzzle, if applicable. This has no real meaning to this function except that it should be passed on to muzzle related functions. Can be -1 (which indicates that this attachment was done on a non-muzzle attachment slot) or a non-zero integer. \param attachedEntity The entity being detached

See also ApplyModifiers

*/ void ClearModifiers(BaseWeaponStatsManagerComponent statsManager, int muzzleIndex, IEntity attachedEntity) { } } </enforce>

As an example, here is the scripting of the '''SCR_WeaponAttachmentSuppresorAttributes''':

<spoiler> <enforce> class SCR_WeaponAttachmentSuppressorAttributes : SCR_WeaponAttachmentAttributes { [Attribute("1.0", UIWidgets.EditBox, "Muzzle Velocity Coefficient. Values >1 speed up the bullet, values below slow it down")] protected float m_fMuzzleSpeedCoefficient; [Attribute("1", UIWidgets.CheckBox, "Override sound for shots")] protected bool m_bOverrideShot; [Attribute("1", UIWidgets.CheckBox, "Override muzzle effects")] protected bool m_bOverrideMuzzleEffects; [Attribute("1.0", UIWidgets.EditBox, "Muzzle Dispersion Factor. Affects the radius of impact at the given range in the weapon. Smaller than 1.0 makes the weapon more accurate")] protected float m_fMuzzleDispersionFactor;

[Attribute("0.0", UIWidgets.EditBox, "Extra Obstruction Length")] protected float m_fExtraObstructionLength;

[Attribute("1 1 1", "Linear Recoil Factors for X/Y/Z Direction. Smaller values reduce recoil.")] protected vector m_vLinearFactors; [Attribute("1 1 1", "Angular Recoil Factors for X/Y/Z Direction. Smaller values reduce recoil.")] protected vector m_vAngularFactors; [Attribute("1 1 1", "Turning Recoil Factors for X/Y/Z Direction. Smaller values reduce recoil.")] protected vector m_vTurnFactors;

override bool ApplyModifiers(BaseWeaponStatsManagerComponent statsManager, int muzzleIndex, IEntity attachedEntity) { if (muzzleIndex == -1) return false; // Should not happen

if (!statsManager.SetMuzzleVelocityCoefficient(attachedEntity, muzzleIndex, m_fMuzzleSpeedCoefficient)) return false;

if (!statsManager.SetMuzzleDispersionFactor(attachedEntity, muzzleIndex, m_fMuzzleDispersionFactor)) return false;

if (m_bOverrideShot) if (!statsManager.SetShotSoundOverride(attachedEntity, muzzleIndex, true)) return false;

if (m_bOverrideMuzzleEffects) { if (!statsManager.SetMuzzleEffectOverride(attachedEntity, muzzleIndex, true)) return false; array<Managed> comArray = {}; attachedEntity.FindComponents(MuzzleEffectComponent, comArray); foreach (Managed component : comArray) { MuzzleEffectComponent muzzleEffect = MuzzleEffectComponent.Cast(component); if (muzzleEffect) statsManager.AddMuzzleEffectOverride(attachedEntity, muzzleIndex, muzzleEffect); } }

if (!statsManager.SetExtraObstructionLength(attachedEntity, m_fExtraObstructionLength)) return false;

if (!statsManager.SetRecoilLinearFactors(attachedEntity, muzzleIndex, m_vLinearFactors)) return false;

if (!statsManager.SetRecoilAngularFactors(attachedEntity, muzzleIndex, m_vAngularFactors)) return false;

if (!statsManager.SetRecoilTurnFactors(attachedEntity, muzzleIndex, m_vTurnFactors)) return false;

return true; }

override void ClearModifiers(BaseWeaponStatsManagerComponent statsManager, int muzzleIndex, IEntity attachedEntity) { if (muzzleIndex == -1) return; statsManager.ClearMuzzleVelocityCoefficient(attachedEntity, muzzleIndex); statsManager.ClearMuzzleDispersionFactor(attachedEntity, muzzleIndex);

if (m_bOverrideShot) statsManager.ClearShotSoundOverride(attachedEntity, muzzleIndex);

if (m_bOverrideMuzzleEffects) statsManager.ClearMuzzleEffectOverride(attachedEntity, muzzleIndex);

statsManager.ClearExtraObstructionLength(attachedEntity); statsManager.ClearRecoilLinearFactors(attachedEntity, muzzleIndex); statsManager.ClearRecoilAngularFactors(attachedEntity, muzzleIndex); statsManager.ClearRecoilTurnFactors(attachedEntity, muzzleIndex); } } </enforce></spoiler>

==SCR_WeaponStatsManagerComponent== Each entity that has a modifiable attributes must have its own '''SCR_WeaponStatsManagerComponent'''. This usually only affects attachments that have their own muzzle, like an under barrel grenade launcher, and only if that muzzle can be modified. If a weapon doesn't have a stats manager, it will function normally but any attachment will not cause any stats modification. Likewise, an attached grenade launcher (for example) would not support changing any attributes if there is no stats manager component on it.

If an attachment has its own stats manager, then muzzle specific attributes are handled by that stats manager, while global attributes are passed along to the parent.

=BaseWeaponStatsManagerComponent API= '''BaseWeaponStatsManagerComponent''' has a set of at least three functions per modifiable attribute. They usually follow the same scheme:

*'''SetXXX''' is used to override a weapon stat * '''ClearXXX''' is used to clear the override and return to "normal" values for this attachment *'''GetXXX''' is used to see if and how the attribute is overridden

===SetXXX === Setters set the override on a specific attachment, and cause a recalculation of the override values.

Setters usually have two or three arguments, depending on whether they set a global or muzzle attribute:

#The first argument is always the entity that is being attached/detached. #The second argument depends on the scope of the changes stat. If it is a muzzle stat, there is a muzzle index passed in as second argument, which specifies which muzzle this attach operation went to. This value is always passed in via the ApplyModifier call, and passing anything else is an error #The third (or second, depending on scope) parameter is the value(s) to set.

'''SetXXX''' returns true on successful completion. It returns false when the value could not be modified, for example, if a muzzle stat is modified and the muzzle index is -1.

===ClearXXX === Clear calls clear the override settings on a specific attachment and cause a recalculation of the override values.

They usually come with one or two arguments:

#The first argument is the entity that is being attached/detached # If a muzzle value is cleared, the second argument is the index of the muzzle

'''ClearXXX''' returns true if successful, or false if there was an error, typically if a muzzle index was not appropriate

===GetXXX=== While the '''SetXXX''' and '''ClearXXX''' calls are usually only used while attaching/detaching, Get calls are used within the components that can be modified. For example, the '''WeaponSoundsComponent''' will check if the weapon is suppressed using this call type and issue the appropriate sound event.

The usually have only one or two arguments:

#The first argument is the muzzle index, passed in only for stats of the Muzzle category. #The second argument is a reference to a variable where the result is stored.

The return value of the function is true if the stat is overridden, and the variable reference is updated with the value of the override. If the value is not overridden, the function returns false.

'''Example of using a Getter''' <enforce> if (m_statsManager) // If we have a stats manager for our component... { float fDamageFactor; if (m_statsManager.GetMeleeDamageFactor(fDamageFactor)) // If melee damage was overriden return fDamageFactor * m_fDamage; // Apply the damage modifier and return the result } return m_fDamage; // return the result if no stats manager </enforce>

==API== The following table lists the appropriate calls for each of the modifiable stats:

{| class="wikitable" |Muzzle Velocity Coefficient |<enforce inline="">bool SetMuzzleVelocityCoefficient(IEntity attach, int iMuzzleIndex, float muzzleCoeff)</enforce> <enforce inline="">bool ClearMuzzleVelocityCoefficient(IEntity attach, int iMuzzleIndex)</enforce>

<enforce inline="">bool GetMuzzleVelocityCoefficient(int iMuzzleIndex, out float coeff)</enforce> |- |Dispersion Factor |<enforce inline="">bool SetMuzzleDispersionFactor(IEntity attach, int iMuzzleIndex, float fFactor)</enforce> <enforce inline="">bool ClearMuzzleDispersionFactor(IEntity attach, int iMuzzleIndex)</enforce>

<enforce inline="">bool GetMuzzleDispersionFactor(int iMuzzleIndex, out float fFactor)</enforce> |- |Linear Recoil Factors |<enforce inline="">bool SetRecoilLinearFactors(IEntity attach, int iMuzzleIndex, vector vLinearFactors)</enforce> <enforce inline="">bool ClearRecoilLinearFactors(IEntity attach, int iMuzzleIndex)</enforce>

<enforce inline="">bool GetRecoilLinearFactors(int iMuzzleIndex, out vector vLinearFactors)</enforce> |- |Angular Recoil Factors |<enforce inline="">bool SetRecoilAngularFactors(IEntity attach, int iMuzzleIndex, vector vAngularFactors)</enforce> <enforce inline="">bool ClearRecoilAngularFactors(IEntity attach, int iMuzzleIndex)</enforce>

<enforce inline="">bool GetRecoilAngularFactors(int iMuzzleIndex, out vector vAngularFactors)</enforce> |- |Turn Factor Recoil Factors |<enforce inline="">bool SetRecoilTurnFactors(IEntity attach, int iMuzzleIndex, vector vTurnFactors)</enforce> <enforce inline="">bool ClearRecoilTurnFactors(IEntity attach, int iMuzzleIndex)</enforce>

<enforce inline="">bool GetRecoilTurnFactors(int iMuzzleIndex, out vector vTurnFactors)</enforce> |- |Override Shot Sound |<enforce inline="">bool SetShotSoundOverride(IEntity attach, int iMuzzleIndex, bool bOverride)</enforce> <enforce inline="">bool ClearShotSoundOverride(IEntity attach, int iMuzzleIndex)</enforce>

<enforce inline="">bool GetShotSound(int iMuzzleIndex, out bool bOveride)</enforce> |- |Extra Obstruction Length |<enforce inline="">bool SetExtraObstructionLength(IEntity attach, float extraLength)</enforce> <enforce inline="">bool ClearExtraObstructionLength(IEntity attach)</enforce>

<enforce inline="">bool GetExtraObstructionLength(out float extraLength)</enforce> |- |Muzzle Effect Override |<enforce inline="">bool SetMuzzleEffectOverride(IEntity attach, int iMuzzleIndex, bool bOverrde)</enforce> <enforce inline="">bool ClearMuzzleEffectOverride(IEntity attach, int iMuzzleIndex)</enforce>

<enforce inline="">bool GetMuzzleEffectOverride(int iMuzzleIndex, out bool bOverride)</enforce> |- |Is Bayonet |<enforce inline="">bool SetIsBayonet(IEntity attach, bool bIsBayonet)</enforce> <enforce inline="">bool ClearIsBayonet(IEntity attach)</enforce>

<enforce inline="">bool GetIsBayonet(out bool bIsBayonet)</enforce> |- |Melee Damage |<enforce inline="">bool SetMeleeDamageFactor(IEntity attach, float fDamageFactor)</enforce> <enforce inline="">bool ClearMeleeDamageFactor(IEntity attach)</enforce>

<enforce inline="">bool GetMeleeDamageFactor(out float fDamageFactor)</enforce>

|- |Melee Range |<enforce inline="">bool SetMeleeRangeFactor(IEntity attach, float fRangeFactor)</enforce> <enforce inline="">bool ClearMeleeRangeFactor(IEntity attach)</enforce>

<enforce inline="">bool GetMeleeRangeFactor(out float fRangeFactor)</enforce>

|- |Melee Accuracy |<enforce inline="">bool SetMeleeAccuracyFactor(IEntity attach, float fAccuracyFactor)</enforce> <enforce inline="">bool ClearMeleeAccuracyFactor(IEntity attach)</enforce>

<enforce inline="">bool GetMeleeAccuracyFactor(out float fAccuracyFactor)</enforce> |}

===Special case: Muzzle Effects=== Muzzle Effects are a special case. The attachment must add all effects that it has and wants to play to the stats manager via the call<enforce> bool AddMuzzleEffectOverride(IEntity attach, int iMuzzleIndex, MuzzleEffectComponent muzzleEffect) </enforce>

See the example for silencers above for an example how to use this. These muzzle effects stay in effect until the appropriate <enforce inline="">ClearMuzzleEffectOverride</enforce> call.

{{GameCategory|armaR|Modding|Assets|Weapon Creation|Tutorials}} {{GameCategory|armaR|Modding|Assets|Tutorials}}
bmwyldbpza9zkdgf0r07m75javmairl

# Arma Reforger:Weapon Suppressor Creation

5050
47104
370912
370680
2025-02-26T12:31:00Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370912
wikitext
text/x-wiki
{{TOC|side}}{{Messagebox|'''Overview''' This tutorial covers following topics:

* Preparing the 3D model and ensuring correct orientation. * Configuring the suppressor as an accessory in the game. * Creating the suppressor prefab and configuring its components. * Integrating the suppressor with a weapon.|💬|#CDF}}{{Feature|informative|This tutorial guides you through the process of creating a custom suppressor (muzzle attachment) for a weapon in Arma Reforger . The steps are structured similarly to the Weapon Optic Creation tutorial and cover asset preparation, configuration, and integration with a weapon.}}{{Messagebox|Sources files for this tutorial can be found on [https://github.com/BohemiaInteractive/Arma-Reforger-Samples/tree/main/SampleMod_NewWeapon '''Arma Reforger Samples Github repository''']|📥|orange}} ----

== Prerequisites == * Basic understanding of '''Enfusion Engine''' and '''Arma Reforger''' modding. * Access to a 3D modeling tool that can export '''FBX''' files. * Familiarity with scripting in '''Enforce Script''' . * A mod tag or identifier (e.g., <code>SampleMod_NewWeapon</code>) for naming conventions. * Required tools and software: ** '''Enfusion Workbench''' . ** '''Enfusion Blender Tools (EBT)''' (optional but recommended for Blender users).

----

== Structure Preparation == While sticking to official structure is not mandatory and there are no engine restrictions asset wise about it, it is recommended to follow guidelines listed here - [[Arma Reforger:Directory Structure|Data (file) structure]] - to ensure that all automation plugins are parsing your assets correctly and make it later easy to navigate.

Therefore, your first task will be preparing following file structure

== Preparing the Suppressor Asset ==

=== Model Orientation === Ensuring proper model orientation is crucial for correct attachment and in-game behavior. According to the [[Arma Reforger:FBX Import#Object%20Orientation|Arma Reforger: FBX Import]] guidelines:

* '''Blender and 3ds Max Users''' : ** The model should point along the '''positive Y-axis''' . * '''Maya Users''' : ** The model should point along the '''positive Z-axis''' .

If importing a model from another source (e.g., Arma 3), you may need to rotate it by 90 degrees to align correctly.

[[File:armareforger-new-weapon-suppressor-model-orientation.png|600x600px]]

=== Object Naming === Follow these naming conventions to ensure proper import and functioning:

* '''Level of Detail (LOD) Suffixes''' : ** Use <code>_LOD0</code>, <code>_LOD1</code>, etc., to indicate different LODs. ** Example: <code>Suppressor_LOD0</code>, <code>Suppressor_LOD1</code>.

Proper naming ensures that the engine correctly interprets your model's components during the import process. For a full list of naming conventions and detailed explanations, refer to the [[Arma Reforger:FBX Import#Naming%20Conventions|Arma Reforger: FBX Import - Naming Conventions]] page.

=== Adding Snap Points === [[File:armareforger-new-weapon-empty-create.png|thumb|437x437px|Adding Plain Axes aka empty objects to Blender scene]] Snap points are essential for correctly attaching the suppressor to weapons. For suppressor, it will be necessary to only add one empty object - '''snap_weapon.''' This can be achieved in those few steps:

# '''Create an Empty Object''' : #* In Blender, add an '''Empty''' object of type '''Plain Axes''' . #* Place it at the point where the suppressor will attach to the weapon. # '''Name the Empty Object''' : #* Set the name to <code>snap_weapon</code>. # '''Align the Empty Object''' : #* Ensure the empty object's orientation matches the weapon's attachment point. #* The forward direction (front) should align along: #** '''Positive Y-axis''' in Blender/3ds Max. #** '''Positive Z-axis''' in Maya. # '''Check Orientation''' : #* Verify that the <code>snap_weapon</code> aligns accurately with the suppressor's model. [[File:armareforger-new-weapon-suppressor-snap-orientation.png|600x600px]]

For detailed guidance, see [[Arma Reforger:Weapon Slots And Bones|Weapon Slots and Bones]] .{{Messagebox|'''Recommended read:''' Slot/snap points concept is described in [[Arma_Reforger:Weapon_Creation/Asset_Preparation#Add_Slots/Snap_Points|'''Weapon Creation''']] documentation

|📖|lightgrey}}{{Clear}} ===Collision Mesh=== Creating an efficient collision mesh optimizes performance and ensures accurate physical interactions. [[File:armareforger-new-weapon-suppressor-collider.png|thumb|600x600px|In this case convex collider from A3 was used]]

====Choosing Collider Shape ==== Select the appropriate collider shape based on your suppressor's geometry. The collision mesh doesn't have to be a specific type; you can choose from various collider shapes depending on what best fits your suppressor:

*'''Common Collider Types''' : **'''Box Collider''' **'''Convex Collider''' **'''Cylinder Collider''' **'''Sphere Collider''' **'''Capsule Collider''' **'''TriMesh Collider''' *'''Naming Colliders''' : **Name your colliders with appropriate prefixes to indicate their type. **While specific prefixes like <code>UBX_</code>, <code>UCX_</code>, etc., are typically used, focus on selecting the collider that best suits your model's shape {{Messagebox|'''Recommended read:''' More details about Inventory Configuration can be found on [[Arma Reforger:Weapon Optic Creation#Inventory system configuration|'''Weapon Optic Creation''']] documentation |📖|lightgrey}} ====Simplifying the Collider====

*'''Keep It Simple''' : Use the simplest shape that accurately represents the suppressor. *'''Performance Consideration''': Simplified colliders reduce computational overhead. *'''Avoid Complex Meshes''' : Complex collision meshes can negatively impact performance.

====Assigning Layer Preset and Game Material==== Assign appropriate properties to your collider:

*'''Layer Preset''' : <code>ItemFireView</code> ** This layer preset is appropriate for weapon attachments and ensures correct interactions in the game. *'''Game Material''' : <code>weapon_metal.gamemat</code> **This material provides appropriate physical properties and sound effects for metal weapon components.

=====How to Assign=====

#'''In Your 3D Software''' : #* '''Blender with EBT (Optional)''' : #**Use the '''EBT Object Tools''' to assign properties directly in Blender. #**Navigate to '''Object Properties''' > '''EBT Object Properties''' . #**Set '''Layer Preset''' and '''Game Material''' . Reference: [[Arma Reforger:Enfusion Blender Tools: Objects Tools|Enfusion Blender Tools: Object Tools]] . #*'''Other 3D Software''' : #**Add custom properties or user-defined attributes to colliders. #**Refer to [[Arma Reforger:FBX Import#Setting%20Layer%20Preset%20on%20colliders%20(usage%20parameter)|Setting Layer Preset on Colliders (Usage Parameter)]] . #'''In Enfusion Workbench Import Settings''' : #* If not set in the 3D software, you can assign them during import. #* In the '''Import Settings''' , select your collider. #**Set '''Usage''' to <code>ItemFireView</code>. #**Assign '''Game Material''' to <code>weapon_metal.gamemat</code>. Reference: [[Arma Reforger:FBX Import#Setting%20Layer%20Preset%20on%20colliders%20(usage%20parameter)|FBX Import - Setting Layer Preset on Colliders]] .

===Exporting the Model=== [[File:armareforger-new-weapon-suppressor-export-ebt.png|thumb|332x332px|Exporting using Enfusion Blender Tools]] Export your model to the '''FBX''' format suitable for Enfusion.

*'''Using Enfusion Blender Toolkit (EBT) FBX Exporter''' (Optional): **Simplifies export and ensures compatibility. **'''Automatically imports & registers''' FBX in Workbench and enables "'''Export Scene Hierarchy'''". *'''Without EBT''' : **Manually register '''[[Arma Reforger:Weapon Creation/Asset Preparation#Model Import & Registration|Import & Register]]''' file **Manually enable '''"[[Arma Reforger:Weapon Creation/Asset Preparation#Skeleton & Hierarchy|Export Scene Hierarchy]]"''' in export settings. **Ensure export settings align with Enfusion requirements. [[File:armareforger-new-weapon-suppressor-imported-model.png|none|thumb|792x792px|Sample Suppressor imported into Workbench. When using Blender, you can verify if settings were correctly passed by inspecting '''Details''' or '''Import Settings'''.]]

==Texturing the Suppressor== Apply textures to give your suppressor the desired appearance.

====Enfusion Materials Creation====

*If the import of the model went fine, new Enfusion Materials (<code>.emat</code> files) should be created in the <code>Data</code> folder next to the model. *These new materials are named based on the material names in your 3D software. *By default, they use the <code>MatPBRMaterial</code> shader. [[File:armareforger-new-weapon-suppressor-material-setup.png|thumb|551x551px|Suppressor material setup]]

====Assigning Textures====

#'''Prepare Textures''' : #*Assuming you have already created PBR textures (Base Color, Normal Map, etc.) using a tool like Substance Painter. #*You can use the '''BCR+NMO''' export preset shared on GitHub: #** GitHub Repository: [https://github.com/BohemiaInteractive/Arma-Reforger-Misc/tree/main/Art/Substance%20Export%20Profiles Arma Reforger Misc - Substance Export Profiles] #**''This preset ensures that your textures are in the correct format for Arma Reforger''. #'''Import Textures into the Game''' : #*Place your exported textures (e.g., <code>Suppressor_BCR.tga</code>, <code>Suppressor_NMO.tga</code>) into the appropriate folder within your mod's <code>Data</code> directory. #'''Assign Textures to Materials''' : #*In the Enfusion Workbench, navigate to the <code>.emat</code> files created during the import. #*Open each material and assign the corresponding textures to the appropriate fields: #**'''BCR Map''' : #***Assign your Base Color Roughness texture (<code>_BCR</code>). #**'''NMO Map''' : #*** Assign your Normal Map (<code>_NMO</code>). #*For detailed information on texture types and how to use them, refer to [[Arma Reforger: Textures]] . #'''Verify Material Settings''' : #*Ensure that all material properties are set correctly. #*Adjust parameters like '''Metallic''' , '''Roughness''' , and '''Specular''' as needed.

===Testing the Textures===

*'''Preview the Model''' : ** Use Enfusion Workbench to ensure textures appear correctly. *'''Check for Issues''' : **Look for texture stretching, UV mapping errors, or material issues. *'''Adjust as Necessary''' : **Make corrections in your 3D software or texture editor if needed.

==Creating the Attachment Script Class == Attachment config classes in Arma Reforger establish compatibility between weapons and their attachments. Any attachment using a specific attachment class will be compatible with any weapon that references that class. This system ensures that only appropriate attachments can be mounted on specific weapons, maintaining realism and game balance.

In many cases, existing attachment classes can be used. For example, muzzle attachment classes for 5.45 mm or 5.56 mm calibers are already defined in the game's vanilla data. However, since our '''Sample Weapon''' uses a 6.5 mm barrel, and this caliber doesn't exist in the vanilla data, we need to create a new attachment class specifically for it. This ensures that only attachments intended for 6.5 mm barrels can be mounted on the weapon.

If you intend to make i.e. suppressor suitable for M16, then you could skip that part and move to Creating the Suppressor Prefab part.{{Feature|informative|Existing vanilla muzzle attachment classes can be found in the '''{{Link|enfusion://ScriptEditor/Scripts/Game/Weapon/Attachments/Attachments_muzzle.c;110|Attachments_muzzle.c}}''' script file.}}

===Setting Up the Attachment Config Class=== To add a new attachment config class, you'll create a new script file in one of your mod's game script folders. For example, you can use the <code>Scripts/Game/Attachments/Muzzles</code> folder. If this folder doesn't exist, you'll need to create it manually.

====Naming Conventions==== Scripts in Arma Reforger don't use metafiles and can be overwritten if another mod uses the same script name and path. To prevent conflicts, it's recommended to use a unique naming convention for your script files and classes, such as prefixing them with your mod's tag.

*'''Use the <code>TAG_</code> Prefix:''' **Prefix your script file names and class names with a unique tag to prevent naming conflicts. ** '''In this case, the tag is <code>SampleMod_NewWeapon</code>.''' *'''Script File:''' **Use a clear and descriptive filename that includes your mod's tag. **'''Example:''' <code>SampleMod_NewWeapon_Attachments_Muzzle.c</code> *'''Class Names:''' **'''Attachment Config Class:''' Defines the configuration class for your muzzle attachment. ***'''Example:''' <code>AttachmentMuzzle65_39Class</code> **'''Attachment Class:''' Inherits from <code>AttachmentMuzzle</code>. ***'''Example:''' <code>AttachmentMuzzle65_39</code>

===Creating the Script File===

====Create the Script File====

#'''Navigate to Your Script Directory:''' #*Go to <code>/Scripts/Game/Attachments/Muzzles/</code> within your mod folder. #*If these folders don't exist, create them accordingly. #'''Create a New Script File:''' #*Right-click in the <code>Muzzles</code> folder and select '''New Script''' . #*Name the file <code>SampleMod_NewWeapon_Attachments_Muzzle.c</code>. #*Ensure the file extension is <code>.c</code>.

#

====Define the Attachment Config Class==== Open the newly created script file and define your classes exactly as follows: # <enforce> class AttachmentMuzzle65_39Class {}

AttachmentMuzzle65_39Class AttachmentMuzzle65_39Source;

class AttachmentMuzzle65_39 : AttachmentMuzzle { }; </enforce>

===Recompiling Scripts=== After creating the script, recompile the game scripts:

*'''In Script Editor''' : ** Use '''Compile and Reload Scripts''' (<code>⇧ Shift + F7</code>). *'''In World Editor''' : **Use '''Reload Game Scripts''' (<code>Ctrl + R</code>).

By following these steps, you've successfully created a new attachment config class for your 6.5 mm suppressor. This class will ensure proper compatibility between your suppressor and the '''Sample Weapon''' , while preventing incompatible attachments from being mounted.{{Messagebox|'''Recommended read:''' For more information on how attachment classes and inheritance affect compatibility, refer to the [[Arma_Reforger:Weapon_Optic_Creation#Attachments_configuration|Weapon Optic Creation: Attachments Configuration]] documentation|📖|lightgrey}}

==Creating the Suppressor Prefab==

===Create Suppressor Prefab=== [[File:armareforger-new-weapon-suppressor-prefab-structure.png|thumb|Prefab structure]]

When creating a suppressor prefab in Arma Reforger, it is recommended to inherit from the existing base suppressor prefab. The base suppressor prefab can be found at '''Prefabs\Weapons\Core\{{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Core/Suppressor_base.et|Suppressor_base.et}}'''. This prefab contains most of the necessary configurations for suppressor attachments.{{Feature|informative|In this article, [[Arma_Reforger:Resource_Manager:_Options#Register_.22enfusion:.2F.2F.22_protocol|'''Enfusion links''']] are used. With those links it is possible to open specific resource just by simply clicking on that link. Enfusion links '''has to be manually activated in Workbench options''' (Workbench -> Options -> Workbench -> Register "enfusion://" protocol) before it can be used}}To begin, navigate to '''Prefabs\Weapons\Core''' in the '''Resource Browser''' and locate the '''Suppressor_base.et''' prefab. Right-click on this prefab and select '''[[Arma Reforger:Data Modding Basics#Using "Inherit in..." function|Inherit in...]]''' from the context menu.{{Messagebox|Other method involves duplicating some already existing prefab - this might be handy if you are '''creating something similar to already existing weapons or don't want to add manually components'''. For instance if you are making some new AK74 suppressor variant, you could use '''{{Link|Arma_Reforger:Data_Modding_Basics#Using_.22Duplicate_to....22_function|Duplicate to "addon name"}}''' function on '''{{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Attachments/Muzzle/Suppressor_PBS4/Suppressor_PBS4_base.et|Suppressor_PBS4_base.et}}''' and then modify parameters of such new prefab.|✩|#88cc88}}When prompted to name your new prefab, consider adding a <code>_base</code> suffix to maintain consistency and clarity, especially if you plan to have multiple variants of the suppressor. For example, if your suppressor is named "''Suppressor_SampleSuppressor_01''," you might name the prefab '''Suppressor_SampleSuppressor_01_base.et''' . After creating the inherited prefab, move it to a more appropriate location, such as the '''Prefabs\Weapons\Attachments\Muzzle\''Suppressor_SampleSuppressor_01''''' directory.{{Feature|informative|Inheriting from the base suppressor prefab ensures that essential components and configurations are included, saving you time and reducing the potential for errors.}}

{{Clear}} ===Creating a Child Prefab=== In addition to the base prefab, it's advisable to create a child prefab without the <code>_base</code> suffix. This child prefab will inherit from your base suppressor prefab ('''SampleSuppressor_01_base.et''' ) and will be named '''SampleSuppressor_01.et''' .

To create this child prefab:

#'''Right-click''' on your base suppressor prefab ('''Suppressor_SampleSuppressor_01_base.et''' ) and select '''Inherit''' . #'''Name''' the new prefab without the <code>_base</code> suffix (e.g., '''Suppressor_SampleSuppressor_01.et''' ). #'''Move''' this prefab to the appropriate directory alongside your base prefab.

This child prefab will initially be empty and won't hold any unique information. However, it serves an important purpose, especially when reskins or additional variants are present. For example, you might create another variant called '''Suppressor_SampleSuppressor_01_camo.et''' for a camouflage version of the suppressor. '''Suppressor_SampleSuppressor_01_camo''' should inherit from '''Suppressor_SampleSuppressor_01_base.et''' as well. By making changes to the base prefab ('''SampleSuppressor_01_base.et''' ), those changes automatically propagate to all child prefabs, including '''Suppressor_SampleSuppressor_01.et''' and '''Suppressor_SampleSuppressor_01_camo.et''' . This organizational structure makes it easier to manage and update your assets consistently.

Once your prefabs are set up, you can start editing the base prefab to configure your suppressor. Open the prefab in '''[[Arma Reforger:Prefabs Basics#Prefab edit mode|Prefab Edit Mode]]''' by selecting it and clicking the '''Prefab Edit Mode''' button.

===Edit the Suppressor Prefab=== Configure components within your new prefab. [[File:armareforger-new-weapon-suppressor-inventory-configuration.png|thumb|1379x1379px|'''InventoryItemComponent''' configuration]]

====Configure MeshObject====

*Assign your suppressor's mesh to the <code>MeshObject</code> component.

====Configure InventoryItemComponent==== Next, configure the suppressor's inventory properties:

#Select the '''InventoryItemComponent''' . #Modify the '''Item Display Name''' to change how the suppressor appears in the inventory. #Adjust the '''Item Phys Attributes''' to change storage properties like weight and size. #Under '''Custom Attributes''' , adjust the '''PreviewRenderAttributes''' to change the suppressor's visibility in the inventory preview

{{Messagebox|'''Recommended read:''' More details about Inventory Configuration can be found on [[Arma Reforger:Weapon Optic Creation#Inventory system configuration|'''Weapon Optic Creation''']] documentation |📖|lightgrey}}

====Configure SCR_WeaponAttachmentSuppressorAttributes==== ====[[File:armareforger-new-weapon-suppressor-change-class.gif]]==== Now, configure the suppressor's attachment properties:

#Inside '''InventoryItemComponent''' find and select the '''SCR_WeaponAttachmentSuppresorAttributes''' in '''Custom Attributes''' list. #'''Attachment Type''' : Set this to the class you created earlier for the suppressor attachment point. ##Default, inherited selection can be changed by clicking on '''Attachment Type''' class with '''Right Mouse Button''' and selecting '''Change Class''' option from the context menu #'''Muzzle Speed Coefficient''' : Adjust this value to reflect the effect of the suppressor on bullet velocity. Suppressors often increase bullet speed due to the extended barrel effect. #'''Muzzle Dispersion Factor''' : Modify this to account for changes in bullet spread when the suppressor is attached. #'''Extra Obstruction Length''' : Increase this value to simulate the added length of the suppressor, affecting the [[Arma Reforger:Weapon Components#Obstruction Test Added Length|'''weapon's obstruction values''']] in the '''WeaponComponent''' . #'''Recoil Coefficients''' : #*'''Linear Factors''': Adjust to simulate changes in linear recoil. #*'''Angular Factors''': Adjust to simulate changes in angular recoil. #*'''Turn Factors''': Adjust to simulate changes in weapon turn dynamics due to the suppressor's weigh

===Configuring the SCR_MuzzleEffectComponent=== Set up the muzzle effect to represent the suppressor's visual effects when firing: #Select the '''SCR_MuzzleEffectComponent''' #'''Particle Effect''' : Assign a suitable particle effect (e.g., '''{{Link|enfusion://ResourceManager/$ArmaReforger:Particles/Weapon/Attachments/Suppressor_Carbine.ptc|Suppressor_Carbine.ptc}}''') to represent the suppressed muzzle flash. #'''Effect Position''' : #*Click on the '''Set Class''' button and select '''EntitySlotInfo''' . #*Name it appropriately (e.g., '''SuppressorEnd''' ). #*Adjust the '''Offset''' so the effect is positioned at the suppressor's muzzle end. #'''Reset On Fire''' : Disable this parameter to prevent the effect from resetting after each shot, creating a continuous smoke effect.

====Configure Attachment Obstruction (Optional)==== Configuring attachment obstruction ensures that certain attachments cannot be used simultaneously and that some attachments require others to be present. The '''SCR_WeaponAttachmentObstructionAttributes''' is already inherited from the parent suppressor prefab, so you do not need to add it manually.

To configure obstruction attributes:

#'''Navigate to SCR_WeaponAttachmentObstructionAttributes:''' #*In your prefab's '''Custom Attributes''' , locate the '''SCR_WeaponAttachmentObstructionAttributes''' entry. #'''Adjust Parameters as Needed:''' #*'''Attachment Type''' #**Class of attachment which following rules applies to #*'''Obstructed Attachment Types:''' #**List attachment types that cannot be mounted at the same time as this suppressor. #**For example, you might list muzzle devices or bayonets that are incompatible with the suppressor. #*'''Required Attachment Types:''' #**List attachment types that must be present for this suppressor to be attachable. #**For instance, if your suppressor requires a specific muzzle adapter or flash hider, include that attachment type here. #**''Example:'' An '''M9 Bayonet''' requires the '''A2 Flash Hider''' to be mounted first, as it attaches to the flash hider rather than directly to the barrel.

By configuring these attributes, you control which attachments can be used together and establish dependencies between attachments. This ensures that weapon customization behaves realistically and prevents players from combining incompatible attachments. [[File:armareforger-new-weapon-suppressor-m16-suppressor-obstruction.png|none|thumb|677x677px|Example M16 suppressor obstruction setup]] {{Clear}} ====Adjust ActionsManagerComponent (Optional)====

Depending on how your suppressor is positioned, you might need to adjust the positions of user and muzzle actions:

#Select the '''ActionsManagerComponent''' . #Within the '''Action Context''' , locate the user and muzzle actions. #Modify their '''Offset''' in the '''Position''' property to align them correctly with the suppressor's position [[File:armareforger-new-weapon-suppressor-action-context-adjustment.gif|913x913px]]{{Messagebox|'''Recommended read:''' [[Arma_Reforger:Action_Context_Setup|'''Action Context Setup''']] documentation |📖|lightgrey}} ===Localization=== Lastly, it's recommended to localize your suppressor asset:

*This ensures the suppressor's name is displayed correctly in the inspection menu and other UI elements. *Localize the '''Item Display Name''' using instruction listed on [[Arma Reforger:Mod Localisation]] page. [[File:armareforger-new-weapon-suppressor-missing-localisation.png|none|thumb|621x621px|Typical '''#AR-UserAction_Dettach''' error when accessory is not localized]]

==Integrating the Suppressor with a Weapon==

===Configure the Weapon's Muzzle Component===

To enable your weapon to accept and properly function with your newly created suppressor, you need to configure the weapon's components accordingly.

===Configuring the Weapon's Muzzle Component=== First, open your weapon prefab ('''SampleWeapon_01_base.et''' ) in '''[[Arma Reforger:Prefabs Basics#Prefab edit mode|Prefab Edit Mode]]''' .

====Add an AttachmentSlotComponent====

#'''Select the MuzzleComponent:''' #*In the '''Entity Tree''' , expand your weapon entity and locate the '''MuzzleComponent'''. #'''[[Arma Reforger:Prefabs Basics#Adding child component|Add AttachmentSlotComponent as Child Component of Muzzle Component]]'''

====Configure the AttachmentSlotComponent==== With the '''AttachmentSlotComponent''' selected, configure its properties:

#'''Pivot ID:''' #*Set the '''Pivot ID''' to the weapon's muzzle slot. #**This is typically <code>slot_barrel_muzzle</code>. #*This ensures the attachment point aligns with the muzzle end of the weapon. #'''Child Pivot ID:''' #*Set the '''Child Pivot ID''' to <code>snap_weapon</code>. #*This specifies where the attachment (suppressor) will snap onto the weapon. This bone/empty object should exist in attachment itself. If its not prevent, then Scene Root will be used #'''Attachment Point Type:''' #*Assign the attachment point type to match your suppressor's attachment class. #**Click on the '''Attachment Point Type''' property. #**Select '''Change Class''' from the context menu. #**Search for muzzle class appropriate for the weapon - in this case it is<code>AttachmentMuzzle65_39</code> (the class you created earlier). #**Select it to assign it to the attachment point. #'''Show in Inspection:''' #*Enable the '''Show in Inspection''' option. #*This allows the attachment slot to be visible when inspecting the weapon in-game.

====Add SCR_WeaponStatsManagerComponent==== To ensure the weapon correctly handles parameter adjustments and sound switching when the suppressor is attached, you need to add the '''SCR_WeaponStatsManagerComponent'''.

#'''[[Arma Reforger:Prefabs Basics#Adding new components to entity instance|Add SCR_WeaponStatsManagerComponent Component]]''' #'''No Additional Configuration Needed:''' #*The '''SCR_WeaponStatsManagerComponent''' doesn't have any parameters other than '''Enabled''' . #*Simply adding this component is sufficient. #*This component is crucial for handling parameter adjustments and sound switching when attachments like suppressors are used.

{{Feature|informative|The '''SCR_WeaponStatsManagerComponent''' manages changes to the weapon's stats and sounds when attachments are added or removed. For more detailed information, you can refer to the [[Arma Reforger:Weapon Stats-Modifing Attachments|Weapon Stats Modifying Attachments]] documentation.}}

===Updating the WeaponSoundComponent=== To ensure that the weapon produces the correct sounds when the suppressor is attached, you need to update the '''WeaponSoundComponent'''.

#'''Select the WeaponSoundComponent:''' #*In the '''Entity Tree''', locate and select the '''WeaponSoundComponent'''. #'''Add Suppressed Sounds:''' #*In the '''Properties''' panel, find the '''Filenames''' property. #*'''Add the Suppressed Firing Sound:''' #**Click on the '''Add Element''' button (often a '''+''' icon) next to the '''Filenames''' array to add a new sound file. #**Assign the suppressed firing sound file to this new element. #***Choose an appropriate sound file (e.g., '''{{Link|enfusion://ResourceManager/$ArmaReforger:Sounds/Weapons/Rifles/AK-74/Weapons_Rifles_AK-74_Shot_Suppressed_SuperSonic.acp|Weapons_Rifles_AK-74_Shot_Suppressed_SuperSonic.acp}}'''). #*'''Configure the Filenames:''' #**Ensure that both the normal and suppressed firing sounds are included in the '''Filenames''' array. #**The '''WeaponSoundComponent''' will automatically handle the sound selection based on the weapon's state and attachments.

{{Feature|informative|The '''WeaponSoundComponent''' uses the '''Filenames''' array to determine which sounds to play when the weapon is fired. It will automatically switch between the normal and suppressed firing sounds depending on whether the suppressor is attached. The order of the sound files in the '''Filenames''' array does not affect which sound is played. What matters, is presence of '''SOUND_SUPPRESSED_SHOT''' node.}}

==Making the Suppressor Available in the Arsenal== To make your suppressor more accessible to players in-game, you need to add it to the arsenal. This involves including the suppressor prefab in the '''Entity Catalog''' so that it appears in the game's inventory and supply systems.

* '''Include in Entity Catalog:''' ** Ensure that your suppressor prefab is added to the '''Weapon Attachments''' '''Entities''' list within the '''Entity Catalog''' of selected faction that you want to expose your weapon. *** '''Item Type''' should be set to '''WEAPON_ATTACHMENT''' *** '''Item Mode''' should be set to '''ATTACHMENT''' *** Adjust '''Supply Cost''' in line with vanilla ** This allows the game to recognize the suppressor as available equipment. * '''Access in Game:''' ** After adding it to the '''Entity Catalog''' , the suppressor will be available in-game for players to acquire and use. ** Players can find the suppressor in arsenals or supply crates of given faction that draw from the '''Entity Catalog''' .

[[File:armareforger-new-weapon-suppressor-arsenal-setup.png]]

For detailed instructions on how to add items to the '''Entity Catalog''' and configure arsenals, please refer to the [[Arma Reforger:Weapon Creation/Prefab Configuration#Crate%20Filling|Crate Filling]] section of the '''Weapon Creation''' documentation.

== Finalizing the Integration == After configuring the components and making the suppressor available in the arsenal:

* '''Save All Prefabs:''' ** Ensure that all changes to prefabs are saved. * '''Test Thoroughly:''' ** Load your mod in the game or editor. ** Verify that: *** The suppressor appears in the arsenal. *** It can be added to the player's inventory. *** It attaches correctly to the weapon. *** The weapon functions correctly with and without the suppressor. * '''Troubleshoot If Necessary:''' ** If you encounter issues, double-check the steps above to ensure all configurations are correct <gallery mode="packed" widths="700" heights="500"> File:armareforger-new-weapon-suppressor-final-result-1.png File:armareforger-new-weapon-suppressor-final-results-2.png </gallery>

{{GameCategory|armaR|Modding|Assets|Tutorials}} {{GameCategory|armaR|Modding|Assets|Weapon Creation|Tutorials}}
8o5ihi5bnfqd9giyccfexk92xozdm1i

# Arma Reforger:Weapon Creation/Asset Preparation

5050
34492
370933
370344
2025-02-26T12:31:52Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370933
wikitext
text/x-wiki
{{TOC|side}} == Prepare the Mesh ==

This tutorial will try to cover procedure for plugging in new weapon into Enfusion Workbench. While tutorial might be more focused on Blender users, other software users shouldn't be worried since most of the things are working very similar in other programs.

=== Object Orientation ===

One of the most important thing to begin with is making sure that your '''model is properly orientated'''. As per [[Arma Reforger:FBX Import#Alignment|Arma Reforger:FBX Import]] page:

{{Feature|informative|Everything must be oriented as pointing along/towards '''the Y+ axis in Blender and 3dsMax''' and '''along the Z+ axis in Maya'''.}}

That means, when you are '''importing A3 weapon you need to rotate it by 90 degrees to the left.'''

=== Object Cutting ===

Most likely model that you might already have few bits already present in the mesh. Since Enfusion allows you to assemble weapon from multiple parts, we will split our mesh into multiple separate objects to achieve much higher customization of weapon.

[[Image:armareforger-new-weapon-cutting-parts.gif|600px]]

In this case, sample contains two parts which could be potentially moved to separate files, letting you to have 3 variants in total quite easily. As marked on above video, grip & iron sights were moved to separate FBX files. Magazine was already separated for that particular mesh so only remaining thing to do is adding slot points for those accessories.

=== Object Naming ===

When it comes to naming, there are few important rules to keep in mind.

# '''_LODx''' suffix is used to indicate '''Level of Details''' # '''UBX_, UCX_, USP_, UCS_, UCL_, UTM_''' prefixes are used to mark '''Colliders''' # '''OCC_''' prefix is used for '''Geometry Occluders'''

Beside that, there are also some additional guidelines regarding naming of the objects - '''[[Arma Reforger:Weapon Slots And Bones|slot/snap points naming convention]]''' - itself which don't have effect on how mesh is processed by engine (like those mentioned above) but are there to '''have consistency'''. It's also worth to note that some of base weapon prefabs are using some of those names '''by default''' (they can be of course changed but it's strongly advised to follow those rules nevertheless).

=== Add Slots/Snap Points ===

If you had experience with Arma 3 modding, then whole concept of having slots & snap points should be fairly familiar to you. Those dummy objects are serving as ''memory points -'' there is one major difference though - you no longer have to place two points to make an axis. Instead, rotation of dummy object is used.

In Blender, you can use one of the '''empty objects''' like '''Plain Axis''' to create those helper points.

[[Image:armareforger-new-weapon-empty-snap.jpg|300px|right]] [[Image:armareforger-new-weapon-empty-create.png|300px]]

''Please notice the Plain Axis gizmo - this is the orientation of the model. Make sure that your empty object is '''properly aligned'''''.

[[Image:armareforger-new-weapon-empty-rotate.png|600px]]

{{Clear}} {{Feature|informative| One easy method to have slot & snap points correctly aligned is to create first slot points, when the mesh is still in one piece, and then copy paste mesh & empty socket to new empty scene. After that only thing left is to rename '''''slot_XX''''' to '''''snap_XX'''''. }}

On '''Sample Weapon''', the following slots were created:

* '''slot_ironsight_front & slot_ironsight_rear -''' slots for picattinny mounted ironsights * '''slot_magazine -''' slot for magazine well * '''slot_optics -''' slot for top mounted optics * '''slot_underbarrel -''' slot for bottom mounted accessories like bipod

Additional, following empty objects were created for various components:

* '''snap_hand_right -''' '''IK target''' for right hand when using '''weapon deployment''' feature *'''snap_hand_left -''' '''IK target''' for left hand when using '''weapon deployment''' feature * '''barrel_chamber & barrel_muzzle -''' those points are used in '''MuzzleComponent''' to determine location & direction where bullet is spawned * '''eye -''' point for aiming down sight view. Used in '''SightsComponent'''

[[File:armareforger-new-weapon-slots-overview.png|alt=|1211x1211px]]

{{Clear}} === Colliders & Material Names ===

Colliders are special type of objects which are used to calculate various kinds of collisions - be it physic simulation or tracing of bullet penetration. There are few rules regarding those colliders and most of them listed [[Arma Reforger:FBX Import#Collider_usage|FBX Import - Colliders usage]] page. <gallery mode="nolines" widths="553" heights="250"> File:armareforger-new-weapon-colliders-geo.png|Collider with '''Weapon''' Layer Preset File:armareforger-new-weapon-colliders-firegeo.png|Collider with '''FireGeo''' Layer Preset </gallery>

'''Weapon requires at least one collider with''' '''Weapon [[Arma Reforger:Collision Layer|layer preset]]''' - if you don't have it, then '''weapon actions like equip will be missing from it'''. If your geometry is simple enough, it is possible to just use one collider for both weapon & fire geometry collision. Otherwise it might be necessary to have two colliders:

* One for '''Weapon''' collision - should be very simple collider (i.e. convex) * Another for '''FireGeo''' collision - can be more detailed, trimesh can be used to provide best experience available.

When importing asset from previous Arma game - like in this example - you are most likely going to have already convex components ready from '''Geometry, Fire Geometry, View Geometry''' or '''Geometry Physx LODs''' and in this case automatically '''Fire Geometry LOD from Arma 3 were used as FireGeo''' and '''mesh from Geometry LOD''' was used for '''Weapon''' layer.

Now you might ask how to assign '''Layer Presets'''. If you are using Blender, there is small handy tool - [[Arma Reforger:Enfusion Blender Tools: Objects Tools|Objects Tool]] - which is part of [[Arma Reforger:Enfusion Blender Tools|Enfusion Blender Tools]] to assist you with assigning correct game materials & layer presets on colliders. Otherwise, take a look at [[Arma Reforger:FBX Import#Setting Layer Preset on colliders .28usage parameter.29|FBX Import]] page where there are instructions how to set that parameter in 3DS Max or Maya. {{Feature|informative|You can use [[Arma Reforger:Enfusion Blender Tools#Model Quality Assurance|Model Quality Assurance]] to verify if your colliders are convex by '''checking UCX Collider''' option.}}

=== Skeleton Setup & Mesh Rigging ===

==== Skeleton Creation ==== Whether it's new model or mesh imported from P3D, most likely it will be necessary to prepare skeleton. In '''Blender''' skeletons are called '''{{Link|https://docs.blender.org/manual/en/latest/animation/armatures/index.html|Armatures}}''' and their creation process is quite straightforward. Starting with {{Link|https://docs.blender.org/manual/en/latest/animation/armatures/introduction.html#your-first-armature|creation of '''Armature itself'''}}, this can be done by selecting '''Armature''' option from '''Add''' menu in top section of the viewport while being in '''Object''' mode.

[[File:armareforger-new-weapon-adding-armature.gif]] {{Feature|important| It is recommended to keep your armature called '''Armature''' since in such scenario, you will avoid artificial bone in skeleton hierarchy when mesh is imported in Workbench. While it might be not causing any issue on rifles, it is basically a '''necessary thing when importing character related gear'''. }} Once it is created, you might notice that root bone is quite large and might wish to resize it - to do so, switch to '''Edit Mode''' and select that '''Bone''' and then reduce its size to some reasonable level.

[[File:armareforger-new-weapon-scale-bone.gif]] {{Feature|important| Armature should be located at '''0,0,0 point and use 1.0 scale'''. Otherwise you might encounter some problems when trying to animate it in Blender at later stage. }} Next step will be rotation of this bone towards the '''front of the weapon''' and then renaming it to '''w_root''' - this bone will serve us a '''root bone''' of this mesh.

[[File:armareforger-new-weapon-rotating-naming-bone.gif]]

==== Bones Creation ==== After basics of armature are done, it is time to add bones for all animated parts on the weapon. While in '''Edit Mode''' and with '''Armature''' selected, it is possible to add new bones through either:

* '''Add → Single Bone''' option in top bar of viewport * By {{Link|https://docs.blender.org/manual/en/latest/animation/armatures/bones/editing/duplicate.html|duplicating bone}} already present in the armature - like '''w_root'''

If you choose the first option, then it will be necessary to resize & rotate the new bone to the desired size. Duplication doesn't have this problem, so it was chosen to create the fire mode switch bone - '''w_fire_mode'''. It is also important to keep the hierarchy of bones in order, and in this case it means that all bones responsible for moving parts of the weapon - '''like w_fire_mode''' - should be '''parented to w_root'''. This can be done selecting bone in '''Edit Mode and then changing Parent property in Relations section of Bone properties''' tab.

[[File:armareforger-new-weapon-duplicating-bones.gif]]

''Please note that GIF above is Using Blender [https://docs.blender.org/manual/en/latest/interface/keymap/industry_compatible.html Industry Compatible Keymap] ''

{{Feature|informative|Consider setting bones visibility to '''In Front''' - this will help with placement of the bones.<br>[[Image:armareforger-new-weapon-set-bone-in-front.png]]}}

There are also few thing to keep in mind when creating bones and below is list of those things:

* Bones will serve as axis for any further motion so try to place them in '''spots which would result in reasonable motion''', like center of '''fire selector pivot point''' or '''center of bolt'''. * '''Keep Y+''' orientation of the bones - this might be especially handy is some action is using center of bone for actions * While it's not necessary, it is recommended to use vanilla '''[[Arma Reforger:Weapon Slots And Bones#Bones|naming convention for bones]]''' - this will be especially useful when dealing with animation export, since vanilla animation export profiles expects such bone names. ** ''It is still possible to use custom names but this might require custom export profiles - more about it will mentioned in the chapter covering weapon animation'' With this knowledge in mind, it should be possible to create rest of the bones like '''w_trigger''', '''w_charging_handle''' and '''w_bolt'''.

[[File:armareforger-new-weapon-bones-end-result.png|1349x1349px]]

==== Mesh Skinning ==== Skinning of the mesh depends on the software that you are using and if you don't know how to do it in software of your choice, it is recommended '''to search for some tutorials on the web what skinning of bones is'''. {{Feature|informative|If you '''imported model from P3D''' via Enfusion Blender Tools then most likely you will have some vertex groups already - in this case you can try to '''rename''' those so they '''match skeleton bone names'''.}}{{Messagebox|'''Recommended read''': Official Blender documentation - '''{{Link|https://docs.blender.org/manual/en/latest/modeling/meshes/properties/vertex_groups/assigning_vertex_group.html|Assigning a Vertex Group}}'''.|📖|lightgrey}} If you are using '''Blender''', here you can find short instruction how to quickly setup skinning on object. In the example below, '''w_bolt''' bone will be set:

# Switch to '''Object Mode''' # Select object which you want to skin - in this it is '''body_02_LOD0''' # In '''{{Link|https://docs.blender.org/manual/en/latest/modeling/modifiers/introduction.html#interface|Modifiers Properties}}''' tab, add '''{{Link|https://docs.blender.org/manual/en/latest/modeling/modifiers/deform/armature.html|Armature}}''' modifier via '''Add Modifier''' button # In '''Object''' property of '''Armature''' '''modifier''' select '''Armature''' (skeleton) which should influence this object - in this case it is '''Armature''' # In '''Object Data Properties''' expand {{Link|https://docs.blender.org/manual/en/latest/modeling/meshes/properties/vertex_groups/vertex_groups.html|'''Vertex Group''' panel}} # Switch to '''{{Link|https://docs.blender.org/manual/en/latest/editors/3dview/modes.html|Edit Mode}}''' and then activate '''face''' '''selection mode''' # Select faces which should belong to bolt # In '''Vertex Group section, click on''' plus button to '''{{Link|https://docs.blender.org/manual/en/latest/modeling/meshes/properties/vertex_groups/assigning_vertex_group.html#creating-vertex-groups|Add Vertex Group}}''' # Double click with '''Left Mouse Button''' on it and change name of that new vertex group from '''Group''' to '''w_bolt''' # Click on '''Assign''' button in '''Vertex Groups''' section (assuming you still have selected bolt faces in viewport) - this will assign your current selection in viewport to '''w_bolt''' vertex group with full influence (''influence is controlled by '''{{Link|https://docs.blender.org/manual/en/latest/modeling/meshes/properties/vertex_groups/vertex_weights.html|Weight}}''' property'')

[[File:armareforger-new-weapon-set-skinning.gif]]

At this stage '''w_bolt''' bone should be successfully rigged but that is not the end of the process! {{Feature|important|Below section applies to any 3D software!}}

When creating skinned objects, '''Enfusion Workbench''' expects that the whole object is skinned to some bone. {{Feature|important| Otherwise importer will try to "fix" it by skinning remaining faces to some root bone and in console log you will see below message: <pre>RESOURCES (W): Missing some mesh skinning weights (Object_LOD0). Weighting them to root</pre> }}

In Blender realms, this means that any object which '''Armature''' modifier, must be fully skinned to some existing bone through vertex groups. In this case it means that all faces, '''beside those which belongs to''' '''w_bolt''' vertex group, on '''body_02_LOD0''' object has to be skinned to '''w_root''' bone. In this case it was done by selecting faces belonging to '''w_bolt''' and then {{Link|https://docs.blender.org/manual/en/latest/interface/keymap/industry_compatible.html#selection|inverting the selection ''via'' the {{Controls|Ctrl|I}} shortcut}}. After that, new vertex group called '''w_root''' was created and current selection was assigned to it via '''Assign''' button.

[[File:armareforger-new-weapon-set-skinning-root.gif]]

==== Colliders Rigging ==== If you have some animated collider please keep in mind that '''only trimesh colliders can be skinned'''. In all other cases you have to use '''100% weight'''.

In Blender it gets even bit more tricky and '''Object Relations''' (in '''''Object tab''''') have to be used if you want connect non trimesh collider to some skeleton bone.

[[Image:armareforger-new-weapon-relations.png|400px]]{{Feature|informative|It is also recommended to parent slots on the weapon to the '''Armature''' - it is not necessary to parent it to w_root bone though. This should make it easier to snap magazine in reload sequence for instance}}

== FBX Export Settings ==

Most of the general rules can be found on '''[[Arma Reforger:FBX Import#FBX_Export|FBX Import page]]'''. In principle, when exporting from i.e. 3DS Max, you have to make sure that you are exporting in '''binary format in version 2014/2015'''. Furthermore, '''Triangulation''' & '''Preserve Edge Orientation should be turned off'''.

'''Blender'''-wise, there are 3 most important things to keep in mind when exporting FBX: {| class="wikitable" | '''1. Object Types''':

For animated object like weapon you need to have checked on at least:

'''Empty''' - which handles all snap points

'''Armature''' - exports skeleton of your weapon

'''Mesh''' - self explanatory | rowspan="3" | [[Image:armareforger-new-weapon-export-blender2.png|200px]] |- | '''2. Custom Properties''':

Without this option all custom properties like '''LayerPresets''' would be lost! |- | '''3. Leaf bones''':

Leaf bones are completely unnecessary in Enfusion and it's better to have that option '''turned off''' |}

== Textures Preparation ==

When importing textures of weapon from previous Real Virtuality games like Arma 3 there is no real automated or simple method of conversion spec-gloss textures to PBR ({{Link|https://en.wikipedia.org/wiki/Physically_based_rendering|Physicial Based Rendering}}) Metal Rough ones - current industry standard. Therefore in most cases it's much easier to do textures from scratch in i.e. Substance Painter.

There are tons of materials on the internet how to create proper PBR texture and it's highly recommend to search for it via some popular search engines. In case of Substance Painter, it is worth to take a look at {{Link|https://substance3d.adobe.com/tutorials/courses/the-pbr-guide-part-1|Substance Painter PBR guide}}.

If you still want to try convert '''RV spec gloss textures to PBR''', you can try to follow this {{Link|https://www.mod-fusion.com/post/converting-a2-a3-dayz-textures-to-pbr-for-reforger|Converting A2/A3/Dayz textures to PBR for Reforger}} tutorial. {{Messagebox|'''Recommended read:''' [[Arma Reforger:Textures|Textures]]'''.|📖|lightgrey}}

== Model Import & Registration ==

Once mesh was successfully prepared and all selections, sockets & snap points are in place, it's time to try our asset in game. Majority of the process is already pretty well described on the {{Link|Arma Reforger:FBX Import#Import process in the Workbench}} page.

In principle, all you have to do is click with right mouse button on your FBX files and select '''Register and Import''' option from the context menu.

[[Image:armareforger-new-weapon-mesh-register.gif]]

=== Colliders & Materials Check ===

After initial import was done it's time to make sure that materials & colliders are using proper materials & colliders. By default, Enfusion will try to assign material based on the name of the assigned texture in mesh. If it fails to find such texture, new dummy material (see area marked in orange on screen below) will be created next to the FBX model.

There are 2 typical errors when it comes to collider configuration: [[File:armareforger-new-weapon-collider-errors.png|thumb|left|794x794px|Colliders errors example]]

{{Feature|important| * Make sure that you have "usage" property defined in collider object properties: [[Image:armareforger-fbx-layers-blender-1.png|200px]] * Make sure that the correct material is assigned to all colliders: [[Image:armareforger-new-weapon-colliders-material.png|200px]]

More info can be found on [[Arma Reforger:FBX Import]]. }}

{{Clear}} === Skeleton & Hierarchy ===

[[File:armareforger-new-weapon-import-settings.png|alt=|thumb|392x392px|Import Settings tab]] Next we will take care of bones - in this case, magazine object has only empty objects (snap point) and to import them, checking of '''Export Scene Hierarchy in Miscellaneous section of Import Settings tab should be enough'''.

In case of '''skinned assets like rifles''', '''Export Skinning''' option should be used instead. It might be also good to know that '''Export Scene Hierarchy is''' not necessary when '''Export Skinning''' option is selected.

Below process of setting '''Export Scene Scene Hierarchy on magazine''' is showcased and then analogical process of using of '''Export Skinning''' on '''SampleWeapon_01.xob''' is presented.

If for some reason you don't see bones icon on '''SampleWeapon_01.xob even after checking Export Skinning''' and reimporting resource, make sure that you have properly skinned your model in 3D software of your choice.

[[File:armareforger-new-weapon-scene-hierarchy.gif|none|frame|Importing '''hierarchy''' on magazine]] [[File:armareforger-new-weapon-importing-skinning.gif|none|frame|Importing '''skinning''' on weapon]] {{Feature|informative|Changes made in '''Import Settings''' tab are only applied to model after '''manually reimporting model''' via '''Reimport resource (PC)''' button.}}

== Texture Import ==

In principle, you can use same procedures as the ones described on [[Arma Reforger:Weapon_Modding#From_Scratch|Weapon Modding]] page. {{Messagebox|'''Recommended read: [[Arma Reforger:Textures|Textures]].|📖|lightgrey}}

By default, '''Workbench''' should already '''create some of the materials based on their material name in FBX''', so in case of {{Link|enfusion://ResourceManager/~SampleMod_NewWeapon:Assets/Weapons/Rifles/SampleWeapon_01/SampleWeapon_01.xob|SampleWeapon_01.xob}}, there should be already some emats which needs to be properly configured.

* '''SampleWeapon_01_Camo1.emat''' material with two textures ** '''SampleWeapon_01_Camo1_BCR -''' Base color + Roughness ** '''SampleWeapon_01_Camo1_NMO -''' Normal map * '''SampleWeapon_01_Camo2.emat''' also with two textures ** '''SampleWeapon_01_Camo2_BCR -''' Base color + Roughness ** '''SampleWeapon_01_Camo2_NMO -''' Normal map [[File:armareforger-new-weapon-materials.png]]

Since in this example, magazine is sharing textures with rifle itself, it is necessary to adjust textures over there. To do so, double click on '''{{Link|enfusion://ResourceManager/~SampleMod_NewWeapon:Assets/Weapons/Magazines/SampleWeapon_01/Magazine_65x39c_SampleWeapon_01_30rnd.xob|XOB file of magazine}}''' to open it in a new '''Resource Manager''' tab. After that, it is possible to set up materials which were previously created for the weapon itself.

Materials can be assigned in 2 ways:

* Drag and dropping desired material on material icon in '''Materials''' tab ** This action will automatically reimport model with selected material * Changing '''Material Assign''' in '''Visual section''' of '''Import Settings''' ** It will be necessary to click on '''Reimport resource (PC)''' button after applying changes

[[File:armareforger-new-weapon-adjusting-magazine-xob.gif]] {{Feature|informative|See the next step: '''[[Arma_Reforger:Weapon_Creation/Prefab_Configuration| Prefab Configuration]]'''.}}

{{GameCategory|armaR|Modding|Assets|Weapon Creation|Tutorials}}
aixs3codgumrdk4xmsgtsmgdi0422ma

# Arma Reforger:Weapon Animation/Basic Tutorial

5050
34385
370996
370374
2025-02-26T12:32:04Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370996
wikitext
text/x-wiki
{{TOC|side}} == Introduction == {{Feature|informative|'''Previous part '''- [[Arma_Reforger:Weapon_Animation_Setup|Weapon Animation Setup]]}}In this second part things will be more focused on '''creation of animations''' in '''Blender''' and then trying to '''export them''' so they can be used in '''previously created animation workspace & prefab'''. Below is short list of topics covered in this chapter:

* Preparing Workbench & Blender to work * Preparing Blender scene for animation * Creating IK pose & plugging it in game * Creating basic weapon animations (bolt, trigger, fire selector) and plugging it into weapon prefab {{Messagebox|This tutorial was prepared for people '''who have not that much experience with Blender''' animations but it is recommended to get yourself familiar with some of the Blender concepts via Youtube videos or official [https://docs.blender.org/manual/en/latest/ Blender documentation].|✩|#88cc88}} == Preparing Workbench ==

Before moving to Blender, make sure that '''net API is enabled''' in the Workbench settings - '''without that Blender will be unable to export TXA animations'''.

To do so, perform following steps:

* Navigate to '''Workbench → Options (1)''' in the top menu of the Resource Manager * In Options window, switch to '''Workbench''' tab '''(2)''' * Check '''Enable net API (for communication with external applications) (3)''' option * Click on '''OK (4)''' button. This will save all the changes made in '''Workbench Options'''. Please keep in mind that saving process '''can take a while'''

[[File:armareforger-new-weapon-animation-enable-net-api.png]] == Preparing Blender ==

This tutorial covers animation creation workflow in '''Blender''' using the '''[[Arma_Reforger:Enfusion_Blender_Tools|Enfusion Blender Tools]]''' plugin. This plugin is used to export '''Blender actions''' to '''Enfusion text based animation''' files (''.txa'') which can be then converted to '''Enfusion binary animation''' files (''.anm''). With this addon it is also possible to export '''actions''' with '''selected amount of bones''' (''which is extremely important when it comes to Enfusion animations'') ''via'' the '''[[Arma_Reforger:Animation_Export_Profiles|export profiles]]''' functionality and '''export of additive animations'''.

'''Enfusion Blender Tools''' addon is designed to work with '''[https://www.blender.org/download/lts/3-6/ Blender 3.6 LTS]'''version so it is recommended to use at least this version of Blender. Newer versions of Blender might work without problem although this is not guaranteed (especially with snapshot builds). Installation instructions of the plugin can be found on the '''[[Arma_Reforger:Enfusion_Blender_Tools#Installation|Enfusion Blender Tools Wiki page]]''' - pay attention to paragraph about configuration of '''Export Profile Folder''' parameter which is '''mandatory for TXA exporter'''.

=== Enabling Pose Library addon ===

Beside '''Enfusion Blender Tools''', this tutorial is using also additional addon which is quite handy when it comes to animation creation:

* '''[https://docs.blender.org/manual/en/latest/animation/armatures/posing/editing/pose_library.html Pose Library]''' - this addon adds ability to use library of poses, which can be then applied to all characters using specific rig. In this tutorial it will be used mainly for creation of base weapon IK animation but not only.

This addon is '''bundled with Blender''' but needs to be '''activated manually'''. To do so, open '''Blender Preferences''' (''Edit → Preferences...'' in top menu), navigate to the '''{{Link|https://docs.blender.org/manual/en/latest/editors/preferences/addons.html#installing-add-ons|Add-ons}}''' tab in '''Blender Preferences''' and search for '''Animation:''' '''Pose Library''' addon. If you cannot find this addon, make sure that '''Enabled Add-ons Only''' filter is disabled. Once this addon is found, click on the checkbox next to it to activate it.

[[File:armareforger-new-weapon-animation-activating-addon.gif]]

===Loading example file===

Reforger character is using bit different skeleton compared to what '''Blender''' would expect. After loading for instance '''{{Link|https://github.com/BohemiaInteractive/Arma-Reforger-Samples/blob/main/SampleMod_NewCharacter/Assets/Characters/SampleCharacter/Character_Template.fbx|Character_Template.fbx}}''' in '''Blender''', it is obvious that something is seemingly wrong - bones are not connected to each other and are rotated in seemingly random way. This is due to the fact that this skeleton was created in Autodesk software, where skeletons work on a slightly different principle.

{{Feature|warning|'''Do not try''' to use '''Force Connect Children''' or '''Automatic Bone Orientation''' options in '''Blender FBX import settings''' to fix above mentioned issue - this will make this skeleton '''useless for {{armaR}}!'''}}

Modifying this skeleton is out of question, as any changes to it would result in incorrect animations when re-imported into the workbench. One of the solutions to this problem is to '''create an intermediate, Blender-friendly skeleton''' to which the original skeleton is constrained. Such Blend file is provided on '''Arma Reforger Github''' - '''{{Link|https://github.com/BohemiaInteractive/Arma-Reforger-Samples/blob/main/SampleMod_NewCharacter/Assets/Characters/SampleCharacter/Character_AnimationRig_Example.blend|Character_AnimationRig_Example.blend}}''' - and this file will be used in this tutorial. Once this file is loaded in Blender, you can find following things on the screen:

*'''Character armature''' - Reforger original character skeleton constrained to empty objects located in ''Extras/Constraints'' collection *'''Rig armature''' - '''Rigify''' armature which is used for animations. You should '''only use this armature for character animation''' *'''Constraints helper objects''' - Those objects are constrained to '''Rig''' armature and are transferring the motion back to '''Character''' armature *'''IK Targets collection''' - Objects in this collection are used for creation of '''weapon IK pose''' & also for control of character movement in world via '''EntityPosition''' object. **'''IKTarget/Origin/Direction''' objects are constrained itself to bones located in '''Rig''', so basically in this tutorial you don't need to touch any of the objects located there.

{{Feature|informative|Skeletons in Blender are often called '''armatures''' - this term will be used interchangeably.}}

Rigify control rig contains controls both for [https://artisticrender.com/forward-kinematics-and-inverse-kinematics-in-blender-explained/ '''Forward Kinematic''' (FK) & '''Inverse Kinematic''' (IK)] motion.

By default, '''{{Link|https://github.com/BohemiaInteractive/Arma-Reforger-Samples/blob/main/SampleMod_NewCharacter/Assets/Characters/SampleCharacter/Character_AnimationRig_Example.blend|Character_AnimationRig_Example.blend}}''' file should start in Animation workspace with '''Action Editor & NLA editor being''' present next to the main view port. Of course, you can change layout of those windows as you want but this setup should be quite good for starters.

If you '''haven't used Rigify rig before''', it might be worth to play with it. After selecting '''Rig''' object in {{Link|https://docs.blender.org/manual/en/latest/editors/outliner/introduction.html|'''Outliner'''}} and switching to '''[https://docs.blender.org/manual/en/latest/editors/3dview/modes.html Pose Mode]''', bunch of '''Rigify controls''' should be visible.

You can see that all these bones have different colors, which have different meanings. Below is short list explaining the basics of that coloration system:

*'''Red''' bones represents controls responsible for '''IK motion''' *'''Green''' bones are responsible for '''FK motion''' *'''Blue''' bones are used to do '''tweaks''' *'''Yellow''' bones are for '''Torso''' & '''Face''' controls *'''Purple''' bone is for root motion *'''Orange''' bones is for finger details [[File:armareforger-new-weapon-animation-rigify-control-rig.png]]

Visibility of those layers can be switched by clicking with '''Left Mouse Button''' on one of the buttons in '''Rig Layers''' section of '''Item''' tab on the right. It is also possible to disable and enable multiple layers by holding Left Mouse Button and moving cursor above layers.

When it comes to weapons, most of the time you are '''not going to need all those controls''', so it is wise to '''turn on & off''' those layers depending on '''what you are working on''' in given moment. Furthermore, faces of '''Reforger heads''' are not rigged yet so it's better to hide '''face''' related Rigify controls.

Switching between '''IK & FK''' is done by changing value of '''IK-FK (name of bone)''' slider in '''Rig Main Properties''' section - where '''0 means full IK control''' and '''1 full FK influence'''. [[File:armareforger-new-weapon-animation-character-ik-fk.gif|center]]

===Setting up reference poses===

Once '''Pose Library''' addon is '''activated''', it is now possible to add first asset to '''Asset Libraries''' in '''Blender'''. On '''{{Link|https://github.com/BohemiaInteractive/Arma-Reforger-Misc|Arma-Reforger-Misc}}''' Github repository you can find small Blender [https://github.com/BohemiaInteractive/Arma-Reforger-Misc/blob/main/Rig%20and%20Animations/Weapon%20Poses/BlenderPoses.blend '''library of weapon poses'''] which will be used later in tutorial to set weapon IK animation. Characters in '''Reforger''' are using few '''archetypes sets''' for handling of weapon animations so for instance '''soldier holding RPG-7''' is walking or '''running differently''' than a soldier with '''AK-74''' or PKM.

'''{{Link|https://github.com/BohemiaInteractive/Arma-Reforger-Misc/blob/main/Rig%20and%20Animations/Weapon%20Poses/BlenderPoses.blend|BlenderPoses.blend}}''' library contains poses for all those weapon archetypes:

*Rifle * Pistol *LMG *RPG *Disposable launcher (LAW) [[File:armareforger-new-weapon-animation-library-blender-poses.png|center]]

All those archetypes are available in two formats - raw animation which can be applied to character (useful for skinning testing) and Rigify compatible poses. [[File:armareforger-new-weapon-animation-assets-libraries.png|thumb|655x655px|Blender '''[https://docs.blender.org/manual/en/latest/files/asset_libraries/introduction.html#what-is-an-asset-library Asset Libraries]''' configuration]]

To make this blend file active in '''Pose Library''' menu, following actions have to be performed:

*Download '''{{Link|https://github.com/BohemiaInteractive/Arma-Reforger-Misc/blob/main/Rig%20and%20Animations/Weapon%20Poses/BlenderPoses.blend|BlenderPoses.blend}}''' and put it somewhere on the drive (''in this tutorial "D:\Reforger\Blender Assets" folder was used'') *Open '''Blender Preferences ''' (''Edit → Preferences... in top menu'') *Switch to '''File Paths''' tab in the left section of the window *Find '''Asset Libraries''' section *Click on '''+ plus button (1)''' on the right side to add new element to the list *Put some name in '''Name''' field (''f.e. Blender Assets'') and in '''Path''' field select folder where blend file is located (''"D:\Reforger\Blender Assets"'' )

After that, it should be possible to access '''Pose Library''' in main view port by expanding '''Animation''' tab on the right side of the viewport. Keep in mind though, that this tab is only available in '''Pose Mode'''.{{Clear}}

===Applying poses from Pose Library ===

Assuming '''{{Link|https://github.com/BohemiaInteractive/Arma-Reforger-Samples/blob/main/SampleMod_NewCharacter/Assets/Characters/SampleCharacter/Character_AnimationRig_Example.blend|Character_AnimationRig_Example.blend}}''' is open, it is now possible to test how those animations are working on this sample character. To do so, perform following steps:

*Select '''Rig armature''' in '''Outliner''' and switch to '''Pose Mode''' (if you haven't done that before). *Select bones on '''Rig''' which you want to animate. In this case all bones were selected via Ctrl+A shortcut but later, you might find it very useful to apply pose to f.e. only hand or legs. * In '''Animations''' tab '''in Pose Library''' section, change '''Active Asset Library''' from '''Current File''' to '''Blender Assets''' **''It is also possible to use [https://docs.blender.org/manual/en/latest/editors/asset_browser.html Asset Browser] instead of Animation tab'' *'''Apply pose''' to current selection either by clicking on one of the entries in library which has '''Rigify''' in its name or by clicking on it with '''Right Mouse Button''' and selecting '''Apply pose''' option from the context menu.

As it was mentioned before, '''poses can be partially''' applied and furthermore, they can be also '''blended -''' all those options are available in context menu of the action.

[[File:armareforger-new-weapon-animation-pose-library.gif]] ==Setting up scene==

=== Adding Weapon to the Scene===

Creating a blend file which contains both character and the weapon involves multiple steps and it is quite important to do it properly, to avoid problems with for instance weird offsets of weapon when animation is exported. Below is list of all steps that you need to follow in order to prepare such scene:

*Open '''blend file containing weapon''' ('''{{Link|https://github.com/BohemiaInteractive/Arma-Reforger-Samples/blob/main/SampleMod_NewWeapon/Assets/Weapons/Rifles/SampleWeapon_01/SampleWeapon_01.blend|SampleWeapon_01.blend}}''' in this case) * Switch to '''Object Mode''' *Make sure that scale of weapon '''armature''' & '''empty objects''' is set to 1. If not, select the '''Armature''' and then apply at least scale to object via [https://docs.blender.org/manual/en/latest/scene_layout/object/editing/apply.html#transforms '''Object → Apply'''] me

{{Feature|informative|Size of the empty objects can be reduced by changing Size parameter in Object Data Properties. It is also possible to apply such reduced size to multiple objects at once by first, selecting objects in the {{Link|https://docs.blender.org/manual/en/latest/editors/outliner/introduction.html|Outliner}}, clicking with Right Mouse Button on Size property and then selecting Copy to selected option from context menu.}}

*Link selected slot empty objects to '''Armature''' by changing their '''Parent''' in '''Relations''' sections of '''Object Properties''' **''Tip: You can use '''Copy to selected''' feature mentioned above to do it to multiple objects'' *Select '''all''' '''objects''' which you want to have present in animation (''like mesh, armature or empty objects used as slots'') file and '''copy them to clipboard''' with {{Controls|Ctrl|C}} *Open second instance of the Blender and load blend '''{{Link|https://github.com/BohemiaInteractive/Arma-Reforger-Samples/blob/main/SampleMod_NewCharacter/Assets/Characters/SampleCharacter/Character_AnimationRig_Example.blend|Character_AnimationRig_Example.blend}}''' file *Switch to '''Object Mode''' in second instance of '''Blender''' *'''Paste content of the clipboard to the scene''' by using {{Controls|Ctrl|V}} *Rename weapon armature to f.e. '''Weapon''' - this should help distinguishing character and weapon armatures [[File:armareforger-new-weapon-animation-weapon-copy-paste.gif]]

Now, there are few ways how to snap weapon to correct bone and below are described two of them.

====Method 1: Use Object Relations==== *Switch to '''Object Mode''' *Change '''Parent (3)''' in '''Relations''' section of '''Object Properties (2)''' tab on all '''mesh objects''' '''(1)''' to '''Weapon''' armature [[File:armareforger-new-weapon-animation-setting-mesh-objects.png]] *Select '''Weapon (4)''' armature *Go to '''Object Constraints Properties (5) ''' tab and add new '''Copy Transforms''' modifier ''via'' '''[https://docs.blender.org/manual/en/latest/animation/constraints/interface/adding_removing.html?highlight{{=}}add+bone+constraint Add Object Constraint] (6)''' button **In '''Target (7)''' field select '''Character''' (''original skeleton of character'') **In '''Bone (7)''' field select '''RightHandProp''' - this should snap the weapon to '''RightHandProp''' bone [[File:armareforger-new-weapon-animation-setting-armature-object-constraint.png]]

====Method 2: Use Bone Constraint==== *Select Weapon armature and switch to '''Pose Mode''' *Select '''w_root''' bone *In '''Bone Constraint Tab''' add '''Copy Transforms''' constraint via '''Add Bone Constraint''' button **In '''Target''' field select '''Character''' armature **In '''Bone''' field select '''RightHandProp''' bone *Create new empty object called ''Weapon_Helper'' with '''Copy Transforms''' object constraint and select '''Weapon''' as target and '''w_root''' as '''Bone''' *Select '''slot_magazine''' object and change '''Parent''' in '''Object Properties''' to ''Weapon_Helper'' object *''Optionally:'' Grab all objects in separate collection

In this tutorial, the first method was used. If you have some issues with objects being in wrong size of position, make sure that transforms of armature are matching object that you try to parent.

This should be enough to have '''decent setup for weapon animation creation''' in Blender and now such file - containing both character and weapon - should be '''saved to a separate file'''.

===Adding magazine to the Scene===

Procedure for adding magazine to the scene is quite similar to the weapon but in the last step, instead of attaching to '''RightHandProp''', magazine should be attached to '''LeftHandProp'''. In this tutorial, '''Magazine_65x39c_SampleWeapon_01_30rnd.fbx''' will be added to main scene containing weapon & character.

If you have '''snap_magazine''' empty object, then you might consider parenting magazine mesh to it. To do so, follow below steps:

*Open magazine model (''Magazine_65x39c_SampleWeapon_01_30rnd'') in Blender *Make sure that all objects (including '''snap_magazine''' empty object) that you want to parent have same '''transforms (1)''' - '''scale''' is especially important **If not, '''apply all transforms''' via [https://docs.blender.org/manual/en/latest/scene_layout/object/editing/apply.html#transforms '''Object → Apply (2)'''] menu *Select mesh objects (''Magazine_LOD0'') and in '''Relations''' section of '''Object Properties''', change '''Parent (3)''' to '''snap_magazine''' *Copy paste both '''snap_magazine''' and '''mesh object''' into main scene [[File:armareforger-new-weapon-animation-adding-magazine.png]]{{Feature|informative|It is not needed to copy the whole magazine model (including) mesh - in most cases only the magazine shell is enough to have character properly interact with left hand prop.}}

After magazine is present in main scene, there is one remaining step left:

*In main scene, select '''snap_magazine (1)''' and add to it '''Copy Transform (3)''' constraint in '''Object Constraint Properties (2)''' tab **In '''Target (4)''' field select '''Character''' armature **In '''Bone (4)''' field select '''LeftHandProp''' bone [[File:armareforger-new-weapon-animation-magazine-object-constraint.png]]{{Messagebox|'''Tip:''' You might consider hiding ''snap_magazine'' object in viewport.|✩|#88cc88}}Once this has been done, it is already possible to set up the '''magazine''' in such a way that it is '''attached to the gun''' itself.{{Feature|important|This step is important for [[Arma_Reforger:Weapon_Creation/Prefab_Configuration#Deployment_IK_Targets|'''weapon deployment feature!''']]}}To do this, follow the instructions below:

*Select '''Rig''' armature in the scene * Switch to '''Pose Mode''' *Locate prop.L in the scene - by default it should be green circle on the left side of character. If magazine was correctly attached to '''LeftHandProp''' before, then you should also see your magazine inside of that circle *In '''Bone Constraint Properties''' tab add new '''Copy Transform''' constraint via '''Add Bone Constraint''' button **''Make sure that slot_magazine has 1.0 scale before - if not, you can use apply scale via [https://docs.blender.org/manual/en/latest/scene_layout/object/editing/apply.html#transforms '''Object → Apply'''] menu'' *In '''Target''' field select '''slot_magazine''' object

At this stage such setup should be enough but later you will find out that few more constraint (like '''Child Of''') are needed to create f.e. reload animations.

[[File:armareforger-new-weapon-animation-set-slot-magazine.gif]]{{Messagebox|[[File:armareforger-new-weapon-animation-snap-weapon.png]]

At later stage, left hand prop will get more constraints, like snapping to hand, and because of that it is recommended to rename those constraints to some '''unique names'''. In this case this constraint was called '''Snap Weapon'''. Setting names of constraints early saves some '''troubles with Action Editor''' later!|✩|#88cc88}}

==Creating IK Pose ==

=== Setup Base Pose===

Now that both the character and the weapon are in Blender, it is time to create the first animation - '''weapon IK pose''' - which is responsible for proper holding of the weapon in game.

From this point, it is assumed that all work is happening on blend file containing '''Rigify rig''' and weapon in place created in previous steps. Also, as it was mentioned before, character animation should be performed on '''Rig''' armature and '''Character''' armature should be '''left untouched'''. Below are brief instructions that explain the entire process:

*Switch to '''Pose Mode''' *Create new '''action''' - '''p_sampleweapon_ik''' *Make sure new action is set to '''frame 0''' *''Optionally'': Turn on [https://docs.blender.org/manual/en/latest/editors/timeline.html#bpy-types-toolsettings-use-keyframe-insert-auto '''Auto Keying'''] option - without it, keyframe will have to be created manually at the end of the process *Select all '''Rig''' armature bones (make sure you did unhide all the '''Rig Layers''' in '''Item''' tab! ) * In '''Pose Library''', apply appropriate base pose - for rifle it is '''Pose Rifle Rigify''' - to the selection (''see '''Applying poses from Pose Library''' paragraph for details'') ** Different type of '''weapon archetypes''' are using '''different base IK''' pose and this is working together with '''Animation Instance''' parameter in '''SCR_WeaponAttachmentsStorageComponent''' - more on that latter. If you are f.e. creating RPG-7 type of weapon then use '''Pose RPG Rigify''' **🔵It is also possible to use [https://docs.blender.org/manual/en/latest/editors/asset_browser.html '''Asset Browser'''] for management and creation of new poses [[File:armareforger-new-weapon-animation-apply-ik-pose.gif]]

After that, it's a matter of setting up the position of the hands correctly. Here are some tips to make this process easier:

*Start with rough placement of the hands. In '''Rig Layers''' section, leave only enabled '''Finger, Arm.L (IK) & Arm.R (IK)''' and then use '''hand_ik.L''' and '''hand_ik.R''' bones to positions hands correctly *Once hands are roughly were they are supposed to be, it is possible to start tweaking finger - to do so, enable '''Fingers & Fingers (Detail)''' layers [[File:armareforger-new-weapon-animation-setting-ik-pose-fast.mp4|mute|loop|4900px]] [[File:armareforger-new-weapon-animation-ik-pose-setup.png]]

{{Feature|informative|You can turn on the '''Manual Frame Range''' option per action - this will limit the playback of the animation to the selected range. This option is available in expandable menu on the right side of Action Editor in Action tab. [[Image:armareforger-new-weapon-animation-manual-frame-range.png]]}}

===First Time TXA Export===

Once the action is ready, it is possible to export '''p_sampleweapon_ik'<nowiki/>'' to game readable format'<nowiki/>'''''. On '''[[Arma_Reforger:Animation_Instances_Reference_Table|weapon animation instances reference]]''' page you can check how actions should be exported. As you might observe, '''p_sampleweapon_ik''' action should be exported to '''three separate files'''. Some of you might wonder why not use single file instead of duplicating it and the answer is - '''[https://community.bistudio.com/wiki/Arma_Reforger:Animation_Export_Profiles export profiles].'''

'''Export profiles allows to export''' just '''certain bones from the selected action''', and this is quite important. Without that, '''all animations in animation graph would overwrite each other''' and the last one would probably emerge victorious, showing some static pose. Furthermore, as suggested before, export profiles allows to create additive animations.

In this case, '''p_sampleweapon_ik ''' should be exported into 3 files:

*'''p_rfl_sampleweapon_01_ik -''' using '''501_IK''' export profile *'''p_rfl_sampleweapon_01_offset''' - using '''101_FullBodyABS''' export profile *'''p_rfl_sampleweapon_01_safety -''' using '''502_IK_RightHand''' export profile

The first step in exporting is to make sure that the '''Workbench is running''', as this is mandatory for this export functionality. Next, click on [https://community.bistudio.com/wiki/Arma_Reforger:Enfusion_Blender_Tools:_Import/Export_Animation#Export_animations_from_Blender '''Enfusion Tools → Export → Enfusion Animation (.txa)'''] in top section of the '''3D Viewport'''.

This should open a new window in the center of Blender showing '''two parameters''' and '''listing all actions''' present in the blend file with collapsed '''visibility (1)''' parameter next to them. Expand action params by clicking on it once and then perform following actions:

*Select save location by either copy pasting path in text field or by pressing '''Change save location''' button **Save location should be pointing to a folder '''inside of your project'''. By default, Enfusion Blender Tools suggest using '''relative path''' which is quite handy if you share project between multiple people. **''In Sample New Weapon, save location is located in '''Assets/Weapons/Rifles/SampleWeapon_01/Anims''' folder inside the addon'' *Select '''Character''' armature in '''Armature name''' - exporter will attempt to export bones movement from this skeleton *In '''Secondary armature name''' select '''rig''' skeleton. **At this stage this is not going to do anything but it is nice to have it filled in table now. This is parameter is useful when armature which you want to export, is constrained to another armature and doesn't have any motion itself and you want to export multiple actions at once. In case of '''Rigify''' rig, in this field should be selected name of the Rigify control rig. *Add 3 entries to the list by clicking on '''+ Add (2)''' button on the right side of the window *Fill in data as picture below * Click on large '''OK''' button to start TXA export [[File:armareforger-new-weapon-animation-export-txa-blender.png]]

{{Messagebox|'''Recommended read:''' More information about TXA export can be found in [[Arma_Reforger:Enfusion_Blender_Tools:_Import/Export_Animation|'''Enfusion Blender Tools''']] documentation |📖|lightgrey}} ====Importing TXA in Resource Manager ==== If action was correctly exported, '''three TXA files''' should be present in selected location. By default, Enfusion Blender Tools will try to '''automatically register TXA files''' '''-''' it might fail however if you are using symbolic links or save location is incorrect (outside of your project).

If registration didn't succeed yet TXA files are inside of your project, in '''Resource Manager''' click on them with '''Right Mouse Button''' {{Controls|rmb|}} and select '''Register & Import''' option in context menu. This should trigger conversion of txa files into anm - binary form of animation - and generate meta file for it.

====Previewing Animation in Resource Manager ==== To quickly verify if animation was exported correctly it is possible to play it in '''Resource Manager''' tab. To do so, follow below steps:

*Double click on [enfusion://ResourceManager/~SampleMod_NewWeapon:Assets/Weapons/Rifles/SampleWeapon_01/Anims/p_rfl_sampleweapon_01_offset.anm '''p_rfl_sampleweapon_01_offset'''.'''anm'''] - this should open this animation in new, seemingly empty, tab *Click on '''Option''' button in top right corner of the viewport *In '''Animation''' section, change '''Model''' property by clicking on two dots .. next to it * Select one of the [[Arma_Reforger:Weapon_Animation_Setup#Character_Preview_Model|character anim preview models]] like i.e. '''[enfusion://ResourceManager/~ArmaReforger:Assets/Characters/Animation/AnimTestChar_USSR_01.xob AnimTestChar_USSR_01.xob]''' [[File:armareforger-new-weapon-animation-preview-model-rb.gif]]

After that, you should see your animation in '''Resource Manager''' viewport played on previously selected preview character.

{{Feature|informative|Keep in mind that due to export profiles and partial export of the bones, you might not get the full picture of the animation.

For instance the '''501_IK''' export profile contains only hand and arm bones so rest of the body will be in default pose. '''101_FullBodyABS''' contains all bones present in character model exported in absolute mode, so anims exported with profile, can be mostly previewed in '''Resource Manager without issues'''.

'''Previewing additive or partially animations''' is described in ''later paragraph'''. }}

=== Assigning animations in Animation Editor === Two of the generated animation '''p_rfl_sampleweapon_01_offset & p_rfl_sampleweapon_01_safety ''' have to be assigned in '''Player Animation Instance''' fields in '''Animation Editor -''' without this, IK animation might not work correctly.

[[File:armareforger-new-weapon-animation-assign-animation-anim-set.png]]

Assigning of the animations in the '''Animation Editor''' can be done by performing the following actions:

*Open previously created '''animation workspace ( ''[enfusion://ResourceManager/~SampleMod_NewWeapon:Assets/Weapons/Rifles/Workspaces/sampleweapon_01.aw sampleweapon_01.aw]'' )''' in '''Animation Editor''' *Activate character animation instance by '''double clicking on it (1)''' with '''Left Mouse Button''' *In '''Anim Sets''' window click on dot in '''Erc (2)''' column in '''Idle''' row *Assign '''p_rfl_sampleweapon_01_safety.anm''' animation to selected field by: **Clicking on '''two dots in top section (3)''' of '''Anim Sets''' window **Selecting animation in '''File Browser''' window connected to '''Animation Editor''' and then clicking on '''Set Animation button (4)''' *Assign same animation for '''Pne''' column and then for '''Erc''' & '''Pne''' columns in '''Safety (5)''' row. *In '''IKOffset (6)''' row assign '''p_rfl_sampleweapon_01_offset''' animation in both '''Erc''' & '''Pne''' columns. Additionally, to avoid hand animation distortion when weapon is picked up, 🔴 '''temporarily 🔴''' assign '''p_rfl_sampleweapon_01_offset to Switch_Mode_On & Off''' fields. 🔴 '''You should later replace that animation with proper one 🔴''', since with this temporary incorrect animation you will get glitch when weapon fire mode (or safety) is changed.{{Feature|important|Remember, '''weapon needs full animation set to be fully functional'''. This test is just to verify that animations are working correctly for now. Things like weapon inspection, reloading or even switching fire mode are not going to work yet!}}[[File:armareforger-new-weapon-animation-assign-safety-anim.gif]]

=== Animation playback in Animation Editor === When all those animations are assigned in '''Animation Workspace''', it is possible to preview them in '''Anim Editor Preview''' window. In order to do this, you can perform following steps:

*Make Sure that '''AnimTestChar''' is activated in '''Preview Models''' list in '''Workspace''' window **If not, activate it by i.e. double clicking on it with '''Left Mouse Button''' (more info can be found in previous chapter) *Double click on green dot in '''Anim Set''' window **A good example will be '''IKOffset''' animation *Observe character in '''Anim Editor Preview''' window

===Assigning animation to prefab=== [[File:armareforger-new-weapon-animation-setting-prefab.png|thumb|574x574px|'''SCR_WeaponAttachmentsStorageComponent''' and setting '''Animation IK Pose''' ]] The actual IK pose has to be assigned '''outside of Animation Editor'''. First step towards assigning this animation will be loading weapon prefab in '''World Editor''' (''[enfusion://ResourceManager/~SampleMod_NewWeapon:Prefabs/Weapons/Rifles/SampleWeapon_01_base.et SampleWeapon_01_Base.et]'') and then locating '''SCR_WeaponAttachmentsStorageComponent''' component. Over there, find '''Animation IK Pose''' parameter in '''Attributes → Item Animation Attributes''' section of the component and assign your '''previously exported IK animation''' (''p_rfl_sampleweapon_01_ik.anm'').

If you plan to do different type of weapon, make sure to also change '''Animation Instance''' parameter so it matches desired type - of course you need to use also proper IK base animation in Blender! In most cases, if you are duplicating similar type of weapon then this parameter will be already set correctly.

This animation is very important for proper handling of character weapon holding animation but it doesn't work alone and it requires '''IKOffset, Safety & Idle''' animations which were assigned before in '''Animation Editor''' itself. Once that animation was assigned to '''Animation IK Pose field, don't forget to save your changes to prefab (use '''Apply to prefab button''' if change was made to entity instead of prefab).'''

{{Feature|informative|In '''Item Animation Attributes''' it is also possible to change base weapon animations which will be played by character. This can be done by changing '''Animation Instance''' to one of the already existing animation instance files like '''machinegun, RPG, LAW or pistol one'''. Each of those weapon types requires using different '''reference poses!'''}}{{Clear}} ===Testing result in game ===

With all those pieces in place, it should be now possible to test the animations in game already. To do so, load i.e. [enfusion://WorldEditor/Worlds/Modding/Assets_Showcase_Basic.ent;117.741,6.55589,125.792;-24.0249,42.014,0;21 Assets_Showcase_Basic] scenario from main sample mod and place in the world weapon prefab (''[enfusion://ResourceManager/~SampleMod_NewWeapon:Prefabs/Weapons/Rifles/SampleWeapon_01.et SampleWeapon_01.et]''). Alternatively, it is also possible to load [enfusion://ResourceManager/~ArmaReforger:worlds/MP/MpTest.ent MpTest.ent] scenario, make new sub-scene world and then place the weapon in the world.

{{Feature|important|Remember, '''weapon needs full animation set to be fully functional'''. This test is just to verify that animations are working correctly for now. Things like weapon inspection, reloading or even switching fire mode are not going to work yet!}}

[[File:armareforger-new-weapon-animation-testing-ik-pose.png]]

{{Feature|informative|Creating new character prefab which will hold your weapon in hand and then assigning this character prefab in LoadoutManager entity will save you a lot time when iterating weapon animations.}}

==Creating Basic Weapon Mechanics Animations==

Basic weapon mechanics animations, such as those responsible for the bolt, trigger, or safety, can be created either in the main blend file containing the character and weapon, or in a separate blend file containing only the weapon. In this tutorial, second approach was used and '''{{Link|https://github.com/BohemiaInteractive/Arma-Reforger-Samples/blob/main/SampleMod_NewWeapon/Assets/Weapons/Rifles/SampleWeapon_01/SampleWeapon_01.blend|SampleWeapon_01.blend}}''' was utilised as a base.

===Bolt and Trigger Animations===

For weapon '''bolt pose, trigger and fire anim''' it is possible to utilize just '''single action'''. In this tutorial, this action was called '''w_sampleweapon_fire'''.

{{Feature|informative|Unless mentioned, all operations on bones are assumed to be performed in '''Pose Mode'''.}}

The animation itself is very simple and in this tutorial we will start with '''w_trigger''' bone. Select that bone, switch to '''frame number 0''', turn on [https://docs.blender.org/manual/en/latest/editors/timeline.html#bpy-types-toolsettings-use-keyframe-insert-auto '''Auto Keying'''] and rotate bone by '''around 25 degrees''' so it looks like the trigger is being pressed.

Next on the list is '''w_bolt''' bone. As mentioned in '''BoltPose''' section of [[Arma_Reforger:Animation_Instances_Reference_Table|weapon animation instances reference]], the bolt animation should contain 3 states:

*'''Closed bolt''' at '''frame 0''' *'''Open bolt''' at '''frame 1''' *'''Closed bolt''' at '''last frame''' (can be frame 2 or 3 if you want to smooth thing out a little bit)

Select '''w_bolt''', switch to frame 0 if you are not already in it and then save current '''position and location''' of the bone in the timeline ''via'' [https://docs.blender.org/manual/en/latest/animation/keyframes/editing.html#insert-keyframe '''Insert Keyframe menu'''] (''accessible via shortcut or Right Mouse Button click in view port)''. This frame will be representing closed bolt.

In frame 1, '''w_bolt''' bone should be moved back so it represents open bolt. '''In the last frame''' (''depending on preferences it can be frame 2 or 3'') it is possible to '''copy paste first frame''', so it is back to '''closed state'''.

[[File:armareforger-new-weapon-animation-weapon-fire-anim.gif]]

And that's it - this should be enough now to create '''w_rfl_sampleweapon_01_fire''', '''w_rfl_sampleweapon_01_bolt_pose''' & '''w_rfl_sampleweapon_01_trigger''' animations which can be imported into Enfusion.

===Fire Mode Selector===

'''Safety''' animation, as mentioned in [[Arma_Reforger:Animation_Instances_Reference_Table|weapon animation instances reference]], should contain as many key frames as there weapon modes on the weapon. In this case, '''Sample New Weapon''' have three states:

*Safe *Semi *Full Auto

First step towards creating animation for all those 3 states will be creating new action called '''w_sampleweapon_safety'''. This can be done by clicking on '''New Action''' button in top section of '''Action Editor'''.

{{Feature|important| Keep in mind that if you have some action selected in Action Editor, clicking on New Action button will create in fact duplicate of currently selected action.

It is advised to remove key frames of bones which you don't want to influence in this newly created action. }}

Once this new action is prepared, it is possible to start animating '''w_fire_mode''' bone which is rigged to fire selector. Below are steps describing how to prepare '''w_sampleweapon_safety''' action:

*Select '''w_fire_mode''' bone *Switch to key frame 0 and animate the '''w_fire_mode''' so it points at the '''safe mode'''. It might be handy to turn on textures '''Viewport Shading''' to '''Material Preview''' mode to see the textures on the model **If fire selector points to safe mode in rest pose, then simply current '''position and location''' of the bone in the timeline ''via'' '''[https://docs.blender.org/manual/en/latest/animation/keyframes/editing.html#insert-keyframe Insert Keyframe menu]''' *Switch to '''frame 1''' and rotate fire selector so it points to '''single fire fire mode''' *Switch to '''frame 2''' and rotate fire selector so it points to '''full auto fire mode''' [[File:armareforger-new-weapon-animation-safety-anim.gif]]

If everything went smooth, both actions should be now ready for export!

===Export Weapon Animations===

Exporting weapon animations follows the same principle as exporting character hand animations.

[[File:armareforger-new-weapon-animation-export-weapon-anims.png]]

Open TXA export menu ( ''EBT → Export → Enfusion Animation (.txa)'' ) and using [[Arma_Reforger:Animation_Instances_Reference_Table|weapon animation instances reference]], fill data as follows:

*Add 3 export fields to '''w_sampleweapon_fire''' action **'''w_rfl_sampleweapon_01_trigger''' with '''721_Weapon_Trigger''' export profile **'''w_rfl_sampleweapon_01_bolt_pose''' with '''724_Weapon_Bolt''' export profile **'''w_rfl_sampleweapon_01_fire''' with '''726_Weapon_Bolt_Trigger''' export profile *Add 1 export field to '''w_sampleweapon_safety''' action **'''w_rfl_sampleweapon_01_safety''' with '''701_Rifle_Idle''' export profile {{Feature|important|Please note that in above example weapon specific animations were created in [https://github.com/BohemiaInteractive/Arma-Reforger-Samples/blob/main/SampleMod_NewWeapon/Assets/Weapons/Rifles/SampleWeapon_01/SampleWeapon_01.blend&#124;separate blend file]. Since there is no other armature present, controls for armature selection are not present.

If you have for instance character armature present, make sure to use '''Additional Armature''' option and select over there armature of the weapon like on picture below [[File:armareforger-new-weapon-animation-export-weapon-anims-additional.png]]}} [[File:armareforger-new-weapon-animation-export-weapon-anims-additional.png|thumb]] [[File:armareforger-new-weapon-animation-filling-more-anims.png|thumb|Adding animations to '''weapon (sampleweapon_01_weapon.asi)''' animation instance]] Once animations are exported, import & register them in Workbench and then proceed to animation workspace of the rifle in '''Animation Editor'''. Over there activate '''weapon animation instance''' '''(sampleweapon_01_weapon.asi)''' and in '''Anim Sets''' window and fill animations to '''Erc & Pne''' columns as on list below:

*'''w_rfl_sampleweapon_01_trigger → Trigger''' *'''w_rfl_sampleweapon_01_bolt_pose → BoltPose''' *'''w_rfl_sampleweapon_01_fire→ Fire''' *'''w_rfl_sampleweapon_01_safety → Safety'''

Assignment of animations to all lines can be again performed in two ways as described before. In general, when dealing with multiple lines, it is faster to use '''Set Animation''' button together with '''File Browser'''.

{{Clear}} ===Tweaking Animation Graph===

While debugging weapon switch animations in '''Animation Editor''', you might observe that semi & auto positions are swapped. This is caused by the fact, that AK74, which was used as base for animation graph, has fire selector which goes from '''Safe''' to '''Full Auto''' and then the last position if '''Semi Auto'''.

This problem can be solved in several ways, e.g. the animation itself can be adjusted so that, for example, frame number 1 on the example weapon represents full auto and frame 2 is responsible for semi-auto. Transitions between such fire modes might not look good, so instead of changing the animations, the '''graph will be modified'''.

Such modification of the animation graph can be done in a few steps:

*Open in '''Animation Editor''' animation workspace of your weapon *In '''Animation Graph''' try to locate '''Pose - SemiPose''' node and click on it once with Left Mouse Button **In Properties window change '''Time''' property from 1 to 0.5 - this property goes from 0 to 1, where 0 means beginning of the animation and 1 means end of the animation. *Select node '''Pose - AutoPose''' **In '''Properties''' window change '''Time''' property from 0.5 to 1 [[File:armareforger-new-weapon-animation-adjust-graph.gif]]

===Testing Result in Animation Editor===

Tweaks to the animation graph can be tested without switching to '''play mode in World Editor'''. Instead '''Animation Editor''' provides an option to play graph (part of it or the whole thing) and see the playback results in '''Anim Editor Preview''' window.

This can be done in two ways:

*By using '''Play default node''' button in toolbar *By double clicking on node with '''Left Mouse Button''' inside '''Animation Graph'''

Once debug is turned on, it is possible to change state of variables in '''Controls''' window either by clicking on check boxes or using sliders. Fire selector is controlled by '''State''' variable, which can use following values:

*-1 - '''safe mode''' *0 - '''single''' *1 - '''burst mode''' *2 - '''full auto'''

Try to change values of '''State''' slider and observe how it changes in '''Anim Editor Preview''' window. Once you are done with previewing animation, you can use big red '''Stop''' button in the toolbar or double click with '''Left Mouse Button''' on the background of '''Animation Graph'''.[[File:armareforger-new-weapon-animation-debug-graph-safety.gif]]

==Continuation==

{{GameCategory|armaR|Modding|Assets|Weapon Animation|Tutorials}} {{GameCategory|armaR|Modding|Assets|Weapon Creation|Tutorials}}
l0yvcn4o737yleft78heqfwr5m9be00

# Arma Reforger:Weapon Creation/Prefab Configuration

5050
34493
376296
376043
2025-09-29T13:59:36Z
Lou Montana
10739
Text replacement - " to to " to " to "
376296
wikitext
text/x-wiki
{{TOC|side}} {{Feature|informative|'''Previous part''' - [[Arma Reforger:Weapon Creation/Asset Preparation|Asset Preparation]].}}

In this chapter we will learn how fuel is simulated in game and we will change following things: * '''Creating new rifle prefab''' * '''Configuring basic weapon parameters''' * '''Configuring ammo parameters'''

== Prefab Setup ==

When making prefabs of weapons it is recommended to inherit from one of the already existing prefabs located in '''''Prefabs\Weapons\Core''''' - those prefabs should have most of the necessary configuration for various kinds of weapons.{{Feature|informative|In this article, [[Arma_Reforger:Resource_Manager:_Options#Register_.22enfusion:.2F.2F.22_protocol|'''Enfusion links''']] are used. With those links it is possible to open specific resource just by simply clicking on that link. Enfusion links '''has to be manually activated in Workbench options''' (Workbench -> Options -> Workbench -> Register "enfusion://" protocol) before it can be used}}In this case we will use '''{{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Core/Rifle_Base.et|Rifle_Base.et}}''' as parent prefab. To do so, navigate in '''Resource Browser''' to '''''Prefabs\Weapons\Core''''' and locate {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Core/Rifle_Base.et|Rifle_Base.et}} prefab. Once you are there, click with right mouse button on that prefab and select '''{{Link|Arma_Reforger:Data_Modding_Basics#Using_.22Inherit_in....22_function|Inherit in}}''' from context menu. When asked about new name of prefab, consider calling this new prefab ''WeaponName_base'' - this might be especially useful when you plan to have multiple variants of weapon, since it will help you to keep your structure nice and clean. After new inherited prefab is created, relocate it to some more fitting location like the {{hl|Prefabs/Weapons/Rifles}} directory.{{Messagebox|Other method involves duplicating some already existing prefab - this might be handy if you are '''creating something similar to already existing weapons or don't want to add manually components'''. For instance if you are making some new M16 variant, you could use '''{{Link|Arma_Reforger:Data_Modding_Basics#Using_.22Duplicate_to....22_function|Duplicate to "addon name"}}''' function on '''{{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Rifles/M16/Rifle_M16A2_base.et|Rifle_M16A2_base.et}}''' and then modify parameters of such new prefab.|✩|#88cc88}}[[File:armareforger-new-weapon-creating-inherited-prefab.gif]]

After new prefab is created, it is possible to start modifying it. It can be done by either by opening prefab in [[Arma Reforger:Prefabs Basics#Opening prefab in Prefab Edit Mode|'''Prefab Edit Mode''']] button or by [[Arma Reforger:Prefabs Basics#Creating entity prefab in World Editor|'''placing prefab manually in''' '''World Editor''']]. In this tutorial '''Prefab Edit Mode''' was used to edit the ''SampleWeapon_01_base.et'' prefab.

Once prefab is loaded, first step would be assigning correct model - in this case it is '''''SampleWeapon_01.xob''''' - to '''MeshObject''' component. [[File:armareforger-new-weapon-meshobject.png|thumb|367px|'''MeshObject''' component with assigned weapon model]]

If you inherited from core weapon type like '''{{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Core/Rifle_Base.et|Rifle_Base.et}}''' then you will need to add few components listed below. In case of duplication of existing prefab, it might be still worth to adjust data in those components before moving to next section of this tutorial, since some of the values might need to be adjusted, like for example '''damage''' in '''SCR_MeleeWeaponProperties'''.

* '''RigidBody''' - this component is responsible for all kind of collisions and without it will be impossible to pick up weapon. ** Once component is created it will be necessary to check '''Model Geometry''' parameter so its '''enabled''' * '''SCR_MeleeWeaponProperties -''' this component defines how much damage does this weapon when its used in melee fight ** For rifles '''Damage''' value of 45 is a good starting point - for smaller weapon feel free to use lower value [[File:armareforger-new-weapon-adding-components.gif]]

Additional, it might be also worth adding another '''CaseEjectingEffectComponent''' to '''Muzzle Component''', which is going to emit muzzle smoke. To do so, click with '''Right Mouse Button''' on '''MuzzleComponent''' and select from context menu option '''Add child component''' and select '''CaseEjectingEffectComponent''' from the list. [[File:armareforger-new-weapon-case-ejecting-component.png|thumb|Configuration of '''CaseEjectingEffectComponent''']] [[File:armareforger-new-weapon-adding-child-components.gif]]

In component itself, following changes will be required:

* Assign fitting particle effect to '''Particle Effect''' field - i.e. {{Link|enfusion://ResourceManager/~ArmaReforger:Particles/Weapon/Smoke_M16A2.ptc|Smoke_M16A2.ptc}} * In '''Effect Position''' parameter click on '''set class''' button and pick '''EntitySlotInfo''' class and call it for instance Muzzle ** Inside '''Effect Position''', change '''Pivot ID''' to '''barrel_muzzle''' * Change '''Has Sound''' parameter to '''disabled''' state

Additionally, you might also want to adjust:

* '''What kind of cartridges are ejected by the weapon''' - this is defined in '''CaseEjectingEffectComponent''' - over here you can select from many particle effects like for instance {{Link|enfusion://ResourceManager/~ArmaReforger:Particles/Weapon/Casing_556x45.ptc|Casing_556x45.ptc}} and assign them to '''Particle Effect''' property * '''Muzzle effect of the weapon''' - this is controlled by '''Particle Effect''' parameter in '''SCR_MuzzleEffectComponent -''' again, you can pick from some existing effects like {{Link|enfusion://ResourceManager/~ArmaReforger:Particles/Weapon/Muzzle_AK74.ptc|Muzzle_AK74.ptc}} or create your own effects like mentioned in [[Arma Reforger:Weapon Modding#Particle Effects Change|Weapon Modding]] documentation

{{Clear}} == Inventory Configuration ==

[[File:armareforger-new-weapon-storage-component.png|thumb|760x760px|'''SCR_WeaponAttachmentsStorageComponent''']] In '''SCR_WeaponAttachmentsStorageComponent''' it is possible to adjust some of the basic item properties related to inventory but there is also one section which is used for defining weapon IK pose (''RV veterans might find it similar to handAnims parameter).'' Animation IK pose is not going to be described in this paragraph though so let's move to inventory configuration.

{{Feature|important| Using vanilla animation graph will most likely result in malformed weapon, if you are not '''EXACTLY SAME''' bone positions as vanilla weapon.<br> It is still possible to use vanilla character animations and create custom weapon animations. More about animations can be found on [[Arma_Reforger:Weapon_Animation|Weapon Animation]] page although it is strongly recommended to finish this part of the tutorial first! }}

When looking at '''SCR_WeaponAttachmentsStorageComponent''', multiple '''Attributes''' can be observed:

* '''Item Display Name''' - as name suggest, here it is possible to change Name and Description (on-hover tool tip visible in in-game inventory) * '''Item Phys Attributes''' - various physical attributes of the item like mass, volume, etc * '''Item Animation Attributes''' - here are defined item IK poses defined

Besides these attributes, there are also '''Custom Attributes''' where it is possible to change e.g. '''Item Inspection Anim''' or the character's maximum speed when a given item is equipped, or '''PreviewRenderAttributes''', which controls the weapon preview in the inventory menu - if your weapon has an odd size, it might be necessary to adjust the camera parameters there.

In Reforger, inventory system is no '''longer using pictures'<nowiki/>'' to for model thumbnails but instead, '''''<nowiki/>''3D models are rendered inside inventorymenu'''. How this item is rendered inside inventory is controlled by '''PreviewRenderAttributes''', where you have bunch of camera controls'<nowiki/>''''', and In case of '''SampleWeapon_01_base.et''', some tweaks to will be required to the camera distance. Since this bullpup weapon is smaller than regular rifles, it looks quite small in inventory menu. To fix this, navigate to '''PreviewRenderAttributes class in Custom Attributes''' and change '''Camera Distance To Item''' parameter from '''1 to 0.8.''' [[File:armareforger-new-weapon-preview-render.png|none|thumb|470x470px|'''PreviewRenderAttributes''' inside '''SCR_WeaponAttachmentsStorageComponent''']]

{{Feature|important| To refresh preview renders in play mode, it might be necessary to reload all data with {{Controls|Shift|R}}) shortcut in '''World Editor'''. If its not working, try to '''restart Workbench'''. }}

This will put camera closer to the weapon so in inventory menu, weapon should fill whole tile it has available. <gallery mode="nolines" widths="150" heights="133"> File:armareforger-new-weapon-inventory-view-before.png|'''Camera Distance To Item''' set to '''1''' File:armareforger-new-weapon-inventory-after.png|'''Camera Distance To Item''' set to '''0.8''' </gallery>

In '''Rifle_Base''' prefab, '''Item Phys Attributes''' is not configured and it is necessary to use '''"set class"''' button next to that property. Pressing this button will show additional section where you can freely change parameters.

For this '''Sample Weapon''', the following changes were done:

* In '''Item Display Name''' section, '''Name''' property was changed to name of the weapon - in this case it is just "''Sample Weapon''"<!-- -->{{Messagebox|'''Tip''': If you already want to configure your display name in a way, where it can be translated, consider looking at the {{Link|Arma Reforger:Mod Localisation}} page.|✩|#88cc88}} * '''In Item Phys Attributes''': ** '''Weight''' parameter was adjusted to somehow match the weight of real weapon without any accessories (including magazine). This '''parameter is using''' '''kilograms''' and in this example it was set to 4kg. Weight in game affects for instance character stamina. ** '''Size Setup Strategy''' was setup to '''Volume'''. This means that size of that object will be calculated using '''Item Volume'''. ** '''Item Volume''' (in cm<sup>3</sup>) defines how much space in inventory container takes that object. Containers like vest have their own definition how large object can fit in their pouches *** In this example it is set to '''2500''' just to showcase how it works, normally, 3000 is used for machine guns, while rifle like AK74 has this value set to '''1500''' Additionally, it will be also necessary to add one entry to '''Custom Attributes'''. This can be done by clicking on '''arrow icon (1)''' to the right of it and then selecting '''ItemOneHandAnimAttributes''' class. This class controls the behavior of the weapon when it is held with one hand only - i.e. when the gadget is equipped - and in most cases the default values are good enough for rifles.{{Clear}}

== Action Contexts Adjustment ==

=== Add New Action Context ===

[[File:armareforger-new-weapon-action-contexts-optic.gif|left|thumb|649x649px|Adding new '''Action Contexts''']] Interactions with weapon in game world, like being able to take weapon from ground or performing some actions in inspect menu, are controlled by '''ActionsManagerComponent'''. '''{{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Core/Rifle_Base.et|Rifle_Base.et}}''' prefab should already have most of the '''Action Contexts''' and '''Additional Actions''' configured although if your weapon is capable of mounting some optic - like '''Sample Weapon -''' it might be necessary to add another context for handling '''optic-related actions it'''.

To do add new '''Action Context, simply click on plus icon next to it''' and then inside of it (''by default it should be called UserActionContext''), locate '''Context Name''' property and type in '''optic'''. After that click on '''set class''' button next to '''Position''' property and select '''PointInfo''' class - this will be used to adjust position where the action is located.

{{Clear}} === ActionsManagerComponent Debug ===

Once all contexts are in place, it will be most likely to do some adjustments to the context properties like tweaking position or radius where action is available. Typing in seemingly magic values and then checking it in play mode might be bit time consuming so that is why it is recommended to use some of the existing debugs to speed up configuration process. [[File:armareforger-new-weapon-action-manager-debug.png|thumb|417x417px|'''ActionsManagerComponent''' custom debugs]] After clicking on '''ActionManagerComponent''' with '''Right Mouse Button''' in '''Object Properties''' window, you should see multiple debugs listed in '''Custom''' section like:

* '''Draw context(s) diagnostics for selected entity only -''' toggle if debug should be available only for selected entity - mutual exclusive with below debug * '''Draw context(s) diagnostics for all entities -''' toggle if debug should be available only for all entities in the world - mutual exclusive with above debug * '''Toggle context(s) transform gizmo visualization -''' show little gizmos next to context action * '''Toggle context(s) radius visualization -''' show radius of all action contexts * '''Toggle context(s) visibility angle visualization -''' toggle angle visibility of actions. Only active for non '''Omnidirectional''' action contexts (can be used to have actions which are i.e. available from side of the weapon) * '''Create user action context(s) from bones -''' small tool for creating multiple action contexts (see [[Arma Reforger:Car Creation#Creating action contexts|Car Creation]] documentation for more details)

In this case, it will be enough to enable contexts '''transform visualization'''. At later stage, it will be also handy to enable '''radius visualization''' when adjusting '''Radius parameter'''. Once it is enabled, '''World Editor''' viewport should look like this:

[[File:armareforger-new-weapon-default-action-debugs.png|521x521px]]

As you can notice, most of the actions are located at '''center of the model''' and need to be moved to more logical places. {{Feature|informative|If you have some issue with actions visibility, you might also try to check in game debugs for [[Arma_Reforger:Diag_Menu#User_Actions|User Actions]].}}

{{Feature|important|Remember that user actions are only going to only if you have [[Arma_Reforger:Weapon_Creation#Colliders_.26_material_names|proper colliders with Weapon layer present]] and [[Arma_Reforger:Weapon_Creation#Basic_weapon_prefab_setup|RigidBody has Model Geometry enabled]]}}

{{Clear}} === Action Contexts Location Change ===

It might seem that adjusting of action contexts position is a tedious job but thankfully it is possible to adjust their position directly in viewport using gizmos. To do so, go to selected '''Action Context''' - in this case it will be '''firemode''' - and click once on one of the fields in '''Offset''' parameter. After that, you should see a gizmo snapped to this action context, which can be freely adjusted.

[[File:armareforger-new-weapon-action-contexts-viewport-tweaking.gif]]

Additionally it is also possible to use '''Pivot ID''' to snap action to one of the bones or snap points. Even after Pivot ID is selected, it is still possible to do some tweaks manually using '''Offset''' parameter (including tweaking it in viewport).

[[File:armareforger-new-weapon-action-contexts-viewport-tweaking-pivot.gif]]

After all '''Action Contexts''' are set, weapon in viewport should look like this:

[[File:armareforger-new-weapon-actions-final.png]]

=== Action Contexts Radius Adjustment ===

Last step will be adjusting radius of actions. '''Default''' action context is used for instance for picking up weapon from the ground so preferable it should cover the whole gun. Most of the actions which are inherited from '''Rifle_Base.et''' prefab have already reduced radius but since '''optic''' was created action context was created from scratch, it might still need some tweaking. Default value of '''Radius''' parameter on '''optic''' action context will cause that this action will fight for attention with all other actions and might also appear to early. To fix this, simply reducing '''Radius''' from '''0.3''' to '''0.1''' should effectively fix this issue.

== Weapon Characteristics ==

[[File:armareforger-new-weapon-adjusting-fire-modes.png|thumb|Adjusting '''Fire Modes''' in '''MuzzleComponent''']]

Most of the weapon firing characteristic can be changed in '''MuzzleComponent''' which is child of '''WeaponComponent'''. Over there, it is possible to '''Fire Modes, Dispersion, Bullet Init Speed Coef, Magazines''' and others. In this segment, focus would be but on getting '''fire modes''' set correctly, which were already partially covered in the '''{{Link|Arma Reforger:Weapon Modding#Components Parameters|Weapon Modding}}''' tutorial.

Starting with '''Fire Modes''', '''Rifle_Base''' prefab has by default fire modes - '''Safe''' & '''Single''' fire mode, therefore it is assumed that any rifle has a safe mode. If it is not the case for the asset that you are preparing, then it might be necessary to create new base prefab based of '''Weapon_Base''' prefab - this scenario is not going to be described here though.

For purpose of this tutorial, '''Sample Weapon''' is equipped with three fire modes - '''safe, single & full auto'''. Since parent prefab has only two fire modes, a new one has to be added through '''➕ sign (1)''' on the right side of the '''Fire Modes''' property. Once it is there, it can be filled with proper data.

'<nowiki/>''BaseFireMode''' with '''MaxBurst''' set to 1 will work as single fire mode'<nowiki/>'''''. On newly added '''BaseFireMode, Max Burst''' should be set to '''-1''' - this fire mode will work as '''full auto mode'''.

Burst fire weapons can be configured by setting '''Max Burst''' property to something above 1. In this case, new property will appear - '''Burst Type'''. Over there it is possible to select 3 types of burst fire:

* '''Uninterruptible''' - once player presses fire button, weapon will fire exactly the amount of shots defined in '''Max Burst''' (unless weapon runs out of ammo) * '''Interruptible''' - burst fire will be interrupted once player release fire button. Burst memory is present ({{Link|https://en.wikipedia.org/wiki/Burst_mode_(weapons)|Burst Mode (weapons)}}) * '''InterruptibleAndReseting''' - same as above but without burst memory

{{Clear}} == Weapon Behaviour Configuration ==

Weapon '''recoil''' is in configured on of the sub classes of '''Weapon Aim Modifiers. Rifle_Base''' prefab is missing '''RecoilWeaponAimModifier & ZeroingWeaponAimModifier''' subclasses in '''Weapon Aim Modifiers''', therefore those have to be added to it. While '''ZeroingWeaponAimModifier''' doesn't need any tweaks, '''RecoilWeaponAimModifier''' class will have to be set from scratch by hand. As reference, either '''pictures below''' or {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Rifles/AK74/Rifle_AK74_base.et|AK74}} prefab can be used as reference. <gallery mode="nolines" widths="455" heights="273"> File:armareforger-new-weapon-recoil-data-linear.png File:armareforger-new-weapon-recoil-data-angular.png File:armareforger-new-weapon-recoil-data-turn-offset.png </gallery> [[File:armareforger-new-weapon-recoil-combined.gif|thumb|Combined recoil effect]] When tweaking recoil values, following table might be useful to get general concept of what '''Linear, Angular & Turn Offset Data''' does. Tooltips above parameters should provide enough information on how to set data. {| class="wikitable" ! Recoil | '''X''' | '''Y''' | '''Z''' |- ! Linear

(1u = 1m) | [[File:armareforger-new-weapon-recoil-linear-x2.gif]] | [[File:armareforger-new-weapon-recoil-linear-y.gif]] | [[File:armareforger-new-weapon-recoil-linear-z.gif]] |- ! Angular (1u = 1°) | [[File:armareforger-new-weapon-recoil-angular-x.gif|269x269px]] | [[File:armareforger-new-weapon-recoil-angular-y.gif]] | [[File:armareforger-new-weapon-recoil-angular-z.gif]] |- ! Offset

(1u = 1rad) | [[File:armareforger-new-weapon-recoil-offset-x.gif]] | [[File:armareforger-new-weapon-recoil-offset-y.gif]] | ''not used, should be left to 0'' |}

== Weapon Obstruction Configuration ==

=== Theory === [[File:armareforger-diag-menu-weapon-obstruction.gif|600x600px]]

Weapon obstruction prevents clipping of weapon with environment. Most of the configuration is done in '''WeaponComponent''' inside '''[[Arma Reforger:Weapon Components#Weapon Obstruction|Weapon Obstruction]]''' category

Weapon obstruction has '''3 following phases''':

* '''Phase 1''' - Slight Obstruction - torso move * '''Phase 2''' - Slight Obstruction - weapon move * '''Phase 3''' - Significant Obstruction - weapon move, Aiming Down Sights disabled

Aside from these there are also 2 other phases

* ''Unobstructed'' ** In this phase the obstruction is not active and there is no restriction as for what can player do with weapon * ''Fully Obstructed'' ** Weapon is raised up and most weapon related action (shooting, inspection, ADS) are disabled

Trace for detection of weapon obstruction is performed from the shoulder bone towards aim direction (the obstruction offset '''parameter''' can be set to offset the bone position)

==== Phase 1 ==== Until the clipping is lower than '''Obstruction Max Torso Z Offset''' the clipping is avoided by moving the torso back and [https://en.wikipedia.org/wiki/Linear_interpolation lerping] into animation pose.

This phase state is '''Slight Obstruction.''' This is important since the states define what can player do with a weapon, In '''Slight obstruction''' we can do all the weapon actions including ADS

<gallery mode="packed" widths="600" heights="400" caption="Difference in pose in no obstruction and '''Max Torso Z Offset''' moved obstruction"> File:armareforger-new-weapon-obstruction-slight-1.png File:armareforger-new-weapon-obstruction-slightly-2.png </gallery>

==== Phase 2 ==== When we've exhausted all the z offset from the torso, we go into another phase where we're still in Slight Obstruction. Here however, we avoid clipping by '''moving the weapon itself back'''

When we do this, the hands use IK Solvers to place into correct position so we don't need to worry about that.

There is a parameter '''Max Slight Obstr Weapon Z Offset''' that tells us how much back we can move with a weapon when in slight obstruction.

This number is usually quite small for most weapons as their butt stock is already resting again the shoulder and there isn't much more space to move it, however it is largely relevant for pistols. This feature alone means that pistol never get further than this phase and so it is possible to fire them in ADS in the most tight combat scenarios<gallery mode="packed-overlay" widths="600" heights="400" caption="Pistol slight obstruction with weapon movement"> File:armareforger-new-weapon-obstruction-slight-weap-1.png File:armareforger-new-weapon-obstruction-slight-weap-2.png </gallery>

==== Phase 3 ==== In this phase we are in '''Significant Obstruction'''. In this phase, the ADS is prohibited.

Also, '''Signi Obstr Weapon Constant Offset''' (''Significant Obstruction Weapon Constant Offset)'' is applied. This typically moves the weapon to "hold at waist" pose. It should also include the '''Max Slight Obstr Weapon Z Offset''' from the previous phase. We typically have another 10-30cm of space to move weapon back until we get to full obstruction [[File:armareforger-new-weapon-obstruction-significant.png]]

=== Configuration === In majority of cases default inherited values from base weapon prefab should be enough. Since obstruction is also dependent on bounding box of weapon, in most cases (like with Sample Weapon) it might be enough to adjust [[Arma Reforger:Weapon Components#Obstruction%20Test%20Character%20Offset|'''Obstruction Test Character Offset''']] value.

If weapon is large and bulky, it might be also necessary to tweak [[Arma Reforger:Weapon Components#Sign%20Obstr%20Weapon%20Constant%20Offset|'''Sign Obstr Weapon Constant Offset''']] value.

{{Messagebox|'''Tip''': While doing any adjustment to obstruction, it is recommended to use [[Arma Reforger:Diag Menu#Weapon%20obstruction|'''Weapon obstruction''']] diag.|✩|#88cc88}}

=== Accessory Modifiers === Currently, there are only pre-made classes for suppressors ( '''''SCR_WeaponAttachmentSuppressorAttributes''''' ) and bayonets ( '''''SCR_WeaponAttachmentBayonetAttributes''''' ) which influences weapon obstruction through '''Extra Obstruction Length''' parameter. Those classes can be added to

'''Custom Attributes''' list in '''InventoryItemComponent''' component. Some info about '''SCR_WeaponAttachmentSuppressorAttributes''' can be found on [[Arma Reforger:Weapon Suppressor Creation#Configure%20SCR%20WeaponAttachmentSuppressorAttributes|'''Weapon Suppressor Creation''']] page.

It is also possible to create new attributes for accessories utilizing '''[https://enfusionengine.com/api/redirect?to=enfusion://ScriptEditor/Scripts/Game/generated/Weapon/BaseWeaponStatsManagerComponent.c;16 WeaponStatsManagerComponent API] -''' in this case it is recommended to take a look at some existing classes like [https://enfusionengine.com/api/redirect?to=enfusion://ScriptEditor/Scripts/Game/Inventory/SCR_WeaponAttachmentSuppressorAttributes.c;1 SCR_WeaponAttachmentSuppressorAttributes.c;1]

{{Messagebox|'''Recommended read''': '''{{Link|Arma_Reforger:Weapon_Stats-Modifing_Attachments}}''' documentation.|📖|lightgrey}}

== Weapon Deployment Configuration ==

Weapon deployment feature allows you to rest your weapon on appropriate surface below defined deploy point, which reduces the weapon sway & recoil. System supports both resting on the weapon body and on bipod legs.

Deploying of weapon on the surfaces is control by parameters located in two components - '''SCR_WeaponAttachmentsStorageComponent + MuzzleComponent -''' and we will begin our configuration adventure with '''SCR_WeaponAttachmentsStorageComponent''' component.{{Messagebox|'''Tip''': It is recommended to turn on diagnostics when trying to configure weapon deployment. This can be done by activating options from ''' [[Arma_Reforger:Diag_Menu|Diag Menu]] → Gamecode -> Weapons → [[Arma_Reforger:Diag_Menu#Deployment|Deployment]]''' menu|✩|#88cc88}}

=== Adding Deployment Points ===

'''SCR_WeaponAttachmentsStorageComponent''' contains deployment related parameters in '''AimingModifierAttributes''' class which is part of '''Custom Attributes'''. Over there it is possible to define '''Deployment Points''' for both '''weapon body''' (f.e. when resting rifle on front section of the weapon without any bipod attached whatsoever ) and for '''integrated bipod'''. Since Sample Weapon doesn't have integrated weapon, PKM setup will be used to explain this part.

==== Base Deployment ==== Starting with basic deployment, begin with adding new entry to '''Deployment Points''' array by clicking on '''+ button''' on the right side of the parameter. This should add new '''PivotPointInfoItem''' to the list with some default parameters. Next, click on '''set class''' button next to '''Point Info''' parameter and type in some unique name like "''deploy''". Over here, you will be able to set a point which will be used as a pivot & snap point for weapon when its deployed.

Depending on your preferences, you can either create some slot in model and select it as '''Pivot ID''' or use '''Offset''' and in-game gizmo to place that in desired place. In case of the '''Sample Weapon''', this point was placed at the front of the weapon as on picture below:

[[File:armareforger-new-weapon-base-deployment-point.png]] Make sure that '''System Identifier''' is set to 0 - this tells engine to use following '''PivotPointInfoItem''' when there is no bipod or bipod is folded. {{Feature|informative|'''System Identifier''' possible values: * 0 - no bipod or bipod folded * 1 - not used atm * 2 - bipod unfolded}}

==== Bipod Deployment ==== Weapons with integrated bipod need a special treatment. First of all, make sure that you have modeled bipod in deployed state and put additional bones for bipod legs folding animation - like '''bipod_l & bipod_r'''. Additionally, it is also possible to add new '''empty objects''' at the bipod legs ends, which are parented to '''bipod legs''' bones via '''Relations''' - this might be bit easier to do compared setting offsets in '''World Editor''' viewport.

[[File:armareforger-new-weapon-bipod-setup.png]]

In vanilla weapons, bipod is animated via '''weapon animation graph''', which means you need to create '''new animation with 2 frames''' (where first frame represents folded bipod and second show unfolded bipod) and '''add new logic to animation graph''' from i.e. PKM. [[File:armareforger-new-weapon-deployment-stabilization-points.png|thumb|643x643px|PKM '''Stabilization Points''' configuration. Note usage of '''Offset''' to set the point at the bipod leg end]] [[File:armareforger-new-weapon-deploy-anim-graph.png|none|thumb|355x355px|Portion of PKM animation graph responsible for bipod animation]]

Once model and animations are done, make sure that you still have '''PivotPointInfoItem''' defined when bipod is folded as described [[Arma Reforger:Weapon Creation/Prefab Configuration#Base Deployment|above]] and then perform following actions:

* Click again on '''+ button''' next to '''Deployment Points''' array to add second element to the list * Click on '''set class''' button next to '''Point Info''' in that new array element and place this point where bipod is supposed to '''pivot''' * Change '''System Identifier''' parameter to '''2''' - this will tell engine to use that '''PivotPointInfoItem''' when '''bipod is unfolded''' * Add '''two new elements''' to '''Stabilization Points''' array by clicking on '''+ button''' and call it i.e. '''LeftLeg''' & '''RightLeg''' ** Set '''Pivot Info''' class and use '''Pivot ID''' to select empty object attached to bone leg previously created (''bipod_l/r''). If you didn't create empty socket for those points, use leg bones (i.e. '''''w_bipodleg_left/right''''') and use '''Offset''' to place that point at the end of the leg. Watch out for the rotation of the bones! * '''Optionally''': tweak '''Stabilization Size''' parameter - this controls how large is the surface on which given stabilization point is resting. For bipod legs it might be useful to user bit lower values

=== Deployment IK Targets ===

Next thing on the list is setting of '''Deployment IK Targets''' in '''MuzzleComponent''' where it will be necessary to adjust 3 parameters '''- LEFT HAND TARGET, RIGHT HAND TARGET and''' '''BUTTSTOCK TRANSFORMATION.'''

* '''LEFT HAND TARGET -''' used to determine '''position of left hand when deployment is active'''. Use '''slot_magazine''' as '''Pivot ID''' * '''RIGHT HAND TARGET -''' used to determine '''position of right hand when deployment is active'''. Use '''snap_hand_right as Pivot ID''' * '''BUTTSTOCK TRANSFORMATION -''' used to snap weapon butt stock character shoulder. Use '''Offset''' to place this point at the end of the buttstock. [[File:armareforger-new-weapon-deployment-ik-targets.png]]{{Feature|important|Currently, '''LEFT HAND TARGET''' is using offset from '''LeftHandProp''' in IK anim. Because of that, it is necessary to use '''slot_magazine''' as '''Pivot ID''' and adjust how much left hand should move changing '''Z''' value in '''Offset'''. If it still doesn't work, then make sure that magazine (prop.L to be precise) in your IK anim is attached to '''slot_magazine'''}}{{Feature|warning|Make sure that [[Arma_Reforger:Weapon_Animation/Basic_Tutorial#Adding_magazine_to_the_Scene|magazine is snapped to '''slot_magazine''']] in your IK animation! Otherwise, you might encounter weird deformations of left hand weapon weapon is deployed.}}

After setting those parameters it should be now possible to deploy the weapon in game and verify the results. If you encounter some issues, make sure to turn on '''Deployment''' diagnostics from '''Diag Menu'''.

=== Deployment Aim Modifiers ===

In most cases this step is completely optional, since default values should be fine for most of the weapons. If you want to have some non standard behavior (like even better recoil reduction when weapon is deployed) then it is possible to tweak it '''MuzzleComponent → Weapon Aim Modifiers → RecoilWeaponAimModifier''' section. By changing '''Deployment Multiplier''' and '''Bipod Deployment Multiplier''' parameters in '''Linear Data, Angular Data, Turn Offset Data''' you can achieve rather interesting results if you seek for some unusual experience. As it was mentioned before though, in most cases you should be fine with default values.

[[File:armareforger-new-weapon-deployment-aim-modifiers.png]]

== Zeroing ==

<!-- {{Feature|informative|Zeroing is the term used in videogames for '''boresighting'''.}} --> First, you need to setup '''SightsComponent''' and fill in '''Sights Ranges''' with desired zeroings of your weapon. The position of the camera when you aim down sights is controlled by '''Sights Position''' and if you have the '''eye''' snap point placed in the correct spot, then no further adjustments to it should be necessary.

Sample weapon setup is bit special since iron sights are mounted on RIS rail and are not integrated part of the weapon. They also have only one zeroing mod set to '''300 meters''' so its not a good example to show how iron sights should be set.

Because of that, here is more general explanation how zeroing works using the game's AK74 as an example. Unlike in {{arma3}}, weapons in {{armaR}} are '''not using magic ballistic computer''' which is automatically adjusting angle of bullet which leaves the barrel but zeroing is {{Link|https://en.wikipedia.org/wiki/Iron_sights|working just like in real life}}. Bullets are affected by '''gravity and air friction''', so if the target is a little farther away, it is necessary to aim higher if you still want to hit your target, and that's basically how mechanical iron sights work. In principle, {{Link|https://en.wikipedia.org/wiki/Iron_sights|iron sights}} are forcing you to look at certain angle which corresponds to ballistic curve of bullet.

[[File:armareforger-new-weapon-zeroing-ak.png|1029x1029px]]

Setting points for the proper rotation of iron sights would be a tedious process, but fortunately there is an automated way built into '''Workbench''' to assist you in this process. {{Feature|important| Remember - iron sights will be zeroed to just one particular bullet time, which is assigned in Magazine. If your iron sights are misbehaving, make sure that you are using correct ballistic data for your ammunition. }} To use it, following things has to be done:

* Click with {{Controls|RMB}} on '''SightsComponent''' and select '''Toggle sight point diag''' from context menu - this will show position of '''sights point which zeroing generator will use''' * In '''SightsComponent''', set class '''PointInfo''' (via set class) on '''Sights Point Front & Sights Point Rear''' parameters * Adjust position of '''Sights Point Front''' so it sits on tip of front iron sight. You can use view port gizmo to do so after clicking on '''Offset''' parameter inside '''Sights Point Front'''.<!-- --> You can also use '''snap points''' and assign them in '''Pivot ID''' if you prefer to do so * Adjust position of '''Sights Point Rear''' so it sits on tip of rear iron sight * Make sure that both front & rear points are in one line * In '''Zeroing Generator property''' in '''Sights Component''', set class to '''BaseZeroingGenerator'''

[[File:armareforger-new-weapon-sights-debug.png|633x633px]] [[File:armareforger-new-weapon-ak74-zeroing-plank.png|thumb|260x260px|AK74 tangent sight]] Next on the list preparing a list of all available zeroing modes. AK74 iron sights can be zeroed between 100 & 1000 meters and first zeroing mode is a 'battle zero' — a fixed preset configured for a likely combat distance. By aiming at an enemy's center of mass, one may be certain that the trajectory of the projectile will make contact, neither overflying or falling short. This means that in total there are '''11''' zeroing modes.

Zeroing modes are listed inside of '''Sights Ranges''' array in '''SightsComponent'''. Using the ➕ button next to that parameter, add '''11''' entries in that array which will represent all available zeroing modes.

Each '''SightRangeInfo''' has '''Range parameter''' which need to be filled manually - and the '''Weapon Position''' class - which is generated by '''zeroing generator'''. In '''Range''', '''X''' value represents '''animation source value''' & '''Y''' represents '''desired zeroing range in meters''' (note that this value is also shared by UI).

Zeroing animation (which is not going to be created yet) goes from 0 to 1, where first entry in '''Sights Range''' array is '''0''' and last one is '''1'''. Since there are 11 zeroing modes, interval between each zeroing mode can be set to '''0.1''' - this was calculated by using following equation '''1/(number of frames - 1)'''.

This means that you should have following zeroing modes: {| class="wikitable" |+Zeroing Modes Table ! Animation Source Value ! Range [m] |- | 0 | 440 |- | 0.1 | 100 |- | 0.2 | 200 |- | 0.3 | 300 |- | 0.4 | 400 |- | 0.5 | 500 |- | 0.6 | 600 |- | 0.7 | 700 |- | 0.8 | 800 |- | 0.9 | 900 |- | 1.0 | 1000 |}

{{Feature|warning|Zeroing generator '''does not work in Prefab Edit Mode!''' [[Arma_Reforger:Prefabs_Basics#Creating_entity_prefab_in_World_Editor|Place your weapon in World Editor in regular mode]] instead!}}

Once you have filled '''Sights Ranges''' you can click with right mouse button on '''Sights Component''' & then select from context menu "'''Process zeroing data'''". Generator will ask which muzzle you want to process and in most cases '''first muzzle''' will be the only choice. After confirming selection, generator will automatically calculate necessary offsets for '''Weapon Positions''' and store those generated values the currently selected weapon '''entity'''. Therefore, it will be necessary to use '''[[Arma Reforger:Prefabs Basics#Using Apply to prefab button|Apply to prefab]]''' button and save current world afterwards.

At this stage we won't bother with animating iron sights and we will get back to it once there is animation graph set in.

== Dispersion ==

Dispersion of the weapon is controlled by two parameters - '''Dispersion Diameter''' & '''Dispersion Range''' - located in '''MuzzleComponent''' of the weapon. Both of those parameters are measured in '''meters.'''

Quite often you might find weapon dispersion data being specified in {{Link|https://en.wikipedia.org/wiki/Minute_and_second_of_arc|MOA}} - in such case you can '''multiple MOA by 0.029''' to get '''Dispersion Diameter''' value and set '''Dispersion Range''' to '''100 meters'''.

For Sample Weapon, it is assumed that weapon has '''2 MOA''' dispersion, which results in '''Dispersion Diameter''' value being equal to '''0.058'''.

[[File:armareforger-new-weapon-dispersion-config.png|thumb|392x392px|Setup of dispersion in prefab]]

[[File:armareforger-new-weapon-dispersion-setup.png|953x953px]]

Additionally, dispersion is also affected by ammunition which is fired - you can read about it [[Arma Reforger:Weapon Creation/Prefab Configuration#Extra Things|here]].

== Ammunition Creation ==

=== Ammo Configuration ===

[[File:armareforger-new-weapon-ammo-projectile-models.png|alt=Projectile configuration|thumb|532x532px|Projectile configuration]] Depending on the type of ammo are you preparing, there are few '''core prefabs''' for various types of ammunition located in Prefabs/Weapons/Core folder. In general, there are three suggested approaches:

* Creating new prefab inheriting from {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Core/Ammo_Bullet_Base.et|Ammo_Bullet_Base.et}} ''via'' '''[[Arma Reforger:Data Modding Basics#Using .22Inherit Prefab in Addon.22 function|Inherit in]]''' functionality * Duplicating one of existing ammo prefabs via [[Arma Reforger:Data Modding Basics#Using .22Duplicate to....22 function|'''Duplicate in''']] option - this might be useful for instance on rockets, if i.e. you don't want to use some of the components but still want to keep some of the configuration from it * [[Arma Reforger:Prefabs Basics#Creating inherited prefab|Inheriting from one of existing prefabs]] - this can be used if you are trying to do some variant of existing ammo. This method could be for example used when you {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Ammo/Ammo_545x39_Ball_7N6.et|5.45x39 7N6}} vanilla bullet if you would like to do newer variant of that bullet (for instance {{Link|https://en.wikipedia.org/wiki/5.45%C3%9739mm#Basic_specifications|7N10}}) with slightly changed characteristics

In this tutorial, '''Sample Weapon''' is supposed to use a variant of {{Link|https://en.wikipedia.org/wiki/6.5mm_Grendel|6.5 Grendel}} ammo but unlike in A3, this round won't be caseless to show how to configure '''spent cartridge ejection'''. Because of that, '''inheriting from {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Core/Ammo_Bullet_Base.et|Ammo_Bullet_Base.et}}''' was selected for configuration of this new bullet.

When trying to configure a bullet that exists in real life, it is good to gather as much reference material as possible. The {{arma3}} variant of the 6.5x39mm is a fictional bullet, so as an inspiration, {{Link|http://www.prvipartizan.com/search_rb.php?id&#61;A-484|PRVI PARTIZAN 6.5 mm Grendel FMJ BT 7.10 g }} with 6.5x39mm dimensions (instead of 6.5x38mm) was used, since there is a decent amount of information available for it.

After creating new inherited prefab called '''Ammo_65x39_FMJBT.et''', first step will be creating '''Ammo''' folder in '''Prefabs/Weapons''' folder and then moving '''Ammo_65x39_FMJBT.et''' prefab from '''Prefabs/Weapons/Core''' to the '''Ammo''' folder.

Once prefab is in correct place, you can start editing it in '''World Editor''' by for example entering into [[Arma Reforger:Prefabs Basics#Prefab edit mode|Prefab Edit mode]].

In Prefab itself, there are two things you will want to adjust before moving on to more complex topics. First one will be adjusting things in '''Projectile''' itself like changing following parameters:

* In '''Projectile Model''' assign model of the bullet itself - this model is visible after it is being fired * In '''Cartridge Model''' assign model of the cartridge (bullet+case). '''Right now it is not being rendered in game''' though, unless loose bullet is placed in '''World Editor'''.

If you don't have models for neither '''Projectile''' or '''Cartridge Model''' , then you can use of the existing ones. In this case {{Link|enfusion://ResourceManager/~ArmaReforger:Assets/Weapons/Ammo/Bullets/762x51/Bullet_762x51_M62.xob|Bullet_762x51_M62.xob}} and {{Link|enfusion://ResourceManager/~ArmaReforger:Assets/Weapons/Ammo/Bullets/762x51/Cartridge_762x51_M62.xob|Cartridge_762x51_M62.xob}} were used since they are closest thing which matches Lapua FMJ BT round.

=== Ballistic Properties ===

==== Formula ==== [[File:armareforger-new-weapon-ammo-air-resistance.png|thumb|483x483px|https://archive.hnsa.org/doc/firecontrol/partc.htm]] Bullets, just like in real life, are affected by {{Link|https://en.wikipedia.org/wiki/Drag_(physics)#Aerodynamics|air resistance}}. Simulating air resistance in a very realistic way is a very demanding task for the CPU - especially if you want to have firefights with hundreds of soldiers all with fully automatic weapons. Therefore, some compromises are necessary and the '''air drag''' in the game is calculated using the following formula: :<math>F=a/v^2*1/m</math>

where

:<math>F</math> is the '''drag force''' :<math>a</math> is the (de)'''acceleration''' of bullet :<math>v</math> is the '''speed''' of the bullet :<math>m</math> is the '''mass''' of the bullet

==== Setting Air Drag Parameter ==== Since the acceleration value is usually nowhere to be seen, you can try to set the correct value for '''air drag''' by guessing the value and seeing if it '''matches the data you already have'''. In this case, it is quite obvious that your first task in setting up ballistic properties will be to look for '''references''' and '''hard data'''.

Try to match the '''bullet type''' and '''barrel length''' used for measurements to get the best results. In this case, '''Sample Weapon''' uses '''14.5 inch barrel''' and there is limited {{Link|http://www.prvipartizan.com/search_rb.php?id{{=}}A-484|ballistic data available on ammo producer website}}. {| class="wikitable" ! '''Range [m]''' | 0 | 50 | 100 | 150 | 200 | 250 | 300 |- ! '''Velocity [m/s]''' | 840 | 802 | 765 | 730 | 695 | 661 | 628 |} On producer page you can also find information that this data was measured for '''24inch barrel.'''

In some cases, you might even find for '''detailed ballistic charts''' like below one - in such case you can consider lucky and move ahead to filling data in table and try to fill Excel spreadsheet.

[[File:armareforger-new-weapon-ammo-ballistic-tables-ak74.png]]

Quite often though, the only data that is available is '''ballistic coefficient, speed or time''' it takes bullet to reach '''certain range'''. If you don't have those but at least have '''muzzle velocity''', '''weight''' and '''dimensions''' of the bullet, you can try to calculate '''ballistic coefficient''' yourself to get rough approximation of the value.

==== Ballistic Coefficient ==== First, lets start with establishing what Ballistic Coefficient is. As per {{Link|https://en.wikipedia.org/wiki/Ballistic_coefficient|Wikipedia}}:

''In {{Link|https://en.wikipedia.org/wiki/Ballistics|ballistics}}, the '''ballistic coefficient''' ('''BC''', '''C<sub>b</sub>''') of a body is a measure of its ability to overcome air resistance in flight.''

If there is some '''BC''' (''ballistic coefficient)'' specified for bullet you are looking for, it will be most likely a {{Link|https://en.wikipedia.org/wiki/Ballistic_coefficient#The_G_model|G model}} value. Beside '''BC''' in '''G model''', you would also need '''bullet weight, muzzle velocity''' and some '''ballistic calculator''' in order to prepare '''ballistic chart.'''

There are bunch of online calculators which are capable of creating ballistic tables like:

* {{Link|https://www.hornady.com/4dof|Hornady ballistic calculator}} - provides quite good selection of customization * {{Link|https://www.federalpremium.com/ballistics-calculator/|Fedral ballistic calculator}} - bit more simple but it still provides good data

There is a lot of other calculators online too and you might already be using one of them. Above list though, contains calculators which are capable of providing data in '''metric system''', which is quite handy when trying to match data '''game air drag.'''

Additionally, you can also try using '''{{Link|https://www.bfxyz.nl/docs/bfxdownloads.shtml|Ballistics for Excel addon}}''', which allows you to customize a lot of parameters.

===== Using G1 vs G7 ===== Once you have decided which calculator you want to use, it is now necessary to decide which model should be used to create ballistic table, if i.e. both values for G1 and G7 are provided.

G1 and G7 refer both refer to aerodynamic drag models based on particular “standard projectile” shapes. The G1 shape looks like a flat-based bullet. The G7 shape is quite different, and better approximates the geometry of a modern long-range bullet. So, when choosing your drag model, G1 is preferable for flat-based bullets, while G7 is ordinarily a “better fit” for longer, boat-tailed bullets.

==== Creating Ballistic Table ====

===== Online Calculator ===== Assuming you have found G7 BC for your bullet, you can use previously mentioned {{Link|https://www.hornady.com/4dof|Hornady ballistic calculator}} to generate ballistic tables. On that page, fill following information:

* Change unit system to '''metric''' * Type in ballistic coefficient ( in this case '''G7 BC is equal to 0.204 )''' * Change '''velocity''' so it matches your bullet velocity - in this case it was set to '''840m/s''' * Adjust '''weight''' parameter so it matches bullet weight. '''Keep in mind this value is in {{Link|https://en.wikipedia.org/wiki/Grain_(unit)|grains}}''' * Change '''drag coefficient''' so it matches ballistic coefficient of your bullet. In this example '''G7''' was used

Once its ready, you can click on '''Calculate''' button at the bottom of the page and after few seconds you should get ballistic table like one below.

[[File:armareforger-new-weapon-ammo-ballistic-calculator.png]]

Please note that Ballistic for Excel addon excel and i.e Hornady ballistic calculator are using different default values for atmospheric situation which influences how bullets are influenced by the air drag. Because of that, you can notice that different calculators can have different results even though they seem to use identical values.

'''BfX''' addon is using by default '''ICAO weather data''' where '''Hornady Ballistic Calculator''' utilizes '''US Army Standard Metro''' values. {| class="wikitable" ! ! ! colspan="3" | Pressure ! colspan="3" | Temperature C ! colspan="3" | Humidity |- ! ! ''unit'' | ''Pascal'' | ''mmHg'' | ''inHg'' | ''C'' | ''F'' | ''K'' | ''%'' | ''kg/m3'' | ''lb/ft3'' |- ! colspan="2" | ICAO | 101324,6 | 760,00 | 29,92 | 15,00 | 59 | 288,15 | 0 | 1,22552 | 0,076506 |- ! colspan="2" | US Army Standard Metro | 99991,8 | 750,00 | 29,53 | 15,00 | 59 | 288,15 | 78 | 1,20333 | 0,075121 |- ! colspan="2" | Mayeveski Ingalls | 101591,7 | 762,00 | 30,00 | 15,56 | 60 | 288,71 | 67 | 1,22099 | 0,076224 |}

===== Excel Addon ===== Alternatively, if you want to use '''{{Link|https://www.bfxyz.nl/docs/bfxdownloads.shtml|Ballistics for Excel addon}}''', air drag calculator contains small section which utilizes this addon and creates ballistic table based on selected ballistic model & coefficient. First, make sure that you have installed this addon as per instructions {{Link|https://www.bfxyz.nl/docs/bfxinstallandupdate.shtml|on this page}} and then download & open '''{{Link|https://github.com/BohemiaInteractive/Arma-Reforger-Misc/blob/main/Configuration/Weapons/Weapons_Ballistic_Coefs.xlsm|Weapons_Ballistic_Coefs.xlsm}}''' spreadsheet. This spreadsheet is using '''VBA''' macros to calculate '''air drag''' so when asked to enable them, please do so. {{Messagebox|You can always scan Weapons_Ballistic_Coefs.xlsm with antivirus to make sure it doesn't contain any malicious code.|✩|#88cc88}} {{Feature|warning|'''Ballistics for Excel addon''' doesn't work with i.e. '''Libre Office''' and it requires desktop version of '''Microsoft Excel'''. If you don't have it, consider using other online calculators.}}

Once this spreadsheet is loaded, you would need to modify following fields:

* '''Muzzle velocity''' - in '''m/s''' * '''Ballistic Model''' - plugin accepts model from '''G1 to G8''' * '''Ballistic Coef - ballistic coefficient''' value in selected model

Optionally, you can also change interval at which data will be calculated by changing '''Interval''' parameter ''(in meters)''.

[[File:armareforger-new-weapon-ammo-sheet-calc-1.png]]

==== Air Drag Calculation ==== Once you have ballistic table, it will be time to utilize excel spreadsheet to guesstimate correct '''air drag''' value. To do so, download & open spreadsheet {{Link|https://github.com/BohemiaInteractive/Arma-Reforger-Misc/blob/main/Configuration/Weapons/Weapons_Ballistic_Coefs.xlsm|Weapons_Ballistic_Coefs.xlsm}} and enable '''macros''' - this spreadsheet is using '''VBA script''' to calculate values of air drag at selected range.{{Messagebox|This spreadsheet '''works in {{Link|https://www.libreoffice.org/download/download-libreoffice/|Libre Office}}'''. Don't forget to enable macros in the settings (<code>Tools > Options > LibreOffice > Security > Macro Security</code> ) if you are using it.|✩|#88cc88}}

After file is opened, start with typing basic data like '''Muzzle Velocity''' ''(in m/s)'' and '''Mass''' ''(in kg)'' of the bullet. Next, fill in data in '''data from firing tables''' columns according to what you have available at hand. You can also adjust '''Interval''' value to better match the source data.

[[File:armareforger-new-weapon-ammo-calc-2.png]]

Final step include tweaking of '''air drag value''' till somewhat matches the data from ballistic stables. Every time '''Air Drag''' parameter is changed, '''VBA''' script will recalculate '''values located in Data from game''' section. Below you will find two graphs showing the '''speed & time''' of bullet according to in-game algorithms and previously created ballistic tables.

Depending on the data that you have, you can try to match your ammo by '''speed''' or by its '''time of flight'''.

[[File:armareforger-new-weapon-ammo-sheet-speed-distance.png]]

[[File:armareforger-new-weapon-ammo-sheet-time-distance.png]] [[File:armareforger-new-weapon-ammo-shell-move-component.png|thumb|538x538px|'''ShellMoveComponent''' configuration]]

Since air friction works in bit simplified way compared to real world (or even ''G1'' or ''G7'' ballistic models) it will be necessary to do some compromises. Discrepancies between real life data and what can be achieved in game are especially visible for machine gun ammo above 1km. While it might not sound like a big problem for infantry used weapons, it can for instance prevent from using '''real life reticles''' on '''tanks or APCs''', since '''discrepancy between their ballistic in-game and reticle will be noticeable'''.

After fiddling a little bit with '''Air Drag''' value you should get values matching '''firing tables'''. In this case '''Air Drag''' with value '''0.00007''' seems to match real life equivalent of the bullet quite nicely, therefore we will assign such number to '''Air Drag''' property in '''General''' section of '''ShellMoveComponent''' in bullet prefab.

Next, adjust the '''Mass''' parameter in the '''Movement Config''' section of the '''ShellMoveComponent''' and set it to match the weight of the bullet - in this case it was set to '''0.0071''' ''[kG]''.

Weapon ballistics data

==== Barrel Length vs Muzzle Velocity ==== Ballistic data for bullet that we picked was measured on weapon with '''24 inch''' long barrel, while the '''Sample Weapon''' is using '''14.5 inch barrel'''. In general, the shorter barrel is, the lower muzzle velocity is. Of course, this effect is not always linear and in case of some bullets, the muzzle velocity might slightly drop after reaching certain length so it is best to try gathering some source data for particular bullet type. For instance on '''{{Link|http://ballisticsbytheinch.com/calibers.html|Ballistic By The Inch}}''' page you can find data about many different calibers available on the market.

Getting back to 6.5 Grendel ammo, on following page - https://www.gunbuilders.com/blog/the-65-grendel-ar15-build-guide<nowiki/>/ - you can find data for {{Link|https://www.hornady.com/bullets/rifle/6-5mm-264-129-gr-sst#!/|6.5 Grendel 129 grain Hornady}} bullet. {| class="wikitable sortable" ! Barrel length [inch] ! Velocity [m/s] |- | 14.5 | 682 |- | 16 | 704 |- | 20 | 728 |- | 24 | 752 |} As it is visible, around ~10% muzzle velocity loss when firing from '''14.5 barrel''' compared to '''24 inch one''', which is quite plausible number. Since there is no concrete data for this particular bullet, we can have bit of freedom with setting the value and agree on 0.91 coefficient for 14.5 inch barrel

Now, there are two approaches how to set it in data:

* Reduce '''Init Speed''' in '''ShellMoveComponent''' of bullet itself by 9% (''to 764m/s'') and leave '''Muzzle Init Speed Coef''' in '''MuzzleComponent''' of weapon unchanged ''(1.0)''. * Set '''Init Speed''' in '''ShellMoveComponent''' to value matching '''24 inch barrel''' ''(840/ms)'' and reduce '''Muzzle Init Speed Coef''' in '''MuzzleComponent''' of weapon to '''0.91''', so bullet leaves this weapon with lower velocity (''~764m/s'').

Both solutions have pros and cons and its worth to think which weapon should be used as baseline for different barrel calculations. For instance M16A2 (20 inch barrel) is quite often used as baseline for 5.56 ballistic and because of that, it might be worth to use this as a base and i.e. reduce '''Muzzle Init Speed Coef''' on your 14.5 inch '''M4''' rifle. If there are some community mods which could potentially use, then perhaps check if someone tried to establish some standards already.

Since in this case, it's rather unlikely anyone would use this semi fictional 6.5x39mm round and also because of the fact, that 14'''.5 inch barrel was also base line for 6.5x39 weapon in Arma 3''', '''first method''' was picked and '''Init Speed'''

Since there is no concrete data about penetration of reference 6.5 Grendel bullet, M855A1 penetration properties are used as reference. By checking {{Link|https://en.wikipedia.org/wiki/5.56%C3%9745mm_NATO|Wikipedia article about 5.56x45 ammunition}}, we can see that M855A1 can penetrate 9.5 mm of mild steel at 350 meter. Now, to translate this into game, few steps are necessary like:

* Checking density of target material and how it matches materials present in game * Calculating speed of bullet at reference range (350 meters) * Filling in data

=== Bullet Penetration Theory === When bullet hits for instance an metal plate in game, there are two major variables which influence whether the bullet will pass through such object or not - its '''bullet penetration ability''' and '''material resistance'''.

'''Penetration ability of the bullet''' is configured in {{Link/Enfusion|armaR|ShellMoveComponent}} and is calculated using the following formula: {{hl|Penetration Ability {{=}} Penetration Depth * Penetration Density / Penetration Speed}}.

After filling values in above parameters inside of {{Link/Enfusion|armaR|ShellMoveComponent}} right-click on that component and select '''Show penetration config'''. Once this is done, penetration ability of the bullet will be printed in the Log Console window.

'''Material resistance''' on the other hand is linked to the [[Arma Reforger:FBX Import|collider]] and '''game material''' (which is described a bit more in detail below) that is used on it. The following formula is used to calculate material resistance: {{hl|Material resistance {{=}} Thickness * Density * Penetration Resistance / Penetration Ability}}.

Now, if impact '''speed of bullet is larger than material resistance''', then '''bullet will penetrate''' such object - otherwise it is assumed that projectile was stopped by the obstacle.

==== Game Materials ==== '''Game materials''' contain information about '''material density''', their '''coefficient versus kinetic and chemical projectiles''' and sometimes they can also have '''thickness overrides''' inside of them.

If '''Thickness Override''' is set to '''None''', then penetration is calculated by measuring actual thickness of the collider (including {{Link|https://en.wikipedia.org/wiki/Sloped_armour|slope effect}}). If '''Thickness Override''' is enabled, then one of the following situations might happen depending on settings which was selected:

* '''Min''' - Thickness of the collider is used but it's capped to the value specified '''Thickness''' parameter. For instance if bullet impacts at 90 degrees at collider which is 25mm thick but '''Thickness''' is set 5mm, then game will use 5mm in '''material resistance''' calculations. In same situation but with collider being '''2mm''' thick visually, game would use '''2mm''' in material resistance calculations since this value is {{Link|https://en.cppreference.com/w/c/numeric/math/fmin|smaller from two values which are compared}}. * '''Max -''' Thickness of the collider is used but minimal thickness of this object is equal to '''Thickness''' parameter. For instance if bullet impacts at 90 degrees at collider which is 25mm thick but '''Thickness''' is set 5mm, then game will use 25mm in '''material resistance''' calculations. In same situation but with collider being '''2mm''' thick visually, game would use '''5mm''' in material resistance calculations since this value is {{Link|https://en.cppreference.com/w/c/numeric/math/fmax|larger from two values which are compared}}. * '''Clamp -''' Returns value ''{{Link|https://en.cppreference.com/w/cpp/algorithm/clamp|clamped}}'' to the inclusive range of min and max * '''Value -''' Game is using exact value as specified in '''Thickness''' in material resistance calculations <gallery widths="307" heights="159"> File:armareforger-new-weapon-ammo-penetration-1.png|Bullet can penetrate 10mm of Armor material. Collider is using armor material with '''Thickness Override''' set to '''min 5mm''' and has thickness of 25mm. Due to thickness override, bullet '''will penetrate''' this collider since lower value (5mm) will be selected File:armareforger-new-weapon-ammo-penetration-2.png|Bullet can penetrate 10mm of Armor material. Collider is using armor material with '''Thickness Override''' set to '''max 5mm''' and has thickness of 25mm. Due to thickness override, bullet '''will not penetrate''' this collider since higher value (25mm) will be selected File:armareforger-new-weapon-ammo-penetration-3.png|Bullet can penetrate 5mm of Armor material. Collider is using armor material with '''Thickness Override''' set to '''min 10mm''' and has thickness of 4mm. Due to thickness override, bullet '''will penetrate''' this collider since lower value (4mm) will be selected File:armareforger-new-weapon-ammo-penetration-4.png|Bullet can penetrate 5mm of Armor material. Collider is using armor material with '''Thickness Override''' set to '''max 10mm''' and has thickness of 4mm. Due to thickness override, bullet '''will not penetrate''' this collider since higher value (10mm) will be selected </gallery>

'''Material density''' of object affects how much resistance it will give to projectile which hits it.

'''Penetration Resistance''' coefficients like '''Kinetic Penetration Resistance''' or '''Chemical Penetration Resistance''' are used depending whether projectiles is a kinetic (like bullet) or chemical penetrator (f.e. HEAT jet). In game, '''Kinetic Penetration Resistance''' is also used to determine '''hardness''' of the material or its general capabilities to stop the bullet, since i.e. '''homogeneous armor''' (RHA) is much better at stopping bullets even though it doesn't seems to be the case when just looking at their density. Because of that, '''metal game material has 0.6 kinetic and CE coefficient'''. '''Penetration Resistance''' parameters influence final '''material resistance''' value'''.'''

Below is small table showing density and penetration resistance coefficients.{{Feature|informative|Kinetic and chemical penetration coefficients is often refereed as '''Kinetic Energy (KE)''' or '''Chemical Energy (CE)''' coefficients}}

{| class="wikitable sortable" ! Material ! Density [g/cm^3] ! KE ! CE |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Common/Materials/Game/armor.gamemat|Armor (RHA)}} | 7.860 | 1 | 1 |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Common/Materials/Game/metal.gamemat|Metal}} | 7.870 | 0.6 | 0.6 |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Common/Materials/Game/iron_cast.gamemat|Iron Cast}} | 7.870 | 0.6 | 0.6 |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Common/Materials/Game/metal_sheet.gamemat|Metal Sheet}} | 2.700 | 0.5 | 0.5 |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Common/Materials/Game/wood.gamemat|Wood}} | 0.650 | 0.7 | 1 |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Common/Materials/Game/brick.gamemat|Brick}} | 1.922 | 0.8 | 0.8 |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Common/Materials/Game/concrete.gamemat|Concrete}} | 2.300 | 1 | 1 |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Common/Materials/Game/glass.gamemat|Glass}} | 2.6 | 1.4 | 1 |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Common/Materials/Game/glass_armored.gamemat|Glass Armored}} | 5.700 | 2 | 1 |}

==== Penetration Data Calculation ==== Armor game material reflects '''{{Link|https://en.wikipedia.org/wiki/Rolled_homogeneous_armour|rolled homogeneous armor}}''' and serves as a baseline for penetration calculation. Because of that, there are few approaches how to translate 9.5mm of mild steel into game value:

* Try to find a material which would fill description of mild steel that was used in such test * Try to convert mild steel thickness into RHA

In this case we are going with second method which is trying to convert mild steel to RHA. Metal game materials can already be considered a kind of regular steel and it is using 0.6 coefficient compared to RHA material. Since we are using M855A1 as reference we will convert 9.5mm mild steel into RHA. After multiplying 9.5 by previously mentioned '''RHA coefficient - 0.6''', we will get that '''5.7mm of RHA is equivalent''' of 9.5mm mild steel plate.

Next, we need to calculate speed of the bullet at 350 meters which were mentioned on Wiki. Furthermore, we want to achieve 9.5mm at 350m performance when firing round from '''14.5 inch barrel of Sample New Weapon.'''

To do so, we will '''adjust muzzle velocity in ballistic chart''' that we generated before and see what '''speed it has at 350 meters.'''

[[File:armareforger-new-weapon-ammo-penetration-calculation.png]]

After ballistic chart is recalculated, it is possible to write down speed of the bullet - '''538m/s'''. Now, we should have all the information to fill in '''Penetration''' section of '''ShelMoveComponent''' in '''Ammo_65x39_FMJBT''' prefab :

* '''Penetration Depth''' should be set to '''5.7''' ''[mm]'' * '''Penetration Density''' should be set to '''7.860''' ''[g/cm^3]'' - this is the density of RHA material - {{Link|enfusion://ResourceManager/~ArmaReforger:Common/Materials/Game/armor.gamemat|armor.gamemat}} * '''Penetration Speed''' should bet set to '''538''' ''[m/s] -'' at this speed bullet will penetrate 5.7mm of RHA plate

[[File:armareforger-new-weapon-ammo-penetration-prefab.png]]

If everything went fine, you could verify penetration of your weapon on some test map and check how it performs versus various target with '''Game Code → Projectiles → Show shell trajectory''' debug turned on. One of the Grendel advantages is its good performance at higher ranger compared to i.e. 5.56x45 round and this should be quite visible in game too.

==== Extra Things ==== '''Init Speed Variation''' - in real life bullets are not leaving barrel at precisely same speed and there is some variation with than. For rifles, usually difference is +/- 10m/s and as can it be seen with AK74, where most sources are claiming muzzle velocity of 880m/s and Soviet official ballistic firing tables are calculated for 900m/s. In this case, truth most likely lies in between and 880m/s is minimal observed muzzle velocity and 900m/s is maximal one. In this case, you should set '''Init Speed''' to middle value (890m/s) and configure '''Init Speed Variation''' to 10m/s

'''Dispersion Multiplier -''' this parameter controls dispersion of the bullet living the barrel and can be for example used to simulate precision munition variants like 7.62x54R 7N1 rounds, which are more precise variants of 7.62x54R When trying to simulate more precise ammunition, it is good to combine '''Dispersion Multiplier''' parameter with reduced '''Init Speed Variation'''.

=== Tracer Projectiles ===

Tracer projectiles can be created in 3 ways:

* Creating new '''TracerProjectile''' entity via '''Create''' tab in '''World Editor''' and filling all the data manually * Creating inherited prefab from {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Core/Ammo_BulletTracer_Base.et|Ammo_BulletTracer_Base.et}} * Inheriting from some '''existing bullet prefab''' and '''changing entity type in text editor'''

First method is not really recommended since it most likely will be quite difficult to maintain such file. There might be some use cases for it though, if you are creating Sci-fi equipment.

==== Base Tracer Prefab Inheritance ==== Second method is recommended method although it might require setting some parameters again, like '''Init Speed''', '''Air Drag''', penetration and so on. Tracer bullets are quite often designed in a way, that they have very similar ballistic properties to regular bullets of selected rifle, so they can be used with same optics or iron sights.

To create such prefab, simply use [[Arma Reforger:Data Modding Basics#Using .22Inherit in....22 function|Inherit in]] option on {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Core/Ammo_BulletTracer_Base.et|Ammo_BulletTracer_Base.et}} and call that new bullet i.e. ''Ammo_65x39_FMJBT_Tracer.et.'' If you are using this method, you can skip to tracer projectile configuration chapter.

==== Entity Type Change ==== The third method is used on most vanilla bullets and while in this method, you just inherit all ballistic properties of standard bullet, it requires '''tinkering with text editor''' outside of '''Workbench.'''

First, start by [[Arma Reforger:Prefabs Basics#Creating inherited prefab|creating new inherited prefab]] from basic round of your choice - in this case it would be Ammo_65x39_FMJBT prefab.

[[File:armareforger-new-weapon-tracer-ammo.gif]]

==== Tracer Projectile Configuration ==== Once you have tracer prefab prepared, there will be still few parameters to configure like

* '''Tracer Burn Start After''' - type here '''time in seconds''' when tracer is supposed to '''start burning'''. Quite often specs of the bullet are starting distance, instead of time, but using spreadsheet from [[Arma Reforger:Weapon Creation/Prefab Configuration#Air drag calculation|air drag calculations]] chapter, you can estimate roughly estimate that time. * '''Tracer Burn Time - duration in seconds''' when tracer should be '''burning'''. * '''Projectile Model -''' model of the tracer. There are already few models of tracers available - all of them with different color - which can be used here: ** {{Link|enfusion://ResourceManager/~ArmaReforger:Assets/Weapons/Ammo/Tracers/Tracer_red.xob|Tracer_red.xob}} ** {{Link|enfusion://ResourceManager/~ArmaReforger:Assets/Weapons/Ammo/Tracers/Tracer_yellow.xob|Tracer_yellow.xob}} ** {{Link|enfusion://ResourceManager/~ArmaReforger:Assets/Weapons/Ammo/Tracers/Tracer_white.xob|Tracer_white.xob}} ** {{Link|enfusion://ResourceManager/~ArmaReforger:Assets/Weapons/Ammo/Tracers/Tracer_green.xob|Tracer_green.xob}}

If you want and have available data, you can also type specific values for tracer bullet like different init speed, mass or penetrability.

=== Damage ===

Kinetic damage is currently automatically calculated via following formula: {{Feature|informative|Damage {{=}} Diameter * Penetration Ability * Init Speed}} where '''Penetration Ability''' is '''bullet penetration ability (described in penetration segment), Diameter''' is a parameter inside '''ShellMoveComponent''' inside '''General''' section & '''Init Speed''' is initial speed of the bullet. This value can be previewed by using '''Show penetration config''' available in context menu after clicking with '''RMB''' on '''ShellMoveComponent.'''

Example output '''Show penetration config''' 6.5x39mm FMJBT bullet<syntaxhighlight lang="c"> DEFAULT : PenetrationDepth: 5.700 DEFAULT : PenetrationDensity: 7.860 DEFAULT : PenetrationSpeed: 538.000 DEFAULT : PenetrationAbility: 0.083 DEFAULT : DamageValue: 114.049 </syntaxhighlight>{{Feature|informative|Damage simulation is subject to change}}

=== AI Target Selection ===

AI relies on '''AICombatPropertiesComponent''' to select a target and the weapon. Not having this on equipment will prevent AI from using that equipment.

==== Usage ==== '''AICombatPropertiesComponent''' must be attached to:

* Magazine prefabs * Grenade prefabs - it is only relevant for grenades which can be used by AI to attack a target - e.g smoke grenades don't require it * UGL grenade prefabs * Rocket prefabs

Note that weapons do not need the AICombatProperties component except for throwable grenades.

Most likely base prefabs of such equipment already have this component.

==== Weapon & Target Selection ==== AI weapon & target selection algorithm evaluates all known targets and all available weapons and magazines available to an AI soldier. Then it selects best target, weapon and magazine for attack.

This evaluation takes into account multiple parameters of target and weapon.

* Target parameters: distance to target, target type, target priority, is target aiming at us, is target in cover. * Weapon parameters: can this be used against that target type, priority of this weapon compared to other available weapons, min range of the weapon (relevant for rockets and grenades).

Also AI separate their targets into those which they can attack '''directly''' and those which they can attack '''indirectly. Indirect''' attack means that we don't have to hit the target precisely to cause damage, for instance think of a frag grenade or rocket. Targets available for indirect attack are currently those which we have lost behind cover, but didn't totally forget about. The '''Direct''' attack means that we see the target and can shoot it directly.

==== Properties ==== * '''Used Against''' - most important property. It specifies against which target types this equipment can be used. Example: AK-74 magazine is configured to be used against infantry and unarmored vehicles. * '''Priority''' - priority value of this equipment. If all other properties are same, AI will choose the equipment with highest priority. * '''Priority Against Vehicles''' - priority of this equipment against vehicles. If the default value is used, it will have same priority against vehicles as against infantry. * '''Indirectly Used Against''' - specifies against which target types AI will prefer to use the weapon for '''indirect attacks'''. Example: grenades are configured to be used indirectly against infantry.

==== Priority Values ==== The minimal requirement is that priority values must make sense for all equipment combinations available for AI in generic case. For example, if in our faction we don't have an AI soldier carrying both PKP and M249 at the same time, it makes no sense to think which one the AI should use first, and which one should have higher priority. But it makes sense to think of a the real AI soldier configuration in the faction: he has a handgun and some rifle, therefore most likely handgun magazines should have lower priority than rifle magazines, so that the soldier uses rifle first.

Another thing which must be thought is priority of equipment in '''turrets''', if such turrets have multiple weapons, for example the BTR-70 turret.

'''Priority does not always mean higher damage'''. For instance, a weapon might have high single shot damage but huge reload time, so that it is less practical than a generic rifle. A turret might have two machineguns, an HMG and an LMG, and we might want AI to use LMG against infantry first, and save HMG for vehicles.

If you do not know what priority value to use, please refer to values on existing comparable magazine/weapon prefabs. We can't quote recommended values here because they might change.

==== Examples ==== {| class="wikitable" ! Type ! Prefab ! Comment |- | Generic Rifle Magazine | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Core/Magazine_Base.et|Magazine_Base.et}} | |- | Frag Grenade | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Core/FragGrenade_Base.et|FragGrenade_Base.et}} | It has a small priority, it is configured to be used for indirect attacks. AI decides to use the grenade against targets which hide behind cover. |- | UGL Grenade | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Core/Ammo_GrenadeLauncher_Base.et|Ammo_GrenadeLauncher_Base.et}} | It also has small priority, but higher than normal grenade. It has higher priority against vehicles. Like the frag grenade, it's configured for indirect attacks, but only against infantry. |- | Armor-Piercing Rocket | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Core/Ammo_Rocket_Base.et|Ammo_Rocket_Base.et}} | |- | LMG/HMG APC turret ammo | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Magazines/Box_762x54_PK_250rnd_Base.et|Box_762x54_PK_250rnd_Base.et}}<br> {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Magazines/Box_145x114_KPVT_50rnd_Base.et|Box_145x114_KPVT_50rnd_Base.et}} | HMG magazine priority against infantry is smaller than LMG magazine priority to make AI prefer LMG against infantry. |}

=== AI Ballistic Tables ===

As describe in [[Arma Reforger:Weapon Modding#New Ammo AI Config|Weapon Modding]] tutorial, there is still one important thing to do when creating new ammo type - generation of '''AI Ballistic Tables'''. Those tables are used by AI soldiers to estimate how much they need to adjust their weapon to hit desired target. Details of the setting AI tables are described on previously mentioned [[Arma Reforger:Weapon Modding#New Ammo AI Config|Weapon Modding]] tutorial so here is short version of what is necessary to create and configure such tables:

* Create new '''AI Ballistic Table''' in '''Resource Browser''' (''recommended location - Config →Weapons →AIBallisticTables folder)'' by clicking '''Create''' button and then selecting from the context menu '''Config file''' option ** When asked about type of config, select '''BallisticTableArray''' ** It is recommended to use AIBT_''nameOfAmmoPrefab.conf'' name for ballistic tables - i.e. '''AIBT_65x39_FMJBT.conf''' * Open ammo prefab and in '''ShellMoveComponent''' locate '''Ballistic Table Config''' parameter in '''Ballisitc Tables''' section ** Assign AIBT ''(AIBT_65x39_FMJBT.conf)'' config to '''Ballistic Table Config proper''' & save prefab * Click on '''ShellMoveComponent''' with '''Right Mouse Button''' and from context menu select '''Generate ballistic tables''' option ** Whole process might take few seconds depending on air drag value of the bullet - higher values tend to result in higher computing times ** Once process is complete, save changes in '''World Editor''' by i.e. '''{{Controls|Ctrl|S}}''' combo

[[File:armareforger-new-weapon-generating-ai-bt.gif]]

== Magazine Well ==

Magazine wells are classes which help to establish multi weapon (and mods) magazine compatibility. Any magazine which is using the selected class will be usable in any other weapon, which is using exactly the same magazine well.

In {{armaR}}, there are already '''plenty of magazine wells available''' but since this sample weapon is using rather unique magazine well, a new one has to be created. {{Messagebox|'''Recommended read''': '''{{Link|Arma_Reforger:Script Editor}}''' documentation.|📖|lightgrey}}

A new '''magazine well''' can be added to the list by creating a '''new script file''' in one of the '''game script folders''' (f.e. ''Scripts/Game/Weapon'' folder can be used - if you don't have such folder, then you need to create it manually). There are no requirements to the name of the script file but it is suggested to use the {{hl|TAG_MagazineWell_}} prefix naming convention. Such setup is sort of necessary since unlike models or prefabs, '''scripts don't use metafiles''', and they [[Arma Reforger:Data Modding Basics#Moddability table|can be replaced by placing file with exact name and relative location as original one]]. Once the script file is created and opened in '''Script Editor''', the only remaining thing is to create a new class which inherits from '''BaseMagazineWell'''. <enforce> // Script File class MagazineWell65x39C_SampleWeaponClass { }

MagazineWell65x39C_SampleWeaponClass MagazineWell65x39C_SampleWeaponSource;

class MagazineWell65x39C_SampleWeapon : BaseMagazineWell { } </enforce>

In example above, new magazine well is called '''MagazineWell65x39C_SampleWeapon'''.

After magazine well is created, it will be necessary to recompile all game scripts via either '''Compile and Reload Scripts''' ({{Controls|Shift|F7}}) option in '''Script Editor''' or '''Reload Game Scripts''' ({{Controls|Ctrl|R}}) in '''World Editor'''.

Once scripts are compiled it should be possible to assign that class in '''Magazine Well''' property found both in '''MagazineComponent''' of magazine and '''MuzzleComponent''' of weapon. If there is already some class assigned in the '''Magazine Well''' property, then you can still change it by a right-click on it and selecting '''change class''' option from the context menu.

== Magazine Prefab Setup ==

New magazine prefab can be easily created by inheriting from '''{{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Core/Magazine_Base.et|Magazine_Base.et}}''' prefab. Once new prefab inheriting from '''{{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Core/Magazine_Base.et|Magazine_Base.et}}''' is prepared, it is possible to assign magazine model in '''MeshObject'''.

Next step will be modification of magazine related properties in '''MagazineComponent'''. Over there, it is possible to set things like ammo which is used or capacity of magazine.

In '''InventoryItemComponent''', similar to main weapon, it is possible to change inventory related properties like name or weight. In this example, values were set as on picture below.

=== Tracer Magazine Setup ===

== Crate Filling ==

Once weapon and magazine are ready, it is possible to add those to crates, so they can be picked up either in '''Conflict''' armory or during '''Game Master''' sessions. In principle, there are two types of crates available in game:

* '''Arsenal crates''' - those can be either unlimited or be single use. Closely tied to '''playable Factions'''. It is impossible to precisely specify the amount of available items. * '''Regular storage crates''' - using standard storage system, where creator defines exact amount of items, which are available inside of the crate.

=== Arsenal Crates ===

Content of Arsenal Crates is closely tied with '''faction configs''' and '''Faction Manager'''. If for instance given faction is not present in currently present game mode, then such faction specific will be empty in game. Content of those crates is defined through '''[[Arma Reforger:Entity Catalog|Entity Catalogs]]''' which are placed inside of faction configs. [[File:armareforger-new-weapon-adding-weapon-to-arsenal.png|thumb|609x609px|Adding elements to '''{{Link|enfusion://ResourceManager/~ArmaReforger:Configs/EntityCatalog/USSR/USSR_InventoryItems.conf|USSR_InventoryItems.conf}}''']]

==== Adding to existing crates ==== Adding new items to '''existing''' '''Faction Arsenals''' crates involves the following steps:

* Creating override of '''existing Arsenal config''' - either '''{{Link|enfusion://ResourceManager/~ArmaReforger:Configs/EntityCatalog/US/InventoryItems_EntityCatalog_US.conf|InventoryItems_EntityCatalog_US.conf}}''' (''used by US Army''), '''{{Link|enfusion://ResourceManager/~ArmaReforger:Configs/EntityCatalog/FIA/InventoryItems_EntityCatalog_FIA.conf|InventoryItems_EntityCatalog_FIA.conf}}''' (''used by FIA'') or '''{{Link|enfusion://ResourceManager/~ArmaReforger:Configs/EntityCatalog/USSR/InventoryItems_EntityCatalog_USSR.conf|InventoryItems_EntityCatalog_USSR.conf}}''' (''used by the USSR faction'') - by using '''[[Arma Reforger:Data Modding Basics#Using .22Override in....22 function|Override in "addon name"]]''' functionality * Open overridden file and add new element to one of the sub containers in '''Multi Lists''' array. ** For instance, if you want to add new weapon, then click on '''plus + arrow''' '''(1)''' on the right side of '''Multi Lists → Weapons''' and add new element of '''SCR_EntityCatalogInventoryItem.''' * '''Assigning prefab of item''', which is supposed to be visible in '''Arsenal''' crate, to '''Entity Prefab''' property. This can be done either by clicking on button with two dots or by dragging and dropping prefab on this field * In '''Entity Data List''' property, add new '''SCR_ArsenalItem''' element to the list by clicking on '''plus button (2)''' * In '''Arsenal Data''' entry added in previous step, select proper '''Item Type & Item Mode''' from the drop down menu ** For rifles, '''Item Type''' can be set to '''RIFLE''' and '''Item Mode''' to '''WEAPON''' ** For rifle magazines, '''Item Type''' can be set to '''RIFLE''' and '''Item Mode''' to '''AMMUNITION''' * If you want to have your item visible in '''Racks ('''like '''{{Link|enfusion://ResourceManager/~ArmaReforger:PrefabsEditable/Auto/Systems/Arsenal/WeaponRacks/E_WeaponRackCabinetArsenal_FIA.et|E_WeaponRackCabinetArsenal_FIA.et}}''' or one visible in Conflict armory), then it is also necessary to '''add entry (3)''' to '''Arsenal Display Data''' ** Over there, fill in '''Item Offset & Item Rotation Values''' so item is correctly displayed on weapon rack * Repeat above steps until you have added all items which you wish to have in Arsenal. {{Feature|important|Once those changes are performed, it might be necessary to '''Reload Game Scripts''' or even '''restart the Workbench'''; after that, those new items should be visible in existing crates in both '''Game Master''' and '''Conflict''' game mode}}

{{Clear}} ==== Creating new faction-less crates ==== Alternative to adding items to one of the existing arsenal crates is creating a new, faction less variant. This is possible by using '''Arsenal Override Config''' located in '''SCR_ArsenalComponent''' of '''Arsenal''' crate prefab.

* Duplicate one of the existing crates or inherit from '''{{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Systems/Arsenal/ArsenalBoxes/ArsenalBox_Base.et|ArsenalBox_Base.et}}''' if you want to create new crate from scratch ** In case of Sample New Weapon, '''{{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Systems/Arsenal/ArsenalBoxes/USSR/ArsenalBox_USSR.et|ArsenalBox_USSR.et}}''' was duplicated using "[[Arma Reforger:Data Modding Basics#Using .22Duplicate to....22 function|'''Duplicate to'''" functionality.]]

Once box is ready, it is time to prepare content of the crate itself. First step towards it will be preparing of '''alternative arsenal config -''' unfortunately config prepared for [[Arma Reforger:Entity Catalog|'''Entity Catalog''']] is not compatible with override config, so it is necessary to create new one. To do so, create a new config file of '''SCR_ArsenalItemListConfig''' type in '''Configs→ Arsenal''' folder - in this example it is called ''ArsenalConfig_SampleNewWeapon.conf''. Once config file is created, you should be greeted with somehow familiar parameters that previously found in '''Entity Catalog''' configuration.

After filling ''ArsenalConfig_SampleNewWeapon.conf'' with all the data, the config should be ready to be used. To do so, open previously prepared Arsenal Box in i.e. Prefab Edit Mode and assign arsenal config to '''Overwrite Arsenal Config''' in '''SCR_ArsenalComponent'''. Once that ready, don't forget to save prefab - at this stage this box should be testable in any World Editor scenario - even if there are no factions defined.

Once all steps completed, you might wish to make this prefab visible in Game Master, to do so, you would need to make editable variant of '''Arsenal Box''' via instructions mentioned on [[Arma Reforger:Game Master: Editable Entities Configuration|Editable Entities Configuration]] page and then follow the steps mentioned on [[Arma Reforger:Asset Browser Mod Integration|Asset Browser Mod Integration]] page to register it in '''Game Master''' itself.

=== Regular Crates ===

If it is desired to have some specific amount of items, then it is possible to use '''UniversalInventoryStorageComponent''' (or its SCR_ equivalent) which can be added to basically to any entity with physics enabled.

{{Feature|informative|Process of adding such custom create to in-game editor is not covered here and this subject is pretty well covered in the '''{{Link|Arma Reforger:Asset Browser Mod Integration|Asset Browser Mod Integration}}''' page.}}

First step is to locate the prefab where the new item should be stored. In this tutorial '''{{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Props/Military/AmmoBoxes/AmmoBox_545x39_2160rnd.et|AmmoBox_545x39_2160rnd.et}}''' was [[Arma Reforger:Data Modding Basics#Using .22Duplicate to....22 function|duplicated to addon]] as '''AmmoBox_SampleWeaponMagazines.et''' and then used as an example on how to add new magazines to it. Once that duplicated prefab is present in target addon, following things have to be done:

* Navigate to '''SCR_UniversalInventoryStorageComponent''' * Add new entry to '''Multi Slots''' array * Set '''Slot Template''' to '''InventoryStorageSlot''' and assign to it some unique name, i.e. ''Magazines'' * Assign magazine prefab to '''Prefab slot''' in this newly created '''Slot Template''' * Change '''number of items''' present in this slot by modifying '''Num Slots''' value ''(f.e. it can be set to 25)''

After that, this crate should have 25 magazines of your choice inside.{{Feature|informative|'''Next part''' - [[Arma_Reforger:Weapon_Animation|Weapon Animation]].}}

{{GameCategory|armaR|Modding|Assets|Weapon Creation|Tutorials}}
iehip7764336dthpy81x4pz0rb1wrj1

# Arma Reforger:Weapon Animation/Setup

5050
34384
373097
371027
2025-03-28T15:06:31Z
Reyhard
10671
Added info about option to duplicate workspaces
373097
wikitext
text/x-wiki
{{TOC|side}} This part of the tutorial covers the basics of setting up the animation workspace. You might expect to find information on how to create an animation workspace using one of the existing workspaces as a base. This means that this tutorial will not go into depth on creating new custom graphs, creating new nodes, and so on. In any case, following these instructions, you should be able to have a fully animated weapon in the game.

== Animation Workspace Preparation ==

=== Workspace Creation ===

{{Messagebox|'''Recommended read:''' Before going any further, it is recommended to make yourself familiar with [[Arma_Reforger:Animation_Editor|'''Animation Editor documentation''']].|📖|lightgrey}} First step in creating animation for weapons is preparing new '''animation workspace '''for asset that is being worked on. Alternatively, it is also to '''duplicate one of the existing workspaces''' which can save a lot of time.

==== Duplicating existing workspace ==== If you choose to duplicate some existing workspace, start by opening workspace (via '''File → Open Workspace''' or '''{{Controls|Ctrl|O}}''' shortcut) which should be duplicated - in this case it is '''{{Link|enfusion://ResourceManager/~ArmaReforger:Assets/Weapons/Rifles/workspaces/ak74.aw|ak74.aw}}'''.

[[File:armareforger-new-weapon-animation-duplicate-workspace-option.png]]{{Feature|informative|In this article, [[Arma_Reforger:Resource_Manager:_Options#Register_.22enfusion:.2F.2F.22_protocol|'''Enfusion links''']] are used. With those links it is possible to open specific resource just by simply clicking on that link. Enfusion links '''has to be manually activated in Workbench options''' (Workbench -> Options -> Workbench -> Register "enfusion://" protocol) before it can be used]}}

After AK74 workspace is loaded, use '''File → Duplicate Workspace''' option. This should open new window like one below

[[File:armareforger-new-weapon-animation-duplicate-workspace.png]]

Over there, select the '''location and name of new workspace''' in '''Target workspace'''. In Reforger, workspaces files for multiple similar assets are placed in asset folder one level higher than the asset is located in - f.e. '''Assets/Weapons/Rifles/Workspaces'''. In this tutorial, the '''sampleweapon_01.aw''' workspace was created in '''Assets/Weapons/Rifles/Workspaces '''inside '''SampleMod_NewWeapon''' addon.

'''Duplicate column''' contains names of the new files, which will be created - change it so it matches the name of the weapon you are creating.

If you are not using [https://en.wikipedia.org/wiki/Apache_Subversion SVN repository] , then uncheck '''Add files to SVN''' option and after that, click on '''Duplicate''' option. If everything went fine, new files should be created and the '''new workspace should be now opened''' in Animation Editor with exactly same data as source workspace.

===== Clearing duplicated workspace ===== [[File:armareforger-new-weapon-animation-incorrect-anim.png|thumb|M16 using AK74 animation - notice where the bolt is moved]] Weapon animations (like bolt or trigger movement), such as those copied from '''ak74_weapon.asi''' are unique to each weapon. If an asset doesn't use '''exactly the same skeleton''' as that weapon, then animations may misplace different parts of the weapon. Therefore it is recommended to '''unassign animation'''s from weapon animation instance - this way risk of some '''vanilla animation breaking your weapon is avoided'''.

It is possible to select multiple entries in animation instance and then clicking on that selection with '''Right Mouse Button'''. After that, select from the context menu option '''Unassign animations -''' this should clear assingment in all selected fields.

[[File:armareforger-new-weapon-animation-unassign-animations.png]]

After all those actions were completed, you can safely '''skip to [[Arma Reforger:Weapon Animation/Setup#Setting%20up%20preview%20models|Setting up preview models]]''' segment.

==== Creating new workspace ==== In case you want to start from more empty state, navigate to '''File → New Workspace '''in top bar or use the '''{{Controls|Ctrl|N}} '''shortcut. Once that is pressed, '''Create New Workspace '''window where it is necessary to fill location where new workspace will be created. It is also important to check '''Create empty''' option - otherwise new workspace will create bunch of files which you cannot change anymore.

[[File:armareforger-new-weapon-animation-workspace-creation.png]]

In Reforger, workspaces files for multiple similar assets are placed in asset folder one level higher than the asset is located in - f.e. '''Assets/Weapons/Rifles/Workspaces'''. In this tutorial, the '''sampleweapon_01.aw''' workspace was created in '''Assets/Weapons/Rifles/Workspaces '''inside '''SampleMod_NewWeapon''' addon. {{Feature|informative|Vanilla Reforger assets are using '''name of the weapon '''as '''name of various animation files'''. For instance:

* [enfusion://ResourceManager/~ArmaReforger:Assets/Weapons/Rifles/workspaces/ak74.aw ak74.aw] - Animation Workspace for AK74 * [enfusion://ResourceManager/~ArmaReforger:Assets/Weapons/Rifles/workspaces/ak74.ast ak74.ast] - Animation Template for AK74 * [enfusion://ResourceManager/~ArmaReforger:Assets/Weapons/Rifles/workspaces/ak74.agr ak74.agr] - Animation Graph File * [enfusion://ResourceManager/~ArmaReforger:Assets/Weapons/Rifles/workspaces/ak74.agf ak74.agf] - Animation Graph * [enfusion://ResourceManager/~ArmaReforger:Assets/Weapons/Rifles/workspaces/ak74_weapon.asi ak74_weapon.asi] - Animation Instance - Weapon part * [enfusion://ResourceManager/~ArmaReforger:Assets/Weapons/Rifles/workspaces/ak74_player.asi ak74_player.asi] - Animation Instance - Character part}}

Once location & name of the file are confirmed, an empty '''sampleweapon_01.aw&nbsp; '''workspace should be automatically opened in '''Animation Editor'''.

[[File:armareforger-new-weapon-animation-animation-editor.png|800x800px]]

=== Creating animation instance template (or reusing existing) ===

{{Messagebox|'''Recommended read''': [[Arma Reforger:Animation Editor: Templates and Instances Tutorial|Animation Editor: Templates and Instances Tutorial]]|📖|lightgrey}}

Next thing on the list will be configuration of '''Animation Template'''. That file contains [[Arma Reforger:Animation Editor#Anim Set|template animation set]] - '''animation groups, columns and rows''' which are then used by all '''Animation Instances '''in current '''Animation Workspace'''.

Now, there are few possibilities when it comes configuring '''Animation Template - '''it is possible to '''use existing template''', create '''duplicate of it '''or '''create new template from scratch'''. Both have its pros and cons and it all depends on various factors. If for instance new weapon is yet another variant of AK74, it might be possible to reuse existing animation template without any problems.

==== Creating new template ====

* {{Icon|unchecked}} All entries in animation template has to be set from scratch * {{Icon|checked}} New animation groups & rows can be added or deleted * {{Icon|warning}} Need to be manually updated in case there is some change in vanilla date [[File:armareforger-new-weapon-animation-creating-new-template.png]]

To create new template, click with '''Right Mouse Button '''on '''Animation Template '''line in '''Workspace '''window and then select '''New Template... '''option from the menu. After that, you will be asked where new file should be created.

==== Using existing template ====

* {{Icon|checked}} Minimal amount of work required to get it working * {{Icon|unchecked}} Cannot be modified - it is not possible to add new groups or rows. Might be problematic if weapon is quite non standard * {{Icon|warning}} Creates dependency on vanilla content - if it gets updated it can break your animation workspace but sometimes it might help you updating your content to latest standards [[File:armareforger-new-weapon-animation-using-existing-template.png]]

To use existing Animation Template, click with Right Mouse Button on Animation Template line in Workspace window and then pick '''Assign Existing Template... '''option from the context menu. After picking this option, you will be asked to locate '''Animation Template '''file (''files using .ast extension'')

==== Using duplicated template ====

* {{Icon|checked}} Relatively easy to set up but requires few more steps compared to using existing Animation Template * {{Icon|checked}} New animation groups & rows can be added or deleted * {{Icon|warning}} Need to be manually updated in case there is some change in vanilla date

In this tutorial, a '''duplicated animation template is used''', since '''Sample New Weapon '''is going to use logic similar to already existing in-game weapon - AK74. To do so, follow below steps: # Navigate to '''Animation Template '''that you want to duplicated. '''Animation Templates '''are using .ast extension. In this case [enfusion://ResourceManager/~ArmaReforger:Assets/Weapons/Rifles/workspaces/ak74.ast ak74.ast] was used # Use [[Arma_Reforger:Data_Modding_Basics#Using_.22Duplicate_to....22_function Duplicate to addon|'''Duplicate to addon''']] functionality on that file and type your desired name - i.e. ''sampleweapon_01'' [[File:armareforger-new-weapon-animation-duplicate-template.gif]]

After those steps are completed, it is possible to use this template in '''sampleweapon_01.aw '''workspace. To do so, follow the instructions mentioned in '''using existing template paragraph '''and select '''sampleweapon_01.ast '''when asked for existing template.

=== Creating animation instance for player & weapon ===

Once animation template is configured, it is right time to move to preparing '''Animation Instances'''. As mentioned in [[Arma_Reforger:Animation_Editor#Workspace Animation Editor|Animation Editor]] documentation, '''Animation Instances''' are unique sets of animations which share same logic.&nbsp;

Weapons are using two animation instances - one for '''player '''and one for '''weapon'''. '''Player animation instance''' is applied to character which is holding the weapon and '''weapon animation instance''' is applied to the weapon itself. When character is holding a weapon, both of those sets are played simultaneously, therefore it is quite important to keep both animations with same length so they stay synchronised. Some more info about power instances can be found on [[Arma_Reforger:Animation_Editor:_Templates_and_Instances_Tutorial|Animation Editor: Templates and Instances Tutorial]] page (it is a recommended read nevertheless!) {{Feature|important|Please note that not all animations have to be synchronised between instances but those are '''exceptions!'''}}

[[File:armareforger-new-weapon-animation-new-animation-instance.png|alt=|thumb|437x437px|Adding new animation instance to workspace]] Creating new animation instances is fairly straightforward and involves the following actions: * Click with '''Right Mouse Button '''on '''Animation Instances''' field in the '''Workspaces''' window * Select '''New Animation Instance...''' option from the context menu * Select new animation instance '''name & location '''and then confirm with '''Ok '''button ** It is recommended to use _''player & _weapon ''suffixes for animation instances to keep data readable (it is not mandatory though)<br /> As it was mentioned before, weapon requires two animation sets and in case of sample weapon, following animation instances were created:

* '''sampleweapon_01_player.asi ''' - animation instance containing character related animations * '''sampleweapon_01_weapon.asi ''' - animation instance containing weapon related animations Both sets of animations are empty at this stage, and we will come back to fill them in as soon as we have some animations ready to use. [[File:armareforger-new-weapon-animation-anim-sets-window.png|none|thumb|867x867px|'''Anim Sets''' inside '''Sample New Weapon''' animation workspace]]

=== Setting animation graph ===

Animation Graph consist of '''Graph (.agr) '''and '''Graph File (.agf)'''. '''Graph '''itself contains all '''Variables''', '''Commands '''and '''IK Chains''' that would be available to all animations graph plus link to '''Graph File(s)'''.

'''Graph File '''contain '''Sheets '''and those sheets contain actual '''animation graph '''with [[Arma_Reforger:Animation_Editor:_Nodes|Animation Nodes]].

Similar as with animation template, there are few possibilities when it comes to graph creation and again, same as with '''Animation Template, '''there are some pros and cons of such solution. If you intend to create a weapon that is similar to one of the existing weapons, then duplicating the animation graph is the suggested approach - unless the weapon you are preparing doesn't require any tweaks in the graph compared to the vanilla data.

Of course, if weapon is sort of '''unique '''(let's say bolt action rifle or some clip loaded rifles) then '''new graph might be necessary '''- in such scenario though it would be still wise to use existing weapon graph as reference.

==== Creating new graph ==== [[File:armareforger-new-weapon-animation-new-graph.png|left]] To create new graph, click with '''Right Mouse Button '''on '''Graph '''line in '''Workspace '''window and then select '''New Graph... '''option from the menu. After that, you will be asked where new file should be created.{{Clear}}

==== Using existing graph ==== [[File:armareforger-new-weapon-animation-existing-graph.png|left]] To create new graph, click with '''Right Mouse Button '''on '''Graph '''line in '''Workspace '''window and then select '''Assign Existing Graph... '''option from the menu. After picking this option, you will be asked to locate '''Graph '''file (''files using .agr extension''){{Clear}}

==== Duplicating existing graph ==== Process of duplicating '''Graph''' is exactly same as with '''Animation Template''' described before. Similar as with animation template, '''duplication of existing graph was chosen''' - mainly to save time required to define '''variables''' and mandatory '''commands'''. Even if you are doing some custom weapon In this case, [enfusion://ResourceManager/~ArmaReforger:Assets/Weapons/Rifles/workspaces/ak74.agr ak74.agr] was picked to be duplicated into '''sampleweapon_01.agr'''.

Once duplication is completed and new graph is assigned to '''Graph '''property, it will be necessary to remove reference to old '''Graph File''' and this can be done by clicking with '''Right Mouse Button '''on '''Files '''entry ([enfusion://ResourceManager/~ArmaReforger:Assets/Weapons/Rifles/workspaces/ak74.agf ak74.agf] in this case'') in '''Graph '''section of the Workspace and then selecting '''Remove '''option from the context menu.''

{{Feature|warning|Proceed with caution when doing changes in text editor!}}After duplication of .agr file, it will be necessary to change '''AnimSetTemplate''' property inside of that new .agr via '''text editor''' of your choice - it can be even notepad. Open '''Animation Workspace (.aw)''' in text editor, locate '''AnimSetTemplate''' and copy it. Next, open .agr file in text editor and replace '''AnimSetTemplate''' line by the one copied from animation workspace. Once its done, save file and restart workbench.

[[File:armareforger-new-weapon-animation-edit-graph.png]]

=== Creating Graph File ===

[[File:armareforger-new-weapon-animation-creating-graph.png|left]]

Process of creating '''Graph File '''is almost exactly the same as with graph or template. In most cases, '''duplication''' is still the most recommended method.

In case you want to make new file from scratch, new '''Graph File '''can be created through context menu which is available after clicking with '''Right Mouse Button '''on '''Files '''property in '''Graph '''section. Over there, you can either select''' Create Graph File..'''. or '''Add Existing Graph File... '''options. Keep in mind [[File:armareforger-new-weapon-animation-new-sheet.png|alt=|thumb|387x387px|New sheet creation]]{{Clear}}

{{Feature|informative|In case of creating new '''Graph File''', it is necessary to '''create new sheet''' - this can be done by clicking on '''Graph File''' with Right Mouse Button and then selecting '''New Sheet..'''. option from the context menu. After that, a new pop will appear asking for sheet name. In this case, it is recommend to use "Master" for main sheet}}

==== Setting graph file ==== '''Duplication '''approach can be also used to create a '''Graph File '''and since it is in many cases the '''easiest and fastest way''', this solution was used to configure '''Sample Weapon '''animation workspace.

Perhaps it is worth mentioning here, that it is also possible to copy and paste animation nodes between Animation Graphs. To do so, open second instance of '''Animation Editor '''and then open '''Animation Workspace '''of your choice. Once it is loaded, select all nodes in '''Animation Graph '''window with mouse by holding {{Controls|LMB}}which you want to copy paste, press '''{{Controls|Ctrl|C}} '''to copy those nodes''', '''select again '''Animation Editor '''containing your weapon, click once with '''Left Mouse Button''' in '''Animation Graph '''inside of&nbsp;that '''Animation Editor '''and finally, press '''{{Controls|Ctrl|V}} '''to paste all those nodes.

[[File:armareforger-new-weapon-animation-copy-paste-graph.gif|1800x1800px]]

=== Setting up preview models ===

It might be also quite handy to set '''Preview Models '''in current animation workspace - this will allow to quickly verify if animations are playing correctly and see if interpolations between nodes are working as intended in graph debug mode. Only '''one preview model '''can be active in''' Anim Editor Preview '''window''', '''so it will be necessary to set two sets of preview models - one for debugging of '''weapon animation instance '''and second for debug of '''player animation instance.'''

==== Weapon preview models ==== Beginning with setting preview model for weapon, following steps has to be performed to add:* Click with '''Right Mouse Button on Preview Models '''line in '''Workspace '''window and then select '''Add Preview Model... '''option.&nbsp; After that a proper model (.xob) has to be selected. In this case [enfusion://ResourceManager/~SampleMod_NewWeapon:Assets/Weapons/Rifles/SampleWeapon_01/SampleWeapon_01.xob SampleWeapon_01.xob] was selected.[[File:armareforger-new-weapon-animation-add-preview-model.png]]{{Messagebox|'''Tip''': It is possible to disable background ground model in '''Anim Editor Preview''' window by clicking on '''Options''' in top right corner of the view port and then unchecking '''Ground property''' in '''Scene settings''' tab.|✩|#88cc88}}Next, it might be nice to have (but not essential) to add magazine to the weapon by adding child model, to do so, click with '''Right Mouse Button''' on '''entry '''in '''Preview Models '''list (''f.e. [enfusion://ResourceManager/~SampleMod_NewWeapon:Assets/Weapons/Rifles/SampleWeapon_01/SampleWeapon_01.xob SampleWeapon_01.xob]), ''then select from context menu option '''Add Child Model...&nbsp; '''and finally, pick model of the magazine ([enfusion://ResourceManager/~SampleMod_NewWeapon:Assets/Weapons/Magazines/SampleWeapon_01/Magazine_65x39c_SampleWeapon_01_30rnd.xob Magazine_65x39c_SampleWeapon_01_30rnd.xob]) from the list.

[[File:armareforger-new-weapon-animation-add-child-model.png]]

By default, child model will be created at 0,0,0 and most likely such state in desired. It is possible to attach such child model to some bone in parent bone by changing '''Bone '''parameter in '''Properties '''window. In case of the magazine, it is possible to snap it to '''slot_magazine '''bone, which should result in model nicely sitting in magazine well.

[[File:armareforger-new-weapon-animation-set-child-bone-preview.gif|1800x1800px]]{{Messagebox|'''Tip''': Magazine model visibility can be toggled clicking on '''Enabled''' property in '''Properties''' window when magazine in '''Preview Models''' list is selected or by clicking on little '''eye icon''' which is visible when mouse is hovering above '''child preview model'''.|✩|#88cc88}}

==== Character preview model ==== Adding of character preview is using basically same principle as weapon but this time there will be two child models attached to it. Starting with character model itself, click with '''Right Mouse Button''' on '''Preview Models''' field and then select '''Add Preview Model... '''option. After that, you can pick one of the characters models in xob model. Vanilla data contains two models with some equipment merged in:

*[enfusion://ResourceManager/~ArmaReforger:Assets/Characters/Animation/AnimTestChar_USSR_01.xob AnimTestChar_USSR_01.xob ] - character with USSR uniform *[enfusion://ResourceManager/~ArmaReforger:Assets/Characters/Animation/AnimTestChar_US_01.xob AnimTestChar_US_01.xob] -&nbsp; character with US Army uniform

Once character model is present in Preview Models list, it is possible to add two child models:

* Weapon ([enfusion://ResourceManager/~SampleMod_NewWeapon:Assets/Weapons/Rifles/SampleWeapon_01/SampleWeapon_01.xob SampleWeapon_01.xob]) attached to '''Right Hand Prop''' *Magazine ([enfusion://ResourceManager/~SampleMod_NewWeapon:Assets/Weapons/Magazines/SampleWeapon_01/Magazine_65x39c_SampleWeapon_01_30rnd.xob Magazine_65x39c_SampleWeapon_01_30rnd.xob]) attached to '''Left Hand Prop - '''this should allow for previewing reload magazine animations. Currently active preview models can be either switched in two ways:* Through context menu which appears after clicking on it with '''Right Mouse Button''' entry in&nbsp;'''Preview Models&nbsp;'''list and then selecting&nbsp;'''Set as current''' option *By double clicking on it

Active preview model is marked with '''bold text'''.

[[File:armareforger-new-weapon-animation-set-preview-active.gif]]

Above set of preview models should be enough to preview all necessary weapon animations (both character and weapon itself) once '''Animation Workspace '''is filled with actual animations.

== Assigning animation workspace to prefab ==

[[File:armareforger-new-weapon-animation-component-setup.png|thumb|501x501px|Content of '''WeaponAnimationComponent''']]If everything went fine, the new weapon animation workspace should be ready to be plugged into the weapon.

Most of the weapon animation configuration is located in '''WeaponAnimationComponent. '''Unless weapon prefab is duplicate of some existing weapon, such component might not exist in a prefab which just inherits from [enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Core/Rifle_Base.et Rifle_Base.et] prefab. In this case, it will be necessary to add such component to the prefab first. This can be done in few steps:* Load weapon prefab ([enfusion://ResourceManager/~SampleMod_NewWeapon:Prefabs/Weapons/Rifles/SampleWeapon_01_base.et SampleWeapon_01_base.et]) in World Editor - either by using '''Edit Prefab '''button in '''Resource Manager '''or by drag and dropping weapon prefab into World Editor view port *Locate '''WeaponComponent '''in '''Object Properties '''window of the weapon *Click on '''WeaponComponent '''with '''Right Mouse Button '''and select '''Add child component '''option from the context menu *Select '''WeaponAnimationComponent '''from the list of components After that, '''WeaponAnimationComponent '''should be ready for further configuration. If component

=== Setting weapon animation instance ===

First, let's begin with general weapon animations and weapon graph & animation instance. Those two things are controlled by following parameters which can be found in '''WeaponAnimationComponentn'''* '''Anim Graph '''→&nbsp; This parameter expects '''animation graph '''used in animation workspace. In this case [enfusion://ResourceManager/~SampleMod_NewWeapon:Assets/Weapons/Rifles/Workspaces/sampleweapon_01.agr sampleweapon_01.agr] was used * '''Anim Instance '''→ This parameter expects '''animation instance '''of the '''weapon'''. Over here [enfusion://ResourceManager/~SampleMod_NewWeapon:Assets/Weapons/Rifles/Workspaces/sampleweapon_01_weapon.asi sampleweapon_01_weapon.asi] should be assigned

It is also necessary to switch those two parameters to on, to ensure proper working of the component* '''Always Active ''' * '''Bind With Injection'''

=== Setting player animation instance ===

Next, we can move to character animations configuration and to do so, click on '''set class '''button next to '''Anim Injection '''property. This will add new class to the component where you can configure following options: * '''Anim Graph ''' → Same as before, this parameter expects '''animation graph '''used in animation workspace. In this case [enfusion://ResourceManager/~SampleMod_NewWeapon:Assets/Weapons/Rifles/Workspaces/sampleweapon_01.agr sampleweapon_01.agr] was used again * '''Animation Instance ''' → This parameter expects '''animation instance''' of the '''character'''. Over here [enfusion://ResourceManager/~SampleMod_NewWeapon:Assets/Weapons/Rifles/Workspaces/sampleweapon_01_player.asi sampleweapon_01_player.asi] should be assigned * '''Binding Name ''' → Binding name in root graph. Type here '''Weapon'''

That's it for now! Now we are going to leave the '''Animation Editor '''for a while and move on to the '''creation of the actual animations'''.{{Clear}}

== Continuation ==

{{Feature|informative|'''Next part''' - [[Arma_Reforger:Weapon_Animation_Basic_Creation|Weapon Animation Basic Creation]].}}

{{GameCategory|armaR|Modding|Assets|Weapon Animation|Tutorials}} {{GameCategory|armaR|Modding|Assets|Weapon Creation|Tutorials}}
lv0e8xhvc2fqy27jir59idko1sis5xe

# Arma Reforger:Audio Editor

5050
32783
376372
373533
2025-10-08T18:38:32Z
Lou Montana
10739
Add 1.6.0 ogg conversion
376372
wikitext
text/x-wiki
{{TOC|side}} The '''Audio Editor''' is the tool that defines how sounds behave in-game. It allows the creation of graphical signal chains that define the logic for how sounds are triggered based on in-game events, and how they respond to changes in various game parameters.

It allows listening to how sounds behave inside the editor with the built-in tools.

Projects created in the audio editor are saved as files with an .acp extension; outside of the editor, they can later be used to control the sound that in-game entities make by applying the file to the entity's respective SoundComponent inside the World Editor.

== User Interface ==

The Audio Editor shows the following interface on first launch:

[[File:armareforger-audioeditor_main_interface.png|thumb|800px|center|Audio editor UI with the main sections outlined in red.]]

=== Panels ===

The audio editor UI is composed of the following panels:

# '''Design canvas:''' This is the area where the user can create audio signal chains by placing nodes and creating connections between them. # '''Nodes palette:''' This section contains the names of all the types of nodes that can be placed on the design canvas. Clicking on a name creates a new instance of the corresponding node on the canvas. # '''Item detail:''' This section contains the details/parameters of the currently selected object. By default, the details of the current project are displayed. # '''Master level monitor:''' The levels of the currently-playing sound are displayed here. # '''Listener setup:''' This section gives a visual depiction of the virtual audio source (emitter) in 3D space from the listener's perspective. The spatial relation between the listener and emitter can be adjusted here. # '''Playlist:''' Displays a list of previously-played sounds from the current session. # '''Log console:''' Displays relevant info about the actions performed in the current session. # '''Output tracker:''' Displays the output waveform of the current and previously played sounds over time. # '''Item explorer:''' Displays the nodes present in the current project, grouped by type. # '''Resource browser:''' Displays the location of the open project in the context of the resource database hierarchy.

{{Feature|informative| Panels are able to be un-docked into a separate window and also hidden from view. To make a closed panel visible again, right-click on the background of the main window for a list of panels and their visibility status. }}

For a full description of the usage of each panel in the context of designing sounds, see the Getting Started Tutorial.

=== Node Groups ===

Groups in the Enfusion Audio Editor are a great way to keep your audio files organised and clean. They also improve workflow by moving all included nodes relative to the group's location.

==== Group Creation ==== * Select multiple nodes. ** Hold {{Controls|Shift|LMB}} drag to make a selection region. ** Hold {{Controls|Ctrl}} and click on every node you want included in the group. * Right click on one of the nodes included in your selection. * Select "Group".

==== Add/Remove Node from Group ==== Nodes can easily be removed from a group by either right-clicking them and selecting "remove from group" or holding {{Controls|Alt}} while dragging them out of the group.

==== Group Options ==== {| class="wikitable" ! Option ! Functionality |- | Ungroup | Removes all nodes from the group and destroys the group. |- | Select All | Selects all nodes included in the group. |- | Lock | Locks the group so that it can not be modified or moved. |- | Color | Opens a dialog where the color of the group can be adjusted. |}

{{ArgTitle|3|Opus Ogg Import|{{GVI|armaR|1.6.0}}}}

{{armaR}} received support for the {{Link|https://en.wikipedia.org/wiki/Opus_(audio_format)|Opus}} audio format in v1.6.0. Opus is a lossy format which trades lower quality with a significantly decreased file size and slightly increased decoding time; it is therefore primarily recommended for music tracks.

Please note that you can '''not''' just drop an Ogg file into your project. Instead, the original {{hl|.wav}} file(s) must be converted into {{hl|.snd}} (Sound) file(s), a new container format which supports both wav and ogg.

==== Ogg Conversion ====

* Click on '''Tools -> File Converter''' * '''Drag & Drop''' the Wav files you want to convert into the conversion panel * Select OPUS as the file format and click Convert. This will create Snd (not Ogg!) files with the same names in the same folders as the original files * Replace the wav files with the snd files in your banks {{Feature|important| When building/publishing an addon the original wav file will be excluded and only the snd file will be built,<br><!-- -->which is why it is '''very''' important to make sure you replace all the original wav file references in your banks. }}

== Keyboard Shortcuts ==

The Enfusion Audio Editor has many shortcuts and hotkeys that are specifically designed to improve workflow and boost productivity of Audio Designers.<br> This section gives an overview of most of the available shortcuts and hotkeys in the Audio Editor and its {{Link|#Signal Editor}}.

<div style="align-items: flex-start; display: flex; flex-wrap: wrap; justify-content: center"> {| class="wikitable" style="width: 25em" ! colspan="2" | File |- | style="width: 50%" | New Project | {{Controls|Ctrl|N}} |- | New Signal | {{Controls|Ctrl|Shift|N}} |- | Open | {{Controls|Ctrl|Shift|O}} |- | Close | {{Controls|Ctrl|Shift|C}} |- | Save | {{Controls|Ctrl|S}} |- | Save As | {{Controls|Ctrl|Shift|A}} |- | Save All | {{Controls|Ctrl|Shift|S}} |- | Exit | {{Controls|Alt|F4}} |}

{| class="wikitable" style="width: 25em" ! colspan="2" | Window |- | style="width: 50%" | Item Explorer | {{Controls|Shift|F1}} |- | Resource Browser | {{Controls|Shift|F2}} |- | Item Detail | {{Controls|Shift|F3}} |- | Master Level Monitor | {{Controls|Shift|F4}} |- | Listener Setup | {{Controls|Shift|F6}} |- | Playlist | {{Controls|Shift|F7}} |- | Output Tracker (Master) | {{Controls|Shift|F8}} |- | Log Console | {{Controls|Shift|F9}} |- | Signals Simulation | {{Controls|Shift|F10}} |}

{| class="wikitable" style="width: 25em" ! colspan="2" | Edit |- | style="width: 50%" | Undo | {{Controls|Ctrl|Z}} |- | Redo | {{Controls|Ctrl|Y}} |- | Copy | {{Controls|Ctrl|C}} |- | Cut | {{Controls|Ctrl|X}} |- | Paste | {{Controls|Ctrl|V}} |}

<div style="display: inline-block"> {| class="wikitable" style="width: 25em" ! colspan="2" | Groups |- | ''Create Group'' | {{Controls|Ctrl|G}} |- | Add Node | {{Controls|Alt|LMB}} ''(Drag&nbsp;&amp;&nbsp;drop)'' |- | Remove Node | {{Controls|Alt|LMB}} ''(Click)'' |} </div>

{| class="wikitable" style="width: 25em" ! colspan="2" | Debug |- | style="width: 50%" | Toggle Debug | {{Controls|F5}} |}

{| class="wikitable" style="width: 25em" ! colspan="2" | Listener Setup |- | style="width: 50%" | Move Tool | {{Controls|W}}/{{Controls|A}}/{{Controls|S}}/{{Controls|D}} |- | Front View | {{Controls|1}} |- | Right View | {{Controls|3}} |- | Top View | {{Controls|7}} |}

{| class="wikitable" style="width: 25em" ! colspan="2" | Scene |- | style="width: 50%" | Pan | {{Controls|LMB}} ''(Drag)'' |- | Zoom In/Out | {{Controls|MMB}} ''(Scroll&nbsp;Wheel)'' |- | Region Select | {{Controls|Shift|LMB}} ''(Drag)'' |- | Multiselect Nodes | {{Controls|Ctrl|LMB}} ''(Click)'' |}

{| class="wikitable" style="width: 25em" ! colspan="2" | Nodes |- | style="width: 50%" | Play Selected Node | {{Controls|Space}} |- | Start Quick Connection ''(on port)'' | {{Controls|Alt|LMB}} ''(Click)'' |- | End Quick Connection ''(on port)'' | {{Controls|Alt|LMB}} ''(Click)'' |- | Node Dialog | {{Controls|MMB}} ''(Viewport Click)'' |- | Move nodes only horizontally/vertically | {{Controls|Shift|LMB}} ''(Drag)'' |}

{| class="wikitable" style="width: 25em" ! colspan="2" | Connections |- | style="width: 50%" | Duplicate Connection | {{Controls|Shift|LMB}} ''(Drag)'' |- | Reconnect Connection | {{Controls|Ctrl|LMB}} ''(Drag)'' |} </div>

=== Tips and Tricks ===

; Automatic constant node variables Drag and dropping a signal file on top of a '''constants''' node will automatically rename and link the constants node's ports with that signal.<br> Using {{Controls|Ctrl}} ''replaces'' existing connections.

; Audio amplitude representation inside Enfusion Amplitude is represented as 32bit floating point inside the editor, meaning 1528 dB of dynamic range. So there is barely any chance of clipping audio inside the engine. Simple example: Bank volume = 12dB, SOUND event volume = -12dB, no clipping.

The output tracker & master meter will show clipping if amplitude goes above 1 (0dbFS) but this does not mean that user will hear clipped audio necessarily. User will only clipped/distorted audio, if amplitude is greater than 0dbFS at the final master output stage or if there are DSPs such as compressors & limiters in the signal chain which might react weirdly to unnecessarily high amplitudes. You can technically create a square wave synthesizer by using sine wave generator nodes with enormous amplitude values and using a limiter that has very short attack & release times in the sound's DSP chain :)

; Shortcut tricks <gallery mode="packed" showthumbnails height="300"> File:armaR-audioeditor_tip_reconnect.gif|Reconnect Connection File:armaR-audioeditor_tip_group.gif|Group Nodes File:armaR-audioeditor_tip_groupaddremove.gif|Add & Remove Nodes In Group File:armaR-audioeditor_tip_duplicate_connection.gif|Duplicate Connection File:armaR-audioeditor_tip_quickconnect.gif|Quick Connect File:armaR-audioeditor_tip_addreplacebanks.gif|Add & Replace Bank Samples </gallery>

== Signal Editor ==

The Signal Editor is a sub-component of the Audio Editor - BIKI, where the user can edit the internal configurations of Signal nodes. Using the available node types in the signal editor, the user can define the input/output behavior of the Signal resource opened in the editor, transforming one or more inputs into one or more outputs.

=== User Interface ===

The Signal Editor UI is identical to that of the parent Audio Editor, save for the types of nodes available in the '''Nodes palette'''.

[[File:armareforger-audioeditor_signaleditor_main_interface.png|thumb|800px|center|Signal Editor UI]]

== See Also ==

* {{Link|Arma Reforger:Audio Editor: Getting Started Tutorial}} * {{Link|Arma Reforger:Audio Editor: Nodes}} * {{Link|Arma Reforger:Audio Editor: DSP Nodes}} * {{Link|Arma Reforger:Audio Editor: Signal Editor: Nodes}}

{{GameCategory|armaR|Modding|Official Tools}} {{GameCategory|armaR|Modding|Audio}} {{GameCategory|armaR|Modding|Audio}}
3mtew3xbzfwwjz5shytxwzbli6cuegm

# Arma Reforger:Audio Editor: Audio Variables

5050
38111
371073
370705
2025-02-26T13:30:37Z
Lou Montana
10739
Text replacement - "(.+)$" to "$1 {{GameCategory|armaR|Modding|Audio}}"
371073
wikitext
text/x-wiki
{{TOC|side}} <div class="float-right">[[File:armaR-audio_editor_variables_overview.png|600px]]</div> The Audio Variable system allows it to process the properties of multiple playing sounds by storing and processing them into a "Variable".

This is done in the "Variable" Item Detail category of nodes that support feeding into the Variable system.

This processed value can then be used in other Audio Editor or Mixer projects as a signal output by utilising the '''Variable Node'''.

The system is Resource-based, meaning it utilizes special Config files (.conf) to store and read from multiple Variables.

{{Clear}} == Variable Creation ==

A new Audio Variable config file can be created by opening the Audio Editor, then clicking on '''File &rarr; New &rarr; Variable'''. After naming file, it will be created but not open on its own.

When opening the Variable Config file, the actual Variables can be created by clicking on the "+" icon. Each Variable needs a '''Source''' and an '''Operator''':

=== Source Types ===

[[File:armaR-audio_editor_variablee_source_type.png|thumb|"PlayTime" Source Type.]] * '''Volume:''' Tracks the volume of all sounds that feed into the variable * '''Amplitude:''' Tracks the calculated Amplitude of all sounds that feed into the variable * '''PlayTime:''' Tracks the PlayTime of all sounds that feed into the variable. E.g: If sound B starts while sound A is playing * '''Constant:''' Variable value will always output the specified static value * '''External:''' Variable value is set via script/gamecode.

=== Operator Types ===

* '''Sum:''' Variable outputs the current sum of the source * '''Max:''' Variable value outputs the maximum collected value in the current frame * '''Min:''' Variable value outputs the minimum of collected values in the current frame

== Variable Feeding ==

[[File:armaR-audio_editor_audio_variable_node.png|thumb|This node will feed into the "VON_Direct" Variable specified in the GlobalVariables.conf Variable config file.]] Variables are fed via '''nodes''' in the '''Audio Editor'''. If a node supports feeding into a Variable, the '''"Variable" Category''' can be found it its '''Item Details'''. Here, the desired Variable Config file can be defined and, afterwards, which variable should be fed into..

=== Compatible Nodes ===

* {{Link|Arma Reforger:Audio Editor: Nodes#Sound|Sound}} * {{Link|Arma Reforger:Audio Editor: Nodes#Bus|Bus}} * {{Link|Arma Reforger:Audio Editor: Nodes#Amplitude|Amplitude}}

== Variable Usage ==

The processed value of the Variables can be accessed by using the '''Variable node'''. It's available within both {{hl|.acp}} and {{hl|.afm}} (mixer) files.

In order to do so, a '''Variable node''' must be placed, then a '''Variable Config file''' and finally the actual '''Variable''' must be selected.

Within the Variable node, a '''Curve''' can be created that defines the relation between the inputted variable value and the output value.

This output can then be used like a regular signal output.

=== Example ===

The VON_Direct variable directly influences the volume of the VEH 1 Bus in the Mixer. The curve reads as follows: If the variable value is below 0.2, the output will be 1. Between 0.2 and 0.7, the output interpolates down to 0.8 and remains there.

== Scripting ==

Variables of type '''External''' can be set ''via'' Script. All related methods belong to the {{Link/Enfusion|armaR|AudioSystem}} class. The following methods are available:

<enforce> // return variable value float AudioSystem.GetVariableByID(int ID, string filename)

// return variable value float AudioSystem.GetVariableValue(string varName, string filename)

// return variable name string AudioSystem.GetVariableNameByID(int ID, string filename)

// return variable ID int AudioSystem.GetVariableIDByName(string varName, string filename)

// return true if the variable exists, false otherwise bool AudioSystem.SetVariableByID(int ID, float value, string filename)

// return true if the variable exists, false otherwise bool AudioSystem.SetVariableByName(string varName, float value, string filename) </enforce>

{{Feature|informative| The filename string expects the full resource path of the variable config file. For the vanilla {{armaR}}'s {{Link|enfusion://ResourceManager/~ArmaReforger:Sounds/_SharedData/Variables/GlobalVariables.conf}}, this would be "{A60F08955792B575}Sounds/_SharedData/Variables/GlobalVariables.conf". }}

{{GameCategory|armaR|Modding|Official Tools}} {{GameCategory|armaR|Modding|Audio}}
q0famyolkk26lqnfsjrtgj3b14t8oms

# Arma Reforger:Audio Editor: Directivity

5050
32811
371078
353610
2025-02-26T13:30:39Z
Lou Montana
10739
Text replacement - "(.+)$" to "$1 {{GameCategory|armaR|Modding|Audio}}"
371078
wikitext
text/x-wiki
Directivity is a property of sound sources whereby the perceived "color" of a sound is dependent on which way the sound source is facing with respect to the listener. Typically, the more off-axis the listener is positioned with respect to the sound source's direction, the more "dark" the sound is perceived to the listener due to the attenuation of high frequencies. [[File:armaR-sound_directivity_fig_1.jpg|thumb|left|500px|Figure 1: Illustration of the directivity of a human voice. The sound is most clear when the listener is positioned on the axis of the "direction vector"]]

{{Clear}} == Implementation ==

The directivity effect can be modeled using a low-pass filter with a fixed cutoff frequency and variable rolloff, which is modulated by the angle between the listener and the sound source's direction. Thus, the filter's behaviour can be fully defined with the following parameters:

* '''f<sub>c</sub>''': the filter's cutoff frequency * '''maxRolloff''': the maximum filter's rolloff, in dB/decade, when the listener is positioned directly behind the sound source (180 degrees off axis)

Figure 2 illustrates how the rolloff of the filter transitions from 0 to maxRolloff (in this case 20 dB/dec) based on the listener's angle WRT the on-axis of the sound source.

[[File:armaR-sound_directivity_fig_2.jpg|thumb|left|500px|Figure 2: Filter rolloff (using maxRolloff = 20) as a function of the listener's angle WRT the on-axis of the sound source]]

{{Clear}} As no direct implementation of a variable-rolloff lowpass filter exists in the digital domain, it has been decided to approximate the target filter's response with a single high-shelf biquad filter, whose parameters were tuned to fit the target's responses as closely as possible.

Figure 3 illustrates the responses of the modeled filter (colored lines) compared to the corresponding target responses (grey dotted lines) across the full range of possible listener angles (WRT source direction). [[File:armaR-sound_directivity_fig_3.jpg|thumb|left|500px|Figure 3: Modeled vs target filter responses]]

{{Clear}} == Usage ==

The directivity feature can be accessed in the audio editor via the "Frequency" node. The "Directivity" section of the node provides the user control over the parameters listed above for controlling the filter's behaviour.

== References ==

# https://www.researchgate.net/publication/291154227_SpatOSC_Providing_abstraction_for_the_authoring_of_interactive_spatial_audio_experiences

{{GameCategory|armaR|Modding|Official Tools}} {{GameCategory|armaR|Modding|Audio}}
b9zgnyktn01p7eouzk65vucjyzzjh1i

# Arma Reforger:Audio Editor: DSP Nodes

5050
47169
371075
370739
2025-02-26T13:30:37Z
Lou Montana
10739
Text replacement - "(.+)$" to "$1 {{GameCategory|armaR|Modding|Audio}}"
371075
wikitext
text/x-wiki
{{TOC|side}}

{{TOC|subtoc |title= Nodes |content= {{Columns|3| * {{Link|#Base}} * {{Link|#Biquad Filter}} * {{Link|#Bitcrusher}} * {{Link|#Compressor}} * {{Link|#Distortion}} * {{Link|#Dynamic Equalizer}} * {{Link|#Equalizer4}} * {{Link|#Flanger}} * {{Link|#QuadDelay}} * {{Link|#LoudnessNormalization}} * {{Link|#MonoToStereo}} * {{Link|#OnePoleFilter}} * {{Link|#PeakLimiter}} * {{Link|#Phaser}} * {{Link|#Reverb}} * {{Link|#Reverb2}} * {{Link|#SmallRoomReverb}} * {{Link|#Tremolo}} * {{Link|#VariableRolloffLPF}} * {{Link|#NoiseGate}} }} }}

The following is an overview of all available DSP effect classes that can be used in the Filter node. Assigned DSP effect classes will affect the input ports available to the Filter node. {{Feature|informative|DSP effect classes can be assigned by clicking on "DSP Object" in a Filter node's Item Details.}}

== DSP Nodes ==

=== Base ===

Abstract type that all DSP effects inherit from.

No attributes.

=== Biquad Filter ===

Applies a biquad filter<ref>{{Link|https://www.earlevel.com/main/2013/10/13/biquad-calculator-v2/}}</ref>. {| class="wikitable align-center-col-4" ! Attribute Name ! Description ! Value Range ! Input Port |- | '''Biquad Type''' | Type of filter | * {{hl|LowPass}} * {{hl|HighPass}} * {{hl|BandPass}} * {{hl|Notch}} * {{hl|PeakingEQ}} * {{hl|LowShelf}} * {{hl|HighShelf}} * {{hl|AllPass}} | {{Icon|unchecked}} |- | '''Fc''' | Cutoff/center frequency of the filter | [20, 16000] | {{Icon|checked}} |- | '''Q''' | Factor that controls the slope of the filter shape | [0.1, 20] | {{Icon|checked}} |- | '''Gain''' | Gain [dB] of the filter Available for "PeakingEQ", "LowShelf", "HighShelf" and "AllPass" '''Biquad Types'''. | [-18, 18] | {{Icon|checked}} |}

=== Bitcrusher ===

Introduces distortion by reducing the bit depth of the audio input to 8-bit<ref>{{Link|https://en.wikipedia.org/wiki/Audio_bit_depth}}</ref>. {| class="wikitable align-center-col-4" ! Attribute Name ! Description ! Value Range ! Input Port |- | '''Bit Mask''' | An 8-digit string of '0's or '1's that specifies which of the 8 bits of the bit-crushed signal should be "enabled" (1) or "disabled" (0) | String | {{Icon|unchecked}} |}

=== Compressor ===

Implements dynamic range compression; Reduces the volume of the input signal if the specified threshold value is exceeded<ref>{{Link|https://en.wikipedia.org/wiki/Dynamic_range_compression}}</ref>. {| class="wikitable align-center-col-4" ! Attribute Name ! Description ! Value Range ! Input Port |- | '''Threshold''' | Threshold value of the input level above which the gain begins to be reduced | [-50, 0] dB | {{Icon|checked}} |- | '''Ratio''' | Specifies the value of ''n'' in the ratio ''n'':1. This value controls the amount of gain reduction (e.g. a ratio of 2:1 tells us that if the input signal is 2 dB over the value of '''Threshold''', the resulting output level is reduced by 1 dB). | [1, 50] | {{Icon|checked}} |- | '''Attack''' | Specifies the amount of time [ms] that the output level takes to reach the value defined by '''Ratio''' | [1, 1000] ms | {{Icon|checked}} |- | '''Release''' | Specifies the amount of time [ms] that the compressor takes to "undo" gain reduction in the case that the signal level has decreased | [1, 1000] ms | {{Icon|checked}} |- | '''Knee Width''' | Controls the sharpness of the compressor's "knee" | [0, 20] | {{Icon|checked}} |}

=== Distortion ===

Introduces distortion using non-linear transfer functions. {| class="wikitable align-center-col-4" ! Attribute Name ! Description ! Value Range ! Input Port |- | '''Distortion Type''' | Defines which model of distortion will be applied | * {{hl|Reciprocal}} ''Inspired by the function: y = 1 / (abs(x) + 1)'' * {{hl|SoftClipper}} ''Two-stage quadratic clipping function'' * {{hl|HardClipper}} ''Limits all samples above threshold to the threshold value'' * {{hl|BufferNormalize}} ''All samples in the buffer (10ms) are normalized to their peak value. Introduces heavy compression with crackling'' * {{hl|Foldback}} ''Waveform, instead of being clipped off, is reflected back like a mirror so that the top of the waveform is inverted.'' | {{Icon|unchecked}} |- | '''Drive''' | In the case of the Reciprocal type, it boosts the input signal. For other types, this value is used with an inverted sign as a threshold.

On the output, there is gain compensation applied, so the output loudness is not affected by the Drive value too much | [0, 60] dB | {{Icon|checked}} |}

=== Dynamic Equalizer ===

Implements dynamic range compression for a specified part of the frequency spectrum. {| class="wikitable align-center-col-4" ! Attribute Name ! Description ! Value Range ! Input Port |- | '''Biquad Type''' | Type of filter, compression will be applied to affected frequency bands | * {{hl|PeakingEQ}} ''Compression will be applied around an area of which '''Fc''' represents the center frequency.'' * {{hl|LowShelf}} ''Compression will be applied below '''Fc''''' * {{hl|HighShelf}} ''Compression will be applied above '''Fc''''' | {{Icon|unchecked}} |- | '''Fc''' | Cutoff/center frequency of the filter | [20, 16000] | {{Icon|checked}} |- | '''Q''' | Factor that controls the slope of the filter shape | [0.1, 20] | {{Icon|checked}} |- | '''Ratio''' | Specifies the value of ''n'' in the ratio ''n'':1. This value controls the amount of gain reduction (e.g. a ratio of 2:1 tells us that if the input signal is 2 dB over the value of '''Threshold''', the resulting output level is reduced by 1 dB). | [1, 50] | {{Icon|checked}} |- | '''Threshold''' | Threshold value of the input level above which the gain begins to be reduced | [-50, 0] dB | {{Icon|checked}} |- | '''Attack''' | Specifies the amount of time [ms] that the output level takes to reach the value defined by '''Ratio''' | [1, 1000] ms | {{Icon|checked}} |- | '''Release''' | Specifies the amount of time [ms] that the compressor takes to "undo" gain reduction in the case that the signal level has decreased | [1, 1000] ms | {{Icon|checked}} |}

=== Equalizer4 ===

Implements a 4-band equalizer {| class="wikitable align-center-col-4" ! Attribute Name ! Description ! Value Range ! Input Port |- | '''Gain1''' | Gain [dB] of the first frequency band | [-18, 18] | {{Icon|checked}} |- | '''Gain2''' | Gain [dB] of the second frequency band | [-18, 18] | {{Icon|checked}} |- | '''Gain3''' | Gain [dB] of the third frequency band | [-18, 18] | {{Icon|checked}} |- | '''Gain4''' | Gain [dB] of the fourth frequency band | [-18, 18] | {{Icon|checked}} |- | '''Fc1''' | Cutoff frequency of the lowshelf filter | [50, 800] | {{Icon|checked}} |- | '''Fc2''' | Center frequency of the first peak filter | [200, 3000] | {{Icon|checked}} |- | '''Fc3''' | Center frequency of the second peak filter | [1000, 8000] | {{Icon|checked}} |- | '''Fc4''' | Cutoff frequency of the highshelf filter | [4000, 16000] | {{Icon|checked}} |- | '''Qfactor2''' | Factor that controls the slope of the first peak filter's shape | [0.1, 20] | {{Icon|checked}} |- | '''Qfactor3''' | Factor that controls the slope of the second peak filter's shape | [0.1, 20] | {{Icon|checked}} |}

=== Flanger ===

The algorithm mixes two identical signals together, one signal delayed by a small and gradually changing period. {| class="wikitable align-center-col-4" ! Attribute Name ! Description ! Value Range ! Input Port |- | '''Delay Time''' | Delay time of signal mixed to input signal | [0.1, 20] ms | {{Icon|checked}} |- | '''Feedback''' | Feedback loop gain. If -1 or 1, DSP will self oscillate. | [-1, 1] | {{Icon|checked}} |- | '''Frequency''' | Sin shape LFO modulation frequency | [0.1, 10] Hz | {{Icon|checked}} |- | '''Depth''' | LFO depth | [0, 1] | {{Icon|checked}} |- | '''Damping''' | Controls Lowpass filter applied on the feedback loop | [20, 20000] Hz | {{Icon|checked}} |- | '''Spread''' | Defines the LFO offset between the channels | [0, 1] | {{Icon|checked}} |}

=== QuadDelay ===

{| class="wikitable align-center-col-4" ! Attribute Name ! Description ! Value Range ! Input Port |- | '''Delay Time 1''' | Left front delay line delay time. | [10, 600] ms | {{Icon|checked}} |- | '''Delay Time 2''' | Left right delay line delay time. | [10, 600] ms | {{Icon|checked}} |- | '''Delay Time 3''' | Left back delay line delay time. | [10, 600] ms | {{Icon|checked}} |- | '''Delay Time 4''' | Right back delay line delay time. | [10, 600] ms | {{Icon|checked}} |- | '''Attenuation Factor''' | Adjusts distance attenuation of delayed sound calculated based on delay time. | [0, 1] | {{Icon|unchecked}} |- | '''Damping Min''' | Damping at Delay Time = 10ms. Interpolated between min/max based on delay time. | [0, 1] | {{Icon|unchecked}} |- | '''Damping Max''' | Damping at Delay Time = 600ms. Interpolated between min/max based on delay time. | [0, 1] | {{Icon|unchecked}} |- | '''Feedback Min''' | Feedback at Delay Time = 10ms. Interpolated between min/max based on delay time. | [0, 1] | {{Icon|unchecked}} |- | '''Feedback Max''' | Feedback at Delay Time = 600ms. Interpolated between min/max based on delay time. | [0, 1] | {{Icon|unchecked}} |- | '''Azimuth''' | Sets rotation of delay lines. | [-180, 180] deg | {{Icon|checked}} |}

=== LoudnessNormalization ===

(Tries to) keep a specified output volume by automatically adjusting the gain of the input signal {| class="wikitable align-center-col-4" ! Attribute Name ! Description ! Value Range ! Input Port |- | '''Target Level''' | Targetted output RMS level [dBFS] | [-60, 0] dBFS | {{Icon|checked}} |- | '''Response Time''' | Specifies how quickly [s] the normalization reacts to changes in the input signal | [0.1, 10] s | {{Icon|checked}} |}

=== MonoToStereo ===

Creates a pseudo stereo output from a mono input.

'''Works only for channels = 2 setup.''' {| class="wikitable align-center-col-4" ! Attribute Name ! Description ! Value Range ! Input Port |- | '''Delay Time''' | outL = -delayIn

outR = delayIn | [0.1, 20] ms | {{Icon|checked}} |}

=== OnePoleFilter ===

Implements a one pole filter. It has a 6dB/oct slope and is cheaper to compute than a biquad filter. {| class="wikitable align-center-col-4" ! Attribute Name ! Description ! Value Range ! Input Port |- | '''Filter Type''' | Type of Filter | * LowPass * HighPass | {{Icon|unchecked}} |- | '''Frequency''' | Cutoff Frequency of the filter | [40, 15000] | {{Icon|checked}} |}

=== PeakLimiter ===

Implements a limiter that uses a "Lookahead". Meaning a slight delay (5ms) in audio will be introduced in order to react even to quick peaks. {| class="wikitable align-center-col-4" ! Attribute Name ! Description ! Value Range ! Input Port |- | '''Threshold''' | Threshold value of the input level above which the gain begins to be reduced | [-50, 0] dB | {{Icon|checked}} |- | '''Attack''' | Specifies the amount of time [ms] that the output level takes to reach the value defined by the limiter's ratio | [1, 1000] ms | {{Icon|checked}} |- | '''Release''' | Specifies the amount of time [ms] that the compressor takes to "undo" gain reduction in the case that the signal level has decreased | [1, 1000] ms | {{Icon|checked}} |}

=== Phaser ===

A cascade of 7 first order all-pass filters modulated by a triangle-shaped LFO {| class="wikitable align-center-col-4" ! Attribute Name ! Description ! Value Range ! Input Port |- | '''Frequency''' | LFO modulation frequency | [0.1, 10] Hz | {{Icon|checked}} |- | '''Feedback''' | Feedback loop gain. If -1 or 1, DSP will self oscillate. | [-1, 1] | {{Icon|checked}} |- | '''Offset''' | Works only if channelCount > 1

Can be set via a signal, but is evaluated only at the playback start and can not be changed during playback.

Adds start offset to LFO. Offsets are spread evenly between channels. The last channel's LFO is offset by 0.5 * offset / period. | [0, 1] | {{Icon|checked}} without effect (bug) |- | '''Spread''' | Affects all pass filter frequency settings spread. If 0, all filters are set to the same frequency. | [0, 1] | {{Icon|checked}} |}

=== Reverb ===

Implements a reverb, designed to model the reverb of a sound emitted into a room as perceived by a listener inside this room {| class="wikitable align-center-col-4" ! Attribute Name ! Description ! Value Range ! Input Port |- | '''Room Dimension''' | Dimensions of the modeled room | n/a | {{Icon|unchecked}} |- | '''Source Position''' | Position of the sound source within the room | n/a | {{Icon|unchecked}} |- | '''Mic Position''' | Position of the listener within the room | n/a | {{Icon|unchecked}} |- | '''Absorption''' | Absorption factor, emulating absorption of sound from the room's surfaces. | [0, 1] | {{Icon|unchecked}} |- | '''Damping''' | Damping factor of the reverb. Higher value means more damping of higher frequencies | [0, 1] | {{Icon|unchecked}} |}

=== Reverb2 ===

Implements a reverb. {| class="wikitable align-center-col-4" ! Attribute Name ! Description ! Value Range ! Input Port |- | '''Room Size''' | Arbitrary factor for the size of the modeled room | [0, 1] | {{Icon|unchecked}} |- | '''Damping''' | Damping factor of the reverb. Higher value means more damping of higher frequencies | [0, 1] | {{Icon|unchecked}} |- | '''Width''' | Stereo width of the reverb | [0, 1] | {{Icon|unchecked}} |}

=== SmallRoomReverb ===

Implements a reverb, designed to model reverb within small rooms {| class="wikitable align-center-col-4" ! Attribute Name ! Description ! Value Range ! Input Port |- | '''Early Reflections Time''' | Arbitrary time factor influencing how long it takes for early reflections to reach the listener | [0, 1] | {{Icon|checked}} without effect (bug) |- | '''Late Reflections Time''' | Arbitrary time factor influencing how long it takes for late reflections to reach the listener | [0, 1] | {{Icon|checked}} |- | '''Late Reflections Density''' | Density factor of late reflections | [0, 1] | {{Icon|checked}} |- | '''Late Reflections Damping''' | Damping factor of the late reflections. A higher value means more damping of higher frequencies | [0, 1] | {{Icon|checked}} |- | '''Width''' | Stereo width of the reverb | [0, 1] | {{Icon|checked}} |}

=== Tremolo ===

Amplitude modulation using a triangle-shaped LFO. {| class="wikitable align-center-col-4" ! Attribute Name ! Description ! Value Range ! Input Port |- | '''Frequency''' | Frequency of the LFO | [0.1, 100] Hz | {{Icon|checked}} |- | '''Offset''' | Works only if channelCount > 1

Can be set via a signal, but is evaluated only at the playback start and can not be changed during playback.

Adds start offset to LFO. Offsets are spread evenly between channels. The last channel's LFO is offset by 0.5 * offset / period. | [0, 1] | {{Icon|checked}} |}

=== VariableRolloffLPF ===

A lowpass filter with variable rolloff {| class="wikitable align-center-col-4" ! Attribute Name ! Description ! Value Range ! Input Port |- | '''Fc''' | Cutoff frequency of the filter | [100, 400] Hz | {{Icon|checked}} |- | '''Rolloff''' | Filter rolloff | [0, 30] | {{Icon|checked}} |- | '''Order''' | Filter order | [2, 3] | {{Icon|unchecked}} |}

=== NoiseGate ===

A noise gate is an audio processor that works to eliminate sounds below a given threshold. {| class="wikitable align-center-col-4" ! Attribute Name ! Description ! Value Range ! Input Port |- | '''Threshold''' | Defines level at which gate opens. | [-60, 0] dB | {{Icon|checked}} |- | '''Attack''' | Specifies the amount of time [ms] that takes for gate to fully open. | [0, 500] ms | {{Icon|checked}} |- | '''Release''' | Specifies the amount of time [ms] that the gate to fully close. | [0, 500] ms | {{Icon|checked}} |}

{{GameCategory|armaR|Modding|Official Tools}} {{GameCategory|armaR|Modding|Audio}}
6ubq4ttbgsdvxvjbutgcij3dh1v19t2

# Arma Reforger:Audio Editor: Getting Started Tutorial

5050
32800
371071
370923
2025-02-26T13:30:36Z
Lou Montana
10739
Text replacement - "(.+)$" to "$1 {{GameCategory|armaR|Modding|Audio}}"
371071
wikitext
text/x-wiki
{{TOC|side}} In this tutorial, we will guide the reader through the steps to replace an existing sound of a game entity (in this case the footsteps of a character) with custom ones created in the [[Arma Reforger:Audio Editor]]. The purpose of this tutorial is to demonstrate how to use the key features of the audio editor and how files created in the audio editor can be connected to an Enfusion-based game. In particular, we will cover the following topics:

* Creating a new audio project (.acp) file * Using nodes to create sounds * Auditioning sounds in the editor * Connecting sounds to the game * Using signals to control node parameters * Debugging sounds

== Audio Project Creation ==

When it comes to modding sounds, the user can start with one of two approaches:

# Modifying an existing .acp # Creating a new .acp from scratch

For the purpose of this tutorial, we will start by creating a new .acp.

From the Enfusion Workbench main window, we start by opening the audio editor by selecting '''Editors→Audio Editor'''.

From the Audio Editor main window, we create a new project via '''File→New→Project'''. A new window should pop up prompting the user to define the name and location of the new file. We will name our file ''Footsteps_Demo.acp'' and place it in a new folder called ''Demo''.

''Creating a new project in the Audio Editor''

Upon pressing ''Ok'', we should see a new tab show up with the name of our file accompanied by a blank design canvas beneath it. This is the area where we can create our sound. We will start by creating a simple sound for testing purposes, then expand on it later after we confirm that it works as intended.

== Work with Nodes ==

As detailed in [[Arma Reforger:Audio Editor: Nodes]], the simplest possible sound we can create must contain the following fundamental nodes:

* a node that outputs an audio waveform: either a Bank or a Generator * a Sound node

A Bank requires that we have some external audio samples to work with, so for the sake of simplicity, we will use a Generator as our audio source for now.

We start by placing a Generator node on the design canvas by locating its name in the nodes palette and clicking it. We should see a new instance of the node appear on the canvas with a default name assigned (''Generator 1''). We repeat the same step for the Sound node.

Now we need to connect the two nodes together. We first re-arrange the nodes on the canvas so that the ''Out'' port of the Generator is approximately lined up with the ''In'' port of the Sound. We then create a connection between the two ports by clicking on the ''Out'' port and dragging to the ''In'' port (or vice-versa).

''Simple audio signal chain''

Our simple audio chain is almost complete - now we just need to configure the parameters of each node before we proceed to test it.

Since we're prototyping a footstep sound, we want the sound to be short so that we can clearly hear each individual footstep and that there is no overlapping of sounds. For this reason, we will select the Generator node and inside the '''Item detail panel''', modify the value of '''Time''' to 100. This means that the sound produced by the generator (by default, a 440Hz sine wave) will have a duration of 100ms. We will also reduce the value of '''Volume''' to a more comfortable level of -12dB. We will leave the rest of the parameters as their defaults. The same goes for the Sound node.

== Sound Check ==

Now we're ready to play the sound. To do this, we select one of the nodes and press the space bar (or alternatively, the play button in the '''Playlist''' panel). If everything was configured correctly, we should hear a brief tone through our audio playback device accompanied by some debug message in the '''Log Console''' indicating that the sound was successfully played. If we turn our attention to the '''Output tracker''' panel, we will see the waveform of the played sound. Zooming in, we can verify that the duration of the sound was 100 ms and that the shape of the waveform is a sine, as intended. If we look at the '''Master level monitor''' panel, we can see after playing the sound again that the level peaks at -12dB.

''View during playback of the sound''

Now that we have verified that the sound plays as intended, we're almost ready to connect it to the game, save for one important step - setting the correct name for the Sound node. The name of the Sound node corresponds to the name of the sound event called from gamecode or script - if they don't match exactly then sound won't be played! Therefore, our next task is to find out the name of the sound event for footsteps. The easiest way to go about this is to identify an existing game entity that makes footstep sounds and look into the .acp(s) attached to that entity's '''SoundComponent'''.

== Sound Event Name ==

In order to identify the sound event name for footsteps, we first need to get the list of all {{hl|.acp}}s attached to the target entity, of which one will contain the sound for footsteps. We can obtain this list via the entity's '''SoundComponent'''. To view an entity's SoundComponent, we need to open it inside the '''World Editor'''.

From the Enfusion Workbench main window, we can open the World Editor by selecting '''Editors→World Editor'''. We need to load some world (any world is fine) and place our target entity in the world. For this tutorial, we're working with Arma Reforger, where our target entity is called ''Character_Base.et''. Note that the name of the prefab may differ according to which game the user is working with - the search function in the '''Resource Browser''' panel can be helpful in this case.

Next we must find the target entity in the world. If it is not already present we can place a new instance of it by locating the prefab file in the '''Resource Browser''' and dragging it into the world. Now we select the entity in the world. We will see the '''Object Properties''' panel get populated with a list of components on the entity. We can quickly find the SoundComponent, if present, by typing "sound" in the '''Filter components''' search bar. In our case we will see a special type of SoundComponent made specifically for character sounds, called '''CharacterSoundComponent'''. After clicking on this component, we will see the parameters of the component appear below, including the list of .acp files under '''Filenames'''. We're interested in the file that contains footstep sounds, which is appropriately titled ''Character_Footsteps.acp''. We proceed to open this file in the audio editor by clicking the ''Open File'' icon next to the filename.

''Locating the SoundComponent on the target entity''

Now with the .acp opened inside the audio editor we want to find the Sound node associated with footstep sounds. We can locate it quickly with the help of the '''Item explorer''' panel. This panel contains a list of all nodes grouped by type, so we can scroll down the list until we get to the ''Sound'' category to see a list of all sound names in the file. Out of the sound names listed, we can identify the one for footsteps as SOUND_CHAR_MOVEMENT_FOOT. To confirm that this is the correct sound we can double-click on the sound name to select that node on the design canvas. We can then play the sound to confirm that what we hear played back sounds like footsteps.

''Locating the sound event name for footsteps''

Now that we have the sound event name, we will note it down and return to our file ''Footsteps_Demo.acp'', where we will simply change the name of the Sound node to SOUND_CHAR_MOVEMENT_FOOT. After saving the file, everything will have been prepared and we're now ready to connect the sound to the game and test how it behaves as the character moves around.

== Game-Sound Connection ==

In this step, we will replace the existing footstep sounds on the target entity with the one we created in the previous steps. As in the previous step, we will start by locating the SoundComponent (or CharacterSoundComponent) on the target entity. Under the '''Filenames''' parameter of the CharacterSoundComponent, we will locate the existing .acp containing footsteps and remove it. We can do this by selecting the file ''Character_Footsteps.acp'' in the list and clicking the "-" button. Now we will add our new file to the list - we can do this by clicking the "+" button next to Filenames, then setting the filename to ''Footsteps_Demo.acp'' using the ".." button.

All that's left to do now is save the world and run the game. Note that when we save the world, any changes made to the target entity will only apply to that one instance of the target entity in the world. If we want to apply the changes to all instances of the prefab, we can do that with the "Apply to prefab" button.

If we configured everything correctly up to this point, we should hear our simple sound play every time the character takes a step.

== Signal Chain Addition ==

At this point in the tutorial, we have successfully created a simple sound in the audio editor and connected it to a game. Our sound is far from ideal though - it is missing some key behavior to make it sound anywhere near convincing. First of all, the sound is not ''spacialised'' at all - that is to say that the position of listener/camera in the game world with respect to the character has no effect on the sound. Each time the sound is played, it sounds exactly the same no matter where the sound is played from in the world. In the real world, we perceive sounds differently based on where they are located; nearby sounds will sound louder than distant ones, and direction is also reflected in the balance between what we hear in each ear. These so-called ''auditory cues'' are simulated by the '''Shader''' node.

The Shader should typically come at the final stage of the signal chain, just before the Sound node, so we will place it there, between the existing Generator and Sound nodes. We will also need to connect an '''Amplitude''' node to the Shader as well for it to have any affect. Finally we will set the parameters of the new nodes. For the Shader, we will set the '''Spatial Factor''' parameter to 1 - this controls the degree to which spacial processing is applied. For the Amplitude node, we will set the '''Curve''' parameter to ''1/r'' - this defines how the volume changes with distance.

''Signal chain with a Shader inserted''

We can observe the resulting effect of the Shader by playing the sound while changing the spatial relationship between the listener and sound source. This can be accomplished with the help of the '''Listener setup''' panel. This is an interactive panel that depicts a simple world where we can see an abstract shape (red sphere) that represents the audio source. We can imagine that this shape is producing all the sounds played in the audio editor. By interacting with this panel, we can adjust where the source is located in space with respect to us, the listener. For example, scrolling up or down with the mouse wheel takes us closer or farther away from the source, and dragging with the left/right mouse button allows us to rotate the perspective of the source and listener. Try playing the sound while interacting with this window to hear the differences for yourself.

=== Signals ===

Another key feature of the audio engine is the ability to control various node parameters with ''signals'' (a time-varying parameter with an associated name) from the game. For example, say we want the sound of the footsteps to change based on how fast the character is moving. We can accomplish this by creating two or more Banks, each containing samples corresponding to a speed range (fast, slow, etc.), and selecting one of the banks for playback based on the speed signal. The '''Selector''' node is the key that allows us to implement this behavior.

For this tutorial we will define three speed ranges:

* Walk: [0, 2) m/s * Run: [2, 4) m/s * Sprint: 4+ m/s

Note that a square bracket indicates that its value is included in the range while a rounded bracket indicates that its value is not included in the range. For example, the range [2, 4) includes all values between 2 and 3.999... This is to eliminate ambiguity in case the value of speed is exactly on the edge between two ranges.

For the sake of simplicity, instead of using Banks with unique samples for each range, we will add additional Generators with different frequency settings for each range so that we can quickly hear a difference. We will use the existing Generator for the "Run" range and add two more for the remaining ranges. The new Generators should have the same parameters as the existing one, with the only difference being the '''Frequency''': we will set it to 220Hz for walking and 880Hz for sprinting.

Now we need to insert a '''Selector''' into the chain and connect all the Generators to it in the correct order. Upon creating a new selector, we need to add three input ports to it, corresponding to the "Walk", "Run", and "Sprint" ranges. We can do this by clicking the "+" button next to the '''Ports''' property in the '''Item detail''' window. Upon adding a new port, the user will be prompted to give a name to the port (we will start with "Walk"). Next we need to define the range of the port via the '''Min''' and '''Max''' parameters. If the Selector's control signal falls in this range then whatever is connected to the corresponding port will be selected for playback and anything connected to the other ports will be ignored. As defined above, the "Walk" port will correspond to the range [0, 2) m/s, so we set '''Min''' to 0 and '''Max''' to 2. We repeat the same procedure for the "Run" and "Sprint" ports. For the Max parameter of the Sprint port, we can set the value to something high (99 is fine).

At this point, our signal chain should look something like the one below, save for the '''Signal''' node, which we will cover next.

''Signal chain with a Selector inserted''

The final step is configuring the Signal node. This node will provide us with the value of the character's speed that we can use to control nodes such as the Selector.

We start by creating a new instance of a Signal node. A Signal is a resource-type node, so we will have to specify a new name and location to save it at. When placed on the canvas, the Signal node has no inputs or outputs by default, so we will have to add some. We can do that by double-clicking on the Signal node to open it for editing in the Signal Editor.

The Signal Editor is a sub-part of the audio editor where the user can create signal chains, similar to the ones created in the main audio editor, that transform one or more signal inputs into one or more signal outputs. In our case, we want the output of the signal node to be the speed, with no further transformations applied to it, so our signal chain will simply be a single input connected to a single output. We can construct the signal chain the same way we would in the main audio editor, by creating instances of an '''Input''' node, an '''Output''' node, and connecting them together on the canvas. The last thing that we need to do inside the Signal Editor is to assign the appropriate name to the input the appropriate name of the signal from the game. This is an important step because if the signal input name doesn't match the one in the game, the value assigned to that input will remain as 0 for the lifetime of the game. Following the same logic as in the Getting the sound event name step, we can deduce what the signal name should be by looking into the existing .acps attached to the target entity. In our case, the speed signal is appropriately named "Speed".

''Internal configuration of the speed signal node as viewed from the Signal Editor''

After we save the file and return to ''Footsteps_Demo.acp'', we should see the new input and output ports appear on the Signal node that we had placed earlier. We just need to connect the output to the Selector's "Signal" input and our chain is complete.

== Sound Debug ==

Before moving on to testing the sound in-game, we would like to make a quick note of a useful feature of the audio editor - debugging. This feature can be useful when a sound isn't behaving as intended. Often times the problem is related to signal values, so the debugging feature allows us to observe the values of the signal inputs to each node when it is enabled.

With a project open inside the audio editor, debugging mode can be toggled via the F5 key (or selecting '''Debug→Start Debugging'''). Now whenever a sound is played, the signal value at every signal input on a node is displayed. We can try it with ''Footsteps_Demo.acp'' for varying values of the speed signal.

''Playing the sound in debug mode''

Note that the same feature is available inside the Signal Editor.

== Final Test In-Game ==

The last step of this tutorial is to test how the final sound behaves in-game. With the .acp attached to the target entity as described in the Getting the sound event name step, we run the game and control the target entity's movement in the world. As we modify the speed of the character (using the Ctrl and Shift keys), we should be able to hear the pitch of the character's footstep sounds change depending on how fast the character is moving.

== Conclusion ==

In this tutorial, we have covered the basics of using the audio editor to modify sounds in an Enfusion-based game. We have only scratched the surface in terms of the possible sounds that can be created in the editor. For a detailed reference of the all of the available node types and their uses, see the [[Arma Reforger:Audio Editor: Nodes]] page.

{{GameCategory|armaR|Modding|Official Tools|Workbench|Tutorials}} {{GameCategory|armaR|Modding|Audio}}
ah14ce2eub49h8oezaehzut4pl6byou

# Arma Reforger:Audio Editor: Nodes

5050
32810
371077
370857
2025-02-26T13:30:37Z
Lou Montana
10739
Text replacement - "(.+)$" to "$1 {{GameCategory|armaR|Modding|Audio}}"
371077
wikitext
text/x-wiki
{{TOC|side}} '''Nodes''' are the fundamental building blocks that are used within the Audio Editor to create audio signal chains. There are a variety of different nodes, each with a specific purpose that modifies the sound or introduces some logic at its respective position in the chain.

Connecting a series of nodes together allows to create chains that produce sounds with varying degrees of complexity. This page serves as a reference for the usage of each type of node.

Note that there are certain fundamental nodes that must be present in a chain in order for a sound to be playable. These are namely: * a node that outputs an audio waveform: either a Bank or a Generator * a Sound node

Nodes can be grouped into two main categories: {{Link|#Resource Nodes}} and {{Link|#Local Nodes}}. A node of the Resource type is saved as a separate resource file and can be shared between multiple {{hl|.acp}} files, while a node of the local type is stored in the {{hl|.acp}} file itself and cannot be shared with other {{hl|.acp}} files.

Nodes of the Resource type will appear on the design canvas with round corners, while nodes of the Local type will appear with sharp corners.

{| class="valign-top" | {{TOC|subtoc | title= Groups | content= * {{Link|#Resource Nodes}} * {{Link|#Local Nodes}} * {{Link|#ACP Nodes}} }} | {{TOC|subtoc | title= Nodes | content= {{Columns|4| * {{Link|#OutputState}} * {{Link|#FinalMix}} * {{Link|#Mixer}} * {{Link|#Signal}} * {{Link|#BankLocal}} * {{Link|#Bus}} * {{Link|#Sound}} * {{Link|#Selector}} * {{Link|#Generator}} * {{Link|#Constants}} * {{Link|#Shader}} * {{Link|#Amplitude}} * {{Link|#Frequency}} * {{Link|#Spatiality}} * {{Link|#FilterChain}} * {{Link|#Filter}} * {{Link|#Playlist}} * {{Link|#Replacer}} * {{Link|#Stream}} * {{Link|#AuxOut}} * {{Link|#Variable}} * {{Link|#Switch}} }} }} |}

== Resource Nodes ==

<h4><span style="display: none" id="OutputState">OutputState</span></h4> <h4><span style="display: none" id="FinalMix">FinalMix</span></h4> === Mixer ===

''aka '''OutputState''' aka '''FinalMix'''''

{| class="wikitable align-center-col-4" |+ Attributes ! Category ! Name ! Description ! Range |- | General | Inputs | A listed representation of the groups defined within the mixer file. | {{n/a}} |}

The mixer's input ports are variable and depend on its internal logic.

No output ports.

=== Signal ===

Takes one or more inputs and transforms them into one or more outputs that can be used to feed the inputs of other nodes. The internal logic that defines the input/output behavior can be edited inside the {{Link|Arma Reforger:Audio Editor: Nodes#Signal Editor Nodes|Signal Editor}} by double-clicking on the node.

No dedicated attributes.

Input ports depend on the internal signal setup.

Output ports depend on the internal signal setup.

== Local Nodes ==

=== BankLocal ===

{| class="wikitable align-center-col-4" |+ Attributes ! Category ! Name ! Description ! Range |- | Flags | Disable Streaming | If enabled, streaming is suppressed and the entire sample is loaded into memory as a single block of data. {{Feature|informative|The flag is ignored when the size of the file is > 16 MB.}} | true/false |- | Flags | Preload | If enabled, all samples in the bank are preloaded into the cache on the first playback. | true/false |- | General | Volume | Volume in decibels (dB), applied to all bank samples. | [-60, +60] |- | General | Volume variance | Volume randomization factor; maximum deviation from the value of Volume, in dB. | [0, +30] |- | General | Pitch | Pitch shift in semitones applied to all bank samples. | [-24, +24] |- | General | Pitch variance | Pitch randomization factor; maximum deviation in semitones from the value of Pitch. | [0, 12] |- | General | Loop count | Number of times that the played sample is repeated. | [0, 255] |- | General | Loop begin | The first sample of the region to be looped. * Loop count above defines the number of repetition * When Offset below is used, then the value must be greater than Offset | {{n/a}} |- | General | Loop length | Length of the loop region, in samples. {{Feature|important|The value of Loop begin + Loop length must be greater than Offset.}} | {{n/a}} |- | General | Infinite Loop | If enabled, the played sample is repeated infinitely until the sound is stopped. | true/false |- | General | Terminate Loop | If enabled, the loop will stop immediately upon sound stop. If false, the loop will finish the current cycle first. | true/false |- | General | Termination Fade Out | Fade out in milliseconds applied when the source is terminated due to limits during playback.<br> Use Release Shape curve. | [0, 10000] |- | General | Selection | Method for selecting a sample. * RandomNoRepeat: Samples selected at random, with the exception that the same sample is not repeated twice in a row * Random: Samples selected at random * SequenceFromFirst: Samples played in sequence, starting with the first sample * FirstRandomAndSequence: Samples played in sequence, starting with a randomly-selected sample * CustomSignalIndex: When this option is selected, a new input port is added to the bank that allows a sample to be selected based on the signal value | {{n/a}} |- | General | Resampler | Resampling method for converting between different sample rates. * Point: No interpolation (fastest, least accurate) * Linear: Interpolation (slower, but more accurate than point) * FIR (4/8): FIR filter that implements resampling (slowest but most accurate) | {{n/a}} |- | Envelope | Silence | Length of silence in milliseconds added in front of the sample * Time is not counted into Envelope, Envelope-Attack time starts after Silence | [0, 10000] |- | Envelope | Offset | Length of playback offset of the sample, in milliseconds. For non-looped playback in case when offset is bigger then sample length a playback is skipped. | [0, 10000] |- | Envelope | Random Start Offset | If enabled, a random start offset is applied | true/false |- | Envelope | Attack Shape | Function for the shape of the sound fade in. Defines the "shape" of the volume change during fade-in.

{{Link|https://www.desmos.com/calculator/s7z4sji5b5}}

* Linear: Curve is linear * SCurve: Curve is "S-shaped". with a steep middle-part (volume = -6db when time = 50%) and gentle beginning and ending * Cos: Curve is "S-shaped", similar to SCurve * EPower (Equal Power) : If fade in and fade out happen at the same time, the equal power curve will ensure there's no "hole" in the overall volue (fade in * fade in + fade out * fade out = 1) * Exp: Exponential curve (gets steeper over time) * Quadratic: ''TBA'' | {{n/a}} |- | Envelope | Attack | Time in milliseconds it takes before the sample reaches full volume. | |- | Envelope | Sustain | Time of Sustain in milliseconds. If the value is > 0, the total playback length will become {{hl|Fade In + Sustain + Fade Out}}. | [0, 10000] |- | Envelope | Release Shape | Function for the shape of the sound fade out. This will also apply for Termination fade out. Defines the "shape" of the volume change during fade-out. Shapes are the same as attack shapes, but inverted.

* Linear: * SCurve: Curve is "S-shaped". with a steep middle-part (volume = -6db when time = 50%) and gentle beginning and ending * Cos: Curve is "S-shaped", similar to SCurve * EPower (Equal Power) : If fade in and fade out happen at the same time, the equal power curve will ensure there's no "hole" in the overall volue (fade in * fade in + fade out * fade out = 1) * Exp: Exponential curve (gets steeper over time) * Quadratic: TBA | {{n/a}} |- | Envelope | Release | Time in milliseconds it takes for the sound to fully fade out. | [0, 10000] |- | Samples | Samples | List of audio samples. There is a limit of max 1024 samples. | {{n/a}} |- | Samples | Samples/Filename | Link to the sample ({{hl|.wav}} format) | {{n/a}} |- | Samples | Samples/Probability | In case of a randomised selection method, this parameter defines the probability that the sample will be selected. Probability is a {{Link|https://www.statisticshowto.com/weighting-factor/|weighting factor}}, not a percentage. | [0, 100] |- | Samples | Samples/Index | Custom signal index | [0, inf+] |- | Samples | Samples/Sample Metadata | Name of a string holding localization data which can be processed by other parts of the game. | {{n/a}} |}

{| class="wikitable" |+ Input Ports ! Name ! Type ! Description |- | Volume | Signal (toggleable) | Scaling factor applied to the gain of all samples in the bank |- | Volume variance | Signal | Maximum allowed deviation of specified volume in decibels (dB) |- | Pitch | Signal (toggleable) | Scaling factor applied to the pitch of all samples in the bank |- | Pitch variance | Signal | Maximum allowed deviation of specified pitch in semitones |- | Replacer | Settings node | Allows bank to be controlled by a Replacer |- | Offset | Signal | Length of playback offset of the sample in ms. Override offset defined in "bank" properties. |- | Silence | Signal | Length of silence added in front of the sample in ms |- | Fade In | Signal | Time in ms it takes before the sample reaches full volume |- | Sustain | Signal | If the value is >0, the total playback length will become Fade In + Sustain + Fade Out |- | Fade Out | Signal | Time in ms it takes before the sample fully fades out |}

{| class="wikitable" |+ Output Ports ! Name ! Type ! Description |- | Fade Out | Signal | Time in milliseconds it takes before the sample fully fades out. |}

=== Bus ===

Mixes down all audio streams fed to the "In" port to a single output.

{| class="wikitable align-center-col-4" |+ Attributes ! Category ! Name ! Description ! Range |- | General | Channels | Number of output channels | [1, 8] |- | General | Sample Rate | Sample rate in Hertz | Can be one of: {{Columns|3| * 8000 * 11025 * 16000 * 32000 * 44100 * 48000 * 64000 * 96000 * 192000 }} |- | General | Volume D B | Volume modifier in decibels (dB) | [-60, 12] |- | General | Resampler | Resampling method for converting between different sample rates * Point: No interpolation (fastest, least accurate) * Linear: Interpolation (slower, but more accurate than point) * FIR (4/8): FIR filter that implements resampling (slowest but most accurate) | {{n/a}} |- | General | Channel Volume | If enabled, input ports controlling the volumes of each output channel become available. {{Feature|informative|In order to work, a dedicated output channel amount must be selected in the "Channel" attribute. "Default" will not work.}} | true/false |- | Limitation | Enable Limitation | Enables Limitation and displays Limitation variables. | true/false |- | Limitation | Source Limit | Max number of inputs allowed to play at the same time. Quietest ones are muted if the limit is exceeded. | [1, 255] |- | Limitation | Source Limit Type | Specifies how the Source Limit is evaluated * Static: Limit is evaluated once at the beginning of playback * Dynamic: Limit is evaluated continuously during playback | {{n/a}} |- | Limitation | Volume Compensation | If enabled and a sound is discarded because of the Source Limit, the remaining sounds will receive a volume boost equal to the volume of the discarded sounds in order to preserve the input volume.

Example: Sound A is 1dB, B is 2dB, Source Limit is 1 (only one sound is allowed to play). Only B will play because it's louder, but it will play with a volume of 3dB. The 1dB volume of discarded A was added to the 2dB original volume of B. | true/false |- | Variable | Var Name | Defines which variable within the variables config file the bus feeds into.

Only available when a file is defined in Var Resource. | {{n/a}} |- | Variable | Var Resource | Filepath to Config file containing definitions of Variables | {{n/a}} |}

{| class="wikitable" |+ Input Ports ! Name ! Type ! Description |- | In | Audio In | Audio Input |- | Volume | Signal (toggleable) | Scaling factor applied to the gain. Hidden if per-channel volumes are activated. |- | DSP | Settings node | Accepts a Filter or FilterChain |- | Volume0..7 | Signal (toggleable) | Scaling factor applied to the gain of the respective channels. Only visible if per-channel volumes are activated and an output channel amount is specified. |}

{| class="wikitable" |+ Output Ports ! Name ! Type ! Description |- | Out | Audio Out | {{n/a}} |}

=== Sound ===

The root node of a signal chain. Must be present in every chain in order for sound to be playable in-game, as this node serves as the "identifier" for the engine.

{| class="wikitable align-center-col-4" |+ Attributes ! Category ! Name ! Description ! Range |- | General | Volume D B | Volume modifier, in decibles (dB) | [-60, 60] |- | General | Priority | Factor that is taken into account when determining which sources to keep or destroy in case the limit of playing sources is exceeded. Sounds with lower priority are more likely to be destroyed than sounds with higher priority. | [0, 100] |- | General | Delay Time | Delay time in milliseconds before sound is played | [0, 10000] |- | General | Even No Repeat Time | Time in milliseconds below which sound events with the same name will be ignored | [0, 10000] |- | Flags | No In Audible | If enabled, sounds below the threshold of audibility are not played | true/false |- | Flags | Bypass Volume Test | If enabled, volume is not considered when determining which sources to destroy in case the {{hl|.acp}} limit of playing sources is exceeded | true/false |- | Flags | Speed Of Sound Simulation | Simulates delayed playback due to the speed of sound | true/false |- | Transformation | Transformation | Specifies the position from which this sound is played | * Entity: Sound is played from the position of the entity which the .acp file is attached to * Bone: Sound is played from the bone specified in Bone Name on the entity which the .acp file is attached to * Offset: Sound is played from the position of the entity with the specified offset applied. A Sound Point can be specified in Offset Name

{{Feature|important|"Bone" and "Offset" types need a SoundComponent on the entity in order to work.}} |- | Transformation | Static | If enabled, the sound does not move with the entity but remains static at the initial playback position. | true/false |- | Trigger | Type | Specifies how the sound is triggered | * Continuous: Sound is triggered and continues to repeat if the value of the signal connected to the Trigger port is different from 0. * One shot: Sound is triggered once based on the values of Threshold and Reset. * Timer: Periodically triggers the sound event, the period is defined by the Time attribute or the signal connected to the Trigger port. If the Time is 0, the sound is not triggered. |- | Trigger | Threshold | Value that the signal connected to the Trigger port needs to exceed before sound is triggered | Threshold >= Reset |- | Trigger | Reset | Value below which the signal needs to be before the sound can be triggered again | Reset <= Threshold |- | Slave | Event Type | If the sound is a slave (i.e. if the Master port is connected to another sound), this parameter defines its start/stop behavior in response to the master. | * Start-Stop: Slave starts/stops when Master starts/stops * OnStart-Start: Slave starts when Master starts * OnStart-Stop: Slave stops when Master starts |- | Bounding Volume | Type | When different from None, sound position is moved to the closest point within the volume towards the camera.

Amplitude and Spatiality is calculated towards this closest point. | * Sphere * Box * Cylinder |- | Variable | Var Name | Defines which variable within the variables config file the sound node feeds into.

Only available when a file is defined in Var Resource | n/a |- | Variable | Var Resource | Filepath to Config file containing definitions of Variables | {{n/a}} |}

{| class="wikitable" |+ Input Ports |- ! Name ! Type ! Description |- | In | Audio In | Audio Input |- | Volume | Signal (toggleable) | Multiplier for the value defined in the Item Details |- | Trigger | Signal | Accepts a signal whose value can be used to trigger playback of the sound |- | DSP | Settings node | Accepts a Filter or FilterChain |- | Master | Master/Slave system | Accepts the Slave output of a Sound node |- | Priority | Signal | Input signal value is added to the value defined in the node. |}

{| class="wikitable" |+ Output Ports ! Name ! Type ! Description |- | Out | Audio Out | Audio Output |- | Slave | Master/Slave system | Connects to the "Master" node of another sound node |- | Aux Out | Aux Out | Allows the audio signal to be routed into an Aux Out node |}

=== Selector ===

This node gives the user the ability to split the signal chain into multiple branches. On playback, the Selector will select one branch to connect to the chain, and leave the others disconnected based on the value of the input signal.

{| class="wikitable align-center-col-4" |+ Attributes ! Category ! Name ! Description ! Range |- | Ports | Min | Lower bound of this port's range | {{n/a}} |- | Ports | Max | Upper bound of this port's range | {{n/a}} |- | Ports | Volume | Volume modifier in decibels applied to the branch connected to this port | [-60, 12] |- | Ports | Default | If enabled, this port will be selected if the input signal does not fall within the range of any of the ports | true/false |}

{| class="wikitable" |+ Input Ports ! Name ! Type ! Description |- | Signal | Signal | Control signal whose value decides which of the following ports will be selected |- | ''User-defined ports'' | Audio | The branch connected to this port becomes the output if the control signal falls within the Min/Max range defined for this port |}

{| class="wikitable" |+ Output Ports ! Name ! Type ! Description |- | Out | Audio Out | Audio Output |}

=== Generator ===

Outputs a variety of different waveforms as audio. Used primarily for testing/prototyping purposes.

{| class="wikitable align-center-col-4" |+ Attributes ! Category ! Name ! Description ! Range |- | General | Function | Specifies the function/shape of the generated waveform | Can be one of: {{Columns|4| * Sine * Square * Sawtooth * Triangle * White noise * Pink noise * Brown noise * Silence * Pulse * One }} |- | General | Channels | Number of output channels | [1, 8] |- | General | Sample Rate | Sample rate in Hertz | Can be one of: {{Columns|3| * 8000 * 11025 * 16000 * 32000 * 44100 * 48000 * 64000 * 96000 * 192000 }} |- | General | Time | Length of time in milliseconds that the sound lasts | [0, 10000] |- | General | Volume D B | Volume modifier in decibels (dB) | [-60, 60] dB |- | General | Loop Count | Number of times that the generated sound is repeated | [0, 255] |- | General | Frequency | Frequency of the tone. {{Feature|important|Hidden if not applicable to the Type.}} | [1, 20000] |- | General | Termination fade out | Fade out [ms] applied when source is terminated during playback | [0, 10000] |- | Envelope | Attack Shape | Defines the curvature / shape of the attack (fade in) | Defines the "shape" of the volume change during fade-in

{{Link|https://www.desmos.com/calculator/s7z4sji5b5}}

* Linear: Curve is linear * SCurve: Curve is "S-shaped". with a steep middle-part (volume = -6db when time = 50%) and gentle beginning and ending * Cos: Curve is "S-shaped", similar to SCurve * EPower (Equal Power) : If fade in and fade out happen at the same time, the equal power curve will ensure there's no "hole" in the overall volue (fade in * fade in + fade out * fade out = 1) * Exp: Exponential curve (gets steeper over time) * Quadratic: |- | Envelope | Attack | Length of the attack [ms] to reach the desired volume

{{Feature|important|If any of A/S/R is different from 0 then envelope is applied.}} | [0, 10000] |- | Envelope | Sustain | Time [ms] of Sustain

{{Feature|important|If any of A/S/R is different from 0 then envelope is applied.}} | [0, 10000] |- | Envelope | Release Shape | Defines the curvature / shape of the release (fade out) | Defines the "shape" of the volume change during fade-out. Shapes are the same as attack shapes, but inverted.

* Linear: Curve is linear * SCurve: Curve is "S-shaped". with a steep middle-part (volume = -6db when time = 50%) and gentle beginning and ending * Cos: Curve is "S-shaped", similar to SCurve * EPower (Equal Power) : If fade in and fade out happen at the same time, the equal power curve will ensure there's no "hole" in the overall volue (fade in * fade in + fade out * fade out = 1) * Exp: Exponential curve (gets steeper over time) * Quadratic: |- | Envelope | Release | Length of the release [ms] to "fade out" after the generator time {{Feature|important|If any of A/S/R is different from 0 then envelope is applied.}} | [0, 10000] |}

{| class="wikitable" |+ Input Ports ! Name ! Type ! Description |- | Volume | Signal (toggleable) | Scaling factor applied to the gain |- | Time | Signal | Length of time in milliseconds that the sound lasts |- | Frequency | Signal (toggleable) | Frequency of the tone |}

{| class="wikitable" |+ Output Ports ! Name ! Type ! Description |- | Out | Audio Out | Audio Output |}

=== Constants ===

Allows to create static values that can be connected to input ports that take signal inputs.

{| class="wikitable align-center-col-4" |+ Attributes ! Category ! Name ! Description ! Range |- | Ports | Value | The value of each respective port | {{n/a}} |}

No input ports.

{| class="wikitable" |+ Output Ports ! Name ! Type ! Description |- | Variable amount of output ports | Signal | Outputs value specified in the item attributes |}

=== Shader ===

Applies panning and attenuation based on the spatial relation between the in-game listener and sound emitter.

{| class="wikitable align-center-col-4" |+ Attributes ! Category ! Name ! Description ! Range |- | General | Reverse Panning | If enabled, the panning applied by the Shader is reversed (i.e. sounds coming from the left are panned to the right and vice-versa) | true/false |- | General | ITD | If enabled, a short delay is applied to one channel based on the spatial relation between the listener and emitter. This simulates the interaural time difference (ITD) that humans rely on for localising sounds. {{Feature|informative|ITD is only applied if headphones mode is enabled in the game's settings, as this happens naturally when using speakers.}} | true/false |}

{| class="wikitable" |+ Input Ports ! Name ! Type ! Description |- | In | Audio In | Audio Input |- | Spatiality | Settings node | Accepts a {{Link|#Spatiality}} node that defines the spatial factor (i.e. the blend between the unprocessed and panned versions of the sound) based on the distance / spatial relation between the listener and sound emitter |- | Amplitude | Settings node | Accepts an {{Link|#Amplitude}} node that defines how amplitude attenuation is applied based on the distance between the listener and sound emitter |- | Frequency | Settings node | Accepts a {{Link|#Frequency}} node that defines how frequency attenuation is applied based on the distance between the listener and sound emitter |- | DSP | Settings node | Accepts a {{Link|#Filter}} or {{Link|#FilterChain}} node |- | Incident angle (azimuth) | Signal (toggleable) | This port can be used to define the direction that the sound is perceived to be coming from. Using this feature overrides the default panning calculated from the positions of the listener and emitter. The value of the input is assumed to be in radians with a counter-clockwise rotation convention. |}

{| class="wikitable" |+ Output Ports ! Name ! Type ! Description |- | Out | Audio Out | Audio Output |}

=== Amplitude ===

Settings node designed for use with {{Link|#Shader}}. Contains parameters that control the degree of amplitude attenuation that is applied by the Shader.

{| class="wikitable align-center-col-4" |+ Attributes ! Category ! Name ! Description ! Range |- | Amplitude | Curve | Defines how the attenuation changes with distance - that is, the function that the attenuation vs. distance curve adheres to. | {{Columns|2| * Linear * SCurve * Logarithm * 1/r * Custom }} |- | Amplitude | Inner Range | Distance in metres defining a radius around the emitter in which no volume attenuation occurs | [0, 100] |- | Amplitude | Outer Range | Distance in metres at which the sound becomes fully muted. Fade-in starts at the end of the Inner Range | [0, 10000] |- | Amplitude | Slope Factor | Factor at which the curve slopes. 100 makes the curve linear.

Only available for the "1/r" Curve type | [0, 100] |- | Amplitude | Attenuation Curve | Allows to plot a custom attenuation curve within the Curve Editor.

Only available for the "Custom" Curve type | {{n/a}} |- | Directivity | Enable Directivity | If enabled, a Directivity Curve can be set. | true/false |- | Directivity | Directivity Curve | Sets the directivity curve which allows to attenuate sound based on angle.

Directivity factor is: * 1 if listener is directly in front of the emitter, * 0 if directly behind the emitter. * 0.5 if 90° from it (left or right)

{{Feature|important|Only visible if Enable Directivity is enabled.}} | {{n/a}} |- | Variable | Var Name | Defines which variable within the variables config file the amplitude node feeds into. {{Feature|important|Only available when a file is defined in Var Resource.}} | n/a |- | Variable | Var Resource | Filepath to Config file containing definitions of Variables | {{n/a}} |}

No input ports.

{| class="wikitable" |+ Output Ports ! Name ! Type ! Description |- | Out | Audio Out | Audio Output |}

=== Frequency ===

Settings node designed for use with {{Link|#Shader}}. Contains parameters that control the degree of frequency attenuation that is applied by the Shader.

{| class="wikitable align-center-col-4" |+ Attributes ! Category ! Name ! Description ! Range |- | General | Dynamic Update | If enabled, the filter settings are updated during playback | true/false |- | Distance Attenuation | Enable Distance Att | If enabled, filtering due to distance attenuation is applied | true/false |- | Distance Attenuation | Type | Type of filter applied | * AirAbsorption: Applies a custom filter that models the physical effect of distance on the frequency content of sound propagating through air. Deatiled information here. * AirAbsorbtionLite: Combination of biquad low pass and variable roll of low pass filter that models the physical effect of distance on the frequency content of sound propagating through air. * Lowpass: Applies a generic lowpass filter with tweakable parameters. Greater flexbility in Sound Design, but for Air Absorption less physically accurate than the dedicated filter models. |- | Distance Attenuation | Filter Strength (AirAbsorption models only) | Scaling factor for AirAbsorption filter. {{Feature|important|Only available if the "AirAbsorption" or "AirAbsortionLite" Type is selected.}} | [0, 4] |- | Distance Attenuation | Inner Range | Distance in metres up tp which the filter's cutoff frequency remains at the maximum value specified by Cutoff Max {{Feature|important|Only available if the "LowPass" Type is selected.}} | [0, 100] |- | Distance Attenuation | Outer Range | Distance in metres at which the filter's cutoff frequency is at the minimum value specified by Cutoff Min {{Feature|important|Only available if the "LowPass" Type is selected.}} | [0, 10000] |- | Distance Attenuation | Slope Factor | Controls the slope of the filter; analogous to the "Q factor" of the filter {{Feature|important|Only available if the "LowPass" Type is selected.}} | [0.01, 100] |- | Distance Attenuation | Cutoff Max | Maximum cutoff frequency of the filter when distance <= Inner Range {{Feature|important|Only available if the "LowPass" Type is selected.}} | [100, 16000] |- | Distance Attenuation | Cutoff Min | Minimum cutoff frequency of the filter when distance >= Outer Range {{Feature|important|Only available if the "LowPass" Type is selected.}} | [100, 16000] |- | Directivity | Enable | If enabled, low-pass filtering due to source directivity is applied. Activates the Directivity input port. | true/false |- | Directivity | Directivity Factor | The degree to which sound is affected by the filter (0 = no filtering) | [0, 1] |- | Terrain Effects | Terrain Effects | Enables occlusion caused by the terrain. {{Feature|important|The terrain needs to have a generated SoundMap for it to work.}} | true/false |}

{| class="wikitable" |+ Input Ports ! Name ! Type ! Description |- | Directivity Factor | Signal (toggleable) | The degree to which sound is affected by the filter (0 = no filtering, 1 0 full filtering.) {{Feature|important|Only becomes visible when Directivity is enabled in the node's Item Attributes.}} |- | Rolloff | Signal (toggleable) | Roloff of the filter |- | Cutoff Frequency | Signal (toggleable) | Cutoff Frequency of the filter. {{Feature|important|Settings via input ports will not override the node's settings, but rather stack with them.}} |}

{| class="wikitable" |+ Output Ports ! Name ! Type ! Description |- | Out | Settings node | Frequency output to be used on the Shader's Frequency input. |}

=== Spatiality ===

Settings node designed for use with {{Link|#Shaders}}. The purpose of this node is to provide the connected Shader(s) with a Spatial Factor value that controls how spatialised the output from the Shader(s) are.<br> This Spatial Factor controls the blending between unprocessed and spatialised (i.e. panned) sound. A value of 0 informs the connected Shader that no panning should be applied while a value of 1 indicates that the sound should be fully panned.

{| class="wikitable align-center-col-4" |+ Attributes ! Category ! Name ! Description ! Range |- | Spatiality | Spatial Factor Source | Defines where the spatial factor is taken from.

See the Spatial Factor Sources table below for more details. | * Value * Curve * Signal * AzimuthCurve |- | Spatiality | Value | When this option is selected, the spatial factor is defined by a constant value in the range [0, 1] {{Feature|important|Only available when the "Value" Spatial Factor Source is selected.}} | [0, 1] defined as static value |- | Spatiality | Curve | When this option is selected, the Curve Editor becomes available, in which the user can define the relationship between the distance to the sound emitter and the spatial factor.

Only available when the "Curve" Spatial Factor Source is selected. | [0, 1] defined in Curve Editor |- | Spatiality | Signal | When this option is selected, the spatial factor is defined by the value of the signal connected to the Spatial Factor input port which becomes available. Only available when the "Signal" Spatial Factor Source is selected. | [0, 1] from Spatial Factor signal input |- | Spatiality | AzimuthCurve (Curve0, Curve90) | Same as "Curve", but using two different curves. Curve0 defines the Spatial Factor for when the sound emitter is directly in front or behind the listener, Curve90 defines the Spatial Factor for when the sound emitter is directly to the left or right of the emitter. The Spatial Factor will interpolate for angles in between. Only available when the "AzimuthCurve" Spatial Factor Source is selected. | [0, 1] defined in Curve Editor |}

{| class="wikitable" |+ Input Ports ! Name ! Type ! Description |- | Spatial Factor | Signal (toggleable) | The degree to which sound is spatialised. {{Feature|important|Only becomes visible when the "Signal" Spatial Factor Source type is selected in the node's Item Attributes.}} |}

{| class="wikitable" |+ Output Ports ! Name ! Type ! Description |- | Out | Settings node | Spatiality output to be used on the Shader's Spatiality input. |}

=== FilterChain ===

Enables the grouping of multiple DSP nodes together in series. The individual DSP effects are applied in the order that they are connected to the FilterChain. {| class="wikitable align-center-col-4" |+ Attributes ! Category ! Name ! Description ! Range |- | General | Ports | Amount of available input ports | [2, 16] |}

{| class="wikitable" |+ Input Ports ! Name ! Type ! Description |- | ''User-defined ports'' | Settings node | Accepts a Filter output |}

{| class="wikitable" |+ Output Ports ! Name ! Type ! Description |- | Out | Settings node | To be used in another node's DSP input. |}

=== Filter ===

Settings node that applies a specified DSP effect to the node(s) to which it is connected. {| class="wikitable align-center-col-4" |+ Attributes ! Category ! Name ! Description ! Range |- | General | Wet Dry | Blend of the dry (unprocessed) and wet (processed) versions of the input sound | [0, 1] |- | General | Volume | Volume modifier (decibels) | [-60, 12] |- | General | DSP Object | Class of the DSP effect to be used | {{n/a}} |}

{| class="wikitable" |+ Input Ports ! Name ! Type ! Description |- | Wet Dry | Signal (toggleable) | Blend of the dry (unprocessed) and wet (processed) versions of the input sound [0, 1] |- | Volume | Signal (toggleable) | Scaling factor applied to the gain |}

{| class="wikitable" |+ Output Ports ! Name ! Type ! Description |- | Out | Audio Out | Audio Output |}

=== Playlist ===

Inputs connected to this node will play in sequence, according to the order in which they are connected to it.

{| class="wikitable align-center-col-4" |+ Attributes ! Category ! Name ! Description ! Range |- | Unsorted | Ports | Amount of available input ports | [1, 16] |}

{| class="wikitable" |+ Input Ports ! Name ! Type ! Description |- | ''User-defined ports'' | Audio In | Audio Input |}

{| class="wikitable" |+ Output Ports ! Name ! Type ! Description |- | Out | Audio Out | Audio Output |}

=== Replacer ===

Settings node designed to be used with the Replacer input ports of {{Link|#BankLocal|Banks}}. Enables the user to replace a string in the filepaths of all samples in the connected Bank.

{| class="wikitable align-center-col-4" |+ Attributes ! Category ! Name ! Description ! Range |- | Strings | String to replace | The string, searched for in the filepaths of all samples in the connected Bank, that we wish to replace. | {{n/a}} |- | Strings | Replacement strings | A list of candidate replacement strings and signal value pairs. A Replacement string from the list replaces String to replace in the filepaths of the connected bank's samples if its corresponding signal value matches that of the Control signal. | 0..64 entries |}

{| class="wikitable" |+ Input Ports ! Name ! Type ! Description |- | Control Signal | Signal | Signal which will be evaluated in Replacement strings. |}

{| class="wikitable" |+ Output Ports ! Name ! Type ! Description |- | Out | Settings node | To be used in a Bank's Replacer input port. |}

=== Stream ===

Abstract node used for connecting streaming audio (e.g voice chat) to a signal chain created in the Audio Editor.

{| class="wikitable align-center-col-4" |+ Attributes ! Category ! Name ! Description ! Range |- | General | ID | ID string corresponding to the target stream ID defined in gamecode. | {{n/a}} |}

No input ports.

{| class="wikitable" |+ Output Ports ! Name ! Type ! Description |- | Out | Audio out | Audio Output. {{Feature|important|Cannot be connected to Selectors or Playlists due to the nature of the node.}} |}

=== AuxOut ===

Accepts one or more {{Link|#Sound}} nodes as input and routes the output of those node(s) to the connected {{Link|#Mixer}} port.

{| class="wikitable align-center-col-4" |+ Attributes ! Category ! Name ! Description ! Range |- | General | Volume | Volume in decibels (dB), applied to all samples in the bank | [-60, +60] |- | General | Mono Mix | Value between 0 and 1 that controls the mix between the unaltered output and a mono-downmixed version of the output | [0, 1] |}

{| class="wikitable" |+ Input Ports ! Name ! Type ! Description |- | Sound | Sound node | The output from the sound node(s) connected to this port will be mixed down and sent to the output. |- | Volume | Signal (toggleable) | Scaling factor applied to the output gain. |- | Mono Mix | Signal (toggleable) | Value between 0 and 1 that controls the mix between the unaltered output and a mono-downmixed version of the output. |- | DSP | Settings node | Accepts a {{Link|#Filter}} or {{Link|#FilterChain}} node. |}

{| class="wikitable" |+ Output Ports ! Name ! Type ! Description |- | Out | Audio out | Audio Output to be connected with a Mixer node. |}

=== Variable ===

Abstract node that outputs the value of a specified {{Link|Arma Reforger:Audio Editor: Audio Variables|audio variable}}.

{| class="wikitable align-center-col-4" |+ Attributes ! Category ! Name ! Description ! Range |- | General | Curve | Opens the Curve Editor, in which a relation between variable value and output signal can be set. | {{n/a}} |- | Variable | Var Name | Defines which variable within the variables config file the node reads from. {{Feature|important|Only available when a file is defined in Var Resource.}} | {{n/a}} |- | Variable | Var Resource | Filepath to Config file containing definitions of variables. | {{n/a}} |}

No input ports.

{| class="wikitable" |+ Output Ports ! Name ! Type ! Description |- | Out | Signal | Signal value output (float) |}

=== Switch ===

This node is similar to the {{Link|#Selector}} node, but gives the user the ability to switch between ports during sound playback.

{| class="wikitable align-center-col-4" |+ Attributes ! Category ! Name ! Description ! Range |- | Unsorted | Crossfade Time | Time to crossfade between previous and currently playing port. | [100, 100000] ms |- | Ports | Min | Lower bound of this port's range | [-inf, inf] |- | Ports | Max | Upper bound of this port's range | [-inf, inf] |- | Ports | Volume | Volume modifier [dB] applied to the branch connected to this port | [-60, 12] dB |- | Ports | Default | If enabled, this port will be selected if the input signal does not fall within the range of any of the ports | True/False |}

{| class="wikitable" |+ Input Ports ! Name ! Type ! Description |- | Signal | Signal | Control signal whose value decides which of the following ports will be selected |- | (Varying number of user-defined ports) | Audio | The branch connected to this port becomes the output if the control signal falls within the Min/Max range defined for this port |}

{| class="wikitable" |+ Output Ports ! Name ! Type ! Description |- | Out | Audio Out | Audio Output |}

== ACP Nodes ==

* ACP node, aka "ACP in ACP" allow for parts of an acp to be re-used within another. * The main purpose of this feature is it to remove cases in which multiple ACPs are near-identical with only minor differences. * This is achieved by the ability to "expose" input and output ports within an ACP. These exposed ports can then be accessed within another ACP. * Similar to Signal node, ACP node references {{hl|.acp}} project, where node configuration is stored.

=== Port Exposition ===

Ports can be exposed by opening a node's context menu, selecting a parameter and finally activating "Expose".

The exposed ports can then be seen in the acp's Item Detail panel.

Exposed ports name is created from node name and type of the node.

Exposed ports can be removed by: * unchecking "Expose" on the node attributes or * in ACP's Item Detail panel

=== Group Usage ===

Groups allow to assign the input ports of multiple nodes to a single ACP input.

If, for example, 4 banks are supposed to have the same pitch, their pitch inputs can be added to a group. This group will then show up as a single input on the ACP node.

Groups can be created by clicking on the '''+''' Icon in the Groups section of an ACP's Item Detail panel.

A node's input can be assigned to a group via the context menu. In order to assign an input to a Group, it must be enabled and exposed.

=== Playback ===

Right-clicking an ACP node within another ACP will show the "Playback" context menu entry. This will list all "playable" nodes which, in turn, can be turned on or off for playback. Playback from multiple nodes is supported.

=== Other ===

* The system supports connection validation * The system supports Signal Simulation * ACP node is removed in the data build and instead replaced by node content. All connections go through the same accept/connect functions as in the editor, so an error message can appear and the build can fail.

=== Known Issues ===

* Nested ACP nodes are not supported. (No ACP in ACP in ACP) * Groups accept any input, but no type-check is supported. A group could take an audio stream but be connected to a signal input. This will fail the build. * There are problems when the group already exists (and is connected) and in a referenced ACP a new port is exposed into this group.

== External References ==

* {{Link|https://en.wikipedia.org/wiki/Sample-rate_conversion}} * {{Link|https://en.wikipedia.org/wiki/Interpolation}} * {{Link|https://ccrma.stanford.edu/~jos/resample/resample.pdf}}

{{GameCategory|armaR|Modding|Official Tools}} {{GameCategory|armaR|Modding|Audio}}
2v33p4wi80qeoy1drayy5lq5l43k8fr

# Arma Reforger:Audio Editor: Signal Editor

5050
47175
371072
370771
2025-02-26T13:30:36Z
Lou Montana
10739
Text replacement - "(.+)$" to "$1 {{GameCategory|armaR|Modding|Audio}}"
371072
wikitext
text/x-wiki
The Signal Editor is a sub-component of the {{Link|Arma Reforger:Audio Editor}}, where the user can edit the internal configurations of {{Link|Arma Reforger:Audio Editor: Signal Editor: Nodes|Signal nodes}}. Using the available node types in the Signal Editor, the user can define the input/output behaviour of the Signal resource opened in the editor, transforming one or more inputs into one or more outputs.

== User Interface ==

The Signal Editor UI is identical to that of Audio Editor, save for the types of nodes available in the Nodes palette.

{{Feature|informative|See {{Link|Arma Reforger:Audio Editor: Signal Editor: Nodes}}.}}

{{GameCategory|armaR|Modding|Official Tools}} {{GameCategory|armaR|Modding|Audio}}
3iptfzk78tis10h9bosh3itx4ec19h5

# Arma Reforger:Audio Editor: Signal Editor: Nodes

5050
47157
371076
370706
2025-02-26T13:30:37Z
Lou Montana
10739
Text replacement - "(.+)$" to "$1 {{GameCategory|armaR|Modding|Audio}}"
371076
wikitext
text/x-wiki
{{TOC|side}} {| class="valign-top" | {{TOC|subtoc | title= Groups | content= * {{Link|#Interfacing Nodes}} * {{Link|#Value-Generating Nodes}} * {{Link|#Math Operators and Logic Nodes}} * {{Link|#Exponential Group Nodes}} * {{Link|#Conversion Group Nodes}} * {{Link|#Saturation Group Nodes}} * {{Link|#Trigonometric Group Nodes}} }} | {{TOC|subtoc | title= Nodes | content= {{Columns|6| * {{Link|#Input}} * {{Link|#Output}} * {{Link|#Value}} * {{Link|#Variable}} * {{Link|#Random}} * {{Link|#Generator 2|Generator}} * {{Link|#Time}} * {{Link|#LFO}} * {{Link|#Curve Modulator}} * {{Link|#Square Modulator}} * {{Link|#Sum}} * {{Link|#Sub}} * {{Link|#Mul}} * {{Link|#Div}} * {{Link|#Remainder}} * {{Link|#Mod}} * {{Link|#Min}} * {{Link|#Max}} * {{Link|#Abs}} * {{Link|#Pow}} * {{Link|#Cond}} * {{Link|#Converter}} * {{Link|#Interpolate}} * {{Link|#Env}} * {{Link|#Smoother}} * {{Link|#Average}} * {{Link|#Filter 2|Filter}} * {{Link|#Delta}} * {{Link|#Exp}} * {{Link|#Ln}} * {{Link|#Log2}} * {{Link|#Log10}} * {{Link|#Db2Gain}} * {{Link|#Gain2Db}} * {{Link|#St2Gain}} * {{Link|#Gain2St}} * {{Link|#Freq2Oc}} * {{Link|#Freq2Mel}} * {{Link|#Mel2Freq}} * {{Link|#Floor}} * {{Link|#Ceil}} * {{Link|#Round}} * {{Link|#Clamp}} * {{Link|#ClampMin}} * {{Link|#ClampMax}} * {{Link|#Sin}} * {{Link|#Cos}} * {{Link|#Tan}} * {{Link|#ASin}} * {{Link|#ACos}} * {{Link|#ATan}} }} }} |}

== Interfacing Nodes ==

=== Input ===

Creating an Input node will automatically create a corresponding input port on the Signal node within the {{Link|Arma Reforger:Audio Editor}}. It allows the usage of game data within the Signal Editor in two ways:

* Inside the Audio Editor, another node can be connected to the {{Link|#Signal}} node's inputs ports. The corresponding Input nodes within the Signal will then use the value passed from the connected node. * Giving an Input node the same name as a Signal passed via script or present on the connected entity's SignalsManagerComponent will automatically cause the node to use the respective values.<br><!-- -->e.g naming an Input node "Distance" will result in that it returns the distance from the listener to the entity.

; Naming Conventions Input nodes that are designed to be fed from {{Link|Arma Reforger:Audio Editor: Nodes#Constants|constants}} nodes will be NAMED_IN_ALLCAPS. The respective Constant output ports get the exact same name.

{| class="wikitable align-center-col-4" |+ Attributes ! Name ! Description ! Range ! Input port |- | Global | If true and the {{hl|.acp}} file using the Signal is attached to a SoundComponent, the signal name will be looked up in the list of global game signals instead of the connected entity. | true/false | {{Icon|unchecked}} |}

=== Output ===

Creating an Output node will automatically create a corresponding output port on the Signal node within the {{Link|Arma Reforger:Audio Editor}}. It allows the usage of data processed within the Signal Editor to be used within the Audio Editor.

No attributes.

== Value-Generating Nodes ==

=== Value ===

The Value node will always output a single, specified value. {{Feature|informative|For readability, it can make sense to change the node's name or comment to the specified value.}}

{| class="wikitable align-center-col-4" |+ Attributes ! Name ! Description ! Range ! Input port |- | Value | The value the node is supposed to output. | [-9223372036854775808, 9223372036854775808] | {{Icon|unchecked}} |}

=== Variable ===

The Variable node outputs the current Value of an audio variable.<!-- TODO: link -->

{| class="wikitable align-center-col-4" |+ Attributes ! Name ! Description ! Range ! Input port |- | Var Name | Defines which variable from within the Variable Resource the node will output. | {{n/a}} | {{Icon|unchecked}} |- | Var Resource | Defines which Variable config file will be accessed. | {{n/a}} | {{Icon|unchecked}} |}

=== Random ===

The Random node will output a random number within a specified min/max range.

{| class="wikitable align-center-col-4" |+ Attributes ! Name ! Description ! Range ! Input port |- | Min | Minimum value that can be generated. | [-9223372036854775808, 9223372036854775808] | {{Icon|unchecked}} |- | Max | Maximum value that can be generated. | [-9223372036854775808, 9223372036854775808] | {{Icon|unchecked}} |- | Update Rate | Defines the rate at which the node will generate random values. | * Every Get: generate a random value on each request (Could be multiple times per frame). * Every OnFrame: generate a random value once per frame. * Once: generate a random value once and then continue outputting it on every successive get. | {{Icon|unchecked}} |}

=== Generator ===

The Generator node generates "impulses" of a specified Value in one frame in specified intervals.

{| class="wikitable align-center-col-4" |+ Attributes ! Name ! Description ! Range ! Input port |- | Value To Generate | The value which will be generated. | [-9223372036854775808, 9223372036854775808] | {{Icon|unchecked}} |- | Interval | The interval in milliseconds between each value generation. | [-9223372036854775808, 9223372036854775808] | {{Icon|unchecked}} |}

=== Time ===

The Time node continuously outputs either the time a sound instance has existed or the time the world has been running on the client's machine (in milliseconds).

{| class="wikitable align-center-col-4" |+ Attributes ! Name ! Description ! Range ! Input port |- | Time Type | Defines what time in milliseconds the node outputs. | * Life Time: Outputs the time in milliseconds the sound instance has existed so far. If the node is used by more than one sound that plays from the same {{hl|.acp}} at the same time, it will output the Life Time of the first sound that was triggered. * World Time: Outputs the time in milliseconds the world has been running on the local machine so far ('''not''' how long it has been running on the server). | {{Icon|unchecked}} |}

=== LFO ===

The L(ow)F(requency)O(scillation) node {{Link|https://en.wikipedia.org/wiki/Low-frequency_oscillation|oscillates}} between 0 and 1 in a specified shape.

{| class="wikitable align-center-col-4" |+ Attributes ! Name ! Description ! Range ! Input port |- | Frequency | Defines the LFO cycle's duration in seconds. | {{n/a}} | {{Icon|unchecked}} |- | Shape | The shape used for oscillation. | * Sine * Triangle * Square * Saw | {{Icon|unchecked}} |}

=== Curve Modulator ===

The Curve Modulator node allows it to plot modulation curves by defining the curve's single points.

{| class="wikitable align-center-col-4" |+ Attributes ! Name ! Description ! Range ! Input port |- | Points | Allows to add points to the curve. | {{n/a}} | {{Icon|unchecked}} |- | Points: Time | The time in milliseconds it takes to interpolate from the previous Value to the one of this point. | [1, 1000000] | {{Icon|unchecked}} |- | Points: Time Variance | The allowed maximum deviation from the specified point Value. | [0, 500000] | {{Icon|unchecked}} |- | Points: Value | The value of the point. | [-9223372036854775808, 9223372036854775808] | {{Icon|unchecked}} |- | Points: Value Variance | The allowed maximum deviation from the specified point Value. | [0, 500000] | {{Icon|unchecked}} |}

=== Square Modulator ===

The Square Modulator node allows it to generate a sequence of pulses with specified peak values, peak lengths and gaps between peaks.

{| class="wikitable align-center-col-4" |+ Attributes ! Name ! Description ! Range ! Input port |- | Points | Allows to add points to the curve. | {{n/a}} | {{Icon|unchecked}} |- | Points: Value | The value of the peak. | [-9223372036854775808, 9223372036854775808] | {{Icon|unchecked}} |- | Points: Value Variance | The allowed maximum deviation from the specified point Value. | [0, 500000] | {{Icon|unchecked}} |- | Points: Peak | The time in milliseconds the Value will be held before going back to 0. | [1, 1000000] | {{Icon|unchecked}} |- | Points: Peak Variance | The allowed maximum deviation from the specified Peak time. | [0, 500000] | {{Icon|unchecked}} |- | Points: Gap | The time in milliseconds the Value will remain at 0 before reaching the next Point. | [1, 1000000] | {{Icon|unchecked}} |- | Points: Gap Variance | The allowed maximum deviation from the specified Gap time. | [0, 500000] | {{Icon|unchecked}} |}

== Math Operators and Logic Nodes ==

=== Sum ===

The Sum node outputs the sum of all input nodes (simple addition).

No attributes.

=== Sub ===

The Sub(traction) node subtracts the Subtracter value from the Input value and outputs the result.

{| class="wikitable align-center-col-4" |+ Attributes ! Name ! Description ! Range ! Input port |- | Subtracter | Defines the value which will get subtracted from the input value. | [-9223372036854775808, 9223372036854775808] | {{Icon|checked}} |}

=== Mul ===

The Mul(tiplication) node outputs the product of all inputs.

No attributes.

=== Div ===

The Div(ision) node outputs the quotient of the dividend (Input) and the Divisor.

{| class="wikitable align-center-col-4" |+ Attributes ! Name ! Description ! Range ! Input port |- | Divisor | Defines the value by which the input value will get divided. | [-9223372036854775808, 9223372036854775808] | {{Icon|checked}} |}

=== Remainder ===

The Remainder node outputs the remainder of a division. The remainder is the value that is left when the Input (dividend) is not completely divisible by the Divisor.

; Formula remainder = dividend - (divisor * roundedQuotient)

{| class="wikitable align-center-col-4" |+ Attributes ! Name ! Description ! Range ! Input port |- | Divisor | Defines the value which will be used as the Divisor. | [-9223372036854775808, 9223372036854775808] | {{Icon|checked}} |}

=== Mod ===

The Mod(ulo) node outputs the modulus of a division. It is essentially the same as the {{Link|#Remainder}} node, but will floor the Quotient.

; Formula modulus = dividend - (divisor * flooredQuotient)

{| class="wikitable align-center-col-4" |+ Attributes ! Name ! Description ! Range ! Input port |- | Divisor | Defines the value which will be used as the Divisor. | [-9223372036854775808, 9223372036854775808] | {{Icon|checked}} |}

=== Min ===

The Min(imum) node will always output the smallest of the input values fed into it.

No attributes.

=== Max ===

The Max(imum) node will always output the largest of the input values fed into it.

No attributes.

=== Abs ===

The Abs(olute) node will always output the {{Link|https://en.wikipedia.org/wiki/Absolute_value|absolute value}} of an input value. Simply put, it makes sure that the output value is always positive.

No attributes.

=== Pow ===

The Pow(er) node outputs a power, in which the Input is set to the power of Exponent.

; Formula output = input^exponent

{| class="wikitable align-center-col-4" |+ Attributes ! Name ! Description ! Range ! Input port |- | Exponent | Defines the value of the exponent. | [-9223372036854775808, 9223372036854775808] | {{Icon|checked}} |}

=== Cond ===

The Cond(ition) node compares the Input value against a Comparator value and returns 1 if the Condition is met, 0 if not.

{| class="wikitable align-center-col-4" |+ Attributes ! Name ! Description ! Range ! Input port |- | Condition Type | Defines the Condition the comparison has to meet for the node to return 1. | ; Available operators * {{hl|1= ==}} (Input and Comparator must be equal) * {{hl|1= !=}} (Input and Comparator must be different) * {{hl|>}} (Input must be greater than Comparator) * {{hl|1= >=}} (Input must be greater than or equal to Comparator) * {{hl|<}} (Input must be less than Comparator) * {{hl|1= <=}} (Input must be less than or equal to Comparator) | {{Icon|unchecked}} |- | Comparator | The value the Input value is compared against. | | {{Icon|checked}} |}

=== Converter ===

The Converter node allows it to output custom values if the Input falls within specified ranges. If the input value does not fall within these ranges, a Default value is used.<br> Depending on the node's settings, this Default value can either be * specified in the node's Attributes (or fed via the Default input port) or * the Input value.

{{Feature|informative|The defined range will be [min, max), meaning the the min value is included, the max value is not.}}

{| class="wikitable align-center-col-4" |+ Attributes ! Name ! Description ! Range ! Input port |- | Default | Defines the default value which will be returned of the Input value does not fall within any Interval. | [-9223372036854775808, 9223372036854775808] | {{Icon|checked}} |- | Default from Input | If true, the node will output the Input value directly if it does not fall within any Interval. | true/false | {{Icon|unchecked}} |- | Intervals | Allows to define the node's Intervals/Ranges. | {{n/a}} | {{Icon|unchecked}} |- | Intervals: Min | Defines the minimum (included) value of the interval. | | {{Icon|unchecked}} |- | Intervals: Max | Defines the maximum (not included) value of the interval. | | {{Icon|unchecked}} |- | Intervals: Out | Defines the output value if the Input value lies within the range. | | {{Icon|unchecked}} |}

=== Interpolate ===

The Interpolate node allows it to smoothly interpolate between two Output values (Y) based on an Input value (X). * If the Input value is <= X min, the Output will be Y min. * If the Input value is >= X max, the Output will be Y max. * If the Input value is in between X min and X max, the Output value depends on the interpolation parameters.

; Example X min = 10, X max = 20 Y min = 0, Y max = 1 input = 15 input is right in-between 10 and 20 brought to Y range, output is 0.5

{{Feature|informative|The min values do not have to be smaller than the max values.}}

{| class="wikitable align-center-col-4" |+ Attributes ! Name ! Description ! Range ! Input port |- | X min | Defines the the Input value at which the interpolation starts. Output value == Y min. | [-9223372036854775808, 9223372036854775808] | rowspan="4" | {{Icon|checked}} |- | X max | Defines the the Input value at which the interpolation ends. Output value == Y max. | [-9223372036854775808, 9223372036854775808] |- | Y min | Defines the minimum output value. | [-9223372036854775808, 9223372036854775808] |- | Y max | Defines the maximum output value. | [-9223372036854775808, 9223372036854775808] |- | Fade In Type | rowspan="2" | Defines the curve function of the interpolation. {{Feature|important|Only available if Clamp is activated.}} | rowspan="2" | * Linear: Curve is linear * SCurve: Curve is "S-shaped". with a steep middle-part (volume = -6db when time = 50%) and gentle beginning and ending * Power of... | rowspan="2" | {{Icon|unchecked}} |- | Fade Out Type |- | Clamp | If activated, the interpolation is limited to Y min / Y max. If deactivated, the interpolation can continue in both directions and will keep the correlation between X and Y. | true/false | {{Icon|unchecked}} |- | Enable Custom Curve | Allows it to define a custom correlation between Input (X) and Output (Y) in the Curve Editor. Will disable all other attributes. | {{n/a}} | {{Icon|unchecked}} |}

=== Env ===

The Env(elope) node allows it to smoothly interpolate from 0 to 1 and then back from 1 to 0 based on an Input value. * Between an Input value of A and B, the Output will interpolate from 0 to 1. * Between B and C, the Output will remain 1. * Between C and D, the Output will interpolate back to 0.

; Example A = 1, B = 4, C = 6, D = 10 Input = 0: result = 0 Input = 1: result = 0 Input = 2: result = 0.333 Input = 3: result = 0.666 Input = 4..6: result = 1 Input = 7: result = 0.75 Input = 8: result = 0.5 Input = 9: result = 0.25 Input = 10: result = 0 Input = 11: result = 0

{| class="wikitable align-center-col-4" |+ Attributes ! Name ! Description ! Range ! Input port |- | A | Defines the the Input value at which the first interpolation starts. Output value == 0. | [-9223372036854775808, 9223372036854775808] | rowspan="4" | {{Icon|checked}} |- | B | Defines the the Input value at which the first interpolation ends. Output value == 1. | [-9223372036854775808, 9223372036854775808] |- | C | Defines the the Input value at which the second interpolation starts. Output value == 1. | [-9223372036854775808, 9223372036854775808] |- | D | Defines the the Input value at which the second interpolation ends. Output value == 0. | [-9223372036854775808, 9223372036854775808] |- | Fade In Type | rowspan="2" | Defines the curve function of the interpolation. {{Feature|important|Only available if Clamp is activated.}} | rowspan="2" | * Linear: Curve is linear * SCurve: Curve is "S-shaped". with a steep middle-part (volume = -6db when time = 50%) and gentle beginning and ending * Power of... | rowspan="2" | {{Icon|unchecked}} |- | Fade Out Type |}

=== Smoother ===

The Smoother node smoothes out changes in the Input by interpolating from the old to the new value over time.

{| class="wikitable align-center-col-4" |+ Attributes ! Name ! Description ! Range ! Input port |- | Fade In Time | Time in milliseconds the interpolation will take if the input value increased. | [999999999] | {{Icon|unchecked}} |- | Fade Out Time | Time in milliseconds the interpolation will take if the input value decreased. | [999999999] | {{Icon|unchecked}} |- | Fade In Type | rowspan="2" | Defines the curve function of the interpolation. {{Feature|important|Only available if Clamp is activated.}} | rowspan="2" | * Linear: Curve is linear * SCurve: Curve is "S-shaped". with a steep middle-part (volume = -6db when time = 50%) and gentle beginning and ending * Power of... | rowspan="2" | {{Icon|unchecked}} |- | Fade Out Type |}

=== Average ===

The Average node Outputs the average of the Input values within a specified number of frames.

{{Feature|informative| The node is (obviously) framerate-dependent and therefore not reliable when requiring accurate timings; e.g. when storing 30 frames: * Running the game at (constant) 30 FPS will result in getting the average of the last second. * Running the game at (constant) 60 FPS will result in getting the average of the last 1/2 second. }}

; Formula average = frameValueSums / framesNumber // e.g capacity = 3, frame1 = 50, frame2 = 100, frame3 = 120 // average = (50 + 100 + 120) / 3 = 90

{| class="wikitable align-center-col-4" |+ Attributes ! Name ! Description ! Range ! Input port |- | Capacity | Defines how many frames will be stored and evaluated. | [0, 128] | {{Icon|unchecked}} |}

=== Filter ===

The Filter node is one-pole low-pass filter.

{| class="wikitable align-center-col-4" |+ Attributes ! Name ! Description ! Range ! Input port |- | Frequency | Cut-off frequency | {{n/a}} | {{Icon|checked}} |}

=== Delta ===

The Delta node outputs change of input over time.

; Formula out = (in - inLast) / timeSlice

No attributes.

== Exponential Group Nodes ==

=== Exp ===

The Exp(onential) node multiplies the Input value with {{Link|https://en.wikipedia.org/wiki/E_(mathematical_constant)|{{hl|e}} (Euler's Number)}}.

No attributes.

=== Ln ===

The Ln node outputs the {{Link|https://en.wikipedia.org/wiki/Natural_logarithm|Natural Logarithm}} of the Input value.

No attributes.

=== Log2 ===

The Log2 node outputs the {{Link|https://en.wikipedia.org/wiki/Binary_logarithm|Binary Logarithm}} of the Input value.

No attributes.

=== Log10 ===

The Log10 node outputs the Decadic Logarithm (or {{Link|https://en.wikipedia.org/wiki/Common_logarithm|Common Logarithm}} of the Input value.

No attributes.

== Conversion Group Nodes ==

=== Db2Gain ===

The D(eci)b(el)2Gain node converts an Input value (in dB) and outputs it as Gain.

; Formula gain = 10^(input / 20)

No attributes.

=== Gain2Db ===

The Gain2D(eci)b(el) node converts an Input value (in Gain) and outputs it as dB.

{{Feature|informative|The initial/reference gain value will always be 1.}}

; Formula decibel = 20 * log10(input)

No attributes.

=== St2Gain ===

The S(emi)t(ones)2Gain node converts an Input value (in SemiTones) and outputs it as a Gain value. Alternatively, the Gain value can be interpreted as a relative pitch value.

The Input value hereby represents a change in SemiTones, meaning: * an Input of 0 outputs 1 (Baseline, no change in pitch), * an Input of -12 outputs 0.5 (half the baseline pitch/ one octave lover), * an Input of 12 outputs 2 (double baseline pitch/ one octave higher).

; Formula gain = 2^(input / 12)

No attributes.

=== Gain2St ===

The Gain2S(emi)t(ones) node converts an Input value (in Gain/relative pitch) and outputs it as SemiTones.

The Input value hereby represents a change in Gain/relative pitch, meaning: * an Input of 1 outputs 0 (Baseline, no change in SemiTones), * an Input of 0.5 outputs -12 (12 SemiTones/one octave lower), * an Input of 2 outputs 12 (12 SemiTones/one octave higher).

; Formula semiTones = 12 * log2(input)

No attributes.

=== Freq2Oc ===

The Freq(uency)2Oc(tave) node outputs the nth octave of the Input (frequency).

; Formula semiTones = input * 2^(Octaves)

{| class="wikitable align-center-col-4" |+ Attributes ! Name ! Description ! Range ! Input port |- | Octaves | Defines the maximum output value. | [0, 128] | {{Icon|unchecked}} |}

=== Freq2Mel ===

The Freq2Mel node converts an Input value in {{Link|https://en.wikipedia.org/wiki/Hertz|Hz}} and outputs it in {{Link|https://en.wikipedia.org/wiki/Mel_scale|Mel}}.

; Formula mel = 1127 * ln (1 + f / 700)

=== Mel2Freq ===

The Mel2Freq node converts an Input value in {{Link|https://en.wikipedia.org/wiki/Mel_scale|Mel}} and outputs it in {{Link|https://en.wikipedia.org/wiki/Hertz|Hz}}.

; Formula hertz = 700 * (e^(Mel / 1127) - 1)

== Saturation Group Nodes ==

=== Floor ===

The Floor node rounds an Input value down to its next lowest integer (e.g 1.1 &rarr; 1, 1.5 &rarr; 1, 1.99 &rarr; 1, 2.001 &rarr; 2).

No attributes.

=== Ceil ===

The Ceil(ing) node rounds an Input value up to its next highest integer (e.g 1.1 &rarr; 2, 1.5 &rarr; 2, 1.99 &rarr; 2, 2.001 &rarr; 3).

No attributes.

=== Round ===

The Round node rounds an Input value up if its first decimal is >= 5 and down if not (e.g 1.4 &rarr; 1, 1.49 &rarr; 1, 1.5 &rarr; 2, 1.51 &rarr; 2).

No attributes.

=== Clamp ===

The Clamp node prevents the Output value from becoming larger than Max and smaller than Min.<br> If the Input value is smaller than Min, the Output will return Min.<br> If the Input value is larger than Max, the Output will return Max.

{| class="wikitable align-center-col-4" |+ Attributes ! Name ! Description ! Range ! Input port |- | Min | Defines the maximum output value. | [-9223372036854775808, 9223372036854775808] | {{Icon|checked}} |- | Max | Defines the maximum output value. | [-9223372036854775808, 9223372036854775808] | {{Icon|checked}} |}

=== ClampMin ===

The ClampMin node prevents the Output value from becoming smaller than Min. If the Input value is smaller than Min, the Output will return Min.

{| class="wikitable align-center-col-4" |+ Attributes ! Name ! Description ! Range ! Input port |- | Min | Defines the maximum output value. | [-9223372036854775808, 9223372036854775808] | {{Icon|checked}} |}

=== ClampMax ===

The ClampMax node prevents the Output value from becoming larger than Max. If the Input value is larger than Max, the Output will return Max.

{| class="wikitable align-center-col-4" |+ Attributes ! Name ! Description ! Range ! Input port |- | Max | Defines the maximum output value. | [-9223372036854775808, 9223372036854775808] | {{Icon|checked}} |}

== Trigonometric Group Nodes ==

=== Sin ===

The Sin(e) node outputs the sine of the Input value.

No attributes.

=== Cos ===

The Cos(ine) node outputs the cosine of the Input value.

No attributes.

=== Tan ===

The Tan(gent) node outputs the tangent the Input value.

No attributes.

=== ASin ===

The A(rc)Sin node outputs the ArcSin of the Input value.

No attributes.

=== ACos ===

The A(rc)Cos node outputs the ArcCos of the Input value.

No attributes.

=== ATan ===

The A(rc)Tan node outputs the ArcTan of the Input value.

No attributes.

== External References ==

* {{Link|https://en.wikipedia.org/wiki/Low-frequency_oscillation}} * {{Link|https://en.wikipedia.org/wiki/Remainder}} * {{Link|https://en.wikipedia.org/wiki/Absolute_value}} * {{Link|https://en.wikipedia.org/wiki/E_(mathematical_constant)}} * {{Link|https://en.wikipedia.org/wiki/Natural_logarithm}} * {{Link|https://en.wikipedia.org/wiki/Binary_logarithm}} * {{Link|https://en.wikipedia.org/wiki/Common_logarithm}}

{{GameCategory|armaR|Modding|Official Tools}} {{GameCategory|armaR|Modding|Audio}}
9iqk8dcjynu7b3afgl60oqf1privbmh

# Arma Reforger:Audio: Music Manager

5050
47310
373535
373534
2025-05-20T14:34:14Z
Lou Montana
10739
Add links
373535
wikitext
text/x-wiki
The '''Music Manager''' system, as the name suggests, manages {{armaR}}'s music playback.

* The Music Manger itself is implemented from GameCode as a pleacable Entity ({{Link/Enfusion|armaR|MusicManager}}) and must be present in a world in order to work. * '''Prefabs''' of the Music Manager for different scenarios can be found in ''Prefabs → Sounds → Music'' (e.g {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Sounds/Music/MusicManager_Campaign.et}}). * Within the Music Manager, '''Music Classes''' can be added. These music classes inherit either from {{Link/Enfusion|armaR|LocationMusic}} or {{Link/Enfusion|armaR|ScriptedMusic}} and signal the Manager when they want to play music. * The Music Manager handles what music to play based on a '''priority system'''.

== Properties ==

{| class="wikitable" ! colspan="2" | Fade Out Settings |- | Fade out time interruption | Time (in ms) it takes for the current music to fully fade out when interrupted by an in-game event, e.g by a gunshot or explosion. |- | Fade out time force play | Time (in ms) it takes for the current music to fully fade out when the Music Manager instructs to forcefully play another music. |- ! colspan="2" | Music Settings |- | Time between music | Time (in s) of rest between finishing a track and starting the next one. Does not apply when forcefully playing music. |- | Min interruption volume | Minimum volume of an "interruption event" required to stop the currently playing track. |- | Music (Array) | Array of all Music classes. |}

== Music Classes ==

=== LocationMusic ===

{| class="wikitable" ! colspan="2" | Properties |- | Acp | {{hl|.acp}} file to play the sounds/music from. |- | Priority | Priority of the music. |- | Interruptible | Whether or not it can be interrupted by "interrupting" in-game events. |- | Time between repeats | Time (in s) of rest between finishing a track and starting the next one. |- | Category | See {{Link|#Categories}} |}

The primary use case for the {{hl|LocationMusic}} class is it to play music based on the player's location, using the SoundMap:

{| class="wikitable" ! SoundMap ! Sound Events |- | EForestProperty | SOUND_FOREST |- | ESeaProperty | SOUND_COASTLINE |- | ECityProperty | SOUND_VILLAGE |}

=== ScriptedMusic ===

{| class="wikitable" ! colspan="2" | Properties |- | Acp | {{hl|.acp}} file to play the sounds/music from. |- | Music Name | Name of the Sound Event |- | Priority | Priority of the music. |- | Interruptible | Whether or not it can be interrupted by "interrupting" in-game events. |- | Time between repeats | Time (in s) of rest between finishing a track and starting the next one. |- | Category | See {{Link|#Categories}} |}

As the name suggests, {{Link/Enfusion|armaR|ScriptedMusic}} is used in order to play specific tracks / Sound Events under specific conditions. These conditions are directly scripted in the respective child of {{hl|ScriptedMusic}} itself.

Example: {{Link/Enfusion|armaR|SCR_RespawnMusic}} contains the logic to play the respawn music upon entering the deployment screen.

The most straightforward way of accessing the {{Link/Enfusion|armaR|MusicManager}} within a {{hl|ScriptedMusic}} class looks as follows: <enforce> override void Init() { ChimeraWorld world = GetGame().GetWorld();

if (!world) return;

m_MusicManager = world.GetMusicManager();

if (!m_MusicManager) return; } </enforce>

== Categories ==

The Music Manager system features (hardcoded) Categories. Categories can be assigned for each Music class in its Category section. The Category system is used to mute all tracks belonging to a category, using the <enforce inline>MuteCategory()</enforce> and <enforce inline>ServerRequestMuteCategory()</enforce> methods.

List of available categories: {{Columns|2| * Ambient * Menu * Misc * USER1 * USER2 * USER3 }}

== Music Interruption ==

Music can be Interrupted by in-game events if: * the event's volume is equal to or exceeds the value defined in '''"Min interruption volume"''' and * the music's '''"Interruptible" flag''' is set to true.

These in-game events are hardcoded in GameCode and currently consist of '''weapon shots''' and '''explosions using ExplosionEffect'''. How long it takes for the music to fully fade out when interrupted is defined in the Music Manager's '''"Fade out time interruption"''' attribute.

== ACP Setup ==

Music generally does not require any specific {{hl|.acp}} setup, but any sound node must link into the Mixer's "Music" port.

{{GameCategory|armaR|Modding|Audio}}
aiph2497fv35ttfoo3aun0ka42lyiuf

# Arma Reforger:Audio: Signals

5050
47312
376609
376369
2025-10-30T18:45:08Z
Lou Montana
10739
Remove GInterior, GRoomSize, GIsThirdPersonCam, GCurrVehicleCoverage global signals
376609
wikitext
text/x-wiki
Signals are a way of interfacing between the GameWorld and Audio (and other areas). At the core, a signal simply is a value defining the attribute of something, e.g the current RPM of a vehicle or the time of day.

Signals can be stored on Entities by using the SignalsManagerComponent. These stored Signals will be automatically made available to the Entity's {{Link|Arma Reforger:Audio: Sound Components|SoundComponent}} so they can be used when generating sounds through their referenced {{hl|.acp}} files.

Additionally, there is a number of Global Signals, which are stored on the Gameworld's GameSignalsManager (if one exists), as well as global {{Link|Arma Reforger:Audio Editor: Audio Variables|Audio Variables}}. The "advanced" SoundComponents (SoundComponent + its children) will automatically access these Global Signals as well.

== Signal Setup ==

The Signal and Global Variables Simulation window allow audio designers and modders to easily modify signals that are used within an .acp or .sig file to 'simulate' their behaviour in game. Although it was predominantly designed for the {{Link|Arma Reforger:Audio Editor}}, it is also present in the {{Link|Arma Reforger:Procedural Animation Editor}}.

=== Extra Options ===

* Edit Min/Max: Toggles to edit the minimum and maximum values of the simulated signals * Copy all properties: Copies the minimum/maximum and value of all simulated signals * Paste all properties: Pastes the minimum/maximum and value of all simulated signals <!-- === Min/Max Mode ===

* In min/max mode, the user can adjust the minimum and maximum values of said simulated signal. -->

== Signals ==

{{Feature|informative|These lists are non-exhaustive.}}

=== GameCode ===

==== AimingComponent ==== {| class="wikitable" ! Name ! Value/Range ! Description |- | AimElevation | | |- | AimTurn | | |- | AimElevationTime | | |- | AimTurnTime | | |}

==== AmbientSoundsComponent ==== {| class="wikitable" ! Name ! Value/Range ! Description |- | AboveTerrain | | Height (m) above the terrain. |- | SunAngle | | |- | RiverL | | |- | RiverR | | |- | RiverRB | | |- | RiverLB | | |- | RiverSlope | | |- | LakeL | | |- | LakeR | | |- | LakeRB | | |- | LakeLB | | |- | {{GVI|armaR|1.6.0}} Grass | | |}

==== AnimalSoundComponent ==== {| class="wikitable" ! Name ! Value/Range ! Description |- | Surface | | Surface under the entity |}

==== BaseStaminaComponent ==== {| class="wikitable" ! Name ! Value/Range ! Description |- | Exhaustion | | |}

==== CharacterAimingComponent ==== {| class="wikitable" ! Name ! Value/Range ! Description |- | WeaponElevation | | |- | WeaponTurn | | |}

==== CharacterSoundComponent ==== {| class="wikitable" ! Name ! Value/Range ! Description |- | MovementSpeed | * 0 (idle) * 1 (walking) * 2 (running) * 3 (sprinting) | Movement type |- | Surface | | Surface under the character. {{Feature|informative|Updated only when bone containing "foot" string is defined in animation event. Not updated when character is swimming.}} |- | Stance | * 0 (Stand) * 1 (Crouch) * 2 (Prone) | |- | Speed | 0..5.5 | Value taken from physics for playerCharacter. <!-- -->For remote proxy, speed is calculated as {{hl|(posLast- pos).Length() / time}}. Speed is updated every 100 ms for improved accuracy and less oscillation.<!-- -->Speed is then clamped to a maximum of 5.5 |- | WaterDepth | 0..inf | Distance between ocean surface and terrain surface |- | WeaponStance | * 0 (Lowered) * 1 (Raised) * 2 (ADS) | Indicates the current stance that the character is holding the weapon. |- | RHItemSoundInfo | | Determines what item is in the right hand of the character. |- | BackItemSoundInfo | | Determines what item is on the character's back.<br>If there are two weapons on the back, the signal will return the weapon with higher SoundInt. |- | BackPackSoundInfo | | |- | JacketSoundInfo | | |- | VestSoundInfo | | |- | BootsSoundInfo | | Determines what item is on player feet. |- | UnderPlayerControl | bool (0 or 1) | True if the character is handled by the client player. False if handled by a remote other player or AI - sort of "IsLocalPlayer". |- | SightSoundInt | | Returns value set on {{Link/Enfusion|armaR|SightsComponent}}. |- | IsInPlayerVehicle | bool (0 or 1) | |- | Leaning | float -1..+1 | |- | BushContact | | |- | BushHeight | | |}

==== CharacterStaminaComponent ==== {| class="wikitable" ! Name ! Value/Range ! Description |- | BreathProgress | | |- | BreathMagnitude | | |- | BreathFrequency | | |}

==== CommunicationSoundComponent ==== {| class="wikitable" ! Name ! Value/Range ! Description |- | IsAI | bool (0 or 1) | Determines if the character is controlled by a player or by AI. |}

==== Global ==== {| class="wikitable" ! Name ! Value/Range ! Description |- | EnvironmentType | | * 0 - Meadow * 1 - Conifer (if Trees > 30) * 2 - Leafy (if Trees > 30) * 3 - Houses (if Buildings > 3) * 4 - Hills (if aboveSea > 100) |- | GAboveSea | | Distance from ocean level to camera |- | GAboveFreshWater | | 2 if above water level

(-inf, 0) if submerged

Calculated to the camera position |- | GVehicleInterior | | <0,1> "How much inside" the camera is within a vehicle. |- ! colspan="3" | Removed in {{GVI|armaR|1.6.0}}<br>Replaced with Global Audio Variables |- style="font-style: italic" | GInterior | <0,1> | 1 - when player is inside |- style="font-style: italic" | GRoomSize | | |- style="font-style: italic" | GIsThirdPersonCam | | <0,1> 1 if in third person camera |- style="font-style: italic" | GCurrVehicleCoverage | | <0,n> Coverage value of the current vehicle of the player character. |}

==== HitSoundEffect ==== {| class="wikitable" ! Name ! Value/Range ! Description |- | Surface | | Surface that the bullet hit |- | ImpactSpeed | 0..inf | bullet velocity on impact in m/s |- | ImpactType | * 0 (None) * 1 (Deflection) * 2 (Penetration) * 3 (LastImpact) * 4 (OutOfBounds) | Bullet impact type |}

==== SoundComponent ==== {| class="wikitable" ! Name ! Value/Range ! Description |- | AnimSelector | Integer | Selector signal based on userInt of animation event |- | Distance | &ge; 0 | Distance in meters between emittor & listener |- | Houses | | |- | Forest | | |- | Meadows | | |- | Sea | | |- | AboveSea | | |- | Interior | | 1 if emitter inside the building (requires SoundWorld on map & buildings with properly set up BSP. |- | RoomSize | | |- | SurfaceWetness | | |}

==== VehicleSoundComponent ==== {| class="wikitable" ! Name ! Value/Range ! Description |- | Speed | Integer | |- | Surface | | |- | WaterDepth | | |- | Damper"N" | Integer | N - wheel number |- | Suspension"N" | Integer | N - wheel number |- | Latslip"N" | Integer | N - wheel number |- | UnderPlayerControl | bool (0 or 1) | '''True''' if the character is handled by the client player. '''False''' if handled by a remote other player or AI. |- | Brake | | |- | CollisionDV | | |- | ImpactSurface | | |- | HornState | | |- | Damage | | In Script. Overall Damage |- | EngineDamage | | In Script. Engine hit zone damage |- | AimTurnTimeTurret | | |- | AimElevationTimeTurret | | |- | AimTurnTurret | | |- | AimElevationTurret | | |}

==== VoNComponent ==== {| class="wikitable" ! Name ! Value/Range ! Description |- | Interior | | 1 if emitter inside building |- | UnderPlayerControl | bool (0 or 1) | '''True''' if the character is handled by the client player. '''False''' if handled by a remote other player or AI. |- | IsInPlayerVehicle | | |- | GInterior | | |- | GIsThirdPersonCam | | |- | GCurrVehicleCoverage | | |}

==== WeaponSoundComponent ==== {| class="wikitable" ! Name ! Value/Range ! Description |- | Suppressor | bool (0 or 1) | Suppressor attached |- | TimeSinceAutoSeqStart | &ge; 0 | time since the first shot of an automatic fire sequence (-1 if weapon does not have auto support) |- | TimeSinceAutoSeqEnd | &ge; 0 | time since the last shot of an automatic fire sequence (-1 if weapon does not have auto support) |- | IsADS | bool (0 or 1) | When Aiming Down Sights. |- | UnderPlayerControl | bool (0 or 1) | True if weapon is handeled by player character. False, if handeled by remote, AI or no character |- | IsInPlayerVehicle | | |- | SightSoundInt | | Returns value set on SightsComponent. |- | Surface | | Surface for deployed weapon |}

=== Script ===

==== SCR_AITalk ==== {| class="wikitable" ! Name ! Value/Range ! Description |- | Vehicle | | |- | Character | | |- | TargetDistance | | |- | DirectionAngle | | |- | SoldierCalled | | |- | Role | | |- | Flank | | |- | Faction | | |- | Seed | | |}

==== SCR_BellSoundComponent ==== {| class="wikitable" ! Name ! Value/Range ! Description |- | TimeOfDay | | |}

==== SCR_BuildingSoundComponent ==== {| class="wikitable" ! Name ! Value/Range ! Description |- | WindSpeed | | |}

==== SCR_ChimeraAIAgent ==== {| class="wikitable" ! Name ! Value/Range ! Description |- | Seed | | |- | SoldierCaller | | |}

==== SCR_ClockHandComponent ==== {| class="wikitable" ! Name ! Value/Range ! Description |- | ClockHand | | |}

==== SCR_CompassComponent ==== {| class="wikitable" ! Name ! Value/Range ! Description |- | Needle | | |- | Shake | | |- | InHand | | |- | InMap | | |- | Close | | |}

==== SCR_EngineHitZone ==== {| class="wikitable" ! Name ! Value/Range ! Description |- | EngineDamage | | |}

==== SCR_FiringRangeController ==== {| class="wikitable" ! Name ! Value/Range ! Description |- | DistanceOne | | |- | DistanceTen | | |- | DistanceHundred | | |- | RoundOne | | |- | RoundTen | | |- | RoundHundred | | |- | RoundThousand | | |}

==== SCR_FiringRangeTarget ==== {| class="wikitable" ! Name ! Value/Range ! Description |- | target_hit | | |}

==== SCR_FlammableHitZone ==== {| class="wikitable" ! Name ! Value/Range ! Description |- | Damage | | |}

==== SCR_FuelNode ==== {| class="wikitable" ! Name ! Value/Range ! Description |- | fuel + ''tankID'' | | |- | fuelTank | | |}

==== SCR_GameModeCampaignMP ==== {| class="wikitable" ! Name ! Value/Range ! Description |- | Base | | |- | CompanyCaller | | |- | CompanyCalled | | |- | PlatoonCaller | | |- | PlatoonCalled | | |- | SquadCaller | | |- | SquadCalled | | |- | Seed | | |- | TransmissionQuality | | |}

==== SCR_GearboxHitZone ==== {| class="wikitable" ! Name ! Value/Range ! Description |- | GearboxDamage | | |}

==== SCR_HelicopterSoundComponent ==== {| class="wikitable" ! Name ! Value/Range ! Description |- | AirSpeed | | |- | AltitudeAGL | | |- | climbRate | | |- | CollisionDM | | |- | DamageState | | |- | EngineAngle | | |- | Engine_01DamageState | | |- | Engine_02DamageState | | |- | EngineOn | | |- | EngineRPM | | |- | FireState | | |- | ImpactSurface | | |- | MainRotorRPM | | |- | MainRotorRPMScaled | | |- | PitchAngle | | |- | RollAngle | | |- | RotorMainDamageState | | |- | RotorTailDamageState | | |- | Speed | | |- | SpeedToCamera | | |- | suspension1 | | |- | suspension2 | | |- | suspension3 | | |- | TailRotorRPMScaled | | |- | TurnRate | | |}

==== SCR_RadioComponent ==== {| class="wikitable" ! Name ! Value/Range ! Description |- | Power | | |- | Channel_K | | |- | Channel_M | | |}

==== SCR_SetTargetsModeUserAction ==== {| class="wikitable" ! Name ! Value/Range ! Description |- | StartRound | | |}

==== SCR_VehicleEngineOnCondition ==== {| class="wikitable" ! Name ! Value/Range ! Description |- | engineOn | | |}

==== SCR_VehicleSoundComponent ==== {| class="wikitable" ! Name ! Value/Range ! Description |- | RainIntensity | | |}

==== SCR_WristwatchComponent ==== {| class="wikitable" ! Name ! Value/Range ! Description |- | Hour | | |- | Minute | | |- | Second | | |- | Day | | |}

{{GameCategory|armaR|Modding|Audio}}
jv3byl6g2pbo1n4lh6y83qluiw1q8uj

# Arma Reforger:Audio: Technical Fundamentals

5050
47311
373596
373547
2025-05-24T08:14:13Z
LAxemann
11205
Changed plural to singular reference of pictures (as only one picture was carried over from internal docu)
373596
wikitext
text/x-wiki
This page aims to give a high-level understanding of how the audio pipeline within (and from) {{armaR}} works.

== The Audio Pipeline == [[File:armaR audio technical fundamentals.png|thumb|A simple, but factual relationship between the different elements.]]

Depicted is a high-level overview of the game's audio pipeline. Below is a short explanation of its inner workings. In order to understand it better, there are more elaborate explanations for each element further below, with some leading to dedicated pages.

=== Elements Rundown ===

* The GameWorld is filled with {{Link|#Game Entities}}. * Entities that have a {{Link|#SoundComponent}} are able to play sounds. * These sounds are defined in {{Link|#Acp Files}} ''via'' {{Link|#Sound Nodes}}. * {{Link|#Signals}} are used to interface between the GameWorld and the Audio. They are stored in and accessible from an Entity's {{Link/Enfusion|armaR|SignalsManagerComponent}} as well as the {{Link/Enfusion|armaR|GameSignalsManager}}. * In a similar way as Global Signals, {{Link|#Variables}} can be used to pass values from the GameWorld to the Audio System and vice versa. * The '''GameCode or Scripts''' can instruct an Entity's {{Link/Enfusion|armaR|SoundComponent}} to play a Sound with a given {{Link|#Sound Events|Sound Event}} Name. ** The {{hl|SoundComponent}} will then search through its assigned acp files and look for {{Link|#Sound Nodes}} whose names match the given Sound Event name. If a matching Sound Node was found, it will be processed based on its audio signal chain, taking into account available {{Link|#Signals}}. ** The sound will be sent to the a submix input of the {{Link|#Mixer|Mixer (FinalMix)}} where the submixes are further processed. ** Enfusion's '''Audio System''' will handle the main processing of the audio generation. ** The generated audio will be forwarded to the system'S audio API, e.g {{Link|https://learn.microsoft.com/en-us/windows/win32/coreaudio/wasapi|WASAPI}} (a Windows audio API), in order to actually play back the sound on the user's system.

=== Game Entities ===

The Enfusion Engine uses a modular entity system. An Entity in and on itself is just a set of functionalities defined via GameCode or even a completely "empty shell". It is the modules inside, called "Components", that determine the majority of its characteristics. Therefore, Entities in our GameWorld can be anything - from concrete, complex objects like player characters, weapons and buildings, to abstract systems like an entity that manages the rules of a gamemode.

In order to play a sound, an Entity needs to have a variation of the {{Link|#SoundComponents|SoundComponent}}.

=== SoundComponents ===

{{Feature|informative|See {{Link|Arma Reforger:Audio: Sound Components}}.}}

=== Acp Project Files ===

Acp project files

'''Acp''' (AudioComponent) '''files''' determine how sounds behave ingame. Using the {{Link|Arma Reforger:Audio Editor}}, {{hl|.acp}} files allow the creation of complex audio processing chains that result in the final sound audible in-game.

Furthermore, {{hl|.acp}} files are a mandatory part of the game's audio pipeline, as they contain the Sound names referenced by the {{Link|#SoundComponents|SoundComponent}} when it is instructed to play a sound.

=== Sound Nodes ===

{{Feature|informative|See {{Link|Arma Reforger:Audio Editor: Nodes#Sound}}.}}

=== Sound Events ===

{{Feature|informative|See {{Link|Arma Reforger:Audio: Sound Events}}.}}

=== Signals ===

{{Feature|informative|See {{Link|Arma Reforger:Audio: Signals}}.}}

=== Sound Events ===

{{Feature|informative|See {{Link|Arma Reforger:Audio: Sound Events}}.}}

=== Variables ===

{{Feature|informative|See {{Link|Arma Reforger:Audio Editor: Variables}}.}}

=== Mixer ===

{{Feature|informative|See {{Link|Arma Reforger:Audio Editor: Nodes#Mixer}}.}}

== FAQ ==

; Do Entities need a SignalsManagerComponent to use Signals? : Yes and no. Some variations of the {{Link|#SoundComponents|SoundComponent}} set some {{Link|#Signals}} automatically, like the distance of the Entity to the current listener. : Using the <enforce inline>AddOrFindSignal()</enforce> method, a Signal can also be set when playing a sound, but it will not be stored due to the lack of a {{Link/Enfusion|armaR|SignalsManagerComponent}}.

; How are Signals set on an Entity's SignalsManagerComponent? : Some {{Link|#Signals}} are set via GameCode and cannot be altered, such as the distance of the Entity to the current listener. : Signals can also be set via scripting by using the <enforce inline>AddOrFindSignal()</enforce> and <enforce inline>AddOrFindMPSignal()</enforce> methods.

== See Also ==

* {{Link|Arma Reforger:Audio Editor|Audio Editor Documentation}} * {{Link|Arma Reforger:Audio Script Documentation}} * {{Link|Arma Reforger:Audio: SoundComponents}} * {{Link|https://learn.microsoft.com/en-us/windows/win32/coreaudio/wasapi|WASAPI (Windows Audio Session API) documentation}}

{{GameCategory|armaR|Modding|Audio}}
jfbmohfv8lxbx81ur0jyp9pwt5bysa1

# Arma Reforger:Audio: Building Doors

5050
47183
370974
370902
2025-02-26T12:32:00Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370974
wikitext
text/x-wiki
Door sounds do '''not''' use {{Link/Enfusion|armaR|SoundComponent}} and are played directly via the {{Link/Enfusion|armaR|AudioSystem}}.

== Prefab Configuration ==

* The {{hl|.acp}} reference is configured on {{Link/Enfusion|armaR|DoorComponent}}'s '''SoundFileName'''. * Sounds positions are configured on {{Link/Enfusion|armaR|DoorComponent}}'s '''SoundPoints'''.

== Events ==

* {{hl|SOUND_OPEN_START}} - triggered only when the door is fully closed * {{hl|SOUND_OPEN_FINISH}} * {{hl|SOUND_CLOSE_START}} - triggered only when the door is fully open * {{hl|SOUND_CLOSE_FINISH}} * {{hl|SOUND_MOVEMENT}} - triggered when the door starts to move, stopped when the door stops moving

{{GameCategory|armaR|Modding|Audio|Guidelines}}
k54vxp918uwudj54jbehzlu7g4xgvxx

# Arma Reforger:Audio: Collision

5050
47168
371001
370767
2025-02-26T12:32:05Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
371001
wikitext
text/x-wiki
{{TOC|side}} == Vegetation ==

Signals: * {{hl|BushContact}}: connected to SoundType parameter on Tree entity * {{hl|BushHeight}}: height of the Bush object. Relies on boundingbox and can deliver unexpected results.

{| class="wikitable" ! SoundTypes ! Signal Value |- | None | 0 |- | Bush | 1 |- | Leafy | 2 |- | Conifer | 3 |- | Stump | 4 |- | Withered | 5 |- | LeafyDomestic | 6 |- | Bush_Leafy | 7 |- | Bush_Reed | 8 |- | Bush_Small | 9 |}

== Special ==

Signals: * {{hl|SpecialContact}}: type of entity the character collides with * {{hl|SpecialContactEntityHeight}}: height of the colliding object; relies on boundingbox and can deliver unexpected results, but can be overridden on the Prefab.

{| class="wikitable" ! SoundTypes ! Signal Value |- | None | 0 |- | Barbed Wire | 1 |}

{{GameCategory|armaR|Modding|Audio|Guidelines}}
bwzdvdbhzl6jmk3ep86xocsuksaarkr

# Arma Reforger:Audio: Multiphase Destruction

5050
47171
376650
370994
2025-11-03T10:15:45Z
Lou Montana
10739
Fix link
376650
wikitext
text/x-wiki
{{TOC|side}} The '''M'''ulti'''p'''hase '''D'''estruction (MPD) system handles environmental destruction (e.g., breaking signs, crumbling walls, etc.). Each MPD entity transitions through "damage phases", altering its model, spawning debris and particle effects, or emitting sounds. * For efficiency, sounds are managed by the {{Link|Arma Reforger:Audio: SCR_SoundManagerModule}} system, not individual entities. Entities reference enums in {{Link/Enfusion|armaR|SCR_DestructionMultiPhaseComponent}} for sound definitions. * Sounds are triggered: *# When an entity's damage phase changes (using {{Link/Enfusion|armaR|SCR_EMaterialSoundTypeBreak}}). *# When spawned debris collides with the environment or other entities (using {{Link/Enfusion|armaR|SCR_EMaterialSoundTypeDebris}}). * When triggering a sound: *# The enum string (e.g., "METAL_HEAVY") combines with "SOUND_MPD_" to form the sound name (e.g., "SOUND_MPD_METAL_HEAVY"). *# The system plays the sound from the {{hl|.acp}} file linked to the MPDestructionManager.

{{Feature|warning|In order for Multiphase Destruction to work, a Multiphase Destruction Manager must be present within the world.}}

== Design ==

* All sound events are defined in one {{hl|.acp}}: {{Link|enfusion://ResourceManager/~ArmaReforger:Sounds/Destruction/Multiphase/Destruction_Multiphase.acp|Sounds\Destruction\Multiphase\Destruction_Multiphase.acp}} * A "manager" needs to be present in the gameworld: {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/MP/MPDestructionManager.et|Prefabs\MP\MPDestructionManager.et}} * Available sound types are defined via enums ({{Link/Enfusion|armaR|SCR_EMaterialSoundTypeDebris}} and {{Link/Enfusion|armaR|SCR_EMaterialSoundTypeBreak}})

== MPD Enum Overview ==

Sounds use enum values. Pick one of the following two to mod: * {{Link/Enfusion|armaR|SCR_EMaterialSoundTypeBreak}} if the sound is supposed to play when the entity changes its damage phase.<br>In this case, the enum must start with "BREAK_", e.g. "BREAK_GLASSBOTTLE"; * {{Link/Enfusion|armaR|SCR_EMaterialSoundTypeDebris}} if the sound is supposed to play when debris collides with the environment

Add the desired name to the correct enum through modding - make sure to choose a descriptive one. Example: <enforce> modded enum SCR_EMaterialSoundTypeBreak { BREAK_GLASSBOTTLE, } </enforce>

{|! class="wikitable valign-top" ! Break Sounds ! Debris Sounds |- | {{Link/Enfusion|armaR|SCR_EMaterialSoundTypeBreak}} | {{Link/Enfusion|armaR|SCR_EMaterialSoundTypeDebris}} |- | Defined via the "Material Sound Type" entry in the "Unsorted" category . These sounds will play once when the entity breaks OR changes its damage phase (PhasesToDestroyed Signal).

Example: A wooden fence breaking and playing a snapping/splintering sound. | Defined in the "Small Debris" classes of the destructible entity. This sound will trigger when the spawned debris collides with something else and a certain impact threshold is exceeded.

Example: Broken off wooden fence plank falls over and impacts with the ground. |- | {| class="wikitable" ! Enum Value ! Description |- | NONE | No sound, default |- | BREAK_GLASS | Small glass objects, e.g. a glass or bottle |- | BREAK_GLASS_PANE | Larger glass objects, e.g. car or building windows |- | BREAK_GROUNDRADAR | Dedicated sound for breaking ground radars |- | BREAK_MATRESS | Soft thump, used for soft, cloth-like sounds |- | BREAK_METAL | General metal break sound |- | BREAK_METAL_GENERATOR | When a generator breaks down |- | BREAK_METAL_NETFENCE | Metal-ish sound with elements of netfence rattling |- | BREAK_METAL_POLE | Resonant pole break sound |- | BREAK_PIANO | Dedicated sound for breaking pianos |- | BREAK_PLASTIC | Sharp smaller-scale plastic cracking |- | BREAK_ROCK | Break sound for larger rock/stone/asphalt objects, e.g. a massive wall |- | BREAK_SANDBAG | Soft and plastic-y |- | BREAK_TENT | Dedicated sound for tents |- | BREAK_WATERHYDRANT | Dedicated sound for waterhydrants |- | BREAK_WOOD_SOLID | Universal wooden break sound |} | {| class="wikitable" ! Enum Name ! Description |- | NONE | No sound, default |- | BELL_SMALL | Dedicated sound for small bells |- | GLASS | Small glass objects, e.g. bottles |- | MATRESS | Dedicated sound for matresses and pillows |- | METAL_HEAVY | Heavy metal impacts |- | METAL_LIGHT | Light, crisp metal impacts |- | METAL_NETFENCE | Metal-y impacts with netfence rattling |- | METAL_POLE | Resonant, medium-sized metal |- | PLASTIC_HOLLOW | E.g. a tube or food container |- | PLASTIC_SOLID | E.g. an old telephone |- | ROCK | Concrete chunks |- | ROCK_SMALL | More brick-like, slightly hollow |- | SANDBAG | Soft and plastic-y |- | WOOD_PLANK_SMALL | For small, wooden objects, e.g. fence boards |- | WOOD_PLANK_LARG | For large(r) wooden objects, such as smaller tree trunks |}

|}

== Signals ==

Not all signals are available for each type of sound. {| class="wikitable align-center-col-3 align-center-col-4" ! Signal Name ! Description ! Available for Break Sounds ! Available for Impact Sounds |- | PhasesToDestroyed | An integer indicating how damaged the entity is.

* &nbsp;&nbsp;0 = Total destruction * &nbsp;&nbsp;1 = Broken * >&nbsp;1 = Anything else | {{Icon|checked}} | {{Icon|unchecked}} |- | EntitySize | The entity's mass, usually used in order to "scale" sounds. | {{Icon|checked}} | {{Icon|checked}} |- | CollisionDV | A value reflecting the change in speed of an entity upon contact (how fast was it before, how much was it slowed down?) | {{Icon|unchecked}} | {{Icon|checked}} |}

== Debugging ==

If any issues arise, the first step should always be to make sure an MPDestructionManager entity exists in the world. Check if the {{hl|SCR_DestructionMultiPhaseComponent}} is actually enabled (if it is an Entity with integrated MPD functionality, make sure "Enabled" is checked in the "Unsorted" tab). Entities with integrated MPD functionality will always use the values stored in their Prefabs - meaning a per-instance change will not work. A Prefab change also requires a reload of the current world.

=== Diag Menu ===

If a {{hl|DestructionMPDestructionManager.et}} is present in the world, a {{Link|Arma Reforger:Diag Menu}} entry can be found: Diag Menu \ Sounds \ Show MPD Impulse Values

Upon colliding, the debris entity will then display the impulse data in the format {{hl|<impulse value>/<impulse threshold>/<mass>}}.

=== Sound Definition Check ===

In the main Workbench Window ('''not''' World Editor), the "Multiphase Destruction Soundless Prefab Search" tool can be accessed via Plugins → Prefabs. The tool will go through all prefabs and list in the debug console log those which do not have a "Break" or "Impact" sound defined.

{{GameCategory|armaR|Modding|Audio|Guidelines}}
n6s186qomx0e55dy31fonmonlmtfg2x

# Arma Reforger:Audio: Occlusion

5050
47161
370979
370765
2025-02-26T12:32:01Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370979
wikitext
text/x-wiki
{{TOC|side}} == Signals ==

{| class="wikitable" ! Signal Name ! SoundComponent ! CharacterSoundComponent ! WeaponSoundComponent ! VehicleSoundComponent ! VoNComponent ! CommunicationSoundComponent<br>Takes values from {{hl|SignalsManagerComponent}} and stores into a snapshot. ! SoundManager |- | Interior | 0..1 | 0..1 | 0..1 | 0..1 | 0..1 | 0..1 | 0..1 |- | UnderPlayerControl | {{n/a}} | True if the character is the player character | True if the weapon is handled by the player character | True if the player character is in the vehicle | True if the character is the player character | True if the character is the player character | {{n/a}} |- | IsInPlayerVehicle | {{n/a}} | True if the character is in the same vehicle as the player character | True if the weapon is a child of the vehicle, the player character is in. | {{n/a}} | True if the character is in the same vehicle as the player character | True if the character is in the same vehicle as the player character | {{n/a}} |- | RoomSize | Returns volume in m<sup>3</sup> of room the entity is currently in | Returns volume in m<sup>3</sup> of room the entity is currently in | Returns volume in m<sup>3</sup> of room the entity is currently in | Returns volume in m<sup>3</sup> of room the entity is currently in | Returns volume in m<sup>3</sup> of room the entity is currently in | Returns volume in m<sup>3</sup> of room the entity is currently in | {{n/a}} |}

== Buildings ==

Building occlusion describes sound attenuation based on whether or not a sound emitter and the listener are in the same room (or a room at all). The system goes hand-in-hand with Light Portals and the room areas created by the system.

=== Signals and Variables ===

There are four main signals and {{Link|Arma Reforger:Audio Editor: Audio Variables|variables}} that handle building occlusion:

* {{hl|GInterior}}: float between 0 and 1 (1 if the current camera position is inside a building, 0 if outside, may gradually interpolate from 0 to 1 when entering a portal). * {{hl|Interior}}: per-entity signal that returns 1 if the entity is inside a building. * {{hl|GRoomSize}}: returns the size of the room the listener is located in, or 0 if it's not in any room. * {{hl|RoomSize}}: per-entity signal that returns the size of the room the entity is located in, or 0 if it's not in any room.

The listener and emitter are considered to be "in the same room" if * {{hl|GInterior}} OR the emitter's Interior signal are 1 '''and''' * {{hl|GRoomSize}} and the emitter's {{hl|RoomSize}} signal are identical

=== Examples ===

{| class="valign-top" | '''Listener inside, emitter outside (or vice versa)'''<br>If the listener is inside ({{hl|GInterior}} = 1) and the emitter is outside ({{hl|Interior}} = 0), or vice versa, full attenuation is applied. | [[File:armaR-audio building occlusion example 1.png]] |- | '''Listener inside, emitter inside, matching roomSizes'''<br>If both listener and emitter are inside ({{hl|GInterior}} = 1, {{hl|Interior}} = 1) and GRoomSize and the emitter's RoomSize signal are identical, then the emitter is considered to be in the same room as the listener. | [[File:armaR-audio building occlusion example 2.png]] |- | '''Listener inside, emitter inside, but no matching roomSizes''' | [[File:armaR-audio building occlusion example 3.png]] |- | '''Portal radius'''<br>Portals have a certain radius around them at which the {{hl|Interior}} and {{hl|GInterior}} values gradually lerp from 0 to 1. If an entity stands in the middle of a doorway, for example, the {{hl|Interior}} signal will return 0.5 ({{hl|GInterior}} for the listener respectively). With the current occlusion setup, this is only used for players/listeners. | [[File:armaR-audio building occlusion example 4.png]] |- | '''Edge-case: Different buildings, same RoomSizes'''<br>If the emitter and listener are in two different buildings and the rooms they are in happen to have identical room sizes, no attenuation will be applied. | [[File:armaR-audio building occlusion example edge case.png|742px]] |}

== Vehicles ==

[[File:armaR-audio vehicle occlusion.png|thumb|500px| '''{{Color|darkred|Red:}}''' Base Coverage for the (driver) compartment, defined in {{hl|CompartmentManagerComponent}}.<br> '''{{Color|green|Green:}}''' Additional coverage for the turret slot, and the compartments that are influenced by the slot. Defined in the {{hl|SlotManagerComponent}}. ]] Occlusion inside vehicle cabins uses the Coverage System and is defined by the {{hl|GCurrVehicleCoverage}} {{Link|Arma Reforger:Audio Editor: Audio Variables|audio variable}} as an arbitrary float value. <!-- For the {{hl|.acp}} setup, see Audio: Occlusion setup guidelines. -->

* Each compartment of a vehicle can be given a "base coverage" value, defined on the {{hl|CompartmentManagerComponent}}. * Inside the SlotManagerComponent, using the "Slot Mappers" class, each Slot can be assigned a coverage value that will be added to the overall coverage as long as the slot is not destroyed (e.g windows can break, resulting in a lowering of the coverage value). * Therefore, the overall coverage for each vehicle department is the sum of the Base Coverage defined in the {{hl|CompartmentManagerComponent}} and all additional slot coverage values defined in the {{hl|SlotManagerComponent}}.

[[File:armaR-audio vehicle occlusion gcurrvehiclecoverage variable mix.png]]

{{GameCategory|armaR|Modding|Audio|Guidelines}}
e92l3b37p1sjxhbj51ngg3auxyzpvki

# Arma Reforger:Audio: Radio Broadcast Manager

5050
47181
371025
370864
2025-02-26T12:32:10Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
371025
wikitext
text/x-wiki
{{TOC|side}} The Radio Broadcast system is used to play DJ lines and music from radios diegetically within the gameworld and sync their states across all clients, ensuring that all players hear the same audio. * The Radio Broadcast Manager itself is implemented from GameCode as a placeable Entity and must be present in the world in order to work. * The main Prefab of the Radio Broadcast Manager can be found in Prefabs/Systems/Radio: {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Systems/Radio/RadioBroadcastManager.et}} * Functionality-wise, the Radio Broadcast Manager creates a fixed playlist and syncs its state across clients whenever they need to access it.

== Properties ==

{| class="wikitable" ! colspan="2" | Manager Settings |- | Broadcast Acp | Acp the DJ lines and music are stored in. |- | Regenerate Times | Checking it will perform an update of the saved playback durations for files within the .acp specified in Broadcast Acp |- | Start Music | If checked, the radio playback will start with music. Otherwise it will start with the DJ |- | Music Bank Name | Name of the bank that stores the music within the .acp specified in Broadcast Acp |- | Music Times | Automatically generated and cannot be edited. Stores the playback durations for all music. Can be updated by checking the "Regenerate Times" parameter |- | DJ Bank Name | Name of the bank that stores the DJ lines within the .acp specified in Broadcast Acp |- | DJ Times | Automatically generated and cannot be edited. Stores the playback durations for all DJ lines. Can be updated by checking the "Regenerate Times" parameter |}

== Setup ==

=== Radio Broadcast Manager ===

Reforger uses only one Radio Broadast Manager Prefab, but new ones can be created from scratch or by overriding the present one.

The manager entity setup looks as follows:

# Add the desired .acp to the "Broadcast Acp" attribute # Enter the exact name of the bank that stores the music within the {{hl|.acp}} in the "Music Bank Name" attribute # Enter the exact name of the bank that stores the DJ lines within the {{hl|.acp}} in the "DJ Bank Name" attribute # Check the "Regenerate Times" attribute in order to automatically calculate and store the lengths of all files within the Music and DJ banks.{{Feature|important|Whenever files are added or removed to the banks, the times need to be regenerated.}} # The Radio Broadcast Manager needs to be placed into the gameworld in order to work.

=== Signals ===

The Radio Broadcast Manager system will set the following Signals: {| class="wikitable" ! Signal Name ! Description |- | Offset | Used to offset the currently playing file/bank in order to sync the playback time across all clients. |- | MusicTrackID | Returns the ID (index as an integer) of the currently playing track. |- | DJTrackID | Returns the ID (index as an integer) of the currently playing DJ lines. |- | BroadcastType | Returns 0 or 1 (bool).<br>0 = Play DJ lines<br>1 = Play music |}

A {{hl|.sig}} file with all signals already exists in Sounds/RadioBroadcast: {{Link|enfusion://ResourceManager/~ArmaReforger:Sounds/RadioBroadcast/RadioBroadcast.sig}}

=== ACP Banks ===

On the most basic level, a RadioBroadcast {{hl|.acp}} should contain at least '''a bank for music''' and '''a bank for DJ lines'''. As mentioned above, the name of these two banks must match the names for music and DJ banks specified in the Radio Broadcast Manager. Furthermore:

* The Offset Signal must be connected to the "Offset" input ports of both banks in order to properly sync the playback position * The MusicTrackID Signal must be connected to the "Index" port of the music bank * The DJTrackID Signal must be connected to the "Index" port of the DJ bank * Both banks must have their "Selection" attribute set to "CustomSignalIndex" * A Selector node steered by the BroadCastType Signal must be used in order to correctly switch between music and DJ lines

=== Radio ===

In order for a radio (or any other entity) to play music and DJ lines to work, it needs:

* An {{Link/Enfusion|armaR|RplComponent}} (replication) * A {{Link/Enfusion|armaR|SignalsManagerComponent}} (storing Signals) * An {{Link/Enfusion|armaR|ActionsManagerComponent}} (creating the UserAction for turning on the radio) * A {{Link/Enfusion|armaR|RadioBroadcastComponent}} (linking the UserAction to the Radio Broadcast functionality and interfacing between Manager and {{hl|RadioBroadcastSoundComponent}}) * A {{Link/Enfusion|armaR|RadioBroadcastSoundComponent}}

==== RadioBroadcastComponent ==== On the {{hl|RadioBroadcastComponent}}, the Action created in the ActionsManagerComponent must be selected as a class in "Turn On Action" &rarr; "Parent Context List"

==== RadioBroadcastSoundComponent ==== On the {{hl|RadioBroadcastSoundComponent}}, the same {{hl|.acp}} file must be defined as in the actual {{Link|#Radio Broadcast Manager}}.

== Sound Events ==

The Sound Events are hardcoded in GameCode and can be found at {{Link|Arma Reforger:Audio: Sound Events#RadioBroadcastSoundComponent}}.

{{GameCategory|armaR|Modding|Audio|Guidelines}}
anubqdgz4vdydk2vfghiwpvzbbfjqbt

# Arma Reforger:Audio: SCR SoundManagerModule

5050
47170
376658
376648
2025-11-03T13:05:38Z
Lou Montana
10739
Some wiki formatting
376658
wikitext
text/x-wiki
{{TOC|side}} {{Link/Enfusion|armaR|SCR_SoundManagerModule}} is a module that plays simple one-shot sounds without the need for a {{Link/Enfusion|armaR|SoundComponent}} to exist on a given entity. * {{hl|SCR_SoundManagerModule}} is a core entity present in every world. * If functions in {{hl|SCR_SoundManagerModule}} are enough for a given sound, prioritise it before adding a {{Link/Enfusion|armaR|SoundComponent}} on the entity. * If the entity already has {{Link/Enfusion|armaR|SoundComponent}} because of some other sound, do not use {{hl|SCR_SoundManagerModule}}. * Signals for a given sound can be set only before the sound playback and cannot be updated during the sound playback. {{Feature|important| * {{hl|SCR_SoundManagerModule}} is '''not''' present on headless applications (e.g dedicated server). * Do '''not''' use {{hl|SCR_SoundManagerModule}} for UI sounds. * Do '''not''' use {{hl|SCR_SoundManagerModule}} for managing looped sounds. Looped sounds always need {{hl|SoundComponent}} to work properly in multiplayer. }}

{{Feature|informative|Before {{GVI|armaR|1.6.0}}, {{hl|SCR_SoundManagerModule}} was named {{hl|SCR_SoundManagerEntity}}.}}

== Signals ==

* By default, the following Variables are used: ** {{hl|GCurrVehicleCoverage}} ** {{hl|GIsThirdPersonCam}} ** {{hl|GInterior}} * the {{hl|Distance}} signal can be enabled using the flags in {{Link/Enfusion|armaR|SCR_AudioSourceConfiguration}} * any additional feature-specific signals can be added using the {{Link/Enfusion|armaR|SCR_AudioSource}} API if needed.

{{ArgTitle|2|SCR_AudioSourceDefinition|{{GVI|armaR|1.3.0}}}}

* Class used for setting sound parameters * This class is used in {{Link/Enfusion|armaR|SCR_SoundDataComponent}}, or can be used in any feature in script if needed. ** Sound Project (resource) - acp that contains m_sSoundEventName ** Sound Event Name (string) - Sound event name ** Static (flag) - If false, sound will follow the entity's position

== SCR_SoundDataComponent ==

{{Link/Enfusion|armaR|SCR_SoundDataComponent}} is the best way to configure multiple sounds

It contains an {{hl|SCR_AudioSourceDefinition}} array for sounds configuration and {{hl|SCR_SoundManagerModule}} contains methods that can work with this component directly.

== Usage ==

=== SCR_SoundManagerModule Scripting ===

Sound is defined using {{hl|SCR_AudioSourceConfiguration}}. You need it to play the sound. Two methods: * use {{Link/Enfusion|armaR|SCR_SoundDataComponent}}, which contains the {{Link/Enfusion|armaR|SCR_AudioSourceConfiguration}} array and is meant to be used when multiple scripts need to play sound on a given entity. * define {{Link/Enfusion|armaR|SCR_AudioSourceConfiguration}} directly in a class. Useful when better control over {{Link/Enfusion|armaR|SCR_AudioSourceConfiguration}} is needed or when there is only a couple of events to be played on the entity

=== SCR_SoundDataComponent Workflow ===

Store the string event name in script, then two methods: # create and play sound using <enforce inline>CreateAndPlayAudioSource(IEntity owner, string eventName)</enforce> # alternatively create {{Link/Enfusion|armaR|SCR_AudioSource}} using <enforce inline>CreateAudioSource(IEntity owner, string eventName)</enforce> - checks if the sound is in the audible range and play {{Link/Enfusion|armaR|SCR_AudioSource}} using <enforce inline>PlayAudioSource(SCR_AudioSource audioSource)</enforce> - sets occlusion signals, distance signal, triggers the sound, and adds {{hl|SCR_AudioSource}} to the pool.

=== SCR_AudioSourceConfiguration Workflow ===

Validate a {{hl|SCR_AudioSourceConfiguration}} instance, then two methods: * create and play sound using <enforce inline>CreateAndPlayAudioSource(IEntity owner, SCR_AudioSourceConfiguration audioSourceConfiguration)</enforce> * alternatively Create a {{hl|SCR_AudioSource}} using <enforce inline>CreateAudioSource(IEntity owner, SCR_AudioSourceConfiguration audioSourceConfiguration)</enforce> and play {{hl|SCR_AudioSource}} using <enforce inline>PlayAudioSource(SCR_AudioSource audioSource)</enforce>

{{GameCategory|armaR|Modding|Audio|Guidelines}} {{DISPLAYTITLE:Arma Reforger:Audio: SCR_SoundManagerModule}}
f5usw92sn05wz7ibhrlrgjrpfe2itiq

# Arma Reforger:Audio: Sound Components

5050
47182
370934
370865
2025-02-26T12:31:52Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370934
wikitext
text/x-wiki
{{TOC|side}} At the most basic level, Sound Components are Components that give an Entity the ability to play sounds defined in ACP files. The ACP files available to the Entity are defined in the Filenames section of its SoundComponent.

Via GameCode or a Script, the {{Link/Enfusion|armaR|SoundComponent}} can receive the instruction to play a Sound. This instruction will contain a string with the desired Sound Event Name. The SoundComponent will then search through its connected ACP files and play the first Sound whose name matches the Sound Event Name provided by the instruction.

There are different SoundComponents: Some are generic, like the {{Link/Enfusion|armaR|BaseSoundComponent}} and {{Link/Enfusion|armaR|SimpleSoundComponent}}, and some are meant to be used for a specific purpose, e.g the {{Link/Enfusion|armaR|WeaponSoundComponent}} or {{Link/Enfusion|armaR|VehicleSoundComponent}}.

The main reason for having multiple different SoundComponents is performance. More "advanced" SoundComponents perform a variety of checks and calculations that might not be needed in every use case, such as interior detection or listening in on animations for sound events.

It is therefore recommended to familiarise oneself with the different SoundComponent types and use that one that matches the required featureset the closest.

The most common feature of "advanced" SoundComponent variations is it to read Signal values from an Entity's SignalsManagerComponent as well as the Gameworld's {{Link/Enfusion|armaR|GameSignalsManager}}.

== SoundComponent Variants ==

{| class="wikitable align-center-col-2 align-center-col-3 align-center-col-4 align-center-col-5 align-center-col-6" ! SoundComponent Type ! Dynamic Simulation ! Trigger Update ! Can read Signals from Signals Manager ! Sound position's dynamic update ! Listen to animation events ! Dedicated features |- | {{Link/Enfusion|armaR|BaseSoundComponent}} | {{Icon|unchecked}} | {{Icon|checked}}<br>but must be called manually via UpdateTrigger | {{Icon|unchecked}} | {{Icon|unchecked}} | {{Icon|unchecked}} | {{n/a}} |- | {{Link/Enfusion|armaR|SimpleSoundComponent}} | {{Icon|checked}} | {{Icon|checked}}<br>but must be called manually via UpdateTrigger | {{Icon|unchecked}} | {{Icon|unchecked}}<br>but UpdateSoundJob is called when any of assigned {{hl|.acp}}s is in the audibility range. | {{Icon|unchecked}} | {{n/a}} |- | {{Link/Enfusion|armaR|SoundComponent}} | {{Icon|checked}} | {{Icon|checked}} | {{Icon|checked}} | {{Icon|checked}} | {{Icon|checked}} | * Reads local signals from the SignalsManagerComponent. * Reads Global Signals from the GameSignalsManager. * Listens to Animation Events (BaseItemAnimationComponent or BaseAnimPhysComponent). * EOnFrame flag enables calling UpdateSoundJob() from entity EOnFrame. * Manages sound transformation offset using bone, vector offset, and sound points. * Manages Component activation based of the presence of playing sound. * Updates sound position to entity position. * Updates triggers for sound nodes. |- | {{Link/Enfusion|armaR|WeaponSoundComponent}} | {{Icon|checked}} | {{Icon|checked}} | {{Icon|checked}} | {{Icon|checked}} | {{Icon|checked}} | * Manages Signals for the SOUND_SHOT Event when using speed of sound simulation. On a shot event, a signal snapshot with current signal values is created and this snapshot is used once shot sound is triggered. |- | {{Link/Enfusion|armaR|CharacterSoundComponent}} | {{Icon|checked}} | {{Icon|checked}} | {{Icon|checked}} | {{Icon|checked}} | {{Icon|checked}} | * Updates Surface signals for footstep Eound Events. An Animation Event is considered as Footstep Event if its bone name contains the "foot" string. |- | {{Link/Enfusion|armaR|VehicleSoundComponent}} | {{Icon|checked}} | {{Icon|checked}} | {{Icon|checked}} | {{Icon|checked}} | {{Icon|checked}} | * Dedicated slots for wheel sound. Sound position offset is defined directly on the component. The Surface signal for each wheel is tied to this position. |- | {{Link/Enfusion|armaR|CommunicationSoundComponent}} | {{Icon|checked}} | {{Icon|checked}} | {{Icon|checked}} | {{Icon|checked}} | {{Icon|checked}} | * See {{Link|#CommunicationSoundComponent}} |}

== Components ==

=== CommunicationSoundComponent ===

For purposes of the communication protocol, the dedicated Communication Sound Component was created. Simplified, this component have two main purposes. Based on input signals, it is able to construct a sentence that is represented as * a list of {{hl|.wav}} files that the audio system can play in sequence * a string array that is used for displaying subtitles.

The sentence definition is done in one place in audio project, so it should keep the whole configuration and maintenance of the system manageable.

==== Animation Sound Priority Ranges ==== {| class="wikitable" ! Range ! Description |- | '''< 0''' | Discarded - Negative values are not allowed and used by the priority queue. |- | '''0..99''' | Queued if current playing sound has a higher priority |- | '''100..199''' | Discarded if current playing sound has a higher priority

100 = IgnoreQueue, 1XX = Priority (Example: 199 = Priority Queue with 99 Priority) |- | '''> 199''' | Discarded - Values higher than 199 are not allowed and used by the priority queue. |}

=== SCR_AmbientSoundComponent ===

==== HandleQueryEntities() ====

* By default {{Link/Enfusion|armaR|SCR_AmbientSoundsComponent}} performs sphere queries over entities and stores the output into appropriate data structures. Those can be then used by any configured SCR_AmbientSoundsEffects. * From script, we can access counts of the {{Link/Enfusion|armaR|EQueryType}} types * On engine side references to entities of the following types are stored. There is no script API to access them directly.

==== Looped Sounds System ==== * System for playing looped sounds with posibility to create multiple instances of the same event and without need for a signal for each sound instance * System keeps a pool of triggered sounds and check if, they are playing or tries to trigger them. * Used only by insects particles * API: see {{Link/Enfusion|armaR|SCR_AmbientSoundsComponent}}<enforce> SCR_AudioHandleLoop SoundEventLooped(string soundEvent, vector transformation[4]) void TerminateLooped(SCR_AudioHandleLoop audioHandleLoop) void UpdateLoopedSounds() </enforce>

== Activeness ==

For certain features like position update, or trigger functionality, the {{hl|SoundComponent}} needs to be active. That means that the {{hl|SoundComponent}} is added to the {{Link/Enfusion|armaR|SndSystem}} and <enforce inline>SoundComponent.UpdateSoundJob()</enforce> is called.

=== Rules ===

* If any sound is playing on the SoundComponent, it is added to SndSystem. When the sound finishes playing, the SoundComponent is removed from SndSystem, unless additional flags on the SoundComponent are used. * If any ACP on the SoundComponent uses triggers, the SoundComponent is always automatically added to SndSystem. There it is handled by the Dynamic Simulation, meaning the SndSystem checks the SoundComponent's distance from the listener, and if the listener is in the audible distance of the triggered sound with the largest audible range, it will start calling <enforce inline>SoundComponent.UpdateSoundJob()</enforce> * Distance management flag enables addition of any SoundComponent to Dynamic simulation on SndSystem. In that case largest audible distance (evaluated from both triggered and not-triggered events is used). * Include Inactive flag makes sure, that SoundComponent is not removed from SndSystem when the entity is deactivated. ** If there is a trigger sound on the component and you are not sure, if EOnActivate/EOnDeactivate are called on the entity, set to true. ** If there is a trigger sound on the component and you know EOnActivate/EOnDeactivate events are called and you want to use them to improve SndSystem performance, set to false. * If <enforce inline>SoundComponent.UpdateSoundJob()</enforce> is supposed to be always called, no matter how far is listener is from the component, use OnFrameUpdate flag

=== OnPostInit SndSystem Components ===

Components are added to {{hl|SndSystem}} in <enforce inline>OnPostInit()</enforce> if one of the following: * any ACP on the SoundComponent uses triggers * OnFrameUpdate is set to true * Distance management is set to true

; EOnActivate : SoundComponent is added to SndSystem

; EOnDeactivate : SoundComponent is removed from SndSystem unless '''Include Inactive''' is set to true

{{GameCategory|armaR|Modding|Audio|Guidelines}}
oku9kazxvqbsegokctc8zr30d2li1eu

# Arma Reforger:Audio: Sound Events

5050
47174
376654
370980
2025-11-03T12:36:12Z
Lou Montana
10739
ProjectileSoundsManager → ProjectileSoundsModule
376654
wikitext
text/x-wiki
{{TOC|side}} Sound Events are strings serving as identifiers for the sound system. They are defined by naming a {{Link|Arma Reforger:Audio Editor: Nodes#Sound|Sound Node}} and used by calling a Sound Event with the same name, e.g. via code or script.

== Script Events ==

{{Feature|informative|All script events are stored in {{Link/Enfusion|armaR|SCR_SoundEvent}}.}}

== GameCode Events ==

=== BaseMuzzleComponent ===

{| class="wikitable" ! Event Name ! Description |- | {{hl|SOUND_DRY}} | When firing with no bullets in magazine. |- | {{hl|SOUND_DRY_SAFETYON}} | When firing with safety on. |- | {{hl|SOUND_RELOAD}} | When reloading ACK.

Not used right now. Animations are used instead. |}

=== CaseEjectingEffectComponent ===

{| class="wikitable" ! Event Name ! Description |- | {{hl|SOUND_BULLET_CASING}} | Upon collision with the ground. |}

=== CharacterSoundComponent ===

{| class="wikitable" ! Event Name ! Description |- | {{hl|SOUND_BODYFALL}} | Upon character falling (Ragdoll). |- | {{hl|SOUND_BODYFALL_TERMINAL}} | Upon character falling, resulting in death. |- | {{hl|SOUND_CHAR_RAGDOLL}} | When impacting in Ragdoll state. |- | {{hl|SOUND_SWIM_START}} | When character starts swimming. |- | {{hl|SOUND_SWIM_STOP}} | When character stops swimming. |- | {{hl|SOUND_WATER_ENTER}} | When entering water surface when EntryLevel over threshold ''(0.1f).'' |- | {{hl|SOUND_WATER_ENTER_RAGDOLL}} | When entering water in ragdoll state. |- | {{hl|SOUND_WATER_EXIT}} | When exiting water surface. |}

=== CommunicationSoundComponent ===

{| class="wikitable" ! Event Name ! Priority ! Description |- | {{hl|SOUND_HIT}} | 99 | * Played when character gets damage * Player ** Grunt * AI ** Projectile damage: Would play sound that is connected to SOUND_REPORTS_STATUS_HIT ** Other damage: Grunt

'''Signals:'''

* IsAI - Player = 0, AI = 1, Set on SignalsManagerComponent * DamageType |- | {{hl|SOUND_DEATH}} | {{n/a}} | When character dies |- | {{hl|SOUND_BREATH_IN}} | -20 | Breathing in of character. |- | {{hl|SOUND_BREATH_OUT}} | -20 | Breathing out of character. |- | {{hl|SOUND_BREATH_REG_IN}} | -20 | Breathing in (regular) of character. |- | {{hl|SOUND_BREATH_REG_OUT}} | -20 | Breathing out (regular) of character. |- | {{hl|SOUND_BREATH_END}} | -20 | Upon stamina restored and breathing stops. |}

=== DoorComponent / SoundPointEventInfo ===

{| class="wikitable" ! Event Name ! Description |- | {{hl|SOUND_OPEN_START}} | When opening the door from fully closed state. |- | {{hl|SOUND_OPEN_FINISH}} | When door is fully opened from closed state. |- | {{hl|SOUND_CLOSE_START}} | When closing the door from fully opened state. |- | {{hl|SOUND_CLOSE_FINISH}} | When door is fully closed from open state. |- | {{hl|SOUND_MOVEMENT}} | When the door is opening/closing. |}

=== ExplosionEffect ===

{| class="wikitable" ! Event Name ! Description |- | ''Custom Event'' | Raised when explosion triggered. |}

=== GrenadeMoveComponent ===

{| class="wikitable" ! Event Name ! Description |- | {{hl|SOUND_HIT}} | Upon contact & deflection of grenade. |}

=== HitSoundEffect ===

{| class="wikitable" ! Event Name ! Description |- | {{hl|SOUND_HIT}} | Upon bullet hitting surface / player. |}

=== MusicManagerController ===

{| class="wikitable" ! Event Name ! Description |- | {{hl|SOUND_MILITARYBASE}} | Theme played at military bases. |- | {{hl|SOUND_FOREST}} | Theme played in forests. |- | {{hl|SOUND_VILLAGE}} | Theme played in villages. |- | {{hl|SOUND_COASTLINE}} | Theme played at coastlines. |}

=== ProjectileSoundsModule ===

{| class="wikitable" ! Event Name ! Description |- | {{hl|SOUND_SONIC_CRACK}} | Upon sonic crack when speed > SpeedOfSound. |- | {{hl|SOUND_SONIC_CRACK_SECONDARY}} | Upon projectile transitioning from supersonic to subsonic. |- | {{hl|SOUND_SONIC_CRACK_IMPACT}} | Upon projectile impacting before it reaches the listener. |- | {{hl|SOUND_FLYBY}} | Upon sonic crack when speed <= SpeedOfSound. |}

=== RadioBroadcastSoundComponent ===

{| class="wikitable" ! Event Name ! Description |- | {{hl|SOUND_RADIO_TURN_ON}} | When turning on the radio. |- | {{hl|SOUND_RADIO_TURN_OFF}} | When turning off the radio. |- | {{hl|SOUND_RADIO}} | After turning the radio on. |}

=== Vehicle ===

{| class="wikitable" ! Event Name ! Description |- | {{hl|SOUND_COLLISION}} | * In a collision between 2 vehicles, sound is played from vehicle with higher mass. * use eventNoRepeatTime to filter out duplicate collisions. |}

=== VoNComponent ===

{| class="wikitable" ! Event Name ! Description |- | {{hl|VON_DIRECT}} | VON for direct speech |- | {{hl|VON_RADIO}} | VON for radio transmissions |- | {{hl|VON_RAW}} | |}

=== WeaponSoundComponent ===

{| class="wikitable" ! Event Name ! Description |- | {{hl|SOUND_MELEE_IMPACT}} | Upon dealing melee damage. |- | {{hl|SOUND_SHOT}} | Upon firing a weapon. |- | {{hl|SOUND_SHOT_END}} | After firing stops. |- | {{hl|SOUND_THROWN}} | After a throwable item (e.g. grenades) has been thrown. |- | {{hl|SOUND_WPN_TOSAFETY}} | When changing the fire mode to safety. |- | {{hl|SOUND_WPN_TOAUTO}} | When changing the fire mode to auto. |- | {{hl|SOUND_WPN_TOBURST}} | When changing the fire mode to burst. |- | {{hl|SOUND_WPN_TOSEMIAUTO}} | When changing the fire mode to semi-auto. |- | {{hl|SOUND_DRY_SAFETYON}} | When firing with safety on. |- | {{hl|SOUND_WPN_TOUGL}} | When changing muzzle to UGL. |- | {{hl|SOUND_ZEROING_DOWN}} | Upon zeroing down. |- | {{hl|SOUND_ZEROING_UP}} | Upon zeroing up. |}

{{GameCategory|armaR|Modding|Audio|Guidelines}}
f8lfy88l13ip89ixcu6uyyv9w8vmtdb

# Arma Reforger:Audio: Tree Destruction

5050
47176
370924
370772
2025-02-26T12:31:50Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370924
wikitext
text/x-wiki
This page covers the sound aspects of tree destruction.

* Tree prefabs themselves make use of the {{Link|Arma Reforger:Audio: Multiphase Destruction|Multiphase Destruction system}}, but everything sound-related is handled on the "spawned debris". * Unlike regular entities using Multiphase Destruction, trees spawn debris '''Prefabs''' of type {{hl|SCR_TreeDebrisSmallEntity}} rather than just models. The tree destruction sounds are defined in these Prefabs. * The sounds themselves are designed and set up so that each tree "type" (leafy, coniferous, rotten) has its own {{hl|.acp}}. The sounds automatically "scale" their sound characteristics based on the debris' bounding box size. * A {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Systems/Destruction/DestructionManager.et|DestructionManager}} entity must be present within the gameworld.

== SCR_TreeDebrisSmallEntity Setup ==

In the ''Unsorted'' section, there are '''Audio Source Configuration Impact''' and '''Audio Source Configuration Break'''.

* '''Audio Source Configuration Impact''' defines the sound played when the tree debris impacts onto/with something else. * '''Audio Source Configuration Break''' defines the sound played when the tree debris spawns (= when the tree breaks).

The AudioSourceConfiguration classes are configured as follows: {| class="wikitable" ! colspan="2" | '''Audio Source Configuration Impact''' defines the sound played when the tree debris impacts onto/with something else |- | Sound Project | One of the tree-type specific {{hl|.acp}} files |- | Sound Event Name | {{hl|SOUND_TREE_IMPACT}} |- ! colspan="2" | '''Audio Source Configuration Break''' defines the sound played when the tree debris spawns (= when the tree breaks) |- | Sound Project | One of the tree-type specific {{hl|.acp}} files |- | Sound Event Name | {{hl|SOUND_TREE_BREAK}} |}

== Available Signals ==

Not all signals are available for each type of sound.

{| class="wikitable align-center-col-4 align-center-col-5" ! Signal Name ! Values ! Description ! Available for Break Sounds ! Available for Impact Sounds |- | EntitySize | = mass of object | The entity's mass, usually used in order to "scale" sounds. | {{Icon|checked}} | {{Icon|checked}} |- | CollisionDV | = change in speed of entity | A value reflecting the change in speed of an entity upon contact (how fast was it before, how much was it slowed down?) | {{Icon|unchecked}} | {{Icon|checked}} |}

== Debugging ==

Tree debris Prefabs will make use of the {{Link|Arma Reforger:Audio: Multiphase Destruction#Debugging|Multiphase Destruction Debug values}}.

{{GameCategory|armaR|Modding|Audio|Guidelines}}
98rl58zzxel9q7c76tf8taugi086gro

# Arma Reforger:Audio: Vehicle Damage

5050
47177
370997
370776
2025-02-26T12:32:04Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370997
wikitext
text/x-wiki
{{TOC|side}} * Vehicle damage is connected to the damage state signals that are updated from the <enforce inline>OnStateChanged()</enforce> event on {{Link/Enfusion|armaR|SCR_HitZoneStateSignal}} (checking {{Link/Enfusion|armaR|SCR_HitZone}}). * The signal setup is on {{Link/Enfusion|armaR|SCR_VehicleSoundComponent}}'s <enforce inline>GetHitZoneStateSignalData()</enforce>. * Multiple scripted hit zones can update the same signal. In that case, the signal has the value of the most damaged scripted hit zone. * TireDamage signals are updated directly from {{Link/Enfusion|armaR|SCR_WheelHitZone}}.

== Wheeled ==

=== Engine ===

* When in idle, engine RPM is modulated {{hl|EngineDamageRPMRevs}} signal, creating a sense of unsteady and unreliable engine RPM * {{hl|SOUND_TIMING_BELT}} - One-shot sound, periodically triggered. Triggering frequency depends on engine RPM * {{hl|SOUND_ENGINE_RATTLE_LP}} - Looped sound modulated by engine RPM and thrust * {{hl|SOUND_BACK_FIRE}} - One-shot sound occasionally triggered

=== Gearbox ===

* {{hl|SOUND_VEHICLE_GEARSHIFT}} - grinding sound layer is mixed in when the gearbox is damaged

=== Wheel Damage ===

* Driving on a flat tire or rim is mixed into wheel rolling sounds if the wheel is damaged or destroyed

== Helicopters ==

=== Engine ===

* {{hl|SOUND_TURBINE_LP}} - the damaged turbine layer is played when the engine is damaged * {{hl|SOUND_ENGINE_RATTLE}} - one-shot sound is occasionally triggered.

=== Main Rotor ===

* {{hl|SOUND_MAINROTOR_LP}} - a loud whooshy sounding layer is mixed in, if the main rotor is damaged

=== Tail rotor ===

* {{hl|SOUND_TAILROTOR_DAMAGED_LP}} - metal grinding/scraping sound is triggered, if the tail rotor is damaged.

=== Gearbox ===

* Metal grinding/rattling layer is mixed into {{hl|SOUND_MAINROTOR_LP}} if the gearbox is damaged.

== Smoke and Fire ==

Three sound sources are accompanying smoke and fire particles on vehicles. * '''Engine smoke/fire:''' ** On engine position ** Uses the {{Link|#EngineFireState}} signal ** Representing engine smoking or vehicle fire ** Defined on {{Link/Enfusion|armaR|SCR_FlammableHitZone}} ** Particles size is static, defined on {{Link/Enfusion|armaR|SCR_FlammableHitZone}} * '''Supplies fire:''' ** On supplies position ** Size/type of sound is driven by the {{Link|#SuppliesFireState}} signal ** Will include ammo cook-off layer * '''Fuel tank fire''' ** On fuel tank position ** Size/type of sound is driven by the {{Link|#FuelTankFireState}} signal

== Signals ==

=== EngineFireState ===

* 0 - no particles * 10 - 30 - smoke * 40 - fire

=== SuppliesFireState ===

* 0 - not burning * 1 - 4 will return based on what particle effect is used. If small, medium, large or massive (Uses {{Link/Enfusion|armaR|SCR_ESecondaryExplosionScale}} enum).

=== FuelTankFireState ===

* 0 - not burning * 1 - 4 will return based on what particle effect is used. If small, medium, large or massive (Uses {{Link/Enfusion|armaR|SCR_ESecondaryExplosionScale}} enum).

{{GameCategory|armaR|Modding|Audio|Guidelines}}
o5hx455i0tgio7891b1vz2pgvcxvou3

# Arma Reforger:Audio: Voice over Network

5050
47180
371016
370863
2025-02-26T12:32:08Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
371016
wikitext
text/x-wiki
{{TOC|side}} The Voice over Network (VoN) system handles the voice communication between players, for both direct speech and transmitting via radios. In order to either send or receive VoN, an entity is required to have a {{Link/Enfusion|armaR|VoNComponent}}.

On a basic level, the "VoN Pipeline" looks as follows:

* The {{hl|VoNComponent}} gets a compressed (OPUS) audio stream as packets from Enfusion's AudioCaptureDevice class. ** The AudioCaptureDevice also handles Silence Detection and Audio Normalization. ** The audiostream has a hardcoded ID (This simply being "Stream"). * This data is then sent to the Server. It determines which clients should be able to hear the audiostream. * The server distributes the audiostream to the determined clients. Their character's {{hl|VoNComponent}} decodes it, sets Signals and plays it back, routed through the ACP specified on the '''receiver'''<nowiki/>'s {{hl|VoNComponent}}.

== Direct Speech VoN ==

; Prerequisites : Sender and receiver both need to have a VoNComponent with a properly set up ACP

; Functionality : If the sender is talking and the receiver is within the "Speaking Range" defined in the sender's {{hl|VoNComponent}}, the receiver will hear the sender via the {{hl|VoN_DIRECT}} Sound Event.

== Radio VoN ==

; Prerequisites :* Sender and receiver both need to have a {{hl|VoNComponent}} with a properly set up ACP :* A {{Link/Enfusion|armaR|RadioManagerEntity}} must be present within the GameWorld :* Sender and receiver must each possess a radio item set up with a {{Link/Enfusion|armaR|BaseRadioComponent}}

; Functionality : If the sender is transmitting on their radio and the receiver is within radio range, on the same frequency and using the same encryption key, the receiver will hear the sender via the VoN_RADIO Sound Event. The Signals listed in the Signals section will be set.

== Related Classes ==

=== VoNComponent ===

{| class="wikitable" ! Attribute ! Description |- | Filename | Reference to the ACP file used for VoN. |}

=== BaseRadioComponent ===

{| class="wikitable" |+ Radio properties ! Attribute ! Description |- | Encryption key | Key (string) that will be checked against for encryption. Radios can only receive from and transmit to radios with the same encryption key. |- | Turned On | Whether or not the radio starts as turned on. |}

{| class="wikitable" |+ Unsorted (transceiver) ! Attribute ! Description |- | Channel Frequency | Default frequency of the transceiver |- | Transmitting Range | Maximum transmitting range (m) of the transceiver |- | Min tunable frequency | Minimum tunable frequency (Hz) of the transceiver |- | Max tunable frequency | Maximum tunable frequency (Hz) of the transceiver |- | Frequency resolution | The "steps" (Hz) in which the transceiver can be cycled through |}

=== Radio Manager ===

No configurable attributes.

== Signals and Audio Variables ==

The following Signals will be directly set on the listener's ACP continuously during stream playback:

{| class="wikitable" ! Signal ! Description |- | TransmissionQuality | Quality of the transmission (Float, 0..1) |- | Distance | Distance to the sender |- | Interior | Whether or not the sender is considered "inside" (0,1) |- | RoomSize | Size of the room the sender is in (m<sup>3</sup>) |- | UnderPlayerControl | Whether or not the sender is controlled by the local player (0,1) |- | IsInPlayerVehicle | Whether or not the sender is in the same vehicle as the player (0,1) |- | GInterior | Whether or not the current camera position is "inside" (Read from {{Link/Enfusion|armaR|GameSignalsManager}}) |- | GRoomSize | Size (m<sup>3</sup>) of the room the camera is in (Read from {{Link/Enfusion|armaR|GameSignalsManager}}) |- | GIsThirdPersonCam | Whether or not the player's camera is in third person (0,1) (Read from {{Link/Enfusion|armaR|GameSignalsManager}}) |- | GCurrVehicleCoverage | The current coverage of the vehicle the player is in (0 if not in vehicle) (Read from {{Link/Enfusion|armaR|GameSignalsManager}}) |}

== Sound Events ==

The VoN sound events can be found here: {{Link|Arma Reforger:Audio: Sound Events#VoNComponent}}.

== ACP Setup ==

VoN can be processed like any other audio signal within the Audio Editor, with two exceptions: * The correct (hardcoded) Sound Event names must be used and * A Stream node with the ID "Stream" must be used as an audio source in the signal chain.

== Pipeline ==

[[File:armaR-audio von pipeline.png]]

{{GameCategory|armaR|Modding|Audio|Guidelines}}
pql8322wq85lqkxsl2kc4iesbjzvsph

# Arma Reforger:Asset Browser Mod Integration

5050
32648
371000
364643
2025-02-26T12:32:05Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
371000
wikitext
text/x-wiki
{{TOC|side}} Basic rules for adding assets are explained on following page - [[Arma_Reforger:Game_Master:_Editable_Entities_Configuration|'''Editable Entities Configuration''']] which covers most of the basic information. Due to that, this tutorial focuses more on creating new register and adding to list used by in game Editor and it is assumed that you have properly configured prefabs in first place (with editable components present and [[Arma_Reforger:Game_Master:_Image_Generation_Tutorial|preview images]] already generated).

= Preparing structure = At minimum, to add new asset to in game editor you need to create a '''new register''' & '''override {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Editor/Modes/EditorModeEdit.et}}''' prefab. Folder wise, only structure for new config needs to be prepared since '''[[Arma_Reforger:Data_Modding_Basics#Using_.22Override_in....22_function|Override in]]''' function is taking care of it

[[File:armareforger-editor-adding-assets-file-structure.png|1200px]]

=== Creating new register file === Assuming that structure was already prepared, there are two ways how to create a new register config and both of them are described below

==== Creating new config ====

[[File:armareforger-editor-adding-assets-creating-config.png|200px|thumb||left]] [[File:armareforger-editor-adding-assets-creating-config-class.png|200px|right]] New register can be easily created by new config file. Procedure for it same as for any other configs:

* In Resource Browser menu either click with ''Right Mouse Button'' on empty '''Resource Browser''' field '''(1a)''' or use '''Create button (2)''' in bottom right section of Resource Browser. * From the context menu, select '''Config file''' option * Type in new config name, i.e. ''SampleMod_NewCar_Vehicles.conf'' * From '''Choose a class''' window, select '''SCR_PlaceableEntitiesRegistry''' option. {{Clear}}

==== Duplicating existing config ==== Alternative method involves duplicating one of the existing register configs located in ''Configs\Editor\PlaceableEntities.'' To do so, click on i.e. Vehicle.conf with ''Right Mouse Button'' and select option '''[[Arma_Reforger:Data_Modding_Basics#Using_.22Duplicate_to....22_function|Duplicate to "''name of addon''"]]''' from context menu that appeared. After typing in new name and confirming it, new config file will be created in target addon, keeping structure of original file.

=== Adding new register file to Editor === Once register file is created, it's time to actually link it with in game editor. To do so, '''{{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Editor/Modes/EditorModeEdit.et}}''' prefab has to be modified and '''Registries''' array in '''SCR_PlacingEditorComponent''' needs to be expanded.

==== Using Override in functionality ====

[[File:armareforger-editor-adding-assets-override-in.gif|right]] First step, will be creating modified copy of '''{{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Editor/Modes/EditorModeEdit.et}}''' prefab. This can be easily accomplished using '''[[Arma_Reforger:Data_Modding_Basics#Using_.22Override_in....22_function|Override in]]''' functionality available in '''Resource Browser''' context menu. In principle, this operation is performed in two steps:

* Navigate to ''Prefabs/Editor/Modes'' folder and locate '''{{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Editor/Modes/EditorModeEdit.et}}''' prefab * Click with ''Right Mouse Button'' on that prefab and select '''Override in "''name of addon''"''' option

Workbench will recreate structure of original file with only difference being file system - that means that

* ''$ArmaReforger:Prefabs/Editor/Modes/EditorModeEdit.et''

will be copied to

* ''$NameOfAddon:Prefabs/Editor/Modes/EditorModeEdit.et''

This new prefab will have exactly same GUID and will override existing prefab.

{{Clear}}

{{Feature|informative| [[File:armareforger-editor_adding_assets_overridden_file.png|left]] Override in function creates overridden version of {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Editor/Modes/EditorModeEdit.et EditorModeEdit.et}} prefab. This mean that prefab in target addon contains only changes - like adding new elements or overriding existing ones - made in addon.}}

{{Clear}}

Overridden assets can be easily distinguished by '''puzzle icon''' visible in '''Resource Browser.'''

==== Expanding Registries array ==== With '''EditorModeEdit ''' prefab being present in addon, it is time to make modification to it. Goal is to add new element to '''Registeries''' array located in '''SCR_PlacingEditorComponent.'''

'''EditorModeEdit ''' prefab located in the addon can be edited in a same way as any other addon - it is possible to either place it directly in World Editor and then start editing parameters or '''Edit prefab''' can be used in Resource Manager.

To use '''Edit prefab''' option, double click with ''Left Mouse Button'' on '''EditorModeEdit.et''' file located in addon. This should open t.hat prefab as a new tab in '''Resource Manger'''. Now only thing left to do is to click on '''Edit prefab''' button on the right side of the '''Resource Manager -''' this will open World Editor in special, prefab editing mode which slightly differs from regular worlds created by that editor.

Main difference is fact that when you try to save "world", it doesn't create any new world files - it just saves changes in prefabs.

[[File:armareforger-editor-adding-assets-edit-prefab.gif]]

To add new config to '''Registries''' array located in '''SCR_PlacingEditorComponent,''' simple drag and drop config file from '''Resource Browser''' on top of '''Registries''' property. A new element will be added on the bottom of the array with link to config file located in ''Configs→ Editor → PlaceableEntities.''

[[File:armareforger-editor-adding-assets-adding-register.gif]]

Now only remaining thing to do is saving those changes to the prefab - to do so, either click on '''Save Button''' or press ''Left Ctrl + S'' shortcut.

== Registering assets == New register can be populated with new assets in two ways - manually by adding placeable prefabs to Prefabs array or via '''Register Placeable Entities''' plugin. First method might is easier to use, especially if addon doesn't have that many placeable entities. However, when dealing with larger amounts of prefabs (or larger projects in general) it is recommended to use plugin instead.

=== Manual method === Adding placeable entities to register by hand is quite simple.

Open config file containing register (in this case its ''SampleMod_NewCar_Vehicles.conf'') as a new tab and then navigate in Resource Browser to a location where are placeable prefabs which you want to expose. Then, only thing left to do is simply drag & dropping those prefabs on '''Prefabs''' array.

[[File:armareforger-editor-adding-assets-adding-asset-manual.gif]]

Of course, elements in that array can also be manually added or removed via plus & minus signs on the right side of the '''Prefabs''' array

=== Using plugin ===

[[File:armareforger-editor-adding-assets-adding-plugin.png|left]]

Basics of using '''Register Placeable Entities''' can be found on following page - Editor: Editable Entities: Configuration - RegisterPlaceablePrefabs.

When dealing with addons, it is mandatory to change '''Addon''' parameter so it matches '''addon ID''' you are working on '''-''' in this example it is '''SampleMod_NewCar.''' Below you can take a look at fully filled register config. {{Clear}}

=== Adding modded label === [[File:armareforger-editor-adding-assets-adding-label.gif|right]] To be able filter modded content from vanilla, it might be necessary to add '''CONTENT_MODDED''' label to '''Authored Labels''' array in '''Editable Component''' of asset (''depending on asset type, it can be SCR_EditableVehicleComponent, SCR_EditableEntityComponent, SCR_EditableCharacterComponent or SCR_EditableGroupComponent'').

To do so, navigate to that component and click on plus sign to the right of '''Authored''' '''Labels''' array. Next step will be changing of type of newly added label - to do so, click on that new element and select from the drop down menu '''CONTENT_MODDED''' parameter.

{{Clear}}

== Testing result in-game == If everything went good, then all assets added to new register file should be visible in game{{Feature|warning|Keep in mind that only '''localised''' strings are '''searchable by name in Asset Browser'''. Information about string localization can be found on [[Arma_Reforger:Mod_Localisation|'''Mod Localisation''']] page}}[[File:armareforger-editor-adding-assets-result.png|left]]

{{GameCategory|armaR|Modding|Game Master|Tutorials}}
607ujm33i7h1i0p6hi3qwu25el1fu2o

# Arma Reforger:Game Master: Composition Configuration Tutorial

5050
32857
370917
337211
2025-02-26T12:31:50Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370917
wikitext
text/x-wiki
{{TOC|side}} Game Master compositions are prefabs that have to be created, configured and maintained in a specific way in order for them to work correctly in [[Arma Reforger:Game Master]].

== Creating Composition Prefab ==

=== Flexible ===

Follow these steps if the composition is meant for flexible slots (i.e., the composition can be placed anywhere in the world or in one of compatible slots).

# Select '''Prefabs/Compositions/Slotted/CompositionBase.et''' and open it by ''Plugins > Edit Selected Prefab(s)'' or by pressing '''Ctrl+Shift+E'''. # Create new composition prefab by dragging '''CompositionBase''' entity from Hierarchy list to desired folder in Resource Browser. Choose the folder based on intended slot type (i.e. Flat slot, Road slot, and their respective sizes). # Name the prefab according to this key: <code style="display: block"><NAME>_<SIZE ABBREVIATION>_<FACTION>_<ID></code> #* '''NAME''' - composition name eg: RoadBlock #** Note that names have no spaces and are written with camel case. #* '''SIZE ABBREVIATION''' - L, M or S #** Large, Medium or Small #* '''FACTION''' - either '''US''', '''USSR''', or '''FIA''' #* '''ID''' - two-digit iterator starting from 01

{{Feature|informative| Naming Examples: * Flat Composition: ** ''PlayerHub_L_US_01'' * Road Composition: ** ''Checkpoint_S_USSR_01'' }}

=== Static ===

Follow these steps if the composition is meant for static slots (i.e., the composition can be placed only on one specific position in the world).

# Open the world on which the composition is going to be placed # Place '''Prefabs/Compositions/Slotted/CompositionBase.et''' entity on desired location # In entity's '''SCR_SlotCompositionComponent''', set the location prefab the composition belongs to # Create new composition prefab by dragging '''CompositionBase''' entity from Hierarchy list to desired folder in Resource Browser. Choose the folder based on world and location names (e.g., ''Eden/Le_Moule'') # Name the prefab according to this key: <code style="display: block"><NAME>_<FACTION>_<ID></code> #* '''NAME''' - custom name describing the composition #* '''FACTION''' - either '''US''', '''USSR''', or '''FIA''' #* '''ID''' - two-digit iterator starting from 01 {{Feature|informative| Naming Example: * ''Camping_US_01'' }}

== Configuring Composition ==

The composition itself has several attributes that influence its behavior.

[[Image:armareforger-gm-compositions-attributes2.jpg|right|400px]] * '''Slot Prefab''' ** Prefab this composition can be snapped to in in-game editor. Can be either a flexible slot, or static location in the world. * '''Orient Children To Terrain''' ** When enabled, children will be snapped and oriented to terrain when the composition is transformed. ** This influences also position of non-editable compositions created in a flexible slot or positioned using dedicated function in the composition component. ** Use this when child objects are lying on the ground, e.g., tables and chairs under a camo net, but not tables and chairs inside a house. * '''Non Editable Children''' ** When enabled, children will not be turned into editable entities. ** The composition will appear as a single entity in in-game editor. ** Use this for smaller compositions which have a lot of smaller objects, e.g., pallets with boxes.

{{Clear}} == Editing Composition ==

Select the composition prefab and edit it by ''Plugins > Edit Selected Prefab(s)'' or by pressing '''Ctrl+Shift+E'''.

=== Prefab Editing ===

Keep in mind that [[Arma_Reforger:Prefabs_Basics|prefab editing]] has a few caveats:

* After [[Arma_Reforger:Prefabs_Basics#Adding_entities_to_prefab|'''adding a new entity''']], move it inside the composition by '''Alt+LMB drag''', not just by LMB drag. How to tell them apart... {| role="presentation" class="wikitable mw-collapsible mw-collapsed" | <strong>How to tell them apart...</strong> |- | * Entity added to composition instance ('''LMB drag''') will have its own prefab mentioned in Hierarchy's ''prefab'' column. * Entity added to composition prefab ('''Alt+LMB drag''') will have the composition prefab in the ''prefab'' column.

[[Image:armareforger-gm-compositions-prefabs-column.png]] |}

* When '''editing entities''', only their instances are modified. Follow these steps to apply changes to prefab: *# Select modified entities *# Click on '''Apply to prefab''' at the bottom of Object properties panel. *# In the dialog window, leave the composition prefab selected, but tick '''Apply to transformation''' option *# Confirm * '''Save all changes''' to the prefab by saving the world ('''Ctrl + S''') ** Until the world is saved, no changes (not even the ones manually applied using Apply to prefab button) are saved into prefab file. * To [[Arma_Reforger:Prefabs_Basics#Deleting_entities_from_prefab|'''delete an entity''']], use ''RMB > Delete from prefab''. Pressing 'Delete' key would simply try to remove an instance of the entity.

=== Technical Rules ===

In later stages, following rules will be automatically checked by Workbench plugin.

* '''Use only entities from ''Prefabs'' folder''', not from ''PrefabsEditable'' folder! Conversion to editable variants is performed automatically in the next step. * Entity '''bounding boxes should not extend past the borders''' of the slot! You can see the bounding boxes by hovering over entities with the mouse, and entities that do cross this boundary while part of the composition prefab will show a warning. This is done to ensure compositions align well with slots in the world.

=== Tips ===

* To toggle surface clutter, use ''[[Arma Reforger:Diag Menu|Diag Menu]] > Render > Terrain grass > Render grass''. Use this sparingly, as creating the composition without grass can provide inaccurate representation. * If your composition contains some editable prefabs, you can convert them back to their sources using ''Plugins > In-game Editor > Convert to/from Editable Entities...'', and the choosing '''To Non-editable'''.

{{Feature|warning|Steps below are applicable if you're making a composition that should be editable in in-game editor.

If that is not the case, please click RMB on '''SCR_SlotCompositionComponent''' and choose '''Configure composition''' before saving and committing.

This will make sure the composition is set-up correctly, e.g., all child entities are in hierarchy. Conversion to editable variant performs this step automatically.}}

== Creating Editable Variant ==

When you're done editing the composition, auto-generate its editable variant. To do so, follow the configuration guide:

=== Selecting compositions ===

In Resource Browser, '''select prefab files''' (*.et) of entities you want to process.

Check editable entity types to see which prefabs should be marked as editable.

''Tip: Both Resource Manager and World Editor browsers are supported, but not Resource Manager''

=== Creating editable prefab ===

With files selected, activate '''''Plugins > In-game Editor > Create/Update Selected Editable Prefabs'''''

''Tip: You can also press '''Ctrl+Shift+U''' to perform this action.''

After the operation is done, please check the log, it will list all processed prefabs. They can end up with one of the following states:

* '''Created / Updated''' - successful processed * '''Failed''' - unable to generate the prefab, most commonly due to presence of child entity with RplComponent * '''Non-editable''' - some child entities which don't have editable prefab variant were detected. Please revise them and consider if some of them could be made editable as well.

=== Updating editable prefab ===

Editable prefabs needs to be regenerated every time the source prefab changes. This can be achieved by several ways:

* Activate '''''Plugins > In-game Editor > Update All Editable Prefabs''''' ** This will update all auto-generated editable prefabs. ** It will also handle renamed / moved / deleted source prefabs (enable '''Only File Changes''' attribute to perform this operation only). * Select an editable or a source prefab and activate '''''Plugins > In-game Editor > Create/Update Selected Editable Prefabs'''''

Changes will be made in '''PrefabsEditable/Auto''' as well as '''UI/Textures/EditorPreviews/Auto''' folders

{{Feature|informative|Repeat those steps every time you perform changes in existing composition.}}

== Registering Composition ==

# In Resource Manager, activate '''''Plugins > In-game Editor > Register Placeable Entities...''''' # Set config to {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Editor/PlaceableEntities/Compositions/Compositions.conf|Configs/Editor/PlaceableEntities/Compositions/Compositions.conf}} # Run the process. It will register all prefabs in ''Prefabs/Compositions'' folder, including the newly added one.

{{Feature|important|For newly added compositions through mods, this config should be extended. The new compositions should then be added to that config file.

In that case the config should be set to the modded config file.}}

== Testing in In-game Editor ==

# Load the world [enfusion://WorldEditor/worlds/GameMaster/GM_Eden.ent|''worlds\GameMaster\GM_Eden.ent''] # Press play and open the '''Entity Browser''' by pressing the button in the bottom right or by pressing TAB. # Find your composition in the list and click on it to start placing. Compatible slots should light-up. # Hover over compatible slot to snap the composition to it.

{{Feature|informative|If no compatible slots are available and snapping doesn't work, it's possible something is wrong with composition configuration.}}

<gallery mode="packed" heights="200px"> File:armareforger-gm-compositions-asset-browser.jpg File:armareforger-gm-compositions-slots.jpg </gallery>

{{GameCategory|armaR|Modding|Game Master|Tutorials}}
ien233wsj66rbpgfg68e935x9ts5r6b

# Arma Reforger:Game Master: Context Action Creation

5050
34256
370954
336994
2025-02-26T12:31:56Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370954
wikitext
text/x-wiki
{{TOC|side}} Context actions are actions the [[Arma Reforger:Game Master|Game Master]] can do by opening the context menu such as Cast lighting, Delete entity, etc. Context actions change depending on if the Game Master is focusing on an entity and on the type of entities. The following is a guide about how to create new context actions.

== Script Creation ==

To create a context action you will need to create a new class inheriting from {{Link/Enfusion|armaR|SCR_GeneralContextAction}}.

There are three main methods you will be using:

{| class="wikitable" ! Method ! Description |- | <enforce inline>CanBeShown()</enforce> | Whether or not the context action will be shown in the menu. Check here if the hovered/selected entities are the ones your action requires. The action cannot be performed (not even with the shortcut) if it is not shown. |- | <enforce inline>CanBePerformed()</enforce> | Whether or not the action can be performed. The action will be shown but locked. By the time of writing only gamepad shows locked actions. This will also be checked for Shortcuts. |- | <enforce inline>Perform()</enforce> | Here you actually execute the action. Write the code to perform the action here |}

== Config Modding ==

Context actions are (generally) mode-specific so decide in which mode(s) the player can execute the action. Context actions configs are located in {{hl|\Data\Configs\Editor\ActionLists\Context}}.

{| class="wikitable" ! Config ! Description |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Editor/ActionLists/Context/TempEdit.conf|TempEdit.conf}} | Edit mode config |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Editor/ActionLists/Context/TempAdmin.conf|TempAdmin.conf}} | Admin mode config |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Editor/ActionLists/Context/TempPhoto.conf|TempPhoto.conf}} | Photo mode config |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Editor/ActionLists/Context/Shared.conf|Shared.conf}} | All modes config |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Editor/ActionLists/Context/Tasks.conf|Tasks.conf}} | Player tasks config |}

Next, locate the config you want and press the '''+''' icon to add your own context action.

=== UI Info ===

Now that the action is added you will have to fill in the variables. We will start with the Info. Press the Set Class button and select SCR_UIInfo from the list.

This will get you the following UI Info variables to fill in:

{| class="wikitable" ! Variable ! Description |- | Name | Action's display name |- | Description | Tooltip description when focusing on the action |- | Icon | Action's icon |}

=== Additional Variables ===

The base class has some additional variables. {{Feature|informative| More advanced classes, located in {{hl|Data\scripts\Game\Editor\Containers\Actions\ContextActions\}} (like {{Link/Enfusion|armaR|SCR_DoubleClickAction}}) exist that may offer more options than the default ones listed here but these will not be covered. }}

{| class="wikitable" ! Variable ! Description |- | Enabled | Simply if this config action is to be considered or not. Useful for debug/development purpose. |- | Info | See {{Link|#UI Info}} above. |- | Action Type | Purely visible and only used in tool bars. Keep on {{hl|ACTION}} for context actions. |- | Action Group | Makes sure actions are group together. Keep {{hl|NONE}} for context actions. |- | Order | This dictates the order of the action. The higher the number the higher the action is in the list. Actions with the same order are ordered the same as in the config array. |- | Shortcut | Add an Input action name (defined in {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/System/chimeraInputCommon.conf|chimeraInputCommon.conf}}, e.g {{hl|ManualCameraTeleportPlayer}}) if you want the action also to be executed via shortcut. Note that <enforce inline>CanBePerformed()</enforce> will still be checked. |- | Enable Shortcut Logics | Will allow the "Shortcut" to work if true. You might want to execute the shortcut action from a different location. So "Shortcut" is purely informative. |- | Effects | Array of effects when the action is performed such as sound, particle, UI effects. |- | Cooldown Time | Cooldown to prevent spamming of action. Leave zero or less to ignore, duration is in seconds. |- | Show On Cooldown Notification | If true will show notification if trying to perform the action if the cooldown is active. |- | IsServer | The action is performed on the server if this is true, otherwise it is performed locally. Note that <enforce inline>CanBeShown()</enforce> and <enforce inline>CanBePerformed()</enforce> are still checked locally. |- | Hide On Hover | The action is hidden when the cursor is hovering above an entity. |- | Hide On Selected | The action is hidden if any entity is selected. |}

{{Feature|informative|It is possible to make shortcut-only context actions (that do not show up in the context menu) by not filling in the {{hl|UIInfo}} but still filling in the {{hl|Shortcut}} and having {{hl|Enable Shortcut Logics}} ticked.}}

{{GameCategory|armaR|Modding|Game Master|Tutorials}}
997l1gnow1bk3u2hbd843xdhwjdefnn

# Arma Reforger:Game Master: Editable Entities Configuration

5050
32904
376293
370922
2025-09-29T13:59:36Z
Lou Montana
10739
Text replacement - " to to " to " to "
376293
wikitext
text/x-wiki
{{TOC|side}}{{Messagebox|'''Recommended read:''' Before going any further, it is recommended to make yourself familiar with [[Arma_Reforger:Asset_Browser_Mod_Integration|'''Asset Browser Mod Integration''']] since those two subjects are interconnected.|📖|lightgrey}}Step-by-step guide to how to create an editable prefab variant recognised by {{Link|Arma Reforger:Game Master|Game Master}}; either manually, or using automated process.

To make an entity editable in Game Master, several components have to be added to it and the entity needs to be replicated. Because this affects performance, we don't want to add such functionality on all prefabs - having every tree or rock configured this way would be a big hit.

Instead, we will '''create inherited prefab of each entity''' which we want editable. Doing this manually would be too time-consuming, so there are automated Workbench plugins which can take care of that.

== Create Placeable Prefabs ==

=== Existing Prefab ===

Prefabs which exist even without their use in the editor, e.g., soldiers, vehicles, props, houses, etc, can be parsed using '''Create/Update Selected Editable Prefabs''' plugin. Behaviour of this plugin is controlled by {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Workbench/EditablePrefabs/EditablePrefabsConfig.conf}} config, which can be modified in plugin's settings ('''''Plugins > Settings > Create/Update Selected Editable Prefabs''''').

==== Preparation ==== [[File:armareforger-editorPreviewTemplate.png|100px|thumb|left]] Before using this plugin, it is necessary to modify one property in {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Workbench/EditablePrefabs/EditablePrefabsConfig.conf}} - '''Image Placeholder'''. To do so, use [[Arma_Reforger:Data_Modding_Basics#Using_.22Override_in....22_function|'''Override in addon''']] functionality on that file and then open it in '''Resource Manager'''. By default, this config is using a texture which is in packed state and plugin requires that '''source file (png picture) exist'''. Since packed data is missing source files, this property have to point to some registered resource which is using PNG as source.

{{Feature|important|If '''Image Placeholder''' is not configured properly then placeholder images will be simply not created, and {{Link|Arma Reforger:Game Master: Image Generation Tutorial|Preview Image generation}} will not be working as intended!}}

Alternatively, it is also possible to use '''editorPreviewTemplate.png''' from this page and place it in '''UI/Textures/EditorPreviews/System''' folder inside the addon you are working on and register it. After that, plugin should be able to use that texture and generate placeholder preview images for you.

{{Clear}} ==== Select ==== In Resource Browser, '''select prefab files''' (*.et) of entities you want to process. Default {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Workbench/EditablePrefabs/EditablePrefabsConfig.conf}} ignores prefabs with {{hl|_base}}, {{hl|_Base}}, {{hl|_dst}}, {{hl|_Dst}} or {{hl|_DST}} suffixes.

Check editable entity types to see which prefabs should be marked as editable.

{{Feature|informative|Both Resource Manager and World Editor browsers are supported, but not Resource Manager 2.}}

==== Create ==== [[File:armareforger-gm-registering-plugin.jpg|right|thumb|800px|Usage of In-game Editor plugins]] With files selected, activate '''''Plugins > In-game Editor > Create/Update Selected Editable Prefabs'''''

{{Feature|informative|You can also press {{Controls|Ctrl|Shift|U}} to perform this action.}}

After the operation is done, please check the log, it will list all processed prefabs. They can end up with one of the following states:

* '''Created / Updated''' - successful processed * '''Failed''' - unable to generate the prefab, most commonly due to presence of child entity with '''RplComponent''' * '''Non-editable''' - some child entities which don't have editable prefab variant were detected. Please revise them and consider if some of them could be made editable as well.

If prefab creation succeeded, following things will happen: * New files, with '''E_''' '''prefix''', will be made in '''PrefabsEditable/Auto''' (except vehicles and characters - this is controlled by {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Workbench/EditablePrefabs/EditablePrefabsConfig.conf}}) as well as '''UI/Textures/EditorPreviews/Auto''' folders. * Display name, which is visible in for instance in-game editor Asset Browser, will be adjusted according to rules stored in {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Workbench/EditablePrefabs/EditablePrefabsConfig.conf}}. By default '''Name''' property will use following scheme ''#AR-EditableEntity_%1_Name'' where %1 is prefab filename. Such localised string can be later added to {{Link|Arma Reforger:Mod Localisation|String Tables}} {{Feature|informative|Consider changing default string prefix for your assets from '''AR''' to your {{Link|Scripting Tags|personal tag}} to avoid string clashes.}} * Editable prefabs will get proper '''Editable Component''', appropriate to its type - (either '''{{Link/Enfusion|armaR|SCR_EditableEntityComponent}}''', '''{{Link/Enfusion|armaR|SCR_EditableCharacterComponent}}''', '''{{Link/Enfusion|armaR|SCR_EditableVehicleComponent}}''' or '''{{Link/Enfusion|armaR|SCR_EditableGroupComponent}}''') * Some of the '''labels''' will be automatically assigned to prefab depending on their type. Rules for assigning labels are defined in {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Workbench/EditablePrefabs/EditablePrefabsConfig.conf}}

Once editable variants are generated, it possible to generate proper Preview Images by following instructions from [[Arma_Reforger:Game_Master:_Image_Generation_Tutorial]] page.

==== Maintain ==== Editable prefabs needs to be regenerated every time the source prefab changes. This can be achieved by several ways:

* Activate '''''Plugins > In-game Editor > Update All Editable Prefabs''''' ** This will update all auto-generated editable prefabs. ** It will also handle renamed / moved / deleted source prefabs (enable '''Only File Changes''' attribute to perform this operation only). * Select an editable or a source prefab and activate '''''Plugins > In-game Editor > Create/Update Selected Editable Prefabs'''''

{{Clear}} === Custom Prefab ===

Prefabs created specifically for the editor, e.g., slots, comments, etc.

==== Configure ==== When setting-up the entity in World Editor, add following component prefabs to make it editable:

* {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Editor/Components/Default_RplComponent.ct}} * {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Editor/Components/Default_SCR_EditableEntityComponent.ct}}

{{Feature|informative|You can also add the components a new, without relying on prefabs. Do so only if you understand what they do and how to configure them.}}

{{Feature|informative| In this article, '''Enfusion links''' are used. With those links it is possible to open specific resource just by simply clicking on that link. Enfusion links '''has to be manually activated in Workbench options''' (Workbench -> Options -> Workbench -> Register "enfusion://" protocol) before it can be used. }}

==== Choose Directory ==== Before turning the entity into prefab, select a directory where to create it.

All prefabs must be placed in '''PrefabsEditable''' folder in data root.

Inside, pick a folder which suits the entity the best. Do not create anything in '''Auto''' folder manually, it would get removed during the next auto-generation process!

==== Create Prefab ==== Create a new prefab by dragging the entity from World Editor into desired directory.

When asked for file name, include '''E_''' prefix, e.g., ''E_MyEntity.et.''

The prefix helps to distinguish editable prefabs from non-editable ones.

== Register Placeable Prefabs ==

Editable entities must be registered in order to appear in content browser.

=== Create Registry Config ===

In '''Configs/Editor/PlaceableEntities''', create a config of type '''{{Link/Enfusion|armaR|SCR_PlaceableEntitiesRegistry}}'''.

Set '''Source Directory''' to folder where editable entity prefabs are placed. To make versioning easier, use more specialised registries (e.g., Vehicles, Props, etc.) rather than a few ones.

==== Add the Registry to Edit Mode ==== Open {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Editor/Modes/EditorModeEdit.et}} in Prefab editing mode (e.g, ''RMB > Edit Prefab''), select '''SCR_PlacingEditorComponent''' and drag the registry config to '''Registries''' array.

{{Feature|important|If you haven't done it before, create override in your addon of '''EditorModeEdit.et''' ! See [[Arma_Reforger:Asset_Browser_Mod_Integration#Using_Override_in_functionality||Asset Browser Mod Integration]] page for more details.}}

==== Register Entities ==== In Resource Manager, activate '''''Plugins > In-game Editor > Register Placeable Entities...'''''

Choose the registry config and confirm. The plugin will register every editable entity prefab flagged as '''PLACEABLE''' inside the folder.

Repeat this step every time some prefabs in the folder are added, removed or renamed.

{{Feature|informative|All editable entities which use component prefab {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Editor/Components/Default_SCR_EditableEntityComponent.ct}} are already flagged as PLACEABLE.}}

{{GameCategory|armaR|Modding|Game Master|Tutorials}}
fv4d7atnw8h4y0uq0wy20lh34z9gi6n

# Arma Reforger:Game Master: Entity Property Creation

5050
34258
370952
364667
2025-02-26T12:31:55Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370952
wikitext
text/x-wiki
{{TOC|side}} '''Entity Properties''' are properties the [[Arma Reforger:Game Master|Game Master]] can modify by using the Edit Properties option on an entity; the properties can be fuel, health, bleeding etc. This guide will help in setting up these Properties and how to create a custom property layout.

== Preparation ==

There are a few questions to be considered regarding properties:

; What will the property affect/edit : Properties always need a replicated target. In most cases this are entities such as Characters, Vehicles and so on. In some cases for more global usage the Game Mode is the target (or the respawn component for Game End Attributes).

: If a property targets a specific entity then it generally edits that entity's properties (like character health), whereas more global properties that use the Game Mode as a target tend to use it to make sure that all the properties are in one place but then get other components (like the {{Link/Enfusion|armaR|TimeAndWeatherManagerEntity}} or the {{Link/Enfusion|armaR|RespawnComponent}}) to actually change settings (so this is outside of the game mode rather then the gamemode itself).

; In which mode(s) will the property be available : In general properties are specific to an editor mode. Like changing a player character's health can only be done in Edit mode whereas changing the player's access to modes can only be done in Admin mode.

; The type of layout : Will the property modification UI be a drop-down, checkbox, slider or maybe even something more custom.

Have all these questions been addressed? Good! This guide will now explain the creation of a simple property as well as a custom property layout.

{{Feature|informative|In game files, '''Properties''' are called '''Attributes'''.}}

== Script Creation ==

=== Base Classes ===

Attribute scripts are located in {{hl|Data\scripts\Game\Editor\Containers\Attributes}}.

{| class="wikitable" ! Class ! Description |- | {{Link/Enfusion|armaR|SCR_RespawnEnabledEditorAttribute}} | * Global attribute * Uses a Bool |- | {{Link/Enfusion|armaR|SCR_AmbientSoundToggleEditorAttribute}} | * Global attribute * Uses a Bool |- | {{Link/Enfusion|armaR|SCR_FuelEditorAttribute}} | * Entity attribute * Uses a Float |- | {{Link/Enfusion|armaR|SCR_PlayableFactionsEditorAttribute}} | * Button attribute * Slightly more advanced * Uses an Int as flag |}

=== Methods ===

{| class="wikitable valign-top" ! Method ! style="width: 30em" | Description ! Usage |- | <enforce inline>ReadVariable()</enforce> | This is where the attribute variable is created, somewhat equal to an init combined with the <enforce inline>ShouldShow</enforce> method.

The attributeVar is the variable that the Attribute layout will get and set. Event though there are type-dedicated static methods (<enforce inline>CreateInt</enforce>, <enforce inline>CreateBool</enforce>, <enforce inline>CreateFloat</enforce> and <enforce inline>CreateVector</enforce>), data will always be saved as a Vector. | # Check if the Managed item is the item your attribute uses #* If not return null # Check if any other scripts that the attributes need to exist; e.g editorManager or Respawn component #* If not return null # If it passes the tests above then you will create your AttributeVar. Do this by using one of the following methods:<enforce> return SCR_BaseEditorAttributeVar.CreateInt(YOUR_INT); return SCR_BaseEditorAttributeVar.CreateBool(YOUR_BOOL); return SCR_BaseEditorAttributeVar.CreateFloat(YOUR_FLOAT); return SCR_BaseEditorAttributeVar.CreateVector(YOUR_VECTOR); </enforce> # The attribute will now be displayed as it will return the {{Link/Enfusion|armaR|SCR_BaseEditorAttributeVar}} instead of null. |- | <enforce inline>WriteVariable()</enforce> | Similar to <enforce inline>ReadVariable()</enforce> but instead this is where you actually get the changed {{Link/Enfusion|armaR|SCR_BaseEditorAttributeVar}} to set it again.

Note that AttributeVars that were not changed by the user will never get their <enforce inline>WriteVariable()</enforce> called. The system will handle this. | # First add a safety if the var exists.<enforce> if (!var) return; </enforce> # Same as the checks for any scripts that this attribute needs which you checked in <enforce inline>ReadVariable()</enforce> #* If you needed editorManager then once again check if it exists else return # Once that is done you can use the AttributeVar to get the get variable again you set in a similar way:<enforce> var.GetInt(); var.GetBool(); var.GetFloat(); var.GetVector(); </enforce> # Use these var to change anything in the component/entity you want |- | <enforce inline>GetEntries()</enforce> | Use this to send over any additional data for the attribute. Think of the buttons that need to be displayed or the min, max and steps of the slider. Note that this is not replicated even if using the IsServer value (See {{Link|#Config Modding}} below) | Most existing scripts already handle this data as they inherit from:

* {{Link/Enfusion|armaR|SCR_BasePresetsEditorAttribute}} - used for buttons * {{Link/Enfusion|armaR|SCR_BaseMultiSelectPresetsEditorAttribute}} - used for multi select buttons * {{Link/Enfusion|armaR|SCR_BaseFloatValueHolderEditorAttribute}} - used for drop downs and Spin boxes * {{Link/Enfusion|armaR|SCR_BaseValueListEditorAttribute}} - used for sliders |- | <enforce inline>PreviewVariable()</enforce> | Is called every time the variable is set via the user input; use this if you want to display previews | See {{Link/Enfusion|armaR|SCR_WeatherInstantEditorAttribute}} how it is used there |}

== Layout Selection ==

Most of the times, the default layouts will be enough to cover an attribute. Attribute layouts are located in {{hl|UI\layouts\Editor\Attributes\AttributePrefabs}}.

{| class="wikitable" ! Layout ! Variable Type ! Description |- | {{Link|enfusion://ResourceManager/~ArmaReforger:UI/layouts/Editor/Attributes/AttributePrefabs/AttributePrefab_Checkbox.layout|AttributePrefab_Checkbox.layout}} | Bool | A simple true/false checkbox |- | {{Link|enfusion://ResourceManager/~ArmaReforger:UI/layouts/Editor/Attributes/AttributePrefabs/AttributePrefab_Slider.layout|AttributePrefab_Slider.layout}} | Float | A slider which sets a float |- | {{Link|enfusion://ResourceManager/~ArmaReforger:UI/layouts/Editor/Attributes/AttributePrefabs/AttributePrefab_Dropdown.layout|AttributePrefab_Dropdown.layout}} | Int | Gets an array of elements and uses int as index and only one element can be selected |- | {{Link|enfusion://ResourceManager/~ArmaReforger:UI/layouts/Editor/Attributes/AttributePrefabs/AttributePrefab_Spinbox.layout|AttributePrefab_Spinbox.layout}} | Int | Gets an array of elements and uses int as index and only one element can be selected |- | {{Link|enfusion://ResourceManager/~ArmaReforger:UI/layouts/Editor/Attributes/AttributePrefabs/AttributePrefab_ButtonBox_Selection.layout|AttributePrefab_ButtonBox_Selection.layout}} | Int | Gets an array of elements and uses int as index and only one element can be selected |- | {{Link|enfusion://ResourceManager/~ArmaReforger:UI/layouts/Editor/Attributes/AttributePrefabs/AttributePrefab_ButtonBox_MultiSelection.layout|AttributePrefab_ButtonBox_MultiSelection.layout}} | Vector | A bit more complicated as it uses flags to allow multiselection of elements (buttons) |}

=== Layout Creation ===

# Create a new layout # Drag in {{Link|enfusion://ResourceManager/~ArmaReforger:UI/layouts/Editor/Attributes/Attributes.layout|Attributes.layout}} as a child. This takes care of all the sizing, descriptions, locking and unlocking attributes when multi editing entities and so on. # Locate the {{hl|AttributeHolder}} widget within the Hierarchy. This is where we will be adding the actual unique attribute. # The attribute system uses the widget library, so the {{Link|enfusion://ResourceManager/~ArmaReforger:UI/layouts/WidgetLibrary/WLib_Slider.layout|WLib_Slider.layout}} slider will be used for the example.<!-- --> Drag this to the new attribute layout and set it as a child of the AttributeHolder Widget.<!-- -->{{Feature|informative| It is also possible to create a more custom layout; check {{Link|enfusion://ResourceManager/~ArmaReforger:UI/layouts/Editor/Attributes/Date/Date.layout|Date.layout}} for a very custom attribute,<!-- --> although it still uses the widget library for the elements within it. }} # It is time to add the layout component to the widget's root - the Slider one already exists and we can add it: {{Link/Enfusion|armaR|SCR_SliderEditorAttributeUIComponent}}. Note that each attribute variable type will have its layout script and you might want to have your own custom script here. # Lastly we will need to fill in the variables. Some of them are already filled in. :: {| class="wikitable" ! Variable ! Description |- | UI Component Name | This is the name of the widget added to the Attribute Holder - "SliderRoot0" in the case of our slider |- | Conflicting Attribute UI Info | Set the Class by pressing the button and fill it in the same as the image or use the drop down below to fill in the the variables of the UIInfo. The system will complain if these fields are not filled in as well as if it is not a global attribute.

Copy the following to the UI info to make sure it is filled in correctly. You can also check the existing attributes as examples. * '''Description''': {{hl|#AR-Editor_AttributeConflicting_Description}} * '''Icon''': {{Link|enfusion://ResourceManager/~ArmaReforger:UI/Textures/Editor/Attributes/Attribute_Locked.edds|Attribute_Locked.edds}}

{{Feature|informative|This system may be refactored, changed or removed in the future as it needs to be filled for every new attribute and it is prone to mistakes.}} |}

== Layout Scripting ==

We will go over some methods of the layout script. Each of the above layouts have their own scripts that inherit from {{Link/Enfusion|armaR|SCR_BaseEditorAttributeUIComponent}}.

{| class="wikitable" ! Method ! Description |- | <enforce inline>Init()</enforce> | This is where the system can get any data sent ''via'' the <enforce inline>GetEntries()</enforce> method |- | <enforce inline>SetVariableToDefaultValue()</enforce> | This is the value displayed if multi selecting entities and those entities have conflicting values for the same attribute |- | <enforce inline>SetFromVar()</enforce> | This is called on init and reset and sets the attribute UI to the actual value of the AttributeVar |- | <enforce inline>OnChange()</enforce> | Use this method to get and then set the AttributeVar eg: <enforce inline>var.SetBool(x);</enforce> |}

== Config Modding ==

=== Add to Config ===

With the knowledge above you can create a basic Bool attribute. In Script Editor, create a new attribute script which inherits from {{Link/Enfusion|armaR|SCR_BaseEditorAttribute}}. Take {{Link/Enfusion|armaR|SCR_RespawnEnabledEditorAttribute}} as an example (<enforce inline>ReadVariable()</enforce> and <enforce inline>WriteVariable()</enforce> methods only). Once the attribute is made, locate the config to which you want to add the attribute. Locate the correct config to which to add the attribute; attribute configs are located in {{hl|Data\Configs\Editor\AttributeLists}}.

{| class="wikitable" ! Config ! Description |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Editor/AttributeLists/Edit.conf|Edit.conf}} | The default editor mode a.k.a [[Arma Reforger:Game Master|Game Master]] mode. This is typically the mode to which you want to add most of the new attributes. The fact that any player can technically become Game Master must be considered. |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Editor/AttributeLists/Photo.conf|Photo.conf}} | This is the photomode all players (by default) have access to. It typically has only global attributes. |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Editor/AttributeLists/Edit.conf|Admin.conf}} | This is the admin mode to which only server admins (host or config-declared admins) have access. Here should be added any attribute that should be handled with care, e.g setting mode access for all players. |}

Open the config, click the '''+''' button and select the wanted attribute class.

=== Fill UI Info ===

Press the "Set Class" button to create the UI Info for the attribute. {| class="wikitable" ! Variable ! Description |- | Name | The name of the attribute |- | Description | Displayed when focusing on the attribute to explain what the attribute does |- | Icon | Only used if using the <enforce inline>OverrideDescription()</enforce>, this will display an icon in front of the description |- | Description Icon Color | Used in combination with Icon and sets the color of said icon when displayed |}

=== Additional Properties ===

The following are some additional attribute variables that are required as well as some more advanced attributes and their variables.

{| class="wikitable" ! Variable ! Description |- | Is Server | If the <enforce inline>ReadVariable()</enforce> and <enforce inline>WriteVariable()</enforce> are only called on server. Take note that it does not affect most other methods, those are still called on client like <enforce inline>GetEntries()</enforce> and <enforce inline>PreviewVariable()</enforce>. |- | Category Config | This determents which tap in the attribute UI the attribute is displayed. Currently all attribute categories are listed in {{hl|Data\Configs\Editor\AttributeCategories}} |- | Layout | This is the layout as described in the steps above |}

==== Slider ==== Inherit from {{Link/Enfusion|armaR|SCR_BaseValueListEditorAttribute}} to easily use sliders - this will provide the following variables:

{| class="wikitable" ! Variable ! Description |- | Slider Value formating | How the slider value will be displayed, {{hl|%1}} being the float value |- | Min | The minimum value of the slider |- | Max | The maximum value of the slider |- | Steps | Each step of the slider will add/remove this amount |- | Decimals | When displaying the value how many decimals are shown |}

Note that theses values can be set within the <enforce inline>GetEntries()</enforce> so you do not need to fill them in the config.

==== Dropdown/Spinbox ==== Inherit from {{Link/Enfusion|armaR|SCR_BaseFloatValueHolderEditorAttribute}} for Dropdowns and Spinboxes. This will give you a Values array. Each element in the array correspond with an element in the Dropdown/Spinbox. As with all these you do not need to fill in the array within the config but instead dynamically fill it in within the <enforce inline>GetEntries()</enforce> method. {| class="wikitable" ! Variable ! Description |- | Icon | Not supported by default for dropdowns and spinboxes |- | Entry name | Name of element as displayed in dropdown/spinbox |- | Entry Description | Not supported by default for spinboxes and dropdowns |- | Float value | This value can be obtained within the <enforce inline>WriteVariable()</enforce> using the <enforce inline>AttributeVar.GetInt</enforce> as index |}

{{Feature|informative| Check the <enforce inline>GetEntries()</enforce> method in {{Link/Enfusion|armaR|SCR_WindDirectionEditorAttribute}} to see a dynamically filled-in array, and check {{Link/Enfusion|armaR|SCR_KillfeedTypeEditorAttribute}} to see how to set up an Enum array that does not count up from 0 as by default the attribute works with indexes and not enum values. }}

==== Selection Button ==== A selection button only allows for one button to be selected at the time. Inherent from SCR_BasePresetsEditorAttribute to use this. {| class="wikitable" ! Variable ! Description |- | Values | See {{Link|#Dropdown/Spinbox}} as it is mostly the same. It is highly advised to fill this dynamically. Use <enforce inline>CreatePresets()</enforce> for this. |- | Values > Icon | Icon of element within the button if "Use Icon" (below) is true |- | Values > Description | If hovering over the button this is the description given. This means the user can get some more information about what each button does. Only shown if Has "Button Description: (below) is true. And will be %1 within the "Button Description" string (below) |- | Buttons On Row | How many buttons will be displayed on one row |- | Has Randomise Button | Will have a randomise button that if selected will select any of the other buttons at random |- | Randomise button Icon | The icon used for the randomise button |- | Use Icon | It will use the Icon used in the Values array if true. Else it will add the Name as text |- | Button Description | The description shown when hovering over buttons. %1 param that is filled in with the Element Description |- | Button Height | Height of the buttons |}

==== Multiselection Button ==== This is the most complicated of the attribute types as it uses flags to set values, though there is some support for this. Inherit from {{Link/Enfusion|armaR|SCR_BaseMultiSelectPresetsEditorAttribute}} which has methods to convert an array of bools to flags and converting the flags back to a readable array of bools. Check {{Link/Enfusion|armaR|SCR_PlayableFactionsEditorAttribute}} for a use case. The most important part is that <enforce inline>super.ReadVariable()</enforce> and <enforce inline>super.WriteVariable()</enforce> need to be called at the right locations.

You can also use custom flags instead of an array of bools. See {{Link/Enfusion|armaR|SCR_ModesEditorAttribute}} and the layout component {{Link/Enfusion|armaR|SCR_OverrideModesEditorAttributeUIComponent}} for a use case.

We will not go into further details, just know that the variables in the config are the same as {{Link|#Selection Button}} - only the layout is different.

=== Dynamic Description ===

The Dynamic Description system changes the attribute's description depending on its value. It is great if you want to warn the player that something major will happen if the attribute changes are applied, like setting a character's blood to 0 will kill the character. It is possible to have multiple descriptions.

==== Variables ==== Some base variables to highlight:

{| class="wikitable" ! Variable ! Description |- | Description Display info | This is similar to the attribute UI info and the variables: description, Icon and color are used to display the description. Only Description is required. |- | Enabled | If false, the description will never show. |- | Only Show if Condition Changed | This is available for most base attributes (though not always available for custom)

If true it will only set the description if the value changed. If you open the attributes and the Dynamic description is valid to display it will not if this is set to true, only when it is set to it. |}

==== Classes ==== {| class="wikitable" | {{Link/Enfusion|armaR|SCR_BoolAttributeDynamicDescription}} | Shows a custom description if the bool value is met (either true or false) and mainly used for checkboxes. |- | {{Link/Enfusion|armaR|SCR_ValueAttributeDynamicDescription}} | Shows a custom description if a specific value is met. This could be anywhere to if the value equals, greater than, less than etc. |}

{{GameCategory|armaR|Modding|Game Master|Tutorials}}
aulrair3ai09tnvcjytak38h6t3q41r

# Arma Reforger:Game Master: Entity Tooltip Creation

5050
34260
370985
336996
2025-02-26T12:32:02Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370985
wikitext
text/x-wiki
[[File:armareforger_entity-tooltip-example.png|thumb|An entity tooltip in action.]]

This is a step by step guide on how to create tooltips for Entities that can be viewed when focusing on Editable Entities in [[Arma Reforger:Game Master|Game Master]].

The entity name as well as the icon and image are set within the {{Link/Enfusion|armaR|SCR_EditableEntityComponent}} on the (editable) entity itself.

== Script Creation ==

Create a new class inheriting from {{Link/Enfusion|armaR|SCR_EntityTooltipDetail}} in {{hl|Data\scripts\Game\Editor\UI\Components\Tooltips\Tooltips\Details}}.

There are a few methods that are important for a basic tooltip detail:

{| class="wikitable" ! Method ! Description |- | <enforce inline>InitDetail()</enforce> | This method checks if the tooltip can be displayed as well as getting any references to the (content) layout part of the tooltip detail using the given widget. Return true if the tooltip is to be displayed. Note that once the condition is met the tooltip detail cannot be hidden until the player stops focusing on the entity, so take that into account. |- | <enforce inline>NeedUpdate()</enforce> | It will update the tooltip detail if you return it true. |- | <enforce inline>UpdateDetail()</enforce> | This is called after init and if <enforce inline>NeedUpdate()</enforce> returns true. Here you can update the content part of the tooltip detail by changing the widgets. |}

== Config Modding ==

Open the Entity Tooltip config {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Editor/Tooltips/EntityTooltips.conf|EntityTooltips.conf}} located in {{hl|\Data\Configs\Editor\Tooltips}}; all entity tooltips share the same config.

The Entity Tooltip config holds an array of all Editable Entity types. Each Entity Type has their own tooltips that are displayed when hovering over it. Each of the Entity Type elements holds once again an array of tooltip Details. Generally each line you see in the tooltip is its own detail that can be shown, hidden and changed depending on the entity conditions.<br> The layout of a tooltip detail is divided into two parts: the '''label''' layout and the '''content''' layout.

{| class="wikitable" ! Layout ! Description |- | Label | The label is spawned by default and holds the Display Name of the tooltip detail as well as a widget which will hold the content layout. |- | Content | This is the more unique part of the tooltip which you can change. In general this is a Text widget but it can be anything you like such as a slider. |}

=== Add to Config ===

Locate the correct entity type with which to display the tooltip detail. Add the tooltip detail within their array - note that the order in the array is the same as displayed in the actual tooltip.

Make sure to set the following default variables: {| class="wikitable" ! Variable ! Description |- | Display Name | This is the display name which will be shown on the label of the tooltip detail |- | Layout | This is the actual content of the tooltip detail. (<enforce inline>InitDetail()</enforce> has a reference to this Widget) You can use any of the existing Layouts ({{hl|\Data\UI\layouts\Editor\Tooltips\TooltipPrefabs\}}) or create your own. |- | Show Label | If false it will not show a label. Display Name in this case is not needed as it is hidden. |}

{{Feature|informative|Most tooltip details have more variables than the default, be sure to check them for examples.}}

{{GameCategory|armaR|Modding|Game Master|Tutorials}}
ehb7x7h164p027qv7uadvxhlvzqihib

# Arma Reforger:Game Master: Image Generation Tutorial

5050
32858
376016
370949
2025-07-21T13:49:22Z
Lou Montana
10739
Some wiki formatting
376016
wikitext
text/x-wiki
{{TOC|side}} Preview Images are special types of automatically generated images used in for instance '''Game Master Asset Browser'''.

Scripts described in this tutorial will attempt to pick most appropriate background and camera settings for selected prefab and then, it will replace '''existing PNG''' file next to '''already existing EDDS''' file defined in '''Image''' property located inside editable entity component (depending on the type of the asset, it can be '''SCR_EditableEntityComponent''' , '''SCR_EditableCharacterComponent''', '''SCR_EditableVehicleComponent''' or '''SCR_EditableGroupComponent'''). By default, automatically generated Preview Images are located in '''UI/Textures/EditorPreviews/Auto ''' folder.

{{Feature|important|Therefore, it is '''required to run [[Arma_Reforger:Game_Master:_Editable_Entities_Configuration | Create/Update Selected Editable Prefabs plugin]]''' or manually add that component to the asset if it is missing (f.e. when doing some character or vehicle prefab which doesn't inherit from existing base prefabs) before trying to generate the images. '''Create/Update Selected Editable Prefabs''' plugin will take care of creating appropriate Editable Component, creating editable variant (when it is necessary) and will generate placeholder preview images which can be later replaced via this script. }}

In case some non standard asset need an image, then it is possible to create [[#Configure World| custom world]] with user selected camera parameters.

= Generating Preview Images =

== Load World ==

In World Editor, load [enfusion://WorldEditor/worlds/Editor/Slots/AssetImages/Eden_AssetImages.ent;5896.25,225.667,7097.26;-34.9951,53.0787,0 Worlds/Editor/Slots/AssetImages/Eden_AssetImages.ent] == Adjust Screen Resolution ==

Select '''SCR_EditorImageGeneratorEntity''' in default layer. Doing so will show current and target resolution in top left corner. Readjust the viewport to make values match.

[[File:armareforger-gm-image-generation-adjust-viewport.mp4||thumb |200px |alt=A spacesuited astronaut slowly climbs down a ladder on a complicated metal structure, and then hops the last step onto a bright terrain.|Television clip of Buzz descending the ladder and stepping onto the Moon.]]

{{Feature|informative|If the viewport cannot be made narrow enough, force it to 4:3 resolution in ''Camera > View Aspect Ratio > 4:3''}}

{{Feature|warning| * The default value of 400x300 should be maintained, as otherwise image stretching or resolution issues might appear in the .edds file * If you have problems with generating pictures even though '''Current resolution''' matches '''Target resolution''' then make sure you are using '''100% display scale''' in Windows display settings. }}

== Select Prefabs ==

In World Editor's resource browser, select prefabs (*.et) you want to capture.

Don't worry about selecting extra files like prefabs of parts of *.conf files, they will simply be ignored.

[[Image:armareforger-gm-image-generation-select-prefabs.png|800px]]

== Play ==

Play the world. The system will spawn all selected prefabs one by one and take a screenshot of each of them.

{{Feature|informative|The system will spawn the entities on locations with matching labels. If the location does not match, or no location can be found, check the labels in the ''EditableEntityComponent'' of the prefab you are trying to capture images of.

Note that this component only exists on Editable versions of prefabs, with the exception of ''Characters'', ''Groups'', and ''Vehicles''. Because of this it is important to select the right prefab type when taking images.}}{{Feature|important|When prompted, in '''Script Authorization Required''' window click '''Yes to All''', in order to give necessary privileges to preview images generator plugin. Alternatively it is possible to use [[Arma_Reforger:Startup_Parameters#scriptAuthorizeAll|scriptAuthorizeAll]] startup parameter.}} = Configuring Custom World =

In case you would like to create custom world for preview images, following steps have to performed.

{{Feature|informative|In case of troubles, [enfusion://WorldEditor/~worlds/Editor/Slots/AssetImages/Eden_AssetImages.ent ''worlds\Editor\Slots\AssetImages\Eden_AssetImages.ent''] can be used as an example how prepare world for '''Preview Images''' generation.}}

== Create Manager ==

Insert '''SCR_EditorImageGeneratorEntity''' in the world.

== Create a Position ==

Insert '''SCR_EditorImagePositionEntity''' in the world.

* Set to entities of which labels it belongs, as well as time and weather used when the position is activated. ** A position is selected when all its labels are part of the queried prefab. Any extra labels the prefab may have are not taken into consideration. ** Example: A position marked as '''VEHICLE, TRUCK''' will be picked for prefab with '''VEHICLE, TRUCK''', US, GREEN, but not for '''VEHICLE''', CAR, US, GREEN * Optionally set preview mesh used to represent the position. * For groups, place entities of the same type as children of the position entity. Each of these sub-positions will serve as a slot for individual soldier. * For characters, or characters in groups, animation poses can be configured ** Select the right source by configuring the ''Graph'', ''Instance'', and ''Start Node'' ** Set the ID to set up the desired pose ** Force weapon type if the character might not hold this weapon by default. ''E.g. an AT Soldier'' * It is recommended to give the image position a name which helps identifying the position in the hierarchy.

== Create a Camera ==

Insert '''SCR_CameraBase''' as a child of the position entity and add '''Hierarchy''' component to it.

* Use ''Set entity to view orientation'' plugin to move the camera to where World Editor's camera is. This will copy only position and rotation, not FOV! * Optionally add '''SCR_PostProcessCameraComponent''' with custom post-process effects. * Enable ''Show Debug View Cone'' to see where the camera is pointed to even in World Editor.

== Test the Position ==

Play the world with desired position entity selected. This will activate only this position, while ignoring all the others.

You still need compatible prefabs selected in '''World Editor's''' resource browser.

== Repeat ==

Return back to [[#Create a position|create position]] paragraph and place as many positions as you need to cover all prefabs.

{{GameCategory|armaR|Modding|Game Master|Tutorials}}
9vixynakpehj3wrhcz8dnbxblrdco8t

# Arma Reforger:Game Master: Toolbar Action Creation

5050
34261
370978
337001
2025-02-26T12:32:01Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370978
wikitext
text/x-wiki
{{TOC|side}} We will be creating a specific General Toolbar action. The Faction and Command toolbars are quite similar to the General Toolbar and we will touch upon them as well though these also interact with either the faction or the AI group.

== Script Creation ==

As we will be creating a general toolbar action we will need to inherit from one of the Toolbar classes:

{| class="wikitable" ! Class ! Description |- | {{Link/Enfusion|armaR|SCR_EditorToolbarAction}} | Basic functionality for toolbar actions. You click the button and something happens, very similar to Context actions (see also [[Arma Reforger:Game Master: Context Action Creation|Context Action Creation tutorial]]) |- | {{Link/Enfusion|armaR|SCR_BaseToggleToolbarAction}} | A toggle action which can be toggled and untoggled; though in general the functionality is quite similar to SCR_EditorToolbarAction |- | {{Link/Enfusion|armaR|SCR_BaseCommandAction}} | Used for Faction and Command bar actions that take entity targets and have a built-in function to spawn a prefab. |}

=== Methods ===

There are a few functions to take into account: {| class="wikitable" ! Method ! Description |- | <enforce inline>CanBeShown()</enforce> | Whether or not the action will be shown in the toolbar. The action cannot be performed (not even with shortcut) if it is not shown, but you can set it up in such a way that the action is shown/hidden depending on events. |- | <enforce inline>CanBePerformed()</enforce> | Whether or not the action can be performed. The action cannot be selected or executed if false but the button is still shown. |- | <enforce inline>Perform()</enforce> | Here you actually execute the action. Write the code to bed performed here. |- | <enforce inline>IsServer()</enforce> | Set the return value to true/false if you want the action to be executed on server/locally |- | <enforce inline>Track()</enforce> | {{Link/Enfusion|armaR|SCR_BaseToggleToolbarAction}} only. Track events which influence the action. |- | <enforce inline>Untrack()</enforce> | {{Link/Enfusion|armaR|SCR_BaseToggleToolbarAction}} only. Untrack events which influence the action. |- | <enforce inline>Toggle()</enforce> | {{Link/Enfusion|armaR|SCR_BaseToggleToolbarAction}} only. Toggle action state. To be called by inherited classes. |}

== Config Modding ==

=== Add to Config ===

Locate the wanted config in which you want to create your Toolbar Action, and press the '''+''' button to add a new item to its array.

{| class="wikitable" ! Folder ! Config ! Description |- | rowspan="4" | {{hl|Data\Configs\Editor\ActionLists\Toolbar}} | {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Editor/ActionLists/Toolbar/EditToolbar.conf|EditToolbar.conf}} | General Toolbar for Edit mode |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Editor/ActionLists/Toolbar/PhotoToolbar.conf|PhotoToolbar.conf}} | General Toolbar for Photo mode |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Editor/ActionLists/Toolbar/AdminToolbar.conf|AdminToolbar.conf}} | General Toolbar for Admin mode |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Editor/ActionLists/Toolbar/SharedToolbar.conf|SharedToolbar.conf}} | Toolbar actions that are shared between all the above modes |- | {{hl|Data\Configs\Editor\ActionLists\Command}} | {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Editor/ActionLists/Command/Command.conf|Command.conf}} | Toolbar for both Faction as well as Command |}

=== UI Info ===

Now that the action is added you will have to fill in the variables. We will start with the UI Info. Press the Set Class button and select {{Link/Enfusion|armaR|SCR_UIInfo}} from the list.

This will get you the following UI Info variables to fill in:

{| class="wikitable" ! Variable ! Description |- | Name | Action name |- | Description | Description when focusing on action |- | Icon | Icon of action |}

=== Other Variables ===

{| class="wikitable" ! Variable ! Description |- | Action Group | Makes sure actions are group together. Each enum is their own group divided by a divider. |- | Action Type | Purely visible and decides which widget the action has.

* ACTION: One click executes the action. * TOGGLE: The action can be toggled on and off (Though ACTION can also be used for this) * DYNAMIC: The action is only shown when certain conditions are met. Like placing a character as Player. |- | Command Prefab | {{Link/Enfusion|armaR|SCR_BaseCommandAction}} only. The prefab that will be spawned when toggling the button. |- | Effects | Array of effects when action is performed, things such as Sound and Particle effects. |- | Enable Shortcut Logics | Will allow the "Shortcut" to work if true. You might want to execute the shortcut action from a different location. So "Shortcut" is purely informative. |- | Info Toggled | {{Link/Enfusion|armaR|SCR_BaseToggleToolbarAction}} only. The Name, Description and Icon of a toggled button. |- | Order | This dictates the order of the action within their respected Action Group (They can have no action group). The higher the number the closer the action is in the left compaired to other actions. Actions with the same order are ordered the same as in the config array. |- | Shortcut | Add an Input action name if you want the action also to be executed via short cut. Note that <enforce inline>CanBePerformed()</enforce> will still be checked. |}

{{GameCategory|armaR|Modding|Game Master|Tutorials}}
ohsjbuzw5ee22v11e1o9pi4kkihlbta

# Arma Reforger:Entity Catalog

5050
34541
373674
364668
2025-06-09T16:56:43Z
Lou Montana
10739
Some wiki formatting
373674
wikitext
text/x-wiki
{{TOC|side}} An Entity Catalog is a list of faction-related or not prefabs in order to have one cohesive list of all entities that is used by various systems, as well as unifying the way information can be obtained from said entities without having to spawn the prefab first.

* Faction-related entity catalog can be found in said Faction's config (e.g {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Factions/US.conf|US.conf}}) ** Each faction has their own list with the entities associated with that faction. ** Each entry within the list is a config. Do not edit the lists directly in the faction config but use the Catalog config instead. * Factionless entity catalog can be found on the game mode (in {{Link/Enfusion|armaR|SCR_EntityCatalogManagerComponent}} on {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/MP/Modes/GameMode_Base.et|GameMode_Base.et}}) ** Lists prefabs that do not belong to a specific faction.

== Catalog ==

A catalog holds a collection of entities of a specific type. The Catalog has a '''Catalog Type''', so prefabs listed in the catalog should correspond with the type (e.g Vehicles, Characters, Groups, etc).

There are two Catalog classes:

{| class="wikitable" ! Class ! Description |- | {{Link/Enfusion|armaR|SCR_EntityCatalog}} | This has one list for all entities of that catalog.

{{Feature|informative|See the code documentation as well.}} |- | {{Link/Enfusion|armaR|SCR_EntityCatalogMultiList}} | Similar to {{Link/Enfusion|armaR|SCR_EntityCatalog}} in that it holds an entity list, but different as it can also host sub-lists.

As an example the Inventory Items are in the ITEM catalog but WEAPONS are in a sub-list. Each list has an identifier that should be descriptive of its content (code does not use this identifier so feel free to name it as wanted).

Lists can be created, moved, renamed, deleted as they are merged with the Full entity list on Init. Also note that the General EntityList can still be used as it is not cleared before the merge. |}

== Entity Entry ==

Within the Catalog are the Entity Entries. These entries hold the actual prefab data and are the main entries with which to be working.

=== Entry Info ===

There are a view pieces of info (almost) all entries will share. Different entry classes have different ways to obtain the information, so check the following table to know more about that.

{| class="wikitable valign-top" ! Prefab | The ResourceName of the prefab. |- ! Enabled | * The entry will be removed from the list on init and never checked by the autotest if this is set to false. * Use this for prefabs that are not yet ready for the game but you want to add them to the lists or this can be used for modders to remove some entries |- ! Labels | * {{Link/Enfusion|armaR|EEditableEntityLabel}} labels. The Catalog system supports labels and can quickly get all entries within a catalog that have (or have not) a specific label. * By default this information is obtained from the {{Link/Enfusion|armaR|SCR_EditableEntityComponent}} of the prefab but can also be set manually if the entity is not an EditableEntity. |- ! UI Info | * UI info such as Name, Description and Icon * By default this information is obtained from the {{Link/Enfusion|armaR|SCR_EditableEntityComponent}} of the prefab but can also be set manually if the entity is not an EditableEntity. |- ! Entity Data List | See Below for more information about this but these are essentially "components" with data that is attached to the Entry |}

=== Entry Classes ===

There are different entity entry classes which each are created for a different type of entry. Note these are some examples of how to use them but there are most likely more.

{| class="wikitable" ! Class ! Description |- | {{Link/Enfusion|armaR|SCR_EntityCatalogEntry}} | Editable Entity Prefab. The system will get the UIinfo and the Labels on init from the {{Link/Enfusion|armaR|SCR_EditableEntityComponentClass}} on the prefab and you only need to worry about assigning the prefab and Data.

This is way you can still get the UIInfo and Labels but never have to set them.

{{Feature|important|This prefab '''must''' be an editable entity. Non-Editable entities are not supported for this entry.}} |- | {{Link/Enfusion|armaR|SCR_EntityCatalogEntryNonEditable}} | Base for inheriting to use Non-Editable entry prefabs. '''Do not use directly!'''

The system will show a warning if this class is used. |- | {{Link/Enfusion|armaR|SCR_EntityCatalogEntryCustomInfo}} | Use this entry for non-Editable entities. It allows the user to set a custom UIInfo and Labels.

The labels work the same as the {{Link/Enfusion|armaR|SCR_EntityCatalogEntry}} and you can get all entities with specific (or lacking specific) labels.

Custom UiInfo is required to be added else it will fail the autotest (Unless entry is disabled)

Technically you can also use Editable entities and use this class to overwrite the UIInfo and labels but it is not advised to do. Add a new Entity Data if you want to overwrite the UIInfo or get somespecific data. |- | {{Link/Enfusion|armaR|SCR_EntityCatalogInventoryItem}} | This is used for inventory items.

At this moment it is not possible to get the UIInfo (that is assigned in the InventoryItemComponent) for inventory items so take that into account. |}

== Entry Data ==

This is the real star of the Catalog and allows other devs to customise entries without interfering with other systems that might use the same entries.

Each Entry has an Entity Data list. Data are essentially components of the Entry which contains data specific to systems. Let's say you have an entity spawner and you need to know the Supply cost, you will add a {{Link/Enfusion|armaR|SCR_EntityCatalogSpawnerData}} and put the info in there. <!-- Another system might want to randomly spawn the same entity and needs a weight for the randomisation. Then they can add a RandomizerData to the Entity Data list. Both systems can use the same list with the same entries but for different reasons and with different data. -->

More over the catalog has the <enforce inline>GetEntityListWithData()</enforce> method which allows you to quickly get all entries within the catalog filtered to have the specific Data type. This is a powerful system that makes it so that you do not have to worry about creating your own list of entities, maintaining the list or even having to worry about getting all entries with your data type. Also note there are more <enforce inline methods="GetEntityList">GetEntityList*</enforce> methods to filter on data, labels and so on.

=== Examples ===

Note this is not a full list but simply some examples and might not be up to date

{| class="wikitable" ! Data ! Description |- | {{Link/Enfusion|armaR|SCR_ArsenalItem}} | A rework of the arsenal item. Holds the Item type and item mode. Allowing the item to be spawned within the arsenal. |- | {{Link/Enfusion|armaR|SCR_EntityCatalogSpawnerData}} | Entity spawner data. Allowing the system to get the Supply cost of an entity as well as which Slots it can spawn in, among other things. |}

{{GameCategory|armaR|Modding|Guidelines}}
o2k7gthqw0gxzovnf7ct9f7rsz9y1ol

# Arma Reforger:Game Identity

5050
43628
364618
364617
2024-05-22T12:19:43Z
Lou Montana
10739
Add one-type link precision
364618
wikitext
text/x-wiki
A '''Game Identity''' is a game-related identity that is attached to the person playing.

== Definitions ==

* '''Game Identity''': a Game Identity is created for each game-platform combination on first network connection ([[Steam]] or Xbox) - there can be multiple ones for one player using multiple platforms. * '''{{Name|bi}} Account''': a {{Name|bi}} Account is the general {{Link|https://www.bohemia.net|https://www.bohemia.net}} {{Name|bi}} account - there can be only one per player.

A '''Game Identity''' can be linked to a '''{{Name|bi}} account'''.

{{Feature|important| * Two Game Identities (from two different platforms) linked to the same {{Name|bi}} count as one and the same person and can therefore not connect to the same server. * It is '''not''' possible to link the same platform type multiple times to a {{Name|bi}} account (e.g only one PC Game Identity, one Xbox Game Identity). * It is '''not''' possible for the end user to unlink identities from a {{Name|bi}} account. }}

Linking example: {| class="wikitable" ! Step ! Event |- | Play {{armaR}} on Xbox | A '''Game Identity''' is created on backend's side |- | Link the {{Name|bi}} account | The {{Name|bi}} account is linked to the Game Identity |- | Play {{armaR}} on PC | A '''Game Identity''' is created on backend's side, without BI account information |- | Link the {{Name|bi}} account | {{Name|bi}} account identical information is detected and the '''Game Identities''' are now related.

As of now, the {{armaR}} Steam Identity takes precedence over the Xbox one for {{Link|Arma Reforger:Workshop|Workshop}} publishing purpose. |}

== Scripting ==

The local player's Game Identity ID can be obtained (on clients only; dedicated servers do not have identities) using <enforce inline>BackendApi.GetLocalIdentityId()</enforce>.

A player's Game Identity's ID can be obtained '''server-side''' in script using <enforce inline>BackendApi.GetPlayerIdentityID(int iPlayerId)</enforce>.

{{Feature|informative|{{Name|bi}} Account ID and platformUID (SteamID, XboxUID) are '''not''' accessible by script.}}

{{GameCategory|armaR|Modding|Guidelines}}
g1hs49xm4p78dzllpw4v7hfik1gw7gr

# Arma Reforger:RichText Format

5050
43640
373102
364791
2025-03-31T02:35:58Z
Sa-Matra
9473
373102
wikitext
text/x-wiki
{{TOC|side}} The {{Link/Enfusion|armaR|RichTextWidget}} is a multiline text widget. It is useful for displaying complex text layouts that are composed by text and/or images.

This widget works by parsing an HTML-like markup language, with tags explained below.

== Supported Styling ==

=== Bold ===

Supported by SDF fonts only - for bitmap fonts, it can be simulated with the <nowiki><font></nowiki> tag

; Example <syntaxhighlight lang="html"><b>bold text</b></syntaxhighlight>

=== Italic ===

Supported by SDF fonts only - for bitmap fonts, it can be simulated with the <nowiki><font></nowiki> tag

; Example <syntaxhighlight lang="html"><i>italic text</i></syntaxhighlight>

=== Outline ===

Supported by SDF fonts only.<br> Supports the following attributes: * color: a comma-separated RGBA value (range 0..255) * size: the outline's size

; Example <syntaxhighlight lang="html"><outline color="255,128,0,255" size="5">outlined text</outline></syntaxhighlight>

=== Shadow ===

Tags producing images support a simplified version of shadows where the image is rendered offset and possibly scaled with a solid color. To use images, use {{hl|1= mode="image"}}. {{Feature|informative|Shadow without an offset with increased size can serve as a simple outline.}}

; Example {| | Text: | <syntaxhighlight lang="html"><shadow color="255,0,0" size="5" offset="5,5" opacity="0.5">shadowed text</shadow></syntaxhighlight> |- | Image: | <syntaxhighlight lang="html"><shadow color="255,0,0" offset="5,5" opacity="0.5" mode="image"><image set="{134A30222457B142}UI/Imagesets/game_template.imageset" name="ImageIncubatorLogo" /></shadow></syntaxhighlight> |- | Image outline: | <syntaxhighlight lang="html"><shadow color="255,0,0" size="5" mode="image"><image set="{134A30222457B142}UI/Imagesets/game_template.imageset" name="ImageIncubatorLogo" /></shadow></syntaxhighlight> |}

=== Image ===

Inserts an image from an ImageSet. Both the image name and the image set are case-sensitive. Default scale is 1.0 which means a line height depends on font.

; Example <syntaxhighlight lang="html"><image set="{134A30222457B142}UI/Imagesets/game_template.imageset" name="ImageIncubatorLogo" scale="2" /></syntaxhighlight>

=== Color ===

Changes foreground color.<br> Supported attributes: * rgba: a comma-separated RGB'''A''' value (range 0..255), e.g {{hl|"255,0,0,255"}} for bright red * hex: the colour in '''A''RGB hexadecimal format (e.g {{hl|"0xFF000000"}} for black, {{hl|"0x880000FF"}} for half-transparent blue) * name: supported color names: {{Columns|3| ** {{hl|red}} ** {{hl|green}} ** {{hl|blue}} ** {{hl|cyan}} ** {{hl|magenta}} ** {{hl|yellow}} ** {{hl|black}} ** {{hl|white}} ** {{hl|orange}} ** {{hl|purple}} }}

; Example <syntaxhighlight lang="html"> <color rgba="0,0,255,255">blue text</color> <color hex="0xFFFF6600">orange text</color> <color name="green">green text</color> </syntaxhighlight>

=== Font ===

Renders text with a different font. In case of not finding the supplied font. The text will be rendered with the system font. '<nowiki/>''force''<nowiki/>' property will disable font override by language settings (e.g. in Asian languages is special font used which support Asian characters)

; Example <syntaxhighlight lang="html"><font name="{54A29B2BD9DE5841}UI/Fonts/NotoSans/NotoSansCJK-Light-jp.fnt" force=1>text with NotoSans font</font></syntaxhighlight>

=== Paragraph ===

A text blob that can be aligned.<br> Supported attributes: * {{hl|align}}

; Example <syntaxhighlight lang="html"> <p align="left">normal paragraph</p> <p align="center">centered paragraph!</p> <p align="right">right paragraph!</p> </syntaxhighlight>

=== Header ===

Header paragraphs.<br> Supported attributes: * {{hl|align}} * {{hl|scale}}

; Example: <syntaxhighlight lang="html"> <h align="right" scale="4.0">Paragraph with x4 text scale</h> <h1 align="center"> paragraph with x2 text scale </h1> <h2 align="left"> paragraph with x1.5 text scale </h2> </syntaxhighlight>

=== Line break ===

inserts a line break manually.

; Example <syntaxhighlight lang="html">one line <br /> another line</syntaxhighlight>

=== Unicode Character ===

Inserts a Unicode string defined by UCS codepoints. Fully supported by SDF fonts, partially supported by bitmap fonts. If a codepoint is not found in the glyphset of the current rendering font, a space is likely to be inserted instead. {{Feature|informative| Custom vectorial shapes can be inserted into unused codepoints (see {{Link|https://fontforge.github.io/en-US/|FontForge}}). <!-- See Font Editor for more information. --> }}

; Example <syntaxhighlight lang="html"><ucs codepoints="\u1f600\u1f601\u1f602" /></syntaxhighlight>

=== Action ===

Inserts text or icon of key binded to given action. <!-- See InputAction UI Mapping for more info. --><br> Supported attributes: * {{hl|name}} * {{hl|preset}} * {{hl|mode}} - "image", "text" (default: "image") * {{hl|device}} - "keyboard", "gamepad", "joystick", "track_ir" * {{hl|scale}} - size multiplicator factor (default: 1.0) * {{hl|index}} - if there are more keybinds, shows only specified one (default: 1) * {{hl|hideEmpty}} - if true, nothing is showed when there is no keybind (by default "No keybind" text is showed in this case)

; Example <syntaxhighlight lang="html"> <action name="CharacterFire" scale="1.5" /> <action name="CharacterAction" mode="text" /> <action name="CharacterAction" mode="text" device="keyboard" /> </syntaxhighlight>

=== Key ===

Inserts game control key's text or icon. <!-- See InputAction UI Mapping for more information. -->

; Example <syntaxhighlight lang="html"> <key name="gamepad0:x" scale="1.5" /> <key name="gamepad0:pad_left" mode="text" /> <key name="gamepad0:pad_left" mode="text" device="gamepad" /> </syntaxhighlight>

== Limitations ==

=== Markup ===

The markup hierarchy must not have overlapping tags in order for the parser to work properly. The output will provide a different result than usually expected.

{| class="wikitable" ! Incorrect ! Correct |- | <syntaxhighlight lang="html"><b>bold <i>"bold italic"</b> italic</i></syntaxhighlight> | <syntaxhighlight lang="html"><b>bold <i>"bold italic"</i></b> <i>italic</i></syntaxhighlight> |- | {{hl|'''bold ''"bold italic"'' italic'''}} | {{hl|'''bold ''"bold italic"''''' ''italic''}} |}

=== Performance ===

Fitting the text to its parent rectangle is usually a slow operation; this happens when the options "Exact text" is disabled and "Wrap" is enabled, which will cause the text to be compressed until everything fits in the rectangle. Avoid manipulating the widget in any manner that may trigger a re-wrap (e.g. changing the widget size on runtime, changing the text, etc...) if you have a really long text or a text with a lot of segments (e.g images or a lot of different styles) the performance penalty will be bigger.

{{GameCategory|armaR|Modding|Guidelines}}
73h26t98vru1z3rehphx4hbdo9maads

# Arma Reforger:Textures

5050
32696
352545
347926
2024-02-12T23:18:36Z
PuFu
3461
NHO channel description typo
352545
wikitext
text/x-wiki
{{TOC|side||4}} == Source Image format ==

* preferred image data format is '''TIFF''' (.tif, .tiff) - it provides the best output size and compression. We use RGB Color mode and 8 Bits per channel, image compression ideally LZW. * all other formats (.png, .tga, ...) will work as well, but are not preferred. * recommended settings for saving in Photoshop (for better compatibility reasons across SW): ** Compression Type: LZW ** Layer Compression: Discard Layers and Save a Copy [[File:armareforger-modded-weapon-saving-texture.png]]

== Basics ==

{{Feature|warning|The '''texture suffix is important''' as the Workbench decides of a default import profile from it, greatly improving performances and storage space - see {{Link|#Texture Properties}} for a list of possible values.}} * '''All textures''' are '''8-bit per channel''' to save memory, unless "Original Pixel Bit Depth" is checked in texture "import settings", which is really ok only for HDR (ENV) textures used for lighting in Workbench viewport. * Enfusion uses DirectX normal maps and '''only red (+x) and green (-y) channels'''. * Upon registering a texture and importing it for the first time, correct Compression is automatically assigned based on used suffix '''except for channel masks 1 and 2''' - these must be set '''manually'''. * When '''RedGreenHQCompression''' is used, only Red and Green channels of texture are compressed and used, other channels are not used (appear as black in workbench preview). Similarly, '''RedHQCompression''' compressed only R channel, others are not used * Best quality for textures with 3 to 4 channels (RGB/RGBA) is achieved by '''ColorHQCompression'''. * When looking for best compression in the case of alpha channel missing, or the alpha is very contrasted like almost just with values 1 and 0 in pixels, '''DXTCompression''' can be used. This leads to a six times smaller texture but with worse quality than '''ColorHQCompression'''.

== Texture Types ==

<!-- See also Shaders -->

=== Base Color ===

Albedo of the surface, which basically defines what color each pixel have.

=== Roughness ===

Greyscale texture, which defines which parts of the model are shiny or rough looking.

=== Metalness ===

Greyscale texture which defines which parts of model behave like metal (value 1 - steel, gold, aluminum etc) or dielectrics (value 0 - wood, rubber, soil etc).

=== Normal ===

Define bumpiness of the model surface.

=== Opacity ===

Define which parts of model are transparent (0) or opaque (1).

=== Height ===

Used for parallax effect which emulates high detail per pixel tessellation of decal or terrain surface (currently no usage for model shaders).

=== Mask ===

There are multiple mask types:

==== Global Mask ==== Determine distribution of "sub-materials" inside PBRMulti and PBR2Layers shaders. Each channel represents here one "sub-material". It can be imported as RGB texture or R-channel only depending on how much masks you need to get from the texture. If a mask for PBR2Layers shader or just for 2 sub-materials in PBRMulti is needed, then the R-channel only mask is enough (black and white). If a mask for 3+ sub-materials in PBRMulti is needed, then the RGB mask should be used (black, red, green, blue).

==== Detail Mask ==== Greyscale texture, which determines "breakup" of the "Global Mask". Result masking should look more detailed (hi-res).

==== Normal Mask ==== Basically the same as one channel Global Mask with a mask for Detail Normal in the second channel. it is used in PBR2Layers shader.

=== Camo mask ===

Special mask, which defines where "Camo" color texture appears in PBRCamo shader.

=== Ambient Occlusion ===

Determine the intensity of ambient lighting in places where the natural light does not reach.

=== Cavity ===

Determine intensity of both Diffuse and Ambient lighting (both in shadows and on sun).

=== Global/Macro Textures ===

These are special textures which combine with underlying sub-materials in a specific way in order to breakup sub-materials' repetitiveness or add some unique "macro" looking details.<br> Albedo/roughness uses {{hl|_MCR}} because they are imported differently than {{hl|_BCR}}. For normal, metal and ambient occlusion the ordinary {{hl|_NMO}} textures is used, because the same texture import is required. There is an option to use {{hl|_O}} texture suffix for ambient occlusion if only that is required.

=== Emissive ===

Define which parts of model will glow and how much at night or in the dark.

=== Environment Cube Map ===

HDR (High Dynamic Range) texture used only for lighting inside viewport inside Workbench. It has no real application for game assets but a world can be created with a different lighting setup and atmosphere.

== Texture Import ==

# Place the texture into the game or mod project data structure. # In Resource Browser, right-click on the texture and select '''Register''' or '''Register and Import'''. ## '''Register''' - only meta file containing import settings is created. These setting can now be changed from default in the "Import Settings" tab, which appears when the source texture is opened. ## '''Register and Import''' - the metafile containing import settings is created and the texture is imported right away with default import settings. ## '''Import''' - upon binarised and compressed version import of the source, an {{hl|.edds}} texture is created right next to the source texture. # After the import, the texture preview can be opened by double-clicking on it or right-click and selecting '''Open file in new tab'''.

=== Import Settings ===

The import settings are quite complex which is why it is important to use the correct texture suffix, as it 99% of the tim sets the proper settings automatically (exceptions being {{hl|_MCR}} texture and 1 or 2 channel MASK where manual color space setup is required).

==== Format Compress ==== Used for quality/speed of internal mipmaps compression, higher values mean bigger compression time.

==== Compress Treshold ==== Ratio of internal data mipmap compression. Each mipmap is compressed using internal compression - if the ratio between compressed and original size is less than this ratio, mipmap is stored in compressed format, otherwise in original.

==== Remove Mips ==== Remove better mipmaps (1, 2, etc) in order to lower texture memory consumption. The full mipmap chain is generated before the mipmaps are removed unless "ContainMips" is checked when full custom mimmap atlas/texture is imported. {{Feature|informative|This is useful to e.g create resources for consoles or some demo/low quality version.}}

==== Max Size ==== This setting sets the maximum resolution in which the texture is going to be imported.

==== Conversion ==== Defines conversion of texture format used at runtime (eg. compressed GPU format or channel removal). {{Feature|informative| {{{!}} class{{=}}"wikitable" style{{=}}"float: right" ! Enfusion ! DXT equivalent {{!}}- {{!}} BC1 {{!}} DXT1 {{!}}- {{!}} BC2 {{!}} DXT2/DXT3 {{!}}- {{!}} BC3 {{!}} DXT4/DXT5 {{!}}} * In order to check size differences between these formats, set '''FormatCompress''' to '''Copy''' and check the resulting file size. Make sure to reset '''FormatCompress''' back to its previous value once done. * For information on compressed formats, refer to following links (note that BC1 is DXT1, BC2 covers DXT2 and DXT3, BC3 covers DXT4 and DXT5): ** https://docs.microsoft.com/en-us/windows/win32/direct3d10/d3d10-graphics-programming-guide-resources-block-compression ** https://docs.microsoft.com/en-us/windows/win32/direct3d11/texture-block-compression-in-direct3d-11 ** https://en.wikipedia.org/wiki/S3_Texture_Compression ** https://www.khronos.org/opengl/wiki/S3_Texture_Compression }}

===== None ===== No channel compression is used.

===== DXTCompression ===== Conversion into lossy DXT1 (RGB) / DXT5 (RGBA) format (decision based on alpha channel's presence).

Final size: usually 1/4 to 1/6 of uncompressed RGBA

===== Alpha8 ===== Only alpha channel is kept - when used as a texture, RGB is automatically 0.

Final size: 1/4 of uncompressed RGBA

===== Red ===== Only the red channel is kept - when used as a texture, GB is automatically 0 and A is 1.

Final size: 1/4 of uncompressed RGBA

===== RedHQCompression ===== Only red channel is kept and compressed using lossy BC4 compression - when used as a texture, GB is automatically 0 and A is 1.

Final size: is 1/8 of uncompressed RGBA

===== RedGreen ===== Only red and green channels are kept - when used like a texture, B is automatically 0 and A is 1

Final size: is 1/2 of uncompressed RGBA

===== RedGreenHQCompression ===== Only red and green channel are left and compressed by lossy BC5 compression - when used as a texture, B is automatically 0 and A is 1.

Final size: 1/4 of uncompressed RGBA

===== ColorHQCompression ===== RGBA compression into lossy BC7 format - better quality than DXT compression, a little worse compression speed.

Final size: 1/4 of uncompressed RGBA

===== HDRCompression ===== 16 bits HDR lossy compression into BC6 format

Final size: 1/4 of uncompressed texture

==== ConversionQuality ==== This slider defines quality of compressor when converting the BCx format. Higher values may mean much worse compression time with a little quality improvement.

==== OriginalPixelBitDepth ==== Usually all textures with better precision (16 bits) are converted automatically to 8 bit format. When this option is checked, the original texture format is kept. {{Feature|informative|'''"Conversion'''" must be set to "'''None"'''.}}

==== Swizzling ==== Special channel reordering that may differ for various materials and texture usage - it is present as legacy support for some internal test projects.

==== ColorSpace ==== conversion of color space, albedo maps should be in sRGB, otherwise linear, this value should be usually left as '''"Default"'''.<br> if conversion to another color space is performed, the source would be ideally 16 bits due to possible loss of quality.

===== Default ===== * ToSRGB or ToLinear is used based on texture suffix * Tio. - only texture type, where both color spaces are possible is {{hl|_MCR}} texture. The colors in this texture can be prepared for both color space usage. <!-- {{Feature|informative| This will be explained later in "Shaders" chapter of the docs. }} -->

===== ToSRGB ===== The given texture is considered to be done in graphics editor such as Photoshop and the source texture values/colors are shifted from sRGB in which they were created so they can be correctly loaded into the shaders, usually for albedo textures (BCR).

===== ToLinear ===== The texture values/colors are not altered (are considered already as linear) and are loaded into shaders just as they are.

==== ContainsMips ==== Must be checked in case the source texture contains mipmaps (see picture).

{{Feature|informative| * '''mipmaps or MIPs''' {{=}} smaller versions of original texture, which get gradually loaded with increasing distance from camera. * they are next each other, e.g. for 256x256 texture the source width is 256+128+...+1 {{=}} 511 and height 256 ** The engine can handle/import of the texture even with 512x256 (and other resolutions with power of 2) and it will remove one horizontal pixel to be 511 automatically! }}

==== GenerateMips ==== Generate the full mipmap chain. This is enabled by default as mipmap helps a lot to: * speed up rendering * fight against aliasing * surprisingly reduce memory overhead in engine even though they are bigger: [[Arma Reforger:Resource Manager|Resource Manager]] can load only the necessary mipmaps and not the full mipmap chain<!-- -->{{Feature|informative|This currently only applies to textures used in materials, not to UI textures.}}

==== MipMapFunction ==== Define what to do with mipmap after them being generated.

===== Filter ===== Normal filtering - reduces contrast in lower mipmaps as they are somehow avereage from previous one.

===== Normalize ===== Useful for normal maps as usual filtering decrease contrast, though it may add noise at lower mipmaps (specular aliasing).

===== ColorNoise ===== Color is left as it is and to alpha channel is generated noise (for some special purposes)

==== MipMapFilter ==== Three types for filtering mipmaps, '''Box''' is default, others can produce better mipmaps but sometimes may show artifacts. * '''Box, Triangle, Kaiser''' * '''FoliageAlpha 1 - 5''' - this is used for vegetation opacity textures, so they keep better/denser opacity also in smaller MIPs, which are drawn further away from camera

==== TiledTexture ==== Used to improve wrapping around edges when generating mipmaps

==== VolumeTexture ==== Will disable other settings and convert flat texture for example 256x16 texture to 16x16x16 3D volume texture. Used mainly for LUT textures like.

==== GenerateCubeMap ==== Generate cube map from unwrapped texture with spherical mapping

== Texture Properties ==

and channel distribution table below is chart of all valid texture types, in what shaders they are used and some of their "import properties".

{| class="wikitable sortable" style="text-align: center" ! colspan="9" | Material ! colspan="9" | Texture |- class="sticky-top" style="font-size: .75em" ! Particle ! Grass ! Terrain ! PBRDecal ! PBRTree Crown/Trunk ! PBRMulti ! PBR2Layers ! PBRBasic ! PBRCamo ! Type ! Suffix ! {{Color|red|Red}}<br>Channel ! {{Color|green|Green}}<br>Channel ! {{Color|blue|Blue}}<br>Channel ! {{Color|grey|Alpha}}<br>Channel ! Bit depth per pixel ! Color space ! Compression |- | {{Icon|checked}} | | | | | | | | | Base Color | _BC | Albedo | Albedo | Albedo | {{Icon|unchecked}} | 32 | sRGB | ColorHQCompression |- | {{Icon|checked}} | | | | | | | | | Base Color + Opacity mask | _BCA | Albedo | Albedo | Albedo | Opacity mask | 32 | sRGB | ColorHQCompression |- | | {{Icon|checked}} | {{Icon|checked}} | {{Icon|checked}} | {{Icon|checked}} | {{Icon|checked}} | {{Icon|checked}} | {{Icon|checked}} | {{Icon|checked}} | Base Color + Roughness | _BCR | Albedo | Albedo | Albedo | Roughness | 32 | sRGB | ColorHQCompression |- | | | | {{Icon|checked}} | in PBRTree Trunk, shader behaves as N<s>M</s>O: metalness is ignored | {{Icon|checked}} | {{Icon|checked}} | {{Icon|checked}} | {{Icon|checked}} | Normal map + Metalness + Ambient Occlusion | _NMO | Normal

+X | Normal

-Y | Metalness | Ambient Occlusion | 32 | linear RGB | ColorHQCompression |- | {{Icon|checked}} | | | | | | {{Icon|checked}} | {{Icon|checked}} | {{Icon|checked}} | Normal map | _N | Normal

+X | Normal

-Y | {{Icon|unchecked}} | {{Icon|unchecked}} | 16 | linear RGB | RedGreenHQCompression |- | | {{Icon|checked}} | | {{Icon|checked}} | {{Icon|checked}} | | | {{Icon|checked}} | | Transparency/Opacity | _A | Opacity mask | {{Icon|unchecked}} | {{Icon|unchecked}} | {{Icon|unchecked}} | 8 | linear RGB | RedHQCompression |- | | | | {{Icon|checked}} | | | | | | Height | _H | Height | {{Icon|unchecked}} | {{Icon|unchecked}} | {{Icon|unchecked}} | 8 | linear RGB | RedHQCompression |- | | | | | | {{Icon|checked}}<br>1 channel | | | | 1 channel Detail Mask | {{Color|grey|_DETAIL_}}MASK | Mask | {{Icon|unchecked}} | {{Icon|unchecked}} | {{Icon|unchecked}} | 8 | linear RGB | RedHQCompression

(must set manually) |- | | | | | | {{Icon|checked}}<br>1 channel | {{Icon|checked}}<br>1 channel | | | 1 channel Mask | {{Color|grey|_GLOBAL_}}MASK | Mask | {{Icon|unchecked}} | {{Icon|unchecked}} | {{Icon|unchecked}} | 8 | linear RGB | RedHQCompression

(must set manually) |- | | | | | | | {{Icon|checked}}<br>2 channels | | | 2 channels Mask | {{Color|grey|_GLOBAL_}}MASK | Mask | Mask

(DetailNormal) | {{Icon|unchecked}} | {{Icon|unchecked}} | 16 | linear RGB | RedGreenHQCompression

(must set manually) |- | | | | | | {{Icon|checked}}<br>3 channels | | | | 3 channels Mask | _GLOBAL_MASK | Mask | Mask | Mask | {{Icon|unchecked}} | 24 | linear RGB | ColorHQCompression/ DXTCompression |- | colspan="9" | Used in "clutter collection config" and "procedural grass config" to drive the distribution | Clutter Mask | _CMASK | Clutter Distribution Mask | Clutter Height Mask | {{Icon|unchecked}} | {{Icon|unchecked}} | 16 | linear RGB | RedGreenHQCompression |- | | | | | | {{Icon|checked}} | | | | VFX | _VFX | Mask (dirt) | Mask

(mud) | {{Icon|unchecked}} | {{Icon|unchecked}} | 16 | linear RGB | RedGreenHQCompression |- | | | | | {{Icon|checked}} | {{Icon|checked}} | {{Icon|checked}} | | | Global/Macro Base color and Roughness | _MCR | Color | Color | Color | Roughness | 32 | linear RGB / sRGB | ColorHQCompression |- | | {{Icon|checked}} | | | {{Icon|checked}} in PBRTree Trunk, shader behaves as N<s>M</s>O: metalness is ignored | | | | | Normal map + Transmittance + Cavity | _NTC | Normal

+X | Normal

-Y | Transmittance | Cavity | 32 | linear RGB | ColorHQCompression |- | | | {{Icon|checked}} | | | | | | | Normal map + Height + Ambient Occlusion | _NHO | Normal

+X | Normal

-Y | Height | AO | 32 | linear RGB | ColorHQCompression |- | | | | | | | | | {{Icon|checked}} | Camo mask + roughness + metalness | _CRM | Mask | Roughness | Metalness | {{Icon|unchecked}} | 24 | linear RGB | ColorHQCompression/ DXTCompression |- | {{Icon|checked}} | | | | | | | {{Icon|checked}} | | Emissive | _EM | Color | Color | Color | {{Icon|unchecked}} | 24 | linear RGB | ColorHQCompression/ DXTCompression |- | colspan="9" | For lighting purposes inside Workbench viewport and in World editor (replaces atmosphere lighting). It has no in-game usage in shaders. | Environment cube map | _ENV | Color | Color | Color | {{Icon|unchecked}} | 24+ | linear RGB | HDRCompression |}

== Texture Preview ==

After opening a texture in Workbench, you will see its preview in the Workbench viewport, above it are some buttons and right to it "Details" and "Import Settings" tabs.

See [[Arma Reforger:Resource Manager: Texture Editor|Resource Manager: Texture Editor]].

{{GameCategory|armaR|Modding|Guidelines}}
94wdowaisel26f8dibnyd84rj75fkw3

# Arma Reforger:Persistence System

5050
49331
376621
376514
2025-10-31T16:45:31Z
Lou Montana
10739
Fix class
376621
wikitext
text/x-wiki
{{GVI|armaR|1.6.0}}

This page provides some basic information on how the Persistence System operates, its interactions with the rest of the game, and how to add support for custom entities, components, and scripted instances for saving and loading data.

{{Feature|informative|See also persistence's {{Link|Arma Reforger:Server Config#persistence|server configuration}}.}}

== System Setup ==

Persistence is a {{Link/Enfusion|armaR|WorldSystem}}, defined through the world systems config. For example {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Systems/GameMasterSystems.conf}} contains a {{Link/Enfusion|armaR|SCR_PersistenceSystem}} entry which itself then links to persistence config - in this case {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Systems/Persistence/GameMode/GameMaster.conf}}.

All persistence-related config files can be found inside {{hl|Configs/Systems/Persistence}}. The configuration relies heavily on inheritance and splitting data into reusable groups. All properties have tooltips that describe what they do.

== Process Overview ==

=== Instance Registration ===

All persistent instances must be tracked by the system. This usually happens through a Persistence component on a prefab or map entity. The component is not instantiated at runtime. It serves mostly as a configuration. Instances can also be manually registered on the system using StartTracking. Registrations are processed lazily. All configurations defined in the config are checked until a rule matches. The order of evaluation follows the descending priority defined in the config, and then by whatever rule is most specific (more precise prefab or inherited type). During registration, each instance gets assigned a 128-bit UUID, which is non-guessable, sortable by creation time and separates data by hive, which allows complex setups sharing a centralised database. Loaded entities get them deterministically assigned to identify them on load, as long as the map has not changed significantly. If one wants to ensure a special map entity is always found, even when moved, then it should be named in the {{Link|Arma Reforger:World Editor}}.

=== Save Request ===

Once a save was requested (either from {{Link/Enfusion|armaR|SaveGameManager}} or direct script API calls), all pending registrations are handled, and all tracked instances are checked for saving. Depending on the parent handling configured, only the roots of any entity hierarchy will get serialized and are then responsible for handling any children. Default serialisation results indicate that the instance had no data that is needed to load it back. Any info known due to prefabs or loaded map entities must not be stored. If there is some data, it is added to the configuration's collection. For example, all item type entities go into the Item collection. Collections serve as first level of organisation, grouping similar data types for visual separation in folders/database tables.

=== Bundling ===

The system config may optionally have one or more bundles configured. These group collections together, who are likely to be fetched at the same time. For example: Items, Vehicles, AI Characters, etc, will all be loaded back on the restart of a server. If the data must not be individually loaded on demand later, or processed externally by third-party tools, then the bundle eliminates save and load time overheads by merging potentially thousands of tiny data files into one bigger bundle file. Bundling is enabled by default for all collections.

=== Database commit ===

After all data is read into collections (and bundled) it is then committed as one large transaction to the storage the collections belong to. The system comes with two storage types: The SessionStorage represents individual save points for a current playthrough. A session begins at the first launch of a mission and may be interrupted by restarts. It typically ends when the gamemode concludes with some result. A gamemode may have a single, forever-running session. This storage will usually contain all the world's information, so that after a restart, everything appears to be the same when players rejoin. The GamemodeStorage can be used to store information across multiple sessions. It is most suitable for things like player experience, currencies, unlocks, achievements, etc. This data can also be shared across multiple mission variants. For example, {{hl|CTI_Arland}} and {{hl|CTI_Eden}} may have their own individual sessions running, but use the same shared gamemode storage, which transfers player data between them.

=== Load ===

When a saved session is continued, the system will automatically spawn back any entities and persistent scripted states setup in the config. Additional spawn/load requests can be issued via script API on the system. Save and load API calls can be made even if some transactions are currently ongoing. So sending a query after an instance was saved, but before the data was committed, will still return the transient data. Because the operations are generally all asynchronous, there are a few utilities on the persistence system class to await complex relationships of instances to be made (see <enforce inline>AddDeferredDeserializeTask()</enforce> and <enforce inline>WhenAvailable()</enforce> methods).

== Custom Serialisers ==

To support save and load for custom data, there are 3 serialiser types available. They are the interface that know how to read the data from runtime instances, save it in a serialisation context, load it back and apply it to a target instance.

* {{Link/Enfusion|armaR|ScriptedEntitySerializer}} for {{hl|IEntity}} handling * {{Link/Enfusion|armaR|ScriptedComponentSerializer}} for {{hl|ScriptComponent}} handling * {{Link/Enfusion|armaR|ScriptedStateSerializer}} for any other managed class.

For some usage examples, please see:

* {{Link/Enfusion|armaR|TimeAndWeatherManagerEntitySerializer}} * {{Link/Enfusion|armaR|SCR_NightModeGameModeComponentSerializer}} * {{Link/Enfusion|armaR|SCR_EditableEntityCoreSerializer}}

== SaveGameManager ==

The persistence system is loosely coupled with the game's {{Link/Enfusion|armaR|SaveGameManager}}. It is responsible for communication with user interfaces and accepts user inputs. The persistence system gets notified about any save game requests, collects the necessary runtime data, and submits it via the SaveGameDatabase as a local save. This works - with modded data - on all platforms, including dedicated servers. It is the default use-case, but any custom gamemode may choose to store its data outside of any save-game logic using a different database type. In conclusion, persistence can be used without any interaction with the save game manager.

{{GameCategory|armaR|Modding|Guidelines|Systems}}
rsrfimdc9728019h0f8se8qdpp5g8n9

# Arma Reforger:Animation Editor

5050
32818
370751
370355
2025-02-04T13:59:32Z
Reyhard
10671
/* Debug Controls */
370751
wikitext
text/x-wiki
{{TOC|side}} The '''Animation Editor''' is used to connect the animations in the game in a logical way using a node-based graph, using files called '''Workspaces'''.

[[File:armareforger animation-editor-main-interface.png|thumb|[[Arma Reforger:Animation Editor|Animation Editor]] interface.]] Each tab can be docked/undocked anywhere, or remain floating. the Layout is entirely customizable.

{{TOC|subtoc|content= * 1. {{Link|#Toolbar}} * 2. {{Link|#Anim Editor Preview}} * 3. {{Link|#Workspace}} / {{Link|#Anim Set}} * 4. {{Link|#Animation Graph}} / {{Link|#Log Console}} * 5. {{Link|#Controls}} / {{Link|#Debug Controls}} / {{Link|#File Browser}} / {{Link|#Properties}} / {{Link|#Live Debug}} / {{Link|#Attachments Debug}} / {{Link|#Errors}} }}

== Toolbar ==

[[File:armareforger_animation-editor-toolbar.png]]

* '''File''': perform actions such as load/save {{Link|#Workspace}}, create new '''Workspace'''... * '''Edit''': perform copy, paste and cut actions. * '''Graph''': * '''View''': open or close any window * '''Play''': play the {{Link|#Animation Graph}} from the default node. If no '''default node''' is setup, nothing will play. * '''Checks''': verify '''Source Sync''' and display all '''Tags''' used in the current '''Workspace''' * '''Tools''': reload animation files, rebinarise '''TXA files''' and perform a stress test

== Top Bar ==

[[File:armareforger_animation-editor-top-bar.png]]

From left to right: * create new workspace ({{Controls|Ctrl|N}}) * open workspace ({{Controls|Ctrl|O}}) * save workspace ({{Controls|Ctrl|S}}) * save changes in animation files but not in workspace * cut selection ({{Controls|Ctrl|X}}) * copy selection ({{Controls|Ctrl|C}}) * paste ({{Controls|Ctrl|V}}) * stop animation playing * play default node * error button - shows if there are any errors, and opens the '''Errors''' window when clicked on

== Anim Editor Preview ==

The '''Anim Preview Window''' is where you will see the model moving according to which animation is playing, in real time or not. Also used to preview a specific animation clip alone, when selection from the {{Link|#Anim Set}} directly.

The camera can be rotated around the center by pressing left mouse button in the viewport and dragging.

The camera can be rotated around its own axis be pressing right mouse button in the viewport and dragging.

The camera can be moved by pressing middle mouse button in the viewport and dragging.

The timeline can be scrolled through by pressing left mouse button on the cursors on the timeline and dragging left or right.

=== Top Bar ===

[[File:armareforger_animation-editor-anim-editor-preview-top-bar.png]]

From left to right: * show/hide the floor grid * move (Inverted Kinematics) * rotate (Inverted Kinematics) * show/hide the '''Evaluation Information''' (the window must have focus for it to display evaluation information) * show/hide colliders * show/hide '''IK targets''' * show/hide all bones * show/hide specific bones from a hierarchical list containing all bones * select an animation from folder, that will be used as a base to play an '''Additive Animation''' on top * set the field of view for the preview camera * select which animation LOD is played 0 being least detailed and 3 most detailed * switch between first person and third person animation ''(feature not working)''

=== Viewport ===

==== Buttons ==== * '''View''': choose the camera view (perspective, front, left ect...) * '''Shading''': choose the lighting and shading type used in the viewport * '''Overlays''': manage overlays such as wireframe * '''Options''': access preview option (mostly useless in the context of the animation editor)

==== Display ==== * '''Evaluation Information''' displays: animation file name, current time, active '''event''', active '''tag''' and amount of bones being animated * '''Timeline''': timeline with cursor showing current frame - can be scrolled/clicked through. * '''Timeline Controls''':<br>[[File:armareforger_animation-editor-anim-editor-preview-timeline-controls.png]] ** First Frame ** Step Backward ** Play / Pause ** Step Forward ** Last Frame ** Loop Animation: should the animation restart when ending ** Show Motion Options: *** Move Ground: moves the entity and places the ground back when the entity has moved away *** Move And Rotate Ground: keeps the camera relative to the entity *** Move Entity: moves the entity, does not place the ground back *** Move Entity, Reset Movement Each Loop: moves the entity but resets its position every time the animation plays *** Inplace: does not move nor rotate the entity<!-- ** from left to right: record button and loop animation button (used when playing a specific animation directly from the '''Anim Set''') --> ** Playback Speed: speed at which the animation is played ** Current Frame: the current frame number ** Frame Count: the total frame count ** Snap Cursor to Keyframe: if selected, the timeline cursor can slide between the frames, using interpolation

== Workspace ==

[[File:armar-animationeditor_workspace_layout.jpg|500px]]

This window is used to create all the files necessary for a workspace to work, as well as selecting '''Animation Instance''', or '''Sheet'''. Right-click on any category to create a new one of it (right-click on instances to create a new '''instance''' for example)

* '''A''': animation template file, contains the list of animation slots by categories, that is edited from the '''Anim Set''' window * '''B''': animation '''instances'''. each one represents a unique set of animations, that are used to fill the same template. multiple '''instances''' allows for multiple sets of animations that will use the same logic (for example rifle locomotion animations and pistol locomotion animations) {{Feature|informative|See {{Link|Arma Reforger:Animation Editor: Templates and Instances Tutorial}}.}} * '''C''': Sheets. each '''sheet''' is a "page" containing logic nodes, visible from the '''Graph Window.''' Technically it is not necessary to have more than one, however as the graph grows bigger, it is better to separate into in different sheets, to stay organised. * '''D''': Sync table, contains the different Sync events that are going to be used throughout the graph. {{Feature|informative|See {{Link|Arma Reforger:Animation Editor: Sync Tutorial}}.}} * '''E''': preview models: models that you are going to use to preview animations on. It can be character, weapon, vehicle...

== Anim Set ==

[[File:armareforger_animation-editor-anim-sets-controls.png]]

The '''Anim Set''' is a table containing groups, each groups has columns and lines. you can then assign animation to every cell on this table, they will appear as a green dot. Grey dot means no animation is assigned.

each animation that you fill in is specific to the '''Instance''' currently selected. On the player workspace, we typically use instances for different weapons, because they have different animations that will be used in the same context (for instance run forward with rifle and run forward with pistol.

no need to create a line for each, just create a run forward line then fill it with run forward rifle in rifle instance and run forward pistol in pistol instance)

First line, from left to right:

* search bar that allows you to look for a specific line inside the '''Anim Set''' * toggle button to only show missing animations * add, rename and remove group buttons * add, rename and remove line buttons * add, rename and remove column buttons

Second line, from left to right: * currently selected animation file, then file controls: Open file (opens selected file in a new tab in the Workbench), locate selected file in the {{Link|#File Browser}}, browse and clear selected animation * add selected (in '''File Browser''') animation to selected line/column * create new line from selected (in '''File Browser''') animation (it will automatically create a new line with the same name as the selected animation)<!-- --><!--{{Feature|important|The last button, "Create new empty animation lines from selected files" remains greyed out.}}-->

== Animation Graph ==

Here is where you create ad manage the visual logic, in the form of a graph made of nodes connected together.

It displays the content of the currently selected '''Sheet'''.

A graph is made of '''State Machines''', containing '''States''', and other nodes that live outside of a '''State Machine.''' States can only be created inside a State Machine, and need to be connected to a children.

You can see states as empty logical containers connected together using conditions. {{Feature|informative|See {{Link|Arma Reforger:Animation Editor: Nodes}}.}}

{{Feature|informative|The colour of every node types can be changed in the workbench. Find the "Workbench" tab in the top left, click on it and select "options".}}

[[File:armar-animationeditor_animation_graph_layout.jpg|500px]]

Here you can see a State Machine (grey rectangle) with States inside it. Notice that each node is connected to a children outside of the State Machine.

{{Feature|informative|A state can have another state machine as child.}}

'''Navigation''': Use '''Left Click''' to select, drag to select multiple nodes. alternatively, press '''Left Ctrl''' and '''left click''' to add to current selection.

: Press '''Middle Mouse Button''' and drag to move around the graph : Scroll '''Middle Mouse Button''' to zoom/unzoom : '''Right Click''' opens a contextual menu that depends on your current selection/what is under the mouse cursor. Also allows to use selected node as default running node when pressing the play button in the {{Link|#Toolbar}}.

Let's Breakdown the window:

* '''A''': search bar to look for a specific node, by its name. * '''B''': create new node * '''C''': Center view on current selection * '''D''': Center the view on the whole graph, does not depend on current selection

== Log Console ==

Here is the same log available in the {{Link|Arma Reforger:Resource Manager}}, that will tell you if anything is wrong with the engine.

From left to right:

* search bar * button to clear the console * Show errors only * Show warnings only * Show info only * Filters list

== Controls ==

The control panel contains all the logical conditions that are then used in the graph.

It has 2 different states:

'''1''': When the '''Graph''' is NOT running, you can create, rename and modify conditions.

'''2''': When the '''Graph''' is running, you can trigger the conditions to provoke certain animations to play.

Here you can find a list of the conditions used in {{armaR}}: {{Link|Arma Reforger:Animation Editor: Human Variables}} and {{Link|Arma Reforger:Animation Editor: Vehicle Action Commands}}.

=== Variables === Array of variables which can be used in animation graph. 4 types of variables exists - Float, Integer, String and Bool

=== Commands === Array of commands which can be used in animation graph. These are one-frame instructions used in the animation graph. Commands differ from variables in that they automatically '''reset to null after execution''', rather than maintaining their state across frames

=== IK Chains === Array of IK Chains that be used in animation graph.

=== Bone Masks ===

Named masks allowing you to sample just part of the original bind pose. You can fill the mask by hand or you context menu for the bone selection GUI. Can be used for instance for facial animations

[[File:armar-animationeditor animation graph layout boneSelect.gif]]

=== Global Tags ===

== Debug Controls ==

The debug controls allows you to link a specific condition to a simple button, and sort these buttons with custom groups. This way you can trigger a set of conditions faster than when looking for them in '''Controls'''.

It has the same 2 states as '''controls''':

# When the '''Graph''' is NOT running, you can create, rename and modify buttons. # When the '''Graph''' is running, you can trigger the conditions via the buttons to provoke certain animations to play.

== File Browser ==

A simple file browser (that only displays {{hl|.anm}} files) to find animation files and assign them to the '''Anim Set'''.

== Properties ==

Here you can change the properties of any node/transition that you have selected in the '''Graph''' window.

{{Feature|informative|See {{Link|Arma Reforger:Animation Editor: Nodes}}.}}

== Live Debug ==

[[File:armar-animationeditor_live_debug_layout.jpg|500px]]

Here you can connect a running instance of the game to the animation editor. This way what you do in the game will also be recorded in the animation editor.

Useful to find source of some issues, if the conditions are being triggered properly in the game ect...

* '''A''': Finds the different entity from the running game session that you can attach into the animation editor * '''B''': Attaches the selected entity from the list and attaches it to the animation editor * '''C''': Detaches selected entity from the animation editor

Here you can find a short document on how to use Live Debug: {{Link|Arma Reforger:Animation Editor: Live Debug Tutorial}}.

== Attachments Debug ==

Here you can set binding names for each attachment node (an attachment node allows you to plug in a workspace into another workspace. we typically use them for weapons/vehicles. therefore each weapon/vehicle has its own animation logic separated from the player logic)

== Errors ==

In this window you can see anything that is wrong with the animation logic, such as invalid condition, invalid node etc, anything that will prevent the graph from running correctly.

{{GameCategory|armaR|Modding|Official Tools}}
alc8vhjojj7gx8a3f7evn5fcuxklnso

# Arma Reforger:Animation Editor: Human Variables

5050
32926
370353
369633
2024-12-02T13:58:25Z
Lou Montana
10739
Text replacement - "Arma Reforger:Animation Editor: Vehicles Actions Commands" to "Arma Reforger:Animation Editor: Vehicle Action Commands"
370353
wikitext
text/x-wiki
{| class="wikitable sortable" ! Variable Name ! Type ! Min ! Max ! Usage !Used In |- | MovementSpeed | float | 0 | 3 | 0 is not moving, 1 is walking, 2 is running, 3 is sprinting | |- |MovementSpeedReal |float |0 |10 |Animation variable which keeps the current speed of the character in meters per second | |- | MovementDirection | float | -180 | 180 | Movement direction in degrees, 0 is forward, -90 is left, etc | |- |HasLocomotionInput |bool | | |Has locomotion input for animators to be able to read if there is any input or if the character should stop - used for inertia | |- | Stance | Int | 0 | 2 | 0 is standing, 1 is crouching, 2 is prone | |- | Look | bool | | | True = looking dir is used, false = looking dir is not used | |- | LookX | float | -180 | 180 | Used for look at | |- | LookY | float | -90 | 90 | Used for look at | |- | WaterLevel | float | 0.0 | 1.0 | This causes the character to act as if he is walking in water (only with rifles so far) | |- | TriggerPulled | bool | | | If true, the finger on the character's weapon hand will be pulled |Weapon |- | WeaponObstruction | bool | | | If true, the weapon will be pointing upwards to avoid the obstacle in front of them | |- | ADSAdjust | float | 0.0 | 1.0 | If 0.0, the character will be almost crouched down and if 1.0, the character will be standing up normally. Used to adjust for obstacles. | |- | ADS | bool | | | This makes the character aim down sights | |- | AimX | float | -180 | 180 | Used for aiming |Weapon |- | AimY | float | -90 | 90 | Used for aiming |Weapon |- | LeanForward | float | 0.0 | 90 | This leans the character forward while in melee combat | |- | TurnAmount | float | -2.0 | 2.0 | Use with command '''CMD_Turn'''. -2 is turning left 180, -1 is turning left 90, 1 is turning right 90, 2 is turning right 180 | |- | Lean | float | -1.0 | 1.0 | This leans the character to the left and right | |- |Low |bool | | | | |- | ArmIK | int | 0 | 7 | Used by character controller | |- | AimIKX | float | -180 | 180 | Used by character controller | |- | DamageDirection | float | -180 | 180 | This is used with '''CMD_Combat_DamageLight''' and '''CMD_Combat_DamageHeavy''' to determine the direction of the hit | |- | AimIKZ | float | -180 | 180 | Used by character controller | |- | AimTransX | float | -100 | 100 | Used by character controller | |- | AimTransY | float | -100 | 100 | Used by character controller | |- | AimTransZ | float | -100 | 100 | Used by character controller | |- | VehicleType | int | -1 | 10 | This sets the current vehicle that you're going to enter | |- | VehicleSteering | float | -1.0 | 1.0 | -1 is steering 100% left, and 1 is turning 100% right |Vehicle |- | VehicleThrottle | float | 0.0 | 1.0 | This controls how much the throttle foot is pushing down |Vehicle |- | VehicleClutch | float | 0.0 | 1.0 | This controls how much the clutch foot is pushing down |Vehicle |- | VehicleBrake | bool | | | This makes the character brake, which overrides the VehicleClutch variable |Vehicle |- | VehicleAccelerationFB | float | -1 | 1 |Vehicle acceleration force (front/back) | |- | VehicleAccelerationLR | float | -1 | 1 |Vehicle acceleration force (left/right) | |- | Recoil | float | 0 | 1 | | |- | LadderMovement | int | -2 | 2 | | |- |Look |bool | | | | |- | Firing | bool | | |True when weapon is being fired |Weapon |- | SeatPositionType | int | 0 | 15 |See [[Arma Reforger:Animation Editor: Vehicle Action Commands#SeatPositionType|Vehicle Actions Commands]] | |- | DebugNewAimTurns | bool | | | | |- | AimTurnX | float | -90 | 90 | | |- | Horn | bool | | |True when vehicle horn is active |Vehicle |- | LeftHandGadget | int | 0 | 9 | | |- | SightElevation | float | 0 | 1 |State of sight adjustment (like ironsights) on the weapon. | |- | Bipod | bool | | |True when bipod is deployed on weapon |Weapon |- | LastBullet | bool | | |Was the last bullet being fired? Can be used for weapons which holds bolt back after last round |Weapon |- | Empty | bool | | |True when weapon is empty |Weapon |- | Cocked | bool | | |True when weapon (pistol) is cocked |Weapon |- | Focused | bool | | |True when gadget (like compass or binoculars) is focused |Gadget |- | State | int | -1 | 2 |Used for fire mode switch. -1 safe, 0 semi, 1 burst, 2 full auto |Weapon |- | WeaponType | int | 0 | 20 | | |- | BandageSelf | bool | | |True when character is supposed to bandage himself (instead of i.e. other character) | |- | FreeLook | bool | | |True when freelook is activated | |- | ObstacleHeight | float | 0 | 210 | | |- | ObstructionTEST | float | 0 | 2 | | |- | BodyPart | int | 1 | 8 |Controls which body part should be bandaged | |- | BankAmount | float | -1 | 1 | | |- | NewTurns | bool | | | | |- | IsDriver | bool | | |True when character is driver of the vehicle |Vehicle |- | WeaponObstructionFloat | float | 0 | 1 | | |- | FloorAngle | float | -90 | 90 | | |- |FloorAngleLateral | | | | | |- | UGL | bool | | | | |- |ADSTime |float |0 |2 | | |- |IdlesOff |bool | | |When true, idle animations on given character are disabled | |- |TargetYOffset |float | -180 |180 | | |- |SpineAccelerationFB |float | -1 |1 | | |- |SpineAccelerationLR |float | -1 |1 | |Vehicle |- |CrankX |float |0 |1 | | |- |CrankY |float |0 |1 | | |- |WeaponHeight |float |50 |120 | | |- |StepSize |float |0 |1 | | |- |WeaponDeployed |bool | | |True when weapon is deployed |Weapon |- |IsSimulatedIK |bool | | | | |- |WeaponInspectionState |int | -2 |2 |State of weapon inspection |Weapon |- |ItemInspectionState |int |0 |1 |State of item inspection |Gadget |- |Vehicle_Wobble |float |0 |1 |Character wobble factor in vehicles. Depends on the roughness of terrain vehicle is ridding on |Vehicle |- |GetInNoBlending |bool | | | |Helicopter |- |CyclicAside |float | -1 |1 |Rotor mast machinery (or rotor) animations based on cyclic controls |Helicopter |- |Collective |float | -1 |1 |Helicopter collective source |Helicopter |- |CyclicForward |float | -1 |1 |Rotor mast machinery (or rotor) animations based on cyclic controls |Helicopter |- |AntiTorque |float | -1 |1 |Helicopter anti torque variable |Helicopter |- |GearFB |float |0 |0.09 |Used in conjunction with '''Depth Front/Back''' parameter located in '''BaseLoadoutClothComponent'''. Controls Z forward offset of held weapon | |- |GearLR |float |0 |0.08 |Used in conjunction with '''Depth Left/Right''' parameter located in '''BaseLoadoutClothComponent'''. Controls left X offset of elbows when cloth is equipped | |- |Facial |float |0 |1 |Controls unconscious facial animation | |- |UnconsciousPose |int |1 |5 |Controls which unconscious pose will character end up | |- |VehicleSpeed |float |0 |100 |Vehicle speed in m/s |Vehicle |- |ADSOffsetHorizontal |float | -10 |10 | | |- |ADSOffsetVertical |float | -10 |10 | | |- |Stamina |float |0 |1 | | |- |IsControlledByPlayer |bool | | |True if character is controlled by player. Currently it is used to disable idle animations on player controlled characters | |}

{{GameCategory|armaR|Modding|Official Tools}}
05c5jgpgp7l94v9k4orliwbgljuexwx

# Arma Reforger:Animation Editor: Nodes

5050
32816
370462
364672
2024-12-13T16:41:18Z
Lou Montana
10739
Update to 1.2.1
370462
wikitext
text/x-wiki
{{TOC|side}} An '''animation node''' is a fundamental block of the animation engine. Each node has a single (and simple) purpose. By connecting these nodes to one big hierarchy, complex behaviour can be achieved. Usually the hierarchy is organised top to bottom, connecting parent nodes to child nodes.

Each node is displayed as a small rectangle, first line tells us the node type, second line contains node name. The '''name has to be unique''', which is used as a reference when linking to it from other nodes. Naming is '''case sensitive'''.

Slots, which can be found at the bottom of some node types, serve to connect a node to any child node.

== Animation Graph Evaluation ==

Imagine the evaluation as a process happening in two phases.

'''DOWN'''. Animator and character programmer agree on "master" (main, topmost) node. The animation graph evaluation starts at this node and continues to child nodes. Logic in animation nodes affects which child paths are evaluated and which are ignored. This way the evaluation traverses from topmost node to bottom of the graph.

'''UP'''. Once there are no valid child nodes where to continue the search, the evaluation returns back, carrying an animation pose as a result. This pose can be blended with other poses returned from different child paths or for example.

('''SIMPLIFIED'''. Logic is evaluated from top to bottom, left to right. Results (animation poses) are passed to parent node until they reach the topmost node.)

'''Order of evaluation is important, because it affects values used in conditions and other expressions'''. For example, when using tags, remaining time or events in an expression, it must be checked after all child nodes are evaluated, otherwise these values are still unknown.

== Time and Timing ==

One of the inputs of an animation node is a ''time''. Time is for advancing animations, essentially - ''playing'' the animations. The node usually passes this ''time'' to linked child nodes, however, some node hold their own clock. There are two ways to measure time:

* Real time. Time as we know it, it advances forward. * Normal time. Time used to synchronise animations. It scales between synchronization points, so multiple animations can be blended nicely. {{Feature|informative|Read more about Syncing Animation: [[Arma Reforger:Animation Editor: Sync Tutorial|Animation Editor: Sync Tutorial]].}}

== Node Types ==

=== Common Properties ===

{| class="wikitable" ! Property ! Description |- | Node Name | Unique node name, case sensitive. |- | Tags | User defined tags. Tags are returned together with resulting pose. Game code can read the returned tags and react to them. |- | Child | Link to child node/multiple children |}

=== Attachment ===

==== Attachment ==== Attachment node provides dynamic link to a different graph using different animation instance. The attachment is provided by the game and attachment node picks it by the binding name. Attachments can be inserted for debugging in the animation editor through Attachments Debug window. Attachment node translates the inputs (graph variables, commands...) into form accepted by attached graph which may influence the performance.

{| class="wikitable" ! Property ! Description |- | Tags | Tags set to animation output. |- | NodeGroup | Name of parent node group, visual and logical aid. |- | Binding | Binding name of the attachment. |}

=== Blend ===

==== Blend ==== Used to blend between two child nodes. Blend node supports both "normal" and "additive" blending and required no further setup for that manner, since every animation track already contains information whether it is additive. Blending is immediate - based on a value or variables. Blending weight can change rapidly between frames, no time-based blending is done.

{| class="wikitable" ! Property ! Description |- | Tags | Tags set to animation output. |- | NodeGroup | Name of parent node group, visual and logical aid. |- | BlendWeight | Blending weight (0 - 1). |- | Child0 | First child, having 100% influence when blending weight is 0. |- | Child1 | Second child, having 100% influence when blending weight is 1. |- | BlendFn | Blend weight shaping (linear, s-curve, etc.). |- | MotionVectors | Option specifying where to accept root motion from. 'Both' blends root motion vectors from both children. |- | IkTargets | Behavior of IK targets blending |- | Optimization | Optimization may turn off evaluation of child nodes which have 0% influence. |- | SelectMainPath | When enabled, only the path with weight over 0.5 is marked as a main path. |}

==== Blend N ==== Blend node N allows mixing results from multiple child nodes, each child node corresponds to one threshold value. Can be useful for example when blending between different directions of walking animations (0-360). Blending is immediate - based on a value or variables. Blending weight can change rapidly between frames, no time-based blending is done.

{| class="wikitable" ! Property ! Description |- | Tags | Tags set to animation output. |- | NodeGroup | Name of parent node group, visual and logical aid. |- | BlendWeight | Value which controls the blending between two surrounding thresholds. |- | BlendFn | Blend weight shaping (linear, s-curve, etc.) |- | Thresholds | Each child node corresponds to one threshold, thresholds must go from lower to higher values. |- | Children | Links to child nodes. |- | IsCyclic | Enable cyclic behavior (first threshold is identical to last, even with different values). Tick and add another Threshold at the end of Thresholds that corresponds to the first Input Link (for example, threshold would be -180,-90,0,90,180 when doing directional animations) |- | SelectMainPath | When enabled, only the path with weight over 0.5 is marked as a main path. |}

==== Blend T ==== Provides blending between two child nodes over time. When a condition is met, Blend T starts blending towards the other child node over time.

{| class="wikitable" ! Property ! Description |- | Tags | Tags set to animation output. |- | NodeGroup | Name of parent node group, visual and logical aid. |- | BlendTime | Full blending time in seconds. |- | BlendFn | Blend weight shaping (linear, s-curve, etc.). |- | TriggerOn | Condition to start blending into secondary branch (if filled in, 'Condition' is ignored). |- | TriggerOff | Condition to start blending back into primary branch (if filled in, 'Condition' is ignored). |- | Condition | Condition to switch between primary and secondary branch. |- | Child0 | Primary child node |- | Child1 | Secondary child node |- | Optimization | Select when to evaluate child nodes. |- | SelectMainPath | When enabled, only the path with weight over 0.5 is marked as a main path. |- | PostEval | If post-eval is checked, triggers or condition are evaluated after child nodes. |- | IkTargets | Behavior of IK targets blending |}

==== Blend T Add ==== Similarly to Blend T, this node provides blending over time, primary path always keeps playing as a main path. Useful for additive blending.

{| class="wikitable" ! Property ! Description |- | Tags | Tags set to animation output. |- | NodeGroup | Name of parent node group, visual and logical aid. |- | BlendTime | Full blending time in seconds. |- | BlendFn | Blend weight shaping (linear, s-curve, etc.). |- | TriggerOn | Condition to start blending into secondary branch (if filled in, 'Condition' is ignored). |- | TriggerOff | Condition to start blending out of secondary branch (if filled in, 'Condition' is ignored). |- | Condition | Condition to switch between primary and secondary branch. |- | Child0 | Primary child node |- | Child1 | Secondary child node |- | AdditiveAlways | When enabled, secondary child node is always evaluated regarless its current weight. |}

==== Blend TW ==== Time dependent blend between two child nodes. Unlike BlendT which utilizes thresholds, Blend TW blends towards target value.

{| class="wikitable" ! Property ! Description |- | Tags | Tags set to animation output. |- | NodeGroup | Name of parent node group, visual and logical aid. |- | TargetWeight | Target blending value, reached over time. |- | BlendTime | Time to reach target weight = 1 all the way from 0. |- | BlendFn | Blend weight shaping (linear, s-curve, etc.). |- | BlendTimeFn | Shaping of difference between target and current weight |- | Child0 | First child, having 100% influence when blending weight is 0. |- | Child1 | Second child, having 100% influence when blending weight is 1. |- | Optimization | Optimization may turn off evaluation of child nodes which have 0% influence. |- | SelectMainPath | When enabled, only the path with weight over 0.5 is marked as a main path. |- | IkTargets | Behavior of IK targets blending |- | OptimizeMin | When set to true and blending weight is zero, second child node is not evaluated |- | OptimizeMax | When set to true and blending weight is one, first child node is not evaluated |}

==== Queue ==== Supports enqueuing and playing secondary child nodes and blending them with primary path. This can be used for both additive and full body animations, where the full body will override the main link, and the additive animation will play on top of the main link.

{| class="wikitable" ! Property ! Description |- | Tags | Tags set to animation output. |- | NodeGroup | Name of parent node group, visual and logical aid. |- | Child | Primary child node, always evaluated regardless queued actions. |- | QueueItems | List of queue items which can be played as secondary actions.

* '''AnimSrcNodeQueueItem''' : {| class="wikitable" ! Property ! Description |- | Child | Child node of queue item. |- | StartExpr | Condition to start playing this item |- | InterruptExpr | Optional condition to interrupt this item |- | StartTime | Optional starting time |- | BlendInTime | Time to fully blend in |- | BlendOutTime | Time to fully blend out |- | EnqueueMethod | Behavior of item start - select if it is allowed to interrupt other items or self. |- | TagMainPath | When this item is playing, this tag is set on the primary path of the queue node. |- | CacheOnEnqueue | List of cached variable values and commands, frozen during enqueuing and passed unchanged to this playing item. * '''AnimSrcVarCmdTempStorage''' : {| class="wikitable" ! Property ! Description |- | Variables | ''No description'' |- | Commands | ''No description'' |} |} |- | IkTargets | Behavior of IK targets blending |}

==== Switch ==== Plays child nodes and switches to next one randomly, once they finish playing.

{| class="wikitable" ! Property ! Description |- | Tags | Tags set to animation output. |- | NodeGroup | Name of parent node group, visual and logical aid. |- | BlendTime | Transition time between child nodes. |- | FirstProbabilities | List of numbers separated by commas or spaces, representing probability per node. |- | SwitchItems | List of child nodes and their probability tables.

* '''AnimSrcNodeSwitchItem''' : {| class="wikitable" ! Property ! Description |- | Child | Link to child node |- | NextProbabilities | List of numbers separated by commas or spaces, representing probability per node. |} |}

=== Buffer ===

==== Buffer Save ==== Saves contents of current pose buffer in the node to named temporary storage.

{| class="wikitable" ! Property ! Description |- | Tags | Tags set to animation output. |- | NodeGroup | Name of parent node group, visual and logical aid. |- | Child | Link to child node |- | BufferName | Storage name |- | BoneMask | Inclusive mask restricting saved bones. If no mask is selected, all bones are saved. |}

==== Buffer Use ==== Restore previously saved pose buffer from temporary storage.

{| class="wikitable" ! Property ! Description |- | Tags | Tags set to animation output. |- | NodeGroup | Name of parent node group, visual and logical aid. |- | BufferName | Storage name |- | BoneMask | Inclusive mask restricting restored bones. If no mask is selected, all bones are used. |}

==== Filter ==== Filter current pose buffer by bone mask.

{| class="wikitable" ! Property ! Description |- | Tags | Tags set to animation output. |- | NodeGroup | Name of parent node group, visual and logical aid. |- | Child | Link to child node |- | BoneMask | Inclusive mask restricting bones kept in the pose buffer. If no mask is selected, all bones are kept. |- | Condition | Expression enabling this filter |}

=== Ctx ===

==== Ctx Begin ==== Ctx Begin and Ctx End surround branched block of the graph, protecting subgraph below Ctx End against losing its state during branch switches the state of subgraph is bypassed and safely stored in Ctx Begin. Traversing through Ctx End is allowed only for the first branch which reaches it, other branches inside the block receive cached result.

{| class="wikitable" ! Property ! Description |- | Tags | Tags set to animation output. |- | NodeGroup | Name of parent node group, visual and logical aid. |- | Child | Link to child node. First node in the branched block. |}

==== Ctx End ==== Ctx Begin and Ctx End surround branched block of the graph, protecting subgraph below Ctx End against losing its state during branch switches the state of subgraph is bypassed and safely stored in Ctx Begin. Traversing through Ctx End is allowed only for the first branch which reaches it, other branches inside the block receive cached result.

{| class="wikitable" ! Property ! Description |- | Tags | Tags set to animation output. |- | NodeGroup | Name of parent node group, visual and logical aid. |- | Child | Link to child node. Subgraph below the branched block of the graph. |}

=== Event ===

==== Event ==== Fires animation events when the node is activated or condition is fulfilled. This is useful when we need to signal other parts of engine or game code that a branch in animation graph became active (for example, audio engine can react to stance changes).

{| class="wikitable" ! Property ! Description |- | Tags | Tags set to animation output. |- | NodeGroup | Name of parent node group, visual and logical aid. |- | Child | Link to child node. |- | Events | List of events and their conditions * AnimSrcEvent : {| class="wikitable" ! Property ! Description |- | Name | Event identifier |- | Comment | Any explaining messages belong here. Ignored in runtime. |- | MainPathOnly | When enabled, event is sampled only on main path |- | InitOnly | Event is sampled just on node init (Event Node only) |- | Condition | When filled in, event is sampled only if this condition results true. (Event Node only) |- | Once | When enabled, this events triggers only on first frame the condition is valid. Re-trigger is possible only after a frame the condition evaluates to false (Event Node only). |- | Frame | Frame number of the event start (Animation only) |- | FrameCount | Duration of the event (Animation only) |} * '''AnimSrcEventGeneric''' : AnimSrcEvent : {| class="wikitable" ! Property ! Description |- | UserString | Additional string attribute |- | UserInt | Additional integer attribute |} * '''AnimSrcEventAudio''' : AnimSrcEvent |}

=== Function ===

==== Function Begin ==== Function Begin and Function end surround graph block which can be called (reused) on multiple other places.

{| class="wikitable" ! Property ! Description |- | Tags | Tags set to animation output. |- | NodeGroup | Name of parent node group, visual and logical aid. |- | Child | Link to child node. First node inside the function block. |- | EndsCount | Number of function end points (FunctionEnd nodes) |}

==== Function Call ==== Redirects evaluation into a function - a block of nodes starting with Function Begin. After the evaluation inside the block reaches any Function End, evaluation resumes at this place.

{| class="wikitable" ! Property ! Description |- | Tags | Tags set to animation output. |- | NodeGroup | Name of parent node group, visual and logical aid. |- | Method | Function name (Function Begin node name) |- | Child0 | ''No description'' |- | Child1 | ''No description'' |- | Child2 | ''No description'' |- | Child3 | ''No description'' |- | Child4 | ''No description'' |- | Child5 | ''No description'' |- | Child6 | ''No description'' |- | Child7 | ''No description'' |}

==== Function End ==== Function Begin and Function end surround graph block which can be called (reused) on multiple other places.

{| class="wikitable" ! Property ! Description |- | Tags | Tags set to animation output. |- | NodeGroup | Name of parent node group, visual and logical aid. |- | EndIndex | Index of a following child node at call site. |}

=== Group Select ===

==== Group Select ==== Selects an active column in anim set group. Animation and constants identifiers may then omit column name because it is selected by this node. Example: Group select node selects column "Erc" in group "Locomotion". Source node below refers to animation "Locomotion.Walk" but active column is filled in, resulting in unique animation identifier "Locomotion.Erc.Walk".

{| class="wikitable" ! Property ! Description |- | Tags | Tags set to animation output. |- | NodeGroup | Name of parent node group, visual and logical aid. |- | Child | Link to child node |- | Group | Anim set group containing the column |- | Column | Anim set column within the group to be selected |}

=== IK ===

==== IK2 ==== Node which applies inverse kinematics on a chain of bones to reach a specific target.

{| class="wikitable" ! Property ! Description |- | Tags | Tags set to animation output. |- | NodeGroup | Name of parent node group, visual and logical aid. |- | Child | Link to child node |- | Weight | Weight (0-1). When zero, no IK is applied, when one, IK is fully applied. |- | Chains | List of chains and their IK targets.

* '''AnimSrcIkBinding''' : {| class="wikitable" ! Property ! Description |- | IkTarget | IK target name |- | IkChain | IK chain name |} |- | Solver | Select an instance of IK solver to run.

* '''AnimSrcNodeIK2Solver''' * '''AnimSrcNodeIK2FabrikSolver''' : AnimSrcNodeIK2Solver<br>Iterative solver with basic rotation limits. : {| class="wikitable" ! Property ! Description |- | SnapRotation | Snap rotation of end effector to align with IK target. |- | RotationLimitPerBone | Maximum rotation [degrees] applied per bone in chain |- | TightenToTarget | Percentage of chain where rotation limit tightens to zero |- | TwistPropagation | Percentage of chain receiving twist from the snapped rotation |- | MaxIterations | Maximum number of iterations when the solver stops even if the target is not reached |} * '''AnimSrcNodeIK2TwoBoneSolver''' : AnimSrcNodeIK2Solver<br>Analytic two-bone solution. If the chain contains more than two bones, it is split into two segments by its mid-joint. : {| class="wikitable" ! Property ! Description |- | SnapRotation | Snap rotation of end effector to align with IK target. |- | AllowStretching | Allow chain stretching when the IK target is out of reach. |- | MidPivotTwist | Additional twist of mid pivot plane in radians. |} * '''AnimSrcNodeIK2LookAtSolver''' : AnimSrcNodeIK2Solver<br>Solver which rotates the chain that its end effector is facing the target. : {| class="wikitable" ! Property ! Description |- | Axis | Axis to aim at target. |} * '''AnimSrcNodeIK2LookInDirSolver''' : AnimSrcNodeIK2Solver<br>Solver which rotates the chain that its end effector is aligned with selected axis of the target. : {| class="wikitable" ! Property ! Description |- | Axis | Axis to aim in target's direction. |- | TargetAxis | Target axis chosen as its direction. |} * '''AnimSrcNodeIK2PoleSolver''' : AnimSrcNodeIK2Solver<br>Solver rotating around twist axis, aligning mid-joint with the target. |}

==== IK2 Plane ==== Computes inverse kinematics on a chain to reach target plane. Target planes are set by application (character/gameplay programmers).

{| class="wikitable" ! Property ! Description |- | Tags | Tags set to animation output. |- | NodeGroup | Name of parent node group, visual and logical aid. |- | Child | Link to child node |- | Weight | Weight (0-1). When zero, no IK is applied, when one, IK is fully applied. |- | Chains | List of chains and their IK plane targets. * AnimSrcIkBinding : {| class="wikitable" ! Property ! Description |- | IkTarget | IK target name |- | IkChain | IK chain name |} |- | ActiveDistance | Thresholding distance [m]. If the end effector is further, no IK is applied even when weight is one. In meters. |- | ThresholdSmoothness | Smoothing region [m] to turn on IK continuously. |- | SnapRotation | Snap the rotation of end effector to be the same as ik target rotation. |- | CustomNormal | When zero, IK2 Plane pushes the end effector along the normal of plane. In some situations it may be feasible to move it in a custom direction, for example pushing up when correcting feet by IK. |}

==== IK2 Target ==== Creates an ik target from model-space position of a bone or end effector of a chain.

{| class="wikitable" ! Property ! Description |- | Tags | Tags set to animation output. |- | NodeGroup | Name of parent node group, visual and logical aid. |- | Child | Link to child node |- | Chains | List of ik targets to be created and assigned transform from specified chains. Additional offsets might be applied. * '''AnimSrcIkTargetBinding''' : {| class="wikitable" ! Property ! Description |- | IkTarget | IK target name |- | IkChain | Chain name |- | LocalSpaceOffset | Offset applied to chain in local space (affected by parent transforms) |} * '''AnimSrcTransformOffset''' : {| class="wikitable" ! Property ! Description |- | Position | Position offset |- | Rotation | Rotation offset |- | Pose | Source id of an animation pose. This pose is used to set the local offset from chain's end effector. Serves probably better than guessing transform numbers. Note: column/group selects apply here same way as in source nodes. Example: when we were constraining left hand to first person camera, we exported a pose with two bones in world space - head and left hand. Then these two bones describe the offset where to place an IK target. |- | FromBone | Offset is measured from bone having this name... |- | ToBone | Offset is measured to bone having this name. |- | FromFrame | Offset is measured from bone sampled on this frame |- | ToFrame | Offset is measured to bone sampled on this frame. |- | BonesAreInModelSpace | When checked, the pose is in model space and does not need to accumulate bones from local space. |} |- | ModelSpaceOffset | Offset applied to chain in model space (unaffected by parent transforms) * '''AnimSrcTransformOffset''' : {| class="wikitable" ! Property ! Description |- | Position | Position offset |- | Rotation | Rotation offset |- | Pose | Source id of an animation pose. This pose is used to set the local offset from chain's end effector. Serves probably better than guessing transform numbers. Note: column/group selects apply here same way as in source nodes. Example: when we were constraining left hand to first person camera, we exported a pose with two bones in world space - head and left hand. Then these two bones describe the offset where to place an IK target. |- | FromBone | Offset is measured from bone having this name... |- | ToBone | Offset is measured to bone having this name. |- | FromFrame | Offset is measured from bone sampled on this frame |- | ToFrame | Offset is measured to bone sampled on this frame. |- | BonesAreInModelSpace | When checked, the pose is in model space and does not need to accumulate bones from local space. |} |- | Bones | List of ik targets to be be created and assigned transform from specified model-space transforms of bones.

* '''AnimSrcIkTargetBinding''' : {| class="wikitable" ! Property ! Description |- | IkTarget | IK target name |- | Bone | Measured offset from bone of this name... |} |}

==== IK Lock ==== Animation node locking the ik target in place and applying two-bone IK solver.

{| class="wikitable" ! Property ! Description |- | Tags | Tags set to animation output. |- | NodeGroup | Name of parent node group, visual and logical aid. |- | Child | Link to child node |- | IsLocked | Expression enabling the lock. |- | BlendinTime | Blend time for IK to fully take over. |- | BlendoutTime | Blend time for IK to be fully released. |- | SnapRotation | Snap the rotation of end effector to be the same as ik target rotation. |- | World | Name of world transform delta passed by the game. This can be used to lock targets onto moving ground, for example. |- | Chains | List of IK targets and affected chains * '''AnimSrcIkBinding''' : {| class="wikitable" ! Property ! Description |- | IkTarget | IK target name |- | IkChain | IK chain name |} |}

==== IK Rotation ==== Animation node applying inverse kinematics to reach target rotation, local translations are untouched. When enabled, rotation of end-effector is identical to IK target, parent bones receive a fraction of the rotation. Useful for spine inverse kinematics instead of counter-animating hip rotations.

{| class="wikitable" ! Property ! Description |- | Tags | Tags set to animation output. |- | NodeGroup | Name of parent node group, visual and logical aid. |- | Child | Link to child node |- | Weight | Weight (0 - 1). When zero, no rotation changes are applied, when one, rotations are fully applied. |- | Chains | List of IK targets and affected chains * '''AnimSrcIkBinding''' : {| class="wikitable" ! Property ! Description |- | IkTarget | IK target name |- | IkChain | IK chain name |} |}

==== RBF ==== ''No description''

{| class="wikitable" ! Property ! Description |- | Tags | Tags set to animation output. |- | NodeGroup | Name of parent node group, visual and logical aid. |- | Child | ''No description'' |- | Rbf | ''No description'' |}

==== Weapon IK ==== Specialized node positioning arms according to aim direction and applying 2-joint ik on arms to snap to weapon. Algorithm: Compares current weapon direction with desired direction. Rotate weapon to correct direction. Snaps primary and secondary chain (arms) onto weapon.

{| class="wikitable" ! Property ! Description |- | Tags | Tags set to animation output. |- | NodeGroup | Name of parent node group, visual and logical aid. |- | Child | Link to child node |- | IkconfigName | Name of the Weapon IK configuration |- | Ikconfig | Configuration. Exposes IK pose channels to solver. Defines primary and secondary chain and their orientation. |- | BlendInTime | Blending time to fully enable 'Aim On', 'Prim On' and 'Sec On'. |- | BlendOutTime | Blending time to fully disable 'Aim On', 'Prim On' and 'Sec On'. |- | WeightAim | Enable aiming correction. |- | WeightPrimaryChain | Enable IK on primary chain (right arm). |- | WeightSecondaryChain | Enable IK on secondary chain (left arm). |- | WeaponDirLr | Horizontal weapon aiming angle, used when Aim On=1 |- | WeaponDirUd | Vertical weapon aiming angle, used when Aim On=1 |- | WeaponRoll | Weapon roll, used when Aim On=1 |- | WeaponTransX | Additional weapon translation in model-space X direction |- | WeaponTransY | Additional weapon translation in model-space Y direction |- | WeaponTransZ | Additional weapon translation in model-space Z direction |}

=== Memory ===

==== Memory ==== Allows to save several bones into the local memory and fill them in on later frames if they are not present in pose buffer anymore.

{| class="wikitable" ! Property ! Description |- | Tags | Tags set to animation output. |- | NodeGroup | Name of parent node group, visual and logical aid. |- | BoneMask | Bone mask with a list of remembered bones |- | Child | Link to child node |}

=== Procedural ===

==== Constraint ==== ''No description''

{| class="wikitable" ! Property ! Description |- | Tags | Tags set to animation output. |- | NodeGroup | Name of parent node group, visual and logical aid. |- | Child | Link to child node |- | Weight | Weight of the applied constraint |- | Constraint | Select a constraint to be applied * '''AnimSrcConstraint''' : {| class="wikitable" ! Property ! Description |- | AffectedBone | Name of bone affected by the constraint. If filled in, affected IK target must remain empty. |- | AffectedIk | Name of IK target affected by the constraint. If filled in, affected bone must remain empty. |- | TargetBone | Target bone for the constraint solver. If filled in, target IK target must remain empty. |- | TargetIk | Target IK target for the constraint solver. If filled in, target bone must remain empty. |- | InitPose | Constraint can be initialized from current or bind pose. |- | CustomSpace | If filled in, constraint is computed in custom space * '''AnimSrcConstraintCustomSpace''' : {| class="wikitable" ! Property ! Description |- | AffectedSpace | ''No description'' |- | AffectedPivotBone | ''No description'' |- | AffectedPivotIk | ''No description'' |- | TargetSpace | ''No description'' |- | TargetPivotBone | ''No description'' |- | TargetPivotIk | ''No description'' |} |} * '''AnimSrcConstraintPosition''' : AnimSrcConstraint<br>Constraint which can fixate translation offset between two bones (or ik targets). The offset can also decay over time. : {| class="wikitable" |- ! Property ! Description |- | OffsetSoftLimit | Threshold which where the limit distance starts to be applied softly. Must be less than hard limit. |- | OffsetHardLimit | Maximum distance travelled from original position. |- | OffsetDampening | Rate of decay from offset hard limit to offset soft limit. Zero means immediate dampening, one means no dampening. |- | Components | Influence per component X, Y, Z. |} * '''AnimSrcConstraintParent''' : AnimSrcConstraint<br>Constraint which can fixate translation and rotation offset between two bones (or ik targets). : {| class="wikitable" ! Property ! Description |- | RotateFirst | Rotate affected around target first before resolving position. |} |}

==== Procedural ==== AnimNodeProcTransform applies procedural transform on a set of joints or IK targets through entered expressions.

{| class="wikitable" ! Property ! Description |- | Tags | Tags set to animation output. |- | NodeGroup | Name of parent node group, visual and logical aid. |- | Child | Link to child node |- | Expression | Applied amount multiplier. |- | Bones | List of operations on bones * AnimSrcNodeProcTrBoneItem : {| class="wikitable" ! Property ! Description |- | Bone | Name of affected bone |- | Axis | Translation/rotation axis |- | Space | Proc transform can be done in model-space, local-space or pivot-space. |- | Op | Operation to perform (translation, rotation, ...) |- | Amount | Applied amount, multiplied by shared Expression in the node |- | PivotBone | Pivot bone, used when operating in pivot-space |- | PivotIk | Pivot IK target, used when operating in pivot-space |} |- | IkTargets | List of operations on IK targets * '''AnimSrcNodeProcTrIkTargetItem''' : {| class="wikitable" ! Property ! Description |- | IkTarget | Name of affected IK target |- | Axis | Translation/rotation axis |- | Space | Proc transform can be done in model-space, local-space or pivot-space. |- | Op | Operation to perform (translation, rotation, ...) |- | Amount | Applied amount, multiplied by shared Expression in the node |- | PivotBone | Pivot bone, used when operating in pivot-space. |- | PivotIk | Pivot IK target, used when operating in pivot-space |} |}

=== Sleep ===

==== Sleep ==== Sleep node can turn off evaluation of all its child nodes and return empty result instead, drastically saving performance. The node goes to sleep after its awake condition is not fulfilled during entire timeout period. In an ideal case, it should be used as a starting node - when sleeping, many processes inside graph evaluation are skipped early.

{| class="wikitable" ! Property ! Description |- | Tags | Tags set to animation output. |- | NodeGroup | Name of parent node group, visual and logical aid. |- | Child | Link to child node |- | AwakeExpr | When false, node goes to sleep mode after a timeout, effectively turning off child nodes. |- | Timeout | Timeout before going to sleep mode. Awake expression resets the timeout. |}

=== Source ===

==== Bind Pose ==== Sample bind pose of the animated mesh.

{| class="wikitable" ! Property ! Description |- | Tags | Tags set to animation output. |- | NodeGroup | Name of parent node group, visual and logical aid. |- | BoneMask | Inclusive bone mask restricts which bones are sampled. If no mask is specified, all bones are sampled. |}

==== Pose ==== Sample a pose from an animation. Unlike Source node, Pose node does not play the animation, sampled frame is computed from an expression. Pose node blends between two closest frames when the variable value falls between them. Example usage: steering in a vehicle, having all steering poses in one animation and using a variable to select a pose to be played

{| class="wikitable" ! Property ! Description |- | Tags | Tags set to animation output. |- | NodeGroup | Name of parent node group, visual and logical aid. |- | Source | Animation source id in format Group.Column.Animation or Group.Animation when relying on Group Select nodes. |- | Time | Normalized sampling time (0 - 1) |}

==== Pose 2 ==== Samples a pose from an animation based on control expressions and 2D table. Similar to plain Pose node, but it works in two-dimensional space. Example usage: Aim Spaces and Look Animations - mapping horizontal and vertical direction to a pose.

{| class="wikitable" ! Property ! Description |- | Tags | Tags set to animation output. |- | NodeGroup | Name of parent node group, visual and logical aid. |- | Source | Animation source id in format Group.Column.Animation or Group.Animation when relying on Group Select nodes. |- | ValueX | Expression for the X coordinate |- | ValueY | Expression for the Y coordinate |- | Table | Table remapping X and Y coord to frames |}

==== Source ==== Plays an animation from anim set. Playback can be looped.

{| class="wikitable" ! Property ! Description |- | Tags | Tags set to animation output. |- | NodeGroup | Name of parent node group, visual and logical aid. |- | Source | Animation source id in format Group.Column.Animation or Group.Animation when relying on Group Select nodes. |- | Looptype | Enables looped playback. |- | Interpolate | When enabled, keyframes are interpolated during playback. |- | Predictions | List of sampled predictions (future bone transforms in the animation)

* AnimSrcNodePrediction : {| class="wikitable" ! Property ! Description |- | Name | Prediction name |- | Bone | Name of channel to be sampled. |- | Event | Bind the time of this prediction to an event with matching name. |- | PercentTime | Normalized time of the prediction [0 - 1]. |- | Translation | Select when translation should be sampled. |- | Rotation | Select when rotation should be sampled. |- | MainPath | Select when the prediction should be sampled only on graph's main path. |} |- | BonesInterpolatedInModelSpace | List of bones interpolated in model-space, which be required to prevent stutters caused by inheriting all interpolations in hierarchy. |- | ReportDistance | Using root motion channel, report sample distance travelled until end of cycle (when looped) or animation (when unlooped). |}

==== Source InLoopOut ==== Plays an animation from anim set. The animation is divided by events into three segments: intro, loop, outro. Playback leaves the looped region only a condition is fulfilled.

{| class="wikitable" ! Property ! Description |- | Tags | Tags set to animation output. |- | NodeGroup | Name of parent node group, visual and logical aid. |- | Source | Animation source id in format Group.Column.Animation or Group.Animation when relying on Group Select nodes. |- | InEvent | Name of event marking the end of intro and start of looped region. |- | OutEvent | Name of event marking the end of looped region and start of outro. |- | EndExpression | If the expression results in true, further looping is disabled, allowing playback to reach the end. |}

==== Source Sync ==== Plays an animation from anim set using normalized time. Playback can be looped.

{| class="wikitable" ! Property ! Description |- | Tags | Tags set to animation output. |- | NodeGroup | Name of parent node group, visual and logical aid. |- | Source | Animation source id in format Group.Column.Animation or Group.Animation when relying on Group Select nodes. |- | Looptype | Enables looped playback. |- | Predictions | List of sampled predictions (future bone transforms in the animation) * '''AnimSrcNodePrediction''' : {| class="wikitable" ! Property ! Description |- | Name | Prediction name |- | Bone | Name of channel to be sampled. |- | Event | Bind the time of this prediction to an event with matching name. |- | PercentTime | Normalized time of the prediction [0 - 1]. |- | Translation | Select when translation should be sampled. |- | Rotation | Select when rotation should be sampled. |- | MainPath | Select when the prediction should be sampled only on graph's main path. |} |- | SyncLine | Name of sync line which maps normalized time to events in the animation. |- | ReportDistance | Using root motion channel, report sample distance travelled until end of cycle (when looped) or animation (when unlooped). |}

=== State Machine ===

==== State ==== Represents one state inside state machine node, serves as a bridge from state machine to other nodes. State node cannot exist on its own.

{| class="wikitable" ! Property ! Description |- | Child | Link to child node |- | StartCondition | Evaluated on state machine initialization, first state returning true becomes active |- | TimeStorage | By default, time is 'inherited' from parent nodes. Change if you want to measure time locally. |- | IsExit | Enable to pass remaining time from child node to parent of state machine. Disable to mask out the remaining time. |- | PassThrough | State machine will try to leave this state even if it was just entered. Child nodes are still evaluated. Pass-through is ignored in post-eval. |}

==== State Machine ==== State machines contain multiple state nodes and transitions between them. One of the states is marked 'active'. On every frame, state machine evaluates transitions leading from the active state and if their condition is fulfilled, target state of the transition becomes the new 'active' state. Previous state keeps playing for a short 'blend-out' time, if specified by transition.

{| class="wikitable" ! Property ! Description |- | States | List of state nodes inside state machine. * '''State'''<br>Represents one state inside state machine node, serves as a bridge from state machine to other nodes. State node cannot exist on its own. : {| class="wikitable" ! Property ! Description |- | Child | Link to child node |- | StartCondition | Evaluated on state machine initialization, first state returning true becomes active |- | TimeStorage | By default, time is 'inherited' from parent nodes. Change if you want to measure time locally. |- | IsExit | Enable to pass remaining time from child node to parent of state machine. Disable to mask out the remaining time. |- | PassThrough | State machine will try to leave this state even if it was just entered. Child nodes are still evaluated. Pass-through is ignored in post-eval. |} |- | Transitions | List of transitions inside state machine. * '''AnimSrcNodeTransition''' : {| class="wikitable" ! Property ! Description |- | FromState | Source state |- | ToState | Target state |- | Duration | Transition blending time |- | StartTime | Start time to be set on the target state once transition triggers |- | Condition | Once true, state machine will set target state as its new active state. |- | BlendFn | Blend weight shaping (linear, s-curve, etc.). |- | PostEval | Post-eval transition is evaluated in bottom-up phase of this part of animation graph. |- | Reentering | ''No description'' |- | Priority | Set the order of evaluating transition conditions. Lower value is evaluated earlier. |- | MotionVecBlend | Root motion blending options. |- | Events | Fired event once this transition is triggered * '''AnimSrcEvent''' : {| class="wikitable" ! Property ! Description |- | Name | Event identifier |- | Comment | Any explaining messages belong here. Ignored in runtime. |- | MainPathOnly | When enabled, event is sampled only on main path |- | InitOnly | Event is sampled just on node init (Event Node only) |- | Condition | When filled in, event is sampled only if this condition results true. (Event Node only) |- | Once | When enabled, this events triggers only on first frame the condition is valid. Re-trigger is possible only after a frame the condition evaluates to false (Event Node only). |- | Frame | Frame number of the event start (Animation only) |- | FrameCount | Duration of the event (Animation only) |} * '''AnimSrcEventGeneric''' : AnimSrcEvent : {| class="wikitable" ! Property ! Description |- | UserString | Additional string attribute |- | UserInt | Additional integer attribute |} * '''AnimSrcEventAudio''' : AnimSrcEvent |- | Tags | Tags set on the output during this transition. |} |}

=== Tag ===

==== Tag ==== Adds a tag to animation output. The node can also temporarily add tags just for child nodes.

{| class="wikitable" ! Property ! Description |- | Tags | Tags set to animation output. |- | NodeGroup | Name of parent node group, visual and logical aid. |- | Child | Link to child node |- | ChildTags | List of tags passed to the child nodes but not to the parent nodes. |}

=== Time ===

==== Time Save ==== Anim graph node saving time into stash.

{| class="wikitable" ! Property ! Description |- | Tags | Tags set to animation output. |- | NodeGroup | Name of parent node group, visual and logical aid. |- | Child | Link to child node |- | TimeName | Storage name |}

==== Time Scale ==== AnimNodeTimeScale scales the input time, effectively slowing down or speeding up animations in the subtree below.

{| class="wikitable" ! Property ! Description |- | Tags | Tags set to animation output. |- | NodeGroup | Name of parent node group, visual and logical aid. |- | Child | Link to child node |- | TimeExpr | Multiplier remapping time. For example, 2.0 will cause the subtree to run twice as fast. |- | TimeStorage | By default, time is 'inherited' from parent nodes. Change if you want to measure time locally. |- | TimeMappingTable | When filled in, result from TimeExpr is remapped through this table to new actual value of the multiplier. |}

==== Time Use ==== Anim graph node restoring time from stash.

{| class="wikitable" ! Property ! Description |- | Tags | Tags set to animation output. |- | NodeGroup | Name of parent node group, visual and logical aid. |- | Child | Link to child node |- | TimeName | Storage name |- | TimeType | Specify type of restored time - either real or normalized. |}

=== Variables ===

==== Var Reset ==== Anim Node Var Set - sets variable values when defined conditions are met

{| class="wikitable" ! Property ! Description |- | Tags | Tags set to animation output. |- | NodeGroup | Name of parent node group, visual and logical aid. |- | Child | Link to child node |- | VarReset | List of variables to be reset to original game input * '''AnimSrcNodeVarResetItem''' : {| class="wikitable" ! Property ! Description |- | VariableName | ''No description'' |- | SetOnInit | When enabled, variable is set on init (first frame) |- | SetOnMainPath | When enabled, variable is set every frame on main path |- | SetOnBlendOut | When enabled, variable is set every frame on secondary path (when blending out) |} |}

==== Var Set ==== Sets new value to variables when conditions are met. Changes apply only to child nodes.

{| class="wikitable" ! Property ! Description |- | Tags | Tags set to animation output. |- | NodeGroup | Name of parent node group, visual and logical aid. |- | Child | Link to child node |- | VarSet | List of variables to be set to new value. Value is restored once returning to parent node. * '''AnimSrcNodeVarSetItem''' : {| class="wikitable" ! Property ! Description |- | VariableName | Variable name |- | SetOnInit | When enabled, variable is set on init (first frame) |- | SetOnMainPath | When enabled, variable is set every frame on main path |- | SetOnBlendOut | When enabled, variable is set every frame on secondary path (when blending out) |- | PostEval | When enabled, value is updated after child nodes, stored and applied for the subtree on next frame. |} * '''AnimSrcNodeVarSetBoolItem''' : AnimSrcNodeVarSetItem<br>Change value of bool variable. Changes apply only to child nodes. : {| class="wikitable" ! Property ! Description |- | Value | New bool value |} * '''AnimSrcNodeVarSetIntItem''' : AnimSrcNodeVarSetItem<br>Change value of int variable. Changes apply only to child nodes. : {| class="wikitable" ! Property ! Description |- | Value | New int value |} * '''AnimSrcNodeVarSetFloatItem''' : AnimSrcNodeVarSetItem<br>Change value of float variable. Changes apply only to child nodes. : {| class="wikitable" ! Property ! Description |- | Value | New float value |} * '''AnimSrcNodeVarSetStringItem''' : AnimSrcNodeVarSetItem<br>Change value of string variable. Changes apply only to child nodes. : {| class="wikitable" ! Property ! Description |- | Value | New string value |} |}

==== Var Update ==== Limit control variable updates by conditions, limit change rate. Changes apply only to child nodes. Example Usage: Freeze movement direction variable when blending out from a branch.

{| class="wikitable" ! Property ! Description |- | Tags | Tags set to animation output. |- | NodeGroup | Name of parent node group, visual and logical aid. |- | Child | Link to child node |- | VarUpdate | List of variables with limited update rate. Limits apply only to child nodes.

* '''AnimSrcNodeVarUpdateItem''' : {| class="wikitable" ! Property ! Description |- | VariableName | Identifier |- | UpdateOnInit | When enabled, variable is updated on init (first frame) |- | UpdateOnMainPath | When enabled, variable is updated every frame on main path |- | UpdateOnBlendOut | When enabled, variable is updated every frame on secondary path (when blending out) |- | PostEval | When enabled, value is updated after child nodes, stored and applied for the subtree on next frame. |- | Condition | When filled in, variable is updated only when this condition is fulfilled. |- | MaxDifferencePerSecond | Maximum difference of value per second. Variable value will not change faster below this node. Float variables only. |- | IsCyclic | When enabled, variable might blend towards target 'the other way around' its range. Useful for example for motion direction angle. |} |}

== See Also ==

* {{Link|Arma Reforger:Animation Editor}} * {{Link|Arma Reforger:Animation Editor: State Machine}} * {{Link|Arma Reforger:Animation Editor: Sync Tutorial}}

{{GameCategory|armaR|Modding|Official Tools}}
6ubmvl81o4pe3r6b01cz5ih3rstg8by

# Arma Reforger:Animation Editor: State Machine

5050
32815
364651
337229
2024-05-24T20:07:48Z
Lou Montana
10739
Text replacement - "ized" to "ised"
364651
wikitext
text/x-wiki
{{TOC|side}} This article explains the concepts of a state machine and how they can be used in animation graphs.

== State Machine ==

A '''State Machine''' is a basic functionality in any graph, and it is what decides what the animated object is currently doing, whether that is moving, idling, eating, eating while moving, and so on. A character can be in multiple '''States''' at once, but generally stays in one at a time.

== State ==

A '''State''' is a child of the '''State Machine'''. It can be named anything and it will not conflict with the rest of the graph, as long as the name is unique inside its '''State Machine'''.

Each '''State''' has its own set of properties: {| class="wikitable" ! State ! Description |- | '''Link''' | Every '''State''' has a '''Link''' that it connects to something in a graph, such as a '''Source Node, Blend Node''', or another '''State Machine'''.

A node outside of the '''State Machine''' cannot link directly to a '''State''' inside of the machine, only to the '''State Machine''' itself. |- | '''Time''' | Each '''State''' handles its own time inside of its '''Time''' property and it has three options.

'''Notime:''' The '''State''' does not keep any time, or use any time. Used when the '''State''' is linking to another '''State Machine''' that handles its own time.

'''Realtime:''' The '''State''' keeps time, and the time is incrementing as normal time. This is used primarily when the '''State''' is linking directly to an animation that needs to loop or transition out of the '''State'''.

'''Normtime:''' The '''State''' keeps the time '''Normalised''', which means that time inside of the state is going to be uniform and if passed to another node (described how to later) it is going to be the same for each node that it passes to. |- | '''Start Condition''' | When the parent '''State Machine''' of the '''State''' is first reached, the '''Start Condition''' of each '''State''' is evaluated, and depending on which one is true, that one will be the starting '''State'''. If '''none is true''', the '''first''' node that was created in that '''State Machine will be chosen'''. This should be avoided when possible, as it could lead to unwanted final results. |- | '''Exit''' | When this is checked, any time that this node has will be passed up to the '''State Machine''' above, assuming there is one. This is explained in depth inside of the '''Transitions''' article. |}

== Transition ==

Transitions are needed to go between between '''States''' inside of '''State Machines'''.

To create a transition, right click on a '''State''' and click '''Insert Transition''' and then click on the next '''State''' to create the transition between them.

All transitions have these properties: {| class="wikitable" ! Property ! Description |- | '''From''' | The node that the transition will go from |- | '''To''' | The node that the transition will go to |- | '''Condition''' | On the condition that the transition will execute upon. Read the '''Functions and Conditions''' article for further information on what syntax it uses. |- | '''Post Eval''' | Tick to enable. If the transition is using time to evaluate within its condition statement or while send time through its start time, this '''needs to be ticked''' ('''VERY IMPORTANT'''). Read more on this in '''Functions and Conditions'''.

This is because the transition needs to keep the data even after the tick has finished evaluating. |- | '''Duration''' | The blend duration of the transition.

'''Note:''' Has to be decimals, eg. 0.3, 1.0, or 0.0.

If 0 or 1 are typed then they become an integer, and an error will appear. |- | '''Start Time''' | Using this will make the node the transition is blending to start at this time. Can be used to send time from one state to another. See '''Functions and Conditions'''. |- | '''Blend Fn''' | Lin - Linear

SStart - Curve in then linear

SEnd - Linear then curve out

S - Blend in blend out

S2 - Similar to blend in and blend out, but with a dip down at the start and a dip up near the end |}

== Statements ==

This article lists conditional statements that can be used in State Machine's start conditions or transitions.

=== Operators ===

Used when comparing inputs. {| class="wikitable" ! Operator ! Name ! Example |- | == | Equals | (integer_1 == integer_2), if integer_1 is equal to integer_2, returns '''true.''' |- | != | Not Equal | (float_1 != float_2), if float_1 is not equal to float_2, returns '''true.''' |- |> | Greater than | (integer_1 > integer_2), if integer_1 is greater than integer_2, returns '''true.''' |- |< | Lesser than | (float_1 < float_2), if float_1 is lesser than float_2, returns '''true.''' |- |>= | Greater than or equals | (integer_1 >= integer_2), if integer_1 is greater or equal than integer_2, returns '''true.''' |- |<= | Lesser than or equals | (float_1 <= float_2), if float_1 is lesser or equal than float_2, returns '''true.''' |- |! | Not | (!boolean), if boolean is '''true''', return '''false'''. If boolean is '''false''', return '''true'''. "Inverts" booleans. |- | && | And | (float_1 > float_2 && boolean), if float_1 is greater than float_2, '''AND''' boolean is '''true''', return '''true'''. If '''any''' of part of the operation is '''false''', return '''false.''' |- | <nowiki>||</nowiki> | Or | <nowiki>(integer_1 <= integer_2 || boolean), if integer_1 is lesser or equal than integer_2, </nowiki>'''OR''' boolean is '''true''', if '''any''' of part of the operation is '''true''', return '''true'''. If all parts of the operation is '''false''', return '''false.''' |}

Example: {| class="wikitable" ! Name ! Type ! Description |- | MovementSpeed | Float | 0 - Idle

1 - Walk

2 - Run

3 - Sprint |- | Stance | Integer | 0 - Stand 1 - Crouch 2 - Prone |- | Aiming | Boolean | True - Aiming

False - Not aiming |} If the character is either running or sprinting and he is standing up, return true.

'''MovementSpeed >= 2 && Stance == 0'''

If the character is currently not moving and not prone, return true.

'''MovementSpeed == 0 && Stance != 2'''

If the character is not aiming and not moving while crouched OR the character is aiming and moving:

'''(!Aiming && MovementSpeed == 0 && Stance == 1) || (Aiming && MovementSpeed > 0)'''

=== Functions ===

These functions are primarily used when needing to evaluate time, or using commands to transition and/or evaluating start conditions. {| class="wikitable" ! Name ! Description ! Note ! Usage |- | abs(value) | Returns the absolute value | | removes the sign of number |- | clamp(value, min, max) | Clamp the value to the range. | | Returns min if value <= min, returns max if value >= max. Returns unmodified value otherwise. |- | cos(value) | Trigonometric function cosinus. | Argument is in radians, not degrees. | |- | deg(value) | Convert radians to degrees. | | |- | float(value) | Converts integer value to float (decimal number). | | Commonly this is implicit, but sometimes the conversion should be forced to match correct function. |- | GetCommandF(command name) op float | Returns the float value (decimal number) given by the command matching the given command name | if there's no command found the return is invalid float (-3.402823466e+38F) | Could be used when a command such as CMD_VehicleGetOut is called, and the float is the speed of the vehicle. If zero, step out, if greater than zero, jump out. |- | GetCommandI(command name) op int | Returns the integer value given by the command matching the given command name | if there's no command found the return is invalid integer (-2147483648) | If you have a command, such as CMD_Action, and you trigger the action with the integer 0, you could transition on 0, but not on 1. |- | GetCommandIa(command name) op int

GetCommandIb(command name) op int

GetCommandIc(command name) op int

GetCommandId(command name) op int | Integer value share storage with four small integers. This function returns value of small integer A,B,C or D retrospectively. | if there's no command found the return is invalid integer (-2147483648) | Memory space is shared with the normal integer value. Use either entire integer storage or the smaller parts.

A,b,c,d parts are accessible for programmers - named the same way to prevent confusion.

Could be used when a command such as CMD_VehicleGetOut is called, part A contains door number (front left, front right...) and part B action type (get out slowly, quickly, jump out...). |- | GetEventTime("animName", "eventName") | returns float time of the event time in animation | | usage -> starttime expression in transition

GetEventTime("ladder.enterOn", "LegUp")

starts new state where the event "LegUp" is in animation of entering ladder

This function works only in post-eval! |- | GetLowerRTime() | Returns the raw real-time value of the previous state. | If used in transition, enable '''Post Eval'''. Read more on '''Transitions.''' | |- | GetLowerTime() | Returns the time of the previous state | If used in transition, enable '''Post Eval'''. Read more on '''Transitions.''' | Used when transitioning from one animation to another, and the time of those two animations needs to line up. An example would be when '''Syncing Animations''', and you need to pass the time from one '''State''' to another. |- | GetRemainingTime() | Gets the time remaining of the current animation | If used in transition, enable '''Post Eval'''. Read more on '''Transitions.''' | If used like "GetRemainingTime() < 0.1", it works the same way RemainingTimeLess() does |- | GetStateTime() | Returns time spent in current state node (in seconds). Returns 0 when used outside state machines. | | |- | GetUpperNTime() | Gets the normalised time from the upper node. | | |- | GetUpperRTime() | Gets the real time from the upper node in the animation graph. | | |- | HasVariableChanged(variable) | Returns true if variable value has changed in comparison to last frame. | | |- | HasVariableChanged(variable, oldValue) | Returns true if variable value has changed and the old value was the same as the one given by argument. | | |- | HasVariableChangedTo(variable, newValue) | Returns true if variable value has changed and the new value is the same as the one given by argument. | | |- | HasVariableChanged(variable, oldValue, newValue) | Returns true if variable value has changed and both old and new values match. | | |- | IsAttachment("attachmentName") | Returns true if the attachment having the given name is set | | |- | IsCommand(command) | Returns true if command is called | | |- | IsEvent("eventName") | Returns true if there was sampled event | | This function works only in post-eval! |- | IsTag("tagName") | Return true if the tag is set | | This function works only in post-eval! |- | inRange(value, min, max) | Returns true if value >= min && value <= max | | |- | inRangeExclusive(value, min, max) | Returns true if value > min && value < max | | |- | isbitset(value, bitNumber) | Returns true if the specified bit is set in the given integer value. | | Value must be integer. Bits are numbered from the least significant to most significant. (example: for number 10011 the bits are: [4]=1, [3]=0, [2]=0, [1]=1, [0]=1 ) |- | int(value) | | | Commonly this is implicit, but sometimes the conversion should be forced to match correct function. |- | LowerNTimePassed(float) | Returns true if the normalised time given by parameter has passed. | If used in transition, enable '''Post Eval'''. Read more on '''Transitions.''' | This function works only in post-eval! |- | maskint(value, bitmask) | Returns "bitwise and" (value & bitmask) | | Bitwise and above two given values, both values must be integers. |- | max(value1, value2) | Returns the greater of two arguments. | | |- | min(value1, value2) | Returns the lesser of two arguments. | | |- | normalize(value, min, max) | Maps <code style="display: block">value</code> from original range (<code style="display: block">min-max</code>) to (<code style="display: block">0</code>-<code style="display: block">1</code>). Values outside are clamped. | | Effectively it is the same as writing <code style="display: block">clamp((x-from)/(to-from), 0, 1)</code>. |- | Random01() | Returns random value between 0 and 1. | | |- | rad(value) | Convert degrees to radians. | | |- | RandomPerc(percentage) | Returns true with a probability of percentage%. Valid range: 0-100. | | |- | RemainingTimeLess(float) | Returns true when the remaining animation time in child node is lesser than the float given | If used in transition, enable '''Post Eval'''. Read more on '''Transitions.''' | If used in a '''Transition''', it will transition if the remaining time is less than the float given

This function works only in post-eval! |- | sin(value) | Trigonometric function sinus. | Argument is in radians, not degrees. | |- | UpperNTimePassed(time) | Returns true if the normalised time coming from node above is greater than given argument. | | |}

{{GameCategory|armaR|Modding|Official Tools}}
h8fji2apg98ygpnfgjb9spva6u1thk8

# Arma Reforger:Animation Editor: Vehicle Action Commands

5050
32925
370351
352563
2024-12-02T13:57:46Z
Lou Montana
10739
Lou Montana moved page [[Arma Reforger:Animation Editor: Vehicles Actions Commands]] to [[Arma Reforger:Animation Editor: Vehicle Action Commands]]: Name standard
352563
wikitext
text/x-wiki
== Commands ==

=== CMD_Vehicle_GetIn === ''integers'' {| class="wikitable" ! A ! A ! B ! B ! C ! C |- | DoorFL | 0 | TeleportIn | 0 | | |- | DoorFR | 1 | GetIn | 1 | | |- | DoorBL | 2 | ... | 2 | | |- | DoorBR | 3 | | | | |}

=== CMD_Vehicle_GetOut === ''integers'' {| class="wikitable" ! A ! A ! B ! B ! C ! C |- | DoorFL | 0 | TeleportOut | 0 | | |- | DoorFR | 1 | GetOut | 1 | | |- | DoorBL | 2 | CrawlOut | 2 | | |- | DoorBR | 3 | JumpOut | 3 | | |- | | | ClimbOut | 4 | | |}

==== CMD_Vehicle_GearSwitch ==== to trigger gear switch, no particular integer

==== CMD_Vehicle_Engine_StartStop ==== {| class="wikitable" ! Integer ! Action |- | 0 | Interrupt animation |- | 1 | Initial Start animation |- | 2 | Final Start animation (based on Vehicle_StartSop event) |- | 3 | Engine Stop animation |}

==== CMD_Lights ==== {| class="wikitable" ! Integer ! Action |- | 0 | Interrupt |- | 1 | Lights On |- | 2 | Lights Off |}

== Variables ==

==== SeatPositionType ==== Variable (int) {| class="wikitable" ! Integer ! UAZ ! BTR ! Ural ! Jeep ! HMMWV ! M923 |- | 0 | Driver | Driver | Driver | Driver | Driver | Driver |- | 1 | Codriver | Commander | Codriver | Codriver | Codriver | Codriver |- | 2 | Passenger Left | Generic | Cargo Left Bench | Passenger Left | Passenger Left | Generic |- | 3 | Passenger Right | Generic | Cargo Right Bench | Passenger Right | Passenger Right | Generic |- | 4 | Passenger Middle | Generic | CodriverC | CodriverC | Generic | CodriverC |- | 5 |/ | Gunner |/ | Gunner | Gunner |/ |- | 6 | | | | | | |}

==== Pedals ==== {| class="wikitable" ! Name ! Type ! Usage |- | VehicleThrottle | float (0.0 - 1.0) | Amount that throttle pedal is pushed back (0.0 (not pushed) - 1.0 (pushed back completely)) |- | VehicleClutch | float (0.0 - 1.0) | Amount that clutch pedal is pushed back (0.0 (not pushed) - 1.0 (pushed back completely)) |- | VehicleBrake | bool | Toggle braking |}

{{GameCategory|armaR|Modding|Official Tools}}
j5hzzm6qykwjzzr6r94sscdvr4xx1e7

# Arma Reforger:Behavior Editor

5050
32995
364677
353600
2024-05-24T20:12:01Z
Lou Montana
10739
Text replacement - "ize " to "ise "
364677
wikitext
text/x-wiki
{{TOC|side}} == Editor Basics ==

[[File:armareforger behavioreditor-interface.jpg|600px]]

{| class="wikitable" ! N° ! Description |- | 1 | Node area |- | 2 | Nodes palette |- | 3 | Node parameters |- | 4 | Variables |- | 5 | Debug |- | 6 | Console |}

=== Shortcuts ===

{| class="wikitable" ! Shortcut ! Description |- | {{Controls|F9}} | Create/delete breakpoint |- | {{Controls|Ctrl|O}} | Open |- | {{Controls|Ctrl|S}} | Save |- | {{Controls|Ctrl|Shift|S}} | Save As |- | {{Controls|Ctrl|C}} | Copy |- | {{Controls|Ctrl|X}} | Cut |- | {{Controls|Ctrl|V}} | Paste |- | {{Controls|Del}} | Delete node, variable or connection |}

=== Controls ===

{| class="wikitable" ! Shortcut ! Description |- | Move around behavior tree | Hold {{Controls|LMB}} in free space |- | Connect nodes | Press {{Controls|LMB}} and drag from a black bar in the lower or upper part of the node, connect it to the black bar in another node. Connecting variables is analogous but with pins. |- | Select multiple nodes | {{Controls|Shift|LMB}} drag.

{{Controls|Ctrl|LMB}} on different nodes. |- | Zoom in/out | Mousewheel up/down. |- | Disconnect node | Select connection and press delete. |- | Organise nodes | When multiple nodes are selected, they can be aligned or grouped. |- | Open scripted node script | Double click on a scripted node |}

<!-- === Node parameters ===

{| class="wikitable" ! Parameter ! Description |- | | Node child index. It's executed after the previous 2 children of a selector, sequence or parallel node. |- | | A unique number of the node in Behavior Tree. |- | | The node can be Running. |- | | Scripted node. |} -->

== Behavior Tree ==

Editing behavior trees have a similar basis as FSM. Nodes are being executed from the Root node according to the rules of connection. The biggest difference is that BT is not limited to one state at one time, but can run on multiple branches at one time. There are conditions and effects in nodes, but also more advanced flow control mechanisms, that make BTs powerful, but also more complex. Each node returns {{hl|Success}}, {{hl|Failure}} or {{hl|Running}} to its parent node, which can decide the following steps according to the information.

Behavior trees take a slightly different approach from the usual script flow, but similarities can be found: an AND logic can be found in the Sequence node (checking all direct sub-nodes return Success) and an OR logic in the Selector node (checking at least one sub-node returns a Success, sub-nodes being numbered and evaluated from left to right). Behavior trees allow writing complex behaviors with multiple states which cannot be defined by simpler methods, like FSM.

=== Flow Control ===

* '''Root''' – basic node which serves as entry point to which other nodes are directed. * '''Sequence''' – all children nodes will be executed in sequence unless children returns Failure. Children nodes are assigned numbers to show the execution order. * '''Selector''' – opposite of sequence: After one of the executed children returns Success, other children will not be executed. Order of execution is marked with numbers above the node. * '''Parallel''' – run all children nodes simultaneously. * '''Repeater''' – run child multiple times. * '''Run BT''' – launch behavior tree.

=== Node ===

A node is a "step" in the BT.

==== Events ==== Events from {{Link/Enfusion|armaR|AITaskScripted}} class: * '''OnInit''' – runs once when the tree is loaded. Note that the tree can be reloaded after its entire completion * '''OnEnter''' – runs when the node is entered for the first time - '''before''' EOnTaskSimulate. * '''EOnTaskSimulate''' – runs when the node is evaluated * '''OnAbort''' – runs when the node gets aborted - see {{Link|#Abort Type}}

=== Decorator ===

Decorators are nodes with execution conditions, and depending on the evaluation's result, they may execute their node and branches. There are several types of conditions decorators are testing, and different flow effects decorators can have.

Example tests and effects on flow: * Test validity of given entity (does it exist, is it alive?)<!-- * Test return values of its children (UseChildResult parameter) // UseChildResult is a very specific thing that should only be used in very rare cases, knowing what one does --> * Test scripted condition by creating your own scripted decorators * Interrupt the flow in the other parts of the BT (with parameter {{Link|#Abort Type|AbortType}}) in case the evaluation result is false{{Feature|informative|A decorator evaluating to false can this way force a result (Success or Failure only) before even reaching the node's evaluation.}}

More complex operations can be done by decorators. For example executing a child node but returning an arbitrary value (either Success or Failure) so the rest of the tree reacts on it in different ways.

{{Feature|important|Unless '''AbortType''' is defined, decorators are evaluated only '''once''' pre tree execution.}}

=== Tasks ===

Nodes that are executing functions inside Behavior Trees. Any action that AI should provide is task: Move to position, run, play surrender gesture. Even waiting is task. There are 2 types of tasks:

* '''Immediate''' – tasks that are done immediately and continue with execution of BT. * '''Running''' – tasks, like move, that take time to complete. At the point in which character is running, the node's branch waits for the node to be either Success or Failure (not evaluating nodes to the right) - then the next time BT is called, will continue from this point. If there is no flow running in parallel, they block execution of anything else in BT until task is done.{{Feature|informative| A "Running" task must see its {{hl|CanReturnRunning}} method overridden in script to return {{hl|true}}. }}

Tasks cannot have children, and usually they are organised in sequences to complete more complex operations. For example: Stop, Raise Weapon, Aim, Fire.

Tasks can perform very simple operations, like assigning value to variable, to more complex functionality, like Land (with aircraft).

== Behavior Tree Flow ==

As explained at the beginning, behavior trees are executed from root folder, and through flow control and decorators, pass through the graph. BTs can be called from engine, script or other BT, so it's possible to consider it as a function, which can call other functions, and keep the graph relatively clean, not having all AI functionality in one gigantic graph.

=== Returning Values to Parent Nodes ===

Each executed node will return a value to parent node, which can react to it, in two ways:

* Flow control nodes like selector and sequence will either execute another child page, or return value up to its parent node. * There are 3 return value types: Success, Failure or Running ** '''Success''' means the check is successful ** '''Failure''' means the check did not match the wanted conditions.{{Feature|informative|"Failure" may sound very negative but it is only a "false" result (e.g "does this unit have a weapon"). It is not an error/exception in the tree.}} ** '''Running''' means the calculation is still happening - an ongoing behavior like movement, which will prevent execution of the rest of the BT (unless using parallel node).{{Feature|important|Running state will return through the BT up to the Root node, so the state of the whole behavior tree becomes "Running".}}

=== Force Node Result ===

Force node's output to the set value, whatever the actual result is - e.g a sub-branch resulting in Failure will still return Success if a parent node says so; said node will still run all sub-nodes.

=== Abort Type ===

When you need to interrupt running behavior or prevent execution of other nodes, you can use the decorators' '''AbortType''' parameter. If decorator's evaluation changes and Abort is used, if will stop BT's execution depending on the Abort Type.

'''Types of Abort:''' * Abort Children Branch – the node's decorator is evaluated every time its sub-tree is executed. If the decorator's condition becomes false, it aborts all the node's children (calling their <!-- AITaskScripted. -->{{hl|OnAbort}} event) and returns Failure. * Abort Parent Node Further Children – the node's decorator is evaluated every time the parent's sub-tree is evaluated and aborts its siblings to its right as soon as the decorator's evaluation becomes true. * Abort Children Branch And Parent Further Children – the node's decorator is evaluated every time the parent's sub-tree is evaluated. If this decorator's condition becomes true and its sub-tree is not running, it kills all the parent's children to the right of it and runs. If it becomes false while its sub-tree is running, it aborts its own sub-tree and lets other parent's children to the right to run.

{{Feature|informative|If no '''Abort Type''' is set, the decorator's evaluation is tested only '''once''' per tree execution.}}

== In-Game Setup ==

You need a world with character prefab, which is set up with all important AI components. If you want to prepare AI in your own world, follow these steps: # To have character with working AI, it has to have at least AI Control Component, and other AI components enabling AI functionality: AI Character Aiming Component, AI Character Movement Component, Perception Component. Working AI character prefab is ChimeraCharacterAI. # This character has all required AI components. AIControlComponent creates agent, which is separate entity ordering actions to character. # In AIControlComponent: #* set OverrideAIBehaviorData with your Behavior tree (will be created below) #* tick "Enable AI" (activates AIagent) # Run the game with BT editor opened. # There is list of running BTs in right panel. Click on BT of your soldier and you will see his behavior tree and states, in which it is now (Note: '''No modifications of this debug tree will be saved, you have to modify the original BT''').

== Basic Behavior Trees ==

=== Simple Action ===

Most basic behavior tree possible is to attach Task to Root node. This this will make object on which BT is called crouch every time BT is called.

=== Follow Player ===

Basic version of follow player is to first select the entity to follow, and then executing the move command.

{{Feature|important|There is one complication: the Get Controlled Entity output cannot be directly connected to Move to Entity input. It has to be stored in variable and then loaded from variable. # Create variable with + symbol at variables tab on left panel # Select type (GenericEntity or IEntity) and name # Drag the variable into graph, it will be represented as node # Connect its input and output with correct nodes. }}

Now character on which BT is running, will follow player. See parameters of the node to adjust specifics, like obstacle avoidance, precision, etc.

This BT has one minor problem that can be optimised: When the unit is at player, every time that BT will tick, it will always perform left branch for the tree: Getting controlled entity and overwriting the variable.

This is optimised in next graph, which runs as follows:

* Entity decorator tests validity of input, and return negative result. * Negative test + negative result will return Success, so node connected under it (Get Controlled Entity) will be executed. * It will set player variable,. * Next time decorator Entity will be called, it will return Failure, and its branch will not be called.

=== Guard Player ===

This behavior tree is switching between 2 states: If unit is more than 10 meters from player, move to him. If unit is closer, crouch and look around with weapon raised. The flow of the tree goes in this way:

# Fist select most left branch, because player entity variable is not assigned. # Variable player is assigned, and BT exited. # Second run, test for player variable validity returns negative, and distance check of unit from player is performed. # Let's say player is further than 10 meters, so test returns Success, and sequence on the right is performed: Stand up, Lower weapon (performed with Raise weapon node, and with uncheck parameter raise), move to player, with tolerance of 4 meters. # Until movement is completed, behavior tree will not check any other condition, like distance decorator in the middle. # When unit gets close to player, distance decorator will return Success, and its children branch is executed: Crouch, Raise Weapon, and create a randomised position, in which the unit will look (this is how we get random direction). Orient node will mean unit will look into specified direction, and idle for short time (0.5 second). # Once this sequence is completed, tree will be executed again. If player's distance is still below 10 meters, children sequence will be executed again, if not, return to point 4.

=== Guard Player and Shoot Enemies ===

To create an Engage functionality, there should be a third branch, handling the engagement. This is most primitive version of the engagement node, which searches for predefined enemy (searched by variable):

To be able to recognise enemy, we can script our own Task, called Find Enemy. It will find characters nearby except player and guard, and mark them as target. Current target is selected automatically.

'''Scripted Task:''' Find Target

* If a valid target is found, then BT will continue with the branch, which includes aiming and shooting at the enemy.

This is how task scripted can look. For clarity, the calculation of target is not included.

{{Feature|informative| Scripted node gives great possibilities for Behavior Trees, but it comes at a performance cost.<br> Native behavior trees, which are not running any scripted nodes, can much faster thanks to parallelization. Any behavior tree with scripted nodes is running in a single thread and is therefore much slower. }} <spoiler text="Scripted Task code"> <enforce> class AITaskFindTarget : AITaskScripted { // Member variables // Exposing variable m_Radius as attribute will make it visible as parameter inside BT Editor. // Note: Functionality not completed now [Attribute("10", "editbox", "Radius")] float m_Radius; IEntity m_Player;

// Constructor can be used for initializing default values, // but for any other operation, use EOnTaskSimulate void Init() { m_Radius = 100; }

// Make scripted node visible or hidden in nodes palette bool VisibleInPalette() { return true; }

// Sets up input variables, as array of strings override TStringArray GetVariablesIn() { // Make sure variables are initialised only once if (!m_aVariablesIn) { m_aVariablesIn = new TStringArray; m_aVariablesIn.Insert("Distance"); } return m_aVariablesIn; }

// Sets up output variables override TStringArray GetVariablesOut() { if (!m_aVariablesOut) { m_aVariablesOut = new TStringArray; m_aVariablesOut.Insert("Target"); }

return m_aVariablesOut; }

// Main method to perform all operations handled by task // This is just example, to see important parts, without any actual calculations ENodeResult EOnTaskSimulate(IEntity owner, float dt) { // This is engine method to read variables from Behavior tree GetVariableIn("Distance",m_Radius);

IEntity target = GetValidTarget(m_Radius);

// This is method to output variable into Behavior Tree SetVariableOut("Target", target);

if (target) return ENodeResult.Fail; else return ENodeResult.Success; } } </enforce> </spoiler>

==== Scripted Decorator ==== Scripted Decorator is basically the same, it must be inherited from DecoratorScripted, but it uses the same methods as Scripted Task.

<spoiler text="Scripted Decorator code"> <enforce> class ExampleScriptedDecorator : DecoratorScripted { [Attribute("10", "editbox", "Radius")] float m_Distance;

bool VisibleInPalette() { return true; }

override TStringArray GetVariablesIn() { if (!m_aVariablesIn) { m_aVariablesIn = new TStringArray(); m_aVariablesIn.Insert("Distance"); } }

override TStringArray GetVariablesOut() { if (!m_aVariablesOut) { m_aVariablesOut = new TStringArray(); m_aVariablesOut.Insert("Target"); }

return m_aVariablesOut; }

override TStringArray GetVariableType() { if (!m_aVariablesOut) { m_aVariablesOut = new TStringArray(); m_aVariablesOut.Insert("Target"); }

return m_aVariablesOut; }

// Instead of EOnTaskSimulate, this method has different return type parameters: override bool TestFunction(IEntity owner) { // You can check the type of variable you are handling: GetVariableIn("Distance", m_Radius); SetVariableOut("Target", null);

return GetVariableType(true, "Distance") == "float"; } } </enforce> </spoiler>

== Debugging ==

To check AI behavior in runtime, all AI entities are listed in the Debug section, which will open the root behavior tree of the unit. From there it's possible to traverse to any other connected behavior.

It's not possible to change any behavior during the runtime or variable, the functionality is read-only. You can read the states of nodes and what values are in variables.

You can put a breakpoint on any node, and the behavior tree will stop its execution. But this will not stop the game (as in the case of script debugger), and if there is any parallel node above breakpoint, other branches of it will keep executing.

Colors in debug:

* Green – node returned Success (variable is assigned) * Red – node returned Fail (variable is unassigned) * Blue – node returned Running * Dark red – node is suspended by breakpoint

== Further Reading ==

* [[Arma Reforger:Behavior Editor: Nodes|Behavior Editor: Nodes]] * {{Link|http://gamasutra.com/blogs/ChrisSimpson/20140717/221339/Behavior_trees_for_AI_How_they_work.php|Intro into Behavior Trees in Gamasutra}}: Overview on Behavior Trees with useful examples * {{Link|http://lecturer.ukdw.ac.id/~mahas/dossier/gameng_AIFG.pdf|Artificial Intelligence for Games, Second Edition: The big book on game AI development}} * {{Link|http://www.gameaipro.com/GameAIPro/GameAIPro_Chapter06_The_Behavior_Tree_Starter_Kit.pdf|The Behavior Tree Starter Kit}} on {{Link|http://www.gameaipro.com/}} by Alex J. Champandard and Philip Dunstan: The first section paints the big picture for behavior trees and explains how to build BTs and how to use them for making AI decisions. The second section dives into the implementation. Finally, it explains the principles of second-generation BTs, and the improvements they offer, e.g. about memory optimizations and event-driven implementations that scale up significantly better on modern hardware.

{{GameCategory|armaR|Modding|Official Tools}}
dxydt4a1ohw6jjn13zujpfr3ue62udz

# Arma Reforger:Behavior Editor: Nodes

5050
32996
364671
364637
2024-05-24T20:12:00Z
Lou Montana
10739
Text replacement - "ize " to "ise "
364671
wikitext
text/x-wiki
{{TOC|side}}

Flow nodes define base rules how and with which conditions, are behavior tree branches executed.

=== Flow ===

{| class="wikitable" ! Name ! Description ! Parameters/Input/Output ! Notes |- | Root | The starting point of a behavior tree. | | Cannot be removed or inserted from the nodes palette. |- | Selector | Executes children until one of them returns Success.

Returns:

* Running: A child node still runs * Success: A child node returned success * Fail: All children returned fail | | |- | Sequence | Executes children from left to right as long as they return success. Returns success only if all children returned success.

Returns:

* Running: A child node still runs * Success: All children returned success * Fail: Any child returned fail | | |- | Parallel | Executes all children regardless what they return.

Returns:

* Running: If no child is assigned for getting its result * Success: If the index of a child is assigned and the assigned child returns success * Fail: If the index of a child is assigned and the assigned child returns fail | Parameters:

* Use Child Result: Select index of a child node, which result will be the result of the parallel node. | |- | Repeater | Sequence node that is executed multiple times.

Returns:

* Running: A child node still runs * Success: All children returned success * Fail: Any child returned fail | Parameters:

* Repeat Times: Specifies how many times you want to execute. Default is once. | |- | Run BT | Runs selected Behavior Tree on the agent.

Returns:

* Running: If the subtree returns running * Success: If the result of the subtree is success * Fail: If the result of subtree is fail, or the subtree could not be executed | Parameters:

* Behavior Tree: Specify behavior tree to run from the list. * Run Repeatedly: ** True (Checked): Initialise the subtree once, then run it repeatedly without reinitialization ** False (Unchecked): Reinitialise and run the subtree every time.

* Variables in Array: New, unfinished feature

Input:

* InBehaviorTree: Behavior Tree to run | |- | Run Once | Executes all of its children only once.

Returns:

* Success: Always | | Intended to be used for one-time-only tasks, such as initialization. |- | Run On Entity | Executes children on a different entity than the owner of the behavior tree.

Returns:

* Success: If the children were executed on entity successfully and returned success or running * Fail: If one of the children returns fail or the entity is not found | Input:

* Entity | Should be used only with nodes and tasks that are not responding with Running result (reason: currently BT does not switch to scope of entity on which you wish to run those nodes, stays in scope of main BT) |- | Switch | Picks children depending on a variable value or randomly.

Returns:

* Running: A child node still runs * Success: A child node returned success * Fail: It is aborted because of the variable change, the child returned fail, or could not find a proper child to run | Parameters:

* Values Array: For each children maximum value of in variable * Random Range: For each children probability of execution. Specifies the range. * Abort Variable Changed: ** True (Checked): Abort if the input variable is changed. The default is checked. ** False (Unchecked): Do not abort if the input variable is changed

Input:

* InVariable: The variable that may be tracked for aborting (if abort variable changed is checked) and/or for picking the child node to run from the values array | |- | For Each Child | Iterates through all group children.

Returns:

* Running: A child node still runs * Fail: If no entity, no AI group, no agent in the AI group, or a child returns fail * Success: Otherwise | Parameters:

* Index from: Which should be starting index in an array. (Default: 0) * Index to: Which should be max index to select. (-1 by default, to go through whole array) * Return controlled entity: Return controlled entity, if false, return AI Agent.

Output:

* Entity | |}

=== Decorators ===

Decorators are test checking different states and variables, and determine if child or child branch should be executed.

Decorators {| class="wikitable" ! Name ! Description ! Parameters/Input/Output ! Notes |- | Decorator | Node which tests specific condition. If condition result is true, decorator will execute its child and return true.

Returns:

* Success: The child node returned success or when negating the result is selected and the child returns fail * Fail: The child node returned fail or when negating the result is selected and the child returns success | '''Common decorator parameters''':

* Negative result: Decorator will return negative value of the test. * Use child result: Decorator will execute the child and return its result. * Always true: Decorator will execute child node and then return true. * Abort type: ** None: Do not abort anything ** Abort children branch: Abort all children under this node. ** Abort parent node with children: Abort self and all children under this node. ** Abort parent node further children: Abort parent node and its children, but proceed with children nodes. | Useful for tests through its parameters – use child result, aborting, etc.

Combination of parameters can be used: When you use always true and negative result, decorator will also execute its child and return false. It's useful in case when you want your branch to return false, but execute child node in any case. |- | Test Variable | Decorator checking provided variable for assignment, comparation against value, or check for value change.

Returns:

* Success: The child node returned success or when negating the result is selected and the child returns fail * Fail: The child node returned fail or when negating the result is selected and the child returns success | Parameters:

* Test value: Specific value to test. * Test type: Check if value is: ** Assigned ** Variable equals value ** Variable bigger than value ** Variable lower than value ** Variable was changed

Inputs:

* Variable | |- | Test Entity | Various tests on entity. Decorator checks validity of entity, either connected through variable, or according to its name. Can test other conditions like life state.

Returns:

* Success: The child node returned success or when negating the result is selected and the child returns fail * Fail: The child node returned fail or when negating the result is selected and the child returns success | Parameters:

* Entity name * TEST: Space for selecting new kinds of tests, not working at the moment.

Input:

* Entity | |- | Test Distance to Entity | Checks distance of entity with treshold value. Returns true if distance is smaller than treshold by default.

Check for ditance larger than treshold can be done with Use Negative Value parameter.

Returns:

* Success: The child node returned success or when negating the result is selected and the child returns fail * Fail: The child node returned fail or when negating the result is selected and the child returns success | Parameters:

* Entity name: Search entity by name. * Distance treshold: Until what distance result will return true

Inputs:

* Entity * Position * Distance | |- | Danger Event | Checks agent if he has any danger events. Test can be performed against any or specified danger event.

Returns:

* Success: The child node returned success or when negating the result is selected and the child returns fail * Fail: The child node returned fail or when negating the result is selected and the child returns success | Parameters:

* Has Any: check for any type of danger event * Danger event type: list of available danger events to check * Distance treshold: Limit search for danger events to certain radius. Default 0 = range not limited. | * Is there possibility to test several possible danger events in one decorator? (projectile hit + damage taken)

Danger event is type of event about threat to entity, like someone fired, someone was killed, etc. They all have specified position in world. |- | Test Order | Tests if agent has order, or has specific order according to parameters.

Returns:

* Success: The child node returned success or when negating the result is selected and the child returns fail * Fail: The child node returned fail or when negating the result is selected and the child returns success | Parameters:

* Has Any * Order Type | |- | Aiming | Tests aiming

Returns:

* Success: The child node returned success or when negating the result is selected and the child returns fail * Fail: The child node returned fail or when negating the result is selected and the child returns success | Parameters:

* Test type: What test to run ** Is aimed ** Is aiming in limits * Aim Threshold: Value for testing | |}

=== Scripted Decorators ===

Decorators created in script, inherited from Scripted Decorator.

{| class="wikitable" ! Name ! Description ! Parameters/Input/Output ! Notes |- | Scripted Decorator | Scripted base class of decorator, used for inheritence of other scripted decorators. | '''Common decorator params''':

* Negative result: Decorator will return negative value of the test. * Use child result: Decorator will execute the child and return its result. * Always true: Decorator will execute child node and then return true. * Abort type: ** None: Do not abort anything ** Abort children branch: Abort all children under this node. ** Abort parent node with children: Abort self and all children under this node. ** Abort parent node further children: Abort parent node and its children, but proceed with children nodes. | Does not contain any new functionality than basic decorator. |}

=== Tasks ===

Leaf nodes tasked to perform specific operation. They can return true, false and running.

{| class="wikitable" ! Name ! Description ! Parameters/Input/Output ! Notes |- | Get Controlled Entity | Finds character entity controlled by agent running Behavior tree.

Return:

* True: Entity was found * False: Entity was not found | Parameters:

* Character Only: If true, accepts only character as controlled entity, not vehicle for example.

Output:

* Entity | AI is composed of two entities, character and AI Agent. This is common way how to access character from Agent in Behavior tree. |- | Create Position | Creates position according to specifie vector or position of entity. It's possible to randomise the position from its given center.

Return:

* True: Position was created. * False: Failed to create position. | Parameters:

* Entity name: Calculate vector according to entity * Offset Vector: * Random Offset Multiplier:

Input:

* Root vector * Offset vector * Entity

Output:

* Position | Position output has to be saved as variable, it cannot be used directly as input node. |- | Follow Path | Follow given path

Return:

* True: Move was completed * False: Path couldn't be found or move is invalid * Running: Movement on the path in progress | Parameters:

* Path points: Custom array of points to follow, optional

Input

* Target Location | |- | Move to Entity | Requests move to position of entity. This position is regularly updated, it should be used to move to target which can move.

Return:

* True: Move was completed. * False: Failed to add action on entity. * Running: Movement to entity in progress. | Parameters:

* Precision XZ: Precision of ground position. * Target object name: Name of the entity to find and follow. * Entity update precision: How far away needs the entity to be to update the move request.

Input:

* Entity | |- | Move | Request move to specific position. Use to move to a static target.

Return:

* True: Move was completed. * False: Failed to add action on entity. * Running: Movement in progress. | Parameters:

* Target location: In world location to go to * Precision XZ: Precision of ground position. * Precision Y: Height precision. * Target rotation: Rotation of entity during action. * Target rotation to: Rotation related to specified entity (sun for example). * Rotation precision: Angle in degrees * Time to complete: Desired time to move completion (default: -1: Unlimited time) * Enable avoidance: Avoid obstacles during the action.

Input:

* Target location * Target rotation | |- | Aim | Requests aiming on entity, position or specified direction.

Returns:

* True – task succesfully finished * Running – task is ongoing * False – request failed | Parameters:

* Precision XZ * Precision Y

Input:

* Direction * Aim at position * Entity | |- | Get in Vehicle | Moves character into vehicle.

Return:

* True: Entity can get into vehicle * False: Unit is in vehicle already or cannot board | Parameters:

* Position: ** Pilot ** Gunner ** Turret ** Cargo * Vehicle Name: Select vehicle by name

Input:

* Vehicle | |- | Land | Realizes movement over landing position and descend into position.

Return:

* True: Land was completed. * False: Agent failed landing or cannot move. * Running: Landing in progress. | Parameters:

* Target location * Precision XZ: Precision of ground position. * Precision Y: Height precision. * Target rotation: Rotation of entity during action. * Target rotation to: Rotation related to specified entity (sun for example). * Rotation precision * Time to complete: Desired time to move completion (default: -1: Unlimited time) * Enable avoidance: Avoid obstacles during the action.

Input:

* Target location * Target rotation | |- | Stop | Cancel movement and/or aiming of entity.

Return:

* True: Entity can be stopped * False: Stopping failed | Parameters:

* Stop flags: ** Movements ** Aiming | |- | Get Out Vehicle | Request disembarking from vehicle.

Return:

* True: Unit is in vehicle * False: Unit is outside vehicle | | |- | Set Movement Speed | Request change of movement speed of controlled entity.

Return:

* True: Movement speed set. * False: Failed to set movement speed. | Parameters:

* Speed: Wanted movement speed (m/s) | |- | Orient | Requests change of orientation of controlled entity.

Return:

* True: Request completed. * False: Request failed. * Running: During orientation change. | Parameters:

* Rotation precision * Target rotation to: Rotation related to specified entity (sun for example).

Input:

* Target location | |- | Enable Obstacle Avoidance | Allows or disables obstacle avoidance for controlled character.

Return:

* True: Change of obstacle avoidance succeeded. * False: Change of obstacle avoidance failed. | Parameters:

* Obstacle avoidance

Input:

* Obstacle avoidance | |- | Get Aiming Position | Calculate the position of the target. It's possible to predict target's position in future using parameter Lead movement time. This node will not calculate any ballistics, just tracks the position of the target and interpolate the result.

Return:

* True: Position found. * False: Failed to find position. | Parameters:

* Lead movement time - Predict position in future, using current velocity

Input:

* Entity

Output:

* Position | |- | Send Order | Creates order and add it to order list. Can be used on any entity, controlled entity is selected by default. Any entity can be also selected as sender.

Return:

* True: Order was added to target entity. * False: Order failed to add. | Parameters:

* Order type ** None ** Hold ** Move ** Follow ** Rearm ** Defend ** Get In * Highest priority - If true, order will be first one in queue. If false will be queued.

Input:

* Sender * Receiver * Position * Entity * Order type | |- | Idle | Wait for given seconds. Waiting time can be randomised.

Return:

* True: Timer is finished * Running: Timer is active | Parameters:

* Period - For how long to idle * Period random - Random dispersion

Input:

* Period key | |- | Current Order | Get data about current order.

Return:

* True: Current order data received. * False: Failed to receive current order data. | Output:

* Order object * Order position * Order type | |- | Finish Order | Finishes current order.

Return:

* True – if there was order and it was finished * False – test failed or order was not finished | | |}

=== Utility Tasks ===

Tasks handling very basic functions as operations with variables.

{| class="wikitable" ! Name ! Description ! Parameters/Input/Output ! Notes |- | Set/Clear Variable | Allows for setting value or clearing variable.

Return:

* True: Value set or cleared successfully. * False: Failed to set/clear variable. | Parameters:

* Set value - What value should variable have * Clear variable - If value should be cleared (deassigned) | |- | Find Entity | Find entity by name or class name.

Return:

* True: Entity found. * False: Entity not found. | Parameters:

* Entity name - Search by entity name * Entity class name - Search by class name * Distance test - if bigger than 0, returns entity only if closer than this distance

Output:

* Entity | |}

=== Scripted Tasks ===

Scripted variants of Task, inherited from scriptedTask.

{| class="wikitable" ! Name ! Description ! Parameters/Input/Output ! Notes |- | Find Target | Example scripted node for finding target in certain radius. For now enemy is any character entity other than BT agent or player character.

Return:

* True: Target found. * False: Target not found. | Input:

* Radius: In what distance should target be searched.

Output:

* Target: Target character. Outputs null if entity not found. | |}

=== Character Tasks ===

Tasks that can be used only on characters. They will not work on vehicles, turrets, etc.

{| class="wikitable" ! Name ! Description ! Parameters/Input/Output ! Notes |- | Fire | Request fire action on controlled character.

Return:

* True: Action was requested * False: Requester is not a character | | |- | Change Stance | Request stance change on character.

Return:

* True: Action request succeeded * False: Action request failed | Parameters:

* Stance - Wanted Stance ** Prone ** Crouch ** Stand

Input:

* Stance | |- | Throw Grenade | Request throw grenade action on controlled character.

Return:

** True: Action was requested ** False: Requester is not a character | | This node might be obsoleted in future, depends on implementation of grenade throwing. |- | Character Raise Weapon | Request action to raise or lower weapon.

Return:

** True: Action was requested ** False: Requester is not a character | Parameters:

* Raise ** True ** False | |- | Character Set Movement Speed | Request change of movement type on controlled entity.

Return:

** True: Action was requested ** False: Requester is not a character | Parameters:

* Movement type - Wanted movement speed ** Idle ** Walk ** Run ** Sprint | |- | Play Gesture | Attempts to find a gesture by name and request it.

Returns:

* True: If succeeded * False: Gesture not found | Parameters:

* Gesture: Pick gesture type from the list ** Greeting ** Point finger ** Thumb up ** Thumb down ** Silence ** Middle finger ** Timeout ** Heart ** Facepalm ** Watching ** Hold ** Listening ** Point at myself ** Look at me * Play: Play gesture if TRUE; Stop gesture if FALSE | |- | Perform Object Action | Finds and performs action on object, for example open door.

Returns:

* True: Action found and attempted * False: no object, no character or no action | Input

* Action Entity | |}

=== Waypoints ===

Tasks related for handling waypoints.

{| class="wikitable" ! Name ! Description ! Parameters/Input/Output ! Notes |- | Get Waypoint | Finds and returns waypoint with selected index. | Parameters:

* Index - From 0 up, index of waypoint in current queue

Input:

* Index

Output:

* Waypoint * Behavior * Contact behavior * Danger behavior | |}

=== Group ===

Tasks related to group management.

{| class="wikitable" ! Name ! Description ! Parameters/Input/Output ! Notes |- | Get Group children | Iterates through array of group children, and output child of current index as variable. It can be specified which indexes should be iterated through.

Return:

* True: Entity found * False: Invalid or empty group | Parameters:

* Index from: Which should be starting index in an array. (Default: 0) * Index to: Which should be max index to select. (-1 by default, to go through whole array) * Return controlled entity: Return controlled entity, if false, return AI Agent.

Output:

* Entity | Example:

Behavior tree that will cause all children of the group stop. This BT has to be called multiple times, as Get Group children only stores correct index of array, but cannot call anything multiple times.

Note: This handling of "forEach" might change in the future. |- | Create Group | | | This seems to be WIP node. |}

=== Perception ===

Tasks related to AI Agent perception, which is basic source for finding threats and targets.

{| class="wikitable" ! Name ! Description ! Parameters/Input/Output ! Notes |- | Pick Target | Picks one target from known target list, and output it as variable.

Return:

* True: Target found and assigned * False: No target found | Output:

* Entity | |}

=== Action Tasks ===

Task nodes helping with performing actions.

{| class="wikitable" ! Name ! Description ! Parameters/Input/Output ! Notes |- | Request Action | Attempt to request specified action on controlled entity.

Return:

* True: Action requested succesfully * False: Invalid action requested, or unable to complete request. | Parameters:

* Action name - as defined by input configuration * Action value

Input:

* Action name * Action value | |}

=== Smart Actions ===

Tasks related to smart actions. Smart actions are objects in world, with which AI can interact. Bench can have smart action for sitting.

{| class="wikitable" ! Name ! Description ! Parameters/Input/Output ! Notes |- | Perform Smart Action | Makes controlled entity to perform smart action

Return:

* True: Smart action assigned to entity. * False: Smart action assignment failed. | Input:

* Smart action | |- | Find Smart Action | Allows finding smart object in the world which support smart action and save it into variable. If multiple smart actions found, random is selected.

Return:

* True: Smart action found. * False: Smart action not found. | Parameters

* Radius: The radius to search for actions within. * Tags: Tags of smart action * Tags test: Way of testing tags

Output:

* Smart action | |- | Get Current Smart Action | Get smart action object currently realised by Agent.

Return:

* True: Always. | Output:

* Smart action | |- | Get Smart Action Pos | Get position of given smart action.

Return:

* True: Always. | Input:

* Smart action

Output:

* Action pos | |- | Get Smart Action BT | Returns behavior tree for given smart action.

Return:

* True: Always. | Input:

* Smart action

Output:

* Behavior | |}

=== Experimental / Work in Progress ===

These nodes might not be finished or are used in some experimental or unfinished systems. These nodes are changed often, so it's not recommended to use them.

{| class="wikitable" ! Name ! Description ! Parameters ! Notes |- | Flocking | Implements features | Parameters:

* Separation distance * Neighborhood radius * Accumulation type ** Ground ** Aerial | |- | Get Random Point | | | |- | Scripted Target | Allows for overriding in scripts | | |}

{{GameCategory|armaR|Modding|Official Tools}}
ewb5chd17rv3qkx1uhygb55ytob006g

# Arma Reforger:Diag Menu

5050
32912
376108
373626
2025-08-22T12:54:29Z
Lou Montana
10739
Some wiki formatting
376108
wikitext
text/x-wiki
= General Use = <!--

Wiki editors: - this page is tool-generated: - do NOT remove IDs in HTML comments! - your manual changes may be lost on the next update! --> The Diag Menu is a menu listing many options used to debug game scripting and assets. It is available in {{GameCategory|armaR|Modding|Official Tools|text= Workbench}} in any 3D viewport (e.g world or model preview).

<div style="border: 0.5em solid #000; border-radius: 0.25em; display: inline-block">[[File:armareforger_debugmenu-main.png]]</div><!-- I'm fancy like that -->

{{Feature|informative| {{{!}} class{{=}}"valign-top" style{{=}}"width: 100%; max-width: 100%" {{!}} ; Usage * To open the Diag Menu, press {{Controls|Win|Alt}} in any 3D viewport ** The {{Controls|Ctrl|Win}} shortcut conflicts with Windows 11's shortcut * To enter a sub-menu, press {{Controls|Right}} * To leave a sub-menu, press {{Controls|Backspace}} * To change a value, use {{Controls|Left}} and {{Controls|Right}}. {{!}} ; Hints * {{Controls|Home}} - jump to root menu * {{Controls|Insert}} - reset to default just for options in actual menu * {{Controls|Delete}} - reset to default for all options * {{Controls|Shift|Up}} / {{Controls|Down}} - faster movement through the menu * {{Controls|F1}} - save current options to user profile * {{Controls|F2}} - load options from user profile {{!}}}

It is possible to read & save Diagnostic Menu options from different location via [[Arma_Reforger:Startup_Parameters#diagMenu|diagMenu]] startup parameter. }}

== Hotkeys List ==

{| class="wikitable" |+ List of all diag hotkeys ! Header !! Hotkey |- | {{Link|#Disable player damage}} || {{Controls|LCtrl|LAlt|F1}} |- | {{Link|#Teleport}} || {{Controls|LCtrl|LAlt|F2}} |- | {{Link|#Infinite ammo}} || {{Controls|LCtrl|LAlt|F3}} |- | {{Link|#Infinite bullets}} || {{Controls|LCtrl|LAlt|F4}} |- | {{Link|#Commit suicide}} || {{Controls|LCtrl|LAlt|F5}} |- | {{Link|#Execute characters in front}} || {{Controls|LCtrl|LAlt|F6}} |- | {{Link|#Debug manual camera}} || {{Controls|LCtrl|LAlt|C}} |- | {{Link|#Reset vehicle}} || {{Controls|LCtrl|LAlt|R}} |- | {{Link|#Teleport up}} || {{Controls|LCtrl|LAlt|T}} |- | {{Link|#FPS}} || {{Controls|LCtrl|Num1}} |- | {{Link|#General}} || {{Controls|LCtrl|Num2}} |- | {{Link|#Counters}} || {{Controls|LCtrl|Num3}} |- | {{Link|#Reload shaders}} || {{Controls|LCtrl|F12}} |- | {{Link|#Postprocess}} || {{Controls|LCtrl|LAlt|P}} |- | {{Link|#Layers diag mode}} || {{Controls|LCtrl|LAlt|L}} |- | {{Link|#Detail texture}} || {{Controls|LCtrl|LAlt|S}} |- | {{Link|#Render debug mode}} || {{Controls|RCtrl|RAlt|W}} |- | {{Link|#Show AABB}} || {{Controls|LAlt|Num5}} |- | {{Link|#Show wind emitters}} || {{Controls|LCtrl|Num8}} |- | {{Link|#Disable wind}} || {{Controls|LCtrl|Num9}} |- | {{Link|#Show bodies}} || {{Controls|LAlt|Num6}} |- | {{Link|#Simulation}} || {{Controls|LCtrl|Num7}} |- | {{Link|#Superscreenshot to file}} || {{Controls|LCtrl|LShift|F7}} |- | {{Link|#Screenshot to clipboard}} || {{Controls|LShift|F7}} |- | {{Link|#Screenshot to file}} || {{Controls|LCtrl|F7}} |- | {{Link|#Copy view link}} || {{Controls|LCtrl|LShift|L}} |- | {{Link|#Make a step of AStar}} || {{Controls|LCtrl|LAlt|V}} |- | {{Link|#Road network}} || {{Controls|LCtrl|LAlt|N}} |- | {{Link|#Show Road Width}} || {{Controls|LCtrl|LAlt|W}} |- | {{Link|#Road Id}} || {{Controls|LCtrl|LAlt|I}} |- | {{Link|#Previous agent}} || {{Controls|RCtrl|RShift|9}} |- | {{Link|#Next agent}} || {{Controls|RCtrl|RShift|0}} |- | {{Link|#Set start position}} || {{Controls|LCtrl|LAlt|Num0}} |- | {{Link|#Set end position}} || {{Controls|LCtrl|LAlt|Num1}} |- | {{Link|#Run pathfinder}} || {{Controls|LCtrl|LAlt|Num3}} |- | {{Link|#Generate Graph}} || {{Controls|LCtrl|LAlt|Num2}} |- | {{Link|#Disable AI actions}} || {{Controls|LCtrl|LAlt|F9}} |- | {{Link|#Paste view link}} || {{Controls|LShift|LAlt|L}} |}

== Modding ==

{{Feature|informative|See {{Link|enfusion://ScriptEditor/scripts/Core/generated/Debug/DiagMenu.c|DiagMenu.c}} for DiagMenu API information.}} <enforce> enum TAG_EMyModDiagMenu { ModMenu = 0, ModMenu_DEBUG, ModMenu_SHOW, ModMenu_LOG, } </enforce> <enforce> // init script, needs to run only once

// DiagMenu.RegisterMenu(int id, string name, string parent) DiagMenu.RegisterMenu(TAG_EMyModDiagMenu.ModMenu, "CategoryName", ""); { // RegisterBool(int id, string shortcut, string name, string parent, bool reverse = false) DiagMenu.RegisterBool(TAG_EMyModDiagMenu.ModMenu_DEBUG, "", "Do debug", "CategoryName"); DiagMenu.RegisterBool(TAG_EMyModDiagMenu.ModMenu_SHOW, "", "Show stuff", "CategoryName"); DiagMenu.RegisterBool(TAG_EMyModDiagMenu.ModMenu_LOG, "", "Log stuff", "CategoryName"); } </enforce> <enforce> // somewhere needed if (DiagMenu.GetBool(TAG_EMyModDiagMenu.ModMenu_DEBUG)) { Print("Debug entered through Diag menu"); /* ... */ } </enforce>

= <span title="GameCode">GameCode</span> =

== <span title="GameCode">Damage</span> ==

=== <span title="GameCode&nbsp;&rarr;&nbsp;Damage">Hit Zones</span> ===

==== <span title="GameCode&nbsp;&rarr;&nbsp;Damage&nbsp;&rarr;&nbsp;Hit Zones">Show hit zone memory</span> ====

<!-- ID: DM_HITZONE_MEMORY --> Enable/disable showing of hit zone memory.

'''Available Options''': false, true

==== <span title="GameCode&nbsp;&rarr;&nbsp;Damage&nbsp;&rarr;&nbsp;Hit Zones">Show hit zones</span> ====

<!-- ID: GAME_DIAG_SHOW_HITZONES --> Enable/disable showing of hit zones.

[[File:armareforger-diag-menu-show-hitzones-1.jpg|600x600px]]

When a zone is damaged, underlying fire geometry is also drawn

[[File:armareforger-diag-menu-hitzones-2.jpg|713x713px]]

'''Available Options''': false, true

==== <span title="GameCode&nbsp;&rarr;&nbsp;Damage&nbsp;&rarr;&nbsp;Hit Zones">Log damage on hit zones</span> ====

<!-- ID: GAME_DIAG_LOG_HITZONES --> Enable/disable logging of damage on hit zones.

'''Available Options''': false, true

==== <span title="GameCode&nbsp;&rarr;&nbsp;Damage&nbsp;&rarr;&nbsp;Hit Zones">Log Rpl registration</span> ====

<!-- ID: GAME_DIAG_RPLNODES_LOGGING --> Enable/disable logging of Rpl registration.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Damage">Destruction</span> ===

==== <span title="GameCode&nbsp;&rarr;&nbsp;Damage&nbsp;&rarr;&nbsp;Destruction">Damage all on init</span> ====

<!-- ID: GAME_DIAG_DAMAGE_ALL_ON_INIT --> Enable/disable damage all on init.

'''Available Options''': false, true

==== <span title="GameCode&nbsp;&rarr;&nbsp;Damage&nbsp;&rarr;&nbsp;Destruction">Enable Logging</span> ====

<!-- ID: GAME_DIAG_LOG_DESTRUCTION --> Enable/disable logging of destruction.

'''Available Options''': false, true

==== <span title="GameCode&nbsp;&rarr;&nbsp;Damage&nbsp;&rarr;&nbsp;Destruction">Enable layout logging</span> ====

<!-- ID: GAME_DIAG_LOG_DESTRUCTION_LAYOUT --> Enable/disable logging of destruction layout.

'''Available Options''': false, true

==== <span title="GameCode&nbsp;&rarr;&nbsp;Damage&nbsp;&rarr;&nbsp;Destruction">Rotate permanent debris 90deg</span> ====

<!-- ID: GD_DESTRUCTION_ROTATE_DEBRIS --> Enable/disable rotating permanent debris.

'''Available Options''': false, true

==== <span title="GameCode&nbsp;&rarr;&nbsp;Damage&nbsp;&rarr;&nbsp;Destruction">Snap to ground (debris)</span> ====

<!-- ID: GD_DESTRUCTION_ENABLE_SNAP_TO_GROUND --> Enable/disable snapping of debris to ground.

'''Available Options''': false, true

==== <span title="GameCode&nbsp;&rarr;&nbsp;Damage&nbsp;&rarr;&nbsp;Destruction">Allow broken prefabs spawning</span> ====

<!-- ID: GD_SPAWN_BROKEN_PREFABS --> Enable/disable spawning of broken prefabs.

'''Available Options''': false, true

==== <span title="GameCode&nbsp;&rarr;&nbsp;Damage&nbsp;&rarr;&nbsp;Destruction">Enable destruction diag</span> ====

<!-- ID: SCR_DebugMenuID.DEBUGUI_DESTRUCTION_ENABLE_DIAG --> Enable/disable destruction diagnostics.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Damage">Type of damage info</span> ===

<!-- ID: GAME_DIAG_DAMAGE_INFO_TYPE --> Set type of damage info. When activated, small windows appears showing HP (current and maximum) of all individual HitZones * off - debug is disabled * trace - displays info for what are you looking at * self - displays info for controlled character * both - acts as trace if looking at something, otherwise acts as self

'''Available Options''': off, trace, self, both

=== <span title="GameCode&nbsp;&rarr;&nbsp;Damage">DamageEffect info</span> ===

<!-- ID: GAME_DIAG_DAMAGE_EFFECTS_INFO_TYPE --> Set damage effect info type. Information about states like Bleeding, Tourniquets, Saline bags, Morphine, and Health/Resilience/Blood is listed in this diag

'''Available Options''': off, Persistent, Damage History, both

=== <span title="GameCode&nbsp;&rarr;&nbsp;Damage">Visualize weapon blast</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_WEAPONS_BLAST --> Set weapon blast visualization mode.

'''Available Options''': disabled, hit, all, posDebug, onlyMainBlast, onlyRicochet

== <span title="GameCode">Achievements</span> ==

=== <span title="GameCode&nbsp;&rarr;&nbsp;Achievements">Achievements display</span> ===

<!-- ID: GAME_DIAG_ACHIEVEMENTS_DISPLAY --> Enable/disable achievements display.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Achievements">Dump achievement memory data</span> ===

<!-- ID: GAME_DIAG_ACHIEVEMENTS_GET --> Enable/disable dumping of achievement memory data.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Achievements">Request achievement platform data</span> ===

<!-- ID: GAME_DIAG_ACHIEVEMENTS_REQUEST --> Enable/disable request for platform achievement data.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Achievements">Unlock ACH_COMBAT_HYGIENE</span> ===

<!-- ID: GAME_DIAG_UNLOCK_ACHIEVEMENT_0 --> Unlock ACH_COMBAT_HYGIENE.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Achievements">+50 STAT_ENEMIES_NEUTRALIZED</span> ===

<!-- ID: GAME_DIAG_INCR_STAT_1 --> Increase STAT_ENEMIES_NEUTRALIZED by 50.

'''Available Options''': false, true

== <span title="GameCode">Particle</span> ==

=== <span title="GameCode&nbsp;&rarr;&nbsp;Particle">Particles manager</span> ===

<!-- ID: GAME_DIAG_PARTICLES --> Enable/disable particles manager debug.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Particle">Distance particle effect</span> ===

<!-- ID: GAME_DIAG_PARTICLES_DISTANCE_SYSTEM --> Enable/disable distance particle effect.

'''Available Options''': enabled, disabled

== <span title="GameCode">Signals</span> ==

=== <span title="GameCode&nbsp;&rarr;&nbsp;Signals">Show current SignalsManagerComponent</span> ===

<!-- ID: GAME_DIAG_SIGNALS_CURR --> Show or hide current SignalsManagerComponent.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Signals">Log received</span> ===

<!-- ID: GAME_DIAG_SIGNALS_RECV --> Enable/disable logging of received signals.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Signals">Log sent</span> ===

<!-- ID: GAME_DIAG_SIGNALS_SENT --> Enable/disable logging of sent signals.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Signals">Log signal changes</span> ===

<!-- ID: GAME_DIAG_SIGNALS_CHANGES --> Set logging mode for signal changes.

'''Available Options''': off, all, 0.5, 1, 10, 100

=== <span title="GameCode&nbsp;&rarr;&nbsp;Signals">Signals to dump</span> ===

<!-- ID: GAME_DIAG_SIGNALS_TO_DUMP --> Set signals to dump.

'''Available Options''': SP, MP, all

=== <span title="GameCode&nbsp;&rarr;&nbsp;Signals">Dump signals</span> ===

<!-- ID: GAME_DIAG_SIGNALS_DUMP --> Enable/disable dumping of signals.

'''Available Options''': false, true

== <span title="GameCode">Game materials</span> ==

=== <span title="GameCode&nbsp;&rarr;&nbsp;Game materials">Cursor</span> ===

<!-- ID: GAME_DIAG_MATERIALS_CURSOR --> Shows information about materials being used on collider which is under the cursor. It shows also thickness of the collider. By default it using all [[Arma Reforger:Collision Layer#InteractionMatrixRow Setup|Collision Layers]].

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Game materials">Projectile</span> ===

<!-- ID: GAME_DIAG_MATERIALS_PROJECTILE --> Restricts game materials check to [[Arma Reforger:Collision Layer#InteractionMatrixRow Setup|Projectile]] layer. Can be used to check fire geometry

'''Available Options''': false, true

== <span title="GameCode">Weapons</span> ==

=== <span title="GameCode&nbsp;&rarr;&nbsp;Weapons">Deployment</span> ===

==== <span title="GameCode&nbsp;&rarr;&nbsp;Weapons&nbsp;&rarr;&nbsp;Deployment">Debug deploying</span> ====

<!-- ID: GAME_DIAG_WEAPONS_DEPLOYMENT_DEBUG --> Enable/disable debugging of weapon deployment.

'''Available Options''': false, true

==== <span title="GameCode&nbsp;&rarr;&nbsp;Weapons&nbsp;&rarr;&nbsp;Deployment">IK diag</span> ====

<!-- ID: GAME_DIAG_WEAPONS_DEPLOYMENT_IK --> Enable/disable IK diagnostics for weapon deployment.

'''Available Options''': false, true

==== <span title="GameCode&nbsp;&rarr;&nbsp;Weapons&nbsp;&rarr;&nbsp;Deployment">Aim speed diag</span> ====

<!-- ID: GAME_DIAG_WEAPONS_DEPLOYMENT_AIM_SPEED --> Enable/disable aim speed diagnostics for weapon deployment.

'''Available Options''': false, true

==== <span title="GameCode&nbsp;&rarr;&nbsp;Weapons&nbsp;&rarr;&nbsp;Deployment">Animation diag</span> ====

<!-- ID: GAME_DIAG_WEAPONS_DEPLOYMENT_ANIM --> Enable/disable animation diagnostics for weapon deployment.

'''Available Options''': false, true

==== <span title="GameCode&nbsp;&rarr;&nbsp;Weapons&nbsp;&rarr;&nbsp;Deployment">Weapon collision diag</span> ====

<!-- ID: GAME_DIAG_WEAPONS_DEPLOYMENT_WEAPON_COLLISION --> Enable/disable weapon collision diagnostics for deployment.

'''Available Options''': false, true

==== <span title="GameCode&nbsp;&rarr;&nbsp;Weapons&nbsp;&rarr;&nbsp;Deployment">Disable Prone deployment</span> ====

<!-- ID: GAME_DIAG_WEAPONS_DEPLOYMENT_DISABLE_PRONE --> Enable/disable prone deployment for weapons.

'''Available Options''': false, true

==== <span title="GameCode&nbsp;&rarr;&nbsp;Weapons&nbsp;&rarr;&nbsp;Deployment">Disable post-phys hand pose</span> ====

<!-- ID: GAME_DIAG_WEAPONS_DEPLOYMENT_DISABLE_POSTPHYS_IK --> Enable/disable post physics hand pose for weapon.

'''Available Options''': false, true

==== <span title="GameCode&nbsp;&rarr;&nbsp;Weapons&nbsp;&rarr;&nbsp;Deployment">ADS limits diag</span> ====

<!-- ID: GAME_DIAG_WEAPONS_DEPLOYMENT_ADS_LIMITS --> Enable/disable ADS limits debug.

'''Available Options''': false, true

==== <span title="GameCode&nbsp;&rarr;&nbsp;Weapons&nbsp;&rarr;&nbsp;Deployment">Deploying height</span> ====

<!-- ID: GAME_DIAG_WEAPONS_DEPLOYMENT_DEPLOY_HEIGHT --> Set deploying height.

'''Range Settings''': * Min: 0 * Max: 1 * Current Value: 0.3 * Step: 0.01

==== <span title="GameCode&nbsp;&rarr;&nbsp;Weapons&nbsp;&rarr;&nbsp;Deployment">Max dist wpn-shoulder</span> ====

<!-- ID: GAME_DIAG_WEAPONS_DEPLOYMENT_DISTANCE_OFFSET_FROM_SHOULDER --> Set max distance between weapon and shoulder.

'''Range Settings''': * Min: 0 * Max: 90 * Current Value: 15 * Step: 0.05

==== <span title="GameCode&nbsp;&rarr;&nbsp;Weapons&nbsp;&rarr;&nbsp;Deployment">Disable prone movement</span> ====

<!-- ID: GAME_DIAG_WEAPONS_DEPLOYMENT_PRONE_DISABLE_MOVEMENT --> Enable/disable movement while prone deployment.

'''Available Options''': true, false

==== <span title="GameCode&nbsp;&rarr;&nbsp;Weapons&nbsp;&rarr;&nbsp;Deployment">Prone deployment heigh limit</span> ====

<!-- ID: GAME_DIAG_WEAPONS_DEPLOYMENT_PRONE_DEPLOY_HEIGHT_LIMIT --> Set prone deployment height limit.

'''Range Settings''': * Min: 0 * Max: 1 * Current Value: 0.15 * Step: 0.01

=== <span title="GameCode&nbsp;&rarr;&nbsp;Weapons">Show sights points</span> ===

<!-- ID: GAME_DIAG_WEAPONS_SHOW_SIGHTS_POINTS --> Enable/disable showing of weapon sight points.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Weapons">Disable aim modifiers</span> ===

<!-- ID: GAME_DIAG_WEAPONS_DISABLE_AIM_MODIFIERS --> Enable/disable aim modifiers for weapons.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Weapons">Disable character aim modifiers</span> ===

<!-- ID: GAME_DIAG_WEAPONS_DISABLE_CHARACTER_AIM_MODIFIERS --> Enable/disable character aim modifiers for weapons.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Weapons">Disable weapon offset</span> ===

<!-- ID: GAME_DIAG_WEAPONS_DISABLE_WEAPON_OFFSET --> Enable/disable weapon offset.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Weapons">Enable sway diagnostics</span> ===

<!-- ID: GAME_DIAG_WEAPONS_SHOW_SWAY_DIAG --> Enable/disable sway diagnostics.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Weapons">Disable movement based sway</span> ===

<!-- ID: GAME_DIAG_WEAPONS_DISABLE_MOVEMENT_SWAY --> Enable/disable movement based sway.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Weapons">Weapon obstruction</span> ===

<!-- ID: GAME_DIAG_WEAPONS_OBSTRUCTION --> Enable/disable weapon obstruction debug. Diag shows various data related to obstruction like i.e. current obstruction status of controlled character.

It is also possible to change '''Weapon Move back offset''' with this diag.

When debug is activated additional spheres will be rendered with following color coding:

• Green &nbsp;&rarr;&nbsp; Starting or unobstructed points.

• Red &nbsp;&rarr;&nbsp; Obstructed or fully blocked locations

• Orange &nbsp;&rarr;&nbsp; Static reference points for offset calculations.

[[File:armareforger-diag-menu-weapon-obstruction.gif]]

When character is moving, either pink or red orbs are visible - those are obstruction predictions orbs. When no obstruction is predicted their color is pink.

[[File:armareforger-diag-menu-weapon-obstruction-prediction.gif]]

{{Feature|important|To prevent flashing behavior of debug windows it is necessary to '''{{Link|#Limit FPS}} below 20 frames'''.}}

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Weapons">Weapon handling</span> ===

<!-- ID: GAME_DIAG_WEAPONS_HANDLING --> Enable/disable weapon handling debug.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Weapons">Weapon IK</span> ===

<!-- ID: GAME_DIAG_WEAPONS_IK --> Enable/disable weapon IK debug.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Weapons">Enable casing endpoints</span> ===

<!-- ID: GAME_DIAG_WEAPONS_ENABLE_CASING_ENDPOINTS --> Enable/disable casing endpoints debug.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Weapons">Disable partial lower</span> ===

<!-- ID: GAME_DIAG_WEAPONS_FORCE_DISABLE_PARTIAL_LOWER --> Enable/disable partial lower disable.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Weapons">Force zeroing anim value</span> ===

<!-- ID: GAME_DIAG_WEAPONS_FORCE_ZEROING_ANIM_VALUE --> Set force zeroing animation value.

'''Range Settings''': * Min: -0.001 * Max: 1 * Current Value: -0.001 * Step: 0.001

=== <span title="GameCode&nbsp;&rarr;&nbsp;Weapons">Force Recoil Type</span> ===

<!-- ID: GAME_DIAG_WEAPONS_FILTER_RECOIL_TYPE --> Set force recoil type.

'''Range Settings''': * Min: 0 * Max: 3 * Current Value: 0 * Step: 1

=== <span title="GameCode&nbsp;&rarr;&nbsp;Weapons">Roll comp. weight</span> ===

<!-- ID: GAME_DIAG_WEAPONS_ROLL_COMPENSATION_WEIGHT --> Set roll compensation weight.

'''Range Settings''': * Min: 0 * Max: 1 * Current Value: 0 * Step: 0.01

=== <span title="GameCode&nbsp;&rarr;&nbsp;Weapons">Roll comp. gizmo diag</span> ===

<!-- ID: GAME_DIAG_WEAPONS_ROLL_COMPENSATION_GIZMOS --> Enable/disable roll compensation gizmo debug.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Weapons">Correct zeroing data by ZeroGenerator</span> ===

<!-- ID: GAME_DIAG_WEAPONS_ADJUST_ZERO --> Enable/disable zeroing data correction.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Weapons">Adjustable magnification input scaling info</span> ===

<!-- ID: GAME_DIAG_WEAPONS_ADJUSTABLE_MAG_INPUT_INFO --> Enable/disable adjustable magnification scaling info.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Weapons">Adjustable magnification input scaling value</span> ===

<!-- ID: GAME_DIAG_WEAPONS_ADJUSTABLE_MAG_INPUT_SCALE --> Set adjustable magnification input scaling value.

'''Range Settings''': * Min: -1.0 * Max: 1.0 * Current Value: 0.0 * Step: 0.01

=== <span title="GameCode&nbsp;&rarr;&nbsp;Weapons">Show Collimator Debug</span> ===

<!-- ID: GAME_MENU_WEAPON_COLLIMATOR_SIGHT --> Enable/disable collimator debug.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Weapons">Show Attachment Debug</span> ===

<!-- ID: GAME_MENU_WEAPON_ATTACHMENTS --> Enable/disable attachment debug.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Weapons">TestAimModifier</span> ===

==== <span title="GameCode&nbsp;&rarr;&nbsp;Weapons&nbsp;&rarr;&nbsp;TestAimModifier">Reset aim mod</span> ====

<!-- ID: SCR_DebugMenuID.DEBUGUI_AIMMODIFIER_RESET --> Reset aim modifier.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Weapons">Toggle 2D optics</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_WEAPONS_OPTICS_USE_2D --> Toggle 2D optics usage.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Weapons">Show optics diag</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_WEAPONS_OPTICS --> Show or hide optics diagnostics.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Weapons">Show PIP settings diag</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_WEAPONS_PIP_SIGHTS --> Show or hide PIP settings diagnostics.

'''Available Options''': false, true

== <span title="GameCode">User Actions</span> ==

=== <span title="GameCode&nbsp;&rarr;&nbsp;User Actions">Log actions</span> ===

<!-- ID: GAME_DIAG_USER_ACTION_LOG --> Enable/disable logging of user actions.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;User Actions">Context position</span> ===

<!-- ID: GAME_DIAG_USER_ACTION_CONTEXT_POSITION --> Enable/disable context position debug.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;User Actions">Context visibility angle</span> ===

<!-- ID: GAME_DIAG_USER_ACTION_CONTEXT_VISIBILITY_ANGLE --> Enable/disable context visibility angle debug.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;User Actions">Draw diags for select ent only</span> ===

<!-- ID: GAME_DIAG_USER_ACTION_CONTEXT_DRAWDIAG_SELECTONLY --> Enable/disable drawing of diags for selected entity only.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;User Actions">Context gizmo scale</span> ===

<!-- ID: GAME_DIAG_USER_ACTION_CONTEXT_GIZMO_SIZE --> Set context gizmo scale.

'''Range Settings''': * Min: 0 * Max: 5 * Current Value: 0.3 * Step: 0.05

=== <span title="GameCode&nbsp;&rarr;&nbsp;User Actions">Context name scale</span> ===

<!-- ID: GAME_DIAG_USER_ACTION_CONTEXT_NAME_SIZE --> Set context name scale.

'''Range Settings''': * Min: 0 * Max: 50 * Current Value: 10 * Step: 1

=== <span title="GameCode&nbsp;&rarr;&nbsp;User Actions">Show context radius gizmo</span> ===

<!-- ID: GAME_DIAG_USER_ACTION_CONTEXT_RADIUS_GIZMO --> Enable/disable showing of context radius gizmo.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;User Actions">Enable handler diag</span> ===

<!-- ID: GAME_DIAG_USER_ACTION_INTERACTION_HANDLER_DIAG --> Enable/disable user action handler diagnostics.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;User Actions">Forcedisable Interactions</span> ===

<!-- ID: GAME_DIAG_USER_ACTION_INTERACTION_HANDLER_FORCEDISABLE --> Enable/disable forcing of interactions.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;User Actions">Enable adv. handler diag</span> ===

<!-- ID: GAME_DIAG_USER_ACTION_INTERACTION_HANDLER_DIAG_ADVANCED --> Enable/disable advanced user action handler diagnostics.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;User Actions">Use distance to line</span> ===

<!-- ID: GAME_DIAG_USER_ACTION_INTERACTION_HANDLER_USE_LINE_DISTANCE --> Enable/disable using distance to line for interaction.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;User Actions">Fix square distance</span> ===

<!-- ID: GAME_DIAG_USER_ACTION_INTERACTION_HANDLER_FIX_SQUARE_DISTANCE --> Enable/disable fixing of square distance.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;User Actions">Use predicate cache</span> ===

<!-- ID: GAME_DIAG_USER_ACTION_PREDICATE_CACHE --> Enable/disable predicate cache usage.

'''Available Options''': true, false

=== <span title="GameCode&nbsp;&rarr;&nbsp;User Actions">Script listeners</span> ===

<!-- ID: GAME_DIAG_USER_ACTION_SCRIPT_LISTENER --> Enable/disable script listeners.

'''Available Options''': true, false

=== <span title="GameCode&nbsp;&rarr;&nbsp;User Actions">SetActionEnabled_S ON</span> ===

<!-- ID: GAME_DIAG_USER_ACTION_SETACTIONENABLED_S --> Enable/disable setting of action enable on client.

'''Available Options''': true, false

=== <span title="GameCode&nbsp;&rarr;&nbsp;User Actions">New interaction method</span> ===

<!-- ID: GAME_DIAG_USER_ACTION_NEW_INTERACTION_METHOD --> Enable/disable new interaction method.

'''Available Options''': true, false

=== <span title="GameCode&nbsp;&rarr;&nbsp;User Actions">Skip action duration</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_INTERACTION_SKIP_DURATION --> Enable/disable skipping of interaction duration.

'''Available Options''': false, true

== <span title="GameCode">Gamepad</span> ==

=== <span title="GameCode&nbsp;&rarr;&nbsp;Gamepad">Show active effects</span> ===

<!-- ID: GAME_DIAG_GAMEPAD_ACTIVE_EFFECTS --> Enable/disable showing of active gamepad effects.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Gamepad">Gyro Speed Sensitivity Yaw</span> ===

<!-- ID: GAME_DIAG_GAMEPAD_GYRO_SENSITIVITY_YAW --> Set gyro speed sensitivity yaw.

'''Range Settings''': * Min: -100.0 * Max: 100.0 * Current Value: 0.0 * Step: 0.01

=== <span title="GameCode&nbsp;&rarr;&nbsp;Gamepad">Gyro Speed Sensitivity Pitch</span> ===

<!-- ID: GAME_DIAG_GAMEPAD_GYRO_SENSITIVITY_PITCH --> Set gyro speed sensitivity pitch.

'''Range Settings''': * Min: -20.0 * Max: 20.0 * Current Value: 0.0 * Step: 0.01

=== <span title="GameCode&nbsp;&rarr;&nbsp;Gamepad">Gyro Speed Sensitivity Roll</span> ===

<!-- ID: GAME_DIAG_GAMEPAD_GYRO_SENSITIVITY_ROLL --> Set gyro speed sensitivity roll.

'''Range Settings''': * Min: -20.0 * Max: 20.0 * Current Value: 0.0 * Step: 0.01

== <span title="GameCode">Track-IR</span> ==

=== <span title="GameCode&nbsp;&rarr;&nbsp;Track-IR">Enable TrackIR freelook</span> ===

<!-- ID: GAME_DIAG_TRACKIR_ENABLE --> Enable/disable TrackIR freelook.

'''Available Options''': true, false

=== <span title="GameCode&nbsp;&rarr;&nbsp;Track-IR">Enable TrackIR leaning</span> ===

<!-- ID: GAME_DIAG_TRACKIR_ENABLE_LEANING --> Enable/disable TrackIR leaning.

'''Available Options''': true, false

== <span title="GameCode">Radio</span> ==

=== <span title="GameCode&nbsp;&rarr;&nbsp;Radio">Transmissions diag</span> ===

<!-- ID: GAME_DIAG_RADIO_TRANSMISSIONS --> Enable/disable radio transmissions diagnostics.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Radio">Show radio ranges</span> ===

<!-- ID: GAME_DIAG_RADIO_RANGE --> Enable/disable showing of radio ranges.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Radio">Force transmit</span> ===

<!-- ID: GAME_DIAG_RADIO_VON_TRANSMIT --> Enable/disable forcing of VON transmission.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Radio">Disable audio filters</span> ===

<!-- ID: GAME_DIAG_RADIO_VON_RAW --> Enable/disable audio filters for VON.

'''Available Options''': false, true

== <span title="GameCode">Chat</span> ==

=== <span title="GameCode&nbsp;&rarr;&nbsp;Chat">Log client chat messages</span> ===

<!-- ID: GAME_DIAG_LOG_CHAT --> Enable/disable logging of client chat messages.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Chat">Show chat diag</span> ===

<!-- ID: GAME_DIAG_CHAT --> Show or hide chat diagnostics.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Chat">Disable chat</span> ===

<!-- ID: GAME_DIAG_DISABLE_CHAT --> Enable/disable chat.

'''Available Options''': false, true

== <span title="GameCode">Time</span> ==

=== <span title="GameCode&nbsp;&rarr;&nbsp;Time">Pause world time</span> ===

<!-- ID: GAME_DIAG_TIME_PAUSE_TIME --> Enable/disable pausing of world time.

'''Available Options''': false, true

== <span title="GameCode">Electricity</span> ==

=== <span title="GameCode&nbsp;&rarr;&nbsp;Electricity">Set state (SP & MP)</span> ===

<!-- ID: GAME_DIAG_ELECTRICITY_SET_STATE_FALSE --> Enable/disable setting of electricity state.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Electricity">Delete nearest pole (SP ONLY)</span> ===

<!-- ID: GAME_DIAG_ELECTRICITY_DELETE_NEAREST_POLE --> Enable/disable deleting of nearest electricity pole.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Electricity">Disable nearest pole edges (SP ONLY)</span> ===

<!-- ID: GAME_DIAG_ELECTRICITY_DISABLE_NEAREST_POLE_EDGES --> Enable/disable disabling of nearest electricity pole edges.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Electricity">Switch connection of nearest poles (SP ONLY)</span> ===

<!-- ID: GAME_DIAG_ELECTRICITY_SWITCH_CONNECTION_OF_NEAREST_POLES --> Enable/disable switching of nearest electricity poles connection.

'''Available Options''': false, true

== <span title="GameCode">Inventory</span> ==

=== <span title="GameCode&nbsp;&rarr;&nbsp;Inventory">Dump storages content</span> ===

<!-- ID: GAME_DIAG_INVENTORY_DUMP_STORAGE_CONTENT --> Enable/disable dumping of inventory storage content.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Inventory">Show inventory items</span> ===

<!-- ID: GAME_DIAG_INVENTORY_SHOW_ITEMS --> Enable/disable showing of inventory items.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Inventory">Log inventory changes</span> ===

<!-- ID: GAME_DIAG_INVENTORY_LOG_CHANGE --> Enable/disable logging of inventory changes.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Inventory">Log visibility changes</span> ===

<!-- ID: GAME_DIAG_INVENTORY_LOG_VISIBILITY --> Enable/disable logging of inventory visibility changes.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Inventory">Show volume info</span> ===

<!-- ID: GAME_DIAG_INVENTORY_SHOW_VOLUME_INFO --> Enable/disable showing of inventory volume info.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Inventory">Debug vicinity</span> ===

<!-- ID: GAME_DIAG_INVENTORY_VICINITY_DEBUG --> Enable/disable vicinity debug.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Inventory">Show attributes debug</span> ===

<!-- ID: GAME_DIAG_INVENTORY_ATTRIBUTES_DEBUG --> Enable/disable showing of inventory attributes debug.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Inventory">Enable item placement in WB</span> ===

<!-- ID: GAME_DIAG_INVENTORY_ITEM_PLACEMENT --> Enable/disable item placement in workbench.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Inventory">Enable hand slot</span> ===

<!-- ID: GAME_DIAG_INVENTORY_HAND_SLOT --> Enable/disable hand slot.

'''Available Options''': false, true

== <span title="GameCode">Loadout</span> ==

=== <span title="GameCode&nbsp;&rarr;&nbsp;Loadout">Show clothes</span> ===

<!-- ID: GAME_DIAG_LOADOUT_SHOW_CLOTHES --> Enable/disable showing of loadout clothes.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Loadout">Show slots</span> ===

<!-- ID: GAME_DIAG_LOADOUT_SHOW_SLOTS --> Enable/disable showing of loadout slots.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Loadout">Unwear all</span> ===

<!-- ID: GAME_DIAG_LOADOUT_UNWEAR_ALL --> Unwear all loadout items.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Loadout">Show only me</span> ===

<!-- ID: GAME_DIAG_LOADOUT_PLAYER_ONLY --> Enable/disable showing of only player loadout.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Loadout">Show only lines without text</span> ===

<!-- ID: GAME_DIAG_LOADOUT_LINES_ONLY --> Enable/disable showing of only lines without text.

'''Available Options''': false, true

== <span title="GameCode">Lights</span> ==

=== <span title="GameCode&nbsp;&rarr;&nbsp;Lights">Light positions</span> ===

<!-- ID: GAME_DIAG_LIGHT_POSITION --> Enable/disable showing of light positions.

'''Available Options''': false, true

== <span title="GameCode">Camera</span> ==

=== <span title="GameCode&nbsp;&rarr;&nbsp;Camera">Show camera position</span> ===

<!-- ID: GAME_DIAG_CAMERA_POSITION --> Enable/disable showing of camera position.

'''Available Options''': false, true

== <span title="GameCode">Animations</span> ==

=== <span title="GameCode&nbsp;&rarr;&nbsp;Animations">Show animated items bones</span> ===

<!-- ID: GAME_DIAG_ANIM_ITEM_BONES --> Enable/disable showing of animated items bones.

'''Available Options''': false, true

== <span title="GameCode">Network</span> ==

=== <span title="GameCode&nbsp;&rarr;&nbsp;Network">Network Movement</span> ===

==== <span title="GameCode&nbsp;&rarr;&nbsp;Network&nbsp;&rarr;&nbsp;Network Movement">Movement</span> ====

<!-- ID: GAME_DIAG_NETWORK_MOVEMENT --> Set network movement debug mode.

'''Available Options''': none, in, out

==== <span title="GameCode&nbsp;&rarr;&nbsp;Network&nbsp;&rarr;&nbsp;Network Movement">Movement simulation</span> ====

<!-- ID: GAME_DIAG_NETWORK_MOVEMENT_SIM --> Enable/disable network movement simulation debug.

'''Available Options''': false, true

==== <span title="GameCode&nbsp;&rarr;&nbsp;Network&nbsp;&rarr;&nbsp;Network Movement">Display Selection</span> ====

<!-- ID: GAME_DIAG_NETWORK_DISPLAY_SELECTION --> Enable/disable network movement display selection.

'''Available Options''': false, true

==== <span title="GameCode&nbsp;&rarr;&nbsp;Network&nbsp;&rarr;&nbsp;Network Movement">NwkMovement Selection</span> ====

<!-- ID: GAME_DIAG_NETWORK_SELECTION --> Set network movement selection.

'''Range Settings''': * Min: 0 * Max: 512 * Current Value: 0 * Step: 1

==== <span title="GameCode&nbsp;&rarr;&nbsp;Network&nbsp;&rarr;&nbsp;Network Movement">Display buffer state</span> ====

<!-- ID: GAME_DIAG_NETWORK_DISPLAY_BUFFER --> Enable/disable network movement display buffer state.

'''Available Options''': false, true

==== <span title="GameCode&nbsp;&rarr;&nbsp;Network&nbsp;&rarr;&nbsp;Network Movement">Execution mode</span> ====

<!-- ID: GAME_DIAG_NETWORK_EXECUTION --> Enable/disable network movement execution mode.

'''Available Options''': false, true

==== <span title="GameCode&nbsp;&rarr;&nbsp;Network&nbsp;&rarr;&nbsp;Network Movement">Phys Simulation</span> ====

<!-- ID: GAME_DIAG_NETWORK_SIMULATION --> Enable/disable network movement physics simulation.

'''Available Options''': false, true

==== <span title="GameCode&nbsp;&rarr;&nbsp;Network&nbsp;&rarr;&nbsp;Network Movement">Nwk Updates</span> ====

<!-- ID: GAME_DIAG_NETWORK_NWK_UPDATE --> Enable/disable network movement network updates.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Network">Network Streaming</span> ===

==== <span title="GameCode&nbsp;&rarr;&nbsp;Network&nbsp;&rarr;&nbsp;Network Streaming">Override Distance</span> ====

<!-- ID: GAME_DIAG_NETWORK_STREAMING_DISTANCE_OVERRIDE --> Enable/disable overriding of streaming distance.

'''Available Options''': false, true

==== <span title="GameCode&nbsp;&rarr;&nbsp;Network&nbsp;&rarr;&nbsp;Network Streaming">Stream In Grid Distance [#]</span> ====

<!-- ID: GAME_DIAG_NETWORK_STREAMING_DISTANCE_GRID_STREAMIN --> Set stream in grid distance.

'''Range Settings''': * Min: 1 * Max: 10 * Current Value: 4 * Step: 1

==== <span title="GameCode&nbsp;&rarr;&nbsp;Network&nbsp;&rarr;&nbsp;Network Streaming">Vehicle Grid Distance [#]</span> ====

<!-- ID: GAME_DIAG_NETWORK_STREAMING_DISTANCE_VEHICLES --> Set vehicle grid distance.

'''Range Settings''': * Min: 1 * Max: 10 * Current Value: 2 * Step: 1

==== <span title="GameCode&nbsp;&rarr;&nbsp;Network&nbsp;&rarr;&nbsp;Network Streaming">Character Grid Distance [#]</span> ====

<!-- ID: GAME_DIAG_NETWORK_STREAMING_DISTANCE_CHARACTER --> Set character grid distance.

'''Range Settings''': * Min: 1 * Max: 10 * Current Value: 3 * Step: 1

=== <span title="GameCode&nbsp;&rarr;&nbsp;Network">RPL scheduler</span> ===

==== <span title="GameCode&nbsp;&rarr;&nbsp;Network&nbsp;&rarr;&nbsp;RPL scheduler">Server side RPL scheduler</span> ==== ===== <span title="GameCode&nbsp;&rarr;&nbsp;Network&nbsp;&rarr;&nbsp;RPL scheduler&nbsp;&rarr;&nbsp;Server side RPL scheduler">Items</span> =====

<!-- ID: GAME_DIAG_RPLSCHEDULER_BASIC --> Enable/disable basic RPL scheduler debug.

'''Available Options''': false, true

===== <span title="GameCode&nbsp;&rarr;&nbsp;Network&nbsp;&rarr;&nbsp;RPL scheduler&nbsp;&rarr;&nbsp;Server side RPL scheduler">Item Hierarchy Moves</span> =====

<!-- ID: GAME_DIAG_RPLSCHEDULER_ITEM_MOVES --> Enable/disable RPL scheduler item hierarchy moves debug.

'''Available Options''': false, true

===== <span title="GameCode&nbsp;&rarr;&nbsp;Network&nbsp;&rarr;&nbsp;RPL scheduler&nbsp;&rarr;&nbsp;Server side RPL scheduler">Items Streamed In</span> =====

<!-- ID: GAME_DIAG_RPLSCHEDULER_CONNECTIONS_STREAMIN --> Enable/disable RPL scheduler streamed in debug.

'''Available Options''': false, true

===== <span title="GameCode&nbsp;&rarr;&nbsp;Network&nbsp;&rarr;&nbsp;RPL scheduler&nbsp;&rarr;&nbsp;Server side RPL scheduler">Items Streamed Out</span> =====

<!-- ID: GAME_DIAG_RPLSCHEDULER_CONNECTIONS_STREAMOUT --> Enable/disable RPL scheduler streamed out debug.

'''Available Options''': false, true

===== <span title="GameCode&nbsp;&rarr;&nbsp;Network&nbsp;&rarr;&nbsp;RPL scheduler&nbsp;&rarr;&nbsp;Server side RPL scheduler">Items bumpped</span> =====

<!-- ID: GAME_DIAG_RPLSCHEDULER_CONNECTIONS_BUMP --> Enable/disable RPL scheduler bumpped items debug.

'''Available Options''': false, true

===== <span title="GameCode&nbsp;&rarr;&nbsp;Network&nbsp;&rarr;&nbsp;RPL scheduler&nbsp;&rarr;&nbsp;Server side RPL scheduler">Spatial map</span> =====

<!-- ID: GAME_DIAG_RPLSCHEDULER_SPATIAL_MAP --> Enable/disable RPL scheduler spatial map debug.

'''Available Options''': false, true

===== <span title="GameCode&nbsp;&rarr;&nbsp;Network&nbsp;&rarr;&nbsp;RPL scheduler&nbsp;&rarr;&nbsp;Server side RPL scheduler">Moving list</span> =====

<!-- ID: GAME_DIAG_RPLSCHEDULER_MOVING_LIST --> Enable/disable RPL scheduler moving list debug.

'''Available Options''': false, true

===== <span title="GameCode&nbsp;&rarr;&nbsp;Network&nbsp;&rarr;&nbsp;RPL scheduler&nbsp;&rarr;&nbsp;Server side RPL scheduler">Disabled ref count</span> =====

<!-- ID: GAME_DIAG_RPLSCHEDULER_DISABLED_REF_COUNT --> Enable/disable RPL scheduler disabled reference count debug.

'''Available Options''': false, true

===== <span title="GameCode&nbsp;&rarr;&nbsp;Network&nbsp;&rarr;&nbsp;RPL scheduler&nbsp;&rarr;&nbsp;Server side RPL scheduler">Observers</span> =====

<!-- ID: GAME_DIAG_RPLSCHEDULER_OBSERVERS --> Enable/disable RPL scheduler observers debug.

'''Available Options''': false, true

===== <span title="GameCode&nbsp;&rarr;&nbsp;Network&nbsp;&rarr;&nbsp;RPL scheduler&nbsp;&rarr;&nbsp;Server side RPL scheduler">Budgeting</span> =====

<!-- ID: GAME_DIAG_RPLSCHEDULER_BUDGETING --> Enable/disable RPL scheduler budgeting debug.

'''Available Options''': false, true

===== <span title="GameCode&nbsp;&rarr;&nbsp;Network&nbsp;&rarr;&nbsp;RPL scheduler&nbsp;&rarr;&nbsp;Server side RPL scheduler">Ownership</span> =====

<!-- ID: GAME_DIAG_RPLSCHEDULER_OWNERSHIP --> Enable/disable RPL scheduler ownership debug.

'''Available Options''': false, true

==== <span title="GameCode&nbsp;&rarr;&nbsp;Network&nbsp;&rarr;&nbsp;RPL scheduler">Display Observers</span> ====

<!-- ID: GAME_DIAG_DISPLAY_OBSERVERS --> Enable/disable display of observers.

'''Available Options''': false, true

==== <span title="GameCode&nbsp;&rarr;&nbsp;Network&nbsp;&rarr;&nbsp;RPL scheduler">Virtual Player Id</span> ====

<!-- ID: GAME_DIAG_VIRTUAL_SELECTION_VALUE --> Enable/disable virtual player ID debug.

'''Available Options''': false, true

==== <span title="GameCode&nbsp;&rarr;&nbsp;Network&nbsp;&rarr;&nbsp;RPL scheduler">Spatial Map of Player Id</span> ====

<!-- ID: GAME_DIAG_PLAYER_SELECTION_VALUE --> Set spatial map of player ID.

'''Range Settings''': * Min: 0 * Max: 192 * Current Value: -1 * Step: 1

==== <span title="GameCode&nbsp;&rarr;&nbsp;Network&nbsp;&rarr;&nbsp;RPL scheduler">Virtual Player X pos</span> ====

<!-- ID: GAME_DIAG_VIRTUAL_POS_X_VALUE --> Set virtual player X position.

'''Range Settings''': * Min: 0 * Max: 13000 * Current Value: 0 * Step: 100

==== <span title="GameCode&nbsp;&rarr;&nbsp;Network&nbsp;&rarr;&nbsp;RPL scheduler">Virtual Player Y pos</span> ====

<!-- ID: GAME_DIAG_VIRTUAL_POS_Y_VALUE --> Set virtual player Y position.

'''Range Settings''': * Min: 0 * Max: 13000 * Current Value: 0 * Step: 100

==== <span title="GameCode&nbsp;&rarr;&nbsp;Network&nbsp;&rarr;&nbsp;RPL scheduler">Spatial layer</span> ====

<!-- ID: GAME_DIAG_SPATIAL_LAYER_VALUE --> Set spatial layer.

'''Available Options''': statics, dynamics, char+veh

==== <span title="GameCode&nbsp;&rarr;&nbsp;Network&nbsp;&rarr;&nbsp;RPL scheduler">Spatial type</span> ====

<!-- ID: GAME_DIAG_SPATIAL_TYPE_VALUE --> Set spatial type.

'''Available Options''': stationary+moving, stationary, moving

==== <span title="GameCode&nbsp;&rarr;&nbsp;Network&nbsp;&rarr;&nbsp;RPL scheduler">Network range</span> ====

<!-- ID: GAME_DIAG_NDS_VALUE --> Set network range.

'''Range Settings''': * Min: 1 * Max: 50 * Current Value: 2 * Step: 1

==== <span title="GameCode&nbsp;&rarr;&nbsp;Network&nbsp;&rarr;&nbsp;RPL scheduler">Global streaming budget</span> ====

<!-- ID: GAME_DIAG_STREAMING_BUDGET --> Set global streaming budget.

'''Range Settings''': * Min: 100 * Max: 50000 * Current Value: 500 * Step: 50

==== <span title="GameCode&nbsp;&rarr;&nbsp;Network&nbsp;&rarr;&nbsp;RPL scheduler">Staggering budget</span> ====

<!-- ID: GAME_DIAG_STAGGERING_BUDGET --> Set staggering budget.

'''Range Settings''': * Min: 1 * Max: 10201 * Current Value: 1 * Step: 1

==== <span title="GameCode&nbsp;&rarr;&nbsp;Network&nbsp;&rarr;&nbsp;RPL scheduler">Open streams delta</span> ====

<!-- ID: GAME_DIAG_OPEN_STREAMS_DELTA --> Set open streams delta.

'''Range Settings''': * Min: 1 * Max: 1000 * Current Value: 1 * Step: 1

==== <span title="GameCode&nbsp;&rarr;&nbsp;Network&nbsp;&rarr;&nbsp;RPL scheduler">Trouble causer</span> ====

<!-- ID: GAME_DIAG_TROUBLE_CAUSER --> Enable/disable trouble causer debug.

'''Available Options''': false, true

==== <span title="GameCode&nbsp;&rarr;&nbsp;Network&nbsp;&rarr;&nbsp;RPL scheduler">Streaming trouble causer rate</span> ====

<!-- ID: GAME_DIAG_TROUBLE_CAUSER_VALUE --> Set streaming trouble causer rate.

'''Range Settings''': * Min: 1 * Max: 60 * Current Value: 0 * Step: 1

=== <span title="GameCode&nbsp;&rarr;&nbsp;Network">Server FPS</span> ===

<!-- ID: GAME_DIAG_NETWORK_SERVERFPS --> Enable/disable network server FPS display.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Network">Damage synchronization</span> ===

<!-- ID: GAME_DIAG_NETWORK_DAMAGE --> Enable/disable network damage synchronization debug.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Network">Lobby diagnostics</span> ===

<!-- ID: GAME_DIAG_NETWORK_LOBBY --> Enable/disable network lobby diagnostics.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Network">Connection diag</span> ===

<!-- ID: GAME_DIAG_CONNECTION_DIAG --> Enable/disable network connection diagnostics.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Network">Log ownership changes</span> ===

<!-- ID: GAME_DIAG_NETWORK_OWNERSHIP_CHANGES --> Enable/disable logging of network ownership changes.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Network">Validate loaded prefabs</span> ===

<!-- ID: GAME_DIAG_NETWORK_VALIDATE_PREFABS --> Enable/disable validation of loaded prefabs.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Network">Server admin</span> ===

<!-- ID: GAME_DIAG_SERVER_ADMIN --> Enable/disable server admin mode.

'''Available Options''': disabled, enabled

=== <span title="GameCode&nbsp;&rarr;&nbsp;Network">RPC MT jobs</span> ===

<!-- ID: GAME_DIAG_RPC_JOBS --> Enable/disable RPC multithreaded jobs.

'''Available Options''': true, false

=== <span title="GameCode&nbsp;&rarr;&nbsp;Network">Loading prefabs</span> ===

<!-- ID: GAME_DIAG_LOADING_PREFABS --> Enable/disable prefabs loading debug.

'''Available Options''': false, true

== <span title="GameCode">Social Component</span> ==

=== <span title="GameCode&nbsp;&rarr;&nbsp;Social Component">Show</span> ===

<!-- ID: GAME_DIAG_CLIENT_SOCIAL_COMPONENT_SHOW --> Enable/disable client social component debug.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Social Component">Restrictions override</span> ===

<!-- ID: GAME_DIAG_CLIENT_SOCIAL_COMPONENT_OVERRIDE --> Set restriction override mode for social component.

'''Available Options''': None, Force-Restriction, Force-Unrestricted

=== <span title="GameCode&nbsp;&rarr;&nbsp;Social Component">Player to restrict</span> ===

<!-- ID: GAME_DIAG_CLIENT_SOCIAL_COMPONENT_PLAYER --> Set player to restrict.

'''Available Options''': First-Found, Last-Found

=== <span title="GameCode&nbsp;&rarr;&nbsp;Social Component">Send update</span> ===

<!-- ID: GAME_DIAG_CLIENT_SOCIAL_COMPONENT_UPDATE --> Enable/disable sending of social component update.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Social Component">Block Me</span> ===

<!-- ID: GAME_DIAG_CLIENT_SOCIAL_COMPONENT_BLOCKME --> Enable/disable blocking of current player.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Social Component">Unblock Me</span> ===

<!-- ID: GAME_DIAG_CLIENT_SOCIAL_COMPONENT_UNBLOCKME --> Enable/disable unblocking of current player.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Social Component">Update block list</span> ===

<!-- ID: GAME_DIAG_CLIENT_SOCIAL_COMPONENT_BLOCKLIST_UPDATE --> Enable/disable updating of block list.

'''Available Options''': false, true

== <span title="GameCode">Turrets</span> ==

=== <span title="GameCode&nbsp;&rarr;&nbsp;Turrets">Turret armory</span> ===

<!-- ID: GAME_DIAG_TURRET_ARMORY --> Enable/disable turret armory debug.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Turrets">Disable turret modifiers</span> ===

<!-- ID: GAME_DIAG_TURRETS_DISABLE_AIM_MODIFIERS --> Enable/disable aim modifiers for turrets.

'''Available Options''': false, true

== <span title="GameCode">HitReg</span> ==

=== <span title="GameCode&nbsp;&rarr;&nbsp;HitReg">Draw Compensated Shots</span> ===

<!-- ID: DM_HITREG_DRAW_COMPENSATED_SHOTS --> Set draw mode for compensated shots.

'''Available Options''': none, missed, all

=== <span title="GameCode&nbsp;&rarr;&nbsp;HitReg">Drawn Shots</span> ===

<!-- ID: DM_HITREG_COMPENSATED_SHOTS_COUNT --> Set amount of drawn shots.

'''Range Settings''': * Min: 1 * Max: 20 * Current Value: 5 * Step: 1

=== <span title="GameCode&nbsp;&rarr;&nbsp;HitReg">Draw Trajectories</span> ===

<!-- ID: DM_HITREG_COMPENSATED_DRAW_TRAJECTORIES --> Enable/disable drawing of trajectories.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;HitReg">Draw Collider Histories</span> ===

<!-- ID: DM_COLLIDER_HISTORY_DRAW_SHAPES --> Set drawing mode for collider histories.

'''Available Options''': none, all, included, excluded

=== <span title="GameCode&nbsp;&rarr;&nbsp;HitReg">Use RTT (Old Method)</span> ===

<!-- ID: DM_HITREG_USE_RPL_RTT --> Enable/disable using old RTT method.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;HitReg">Show Graphs</span> ===

<!-- ID: DM_HITREG_GRAPHS --> Enable/disable showing of hit registration graphs.

'''Available Options''': false, true

== <span title="GameCode">Projectiles</span> ==

=== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles">Proj. override</span> ===

==== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles&nbsp;&rarr;&nbsp;Proj. override">Mass</span> ====

<!-- ID: DM_PROJ_SHELL_OVERRIDE_MASS --> Projectile mass override

'''Available Options''': default, 0.0001, 0.0005, 0.001, 0.005, 0.01, 0.05, 0.1, 0.5, 1

==== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles&nbsp;&rarr;&nbsp;Proj. override">Muzzle velocity</span> ====

<!-- ID: DM_PROJ_SHELL_OVERRIDE_MUZZLE_VELOCITY --> Projectile muzzle velocity override

'''Available Options''': default, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000

==== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles&nbsp;&rarr;&nbsp;Proj. override">Air drag coef</span> ====

<!-- ID: DM_PROJ_SHELL_OVERRIDE_AIR_DRAG_COEF --> Projectile air drag coefficient override

'''Available Options''': default, 0.001, 0.0005, 0.0001, 0.00005, 0.00001, 0.000005, 0.000001, 0.0000005, 0.0000001, 0.00000005, 0.00000001

=== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles">Proj. test</span> ===

==== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles&nbsp;&rarr;&nbsp;Proj. test">Run</span> ====

<!-- ID: DM_PROJ_SHELL_TEST_RUN --> Projectile test run

'''Available Options''': disabled, enabled

==== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles&nbsp;&rarr;&nbsp;Proj. test">Type</span> ====

<!-- ID: DM_PROJ_SHELL_TEST_TYPE --> Projectile test type

'''Available Options''': camera, general, firefight, pen-test

==== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles&nbsp;&rarr;&nbsp;Proj. test">Repeat</span> ====

<!-- ID: DM_PROJ_SHELL_TEST_REPEAT --> Projectile test repeat mode

'''Available Options''': once, counter, unlimited

==== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles&nbsp;&rarr;&nbsp;Proj. test">Repeat count</span> ====

<!-- ID: DM_PROJ_SHELL_TEST_REPEAT_COUNT --> Set projectile test repeat count.

'''Range Settings''':

Min: 5

Max: 100

Current Value: 5

Step: 5

==== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles&nbsp;&rarr;&nbsp;Proj. test">Repeat freq.</span> ====

<!-- ID: DM_PROJ_SHELL_TEST_REPEAT_FREQ --> Projectile test repeat frequency

'''Available Options''': 1, 2, 5, 10, 30, 60

==== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles&nbsp;&rarr;&nbsp;Proj. test">Proj. count</span> ====

<!-- ID: DM_PROJ_SHELL_TEST_SHOT_COUNT --> Set projectile test shot count.

'''Range Settings''':

Min: 10

Max: 100

Current Value: 10

Step: 10

==== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles&nbsp;&rarr;&nbsp;Proj. test">Pen. type</span> ====

<!-- ID: DM_PROJ_SHELL_TEST_PEN_TYPE --> Projectile penetration test type

'''Available Options''': disc, sphere, box

==== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles&nbsp;&rarr;&nbsp;Proj. test">Matrix type</span> ====

<!-- ID: DM_PROJ_SHELL_TEST_MAT_TYPE --> Projectile test matrix type

'''Available Options''': actual, saved

==== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles&nbsp;&rarr;&nbsp;Proj. test">Matrix save</span> ====

<!-- ID: DM_PROJ_SHELL_TEST_MAT_SAVE --> Projectile test matrix save

'''Available Options''': disabled, enabled

==== <span title="GameCodes&nbsp;&rarr;&nbsp;Proj. test">Projectile</span> ====

<!-- ID: DM_PROJ_SHELL_TEST_PROJECTILE --> Projectile test projectile type

'''Available Options''': bullet, rpg

==== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles&nbsp;&rarr;&nbsp;Proj. test">Kill timer</span> ====

<!-- ID: DM_PROJ_SHELL_TEST_KILL_TIMER --> Projectile test kill timer

'''Available Options''': 0, 1, 2, 5

==== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles&nbsp;&rarr;&nbsp;Proj. test">Kill</span> ====

<!-- ID: DM_PROJ_SHELL_TEST_KILL --> Projectile test kill switch

'''Available Options''': disabled, enabled

=== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles">Proj. tests</span> ===

==== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles&nbsp;&rarr;&nbsp;Proj. tests">Show plot</span> ====

<!-- ID: DM_PROJ_SHELL_SHOW_PLOT --> Projectile test show plot

'''Available Options''': disabled, enabled

==== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles&nbsp;&rarr;&nbsp;Proj. tests">Plot type</span> ====

<!-- ID: DM_PROJ_SHELL_PLOT_TYPE --> Projectile test plot type

'''Available Options''': 1dscatter, 2dscatter, 1dhistogram, 2dhistogram, defl_scatter, defl_hist

==== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles&nbsp;&rarr;&nbsp;Proj. tests">Gauss param</span> ====

<!-- ID: DM_PROJ_SHELL_GAUSS_PARAM --> Set projectile test gauss parameter.

'''Range Settings''':

Min: 0

Max: 5

Current Value: 0

Step: 0.1

=== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles">Proj. settings</span> ===

==== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles&nbsp;&rarr;&nbsp;Proj. settings">Max concurrent debug lines</span> ====

<!-- ID: DM_PROJ_SHELL_CAPACITY --> Maximum amount of trajectories that are shown at once '''Defalut value: 16''' (''can be changed to up 1024 trajectories'')

'''Available Options''': 128, 8, 16, 32, 64, 256, 512, 1024

==== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles&nbsp;&rarr;&nbsp;Proj. settings">Version</span> ====

<!-- ID: DM_PROJ_SHELL_VERSION --> Projectile version

'''Available Options''': default, experimental

=== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles">Proj. ballistics</span> ===

==== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles&nbsp;&rarr;&nbsp;Proj. ballistics">Print Hit Info</span> ====

<!-- ID: DM_PROJ_BALLISTICS_PRINT_HIT_INFO --> Projectile print hit info

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles">Show shell trajectory</span> ===

<!-- ID: DM_PROJ_SHELL_TRAJECTORY --> Show '''projectile trajectory in 3D space''', '''name of the flying prefab''', '''impact points''' and also '''additional projectile data''' in top left corner (including projectile speed, data from prefab and impact data)

Color of the trace represents speed of the projectile, while green represents 100% of projectile initial speed and red represents speeds close to 0. [[File:armareforger-diag-menu-projectile-shell-trajectory.png|frameless]]

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles">Show stats</span> ===

<!-- ID: DM_PROJ_SHELL_STATS --> Shows statistics regarding current, largest & total amount of different type of projectiles: '''Shells, Missiles & Grenades'''

[[File:armareforger-diag-menu-projectile-show-stats.png]]

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles">Show predicted shell trajectory</span> ===

<!-- ID: DM_PROJ_SHELL_TRAJECTORY_PREDICTED --> Show prediction of projectile trajectory. You can still follow bullet path by observing where textbox with prefab name is located.

[[File:armareforger-diag-menu-projectile-predicted-trajectory.png|frameless|688x688px]]

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles">Shell name</span> ===

<!-- ID: DM_PROJ_SHELL_SHOW_NAME --> Controls whether shell name is visible next to projectile prefab.

[[File:armareforger-diag-menu-projectile-shell-name.png|frameless|700x700px]]

'''Available Options''': true, false

=== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles">Player shell only</span> ===

<!-- ID: DM_PROJ_SHELL_PLAYER_ONLY --> Controls if projectile diag should be applied to only player fired projectiles

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles">Visibility</span> ===

<!-- ID: DM_PROJ_SHELL_VISIBILITY --> How many projectiles should be visible

'''Available Options''': all, 128, 64, 32, 16, 8, 4, 2, 1

=== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles">Persistence</span> ===

<!-- ID: DM_PROJ_SHELL_PERSISTENCE --> Controls how long '''trajectory''' is visible after projectile destruction. By default it is set to '''15 seconds'''

'''Available Options''': 15s, 30s, 60s, 120s, permanent, 0s, 5s

=== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles">Clear trajectories</span> ===

<!-- ID: DM_PROJ_SHELL_CLEAR --> Works as a toggle.

When activated, it clears world from all debug trajectories

'''Available Options''': disabled, enabled

=== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles">Info visible</span> ===

<!-- ID: DM_PROJ_SHELL_INFO_VISIBLE --> Controls infobox visibility

'''Available Options''': true, false

=== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles">Info persistence</span> ===

<!-- ID: DM_PROJ_SHELL_INFO_PERSISTENCE --> Controls how long '''infobox''' in top left corner is visible after projectile destruction. By default it is set to '''0 seconds'''

'''Available Options''': 0s, 5s, 15s, permanent

=== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles">Info segment length</span> ===

<!-- ID: DM_PROJ_SHELL_INFO_SEGMENT_LENGTH --> Interval at which speed data in infobox is measured and persisted.<gallery mode="nolines" widths="250" heights="255"> File:armareforger-diag-menu-projectile-interval-500.png|500m interval File:armareforger-diag-menu-projectile-interval-50.png|50m interval File:armareforger-diag-menu-projectile-interval-100.png|100m interval </gallery>

'''Available Options''': 100, 200, 500, 25, 50

=== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles">Hide info</span> ===

<!-- ID: DM_PROJ_SHELL_INFO_HIDE --> Projectile hide info box

'''Available Options''': disabled, enabled

=== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles">Dump data</span> ===

<!-- ID: DM_PROJ_SHELL_DUMP --> ''Doesn't work in retail version of the game''

'''Available Options''': disabled, enabled

=== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles">Special case</span> ===

<!-- ID: DM_PROJ_SHELL_SPECIAL_CASE --> Projectile special case

'''Available Options''': none, north, up, down, drop

=== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles">Deflection</span> ===

<!-- ID: DM_PROJ_SHELL_DEFLECTION --> Controls whether projectiles have a chance to deflect from surface.

'''Available Options''': true, false

=== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles">Penetration</span> ===

<!-- ID: DM_PROJ_SHELL_PENETRATION --> Controls whether projectiles is able to penetrate other objects.

'''Available Options''': true, false

=== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles">Deviation</span> ===

<!-- ID: DM_PROJ_SHELL_DEVIATION --> Controls whether projectiles randomly deviates after penetration.

'''Available Options''': true, false

=== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles">Gravity</span> ===

<!-- ID: DM_PROJ_SHELL_GRAVITY --> Controls whether projectiles is affected by gravity.

'''Available Options''': true, false

=== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles">Decals</span> ===

<!-- ID: DM_PROJ_SHELL_DECALS --> Controls whether projectiles are leaving impact decals

'''Available Options''': true, false

=== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles">Decals advanced</span> ===

<!-- ID: DM_PROJ_SHELL_DECALS_ADVANCED --> Projectile advanced decals

'''Available Options''': true, false

=== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles">Decals use diameter</span> ===

<!-- ID: DM_PROJ_SHELL_DECALS_USE_DIAMETER --> Projectile decals use diameter

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles">Override material</span> ===

<!-- ID: DM_PROJ_SHELL_OVERRIDE_MATERIAL --> Projectile material override

'''Available Options''': true, false

=== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles">Bullet time</span> ===

<!-- ID: DM_PROJ_SHELL_BULLETTIME --> Reduces speed to 0.01 when projectile is fired. Time doesn't restore to normal speed unless [[User:Reyhard/Sandbox/Diag Menu#DTime multiplier|DTime Multiplier]] in Cheats is turned off manually.

'''Available Options''': false, true

=== <span title="GameCode&nbsp;&rarr;&nbsp;Projectiles">Grenade simulation</span> ===

<!-- ID: DM_PROJ_GREN_SIMULATION --> Grenade simulation mode

'''Available Options''': true, false

== <span title="GameCode">Show actions states</span> ==

<!-- ID: GAME_DIAG_ACTIONS --> Enable/disable showing of actions states.

'''Available Options''': false, true

== <span title="GameCode">Gridmap diags</span> ==

<!-- ID: GAME_DIAG_GRIDMAP --> Enable/disable gridmap diagnostics.

'''Available Options''': false, true

== <span title="GameCode">Show explosion debug</span> ==

<!-- ID: GAME_DIAG_EXPLOSIONDBG --> Enable/disable showing of explosion debug.

[[File:armareforger-diag-menu-explosive-damage.jpg|600x600px]]

When an explosion occurs, "traces" (singular: "trace") are visual lines that represent the paths to each hitzone. These traces provide diagnostic feedback about whether damage was dealt or blocked. Here's how the trace system works

*'''Red Sphere''' : **Represents the explosion's '''current damage radius''' . **The '''transparency''' of the sphere changes based on the explosion's size: ***'''Less transparent (solid)''' : Indicates larger, more impactful explosions. ***'''More transparent (faded)''' : Indicates smaller, less significant explosions. *Red: Normal explosion * '''Yellow Sphere''': ** Impulse explosion * '''Dark Yellow Sphere''' ** Fragmentation explosion **Helps distinguish explosions of varying magnitudes and reduces visual clutter in overlapping scenarios. *'''Blue Lines''' : **Represent '''unblocked traces''' , indicating successful paths from the explosion’s origin where damage was applied to targets. *'''Red Lines''' : **Not visible in this image but would represent '''blocked traces''' , showing paths where damage was obstructed (e.g., by terrain or obstacles).

* Additionally, each hitzone (a specific area of the target) is represented by a '''sphere''' at its location: ** '''Blue Sphere''' : Indicates a hitzone that successfully took damage (unblocked). ** '''Red Sphere''' : Indicates a hitzone where damage was ''blocked'' and not applied.

'''Available Options''': false, true

== <span title="GameCode">Show player events</span> ==

<!-- ID: GAME_DIAG_CURRENT_COMPONENT_EVENTS --> Enable/disable showing of player events.

'''Available Options''': false, true

== <span title="GameCode">Show target events</span> ==

<!-- ID: GAME_DIAG_TARGET_COMPONENT_EVENTS --> Enable/disable showing of target events.

'''Available Options''': false, true

== <span title="GameCode">Show aim directions</span> ==

<!-- ID: GAME_DIAG_AIM_COMPONENTS --> Enable/disable showing of aim directions.

'''Available Options''': false, true

== <span title="GameCode">Factions</span> ==

<!-- ID: GAME_DIAG_FACTIONS --> Enable/disable showing of factions debug.

'''Available Options''': false, true

== <span title="GameCode">Contacts</span> ==

<!-- ID: GAME_DIAG_CONTACT --> Enable/disable showing of contacts debug.

'''Available Options''': false, true

== <span title="GameCode">Smooth steering in vehicle</span> ==

<!-- ID: GAME_DIAG_SMOOTH_STEERING_VEHICLE --> Enable/disable smooth steering for vehicles.

'''Available Options''': false, true

== <span title="GameCode">Character acceleration in vehicle</span> ==

<!-- ID: GAME_DIAG_CHARACTER_ACCEL_VEHICLE --> Set character acceleration debug in vehicle.

'''Available Options''': acceleration, gforce

== <span title="GameCode">FOV override</span> ==

<!-- ID: GAME_DIAG_FOV_OVERRIDE --> Set field of view override.

'''Range Settings''':

Min: 0.0

Max: 89.9

Current Value: 0.0

Step: 0.1

== <span title="GameCode">Time and Weather Diag</span> ==

<!-- ID: GAME_DIAG_TIMEANDWEATHER --> Enable/disable time and weather diagnostics.

'''Available Options''': false, true

== <span title="GameCode">Enable better interpolation</span> ==

<!-- ID: GAME_DIAG_INTERPOLATION --> Enable/disable better interpolation.

'''Available Options''': true, false

== <span title="GameCode">Log GameEntity events</span> ==

<!-- ID: GAME_DIAG_GAMEENTITY_EVENTS --> Enable/disable logging of GameEntity events.

'''Available Options''': false, true

== <span title="GameCode">Log GameEntity events (simple)</span> ==

<!-- ID: GAME_DIAG_GAMEENTITY_EVENTS_SIMPLE --> Enable/disable logging of GameEntity events (simple).

'''Available Options''': false, true

== <span title="GameCode">Log shooting queues</span> ==

<!-- ID: GAME_DIAG_SHOOTING_QUEUE --> Enable/disable logging of shooting queues.

'''Available Options''': false, true

== <span title="GameCode">Log SlotInfo</span> ==

<!-- ID: GAME_DIAG_ENTITYSLOTINFO --> Set SlotInfo logging mode.

'''Available Options''': off, attached, detached, both

== <span title="GameCode">Door ColTest</span> ==

<!-- ID: GAME_DIAG_DOOR_COLTEST --> Enable/disable door collision test.

'''Available Options''': false, true

== <span title="GameCode">Use traces for possible volume data</span> ==

<!-- ID: GAME_DIAG_USE_TRACES_FOR_VOLUMES --> Enable/disable traces for volume data.

'''Available Options''': false, true

== <span title="GameCode">Show world volumes collection</span> ==

<!-- ID: GAME_DIAG_SHOW_VOLUMES_COLLECTION --> Enable/disable showing of world volumes collection.

'''Available Options''': false, true

== <span title="GameCode">Enable Decal Slots</span> ==

<!-- ID: GAME_DIAG_DECAL_SLOTS_ENABLED --> Enable/disable decal slots.

'''Available Options''': false, true

== <span title="GameCode">Game state diag</span> ==

<!-- ID: GAME_DIAG_GAMESTATE --> Enable/disable game state diagnostics.

'''Available Options''': false, true

== <span title="GameCode">Force fog at camera</span> ==

<!-- ID: ENF_DIAG_FOG_HEIGHT_CAMERA --> Force fog at camera.

'''Available Options''': false, true

== <span title="GameCode">Override fog</span> ==

<!-- ID: ENF_DIAG_FOG_OVERRIDE --> Override fog.

'''Available Options''': false, true

== <span title="GameCode">Height bias</span> ==

<!-- ID: ENF_DIAG_FOG_HEIGHT_BIAS --> Set height bias.

'''Range Settings''':

Min: -500

Max: 500

Current Value: 0

Step: 5

== <span title="GameCode">Groups</span> ==

=== <span title="GameCode&nbsp;&rarr;&nbsp;Groups">Enable groups diag</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_GROUPS_ENABLE_DIAG --> Enable/disable groups diagnostics.

'''Available Options''': false, true

== <span title="GameCode">Show input manager</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_INPUT_MANAGER --> Set input manager debug mode.

'''Available Options''': disabled, active, all

== <span title="GameCode">Log player damage</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_CHARACTER_LOG_PLAYER_DAMAGE --> Enable/disable logging of player damage.

'''Available Options''': false, true

= <span title="Cheats">Cheats</span> = == <span title="Cheats">Disable player damage</span> ==

<!-- ID: GAME_DIAG_CHEATS_DISABLE_DAMAGE --> Enables god mod. Has an instant effect on a currently controlled character that persists on that character even after switching to GM or a different character

'''Hotkey''': {{Controls|LCtrl|LAlt|F1}}

'''Available Options''': Cheat disabled, Force invulnerable, Force vulnerable

== <span title="Cheats">Teleport</span> ==

<!-- ID: GAME_DIAG_CHEATS_TELEPORT --> Teleport player.

'''Hotkey''': {{Controls|LCtrl|LAlt|F2}}

'''Available Options''': false, true

== <span title="Cheats">Infinite ammo</span> ==

<!-- ID: GAME_DIAG_CHEATS_INFINITE_AMMO --> Enable/disable infinite ammo (magazines). Doesn't work in 1.2.1

'''Hotkey''': {{Controls|LCtrl|LAlt|F3}}

'''Available Options''': false, true

== <span title="Cheats">Infinite bullets</span> ==

<!-- ID: GAME_DIAG_CHEATS_INFINITE_BULLETS --> Enable/disable infinite bullets. The bullet in the chamber is never consumed, which means only first bullet in magazine array will be only used (cannot be used for testing mixed mags for instance)

'''Hotkey''': {{Controls|LCtrl|LAlt|F4}}

'''Available Options''': false, true

== <span title="Cheats">Commit suicide</span> ==

<!-- ID: GAME_DIAG_CHEATS_SUICIDE --> Commit suicide.

'''Hotkey''': {{Controls|LCtrl|LAlt|F5}}

'''Available Options''': false, true

== <span title="Cheats">Execute characters in front</span> ==

<!-- ID: GAME_DIAG_CHEATS_EXECUTE --> Execute characters in front.

'''Hotkey''': {{Controls|LCtrl|LAlt|F6}}

'''Available Options''': false, true

== <span title="Cheats">DTime multiplier</span> ==

<!-- ID: GAME_DIAG_CHEATS_TIME_DILATATION --> Toggles time progression multiplication by '''Dtime multiplier value ''' (DTime stands for ''dilatation time'', also known as time slice in Enfusion)

'''Available Options''': false, true

== <span title="Cheats">DTime multiplier value</span> ==

<!-- ID: GAME_DIAG_CHEATS_TIME_DILATATION_VALUE --> Set delta time multiplier value.

'''Range Settings''':

Min: 0.01

Max: 20

Current Value: 1.0

Step: 0.01

== <span title="Cheats">Debug manual camera</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_MANUAL_CAMERA_FREE --> Enable/disable free manual camera. While the "Debug camera" (aka "Free camera" or "Freecam") is active, you can use the '''spacebar''' to teleport your character under the cursor

'''Hotkey''': {{Controls|LCtrl|LAlt|C}}

'''Available Options''': false, true

= <span title="ECS">ECS</span> =

== <span title="ECS">ECS archetypes</span> ==

<!-- ID: DM_ECS_ARCHETYPES --> Enable/disable ECS archetypes debug.

'''Available Options''': false, true

== <span title="ECS">ECS registered types</span> ==

<!-- ID: DM_ECS_REGISTERED_TYPES --> Enable/disable ECS registered types debug.

'''Available Options''': false, true

== <span title="ECS">ECS type matching</span> ==

<!-- ID: DM_ECS_TYPE_MATCHING --> Enable/disable ECS type matching debug.

'''Available Options''': false, true

== <span title="ECS">ECS deleted entities</span> ==

<!-- ID: DM_ECS_DELETED_ENTITIES --> Enable/disable ECS deleted entities debug.

'''Available Options''': false, true

= <span title="Character">Character</span> =

== <span title="Character">Character physics</span> ==

=== <span title="Character&nbsp;&rarr;&nbsp;Character physics">Prequery</span> ===

<!-- ID: GAME_DIAG_CHARACTER_PHYSICS_PREQUERY --> Enable/disable character physics prequery.

'''Available Options''': enabled, disabled

=== <span title="Character&nbsp;&rarr;&nbsp;Character physics">Use idle character optimization</span> ===

<!-- ID: GAME_DIAG_CHARACTER_PHYSICS_IDLE_OPTIMIZATION --> Enable/disable idle character physics optimization.

'''Available Options''': enabled, disabled

=== <span title="Character&nbsp;&rarr;&nbsp;Character physics">Show charcter info</span> ===

<!-- ID: GAME_DIAG_CHARACTER_PHYSICS_CHARACTER_COLLISION_INFO --> Enable/disable showing of character collision info.

'''Available Options''': disabled, enabled

=== <span title="Character&nbsp;&rarr;&nbsp;Character physics">Always apply collision</span> ===

<!-- ID: GAME_DIAG_CHARACTER_PHYSICS_APPLY_COLLISION --> Enable/disable always applying character collision.

'''Available Options''': disabled, enabled

=== <span title="Character&nbsp;&rarr;&nbsp;Character physics">Ground offset diag</span> ===

<!-- ID: GAME_DIAG_CHARACTER_PHYSICS_GROUND_OFFSET --> Enable/disable showing of ground offset.

'''Available Options''': disabled, enabled

=== <span title="Character&nbsp;&rarr;&nbsp;Character physics">Draw character mode</span> ===

<!-- ID: GAME_DIAG_CHARACTER_PHYSICS_DRAW_CHARACTER --> Set draw mode for character physics debug.

'''Available Options''': None, Everything, Collision, Movement Path, Surface, Prequery

== <span title="Character">Enable desync detection</span> ==

<!-- ID: GAME_DIAG_DESYNC_DETECTION --> Enable/disable desync detection.

'''Available Options''': false, true

== <span title="Character">Show desync detection window</span> ==

<!-- ID: GAME_DIAG_DESYNC_DETECTION_WINDOW --> Enable/disable desync detection window.

'''Available Options''': false, true

== <span title="Character">Interpolation enabled</span> ==

<!-- ID: GAME_DIAG_CHARACTER_INTERPOLATION --> Enable/disable character interpolation.

'''Available Options''': true, false

== <span title="Character">Animation LOD</span> ==

<!-- ID: GAME_DIAG_CHARACTER_ANIM_LOD --> Set animation LOD.

'''Range Settings''':

Min: -1

Max: 3

Current Value: -1

Step: 1

== <span title="Character">Aiming direction</span> ==

<!-- ID: GAME_DIAG_CHARACTER_AIMING --> Enable/disable showing of aiming direction.

'''Available Options''': false, true

== <span title="Character">Head aiming direction</span> ==

<!-- ID: GAME_DIAG_CHARACTER_HEAD_AIMING --> Enable/disable showing of head aiming direction.

'''Available Options''': false, true

== <span title="Character">Heading angle</span> ==

<!-- ID: GAME_DIAG_CHARACTER_HEADING_ANGLE --> Enable/disable showing of heading angle.

'''Available Options''': false, true

== <span title="Character">Surface slope</span> ==

<!-- ID: GAME_DIAG_CHARACTER_SLOPE --> Enable/disable showing of surface slope.

'''Available Options''': false, true

== <span title="Character">Entity transform</span> ==

<!-- ID: GAME_DIAG_CHARACTER_TRANSFORM --> Enable/disable showing of entity transform.

'''Available Options''': false, true

== <span title="Character">AnimPhysAgent transform</span> ==

<!-- ID: GAME_DIAG_CHARACTER_PHYS_TRANSFORM --> Enable/disable showing of animation physics agent transform.

'''Available Options''': false, true

== <span title="Character">Foot down anim event</span> ==

<!-- ID: GAME_DIAG_CHARACTER_FOOT_DOWN_EVENT --> Enable/disable showing of foot down animation event.

'''Available Options''': false, true

== <span title="Character">Animation events</span> ==

<!-- ID: GAME_DIAG_CHARACTER_ANIM_EVENTS --> Enable/disable showing of animation events.

'''Available Options''': false, true

== <span title="Character">Animation tags</span> ==

<!-- ID: GAME_DIAG_CHARACTER_ANIM_TAGS --> Enable/disable showing of animation tags.

'''Available Options''': false, true

== <span title="Character">Climb command physics test</span> ==

<!-- ID: GAME_DIAG_CHARACTER_CLIMB_PHX_TEST --> Enable/disable climb command physics test.

'''Available Options''': false, true

== <span title="Character">Show current ladder</span> ==

<!-- ID: GAME_DIAG_CHARACTER_LADDERS --> Enable/disable showing of current ladder.

'''Available Options''': false, true

== <span title="Character">Input actions</span> ==

<!-- ID: GAME_DIAG_CHARACTER_INPUT_ACTIONS --> Enable/disable showing of input actions.

'''Available Options''': false, true

== <span title="Character">Lock view horizontal</span> ==

<!-- ID: GAME_DIAG_CHARACTER_LOCK_VIEW_HORIZONTAL --> Enable/disable locking of view horizontal.

'''Available Options''': false, true

== <span title="Character">Lock view vertical</span> ==

<!-- ID: GAME_DIAG_CHARACTER_LOCK_VIEW_VERTICAL --> Enable/disable locking of view vertical.

'''Available Options''': false, true

== <span title="Character">Disable Inertia</span> ==

<!-- ID: GAME_DIAG_DISABLE_CHARACTER_INERTIA --> Enable/disable character inertia.

'''Available Options''': false, true

== <span title="Character">Disable Inertia exponential</span> ==

<!-- ID: GAME_DIAG_DISABLE_CHARACTER_INERTIA_EXPO --> Enable/disable character exponential inertia.

'''Available Options''': false, true

== <span title="Character">Show additive handler tasks</span> ==

<!-- ID: GAME_DIAG_ACTIVE_ADDITIVE_TASKS --> Enable/disable showing of active additive tasks.

'''Available Options''': false, true

== <span title="Character">Stamina</span> ==

<!-- ID: GAME_DIAG_CHARACTER_STAMINA --> Enable/disable showing of character stamina.

'''Available Options''': false, true

== <span title="Character">Disable animation from velocity</span> ==

<!-- ID: GAME_DIAG_DISABLE_CHARACTER_ANIMTOVELOCITY --> Enable/disable animation from velocity.

'''Available Options''': false, true

== <span title="Character">Enable new passive weapon mode (sling)</span> ==

<!-- ID: GAME_DIAG_CHARACTER_WEAPON_PASSIVE_STATE --> Enable/disable new passive weapon mode (sling).

'''Available Options''': false, true

== <span title="Character">Disable anim driven icremental turns</span> ==

<!-- ID: GAME_DIAG_CHARACTER_ANIM_INCREMENTAL_TURNS --> Enable/disable anim driven incremental turns.

'''Available Options''': false, true

== <span title="Character">Disable hit reaction</span> ==

<!-- ID: GAME_DIAG_CHARACTER_DISABLE_HIT_REACTION --> Enable/disable hit reaction.

'''Available Options''': false, true

== <span title="Character">Enable ragdoll debug (melee attack to toggle)</span> ==

<!-- ID: GAME_DIAG_CHARACTER_RAGDOLL_DEBUG --> Enable/disable ragdoll debug (melee attack to toggle).

'''Available Options''': false, true

== <span title="Character">Enable feet IK</span> ==

<!-- ID: GAME_DIAG_CHARACTER_ENABLE_FEET_IK --> Enable/disable feet IK.

'''Available Options''': false, true

== <span title="Character">Show player identity</span> ==

<!-- ID: GAME_DIAG_CHARACTER_IDENTITY --> Enable/disable showing of player identity.

'''Available Options''': false, true

== <span title="Character">Show inspection diag</span> ==

<!-- ID: GAME_DIAG_CHARACTER_INSPECTION --> Enable/disable showing of inspection debug.

'''Available Options''': false, true

== <span title="Character">Show drowning / water level diag</span> ==

<!-- ID: GAME_DIAG_WATER_LEVEL --> Enable/disable showing of drowning/water level debug.

'''Available Options''': false, true

== <span title="Character">Inspection keeps orientation</span> ==

<!-- ID: GAME_DIAG_CHARACTER_INSPECTION_KEEP_ORIENTATION --> Enable/disable keeping orientation during inspection.

'''Available Options''': false, true

== <span title="Character">Prone root motion transl</span> ==

<!-- ID: GAME_DIAG_CHARACTER_PRONE_TURNS_ALLOW_ROOT_MOTION_TRANSL --> Enable/disable root motion translation for prone turns.

'''Available Options''': false, true

== <span title="Character">Toggle unconsciousness</span> ==

<!-- ID: GAME_DIAG_CHARACTER_TOGGLE_UNCONSCIOUSNESS --> Enable/disable toggling of character unconsciousness.

'''Available Options''': false, true

== <span title="Character">Forced unconsciousness pose</span> ==

<!-- ID: GAME_DIAG_CHARACTER_UNCONSCIOUSNESS_POSE --> Set forced unconsciousness pose.

'''Range Settings''':

Min: -1

Max: 5

Current Value: -1

Step: 1

== <span title="Character">Show Frustum</span> ==

<!-- ID: GAME_DIAG_CHARACTER_FRUSTUM --> Enable/disable showing of frustum.

'''Available Options''': false, true

== <span title="Character">Disable velocity DTime</span> ==

<!-- ID: GAME_DIAG_CHARACTER_VELOCITY_DT_OFF --> Enable/disable velocity delta time.

'''Available Options''': false, true

== <span title="Character">Enable turret overriding logging</span> ==

<!-- ID: GAME_DIAG_CHARACTER_OVERRIDE_LOGGING --> Enable/disable turret overriding logging.

'''Available Options''': false, true

== <span title="Character">Skip simulation points prequery</span> ==

<!-- ID: DM_SKIP_PREQUERY_SIMULATION_POINTS --> Enable/disable skip simulation points prequery.

'''Available Options''': false, true

== <span title="Character">Show simulation points</span> ==

<!-- ID: DM_CHARACTER_SHOW_SIMULATION_POINTS --> Enable/disable showing of simulation points.

'''Available Options''': false, true

== <span title="Character">Cycle Debug View</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_CHARACTER_DEBUG_VIEW --> Set character debug view cycle.

'''Range Settings''':

Min: 0

Max: 8

Current Value: 0

Step: 1

== <span title="Character">Draw Camera Collision Solver</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_DRAW_CAMERA_COLLISION_SOLVER --> Enable/disable drawing of camera collision solver.

'''Available Options''': false, true

== <span title="Character">Enable Debug UI</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_CHARACTER_MENU --> Enable/disable character debug UI.

'''Available Options''': false, true

== <span title="Character">Disable Banking</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_CHARACTER_NOBANKING --> Enable/disable character banking.

'''Available Options''': false, true

== <span title="Character">Enable transform info</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_CHARACTER_TRANSFORMATION --> Enable/disable character transformation info.

'''Available Options''': false, true

== <span title="Character">Disable recoil cam shake</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_CHARACTER_RECOIL_CAMERASHAKE_DISABLE --> Enable/disable recoil camera shake.

'''Available Options''': false, true

== <span title="Character">Disable additional cam shake</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_CHARACTER_ADDITIONAL_CAMERASHAKE_DISABLE --> Enable/disable additional camera shake.

'''Available Options''': false, true

== <span title="Character">Show shake diag</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_CHARACTER_CAMERASHAKE_TEST_WINDOW --> Enable/disable showing of camera shake test window.

'''Available Options''': false, true

== <span title="Character">Inspection LookAt</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_WEAPONS_ALLOW_INSPECTION_LOOKAT --> Enable/disable inspection look at.

'''Available Options''': false, true

== <span title="Character">ADS Camera</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_CHARACTER_ADS_CAMERA --> Set ADS camera mode.

'''Range Settings''':

Min: 0

Max: 3

Current Value: 0

Step: 1

== <span title="Character">Deal damage debug</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_CHARACTER_DAMAGE --> Enable/disable damage debug for character.

'''Available Options''': false, true

== <span title="Character">Show Perceived Faction</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_CHARACTER_SHOW_FACTION_OUTFIT --> Enable/disable showing of perceived faction.

'''Available Options''': false, true

== <span title="Character">AimModifier Debug</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_CHARACTER_HITREACTION_AIMMODIFIER --> Enable/disable aim modifier debug.

'''Available Options''': false, true

= <span title="Vehicles">Vehicles</span> =

== <span title="Vehicles">Helicopter</span> ==

=== <span title="Vehicles&nbsp;&rarr;&nbsp;Helicopter">Draw trajectory</span> ===

<!-- ID: DM_HELICOPTER_DRAW_TRAJECTORY --> Enable/disable drawing of helicopter trajectory.

'''Available Options''': false, true

=== <span title="Vehicles&nbsp;&rarr;&nbsp;Helicopter">Draw velocity</span> ===

<!-- ID: DM_HELICOPTER_DRAW_VELOCITY --> Set helicopter velocity visualization mode.

'''Available Options''': none, resultant, res+local, res+world

=== <span title="Vehicles&nbsp;&rarr;&nbsp;Helicopter">Draw HUD</span> ===

<!-- ID: DM_HELICOPTER_DRAW_HUD --> Enable/disable helicopter HUD debug.

'''Available Options''': false, true

=== <span title="Vehicles&nbsp;&rarr;&nbsp;Helicopter">Toggle autohover</span> ===

<!-- ID: DM_HELICOPTER_AUTOHOVER --> Enable/disable helicopter autohover.

'''Available Options''': disabled, enabled

=== <span title="Vehicles&nbsp;&rarr;&nbsp;Helicopter">Collective</span> ===

<!-- ID: DM_HELICOPTER_COLLECTIVE --> Set helicopter collective debug mode.

'''Available Options''': localYOffset, default, localY, worldY, direct

=== <span title="Vehicles&nbsp;&rarr;&nbsp;Helicopter">Flight limits</span> ===

<!-- ID: DM_HELICOPTER_FLIGHT_LIMITS --> Enable/disable helicopter flight limits debug.

'''Available Options''': false, true

=== <span title="Vehicles&nbsp;&rarr;&nbsp;Helicopter">Yaw/Roll</span> ===

<!-- ID: DM_HELICOPTER_STICK_MODE --> Set helicopter stick mode.

'''Available Options''': LS/RS, RS/LS

== <span title="Vehicles">Tracked</span> ==

=== <span title="Vehicles&nbsp;&rarr;&nbsp;Tracked">TrackSim</span> ===

<!-- ID: DM_TRACK_SIM --> Enable/disable Track simulation.

'''Available Options''': true, false

=== <span title="Vehicles&nbsp;&rarr;&nbsp;Tracked">Draw tracks</span> ===

<!-- ID: DM_TRACKED_DRAW_TRACKS --> Enable/disable drawing of tracks.

'''Available Options''': false, true

=== <span title="Vehicles&nbsp;&rarr;&nbsp;Tracked">Track dynamic</span> ===

<!-- ID: VEHICLE_DYNAMIC --> Enable/disable track dynamic.

'''Available Options''': true, false

=== <span title="Vehicles&nbsp;&rarr;&nbsp;Tracked">Track gravity</span> ===

<!-- ID: VEHICLE_GRAVITY --> Enable/disable track gravity.

'''Available Options''': true, false

=== <span title="Vehicles&nbsp;&rarr;&nbsp;Tracked">Reset tracks</span> ===

<!-- ID: VEHICLE_TRACKS_RESET --> Enable/disable resetting of tracks.

'''Available Options''': disabled, enabled

== <span title="Vehicles">Vehicle Networking and Reconciliation</span> ==

=== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation">Determinism testing</span> ===

==== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation&nbsp;&rarr;&nbsp;Determinism testing">Record Moves</span> ====

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_MOVE_RECORDING --> Enable/disable recording of vehicle moves.

'''Available Options''': false, true

==== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation&nbsp;&rarr;&nbsp;Determinism testing">Clear Record</span> ====

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_CLEAR_RECORDING --> Clear recorded vehicle moves.

'''Available Options''': false, true

==== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation&nbsp;&rarr;&nbsp;Determinism testing">(F)Replay Full</span> ====

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_REPLAY_FULL_MOVE_FROM_FULL --> Enable/disable full replay of vehicle moves from full state.

'''Available Options''': false, true

==== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation&nbsp;&rarr;&nbsp;Determinism testing">(I)Replay Full</span> ====

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_REPLAY_FULL_MOVE_FROM_INIT --> Enable/disable full replay of vehicle moves from init state.

'''Available Options''': false, true

==== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation&nbsp;&rarr;&nbsp;Determinism testing">(F)Replay Unconstrained</span> ====

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_REPLAY_UNCONSTRAINED_MOVE_FROM_FULL --> Enable/disable unconstrained replay of vehicle moves from full state.

'''Available Options''': false, true

==== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation&nbsp;&rarr;&nbsp;Determinism testing">(I)Replay Unconstrained</span> ====

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_REPLAY_UNCONSTRAINED_MOVE_FROM_INIT --> Enable/disable unconstrained replay of vehicle moves from init state.

'''Available Options''': false, true

==== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation&nbsp;&rarr;&nbsp;Determinism testing">(U)Replay until Move</span> ====

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_UNCONSTRAINED_COUNT --> Set number of unconstrained replays.

'''Range Settings''':

Min: 0

Max: 4096

Current Value: 0

Step: 1

==== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation&nbsp;&rarr;&nbsp;Determinism testing">Num of Instances</span> ====

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_INSTANCES --> Set number of vehicle instances.

'''Range Settings''':

Min: 1

Max: 100

Current Value: 1

Step: 1

==== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation&nbsp;&rarr;&nbsp;Determinism testing">X axis spread</span> ====

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_X_SPREAD --> Set X axis spread for vehicle instances.

'''Range Settings''':

Min: 0

Max: 100

Current Value: 0

Step: 1

==== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation&nbsp;&rarr;&nbsp;Determinism testing">Z axis spread</span> ====

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_Z_SPREAD --> Set Z axis spread for vehicle instances.

'''Range Settings''':

Min: 0

Max: 100

Current Value: 0

Step: 1

==== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation&nbsp;&rarr;&nbsp;Determinism testing">Num of Columns(X)</span> ====

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_X_COLUMNS --> Set number of columns for vehicle instances.

'''Range Settings''':

Min: 0

Max: 100

Current Value: 0

Step: 1

==== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation&nbsp;&rarr;&nbsp;Determinism testing">Draw recorded paths</span> ====

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_DRAW_RECORDED_PATHS --> Set draw mode for recorded vehicle paths.

'''Available Options''': Off, Client, Server, FullSim(W), FullSim(I), Uncon(W), Uncon(I), All

==== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation&nbsp;&rarr;&nbsp;Determinism testing">SimState to CSV</span> ====

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_RECORD_STATE_TO_CSV --> Export simulation state to CSV.

'''Available Options''': false, true

==== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation&nbsp;&rarr;&nbsp;Determinism testing">WS of (U) to CSV</span> ====

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_RECORD_STATE_OF_UNCONSTRAINED_TO_CSV --> Export unconstrained simulation state to CSV.

'''Available Options''': false, true

==== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation&nbsp;&rarr;&nbsp;Determinism testing">InitState to CSV</span> ====

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_RECORD_INIT_TO_CSV --> Export initialization state to CSV.

'''Available Options''': false, true

=== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation">Prediction options</span> ===

==== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation&nbsp;&rarr;&nbsp;Prediction options">C: Disable Correction</span> ====

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_CLIENT_DISABLE_CORRECTION --> Enable/disable client side vehicle correction.

'''Available Options''': false, true

==== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation&nbsp;&rarr;&nbsp;Prediction options">C: Disable Prediction</span> ====

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_CLIENT_DISABLE_PREDICTION --> Enable/disable client side vehicle prediction.

'''Available Options''': false, true

==== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation&nbsp;&rarr;&nbsp;Prediction options">C: (T)Prediction Allowance</span> ====

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_CLIENT_PREDICTION_DISTANCE --> Set client side vehicle prediction distance allowance.

'''Range Settings''':

Min: 0

Max: 1000

Current Value: 25

Step: 1

==== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation&nbsp;&rarr;&nbsp;Prediction options">C: (T)Prediction offset</span> ====

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_CLIENT_PREDICTION_UP --> Set client side vehicle prediction offset.

'''Range Settings''':

Min: 0

Max: 1000

Current Value: 150

Step: 1

=== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation">C: Lerping options</span> ===

==== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation&nbsp;&rarr;&nbsp;C: Lerping options">C: Debug Lerping</span> ====

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_LERPING_DEBUG --> Enable/disable client side vehicle lerping debug.

'''Available Options''': false, true

==== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation&nbsp;&rarr;&nbsp;C: Lerping options">C: Lerping Allowance</span> ====

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_CLIENT_LERPING_ALLOWANCE --> Set client side vehicle lerping allowance.

'''Range Settings''':

Min: 0

Max: 1000

Current Value: 1000

Step: 1

==== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation&nbsp;&rarr;&nbsp;C: Lerping options">C: Lerping Distance Percentage</span> ====

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_CLIENT_DISTANCE_LERPING_PERCENTAGE --> Set client side vehicle distance lerping percentage.

'''Range Settings''':

Min: 0

Max: 100

Current Value: 35

Step: 1

==== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation&nbsp;&rarr;&nbsp;C: Lerping options">C: Lerping Angle Percentage</span> ====

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_CLIENT_ANGLE_LERPING_PERCENTAGE --> Set client side vehicle angle lerping percentage.

'''Range Settings''':

Min: 0

Max: 100

Current Value: 50

Step: 1

=== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation">C: Allowance options</span> ===

==== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation&nbsp;&rarr;&nbsp;C: Allowance options">S: Enable allowance</span> ====

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_ENABLE_ALLOWANCE --> Enable/disable server side vehicle allowance.

'''Available Options''': false, true

==== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation&nbsp;&rarr;&nbsp;C: Allowance options">S: Speed Scaled Allowance</span> ====

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_SPEED_SCALING --> Enable/disable speed scaling for server side vehicle allowance.

'''Available Options''': true, false

==== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation&nbsp;&rarr;&nbsp;C: Allowance options">S: Distance Allowance</span> ====

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_SERVER_DISTANCE --> Set server side vehicle distance allowance.

'''Range Settings''':

Min: 0

Max: 1000

Current Value: 300

Step: 1

==== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation&nbsp;&rarr;&nbsp;C: Allowance options">S: Angle Allowance</span> ====

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_SERVER_ANGLE --> Set server side vehicle angle allowance.

'''Range Settings''':

Min: 0

Max: 1000

Current Value: 3

Step: 1

==== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation&nbsp;&rarr;&nbsp;C: Allowance options">S: Angular Velocity Allowance</span> ====

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_SERVER_ANGULAR --> Set server side vehicle angular velocity allowance.

'''Range Settings''':

Min: 0

Max: 1000

Current Value: 25

Step: 1

==== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation&nbsp;&rarr;&nbsp;C: Allowance options">S: Linear Velocity Allowance</span> ====

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_SERVER_LINEAR --> Set server side vehicle linear velocity allowance.

'''Range Settings''':

Min: 0

Max: 1000

Current Value: 30

Step: 1

=== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation">Server Car Overrides</span> ===

==== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation&nbsp;&rarr;&nbsp;Server Car Overrides">S: Override KMH</span> ====

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_OVERRIDE_KMH --> Enable/disable server side KMH override.

'''Available Options''': false, true

==== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation&nbsp;&rarr;&nbsp;Server Car Overrides">S: -||- close to 0</span> ====

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_OVERRIDE_KMH_AT_ZERO --> Enable/disable server side KMH override close to zero.

'''Available Options''': false, true

==== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation&nbsp;&rarr;&nbsp;Server Car Overrides">S: Override STEERING</span> ====

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_OVERRIDE_STEERING --> Enable/disable server side steering override.

'''Available Options''': false, true

==== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation&nbsp;&rarr;&nbsp;Server Car Overrides">S: Override THROTTLE</span> ====

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_OVERRIDE_THROTTLE --> Enable/disable server side throttle override.

'''Available Options''': false, true

==== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation&nbsp;&rarr;&nbsp;Server Car Overrides">S: Override BRAKE</span> ====

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_OVERRIDE_BRAKE --> Enable/disable server side brake override.

'''Available Options''': false, true

==== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation&nbsp;&rarr;&nbsp;Server Car Overrides">S: Override GEAR</span> ====

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_OVERRIDE_GEAR --> Enable/disable server side gear override.

'''Available Options''': false, true

==== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation&nbsp;&rarr;&nbsp;Server Car Overrides">S: Override CLUTCH</span> ====

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_OVERRIDE_CLUTCH --> Enable/disable server side clutch override.

'''Available Options''': false, true

=== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation">Vehicle type</span> ===

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_TYPE_SELECTION --> Set vehicle type.

'''Available Options''': Wheeled, Helicopter

=== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation">Heli prefab selection</span> ===

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_HELI_PREFAB_SELECTION --> Select helicopter prefab.

'''Available Options''': Mi8, UH1

=== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation">Show vehicle id</span> ===

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_ID_DISPLAY --> Enable/disable showing of vehicle ID.

'''Available Options''': false, true

=== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation">Vehicle selection</span> ===

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_SELECTION --> Set vehicle selection.

'''Range Settings''':

Min: 0

Max: 512

Current Value: 0

Step: 1

=== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation">S: Input/Output Diags</span> ===

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_DIAGS --> Set input/output diagnostic mode.

'''Available Options''': Off, Sim Out, Sim In, Controller, All

=== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation">Debug path correction</span> ===

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_PATHS_DEBUG --> Enable/disable path correction debug.

'''Available Options''': false, true

=== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation">Debug history</span> ===

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_HISTORY_DEBUG --> Enable/disable network history debug.

'''Available Options''': false, true

=== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation">Debug engine flags</span> ===

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_ENGINE_INPUTS_DEBUG --> Enable/disable engine inputs debug.

'''Available Options''': false, true

=== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation">Draw Phys Comp Debug</span> ===

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_PHYS_COMP_DEBUG --> Enable/disable drawing of physics component debug.

'''Available Options''': false, true

=== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation">C: Resend rate</span> ===

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_CLIENT_RESEND --> Set client side vehicle resend rate.

'''Range Settings''':

Min: 1

Max: 5

Current Value: 2

Step: 1

=== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation">S: Replay delay</span> ===

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_HISTORY_SIZE --> Set server side vehicle replay delay.

'''Range Settings''':

Min: 0

Max: 300

Current Value: 2

Step: 1

=== <span title="Vehicles&nbsp;&rarr;&nbsp;Vehicle Networking and Reconciliation">S: Max Rtt allowed</span> ===

<!-- ID: GAME_DIAG_VEHICLES_NETWORKING_SERVER_RTT --> Set server side vehicle max RTT allowed.

'''Range Settings''':

Min: 0

Max: 300

Current Value: 60

Step: 1

== <span title="Vehicles">Compartments</span> ==

=== <span title="Vehicles&nbsp;&rarr;&nbsp;Compartments">Compartment positions</span> ===

<!-- ID: GAME_DIAG_COMPARTMENT_POSITION --> Enable/disable showing of compartment positions.

'''Available Options''': false, true

=== <span title="Vehicles&nbsp;&rarr;&nbsp;Compartments">Show entry points</span> ===

<!-- ID: GAME_DIAG_COMPARTMENT_ENTRY_POINT --> Enable/disable showing of compartment entry points.

'''Available Options''': false, true

=== <span title="Vehicles&nbsp;&rarr;&nbsp;Compartments">Show accessibility</span> ===

<!-- ID: GAME_DIAG_COMPARTMENT_ACCESSIBILITY --> Enable/disable showing of compartment accessibility.

'''Available Options''': false, true

=== <span title="Vehicles&nbsp;&rarr;&nbsp;Compartments">Show get out prediction</span> ===

<!-- ID: GAME_DIAG_COMPARTMENT_GETOUT_PREDICTION --> Enable/disable showing of get out prediction.

'''Available Options''': false, true

=== <span title="Vehicles&nbsp;&rarr;&nbsp;Compartments">Show character obstruction trace during get out</span> ===

<!-- ID: GAME_DIAG_COMPARTMENT_GETOUT_CHARACTER_OBSTRUCTION_TRACE --> Enable/disable showing of character obstruction trace during get out.

'''Available Options''': false, true

== <span title="Vehicles">MT simulation</span> ==

<!-- ID: GAME_DIAG_VEHICLES_MT_SIMULATION --> Enable/disable multithreaded vehicle simulation.

'''Available Options''': true, false

== <span title="Vehicles">Show Controller Diags</span> ==

<!-- ID: GAME_DIAG_VEHICLES_CONTROLLER_DIAGS --> Enable/disable showing of vehicle controller diagnostics.

'''Available Options''': false, true

== <span title="Vehicles">Show Compartment Events Diags</span> ==

<!-- ID: GAME_DIAG_VEHICLES_COMPARTMENT_DIAGS --> Enable/disable showing of vehicle compartment events diagnostics.

'''Available Options''': false, true

== <span title="Vehicles">Show stats</span> ==

<!-- ID: DM_VEHICLES_STATS --> Enable/disable showing of vehicle statistics.

'''Available Options''': false, true

== <span title="Vehicles">Show vehicle debug</span> ==

<!-- ID: DM_VEHICLES_DRAW_DEBUG --> Enable/disable showing of vehicle debug.

'''Available Options''': false, true

== <span title="Vehicles">Player vehicle only</span> ==

<!-- ID: DM_VEHICLES_DRAW_PLAYER_VEHICLE_ONLY --> Enable/disable showing of player vehicle only.

'''Available Options''': true, false

== <span title="Vehicles">Show CoM</span> ==

<!-- ID: DM_VEHICLES_DRAW_COM --> Enable/disable showing of vehicle center of mass.

'''Available Options''': false, true

== <span title="Vehicles">Show inertia</span> ==

<!-- ID: DM_VEHICLES_DRAW_INERTIA --> Enable/disable showing of vehicle inertia.

'''Available Options''': false, true

== <span title="Vehicles">Show forces</span> ==

<!-- ID: DM_VEHICLES_DRAW_FORCES --> Enable/disable showing of vehicle forces.

'''Available Options''': false, true

== <span title="Vehicles">Show engine</span> ==

<!-- ID: DM_VEHICLES_DRAW_ENGINE --> Enable/disable showing of vehicle engine.

'''Available Options''': false, true

== <span title="Vehicles">Show contacts</span> ==

<!-- ID: DM_VEHICLES_DRAW_CONTACTS --> Enable/disable showing of vehicle contacts.

'''Available Options''': false, true

== <span title="Vehicles">Show raycast</span> ==

<!-- ID: DM_VEHICLES_DRAW_RAYCAST --> Enable/disable showing of vehicle raycast.

'''Available Options''': false, true

== <span title="Vehicles">Show suspension</span> ==

<!-- ID: DM_VEHICLES_DRAW_SUSPENSION --> Enable/disable showing of vehicle suspension.

'''Available Options''': false, true

== <span title="Vehicles">Show swaybar</span> ==

<!-- ID: DM_VEHICLES_DRAW_SWAYBAR --> Enable/disable showing of vehicle swaybar.

'''Available Options''': false, true

== <span title="Vehicles">Show wheels</span> ==

<!-- ID: DM_VEHICLES_DRAW_WHEELS --> Enable/disable showing of vehicle wheels.

'''Available Options''': false, true

== <span title="Vehicles">Show bones</span> ==

<!-- ID: DM_VEHICLES_DRAW_BONES --> Enable/disable showing of vehicle bones.

'''Available Options''': false, true

== <span title="Vehicles">Show slope</span> ==

<!-- ID: DM_VEHICLES_DRAW_SLOPE --> Enable/disable showing of vehicle slope.

'''Available Options''': false, true

== <span title="Vehicles">Test raycast</span> ==

<!-- ID: DM_VEHICLES_DRAW_TEST_RAYCAST --> Enable/disable testing of raycast.

'''Available Options''': false, true

== <span title="Vehicles">Reset vehicle</span> ==

<!-- ID: DM_VEHICLES_RESET --> Reset vehicle.

'''Hotkey''': {{Controls|LCtrl|LAlt|R}}

'''Available Options''': disabled, enabled

== <span title="Vehicles">Teleport up</span> ==

<!-- ID: DM_VEHICLES_TELEPORT_UP --> Teleport vehicle up.

'''Hotkey''': {{Controls|LCtrl|LAlt|T}}

'''Available Options''': disabled, enabled

== <span title="Vehicles">Wheel drag set</span> ==

<!-- ID: DM_VEHICLES_WHEEL_DRAG_OVERRIDE --> Enable/disable overriding of wheel drag.

'''Available Options''': false, true

== <span title="Vehicles">Wheel drag value</span> ==

<!-- ID: DM_VEHICLES_WHEEL_DRAG_VALUE --> Set wheel drag value.

'''Range Settings''':

Min: 0

Max: 1

Current Value: 0

Step: 0.05

== <span title="Vehicles">Disable freelook</span> ==

<!-- ID: DM_VEHICLES_DISABLE_FREELOOK --> Enable/disable freelook for vehicles.

'''Available Options''': false, true

== <span title="Vehicles">Enable debugger trace</span> ==

<!-- ID: DM_VEHICLES_DEBUGGER_TRACE --> Enable/disable debugger trace for vehicles.

'''Available Options''': false, true

== <span title="Vehicles">wheel drag set</span> ==

<!-- ID: DM_VEHICLES_WHEEL_DRAG_OVERRIDE --> Enable/disable overriding of wheel drag (duplicate).

'''Available Options''': false, true

== <span title="Vehicles">Fuel consumption</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_VEHICLES_FUEL_CONSUMPTION --> Enable/disable fuel consumption debug.

'''Available Options''': false, true

== <span title="Vehicles">Visualize push force</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_VEHICLES_UNFLIP --> Enable/disable visualization of push force.

'''Available Options''': false, true

== <span title="Vehicles">Show dust materials</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_PARTICLES_VEHICLE_DUST --> Enable/disable showing of vehicle dust materials.

'''Available Options''': false, true

= <span title="Statistics">Statistics</span> =

== <span title="Statistics">FPS</span> ==

<!-- ID: DM_STATS_FPS --> Display FPS statistics.

'''Hotkey''': {{Controls|LCtrl|Num1}}

'''Available Options''': none, basic, detailed, average

== <span title="Statistics">General</span> ==

<!-- ID: DM_STATS_STATS --> Display general statistics.

'''Hotkey''': {{Controls|LCtrl|Num2}}

'''Available Options''': disable, basic, detailed, all

== <span title="Statistics">Shape stats</span> ==

<!-- ID: DM_SHAPE_STATS --> Enable/disable shape statistics.

'''Available Options''': disabled, enabled

== <span title="Statistics">MeshObject stats</span> ==

<!-- ID: DM_REND_STAT --> Display mesh object statistics.

'''Available Options''': none, count, mesh, faces, verts

== <span title="Statistics">Decal stats</span> ==

<!-- ID: DM_REND_DECAL_STAT --> Display decal statistics.

'''Available Options''': none, all

== <span title="Statistics">Resource memory stats</span> ==

<!-- ID: DM_RES_MEMORY --> Display resource memory statistics.

'''Available Options''': none, memory, age

== <span title="Statistics">Texture memory stats</span> ==

<!-- ID: DM_TEX_MEMORY --> Display texture memory statistics.

'''Available Options''': none, memory, age

== <span title="Statistics">Slow script</span> ==

<!-- ID: DM_STATS_SLOWSCRIPT --> Set threshold for slow scripts log.

'''Available Options''': off, 1ms, 2ms, 5ms, 10ms

== <span title="Statistics">Verbose script Print</span> ==

<!-- ID: DM_STATS_VERBOSESCRIPTPRINTS --> Enable/disable verbose script prints.

'''Available Options''': false, true

== <span title="Statistics">Script profiler</span> ==

<!-- ID: DM_STATS_SCRIPTPROFILER --> Enable/disable script profiler.

'''Available Options''': off, frame, average

== <span title="Statistics">Script prof. external</span> ==

<!-- ID: DM_STATS_SCRIPTPROFILER_EXT --> Enable/disable external script profiler.

'''Available Options''': false, true

== <span title="Statistics">Test mem-stress</span> ==

<!-- ID: DM_STATS_STRESSMEM --> Enable/disable memory stress testing.

'''Available Options''': off, once, periodic

== <span title="Statistics">Flush memory</span> ==

<!-- ID: DM_STATS_FLUSHMEM --> Enable/disable memory flushing.

'''Available Options''': disabled, enabled

== <span title="Statistics">Flush audio</span> ==

<!-- ID: DM_STATS_FLUSHAUDIO --> Enable/disable audio flushing.

'''Available Options''': disabled, enabled

== <span title="Statistics">Memory validation</span> ==

<!-- ID: DM_MEMORY_VALIDATION --> Enable/disable memory validation.

'''Available Options''': none, on, off

== <span title="Statistics">Dump render resources</span> ==

<!-- ID: DM_DUMP_RENDERRESOURCES --> Enable/disable dumping of render resources.

'''Available Options''': disabled, enabled

== <span title="Statistics">Counters</span> ==

<!-- ID: DM_STATS_COUNTER --> Enable/disable performance counters.

'''Hotkey''': {{Controls|LCtrl|Num3}}

'''Available Options''': disabled, enabled

== <span title="Statistics">Slow down</span> ==

<!-- ID: DM_STATS_SLOWDOWN --> Slow down the game.

'''Available Options''': off, 1ms, 5ms, 10ms, 20ms, 50ms, 100ms

== <span title="Statistics">Limit FPS</span> ==

<!-- ID: DM_STATS_LIMITFPS --> Limit the game's FPS.

'''Available Options''': off, 120, 60, 40, 30, 20, 10, 5, 2

== <span title="Statistics">Widget statistics</span> ==

<!-- ID: DM_STATS_WIDGET_STATS --> Enable/disable widget statistics.

'''Available Options''': false, true

== <span title="Statistics">Widget hierarchy to log</span> ==

<!-- ID: DM_STATS_WIDGET_HIERARCHY_TO_LOG --> Log widget hierarchy.

'''Available Options''': off, once

== <span title="Statistics">Widget update to log</span> ==

<!-- ID: DM_STATS_WIDGET_UPDATE_TO_LOG --> Log widget updates.

'''Available Options''': none, hierarchy, time

== <span title="Statistics">Loaded particle FX</span> ==

<!-- ID: DM_STATS_PARTICLES --> Enable/disable loaded particle FX statistics.

'''Available Options''': false, true

== <span title="Statistics">Resource category stats</span> ==

<!-- ID: DM_RES_CAT --> Enable/disable resource category statistics.

'''Available Options''': disabled, enabled

== <span title="Statistics">Dump resources</span> ==

<!-- ID: DM_DUMP_RESOURCES --> Toggle. Dumps all resources.

'''Available Options''': disabled, enabled

== <span title="Statistics">Log prefab spawn</span> ==

<!-- ID: DM_LOG_PREFAB_SPAWN --> Log prefab spawning.

'''Available Options''': off, non-instant, all

== <span title="Statistics">Data Collection</span> ==

=== <span title="Statistics&nbsp;&rarr;&nbsp;Data Collection">Enable debug menu</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_DATA_COLLECTION_ENABLE_DIAG --> Enable/disable data collection debug menu.

'''Available Options''': false, true

= <span title="Render">Render</span> =

== <span title="Render">RT</span> ==

=== <span title="Render&nbsp;&rarr;&nbsp;RT">Main RT format</span> ===

<!-- ID: DM_REND_MAIN_RT_FORMAT --> Override main render target format.

'''Available Options''': no override, R8G8B8A8_SRGB, R8G8B8A8, R10G10B10A2, R11G11B10F, R16G16B16A16F

=== <span title="Render&nbsp;&rarr;&nbsp;RT">Main RT MSAA</span> ===

<!-- ID: DM_REND_MAIN_RT_MSAA --> Override main render target MSAA settings.

'''Available Options''': no override, none, 2x, 4x, 8x

=== <span title="Render&nbsp;&rarr;&nbsp;RT">Force custom resolve</span> ===

<!-- ID: DM_REND_FORCE_CUSTOM_RESOLVE --> Force custom resolve for render target.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;RT">Use resolved RT for PPs</span> ===

<!-- ID: DM_REND_USE_RESOLVED_PP --> Control post-processing RT usage.

'''Available Options''': default, disabled, enabled

== <span title="Render">Various</span> ==

=== <span title="Render&nbsp;&rarr;&nbsp;Various">Reload shaders</span> ===

<!-- ID: DM_REND_RELOADSHADERS --> Enable/disable shader reloading.

'''Hotkey''': {{Controls|LCtrl|F12}}

'''Available Options''': disabled, enabled

=== <span title="Render&nbsp;&rarr;&nbsp;Various">Offline shaders</span> ===

<!-- ID: DM_REND_OFFLINESHADERS --> Enable/disable offline shaders.

'''Available Options''': disabled, enabled

=== <span title="Render&nbsp;&rarr;&nbsp;Various">Scene prep. mode</span> ===

<!-- ID: DM_REND_MT_SCENE_PREP --> Set scene preparation mode.

'''Available Options''': Multithreaded, Singlethreaded

=== <span title="Render&nbsp;&rarr;&nbsp;Various">Cmd list mode</span> ===

<!-- ID: DM_REND_CMD_LIST_MODE --> Set command list mode.

'''Available Options''': Multithreaded, Singlethreaded

=== <span title="Render&nbsp;&rarr;&nbsp;Various">Log GPU perf diags</span> ===

<!-- ID: DM_REND_TXT_DIAG_LOG --> Log GPU performance diagnostics.

'''Available Options''': off, once, permanent

=== <span title="Render&nbsp;&rarr;&nbsp;Various">Log CMD lists</span> ===

<!-- ID: DM_REND_LOG_CMD_LISTS --> Log command lists.

'''Available Options''': off, once, permament

=== <span title="Render&nbsp;&rarr;&nbsp;Various">Over-sync barriers (PS5)</span> ===

<!-- ID: DM_REND_BARRIERS --> Set over-sync barriers.

'''Available Options''': none, all, RenderTarget, DepthSurface, StencilSurface, RoTexture, RoBuffer, RwTexture, RwBuffer

=== <span title="Render&nbsp;&rarr;&nbsp;Various">Clear RT with</span> ===

<!-- ID: DM_REND_CLEARRT --> Clear render target with color.

'''Available Options''': none, black, white, red, green, blue

=== <span title="Render&nbsp;&rarr;&nbsp;Various">Clear temporal RTs to</span> ===

<!-- ID: DM_REND_CLEAR_TEMPORAL_RT --> Clear temporal render targets.

'''Available Options''': none, black, NaN

=== <span title="Render&nbsp;&rarr;&nbsp;Various">GBuffer</span> ===

<!-- ID: DM_REND_GBUFFER --> Set G-Buffer mode.

'''Available Options''': default, AmbientDepthNear, AmbientNear, AmbientDepthFull, AmbientFull

=== <span title="Render&nbsp;&rarr;&nbsp;Various">GBuffer decals</span> ===

<!-- ID: DM_REND_GBUFFER_DECALS --> Enable/disable G-Buffer decals.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Various">Decals</span> ===

<!-- ID: DM_REND_DECALS --> Enable/disable decals.

'''Available Options''': true, false

=== <span title="Render&nbsp;&rarr;&nbsp;Various">Disable HTILE (PS4&PS5)</span> ===

<!-- ID: DM_REND_HTILE_DISABLED --> Enable/disable HTILE.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Various">Check GPU commands (PS5)</span> ===

<!-- ID: DM_REND_CHECK_GPU_COMMANDS --> Enable/disable checking of GPU commands.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Various">VSync imm.treshold</span> ===

<!-- ID: DM_REND_VSYNC_TRESHOLD --> Set VSync immediate threshold.

'''Available Options''': 0, 10, 20, 30, 40, 50

=== <span title="Render&nbsp;&rarr;&nbsp;Various">VSync limit</span> ===

<!-- ID: DM_REND_VSYNC_LIMIT --> Set VSync limit.

'''Available Options''': default, 20, 30, 40, 60

=== <span title="Render&nbsp;&rarr;&nbsp;Various">DX12: log trans. barriers</span> ===

<!-- ID: DM_REND_LOG_TRANS_BARRIERS --> Enable/disable logging of DX12 transition barriers.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Various">DX12: log state commit</span> ===

<!-- ID: DM_REND_LOG_STATE_COMMIT --> Enable/disable logging of DX12 state commits.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Various">CopyHWDepth use depth</span> ===

<!-- ID: DM_REND_COPYHWDEPTH_DEPTH --> Control if CopyHWDepth should use depth.

'''Available Options''': true, false

=== <span title="Render&nbsp;&rarr;&nbsp;Various">CopyHWDepth filter</span> ===

<!-- ID: DM_REND_COPYHWDEPTH_FILTER --> Set filter mode for CopyHWDepth.

'''Available Options''': default, firstSample, min, max

=== <span title="Render&nbsp;&rarr;&nbsp;Various">CB draw calls min limit</span> ===

<!-- ID: DM_REND_PIPELINE_LIMIT_MIN_DCALLS --> Enable/disable command buffer draw calls minimum limit.

'''Available Options''': true, false

=== <span title="Render&nbsp;&rarr;&nbsp;Various">Validate Input (DP)</span> ===

<!-- ID: DM_REND_VALIDATE_DP --> Enable/disable validation of input.

'''Available Options''': false, true

== <span title="Render">System textures</span> ==

=== <span title="Render&nbsp;&rarr;&nbsp;System textures">IBL</span> ===

==== <span title="Render&nbsp;&rarr;&nbsp;System textures&nbsp;&rarr;&nbsp;IBL">log messages</span> ====

<!-- ID: DM_REND_IBL_LOG --> Enable/disable IBL logging.

'''Available Options''': false, true

==== <span title="Render&nbsp;&rarr;&nbsp;System textures&nbsp;&rarr;&nbsp;IBL">Env map num</span> ====

<!-- ID: DM_REND_IBL_NUM --> Select which environment map to display.

'''Available Options''': none, GlobalSky, GlobalPlaced, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16

==== <span title="Render&nbsp;&rarr;&nbsp;System textures&nbsp;&rarr;&nbsp;IBL">Refresh</span> ====

<!-- ID: DM_REND_IBL_REFRESH --> Set refresh mode for IBL.

'''Available Options''': no, yes, always, disable

==== <span title="Render&nbsp;&rarr;&nbsp;System textures&nbsp;&rarr;&nbsp;IBL">Apply HDRmul</span> ====

<!-- ID: DM_REND_IBL_APPLY_HDR --> Apply or disable HDR multiplier for IBL.

'''Available Options''': true, false

==== <span title="Render&nbsp;&rarr;&nbsp;System textures&nbsp;&rarr;&nbsp;IBL">DFG specular</span> ====

<!-- ID: DM_REND_IBL_DFG_SPEC --> Enable/disable DFG specular for IBL.

'''Available Options''': false, true

==== <span title="Render&nbsp;&rarr;&nbsp;System textures&nbsp;&rarr;&nbsp;IBL">DFG diffuse</span> ====

<!-- ID: DM_REND_IBL_DFG_DIFF --> Enable/disable DFG diffuse for IBL.

'''Available Options''': false, true

==== <span title="Render&nbsp;&rarr;&nbsp;System textures&nbsp;&rarr;&nbsp;IBL">Environment</span> ====

<!-- ID: DM_REND_IBL_ENV --> Enable/disable environment for IBL.

'''Available Options''': false, true

==== <span title="Render&nbsp;&rarr;&nbsp;System textures&nbsp;&rarr;&nbsp;IBL">LD specular</span> ====

<!-- ID: DM_REND_IBL_LD --> Enable/disable LD specular for IBL.

'''Available Options''': true, false

==== <span title="Render&nbsp;&rarr;&nbsp;System textures&nbsp;&rarr;&nbsp;IBL">LD diffuse</span> ====

<!-- ID: DM_REND_IBL_LDDIFF --> Enable/disable LD diffuse for IBL.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;System textures">Maximize size</span> ===

<!-- ID: DM_REND_DT_FULL --> Enable/disable Dynamic Texture size maximization.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;System textures">Show shadowmap</span> ===

<!-- ID: DM_REND_SHOWSHADOWMAP --> Display shadowmap.

'''Available Options''': disable, full smask, R-smask NdotL, G-smask, B-AO, A-wetAdd

=== <span title="Render&nbsp;&rarr;&nbsp;System textures">Show combined rainmask</span> ===

<!-- ID: DM_REND_SHOW_COMBINED_RAINMASK --> Display combined rainmask.

'''Available Options''': disable, full smask, R-wetness, G-c.wetness, B-rain, A-underwate

=== <span title="Render&nbsp;&rarr;&nbsp;System textures">Show light shadowmap</span> ===

<!-- ID: DM_REND_SHOWLIGHTSHADOWMAP --> Set light shadowmap to show.

'''Range Settings''': * Min: 0 * Max: 36 * Current Value: 0 * Step: 1

=== <span title="Render&nbsp;&rarr;&nbsp;System textures">Show cascades</span> ===

<!-- ID: DM_REND_SHOWSHADOWMAP_CASCADE --> Show shadow cascades.

'''Available Options''': disable, cascade 1, cascade 2, cascade 3, cascade 4

=== <span title="Render&nbsp;&rarr;&nbsp;System textures">Show rain mask</span> ===

<!-- ID: DM_REND_SHOWSHADOWMAP_RAIN --> Show rain mask.

'''Available Options''': disable, cascade 1, cascade 2, cascade 3, cascade 4

=== <span title="Render&nbsp;&rarr;&nbsp;System textures">Show wetness mask</span> ===

<!-- ID: DM_REND_SHOWSHADOWMAP_WETNESS --> Show wetness mask.

'''Available Options''': disable, cascade 1, cascade 2, cascade 3, cascade 4

=== <span title="Render&nbsp;&rarr;&nbsp;System textures">Show custom wetness mask</span> ===

<!-- ID: DM_REND_SHOWSHADOWMAP_CUSTOM_WETNESS --> Show custom wetness mask.

'''Available Options''': disable, cascade 1, cascade 2, cascade 3, cascade 4

=== <span title="Render&nbsp;&rarr;&nbsp;System textures">Show wetness add mask</span> ===

<!-- ID: DM_REND_SHOWSHADOWMAP_WETNESS_ADD --> Show wetness add mask.

'''Available Options''': disable, cascade 1, cascade 2, cascade 3, cascade 4

=== <span title="Render&nbsp;&rarr;&nbsp;System textures">Show depthmap</span> ===

<!-- ID: DM_REND_SHOWDEPTHMAP --> Enable/disable depthmap visualization.

'''Available Options''': disabled, enabled

=== <span title="Render&nbsp;&rarr;&nbsp;System textures">Show HW depthmap</span> ===

<!-- ID: DM_REND_SHOWHWDEPTHMAP --> Enable/disable HW depthmap visualization.

'''Available Options''': disabled, enabled

=== <span title="Render&nbsp;&rarr;&nbsp;System textures">Terrain shadow map</span> ===

<!-- ID: DM_REND_SHOWTERRSHADOWMAP --> Show terrain shadow maps.

'''Available Options''': none, terrain shadow, shadow raw, shadow volume high, shadow volume low

=== <span title="Render&nbsp;&rarr;&nbsp;System textures">Disable SPD</span> ===

<!-- ID: DM_REND_DISABLESPD --> Disable Screen-Space Particle Depth.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;System textures">Show GBuffer</span> ===

<!-- ID: DM_REND_SHOWGBUFFER --> Show G-Buffer channels (normals, roughness, metalness, albedo, AO).

'''Available Options''': none, normals, roughness, metalness, albedo, AO

=== <span title="Render&nbsp;&rarr;&nbsp;System textures">Show GBuffer</span> ===

<!-- ID: DM_REND_SHOWGBUFFER --> Show G-Buffer channels (normals, roughness, metalness).

'''Available Options''': none, normals, roughness, metalness

=== <span title="Render&nbsp;&rarr;&nbsp;System textures">Show volumetric light rays</span> ===

<!-- ID: DM_REND_SHOWVOLUMETRICRAYS --> Enable/disable volumetric light ray visualization.

'''Available Options''': disabled, enabled

=== <span title="Render&nbsp;&rarr;&nbsp;System textures">Show reflections</span> ===

<!-- ID: DM_REND_SHOWREFL --> Enable/disable reflection visualization.

'''Available Options''': disabled, enabled

=== <span title="Render&nbsp;&rarr;&nbsp;System textures">Show user textures</span> ===

<!-- ID: DM_REND_SHOWUTIL --> Enable/disable user texture visualization.

'''Available Options''': disabled

=== <span title="Render&nbsp;&rarr;&nbsp;System textures">Show virtual lights RT</span> ===

<!-- ID: DM_REND_SHOW_VIRTUAL_LIGHTS_RT --> Enable/disable virtual lights RT visualization.

'''Available Options''': disabled, enabled

== <span title="Render">Textures</span> ==

=== <span title="Render&nbsp;&rarr;&nbsp;Textures">Mipmap bias</span> ===

<!-- ID: DM_REND_MIPMAPBIAS --> Set mipmap bias.

'''Available Options''': 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, -1, -0.75, 0.5, -0.25

=== <span title="Render&nbsp;&rarr;&nbsp;Textures">Max mipmap</span> ===

<!-- ID: DM_REND_MAXMIPMAP --> Set maximum mipmap level.

'''Available Options''': 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12

=== <span title="Render&nbsp;&rarr;&nbsp;Textures">Defrag</span> ===

<!-- ID: DM_REND_FLUSH_DEFRAG --> Enable/disable defragmentation of texture resources.

'''Available Options''': true, false

=== <span title="Render&nbsp;&rarr;&nbsp;Textures">Mode</span> ===

<!-- ID: DM_REND_FLUSH_DEFRAG_MODE --> Set mode of defrag.

'''Available Options''': auto, once, continuous

=== <span title="Render&nbsp;&rarr;&nbsp;Textures">Defrag heap</span> ===

<!-- ID: DM_REND_FLUSH_DEFRAG_TYPE --> Set heap for defrag.

'''Available Options''': MA heaps, manTextures, manBuffers

=== <span title="Render&nbsp;&rarr;&nbsp;Textures">Defrag alg</span> ===

<!-- ID: DM_REND_FLUSH_DEFRAG_ALG --> Set algorithm of defrag.

'''Available Options''': fast, balanced, full

== <span title="Render">Scene lighting</span> ==

=== <span title="Render&nbsp;&rarr;&nbsp;Scene lighting">Force PBR light</span> ===

<!-- ID: DM_REND_PBR_DEF_LIGHT --> Force or disable PBR light.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Scene lighting">Ambient lighting</span> ===

<!-- ID: DM_REND_AMB --> Enable/disable ambient lighting.

'''Available Options''': true, false

=== <span title="Render&nbsp;&rarr;&nbsp;Scene lighting">Directional lighting</span> ===

<!-- ID: DM_REND_DIR --> Enable/disable directional lighting.

'''Available Options''': true, false

=== <span title="Render&nbsp;&rarr;&nbsp;Scene lighting">Diffuse lighting</span> ===

<!-- ID: DM_REND_DIFF --> Enable/disable diffuse lighting.

'''Available Options''': true, false

=== <span title="Render&nbsp;&rarr;&nbsp;Scene lighting">Specular lighting</span> ===

<!-- ID: DM_REND_SPEC --> Enable/disable specular lighting.

'''Available Options''': true, false

=== <span title="Render&nbsp;&rarr;&nbsp;Scene lighting">Emission lighting</span> ===

<!-- ID: DM_REND_EMISSION --> Enable/disable emission lighting.

'''Available Options''': true, false

=== <span title="Render&nbsp;&rarr;&nbsp;Scene lighting">Desaturate Atmosphere (cubemap)</span> ===

<!-- ID: DM_REND_DESATURATE_SKY --> Set desaturation of atmosphere (cubemap).

'''Range Settings''': * Min: 0 * Max: 1 * Current Value: 0 * Step: 0.01

=== <span title="Render&nbsp;&rarr;&nbsp;Scene lighting">Remove interiors fog</span> ===

<!-- ID: DM_REND_REMOVE_FOG_INTERIORS --> Remove fog in interiors.

'''Available Options''': true, false

=== <span title="Render&nbsp;&rarr;&nbsp;Scene lighting">Capture with glob.probe</span> ===

<!-- ID: DM_REND_PROBE_GLOBALCAPTURE --> Enable/disable capturing with global probe.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Scene lighting">Negative probe ambient</span> ===

<!-- ID: DM_REND_PROBE_NEGAMBIENT --> Enable/disable negative probe ambient.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Scene lighting">IBL reflection/roughness</span> ===

<!-- ID: DM_REND_IBL_REFL_POWER --> Set IBL reflection/roughness power.

'''Range Settings''': * Min: 0 * Max: 1 * Current Value: 0 * Step: 0.01

=== <span title="Render&nbsp;&rarr;&nbsp;Scene lighting">IBL multiscattering</span> ===

<!-- ID: DM_REND_IBL_MULTI --> Enable/disable IBL multiscattering.

'''Available Options''': true, false

=== <span title="Render&nbsp;&rarr;&nbsp;Scene lighting">Probe lighting mode</span> ===

<!-- ID: DM_REND_PROBE_MODE --> Enable/disable probe lighting mode.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Scene lighting">Object probe LV</span> ===

<!-- ID: DM_REND_PROBE_OBJECT_LV --> Set object probe luminance value.

'''Range Settings''':

Min: -4

Max: 4

Current Value: 0

Step: 0.01

=== <span title="Render&nbsp;&rarr;&nbsp;Scene lighting">Show scene LV</span> ===

<!-- ID: DM_REND_SHOW_SCENE_LV --> Show scene luminance.

'''Available Options''': none, pure, NaN, luminance, max.lum, perc.lum, luminanceHM, maxHM, log2HM

=== <span title="Render&nbsp;&rarr;&nbsp;Scene lighting">LV auto</span> ===

<!-- ID: DM_REND_SHOW_SCENE_LV_AUTO --> Enable/disable automatic adjustment of scene LV.

'''Available Options''': true, false

=== <span title="Render&nbsp;&rarr;&nbsp;Scene lighting">manual LV middle</span> ===

<!-- ID: DM_REND_SHOW_SCENE_LV_MIDDLE --> Set manual luminance value. Options: -10 20 5 0.01

=== <span title="Render&nbsp;&rarr;&nbsp;Scene lighting">LV +-Range</span> ===

<!-- ID: DM_REND_SHOW_SCENE_LV_RANGE --> Set luminance range.

'''Range Settings''': * Min: 1 * Max: 20 * Current Value: 5 * Step: 0.01

=== <span title="Render&nbsp;&rarr;&nbsp;Scene lighting">LV watcher</span> ===

<!-- ID: DM_REND_SHOW_SCENE_LV_WATCH --> Set luminance watcher.

'''Range Settings''': * Min: 0 * Max: 1 * Current Value: 0.5 * Step: 0.001

=== <span title="Render&nbsp;&rarr;&nbsp;Scene lighting">LV watcher size</span> ===

<!-- ID: DM_REND_SHOW_SCENE_LV_WATCHSIZE --> Set luminance watcher size.

'''Range Settings''': * Min: 0 * Max: 0.2 * Current Value: 0.025 * Step: 0.001

== <span title="Render">Shadows</span> ==

=== <span title="Render">Shadows</span> ===

<!-- ID: DM_REND_SHADOWS --> Enable/disable shadows.

'''Available Options''': true, false

=== <span title="Render&nbsp;&rarr;&nbsp;Shadows">Shadows OOF</span> ===

<!-- ID: DM_REND_SHADOWS_OOF --> Enable/disable out of frustum shadows.

'''Available Options''': true, false

=== <span title="Render&nbsp;&rarr;&nbsp;Shadows">Shadows multileaf</span> ===

<!-- ID: DM_REND_MLEAF_SHADOWS --> Enable/disable multileaf shadows.

'''Available Options''': true, false

=== <span title="Render&nbsp;&rarr;&nbsp;Shadows">Particle shadows</span> ===

<!-- ID: DM_REND_SHADOWS_PARTICLES --> Set particle shadows.

'''Available Options''': default, per pixel, per vertex, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;Shadows">Particle cascades</span> ===

<!-- ID: DM_REND_SHADOW_PARTICLE_CASCADES --> Set particle shadow cascades.

'''Available Options''': default, 1, 2, 3, 4

== <span title="Render">PP effects</span> ==

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">DOF Advanced</span> ===

==== <span title="Render&nbsp;&rarr;&nbsp;PP effects&nbsp;&rarr;&nbsp;DOF Advanced">Enabled</span> ====

<!-- ID: DM_REND_PP_DOFADVANCED_ENABLED --> Enable/disable advanced depth of field.

'''Available Options''': true, false

==== <span title="Render&nbsp;&rarr;&nbsp;PP effects&nbsp;&rarr;&nbsp;DOF Advanced">Format</span> ====

<!-- ID: DM_REND_PP_DOFADVANCED_FORMAT --> Set the format for advanced depth of field.

'''Available Options''': default, R11G11B10F, R16G16B16A16F

==== <span title="Render&nbsp;&rarr;&nbsp;PP effects&nbsp;&rarr;&nbsp;DOF Advanced">Quality</span> ====

<!-- ID: DM_REND_PP_DOFADVANCED_QUALITY --> Set the quality level for advanced depth of field.

'''Available Options''': default, 0, 1, 2, 3

==== <span title="Render&nbsp;&rarr;&nbsp;PP effects&nbsp;&rarr;&nbsp;DOF Advanced">Rings</span> ====

<!-- ID: DM_REND_PP_DOFADVANCED_RINGS --> Set the number of rings for advanced depth of field.

'''Available Options''': default, 3, 4, 5

==== <span title="Render&nbsp;&rarr;&nbsp;PP effects&nbsp;&rarr;&nbsp;DOF Advanced">Combine FS Blur</span> ====

<!-- ID: DM_REND_PP_DOFADVANCED_COMBINE_FS_BLUR --> Set mode to combine full screen blur for advanced depth of field.

'''Available Options''': default, enabled, disabled

==== <span title="Render&nbsp;&rarr;&nbsp;PP effects&nbsp;&rarr;&nbsp;DOF Advanced">Gather quality</span> ====

<!-- ID: DM_REND_PP_DOFADVANCED_GATHER_QUALITY --> Set gather quality for advanced depth of field.

'''Available Options''': default, low, high

==== <span title="Render&nbsp;&rarr;&nbsp;PP effects&nbsp;&rarr;&nbsp;DOF Advanced">Force dilate rad.</span> ====

<!-- ID: DM_REND_PP_DOFADVANCED_FORCE_DILATE_RADIUS --> Set force dilate radius for advanced depth of field.

'''Range Settings''': * Min: 0 * Max: 16 * Current Value: 0 * Step: 1

==== <span title="Render&nbsp;&rarr;&nbsp;PP effects&nbsp;&rarr;&nbsp;DOF Advanced">Debug vis</span> ====

<!-- ID: DM_REND_PP_DOFADVANCED_DEBUG_VIS --> Set debug visualization mode for advanced depth of field.

'''Available Options''': disabled, fields, gather, combine, bg col, bg alpha, fg col, fg alpha, fill col, fill alpha

==== <span title="Render&nbsp;&rarr;&nbsp;PP effects&nbsp;&rarr;&nbsp;DOF Advanced">Override near blur</span> ====

<!-- ID: DM_REND_PP_DOFADVANCED_OVERRIDE_NEAR_BLUR --> Enable/disable overriding the near blur value for advanced depth of field.

'''Available Options''': false, true

==== <span title="Render&nbsp;&rarr;&nbsp;PP effects&nbsp;&rarr;&nbsp;DOF Advanced">near blur</span> ====

<!-- ID: DM_REND_PP_DOFADVANCED_NEAR_BLUR --> Set near blur value for advanced depth of field. Options: -0.0001 0.04 0.02 0.001

==== <span title="Render&nbsp;&rarr;&nbsp;PP effects&nbsp;&rarr;&nbsp;DOF Advanced">Override far blur</span> ====

<!-- ID: DM_REND_PP_DOFADVANCED_OVERRIDE_FAR_BLUR --> Enable/disable overriding the far blur value for advanced depth of field.

'''Available Options''': false, true

==== <span title="Render&nbsp;&rarr;&nbsp;PP effects&nbsp;&rarr;&nbsp;DOF Advanced">far blur</span> ====

<!-- ID: DM_REND_PP_DOFADVANCED_FAR_BLUR --> Set far blur value for advanced depth of field. Options: -0.0001 0.04 0.02 0.001

==== <span title="Render&nbsp;&rarr;&nbsp;PP effects&nbsp;&rarr;&nbsp;DOF Advanced">Override FStop</span> ====

<!-- ID: DM_REND_PP_DOFADVANCED_OVERRIDE_FSTOP --> Enable/disable overriding the FStop value for advanced depth of field.

'''Available Options''': false, true

==== <span title="Render&nbsp;&rarr;&nbsp;PP effects&nbsp;&rarr;&nbsp;DOF Advanced">FStop</span> ====

<!-- ID: DM_REND_PP_DOFADVANCED_FSTOP --> Set FStop value for advanced depth of field.

'''Range Settings''': * Min: 0.1 * Max: 32 * Current Value: 2.0 * Step: 0.1

==== <span title="Render&nbsp;&rarr;&nbsp;PP effects&nbsp;&rarr;&nbsp;DOF Advanced">Override focus dist</span> ====

<!-- ID: DM_REND_PP_DOFADVANCED_OVERRIDE_FOCUS_DISTANCE --> Enable/disable overriding the focus distance for advanced depth of field.

'''Available Options''': false, true

==== <span title="Render&nbsp;&rarr;&nbsp;PP effects&nbsp;&rarr;&nbsp;DOF Advanced">focus dist</span> ====

<!-- ID: DM_REND_PP_DOFADVANCED_FOCUS_DISTANCE --> Set focus distance for advanced depth of field.

'''Range Settings''': * Min: 0.0 * Max: 100 * Current Value: 2.0 * Step: 0.1

==== <span title="Render&nbsp;&rarr;&nbsp;PP effects&nbsp;&rarr;&nbsp;DOF Advanced">Override focal length</span> ====

<!-- ID: DM_REND_PP_DOFADVANCED_OVERRIDE_FOCAL_LENGTH --> Enable/disable overriding the focal length for advanced depth of field.

'''Available Options''': false, true

==== <span title="Render&nbsp;&rarr;&nbsp;PP effects&nbsp;&rarr;&nbsp;DOF Advanced">focal length</span> ====

<!-- ID: DM_REND_PP_DOFADVANCED_FOCAL_LENGTH --> Set focal length for advanced depth of field.

'''Range Settings''': * Min: 0.01 * Max: 1 * Current Value: 0.05 * Step: 0.01

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">Postprocess</span> ===

<!-- ID: DM_REND_POSTPROCESS --> Enable/disable all postprocessing effects.

'''Hotkey''': {{Controls|LCtrl|LAlt|P}}

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">Rain</span> ===

<!-- ID: DM_REND_PP_RAIN --> Enable/disable rain postprocessing effect.

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">Snow</span> ===

<!-- ID: DM_REND_PP_SNOW --> Enable/disable snow postprocessing effect.

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">Chrom aber</span> ===

<!-- ID: DM_REND_PP_CHROMABER --> Enable/disable chromatic aberration postprocessing effect.

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">Color grading</span> ===

<!-- ID: DM_REND_PP_COLORGRADING --> Enable/disable color grading postprocessing effect.

'''Available Options''': disabled, enabled

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">Colors</span> ===

<!-- ID: DM_REND_PP_COLORS --> Enable/disable color correction postprocessing effect.

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">Depth of field</span> ===

<!-- ID: DM_REND_PP_DEPTHOFFIELD --> Enable/disable standard depth of field postprocessing effect.

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">Physical Depth of field</span> ===

<!-- ID: DM_REND_PP_DEPTHOFFIELD_BOKEH --> Enable/disable physical bokeh depth of field postprocessing effect.

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">Force Quality</span> ===

<!-- ID: DM_REND_PP_DEPTHOFFIELD_BOKEH_QUALITY --> Set the quality for physical bokeh depth of field.

'''Available Options''': default, low, middle, high

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">Physical fast Depth of field</span> ===

<!-- ID: DM_REND_PP_DEPTHOFFIELD_FAST_BOKEH --> Enable/disable fast physical bokeh depth of field postprocessing effect.

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">Force Quality</span> ===

<!-- ID: DM_REND_PP_DEPTHOFFIELD_FAST_BOKEH_QUALITY --> Set the quality for fast physical bokeh depth of field.

'''Available Options''': default, low, middle, high

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">Dynamic blur</span> ===

<!-- ID: DM_REND_PP_DYNAMICBLUR --> Enable/disable dynamic blur postprocessing effect.

'''Available Options''': disabled, enabled

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">Film grain</span> ===

<!-- ID: DM_REND_PP_FILMGRAIN --> Enable/disable film grain postprocessing effect.

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">FXAA</span> ===

<!-- ID: DM_REND_PP_FXAA --> Enable/disable FXAA postprocessing effect.

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">God rays</span> ===

<!-- ID: DM_REND_PP_GODRAYS --> Enable/disable god rays postprocessing effect.

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">HBAO</span> ===

<!-- ID: DM_REND_PP_HBAO --> Enable/disable HBAO postprocessing effect.

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">Debug</span> ===

<!-- ID: DM_REND_PP_HBAO_DEBUG --> Enable/disable HBAO debugging visualization.

'''Available Options''': disabled, enabled

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">DebugFullScreen</span> ===

<!-- ID: DM_REND_PP_HBAO_DEBUG_FULLSCREEN --> Enable/disable HBAO fullscreen debugging visualization.

'''Available Options''': disabled, enabled

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">NumSteps</span> ===

<!-- ID: DM_REND_PP_HBAO_NUM_STEPS --> Set the number of HBAO steps.

'''Available Options''': default, 1, 2, 3, 4, 5, 6, 7, 8

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">NumDirections</span> ===

<!-- ID: DM_REND_PP_HBAO_NUM_DIRECTIONS --> Set the number of HBAO directions.

'''Available Options''': default, 1, 2, 3, 4, 5, 6, 7, 8

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">HDR</span> ===

<!-- ID: DM_REND_PP_HDR --> Enable/disable HDR postprocessing effect.

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">Debug</span> ===

<!-- ID: DM_REND_PP_HDR_DEBUG --> Set HDR debug visualization.

'''Available Options''': none, mask, LVBlend

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">Bloom</span> ===

<!-- ID: DM_REND_PP_HDR_BLOOM --> Enable/disable bloom effect for HDR.

'''Available Options''': enabled, blured, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">Bloom CS</span> ===

<!-- ID: DM_REND_PP_HDR_BLOOM_COMPUTE --> Enable/disable bloom compute shader for HDR.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">Bloom Upsample</span> ===

<!-- ID: DM_REND_PP_HDR_BLOOM_UPSAMPLE_METHOD --> Select bloom upsample method for HDR.

'''Available Options''': before tonemap, in tonemap

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">EV</span> ===

<!-- ID: DM_REND_PP_HDR_USER_EV --> Set HDR exposure value.

'''Range Settings''':

Min: -10.0

Max: 10.0

Current Value: 0.0

Step: 0.1

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">Show curves</span> ===

<!-- ID: DM_REND_PP_HDR_SHOW_HISTOGRAM --> Show HDR curves.

'''Available Options''': disabled, histogram, <0..2>lin filmic, <-6..0>LV filmic, <0.01..10>log filmic

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">Disable autoExp</span> ===

<!-- ID: DM_REND_PP_HDR_AUTO --> Disable auto exposure for HDR.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">New LV adaptation</span> ===

<!-- ID: DM_REND_PP_HDR_NEWLV --> Enable/disable new luminance adaptation for HDR.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">HaightmapAO</span> ===

<!-- ID: DM_REND_PP_HEIGHTMAP_AO --> Enable/disable heightmap based AO postprocessing effect.

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">Gauss filter</span> ===

<!-- ID: DM_REND_PP_GAUSSFILTER --> Enable/disable gaussian blur postprocessing effect.

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">Outlines</span> ===

<!-- ID: DM_REND_PP_OUTLINE --> Enable/disable outline postprocessing effect.

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">Radial blur</span> ===

<!-- ID: DM_REND_PP_RADIALBLUR --> Enable/disable radial blur postprocessing effect.

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">Rot blur</span> ===

<!-- ID: DM_REND_PP_ROTBLUR --> Enable/disable rotation blur postprocessing effect.

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">SMAA</span> ===

<!-- ID: DM_REND_PP_SMAA --> Enable/disable SMAA postprocessing effect.

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">Edge detection method override</span> ===

<!-- ID: DM_REND_PP_SMAA_METHOD --> Set the edge detection method override for SMAA.

'''Available Options''': Disabled, Color, Depth, Luma

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">Show debug textures</span> ===

<!-- ID: DM_REND_PP_SMAA_PASSES --> Display SMAA debug textures.

'''Available Options''': Disabled, SMAAEdgeDetection, SMAABlendingWeightCalculation

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">SSAO</span> ===

<!-- ID: DM_REND_PP_SSAO --> Enable/disable SSAO postprocessing effect.

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">Method</span> ===

<!-- ID: DM_REND_PP_SSAO_METHOD --> Set SSAO method.

'''Available Options''': non-linear, linear, mask non-linear, mask linear

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">BlurSteps</span> ===

<!-- ID: DM_REND_PP_SSAO_BLUR_STEPS --> Set blur steps for SSAO.

'''Available Options''': default, 0, 1, 2, 3, 4, 5, 6, 7

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">SSDO</span> ===

<!-- ID: DM_REND_PP_SSDO --> Enable/disable SSDO postprocessing effect.

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">Debug</span> ===

<!-- ID: DM_REND_PP_SSDO_DEBUG --> Enable/disable SSDO debugging visualization.

'''Available Options''': disabled, enabled

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">DebugFullScreen</span> ===

<!-- ID: DM_REND_PP_SSDO_DEBUG_FULLSCREEN --> Enable/disable SSDO fullscreen debugging visualization.

'''Available Options''': disabled, enabled

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">SSR (global)</span> ===

<!-- ID: DM_REND_PP_SSR --> Enable/disable global SSR postprocessing effect.

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">SSR (objects only)</span> ===

<!-- ID: DM_REND_PP_SSR_OBJECTS --> Enable/disable object only SSR postprocessing effect.

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">Use FFX SSR</span> ===

<!-- ID: DM_REND_PP_SSR_FFX_SSR --> Enable/disable FFX Screen Space Reflection.

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">Temporal filtering</span> ===

<!-- ID: DM_REND_PP_SSR_TEMPORAL --> Enable/disable temporal filtering for SSR.

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">Min fade distance</span> ===

<!-- ID: DM_REND_PP_SSR_FADE_MIN --> Set minimum fade distance for SSR.

'''Range Settings''': * Min: 0 * Max: 100 * Current Value: 0.5 * Step: 0.01

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">Max fade distance</span> ===

<!-- ID: DM_REND_PP_SSR_FADE_MAX --> Set maximum fade distance for SSR.

'''Range Settings''': * Min: 0 * Max: 100 * Current Value: 2 * Step: 0.01

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">Behind ambient</span> ===

<!-- ID: DM_REND_PP_SSR_CORRECT_RN --> Correct reflection with ambient.

'''Available Options''': disabled, enabled

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">UnderWater</span> ===

<!-- ID: DM_REND_PP_UW --> Enable/disable underwater postprocessing effect.

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;PP effects">Wet distort</span> ===

<!-- ID: DM_REND_PP_WETDISTORT --> Enable/disable wet distortion postprocessing effect.

'''Available Options''': enabled, disabled

== <span title="Render">Terrain menu</span> ==

=== <span title="Render menu">Terrain</span> ===

<!-- ID: DM_TERR_TERRAIN --> Enable/disable terrain rendering.

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain menu">LOD mode</span> ===

<!-- ID: DM_TERR_FORCE_LOD_MODE --> Set terrain LOD mode.

'''Available Options''': auto, exact lod, frac only

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain menu">Force exact LOD</span> ===

<!-- ID: DM_TERR_FORCE_LOD --> Set force exact LOD.

'''Range Settings''': * Min: 1 * Max: 5 * Current Value: 5 * Step: 0.01

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain menu">Layers diag mode</span> ===

<!-- ID: DM_TERR_LAYERS --> Set terrain layers diagnostic mode.

'''Hotkey''': {{Controls|LCtrl|LAlt|L}}

'''Available Options''': disabled, layers, projection

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain menu">Show tiles error</span> ===

<!-- ID: DM_TERR_SHOW_TILE_ERRORS --> Enable/disable showing of terrain tile errors.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain menu">Tile error modif</span> ===

<!-- ID: DM_TERR_TILES_ERROR --> Set terrain tile error modification. Options: -10 10 0 0.01

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain menu">Blocks' bounding boxes</span> ===

<!-- ID: DM_TERR_BBOX --> Enable/disable bounding boxes for terrain blocks.

'''Available Options''': disabled, enabled

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain menu">MaxLOD blocks' AABB</span> ===

<!-- ID: DM_TERR_BBOX_MAXLOD --> Enable/disable AABBs for max LOD terrain blocks.

'''Available Options''': disabled, enabled

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain menu">Biased blocks' AABB</span> ===

<!-- ID: DM_TERR_BBOX_BIAS --> Enable/disable AABBs for biased terrain blocks.

'''Available Options''': disabled, enabled

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain menu">Tiles' bounding boxes</span> ===

<!-- ID: DM_TERR_BBOXTILE --> Enable/disable bounding boxes for terrain tiles.

'''Available Options''': disabled, enabled

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain menu">Detail texture</span> ===

<!-- ID: DM_TERR_STEXTURE --> Enable/disable terrain detail texture.

'''Hotkey''': {{Controls|LCtrl|LAlt|S}}

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain menu">Water LOD bias</span> ===

<!-- ID: DM_TERR_WATER_LOD_BIAS --> Set water LOD bias.

'''Range Settings''': * Min: 0 * Max: 1 * Current Value: 0 * Step: 0.001

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain menu">Detail texture detail</span> ===

<!-- ID: DM_TERR_TEXDETAIL --> Set terrain detail texture level.

'''Available Options''': normal, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain menu">Reload only curr. shaders</span> ===

<!-- ID: DM_TERR_RELOAD_ONLY_CURRENT_SHADERS --> Enable/disable reloading of only current terrain shaders.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain menu">Use layer cache</span> ===

<!-- ID: DM_TERR_LAYERCACHE --> Enable/disable terrain layer cache.

'''Available Options''': true, false

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain menu">Terrain render info</span> ===

<!-- ID: DM_TERR_INFO --> Enable/disable terrain render information.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain menu">Holes debug vis</span> ===

<!-- ID: DM_TERR_HOLES_VIS --> Enable/disable terrain holes debug visualization.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain menu">Disabled block debug vis</span> ===

<!-- ID: DM_TERR_DISABLED_BLOCK_VIS --> Enable/disable visualization of disabled terrain blocks.

'''Available Options''': false, true

== <span title="Render">Grass/Clutter/Obstacles</span> ==

=== <span title="Render&nbsp;&rarr;&nbsp;Grass/Clutter/Obstacles">Render clutter</span> ===

<!-- ID: DM_TERR_CLUTTER_RENDER --> Set clutter render mode.

'''Available Options''': full, prepare only, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;Grass/Clutter/Obstacles">Show clutter stats</span> ===

<!-- ID: DM_TERR_CLUTTER_STATS --> Set clutter statistics.

'''Available Options''': none, general, detailed

=== <span title="Render&nbsp;&rarr;&nbsp;Grass/Clutter/Obstacles">Reload clutter configs</span> ===

<!-- ID: DM_TERR_CLUTTER_RELOAD --> Enable/disable reloading of clutter configurations.

'''Available Options''': disabled, enabled

=== <span title="Render&nbsp;&rarr;&nbsp;Grass/Clutter/Obstacles">3D clutter AABB</span> ===

<!-- ID: DM_TERR_CLUTTER_BOX --> Enable/disable 3D AABBs for clutter.

'''Available Options''': disabled, enabled

=== <span title="Render&nbsp;&rarr;&nbsp;Grass/Clutter/Obstacles">Clutter LOD debug</span> ===

<!-- ID: DM_TERR_CLUTTER_LOD_DBG --> Enable/disable clutter LOD debugging.

'''Available Options''': disabled, enabled

=== <span title="Render&nbsp;&rarr;&nbsp;Grass/Clutter/Obstacles">Clutter LOD blend size</span> ===

<!-- ID: DM_TERR_CLUTTER_LOD_BLEND --> Set clutter LOD blend size.

'''Range Settings''': * Min: 0.0 * Max: 5.0 * Current Value: 1.5 * Step: 0.1

=== <span title="Render&nbsp;&rarr;&nbsp;Grass/Clutter/Obstacles">Thinning slope</span> ===

<!-- ID: DM_TERR_CLUTTER_THINNING_SLOPE --> Set clutter thinning slope.

'''Range Settings''': * Min: 0.01 * Max: 1.0 * Current Value: 0.25 * Step: 0.01

=== <span title="Render&nbsp;&rarr;&nbsp;Grass/Clutter/Obstacles">Clutter fadeout size</span> ===

<!-- ID: DM_TERR_CLUTTER_FADEOUT_REGION --> Set clutter fadeout size.

'''Range Settings''': * Min: 0 * Max: 30 * Current Value: 15 * Step: 0.1

=== <span title="Render&nbsp;&rarr;&nbsp;Grass/Clutter/Obstacles">Shadow casting</span> ===

<!-- ID: DM_TERR_CLUTTER_SHADOWS --> Enable/disable shadow casting for clutter.

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;Grass/Clutter/Obstacles">Clutter position jitter</span> ===

<!-- ID: DM_TERR_CLUTTER_JITTER --> Set clutter position jitter.

'''Range Settings''': * Min: 0.0 * Max: 1.0 * Current Value: 0.5 * Step: 0.01

=== <span title="Render&nbsp;&rarr;&nbsp;Grass/Clutter/Obstacles">Enable obstacles</span> ===

<!-- ID: DM_TERR_GRASSOBSTACLES --> Enable/disable obstacles on terrain.

'''Available Options''': true, false

=== <span title="Render&nbsp;&rarr;&nbsp;Grass/Clutter/Obstacles">Enable clutter mask</span> ===

<!-- ID: DM_TERR_CLUTTER_MASK --> Enable/disable clutter masking.

'''Available Options''': true, false

=== <span title="Render&nbsp;&rarr;&nbsp;Grass/Clutter/Obstacles">Show clutter occldrs</span> ===

<!-- ID: DM_TERR_CLUTTER_MASK_SHOW_OBJS --> Enable/disable showing of clutter occluders.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Grass/Clutter/Obstacles">Show obst.map</span> ===

<!-- ID: DM_TERR_GRASSOBSTACLES_SHOW --> Set obstacle map visualization.

'''Available Options''': none, runtime, perm. depth, perm. mask

=== <span title="Render&nbsp;&rarr;&nbsp;Grass/Clutter/Obstacles">Force params:</span> ===

<!-- ID: DM_TERR_GRASSOBSTACLES_FORCE --> Enable/disable forcing of obstacle parameters.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Grass/Clutter/Obstacles">RadiusX</span> ===

<!-- ID: DM_TERR_GRASSOBSTACLES_RADIUSX --> Set obstacle radius X.

'''Range Settings''': * Min: 0.5 * Max: 5 * Current Value: 1 * Step: 0.1

=== <span title="Render&nbsp;&rarr;&nbsp;Grass/Clutter/Obstacles">RadiusZ</span> ===

<!-- ID: DM_TERR_GRASSOBSTACLES_RADIUSY --> Set obstacle radius Z.

'''Range Settings''': * Min: 0.5 * Max: 5 * Current Value: 1 * Step: 0.1

=== <span title="Render&nbsp;&rarr;&nbsp;Grass/Clutter/Obstacles">Offset</span> ===

<!-- ID: DM_TERR_GRASSOBSTACLES_OFFSET --> Set obstacle offset. Options: -1.0 1.0 0 0.01

=== <span title="Render&nbsp;&rarr;&nbsp;Grass/Clutter/Obstacles">Render grass</span> ===

<!-- ID: DM_TERR_GRASS --> Enable/disable grass rendering.

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;Grass/Clutter/Obstacles">Grass log</span> ===

<!-- ID: DM_TERR_GRASS_LOG --> Enable/disable grass logging.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Grass/Clutter/Obstacles">Basic cluster size (10) mul</span> ===

<!-- ID: DM_TERR_GRASSCLUSTERSIZE --> Set grass cluster size multiplier.

'''Range Settings''': * Min: 1.5 * Max: 10 * Current Value: 10 * Step: 0.01

=== <span title="Render&nbsp;&rarr;&nbsp;Grass/Clutter/Obstacles">Grass distance <50..150></span> ===

<!-- ID: DM_TERR_GRASSDETAIL --> Set grass detail distance. Options: -1 1 0 0.1

=== <span title="Render&nbsp;&rarr;&nbsp;Grass/Clutter/Obstacles">Freeze grass pos</span> ===

<!-- ID: DM_TERR_GRASSFREEZE --> Enable/disable freezing of grass positions.

'''Available Options''': disabled, enabled

=== <span title="Render&nbsp;&rarr;&nbsp;Grass/Clutter/Obstacles">Grass clusters' boxes</span> ===

<!-- ID: DM_TERR_GRASSBBOX --> Enable/disable visualization of grass cluster boxes.

'''Available Options''': disabled, enabled

=== <span title="Render&nbsp;&rarr;&nbsp;Grass/Clutter/Obstacles">Force grass lod</span> ===

<!-- ID: DM_TERR_GRASSLOD --> Set grass LOD level.

'''Available Options''': default, 0, 1, 2, 3

=== <span title="Render&nbsp;&rarr;&nbsp;Grass/Clutter/Obstacles">Force grass blend</span> ===

<!-- ID: DM_TERR_GRASS_FORCE_BLEND --> Set grass blend mode.

'''Available Options''': default, alphatest, edges, ATOC(if msaa)

=== <span title="Render&nbsp;&rarr;&nbsp;Grass/Clutter/Obstacles">Grass sort</span> ===

<!-- ID: DM_TERR_GRASS_SORT --> Enable/disable sorting of grass.

'''Available Options''': true, false

=== <span title="Render&nbsp;&rarr;&nbsp;Grass/Clutter/Obstacles">MT rendering</span> ===

<!-- ID: DM_TERR_GRASS_MT --> Enable/disable multi-threaded grass rendering.

'''Available Options''': true, false

=== <span title="Render&nbsp;&rarr;&nbsp;Grass/Clutter/Obstacles">MT caching</span> ===

<!-- ID: DM_TERR_GRASS_MT_CACHE --> Enable/disable multi-threaded grass caching.

'''Available Options''': true, false

=== <span title="Render&nbsp;&rarr;&nbsp;Grass/Clutter/Obstacles">Grass terrain blend</span> ===

<!-- ID: DM_TERR_GRASS_LERP --> Enable/disable grass terrain blending.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Grass/Clutter/Obstacles">start dist</span> ===

<!-- ID: DM_TERR_GRASS_LERP_START --> Set grass terrain blend start distance.

'''Range Settings''':

Min: -100

Max: 150

Current Value: 0

Step: 0.1

=== <span title="Render&nbsp;&rarr;&nbsp;Grass/Clutter/Obstacles">end dist</span> ===

<!-- ID: DM_TERR_GRASS_LERP_END --> Set grass terrain blend end distance.

'''Range Settings''':

Min: -100

Max: 150

Current Value: 0

Step: 0.1

== <span title="Render">Roads menu</span> ==

=== <span title="Render&nbsp;&rarr;&nbsp;Roads menu">Enable roads</span> ===

<!-- ID: DM_ROADS_ENABLE --> Enable/disable road rendering.

'''Available Options''': enabled, disabled

== <span title="Render">Materials settings</span> ==

=== <span title="Render&nbsp;&rarr;&nbsp;Materials settings">Grass/Tree wind</span> ===

==== <span title="Render&nbsp;&rarr;&nbsp;Materials settings&nbsp;&rarr;&nbsp;Grass/Tree wind">Wind override</span> ====

<!-- ID: DM_TERR_GRASS_WINDDEBUG --> Enable/disable wind override for grass and trees.

'''Available Options''': false, true

==== <span title="Render&nbsp;&rarr;&nbsp;Materials settings&nbsp;&rarr;&nbsp;Grass/Tree wind">Grass/tree par override</span> ====

<!-- ID: DM_TERR_GRASS_WINDDEBUG_PAR --> Enable/disable override of parameters for grass and trees.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Materials settings">Enable MultiMat det.mask</span> ===

<!-- ID: DM_REND_MAT_MULTIMAT --> Enable/disable use of multi-material detection mask.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Materials settings">Tree colorization</span> ===

<!-- ID: DM_REND_MAT_DISABLE_TREECOL --> Set tree colorization mode.

'''Available Options''': full, color only, disable

=== <span title="Render&nbsp;&rarr;&nbsp;Materials settings">Tree volume fake</span> ===

<!-- ID: DM_REND_MAT_TREE_VOLSHADOWFAKE --> Set tree volume fake mode.

'''Available Options''': both, geomOcclElipsoid, elipsoidAO, none

=== <span title="Render&nbsp;&rarr;&nbsp;Materials settings">Tree volume shadow</span> ===

<!-- ID: DM_REND_MAT_TREE_VOLSHADOW --> Set tree volume shadow mode.

'''Available Options''': none, geomOcclElipsoid, geomOccl, elipsoidAO

=== <span title="Render&nbsp;&rarr;&nbsp;Materials settings">Override geomOccl distance</span> ===

<!-- ID: DM_REND_MAT_TREE_VOLGEOMAO --> Enable/disable overriding of geometric occlusion distance.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Materials settings">Max distance</span> ===

<!-- ID: DM_REND_MAT_TREE_VOLGEOMAO_MAX_DIST --> Set max distance for geometric occlusion.

'''Range Settings''': * Min: 0 * Max: 250 * Current Value: 100 * Step: 1

== <span title="Render">Sky</span> ==

=== <span title="Render">Sky</span> ===

<!-- ID: DM_REND_SKY --> Enable/disable sky rendering.

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;Sky">Fog</span> ===

<!-- ID: DM_REND_SKY_FOG --> Enable/disable fog rendering.

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;Sky">Fog in env. map</span> ===

<!-- ID: DM_REND_SKY_FOG_ENV_MAP --> Enable/disable fog in environment map.

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;Sky">Lens Flares</span> ===

<!-- ID: DM_REND_LENS --> Enable/disable lens flares.

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;Sky">Godrays</span> ===

<!-- ID: DM_REND_GODRAYS --> Enable/disable god rays.

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;Sky">Show planets</span> ===

<!-- ID: DM_REND_SKY_PLANETS --> Enable/disable rendering of planets.

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;Sky">Show stars</span> ===

<!-- ID: DM_REND_SKY_STARS --> Enable/disable rendering of stars.

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;Sky">Show real stars constellations</span> ===

<!-- ID: DM_REND_SKY_STARS_DEBUG --> Enable/disable rendering of real star constellations.

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;Sky">Show far layer</span> ===

<!-- ID: DM_REND_SKY_FARLAYER --> Enable/disable rendering of far sky layer.

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;Sky">Show dynamic layer</span> ===

<!-- ID: DM_REND_SKY_DYNLAYER --> Enable/disable rendering of dynamic sky layer.

'''Available Options''': enabled, disabled

== <span title="Render">Rivers</span> ==

=== <span title="Render&nbsp;&rarr;&nbsp;Rivers">Central flow func</span> ===

<!-- ID: DM_CENTRAL_FLOW_FUNC --> Set the central flow function for rivers.

'''Available Options''': sine, polynomial

=== <span title="Render&nbsp;&rarr;&nbsp;Rivers">Debug output</span> ===

<!-- ID: DM_RIVER_DEBUG --> Display debug information of river flow.

'''Available Options''': no debug, flow map, flow map x, flow map y, flow noise, flow noise - LF part, flow noise - HF part, phase noise, flow mod map

== <span title="Render">LightSourcVis</span> ==

=== <span title="Render&nbsp;&rarr;&nbsp;LightSourcVis">Blend</span> ===

<!-- ID: DM_REND_LIGHTSOURCE_BLEND --> Set blend mode for light sources.

'''Available Options''': default, additive, alphablend, max

== <span title="Render">Subsurface Scattering</span> ==

=== <span title="Render&nbsp;&rarr;&nbsp;Subsurface Scattering">SSSSS override params</span> ===

<!-- ID: DM_REND_SSSSS_OVERRIDE --> Enable/disable overriding of SSSSS parameters.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Subsurface Scattering">Enabled</span> ===

<!-- ID: DM_REND_SSSSS_ENABLED --> Enable/disable subsurface scattering.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Subsurface Scattering">Scale</span> ===

<!-- ID: DM_REND_SSSSS_SCALE --> Set subsurface scattering scale.

'''Range Settings''': * Min: 0 * Max: 4 * Current Value: 1 * Step: 0.01

=== <span title="Render&nbsp;&rarr;&nbsp;Subsurface Scattering">Random rotation</span> ===

<!-- ID: DM_REND_SSSSS_USE_ROTATION --> Enable/disable random rotation for subsurface scattering.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Subsurface Scattering">Log kernel</span> ===

<!-- ID: DM_REND_SSSSS_LOG_KERNEL --> Enable/disable logging of subsurface scattering kernel.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Subsurface Scattering">Use stencil</span> ===

<!-- ID: DM_REND_SSSSS_USE_STENCIL --> Enable/disable stencil buffer for subsurface scattering.

'''Available Options''': true, false

=== <span title="Render&nbsp;&rarr;&nbsp;Subsurface Scattering">Profile resolve</span> ===

<!-- ID: DM_REND_SSSSS_PROFILE_RESOLVE --> Set profile resolve mode for subsurface scattering.

'''Available Options''': default, first, min, max, avg

=== <span title="Render&nbsp;&rarr;&nbsp;Subsurface Scattering">SSSSS quality</span> ===

<!-- ID: DM_REND_SSSSS_QUALITY --> Set quality for subsurface scattering.

'''Available Options''': default, low, medium, high

== <span title="Render">Analytic lights</span> ==

=== <span title="Render&nbsp;&rarr;&nbsp;Analytic lights">Disable far lights</span> ===

<!-- ID: DM_REND_FARLIGHTS_DISABLE --> Disable or enable far analytic lights.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Analytic lights">Show far lights</span> ===

<!-- ID: DM_REND_FARLIGHTS_SHOW --> Show or hide far analytic lights.

'''Available Options''': disabled, show, no clip

=== <span title="Render&nbsp;&rarr;&nbsp;Analytic lights">Invert geometry</span> ===

<!-- ID: DM_REND_FARLIGHTS_INVERT --> Enable/disable inverting of geometry.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Analytic lights">Enable vol lights</span> ===

<!-- ID: DM_REND_VOLLIGHTS_ENABLE --> Enable/disable volumetric lights.

'''Available Options''': enabled, no blend, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;Analytic lights">Show log</span> ===

<!-- ID: DM_REND_FARLIGHTS_LOG --> Enable/disable logging of far lights.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Analytic lights">Farlight intensity</span> ===

<!-- ID: DM_REND_FARLIGHTS_INTENSITY --> Set far light intensity. Options: -3 20 0 0.1

=== <span title="Render">Analytic lights</span> ===

<!-- ID: DM_REND_LIGHTS --> Enable/disable analytic lights.

'''Available Options''': true, false

=== <span title="Render&nbsp;&rarr;&nbsp;Analytic lights">Lights shadows</span> ===

<!-- ID: DM_REND_LIGHTS_SHADOWS --> Enable/disable analytic lights shadows.

'''Available Options''': true, false

=== <span title="Render&nbsp;&rarr;&nbsp;Analytic lights">Override limits</span> ===

<!-- ID: DM_REND_LIGHTS_SHADOWS_OVERRIDE --> Enable/disable overriding of light shadow limits.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Analytic lights">Memory budget</span> ===

<!-- ID: DM_REND_LIGHTS_SHADOWS_LIMMEMORY --> Set memory budget for light shadows.

'''Range Settings''': * Min: 10 * Max: 100 * Current Value: 40 * Step: 2

=== <span title="Render&nbsp;&rarr;&nbsp;Analytic lights">Max shadows count</span> ===

<!-- ID: DM_REND_LIGHTS_SHADOWS_LIMSHADOWS --> Set max shadow count for lights.

'''Range Settings''': * Min: 4 * Max: 64 * Current Value: 16 * Step: 1

=== <span title="Render&nbsp;&rarr;&nbsp;Analytic lights">Basic tex size</span> ===

<!-- ID: DM_REND_LIGHTS_SHADOWS_TEXSIZE --> Set basic texture size for lights shadows.

'''Available Options''': 64, 256, 512, 768, 1024, 1536, 2048, 2560, 3072, 3584, 4096

=== <span title="Render&nbsp;&rarr;&nbsp;Analytic lights">Aggr. particle lights</span> ===

<!-- ID: DM_REND_PARTICLE_LIGHT_AGGR --> Enable/disable aggregation of particle lights.

'''Available Options''': true, false

=== <span title="Render&nbsp;&rarr;&nbsp;Analytic lights">Autoshrink part. lights</span> ===

<!-- ID: DM_REND_PARTICLE_LIGHT_SHRINK --> Enable/disable auto shrinking of particle lights.

'''Available Options''': true, false

== <span title="Render">Occlusion Queries</span> ==

=== <span title="Render&nbsp;&rarr;&nbsp;Occlusion Queries">Benchmark</span> ===

<!-- ID: DM_REND_OCCQUERIES_BENCHMARK --> Enable/disable occlusion queries benchmark.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Occlusion Queries">TestSun</span> ===

<!-- ID: DM_REND_OCCQUERIES_TEST_SUN --> Enable/disable occlusion queries test sun.

'''Available Options''': false, true

== <span title="Render">Snow</span> ==

=== <span title="Render&nbsp;&rarr;&nbsp;Snow">Quantize speed</span> ===

<!-- ID: DM_REND_SNOW_QUANTIZE_SPEED --> Enable/disable quantization of snow speed.

'''Available Options''': true, false

=== <span title="Render&nbsp;&rarr;&nbsp;Snow">Quantize dir</span> ===

<!-- ID: DM_REND_SNOW_QUANTIZE_DIR --> Enable/disable quantization of snow direction.

'''Available Options''': true, false

=== <span title="Render&nbsp;&rarr;&nbsp;Snow">Fix dir</span> ===

<!-- ID: DM_REND_SNOW_FIX_WIND_DIR --> Enable/disable fixing of snow wind direction.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Snow">Enable logs</span> ===

<!-- ID: DM_REND_SNOW_ENABLE_LOGS --> Enable/disable snow logs.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Snow">Use underwater mask</span> ===

<!-- ID: DM_REND_SNOW_USE_UNDERWATER_MASK --> Enable/disable underwater mask for snow.

'''Available Options''': true, false

=== <span title="Render&nbsp;&rarr;&nbsp;Snow">Macro mask debug</span> ===

<!-- ID: DM_REND_SNOW_MACRO_MASK_DEBUG --> Show macro mask debug for snow.

'''Available Options''': disabled, layer 1, layer 2, layer 3

=== <span title="Render&nbsp;&rarr;&nbsp;Snow">Override snow</span> ===

<!-- ID: DM_REND_SNOW_OVERRIDE --> Enable/disable overriding snow.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Snow">Density</span> ===

<!-- ID: DM_REND_SNOW_DENSITY --> Set snow density.

'''Range Settings''': * Min: 0.0 * Max: 1.0 * Current Value: 1.0 * Step: 0.01

=== <span title="Render&nbsp;&rarr;&nbsp;Snow">Time coef</span> ===

<!-- ID: DM_REND_SNOW_TIME_COEF --> Set snow time coefficient.

'''Range Settings''': * Min: 0.0 * Max: 10.0 * Current Value: 1.0 * Step: 0.01

== <span title="Render">Deferred Decals</span> ==

=== <span title="Render&nbsp;&rarr;&nbsp;Deferred Decals">Render</span> ===

<!-- ID: DM_REND_DEFDECALS_RENDER --> Enable/disable rendering of deferred decals.

'''Available Options''': true, false

=== <span title="Render&nbsp;&rarr;&nbsp;Deferred Decals">HW depth</span> ===

<!-- ID: DM_REND_DEFDECALS_DEPTHBUF --> Enable/disable HW depth usage for deferred decals.

'''Available Options''': true, false

=== <span title="Render&nbsp;&rarr;&nbsp;Deferred Decals">Debug visualization</span> ===

<!-- ID: DM_REND_DEFDECALS_DEBUGVIS --> Enable/disable debugging visualization of deferred decals.

'''Available Options''': true, false

== <span title="Render">Light portals</span> ==

=== <span title="Render&nbsp;&rarr;&nbsp;Light portals">Enable light portals</span> ===

<!-- ID: DM_VLIGHTS_ENABLE --> Enable/disable light portals.

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;Light portals">Probe blending mode</span> ===

<!-- ID: DM_VLIGHTS_ENHANCED_PROBE_BLEND --> Set probe blending mode for light portals.

'''Available Options''': directional, diffuse, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;Light portals">Specular proj. tex.</span> ===

<!-- ID: DM_VLIGHTS_PROJ_TEX_SPEC --> Enable/disable specular projection texture.

'''Available Options''': disabled, enabled

=== <span title="Render&nbsp;&rarr;&nbsp;Light portals">Proj. tex. offset fix</span> ===

<!-- ID: DM_VLIGHTS_PROJ_TEX_OFFST_FIX --> Enable/disable projection texture offset fix.

'''Available Options''': disabled, enabled

=== <span title="Render&nbsp;&rarr;&nbsp;Light portals">Portal light mode</span> ===

<!-- ID: DM_VLIGHTS_LIGHT_MODE --> Set light mode for light portals.

'''Available Options''': none, diffuse+specular, diffuse, specular

=== <span title="Render&nbsp;&rarr;&nbsp;Light portals">Normalize L by area</span> ===

<!-- ID: DM_VLIGHTS_NORMALIZE_AREA_INTENSITY --> Enable/disable normalization of light by area.

'''Available Options''': disabled, enabled

=== <span title="Render&nbsp;&rarr;&nbsp;Light portals">Direct light contrib.</span> ===

<!-- ID: DM_VLIGHTS_DIRECT_CONTRIBUTION --> Enable/disable direct light contribution.

'''Available Options''': disabled, enabled

=== <span title="Render&nbsp;&rarr;&nbsp;Light portals">Light volume lerp (m)</span> ===

<!-- ID: DM_VLIGHTS_LIGHT_VOLUME_LERP --> Set light volume lerp.

'''Available Options''': 0.00001, 0.0001, 0.001, 0.01, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.5, 0.75, 1.0

=== <span title="Render&nbsp;&rarr;&nbsp;Light portals">Disable light volumes</span> ===

<!-- ID: DM_VLIGHTS_LIGHT_DISABLE_LIGHT_VOLUMES --> Disable light volumes.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Light portals">Show active subscene</span> ===

<!-- ID: DM_VLIGHTS_SHOW_ACTIVE_SUBSCENE --> Show or hide active subscene.

'''Available Options''': disabled, enabled

=== <span title="Render&nbsp;&rarr;&nbsp;Light portals">Show area rectangles</span> ===

<!-- ID: DM_VLIGHTS_DEBUG_AREA_RECT --> Show or hide area rectangles.

'''Available Options''': disabled, enabled

=== <span title="Render&nbsp;&rarr;&nbsp;Light portals">Show portal rectangles</span> ===

<!-- ID: DM_VLIGHTS_DEBUG_PORTAL_RECT --> Show or hide portal rectangles.

'''Available Options''': disabled, enabled

=== <span title="Render&nbsp;&rarr;&nbsp;Light portals">Show light rectangles</span> ===

<!-- ID: DM_VLIGHTS_DEBUG_LIGHT_RECT --> Show or hide light rectangles.

'''Available Options''': disabled, enabled

=== <span title="Render&nbsp;&rarr;&nbsp;Light portals">Show debug info</span> ===

<!-- ID: DM_VLIGHTS_DEBUG_INFO --> Show light portals debug info.

'''Available Options''': none, portals, areas, all

=== <span title="Render&nbsp;&rarr;&nbsp;Light portals">Virtual light range</span> ===

<!-- ID: DM_VLIGHTS_VIRTUAL_LIGHTS_RANGE --> Set virtual light range.

'''Range Settings''': * Min: 5 * Max: 50 * Current Value: 25 * Step: 0.1

=== <span title="Render&nbsp;&rarr;&nbsp;Light portals">BSP diag</span> ===

<!-- ID: DM_VLIGHTS_BSP_DIAG --> Enable/disable BSP diagnostics.

'''Available Options''': disabled, enabled

=== <span title="Render&nbsp;&rarr;&nbsp;Light portals">Hide mesh</span> ===

<!-- ID: DM_VLIGHTS_HIDE_MESH --> Hide light portal mesh.

'''Available Options''': disabled, enabled

=== <span title="Render&nbsp;&rarr;&nbsp;Light portals">Show src. geometry</span> ===

<!-- ID: DM_VLIGHTS_SHOW_BSP_SOURCE_GEOMETRY --> Show source geometry for light portals.

'''Available Options''': disabled, opaque, transparent

=== <span title="Render&nbsp;&rarr;&nbsp;Light portals">Show occupancy grid</span> ===

<!-- ID: DM_VLIGHTS_SHOW_BSP_GRID --> Show occupancy grid for light portals.

'''Available Options''': disabled, enabled

=== <span title="Render&nbsp;&rarr;&nbsp;Light portals">Freeze camera</span> ===

<!-- ID: DM_VLIGHTS_FREEZE_CAMERA --> Enable/disable freezing of camera for light portals.

'''Available Options''': disabled, enabled

=== <span title="Render&nbsp;&rarr;&nbsp;Light portals">Show BSP tree</span> ===

<!-- ID: DM_VLIGHTS_SHOW_BSP --> Show BSP tree for light portals.

'''Available Options''': none, AABB, planes, convex

=== <span title="Render&nbsp;&rarr;&nbsp;Light portals">Leaf mode</span> ===

<!-- ID: DM_VLIGHTS_BSP_LEAF_MODE --> Set leaf mode for BSP tree debug.

'''Available Options''': all, opaque, non-opaque

=== <span title="Render&nbsp;&rarr;&nbsp;Light portals">BSP disp. mode</span> ===

<!-- ID: DM_VLIGHTS_BSP_MODE --> Set display mode for BSP debug.

'''Available Options''': normal, at depth, active, connectivity

=== <span title="Render&nbsp;&rarr;&nbsp;Light portals">Wanted depth</span> ===

<!-- ID: DM_VLIGHTS_BSP_DEPTH --> Set wanted depth for BSP debug.

'''Range Settings''': * Min: 0 * Max: 64 * Current Value: 0 * Step: 1

=== <span title="Render&nbsp;&rarr;&nbsp;Light portals">Show leaf split plane</span> ===

<!-- ID: DM_VLIGHTS_BSP_LEAF_SPLIT --> Show leaf split plane.

'''Available Options''': disabled, enabled

=== <span title="Render&nbsp;&rarr;&nbsp;Light portals">Show areas</span> ===

<!-- ID: DM_VLIGHTS_SHOW_BSP_AREAS --> Show light portal areas.

'''Available Options''': none, AABB, convex

=== <span title="Render&nbsp;&rarr;&nbsp;Light portals">Area disp. mode</span> ===

<!-- ID: DM_VLIGHTS_BSP_AREAS_MODE --> Set display mode for light portal areas.

'''Available Options''': all (excl. out), all, single, active

=== <span title="Render&nbsp;&rarr;&nbsp;Light portals">Area ID</span> ===

<!-- ID: DM_VLIGHTS_BSP_AREA --> Set area ID for light portals.

'''Range Settings''': * Min: 0 * Max: 128 * Current Value: 0 * Step: 1

=== <span title="Render&nbsp;&rarr;&nbsp;Light portals">Show portals</span> ===

<!-- ID: DM_VLIGHTS_SHOW_BSP_PORTALS --> Show light portals.

'''Available Options''': none, all, single, per area, active

=== <span title="Render&nbsp;&rarr;&nbsp;Light portals">Portal ID</span> ===

<!-- ID: DM_VLIGHTS_BSP_PORTAL --> Set portal ID for light portals.

'''Range Settings''': * Min: 0 * Max: 512 * Current Value: 0 * Step: 1

=== <span title="Render&nbsp;&rarr;&nbsp;Light portals">Portal disp. mode</span> ===

<!-- ID: DM_VLIGHTS_BSP_PORTALS_MODE --> Set display mode for light portals.

'''Available Options''': rect, AABB, rect no clip, AABB no clip

=== <span title="Render&nbsp;&rarr;&nbsp;Light portals">Show portal volumes</span> ===

<!-- ID: DM_VLIGHTS_SHOW_BSP_VOLUMES --> Show light portal volumes.

'''Available Options''': disabled, enabled

=== <span title="Render&nbsp;&rarr;&nbsp;Light portals">Show virtual lights</span> ===

<!-- ID: DM_VLIGHTS_SHOW --> Show virtual lights.

'''Available Options''': disabled, active all, active single

=== <span title="Render&nbsp;&rarr;&nbsp;Light portals">Light disp. mode</span> ===

<!-- ID: DM_VLIGHTS_MODE --> Set display mode for virtual lights.

'''Available Options''': rect, rect+cone, rect no clip, rect+cone no clip

== <span title="Render">Terrain shadows</span> ==

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows">Shadow cascades</span> ===

==== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows&nbsp;&rarr;&nbsp;Shadow cascades">Terrain num cascades</span> ====

<!-- ID: DM_TERR_SHADOWS_CASC_TERR_NUM --> Set number of terrain shadow cascades.

'''Available Options''': default, 0, 1, 2

==== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows&nbsp;&rarr;&nbsp;Shadow cascades">Terrain near type</span> ====

<!-- ID: DM_TERR_SHADOWS_CASC_TERR_NEAR --> Set near cascade type for terrain.

'''Available Options''': default, movable, static

==== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows&nbsp;&rarr;&nbsp;Shadow cascades">Terrain near m/px</span> ====

<!-- ID: DM_TERR_SHADOWS_CASC_TERR_NEAR_MPP --> Set near cascade meters per pixel for terrain.

'''Available Options''': default, 0.5, 1, 1.5, 2, 3, 4, 5, 6, 7, 8

==== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows&nbsp;&rarr;&nbsp;Shadow cascades">Terrain far type</span> ====

<!-- ID: DM_TERR_SHADOWS_CASC_TERR_FAR --> Set far cascade type for terrain.

'''Available Options''': default, movable, static

==== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows&nbsp;&rarr;&nbsp;Shadow cascades">Terrain far m/px</span> ====

<!-- ID: DM_TERR_SHADOWS_CASC_TERR_FAR_MPP --> Set far cascade meters per pixel for terrain.

'''Available Options''': default, 0.5, 1, 1.5, 2, 3, 4, 5, 6, 7, 8

==== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows&nbsp;&rarr;&nbsp;Shadow cascades">Objects num cascades</span> ====

<!-- ID: DM_TERR_SHADOWS_CASC_OBJ_NUM --> Set number of object shadow cascades.

'''Available Options''': default, 0, 1, 2

==== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows&nbsp;&rarr;&nbsp;Shadow cascades">Objects near type</span> ====

<!-- ID: DM_TERR_SHADOWS_CASC_OBJ_NEAR --> Set near cascade type for objects.

'''Available Options''': default, movable, static

==== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows&nbsp;&rarr;&nbsp;Shadow cascades">Objects near m/px</span> ====

<!-- ID: DM_TERR_SHADOWS_CASC_OBJ_NEAR_MPP --> Set near cascade meters per pixel for objects.

'''Available Options''': default, 0.5, 1, 1.5, 2, 3, 4, 5, 6, 7, 8

==== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows&nbsp;&rarr;&nbsp;Shadow cascades">Objects far type</span> ====

<!-- ID: DM_TERR_SHADOWS_CASC_OBJ_FAR --> Set far cascade type for objects.

'''Available Options''': default, movable, static

==== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows&nbsp;&rarr;&nbsp;Shadow cascades">Objects far m/px</span> ====

<!-- ID: DM_TERR_SHADOWS_CASC_OBJ_FAR_MPP --> Set far cascade meters per pixel for objects.

'''Available Options''': default, 0.5, 1, 1.5, 2, 3, 4, 5, 6, 7, 8

==== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows&nbsp;&rarr;&nbsp;Shadow cascades">AO num cascades</span> ====

<!-- ID: DM_TERR_SHADOWS_CASC_AO_NUM --> Set number of AO shadow cascades.

'''Available Options''': default, 0, 1, 2

==== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows&nbsp;&rarr;&nbsp;Shadow cascades">AO near type</span> ====

<!-- ID: DM_TERR_SHADOWS_CASC_AO_NEAR --> Set near cascade type for AO.

'''Available Options''': default, movable, static

==== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows&nbsp;&rarr;&nbsp;Shadow cascades">AO near m/px</span> ====

<!-- ID: DM_TERR_SHADOWS_CASC_AO_NEAR_MPP --> Set near cascade meters per pixel for AO.

'''Available Options''': default, 0.5, 1, 1.5, 2, 3, 4, 5, 6, 7, 8

==== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows&nbsp;&rarr;&nbsp;Shadow cascades">AO far type</span> ====

<!-- ID: DM_TERR_SHADOWS_CASC_AO_FAR --> Set far cascade type for AO.

'''Available Options''': default, movable, static

==== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows&nbsp;&rarr;&nbsp;Shadow cascades">AO far m/px</span> ====

<!-- ID: DM_TERR_SHADOWS_CASC_AO_FAR_MPP --> Set far cascade meters per pixel for AO.

'''Available Options''': default, 0.5, 1, 1.5, 2, 3, 4, 5, 6, 7, 8

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows">Objects heightmap</span> ===

==== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows&nbsp;&rarr;&nbsp;Objects heightmap">Obj. heightmap movable</span> ====

<!-- ID: DM_TERR_SHADOWS_OBJ_HEIGHTMAP_MOVABILITY --> Set object heightmap movability.

'''Available Options''': movable, static

==== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows&nbsp;&rarr;&nbsp;Objects heightmap">Draw volumetric info</span> ====

<!-- ID: DM_TERR_SHADOWS_DEBUG_VOLUMETRIC --> Draw volumetric debug info.

'''Available Options''': false, true

==== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows&nbsp;&rarr;&nbsp;Objects heightmap">Draw object heightmap</span> ====

<!-- ID: DM_TERR_SHADOWS_DEBUG_VIS_OBJ_HEIGHT --> Draw object heightmap.

'''Available Options''': disabled, set regions, set bits, all bits

==== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows&nbsp;&rarr;&nbsp;Objects heightmap">Obj.height.full upd</span> ====

<!-- ID: DM_TERR_SHADOWS_OBJ_HEIGHTMAP_FULL --> Enable/disable full object heightmap update.

'''Available Options''': false, true

==== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows&nbsp;&rarr;&nbsp;Objects heightmap">Obj.height. dbg region</span> ====

<!-- ID: DM_TERR_SHADOWS_OBJ_HEIGHTMAP_DEBUG_REGION --> Enable/disable object heightmap region debug.

'''Available Options''': false, true

==== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows&nbsp;&rarr;&nbsp;Objects heightmap">Obj.height.reset</span> ====

<!-- ID: DM_TERR_SHADOWS_OBJ_HEIGHTMAP_RESET --> Reset object heightmap.

'''Available Options''': false, true

==== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows&nbsp;&rarr;&nbsp;Objects heightmap">Obj.height.reset stats</span> ====

<!-- ID: DM_TERR_SHADOWS_OBJ_HEIGHTMAP_RESET_STATS --> Reset object heightmap statistics.

'''Available Options''': false, true

==== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows&nbsp;&rarr;&nbsp;Objects heightmap">Obj.height.print stats</span> ====

<!-- ID: DM_TERR_SHADOWS_OBJ_HEIGHTMAP_PRINT_STATS --> Print object heightmap statistics.

'''Available Options''': false, true

==== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows&nbsp;&rarr;&nbsp;Objects heightmap">Obj.height.use prepare</span> ====

<!-- ID: DM_TERR_SHADOWS_OBJ_HEIGHTMAP_USE_PREPARE --> Enable/disable prepare for object heightmap.

'''Available Options''': true, false

==== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows&nbsp;&rarr;&nbsp;Objects heightmap">Obj.height.use CB</span> ====

<!-- ID: DM_TERR_SHADOWS_OBJ_HEIGHTMAP_USE_CB --> Enable/disable command buffer for object heightmap.

'''Available Options''': false, true

==== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows&nbsp;&rarr;&nbsp;Objects heightmap">Obj.height.max merge</span> ====

<!-- ID: DM_TERR_SHADOWS_OBJ_HEIGHTMAP_MAX_MERGE --> Set maximum merge for object heightmap.

'''Available Options''': unlimited, 1, 4, 8, 16

==== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows&nbsp;&rarr;&nbsp;Objects heightmap">Obj.height. subdiv</span> ====

<!-- ID: DM_TERR_SHADOWS_OBJ_HEIGHTMAP_SUBDIV --> Enable/disable object heightmap subdivision.

'''Available Options''': false, true

==== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows&nbsp;&rarr;&nbsp;Objects heightmap">Obj.height. sync draw</span> ====

<!-- ID: DM_TERR_SHADOWS_OBJ_HEIGHTMAP_SYNC_DRAWCALLS --> Set object heightmap draw call synchronization.

'''Available Options''': default, sync, no sync

==== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows&nbsp;&rarr;&nbsp;Objects heightmap">Obj. heightmap tex size</span> ====

<!-- ID: DM_TERR_SHADOWS_OBJ_HEIGHTMAP_TEX_SIZE --> Set object heightmap texture size.

'''Available Options''': no override, 1024, 2048, 4096, 8192

==== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows&nbsp;&rarr;&nbsp;Objects heightmap">Obj. heightmap m/pixel</span> ====

<!-- ID: DM_TERR_SHADOWS_OBJ_HEIGHTMAP_METERS_PER_PIXEL --> Set object heightmap meters per pixel.

'''Available Options''': default, 0.5, 1, 1.5, 2, 3, 4, 5, 6, 7, 8

==== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows&nbsp;&rarr;&nbsp;Objects heightmap">Min entities per frame</span> ====

<!-- ID: DM_TERR_SHADOWS_OBJ_HEIGHTMAP_MIN_ENTITIES --> Set min entities per frame for heightmap.

'''Available Options''': default, 512, 1K, 2K, 4K, 8K, 16K, 32K, 64K, 128K, unlimited

==== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows&nbsp;&rarr;&nbsp;Objects heightmap">Max entities per frame</span> ====

<!-- ID: DM_TERR_SHADOWS_OBJ_HEIGHTMAP_MAX_ENTITIES --> Set max entities per frame for heightmap.

'''Available Options''': default, 512, 1K, 2K, 4K, 8K, 16K, 32K, 64K, 128K, unlimited

=== <span title="Render">Terrain shadows</span> ===

<!-- ID: DM_TERR_SHADOWS_TERRAIN --> Set terrain shadows mode.

'''Available Options''': default, on (slice), on (full), no update, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows">Freeze update</span> ===

<!-- ID: DM_TERR_SHADOWS_TERRAIN_FREEZE --> Freeze terrain shadow update.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows">Quality profile override</span> ===

<!-- ID: DM_TERR_SHADOWS_TERRAIN_QUALITY --> Override terrain shadow quality profile.

'''Available Options''': no override, disabled, low, medium, high

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows">Diag messages</span> ===

<!-- ID: DM_TERR_SHADOWS_DEBUG_MSG --> Enable/disable terrain shadows debug messages.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows">Texture size</span> ===

<!-- ID: DM_TERR_SHADOWS_TEX_SIZE --> Override terrain shadow texture size.

'''Available Options''': no override, 1024, 2048, 4096, 8192

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows">Blur override</span> ===

<!-- ID: DM_TERR_SHADOWS_BLUR --> Override terrain shadow blur.

'''Available Options''': no override, 0, 3, 5, 7, 9

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows">Hierarchical raytrace</span> ===

<!-- ID: DM_TERR_SHADOWS_HIERARCHICAL --> Enable/disable hierarchical raytrace for terrain shadows.

'''Available Options''': true, false

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows">Force mipmap rebuild</span> ===

<!-- ID: DM_TERR_SHADOWS_MIP_REBUILD --> Enable/disable forcing of mipmap rebuild for terrain shadows.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows">Herarchical mip1</span> ===

<!-- ID: DM_TERR_SHADOWS_HIER_MIP1 --> Set hierarchical mip 1 level.

'''Available Options''': default, none, 0, 1, 2, 3, 4, 5, 6

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows">Herarchical mip2</span> ===

<!-- ID: DM_TERR_SHADOWS_HIER_MIP2 --> Set hierarchical mip 2 level.

'''Available Options''': default, none, 0, 1, 2, 3, 4, 5, 6

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows">Herarchical mip3</span> ===

<!-- ID: DM_TERR_SHADOWS_HIER_MIP3 --> Set hierarchical mip 3 level.

'''Available Options''': default, none, 0, 1, 2, 3, 4, 5, 6

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows">Herarchical mip4</span> ===

<!-- ID: DM_TERR_SHADOWS_HIER_MIP4 --> Set hierarchical mip 4 level.

'''Available Options''': default, none, 0, 1, 2, 3, 4, 5, 6

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows">Override Angle bias</span> ===

<!-- ID: DM_TERR_SHADOWS_ANGLE_BIAS_OVERRIDE --> Enable/disable overriding of angle bias.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows">Angle bias (deg)</span> ===

<!-- ID: DM_TERR_SHADOWS_ANGLE_BIAS --> Set angle bias for terrain shadows.

'''Range Settings''':

Min: -10

Max: 10

Current Value: -0.5

Step: 0.1

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows">Override Height bias</span> ===

<!-- ID: DM_TERR_SHADOWS_HEIGHT_BIAS_OVERRIDE --> Enable/disable overriding of height bias.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows">Height bias (m)</span> ===

<!-- ID: DM_TERR_SHADOWS_HEIGHT_BIAS --> Set height bias for terrain shadows.

'''Range Settings''':

Min: 0

Max: 10

Current Value: 0.5

Step: 0.1

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows">Override Trace bias</span> ===

<!-- ID: DM_TERR_SHADOWS_TRACE_BIAS_OVERRIDE --> Enable/disable overriding of trace bias.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows">Trace bias</span> ===

<!-- ID: DM_TERR_SHADOWS_TRACE_BIAS --> Set trace bias for terrain shadows.

'''Range Settings''':

Min: 0

Max: 10

Current Value: 0.0

Step: 0.1

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows">Override Trace bias obj</span> ===

<!-- ID: DM_TERR_SHADOWS_TRACE_BIAS_OBJ_OVERRIDE --> Enable/disable overriding of object trace bias.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows">Trace bias obj min</span> ===

<!-- ID: DM_TERR_SHADOWS_TRACE_BIAS_OBJ_MIN --> Set object trace bias minimum.

'''Range Settings''':

Min: 0

Max: 10

Current Value: 0.1

Step: 0.1

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows">Trace bias obj max</span> ===

<!-- ID: DM_TERR_SHADOWS_TRACE_BIAS_OBJ_MAX --> Set object trace bias maximum.

'''Range Settings''':

Min: 0

Max: 10

Current Value: 1.5

Step: 0.1

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows">Object shadows</span> ===

<!-- ID: DM_TERR_SHADOWS_OBJECTS --> Set object shadows mode.

'''Available Options''': default, force off, force on

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows">Object shadow type</span> ===

<!-- ID: DM_TERR_SHADOWS_OBJECTS_SHADOW_TYPE --> Set object shadow type.

'''Available Options''': no override, Physics, Physics+AAB, AAB, AABScaled, Volume

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows">Occ grid runtime</span> ===

<!-- ID: DM_TERR_SHADOWS_OBJ_HEIGHTMAP_OCC_GRID_RUNTIME_CREATION --> Enable/disable runtime creation of occupation grid.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows">Blend mode</span> ===

<!-- ID: DM_TERR_SHADOWS_BLEND --> Set blend mode for terrain shadows.

'''Available Options''': blend, min

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows">Border size</span> ===

<!-- ID: DM_TERR_SHADOWS_BORDER_SIZE --> Set border size for terrain shadows.

'''Available Options''': default, 0, 0.05, 0.1, 0.15, 0.2, 0.3, 0.4, 0.5

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows">Sun move test</span> ===

<!-- ID: DM_TERR_SHADOWS_TEST_SUN --> Set sun move test mode.

'''Available Options''': off, fwd slow, fwd medium, bwd fast, bwd slow, bwd medium, bwd fast

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows">Min pixels per frame</span> ===

<!-- ID: DM_TERR_SHADOWS_MIN_PIX_PER_FRAME --> Set min pixels per frame for terrain shadows.

'''Available Options''': default, 16K, 32K, 64K, 128K, 256K, 512K, unlimited

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows">Max pixels per frame</span> ===

<!-- ID: DM_TERR_SHADOWS_MAX_PIX_PER_FRAME --> Set max pixels per frame for terrain shadows.

'''Available Options''': default, 16K, 32K, 64K, 128K, 256K, 512K, unlimited

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows">Obj shadow blend dist(m)</span> ===

<!-- ID: DM_TERR_SHADOWS_OBJ_SHADOW_BLEND_DIST --> Set object shadow blend distance.

'''Range Settings''':

Min: 0

Max: 20

Current Value: 10.0

Step: 0.1

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows">Terrain shadow blend dist(m)</span> ===

<!-- ID: DM_TERR_SHADOWS_TER_SHADOW_BLEND_DIST --> Set terrain shadow blend distance.

'''Range Settings''':

Min: 0

Max: 20

Current Value: 3.0

Step: 0.1

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows">AO mode override</span> ===

<!-- ID: DM_TERR_SHADOWS_AO_MODE --> Set AO mode override for terrain shadows.

'''Available Options''': no override, disabled, PP half, PP mixed, PP full, force precomputed, presomputed+runtime, force runtime

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows">Override AO coef</span> ===

<!-- ID: DM_TERR_SHADOWS_OVERRIDE_AO_COEF --> Enable/disable overriding of AO coefficient.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows">AO coef</span> ===

<!-- ID: DM_TERR_SHADOWS_AO_COEF --> Set AO coefficient.

'''Range Settings''': * Min: 0 * Max: 1.0 * Current Value: 0.3 * Step: 0.02

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows">AO radius</span> ===

<!-- ID: DM_TERR_SHADOWS_AO_RADIUS --> Set AO radius.

'''Range Settings''': * Min: 0 * Max: 10.0 * Current Value: 3.0 * Step: 0.2

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows">AO blend distance</span> ===

<!-- ID: DM_TERR_SHADOWS_AO_BLEND_DIST --> Set AO blend distance.

'''Range Settings''': * Min: 0 * Max: 10.0 * Current Value: 5.0 * Step: 0.2

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows">AO PP mode</span> ===

<!-- ID: DM_TERR_SHADOWS_AO_PP_MODE --> Set AO post-processing mode.

'''Available Options''': default, full res, half res, half res + reconst

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows">Terr. light angle limit</span> ===

<!-- ID: DM_TERR_SHADOWS_LIGHT_LIMIT_ANGLE --> Set light angle limit for terrain shadows.

'''Available Options''': default, user

=== <span title="Render&nbsp;&rarr;&nbsp;Terrain shadows">Limit angle</span> ===

<!-- ID: DM_TERR_SHADOWS_LIGHT_LIMIT_ANGLE_VAL --> Set light limit angle.

'''Range Settings''': * Min: 1 * Max: 60 * Current Value: 15 * Step: 0.1

== <span title="Render">FSR</span> ==

=== <span title="Render&nbsp;&rarr;&nbsp;FSR">Resolution scale</span> ===

<!-- ID: DM_REND_FSR_RES_SCALE --> Set resolution scale for FSR.

'''Available Options''': default, manual, 100%, FSR Ultra (77%), FSR Quality (67%), FSR Balanced (59%), FSR Perf (50%)

=== <span title="Render&nbsp;&rarr;&nbsp;FSR">Manual scale</span> ===

<!-- ID: DM_REND_FSR_RES_SCALE_VAL --> Set manual scale for FSR.

'''Range Settings''': * Min: 0.1 * Max: 2.0 * Current Value: 1.0 * Step: 0.01

=== <span title="Render&nbsp;&rarr;&nbsp;FSR">Use pixel shader</span> ===

<!-- ID: DM_REND_FSR_USEPS --> Enable/disable pixel shader for FSR.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;FSR">Override FSR settings</span> ===

<!-- ID: DM_REND_FSR_OVERRIDE --> Enable/disable overriding of FSR settings.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;FSR">FSR enabled</span> ===

<!-- ID: DM_REND_FSR_ENABLED --> Enable/disable FSR.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;FSR">FSR sharpen</span> ===

<!-- ID: DM_REND_FSR_SHARPEN_ENABLE --> Enable/disable FSR sharpening.

'''Available Options''': true, false

=== <span title="Render&nbsp;&rarr;&nbsp;FSR">FSR sharpen att.</span> ===

<!-- ID: DM_REND_FSR_SHARPEN_ATT --> Set FSR sharpen amount.

'''Range Settings''': * Min: 0.0 * Max: 2.0 * Current Value: 0.5 * Step: 0.01

=== <span title="Render&nbsp;&rarr;&nbsp;FSR">FSR dither</span> ===

<!-- ID: DM_REND_FSR_DITHER_AMOUNT --> Set FSR dither amount.

'''Range Settings''': * Min: 0.0 * Max: 1.0 * Current Value: 1.0 * Step: 0.01

=== <span title="Render&nbsp;&rarr;&nbsp;FSR">FSR RT format</span> ===

<!-- ID: DM_REND_FSR_RT_FORMAT --> Set render target format for FSR.

'''Available Options''': default, R8G8B8A8, R10G10B10A2, R11G11B10F, R16G16B16A16F

=== <span title="Render&nbsp;&rarr;&nbsp;FSR">FSR mip bias</span> ===

<!-- ID: DM_REND_FSR_MIP_BIAS --> Set mip bias for FSR.

'''Available Options''': disabled, automatic, manual

=== <span title="Render&nbsp;&rarr;&nbsp;FSR">manual mip bias</span> ===

<!-- ID: DM_REND_FSR_MIP_BIAS_VAL --> Set manual mip bias for FSR. Options: -4.0 0.0 0.0 0.01

== <span title="Render">CAS</span> ==

=== <span title="Render&nbsp;&rarr;&nbsp;CAS">Shader</span> ===

<!-- ID: DM_REND_CAS_SHADER --> Set shader type for CAS.

'''Available Options''': default, force PS, force CS

=== <span title="Render&nbsp;&rarr;&nbsp;CAS">Override CAS settings</span> ===

<!-- ID: DM_REND_CAS_OVERRIDE --> Enable/disable overriding of CAS settings.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;CAS">enabled</span> ===

<!-- ID: DM_REND_CAS_ENABLEDEnable/disable CAS. -->

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;CAS">sharpness</span> ===

<!-- ID: DM_REND_CAS_SHARPNESS --> Set CAS sharpness.

'''Range Settings''': * Min: 0.0 * Max: 1.0 * Current Value: 0.8 * Step: 0.01

== <span title="Render">Rain</span> ==

=== <span title="Render&nbsp;&rarr;&nbsp;Rain">Wetness</span> ===

==== <span title="Render&nbsp;&rarr;&nbsp;Rain&nbsp;&rarr;&nbsp;Wetness">Override wetness</span> ====

<!-- ID: DM_REND_RAIN_OVERRIDE_WETNESS --> Enable/disable overriding of rain wetness.

'''Available Options''': false, true

==== <span title="Render&nbsp;&rarr;&nbsp;Rain">Wetness</span> ====

<!-- ID: DM_REND_RAIN_WETNESS --> Set rain wetness.

'''Range Settings''': * Min: 0.0 * Max: 1.0 * Current Value: 0.0 * Step: 0.01

==== <span title="Render&nbsp;&rarr;&nbsp;Rain&nbsp;&rarr;&nbsp;Wetness">Flood cracks</span> ====

<!-- ID: DM_REND_RAIN_FLOOD_LEVEL_CRACKS --> Set rain flood level for cracks.

'''Range Settings''': * Min: 0.0 * Max: 1.0 * Current Value: 0.0 * Step: 0.01

==== <span title="Render&nbsp;&rarr;&nbsp;Rain&nbsp;&rarr;&nbsp;Wetness">Flood puddles</span> ====

<!-- ID: DM_REND_RAIN_FLOOD_LEVEL_PUDDLES --> Set rain flood level for puddles.

'''Range Settings''': * Min: 0.0 * Max: 1.0 * Current Value: 0.0 * Step: 0.01

==== <span title="Render&nbsp;&rarr;&nbsp;Rain&nbsp;&rarr;&nbsp;Wetness">Tree scale</span> ====

<!-- ID: DM_REND_RAIN_TREE_SCALE --> Set rain tree scale.

'''Range Settings''': * Min: 0.0 * Max: 1.0 * Current Value: 0.0 * Step: 0.01

==== <span title="Render&nbsp;&rarr;&nbsp;Rain&nbsp;&rarr;&nbsp;Wetness">Wetness simulation</span> ====

<!-- ID: DM_REND_RAIN_WETNESS_SIMULATION --> Enable/disable wetness simulation.

'''Available Options''': false, true

==== <span title="Render&nbsp;&rarr;&nbsp;Rain&nbsp;&rarr;&nbsp;Wetness">Simulation value</span> ====

<!-- ID: DM_REND_RAIN_WETSIM_VALUE --> Set wetness simulation value.

'''Range Settings''': * Min: 0.0 * Max: 1.0 * Current Value: 0.0 * Step: 0.002

==== <span title="Render&nbsp;&rarr;&nbsp;Rain&nbsp;&rarr;&nbsp;Wetness">Override wetness render params</span> ====

<!-- ID: DM_REND_RAIN_WETNESS_OVERRIDE_RENDER --> Enable/disable overriding of wetness render params.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Rain">Wind</span> ===

==== <span title="Render&nbsp;&rarr;&nbsp;Rain&nbsp;&rarr;&nbsp;Wind">Override rain wind</span> ====

<!-- ID: DM_REND_RAIN_OVERRIDE_WIND --> Enable/disable overriding of rain wind.

'''Available Options''': false, true

==== <span title="Render&nbsp;&rarr;&nbsp;Rain&nbsp;&rarr;&nbsp;Wind">Mask operator</span> ====

<!-- ID: DM_REND_RAIN_WIND_MASK_OPERATOR --> Set mask operator for rain wind.

'''Available Options''': add, mul

==== <span title="Render&nbsp;&rarr;&nbsp;Rain&nbsp;&rarr;&nbsp;Wind">Override splash wind</span> ====

<!-- ID: DM_REND_RAIN_SPLASHES_OVERRIDE_WIND --> Enable/disable overriding of splash wind.

'''Available Options''': false, true

==== <span title="Render&nbsp;&rarr;&nbsp;Rain&nbsp;&rarr;&nbsp;Wind">Mask operator</span> ====

<!-- ID: DM_REND_RAIN_SPLASHES_WIND_MASK_OPERATOR --> Set mask operator for splash wind.

'''Available Options''': add, mul

=== <span title="Render&nbsp;&rarr;&nbsp;Rain">Downsample</span> ===

<!-- ID: DM_REND_RAIN_COLOR_DOWNSAMPLE --> Set rain color downsample method.

'''Available Options''': default, simple, blur, none

=== <span title="Render&nbsp;&rarr;&nbsp;Rain">Blend method</span> ===

<!-- ID: DM_REND_RAIN_BLEND_METHOD --> Set rain blend method.

'''Available Options''': default, standard, noRefraction

=== <span title="Render&nbsp;&rarr;&nbsp;Rain">Diag refr. tex</span> ===

<!-- ID: DM_REND_RAIN_DIAG_REFRACTION_TEX --> Enable/disable rain refraction texture diagnostic.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Rain">Stop time</span> ===

<!-- ID: DM_REND_RAIN_STOP_TIME --> Enable/disable stopping of rain simulation time.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Rain">Use underwater mask</span> ===

<!-- ID: DM_REND_RAIN_USE_UNDERWATER_MASK --> Enable/disable underwater mask for rain.

'''Available Options''': true, false

=== <span title="Render&nbsp;&rarr;&nbsp;Rain">Override rain density</span> ===

<!-- ID: DM_REND_RAIN_OVERRIDE_DENSITY --> Enable/disable overriding of rain density.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Rain">Rain density</span> ===

<!-- ID: DM_REND_RAIN_OVERRIDE_DENSITY_VAL --> Set rain density.

'''Range Settings''': * Min: 0.0 * Max: 1.0 * Current Value: 0.0 * Step: 0.02

=== <span title="Render&nbsp;&rarr;&nbsp;Rain">Override direction</span> ===

<!-- ID: DM_REND_RAIN_OVERRIDE_DIR --> Enable/disable overriding of rain direction.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Rain">Override dirX</span> ===

<!-- ID: DM_REND_RAIN_OVERRIDE_DIRX --> Set rain direction X. Options: -1.0 1.0 0.0 0.05

=== <span title="Render&nbsp;&rarr;&nbsp;Rain">Override dirY</span> ===

<!-- ID: DM_REND_RAIN_OVERRIDE_DIRY --> Set rain direction Y. Options: -1.0 1.0 -1.0 0.05

=== <span title="Render&nbsp;&rarr;&nbsp;Rain">Override dirZ</span> ===

<!-- ID: DM_REND_RAIN_OVERRIDE_DIRZ --> Set rain direction Z. Options: -1.0 1.0 0.0 0.05

=== <span title="Render&nbsp;&rarr;&nbsp;Rain">Distant noise mask debug</span> ===

<!-- ID: DM_REND_RAIN_DISTANT_NOISE_MASK_DEBUG --> Enable/disable rain distant noise mask debug.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Rain">Override ripple tex size</span> ===

<!-- ID: DM_REND_RAIN_OVERRIDE_RIPPLES_TEX_SIZE --> Override rain ripple texture size.

'''Available Options''': default, 128, 256, 512, 1024

=== <span title="Render&nbsp;&rarr;&nbsp;Rain">Sliding drops obj space</span> ===

<!-- ID: DM_REND_RAIN_SLIDING_DROPS_USE_OBJ_SPACE --> Enable/disable sliding drops object space.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Rain">Override ripples</span> ===

<!-- ID: DM_REND_RAIN_OVERRIDE_RIPPLES --> Enable/disable overriding of rain ripples.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Rain">Ripples count min</span> ===

<!-- ID: DM_REND_RAIN_RIPPLES_COUNT_MIN --> Set rain ripples count minimum.

'''Range Settings''': * Min: 1.0 * Max: 100.0 * Current Value: 10.0 * Step: 1.0

=== <span title="Render&nbsp;&rarr;&nbsp;Rain">Ripples count max</span> ===

<!-- ID: DM_REND_RAIN_RIPPLES_COUNT_MAX --> Set rain ripples count maximum.

'''Range Settings''': * Min: 1.0 * Max: 100.0 * Current Value: 50.0 * Step: 1.0

=== <span title="Render&nbsp;&rarr;&nbsp;Rain">Ripples size min</span> ===

<!-- ID: DM_REND_RAIN_RIPPLES_SIZE_MIN --> Set rain ripples size minimum.

'''Range Settings''': * Min: 1.0 * Max: 20.0 * Current Value: 1.0 * Step: 1.0

=== <span title="Render&nbsp;&rarr;&nbsp;Rain">Ripples size max</span> ===

<!-- ID: DM_REND_RAIN_RIPPLES_SIZE_MAX --> Set rain ripples size maximum.

'''Range Settings''': * Min: 1.0 * Max: 20.0 * Current Value: 5.0 * Step: 1.0

=== <span title="Render&nbsp;&rarr;&nbsp;Rain">Ripples height min</span> ===

<!-- ID: DM_REND_RAIN_RIPPLES_HEIGHT_MIN --> Set rain ripples height minimum.

'''Range Settings''': * Min: 0.0 * Max: 1.0 * Current Value: 0.5 * Step: 0.01

=== <span title="Render&nbsp;&rarr;&nbsp;Rain">Ripples height max</span> ===

<!-- ID: DM_REND_RAIN_RIPPLES_HEIGHT_MAX --> Set rain ripples height maximum.

'''Range Settings''': * Min: 0.0 * Max: 1.0 * Current Value: 1.0 * Step: 0.01

=== <span title="Render&nbsp;&rarr;&nbsp;Rain">Ripples speed</span> ===

<!-- ID: DM_REND_RAIN_RIPPLES_SPEED --> Set rain ripples speed.

'''Range Settings''': * Min: 1.0 * Max: 2000.0 * Current Value: 500.0 * Step: 10.0

=== <span title="Render&nbsp;&rarr;&nbsp;Rain">Ripples damping</span> ===

<!-- ID: DM_REND_RAIN_RIPPLES_DAMPING --> Set rain ripples damping.

'''Range Settings''': * Min: 0.01 * Max: 1.0 * Current Value: 0.04 * Step: 0.01

=== <span title="Render&nbsp;&rarr;&nbsp;Rain">Ripples normal strength</span> ===

<!-- ID: DM_REND_RAIN_RIPPLES_NORMAL_STRENGTH --> Set rain ripples normal strength.

'''Range Settings''': * Min: 0.1 * Max: 20.0 * Current Value: 8.0 * Step: 0.1

=== <span title="Render&nbsp;&rarr;&nbsp;Rain">Ripples reset</span> ===

<!-- ID: DM_REND_RAIN_RIPPLES_RESET --> Enable/disable resetting of rain ripples.

'''Available Options''': false, true

== <span title="Render">Shore Wetness</span> ==

=== <span title="Render&nbsp;&rarr;&nbsp;Shore Wetness">Shore wetness enabled</span> ===

<!-- ID: DM_REND_SHORE_WETNESS_ENABLED --> Enable/disable shore wetness.

'''Available Options''': default, enable, disable

=== <span title="Render&nbsp;&rarr;&nbsp;Shore Wetness">Shore wetness override</span> ===

<!-- ID: DM_REND_SHORE_WETNESS_OVERRIDE --> Enable/disable overriding of shore wetness.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Shore Wetness">Shore wet height above</span> ===

<!-- ID: DM_REND_SHORE_WETNESS_HEIGHT_ABOVE --> Set shore wet height above.

'''Range Settings''':

Min: 0.0

Max: 10.0

Current Value: 0.5

Step: 0.01

=== <span title="Render&nbsp;&rarr;&nbsp;Shore Wetness">Shore wet fade above</span> ===

<!-- ID: DM_REND_SHORE_WETNESS_FADE_ABOVE --> Set shore wet fade above.

'''Range Settings''':

Min: 0.0

Max: 10.0

Current Value: 0.5

Step: 0.01

=== <span title="Render&nbsp;&rarr;&nbsp;Shore Wetness">Shore wet height below</span> ===

<!-- ID: DM_REND_SHORE_WETNESS_HEIGHT_BELOW --> Set shore wet height below.

'''Range Settings''':

Min: 0.0

Max: 10.0

Current Value: 0.5

Step: 0.01

=== <span title="Render&nbsp;&rarr;&nbsp;Shore Wetness">Shore wet fade below</span> ===

<!-- ID: DM_REND_SHORE_WETNESS_FADE_BELOW --> Set shore wet fade below.

'''Range Settings''':

Min: 0.0

Max: 10.0

Current Value: 0.5

Step: 0.01

=== <span title="Render&nbsp;&rarr;&nbsp;Shore Wetness">Shore wet fade coef</span> ===

<!-- ID: DM_REND_SHORE_WETNESS_FADE_COEF --> Set shore wet fade coefficient.

'''Range Settings''':

Min: 0.001

Max: 10.0

Current Value: 1.0

Step: 0.01

=== <span title="Render&nbsp;&rarr;&nbsp;Shore Wetness">Shore wet rough fade start</span> ===

<!-- ID: DM_REND_SHORE_WETNESS_ROUGH_UNDER_FADE_START --> Set shore wet rough fade start.

'''Range Settings''':

Min: 0.0

Max: 10.0

Current Value: 0.0

Step: 0.01

=== <span title="Render&nbsp;&rarr;&nbsp;Shore Wetness">Shore wet rough fade size</span> ===

<!-- ID: DM_REND_SHORE_WETNESS_ROUGH_UNDER_FADE_SIZE --> Set shore wet rough fade size.

'''Range Settings''':

Min: 0.001

Max: 10.0

Current Value: 1.0

Step: 0.01

=== <span title="Render&nbsp;&rarr;&nbsp;Shore Wetness">Shore wet rough coef</span> ===

<!-- ID: DM_REND_SHORE_WETNESS_ROUGH_COEF --> Set shore wet rough coefficient.

'''Range Settings''':

Min: 0.001

Max: 10.0

Current Value: 1.0

Step: 0.01

=== <span title="Render&nbsp;&rarr;&nbsp;Shore Wetness">River wetness enabled</span> ===

<!-- ID: DM_REND_RIVER_WETNESS_ENABLED --> Enable/disable river wetness.

'''Available Options''': default, enable, disable

=== <span title="Render&nbsp;&rarr;&nbsp;Shore Wetness">River wetness override</span> ===

<!-- ID: DM_REND_RIVER_WETNESS_OVERRIDE --> Enable/disable overriding of river wetness.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Shore Wetness">River wet height above</span> ===

<!-- ID: DM_REND_RIVER_WETNESS_HEIGHT_ABOVE --> Set river wet height above.

'''Range Settings''':

Min: 0.0

Max: 10.0

Current Value: 0.5

Step: 0.01

=== <span title="Render&nbsp;&rarr;&nbsp;Shore Wetness">River wet fade above</span> ===

<!-- ID: DM_REND_RIVER_WETNESS_FADE_ABOVE --> Set river wet fade above.

'''Range Settings''':

Min: 0.0

Max: 10.0

Current Value: 0.5

Step: 0.01

=== <span title="Render&nbsp;&rarr;&nbsp;Shore Wetness">River wet height below</span> ===

<!-- ID: DM_REND_RIVER_WETNESS_HEIGHT_BELOW --> Set river wet height below.

'''Range Settings''':

Min: 0.0

Max: 10.0

Current Value: 0.5

Step: 0.01

=== <span title="Render&nbsp;&rarr;&nbsp;Shore Wetness">River wet fade below</span> ===

<!-- ID: DM_REND_RIVER_WETNESS_FADE_BELOW --> Set river wet fade below.

'''Range Settings''':

Min: 0.0

Max: 10.0

Current Value: 0.5

Step: 0.01

=== <span title="Render&nbsp;&rarr;&nbsp;Shore Wetness">River wet fade coef</span> ===

<!-- ID: DM_REND_RIVER_WETNESS_FADE_COEF --> Set river wet fade coefficient.

'''Range Settings''':

Min: 0.001

Max: 10.0

Current Value: 1.0

Step: 0.01

=== <span title="Render&nbsp;&rarr;&nbsp;Shore Wetness">River wet rough coef</span> ===

<!-- ID: DM_REND_RIVER_WETNESS_ROUGH_COEF --> Set river wet rough coefficient.

'''Range Settings''':

Min: 0.001

Max: 10.0

Current Value: 1.0

Step: 0.01

== <span title="Render">LensFlares</span> ==

=== <span title="Render&nbsp;&rarr;&nbsp;LensFlares">Debug render</span> ===

<!-- ID: DM_REND_LENSFLARE_DEBUG_RENDER --> Enable/disable lens flare debug rendering.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;LensFlares">HalfRes render</span> ===

<!-- ID: DM_REND_LENSFLARE_HALF_RES --> Set half resolution render for lens flares.

'''Available Options''': no override, false, true

=== <span title="Render&nbsp;&rarr;&nbsp;LensFlares">Force flare dirlight</span> ===

<!-- ID: DM_REND_LENSFLARE_OVERRIDE_DIRLIGHT --> Set force flare dirlight. Options: -1 100 -1 1

=== <span title="Render&nbsp;&rarr;&nbsp;LensFlares">Force flare pointlight</span> ===

<!-- ID: DM_REND_LENSFLARE_OVERRIDE_POINTLIGHT --> Set force flare pointlight. Options: -1 100 -1 1

=== <span title="Render&nbsp;&rarr;&nbsp;LensFlares">Force flare spotlight</span> ===

<!-- ID: DM_REND_LENSFLARE_OVERRIDE_SPOTLIGHT --> Set force flare spotlight. Options: -1 100 -1 1

=== <span title="Render&nbsp;&rarr;&nbsp;LensFlares">Override flare set</span> ===

<!-- ID: DM_REND_LENSFLARE_OVERRIDE_FLARE_SET --> Override lens flare set.

'''Available Options''': no override, none, 1st person, 3rd person

=== <span title="Render&nbsp;&rarr;&nbsp;LensFlares">Override offset spot</span> ===

<!-- ID: DM_REND_LENSFLARE_OVERRIDE_FLARE_OFFSET_SPOT --> Enable/disable overriding of offset spot for lens flares.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;LensFlares">Offset spot</span> ===

<!-- ID: DM_REND_LENSFLARE_OVERRIDE_FLARE_OFFSET_SPOT_VAL --> Set offset spot for lens flares. Options: -2 2 0 0.01

=== <span title="Render&nbsp;&rarr;&nbsp;LensFlares">Override offset point</span> ===

<!-- ID: DM_REND_LENSFLARE_OVERRIDE_FLARE_OFFSET_POINT --> Enable/disable overriding of offset point for lens flares.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;LensFlares">Offset point</span> ===

<!-- ID: DM_REND_LENSFLARE_OVERRIDE_FLARE_OFFSET_POINT_VAL --> Set offset point for lens flares. Options: -2 2 0 0.01

=== <span title="Render&nbsp;&rarr;&nbsp;LensFlares">Use new occl.system</span> ===

<!-- ID: DM_REND_LENSFLARE_OVERRIDE_OCCLUSION_SYSTEM --> Set new occlusion system for lens flares.

'''Available Options''': no override, false, true

=== <span title="Render&nbsp;&rarr;&nbsp;LensFlares">Use intens.occ.for all</span> ===

<!-- ID: DM_REND_LENSFLARE_OVERRIDE_USE_INTENSITY_OCCLUSION_FOR_ALL --> Enable/disable intensity occlusion for all lens flares.

'''Available Options''': no override, false, true

== <span title="Render">Ocean & Water</span> ==

=== <span title="Render&nbsp;&rarr;&nbsp;Ocean & Water">Shore</span> ===

==== <span title="Render&nbsp;&rarr;&nbsp;Ocean & Water&nbsp;&rarr;&nbsp;Shore">Shore enabled</span> ====

<!-- ID: DM_OCEAN_SHORE_ENABLED --> Enable/disable shore rendering.

'''Available Options''': true, false

==== <span title="Render&nbsp;&rarr;&nbsp;Ocean & Water&nbsp;&rarr;&nbsp;Shore">Debug visualize</span> ====

<!-- ID: DM_OCEAN_SHORE_DEBUG_VIS --> Show debug visualization of shore.

'''Available Options''': disabled, waves, DF distance, DF direction, DF near, peaks tex, noise onShore, noise foam start, noise foam, damp wave, damp peak, damp depth, on shore coef, custom foam, mask

==== <span title="Render&nbsp;&rarr;&nbsp;Ocean & Water&nbsp;&rarr;&nbsp;Shore">Debug displacement</span> ====

<!-- ID: DM_OCEAN_SHORE_DEBUG_DISPLACEMENT --> Enable/disable shore displacement debugging.

'''Available Options''': false, true

==== <span title="Render&nbsp;&rarr;&nbsp;Ocean & Water&nbsp;&rarr;&nbsp;Shore">Debug height</span> ====

<!-- ID: DM_OCEAN_SHORE_DEBUG_HEIGHT --> Show shore height debug.

'''Available Options''': none, final, shore, final+shore

==== <span title="Render&nbsp;&rarr;&nbsp;Ocean & Water&nbsp;&rarr;&nbsp;Shore">Use height lerp</span> ====

<!-- ID: DM_OCEAN_SHORE_HEIGHT_LERP --> Enable/disable height lerp for shore.

'''Available Options''': false, true

==== <span title="Render&nbsp;&rarr;&nbsp;Ocean & Water&nbsp;&rarr;&nbsp;Shore">Force live preview each frame</span> ====

<!-- ID: DM_OCEAN_SHORE_FORCE_LIVE_PREVIEW --> Enable/disable forcing live preview for shore.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Ocean & Water">WaterErase</span> ===

==== <span title="Render&nbsp;&rarr;&nbsp;Ocean & Water&nbsp;&rarr;&nbsp;WaterErase">Water erase enabled</span> ====

<!-- ID: DM_REND_WATER_ERASE_ENABLED --> Enable/disable water erase.

'''Available Options''': true, false

==== <span title="Render&nbsp;&rarr;&nbsp;Ocean & Water&nbsp;&rarr;&nbsp;WaterErase">Debug visualize</span> ====

<!-- ID: DM_REND_WATER_ERASE_DEBUG_VIS --> Show water erase debug visualization.

'''Available Options''': disabled, front faces, back faces, front & back

=== <span title="Render&nbsp;&rarr;&nbsp;Ocean & Water">Ocean render</span> ===

<!-- ID: DM_REND_OCEAN --> Set ocean render mode.

'''Available Options''': enabled, disable simulation, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;Ocean & Water">Show ocean tex</span> ===

<!-- ID: DM_REND_OCEAN_SHOWTEX --> Display ocean texture.

'''Available Options''': disable, height, displaceX, displaceZ, normal, foam, UW topdown, UW topdown depth, UW geom depth

=== <span title="Render&nbsp;&rarr;&nbsp;Ocean & Water">Tex size</span> ===

<!-- ID: DM_REND_OCEAN_SHOWTEX_SIZE --> Set ocean debug texture size.

'''Available Options''': 1, 2, 3, 4, 0.25, 0.33, 0.5

=== <span title="Render&nbsp;&rarr;&nbsp;Ocean & Water">Water bodies</span> ===

<!-- ID: DM_REND_WATERBODIES --> Show water bodies.

'''Available Options''': invisible, camera, all

=== <span title="Render&nbsp;&rarr;&nbsp;Ocean & Water">Ocean foam</span> ===

<!-- ID: DM_REND_OCEAN_FOAM --> Set ocean foam mode.

'''Available Options''': enabled, mask, foam

== <span title="Render">Atmosphere</span> ==

=== <span title="Render&nbsp;&rarr;&nbsp;Atmosphere">Show Sky LUTs</span> ===

<!-- ID: DM_REND_ATMOSPHERE_SHOW_SKYLUTS --> Enable/disable showing of sky LUTs.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Atmosphere">Show CameraVolume</span> ===

<!-- ID: DM_REND_ATMOSPHERE_SHOW_CAMERAVOLUME --> Enable/disable showing of CameraVolume.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Atmosphere">FullScreen</span> ===

<!-- ID: DM_REND_ATMOSPHERE_SHOW_CAMERAVOLUME_FULLSCREEN --> Enable/disable fullscreen view for CameraVolume.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Atmosphere">Haze source</span> ===

<!-- ID: DM_REND_ATMOSPHERE_HAZE_MODE --> Set haze source for atmosphere.

'''Available Options''': User(CloudsCycle), Atmosphere, GlobalProbe

=== <span title="Render&nbsp;&rarr;&nbsp;Atmosphere">Enable a.fog shadows</span> ===

<!-- ID: DM_REND_ATMOSPHERE_SHADOWS_ANALYTICAL_FOG --> Enable/disable analytical fog shadows.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Atmosphere">Use SkyAmbient tex.</span> ===

<!-- ID: DM_REND_ATMOSPHERE_USE_SKY_AMBIENT_TEX --> Enable/disable use of sky ambient texture.

'''Available Options''': true, false

=== <span title="Render&nbsp;&rarr;&nbsp;Atmosphere">Probe fake</span> ===

<!-- ID: DM_REND_ATMOSPHERE_USE_SKY_PROBEAMBIENT_TEX --> Set probe ambient for atmosphere.

'''Available Options''': probe lut, sky lut, original

=== <span title="Render&nbsp;&rarr;&nbsp;Atmosphere">Overcast fix.</span> ===

<!-- ID: DM_REND_ATMOSPHERE_OVERCAST_FIX --> Set overcast fix mode for atmosphere.

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;Atmosphere">Original lighting</span> ===

<!-- ID: DM_REND_ATMOSPHERE_ORIGINAL --> Set original lighting mode for atmosphere.

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;Atmosphere">Final output brightness mod.</span> ===

<!-- ID: DM_REND_ATMOSPHERE_OUTPUT_MOD --> Enable/disable final brightness modification for atmosphere.

'''Available Options''': disabled, enabled

=== <span title="Render&nbsp;&rarr;&nbsp;Atmosphere">Show Fog Debug.</span> ===

<!-- ID: DM_REND_ATMOSPHERE_SHOW_FOG_DEBUG --> Enable/disable fog debugging visualization.

'''Available Options''': disabled, enabled

=== <span title="Render&nbsp;&rarr;&nbsp;Atmosphere">Show constellations</span> ===

<!-- ID: DM_REND_ATMOSPHERE_SHOW_CONSTELLATIONS --> Enable/disable rendering of constellations.

'''Available Options''': false, true

== <span title="Render">Volumetric Clouds</span> ==

=== <span title="Render&nbsp;&rarr;&nbsp;Volumetric Clouds">Use New</span> ===

<!-- ID: DM_REND_CLOUDS_USE_NEW --> Use the new volumetric cloud system.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Volumetric Clouds">Render clouds</span> ===

<!-- ID: DM_REND_CLOUDS --> Enable/disable volumetric cloud rendering.

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;Volumetric Clouds">Render Mode</span> ===

<!-- ID: DM_REND_CLOUDS_RENDER_MODE --> Set volumetric cloud render mode.

'''Available Options''': Quarter, Full, Experimental

=== <span title="Render&nbsp;&rarr;&nbsp;Volumetric Clouds">Output Optimization</span> ===

<!-- ID: DM_REND_CLOUDS_OUTPUT_OPTIMIZATION --> Set volumetric cloud output optimization.

'''Available Options''': default, none, vertexShader, CPU

=== <span title="Render&nbsp;&rarr;&nbsp;Volumetric Clouds">Show Output Optim Diag</span> ===

<!-- ID: DM_REND_CLOUDS_SHOW_OUTPUT_OPTIM_DIAG --> Show output optimization diagnostic for clouds.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Volumetric Clouds">Apply cycle values</span> ===

<!-- ID: DM_WEATHER_APPLY_CLOUD_VALUES --> Apply cycle values for clouds.

'''Available Options''': true, false

=== <span title="Render&nbsp;&rarr;&nbsp;Volumetric Clouds">Sky light mode</span> ===

<!-- ID: DM_REND_CLOUDS_AMBIENT_TYPE --> Set sky light mode for clouds.

'''Available Options''': Default(Artistic), New(Probe+Atmo), Gray, PBR(OriginalTechnique)

=== <span title="Render&nbsp;&rarr;&nbsp;Volumetric Clouds">Disable direct light</span> ===

<!-- ID: DM_REND_CLOUDS_DISABLE_DIRECT_LIGHT --> Disable direct light for clouds.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Volumetric Clouds">Enable occlusion map</span> ===

<!-- ID: DM_REND_CLOUDS_OCCL_MAP --> Enable/disable occlusion map for clouds.

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;Volumetric Clouds">Disable wind</span> ===

<!-- ID: DM_REND_CLOUDS_DISABLE_WIND --> Enable/disable wind for clouds.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Volumetric Clouds">Stop wind</span> ===

<!-- ID: DM_REND_CLOUDS_STOP_WIND --> Stop wind for clouds.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Volumetric Clouds">Show cloud lighting</span> ===

<!-- ID: DM_REND_CLOUDS_SHOW_CLOUD_LIGHTING --> Show or hide cloud lighting visualization.

'''Available Options''': disabled, enabled

=== <span title="Render&nbsp;&rarr;&nbsp;Volumetric Clouds">Force noise recompute</span> ===

<!-- ID: DM_REND_CLOUDS_FORCE_NOISE_RECOMPUTE --> Force recomputation of cloud noise.

'''Available Options''': disabled, enabled

=== <span title="Render&nbsp;&rarr;&nbsp;Volumetric Clouds">Show detail noise</span> ===

<!-- ID: DM_REND_CLOUDS_SHOW_DETAIL_NOISE --> Enable/disable detail noise visualization for clouds.

'''Available Options''': disabled, enabled

=== <span title="Render&nbsp;&rarr;&nbsp;Volumetric Clouds">Show noise tiling</span> ===

<!-- ID: DM_REND_CLOUDS_SHOW_NOISE_TILING --> Set noise tiling visualization for clouds.

'''Available Options''': disabled, base, middle, detail, newBase_R, newBase_G, newBase_B, newBase_A, newDetail_R, newDetail_G, newDetail_B, newDetail_A

=== <span title="Render&nbsp;&rarr;&nbsp;Volumetric Clouds">Show noise tiling</span> ===

<!-- ID: DM_REND_CLOUDS_SHOW_NOISE_TILING --> Set noise tiling visualization for clouds (base, middle, detail).

'''Available Options''': disabled, base, middle, detail

=== <span title="Render&nbsp;&rarr;&nbsp;Volumetric Clouds">Show height detail noise</span> ===

<!-- ID: DM_REND_CLOUDS_SHOW_HEIGHT_DETAIL_TEX --> Enable/disable height detail noise texture visualization.

'''Available Options''': disabled, enabled

=== <span title="Render&nbsp;&rarr;&nbsp;Volumetric Clouds">Detail noise resolution</span> ===

<!-- ID: DM_REND_CLOUDS_DETAIL_NOISE_RESOLUTION --> Set resolution of detail noise for clouds.

'''Available Options''': default, 16, 32, 64, 128, 256, 512

=== <span title="Render&nbsp;&rarr;&nbsp;Volumetric Clouds">Weather map resolution</span> ===

<!-- ID: DM_REND_CLOUDS_WEATHER_MAP_RESOLUTION --> Set weather map resolution for clouds.

'''Available Options''': default, 256, 512, 1024, 2048

=== <span title="Render&nbsp;&rarr;&nbsp;Volumetric Clouds">Temporal multiplier</span> ===

<!-- ID: DM_REND_CLOUDS_TEMPORAL_MULTIPLIER --> Set temporal multiplier for clouds.

'''Range Settings''':

Min: 0

Max: 5

Current Value: 0.0

Step: 0.01

=== <span title="Render&nbsp;&rarr;&nbsp;Volumetric Clouds">Max. Num. samples</span> ===

<!-- ID: DM_REND_CLOUDS_NUM_SAMPLES --> Set max number of samples for clouds.

'''Range Settings''':

Min: 0

Max: 256

Current Value: 0.0

Step: 1.0

=== <span title="Render&nbsp;&rarr;&nbsp;Volumetric Clouds">HeightMin</span> ===

<!-- ID: DM_REND_CLOUDS_HEIGHT_MIN --> Set minimum height for clouds.

'''Range Settings''':

Min: 0

Max: 20000

Current Value: 0.0

Step: 10.0

=== <span title="Render&nbsp;&rarr;&nbsp;Volumetric Clouds">Show shadowmap</span> ===

<!-- ID: DM_REND_CLOUDS_SHOW_SHADOWMAP --> Enable/disable showing of shadow map for clouds.

'''Available Options''': disabled, enabled

=== <span title="Render&nbsp;&rarr;&nbsp;Volumetric Clouds">Shadowmap resolution</span> ===

<!-- ID: DM_REND_CLOUDS_SHADOWMAP_RESOLUTION --> Set shadow map resolution for clouds.

'''Range Settings''':

Min: 0

Max: 256

Current Value: 0

Step: 1

=== <span title="Render&nbsp;&rarr;&nbsp;Volumetric Clouds">Shadowmap dispatches p. frame</span> ===

<!-- ID: DM_REND_CLOUDS_SHADOWMAP_DISPATCHES_PER_FRAME --> Set shadow map dispatches per frame for clouds.

'''Range Settings''':

Min: 0

Max: 4

Current Value: 0

Step: 1

=== <span title="Render&nbsp;&rarr;&nbsp;Volumetric Clouds">Debug shape</span> ===

<!-- ID: DM_REND_CLOUDS_DEBUG_SHAPE --> Set debug shape visualization for clouds.

'''Available Options''': none, cylinders, spheres

=== <span title="Render&nbsp;&rarr;&nbsp;Volumetric Clouds">haze value</span> ===

<!-- ID: DM_REND_CLOUDS_HAZE_VALUE --> Set haze value for clouds.

'''Range Settings''':

Min: 0.0001

Max: 0.1

Current Value: 0.018

Step: 0.001

=== <span title="Render&nbsp;&rarr;&nbsp;Volumetric Clouds">Enable dist. fog</span> ===

<!-- ID: DM_REND_CLOUDS_ENABLE_DIST_FOG --> Enable/disable distance fog for clouds.

'''Available Options''': enabled, disabled

=== <span title="Render&nbsp;&rarr;&nbsp;Volumetric Clouds">dist. fog range</span> ===

<!-- ID: DM_REND_CLOUDS_DIST_FOG_RANGE --> Set distance fog range for clouds.

'''Range Settings''':

Min: 0

Max: 400000

Current Value: 65000

Step: 1000

=== <span title="Render&nbsp;&rarr;&nbsp;Volumetric Clouds">debug detail noise weights</span> ===

<!-- ID: DM_REND_CLOUDS_DEBUG_MAIN_SHAPE_NOISE_WEIGHT --> Enable/disable main shape noise weights debug.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Volumetric Clouds">disable noise(middle,micro)</span> ===

<!-- ID: DM_REND_CLOUDS_DISABLE_NOISE --> Enable/disable noise (middle, micro) for clouds.

'''Available Options''': false, true

=== <span title="Render&nbsp;&rarr;&nbsp;Volumetric Clouds">offet X</span> ===

<!-- ID: DM_REND_CLOUDS_OFFSET_X --> Set offset X for clouds.

'''Range Settings''':

Min: 0

Max: 1000000

Current Value: 0

Step: 10

=== <span title="Render&nbsp;&rarr;&nbsp;Volumetric Clouds">offet Z</span> ===

<!-- ID: DM_REND_CLOUDS_OFFSET_Z --> Set offset Z for clouds.

'''Range Settings''':

Min: 0

Max: 1000000

Current Value: 0

Step: 10

== <span title="Render">No render</span> ==

<!-- ID: DM_REND_NORENDER --> Disable rendering.

'''Available Options''': false, true

== <span title="Render">Shape instancing</span> ==

<!-- ID: DM_REND_SHAPE_INSTANCING --> Enable/disable shape instancing.

'''Available Options''': enabled, disabled

== <span title="Render">Render debug mode</span> ==

<!-- ID: DM_REND_SPECIAL_MODE --> Set render debug mode.

'''Hotkey''': {{Controls|RCtrl|RAlt|W}}

'''Available Options''': none, wire, wire only, ovedraw, overdrawZ, albedo, world norm, roughness, rough.scene, metalness, mask, ao, vert.color, sss, detail light, diffuse, iblDiffuse, reflection, iblReflection, full diffuse, full reflection, emissive, albedo lin, wetness, porosity, vertex norms, vfx, global layer

== <span title="Render">Widgets</span> ==

<!-- ID: DM_REND_WIDGETS --> Set widget rendering mode.

'''Available Options''': on, onlyRT, off

== <span title="Render">Active GPU wait</span> ==

<!-- ID: DM_REND_ACTIVE_GPU_WAIT --> Enable/disable active GPU wait.

'''Available Options''': false, true

== <span title="Render">Allocator stats</span> ==

<!-- ID: DM_REND_ALLOCATOR_STAT --> Set allocator statistics display.

'''Available Options''': none, show, dump

== <span title="Render">Show VRAM resources</span> ==

<!-- ID: DM_REND_RESOURCES --> Enable/disable showing of VRAM resources.

'''Available Options''': false, true

= <span title="Scene">Scene</span> =

== <span title="Scene">Filter</span> ==

=== <span title="Scene&nbsp;&rarr;&nbsp;Filter">MeshObject</span> ===

<!-- ID: DM_SCENE_FILTER_MESH --> Enable/disable MeshObject filter.

'''Available Options''': enabled, disabled

=== <span title="Scene&nbsp;&rarr;&nbsp;Filter">Particle</span> ===

<!-- ID: DM_SCENE_FILTER_PARTICLE --> Enable/disable Particle filter.

'''Available Options''': enabled, disabled

== <span title="Scene">Occluders</span> ==

=== <span title="Scene">Occluders</span> ===

<!-- ID: DM_SCENE_OCCLUDERS --> Enable/disable occluders.

'''Available Options''': true, false

=== <span title="Scene&nbsp;&rarr;&nbsp;Occluders">Occlude entities</span> ===

<!-- ID: DM_SCENE_OCCLUDERS_ENTS --> Enable/disable occluding of entities.

'''Available Options''': true, false

=== <span title="Scene&nbsp;&rarr;&nbsp;Occluders">Show active occluders</span> ===

<!-- ID: DM_SCENE_OCCLUDERS_ACTIVE --> Show or hide active occluders.

'''Available Options''': false, true

=== <span title="Scene&nbsp;&rarr;&nbsp;Occluders">Show occluded</span> ===

<!-- ID: DM_SCENE_OCCLUDERS_OCCLUDED --> Show or hide occluded objects.

'''Available Options''': false, true

=== <span title="Scene&nbsp;&rarr;&nbsp;Occluders">Show occluder volumes</span> ===

<!-- ID: DM_SCENE_OCCLUDERS_VOL --> Show or hide occluder volumes.

'''Available Options''': false, true

== <span title="Scene">Terrain Occlusion</span> ==

=== <span title="Scene&nbsp;&rarr;&nbsp;Terrain Occlusion">Terrain occlusion culling</span> ===

<!-- ID: DM_TERR_OCCLUSION_CULLING --> Enable/disable terrain occlusion culling.

'''Available Options''': true, false

=== <span title="Scene&nbsp;&rarr;&nbsp;Terrain Occlusion">Occlusion mode</span> ===

<!-- ID: DM_TERR_OCCLUSION_MODE --> Set terrain occlusion mode.

'''Available Options''': Voxelization, Hybridvoxel

=== <span title="Scene&nbsp;&rarr;&nbsp;Terrain Occlusion">Cull dynamic objects</span> ===

<!-- ID: DM_TERR_OCCLUSION_CULL_DYNAMIC --> Enable/disable culling of dynamic objects.

'''Available Options''': true, false

=== <span title="Scene&nbsp;&rarr;&nbsp;Terrain Occlusion">Cull individual objects</span> ===

<!-- ID: DM_TERR_OCCLUSION_CULL_INDIVIDUAL_OBJECTS --> Enable/disable culling of individual objects.

'''Available Options''': true, false

=== <span title="Scene&nbsp;&rarr;&nbsp;Terrain Occlusion">Cull entity lists</span> ===

<!-- ID: DM_TERR_OCCLUSION_CULL_ENTLIST --> Enable/disable culling of entity lists.

'''Available Options''': true, false

=== <span title="Scene&nbsp;&rarr;&nbsp;Terrain Occlusion">Cull kd-tree leafs</span> ===

<!-- ID: DM_TERR_OCCLUSION_CULL_LEAF --> Enable/disable culling of kd-tree leafs.

'''Available Options''': false, true

=== <span title="Scene&nbsp;&rarr;&nbsp;Terrain Occlusion">Cull terrain</span> ===

<!-- ID: DM_TERR_OCCLUSION_CULL_TERRAIN --> Enable/disable culling of terrain.

'''Available Options''': false, true

=== <span title="Scene&nbsp;&rarr;&nbsp;Terrain Occlusion">Cull kd-tree nodes</span> ===

<!-- ID: DM_TERR_OCCLUSION_CULL_NODE --> Enable/disable culling of kd-tree nodes.

'''Available Options''': true, false

=== <span title="Scene&nbsp;&rarr;&nbsp;Terrain Occlusion"># voxel render jobs</span> ===

<!-- ID: DM_TERR_VOXELDEPTH_NR_REND_JOBS --> Set number of voxel render jobs.

'''Range Settings''': * Min: 1 * Max: 8 * Current Value: 8 * Step: 1

=== <span title="Scene&nbsp;&rarr;&nbsp;Terrain Occlusion">Show depth texture</span> ===

<!-- ID: DM_TERR_VOXELDEPTH_REND_TEXTURE --> Enable/disable depth texture visualization.

'''Available Options''': false, true

=== <span title="Scene&nbsp;&rarr;&nbsp;Terrain Occlusion">Show FOV deb shapes</span> ===

<!-- ID: DM_TERR_VOXELDEPTH_REND_FOV_DEBUGSHAPES --> Enable/disable showing of FOV debug shapes.

'''Available Options''': false, true

=== <span title="Scene&nbsp;&rarr;&nbsp;Terrain Occlusion">Voxel height scale</span> ===

<!-- ID: DM_TERR_VOXELDEPTH_HEIGHT_SCALE --> Set voxel height scale.

'''Range Settings''': * Min: 0.25 * Max: 32 * Current Value: 1 * Step: 0.01

=== <span title="Scene&nbsp;&rarr;&nbsp;Terrain Occlusion">Voxel depth LOD step</span> ===

<!-- ID: DM_TERR_VOXELDEPTH_LOD --> Set voxel depth LOD step.

'''Range Settings''': * Min: 0.01 * Max: 10 * Current Value: 0.25 * Step: 0.01

=== <span title="Scene&nbsp;&rarr;&nbsp;Terrain Occlusion">Depth buffer fraction</span> ===

<!-- ID: DM_TERR_VOXELDEPTH_BUFFER_FRACTION --> Set depth buffer fraction.

'''Range Settings''': * Min: 1 * Max: 100 * Current Value: 16 * Step: 1

=== <span title="Scene&nbsp;&rarr;&nbsp;Terrain Occlusion">Voxel near plane</span> ===

<!-- ID: DM_TERR_VOXELDEPTH_NEAR_PLANE --> Set voxel near plane.

'''Range Settings''': * Min: 1 * Max: 100 * Current Value: 20 * Step: 1

=== <span title="Scene&nbsp;&rarr;&nbsp;Terrain Occlusion">Override far plane</span> ===

<!-- ID: DM_TERR_VOXELDEPTH_OVERRIDE_FAR_PLANE --> Enable/disable overriding of far plane.

'''Available Options''': false, true

=== <span title="Scene&nbsp;&rarr;&nbsp;Terrain Occlusion">Voxel far plane</span> ===

<!-- ID: DM_TERR_VOXELDEPTH_FAR_PLANE --> Set voxel far plane.

'''Range Settings''': * Min: 1 * Max: 5000 * Current Value: 2000 * Step: 50

=== <span title="Scene&nbsp;&rarr;&nbsp;Terrain Occlusion">Show AAB of occluded</span> ===

<!-- ID: DM_TERR_VOXELDEPTH_REND_BB --> Show AAB of occluded objects.

'''Available Options''': None, Occluded, Visible, All

=== <span title="Scene&nbsp;&rarr;&nbsp;Terrain Occlusion">Voxel occlusion check</span> ===

<!-- ID: DM_TERR_VOXELDEPTH_OCC_CHECK_METHOD --> Set voxel occlusion check method.

'''Available Options''': Hi-Z, Full-Z raster

=== <span title="Scene&nbsp;&rarr;&nbsp;Terrain Occlusion">Rasterize AABB</span> ===

<!-- ID: DM_TERR_VOXELDEPTH_OCC_RASTER_AABB --> Enable/disable rasterization of AABBs.

'''Available Options''': false, true

=== <span title="Scene&nbsp;&rarr;&nbsp;Terrain Occlusion">Show rasterized AABB</span> ===

<!-- ID: DM_TERR_VOXELDEPTH_OCC_RASTER_TEXTURE --> Enable/disable showing of rasterized AABBs.

'''Available Options''': false, true

=== <span title="Scene&nbsp;&rarr;&nbsp;Terrain Occlusion">Draw silhouette edges</span> ===

<!-- ID: DM_TERR_VOXELDEPTH_OCC_DRAW_SILHOUETTE_EDGES --> Enable/disable drawing of silhouette edges.

'''Available Options''': false, true

=== <span title="Scene&nbsp;&rarr;&nbsp;Terrain Occlusion">Cull beyond frustum edges</span> ===

<!-- ID: DM_TERR_VOXELDEPTH_CULL_BEYOND_FRUSTUM_EDGES --> Enable/disable culling beyond frustum edges.

'''Available Options''': false, true

=== <span title="Scene&nbsp;&rarr;&nbsp;Terrain Occlusion"># frames reuse voxel buffer</span> ===

<!-- ID: DM_TERR_VOXELDEPTH_REUSE_BUFFER_FRAMES --> Set number of frames to reuse voxel buffer.

'''Range Settings''': * Min: 0 * Max: 60 * Current Value: 0 * Step: 1

=== <span title="Scene&nbsp;&rarr;&nbsp;Terrain Occlusion">Raster size threshold</span> ===

<!-- ID: DM_TERR_HYBRID_OCC_AABB_SIZE_THRESHOLD --> Set raster size threshold.

'''Range Settings''': * Min: 0 * Max: 1024 * Current Value: 64 * Step: 2

== <span title="Scene">Render world</span> ==

<!-- ID: DM_RENDER_WORLD --> Enable/disable world rendering.

'''Available Options''': enabled, disabled

== <span title="Scene">Force vertical FOV</span> ==

<!-- ID: DM_SCENE_FOV --> Force vertical field of view.

'''Available Options''': default, 65, 70, 75, 80, 85, 90, 95, 100, 105, 110, 120, 2.5f, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55

== <span title="Scene">Render world env</span> ==

<!-- ID: DM_RENDER_WORLD_ENVMAP --> Enable/disable rendering of world environment.

'''Available Options''': enabled, disabled

== <span title="Scene">Show clips</span> ==

<!-- ID: DM_SCENE_SHOW_CLIPS --> Show or hide scene clips.

'''Available Options''': disabled, enabled

== <span title="Scene">LOD multiplier</span> ==

<!-- ID: DM_SCENE_LOD_MUL --> Set LOD multiplier.

'''Available Options''': 1, 1.5, 2, 3, 4, 5, 10, 0.001, 0.01, 0.1, 0.25, 0.5

== <span title="Scene">Size multiplier</span> ==

<!-- ID: DM_SCENE_SIZE_MUL --> Set size multiplier.

'''Available Options''': 1, 1.5, 2, 3, 4, 5, 10, 0.001, 0.01, 0.1, 0.25, 0.5

== <span title="Scene">Override object far plane</span> ==

<!-- ID: DM_SCENE_OBJECTSFARPLANE --> Set object far plane override.

'''Range Settings''': * Min: 0 * Max: 50000 * Current Value: 0 * Step: 100

== <span title="Scene">Force clear visent</span> ==

<!-- ID: DM_SCENE_CLEAR_VISIBLE --> Force clear of visible entities.

'''Available Options''': false, true

== <span title="Scene">Render world ents</span> ==

<!-- ID: DM_RENDER_WORLD_ENT --> Enable/disable rendering of world entities.

'''Available Options''': enabled, disabled

== <span title="Scene">Render world leafs</span> ==

<!-- ID: DM_RENDER_WORLD_LEAF --> Enable/disable rendering of world leafs.

'''Available Options''': enabled, disabled

== <span title="Scene">RenderEnts</span> ==

<!-- ID: REND_ENTS --> Enable/disable entities rendering.

'''Available Options''': enabled, disabled

== <span title="Scene">Fast way</span> ==

<!-- ID: DM_REND_FASTWAY --> Enable/disable fast rendering path.

'''Available Options''': false, true

== <span title="Scene">Show light</span> ==

<!-- ID: DM_SCENE_SHOW_GLOBAL_LIGHT --> Set global light to show. Options: -1 32 -1 1

== <span title="Scene">Show active PPs</span> ==

<!-- ID: DM_SCENE_SHOW_PPs --> Show or hide active post processes.

'''Available Options''': false, true

== <span title="Scene">Cube map size</span> ==

<!-- ID: DM_SCENE_CAPTURE_CUBEMAP_SIZE --> Set cubemap size.

'''Available Options''': 32, 16, 32, 64, 128, 256, 512, 1024

== <span title="Scene">Capture cube map</span> ==

<!-- ID: DM_SCENE_CAPTURE_CUBEMAP --> Capture cube map.

'''Available Options''': no, capture, capture&insert

== <span title="Scene">Override far plane</span> ==

<!-- ID: DM_SCENE_FARPLANE --> Set far plane override.

'''Range Settings''': * Min: 0 * Max: 50000 * Current Value: 0 * Step: 100

== <span title="Scene">Force linear depth</span> ==

<!-- ID: DM_SCENE_OVERRIDE_LINDEPTH --> Enable/disable forcing of linear depth.

'''Available Options''': false, true

== <span title="Scene">Linear depth</span> ==

<!-- ID: DM_SCENE_LINDEPTH --> Set linear depth.

'''Range Settings''': * Min: 50 * Max: 5000 * Current Value: 250 * Step: 10

== <span title="Scene">Visualize groups</span> ==

<!-- ID: VISUALIZE_GROUPS --> Enable/disable group visualization.

'''Available Options''': false, true

== <span title="Scene">Colorize objects LODs</span> ==

<!-- ID: DM_OBJECTS_LODS --> Colorize objects by LOD.

'''Available Options''': disabled, colorize, LOD0 only, +LOD1, +LOD2, +LOD3, +LOD4, +LOD5, +LOD6, +LOD7

= <span title="World">World</span> =

== <span title="World">Animation</span> ==

<!-- ID: ANIM_DISABLE_APPLYPOSE --> Enable/disable apply pose in animation.

'''Available Options''': true, false

== <span title="World">Streaming</span> ==

<!-- ID: DM_PROCESS_STREAMING --> Enable/disable world streaming.

'''Available Options''': true, false

== <span title="World">Trace stresstest</span> ==

<!-- ID: DM_TRACE_STRESSTEST --> Set trace stress test mode.

'''Available Options''': none, nearest, any, all, nearestVis, anyVis, allVis

== <span title="World">Query stresstest</span> ==

<!-- ID: DM_QUERY_STRESSTEST --> Enable/disable query stress test.

'''Available Options''': disabled, enabled

== <span title="World">Update stresstest</span> ==

<!-- ID: DM_UPDATE_STRESSTEST --> Enable/disable update stress test.

'''Available Options''': disabled, enabled

== <span title="World">Update MT stresstest</span> ==

<!-- ID: DM_UPDATE_MT_STRESSTEST --> Enable/disable multithreaded update stress test.

'''Available Options''': disabled, enabled

== <span title="World">Show scene tree</span> ==

<!-- ID: DM_SHOW_TREE --> Show scene tree.

'''Available Options''': None, KDTree, QuadTree

== <span title="World">Show entity bounds</span> ==

<!-- ID: DM_SHOW_ENT_BOUNDS --> Show or hide entity bounds.

'''Available Options''': disabled, enabled

== <span title="World">Async traces</span> ==

<!-- ID: DM_ASYNC_TRACE --> Enable/disable asynchronous traces.

'''Available Options''': enabled, disabled

== <span title="World">Async queries</span> ==

<!-- ID: DM_ASYNC_QUERY --> Enable/disable asynchronous queries.

'''Available Options''': enabled, disabled

== <span title="World">Use quadtree</span> ==

<!-- ID: DM_USE_TREE --> Enable/disable quadtree usage.

'''Available Options''': enabled, disabled

== <span title="World">Show AABB</span> ==

<!-- ID: DM_SHOW_AABB --> Show AABB (Axis-Aligned Bounding Box). When you enable "Show AABB" in the Diag Menu, the engine will render these bounding boxes around objects, making them visible to help with debugging. This can be extremely useful for:

* Verifying collision boundaries * Checking if physics objects have appropriate bounds * Debugging spatial issues with entities * Understanding why certain objects might be colliding unexpectedly

'''Hotkey''': {{Controls|LAlt|Num5}}

'''Available Options''': disabled, real, quantized, rendered

== <span title="World">Show multileaf ents.</span> ==

<!-- ID: DM_SHOW_MULTILEAF --> Show or hide multileaf entities.

'''Available Options''': disabled, all, single, multi

== <span title="World">Show active</span> ==

<!-- ID: DM_SHOW_ACTIVE --> Show or hide active entities.

'''Available Options''': enabled, disabled

== <span title="World">Show bones</span> ==

<!-- ID: DM_SHOW_BONES --> Show or hide bones.

'''Available Options''': disabled, enabled

== <span title="World">Show wind emitters</span> ==

<!-- ID: DM_SHOW_WIND --> Show or hide wind emitters.

'''Hotkey''': {{Controls|LCtrl|Num8}}

'''Available Options''': disabled, enabled

== <span title="World">Disable wind</span> ==

<!-- ID: DM_DISABLE_WIND --> Disable wind.

'''Hotkey''': {{Controls|LCtrl|Num9}}

'''Available Options''': disabled, enabled

== <span title="World">Game update</span> ==

<!-- ID: DM_GAMEUPDATE --> Enable/disable game update.

'''Available Options''': enabled, disabled

== <span title="World">MT entity sim</span> ==

<!-- ID: DM_MT_UPDATE --> Enable/disable multithreaded entity simulation.

'''Available Options''': enabled, disabled

== <span title="World">MT entity update</span> ==

<!-- ID: DM_MT_ENT_UPDATE --> Enable/disable multithreaded entity update.

'''Available Options''': enabled, disabled

== <span title="World">Entity diag</span> ==

<!-- ID: DM_WORLD_ENTITY_DIAG --> Enable/disable entity diagnostics.

'''Available Options''': false, true

== <span title="World">Entity hierarchy changes</span> ==

<!-- ID: DM_ENTITY_HIERACHYCHANGE_DIAG --> Enable/disable entity hierarchy change diagnostics.

'''Available Options''': false, true

== <span title="World">Debug prefabs</span> ==

<!-- ID: DM_DEBUG_PREFABS --> Enable/disable debug prefabs.

'''Available Options''': disabled, enabled

== <span title="World">New skeleton</span> ==

<!-- ID: NEW_SKELETON --> Enable/disable new skeleton.

'''Available Options''': false, true

== <span title="World">JobManager Callstack</span> ==

<!-- ID: DM_DIAG_JOBMANAGER --> Set JobManager callstack logging mode.

'''Available Options''': off, ext, all

== <span title="World">JobManager Print CS</span> ==

<!-- ID: DM_DIAG_JOBMANAGER_PRINT --> Set JobManager print callstack mode.

'''Available Options''': off, once, always

== <span title="World">Ambient Life</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_AMBIENT_LIFE --> Enable/disable ambient life.

'''Available Options''': false, true

= <span title="Animation">Animation</span> =

== <span title="Animation">Enable debugger</span> ==

<!-- ID: ENF_DIAG_ANIMSYS_ENABLEDEBUGGER --> Enable/disable animation debugger.

'''Available Options''': disabled, enabled

== <span title="Animation">Root motion always enabled</span> ==

<!-- ID: ENF_DIAG_ANIMSYS_ROOTMOTION_ALWAYS --> Enable/disable root motion always enabled.

'''Available Options''': false, true

== <span title="Animation">Force animation LOD</span> ==

<!-- ID: ENF_DIAG_ANIMSYS_FORCE_LOD --> Set force animation LOD. Options: -1 4 -1 1

== <span title="Animation">Show transforms before IK</span> ==

<!-- ID: ENF_DIAG_ANIMSYS_SHOW_TRANSFORMS_BEFORE_IK --> Enable/disable showing of transforms before IK.

'''Available Options''': false, true

== <span title="Animation">Show transforms after IK</span> ==

<!-- ID: ENF_DIAG_ANIMSYS_SHOW_TRANSFORMS_AFTER_IK --> Enable/disable showing of transforms after IK.

'''Available Options''': false, true

== <span title="Animation">Show IK offsets</span> ==

<!-- ID: ENF_DIAG_ANIMSYS_SHOW_IK_OFFSETS --> Enable/disable showing of IK offsets.

'''Available Options''': false, true

== <span title="Animation">Show IK solver details</span> ==

<!-- ID: ENF_DIAG_ANIMSYS_SHOW_IK_SOLVER_DETAILS --> Enable/disable showing of IK solver details.

'''Available Options''': false, true

== <span title="Animation">Show procedural solver details</span> ==

<!-- ID: ENF_DIAG_ANIMSYS_SHOW_PROCEDURAL --> Enable/disable showing of procedural solver details.

'''Available Options''': false, true

== <span title="Animation">Show cached MS transforms</span> ==

<!-- ID: ENF_DIAG_ANIMSYS_SHOW_MODEL_SPACE_CACHE --> Enable/disable showing of model space cache.

'''Available Options''': false, true

== <span title="Animation">Show RBF details</span> ==

<!-- ID: ENF_DIAG_ANIMSYS_SHOW_RBF_DETAILS --> Enable/disable showing of RBF details.

'''Available Options''': false, true

== <span title="Animation">Record animations</span> ==

<!-- ID: ENF_DIAG_ANIMSYS_ENABLE_ANIMATION_RECORDING --> Enable/disable animation recording.

'''Available Options''': false, true

== <span title="Animation">Record local player</span> ==

<!-- ID: ENF_DIAG_ANIMSYS_ENABLE_ANIMATION_RECORDING_ENTITIES --> Set animation recording entities mode.

'''Available Options''': Only characters, All entities

== <span title="Animation">Animation traffic</span> ==

<!-- ID: ENF_DIAG_ANIMSYS_TRAFFIC --> Enable/disable animation traffic logging.

'''Available Options''': false, true

== <span title="Animation">Min IK blend time</span> ==

<!-- ID: ENF_DIAG_MIN_IK_BLEND_TIME --> Set minimum IK blend time.

'''Range Settings''': * Min: 0.01 * Max: 1 * Current Value: 0.01 * Step: 0.01

= <span title="Physics">Physics</span> =

== <span title="Physics">Settings</span> ==

=== <span title="Physics&nbsp;&rarr;&nbsp;Settings">Update rate</span> ===

<!-- ID: DM_PHYSICS_UPDATE_RATE --> Set physics update rate.

'''Range Settings''':

Min: 20

Max: 1000

Current Value: 60

Step: 10

=== <span title="Physics&nbsp;&rarr;&nbsp;Settings">Max fixed steps</span> ===

<!-- ID: DM_PHYSICS_MAX_STEPS --> Set maximum fixed steps for physics.

'''Range Settings''':

Min: 1

Max: 60

Current Value: 10

Step: 1

=== <span title="Physics&nbsp;&rarr;&nbsp;Settings">Apply</span> ===

<!-- ID: DM_PHYSICS_CHANGE_SETTINGS --> Enable/disable physics settings apply.

'''Available Options''': disabled, enabled

== <span title="Physics">Bullet</span> ==

=== <span title="Physics&nbsp;&rarr;&nbsp;Bullet">Max. Collider Distance</span> ===

<!-- ID: DM_BULLET_COLLIDER_RANGE --> Set maximum distance for Bullet collider.

'''Available Options''': 0, 1, 2, 5, 10, 20, 50, 100, 200, 500

=== <span title="Physics&nbsp;&rarr;&nbsp;Bullet">Draw Bullet shape</span> ===

<!-- ID: DM_BULLET_DRAW_SHAPE --> Enable/disable drawing of Bullet shape.

'''Available Options''': enabled, disabled

=== <span title="Physics&nbsp;&rarr;&nbsp;Bullet">Draw Bullet wireframe</span> ===

<!-- ID: DM_BULLET_DRAW_SHAPE_WIREFRAME --> Enable/disable drawing of Bullet shape wireframe.

'''Available Options''': enabled, disabled

=== <span title="Physics&nbsp;&rarr;&nbsp;Bullet">Draw Bullet shape AABB</span> ===

<!-- ID: DM_BULLET_DRAW_AABB --> Enable/disable drawing of Bullet shape AABB.

'''Available Options''': disabled, enabled

=== <span title="Physics&nbsp;&rarr;&nbsp;Bullet">Draw obj center of mass</span> ===

<!-- ID: DM_BULLET_DRAW_COM --> Enable/disable drawing of object center of mass.

'''Available Options''': disabled, enabled

=== <span title="Physics&nbsp;&rarr;&nbsp;Bullet">Draw Bullet contacts</span> ===

<!-- ID: DM_BULLET_DRAW_CONTACT --> Enable/disable drawing of Bullet contacts.

'''Available Options''': enabled, disabled

=== <span title="Physics&nbsp;&rarr;&nbsp;Bullet">Force sleep Bullet</span> ===

<!-- ID: DM_BULLET_FORCE_SLEEP --> Enable/disable forcing of Bullet to sleep.

'''Available Options''': disabled, enabled

=== <span title="Physics&nbsp;&rarr;&nbsp;Bullet">Profile Bullet</span> ===

<!-- ID: DM_BULLET_PROFILE --> Set threshold for Bullet profiling.

'''Available Options''': disabled, >1ms, >5ms, >10ms, >20ms, >50ms

=== <span title="Physics&nbsp;&rarr;&nbsp;Bullet">Bullet MT</span> ===

<!-- ID: DM_BULLET_MT --> Enable/disable multithreaded Bullet simulation.

'''Available Options''': true, false

== <span title="Physics">Dump contacts on server</span> ==

<!-- ID: GAME_PHYSICS_DUMP_CONTACTS --> Enable/disable server side physics contacts dump.

'''Available Options''': false, true

== <span title="Physics">Show bodies</span> ==

<!-- ID: DM_PHYSICS_SHOW_BODIES --> Show or hide physics bodies. Visible colliders can be controlled with Show layer

'''Hotkey''': {{Controls|LAlt|Num6}}

'''Available Options''': disabled, flat-mesh, transp-mesh, flat+mesh, transp+mesh

== <span title="Physics">Show layer</span> ==

<!-- ID: DM_PHYSICS_SHOW_LAYER --> Show physics bodies by layer. Example layers available:

* '''Filtered''' - default mode, shows all the most important layers, most of the time there is no need to switch away from it * '''Fire geometry''' - "realistic" resolution colliders used for hit detection

[[File:armareforger-diag-menu-show-layers-firegeo.jpg|600x600px]] * '''View geometry''' - used by AIs, acts as solid wall

[[File:armareforger-diag-menu-show-layers-viewgeo.jpg|600x600px]] * '''Foliage''' - used by AIs, slows down detection time (tree crowns, bushes)

[[File:armareforger-diag-menu-show-layers-foliage.jpg|600x600px]] * '''Interaction layer''' - used by UserAction together with fire geometry, when fire geometry is not enough for pleasant user action experience (used on stuff like wire fence doors)

[[File:armareforger-diag-menu-show-layers-interaction-1.jpg|300x300px]][[File:armareforger-diag-menu-show-layers-interaction-2.jpg|300x300px]] * '''Mine layer''' - mines and objects that are meant to collide with mines, such as wheels of vehicles

[[File:armareforger-diag-menu-show-layers-mine.jpg|597x597px]] * '''Char collider''' - used for collision between character and terrain

[[File:armareforger-diag-menu-show-layers-character.jpg|600x600px]] * '''Vehicle simple''' - used for collision between body of the car and non-characters

[[File:armareforger-diag-menu-show-layers-vehicle-simple.jpg|600x600px]]

'''Available Options''': [[Arma Reforger:Collision Layer#Layers Setup|''See Collision Layer page for all options'']]

== <span title="Physics">Show collider type</span> ==

<!-- ID: DM_PHYSICS_SHOW_COLLIDER_TYPE --> Show physics bodies by collider type. See c[[Arma Reforger:FBX Import#Collider%20shape|ollider shape]] pargraph on FBX Import page

'''Available Options''': all, sphere, box, capsule, cylinder, convex, trimesh

== <span title="Physics">Show simulation state</span> ==

<!-- ID: DM_PHYSICS_SHOW_SIMULATION_STATE --> Show physics bodies by simulation state.

'''Available Options''': col+sim, none, collision, simulation, all

== <span title="Physics">Show body type</span> ==

<!-- ID: DM_PHYSICS_SHOW_BODY_TYPE --> Show physics bodies by body type.

'''Available Options''': all, static, dynamic, kinematic

== <span title="Physics">Color by</span> ==

<!-- ID: DM_PHYSICS_COLOR_MODE --> Set physics bodies color mode.

'''Available Options''': collider type, activation state, body type, by entity

== <span title="Physics">Show COM</span> ==

<!-- ID: DM_PHYSICS_SHOW_COM --> Show or hide physics center of mass.

'''Available Options''': false, true

== <span title="Physics">Simulation</span> ==

<!-- ID: DM_PHYSICS_SIMULATION --> Enable/disable physics simulation.

'''Hotkey''': {{Controls|LCtrl|Num7}}

'''Available Options''': enabled, disabled

== <span title="Physics">Dump non-static bodies</span> ==

<!-- ID: DM_PHYSICS_DUMP_ACTIVE_BODIES --> Enable/disable dumping of non-static physics bodies.

'''Available Options''': disabled, enabled

== <span title="Physics">Dump contacts</span> ==

<!-- ID: DM_PHYSICS_DUMP_CONTACTS --> Enable/disable dumping of physics contacts.

'''Available Options''': false, true

== <span title="Physics">Show stats</span> ==

<!-- ID: DM_PHYSICS_STATS --> Set physics statistics display mode.

'''Available Options''': disabled, basic, detailed, all

== <span title="Physics">Show Bullet</span> ==

<!-- ID: DM_PHYSICS_SHOW_BULLET --> Enable/disable showing of Bullet physics debug.

'''Available Options''': disabled, enabled

== <span title="Physics">Scripts</span> ==

=== <span title="Physics&nbsp;&rarr;&nbsp;Scripts">Show interior bounding box</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_SHOW_INTERIOR_BOUNDING_BOX --> Show or hide interior bounding box.

'''Available Options''': false, true

=== <span title="Physics&nbsp;&rarr;&nbsp;Scripts">Show helper trace</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_SHOW_PHYSICS_HELPER_TRACE --> Show or hide physics helper trace.

'''Available Options''': false, true

= <span title="Game">Game</span> =

== <span title="Game">Weather</span> ==

=== <span title="Game&nbsp;&rarr;&nbsp;Weather">Force weather update (WB edit mode)</span> ===

<!-- ID: DM_WEATHER_DIAG_FORCE --> Enable/disable forcing of weather update.

'''Available Options''': false, true

=== <span title="Game&nbsp;&rarr;&nbsp;Weather">Debug time</span> ===

<!-- ID: DM_WEATHER_DEBUG_TIME --> Enable/disable weather debug time.

'''Available Options''': disabled, enabled

=== <span title="Game&nbsp;&rarr;&nbsp;Weather">time</span> ===

<!-- ID: DM_WEATHER_DEBUG_TIME_VALUE --> Set weather debug time.

'''Range Settings''':

Min: 0

Max: 1

Current Value: 0.0

Step: 0.0001

=== <span title="Game&nbsp;&rarr;&nbsp;Weather">Show diag.</span> ===

<!-- ID: DM_WEATHER_DIAG --> Show or hide weather diagnostics.

'''Available Options''': false, true

=== <span title="Game&nbsp;&rarr;&nbsp;Weather">Show diag. values</span> ===

<!-- ID: DM_WEATHER_DIAG_VALUES --> Show or hide weather diagnostic values.

'''Available Options''': false, true

=== <span title="Game&nbsp;&rarr;&nbsp;Weather">Override wet speeds</span> ===

<!-- ID: DM_WEATHER_OVERRIDE_WETNESS_SPEEDS --> Enable/disable overriding wetness speeds.

'''Available Options''': false, true

=== <span title="Game&nbsp;&rarr;&nbsp;Weather">- Wetting speed</span> ===

<!-- ID: DM_WEATHER_CURRENT_WETTING_SPEED --> Set current wetting speed.

'''Range Settings''': * Min: 0 * Max: 100 * Current Value: 1.0 * Step: 0.1

=== <span title="Game&nbsp;&rarr;&nbsp;Weather">- Drying speed</span> ===

<!-- ID: DM_WEATHER_CURRENT_DRYING_SPEED --> Set current drying speed.

'''Range Settings''': * Min: 0 * Max: 100 * Current Value: 1.0 * Step: 0.1

=== <span title="Game&nbsp;&rarr;&nbsp;Weather">Override states</span> ===

<!-- ID: DM_WEATHER_OVERRIDE_STATES --> Enable/disable overriding weather states.

'''Available Options''': false, true

=== <span title="Game&nbsp;&rarr;&nbsp;Weather">- State source</span> ===

<!-- ID: DM_WEATHER_CURRENT_STATE_SOURCE --> Set current weather state source.

'''Range Settings''': * Min: 0 * Max: 10 * Current Value: 0 * Step: 1

=== <span title="Game&nbsp;&rarr;&nbsp;Weather">- State destination</span> ===

<!-- ID: DM_WEATHER_CURRENT_STATE_DEST --> Set current weather state destination.

'''Range Settings''': * Min: 0 * Max: 10 * Current Value: 0 * Step: 1

=== <span title="Game&nbsp;&rarr;&nbsp;Weather">Override variants</span> ===

<!-- ID: DM_WEATHER_OVERRIDE_VARIANTS --> Enable/disable overriding weather variants.

'''Available Options''': false, true

=== <span title="Game&nbsp;&rarr;&nbsp;Weather">- Variant source</span> ===

<!-- ID: DM_WEATHER_CURRENT_VARIANT_SOURCE --> Set current weather variant source.

'''Range Settings''': * Min: 0 * Max: 10 * Current Value: 0 * Step: 1

=== <span title="Game&nbsp;&rarr;&nbsp;Weather">- Variant destination</span> ===

<!-- ID: DM_WEATHER_CURRENT_VARIANT_DEST --> Set current weather variant destination.

'''Range Settings''': * Min: 0 * Max: 10 * Current Value: 0 * Step: 1

== <span title="Game">Dialogue</span> ==

=== <span title="Game&nbsp;&rarr;&nbsp;Dialogue">Demo</span> ===

<!-- ID: DIALOG_DIAG_DEMO --> Enable/disable dialogue demo mode.

'''Available Options''': false, true

== <span title="Game">Superscreenshot to file</span> ==

<!-- ID: DM_STATS_SCREENSHOT_SUPERFILE --> Save super screenshot to file.

'''Hotkey''': {{Controls|LCtrl|LShift|F7}}

'''Available Options''': false, true

== <span title="Game">Screenshot to clipboard</span> ==

<!-- ID: DM_STATS_SCREENSHOT_CLIPBOARD --> Save screenshot to clipboard.

'''Hotkey''': {{Controls|LShift|F7}}

'''Available Options''': false, true

== <span title="Game">Screenshot to file</span> ==

<!-- ID: DM_STATS_SCREENSHOT_FILE --> Save screenshot to file.

'''Hotkey''': {{Controls|LCtrl|F7}}

'''Available Options''': false, true

== <span title="Game">Deployable SpawnPoints</span> ==

=== <span title="Game&nbsp;&rarr;&nbsp;Deployable SpawnPoints">Show Exclusion Zones</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_DEPLOYABLE_SPAWNPOINTS_ENABLE_DIAG --> Show or hide deployable spawn points exclusion zones.

'''Available Options''': false, true

== <span title="Game">Voting</span> ==

=== <span title="Game&nbsp;&rarr;&nbsp;Voting">Enable All Vote Types</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_VOTING_ENABLE_ALL --> Enable/disable all vote types.

'''Available Options''': false, true

== <span title="Game">Show bounds overlap target info</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_GAME_BOUNDS_OVERLAP_PREFAB --> Show or hide bounds overlap target info.

'''Available Options''': false, true

== <span title="Game">Show cursor target info</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_GAME_CURSOR_TARGET_PREFAB --> Show or hide cursor target info containing information about prefab you are looking at and its full path to find it in the Workbench

[[File:armareforger-diag-menu-show-layers-cursor-target-info.jpg|600x600px]]

'''Available Options''': false, true

== <span title="Game">Copy view link</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_GAME_COPY_ENF_VIEW_LINK --> Create [[Arma Reforger:Workbench Links#World Editor|World Editor view link]] using hotkey (LCtrl+LShift+L).

'''Hotkey''': {{Controls|LCtrl|LShift|L}}

'''Available Options''': false, true

= <span title="Sounds">Sounds</span> =

== <span title="Sounds">Audio Debug Context</span> ==

=== <span title="Sounds&nbsp;&rarr;&nbsp;Audio Debug Context">Template Debug Context</span> ===

<!-- ID: DM_TEMPLATE_DEBUG_CONTEXT --> Select audio debug context.

'''Available Options''':

=== <span title="Sounds&nbsp;&rarr;&nbsp;Audio Debug Context">Signal info</span> ===

<!-- ID: DM_TEMPLATE_CTX_SIGNALS --> Enable/disable showing of signal info.

'''Available Options''': false, true

=== <span title="Sounds&nbsp;&rarr;&nbsp;Audio Debug Context">Samples</span> ===

<!-- ID: DM_TEMPLATE_CTX_SAMPLES --> Enable/disable showing of audio samples.

'''Available Options''': false, true

== <span title="Sounds">VON</span> ==

=== <span title="Sounds&nbsp;&rarr;&nbsp;VON">Play recorder VON</span> ===

<!-- ID: DM_VON_DIRECT_PLAY --> Enable/disable playing of recorded VON.

'''Available Options''': false, true

=== <span title="Sounds&nbsp;&rarr;&nbsp;VON">Replace VON with 440Hz</span> ===

<!-- ID: DM_VON_TONE_PLAY --> Enable/disable replacement of VON with 440Hz tone.

'''Available Options''': false, true

=== <span title="Sounds&nbsp;&rarr;&nbsp;VON">Bypass loudness</span> ===

<!-- ID: DM_VON_LOUDNESS --> Enable/disable loudness bypass for VON.

'''Available Options''': false, true

=== <span title="Sounds&nbsp;&rarr;&nbsp;VON">Log starving</span> ===

<!-- ID: DM_VON_LOG_STARVING --> Enable/disable logging of VON starving.

'''Available Options''': false, true

== <span title="Sounds">Sound World</span> ==

=== <span title="Sounds&nbsp;&rarr;&nbsp;Sound World">Sound map</span> ===

<!-- ID: DM_SW_SOUND_MAP_TYPE --> Set sound map type.

'''Available Options''': none, terrain, water

=== <span title="Sounds&nbsp;&rarr;&nbsp;Sound World">Sound map range</span> ===

<!-- ID: DM_SW_SOUND_MAP_RANGE --> Set sound map range.

'''Range Settings''':

Min: 25

Max: 250

Current Value: 50

Step: 25

=== <span title="Sounds&nbsp;&rarr;&nbsp;Sound World">Sound map create</span> ===

<!-- ID: DM_SW_SOUND_MAP_CREATE --> Set sound map creation mode.

'''Available Options''': none, create, create+save

== <span title="Sounds">Sound Geometry</span> ==

=== <span title="Sounds&nbsp;&rarr;&nbsp;Sound Geometry">Sound Geometry Map</span> ===

==== <span title="Sounds&nbsp;&rarr;&nbsp;Sound Geometry&nbsp;&rarr;&nbsp;Sound Geometry Map">Shadowed</span> ====

<!-- ID: DM_SNDGEO_SHADOWED --> Enable/disable showing of shadowed areas.

'''Available Options''': false, true

==== <span title="Sounds&nbsp;&rarr;&nbsp;Sound Geometry&nbsp;&rarr;&nbsp;Sound Geometry Map">Visible</span> ====

<!-- ID: DM_SNDGEO_VISIBLE --> Enable/disable showing of visible areas.

'''Available Options''': false, true

==== <span title="Sounds&nbsp;&rarr;&nbsp;Sound Geometry&nbsp;&rarr;&nbsp;Sound Geometry Map">Obstacle</span> ====

<!-- ID: DM_SNDGEO_OBSTICLE --> Enable/disable showing of obstacles.

'''Available Options''': false, true

==== <span title="Sounds&nbsp;&rarr;&nbsp;Sound Geometry&nbsp;&rarr;&nbsp;Sound Geometry Map">Edge</span> ====

<!-- ID: DM_SNDGEO_EDGE --> Enable/disable showing of edges.

'''Available Options''': false, true

==== <span title="Sounds&nbsp;&rarr;&nbsp;Sound Geometry&nbsp;&rarr;&nbsp;Sound Geometry Map">Diffract</span> ====

<!-- ID: DM_SNDGEO_DIFFRACT --> Enable/disable showing of diffraction.

'''Available Options''': false, true

==== <span title="Sounds&nbsp;&rarr;&nbsp;Sound Geometry&nbsp;&rarr;&nbsp;Sound Geometry Map">Tile Type</span> ====

<!-- ID: DM_SNDGEO_TILETYPE --> Set tile type display for sound geometry.

'''Available Options''': Square, Value

==== <span title="Sounds&nbsp;&rarr;&nbsp;Sound Geometry&nbsp;&rarr;&nbsp;Sound Geometry Map">Sample Visibility</span> ====

<!-- ID: DM_SNDGEO_SAMPLE --> Enable/disable showing of sound sample visibility.

'''Available Options''': false, true

==== <span title="Sounds&nbsp;&rarr;&nbsp;Sound Geometry&nbsp;&rarr;&nbsp;Sound Geometry Map">Set Sample Pos</span> ====

<!-- ID: DM_SNDGEO_SAMPLE_POS --> Enable/disable setting of sound sample position.

'''Available Options''': false, true

=== <span title="Sounds&nbsp;&rarr;&nbsp;Sound Geometry">Enable Diag</span> ===

<!-- ID: DM_SNDGEO_ENABLE --> Enable/disable sound geometry diagnostics.

'''Available Options''': disabled, enabled

=== <span title="Sounds&nbsp;&rarr;&nbsp;Sound Geometry">System Info</span> ===

<!-- ID: DM_SNDGEO_SYSTEM_INFO --> Enable/disable showing of sound geometry system info.

'''Available Options''': disabled, enabled

=== <span title="Sounds&nbsp;&rarr;&nbsp;Sound Geometry">Interior Cache Info</span> ===

<!-- ID: DM_SNDGEO_INTERIOR_CACHE --> Enable/disable showing of sound geometry interior cache info.

'''Available Options''': disabled, enabled

=== <span title="Sounds&nbsp;&rarr;&nbsp;Sound Geometry">Show Update Range</span> ===

<!-- ID: DM_SNDGEO_UPDATE_RANGE --> Enable/disable showing of sound geometry update range.

'''Available Options''': disabled, enabled

=== <span title="Sounds&nbsp;&rarr;&nbsp;Sound Geometry">Object Info</span> ===

<!-- ID: DM_SNDGEO_OBJS --> Enable/disable showing of sound geometry object info.

'''Available Options''': disabled, enabled

=== <span title="Sounds&nbsp;&rarr;&nbsp;Sound Geometry">Show Building Portals</span> ===

<!-- ID: DM_SNDGEO_PORTALS --> Show building portals.

'''Available Options''': none, all, single, per area, active

=== <span title="Sounds&nbsp;&rarr;&nbsp;Sound Geometry">Show Buildings Rect</span> ===

<!-- ID: DM_SNDGEO_BUILDINGS --> Show or hide buildings rectangles.

'''Available Options''': disabled, enabled

=== <span title="Sounds&nbsp;&rarr;&nbsp;Sound Geometry">Hide Building Mesh</span> ===

<!-- ID: DM_SNDGEO_HIDE_MESH --> Hide building mesh.

'''Available Options''': disabled, enabled

=== <span title="Sounds&nbsp;&rarr;&nbsp;Sound Geometry">Obstruction Pos</span> ===

<!-- ID: DM_SNDGEO_OBS_POS --> Enable/disable obstruction position debug.

'''Available Options''': disabled, enabled

=== <span title="Sounds&nbsp;&rarr;&nbsp;Sound Geometry">Freeze Positions</span> ===

<!-- ID: DM_SNDGEO_FREEZE_POSITIONS --> Enable/disable freezing of positions for sound geometry.

'''Available Options''': disabled, enabled

== <span title="Sounds">Interior Handler</span> ==

=== <span title="Sounds&nbsp;&rarr;&nbsp;Interior Handler">InteriorHandler</span> ===

<!-- ID: DM_INTERIOR --> Select interior handler debug.

'''Available Options''':

=== <span title="Sounds&nbsp;&rarr;&nbsp;Interior Handler">Old interior detection</span> ===

<!-- ID: GAME_DIAG_USE_INTERIOR_TRACES --> Enable/disable old interior detection.

'''Available Options''': false, true

=== <span title="Sounds&nbsp;&rarr;&nbsp;Interior Handler">Enable Debug</span> ===

<!-- ID: GAME_DIAG_INTERIOR_HANDLER --> Enable/disable interior handler debug.

'''Available Options''': false, true

=== <span title="Sounds&nbsp;&rarr;&nbsp;Interior Handler">Queries</span> ===

<!-- ID: GAME_DIAG_INTERIOR_QUERY --> Enable/disable interior queries debug.

'''Available Options''': false, true

== <span title="Sounds">SoundMap</span> ==

=== <span title="Sounds">SoundMap</span> ===

<!-- ID: DM_SOUNDMAP --> Select sound map debug.

'''Available Options''':

=== <span title="Sounds&nbsp;&rarr;&nbsp;SoundMap">Show values</span> ===

<!-- ID: DM_SHOW_VALUES --> Enable/disable showing of sound map values.

'''Available Options''': false, true

=== <span title="Sounds&nbsp;&rarr;&nbsp;SoundMap">Draw Regions</span> ===

<!-- ID: DM_DRAW_SOUNDMAP --> Enable/disable drawing of sound map regions.

'''Available Options''': false, true

=== <span title="Sounds&nbsp;&rarr;&nbsp;SoundMap">Layer to draw</span> ===

<!-- ID: DM_SMAP_LAYER_DRAW --> Select sound map layer to draw.

'''Available Options''': Terrain, Coast, Freshwater

=== <span title="Sounds&nbsp;&rarr;&nbsp;SoundMap">Show memory allocated</span> ===

<!-- ID: DM_SOUNDMAP_MEMORY --> Enable/disable showing of sound map memory allocated.

'''Available Options''': false, true

=== <span title="Sounds&nbsp;&rarr;&nbsp;SoundMap">Force generation</span> ===

<!-- ID: DM_FORCE_SOUNDMAP_GENERATION --> Enable/disable forcing of sound map generation.

'''Available Options''': false, true

=== <span title="Sounds&nbsp;&rarr;&nbsp;SoundMap">Force default SoundMap</span> ===

<!-- ID: DM_FORCE_DEFAULT_SOUNDMAP --> Enable/disable forcing of default sound map.

'''Available Options''': false, true

== <span title="Sounds">Chimera Sounds</span> ==

=== <span title="Sounds&nbsp;&rarr;&nbsp;Chimera Sounds">Signals Debug</span> ===

<!-- ID: GAME_DIAG_SS_SIGNALS --> Enable/disable chimera sound signals debug.

'''Available Options''': false, true

=== <span title="Sounds&nbsp;&rarr;&nbsp;Chimera Sounds">Signals Debug by Entity</span> ===

<!-- ID: GAME_DIAG_SS_SIGNALSBYENTITY --> Enable/disable chimera sound signals debug by entity.

'''Available Options''': false, true

== <span title="Sounds">Ambients</span> ==

<!-- ID: GAME_DIAG_AMBIENTS --> Set ambients debug mode.

'''Available Options''': None, River, Coast, Lake

== <span title="Sounds">Freeze cam position</span> ==

<!-- ID: GAME_DIAG_AMBIENTS_FREEZE --> Enable/disable freezing of camera position for ambients debug.

'''Available Options''': false, true

== <span title="Sounds">Debug Com.Sound</span> ==

<!-- ID: GAME_DIAG_COMMUNICATION_DEBUG --> Enable/disable communication sound debug.

'''Available Options''': false, true

== <span title="Sounds">MM - debug info</span> ==

<!-- ID: DM_MUSIC_MANAGER_DEBUGINFO --> Enable/disable music manager debug info.

'''Available Options''': false, true

== <span title="Sounds">Debug RadioBroadcast</span> ==

<!-- ID: GAME_DIAG_RADIO_BROADCAST --> Enable/disable radio broadcast debug.

'''Available Options''': false, true

== <span title="Sounds">Show invalid event</span> ==

<!-- ID: GAME_DIAG_UNKNOWN_EVENT --> Enable/disable showing of invalid sound events.

'''Available Options''': false, true

== <span title="Sounds">Show system info</span> ==

<!-- ID: DM_SOUND_SYSTEM_INFO --> Set sound system info display.

'''Available Options''': none, generic, cmds, alloc

== <span title="Sounds">Resources</span> ==

<!-- ID: DM_SOUND_RESOURCES --> Set sound resources display.

'''Available Options''': none, all, events

== <span title="Sounds">Show categories</span> ==

<!-- ID: DM_SOUND_SHOW_CATEGORIES --> Enable/disable showing of sound categories.

'''Available Options''': false, true

== <span title="Sounds">Show sounds</span> ==

<!-- ID: DM_SOUND_SHOW_PLAYING --> Enable/disable showing of playing sounds.

'''Available Options''': false, true

== <span title="Sounds">Show sounds 3D</span> ==

<!-- ID: DM_SOUND_SHOW_PLAYING_3D --> Set 3D sound visualization.

'''Available Options''': none, all, waiting, playing, fading

== <span title="Sounds">Log source info</span> ==

<!-- ID: DM_SOUND_SOURCE_INFO --> Enable/disable logging of sound source info.

'''Available Options''': false, true

== <span title="Sounds">Com debug</span> ==

<!-- ID: DM_SOUND_DEBUG_COM --> Enable/disable communication debug.

'''Available Options''': false, true

== <span title="Sounds">Enable ITD</span> ==

<!-- ID: DM_SOUND_ITD --> Enable/disable ITD.

'''Available Options''': true, false

== <span title="Sounds">Play recorded VON</span> ==

<!-- ID: DM_SOUND_VON_DIRECT_PLAY --> Enable/disable playing of recorded VON.

'''Available Options''': false, true

== <span title="Sounds">Print Melee Surface</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_SOUNDS_PRINT_MELEESURFACE --> Enable/disable printing of melee surface.

'''Available Options''': false, true

== <span title="Sounds">Reload AmbientSounds Conf</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_SOUNDS_RELOAD_AMBIENT_SOUNDS_CONFIGS --> Enable/disable reloading of ambient sound configurations.

'''Available Options''': false, true

== <span title="Sounds">Random Ambient Sounds</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_SOUNDS_RANDOM_POSITIONAL_SOUNDS --> Enable/disable random positional ambient sounds.

'''Available Options''': false, true

== <span title="Sounds">Show MPD Impulse Values</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_SOUNDS_MPDESTRUCTION_SHOW_IMPULSEVALUES --> Enable/disable showing of MPD impulse values.

'''Available Options''': false, true

== <span title="Sounds">Sound Manager</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_SOUNDS_SOUND_MANAGER --> Enable/disable sound manager debug.

'''Available Options''': false, true

== <span title="Sounds">Global Variables</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_SOUNDS_GLOBAL_VARIABLES --> Enable/disable sound global variables debug.

'''Available Options''': false, true

= <span title="Particles">Particles</span> =

== <span title="Particles">Disable particle render</span> ==

<!-- ID: DM_PARTICLE_DISABLE_RENDER --> Enable/disable particle rendering.

'''Available Options''': false, true

== <span title="Particles">Disable particle update</span> ==

<!-- ID: DM_PARTICLE_DISABLE_UPDATE --> Enable/disable particle update.

'''Available Options''': false, true

== <span title="Particles">Show particle FX LOD</span> ==

<!-- ID: DM_PARTICLE_SHOW_LOD --> Enable/disable showing of particle FX LOD.

'''Available Options''': disabled, enabled

== <span title="Particles">Show 3D rotation spaces</span> ==

<!-- ID: DM_PARTICLE_SHOW_ROT_SPACE --> Set scale for showing of particle rotation spaces.

'''Available Options''': off, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0

== <span title="Particles">Overdraw optimization</span> ==

<!-- ID: DM_PARTICLE_OPTIM --> Set overdraw optimization mode.

'''Available Options''': off, overhead (prerender), overhead (complete), on

== <span title="Particles">Render</span> ==

<!-- ID: DM_PARTICLE_OPTIM_BG --> Set particle render mode.

'''Available Options''': full, background only, no background

== <span title="Particles">Depth write mode</span> ==

<!-- ID: DM_PARTICLE_OPTIM_DEPTH_WRITE --> Set particle depth write mode.

'''Available Options''': full-screen tri, particle draw

== <span title="Particles">Prerender mask</span> ==

<!-- ID: DM_PARTICLE_OPTIM_MASK --> Set particle prerender mask mode.

'''Available Options''': on, off, overhead

== <span title="Particles">Copy from main RT</span> ==

<!-- ID: DM_PARTICLE_MASK_FROM_MAIN_RT --> Enable/disable copying frommain render target.

'''Available Options''': enabled, disabled

== <span title="Particles">Show internal texture</span> ==

<!-- ID: DM_PARTICLE_OPTIM_TEX --> Show particle internal texture.

'''Available Options''': none, depth ranges, alpha pre, alpha full

== <span title="Particles">Show Particle Contacts</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_PARTICLES_CONTACT_COMPONENT --> Enable/disable showing of particle contacts.

'''Available Options''': false, true

= <span title="Input">Input</span> =

== <span title="Input">Sink Input</span> ==

<!-- ID: ENF_DIAG_SINK_INPUT --> Enable/disable sink input.

'''Available Options''': false, true

== <span title="Input">Debug Contexts</span> ==

<!-- ID: ENF_DIAG_DEBUG_INPUT_CONTEXTS --> Set input context debug mode.

'''Available Options''': disabled, active, all

== <span title="Input">Show Cursor</span> ==

<!-- ID: ENF_DIAG_INPUT_SHOW_CURSOR --> Enable/disable showing of input cursor.

'''Available Options''': false, true

= <span title="UI">UI</span> =

== <span title="UI">Disable Loc</span> ==

<!-- ID: ENF_DIAG_DISABLE_LOCALIZATION --> Enable/disable localization.

'''Available Options''': false, true

== <span title="UI">Show UI Diag</span> ==

<!-- ID: ENF_UI_DIAG --> Enable/disable UI diagnostics.

'''Available Options''': false, true

== <span title="UI">Log Construction</span> ==

<!-- ID: ENF_DIAG_LOG_CONSTRUCTION --> Enable/disable logging of UI construction.

'''Available Options''': false, true

== <span title="UI">refactored</span> ==

=== <span title="UI&nbsp;&rarr;&nbsp;refactored">Override config</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_RADIALMENU_CONFIG_DEBUG --> Override radial menu config.

'''Available Options''': true")", false, true

=== <span title="UI&nbsp;&rarr;&nbsp;refactored">Close on open</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_RADIALMENU_CLOSE_ON_RELEASE_OPEN --> Close radial menu on open.

'''Available Options''': true")", false, true

=== <span title="UI&nbsp;&rarr;&nbsp;refactored">Perform on close</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_RADIALMENU_PERFORM_ON_CLOSE --> Perform action on radial menu close.

'''Available Options''': true")", false, true

=== <span title="UI&nbsp;&rarr;&nbsp;refactored">Close on perform</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_RADIALMENU_CLOSE_ON_PERFORM --> Close radial menu on perform.

'''Available Options''': true")", false, true

=== <span title="UI&nbsp;&rarr;&nbsp;refactored">Delect in center</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_RADIALMENU_DESELECT_IN_CENTER --> Deselect radial menu in center.

'''Available Options''': true")", false, true

=== <span title="UI&nbsp;&rarr;&nbsp;refactored">Large size</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_RADIALMENU_USE_LARGE_SIZE --> Use large size for radial menu.

'''Available Options''': true")", false, true

=== <span title="UI&nbsp;&rarr;&nbsp;refactored">Override size</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_RADIALMENU_CUSTOM_SIZE_ENABLE --> Override radial menu custom size.

'''Available Options''': true")", false, true

=== <span title="UI&nbsp;&rarr;&nbsp;refactored">Sustom size</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_RADIALMENU_CUSTOM_SIZE --> Set custom radial menu size.

'''Range Settings''':

Min: 100

Max: 1000

Current Value: 100

Step: 1

=== <span title="UI&nbsp;&rarr;&nbsp;refactored">Entries setup</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_RADIALMENU_ENTRY_COUNT_ENABLE --> Enable/disable custom entry count for radial menu.

'''Available Options''': true")", false, true

=== <span title="UI&nbsp;&rarr;&nbsp;refactored">Entries</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_RADIALMENU_ENTRY_COUNT --> Set custom entry count for radial menu.

'''Range Settings''':

Min: 2

Max: 32

Current Value: 2

Step: 1

== <span title="UI">Close All Menus</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_UI_CLOSE_ALL_MENUS --> Close all menus.

'''Available Options''': false, true

== <span title="UI">Open Main Menu</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_UI_OPEN_MAIN_MENU --> Open main menu.

'''Available Options''': false, true

== <span title="UI">Log widgets under cursor</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_UI_LOG_UNDER_CURSOR --> Enable/disable logging of widgets under cursor.

'''Available Options''': false, true

== <span title="UI">Ignore hint persistency</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_HINT_IGNORE_SHOWN --> Enable/disable ignoring of hint persistency.

'''Available Options''': false, true

== <span title="UI">Enable map debug menu</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_UI_MAP_DEBUG_OPTIONS --> Enable/disable map debug menu.

'''Available Options''': false, true

== <span title="UI">Show all settings</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_UI_SHOW_ALL_SETTINGS --> Enable/disable showing of all UI settings.

'''Available Options''': false, true

= <span title="AI">AI</span> =

== <span title="AI">Performance</span> ==

=== <span title="AI&nbsp;&rarr;&nbsp;Performance">Show IsAIActivated</span> ===

<!-- ID: AI_DIAG_ACTIVE_AI --> Enable/disable showing of IsAIActivated flag.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Performance">AILib counters</span> ===

<!-- ID: ailib::AILIB_DIAG_AI_COUNTERS --> Enable/disable AI library counters.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Performance">Load balancing</span> ===

<!-- ID: ailib::AILIB_LOAD_BALANCING --> Enable/disable AI load balancing.

'''Available Options''': true, false

=== <span title="AI&nbsp;&rarr;&nbsp;Performance">Forced AI simulation LOD</span> ===

<!-- ID: ailib::AILIB_FORCED_LOD --> Set forced AI simulation LOD.

'''Range Settings''':

Min: -1

Max: 10

Current Value: -1

Step: 1

=== <span title="AI&nbsp;&rarr;&nbsp;Performance">BT holder</span> ===

<!-- ID: ailib::AILIB_DIAG_BT_HOLDER --> Enable/disable BT holder debug.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Performance">AI Limits</span> ===

<!-- ID: ailib::AILIB_DIAG_LIMITS --> Enable/disable AI limits debug.

'''Available Options''': false, true

== <span title="AI">Navmesh</span> ==

=== <span title="AI&nbsp;&rarr;&nbsp;Navmesh">Show NavMesh</span> ===

<!-- ID: DM_NM --> Enable/disable showing of NavMesh.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Navmesh">Generate without navlinks</span> ===

<!-- ID: DM_GENERATE_NAVMESH_WITH_NAVLINKS --> Enable/disable generation of NavMesh without navlinks.

'''Available Options''': true, false

=== <span title="AI&nbsp;&rarr;&nbsp;Navmesh">Show links between polygons</span> ===

<!-- ID: DM_POLY_LINKS --> Enable/disable showing of links between polygons.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Navmesh">Navlinks Validation</span> ===

<!-- ID: DM_NAVLINKS --> Enable/disable Navlinks validation.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Navmesh">Navlink Active Direction</span> ===

<!-- ID: DM_NAVLINKS_ACTIVE_DIRECTION --> Enable/disable showing of Navlink active direction.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Navmesh">Show Navmesh Project Index</span> ===

<!-- ID: DM_NAVMESH_FILE_TO_SHOW --> Set Navmesh project index to show.

'''Range Settings''': * Min: 0 * Max: 1000 * Current Value: 0 * Step: 1

=== <span title="AI&nbsp;&rarr;&nbsp;Navmesh">Ignore area costs</span> ===

<!-- ID: DM_EQUAL_PATH_WEIGHTS --> Enable/disable ignoring of area costs for pathfinding.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Navmesh">Path smoothing (on/off)</span> ===

<!-- ID: DM_PATH_SMOOTHING --> Set path smoothing mode.

'''Available Options''': default, on, off

== <span title="AI">Movement</span> ==

=== <span title="AI&nbsp;&rarr;&nbsp;Movement">Path</span> ===

<!-- ID: ailib::AILIB_DIAG_MOVEMENT_PATH --> Enable/disable path debug.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Movement">Path index</span> ===

<!-- ID: ailib::AILIB_DIAG_MOVEMENT_CURRENTPATHINDEX --> Enable/disable showing of current path index.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Movement">Obstacle Avoidance diag</span> ===

<!-- ID: ailib::AILIB_DIAG_OBSTACLE_AVOIDANCE --> Enable/disable obstacle avoidance debug.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Movement">Current Navlink</span> ===

<!-- ID: ailib::AILIB_DIAG_MOVEMENT_NAVLINK --> Enable/disable showing of current Navlink.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Movement">Request parameters</span> ===

<!-- ID: ailib::AILIB_DIAG_MOVEMENT_REQUESTPARAMS --> Enable/disable showing of request parameters.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Movement">Movement parameters</span> ===

<!-- ID: ailib::AILIB_DIAG_MOVEMENT_MOVEPARAMS --> Enable/disable showing of movement parameters.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Movement">Request Target</span> ===

<!-- ID: ailib::AILIB_DIAG_MOVEMENT_FINALPOSITION --> Enable/disable showing of request target.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Movement">Movement Target</span> ===

<!-- ID: ailib::AILIB_DIAG_MOVEMENT_POS --> Enable/disable showing of movement target.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Movement">Orientation Target</span> ===

<!-- ID: ailib::AILIB_DIAG_MOVEMENT_ORIENT --> Enable/disable showing of orientation target.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Movement">Formation offsets</span> ===

<!-- ID: ailib::AILIB_DIAG_GROUP_FORMATION --> Set formation offsets debug mode.

'''Available Options''': off, projected, default, both

=== <span title="AI&nbsp;&rarr;&nbsp;Movement">Formation Center</span> ===

<!-- ID: ailib::AILIB_DIAG_GROUP_FORMATION_CENTER --> Enable/disable showing of formation center.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Movement">Move Handlers</span> ===

<!-- ID: ailib::AILIB_DIAG_GROUP_HANDLERS --> Enable/disable showing of move handlers.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Movement">Stuck Teleport</span> ===

<!-- ID: ailib::AILIB_DIAG_MOVEMENT_TELEPORT_IF_STUCK --> Enable/disable teleport if stuck.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Movement">Out of Navmesh Teleport</span> ===

<!-- ID: ailib::AILIB_DIAG_MOVEMENT_TELEPORT_IF_OUT_OF_NAVMESH --> Enable/disable teleport if out of NavMesh.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Movement">Memory</span> ===

<!-- ID: ailib::AILIB_DIAG_MOVEMENT_MEMORY --> Enable/disable showing of movement memory.

'''Available Options''': false, true

== <span title="AI">Pathfinding</span> ==

=== <span title="AI&nbsp;&rarr;&nbsp;Pathfinding">Debug of AStar</span> ===

<!-- ID: ailib::AILIB_DIAG_ASTAR_DEBUG --> Enable/disable AStar debug.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Pathfinding">Make a step of AStar</span> ===

<!-- ID: ailib::AILIB_DIAG_ASTAR_STEP --> Step AStar pathfinding.

'''Hotkey''': {{Controls|LCtrl|LAlt|V}}

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Pathfinding">Pathfinding component</span> ===

<!-- ID: ailib::AILIB_DIAG_PATHFINDING_COMPONENT --> Enable/disable pathfinding component debug.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Pathfinding">Road network</span> ===

<!-- ID: ailib::AILIB_DIAG_ROAD_NETWORK --> Set road network debug mode.

'''Hotkey''': {{Controls|LCtrl|LAlt|N}}

'''Available Options''': off, active, roads, children, bridges, offRoad, links, all

=== <span title="AI&nbsp;&rarr;&nbsp;Pathfinding">Show Road Width</span> ===

<!-- ID: ailib::AILIB_DIAG_ROAD_WIDTHS --> Enable/disable showing of road widths.

'''Hotkey''': {{Controls|LCtrl|LAlt|W}}

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Pathfinding">Road network component</span> ===

<!-- ID: ailib::AILIB_DIAG_ROAD_NETWORK_SINGLE_COMPONENT --> Set road network component debug.

'''Range Settings''':

Min: -1

Max: 300

Current Value: -1

Step: 1

=== <span title="AI&nbsp;&rarr;&nbsp;Pathfinding">Road Id</span> ===

<!-- ID: ailib::AILIB_DIAG_ROAD_ID --> Enable/disable showing of road IDs.

'''Hotkey''': {{Controls|LCtrl|LAlt|I}}

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Pathfinding">RoadPart Min Max Id</span> ===

<!-- ID: ailib::AILIB_DIAG_ROADPART_MINMAX --> Enable/disable showing of road part min max ids.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Pathfinding">Pathfinding errors</span> ===

<!-- ID: ailib::AILIB_DIAG_ENABLE_PATHFINDING_ERRORS --> Enable/disable reporting of pathfinding errors.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Pathfinding">Link on bridge Id</span> ===

<!-- ID: ailib::AILIB_DIAG_LINK_ON_BRIDGE --> Set link on bridge ID.

'''Range Settings''':

Min: 0

Max: 1000

Current Value: 0

Step: 1

== <span title="AI">Aiming</span> ==

=== <span title="AI&nbsp;&rarr;&nbsp;Aiming">Aiming component</span> ===

<!-- ID: ailib::AILIB_DIAG_AIMING_COMPONENT --> Enable/disable aiming component debug.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Aiming">Aiming component PID</span> ===

<!-- ID: ailib::AILIB_DIAG_AIMING_COMPONENT_PID --> Enable/disable aiming component PID debug.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Aiming">Head aiming component</span> ===

<!-- ID: ailib::AILIB_DIAG_HEAD_AIMING_COMPONENT --> Enable/disable head aiming component debug.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Aiming">Use aim at version of ai aiming</span> ===

<!-- ID: ailib::AILIB_DIAG_AIMING_COMPONENT_AIM_AT --> Enable/disable usage of aim at version of AI aiming.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Aiming">Show target aimpoint</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_AI_SHOW_TARGET_AIMPOINT --> Show or hide target aimpoint.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Aiming">Show target projected size</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_AI_SHOW_TARGET_PROJECTED_SIZE --> Show or hide projected target size.

'''Available Options''': false, true

== <span title="AI">AI Navigator</span> ==

=== <span title="AI&nbsp;&rarr;&nbsp;AI Navigator">Enabled</span> ===

<!-- ID: ailib::AILIB_DIAG_AI_NAVIGATOR_SHOW --> Enable/disable AI navigator debug.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;AI Navigator">Previous agent</span> ===

<!-- ID: ailib::AILIB_DIAG_AI_NAVIGATOR_PREV --> Select previous AI navigator agent.

'''Hotkey''': {{Controls|RCtrl|RShift|9}}

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;AI Navigator">Next agent</span> ===

<!-- ID: ailib::AILIB_DIAG_AI_NAVIGATOR_NEXT --> Select next AI navigator agent.

'''Hotkey''': {{Controls|RCtrl|RShift|0}}

'''Available Options''': false, true

== <span title="AI">Driving</span> ==

=== <span title="AI&nbsp;&rarr;&nbsp;Driving">Show character detection</span> ===

<!-- ID: AI_DIAG_MOVEMENT_CHARACTER_DETECTION --> Enable/disable character detection debug.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Driving">Vehicle driving diag</span> ===

<!-- ID: ailib::AILIB_DIAG_MOVEMENT_VEHICLE --> Enable/disable vehicle driving diagnostics.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Driving">AI Forbid Reversing</span> ===

<!-- ID: ailib::AILIB_DIAG_AI_NO_REVERSING --> Enable/disable AI reversing.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Driving">AI No Steer Adjustments</span> ===

<!-- ID: ailib::AILIB_DIAG_AI_NO_REVERSING_ADJUSTMENTS --> Enable/disable AI steering adjustments.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Driving">Curve Circumference</span> ===

<!-- ID: ailib::AILIB_DIAG_MOVEMENT_VEHICLE_CURVE --> Enable/disable curve circumference debug.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Driving">PID Display</span> ===

<!-- ID: ailib::AILIB_DIAG_MOVEMENT_PID_DISPLAY --> Enable/disable PID debug.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Driving">Show avoidance</span> ===

<!-- ID: ailib::AILIB_DIAG_MOVEMENT_VEHICLE_AVOIDANCE --> Enable/disable vehicle avoidance debug.

'''Available Options''': false, true

== <span title="AI">Perception</span> ==

=== <span title="AI&nbsp;&rarr;&nbsp;Perception">Perception targets</span> ===

<!-- ID: AI_DIAG_PERCEPTION_TARGETS --> Enable/disable perception targets debug.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Perception">Perception sensors eyes</span> ===

<!-- ID: AI_DIAG_PERCEPTION_SENSORS_VISUAL --> Enable/disable perception sensors eyes debug.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Perception">Perception sensors ears</span> ===

<!-- ID: AI_DIAG_PERCEPTION_SENSORS_SOUND --> Enable/disable perception sensors ears debug.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Perception">Perception recognition</span> ===

<!-- ID: AI_DIAG_PERCEPTION_RECOGNITION_FACTORS --> Enable/disable perception recognition factors debug.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Perception">Cached perceiveble positions</span> ===

<!-- ID: AI_DIAG_PERCEPTION_CACHED_AIM_POINT_POS --> Enable/disable showing of cached perceived positions.

'''Available Options''': false, true

== <span title="AI">Animals</span> ==

=== <span title="AI&nbsp;&rarr;&nbsp;Animals">Show animals debug info</span> ===

<!-- ID: AI_DIAG_ANIMALS_DEBUG_ON --> Enable/disable animals debug.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Animals">Manager to debug</span> ===

<!-- ID: AI_DIAG_ANIMAL_MANAGER_SELECTOR --> Select animal manager to debug.

'''Available Options''': None, Birds

=== <span title="AI&nbsp;&rarr;&nbsp;Animals">Show current Animal positions</span> ===

<!-- ID: AI_DIAG_ANIMAL_MANAGER_SHOW_ANIMAL_POSITIONS --> Enable/disable showing of current animal positions.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Animals">Draw tile boundaries</span> ===

<!-- ID: AI_DIAG_ANIMAL_MANAGER_DRAW_TILE_BOUNDARIES --> Enable/disable drawing of animal tile boundaries.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Animals">Draw Animal despawn range</span> ===

<!-- ID: AI_DIAG_ANIMAL_MANAGER_DRAW_ANIMAL_LIMITS --> Enable/disable drawing of animal despawn range.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Animals">Draw Animal to Animal minimum spawn range</span> ===

<!-- ID: AI_DIAG_ANIMAL_MANAGER_DRAW_ANIMAL_TO_ANIMAL_LIMITS --> Enable/disable drawing of animal to animal minimum spawn range.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;Animals">Turn correction debug</span> ===

<!-- ID: AI_DIAG_ANIMALS_TURN_CORRECTION_DEBUG --> Enable/disable turn correction debug.

'''Available Options''': false, true

== <span title="AI">POV Pathfinder</span> ==

=== <span title="AI&nbsp;&rarr;&nbsp;POV Pathfinder">Extend of querry box</span> ===

<!-- ID: POV_DIAG_EXTEND --> Set extend of query box.

'''Range Settings''':

Min: 1

Max: 20

Current Value: 10

Step: 1

=== <span title="AI&nbsp;&rarr;&nbsp;POV Pathfinder">Number of iterations</span> ===

<!-- ID: POV_DIAG_ITERATIONS --> Set number of iterations.

'''Range Settings''':

Min: 1

Max: 10

Current Value: 5

Step: 1

=== <span title="AI&nbsp;&rarr;&nbsp;POV Pathfinder">Fail on hitting origin</span> ===

<!-- ID: POV_DIAG_FAIL_ON_HIT_POS --> Enable/disable pathfinding failure on hitting origin.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;POV Pathfinder">Set start position</span> ===

<!-- ID: POV_DIAG_PATH_START_POS --> Set pathfinder start position.

'''Hotkey''': {{Controls|LCtrl|LAlt|Num0}}

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;POV Pathfinder">Set end position</span> ===

<!-- ID: POV_DIAG_PATH_END_POS --> Set pathfinder end position.

'''Hotkey''': {{Controls|LCtrl|LAlt|Num1}}

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;POV Pathfinder">Run pathfinder</span> ===

<!-- ID: POV_DIAG_PATH_RUN --> Run pathfinder.

'''Hotkey''': {{Controls|LCtrl|LAlt|Num3}}

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;POV Pathfinder">Generate Graph</span> ===

<!-- ID: POV_DIAG_PATH_GENERATE --> Generate pathfinder graph.

'''Hotkey''': {{Controls|LCtrl|LAlt|Num2}}

'''Available Options''': false, true

== <span title="AI">Show Cover Query</span> ==

<!-- ID: AI_DIAG_COVER_QUERY --> Enable/disable showing of cover query.

'''Available Options''': false, true

== <span title="AI">Disable AI damage</span> ==

<!-- ID: ailib::AILIB_DIAG_CHEAT_DISABLE_AI_DAMAGE --> Set AI damage mode.

'''Available Options''': Cheat disabled, Force invulnerable, Force vulnerable

== <span title="AI">Disable AI actions</span> ==

<!-- ID: ailib::AILIB_DIAG_DISABLE_PROCESSING_ACTIONS --> Enable/disable AI action processing.

'''Hotkey''': {{Controls|LCtrl|LAlt|F9}}

'''Available Options''': false, true

== <span title="AI">Smart actions usage</span> ==

<!-- ID: ailib::AILIB_DIAG_SMART_ACTIONS --> Enable/disable smart actions debug.

'''Available Options''': false, true

== <span title="AI">Group members</span> ==

<!-- ID: ailib::AILIB_DIAG_GROUP --> Enable/disable showing of AI group members.

'''Available Options''': false, true

== <span title="AI">Waypoints</span> ==

<!-- ID: ailib::AILIB_DIAG_WAYPOINTS --> Set waypoint visualization.

'''Available Options''': off, cylinder, sphere

== <span title="AI">AI Units</span> ==

<!-- ID: ailib::AILIB_DIAG_UNITS --> Enable/disable AI units debug.

'''Available Options''': false, true

== <span title="AI">Messages</span> ==

<!-- ID: ailib::AILIB_DIAG_MESSAGES --> Enable/disable AI messages debug.

'''Available Options''': false, true

== <span title="AI">Show target AI context</span> ==

<!-- ID: ailib::AILIB_DIAG_SHOW_AI_CONTEXT --> Enable/disable showing of target AI context.

'''Available Options''': false, true

== <span title="AI">AIScript</span> ==

=== <span title="AI&nbsp;&rarr;&nbsp;AIScript">AI Debug Category</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_AI_DEBUG_CATEGORY --> Set AI debug category.

'''Available Options''': MISSING CATALOGS!

=== <span title="AI&nbsp;&rarr;&nbsp;AIScript">Set BT Breakpoint</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_AI_SET_BT_BREAKPOINT --> Enable/disable BT breakpoint.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;AIScript">Print debug from BTs</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_AI_PRINT_DEBUG --> Enable/disable printing of debug from BTs.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;AIScript">Print init of groups</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_AI_PRINT_GROUP_INFO --> Enable/disable printing of group init info.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;AIScript">Show fireteams</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_AI_FIRETEAMS --> Enable/disable showing of fireteams.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;AIScript">Show subgroups</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_AI_SUBGROUPS --> Enable/disable showing of subgroups.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;AIScript">Show target clusters</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_AI_TARGET_CLUSTERS --> Enable/disable showing of target clusters.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;AIScript">Print stats for aiming</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_AI_PRINT_SHOT_STATISTICS --> Enable/disable printing of aiming statistics.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;AIScript">Print new activity</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_AI_PRINT_ACTIVITY --> Enable/disable printing of new AI activity.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;AIScript">Show debug shapes from BTs</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_AI_SHOW_DEBUG_SHAPES --> Enable/disable showing of debug shapes from BTs.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;AIScript">Show fiendly in aim</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_AI_SHOW_FRIENDLY_IN_AIM --> Enable/disable showing of friendly units in aim.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;AIScript">Show target last seen</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_AI_SHOW_TARGET_LASTSEEN --> Enable/disable showing of target last seen position.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;AIScript">Select fixed AIAgent</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_AI_SELECT_FIXED_AGENT --> Enable/disable selection of fixed AI agent.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;AIScript">Debug cover search</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_AI_DEBUG_COVERS --> Enable/disable cover search debug.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;AIScript">Show Comms Handlers</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_AI_COMMS_HANDLERS --> Enable/disable showing of comms handlers.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;AIScript">Show perception panel</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_AI_SHOW_PERCEPTION_PANEL --> Enable/disable showing of perception panel.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;AIScript">Show grenade positions</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_AI_SHOW_GRENADE_POSITIONS --> Enable/disable showing of grenade positions.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;AIScript">Show suppression debug</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_AI_SHOW_SUPPRESS_DEBUG --> Enable/disable showing of suppression debug.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;AIScript">Show illum flares positions</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_AI_SHOW_ILLUM_FLARES_POSITIONS --> Enable/disable showing of illum flares positions.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;AIScript">Show aim leading debug</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_AI_SHOW_AIM_LEAD_DEBUG --> Enable/disable showing of aim leading debug.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;AIScript">Show sector threat filter</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_AI_SHOW_SECTOR_THREAT_FILTER --> Enable/disable showing of sector threat filter.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;AIScript">Show search and destroy points of interest</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_AI_SHOW_SEARCH_AND_DESTROY --> Enable/disable showing of search and destroy points of interest.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;AIScript">Show Send Message Menu</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_AI_SEND_MESSAGE --> Enable/disable showing of send message menu.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;AIScript">Open Debug Panel</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_AI_OPEN_DEBUG_PANEL --> Enable/disable opening of AI debug panel.

'''Available Options''': false, true

=== <span title="AI&nbsp;&rarr;&nbsp;AIScript">Show Grenade Trace</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_AI_SHOW_GRENADE_TRACE --> Enable/disable showing of grenade trace.

'''Available Options''': false, true

= <span title="Systems">Systems</span> =

== <span title="Systems">DynSim Distance Diag</span> ==

<!-- ID: GAME_SYSTEMS_DYNSIM_DISTANCE --> Enable/disable Dynamic Simulation distance diagnostics.

'''Available Options''': false, true

== <span title="Systems">DynSim Visibility Diag</span> ==

<!-- ID: GAME_SYSTEMS_DYNSIM_VISIBILIITY --> Enable/disable Dynamic Simulation visibility diagnostics.

'''Available Options''': false, true

== <span title="Systems">ProcAnim Registration Diag</span> ==

<!-- ID: GAME_SYSTEMS_PROCANIM_REGISTRATION --> Enable/disable procedural animation registration diagnostics.

'''Available Options''': false, true

== <span title="Systems">HandleControls Registration Diag</span> ==

<!-- ID: GAME_SYSTEMS_HANDLECONTROLS_REGISTRATION --> Enable/disable handle controls registration diagnostics.

'''Available Options''': false, true

== <span title="Systems">NwkMovement Registration Diag</span> ==

<!-- ID: GAME_SYSTEMS_NWKMOVEMENT_REGISTRATION --> Enable/disable network movement registration diagnostics.

'''Available Options''': false, true

== <span title="Systems">Sound Registration Diag</span> ==

<!-- ID: GAME_SYSTEMS_SOUND_REGISTRATION --> Enable/disable sound registration diagnostics.

'''Available Options''': false, true

== <span title="Systems">Backend Diag</span> ==

<!-- ID: GAME_SYSTEMS_BACKEND --> Enable/disable backend diagnostics.

'''Available Options''': false, true

== <span title="Systems">AnimKeyFrame Fake Time</span> ==

<!-- ID: GAME_SYSTEMS_CHARANIM_KEYFRAME_LOAD --> Set animation keyframe fake time.

'''Range Settings''':

Min: 0

Max: 1.0

Current Value: 0.0

Step: 0.05

== <span title="Systems">Systems diag</span> ==

<!-- ID: DM_SYSTEMS_DIAG --> Set systems diagnostics display.

'''Available Options''': none, basic, full

== <span title="Systems">Show diag system stats</span> ==

<!-- ID: DM_SYSTEMS_DIAG_SYSTEM --> Enable/disable showing of system statistics.

'''Available Options''': false, true

= <span title="Platform">Platform</span> =

== <span title="Platform">PlayStation Network matches</span> ==

=== <span title="Platform&nbsp;&rarr;&nbsp;PlayStation Network matches">Show match status</span> ===

<!-- ID: DIAG_MATCH_STATUS --> Enable/disable showing of match status.

'''Available Options''': false, true

=== <span title="Platform&nbsp;&rarr;&nbsp;PlayStation Network matches">Create dummy match</span> ===

<!-- ID: DIAG_MATCH_CREATE --> Enable/disable creation of dummy match.

'''Available Options''': false, true

=== <span title="Platform&nbsp;&rarr;&nbsp;PlayStation Network matches">Start match</span> ===

<!-- ID: DIAG_MATCH_START --> Enable/disable start of match.

'''Available Options''': false, true

=== <span title="Platform&nbsp;&rarr;&nbsp;PlayStation Network matches">Cancel match</span> ===

<!-- ID: DIAG_MATCH_CANCEL --> Enable/disable cancelation of match.

'''Available Options''': false, true

=== <span title="Platform&nbsp;&rarr;&nbsp;PlayStation Network matches">Finish match (submit result)</span> ===

<!-- ID: DIAG_MATCH_FINISH --> Enable/disable finishing of match (submit result).

'''Available Options''': false, true

=== <span title="Platform&nbsp;&rarr;&nbsp;PlayStation Network matches">*Join match (dummy player)</span> ===

<!-- ID: DIAG_MATCH_JOIN --> Enable/disable joining of match (dummy player).

'''Available Options''': false, true

=== <span title="Platform&nbsp;&rarr;&nbsp;PlayStation Network matches">*Leave match (dummy player)</span> ===

<!-- ID: DIAG_MATCH_LEAVE --> Enable/disable leaving of match (dummy player).

'''Available Options''': false, true

=== <span title="Platform&nbsp;&rarr;&nbsp;PlayStation Network matches">Add player via update (dummy player)</span> ===

<!-- ID: DIAG_MATCH_UPDATE --> Enable/disable adding of player via update (dummy player).

'''Available Options''': false, true

== <span title="Platform">Pick user</span> ==

<!-- ID: DIAG_PICK_USER --> Enable/disable picking of user.

'''Available Options''': false, true

== <span title="Platform">Simulate Sign-out</span> ==

<!-- ID: DIAG_USER_SIGNOUT --> Simulate user sign out.

'''Available Options''': false, true

== <span title="Platform">Obtain save data</span> ==

<!-- ID: PLATFORM_SAVE_DATA_OBTAIN --> Obtain save data.

'''Available Options''': false, true

== <span title="Platform">Commit save data</span> ==

<!-- ID: PLATFORM_SAVE_DATA_COMMIT --> Commit save data.

'''Available Options''': false, true

== <span title="Platform">Open URL</span> ==

<!-- ID: PLATFORM_OPEN_BROWSER --> Open URL in browser.

'''Available Options''': false, true

== <span title="Platform">Change user name</span> ==

<!-- ID: PLATFORM_CHANGE_NAME --> Change user name.

'''Available Options''': false, true

== <span title="Platform">Show local player profile</span> ==

<!-- ID: PLATFORM_SHOW_USER_PROFILE --> Show local player profile.

'''Available Options''': false, true

== <span title="Platform">Request & log privileges</span> ==

<!-- ID: PLATFORM_LOG_PRIVILEGES_BATCH --> Request and log privileges.

'''Available Options''': false, true

== <span title="Platform">Revoke privilege: Text comm</span> ==

<!-- ID: PLATFORM_REVOKE_PRIVILEGE_TEXT --> Revoke text communication privilege.

'''Available Options''': false, true

== <span title="Platform">Revoke privilege: Voice comm</span> ==

<!-- ID: PLATFORM_REVOKE_PRIVILEGE_VOICE --> Revoke voice communication privilege.

'''Available Options''': false, true

== <span title="Platform">Revoke privilege: Multiplayer</span> ==

<!-- ID: PLATFORM_REVOKE_PRIVILEGE_MP --> Revoke multiplayer privilege.

'''Available Options''': false, true

== <span title="Platform">Revoke privilege: Lobby</span> ==

<!-- ID: PLATFORM_REVOKE_PRIVILEGE_LOBBY --> Revoke lobby privilege.

'''Available Options''': false, true

== <span title="Platform">Revoke privilege: UGC</span> ==

<!-- ID: PLATFORM_REVOKE_PRIVILEGE_UGC --> Revoke UGC privilege.

'''Available Options''': false, true

== <span title="Platform">Revoke privilege: Shared sessions</span> ==

<!-- ID: PLATFORM_REVOKE_PRIVILEGE_SESSIONS --> Revoke shared sessions privilege.

'''Available Options''': false, true

== <span title="Platform">Revoke privilege: Social network sharing</span> ==

<!-- ID: PLATFORM_REVOKE_PRIVILEGE_SOCIAL_SHARING --> Revoke social network sharing privilege.

'''Available Options''': false, true

== <span title="Platform">Accept dummy invitation</span> ==

<!-- ID: PLATFORM_DUMMY_INVITE_TEST --> Accept dummy invitation.

'''Available Options''': false, true

== <span title="Platform">Invite using platform GUI</span> ==

<!-- ID: PLATFORM_INVOKE_INVITE --> Invite using platform GUI.

'''Available Options''': false, true

== <span title="Platform">Log list of achievements</span> ==

<!-- ID: PLATFORM_ACHIEVEMENTS_LIST --> Log list of achievements.

'''Available Options''': false, true

= <span title="Serialization">Serialization</span> =

== <span title="Serialization">Enable log reports</span> ==

<!-- ID: DIAG_SERIALIZATION_LOGS --> Enable/disable serialization log reports.

'''Available Options''': none, errors, all

= <span title="Manual Camera">Manual Camera</span> =

== <span title="Manual Camera">Show debug menu</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_MANUAL_CAMERA_DEBUG --> Enable/disable manual camera debug menu.

'''Available Options''': false, true

== <span title="Manual Camera">Control player</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_MANUAL_CAMERA_CONTROL_PLAYER --> Enable/disable control player using manual camera. Option is only available when {{Link|#Debug manual camera}} is enabled

'''Available Options''': false, true

== <span title="Manual Camera">Speed boost up debug</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_MANUAL_CAMERA_SPEED_BOOST_UP --> Enable/disable manual camera speed boost debug.

'''Available Options''': false, true

== <span title="Manual Camera">Paste view link</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_MANUAL_CAMERA_VIEW_LINK --> Paste view link using hotkey (LShift+LAlt+L).

'''Hotkey''': {{Controls|LShift|LAlt|L}}

'''Available Options''': false, true

== <span title="Manual Camera">Unlimited Movement</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_MANUAL_CAMERA_UNLIMITED --> Enable/disable unlimited manual camera movement.

'''Available Options''': false, true

= <span title="Editor">Editor</span> =

== <span title="Editor">Is Opened</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_EDITOR_IS_OPENED --> Enable/disable editor opened flag debug.

'''Available Options''': false, true

== <span title="Editor">Can Open</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_EDITOR_CAN_OPEN --> Enable/disable editor can open flag debug.

'''Available Options''': false, true

== <span title="Editor">Can Close</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_EDITOR_CAN_CLOSE --> Enable/disable editor can close flag debug.

'''Available Options''': false, true

== <span title="Editor">Show Debug</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_EDITOR_SHOW_DEBUG --> Enable/disable editor debug.

'''Available Options''': false, true

== <span title="Editor">Force Limited</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_EDITOR_FORCE_LIMITED --> Enable/disable forcing of limited editor.

'''Available Options''': false, true

== <span title="Editor">Log Async Load</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_EDITOR_ASYNC_LOAD_DEBUG --> Enable/disable logging of async loading for editor.

'''Available Options''': false, true

== <span title="Editor">Show Screenshot</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_EDITOR_SAVE_PHOTO_SCREENSHOT_SHOW --> Enable/disable showing of screenshot for editor.

'''Available Options''': false, true

== <span title="Editor">Simulated Network Delay</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_EDITOR_NETWORK_DELAY --> Set simulated network delay.

'''Range Settings''': * Min: 0 * Max: 1000 * Current Value: 0 * Step: 100

= <span title="GameMode">GameMode</span> =

== <span title="GameMode">Game Mode</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_GAME_MODE --> Enable/disable showing of game mode debug.

'''Available Options''': false, true

== <span title="GameMode">Show kill log</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_CHARACTER_KILLED_LOG --> Enable/disable showing of kill log.

'''Available Options''': false, true

== <span title="GameMode">Respawn Component</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_RESPAWN_COMPONENT_DIAG --> Enable/disable respawn component debug.

'''Available Options''': false, true

== <span title="GameMode">Respawn Time Measures</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_RESPAWN_COMPONENT_TIME --> Enable/disable respawn time measurement debug.

'''Available Options''': false, true

== <span title="GameMode">Respawn Timer</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_RESPAWN_TIMER_COMPONENT --> Enable/disable respawn timer component debug.

'''Available Options''': false, true

== <span title="GameMode">Scoring System</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_SCORING_SYSTEM --> Enable/disable showing of scoring system debug.

'''Available Options''': false, true

== <span title="GameMode">Player Factions</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_RESPAWN_PLAYER_FACTION_DIAG --> Enable/disable showing of player factions debug.

'''Available Options''': false, true

== <span title="GameMode">Player Loadouts</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_RESPAWN_PLAYER_LOADOUT_DIAG --> Enable/disable showing of player loadouts debug.

'''Available Options''': false, true

= <span title="Conflict">Conflict</span> =

== <span title="Conflict">Instant composition spawning</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_CAMPAIGN_INSTANT_BUILDING --> Enable/disable instant composition spawning.

'''Available Options''': false, true

== <span title="Conflict">Promotion</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_CAMPAIGN_RANK_UP --> Promotes player to higher rank.

'''Available Options''': false, true

== <span title="Conflict">Demotion</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_CAMPAIGN_RANK_DOWN --> Demotes player to lower rank

'''Available Options''': false, true

= <span title="Singleplayer">Singleplayer</span> =

== <span title="Singleplayer">Disable Game Over</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_SINGLEPLAYER_DISABLE_GAMEOVER --> Enable/disable game over.

'''Available Options''': false, true

= <span title="Tutorial">Tutorial</span> =

== <span title="Tutorial">Course locations</span> ==

=== <span title="Tutorial&nbsp;&rarr;&nbsp;Course locations">OBSTACLE COURSE</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_NEWTUTORIAL_COURSE_LOCATION_OBSTACLE --> Enable obstacle course location.

'''Available Options''': false, true

=== <span title="Tutorial&nbsp;&rarr;&nbsp;Course locations">FIRING RANGE</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_NEWTUTORIAL_COURSE_LOCATION_FIRING --> Enable firing range location.

'''Available Options''': false, true

=== <span title="Tutorial&nbsp;&rarr;&nbsp;Course locations">COMBAT ENGINEERING</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_NEWTUTORIAL_COURSE_LOCATION_ENGINEERING --> Enable combat engineering location.

'''Available Options''': false, true

=== <span title="Tutorial&nbsp;&rarr;&nbsp;Course locations">SEIZING</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_NEWTUTORIAL_COURSE_LOCATION_SEIZING --> Enable seizing location.

'''Available Options''': false, true

=== <span title="Tutorial&nbsp;&rarr;&nbsp;Course locations">FIRST AID</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_NEWTUTORIAL_COURSE_LOCATION_AID --> Enable first aid location.

'''Available Options''': false, true

=== <span title="Tutorial&nbsp;&rarr;&nbsp;Course locations">DRIVING</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_NEWTUTORIAL_COURSE_LOCATION_DRIVING --> Enable driving location.

'''Available Options''': false, true

=== <span title="Tutorial&nbsp;&rarr;&nbsp;Course locations">NAVIGATION</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_NEWTUTORIAL_COURSE_LOCATION_NAVIGATION --> Enable navigation location.

'''Available Options''': false, true

=== <span title="Tutorial&nbsp;&rarr;&nbsp;Course locations">HELICOPTER PILOTING</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_NEWTUTORIAL_COURSE_LOCATION_HELICOPTERS --> Enable helicopter piloting location.

'''Available Options''': false, true

=== <span title="Tutorial&nbsp;&rarr;&nbsp;Course locations">SPECIAL WEAPONS</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_NEWTUTORIAL_COURSE_LOCATION_SPECIAL --> Enable special weapons location.

'''Available Options''': false, true

=== <span title="Tutorial&nbsp;&rarr;&nbsp;Course locations">LONG-DISTANCE SHOOTING</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_NEWTUTORIAL_COURSE_LOCATION_LONGRANGE --> Enable long range shooting location.

'''Available Options''': false, true

=== <span title="Tutorial&nbsp;&rarr;&nbsp;Course locations">FIRE SUPPORT COURSE</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_NEWTUTORIAL_COURSE_LOCATION_FIRESUPPORT --> Enable fire support course location.

'''Available Options''': false, true

=== <span title="Tutorial&nbsp;&rarr;&nbsp;Course locations">SQUAD LEADERSHIP</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_NEWTUTORIAL_COURSE_LOCATION_LEADERSHIP --> Enable squad leadership location.

'''Available Options''': false, true

=== <span title="Tutorial&nbsp;&rarr;&nbsp;Course locations">VEHICLE MAINTENANCE</span> ===

<!-- ID: SCR_DebugMenuID.DEBUGUI_NEWTUTORIAL_COURSE_LOCATION_MAINTENANCE --> Enable vehicle maintenance location.

'''Available Options''': false, true

== <span title="Tutorial">Disable course reqs</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_NEWTUTORIAL_DISABLE_COURSE_REQUIREMENTS --> Enable/disable tutorial course requirements.

'''Available Options''': false, true

== <span title="Tutorial">Skip intro sequence</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_NEWTUTORIAL_SKIP_INTRO --> Enable/disable skip intro sequence.

'''Available Options''': false, true

== <span title="Tutorial">Regenerate course tasks</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_NEWTUTORIAL_REGENERATE_TASKS --> Enable/disable regeneration of course tasks.

'''Available Options''': false, true

== <span title="Tutorial">Skip AI Driving</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_NEWTUTORIAL_COURSE_SKIP_AI_DRIVING --> Enable/disable skipping AI driving.

'''Available Options''': false, true

== <span title="Tutorial">Finish current stage</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_NEWTUTORIAL_COURSE_FINISH_STAGE --> Enable/disable finishing of current stage.

'''Available Options''': false, true

== <span title="Tutorial">Move to waypoint</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_NEWTUTORIAL_COURSE_MOVE_TO_WP --> Enable/disable moving to waypoint.

'''Available Options''': false, true

== <span title="Tutorial">Set evening time</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_NEWTUTORIAL_SET_EVENING_TIME --> Enable/disable setting evening time.

'''Available Options''': false, true

== <span title="Tutorial">Dump stages into log</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_NEWTUTORIAL_DUMP_STAGES_INTO_LOG --> Enable/disable dumping of stages into log.

'''Available Options''': false, true

== <span title="Tutorial">Finish all courses</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_NEWTUTORIAL_FINISH_EVERYTHING --> Enable/disable finishing of all courses.

'''Available Options''': false, true

== <span title="Tutorial">Draw Area Restrictions</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_NEWTUTORIAL_DRAW_AREA_RESTRICTIONS --> Enable/disable drawing of area restrictions.

'''Available Options''': false, true

= <span title="ScenarioFramework">ScenarioFramework</span> =

== <span title="ScenarioFramework">Tasks</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_SCENARIO_FRAMEWORK_TASKS --> Enable/disable scenario framework tasks debug.

'''Available Options''': false, true

== <span title="ScenarioFramework">Registered Areas</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_SCENARIO_FRAMEWORK_REGISTERED_AREAS --> Enable/disable scenario framework registered areas debug.

'''Available Options''': false, true

== <span title="ScenarioFramework">Debug Areas</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_SCENARIO_FRAMEWORK_DEBUG_AREAS --> Enable/disable scenario framework debug areas.

'''Available Options''': false, true

== <span title="ScenarioFramework">Layer Inspector</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_SCENARIO_FRAMEWORK_LAYER_INSPECTOR --> Enable/disable scenario framework layer inspector.

'''Available Options''': false, true

== <span title="ScenarioFramework">Action Inspector</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_SCENARIO_FRAMEWORK_ACTION_INSPECTOR --> Enable/disable scenario framework action inspector.

'''Available Options''': false, true

== <span title="ScenarioFramework">Logic Inspector</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_SCENARIO_FRAMEWORK_LOGIC_INSPECTOR --> Enable/disable scenario framework logic inspector.

'''Available Options''': false, true

== <span title="ScenarioFramework">Plugin Inspector</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_SCENARIO_FRAMEWORK_PLUGIN_INSPECTOR --> Enable/disable scenario framework plugin inspector.

'''Available Options''': false, true

== <span title="ScenarioFramework">Condition Inspector</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_SCENARIO_FRAMEWORK_CONDITION_INSPECTOR --> Enable/disable scenario framework condition inspector.

'''Available Options''': false, true

= <span title="Tasks">Tasks</span> =

== <span title="Tasks">Execute tasks</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_EXECUTE_TASKS --> Enable/disable execution of tasks.

'''Available Options''': true, false

== <span title="Tasks">Print all tasks</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_SHOW_ALL_TASKS --> Enable/disable printing of all tasks.

'''Available Options''': false, true

= <span title="Radial Menu">Radial Menu</span> =

== <span title="Radial Menu">Enable diagnostics</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_RADIALMENU_DIAGNOSTICS --> Enable/disable radial menu diagnostics.

'''Available Options''': false, true

== <span title="Radial Menu">Enable logging</span> ==

<!-- ID: SCR_DebugMenuID.DEBUGUI_RADIALMENU_LOGGING --> Enable/disable radial menu logging.

'''Available Options''': false, true

{{Sticky|{{Feature|informative|It is possible to hover over debug setting titles in this page to see their access path in the Debug Menu.}}|bottom}}

{{GameCategory|armaR|Modding|Official Tools}}
gxwuxxrigh6b84tnyp2bg6vhno6b2dh

# Arma Reforger:Particle Editor

5050
32985
364654
341565
2024-05-24T20:07:48Z
Lou Montana
10739
Text replacement - "ized" to "ised"
364654
wikitext
text/x-wiki
{{Wiki|TODO|Add images}}{{TOC|side||3}} The Particle Editor serves as a tool for creating/editing particle effects used in the game. Effects such as explosions, muzzle flashes, smoke, fire etc.

Particle effects can placed in the game via the World Editor (using the ParticleEffect entity) or created within the game script.

Each '''particle effect''' can consist of multiple '''particle emitters'''. For example the effect of an explosion can be composed from smoke emitter, sparks emitter, some debris etc.

{{Feature|important| Note that some emitters may not be present under some environments, e.g a dedicated server will skip loading most emitters as they are purely visual - see {{Link/Enfusion|armaR|Particles}} comment. }}

{{TOC|subtoc |content= * 1. {{Link|#Interface Overview}} * 2. {{Link|#Panels}} * 3. {{Link|#Material Editor}} }}

== Interface Overview ==

The editor window is divided into several sub-windows/panels as shown on the image below.

The following panels will be discussed:

* '''preview window''' - see a live preview of the particle effect in action, change some preview options and see statistics of active particles * '''effect window''' - play/pause effect, add/remove/clone/rename/sort particle emitters and set their LOD ranges * '''emitter window''' - list of currently selected emitter's properties with modification fields * '''animation window''' - spline-curve editor to animate some properties over time.

== Panels ==

=== Effect Panel ===

Each particle effect consist of one or multiple particle emitters. Their full list can be found in the box labeled as Emitters.

Emitters can be disabled/enabled through their checkbox in the Emitters list so that only enabled emitters will emit particles in the preview window, thus allowing the testing of each emitter separately. This is only an editor display option and will not be saved in the end effect.

Emitters can also be deleted, renamed, cloned or moved up/down in the list via the corresponding buttons.

{{Feature|informative|Emitters order does '''not''' affect the final look of particles because they get internally sorted by an algorithm which depends on particle position and size.}}

Next there are controls which allow you to Restart or Pause the effect. When the effect is paused, the Step button allows you to step forward (by clicking) or to play in slow motion (by pressing and holding) the effect.

Levels of detail (LODs) of the particle effect are set up here. Currently, there are three fixed levels of detail (0, 1, 2) and an effect as a whole is always in one of these levels. The LOD level is determined by the engine depending on its distance, current resolution and camera FOV.

{{Feature|informative| Current distances (for 1080p and 70° verticle FOV) are as follows: * LOD 0: < 25m * LOD 1: 25m - 200m * LOD 2: > 200m

The current LOD can be checked in the scene (in Particle Editor, World Editor or even in game) using the [[Arma Reforger:Diag Menu|Diag Menu]]: Scene &rarr; Particles &rarr; Show Particle FX LOD &rarr; enabled. }}

Each emitter has a slider with two handles for setting its LOD range, i.e. minimum and maximum LOD in which the emitter is active (e.g. 0-1means the emitter is active in the first two levels but not in the last - the most distant one).

When an emitter becomes inactive because of LOD change, already-emitted particles will not disappear: their simulation and rendering continue but new particles from this emitter are not emitted. When an emitter becomes active because of LOD change, it simply starts emitting new particles. This mechanism should allow for continuous effect's LODding without sudden changes in its appearance.

Some emitters don't need their highest LOD(s) nor any replacement - e.g. some small debris and other details probably need not be present in the higher LODs at all, so simply setting 0-1 or even just 0 may be an easy and efficient setting. Other emitters may need a replacement with one or multiple less detailed emitters - e.g. a nice detailed smoke generated by multiple emitters in the first LODs may be replaced by one rougher, less detailed smoke emitter set to cover the rest of the LOD range.

A specific LOD can be manually forced using the drop-down menu in the Particle Effect window, ignoring the engine's formula. When a specific LOD is forced this way, emitters present in the LOD are highlighted in the list while inactive emitters are struckthrough or hidden completely if Hide inactive checkbox is checked. If Restart on change checkbox is checked, the effect will restart every time a different item is selected (forced LOD) from the drop-down list (when unchecked, LOD switching can be observed).

=== Preview Panel ===

The toolbar contains functions that allow preview window manipulation in various ways.

From left to right:

==== Show/Hide Grid ==== Display or hide the white grid in viewport.

==== Move Tool ==== Move the particle effect around.

==== Rotate Tool ==== Rotate the particle effect.

==== Switch World/local coordinate system ====

==== Cone Angle Volume ==== Highlights the angle volume.

==== Emit Source Volume ==== Highlights the source 3D volume.

==== Snap Position to Ground ==== Shortcut: {{Controls|Ctrl|Down}}

==== Reset Entity Rotations ==== Shortcut: {{Controls|Ctrl|Right}}

==== Change FOV ==== Change the preview camera's field of view.

Default value: 45

==== Show/Hide Stats ==== This option displays information about the total number of particles and also current/max count per each emitter.

This allows for effect optimization by lowering the '''MaxNum''' property value of the emitter which does not fully utilize the max count.

==== Helper Model ==== Load a helper model to the preview scene in order to assist the effect's creation, scaling and calibration.

==== Show/Hide Ground ==== This will render or hide the ground mesh in the preview scene '''if''' the ground is enabled in the Viewport '''Options''' button's menu. Having a ground or not may help getting a better visualization of what the effect looks like.

It also allows the changing of Ground Material on ground visibility re-enabling. To reset to default, use the Viewport's '''Options''' button to hide/show the ground.

==== Movement simulation ==== Setup rotation of the entity to which the emitters are attached.

This allows testing if the effect works properly in motion and whether it reacts to the parent movement or not.

It opens the Movement Simulation Setup dialog:

* Radius: radius of the circular movement specified in meter units * Speed: speed specified in meters per second * Rotation axis: axis around which the effect will rotate

==== Setup Global Wind ==== It opens the Global Wind Settings dialog:

* Speed: wind speed (in m/s) * Angle: wind direction angle in degrees - starting from the East and going counter-clockwise. 0° is the wind blowing towards the East, 90° is North, etc.

==== Stress Test ==== Spawn 25 effects at once (5 × 5) to see the effect on performance, ordering issues, etc.

==== Simulate Low FPS ==== Restrict the FPS from 60 to 17 to see if the particle effect is still acceptable in low performance situations.

==== Turn camera to POI on Mouse Wheel ====

=== Emitter Panel ===

Properties of the emitter currently selected in the emitters list.

==== General ==== Parameters from this category describes how the particles will be emitted.

===== Shape Type ===== Shape of the particle emitting volume.

The following options are available:

* Box * Point * Sphere * Ellipse

===== Shape Size ===== Size of emitting volume in respect to its type (only used for shapes where it makes sense).

To view the shape's volume, use the toolbar's '''Emit Source Volume''' button.

===== Cone angle ===== Parameters defining the emitter cone volume which is then used for random emit directions for each particle.

* X - cone circumferential angle * Y - inner cone angle * Z - outer cone angle

To view the cone's volume, use the toolbar's '''Cone Angle Volume''' button.

===== Cone Angle Min Dist ===== Minimal angle difference between particles (to avoid sorting problems when particles are too close)

===== Cone Angle Rnd Range ===== Random range added to ConeAngle.x

===== Max Num ===== Maximum number of particles at once. This number may help performance and reduce memory usage.

===== Birth Rate ===== This value tells you how quickly the particles will be emitted (particles per second).

===== Birth Rate RND ===== Random addition to birth rate value. Emitter can get zero up-to this number birth rate bonus.

===== Birth Rate Vel ===== Changes the birth rate value based on velocity, so fast moving effects emit more.

===== Offset ===== Position offset of the emitter against the effect origin.

===== Angles ===== Angles offset - determine the particle's emission direction.

===== Local Transform ===== If checked, the emitter will simulate the particles in the local-space of the effect which will in other words cause the effect to "move with the parent". Useful e.g. for muzzle flash effects.

If disabled, the emitter will simulate the particles in world-space which will cause the particles to "be on their own" once they are emitted. Useful e.g. for cigarette smoke effect.

==== Particle Appearance ==== Parameters from this category describes how the particles will look and behave.

===== Material ===== Material of the particle sprite, defined in the '''Material editor.'''

Clicking on the ''''...'''<nowiki/>' button will let you choose different material.

Clicking on the ''''M'''<nowiki/>' button will open the Material editor and let you modify current material directly.

===== Center X, Y ===== Allows you to offset the center pivot of the particle which in turn changes the behavior of scaling and rotating of the particle. The default values (0, 0) will cause the pivot to be in the center so the particle will scale uniformly in all directions. Scaling the particle with values like (0, -1) will cause it to only grow up. This is useful e.g. for muzzle flash effect which we want to look like it’s coming out of the barrel.

===== Scale X, Y ===== Allows you to define non-square particles. Use this numbers to set wanted X/Y ratio.

===== Stretch Multiplier ===== If set to a different value than 1, the particle type will be internally switched to the "streak" version, which will stretch particles along their moving direction based on their velocity. Therefore the velocity attribute (or at least the gravity) has to be set. Useful e.g. for things like sparks.

===== Size Multiplier ===== Global size multiplier applied to all particles from this emitter. Use this number to set the overall size of the particles.

===== Size RND ===== Per-particle randomization of size.

===== Rot Multiplier ===== Rotation speed in degrees per second. Only for sprites.

===== Random Rot Dir ===== If checked, the rotation direction will be chosen randomly per particle, it will otherwise be clockwise.

===== Streak Full UV ===== When not checked, the default behavior will be used for stretched particles (streaks), which is stretching only the middle part of the texture. By enabling this option, the full UVs will be stretched.

'''Left''': original, not stretched particle (stretch multiplier = 1). '''Middle''': default stretching behavior (streak full UV = false). '''Right''': new option for stretching (streak full UV = true).

===== Billboarding Type ===== Defines what behavior will be used for "auto-rotating" the particle to face the camera.

Can be one of:

* '''Full''' - default particle behavior. The particles will face the camera in all directions and will never be seen "from the side". * '''LockedAxis''' - "distant trees behavior". Particles can automatically rotate to face the camera only around the main axis which is defined by the emitting direction (default is up). Useful e.g. for fire effects which we don't want to "lay down" even if they’re seen from above. * '''None''' - particles will not automatically rotate to face the camera at all. Useful e.g. for custom effects like muzzle flashes from the guns where we just want to emit multiple randomly rotated quads coming out of the barrel to get the wanted "volumetric" feel.

===== Angular Fade Out Start, End ===== Alpha fade-out for particles turned away from the camera

Available for both '''LockedAxis''' and '''None''' billboarding type to have a tiny fade-out which prevents seeing the particle fully from the side, which would otherwise cause a visual artifact.

===== Vel Angle ===== Rotates the particle to face the movement's velocity direction. Kind of "Flappy bird" behavior.

Cannot be combined with '''Random Angle'''.

===== Random Angle ===== Random initial angle, sprites only.

Cannot be combined with '''Vel Angle'''.

===== Random U Flip ===== Inverts texture's u-coordinate with 50% probability. Can be combined with particle rotation and random angle.

==== Physics ==== Parameters from this category describe how the particles will move.

===== Velocity ===== Linear speed of each emitted particle. The default direction is "up", but it can be changed ''via'' '''Angles''' property or randomised ''via'' '''Cone Angle''' settings.

===== Velocity RND ===== Per-particle random addition to velocity.

===== Air Resistance ===== Slow down the particles as they go. Must be greater than 0 to use '''Wind Influence'''.

===== Air Resistance RND ===== Per-particle random addition to air resistance.

===== Wind Influence ===== How much particle velocity is influenced by wind in range 0..1.

===== Parent Vel Rel To Air ===== Emitter's velocity is computed relatively to the movement of surrounding air. Affects '''Birth Rate Vel''' and '''Lifetime Vel Factor''', but not '''Vel Affect'''.

===== Gravity Multiply ===== Amount of gravity force applied on the particles - can be negative.

===== Gravity multiplier RND ===== Per-particle random addition to gravity multiplier.

===== Restitution ===== Amount of velocity preservation after collision, particle will not collide if set to 0.

===== Spring ===== Define the force pulling the particle towards emitter origin.

==== Texture Sheet Animation ==== Parameters from this category are used for texture-sheet animation. These parameters only make sense for material with tiled texture (a.k.a sprite-sheet).

===== Anim Once ===== The animation will only be played once. After it plays, the last animation frame will be used for the rest of the particle lifetime, so the last frame must be empty if the effect is to disappear. If disabled, the animation will loop for the whole particle lifetime.

===== Anim FPS ===== This value sets the speed of the animation (Frames per second). Due to technical reasons, a zero speed will still animate the effect (at 1 FPS). Set a lower value (e.g 0.001) for a very still particle.

===== Lifetime by Anim ===== If checked, the particle's lifetime will be determined by the animation length (FPS × Number of frames) - once all the animation is played, the particle is destroyed. This setting overrides other lifetime settings.

===== Random Frame ===== If checked, one frame (tile) from the sheet will be chosen randomly and kept for the rest of the particle lifetime instead of using the whole tiled texture for animation. Animation will not be played.

==== Particle Lifetime ==== Attributes that can be animated along the particle's life time.

===== Lifetime ===== How long will particle will last in seconds.

===== Lifetime RND ===== Per-particle random addition to lifetime value.

===== Lifetime Vel Vactor ===== Lifetime shortening by emitter's velocity.

Formula: <code style="display: block">finalLifetime = (lifetime + lifetimeRND) / (1 + velocity * lifetimeVelFactor)</code>

===== Lifetime Vel Smoothing ===== Smooths input velocity for LifetimeVelFactor, making it react slower to velocity changes.

===== Lifetime Shortening ===== Lifetime shortening after collision. Used only if collision is enabled (when Physics → Restitution attribute is non zero).

===== Color ===== Particle color over its lifetime.

===== Alpha ===== Particle alpha over its lifetime.

===== Rotation Speed ===== Particle rotation speed over its lifetime which multiplies its original rotation speed.

===== Size ===== Particle size during its lifetime which multiplies its size parameters.

==== Emitting Time ==== Attributes that can be animated over the whole emitter's lifetime.

===== Emitting Time ===== Emitter's lifetime. This does not affect particles' lifetime as once a particle is emitted, it can live on even if the emitter is destroyed.

===== Repeat ===== If enabled, the effect will be looped.

===== Color Mast ===== Color master graph during lifetime of whole emitter

===== Alpha Mast ===== Alpha master graph during lifetime of whole emitter

===== Rotation Speed Mast ===== Rotation speed master graph during lifetime of whole emitter

===== Size Mast ===== Size master graph during lifetime of whole emitter

===== B Rate Mast ===== Birth rate master graph multiplying emitter birth rate during lifetime of the whole emitter

===== Air Resistance Mast ===== Air resistance master graph multiplying particles air resistance during lifetime of whole emitter

===== Velocity Mast ===== Velocity master graph multiplying particles velocity during lifetime of whole emitter

=== Animation Panel ===

The Animation Panel allows the animation of various attributes like size, color and more, emitter-wise or particle-wise with respectively the '''Emitting-Time Graphs''' and '''Particle-Lifetime Graphs''' tabs.

==== Snap to Grid ==== Snap graphpoint-dragging to the grid. Steps are 0.01 for X axis, 0.1 for Y axis.

==== Lock Horizontal Axis ==== This button allows the changing of the Y value of a point without risking moving it on the X axis.

==== See Through Layers ==== Show the other curves in the background as transparent.

==== Point Editor ==== Edit the selected point's values directly.

==== Emitter-Time Graphs ==== This tab offers the following graphs: * ColorMast * AlphaMast * RotationSpeedMast * SizeMast * BRateMast * AirResistanceMast * VelocityMast

Mast means Master here, and the formula is <code style="display: block">result = particleProperty * emitterMaster</code>.

==== Particle-Lifetime Graphs ==== This tab offers the following graphs: * Color * Alpha * RotationSpeed * Size

==== Graph ==== The spline curve is created and modified by control points (a.k.a. key frames), which then define the resulting shape of the curve.

These control points can be created, deleted and moved around. See the controls below:

===== Create ===== * double-click the graph * right-click the graph: ** Add Point: create a point at right-click's X position on the existing curve's Y ** Add Point Here: create a point precisely on right-click's position, X and Y values

===== Update ===== * click to select, then click and hold to drag the point around * click to select, then ctrl + hold click to move all the colors in relation to each other (color graph only)

===== Delete ===== * click a point and press Delete * click to select, right-click a point and select Remove Point

== Material Editor ==

=== Basic Material maps and its modifiers ===

==== Color ==== Albedo color modificator. Default is white.

==== Albedo Map ==== Albedo texture with possible alpha channel.

==== Normal Map ==== Normal Map texture.

=== Basic Material Modifiers ===

==== Diffuse Color ==== Diffuse directional light modificator. Default is white.

==== Ambient Color ==== Ambient light modificator. Default is white.

=== Emissivity ===

==== Emissive ==== Normalised emissive color, absolute light value, zero by default.

==== Emissive LV ==== LV value of emissive.

==== Emissive Absolute LV ==== If checked, uses absolute LV intensity to "average" scene brightness (like EV).

==== Apply Albedo To Emissive ==== If checked, albedo color defines the Emissive color. Default true.

==== Alpha To Emissive LV ==== Multiplies Emissive by Alpha. '''From Alpha Graphs''' is cheap, '''Per Pixel''' is high quality. Default is Off.

==== Emissive Map ==== If set, Emissive LV will be multiplied by each texture pixel. Default is Off.

=== General ===

==== Receive Shadow ==== If checked, particles react on shadows from environment. Default is Off.

==== Receive Lights ==== If checked, particles receive analytic lights. Default is Off.

=== Particle Basics ===

==== Alpha Test ==== Defines value above which pixels are rendered. 0..255. Default is 1.

==== Alpha Mul ==== Multiplicator of alpha value. Default is 1.

==== Blend Mode ==== Defines how the material will be blended. (Normal or Additive).

==== Tile U, Tile V ==== Number of tiles in U and V axis.

==== Sphere Size Multiplier ==== A particle is treated as a sphere of radius given by its size and this multiplier. A sprite is always rendered at the closest point on this sphere.

==== Gradient Map ==== Red channel from albedo texture is used as intext into U axis of this gradient map.

V axis is color change from birth (top of texture) to death (bottom of texture) of the particle.

=== Particle lighting ===

==== Vertex Normal Power ==== Darkening effect of automatic vertex normals on particle lighting (available when not using a normal map) (0 - 1)

==== Normal Stretching ==== "Normal blending" - extends lighting even to the normals less or more turned away from light (not available when normal power is 0)

==== Backlight ==== Backlight intensity (not available when normal power is 0)

==== Backlight Stretching ==== "Normal blending" from back light - extends back lighting even to the normals less or more turned towards the light (only available when using Backlight)

=== Particle Soft Depth ===

==== Softness ==== Softness of particles when they collide with meshes.

==== Depth Scale ==== Alpha to depth multiplier.

==== Camera Blend Near ==== Distance from camera where blend starts (the result is zero opacity)

==== Camera Blend Far ==== Distance from camera where blend ends (the result is full opacity)

{{GameCategory|armaR|Modding|Official Tools}}
4nl0sx1fr3o8aca9a47qmutej9cdcgt

# Arma Reforger:Procedural Animation Editor

5050
32986
353599
322858
2024-03-19T15:56:54Z
Lou Montana
10739
Text replacement - "{{Wiki|TODO|Add images}}&#8629;" to ""
353599
wikitext
text/x-wiki
The '''Procedural Animation Editor''' is used for the processing of engine signals and transforming those values to the animations. Every project consists of two files. {{hl|*.siga}} and {{hl|*.pap}}. A project can represent one animation or a logical group of animations i.e. vehicle dashboard, gear, etc.

* {{hl|.siga}} file - This file handles the processing of the signal and all of the required math operations. * {{hl|.pap}} file - Links the {{hl|*.siga}} outputs to model bones and handle its movement in desired directions and range.

{{Feature|informative|Some definitions: * Signal - Any value (number) sent by the engine to the Procedural Animation Editor. * Bone - Similar to a bone in the human body. It is a solid piece of model that can be animated and it interacts with the rest of the model. }}

== Editor Panels ==

# '''Nodes palette:''' This palette contains all available functions in the Procedural Animation Editor. # '''Resource browser:''' Serves to navigate throw folders hierarchy. # '''Item detail:''' All available parameters of selected node, or parameters of inputs (in {{hl|.siga}} file) if none is selected. # '''View:''' Preview with currently selected model. # '''Console:''' Used for printing information related to the project. # '''Main window:''' In this space you can build the chain of nodes to process an engine signal.

Nodes in the Procedural Animation editor can be chained together. This is done by pressing and holding {{Controls|LMB}} on the connection point of node and dragging the line to another connection point.

== Nodes ==

See [[Arma Reforger:Procedural Animation Editor: Nodes|Procedural Animation Editor: Nodes]].

{{GameCategory|armaR|Modding|Official Tools}}
c7x2axo386cyeo46bomumvox0210tsn

# Arma Reforger:Procedural Animation Editor: Nodes

5050
32989
329573
329548
2022-07-30T18:18:22Z
Lou Montana
10739
Text replacement - "</syntaxhighlight>" to "</enforce>"
329573
wikitext
text/x-wiki
{{TOC|side}} == pap Nodes and Buttons ==

=== Signal ===

This '''button''' is a shortcut to create a '''Signal''' (.siga) resource and node. {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the input. It is the same as name of the output in *.siga file. | |- | Comment | Custom user comment. | |- | Path | .siga file path | |}

In order to use an '''existing''' .siga node file, drag and drop it from the '''Resource Browser''' into the Main Window.

=== Constants ===

Set '''constant''' key-value pairs. {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |- | Metadata | | |- | Constant values | | |- | colspan="3" | '''Node Outputs''' |- | Set Key(s) | Respective Key Value(s) | |}

=== Bone ===

Add a new '''bone''' to the project. {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |- | Bone name | Name of the bone in the preview model. List is only populated if preview model was previously selected. This option is only used for preview of animation - it doesn't affect animation on asset to which it is attached. | |- | colspan="3" | '''Node Output''' |- | Out | Bone name. | |}

=== RotationSet ===

'''Set rotation''' of the bone. Only functionality of this node is to execute the animation. {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |- | Update collider | Defines if collider should be updated (rotated) when this animation is performed. | By default this option is set to off to save some performance. |- | colspan="3" | '''Node Inputs''' |- | In | Bone name. | |- | Rotation | Rotation value. | |- | colspan="3" | '''Node Output''' |- | Out | Value, how much the bone rotates. | |}

=== RotationMake ===

Set the axis in which the bone gets '''rotated'''. {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |- | Update collider | Defines if collider should be updated (rotated) when this animation is performed. | By default this option is set to off to save some performance. |- | X axis | Value, how much the bone rotates around the X axis. | |- | Y axis | Value, how much the bone rotates around the Y axis. | |- | Z axis | Value, how much the bone rotates around the Z axis. | |- | colspan="3" | '''Node Inputs''' |- | X axis | Value, how much the bone rotates around the X axis. | |- | Y axis | Value, how much the bone rotates around the Y axis. | |- | Z axis | Value, how much the bone rotates around the Z axis. | |}

=== RotationBreak ===

'''Break rotation''' vector into separate elements (x, y, z) {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |- | colspan="3" | '''Node Inputs''' |- | In | Rotation input | |- | colspan="3" | '''Node Output''' |- | X axis | Value, how much the bone rotates around the X axis. | |- | Y axis | Value, how much the bone rotates around the Y axis. | |- | Z axis | Value, how much the bone rotates around the Z axis. | |}

=== TranslateSet ===

Bone's '''translation'''. The only functionality of this node is to execute the animation. {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |- | colspan="3" | '''Node Inputs''' |- | In | Bone to be translated. | |- | Translation | Translation vectors. | |- | colspan="3" | '''Node Output''' |- | Out | | |}

=== TranslateMake ===

Set the axis in which the bone is '''translated'''. {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |- | X axis | Value, how much the bone is translated in the X axis. | |- | Y axis | Value, how much the bone is translated in the Y axis. | |- | Z axis | Value, how much the bone is translated in the Z axis. | |- | colspan="3" | '''Node Inputs''' |- | X axis | Value, how much the bone is translated in the X axis. | |- | Y axis | Value, how much the bone is translated in the Y axis. | |- | Z axis | Value, how much the bone is translated in the Z axis. | |- | colspan="3" | '''Node Output''' |- | Out | | |}

=== TranslateBreak ===

'''Break translation''' vector into separate elements (x, y, z) {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |- | colspan="3" | '''Node Inputs''' |- | In | Vector (x, y, z) | |- | colspan="3" | '''Node Output''' |- | X axis | Value, how much the bone is translated in the X axis. | |- | Y axis | Value, how much the bone is translated in the Y axis. | |- | Z axis | Value, how much the bone is translated in the Z axis. | |}

=== ScaleSet ===

Set bone's '''scale'''. Only functionality of this node is to execute the animation. {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |- | Update collider | If checked, update the model's collider. | |- | colspan="3" | '''Node Inputs''' |- | In | Bone to be scaled | |- | Scale | Vectors of scale | |- | colspan="3" | '''Node Output''' |- | Out | | |}

=== ScaleMake ===

Sets the axis in which the bone is '''scaled'''. {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |- | X axis | Value, how much the bone is scaled in the X axis. | |- | Y axis | Value, how much the bone is scaled in the Y axis. | |- | Z axis | Value, how much the bone is scaled in the Z axis. | |- | colspan="3" | '''Node Inputs''' |- | X axis | Value, how much the bone is scaled in the X axis. | |- | Y axis | Value, how much the bone is scaled in the Y axis. | |- | Z axis | Value, how much the bone is scaled in the Z axis. | |- | colspan="3" | '''Node Output''' |- | Out | | |}

=== ScaleBreak ===

'''Break scale''' vector to separate elements (x, y, z) {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |- | colspan="3" | '''Node Inputs''' |- | In | Vector (x, y, z) | |- | colspan="3" | '''Node Output''' |- | X axis | Value, how much the bone is scaled in the X axis. | |- | Y axis | Value, how much the bone is scaled in the Y axis. | |- | Z axis | Value, how much the bone is scaled in the Z axis. | |}

== siga Nodes ==

=== Input ===

'''Input''' is a value (number) provided by the engine. {| class="wikitable" ! Name ! Description ! Note |- | Name | Must reflect how input is named in the engine. | |- | Comment | Custom user comment. | |- | Value | Set signal's value. | This has an effect only in the editor for testing and debugging. |- | Min | Sets signal's minimum value. | This has an effect only in the editor for testing and debugging. |- | Max | Sets signal's maximal value. | This has effect only in editor for testing and debugging. |- | ValRT | Sets signal's value in real time. | If no node is selected, this value is shown. Has an effect only in the editor for testing and debugging. In 0.9.5.x version of the Workbench, if the chain contains a Smoother node, this value has no effect. |}

=== Output ===

'''Output''' is a value (number) sent from *.siga to *.pap file when it's processed. {| class="wikitable" ! Name ! Description ! Note |- | Name | Signal's name, used in *.pap file. | |- | Comment | Custom user comment. | |}

=== Value ===

'''Value''', as its name suggests, represents a number defined by the user.

{| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |- | Value | Any number which this node will represent. | |}

=== Random ===

'''Random''' generates a value in the defined range. {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |- | Min | Defines the beginning of the range in which the random number is generated | |- | Max | Defines the end of the range in which the random number is generated | |- | Update rate | Defines how often the value is generated. * Every Get - every time when the branch with the signal is processed (i.e. when the engine is on/off) * Every Frame - every frame of the game. | |}

=== Generator ===

'''Generator''' sets a value in the predefined interval. {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |- | Value to generate | Value to generate by the generator. | |- | Interval | Interval in milliseconds in which the number is generated. | |}

=== Sum ===

'''Sum''' all input values together. {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |}

=== Sub ===

'''Subtract''' a value from another. {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |- | Subtracter | Value which will be used as subtracter, if it's not set on node input. | |- | colspan="3" | '''Node Inputs''' |- | In | The value from which it will be subtracted. | |- | Subtracter | (Optional) Value which will be used as subtracter. | |}

=== Mul ===

'''Multiply''' inputs with each other. {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |}

=== Min ===

'''Minimum''' value of all inputs. {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |}

=== Max ===

'''Maximum''' value of all inputs. {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |}

=== Exp ===

Returns the base-'''exponential''' function x, which is e raised to the power x: e<sup>x</sup>. {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |}

=== Ln ===

Natural '''logarithm'''. {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |}

=== Log2 ===

'''Logarithm''' with base 2. {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |}

=== Log10 ===

'''Logarithm''' with base 10. {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |}

=== Abs ===

Return '''absolute''' value. {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |}

=== Div ===

'''Divide''' the dividend with the divisor. {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |- | Divisor | Value which will be used as divisor, if it's not set on node input. | |- | colspan="3" | '''Node Inputs''' |- | In | The value which will be divided. | |- | Divisor | Value used as divisor | |}

=== Pow ===

Return the input raised to the power of '''Exponent'''. {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |- | colspan="3" | '''Node Inputs''' |- | In | Input value. | |- | Exponent | Value used as Exponent. | |}

=== Remainder ===

Return the '''remainder''' of dividing input with divisor. {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |- | colspan="3" | '''Node Inputs''' |- | In | Input value. | |- | Divisor | Value used as the divisor. | |}

=== Average ===

'''Average''' the input values over time. {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |- | Capacity | (rounded to the closest power of two) | |}

=== Convertor ===

'''Convert''' the input into a value defined by the interval it falls into. {| class="wikitable" ! Name ! colspan="2" |Description ! Note |- | Name | colspan="2" | Name of the node. Used for better orientation in the project. | |- | Comment | colspan="2" | Custom user comment. | |- | Input as default | colspan="2" | If checked, input value is used as a default value. | |- | Default | colspan="2" | Default value. | |- | Ranges | colspan="2" | Set the range of value which will be converted to output value. i.e.: If the signal value has a range from 0 to 1 and Min is set to 0.1, Max to 0.2 with Out set to 100, the output value will be set to 100 if the Min / Max condition is met. Multiple of ranges can be set in one Convertor. | |- | | Min | Minimal value. | |- | | Max | Maximal value | |- | | Out | Output value | |}

=== Db2Gain ===

Convert '''decibels to gain'''. {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |}

=== Gain2Db ===

Convert '''gain to decibels'''. {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |}

=== St2Gain ===

Convert '''semitone to gain'''. {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |}

=== Gain2St ===

Convert '''gain to semitone'''. {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |}

=== Freq2Oc ===

Convert '''frequency to octave'''. {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |}

=== Env ===

'''Envelope'''. {| class="wikitable" ! Name ! colspan="2" |Description ! Note |- | Name | colspan="2" | Name of the node. Used for better orientation in the project. | |- | Comment | colspan="2" | Custom user comment. | |- | A | colspan="2" | x Min | <enforce> if (A == B && C = D) { if (input >= A && input < C) output = 1; else output = 0; } </enforce> |- | B | colspan="2" | x Max | |- | C | colspan="2" | x Min | |- | D | colspan="2" | x Max | |- | Fade-in | colspan="2" | Interpolation curve type. Between A and B | |- | Fade-out type | colspan="2" | Interpolation curve type. Between C and D | |- | | Linear | | |- | | S-Curve | | |- | | Power of 1.41 | f(x) = x^1.41 | |- | | Power of 2 | f(x) = x^2 | |- | | Power of 3 | f(x) = x^3 | |- | | Power of 1/1.41 | f(x) = x^1/1.41 | |- | | Power of 1/2 | f(x) = x^1/2 | |- | | Power of 1/3 | f(x) = x^1/3 | |}

=== Interpolate ===

'''Interpolate''' between two values. {| class="wikitable" ! Name ! colspan="2" |Description ! Note |- | Name | colspan="2" | Name of the node. Used for better orientation in the project. | |- | Comment | colspan="2" | Custom user comment. | |- | X min | colspan="2" | Minimal value of X. | |- | X max | colspan="2" | Maximal value of X. | |- | Y min | colspan="2" | Minimal value of Y. | |- | Y max | colspan="2" | Maximal value of Y. | |- | Fade-in / Fade-out type | colspan="2" | | |- | | Linear | | |- | | S-Curve | | |- | | Power of 1.41 | f(x) = x^1.41 | |- | | Power of 2 | f(x) = x^2 | |- | | Power of 3 | f(x) = x^3 | |- | | Power of 1/1.41 | f(x) = x^1/1.41 | |- | | Power of 1/2 | f(x) = x^1/2 | |- | | Power of 1/3 | f(x) = x^1/3 | |}

=== Smoother ===

'''Smooth''' the input value over time. {| class="wikitable" ! Name ! colspan="2" |Description ! Note |- | Name | colspan="2" | Name of the node. Used for better orientation in the project. | |- | Comment | colspan="2" | Custom user comment. | |- | Fade-in time | colspan="2" | Time in which value transform from lower value to higher value in milliseconds. i.e.: 0 to 1 | |- | Fade-in type | colspan="2" | Defines the function used to interpolate the value. | |- | Fade-out time | colspan="2" | Time in which value transform from higher value to a lower value in milliseconds. i.e.: 1 to 0 | |- | Fade-out type | colspan="2" | Defines the function used to interpolate the value. | |- | Input resets timer | colspan="2" | If checked, the new input will reset the time of previous interpolation. | |- | Always interpolate | colspan="2" | Check to make sure that the interpolation of the current value is completed even if a new value arrives. | |}

=== Floor ===

'''Round''' '''downward''', returning the largest integral value that is not greater than input. {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |}

=== Ceil ===

'''Round upward''', returning the smallest integral value that is greater than input. {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |}

=== Round ===

'''Round''' the value. {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |}

=== Clamp ===

Make sure that the input will be '''inside min-max interval'''. {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |- | Min | Minimal value. | |- | Max | Maximal value. | |- | colspan="3" | '''Node Inputs''' |- | In | Input value to clamp. | |- | Min | Minimal value. | |- | Max | Maximal value. | |}

=== ClampMin ===

Make sure that the input will '''never be smaller''' than min. {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |- | Min | Minimal value. | |- | colspan="3" | '''Node Inputs''' |- | In | Input value to clamp. | |- | Min | Minimal value. | |}

=== ClampMax ===

Make sure that the input will '''never be greater''' than max. {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |- | Max | Maximal value. | |- | colspan="3" | '''Node Inputs''' |- | In | Input value to clamp. | |- | Max | Maximal value. | |}

=== Sin ===

'''Sine''' of an input angle in radians. {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |}

=== Cos ===

'''Cosine''' of an input angle in radians. {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |}

=== Tan ===

'''Tangent''' of an input angle in radians. {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |}

=== ASin ===

'''Arcus sine''' of an input angle in radians. {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |}

=== ACos ===

'''Arcus cosine''' of an input angle in radians. {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |}

=== ATan ===

'''Arcus tangent''' of an input angle in radians. {| class="wikitable" ! Name ! Description ! Note |- | Name | Name of the node. Used for better orientation in the project. | |- | Comment | Custom user comment. | |}

{{GameCategory|armaR|Modding|Official Tools}}
0qvfdcvnr6u1uw8m28xzzoui4om8zge

# Arma Reforger:Resource Manager

5050
32599
373135
373133
2025-04-03T09:31:28Z
Reyhard
10671
/* Usage */
373135
wikitext
text/x-wiki
{{TOC|side|||y}} Welcome to the '''Enfusion Workbench - Resource Manager!'''

The Resource Manager is an integral part of the main "hub" of the '''Enfusion Workbench'''. The Resource Manager is its asset manager, which allows for '''importing, managing and editing''' assets and their related files. It’s also the place from which navigation to other tools or areas of Workbench can be done, as well as accessing project and Workbench '''options''', '''build data''', '''package''', '''build project''' and more.

=== Interface ===

<div class="float-right"> [[File:armareforger-resource-manager-main-view.gif|thumb|500px]] </div>

By default, '''Resource Manager''' welcomes you with 4 main sections:

# '''Resource Browser''' - as its name suggests, this window can be used to browse through available resources from base game and loaded mods # '''Main Window''' - if there are not tabs opened, then '''Welcome Tab''' will be visible. When resource is opened, it will appear in this main window area in a tab. # '''Log Console''' - window containing live updated logs from current session. # '''Window Menu''' - in top toolbar it is possible to access '''all available Editors''' , options, plugins and other things. More details can be found below

Beside that, the Workbench version is available in the bottom right corner along to which backend (Production = Stable branch, Submission = Experimental branch) it is connected.

== Window Menu ==

{| class="wikitable" ! Title ! Hierarchy |- ! Workbench | * Save * Save All * Options * Publish Project * Login/Logout * Exit |- ! Editors | * {{Link|Arma Reforger:World Editor}} * {{Link|Arma Reforger:Particle Editor}} * {{Link|Arma Reforger:Animation Editor}} * {{Link|Arma Reforger:Script Editor}} * {{Link|Arma Reforger:Audio Editor}} * {{Link|Arma Reforger:Behavior Editor}} * {{Link|Arma Reforger:Procedural Animation Editor}} * {{Link|Arma Reforger:String Editor}} |- ! View | * Normal view * Text view * Hex view ** 8 bytes ** 16 bytes ** 32 bytes |- ! Edit | * Undo * Redo * Reimport resource * Locate file in resource browser |- ! Window | * Next Tab * Prev Tab * Cycle Tabs * Close Current Tab * Undo Close Tab

* Log Console * Resource Browser * Resource Browser 2 |- ! Utilities | * Generate GUID * File system sources * Qt introspection tool |- ! Plugins | * Settings ** Reload WB Scripts ** Clear All Settings ** List world resources ** Texture Import ** Model Import ** Material Import ** Terrain Import ** Edit Selected Prefab(s) ** SVN Log ** Create/Update Selected Editable Prefabs

* Image Set Generator * Batch resource processor * Batch texture processor * Re-Save Meta Tool * Re-Save Tool * In-game Editor ** Register Placeable Entities... ** Update All Editable Prefabs ** Create/Update Selected Editable Prefabs * SVN ** SVN Log * User Settings ** Edit Engine Settings ** Edit Game Settings |- ! Help | * About |}

=== Workbench ===

==== Save ==== Save the file from the currently selected tab.

==== Save All ==== Save the file from all opened tabs.

==== Options ==== See [[Arma Reforger:Resource Manager: Options|Resource Manager: Options]]

==== Login/Logout ==== Log in or out of the Bohemia account. Logging in allows for publishing online to the [[Arma Reforger:Workshop|Bohemia Workshop]].

==== Publish Project ==== [[Arma Reforger:Mod Publishing Process|Publish the mod]] in its current state.

==== Exit ==== Close the Workbench and all other open editors, if any.

=== Editors ===

This menu allows for navigating through all available editors.

{{Feature|informative|Greyed out editors are either already opened or unopenable as per the script base status (non-compilable code).}}

=== View ===

This menu allows the switching of the current tab's view mode between:

* '''Normal''' view * '''Text''' view * '''Hex''' view (8, 16 or 32B)

{{Feature|informative|'''Text''' and '''Hex''' views are '''read-only'''.}}

=== Edit ===

==== Undo ==== Undo the last applied action to the world. Shortcut: {{Controls|Ctrl|Z}}.

==== Redo ==== Reapply the last undone action. Shortcut: {{Controls|Ctrl|Y}}.

==== Reimport resource ==== Reload the current file from storage. Wanted changes must have been saved first! Shortcut: {{Controls|F5}}.

==== Locate file in resource browser ==== Show the selected file in the Resource Browser tree. Shortcut: {{Controls|Ctrl|B}}.

==== Edit prefab ==== Open the World Editor to edit the currently-opened prefab. Shortcut: {{Controls|Ctrl|E}}.

=== Window ===

The first section groups Tab operations.

The second section groups Window operations.

==== Next Tab ==== Shortcut: {{Controls|Ctrl|PageDown}}.

==== Previous Tab ==== Shortcut: {{Controls|Ctrl|PageUp}}.

==== Cycle Tabs ==== Shortcut: {{Controls|Ctrl|Tab}}.

==== Close Current Tab ==== Shortcut: {{Controls|Ctrl|W}}.

==== Undo Close Tab ==== Shortcut: {{Controls|Ctrl|Shift|T}}.

==== Log Console ==== Hide/show the Log Console and its history. Shortcut: {{Controls|F1}}.

==== Resource Browser ==== Hide/show the "project tree" view. Shortcut: {{Controls|F3}}.

==== Resource Browser 2 ==== Hide/show a secondary Resource Browser. This one has no keyboard shortcuts.

=== Utilities ===

==== Generate GUID ==== Generate a new Globally Unique IDentifier.

==== File system dump ==== Show which directories are used as source, in the form of

#'''<Game>''' game data directory #'''core''' ./addons/core/ #'''profile''' game user profile directory

==== Qt introspection tool ==== Show debug information about Qt, the Workbench Graphical User Interface (GUI).

=== Plugins ===

This menu lists Workbench plugins. Each plugin has its own usage and user manual.

==== Settings ====

===== Reload WB Scripts ===== Reload Workbench plugins. Shortcut: {{Controls|Ctrl|Shift|R}}

===== Clear All Settings ===== Resets all parameters that have been changed, Workbench parameters included.

===== Texture Import =====

===== Model Import =====

===== Material import =====

===== Terrain Import =====

===== Edit Selected Prefab(s) =====

===== Create/Update Selected Editable Prefabs =====

===== Bookmark # =====

===== SVN Log =====

==== Batch resource processor ====

==== Batch texture processor ====

==== Re-Save Meta Tool ==== Re-save the {{hl|.meta}} files for files having the provided extensions. Useful if a format has changed and files should be re-saved.

==== Re-Save Tool ==== Re-save the files having the provided extensions. Useful if a format has changed and files should be re-saved.

Extensions are to be provided '''without''' the dot (e.g {{hl|layout}} and not {{hl|.layout}})

==== Image Set Generator ====

==== In-game Editor ====

==== User Settings ====

===== Edit Engine Settings =====

===== Edit Game Settings =====

===== Register Placeable Entities... =====

===== Update All Editable Prefabs =====

===== Create/Update Selected Editable Prefabs =====

==== Bookmarks ====

==== SVN ====

===== SVN Log =====

==== Validate Behavior Trees ====

==== Search Tool (XOBs) ====

==== Edit Selected Prefab(s) ==== Shortcut: {{Controls|Ctrl|Shift|E}}

==== Generate Class from Layout ====

==== Localize Selected Files ==== Shortcut: {{Controls|Ctrl|Alt|L}}

==== Find Linked Resources ====

==== Validate Prefabs ====

==== Generate Controls Scheme ====

== Resource Browser ==

Resource Browser is the main tool for '''navigating''' and '''managing''' game data, it can work with "local" data, packed data and both at the same time.

Default layout provides navigation through game data in two windows - one displays '''directories''' in tree layout and the other displays content ('''sub-directories''' and '''files''') of the selected one.

There is a '''Search bar''' at the top left which has various filters and options available.

And lastly, over viewport, there are '''tabs''' with opened resources.{{Feature|informative|This section also applies to "Resource Browser 2" that is a simple copycat of this window.}}

=== Contextual Menus ===

In both windows, using {{Controls|rmb}} on files and folders opens a '''context menu''', dependent on the clicked item's type: {| class="wikitable valign-top" ! Context ! Options |- | Tree view | * Show in Explorer

* Register * Edit Properties * Delete * Rename

* Copy Resource Name(s) * Copy Resource GUID(s) * SVN ** Update ** Commit ** Add ** Remove ** Revert |- | File view | * Open File in New Tab

* Show in Explorer * Navigate to Folder

* Register<br>Registers the resource to be used (creates .meta files) * Register and Import<br>'''Register''' and (re)'''import''' * Reimport<br>Converts file from source file (tiff, fbx, etc.) to Enfusion file (xob/txo, edds, etc.) * Delete * Rename

* [[Arma Reforger:Data Modding Basics#Navigate to Original|Navigate to Original]] * [[Arma Reforger:Data Modding Basics#Navigate to Ancestor|Navigate to Ancestor]] * [[Arma Reforger:Data Modding Basics#Navigate to Override|Navigate to Override]] * [[Arma Reforger:Data Modding Basics#Using .22Override in....22 function|Override in...]] * [[Arma Reforger:Data Modding Basics#Using .22Duplicate to....22 function|Duplicate to...]] * [[Arma Reforger:Data Modding Basics#Using .22Inherit in....22 function|Inherit in...]] * [[Arma Reforger:Data Modding Basics#Using .22Transfer to....22 function|Transfer to...]]

* Copy Resource Name(s)<br>Copies the Enfusion path to this resource (format {{hl|{GUID}path/to/file.ext}}) to the clipboard * Copy Resource GUID(s)<br>Copies the resource GUID to the clipboard * Copy File Path(s)<br>Copies the absolute path (format {{hl|C:\path\to\file.ext}}) to the clipboard * Copy Link<br>Copies an [[Arma Reforger:Resource Manager: Options#Register .22enfusion:.2F.2F.22 protocol|{{hl|Enfusion://}} link]] pointing to this resource to the clipboard * SVN ** Update ** Commit ** Add ** Remove ** Revert * Find References<br>'''expensive operation''' looks through all project files to find a reference to this element. ''not present for script files'' * Refresh Thumbnail(s) * [[Arma Reforger:Prefabs Basics#Prefab edit mode|Edit Prefab(s)]]<br>[[Arma Reforger:Prefabs Basics#Opening prefab in Prefab Edit Mode|Opens the prefab]] in [[Arma Reforger:World Editor|World Editor]] in Prefab Edit Mode to see and edit it * Save changes * Revert changes |}

=== Usage ===

==== Search bar ==== The '''Search bar''' allows the typing of words/sequences, separated by a space, that should be found in the file name - including keywords.

It is also possible to search by GUID, i.e. {{hl|A1F2619C082CFDDF}} will find {{hl|{A1F2619C082CFDDF}assets/models/weapons/Ammo/Bullets/545x39/Data/5_45x39_US_NMO.edds}}

e.g. looking for {{hl|village 1i03 .xob}} will find and pinpoint {{hl|House_Village_E_1I03.xob}}.

===== Special characters ===== By using those character it is possible to modify the search result {| class="wikitable" |+ !Character !Function !Example |- |# |Search by tag |{{hl|#myCustomTag}} - search by tag |- |! |Exclude from search |{{hl|chair old !dst}} - this will search for all assets called '''chair old''' but it will exclude from the list files having '''dst''' in the file name |}

==== Filters ==== * Show Runtime files only * Show unregistered sources only

* '''Filter by Category'''<br>Filter files by type (See [[Arma Reforger:File Types|File Types]])

==== Options ==== * Expand All on Search

* Horizontal Layout * Vertical Layout

* Grid View * List View

* On with filters * Always On * Always Off

* Icons Scale

* Sort by Name * Sort by Size * Sort by Type * Sort by Date

* Ascending sorting order * Descending sorting order

== Viewport ==

=== Tabs ===

{| class="wikitable valign-top" | Right-click | * Close Tab * Close All Tabs * Close All But This * Reopen Closed Tabs

* Navigate to File * Show in Explorer |}

A '''double-click''' on the tab will '''Locate''' the file '''in Resource Browser''', when a middle mouse button click will close it.

=== Viewport Types ===

See {{GameCategory|armaR|Modding|Official Tools|Resource Manager Viewports|link= y}}.

== Log Console ==

Log console displays various messages, they can be either '''informative''', '''warnings''' or '''errors''', and can be sorted by '''type''' or '''category'''.

== Details / Import Settings ==

'''Details''' and '''Import Settings''' tabs are closely related, even dependent on the Viewport type. See Resource Manager: Viewport for more respective details.

=== Import Settings ===

This tab is about import options. Each type of resource has different options available that are detailed in Resource Manager: Viewport.

If any changes are done in this category, it’s required to click on the "'''Reimport resource'''" button at the top to take effect.

{{Feature|informative|Each platform has its own settings, but all of them inherit from PC.}}

==== Edit also selected files ==== It is possible to edit multiple files at once. To do that, you need to check the "Edit also selected files" checkbox and select files in Resource Browser.

==== Parameters ==== Different per resource type, each described in {{GameCategory|armaR|Modding|Official Tools|Resource Manager Viewports|link= y}}.

== General Shortcuts ==

{| class="wikitable" ! Shortcut ! Function |- | {{Controls|Ctrl|S}} | Saves resource in active tab |- | {{Controls|Ctrl|Shift|S}} | Save all |- | {{Controls|F5}} | Reimports active resource |- | {{Controls|Ctrl|B}} | Locates active resource in Resource Browser |- | {{Controls|F1}} | Opens/closes log console |- | {{Controls|F3}} | Opens/closes Resource Browser window |- | {{Controls|Ctrl|Page Up}} | Next tab |- | {{Controls|Ctrl|Page Down}} | Previous tab |- | {{Controls|Ctrl|Tab}} | Cycles between opened tab |- | {{Controls|Ctrl|W}} | Closes active tab |}

{{GameCategory|armaR|Modding|Official Tools}}
luexpo4e5k30gk9shl3ubauieiyll3t

# Arma Reforger:Resource Manager: Options

5050
32923
370582
370581
2025-01-12T21:10:30Z
Lou Montana
10739
Some wiki formatting
370582
wikitext
text/x-wiki
{{TOC|side|0.8||y}} Access the [[Arma Reforger:Resource Manager|Resource Manager]] Options through '''Workbench > Options'''.

[[File:armareforger-resourcemanager-options.png]] = Game Project =

== General Parameters ==

The side dropdown box allows to select between the detected projects. {{hl|Core}} is the engine one, whereas {{hl|ArmaReforger}} is about {{armaR}} project(s).

{{Feature|informative|The switch happens for all settings present '''on this tab only''' - other options tabs are independent of this setting.}}

A project {{hl|.png}} image can be set/unset here using Set/Clear buttons on the left.

=== Unsorted ===

==== ID ==== The project's id

==== GUID ==== The project's [[Arma_Reforger:Workbench_Metadata|GUID]]

==== TITLE ==== The project's user-friendly title

==== Dependencies ==== List of all project dependencies. List contains GUIDs of all projects which should be also loaded when engine is tasked with loading given project.

[[File:armareforger-resourcemanager-options-dependencies.png|alt=|780x780px]]

To add new dependency, perform the following steps:

* Click on '''plus +''' '''(1)''' sign * In new entry that was created either: ** Click on '''button with two dots (2)''' and select '''gproj''' of your desired dependency ** Type in GUID of your desired dependency manually in '''text field on the left side (3)'''. You can obtain GUID by opening gproj in text editor for instance * Click on '''OK button''' (4) once you are done to save changes. {{Feature|informative| {{armaR}} requires {{hl|core}} to work properly.<br> Any {{armaR}} mod requires {{hl|Arma Reforger}} as a dependency.<br> There is no need to add {{hl|Arma Reforger}} '''and''' {{hl|core}} as having {{hl|Arma Reforger}} implies having {{hl|core}}. }} After changes are saved, selected dependencies will be loaded after restart of Workbench.

When using '''[[Arma Reforger:Mod Project Setup#Workbench Launcher Setup|Enfusion Workbench Launcher]]''', make sure that all dependencies are listed in available projects list - otherwise game will fail to launch selected mods and it will fall back to vanilla '''Arma Reforger without any mods loaded'''.

When using '''[[Arma Reforger:Startup Parameters|startup parameters]]''', make sure that all dependencies are located in one of the folders listed by '''[[Arma Reforger:Startup Parameters#addonsDir|addonsDir]]''' parameter, otherwise it will also fail to launch.

If one of the dependencies no longer exists and the mod cannot be started anymore, open its {{hl|.gproj}} file in text editor and carefully remove the faulty dependency and save the file.

'''Removal of dependencies''' is done by selecting one of the entries in the list and then pressing pressing '''minus -''' arrow next to the '''plus + (1)''' button{{Feature|important|Do not try to empty to remove dependencies by removing text from text field! Engine will treat it as an dependency with '' GUID and will fail to load!}} {{Clear}} ==== Engine Settings Path ==== Project's engine config name

==== Game Settings Path ==== Project's game config name

==== Brush Library Path ==== Project's brush location

==== Welcome Screen Config ==== Resource path to the Workbench Welcome Screen configuration file (based on WelcomeScreen root config)

== Per platform parameters ==

Here it is possible to select for which platform the following settings will be applied.

It is also where one can add new platform parameters (by clicking "+") or remove them (by clicking "-").

=== General ===

==== World File ==== Which world is loaded on project's startup (e.g Main Menu world)

==== SplashScreen ====

=== Engine ===

==== Platform Hardware ==== Defines the platform's hardware (e.g {{hl|HEADLESS}} has {{hl|PC}} hardware)

==== Product ID ==== Hexadecimal representation of the product ID.

==== Default Settings ==== Defines the project's default settings.

Based on {{hl|EngineUserSettings}} config class, the {{hl|Default Settings}} class holds sub-settings classes:

===== Audio Settings ===== * Volume * Volume SFX * Volume Music * Volume Voice Chat * Volume Dialogue * Volume UI * Stereo Mode

===== Terrain Gen material Settings ===== * Detail * Soft Alpha * Detail Distance * Geometry Level

===== User Interface Settings ===== * Use Software Cursor * Language Code * System Language Code

===== Resource Manager User Settings ===== * Texture Detail * Geometric Detail

===== Postprocess User Settings ===== * PostProcess

===== Material System User Settings ===== * Texture Filter * Max Aniso

===== Video User Settings ===== * Frames Limit * Max FPS * Window Mode * Screen Width * Screen Height * Resolution Scale * Super Width * Super Height * Window Pos X * Window Pos Y * Console Mode * Console Width * Console Height * Console Pos X * Console Pos Y * Vsynch * Square Pixel * Ratio3D * Fsaa * Render Format * Distant Shadow Quality * Environment Quality * Gamma * Contrast * Brightness * Adapter * Device * Atoc * Generate Shaders * FSR Enabled

===== Grass Material Settings ===== * Distance * Lod * Quality

===== Input Device User Settings ===== * Mouse Speed * Mouse Invert * Gamepad Invert * Gamepad Profile * Joystick Profile

===== Graphics Quality Settings ===== * Object Draw Distance Scale

===== Water Pool Material Settings ===== * Detail

===== Display User Settings ===== * PP Quality ** HBAO ** SSDO ** SSR ** Under Water ** PPAA ** Rain * Overall Quality

===== Pipeline User Settings ===== * Shadow Quality * Tight Cascades * Light Shadow * Light Level * Reflections * Linear Depth * G Buffer

===== Clustered Tiling User Settings ===== * Clusters X * Clusters Y * Clusters Z * Reflection Texture Size * Diffuse Texture Size * Cluster Far Plane * Cluster Near Plane * Probe Max Distance * Probe Priority Distance

=== Modules ===

==== Script Project Manager Settings ==== * Modules * Configurations

==== Navmesh Manager ==== * Project Settings

==== Distant Shadows Quality Profiles ==== * Low * Medium * High

==== Environment Quality Profiles ==== * Environment Quality Profiles

==== Input Manager Settings ==== * Default * User * Ui Mappings * Hold Duration * Click Duration * Double Click Duration * Repeat Initial Interval * Repeat Interval

==== Physics Settings ==== * Iterations * Ticks * Margin * Gravity * Grid BP * Interactions ** Layers ** Layer Presets ** Response Indices ** Matrix ** Response Matrix ** Layers Filter ** Layer Projectile

==== Wetness Render Settings ==== * Min Diffuse Coef * Min Roughness Coef * Porosity From Roughness Coef * Albedo Change Start * Albedo Change End * Roughness Change Start * Roughness Change End * Wetness Normal Limit Min * Wetness Normal Limit Max * Roughness Normal Limit Min * Roughness Normal Limit Max * Accum Normal Limit Min * Accum Normal Limit Max * Flood Sharpness Cracks * Flood Sharpness Puddles * Min Obj Radius * Min Obj Side Size * Min Tree Scale * Max Tree Scale * Max Height Cracks * Max Height Puddles * Underwater Fade Start * Underwater Fade Size

==== Chimera Global Config ==== * Default Player Controller<br>This defines default player character which is used by various game systems, like [[Arma_Reforger:World_Editor#Play_Game|Play from camera position]] option.<!-- --> By default it is using {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Characters/Core/DefaultPlayerController.et}}.<!-- --> To change character prefab which is used in-game, to change '''Default Controlled Entity''' parameter * Maximum View Distance * Minimum View Distance * Ballistics ** Damage Modifier

==== Setting Profiles Config ==== * Effects * Overall Low * Overall Medium * Overall High * Overall Ultra

==== Audio Global Config ==== * Terrain Attenuation * Terrain LPF Rolloff

==== Resource Manager Settings ==== * Stream Mode

==== Menu Manager Settings ==== * Menu Configs

==== Shadow Quality Profiles ==== * Shadows Quality Profiles

==== Widget Manager Settings ==== * Widget Styles * Mouse Cursors * String Tables ** StringTableDefinition *** String Table Source *** Languages

= Workbench = == Qt Style Sheet ==

Defines a qss stylesheet to be used over the Workbench.

== Use SVN integration ==

Uses SVN on file operation (rename, delete etc); requires SVN command line tools to be installed.

{{Feature|informative|A Workbench restart is required for this option to take effect.}}

== Auto-rebuild scripts ==

Automatically launches a script rebuild when changes from Script Editor have been detected - otherwise, {{Controls|Ctrl|Shift|R}} rebuilds scripts manually.

== FPS limit ==

Allows to set an FPS limit to save on resources. Recommended value is screen's refresh ratio, e.g 60 or 144 Hz.

== Enable net API ==

Enables net API where external applications like Blender (with [[Arma Reforger:Enfusion Blender Tools|Enfusion Blender Tools]] loaded) can communicate with Workbench.

== Invert mouse ==

Invert mouse's Y-axis in Workbench.

== Register "enfusion://" protocol ==

Registers the ''''"enfusion://" protocol''' in Windows so Enfusion links open the Workbench.

Once Enfusion protocol is registered, clicking on Enfusion link will launch Workbench, open one of the selected Editors.

{{Feature|informative|See {{Link|Arma Reforger:Workbench Links|Workbench Links}} for more information.}}

== Export settings ==

Export Workbench settings as {{hl|.ini}} file.

= World Editor =

== General ==

=== Undo Steps ===

Number of stored {{Controls|Ctrl|Z}} undo operations.

== Compass ==

=== Show compass ===

Defines if the compass is shown in the main viewport.

=== Show axis ===

Defines if the X-Y-Z axis are shown in the main viewport.

== Entity Selection ==

=== Outline Enabled ===

=== Outline Thickness ===

=== Outline Mask enabled ===

=== Outline Mask opacity ===

=== Outline Intersection Opacity ===

= Animation Editor =

== Event Filter ==

* Event Filter * Include/Exclude

== Animation export profile directory ==

<!-- == Path ==

=== File Browser start path ===

Defines which paths are shown in file browsers. Paths are wrapped in quotes, ending with a slash, and separated with commas (e.g: {{hl|"anims/","anims2/"}}) -->

== Node Colors ==

Defines Colours for each type of nodes.

= Script Editor =

== Tab Size ==

Defines the size in spaces a tab has. The tab will remain a tab character, only its display width will be impacted.

== Font Size ==

Defines the font size.

== Font Family ==

Defines the font family.

== Append closing bracket ==

Automatically append the closing bracket ({{hl|}<nowiki/>}}) when opening one ({{hl|{<nowiki/>}}).

== Show scroll-bar markers ==

Shows where code was modified/saved, breakpoints etc on the scrollbar to the right.

= Audio Editor =

== Default audio listener model ==

Defines the audio listener's default 3D model (xob).

= Behavior Editor =

== Restore session ==

Restore the previous session on startup.

= Shortcuts =

Defines all the shortcuts for all the following categories:

* Camera * Common * Compass Gizmo * Resource Browser * Resource Manager * World Editor * Particle Editor * Animation Editor * Script Editor * Audio Editor * Behavior Editor * Navmesh Generator * Procedural Animation Editor * String Editor

A "Reset All" button is made available to reset shortcuts to default, next to the search bar.

{{GameCategory|armaR|Modding|Official Tools}}
oj285p5xlw14q2zqh9gob3n43inq7oh

# Arma Reforger:Script Editor

5050
32430
373524
369645
2025-05-19T10:42:20Z
Lou Montana
10739
/* Debug */ add shortcuts + F5 = start World Editor game mode
373524
wikitext
text/x-wiki
{{TOC|side}} Welcome to the '''Enfusion Script Editor!'''

The '''Script Editor''' is a text editor module with integrated debugger, available from within the Enfusion Workbench that allows the user to '''edit, manage and debug''' scripts. It also provides many tools and utilities for improved efficiency like '''syntax highlighting''', script '''auto-completion''', fast script '''validation''' and numerous different methods of '''searching''' files, scripts and '''symbols''' within the project.

For a Script Editor newcomer's quickstart see the [[#Getting_Started|'''Getting Started''']] section.

To learn more about the features of the Script Editor, see [[#Script_Editor_Features|'''Script Editor Features''']].

= Script Editor Features =

The Script Editor provides many features that make writing and managing code easier.

There are numerous ways of searching through the code, namely '''Find File''', '''Text Search''' or '''Find Symbol''' in addition to the '''Outline''', '''Find In Entire Solution''' and '''Goto Declaration''' functionalities.

To learn more about navigating the Script Editor and the codebase, see [[#Navigate_and_Find_Code|'''Navigate and find code''']]. To learn more about script syntax error checking and validation, see [[#Compilation_and_Errors|'''Compilation and Errors''']].

Run-time Debugging features include - but are not limited to - the '''Debugger''', '''Breakpoints''', '''Callstack''' and '''Watch'''. For more information regarding debugging, see [[#Debugging|'''Debugging''']].

=== Editor Features ===

{| class="wikitable" !Feature !Description |- | Syntax Highlighting | Highlighting of language specific keywords, functions and matching braces. |- | Auto Complete | Auto-completion/suggestion of code via known symbols. See [[#Auto_Complete|'''Auto Complete''']]. |- | Script Validation and Error Checking | Syntax checking, for more information see [[#Compilation_and_Errors|'''Compilation and Errors.''']] |- | Searching | Full-text search, symbol search, search for files and more. See [[#Searching|'''Searching''']]. |- | Line Numbers | Script file line numbers display in the [[#Text_Editor|'''Text Editor''']]. |- | Debugger | Code can be debugged step by step via the usage of the debugger. See [[#Debugging|'''Debugging''']]. |- | Undo and Redo | Changes made by the user can be undone and redone at will. |}

=== Navigate and Find Code ===

Moving around in the code can be done in several different ways, including navigating backwards and forwards to the last insertion points. Navigation can also be done ''via'' [[#Goto_Declaration|'''Goto Declaration''']].

Search for and replace text in single or multiple files can be done using the [[#Find_in_Files|'''Find in Files''']].

{{Feature|informative| For more information regarding code navigation, see [[#Navigation|'''Navigation''']].<br> For more information regarding searching, see [[#Searching|'''Searching''']]. }}

=== Editor Personalization ===

The layout of the Script Editor is composed from many different windows and panels. They can be resizes, undocked from their position or docked to a preference. To learn more refer to [[#Script_Editor_Windows|'''Script Editor Windows''']]. In addition, the Script Editor can also be customised to a certain degree by changing the font and font size it uses by default - find more information in [[#Preferences|'''Preferences''']].

=== Editor Shortcuts ===

Opposed to finding particular options from within the Editor windows manually, there is also the option to use some of (or all of) the available keyboard shortcuts - learning to use them might drastically improve the speed and efficiency of the workflow. For more information about keyboard shortcuts, see [[#Keyboard_Shortcuts|'''Keyboard Shortcuts''']].

== Getting Started ==

In this quick introduction to the Script Editor we'll take a tour of some of the windows, tools and other features. For a more in-depth look at features of the Script Editor see [[#Script_Editor_Features|'''Script Editor Features''']].

=== Opening Workbench ===

The Script Editor can be opened from the main ''Enfusion Workbench window'' at any time. There can only be one instance of the Script Editor running, but it can be opened and closed at free will.

The Script Editor can be opened from the '''''Workbench menu bar (1)''''' by selecting the '''''Script Editor''''' '''''(2)''''' option in the '''Editors''' drop-down menu, or by clicking the '''Script Editor''' button '''''(3)''''' in the Resource Manager's welcome page.

[[File:armareforger-scripteditor-launch.jpg|800px]]

=== Default Layout ===

The default (initial) layout of the Script Editor is composed of the following windows and panels, listed in counter clockwise order as seen on the image below.

In order to learn more about individual windows, please refer to individual pages. For information about working with the windows in general, see '''Script Editor Windows'''.

# [[#Menu_Bar|'''Menu Bar''']] # [[#Debug|'''Debug''' ]] # [[#Outline|'''Outline''']] and [[#Projects|'''Projects''']] # [[#Watch|'''Watch''']], [[#Errors|'''Errors''']] and [[#Find_Results|'''Find Results''']] # [[#Callstack|'''Callstack''']], [[#Breakpoints|'''Breakpoints''']] and [[#Output|'''Output''']] # [[#Console|'''Console''']] and [[#Find_in_Files|'''Find in Files''']] # [[#Find_Entity|'''Find Entity''']], [[#Find_Symbol|'''Find Symbol''']], [[#Find_File|'''Find File''']] and [[#Bookmarks|'''Bookmarks''']] # [[#Text_Editor|'''Text Editor''']]

[[File:armareforger-scripteditor_layout.png|800px]]

=== Compilation and Errors ===

For error management, see [[#Debugging|'''Debugging''']].

Let's start by creating and validating our first script.

Navigate to the '''''Projects (1)''''' window and open (or create and open) the '''''selected file (2)'''''.

[[File:armareforger-scripteditor_helloworld_00_openfile.png|800px]]

Write the wanted code ''via'' the '''''Text Editor (1).''''' In our case we have a '''''class Welcomer''''' that provides us with a void method '''''SayHello'''''.

Pay close attention to the syntax '''''error on line 11 (2)'''.'' We are missing a closing bracket and a semicolon at the end of the line.

[[File:armareforger-scripteditor_helloworld_01_scripterror.png|800px]]

Use the '''Menu Bar''' to access the '''''Validate Scripts (2)''''' option in the '''Build''' tab.

[[File:armareforger-scripteditor_helloworld_02_validate.png|800px]]

==== Errors ==== The script validation has resulted in multiple errors that can be seen in the '''''Errors (1)''''' window of the Script Editor.

'''Double Click''' {{Controls|LMB2}} on any error to navigate to its location in the '''Text Editor'''.

[[File:armareforger-scripteditor_helloworld_03_errors.png|800px]]

After fixing errors and validating the scripts once again, no problems are found. The [[#Output|'''''Output (1)''''']] window then shows that the compilation finished successfully''.''

[[File:armareforger-scripteditor_helloworld_04_success.png|800px]]

= Preferences =

The Script Editor can see some settings adjusted like the font family type and the font size in the Script Editor tab of the [[Arma_Reforger:Resource_Manager:_Options#Font_Family|'''Workbench Options''']].

The '''''Workbench menu bar (1)''''' in the main [[Arma_Reforger:Resource_Manager|Resource Manager]] window allows access to the options by selecting the '''''Workbench''' &rarr; '''Options (2)''''' entry in the '''Workbench''' drop down menu.

[[File:armareforger-scripteditor_wb_options.png|800px]]

The settings can then be personalised in the '''''Options (1)''''' window by editing the properties available in the '''''Script Editor (2)''''' tab.

[[File:armareforger-scripteditor_wb_options_window.png|800px]]

= Navigation =

== General ==

=== Menu Bar ===

The menu bar allows access to some of the most sought after '''features''' of the Script Editor. The main tabs are:

* '''File''' &rarr; ''Provides options of working with files like'' '''Save All''' * '''Edit''' &rarr; ''Provides editing options like'' '''Jump To Line''', '''Navigate Back''' ''or'' '''Duplicate Line''' * '''Build &rarr;''' ''Provides build options like'' '''Validate Scripts''' ''or'' '''Compile and Reload Scripts''' * '''Debug''' &rarr; ''Provides debugging options like'' '''Debug Client''', ''or'' '''Insert Breakpoint''' * '''Windows''' &rarr; ''Provides the option to open windows like the'' '''Projects''''','' '''Outline''' ''or'' '''Callstack''' * '''Bookmarks''' &rarr; ''Provides bookmark options like'' '''Toggle Bookmark''' ''or'' '''Next Bookmark''' * '''Plugins''' &rarr; ''Provides and general and individual'' '''(options per plugin)'''

[[File:armareforger-scripteditor_main_panel.png|800px]]

=== Script Editor Windows ===

==== Opening and Closing ==== The Script Editor works with windows which all contribute to the layout of the editor. Windows can be opened and closed by the user at any given time and moved or docked to a certain position within the editor.

A window can always be closed by using '''''Click '''''on the icon in the window title bar. If the window needs to be re-opened, it can be done so ''via'' the '''''Menu Bar''' &rarr; '''Windows (1)''''' option.

[[File:armareforger-scripteditor_windows_tab.png|800px]]

==== Docking and Undocking ==== To undock a window from its position, either '''''Click '''''on the button or hover the mouse cursor over the window title bar and hold the '''''Left Mouse Button '''''while dragging the window out.

To dock a window into a different position, keep dragging the '''windows title''' by holding the '''''Left Mouse Button '''''. Valid positions where the window can be docked will be visualised by the '''highlighted area.''' Release the '''''Left Mouse Button ''''' and the window will dock itself.

[[File:armareforger-scripteditor_wb_windows_docking.gif]]

=== Projects ===

==== Summary ==== A project is a collection of code files that exists within a particular module.

To search for files, use the '''''Search''' '''(1)''''' panel that can be found within the '''''Projects''' '''(2)''''' window.

'''''Left-click '''''to select any entry from the projects window.

'''''Right-Click '''''on any entry to expand a '''''contextual menu (3)''''' that will provide additional options like removal or navigation to file via Explorer.

'''''Double Click '''''on a selected Script File to open it in the '''Text Editor'''.

[[File:armareforger-scripteditor_outline_navigation.png|800px]]

==== Icons ==== All entries visible within the Projects browser use a specific icon representing their type:

{| class="wikitable" !Icon !Description |- | | Project |- | | Directory |- | | Script File |}

=== Text Editor ===

==== Summary ==== The '''''text editor (1)''''' will allow us to navigate through script files and edit them as desired. The '''''navigation bar (2)''''' can be used to switch between open script files.

'''''Click''''' ''' '''on any of the open tabs to select them as active or on the icon to close an open tab. Additionally use the '''''Scroll Wheel''''' to cycle between open tabs.

'''''Right Click '''''on any of the open tabs to expand a contextual menu that will provide additional options such as closing multiple files.

[[File:armareforger-scripteditor_texteditor_navigation.png|800px]]

Files may be marked as '''read-only'''. Such script files can still be opened and read freely, but cannot be modified and saved. An example of such files may be core game data.

[[File:armareforger-scripteditor_readonly_file.png|800px]]

==== Icons ====

The following icons may appear during Text Editor usage:

{| class="wikitable" !Icon !Description ! Information |- | | Script Error | The script will not compile. |- | | Script Warning | The script will compile, but might yield unexpected results. |- | | Breakpoint ''(enabled)'' | User-placed breakpoint in an enabled state. |- | | Breakpoint ''(disabled)'' | User-placed breakpoint in a disabled state. |- | | Breakpoint ''(invalid)'' | User-placed breakpoint that was invalidated. |- | | Breakpoint Trigger Arrow | Current execution step in the debugger. |- | | Bookmark | User-placed bookmark. |}

==== Auto Complete ==== The Script Editor can help fill in code through symbols suggestion with its '''Auto Completion''' feature. Simply start writing any code and the '''''Auto Completion Dialog (1)''''' will appear.

Its dialog can browsed through using the '''Up''' and '''Down''' arrows, confirming selection using '''Enter''' or simply by using mouse '''Click '''on the desired option. The '''''Auto Completion Dialog (1) can''''' reappear by using the '''Left Control + Spacebar''' ( '''+''' ) key combination.

[[File:armareforger-scripteditor_autocompletion.png|800px]]

=== Bookmarks ===

'''''Right Click '''''right next to the '''''Line Number (1)''''' panel in the Text Editor to place or remove a bookmark in code. Placed bookmarks will be visible in the '''''Bookmarks (2)''''' window.

'''''Double Click''''' ''' ''' on any bookmark from within the '''''Bookmarks (2)''''' window to quickly navigate to its location.

=== Outline ===

==== Summary ==== '''Outline''' can be used to see and navigate through symbols (i.e. variables, methods, classes etc.) in the currently open document. To search for symbols in the whole solution, use '''Find Symbol'''.

'''''Click''''' on any of the symbols in the '''''Outline (1)''''' window to quickly navigate to them in the '''Text Editor'''.

[[File:armareforger-scripteditor_outline.png|800px]]

=== Output ===

The '''Output''' window is especially useful while debugging. All scripts can send diagnostic or other messages to the '''Output''' window via the '''''Print''''' method. In addition text can be selected and copied at will.

[[File:armareforger-scripteditor_output.png|800px]]

== Searching ==

The Script Editor also provides numerous ways of searching through the codebase.

=== Find File ===

Use '''Find File''' to find a script file by name. To search for text in files, refer to '''Find in Files''' instead'''.'''

[[File:armareforger-scripteditor_findfile_navigation.png|800px]]

To search for a file start by typing into the '''''search bar (1)'''''. The results are visible in the '''''search results (2)'''''.

'''''Double Click''''' ''' '''on any of the files in the '''''search results (2)''''' to open and navigate to them in the '''Text Editor'''.

[[File:armareforger-scripteditor_findfile.png|800px]]

=== Find Symbol ===

Use the '''Find Symbol''' to find a particular symbol located within any of the script files. To search for text in files, refer to '''Find in Files''' instead'''.'''

[[File:armareforger-scripteditor_findsymbol_navigation.png|800px]]

To search for a symbol, type into the '''''search bar (1)'''''. The results are visible in the '''''search results (2)'''.''

'''''Double Click''''' on any of the symbols in the '''''search results (2)''''' to open and navigate to them in the [[#Text_Editor|'''Text Editor''']].

[[File:armareforger-scripteditor_findsymbol.png|800px]]

=== Find in Files ===

Use '''Find in Files''' to search for a text match within any of the script files. To search for symbols, refer to '''Find Symbol''' instead. For the search results of the Text Search window see [[#Find_Results|'''Find Results''']].

[[File:armareforger-scripteditor_search_fulltext_navigation.png|800px]]

Type into the '''''search bar (1). Click '''''on the '''''Find All (2)''''' button to search. This should open the '''''Find Results (3)''''' window with results.

'''''Click '''''on any of the found results visible in the '''''Find Results (3)''''' window to open and navigate to them in the '''Text Editor'''.

[[File:armareforger-scripteditor_search_fulltext.png|800px]]

=== Goto Declaration ===

The '''Goto Declaration''' functionality is another navigation tool available from within the '''Text Editor''':

'''''Right Click '''''on any of the '''''symbols (1)''''' in the currently open script file to expand a contextual menu.

'''''Click ''''' on the '''''Goto Declaration (2)''''' option in the contextual menu. This will navigate to the '''''symbol declaration (3)'''''.

In addition, use '''Left Control + Click '''key combination on desired symbol to navigate to the Declaration.

[[File:armareforger-scripteditor_goto_declaration.png|800px]]

=== Find in Entire Solution ===

Navigate the code using the '''Find in Entire Solution''' functionality from within the '''Text Editor'''.

'''''Right Click''''' ''' '''on any of the '''''symbols (1)''''' in the currently open script file to expand a contextual menu.

'''''Click '''''on the '''''Find In Entire Solution (2)''''' option in the contextual menu. This will perform a project-wide search. For more information regarding searching and finding results, see '''Find Results'''.

[[File:armareforger-scripteditor_findallreferences.png|800px]]

=== Find Results ===

Find Results is a window that provide us with all found results when performing any search ''via'' the Script Editor search functionality. See '''Searching''' for more information.

'''''Double''''' '''Click '''on any of the entries within the '''''Find Results (1)''''' window to navigate to them and open them in the '''Text Editor'''.

[[File:armareforger-scripteditor_findresults.png|800px]]

=== Find Entity ===

Some entities in the world can be named and have a script associated with them. Such entity scripts can be found ''via'' the '''Find Entity''' window.

To be able to use the '''Find Entity''' option, open a world in the '''World Editor''' module of the '''Enfusion Workbench'''.

Then, filter for a particular entity by typing into the '''''Search field (2)''''' of the Find Entity window.

'''''Double''''' '''Click '''on any of the entries within the '''''Find Entity (1)''''' window to navigate to them and open them in the '''Text Editor'''.

[[File:armareforger-scripteditor_findentity.png|800px]]

== Keyboard Shortcuts ==

Shortcuts are useful to improve the speed and/or efficiency of the Script Editor usage's workflow:

{| class="wikitable" !Shortcut !Function |- | {{Controls|Ctrl|S}} | Save All |- | {{Controls|Ctrl|O}} | Open File |- | | |- | {{Controls|Ctrl|F}} | Find in current file |- | {{Controls|Ctrl|Shift|F}}} | Find in all files |- | {{Controls|Alt|Shift|O}} | Find Files |- | {{Controls|Alt|Shift|S}} | Find Symbols |- | {{Controls|F3}} | Find Next |- | {{Controls|Shift|F3}} | Find Previous |- | {{Controls|Ctrl|G}} | Jump To Line |- | {{Controls|Alt|G}} | Find Stack Trace |- | {{Controls|Ctrl|LMB}} on symbol | Find in Symbols, Goto Declaration |- | {{Controls|LMB2}} | Highlight selection |- | | |- | {{Controls|F7}} | Compile |- | {{Controls|Ctrl|F7}} | Compile current file on host (game) |- | {{Controls|F5}} | Debug: Continue |- | {{Controls|F10}} | Debug: Step Over |- | {{Controls|F11}} | Debug: Step Into |- | {{Controls|Shift|F11}} | Debug: Step Out |- | {{Controls|F9}} | Insert Breakpoint |- | {{Controls|Ctrl|F2}} | Toggle Bookmark |- | | |- | {{Controls|Ctrl|D}} | Duplicate Line / Selected Text |- | {{Controls|Ctrl|Page Up}} | Previous Tab |- | {{Controls|Ctrl|Page Down}} | Next Tab |- | {{Controls|Ctrl|Tab}} | Cycle Tabs |- | {{Controls|Ctrl|W}} | Close Current Tab |- | {{Controls|Alt|Left}} | Navigate Back |- | {{Controls|F2}} | Next Bookmark |- | {{Controls|Shift|F7}} | Previous Bookmark |- | {{Controls|Ctrl|Spacebar}} | Show code completion suggestions |- | {{Controls|Ctrl|Shift|Space}} | Show tooltip for current cursor position |}

= Debugging =

=== Breakpoints ===

To place or remove a breakpointinto/from code, '''''Click '''''right next to the '''''Line Number (1)''''' panel in the Text Editor or press '''F9'''.

The placed breakpoint will then be visible in the '''''Breakpoints (2)''''' window''.'' Breakpoints can be added, removed or toggled at any time, even during run-time.

The checkboxes (/) can be used from within the '''''Breakpoints (2)''''' window to enable or disable given breakpoint.

Disabled breakpoints will not be hit and will simply be ignored.

Breakpoints shown as are invalid and will not be hit by the debugger.

Breakpoints are invalidated if placed in code that does not match the current code run by the connected game.

[[File:armareforger-scripteditor_debugging_breakpoint.png|800px]]

After placing a breakpoint in our code, let's run the game. With an assumption that the code will be executed, we should see theicon pop up over the first encountered breakpoint.

The icon shows the current execution step, as seen on the '''''current line (1)'''.'' The '''''Debug (2)''''' window can then be used to go through the code execution step by step.

[[File:armareforger-scripteditor_debugging_breakpoint_hit_debugger.png|800px]]

=== Debug ===

The '''''Debug''''' window then provides us with the following options: '''Continue''', '''Step Over''', '''Step Into''', '''Step Out''' and '''Stop'''.

* '''Continue:''' {{Controls|F5}} Continue standard code execution until next breakpoint is hit / run game mode in World Editor (as {{Controls|F5}} does in World Editor). * '''Step Over:''' {{Controls|F10}} Advance the debugger without stepping into functions or methods. * '''Step Into:''' {{Controls|F11}} Advance the debugger one statement at a time. * '''Step Out:''' {{Controls|Shift|F11}} Advance the debugger until the current function returns. * '''Stop:''' {{Controls|Shift|F5}} Stop the playmode and current debugging session.

[[File:armareforger-scripteditor_debugger_descriptors.png|800px]]

Hovering the mouse cursor over a variable displays its current value, in the addition to '''Watch''' usage, explained below.

[[File:armareforger-scripteditor_debugging_steps.gif]]

=== Connecting the debugger ===

Opening the Script Editor while the game is running automatically attaches the debugger ''via'' the default port, displaying the following '''''pop up message (1)'''''.

[[File:armareforger-scripteditor_debugging_connectedpopup.png|800px]]

In addition, a debugger can be connected to a different port ''via'' the '''Debug''' options from the [[#Menu_Bar|'''Menu Bar''']].

One particularly interesting option is the '''Debug &rarr; Debug Custom''', which allows us to connect to a user provided port.

Selecting the '''Debug &rarr; Debug Custom''' will make the following '''''window (1)''''' appear in which the debugger's port can be set.

[[File:armareforger-scripteditor_debugging_customport.png|800px]]

To launch the Enfusion Workbench or the game itself on a specific port, use the '''-debuggerPort''' command line argument.

In the following image, the '''''Properties (1)''''' of a Workbench shortcut is set to port 1234 via the argument '''-debuggerPort 1234''' as seen in the '''''Target (2)''''' field.

[[File:armareforger-scripteditor_windows_properties_scriptdebugger_port.png|800px]]

=== Watch ===

The '''Watch''' feature can be used to learn about how code changes in run-time. This allows the user to see the current values of variables while navigating through the code via the debugger.

[[File:armareforger-scripteditor_debugger_watch.png|800px]]

=== Callstack ===

To learn about the code flow in run-time the '''Callstack''' feature can be used. This feature shows us the methods' call order.

It must be read from the bottom up. In this case, the depicted call originated in: '''MyComponent:EOnInit &rarr;''' '''MyComponent::DoWelcome &rarr; Welcomer::SayHello'''.

[[File:armareforger-scripteditor_debugger_callstack.png|800px]]

=== Console ===

In addition to the '''Callstack''' and '''Breakpoints''', the '''Console''' is of great debugging assistance. The '''Console''' can be used in '''run-time''' to execute user scripts within the current stack.

[[File:armareforger-scripteditor_console.png|800px]]

Being in playmode is mandatory to use the console. Code which will be global to the current file can then be run. The console can also be used when a breakpoint is hit while debugging and the run code will be local to the current instance. For more information regarding breakpoints see [[#Breakpoints|'''Breakpoints''']].

Write code into the console and press the '''''Run (1)''''' button. Local variables can be used; for more information see '''Watch'''.

Results will be visible in the [[#Output|'''''Output (2)''''']] window.

[[File:armareforger-scripteditor_console_run.png|800px]]

=== Virtual Machine Exceptions ===

From time to time, unhandled code may be encountered - like in this example below, where we are trying to call a method ''via'' a null reference. In such cases a '''Virtual Machine Exception''' will be raised.

Press '''Stop''' to halt the code execution immediately, ignore single or all cases ''via'' '''Ignore''' and '''Ignore All''', or navigate straight to the problem using the '''Debug''' button.

[[File:armareforger-scripteditor_debugging_virtualmachineexception.gif]]

{{GameCategory|armaR|Modding|Official Tools}}
97clyzopgu24kb3nvt4m0ehkogs29ly

# Arma Reforger:String Editor

5050
32431
376147
370455
2025-09-04T11:46:07Z
Lou Montana
10739
Some wiki formatting
376147
wikitext
text/x-wiki
{{TOC|side}} == Open String Editor ==

* In Resource Manager, select Editors &rarr; String Editor. In the newly open window select File &rarr; Open and in the newly open dialog navigate to the wanted {{hl|*.st}} file. * alternatively, search for the {{hl|*.st}} file in Resource Manager's Resource Browser tab and open it by double-clicking it.

== Translation Workflow ==

{| class="wikitable align-center-col-3" ! Status ! Operation ! Editable ! If the string is correct ! If the string is incorrect |- | '''DEVELOPMENT_PENDING''' | Fill '''Target_en_us''' as translation reference | {{Icon|checked}} | Change the status to '''DEVELOPMENT_DONE''' | Fix it directly in the '''Target_en_us''' field |- | '''DEVELOPMENT_DONE''' | Feature development end, translation requirement confirmation | {{Icon|checked}} | Change the status to '''PROOFREADING_PENDING''' | Set the status back to '''DEVELOPMENT_PENDING''' and edit the '''Target_en_us''' field |- | '''PROOFREADING_PENDING''' | Proofreaders acknowledgement | {{Icon|unchecked}} | Change the status to '''PROOFREADING_DONE''' | '''Unlock''' the string, set the status back to '''DEVELOPMENT_PENDING''' and edit the '''Target_en_us_edited''' field |- | '''PROOFREADING_DONE''' | Proofreaders validation | {{Icon|unchecked}} | Change the status to '''TRANSLATION_PENDING''' | '''Unlock''' the string, set the status back to '''DEVELOPMENT_PENDING''' and edit the '''Target_en_us_edited''' field |- | '''TRANSLATION_PENDING''' | Translators acknowledgement | {{Icon|unchecked}} | Change the status to '''TRANSLATION_DONE''' | '''Unlock''' the string, set the status back to '''DEVELOPMENT_PENDING''' and edit the '''Target_en_us_edited''' field |- | '''TRANSLATION_DONE''' | Translators validation | {{Icon|unchecked}} | Nothing | '''Unlock''' the string, set the status back to '''DEVELOPMENT_PENDING''' and edit the '''Target_en_us''' field |}

{{Feature|informative| This workflow used in a professional environment to synchronise all the actors of the translation process.<br> In the scope of a custom, one-man mod this is bound to change and be adapted.<br><br> Its behaviour is defined in the {{hl|LocStatusPlugin}} and can be disabled, making the workflow optional and customisable to one's needs. }}

== ID Convention ==

A translation id must follow a certain convention. Its name is constituted of specific parts in a specific order, and these parts are separated with a '''dash''' ( - ): {| class="wikitable" ! Name ! Description |- | Game/Product | Game or Project prefix: '''AR''' for '''A'''rma '''R'''eforger, '''ENF''' for '''Enf'''usion |- | Game Project | Optional, subsequential game project code (e.g a DLC, etc) |- | '''Name''' | PascalCased string name - e.g {{hl|MyNewWeapon}}, {{hl|SplendidActionOnTruck}}

Name prefixes/suffixes can exist through the usage of '''underscores''' ( '''_''' ):

* MainMenu_Options * MainMenu_Options_Video

Iterators are part of the name section too, e.g AOSettings_'''1''', AOSettings_'''2''', AOSettings_'''3''' |- | Case | Optional, defines if the string MUST remain uppercase or lowercase.

Can be one of:

* '''UC''' for '''U'''pper'''C'''ase * '''LC''' for '''L'''ower'''C'''ase |- | Platform | Used to determine a string that is only present on a certain platform, as opposed to a string that is present on PC.

Can be one of:

* '''XB''' for Microsoft '''XB'''ox * '''PS''' for Sony '''P'''lay'''S'''tation * '''SWC''' for Nintendo '''Sw'''it'''c'''h |}

=== Naming Convention ===

* use '''meta''' naming; the id must '''not''' be a 1:1 of the original text ** e.g: '''#AR-ExitConfirmation''' and not '''#AR-DoYouWantToQuit''' * do '''not''' use any of: ** trademarks (use a generic name) ** profanities (for obvious reasons) * write in English

=== Examples ===

* ENF-Settings * AR-'''MainMenu''' * AR-'''MainMenu_Options''' * AR-OFP-'''MainMenu_Options_RefreshRate'''-UC-PS

== Writing Convention ==

A translation text must follow some rules and advices to be valid:

The in-game text should '''always''' refer to a stringtable and '''never''' be written directly in UI/data.

Do '''not''' hardcode:

* text in UI * text in data (config) * text in code * text in image (unless it is part of the lore) * numeric format (e.g '''1000''' could be written '''1,000''' or '''1 000''' in another language) * date format (2001-12-01, 01/12/2001, 12/01/2021 etc) * percentage values (25%, 25 %, %25 etc)

=== Tips ===

To use arguments (formatted) text, use '''%1''', '''%2''', etc to include argument 1, 2, etc in the text. to display the percentage sign itself (%), use '''%%'''. Composed strings should be restricted to the bare minimum and used only when necessary for translation reasons.

'''Localised string''' <enforce> // formatted text example unlocalised string testName = "Peter"; PrintFormat("Hello %1, how are you?", testName); // displays "Hello Peter, how are you?"

// #AR-Test is the translation container's id string testName = "Peter"; PrintFormat("#AR-Test", testName); // displays "Hello Peter, how are you?" as well </enforce>

{{Feature|important|If a string contains any '''%1''' arguments, they '''must''' be documented in the '''Comment''' field!}}

Do '''not''' assemble multiple parts to make a sentence, as such construction might be invalid in another language: {| class="wikitable" ! Bad Example ! Good Example ! Explanation |- | Hold Space to Take weapon

* Hold %1 to %2 * Space * Take weapon * Sleep | Hold Space to take weapon

* Hold %1 to take weapon * Hold %1 to sleep * Space | The translator does not always know that the value is to be used in a composition The translation itself might not have been thought for this usage in the first place |- | Remaining time: 30 seconds

* Remaining time: %1 %2 * 30 (game value) * seconds | Remaining time: 30 seconds

* Remaining time: %1 second(s) * Remaining time: %1 minute(s) * 30 (game value) | |- | Heavy Machinegun

* %1 %2 * Heavy * Machinegun | Heavy Machinegun

* Heavy Machinegun | Some languages place adjectives in a different order; such translation must then be done in one piece |}

== Create a Stringtable File ==

Follow these steps to create a new {{hl|*.st}} file:

# In Resource browser select a folder where you want to create a new {{hl|*.st}} file # Use right mouse button to open an option and here select '''GUI String table''' # Set the name of the file # Choose '''StringTable''' class and confirm # A new {{hl|*.st}} was created - all there is to do now is to assign this {{hl|*.st}} file to the project # In Workbench select Options # In newly open window select Game project # In the Configuration dropbox, select the desired platform (Headless, PC, Xbox, PS5, etc) # Navigate to Widget Manager Settings &rarr; String Tables &rarr; String Table Definition and here: #* String Table Source - select the newly created file #* Languages - press the "+" button to add all desired languages.

== Add a New Localised String ==

# Open String Editor # Write an Id (stringtable entry key) into the '''insert section''' # Press '''insert''', the new container is created # Select the new container in the '''list of containers''' # In the '''Details''' section, add the original text in the '''Target_en_us''' field. # Fall all other necessary details like Comment, Max Length of the text, all matching labels and so on. Details about those items are in this section of tutorial. # Save changes by using File &rarr; Save (or {{Controls|Ctrl|S}}) # Go to Table &rarr; Build Runtime Table (or {{Controls|Ctrl|B}}). '''Only''' after the following confirmation is the text ready to be used in game. {{Messagebox|'''Recommended read:''' Detailed tutorial on creating localisation in mod can be found on [[Arma_Reforger:Mod_Localisation|'''Mod Localisation''']] page.|📖|lightgrey}}

{{GameCategory|armaR|Modding|Official Tools}}
mczgxr3ywibtb4qz7fcp3awt7lwixwa

# Arma Reforger:Workbench Links

5050
37958
376430
370583
2025-10-13T14:16:47Z
Lou Montana
10739
Add date/time info
376430
wikitext
text/x-wiki
{{TOC|side}} A {{GameCategory|armaR|Modding|Official Tools|link= y|text= Workbench}} link is a protocol link that allows to share a direct point to a resource/script/game world location.

{{Feature|important| Using a Workbench link requires registering the {{hl|enfusion://}} protocol in Windows, clicking the {{hl|Register enfusion:// protocol button}} button in {{Link|Arma Reforger:Resource Manager: Options#Register .22enfusion:.2F.2F.22 protocol|Workbench Options > Workbench tab}}. }}

== Format ==

A Workbench link is composed of the {{hl|enfusion://}} protocol followed by the Module name to open; eventually an addon ID, the relative file path and eventual parameters separated by a semicolon: * {{Color|blue|enfusion://}}{{Color|darkorange|ResourceManager}}'''/'''{{Color|green|~ArmaReforger:}}{{Color|#555|Configs/Factions/BLUFOR.conf}} * {{Color|blue|enfusion://}}{{Color|darkorange|ScriptEditor}}'''/'''{{Color|#555|scripts/Game/Editor/Containers/UIInfo/SCR_UIInfo.c}}''';'''{{Color|red|8}} * {{Color|blue|enfusion://}}{{Color|darkorange|WorldEditor}}'''/'''{{Color|#555|worlds/arland/arland.ent}}''';'''{{Color|red|3458.4,34.5587,2820.21}}''';'''{{Color|darkred|-15.107,297.881,0}}''';'''{{Color|purple|0.4375,1989,8,20}}''';'''{{Color|teal|46247}}

{| class="wikitable" style="margin: auto" ! Module ! Module Name ! Base Link ! Parameters |- | {{Link|Arma Reforger:Resource Manager}} | ResourceManager | {{Color|blue|enfusion://}}{{Color|darkorange|ResourceManager}} | {{n/a}} |- | {{Link|Arma Reforger:Script Editor}} | ScriptEditor | {{Color|blue|enfusion://}}{{Color|darkorange|ScriptEditor}} | * file line number |- | {{Link|Arma Reforger:World Editor}} | WorldEditor | {{Color|blue|enfusion://}}{{Color|darkorange|WorldEditor}} | * camera's world position (x, y, z) * camera's angles (x, y, z) - angles in -180..+180 range, z is always 0 * daytime (in range 0..1), year, month, day * entity ID - to select a specific entity |- | colspan="4" class="align-center" style="padding: 1em" | The following modules do not support a file parameter - a link can only be used to open the associated editor. |- | {{Link|Arma Reforger:Particle Editor}} | ParticleEditor | {{Color|blue|enfusion://}}{{Color|darkorange|ParticleEditor}} | rowspan="6" {{n/a}} |- | {{Link|Arma Reforger:Animation Editor}} | AnimEditor | {{Color|blue|enfusion://}}{{Color|darkorange|AnimEditor}} |- | {{Link|Arma Reforger:Audio Editor}} | AudioEditor | {{Color|blue|enfusion://}}{{Color|darkorange|AudioEditor}} |- | {{Link|Arma Reforger:Behavior Editor}} | BehaviorEditor | {{Color|blue|enfusion://}}{{Color|darkorange|BehaviorEditor}} |- | {{Link|Arma Reforger:String Editor}} | ''Localization''Editor | {{Color|blue|enfusion://}}{{Color|darkorange|LocalizationEditor}} |- | {{Link|Arma Reforger:Procedural Animation Editor}} | ProcAnimEditor | {{Color|blue|enfusion://}}{{Color|darkorange|ProcAnimEditor}} |}

{{Feature|informative| A link can be found prefixed with {{hl|<nowiki>https://enfusionengine.com/api/redirect?to=</nowiki>}}; the {{Link|https://enfusionengine.com|Enfusion Engine website}} provides a redirection for platforms that do not see {{hl|enfusion://}} as a valid protocol (e.g Discord). }}

== Link Creation ==

=== {{Link|Arma Reforger:Resource Manager}} ===

Create a link by clicking on any resource in '''Resource Browser''' with {{Controls|RMB}} then selecting '''Copy Link''' option from the context menu. [[Image:armareforger-resource-manager-options-rm-link-create.jpg|thumb|right|300px|Creating a link in Resource Browser]] [[Image:armareforger-resource-manager-options-rm-link.jpg|thumb|left|800px| Example: {{Link|enfusion://ResourceManager/~ArmaReforger:Assets/Props/Fabric/Flags/Flag_1_2.xob|enfusion://ResourceManager/~ArmaReforger:Assets/Props/Fabric/Flags/Flag_1_2.xob}}<br> {{Link|Arma Reforger:Resource Manager}} opens the {{Link|enfusion://ResourceManager/~ArmaReforger:Assets/Props/Fabric/Flags/Flag_1_2.xob}} file ]]

{{Clear}} === {{Link|Arma Reforger:Script Editor}} ===

Create a link by selecting from the top menu ''Edit →'' '''Copy link option''' or by using the {{Controls|Ctrl|Shift|L}} shortcut (can be changed in the {{Link|Arma Reforger:Resource Manager: Options#Shortcuts|shortcuts options section}})

[[Image:armareforger-resource-manager-options-se-link-create2.jpg|thumb|right|400px|Creating a link in Script Editor]] [[Image:armareforger-resource-manager-options-se-link.jpg|thumb|left|800px|Example: {{Link|enfusion://ScriptEditor/scripts/Core/proto/EnWorld.c;17|enfusion://ScriptEditor/scripts/Core/proto/EnWorld.c;17}}<br> {{Link|Arma Reforger:Script Editor}} opens the {{Link|enfusion://ScriptEditor/scripts/Core/proto/EnWorld.c}} file at line {{Link|enfusion://ScriptEditor/scripts/Core/proto/EnWorld.c;17|17}}]]

{{Clear}} === {{Link|Arma Reforger:World Editor}} ===

Create a link by selecting from the top menu ''Game →'' '''Copy view link''' option or by using the {{Controls|Ctrl|Shift|L}} shortcut (can be changed in the {{Link|Arma Reforger:Resource Manager: Options#Shortcuts|shortcuts options section}})

[[Image:armareforger-resource-manager-options-we-link-create2.jpg|thumb|right|300px|Creating a link in World Editor]] [[Image:armareforger-resource-manager-options-we-link.jpg|thumb|left|800px|Example: {{Link|enfusion://WorldEditor/worlds/GameMaster/GM_Eden.ent;5275.56,81.3831,6383.2;-4.2668,-283.292,0|enfusion://WorldEditor/worlds/GameMaster/GM_Eden.ent;5275.56,81.3831,6383.2;-4.2668,-283.292,0}}<br> {{Link|Arma Reforger:Script Editor}} opens the {{Link|enfusion://WorldEditor/worlds/GameMaster/GM_Eden.ent}} file at world coordinates {{Link|enfusion://WorldEditor/worlds/GameMaster/GM_Eden.ent;5275.56,81.3831,6383.2|5275.56,81.3831,6383.2}} and camera angles {{Link|enfusion://WorldEditor/worlds/GameMaster/GM_Eden.ent;5275.56,81.3831,6383.2;-4.2668,-283.292,0|-4.2668,-283.292,0}}]] {{Clear}}

{{GameCategory|armaR|Modding|Official Tools}}
ns4ph4uxx7lk07f74aw5q20jdaikxv6

# Arma Reforger:Workbench Metadata

5050
37959
369617
349595
2024-09-27T07:34:52Z
Reyhard
10671
369617
wikitext
text/x-wiki
{{TOC|none}}<!-- Metadata is data surrounding a resource.

-->{{Feature|informative|See the {{Link|https://en.wikipedia.org/wiki/Metadata}} Wikipedia article.}}

== .meta File ==

A {{hl|.meta}} file is created whenever a resource (not scripts) is registered or created in the Workbench. This file holds metadata such as: * the resource's {{Link|https://en.wikipedia.org/wiki/Universally_unique_identifier|GUID}} - a unique identifier for the engine to track * the original file's path (informational, only the GUID is relevant to the engine) * platform build configuration: ** file: import configuration - the one that is set in the Resource Manager's {{Link|Arma Reforger:Resource Manager#Import Settings|Import Settings}} tab (e.g file's build presence, texture import quality, etc) ** directory: properties set by editing a registered directory using "Edit Properties" (e.g directory's build presence, build tag)

{{Feature|informative|A runtime file ({{hl|.ent}}, {{hl|.et}}, {{hl|.json}}, {{hl|.edds}}, but not {{hl|.fbx}}, {{hl|.tiff}}, {{hl|.tga}}) without a {{hl|.meta}} file will throw a warning in the Log Console about missing it.}}

=== GUID ===

* The GUID is generated based on the file's path and name (using them as {{Link|https://en.wikipedia.org/wiki/Random_seed|seed}} - regenerating the metadata of a file with identical path and name will generate the same GUID) ** If file with same GUID already exist in one of the currently loaded addons, Workbench will generate a new random GUID for that file * Once the meta file is generated, moving or renaming the file will not change its GUID (the meta file obviously '''must''' be renamed along the main file - this is done automatically when renamed from the Workbench)

==== GUID Change ==== {{Feature|warning| Changing a GUID manually is not a trivial operation - be careful doing it, and make backups. * Two files with the same GUID in two different addons will overwrite each other (see {{Link|Arma Reforger:Data Modding Basics#Can Be Modified}}) * Two files with the same GUID in a single addon will throw a warning message in the Log Console and one of the files will not work properly. }}

A resource's GUID can be obtained can be obtained via the "Copy Resource GUID(s)" action {{Link|Arma Reforger:Resource Manager#Contextual menus}}.

A GUID should normally not be changed, but a conflict can, in rare cases, happen. There are two ways to change a GUID: * rename the resource file, delete the {{hl|.meta}} file, reimport the resource and rename the file back to the original name (safer, but any import configuration will be lost) * generate a new GUID with the Resource Browser utility (see {{Link|Arma Reforger:Resource Manager#Generate GUID|Resource Manager - Generate GUID}}) and replace it manually in the {{hl|.meta}} file

== resourceDatabase.rdb File ==

This binary file is a database storing information of all resources available in the provided project (base game, addon). Its content changes when a resource is added or removed, and the file is verified and refreshed/re-created on Workbench opening and closing.

{{GameCategory|armaR|Modding|Official Tools}}
bnaocdj9nbgs5xcgtlvh42h2tyc6va5

# Arma Reforger:World Editor

5050
32518
378032
376468
2026-01-26T19:00:19Z
Hypoxic125
11179
Linked new Object Import Tool page
378032
wikitext
text/x-wiki
{{TOC|side}} == Top Bar ==

The top bar contains World Editor quick access buttons grouped in three sections:

* '''Basic Actions''' * '''Basic Tools''' * '''Scripted Tools'''

These sections can be enabled or disabled using the right-click contextual menu on the top bar.

=== Create new World ===

Create an entirely new world or a sub-scene of the currently loaded world. Shortcut: {{Controls|Ctrl|N}}

=== Load World ===

Load an existing world. Shortcut: {{Controls|Ctrl|O}}

=== Save World ===

Save the currently loaded world. Shortcut: {{Controls|Ctrl|S}}

=== Go to World File ===

Display the loaded world into the '''Resource Browser'''.

=== Undo last action ===

Undo the last applied action to the world. Shortcut: {{Controls|Ctrl|Z}}

=== Redo last action ===

Reapply the last undone action. Shortcut: {{Controls|Ctrl|Y}}

=== Copy selected object ===

Copy the currently selected object(s). Shortcut: {{Controls|Ctrl|C}}

=== Paste on same position ===

Paste the copied object(s) in the same position of the copied object. Shortcut: {{Controls|Ctrl|Shift|V}}

=== Cut selected object ===

Cut the currently selected object(s). Shortcut: {{Controls|Ctrl|X}}

=== Play Game ===

Play the current world. Default shortcut: {{Controls|F5}}

Multiple options appear by clicking on the side arrow:

* '''Play inside viewport''' - make the game play within the actual viewport * '''Play in fullscreen''' - make the game play in full screen

* '''Play from camera position''' - place a player-controlled unit right on viewport's camera position. Default unit is controlled by [[Arma_Reforger:Resource_Manager:_Options#Chimera_Global_Config|'''Default Player Controller''']] parameter in '''[[Arma Reforger:Resource Manager: Options#Chimera Global Config|Resource Manager options]]'''.

* '''Server localhost''' - start the game with a background server.{{Feature|important|Connection is possible with direct IP - a real address, '''not''' a loopback address like e.g {{hl|127.0.0.1}}!}} * '''Server localhost + PeerTool''' - start the game with a background server and local clients. Clients are created accordingly to PeerTools settings and connected to the local server.

{{Feature|informative|For Multiplayer Debugging, see {{Link|Arma Reforger:Script Editor#Debugging}}.}}

=== Toggle Gizmo Space ===

Switch object manipulation tools (e.g. move, rotate) between World reference and Object reference. Shortcut: {{Controls|X}}

=== Entity select filter ===

Set entity cursor selection from every, active or inactive layer(s).

=== Select parent entities ===

Select parent entities when selecting a child entity.

=== Ground Manipulation Tool ===

Move the selected object(s) by dragging it with the mouse pointer to the surface under the cursor, such as '''terrain''' surface, '''object''' surface or '''water''' surface. Shortcut: {{Controls|Q}}

{{Feature|informative|Not to be confused with {{Link|#Terrain Tool}}.}}

=== Move Tool ===

Move the selected object(s) on the screen's plane: moving the mouse up will move the object higher compared to the current screen, mouse down lower, left and right to the screen's left and right, always keeping the same distance from the screen's plane. Shortcut: {{Controls|W}}

This tool also provides the '''move''' widget on the selected object(s), represented by colored arrows along <span style="color: red;">X</span>, <span style="color: green;">Y</span> and <span style="color: blue;">Z</span> axes (in world or object reference, based on '''Gizmo Space'''). Click and drag to change the values.

=== Rotate Tool ===

Rotate the selected object(s).

This tool provides the '''rotate''' widget on the selected object(s), represented by colored angular arcs between the axes <span style="color: red;">X</span>, <span style="color: green;">Y</span> and <span style="color: blue;">Z</span> (in world or object reference, based on '''Gizmo Space'''). Click and drag to change the values. Shortcut: {{Controls|E}}

=== Scale Tool ===

Scale the selected object(s), meaning to shrink or expand the object.

This tool provides the '''scale''' widget represented by a vertical green bar along the <span style="color: green;">Y</span> axis. Click and drag to change the value. Shortcut: {{Controls|R}}

=== Vector Entity Tool ===

Draw a polyline (multiple straight segments) or a spline (curve from points), used by various generators (forests, walls, lakes etc.). Shortcut: {{Controls|V}}

=== Bounding Volume Tool ===

Edit the entity's Bounding Box property with a visual tool.

=== Terrain Tool ===

See {{Link|Arma Reforger:World Editor: Terrain Creation Tool#Sculpt}}. Shortcut: {{Controls|Ctrl|T}}

=== Navmesh Tool ===

Generates navmesh, AI navigation grids<!-- - see Tools: Navmesh Tool-->.

=== Open Weather Editor ===

Open the Weather Editor panel.

=== Measure Tool ===

Measure length along one or multiple 3D lines (only works on a terrain entity).

=== Import Objects ===

Import objects from a CSV file.

See {{Link|https://community.bistudio.com/wiki/Arma_Reforger:Object_Import_Tool|Object Import Tool}} dedicated article.

=== Autotest Tool ===

Run test classes through the [[Arma Reforger:Autotest Framework|Autotest Framework]].

=== Polyline Area Tool ===

Edit the selected polyline to make it a rectangle/circle according to provided parameters.

=== Windows Prefabs Generator Tool ===

Generate prefabs for destroyable windows. <!-- See the dedicated article: Windows prefabs generator. -->

=== Batch Prefabs operations tool === <!-- See Batch prefabs operations dedicated article. -->

=== Coords Tool ===

Quickly navigate to a set of coordinates or generate a World Editor link to current position/orientation. enfusion://WorldEditor/worlds/TutorialWorld/TutorialWorld.ent;16.3078,30.6084,14.5955;-10.8,48,0

{{Feature|informative|This link is valid if {{hl|Register "enfusion://" protocol}} has been done from within [[Arma Reforger:Resource Manager: Options|Resource Manager: Options]].}}

=== Autospawner Tool ===

Spawn prefabs/XOBs from the Resource Browser's selected directory on a grid into an active layer.

Used for debug.

=== Export Map data ===

Export data of various types from the current world in profile directory ({{hl|Documents\My Games\ArmaReforger\profile}})

=== Import Shapefile ===

Import vector data from SHP file. <!-- See Import Shapefile tool dedicated article. -->

=== Export Geographic data ===

Export vector data as Geographical data in profile directory ({{hl|Documents\My Games\ArmaReforger\profile}})

== Hierarchy/Create ==

=== Hierarchy ===

This sub-panel lists entities present in the world. Entities are grouped into '''layers''' for clarity.

Red = Entity

Blue = Prefab

=== Create ===

This sub-panel is a quick access to scripted entities that can be created in the world. Such entities can be user-defined by the {{hl|EntityEditorProps}} class attribute.

== Viewport ==

This is the 3D world render that allows to edit terrain or preview a mission setup.

By default, pressing {{Controls|Escape}} leaves the preview; {{Controls|F10}} is a hardcoded equivalent to {{Controls|Escape}} (within World Editor) and can be used as a counterpart.

== Object Properties/Tool Properties ==

=== Object Properties ===

This sub-panel is divided in sections - appearing sub-panels depend on the Entity's type; only the most common are described here:

===== Entity information ===== The Entity's root type is listed on the left, and on the right is a field to name the entity to be able to refer to it by script.

'''Components''' are then listed under the class.

The scope of changes brought in this interface can be set to the entity instance, the entity definition itself, modded entities, or the parent prefab(s).

==== Transformation ==== A way to change a lot of position and orientation values:

* coordinates * angles * scale (in range 0..1000)

==== General ====

===== Flags ===== * '''Traceable:''' the Entity can be detected ''via'' tracing methods * '''Visible:''' the Entity is invisible in-game (still being visible in World Editor) * '''Static:''' the Entity is expected to remain in position and will not be moved around * '''Feature:''' the Entity is a "feature" of the terrain and will be drawn no matter the distance * '''Proxy:''' the Entity is a sub-element of a prefab and should be hidden when the parent prefab is * '''Editor Only''': the Entity is present only in the editor * '''Relative Y''': the Entity's altitude will be relative to the surface below it

==== Script ==== Provide script "slots" for events and/or other cases

==== Unsorted ==== The uncategorised available settings.

=== Tool Properties ===

This sub-panel changes depending on the currently selected tool.

== Viewport ==

=== Navigation ===

With the mouse wheel alone {{Controls|MMB}} you can move the camera forward and backward.

With the right mouse button {{Controls|RMB}} pressed: * By moving the mouse, you can change the orientation of the camera. * The mouse wheel {{Controls|MMB}} changes the speed at which the camera moves - scroll up to increase the speed, scroll down to decrease it. * Use the {{Controls|W}} and {{Controls|S}} keys to move the camera forward and backward along the camera orientation at the set speed. * Use the {{Controls|A}} and {{Controls|D}} keys to move the camera sideways. * Use the {{Controls|Q}} and {{Controls|Z}} keys to move the camera up and down.

{{Controls|LMB}} Double-clicking an entity in the Hierarchy subwindow focuses the camera on that entity. Pressing the {{Controls|F}} key focuses on the currently selected entity as well.

== Resource Browser/Prefab Library ==

Both Resource Browser and Prefab Library are content browsers, and use a color code underlight for entity ({{hl|.et}}) types:

* '''blue''': regular prefabs * '''purple''': Prefab Library entity * '''orange''': [[Arma Reforger:Game Master: Editable Entities Configuration|editable Prefab]] (used by in-game editor)

=== Resource Browser ===

The Resource Browser provides a view of all the data present and available in the game's data as well as the user's profile directory.

It shows the project's data structure (see [[Arma Reforger:Directory Structure|Directory Structure]]) and displays every data type (e.g. config, textures but also [[Arma Reforger:Prefabs Basics#Prefab|prefabs]], etc.).

=== Prefab Library ===

The Prefab Library offers an interface to browse [[Arma Reforger:Prefabs Basics#Prefab|Prefabs]] that are available in the game's data.

Unlike the Resource Browser, it does not display content from sub-directories in the Entity Tab. Prefab Library is also not available in Resource Manager, since its closely tied to world creation process.

Prefabs are sorted by categories, represented by directories present in '''Data\PrefabLibrary''' (see Directory Structure):

* Decals * Generators * Infrastructure * Props * Rocks * Structures * Vegetation * Walls

==== Directory Tab ==== This shows the directory structure and allows the wanted directory to be picked.

==== Entity Tab ==== This lists the entities found in the open directory.

==== Details Tab ==== This tab is filled only when an entity is highlighted in the Entity Tab.

{| class="wikitable valign-top" ! Entry ! Description |- | Place By | Two options:

* origin * boundBox |- | Random Yaw | Determine if a random yaw (Y-axis rotation, direction) should be applied on object's placement. Randomization is applied in a 0..360° range |- | Align To Normal | Set if yes or no the entity should be placed perpendicular (normal) to the surface on which it is |- | Random Scale | Define whether or not the entity should be randomly scaled, between min-max set values |- | Random Vert Offset | Random Vertical Offset - define whether or not the entity should have a random vertical offset, between min-max (possibly negative) set values |- | Random Pitch Angle | Define if and how much of a random pitch ("front/back roll") should be applied to the entity |- | Random Roll Angle | Define if and how much of a random roll ("left/right (barrel) roll") should be applied to the entity |}

{{Feature|informative| Prefabs are simple wrapper entities that point to other entities. They can be renamed without any impact but their display name.

Changing a prefab's entity target will replace all the entity using this template by this new entity. e.g. a Prefab named "small tree" being used in many forests, changing the prefab's entity from TreeA to TreeB will replace '''all''' the TreeA by TreeB entities. }}

== Log Console ==

The Log Console displays error, warning and informative messages. It can be cleaned by pressing the Clear Console button.

It also displays three buttons that can be combined:

* '''Show only error messages''': only shows "Error" and "Fatal" logs * '''Show only warning messages''': only shows "Warning" logs * '''Show only info messages''': only shows "Spam", "Verbose", "Debug", "Normal" logs

If no buttons are selected, the Log Console shows all the messages.

The last button, '''Filter Options''', allows for advanced filtering as shown on the side.

{{GameCategory|armaR|Modding|Official Tools}}
g710a0k11o7ra5mzo727wupzxjfmgxv

# Arma Reforger:Enfusion Blender Tools

5050
32507
378021
376704
2026-01-23T09:32:52Z
Reyhard
10671
378021
wikitext
text/x-wiki
{{TOC|side}} '''Enfusion Blender Tools''' (shortened to '''EBT''') is a Blender addon allowing for a good workflow between Blender and Workbench, and Enfusion in general. Primarily developed and tested with [https://www.blender.org/download/lts 4.5 LTS (Long Term Support)] version of Blender.{{Feature|informative|Enfusion Blender Tools '''Tutorials''' can be found at {{GameCategory|armaR|Modding|Official Tools|Enfusion Blender Tools|Tutorials|text= Enfusion Blender Tools Tutorials}}.}}

== Features ==

=== Import ===

* {{Link|Arma Reforger:Enfusion Blender Tools: Import/Export ASC Elevation|ASC elevation (.asc file)}} - import an ASC elevation file (Esri grid) as terrain mesh * {{Link|Arma Reforger:Enfusion Blender Tools: P3D Conversion|{{arma3}} P3D (.p3d file)}} - import P3D * {{Link|Arma_Reforger:Enfusion Blender Tools: Materials Preview|FBX (.fbx file)}} - import FBX with Enfusion Shaders * Prefab (.et file) - importing models located in prefabs (including prefabs located in hierarchy). '''It is only working on prefabs where source FBX are available - that means, you cannot use this function to edit read-only assets like Arma Reforger or downloaded mods.''' Function is meant mainly for structures and baking MLODs.

=== Export ===

* {{Link|Enfusion Blender Tools: Import/Export ASC Elevation|ASC elevation (.asc file)}} * {{Link|Arma Reforger:Enfusion Blender Tools: Import/Export Animation|Enfusion animation (.txa file)}} * FBX (.fbx file) - exporting single FBX file with automatic registration of model in Workbench * {{Link|Arma Reforger:Enfusion Blender Tools: Batch FBX Export|Batch FBX export (.fbx file)}} - batch exporting of FBX files

=== Misc ===

* {{Link|Arma Reforger:Enfusion Blender Tools: Objects Tools|Object Tools}} - Various small tools helping with preparation of model for Workbench import * {{Link|Arma_Reforger:Enfusion_Blender_Tools:_Model_Quality_Assurance|Model Quality Assurance}} * {{Link|Arma_Reforger:Enfusion_Blender_Tools:_NLA_Strips_Baking_Tool|NLA Strips Baking Tool}} * {{Link|Arma_Reforger:Enfusion_Blender_Tools:_Rig_Updater|Rig Updater}} * {{Link|Arma_Reforger:Enfusion_Blender_Tools:_Skeleton_Updater|Skeleton Updater}} * {{Link|Arma_Reforger:Enfusion_Blender_Tools:_Portal_Tools|Portal Tools}}

{{Clear}}

== Installation ==

[[File:armareforger-enfusionblendertools-net-api.png|alt=Location of Enable net API in Workbench Options|thumb|600x600px|Location of Enable net API option in Workbench Options window]] * Download {{Link|https://www.blender.org/download/lts/4-5/|Blender LTS 4.5}} * Download '''Arma Reforger Tools''' from Steam{{Feature|informative|Arma Reforger Tools only appear if Arma Reforger is in your Steam Library.}} * Install EBT addon from {{hl|Arma Reforger Tools\Blender\EBT-ArmaReforger.zip}} (do not unzip it!) ** See {{Link|https://www.youtube.com/watch?v{{=}}LzdoUTvAgXk&t{{=}}64s|How to Install Add-Ons in Blender}} * Open '''Workbench''' and in '''Workbench → Options → Workbench''' settings turn on '''Enable net API (for communication with external applications)''' option

{{Clear}} [[File:armareforger-enfusionblendertools_options_setup2.png|thumb|Enfusion Blender Tools addon preferences|alt=|600x600px]] If you intend to use TXA exporter and want to use Reforger library of {{Link|Arma Reforger:Animation Export Profiles|animation export profiles}}, it is also necessary to set up '''Export Profile Folder''' * Unzip {{hl|Arma Reforger Tools\Blender\EBT-ArmaReforger-Data.zip}} to any empty folder * In '''Export Profile Folder''', press the '<nowiki/>'''+'''<nowiki/>' button and set path to the directory where {{hl|EnfusionBlenderTools-Data.zip}} file was extracted (see image) Similar steps can also be performed to define the custom animation export profiles directory

{{Clear}}

== Updating ==

When updating Enfusion Blender Tools, best thing to do is:

* Open Blender * In Addons section of Blender Preference, remove '''Enfusion Tools''' manually * Close Blender * Open Blender again * Install the plugin as per installation instructions above

This will ensure that there are no residual bits of addons left in memory which can prevent correct installation of plugin

== Interface ==

Once addon is properly installed and activated, two new elements - '''(1)''' & '''(2)''' should be visible in main interface of Blender. Depending on used layout, right section of the menu might need to be expanded by clicking on small arrow on the right side of the viewport.

[[File:armareforger-enfusionblendertools_interface.jpg]]

=== Top Menu ===

In the top section of the viewport, '''Enfusion Tools (1)''' tab contains '''Import''' & '''Export''' sub menus where it is possible to {{Link|#Import P3D}}, {{Link|#Import ASC|ASC file}} or {{Link|#Import FBX|FBX models}} and {{Link|#Export ASC}} or {{Link|#Export TXA}} animations.

==== Import ASC ==== Import a .asc terrain file.

==== Import P3D ==== ===== Discard unsupported LODs ===== LODs like View Cargo/Gunner/Pilot, Roadway, Hitpoints, Paths and similar will be discarded from the import.

===== Layer Presets ===== Assign detected layers (geometry, physics)

===== Game Materials ===== ====== Rename materials ====== Rename RVMATs to Enfusion equivalents.

===== Memory Points ===== ===== Convert axis to single point ===== Convert two points with default rotation to single point with orientation axis.

==== Import FBX ==== This option activates import of {{Link|Arma Reforger:Enfusion Blender Tools: Materials Preview|FBX with Enfusion Shaders}}.

===== Remove All Objects ===== Remove any object present in the fbx file.

==== Export ASC ==== Export the terrain to .asc format.

==== Export TXA ==== Export the {{Link|Arma Reforger:Enfusion Blender Tools: Import/Export Animation|animation to the TXA format}}.

=== Side section ===

On the right side of the viewport, '''Enfusion Tools tab (2)''' you have following options: ==== Model Quality Assurance ==== In this panel '''(3)''' it is possible to adjust and execute Model Quality Assurance script which checks for common configuration & topology errors in the mesh.

==== Settings ==== Settings panel '''(4)''' contains options for Batch FBX export

==== Object Tools ==== Object Tools '''(5)''' panel contains controls for {{Link|Arma Reforger:Enfusion Blender Tools: Objects Tools#Automatic sorting of objects|automatic object sorting into collections}}

==== Material Tools ==== This section '''(6)''' contains options {{Link|Arma Reforger:Enfusion Blender Tools: Objects Tools#Colliders .26 Layer Presets setup|colliders setup}}, light setup and {{Link|Arma Reforger:Enfusion Blender Tools: Materials Preview#Materials Synchronisation|(re)import of Enfusion Materials into Blender}}

{{GameCategory|armaR|Modding|Official Tools|Enfusion Blender Tools}}
f0y4kwn6v2e47pqjo0pfqosiigs6u17

# Arma Reforger:Enfusion Blender Tools: Batch FBX Export

5050
32660
371007
347077
2025-02-26T12:32:06Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
371007
wikitext
text/x-wiki
This feature allows users to export objects from each selected collection and its subcollections into a separate FBX file by right mouse button clicking on one of these selected collections

[[File:batch fbx.jpg]]

This functionality is available once user provided a valid export directory, exported files are named by selected collections.

[[File:armareforger-folder path.jpg]]

{{Feature|informative|Before exporting, make sure that all selected collections are made visible.}}

== Options ==

=== Only Visible ===

If the "Only Visible" property is unchecked, export does not take the visibility state of object or collection into account and exports every object within the selected collection.

If it is checked, only visible objects or objects from visible sub-collections will be exported.

{{Feature|informative|Keep in mind that collection visibility is superior to object visibility. So a visible object in an invisible collection will not be exported.}}

{{GameCategory|armaR|Modding|Official Tools|Enfusion Blender Tools|Tutorials}}
c964pnmmc97f5gr72nz8hyygi24ttvn

# Arma Reforger:Enfusion Blender Tools: Materials Library

5050
38003
370969
349585
2025-02-26T12:31:59Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370969
wikitext
text/x-wiki
Library provides some of the Enfusion shaders converted to Blender via its Shader Editor. Materials in Blender visually assist users while creating a model from scratch and help by creating additional data like baking textures and more.

Keep in mind that the main purpose of converted materials is to get a "close enough" preview that should speed up assets creation in Blender; the {{Link|#Technicalities}} section below sums up reasons why materials in Blender vs. Workbench aren't visually the same.

{{Feature|informative|Materials library setup is not required in case user don't want to take advantage of drag & dropping materials onto an Asset Browser mesh.}}

== Setup ==

# In Blender, go to '''Edit > Preferences > File Paths > Asset Libraries''' and add a new library with the '''plus (+)''' button. # Set {{hl|EnfusionBlenderTools\data}} folder as '''Path''', typically {{hl|C:\Users\<username>\AppData\Roaming\Blender Foundation\Blender\<blenderVersion>\scripts\addons\EnfusionBlenderTools\data}}<br><!-- -->The path to the addon folder can be found in '''Preferences > Add-ons''' under Enfusion Tools) # Set the library name - note that under this name a library can be found in Asset Browser # Set '''Import Method''' to '''Append''' # Save the preferences

== Usage ==

# In Blender, go to '''Asset Browser''' under '''Data''' # Select the previously created library from the list<!-- -->{{Feature|important| Before dragging a material from '''Asset Browser''', make sure that the import method is set to '''Follow Preferences''' (meaning the import method set in Library setup (Append) will be used).<br><!-- -->This is important as it prevents breaking Material workflow in Enfusion Blender Tools! }} # Drag a material from '''Asset Browser''' onto a mesh<!-- -->{{Feature|informative|Beware, as:<ul><!-- --><li>Drag & drop from '''Asset Browser''' is possible only in Object mode (this is a Blender limitation)</li><!-- --><li>It is highly recommended to rename assigned material from ''ShaderClassName'' to something meaningful, e.g {{hl|MatPBRBasic}} &rarr; {{hl|Bricks}}</li><!-- --></ul> }}<!-- manual ul li formatting because of Wiki complaining of # {{Feature|x|y}} list thing -->

== Technicalities ==

Enfusion shaders converted to Blender serve just as a "close enough" preview of what can be achieved in Workbench. There are several factors that contribute to the impossibility of delivering an identical visual experience in Blender's EEVEE renderer. Here are a few key facts that highlight these limitations:

* PBR implementation in Blender vs Enfusion is different * There is currently no Shader API in Blender ({{Link|https://docs.blender.org/manual/en/latest/render/eevee/introduction.html|Eevee}}) that could be used to write an Enfusion shader "twin", instead Shader Editor has to be used to manually create a material * Nodes provided by Shader Editor do not allow to access things like GBuffer or scene lighting information, therefore some specific material properties cannot be supported * PP effects implementation in Blender is different, some PP effects are not implemented at all * The way that Blender treats Alpha information is different from Enfusion (e.g {{hl|MatPBRBasic}}) ** Alpha Test (Clip) is not allowed in Alpha Blend mode (only in Alpha ''Clip'' mode) * Shaders in Blender use source texture formats (tif, png...) whereas shaders in Enfusion use compressed {{hl|.edds}} textures ** There may be visual differences spotted due to compression for example when playing with Alpha Test/Alpha Mul parameters

{{GameCategory|armaR|Modding|Official Tools|Enfusion Blender Tools|Tutorials}}
rls5x8l5vq97hxw4fvgj01d9aksybgx

# Arma Reforger:Enfusion Blender Tools: Materials Preview

5050
32820
370957
349581
2025-02-26T12:31:57Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370957
wikitext
text/x-wiki
{{TOC|side}} '''Materials Preview''' (referenced as MP in this document) feature allows to mimic Enfusion shaders in Blender to visually assist users while creating a model from scratch, to help creating additional data like baking textures for last LODs and more. MP feature currently supports loading of '''MatPBRBasic, MatPBRMulti, MatPBRDecal, MatPBRBasicGlass''' shader classes. MP feature focuses mainly to support (mimic) core functionality of particular shaders wherever possible, good example is PBRMulti shader, its core functionality is based on layering several materials and textures on top of each other by using various masks.

[[File:armareforger-ebt_materialspreview_comparison1.jpg|400px]] [[File:armareforger-ebt_materialspreview_comparison2.jpg|500px]]

[[File:armareforger-ebt_materialpreview_compression_difference.png|thumb|because of compression there may be visual differences spotted for example when playing with Alpha Test/Alpha Mul parameters]] Please be aware that even though both Blender and Enfusion uses PBR pipeline, it's necessary to point out few facts that makes delivery of exactly the same visual experience in Blender (EEVEE renderer) impossible:

* PBR implementation in Blender and Enfusion is different * there's currently no Shader API in Blender (EEVEE) that could be used to write Enfusion shader "twin", instead Shader Editor has to be used to manually build up a material by connecting various nodes together<br><!-- -->[[File:armareforger-ebt_materialspreview_shadereditor_1.png|500px]]<!-- -->[[File:armareforger-ebt_materialspreview_shadereditor_2.png|469px]] * nodes provided by Shader Editor doesn't allow to access things like GBuffer or scene lighting information therefore some specific material's properties can't be supported via MP feature * PP effects implementation in Blender is different, some PP effects aren't implemented at all * shaders in Blender use source texture formats (tif, png...) whereas shaders in Enfusion use compressed edds textures

== Features ==

=== Materials Import ===

EBT provides custom FBX Import via '''EnfusionTools''' menu, that imports meshes with Enfusion materials.<br> [[File:armareforger-ebt_materialspreview_fbximport_menu.png]]

In order to successfully import meshes with Enfusion materials, it's expected that:

* FBX is registered in Workbench (xob and xob.meta files already exists) * meshes have materials assigned

{{Feature|important|Materials Preview feature can only import materials/textures from within your own addon (expects source textures to be in PNG, TIFF... format), in other words you cannot import materials inherited from Vanilla Reforger.}}

Loading time depends on model's complexity as well as total number of unique materials/textures that need to be loaded.

Once loading is done, a log of issues (in case there are any) is provided. You can access the log by changing one of the editors to '''INFO''' editor. [[File:armareforger-ebt_materialspreview_fbximport_infowindow_menu.png]]

[[File:armareforger-ebt_materialspreview_fbximport_infowindow_example.png|800px]]<br>Example of an issue

Logs provides valuable information in case some materials or textures could not be loaded.

=== Materials Export ===

EBT allow users to export Enfusion materials ({{hl|.emat}}) from Blender. There are two ways to export Enfusion materials, each used in a specific scenario.

{{Feature|informative|Both ways of exporting materials require a running Workbench instance.}}

==== FBX Export ==== If a user creates a new material by drag and dropping it from the Material library, the material is not yet registered and does not contain a GUID in its name (e.g., bricks_15884ADEF846848). The registration process is carried out with EBT's Export FBX feature ('''Enfusion Tools > Export > FBX (.fbx)''').

When using this Export FBX feature, not only does it export the FBX file, but it also goes through all Enfusion materials (non-Enfusion materials are skipped) and registers them. Materials that are already registered (having a GUID in their name) are skipped during this process.

Once the export process is complete, the exported {{hl|.emat}} files (along with their {{hl|.emat.meta}} files) can be found in the {{hl|Data}} subdirectory, located next to the exported FBX file. If the Data subdirectory does not exist, it will be created automatically.

{{Feature|informative| * User can edit Enfusion materials even before they are registered. All the edits made to the materials will be properly exported to the {{hl|.emat}} file during the registration process. * If a user needs to rename already registered material, he can do so by simply renaming it without the GUID, for example, changing "bricks_15884ADEF846848" to "tiles".<!-- --> Once renamed, the material needs to be registered again using the Export FBX feature.<br><!-- -->It is indeed a good practice to delete the obsolete material in Workbench after renaming and re-registering the material with the updated name. }}

{{Feature|important| Every time a new material is created and needs to be registered, the FBX must be exported. This means that any mesh changes made will also be exported to the FBX file.<br> Therefore, it is important to ensure that any unwanted changes to the mesh are avoided or properly adjusted before registering the material and exporting the FBX file. }}

[[File:armareforger-enfusion_blender_tools_material_export.png|thumb]] ==== Material Export ==== This functionality can be only used on already registered materials (which have a GUID in name). {{Feature|informative| Materials that are imported together with the FBX using the '''Import FBX''' feature can be edited and exported immediately and do not need to export FBX first, given they are already registered. }}

{{Feature|important| The '''Export Material''' feature only exports the changes made to the selected material. If there are any mesh-related changes that need to be exported, use the '''Export FBX''' feature again. }}

{{Clear}} [[File:armareforger-ebt_materialspreview_material_sync.png|thumb]] === Materials Synchronisation ===

The feature let user to keep materials synced with Enfusion after FBX Import, in case user makes a change to material in Workbench (changing texture or value), pressing '''Update Materials''' button will reflect these changes in Blender.

Valid (absolute) path to xob.meta file has to be provided, note that during EBT custom FBX Import this path gets filled automatically if such file exists.

In case user creates an asset from scratch, before using '''Update Materials''' for the first time, FBX must be exported and registered in Workbench, this creates xob.meta file that holds materials mapping, material's name (in Blender) &rarr; Enfusion material (emat).

Make sure that changes made to a material in Workbench get saved before '''Update Materials''' button is pressed. {{Clear}}

[[File:armareforger-ebt_materialspreview_materialsediting_ui.png|right|300px]] === Materials Editing ===

Along with Materials import, EBT also allows users to edit supported Enfusion materials. For this, custom panels were added to '''Material Properties'''. Note that editing material's properties is local right now, it means that changes can't be exported to Workbench.

User can edit material's properties by selecting one of the material slots and panels change according to selected Enfusion shader type (PBRBasic, PBRMulti, etc.).

{{Feature|informative|User can leave any UV source widget blank in case first UV set supposed to be used.<br> [[File:armareforger-ebt_materialspreview_uv_1.png]] [[File:armareforger-ebt_materialspreview_uv_2.png]] }}

{{Feature|important| Do not manually edit text field in texture slots widgets!

[[File:armareforger-ebt_materialspreview_textureslot_field.png]]

User can only set a texture that has been already registered (has meta file). }}

=== Debug Channels ===

{| class="valign-top" | style="width: 33%" | Users can take advantage of debug channels like in Workbench.

[[File:armareforger-ebt_materialspreview_debugchannels.png]]

Supported channels: * None * Albedo * Roughness * Metallic * World Normals * Mask | style="min-width: 600px" | <gallery mode="slideshow" showthumbnails style="margin-top: 0"> File:armareforger-ebt_materialspreview_debugchannel_normals.jpg|Normals File:armareforger-ebt_materialspreview_debugchannel_roughness.jpg|Roughness File:armareforger-ebt_materialspreview_debugchannel_mask.jpg|Mask File:armareforger-ebt_materialspreview_debugchannel_albedo.jpg|Albedo </gallery> |}

{{GameCategory|armaR|Modding|Official Tools|Enfusion Blender Tools|Tutorials}}
3c7dylmn43v4brczfhp1if3skqdhc1e

# Arma Reforger:Enfusion Blender Tools: MLOD Baking Tutorial

5050
32871
370914
353595
2025-02-26T12:31:49Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370914
wikitext
text/x-wiki
{{TOC|side}} A small tutorial for how to bake MLODs with Blender for those who aren't familiar with Blender.

# Use the EBT importer # Select LOD0 and the MLOD # Select the last LOD and navigate to the material section. If you're just rebaking the MLOD and there's an imported MLOD material, remove it and add a new one (if you'll export the model, put the old one back in after you're done with this). # Add an image texture to the material # Create an empty texture # Go to render properties and change the render engine to Cycles # Scroll down and open Bake # Switch bake type to Diffuse and set Contributions to color only # Check Selected to Active and set the extrusion (or also max ray distance) to a distance that will cover the differences between your MLOD and LOD0. If there's transparency where there shouldn't be any, adjust the extrusion distance # Right click on the corner of the area with the model, select vertical split and click somewhere in the area with the model to create a new area # Switch the area/editor type to image editor # Select all by pressing "A" (or select the objects that belong to LOD0 and the last LOD) and make sure the last LOD is highlighted in yellow. If it's orange, "Ctrl+left click" it until it is. # Press Bake and wait # The resulting texture will appear in the image editor where you can save it # Set the file format to TIFF and very importantly, set the compression to LZW.

Done! :-)

{{GameCategory|armaR|Modding|Official Tools|Enfusion Blender Tools|Tutorials}}
mfqdpa7tnaptoyzpfejf6t9l0otsdef

# Arma Reforger:Enfusion Blender Tools: Model Quality Assurance

5050
38278
371005
353655
2025-02-26T12:32:06Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
371005
wikitext
text/x-wiki
{{TOC|side}}

== Description == Model Quality Assurance(MQA) feature provides tools to capture various issues on a model before it even gets into Enfusion. MQA isn't meant for Blender user only, it's highly recommended for Autodesk Apps users too.

== Features == The tool reports two types of issues: '''Conventions'''(naming) and '''Mesh Topology'''(various issues related to mesh data)

Reporting works while in '''Object Mode''' and report contains issues selected by user. If selected issue is not listed in the report, it means such issue hasn't been found. [[File:armareforger-blender-mqa-console-report.png|none|thumb|600x600px|Report generated by MQA in Blender Info Log]]

Along with reporting, MQA also helps user to locate selected Mesh topology issue via '''Validator''' objects. Depending on the issue, the tool generates specific meshes to provide visual assistance in locating the problem. [[File:armareforger-blender-mqa-validator.png|none|thumb|600x600px|MQA Validator in Blender viewport]]

=== '''Report window''' === There are two ways of getting to the report window(Blender Info Log):

* once reporting is done just click on a bar at the bottom of Blender app(this message disappears after few seconds), this will open the report window

[[File:armareforger-blender-mqa-report-1.png]]

* you can simply change the editor type to '''Info'''

[[File:armareforger-blender-mqa-report-2.png]]

It's a known Blender issue that '''Info''' window updates once it gets focus by hovering mouse cursor over it. So in case information in the '''Info''' window is outdated after pressing the '''Report!''' button, just move mouse cursor into '''Info''' window.

== Issue Reporting ==

=== Conventions ===

==== Non-Enfusion Data ==== Loops through all selected objects(only "MESH" object type)and reports if object name doesn't contain any of Enfusion supported:

* prefixes -> "ubx", "ucx", "usp", "ucs", "ucl", "utm", "com", "occ", "socket", "boxvol", "sphvol" * suffixes -> "_lod0"(up to 15)

It helps to detect typos eg. "suckit_" instead of "socket_" as well as objects that may be left overs(references,helpers) hidden in collections or hidden under parent Empty(Armature), so they can be removed from file.

* ''Non-Enfusion data:''

==== .xxx ==== Autodesk Apps allow user to name various objects by the same name eg. "house_lod0". If a model with such named objects is then imported into Blender, it renames each object as follows: "house_lod0.000", "house_lod0.001" etc. This may go under artist's radar and such named objects will be apparently skipped during FBX import in Enfusion.

* ''Objects having '.xxx' suffix:''

'''<nowiki/>'usage' Property'''

Loops through all selected collider objects and reports those that:

* don't have 'usage' property defined at all ** ''No 'usage' property on collider(s):'' * have 'usage' property defined, but string is empty ** ''Empty string in 'usage' property on collider(s):'' * have 'usage' property defined, but string is not from the predefined list of LayerPresets(defined in ArmaReforger.gproj) ** ''Wrong layer preset name in \'usage\' property on collider(s):''

=== Mesh Topology ===

==== Short Edges ==== Loops through all selected objects and reports those their mesh contains at least one edge shorter than value of parameter '''Length'''.

* ''Short edges:''

==== Small Faces ==== Loops through all selected objects and reports those their mesh contains at least one face with area smaller than value of parameter '''Area'''.

* ''Small faces:''

==== UCX Collider ==== Loops through all selected '''collider''' objects and reports those their mesh contains:

* at least one Non-manifold edge ** ''Non-manifold edges on UCX:'' * at least one Non-planar face(ngon) ** ''Non-planar faces on UCX:'' * at least one Non-convex face ** ''Non-convex faces on UCX:''

==== UVs ==== Loops through all selected objects and reports those that:

* at least one vertex coordinates exceed range <32,32> in UV space ** ''Exceeding UV Coordinates:'' * at least one face has all of its vertices at (0,0), Autodesk Apps users can delete faces in UV Editor(impossible in Blender), in Blender these faces appear as unwrapped(look like single vertex at coord(0,0)) ** ''Non-Unwrapped UV Faces:''

{{GameCategory|armaR|Modding|Official Tools|Enfusion Blender Tools|Tutorials}}
h3p21z3ush9yaahleinni9ikrlvltj5

# Arma Reforger:Enfusion Blender Tools: NLA Strips Baking Tool

5050
38209
370936
353588
2025-02-26T12:31:52Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370936
wikitext
text/x-wiki
{{TOC|side}} == Description == NLA Strips Baking tools is a small tool useful for retargeting animations via NLA workflow. For instance, it is possible to create one large track containing existing animations and then create one track on top of it in '''combine''' mode to make adjustments to it. Afterwards, such adjusted tracks can be baked to respective action which can be easily exported by TXA exporter.

[[File:armareforger-blender-nla-strips-baking-nla-tracks.png|none|frame|''Example NLA tracks setup for NLA Strips Baking tool'']]

== Usage == [[File:armareforger-blender-nla-strips-baking-interface.png|thumb|NLA Strips Baking tab]] Usage of tool is pretty simple and bake can be initiated by following few basic steps:

# Click on '''NLA Tracks Fetcher''' icon # Select NLA Track which you want to bake in the field next to '''NLA Tracks Fetcher''' button (''i.e. Erected'') # Click on '''Bake NLA Strips''' button

After pressing that button, '''all strips''' in selected NLA track will be baked to new actions, which are using strip name + " Baked" suffix. Baking of actions might take some time depending on length of involved strips so please be patitent.

Once that process is completed, actions can be exported via TXA exporter

[[File:armareforger-blender-nla-strips-baking-export.png]]

=== Selected Strips Baking === [[File:armareforger-blender-nla-strips-baking-selected-only.png|thumb|Selective strips baking]] For faster iteration, it is also possible to use '''Bake selected strips only''' option. When activated, a new section in the interface will become available where it is possible to specify which strips should be baked. Once list is filled, it is possible to click on '''Bake NLA Strips''' button to initiate baking process

{{GameCategory|armaR|Modding|Official Tools|Enfusion Blender Tools|Tutorials}}
nbkktdw56vwj4mzcmyu58409rjbc4sr

# Arma Reforger:Enfusion Blender Tools: Objects Tools

5050
32791
370986
364641
2025-02-26T12:32:03Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370986
wikitext
text/x-wiki
{{TOC}}

== Introduction == Objects Tools are collection of various helper scripts to manage Enfusion specific properties. Those tools are part of [[Arma Reforger:Enfusion Blender Tools|Enfusion Blender Tools]]

== Automatic Sorting of Objects ==

[[Image:armareforger-blender-object-tools-overview.png|800px|right]] '''Sort Objects''' operator is located in side panel of viewport and can be found '''Enfusion Tools''' tab. This tool creates new collections for all objects in the scene similar to the structure that is used in Workbench. That means that for instance all objects with one of the collider prefixes like '''UCL, UTM & similar''', will be assigned to '''Colliders''' collection. Additionally, this tool will also create '''sub collections''' for '''[[Arma Reforger:Collision Layer|layer presets]]''' it detected on colliders objects, move all '''empty objects''' to '''Memory Points''' collection, and put all '''armatures''' into '''Skeletons''' collection. Full list of all recognised suffixes & prefixes is attached below.

Sort Objects have following optional parameters:

* '''Fold collections''' - All collections will be automatically folded after this action is activated * '''Hide collections''' - All collections, except first visual LOD, will be hidden * '''Separate by materials''' - Objects in LOD collections will be additionally separated by their material

{| class="wikitable" ! Prefix/Suffix ! Collection |- | ''UCL_''

''UCX_''

''UBX_''

''UTM_''

''USP_''

''UCS_''

''COM_''

''LC_'' | Colliders |- | ''PRT_'' | Light Portals |- | ''BOXVOL_'' | Volumetric Boxes |- | ''OCC_'' | Occluders |- | ''SOCKET_'' | Memory Points |- | ''_LODxx'' | LODx |} {{Clear}}

== Colliders & Layer Presets Setup ==

[[Image:armareforger-blender-object-tools-layers.png|800px|right]] Before using '''Colliders Setup''' tool, make sure you that you are running '''Workbench with net API enabled'''. '''Materials Tools''' also depend on correctly sorted objects and at least colliders should be located in separate '''Colliders''' collection in '''Blender.'''{{Clear}}

[[Image:armareforger-blender-object-tools-layers2.png|1400px]]

With '''Collider Setup''' button it is possible to change assigned '''Game Material''' or '''Layer Preset''' for one or multiple selected objects in '''Colliders''' collection (''including sub collections'').

=== Assigning Layer Presets === In '''Object Mode''' material will be applied to whole object and will remove all other materials from it. It is also possible to change '''Layer Presets''' in this mode.

[[Image:armareforger-blender-object-tools-colliders.gif]]

=== Assigning game material === {{Feature|informative|''Game materials menu omits materials which ends with _base word in order to avoid cluttering the list too much.''}}

Assignment of multiple different game materials per object is possible only in '''Edit Mode'''. Such action can be performed by simply selecting some of the faces and then using '''Colliders Setup''' button

[[Image:armareforger-blender-object-tools-colliders-edit.gif]]

{{GameCategory|armaR|Modding|Official Tools|Enfusion Blender Tools|Tutorials}}
7to71wo55ocqzxaijj65b43b5sdbgeg

# Arma Reforger:Enfusion Blender Tools: P3D Conversion

5050
32445
371026
367275
2025-02-26T12:32:10Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
371026
wikitext
text/x-wiki
{{TOC|side}} The Enfusion Tools plugin for Blender offers an easy, semi automated way to import & convert to Enfusion standards any model from Real Virtuality 4 engine in unbinarised (MLOD) P3D format. They are distributed with the Arma Reforger Tools package on Steam.

{{Feature|important|ODOL P3Ds '''cannot''' be imported.}}

=== Installation === P3D conversion is part of Enfusion Blender Tools therefor it is necessary to install that addon before proceeding. Installation instructions can be found on [[Arma Reforger:Enfusion Blender Tools#Installation|Enfusion Blenders Tool page]].{{Feature|important|Since 0.9.7 version of the addon, '''running Workbench with net API enabled''' in necessary!}}

=== Related Plugin Settings ===

[[Image:armareforger-p3d-conversion-settings2.png|500px|left]] There is one parameter in this plugin which affect some of the P3D conversion features.

Addon settings can be found in '''Edit &rarr; ⚙ Preferences... &rarr; Addons &rarr; 3D View: Enfusion Tools'''

=== Related parameters ===

==== Material Conversion Table ==== Path to material conversion table. By default plugin will use one of conversion table already distributed with the addon

{{Clear}}

== Interface ==

==== P3D Import ====

[[File:armareforger-p3d-conversion-import.png|800px]]

To begin P3D import, navigate to '''Enfusion Tools &rarr; Import''' tab & then select "'''Arma 3 P3D (.p3d)'''". This will bring you typical Blender File View window where you can select file to import & specify some parameters.

==== Import Window Interface ==== This window allows to select the P3D file to be imported & specify import parameters.

* Discard unsupported LODs - see [[#Obsolete_LODs_Discarding|Obsolete LODs Discarding]] section *Layer Presets **Here you can define which layer presets will be assigned to each imported LOD *Rename Materials - see [[#Add_Layer_Presets_.26_Game_Materials|Add Layer Presets & Game Materials section]] section *Convert axis to single point - see [[#Convert_Memory_Points_Axis_to_Single_Socket|Convert Memory Points Axis to Single Socket]] section

[[File:armareforger-p3d-conversion-import2.jpg|800px]]

====Imported Content Overview==== Once P3D import is completed, all your objects will be organised into separate collections. Collections are created using following rule set:

*Each resolution LOD will be in its own - '''LODx''' - collection, *Geometry related objects (Geometry, Geometry PhysX, View Geometry, etc) are stored in '''Colliders''' collection *Memory points are stored in... '''Memory points''' collection

[[File:armareforger-p3d-conversion-import-mesh.jpg|800px]]

===Functions===

====P3D Import==== Any non binarised P3D model created for Arma 3 or DayZ can be imported into Blender using this plugin

====Obsolete LODs Discarding==== All non compatible LODs are discarded during import. Only the following LODs are imported:

*Resolution LODs *Geometry *Geometry PhysX *View Geometry *Fire Geometry *Memory

There is the possibility to import unsupported LODs by unchecking "'''Discard unsupported LODs'''" option.

====Objects Renaming==== All imported objects are renamed to Enfusion standards so they can be correctly recognised during import to Workbench.

There are 2 main rules:

*All resolution LODs are receiving '''_LODx suffix'''. LODs are automatically renumbered from 0 to 15. *Geometry LODs receive '''UTM_ prefix'''.

{{Feature|important|The model can only sport up to '''16 resolution LODs'''. Visual LODs above that number are discarded!}}

====Add Layer Presets & Game Materials==== Geometries are receiving proper '''Layer Presets''' and '''Game Materials''' depending on their type and RVMATs they have assigned.

Rules for material renaming can be customised by creating your own version of '''conversion_gameMaterials.txt''' & then selecting that custom file in addon settings

====Convert Memory Points Axis to Single Socket==== Rotation & translation transformations in RV engine are using 2 memory points to determine axis of movement. Enfusion is using rotation of a single point to determine the origin of transformation.

==FBX Batch Conversion==

[[File:armareforger-p3d-conversion-batch-flow.png|800px]] ===Preparation===

Batch file '''convertToFBX.bat''' is bundled together with the plugin. You can use this batch file to convert multiple P3Ds at once. This file is located in zip file in the following location: BohemianBlenderTools\p3d_import\batch

After extracting it to your drive, default parameters will have to be modified:

====Blender Executable Location==== Quite self explanatory - provide the path to the Blender executable set Object=C:\Program Files\Blender Foundation\Blender 2.92\blender.exe

====Plugin Location==== This path should lead to {{hl|P3DtoFBX.py}} file which should be located in the plugin's installation directory. set Script=%APPDATA%\Roaming\Blender Foundation\Blender\2.92\scripts\addons\BohemianBlenderTools\p3d_import\P3DtoFBX.py

Once those paths are adjusted, you can simply drag and drop single or multiple P3D files on '''convertToFBX.bat'''. New FBX files will be created next to the original P3Ds.

<!-- === Example ===

[[File:armareforger-p3d-conversion-batch-example.mp4|800px|link=Special:FilePath/armareforger-p3d-conversion-batch-example.mp4]] -->

{{GameCategory|armaR|Modding|Official Tools|Enfusion Blender Tools|Tutorials}}
dlflr8m3f4lxtr49cn8yywef5wwryma

# Arma Reforger:Enfusion Blender Tools: Portal Tools

5050
38211
370916
353589
2025-02-26T12:31:49Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370916
wikitext
text/x-wiki
{{TOC|side}}

= Description = This feature allows users to automatically generate Portals and Portal Volumes on a structure. It will generate all portals on a right position, with naming convention and a material which will automatically be assigned when exporting to Workbench.

It also can be used to generate Portal Volumes(with dummyVolume material) which will automatically resize depending on a room size in real-time. After applying them, the Portal Volumes can be manually adjusted to your needs.

== Portals == Before you want to generate Portals, please ensure you have everything set upped:

# Collider with '''FireView/FireGeo''' or '''BuildingFireView''' layer preset ## [[Arma Reforger:Enfusion Blender Tools: Objects Tools|Here]] you can learn how to simply assign layer presets to colliders # '''Sockets''' for doors/windows on the '''right location''' and with the right '''naming convention''' # Opened Workbench with '''NET API enabled'''

There is no need for anything to be selected or even visible, just make sure everything is in the scene [[File:armareforger-blender-portal-interface.png|none|thumb|989x989px|Interface of Portal Tools]]

Once all the necessary preparations are in place, you can press "'''Generate Portals'''", this will generates planes the '''right transformations''', '''normals''', '''naming convention''' and '''materials''' from '''_SharedData'''. Materials depends on the portal size, so if the door/window frame is slightly bigger than the norm no portal material will be assigned! In such cases, a basic Blender Material will be generated, and the user will need to manually assign the appropriate material in Workbench.

{{Feature|informative|'''Keep in mind!'''<br>

When generating PRTs, there's a slight margin for error, so it's essential to check all portals if they were generated right and make any necessary adjustments if not.

* Portal will have no scale (If the socket is placed inconveniently) * Portal material will be default blender material (If the material with these sizes wasn't found in the _SharedData) * Portal will have huge scale (If the socket was placed in a location where there is a hole in the collider mesh) <br> Everything can be fixed manually by adjusting the scale, etc..}}

== Portal Volumes == [[File:armareforger-blender-portal-tools-volumes.png|none|thumb|998x998px|Portal Volumes generation]] To generate a PRTVOL, you have to '''select at least two portals''' to determine in '''which room''' the PRTVOL should be generated in. The origin of the PRTVOL will be generated in the '''middle of the selected portals'''. Then you can simply press "'''Generate PRTVOL"''' and it will create a PRVOL box with Geometry Nodes on it. This allows you to move the PRTVOL in real-time, as it '''dynamically adjust itself according to the room size'''. It resizes itself depending where the origin of the PRTVOL is.{{Messagebox|'''Tip!'''<br> The resizing will work even when nothing is visible in the scene, but my advice is to set visible either a collider or the BSP and then turn Xray in the Viewport Shading settings to properly see the PRTVOL with the room but in most case you wouldn't need to move the generated PRVOL. [[File:armareforger-blender-portal-tools-xray.png]]|✩|#88cc88}}

After you have all PRTVOLs at its place you can '''apply them''' by pressing "'''Apply PRTVOL'''" and it will apply the geometry nodes and '''assign it a dummy volume material''' which will be automatically linked in Workbench while exporting. After pressing the apply button you can then '''adjust any PRTVOL to your needs''' so everything is set up correctly.

The Portal Volume will automatically be placed in a "''Light Portals''" collection. {{Feature|informative|'''Keep in mind!'''<br>

This feature may not be fully automatic for more complex structures that requires cutting planes, so some manual adjustments may still be required!<br>

This button applies the geometry on all PRTVOLs that were generated!}}

{{GameCategory|armaR|Modding|Official Tools|Enfusion Blender Tools|Tutorials}}
dcnpvlsxgomjn1fya0dvpp6s4qy4s4o

# Arma Reforger:Enfusion Blender Tools: Rig Updater

5050
38210
373343
370931
2025-04-22T10:11:23Z
Reyhard
10671
/* Usage */
373343
wikitext
text/x-wiki
{{TOC|side}} = Description = This tool replaces existing character rig with newer version. Everything located in '''LOD0, Rig, Reference, IK Targets''' or '''Extra''' collection will be deleted and replaced by version from newer blend file.

During upgrade process, following things will be performed:

* Replacement of old Rig with newer version * Restoration of all NLA tracks assigned to old Rig * Restoration of all bone constrains present in the Rig * Updating of constrains present on all non Rig & Character objects which were previously pointing to Rig or Character

{{Feature|warning|Be careful - updater tries to handle most of the migration steeps but it is still possible that it might encounter some issue. Proceed with caution and perform backup of your blend file before attempting to upgrade the rig!}}

= Usage =

# Download latest [https://github.com/BohemiaInteractive/Arma-Reforger-Samples/blob/main/SampleMod_NewCharacter/Assets/Characters/SampleCharacter/Character_AnimationRig_RigUpdater.blend Character_AnimationRig_RigUpdater.blend] # Open blend file with rig which you want to update # In Enfusion Tools tab, navigate to '''Animation Tools''' and click on '''Update Rig''' button # Locate [https://github.com/BohemiaInteractive/Arma-Reforger-Samples/blob/main/SampleMod_NewCharacter/Assets/Characters/SampleCharacter/Character_AnimationRig_RigUpdater.blend Character_AnimationRig_RigUpdater.blend] and confirm selection by clicking on '''Update rig''' button [[File:armareforger-blender-rig-updater-process.gif]]

{{GameCategory|armaR|Modding|Official Tools|Enfusion Blender Tools|Tutorials}}
pv8lb1es58ry24endtwtiid9nhea4hm

# Arma Reforger:Enfusion Blender Tools: Import/Export Animation

5050
32643
370951
370668
2025-02-26T12:31:56Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370951
wikitext
text/x-wiki
{{TOC|side}}Animations for Enfusion are exported into an intermediate human-readable format TXA. This format needs to be further compiled by the Enfusion engine into ANM - a binary format used during the runtime. ==Animation== ===Export animations from Blender=== TXA Export is available in top section of 3D viewport. To perform export, following things are necessary:

*at least one '''Armature''' & '''Action''' present in the current scene *at least one folder is defined in '''Export Profile Folder''' with some valid animation export profiles ''(see [[Arma_Reforger:Enfusion_Blender_Tools#Installation|'''Enfusion Blender Tools''']] page for instructions)'' * *running '''Workbench''' with '''net API enabled''' ''(see '''[[Arma_Reforger:Enfusion_Blender_Tools#Installation|Enfusion Blender Tools]]''' page for instructions)''

If all above conditions are meet, from top bar select '''Enfusion Tools -> Export -> Enfusion Animation (.txa)''' to initiate animation export.

[[Image:armareforger-blender-txa-export-toolbar.jpg|800px]]

Once that button is pressed, following window should be visible:

[[File:armareforger-blender-txa-export-animation3.png|frameless|800x800px]]

====Top section==== [[File:armareforger-blender-txa-export-animation-top-section.png]]

Top section contains following things:

*'''Save location''' - folder where the exported actions will be stored. You can either type in the location or use '''Change save location''' button located on the right side **When changing location, it is possible to use '''relative path''' for saving the TXA - this is useful feature when collaborating with multiple people *'''Folder with export profiles -''' folder with animation export profiles which should be currently used. This list populated through '''Export Profile Folder''' parameter located in '''Enfusion Blender Tools settings.''' *'''Armature name -''' name of the armature which will be used for export. Bone transformations from this armature are processed by the exporter and stored in exported TXA file. This parameter is only visible if you have more than one armature in the scene *'''Secondary armature name''' ''(optional)'' '''-''' name of the secondary armature which will be used during export . This is parameter is useful when armature which you want to export, is constrained to another armature and doesn't have any motion itself and you want to export multiple actions at once. In case of Rigify rig, in this field should be selected name of the Rigify control rig. This parameter is only visible if you have more than one armature in the scene *'''Hide -''' Collapses export profiles in all actions *'''Show''' - Expands export profiles in all actions *'''Disable''' - Disables export profiles in all '''visible''' (''expanded)'' actions *'''Enable''' - Disables export profiles in all '''visible''' (''expanded)'' actions *'''Search''' [[File:armareforger-blender-txa-search-icon.png|22x22px]] - Filter visible actions. '''Confirm filtering by pressing enter.''' Only '''visible''' and '''expanded''' export profiles will be exported *'''Toggle Compact View''' [[File:armareforger-blender-txa-toggle-compact-view.png]] - Toggles between regular and more compact list of all actions

====Action list==== [[File:armareforger-blender-txa-export-animation-list.png]]

'''Action list''' contains '''actions''' (marked in orange) found in the scene. [https://docs.blender.org/manual/en/latest/files/asset_libraries/introduction.html#bpy-ops-asset-mark Actions marked as assets] are hidden from this list. Each individual action has an '''arrow''', which controls the visibility of '''Action Export List''' - this option is quite useful when dealing with large amount of actions like on example picture above.

Please note that only '''expanded & visible''' actions are exported{{Feature|important|If you '''don't see any action in the action list''', make sure your action is not marked as asset. See above description for more details}}

====Action export list==== [[File:armareforger-blender-txa-export-export-list.png]]

Action export list is the hear of TXA exporter. Over there it is possible to '''add exports''' & define '''how those actions will be processed'''. New entries in that list can be added by clicking on '''+ Add''' button located on the right side. Removal of exports can be done in similar way by pressing '''X''' button on the right side.

*'''Enable checkbox -''' control if this export is active or not. In inactive state '''no txa''' will be generated *'''Profile -''' [[Arma Reforger:Animation Export Profiles|animation export profile]] which will be used on this export. By default, assuming [[Arma_Reforger:Enfusion_Blender_Tools#Installation|Enfusion Blender Tools Data]] was correctly installed, there should be dozens of available animation exports which were used on Reforger assets. Selected profile has to correspond with the skeleton - otherwise no animation will be exported. *'''File''' - name of resulting txa file *'''Diff pose''' ''(optional)'' - name of the action which will be used as difference target for additive transformations. If you are using animation profile which doesn't have any additive transformations, you can leave that field empty *'''Diff pose frame''' ''(optional)'' - frame of '''diff pose''' which will be used as a base for additive animations export *'''Additional armature''' ''(''optional'')'' - Bones from this armature will be considered during the export. It can be used in export of vehicle animation, where you have door & character movement keyframed in single action - this way you don't have to switch between main Armature names {{Feature|warning|Selecting proper '''export profile''' is crucial for correct export of animation! In case of custom rig, it might be necessary to create '''custom animation export profiles'''}}

Once all desired animation actions are selected and properly configured for export (meaning they have '''correct animation export profile''' selected), it is now possible to finally perform export to TXA. To do so, press '''OK''' button in bottom section of the export window.

===Import animation to Enfusion===

By default, '''Enfusion Blender Tools''' will try to '''automatically register & import animation''' if save location is located in one of the currently loaded addons.

If you are using '''symbolic links''', then it might be necessary to manually register and import TXA animation - there are two ways how to do it:

* Drag and drop the TXA file into the [[Arma Reforger:Resource Manager|Resource Browser]]. * Click on TXA with Right Mouse Button and select '''"Register and Import"''' option from the Context Menu.

Once animation is imported, .ANM file will be automatically regenerated every time Workbench detects change in .TXA. If TXA was modified when Workbench was closed, manual reimport might be necessary.

=== Troubleshooting ===

==== Incorrect save location ====

* Make sure that location exist * Make sure that correct type of slashes are used when copy pasting path * Make sure that relative path option is disabled if you are trying to save TXA file on different drive than blend file is located

==== TXA registration failed (Unable to translate to relative path) ==== Possible causes:

* Save location is outside of loaded projects in Workbench * Symbolic links are used

If you see this warning, then be aware that automatic registration of txa animation is not going to work and you might need to manually register & import such file in '''Resource Manager'''. Currently tool is not able to resolve s{{GameCategory|armaR|Modding|Official Tools|Enfusion Blender Tools|Tutorials}}ymbolic links and won't be able to automatically register files in such cases. If such files

====Unable to create metafile==== If you get error like<syntaxhighlight lang="c"> Enfusion Tools - TXA Export WARNING - TXA exported to ... but Workbench couldn't create metafile! Check the export path. </syntaxhighlight>

It means selected file location is outside of any loaded by Workbench addons. Manual registration and import of file might be necessary afterwards.
0d3c74ytl51zhz99ev3ou2ay8vgxv9f

# Arma Reforger:Enfusion Blender Tools: Import/Export ASC Elevation

5050
32578
370940
346938
2025-02-26T12:31:53Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370940
wikitext
text/x-wiki
[[File:armareforger-ebt_asc_file_import_example.png|thumb|800px|Example of procedural terrain editing by sticking terrain vertices to a complex shape and then result imported in World Editor]] This feature allows to import an {{Link|https://en.wikipedia.org/wiki/Esri_grid|ESRI asc grid}} format into Blender as regular grid mesh as well as to export regular grid mesh back to ASC file (and import it in World Editor).

{{Feature|informative|This tool is a very simplistic implementation that imports the whole file at once; therefore, depending on grid resolution, operations may take some time.}}

== Import ASC File ==

[[File:armareforger-ebt_asc_file_import_menu.png]]

In the Enfusion Blender Tools menu, use '''Import > ASC elevation'''.

Once the import is done, {{hl|Min/Max elevation}} and {{hl|Elevation range}} information is printed out in the Info log.

[[File:armareforger-ebt_asc_file_info_log.png|600px]]

== Export ASC File ==

[[File:armareforger-ebt_asc_file_export_menu.png]]

Select the terrain object first, then in the BT menu use '''Export > Terrain to ASC'''.

Once the export is done, ''Min/Max elevation'' and ''Elevation range'' info is printed out in Info editor.

== Elevation Modification ==

[[File:armareforger-ebt_asc_file_good_bad_modification.png|400px]]

The elevation of an imported terrain mesh can be modified in various ways in Blender, e.g via Edit/Sculpt mode or by using procedural approaches.

Terrain mesh is represented as a regular grid and must remain as such after any modifications are done to mesh, otherwise elevation changes can appear in a slightly shifted position.

=== Edit Mode ===

In '''Edit''' mode, the safest way to prevent such issue is to only shift vertices in the vertical axis by dragging the gizmo's blue arrow which locks movement to Z (vertical) axis.

[[File:armareforger-ebt_asc_file_edit_mode.png|400px]]

=== Sculpt Mode ===

In '''Sculpt''' mode, user can prevent vertices shifting in horizontal plane by locking the X and Y axis in the following menu:

[[File:armareforger-ebt_asc_file_sculpt_mode.png|800px]]

{{GameCategory|armaR|Modding|Official Tools|Enfusion Blender Tools|Tutorials}}
gul5v6t12gh7gp8qisr090441cn1zak

# Arma Reforger:Animation Export Profiles

5050
33171
370970
349577
2025-02-26T12:31:59Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370970
wikitext
text/x-wiki
{{TOC|side}}Export profiles define set of bones that are exported from Blender, Motion Builder or 3ds Max. Their default location is {{hl|\anims\export_profiles}}.

{{Feature|informative|{{armaR}} default data does not contain any export profiles; some are provided along '''Enfusion Blender Tools''' ({{hl|EnfusionBlenderTools-Data.zip}}) - see {{Link|Arma Reforger:Enfusion Blender Tools#Installation}}.}}

Provided files: <spoiler>{{TOC|side}}__NOEDITSECTION__ <div style="columns: 2"> {| class="wikitable" style="width: 100%" |+ === Body === ! File ! Description |- | 000_Multi_FullBodyABS_RHandNone_LHandNone.apr | |- | 002_Multi_FullBodyABS_RHandNone_LHandABS.apr | |- | 101_FullBodyABS.apr | |- | 102_FullBodyABS_camera.apr | |- | 110_FullBodyABS_RHandNone_LHandNone.apr | |- | 120_FullBodyABS_RHandNone_LHandABS.apr | |- | 121_UpperBodyABS_RightArmABS.apr | |- | 122_UpperBodyABS_LeftArmABS.apr | |- | 123_Head_ABS.apr | |- | 123_Head_ADD.apr | |- | 123_LHandABS.apr | |- | 124_FullBodyABS_RHandABS_LHandNone.apr | |- | 126_UpperBodyABS_RHandNone_LHandABS.apr | |- | 150_FullBodyADD.apr | |- | 150_FullBodyADD_camera.apr | |- | 151_FullBodyADD_RHandNone_LHandNone.apr | |- | 152_FullBodyADD_RHandNone_LHandNone_HipsADD.apr | |- | 250_UpperBodyADD.apr | |- | 251bis_UpperBodyADD_RHandNone_LHandABS.apr | |- | 251_UpperBodyADD_RHandNone_LHandNone.apr | |- | 252_UpperbodyADD_ArmsABS.apr | Reloads |- | 253_UpperbodyADD_ArmsABS_RPropNone.apr | |- | 254_UpperbodyADD_ArmsABS_RHandNone.apr | |- | 255_RArmABS_RHandNone.apr | |- | 256_UpperbodyADD_LArmABS.apr | |- | 257_UpperbodyADD_LArmADD_LHandABS.apr | |- | 258_UpperbodyADD_ArmsABS_HandsNone.apr | |- | 259Bis_UpperbodyADD_LArmABS_LHandNone_LPropABS.apr | |- | 259_UpperbodyADD_LArmABS_LHandNone.apr | |- | 260_LArmADD_LHandNone.apr | |- | 262_ArmsADD_RHandABS.apr | |- | 301_LowerbodyABS.apr | |- | 401_RIndexABS.apr | |}

{| class="wikitable" style="width: 100%" |+ === Inverse Kinematics === ! File ! Description |- | 501_IK.apr | |- | 502_IK_RightHand.apr | |- | 503_IK_LeftHand.apr | |- | 504_IK_RightElbow_Hand.apr | |}

{| class="wikitable" style="width: 100%" |+ === Misc === ! File ! Description |- | 601_watch_SandY184A.apr | |- | 602_flag.apr | |}

{| class="wikitable" style="width: 100%" |+ === Weapon Idles === ! File ! Description |- | 700_Pistol_Idle.apr | |- | 701_Rifle_Idle.apr | |- | 702_Machinegun_Idle.apr | |- | 703_RPG_Idle.apr | |- | 704_Grenade_Idle.apr | |- | 705_PKM_magazine.apr | |- | 706_M60_magazine .apr | |- | 707_Rifle_Idle_SVD.apr | |- | 708_M249_magazine.apr | |- | 709_Machinegun_Idle_M249.apr | |- | 710_Grenade_RGB2_Idle.apr | |- | 711_Rifle_stock.apr | |}

{| class="wikitable" style="width: 100%" |+ === Generic Weapon Profiles === ! File ! Description |- | 720_Weapon_FireMode.apr | |- | 721_Weapon_Trigger.apr | |- | 722_Weapon_MagRelease.apr | |- | 723_Weapon_Sight.apr | With sight slider: rifle, machinegun, RPG |- | 724_Weapon_Bolt.apr | |- | 725_Weapon_Hammer.apr | Pistol, RPG |- | 726_Weapon_Bolt_trigger.apr | |- | 727_Weapon_Bolt_rack.apr | |- | 728bis_M203_Sight.apr | |- | 728_M16a2_Sight.apr | |- | 729_Weapon_Sight_M21.apr | |}

{| class="wikitable" style="width: 100%" |+ === Pistols === ! File ! Description |- | 730_Weapon_FireMode_m9.apr | |- | 731_Pistol_SlideHammer.apr | |- | 732_Pistol_SlideHammerRelease.apr | |- | 733_Pistol_SlideHammerReleaseTrigger.apr | |- | 734_Pistol_safety.apr | |- | 735_Pistol_SlideTrigger.apr | |- | 736_Pistol_Slide.apr | |}

{| class="wikitable" style="width: 100%" |+ === Generic Rifle Profiles === ! File ! Description |- | 737_Weapon_Sight_M249.apr | |- | 738_Weapon_Bolt_M249.apr | |- | 739_Weapon_Bolt_release.apr | |- | 740_Rifle_Bolt_Rack.apr | |- | 741_Rifle_Bolt_Rack_SVD.apr | |- | 742_Rifle_safety_trigger.APR | |}

{| class="wikitable" style="width: 100%" |+ === Machineguns === ! File ! Description |- | 750_Machinegun_Fire.apr | Includes dustcover |- | 751_Machinegun_TopCover.apr | |- | 752_Machinegun_bipod.apr | |- | 753_Machinegun_bipod_M249.apr | |}

{| class="wikitable" style="width: 100%" |+ === RPGs === ! File ! Description |- | 760_RPG_Sight.apr | Without the sight slider |- | 761_RPG_Sight_Front.apr | |- | 762_RPG_Safety.apr | |- | 763_RPG_Unfold_TEMP.apr | |- | 764_RPG_M72_idle.apr | |}

{| class="wikitable" style="width: 100%" |+ === Grenades === ! File ! Description |- | 770_Grenade_Pin.apr | |}

{| class="wikitable" style="width: 100%" |+ === UGLs === ! File ! Description |- | 780_M203_barrel.apr | |}

{| class="wikitable" style="width: 100%" |+ === Ground Vehicles === ! File ! Description |- | 801_Vehicle_Door_L01.apr | |- | 802_Vehicle_Door_R01.apr | |- | 803_Vehicle_Door_L03.apr | |- | 804_Vehicle_Door_R03.apr | |- | 805_Vehicle_Door_L02.apr | |- | 806_Vehicle_Door_R02.apr | |- | 807_Vehicle_Door_L01_BTR.apr | |- | 808_Vehicle_Door_R01_BTR.apr | |- | 809_Vehicle_Door_L01_m998..apr | |- | 810_Vehicle_Door_R01_m998..apr | |- | 811_Vehicle_Door_L02_m998..apr | |- | 812_Vehicle_Door_R02_m998..apr | |- | 820_Vehicle_Steering_Wheel.apr | |- | 840_Vehicle_Throttle.apr | |- | 841_Vehicle_Clutch.apr | |- | 842_Vehicle_Brake.apr | |- | 843_Vehicle_Starter_Switch.apr | |- | 844_Vehicle_Gearshift.apr | |- | 845_Vehicle_light_switch.apr | |- | 846_Vehicle_Handbrake.apr | |- | 847_Vehicle_Starter_Switch_BTR.apr |}

{| class="wikitable" style="width: 100%" |+ === Aircrafts === ! File ! Description |- | 860_Mi-8MT_Door_L.apr | |- | 861_Mi-8MT_CyclicControl.apr | |- | 890_Vehicle_Empty.apr |}

{| class="wikitable" style="width: 100%" |+ === Ground Vehicles === ! File ! Description |- | 900_Ural_Idle.apr | |- | 901_Uaz_Idle.apr | |- | 902_BTR_Idle.apr | |- | 903_M151a2_Idle.apr | |- | 904_M9231A1_idle.apr | |- | 905_M998_Idle.apr | |- | 950_Mi-8MT_Idle.apr | |- | 999_Empty.apr | |- | FullBody_Additive.apr | |- | FullBody_Pistol.apr | |- | FullBody_Rifles.apr | |- | FullBody_Unarmed.apr | |- | GadgetIKOffset.apr | |- | Head_Additive.apr | |- | IK.apr | |- | RightIndexAbsolute.apr | |- | TEST.apr | |- | UpperbodyAdditive_ArmsAbsolute.apr | |- | UpperbodyAdditive_ArmsAbsolute_WeaponDummy.apr | |- | Upperbody_Additive.apr | |- | Vehicles_Clutch.apr | |- | Vehicles_horn.apr | |- | Vehicles_ShiftGear.apr | |- | Vehicles_Throttle.apr | |- | Weapons_Grenede_Idle.apr | |- | Weapons_Grenede_Pin.apr | |- | Weapons_Hammer.apr | |- | Weapons_Idle.apr | |- | Weapons_MagRelease.apr | |- | Weapons_Pistol_SlideHammer.apr | |- | Weapons_Pistol_SlideHammerRelease.apr | |- | Weapons_Pistol_SlideHammerReleaseTrigger.apr | |- | Weapons_Rifles.apr | |- | Weapons_Rifles_Bolt.apr | |- | Weapons_Rifles_Bolt_rack.apr | |- | Weapons_Rifles_Fire.apr | |- | Weapons_Rifles_Sight.apr | |- | Weapons_Rifles_Topcover.apr | |- | Weapons_RPG7_Sight.apr | |- | Weapons_Safety.apr | |- | Weapons_Trigger.apr | |} </div> </spoiler>

== Format ==

Let's use {{hl|FullBody_additive.apr}} as an example:

<syntaxhighlight lang="json"> $animExportProfile { #trackCount 152 #defaultFn "" $tracks { "Scene_Root" "" "TRG" $genFn { "generateSceneRootMB" } "EntityPosition" "Scene_Root" "TRA" "Collision" "EntityPosition" "TRA" "Hips" "EntityPosition" "TRA" "LeftLeg" "Hips" "TRD" "LeftLegVolume" "LeftLeg" "TRD" "LeftLegTwist" "LeftLeg" "TRD"

... } } </syntaxhighlight> <spoiler text="Show full file"> <syntaxhighlight lang="json"> $animExportProfile { #trackCount 152 #defaultFn "defaultFnMB" $tracks { "Scene_Root" "" "TRG" $genFn { "generateSceneRootMB" } "EntityPosition" "Scene_Root" "TRA" "Collision" "EntityPosition" "TRA" "Hips" "EntityPosition" "TRA" "LeftLeg" "Hips" "TRD" "LeftLegVolume" "LeftLeg" "TRD" "LeftLegTwist" "LeftLeg" "TRD" "LeftKnee" "LeftLegTwist" "TRD" "LeftKneeVolume" "LeftKnee" "TRD" "LeftKneeTwist" "LeftKnee" "TRD" "LeftFoot" "LeftKneeTwist" "TRD" "LeftToe" "LeftFoot" "TRD" "RightLeg" "Hips" "TRD" "RightLegVolume" "RightLeg" "TRD" "RightLegTwist" "RightLeg" "TRD" "RightKnee" "RightLegTwist" "TRD" "RightKneeVolume" "RightKnee" "TRD" "RightKneeTwist" "RightKnee" "TRD" "RightFoot" "RightKneeTwist" "TRD" "RightToe" "RightFoot" "TRD" "RightLegClothF" "Hips" "TRD" "RightLegClothB" "Hips" "TRD" "LeftLegClothF" "Hips" "TRD" "LeftLegClothB" "Hips" "TRD"

"Spine1" "Hips" "TRD" "Stomach1" "Spine1" "TRD" "Spine2" "Spine1" "TRD" "Spine3" "Spine2" "TRD" "Stomach2" "Spine3" "TRD" "Spine4" "Spine3" "TRD" "Stomach3" "Spine4" "TRD" "Spine5" "Spine4" "TRD" "Neck1" "Spine5" "TRD" "Neck2" "Neck1" "TRD" "Neck3" "Neck2" "TRD" "Head" "Neck3" "TRD" "LeftShoulder" "Spine5" "TRD" "LeftArm" "LeftShoulder" "TRD" "LeftArmVolume" "LeftArm" "TRD" "LeftArmTwist" "LeftArm" "TRD" "LeftForeArm" "LeftArmTwist" "TRD" "LeftForeArmVolume" "LeftForeArm" "TRD" "LeftForeArmTwist" "LeftForeArm" "TRD" "LeftHandUpperVolume" "LeftForeArmTwist" "TRD" "LeftHand" "LeftForeArmTwist" "TRD" "RightShoulder" "Spine5" "TRD" "RightArm" "RightShoulder" "TRD" "RightArmVolume" "RightArm" "TRD" "RightArmTwist" "RightArm" "TRD" "RightForeArm" "RightArmTwist" "TRD" "RightForeArmVolume" "RightForeArm" "TRD" "RightForeArmTwist" "RightForeArm" "TRD" "RightHandUpperVolume" "RightForeArmTwist" "TRD" "RightHand" "RightForeArmTwist" "TRD" } } </syntaxhighlight> </spoiler>

* {{hl|#trackCount}} defines the number of track lines * {{hl|#defaultFn}} defines the bones' default function to be used * {{hl|$tracks}} lists bones, bone's parent, export type and eventually a function reference. {{Feature|warning|'''defaultFn''' should remain '''empty''' if you are '''exporting animations using Blender!''' Otherwise additive animations will be exported incorrectly.}} === Export Type ===

* '''T''' means '''T'''ranslation * '''R''' means '''R'''otation * '''S''' means '''S'''cale (not supported right now)

* '''A''' means '''A'''bsolute (not additive) * '''D''' means '''D'''ifferential (additive)

; Examples : '''TRA''' means '''T'''ranslation and '''R'''otation, '''A'''bsolute : '''RD''' means '''R'''otation, '''D'''ifferential

The combination of these creates a type of animation that can be used in different contexts. For example, a walking animation would definitely use every single part of the body, so it would probably contain all of the bones in exported with '''TRA''' ('''T'''ranslation & '''R'''otation '''A'''bsolute).

But an animation for a reload would most likely not export the legs (Pelvis is the first bone, with no parent) the Spine bones would be exported with '''TRD''' ('''T'''ranslation & '''R'''otation '''D'''ifferential) so that some movement from the animation playing underneath it comes through, but with the arms and fingers exported with '''TRA''' ('''T'''ranslation & '''R'''otation '''A'''bsolute) so that they are precise and grab exactly where the magazine/rifle/etc is.

== Creation == [[File:animation-export-profile-generation.png|thumb|Generation of default export profile for selected model]] Workbench have a small option which can assist with creation of new export profiles. When importing a new model in Workbench, there is option called '''Generate Default Profile''' in '''Import Settings''' of the model'''.'''

After checking this option and then pressing '''Reimport Resource,''' model will be reimported as usual + Workbench will also prepare a new export profile containing '''all bones located in the model in proper order & hierarchy'''. This new animation profile (.''apr'') file is by default created in '''/anims/export_profiles/''' folder of currently used addon and exact path can be also found by looking at the '''Console Log''' window - over there there should be a log entry mentioning status of the export and location of generated file.

This option is quite useful when importing new models with complex skeleton like new custom characters (which don't use existing skeleton) or vehicles. Using this file, it is also possible to prepare derivatives for various other types of animations which might be useful in '''Animation Editor'''. {{Feature|important|Once default animation profile is created, it is worth to uncheck '''Generate Default Profile''' option to avoid constant generation of this profile whenever mesh is changed.}}{{Feature|warning|If you are planning to use this export profile in Blender, don't forget to change '''defaultFn''' in .apr file!}}{{GameCategory|armaR|Modding|Official Tools|Guidelines}}
gwop42axd83flewslslshiahmtdw9s5

# Arma Reforger:Resource Manager: Batch Resource Processor Plugin

5050
47043
369693
369692
2024-10-03T09:49:39Z
Lou Montana
10739
Fix
369693
wikitext
text/x-wiki
{{TOC|none}} {{Infobox/WorkbenchPlugin |name= Batch Resource Processor |editor= resource |descr= Perform simple checks and fixes on resource files |file= {{Link|enfusion://ScriptEditor/scripts/WorkbenchCommon/ResourceProcessorTool.c}} }} The '''Batch Resource Processor''' plugin reprocesses resources (fitting the provided filters) and fixes Prefab/MeshObject/Sound/ParticleEffect meta files.

== Usage ==

Use it with {{hl|Plugins > Batch resource processor}}; a window appears allowing to set all the below settings.

== Parameters ==

* '''File Types''' - types (file extensions) to process * '''Path Starts With''' - only check resources whose path starts with this value * '''Path Contains''' - only check resources whose path contains this value * '''Path Ends With''' - only check resources whose path ends with this value * '''Fix Meta File''' - change configuration inheritance, etc - note that meta file can still be re-saved by other actions * '''Force Resave Meta File''' - resaves meta file even without changes * '''Report Missing Meta File''' - report missing meta file * '''Report Missing Configurations''' - report missing configurations * '''Report Custom Property Values''' - report custom property values * '''Fix Custom Property Values''' - fix custom property values (apply all PC custom changes to all other platforms)

== Command Line ==

This plugin can be used through command line usage: ArmaReforgerWorkbenchSteam.exe -wbModule=ResourceManager -plugin=ResourceProcessorPlugin ''pluginArguments''

It uses the following arguments: * {{hl|-FileTypes}} to specify '''File Types''' as defined above, separated by a comma (e.g {{hl|1= -FileTypes="xob,edds"}}) * path filters (e.g {{hl|1= -PathStartsWith="$ArmaReforger:Assets/Structures/Houses"}}): ** {{hl|-PathStartsWith}} ** {{hl|-PathContains}} ** {{hl|-PathEndsWith}}

{{GameCategory|armaR|Modding|Official Tools|Resource Manager Plugins}}
pl7usa3rm8xq70wfxcfem08wbq8yhjr

# Arma Reforger:Resource Manager: Batch Texture Processor Plugin

5050
47044
369695
369694
2024-10-03T10:23:31Z
Lou Montana
10739
Fix
369695
wikitext
text/x-wiki
{{TOC|none}} {{Infobox/WorkbenchPlugin |name= Batch Texture Processor |editor= resource |descr= Perform simple checks and fixes on textures |file= {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/TextureImportTool.c;866|TextureImportTool.c}} }} The '''Batch Texture Processor''' plugin reprocesses textures (fitting the provided filters) and fixes them.

== Usage ==

Use it with {{hl|Plugins > Batch texture processor}}; a window appears allowing to set all the below settings.

== Parameters ==

* '''Path Starts With''' - only check textures whose path starts with this value * '''Path Contains''' - only check textures whose path contains this value * '''Path Ends With''' - only check textures whose path ends with this value * '''Report Missing Meta File''' - report when a texture exists without a meta file * '''Check Configurations''' - check whether configurations are present and have correct classes * '''Check Ancestors''' - check whether configurations have correct ancestors * '''Unnecessary Setting In Pc''' - check whether PC configuration is directly setting same value as inherited from ancestor * '''Check Suspicious Non Pc Setting''' - non-PC configuration property having different value than what is directly set in PC * '''Check Wrong Property Values''' - check whether properties have values matching presets * '''Reimport Changed''' - reimport changed textures

{{GameCategory|armaR|Modding|Official Tools|Resource Manager Plugins}}
hznss5jz226afhdqx0liq29fesejwbw

# Arma Reforger:Resource Manager: Data To Spreadsheet

5050
47257
372982
2025-03-03T08:35:26Z
Reyhard
10671
Created page with "{{Infobox/WorkbenchPlugin |name= Data To Spreadsheet plugin |editor= resource |descr= Import/export of data to spreadsheets |file= {{Link|enfusion://ScriptEditor/Scripts/WorkbenchGame/ResourceManager/SCR_DataToSpreadsheet.c;4}} }} =Description= Data to spreadsheet is a '''Resource Manager''' plugin which allows to export selected parameters to clipboard, which then can be pasted into various spreadsheets software like Excel, Libre Calc or Google Docs. =Usage= ==Interfa..."
372982
wikitext
text/x-wiki
{{Infobox/WorkbenchPlugin |name= Data To Spreadsheet plugin |editor= resource |descr= Import/export of data to spreadsheets |file= {{Link|enfusion://ScriptEditor/Scripts/WorkbenchGame/ResourceManager/SCR_DataToSpreadsheet.c;4}} }} =Description= Data to spreadsheet is a '''Resource Manager''' plugin which allows to export selected parameters to clipboard, which then can be pasted into various spreadsheets software like Excel, Libre Calc or Google Docs.

=Usage=

==Interface== [[File:armareforger-resourcemanager-data-to-spreadsheet-interface.png|right]]

===Prefab Config=== Link to config file containing spreadsheet parser data. '''Required field'''

===Print To Console=== When this option is enabled, some debug output will be printed to the Log Console.

===Comma As Delimiter=== When enabled, importer & exporter will use comma instead of dot as delimiter. Depending on locale of PC, Excel might use one or another.

===Use Selection From Config=== When enabled, Data To Spreadsheet parser will use Prefabs Array list defined in the config, instead of currently selected assets in Resource Browser

===Import=== Initializes data import from clipboard to Workbench

===Export=== Initializes data export from Workbench to clipboard

==Spreadsheet Parser==

===Prefabs Array=== List of '''prefabs''' or '''configs''' which should be parsed by the plugin. Only used if '''Use Selection From Config''' option is enabled

===Attributes Array=== List of attributes which should be extracted. This array supports nested entries, where elements can also define sub-arrays, enabling you to reach a specified depth

====List of attributes====

=====SCR_DataToSpreadsheetTemplatesAttribute===== Extracts attribute of given name. This entry cannot have sub-entries

=====SCR_DataToSpreadsheetTemplatesComponent===== Finds Component of given name.

Example: ''WeaponComponent''

=====SCR_DataToSpreadsheetTemplatesObject===== Finds Object of given name

=====SCR_DataToSpreadsheetTemplatesObjectIndex===== Finds Object by given index. In some cases you might encounter array where objects don't have name

=====SCR_DataToSpreadsheetTemplatesObjectArray===== Finds & retrieves ObjectArray

Example: ''components''

===Working with Spreadsheet Parser=== New spreadsheet parser config can be created by creating new config file and selecting '''SCR_DataToSpreadsheetTemplates''' config. Once its created, open it in '''Resource Manager''' config viewer. After that, it is possible to start filling config with data

Parameters visible in Workbench are beautified in the interface so what you see in the Workbench is not how its stored or referenced by engine

[[File:armareforger-resourcemanager-data-to-spreadsheet-copy-params.png]]

Use '''Copy property path''' to get name of property useable by '''Data To Spreadsheet''' plugin

====Example: Getting Ammo data==== In case you would like to grab some basic data from ammo prefabs, first you need to decide what you want to grab. In our case, parameters like '''Init Speed''', '''Mass''', '''Air Drag''' or '''Diameter''' are located in '''ShellMoveComponent.'''

Then follow below steps

*Add new '''SCR_DataToSpreadsheetTemplatesComponent''' element to root '''Attributes Array''' **Type in '''Component Name''' field name of the component '''-''' in this case it is '''ShellMoveComponent''' *Add new '''SCR_DataToSpreadsheetTemplatesAttribute''' element to '''Attributes Array''' inside '''ShellMoveComponent''' **In '''Attribute Name''' field fill in engine name of variable (''see tool tip above about '''property path''''') *Repeat those steps until list is filled with all attributes that should be parsed

''In most cases default Float attribute type is good enough - even if value is int - this is due how excel might treat it afterwards.''

[[File:armareforger-resourcemanager-data-to-spreadsheet-example-config.png]]

====Example: Getting Ammo data from Object Array==== [[File:armareforger-resourcemanager-data-to-spreadsheet-index-retrival.png|thumb|Index retrieval ]]

In scenario where you would wish to extract i.e. '''Damage''' Value from '''ProjectileDamage''' object inside '''Projectile Effects''' of bullet prefab, some extra steps are necessary.

*Add new '''SCR_DataToSpreadsheetTemplatesComponent''' element to root '''Attributes Array''' **Fill in '''Component Name''' as before (''ShellMoveComponent in this case)'' *Add '''SCR_DataToSpreadsheetTemplatesObjectArray''' element to '''ShellMoveComponent Attributes Array''' **Type in '''Object Name''' name of array - in this case it is '''ProjectileEffects''' *Add '''SCR_DataToSpreadsheetTemplatesObjectIndex''' to '''Attributes Array''' of '''ProjectileEffects''' **Find the index of element in array you want to retrive - you can do it by for instance hovering mouse over the property. In particular case index of that class is 4 *Add '''SCR_DataToSpreadsheetTemplatesAttribute''' for all relevant parameters that are supposed to be retrieved to '''Object Index: 4''' element added in previous step

As a result, you should get something like this

[[File:armareforger-resourcemanager-data-to-spreadsheet-object-index-example.png]]

====Example: Getting Ammo data from Object Array==== Getting data from child components - like on picture below - is again bit different than other methods.

[[File:armareforger-resourcemanager-data-to-spreadsheet-nested-component.png]]

'''SCR_DataToSpreadsheetTemplatesComponent doesn't support finding child components''' so it is necessary to use different method in this case. Instead of it, it is possible to use '''SCR_DataToSpreadsheetTemplatesObjectArray & SCR_DataToSpreadsheetTemplatesObject''' classes to retrieve desired data.

*Add '''SCR_DataToSpreadsheetTemplatesObjectArray''' to root '''Attributes Array''' **Type in '''Object Name "components"''' - that's the object array containing components under the hood. You can check the structure by opening prefab in text editor of your choice *Add '''SCR_DataToSpreadsheetTemplatesObject ''' to '''Attributes Array''' of '''components''' **Write inside '''WeaponComponent''' - this way you will get reference to '''WeaponComponent''' *Add '''SCR_DataToSpreadsheetTemplatesObjectArray''' to '''WeaponComponent''' **Type in "'''components"''' again *Add once again '''SCR_DataToSpreadsheetTemplatesObject -''' this time to '''components''' class under '''WeaponComponent''' **Write name of component you were looking for '''- MuzzleComponent''' *Add as many '''SCR_DataToSpreadsheetTemplatesAttribute''' to '''Attributes Array''' of '''MuzzleComponent''' as you wish in order to extract desired parameters

''End result below''

[[File:armareforger-resourcemanager-data-to-spreadsheet-nested-component-example.png]]

==Exporting to Spreadsheet== [[File:armareforger-resourcemanager-data-to-spreadsheet-toSpreadsheet.gif]]

==Importing from Spreadsheet==

[[File:armareforger-resourcemanager-data-to-spreadsheet-fromSpreadsheet.gif]]

{{GameCategory|armaR|Modding|Official Tools|Resource Manager Plugins}}
e1hxtckbyvdq0d0lfyyifxrs3d6b24b

# Arma Reforger:Resource Manager: Find Linked Resources Plugin

5050
47041
369688
2024-10-02T17:19:29Z
Lou Montana
10739
Page creation
369688
wikitext
text/x-wiki
{{TOC|none}} {{Infobox/WorkbenchPlugin |name= Find Linked Resources |editor= resource |descr= Find resources linked by the selected resource(s) |file= {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/SCR_FindResourcesPlugin.c}} }} '''Find Linked Resources''' is a plugin that reads and outputs resources used by Resource Browser-selected ones.

{{Feature|important|It is not recommended to select a huge amount of resources, the processing time may increase drastically.}}

== Usage ==

Use it with {{hl|Plugins > Find Linked Resources}}; a window appears allowing to set a wanted extensions filter, separated by commas - e.g {{hl|et,edds,xob}}. <!--

== Parameters ==

-->

== Output ==

The log console can output something along the lines of (here {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et}} with {{hl|et,edds}} filter): Linked resources of type(s) et,edds (9): @"Prefabs/Items/Core/Inventory_Virtual_Entity.et" @"Prefabs/Vehicles/Core/Lights/VehicleLight_Brake_Base.et" @"Prefabs/Vehicles/Core/Lights/VehicleLight_Hazard_Base.et" @"Prefabs/Vehicles/Core/Lights/VehicleLight_Head_Base.et" @"Prefabs/Vehicles/Core/Lights/VehicleLight_HiBeam_Base.et" @"Prefabs/Vehicles/Core/Lights/VehicleLight_Rear_Base.et" @"UI/Textures/Editor/EditableEntities/Vehicles/EditableEntity_Vehicle_Offroad.edds" @"UI/Textures/Icons/InventoryHints/InventoryHint_SuppliesMove.edds" @"UI/Textures/Icons/InventoryHints/InventoryHint_SuppliesStored.edds"

{{GameCategory|armaR|Modding|Official Tools|Resource Manager Plugins}}
exogqivwoxohs25jr9r94lxscmkm6rv

# Arma Reforger:Resource Manager: Generate Class From Layout Plugin

5050
47048
369701
2024-10-03T14:09:54Z
Lou Montana
10739
Page creation
369701
wikitext
text/x-wiki
{{TOC|none}} {{Infobox/WorkbenchPlugin |name= Generate Class from Layout |editor= resource |descr= Create a script file with member variables pointing to main widgets |file= {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/SCR_GenerateLayoutClassPlugin.c}} }} This plugin generates a scripted class with variables for widgets and code to find widgets by their name. It also generates code to find all widget components.

== Usage ==

* Open the layout to be exported to script * Use {{hl|Plugins > Generate Class from Layout}} * Confirm the displayed window using the '''Generate''' button

The layout needs: * to be opened in Resource Manager and its tab focused * to carry a {{Link/Enfusion|armaR|SCR_WidgetExportRuleRoot}} * widgets to be exported in script names prefixed with {{hl|m_}} (ideally {{hl|m_w}} by convention - widget variables will begin with the {{hl|m_w}} prefix anyway)

== Example Output ==

(Used on {{Link|enfusion://ResourceManager/~ArmaReforger:UI/layouts/HUD/StatsPanel/StatsPanel.layout}})

<spoiler text="Show generated script"> <enforce> // Autogenerated by the Generate Class from Layout plugin v0.5.1 // Layout file: UI/layouts/HUD/StatsPanel/StatsPanel.layout class SCR_StatsPanelWidgets { protected static const ResourceName LAYOUT = "{0A3C9C22CBDE338F}UI/layouts/HUD/StatsPanel/StatsPanel.layout";

HorizontalLayoutWidget m_wColorOpacity; ImageWidget m_wIconGlow; ImageWidget m_wIcon; TextWidget m_wLabel; TextWidget m_wTextPlaceholder; TextWidget m_wText;

//------------------------------------------------------------------------------------------------ bool Init(notnull Widget root) { m_wColorOpacity = HorizontalLayoutWidget.Cast(root.FindAnyWidget("m_wColorOpacity")); m_wIconGlow = ImageWidget.Cast(root.FindAnyWidget("m_wIconGlow")); m_wIcon = ImageWidget.Cast(root.FindAnyWidget("m_wIcon")); m_wLabel = TextWidget.Cast(root.FindAnyWidget("m_wLabel")); m_wTextPlaceholder = TextWidget.Cast(root.FindAnyWidget("m_wTextPlaceholder")); m_wText = TextWidget.Cast(root.FindAnyWidget("m_wText"));

return true; }

//------------------------------------------------------------------------------------------------ ResourceName GetLayout() { return LAYOUT; } } </enforce> </spoiler>

{{GameCategory|armaR|Modding|Official Tools|Resource Manager Plugins}}
8x5t54x4w4qoat08q05mjmbaxar7z84

# Arma Reforger:Resource Manager: Resave Plugins

5050
47042
369689
2024-10-02T17:44:19Z
Lou Montana
10739
Page creation
369689
wikitext
text/x-wiki
{{TOC|none}} {{Infobox/WorkbenchPlugin |name= Re-Save Tool<br>Re-Save Meta Tool |editor= resource |descr= Re-saves all files with provided extensions<br>Re-saves all meta files of provided extensions' files |file= {{Link|enfusion://ScriptEditor/scripts/WorkbenchCommon/ResaveTool.c}}<br>{{Link|enfusion://ScriptEditor/scripts/WorkbenchCommon/ResaveMetaTool.c}} }} '''Re-Save''' tools allow to re-save resources or their meta files in a specified directory.

== Usage ==

Use it with {{hl|Plugins > Re-Save (Meta) Tool}}; a window appears allowing to set wanted re-save extensions as well as a search parent directory (root path). <!--

== Parameters == -->

== Command Line ==

Both plugins can be used through command line usage: ArmaReforgerWorkbenchSteam.exe -wbModule=ResourceManager -plugin=ResaveTool ''pluginArguments'' ArmaReforgerWorkbenchSteam.exe -wbModule=ResourceManager -plugin=ResaveMetaTool ''pluginArguments''

Both use the same arguments: * {{hl|-addonPath}} to specify the '''absolute''' directory path * {{hl|-extension}} to specify the file extension to process; only one extension can be used here

{{GameCategory|armaR|Modding|Official Tools|Resource Manager Plugins}}
jqgdd023ueex0mpywqr73x9cg7rfmo8

# Arma Reforger:Resource Manager: Config Editor

5050
32601
363898
363897
2024-04-24T15:46:12Z
Lou Montana
10739
Fix
363898
wikitext
text/x-wiki
{{TOC|side||4}} {{Feature|informative|See {{Link|Arma Reforger:Scripting: Config Object}} and {{Link|Arma Reforger:Create a Config Class}} to see how to create and configure a config class.}}

== Main Interface ==

=== Search Field ===

Search through value '''names''' (not values themselves).

=== Class ===

Remind the used Config class.

=== Parent ===

A button leading to the parent Config file, in the case of an inherited Config file.

=== Values ===

Below these fields are the values name/UI lines. An entry that is not the default value will be '''bolded'''.

An entry can be reset to its default value using the arrow that appears then to the right of the field.

== Value Interface ==

The value interface is composed of two columns; on the left, the value name (extracted from the property's name) and on the right, the UI to edit it - either deduced by the property's type or forced by the Config designer (see Attribute).

See uiwidget for all possible interfaces and how to interact with them.

=== Array ===

a "+/-" interface displaying the current amount of elements between parentheses.

Press "+" to add an element, "-" to remove the highlighted one - if none is selected, the last array element is removed.

To edit the array in a more advanced way, right-click on an item's name to use contextual menu's additional options.

=== Slider ===

Click and drag to set the value. It is still possible to click on the slider and manually enter the desired value.

== Advanced Usage ==

=== Config Prefab from Config ===

Creating a Prefab Config from a config object is doable by drag and dropping the object into the Resource Browser window.

This will display the dialog to name the new file; once filled the file is created in the selected directory.

=== Inherited Config File ===

An inherited config file is a config that will use another config file as its default values model, and obviously uses the same config class.

In order to create one, right-click on the config file wanted as model in Resource Browser, then click "Create Inherited File" - a dialog will ask to type the inherited config file name.

The created file will now have the (default) values of the model.

=== Filling by Config ===

If a Config already exists and is compatible with the target entry, dragging and dropping the config on the field/entry will fill it with Config's values. This is shown with the blue circle as well as the .conf button present in the value name, as shown below:

Editing from the current Config will only change and override the sub-Config values in the current Config.

To edit the sub-Config values directly, press the .conf button to open said Config.

Changes made in one tab are immediately broadcast to other tabs if such sub-Config is used.

{{GameCategory|armaR|Modding|Official Tools|Resource Manager Viewports}}
92phn2bw3v3splmdvnoh08u0krp0qeu

# Arma Reforger:Resource Manager: Imageset Editor

5050
32662
322208
322006
2022-05-27T11:39:06Z
Lou Montana
10739
Text replacement - "|Modding|Tools|Official Tools" to "|Modding|Official Tools"
322208
wikitext
text/x-wiki
{{TOC|side}} An imageset is as its name may suggest an '''set''' of '''images'''. These images, placed on one single texture (to save on memory and loading time), are "cut" with '''quads''', that are "borders" defining the texture sub-image.

Quads can be listed in '''groups'''.

== Top Bar ==

=== Reload Image ===

Reload the imageset from storage.

=== Reset View ===

Adapt the imageset to viewport's dimensions.

=== Reset Zoom ===

Set the zoom at 100%.

=== ImageSet Tab ===

==== Texture ==== List of textures in this imageset.

==== Add ==== Add a file from the working repository.

==== Remove ==== Remove the highlighted texture.

==== From files ==== {{Wiki|TODO}}

== Quads Tab ==

=== Quads List === List the images, by group if any.

=== Quads Buttons ===

==== Add ==== Create

==== Add 3×3 ==== Create a 3×3 preset group filled with nine 30×30 named quads (e.g {{hl|LeftTop}}, {{hl|Top}}, {{hl|RightTop}} etc.)

==== Add Group ==== Create a group to keep multiple quads together.

A quad can only belong to one group.

==== Delete ==== Delete a quad or a group. Deleting a group deletes its quads.

=== Quad Properties === Edit the ''selected'' quad.

A group can also be edited this way - only the {{hl|name}} field will then be editable.

==== Name ==== Edit the quad/group name.

==== Position and Dimensions ==== Dimensions are in pixels.

X: top-left corner's position on the X-axis

Y: top-left corner's position on the Y-axis

W: width

H: height

==== Horizontal Tile ==== {{Wiki|TODO}}

==== Vertical Tile ==== {{Wiki|TODO}}

==== Group ==== Set the quad's group.

== Import Settings Tab ==

Tags can be set to help find the imageset faster.

{{GameCategory|armaR|Modding|Official Tools|Resource Manager Viewports}}
kvwse16vkpvdvd0ztes7x067snzn4nl

# Arma Reforger:Resource Manager: Layout Editor

5050
32661
322207
322003
2022-05-27T11:39:06Z
Lou Montana
10739
Text replacement - "|Modding|Tools|Official Tools" to "|Modding|Official Tools"
322207
wikitext
text/x-wiki
{{TOC|side}} == Top Bar ==

=== Snap To Grid while dragging ===

Snap the moved widget to the nearest grid node.

=== Draw grid ===

Draw the position helper grid.

=== Deselect ===

Deselect the currently selected widget(s).

=== Live Preview ===

Start a preview window allowing to check resolution/ratio compatibility.

=== Borders ===

Draw an outline border around all controls. An outline will still appear on mouse hover and selection if this option is disabled.

=== Grid Size ===

Define the grid size in pixels - the grid can only be made of squares.

=== Anchor Grid Size ===

Set the step of Anchor's manual resize - e.g a step of '''25%''' will allow for a resize to 100%, 75%, 50%, 25% and 0%.

=== Zoom ===

Click to reset zoom to 100%. Zoom can be set with '''Scrollwheel Up/Down'''.

=== Root size ===

Define the base screen's resolution. Minimum officially supported resolution is 1K (1920 × 1080).

=== From slot ===

Set the '''Root size''' from the slot of the root widget.

=== Root DPI scaling ===

Allow to see how the layout looks on a different resolution.

=== Language ===

Select a language to see if the UI fits the translated version of the text.

=== Compact Mode ===

Set the Hierarchy view on top of Details/Import Settings tabs.

When deselected Hierarchy will appear on the left of the viewport, in its own panel.

This setting is per layout.

== Hierarchy == This panel lists widgets and their children (subwidgets).

It sports a search bar that allows to look for widgets by their name.

To rename a widget, double-click on it or use the contextual menu.

=== Contextual Menu ===

==== Convert into… ==== Allow to convert the current widget to another one, keeping its children and its place in hierarchy.

==== Wrap into… ==== Allow to have the current widget as the child of another one, keeping its children hierarchy.

==== Expand hierarchy ==== Expand/unroll selected widget(s) and all their children.

==== Collapse hierarchy ==== Collapse/shrink selected widget(s) and all their children.

==== Copy ==== Shortcut: {{Controls|Ctrl|C}}.

==== Paste ==== Shortcut: {{Controls|Ctrl|V}}.

==== Duplicate ==== Shortcut: {{Controls|Ctrl|D}}.

==== Delete ==== Delete selected widget(s) and their children. Shortcut: {{Controls|Del}}.

==== Rename ==== Shortcut: {{Controls|F2}}.

==== Open prefab ==== Open the selected prefab widget in a new tab.

==== Save as prefab ==== Save selected widget as a prefab.

==== Deselect ==== Deselect current widget.

== Properties Tab == The properties Tab sports:

* a Search field to search by properties name, * a widget's Name field to rename the currently selected widget, * a Property Grid Options button.

=== Property Grid Options ===

==== Show only modified properties ==== This option hide all properties that have their default value.

==== Expand all groups ==== Expand all property groups (not the properties themselves).

==== Collapse all groups ==== Collapse all property groups (not the properties themselves).

==== Copy all properties ==== Copy all of the widget properties.

==== Paste properties ==== Paste copied properties.

* Not all property groups will appear for one widget; the following documented ones are the most commonly encountered. * It is possible to select and edit multiple widgets at once; if done so, only the properties common to all widgets will appear in the common property groups.

=== Property Group Options ===

Right-clicking on a property group will display its contextual menu.

==== Copy group properties ==== Copy all properties from this group.

==== Paste properties ==== Paste the properties previously copied.

==== Paste properties here ==== {{Wiki|TODO}}

=== Transform ===

==== Slot ==== Can be one of:

* AlignableSlot * ButtonWidgetSlot * FrameWidgetSlot * GridWidgetSlot * LayoutSlot * OverlayWidgetSlot * UniformGridWidgetSlot * WidgetSlot * WrapLayoutWidgetSlot

===== Anchor ===== Set widget's behaviour on screen "resizing" - from 16/9 to 48/9 (triple screen) for example.

===== Size To Content ===== Tell the widget to shrink size around its actual content.

==== Z Order ==== Set the widget's z-index: in case of overlapping widgets, the higher z-index goes "above" or "in front of" the others.

==== Rotation ==== Set the clockwise angle of rotation, in degrees - usual range 0..360.

==== Pivot ==== Set the pivot position: default is 0.5, 0.5, the widget's centre.

=== Behavior ===

==== Is Enabled ==== Set the widget enabled or not. A text widget will appear greyed out and cannot be selected, a checkbox cannot be checked, etc.

==== Is Visible ==== Set widget's and its children's visibility.

==== Is Pixel Perfect ==== Define if the widget must be drawn with pixel perfection. More expensive, but more beautiful.

==== Opacity ==== Set widget's and its children's opacity: 0 means fully transparent (invisible but still active), 1 means fully opaque.

==== Clipping ==== Set widget's clipping mode:

* '''True''' - Performs an intersection of this widget's rectangle with the current clipping rectangle and uses it to clip self and children. * '''False''' - No clipping is performed. This widget's rectangle does not contribute to clipping at all. * '''Ancestor''' - Performs clipping by current clipping rectangle, but does not add current widget's rectangle to the clipping intersection. * '''Inherit''' - Take clipping from the parent. If a widget is a root (has no parent), this setting is the same as '''True'''.

==== Tooltip ==== Add a mouse-hover text tooltip.

==== Ignore Cursor ==== Make the selected widget(s) unresponsive to mouse actions.

=== Appearance ===

==== Color ==== Set widget content's colour and opacity (RGBA).

==== Inherit Color ==== Set widget content's colour inheritance from the widget's parent. If activated, this setting overrides widget's '''Color'''.

==== Text ==== Set widget's text.

==== Font Size ==== Set widget's font size.

==== Min Font Size ==== Set widget's ''minimum'' font size - for text-resizing widgets.

=== Widget ===

==== Style ==== Set widget's style between {{hl|default}} and {{hl|debugUI}}.

==== No focus ==== Make the widget unable to get focus (e.g by tab navigation).

=== Script ===

Add scripts (Components) to the widget.

=== Navigation ===

Define widget children's navigation.

See Widget navigation.

=== Events ===

Add widget events, from the following:

{| style="min-width: 50em" |- style="vertical-align: top" | * OnMouseEnter * OnMouseLeave * OnMouseMove * OnMouseButtonDown * OnMouseButtonup * OnMouseWheel * OnMouseDoubleClick | * OnKeyDown * OnKeyUp * OnKeyPress * OnController * OnDrag * OnDrop * OnDropReceived * OnDragging * OnDraggingOver | * OnResize * OnChildAdd * OnChildRemove * OnUpdate * OnModalResult * OnModalClickOut * OnFocus * OnFocusLost |}

== Classes Tab ==

Choose from Basic/Layout/Special widgets and drag and drop in the viewport or in the hierarchy to create such widget.

== Last Used Prefabs Tab ==

Pick from the last used prefabs.

{{GameCategory|armaR|Modding|Official Tools|Resource Manager Viewports}}
1ksedidh5gywd0ry32mvzfoqqfzmdjq

# Arma Reforger:Resource Manager: Material Editor

5050
32663
322212
322007
2022-05-27T11:39:07Z
Lou Montana
10739
Text replacement - "|Modding|Tools|Official Tools" to "|Modding|Official Tools"
322212
wikitext
text/x-wiki
{{Wiki|TODO|placeholder}}

{{GameCategory|armaR|Modding|Official Tools|Resource Manager Viewports}}
0vrw3c3vcqr7t82bstiu9wy9ibw2upj

# Arma Reforger:Resource Manager: Model Editor

5050
32665
338059
322232
2023-02-23T23:01:06Z
Lou Montana
10739
Fix Wikipedia link
338059
wikitext
text/x-wiki
{{TOC|side}} == Horizontal bar ==

{| class="wikitable" ! Tool name ! Description |- | '''Show/hide grid''' | Shows or hides 1m grid on XZ plane |- | '''Move tool''' | Shows move gizmo in the origin of the object |- | '''Rotate tool''' | Shows rotate gizmo in the origin of the object |- | '''To world/object space''' | Switches between world and object space when using move and rotate tools |- | '''Show/hide all bones''' | Shows or hides bones in model (if has any).

It is possible then to select bone in viewport by clicking on it and move or rotate it via move and rotate tools |- | '''Reset model bones transformations to init state''' | Pretty self-explanatory |- | '''Show/hide volumetric info''' | Shows generated information about volumetric shadows

Heightmap shadows |- | '''Colliders''' | Shows all colliders in object

Can show them in two modes: * Flat-shaded * Transparent |- | '''Snap position to ground''' | Snap object to the ground by its origin |- | '''Reset entity rotation''' | Revert any rotation ('''not''' 3D movement) the object endured. |- | '''Change FOV''' | Changes field of view of the camera (valid values are 5-120) |- | '''Background color''' | Shows color picker so you can choose custom background color. Also it is possible to reset it to default color. |- | '''Camera auto placement''' | {{Wiki|TODO|seems to disable '''View > Perspective''' and '''Focus selected object'''}} |- | '''Turn camera to POI on mouse wheel''' | When enabled, Scroll wheel will zoom in maximum to the object.

When disabled, Scroll wheel will zoom towards the centre of the screen. |- | | |- | '''EV tools - lock, plus and minus''' | Enables user controlling exposure values - locking it or increasing and decreasing EV values. |- | | |- | colspan="2" |The following tools appear only with {{hl|.xob}} files (not e.g {{hl|.et}}) |- | '''Pick material''' | Enables pick tool which shows wireframe overlay over part of the model you hover over, on LMB click, it selects material in Materials tab.

Shortcut: {{Controls|Ctrl|LMB}} |- | '''Focus selected object''' | Focuses on model in viewport, also accessible via F key. |}

== Viewport UI ==

=== View ===

Switch between perspective and orthographic view

* The perspective view, allows to rotate the camera around * All other views can only pan around: ** Top ** Bottom ** Front ** Back ** Right ** Left

=== Shading ===

Shading options are divided in two sections - '''Lighting''' and '''Channels'''.

It enables users to isolate each "pass" in viewport. Only one lighting and channel can be isolated at once. {| class="wikitable" ! ==== Lighting ==== ! ==== Channels ==== |- | * Lit * Wireframe * Wireframe only * Transmittance * Detail lilghting * Direct diffuse * IBL diffuse * Direct reflection * IBL reflection * Full diffuse * Full reflection * Emissive * Vertex normals only | * None * Albedo * Vertex color * Roughness model * Roughness scene * Metallic * World normals * Mask * Ambient occlusion * Albedo (linear) * Wetness * Porosity * VFX |}

=== Overlays ===

==== Wireframe ==== Display wireframe overlay over the mesh.

==== Vertex normals ==== Display vertice normals.

==== Vertex highlight ==== Display vertices in mesh.

=== Options ===

==== Search bar ==== Search through all property names to find the needed one.

{{Feature|informative|{{hl|(EV)}} is sometimes used in the following documentation (in e.g '''Environment''', '''Lighting''' and '''Camera Settings''');<br> this means Exposure Value - see {{Link|https://en.wikipedia.org/wiki/Exposure_value}} for more information.}}

==== Scene preset ====

===== Preset names ===== This is a read-only list of available presets.

===== Active preset ===== Choose the preset to use/edit.

==== Scene settings ====

===== Grid ===== Show or hide the grid.

===== Grid Color ===== Set grid's color.

===== Num. cells ===== Define how many cells will compose the grid's X and Y axis.

===== Cell scale ===== Define cells' size. Default value is 1 (meter).

===== Ground ===== Show or hide the ground.

===== Ground material ===== Set the material used for the ground.

===== Compass ===== Show or hide compass (top-right).

===== Axis ===== Show or hide X/Y/Z axis (bottom-left).

==== Wireframe settings ====

===== Opacity ===== Set the wireframe's display opacity.

==== Overlay settings ====

===== Color ===== Define the overlay color (when selecting e.g Overlay > Wireframe).

===== Constant screen size ===== If enabled, zooming in will not change overlay's size.

If disabled, overlay will remain the same size and zooming in/out will show it bigger/smaller.

===== Vertex highlight scale ===== Scale vertex highlight in range 0..4.

===== Vertex normal scale ===== Scale vertex normal in range 0..4.

==== Environment settings ====

===== Top background color ===== Set environment top light's color.

===== Zenith background color ===== Set environment zenith (horizon) light's color.

===== Bottom background color ===== Set environment bottom light's color.

===== Environment map ===== Set the environment's skybox.

===== Background opacity ===== Set skybox's opacity over Top/Zenith/Bottom background color.

===== Hide env map ===== {{Wiki|TODO|Hide skybox?}}

===== Environment exposure (EV) ===== Set environment exposure.

===== Angle ===== Rotate the skybox in range 0..360 (degrees).

==== Lighting settings ====

===== Light color ===== Set the world light's color.

===== Light exposure (EV) ===== Set world light's exposure.

===== Angular size in degrees ===== Set world light's angular size in degrees, range 0..20°.

===== Rotation ===== Set world light's angle of incidence in degrees. X range -90..+90°.

Keyboard shortcut: {{Controls|Shift}} (Y axis) and {{Controls|Alt|Shift}} (X axis).

==== Camera settings ====

===== Camera exposure (EV) ===== Set the camera exposure.

===== Lock exposure ===== Lock the camera exposure to its current value (even if adjusting).

===== FOV (Degrees) ===== Set the camera's Field of View.

===== Camera position ===== Set camera's position - unit is in metre. { 0, 0, 0 } is the centre of the area.

===== Camera angles ===== Set camera's angle - unit is in degrees.

==== Postprocessing ====

===== User postprocesses ===== Set post process

By default, {{hl|ssr.emat}} and {{hl|hbao.emat}} are set.

{{Feature|informative|{{hl|hdr.emat}} (among others) can be added to have a render closer to what it is in-game.}}

==== Preset buttons ====

===== Save preset ===== This button will save the currently edited preset. If none is actually selected, it acts as pressing New preset.

===== New preset ===== Create a new preset to be used in

{{Feature|informative| For now, a created preset '''cannot''' be renamed nor deleted from the interface.<br>

'''Files''' (.pre) are created in the profile directory, in the {{hl|ResourceViewerPresets}} sub-directory and can be renamed/deleted there. }}

=== Compass ===

The "compass" is a 3D representation of the camera's point of view.

Its sections can be clicked to make the camera "face" and centre the chosen section.

== Details Tab ==

=== Materials ===

Materials (.emat) are surface information that can be applied on models.

{{Feature|informative|See also [[Arma_Reforger:Resource Manager: Material Editor|Resource Manager: Material Editor]].}}

This tab allows to:

* Browse through model's materials * Click on them to highlight them with wireframe overlay in viewport * Click on the icon of material to edit it while observing change directly on model * Isolate material to see just part of the mesh which uses it

=== LODs ===

A LOD (Level Of Detail) is a version of a 3D model that is more or less detailed in order to save resources according to e.g its distance from the camera's point of view. For more information, see Level of detail Wikipedia page.

This tab allows to:

* Browse through LODs, look at their statistics (number vertices, faces, materials, meshes) * Force to show only specific LOD if you click on LOD X tab * Check out specific meshes in each LOD (they will be highlighted in viewport with wireframe overlay) and view UVs for each mesh

==== Force selected LOD to render ==== Enable the selected LOD to render in the viewport.

==== Unselect LOD ==== Deselect the currently selected LOD.

By default, LOD 0 will be the one displayed.

=== Colliders ===

A collider is a very simple 3D shape that provides collision information to the physics engine. See also Collider Wiktionary page.

==== Options ====

===== Hide mesh ===== Hide the object's mesh when colliders are shown (e.g with "Filter colliders" selected).

===== Show center of mass =====

===== Show collider outlines =====

===== Transparent colliders =====

===== High contrast background =====

===== Filter colliders =====

===== Show invalid shapes =====

==== Layers ====

==== Center of mass ====

==== Vertices ====

==== Faces ====

==== Colliders ==== Browse through colliders and list their statistics:

* Type * Material * (Relative) Coordinates * Angles * Vertices * Faces * LayerPreset * Interaction layers

=== Occluders ===

{{Feature|informative|An occluder is a virtual plane shape meant to hide (occlude) objects behind it to save on processing/drawing cycles. Its geometry is kept simple for the calculations to remain efficient.}}

This tab allows to:

* Project or show all occluders at once or separately by selecting them in the list * See their type, number of vertices and coordinates with bounds

==== Project all occluders ====

==== Show all occluders ====

=== Land Contacts ===

Land Contacts are points in model (dummies, empties) which are positioned on place where model should snap to the ground.

It is mostly used on fences, walls, etc.

They are marked in viewport as horizontally placed green circles.

=== Bones ===

* Viewing bones, moving bones around (translation, rotation) * Hierarchy * Difference between bone and empty * Link to "general" animations docu, where there should be more info

=== Runtime Details ===

In here, you can see various information about model:

* Current LOD * Number of Faces * Number of Vertices * Number of Landcontacts * Approximate size (in meter) * Allocated VB (Video B… uffer? * Number of materials * Number of textures * Total textures size (on the disk) * Volume info (grid usage) * Surface, Triangle and Indices information from under the cursor (when on model)

== Import Settings Tab == <!-- The tab is split in four sub-tabs: PC, XBOX_ONE, PS4 and HEADLESS. --> Each tab represents the import option for the related platform.

=== General ===

==== Present ==== Whether the resource will be imported and available in data.

==== Source File ==== Can be used to override source file to any compatible file (model) in folder.

==== Common ==== Common parameters which can be shared via config file (for the file type).

=== Miscellaneous ===

==== Merge Meshes ==== Importer will merge visual meshes in each LOD.

==== Export Skinning ==== Imports skinning (if any is present in source file).

==== Export Scene Hierarchy ==== Imports scene hierarchy (if any is present in source file).

Usable for e.g. dummies (empties, locators), which are then used as sockets, or just general position info.

==== Modify material names ==== Switches "_" to "/" in material name upon import.

==== Legacy Support ==== Import resource with legacy (enforce) rules.

=== Transform ===

User can scale, offset and rotate model directly on import.

=== Visual ===

==== Remove LODs ==== Removes LODs, from the lowest.

==== No Optimize ==== Skips topology optimalization.

==== Material Assigns ==== Materials can be reassigned to different ones per platform.

=== Physics ===

==== Merge Tri Meshes ==== Imported will merge all trimeshes to least amount possible.

==== Phys Material Assigns ==== Obsolete, should not be present.

==== Geometry Params ==== Layer Preset, Surface Properties, Mass and Margin can be set for each collider.

==== COM Autocenter ==== Autocenters the center of mass (to the volume center of the object).

{{GameCategory|armaR|Modding|Official Tools|Resource Manager Viewports}}
ti5r6nk20wj526eu4vboq7tfe23xt94

# Arma Reforger:Resource Manager: Texture Editor

5050
32664
364644
353582
2024-05-24T20:07:47Z
Lou Montana
10739
Text replacement - "ized" to "ised"
364644
wikitext
text/x-wiki
{{TOC|side}} == Horizontal Bar ==

=== Preview background ===

* checker board pattern * white color * grey color * black color

=== Show alpha mask ===

Highlights alpha mask's area in transparent red.

{{ArgTitle|3|Pick color to clipboard|{{GVI|armaR|1.1.0}}<!-- or 1.0.0? -->}} Copies the clicked pixel's colour to the clipboard in HTML format (e.g {{hl|#025D00}}).

{{ArgTitle|3|Lock texture settings|{{GVI|armaR|1.1.0}}<!-- or 1.0.0? -->}} Locks all the Horizontal Bar's settings, preventing any further modification.

=== Color scheme ===

* Default * sRGB * Linear

=== Brightness ===

Adjust brightness through the slider.

=== Toggle/Isolate channel ===

Option for RGB channels together or separate RGBA channels.

=== Filtering mode ===

==== Point filter ====

==== Bilinear ====

==== Trilinear ==== Mipmaps are automatically chosen and blended.

===== mip level ===== In range 1..12.

=== Auto scale to fit ===

{{Wiki|TODO}}

=== Depth ===

{{Wiki|TODO}}

== Details Tab ==

=== Texture properties ===

* File size: the file's size (0 for game data) * Surface size: the file's uncompressed size * Image format: as the name says * Image data format * Mipmaps: number of mipmaps levels * Width: image's width in pixels * Height: image's height in pixels * Depth: levels of depth * Contains alpha channel: as the name says * Is black and white: as the name says * Last pixel: X and Y coordinates of the currently-hovered pixel * Last pixel <0, 1>: same, but in image's 0..1 range (0.5 = middle) * Last pixel color (float):

=== Histogram ===

* Pixel count: as the name says (width &times; height) * Red * Green * Blue * Alpha

=== Color graph ===

This color statistics graph can be manipulated with left and right click, to respectively zoom on a selected range and slide the graph values. Mouse wheel can also be used.

=== Reset ===

This button resets the color graph to 0..256 range.

== Import Settings Tab ==

* Edit also selected files: also apply changes to the files selected in Resource Browser * Apply changes to all platforms: as the name says * Name * Tags * License

=== General ===

==== Present ==== Whether the resource will be imported and available in data.

==== Source File ==== Can be used to override source file to any compatible file (model) in folder.

=== Unsorted ===

==== Target Format ==== Can be one of:

* EnfusionDDS * DirectXDDS

==== Format Compress ==== Can be one of:

* Copy * Fastest * Medium * Best

==== Compress Treshold ==== {{Link|https://en.wikipedia.org/wiki/LZ4_(compression_algorithm)|LZ4 Compression}} threshold in percent in range 0..100. If the compression ratio is bigger then the uncompressed version is used.

==== Remove Mips ==== Remove the specified number of large mipmaps.

This functionality may be affected by the Max Size parameter (below) which can also remove some mipmaps to achieve a specified size.

==== Max Size ==== Set the texture size limit (dimensions, not file weight) in powers of 2 (4, 8, 16 etc up to 16384). The texture will be downsised when its width or height is larger than this value.

This functionality may be affected by the {{Link|#Remove Mips}} parameter above which can affect texture size too.

==== Conversion ==== Set conversion from RGBA into specific format of channels. Can be one of:

* None * DXTCompression * Alpha8 * Red * RedHQCompression * RedGreen * RedGreenHQCompression * ColorHQCompression * HDRCompression

==== Conversion Quality ==== Set conversion quality for compressed formats in range 0..1. Higher value means better quality ratio but slower compression.

==== Original Pixel Bit Depth ==== Set whether or not the original pixel bit depth should ''try'' to be kept between conversion; otherwise the texture will be converted to 8 bit format.

==== Color Space ==== Can be one of:

* ToLinear * ToSRGB

==== Contains Mips ====

==== Generate Mips ====

==== Mip Map Function ==== Set mipmap downsize function. Can be one of:

* Filter * Normalize * ColorNoise * FoliageAlpha1 * FoliageAlpha2 * FoliageAlpha3 * FoliageAlpha4 * FoliageAlpha5

==== Mip Map Filter ==== Set mipmap generation filter. Can be one of:

* Box * Triangle * Kaiser

==== Mip Alpha Fade Start ==== Set the alpha-to-black fading's mipmap start threshold in range 0..1.

For example with an image with 8 mimaps, 0.5 means the 4<sup>th</sup> mipmap.

==== Mip Alpha Fade End ==== Set the alpha-to-black fading's mipmap end threshold in range 0..1.

For example with an image with 8 mimaps, 1 means the 8<sup>th</sup> mipmap.

==== Mip Alpha Fade Value ==== Set the alpha fading's mipmap value in range 0..1.

For example, 0 means that the alpha will be faded to black.

==== Tiled Texture ==== Set if the texture is tiled - affects mimaps generation.

==== Generate Cubemap ==== Set the conversion from a panoramic/spherical texture to a cubemap texture.

Source texture must be an equirectangular panorama.

{{ArgTitle|4|Volume Texture|{{GVI|armaR|1.1.0}}<!-- or 1.0.0? -->}} Converts 2D-layered texture to 3D texture.

{{GameCategory|armaR|Modding|Official Tools|Resource Manager Viewports}}
3k29wiztis1ctlej3xmzvp45jgwjm5t

# Arma Reforger:Script Editor: Autocomplete Plugin

5050
49361
376790
376789
2025-11-19T15:24:52Z
Lou Montana
10739
Some wiki formatting
376790
wikitext
text/x-wiki
{{Infobox/WorkbenchPlugin |name= Autocomplete |editor= script |descr= A plugin to autocomplete/autofix the current line |file= {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_AutocompletePlugin.c}} |shortcut= {{Controls|Ctrl|Return}} }} The '''Autocomplete''' {{Link|Arma Reforger:Script Editor}} plugin helps script authors by providing autocompletion and smart insertions for e.g common code structures, code snippets, boilerplate code etc. It also assists with attribute decorators, log level consistency, null and validity checks, and more.

== Features ==

* Script snippets on keyword (see {{Link|#Default Keywords}} below for a full list of default keywords) * Instantiation help (see {{Link|#Autocomplete}} below) * Safety checks: adds a null check after a cast (if not present), adds a validity check after <enforce inline methods="Load">Resource.Load</enforce> (if not present) * Attribute decorators: automatically suggests/adds appropriate <enforce inline>[Attribute(/* ... */)]</enforce> decorators for variables * Log level consistency: ensures <enforce inline methods="Print">Print</enforce> and <enforce inline methods="PrintFormat">PrintFormat</enforce> method calls have explicit log levels * User customisation: supports user-defined keywords/snippets and attribute decorators; defaults can be edited or reset.

== How to Use ==

In Script Editor, type a supported keyword or code pattern then press {{Controls|Ctrl|Return}} to execute the plugin. The keyword gets replaced with the corresponding snippet, or the line will be auto-fixed/augmented as needed. Many behaviours are configurable in the plugin settings via Workbench and custom keywords can be added.

== Default Keywords ==

{| class="wikitable valign-top" ! Keyword ! Description ! Result |- | {{hl|if}} | {{hl|if}} structure | <spoiler><enforce noTrim> if (condition) {

} </enforce></spoiler> |- | {{hl|ife}} | {{hl|if-else}} structure | <spoiler><enforce noTrim> if (condition) {

} else {

} </enforce></spoiler> |- | {{hl|for}} | {{hl|for}} loop temporarily storing the iteratedclength | <spoiler><enforce noTrim> for (int i, count = arr.Count(); i < count; i++) {

} </enforce></spoiler> |- | {{hl|forr}} | Reversed {{hl|for}} loop (from end to start) | <spoiler><enforce noTrim> for (int i = arr.Count() - 1; i >= 0; i--) {

} </enforce></spoiler> |- | {{hl|foreach}} | {{hl|foreach}} loop (item type to be replaced) | <spoiler><enforce noTrim> foreach (SCR_Class item : items) {

} </enforce></spoiler> |- | {{hl|foreachi}} | Indexed {{hl|foreach}} loop | <spoiler><enforce noTrim> foreach (int i, SCR_Class item : items) {

} </enforce></spoiler> |- | {{hl|switch}} | {{hl|switch-case}} structure | <spoiler><enforce noTrim> switch (value) { case 0: break;

default: break; } </enforce></spoiler> |- | {{hl|while}} | {{hl|while}} structure | <spoiler><enforce noTrim> while (condition) {

} </enforce></spoiler> |- | {{hl|class}} | {{hl|class}} basic structure | <spoiler><enforce noTrim> class SCR_MyClass { protected string m_sValue = "Generated class";

//------------------------------------------------------------------------------------------------ //! constructor void SCR_MyClass() {

} } </enforce></spoiler> |- | {{hl|method}}/{{hl|func}} | Method/Function structure (indentation depending on keyword's indentation) | <spoiler><enforce noTrim> //------------------------------------------------------------------------------------------------ //! \param[in] parameter protected void Method(int parameter) {

} </enforce></spoiler> |- | {{hl|ctor}}/{{hl|dtor}} | Current class's constructor/destructor<br><enforce inline>IEntity</enforce> constructor if class name ends with {{hl|Entity}} | <spoiler><enforce noTrim classes="SCR_CurrentClassName"> //------------------------------------------------------------------------------------------------ // constructor void SCR_CurrentClassName() {

} </enforce> <enforce noTrim classes="SCR_CurrentClassNameEntity"> //------------------------------------------------------------------------------------------------ // constructor void SCR_CurrentClassNameEntity(IEntitySource src, IEntity parent) {

} </enforce> <enforce noTrim> //------------------------------------------------------------------------------------------------ // destructor void ~SCR_CurrentClassName() {

} </enforce></spoiler> |- | {{hl|findcomp}} | Script component-finding structure with null check | <spoiler><enforce noTrim> SCR_ComponentClass component = SCR_ComponentClass.Cast(entity.FindComponent(SCR_ComponentClass)); if (!comp) return; </enforce></spoiler> |- | {{hl|print}} | A simple <enforce inline methods="Print">Print</enforce> line with log level | <spoiler><enforce noTrim> Print("fill", LogLevel.NORMAL); </enforce></spoiler> |}

== Autocompletion ==

{| class="wikitable" ! Type ! Examples |- | Instantiation | <spoiler> <enforce> SCR_Class instance = // or SCR_Class instance = new // or SCR_Class instance = new SCR_Class; // becomes SCR_Class instance = new SCR_Class(); </enforce> <enforce> map<string, ref SCR_MyLongClassName> myMap = // becomes map<string, ref SCR_MyLongClassName> myMap = new map<string, ref SCR_MyLongClassName>(); </enforce> <enforce> array<string> list = new array<string>(); // becomes array<string> list = {}; </enforce> </spoiler> |- | Attribute decorator creation | <spoiler> <enforce noTrim> protected bool m_bShowWhenEmpty; // becomes [Attribute(defvalue: "1", desc: "Show When Empty")] protected bool m_bShowWhenEmpty; </enforce> <enforce noTrim> protected SCR_EBoxSide m_eBoxSide; // becomes [Attribute(defvalue: "0", desc: "Side To Show", uiwidget: UIWidgets.ComboBox, enumType: SCR_EBoxSide)] protected SCR_EBoxSide m_eSideToShow; </enforce> </spoiler> |- | Log level check | <spoiler> <enforce> Print("Hello there"); // becomes Print("Hello there", LogLevel.NORMAL); </enforce> <enforce> PrintFormat("General %1!", "Kenobi"); // or PrintFormat("General %1!", "Kenobi", LogLevel.NORMAL); // becomes PrintFormat("General %1!", "Kenobi", level: LogLevel.NORMAL); </enforce> <enforce> PrintFormat("You are a %1 one", "bold", LogLevel.WARNING); // becomes PrintFormat("You are a %1 one", "bold", level: LogLevel.WARNING); </enforce> </spoiler> |- | Cast null check | <spoiler> <enforce> SCR_Class casted = SCR_Class.Cast(instance); Print(casted.m_Value); // becomes SCR_Class casted = SCR_Class.Cast(instance); if (!casted) return;

Print(casted.m_Value); </enforce> </spoiler> |- | Resource validity check | <spoiler> <enforce> Resource resource = Resource.Load(resourceName); BaseContainer baseContainer = resource.GetResource().ToBaseContainer(); // becomes Resource resource = Resource.Load(resourceName); if (!resource.IsValid()) return;

BaseContainer baseContainer = resource.GetResource().ToBaseContainer(); </enforce> </spoiler> |}

== Settings Overview ==

* Enable/Disable constructor/destructor/autoinstantiate/fix features * Choose when instantiation assistance triggers (on "= new", "=" only or both) * Configure default <enforce inline methods="Print">Print</enforce>/<enforce inline methods="PrintFormat">PrintFormat</enforce> log level * Edit tool/user keyword pairs and attribute decorator presets * All settings available via plugin configuration dialog.

== Customisation ==

* Custom keywords/snippets and attribute templates are supported via settings. * Tool-provided (default) and user-defined lists are kept separate.

== See Also ==

* {{Link|Arma Reforger:Script Editor}} * {{GameCategory|armaR|Modding|Official Tools|Script Editor Plugins|text= Script Editor Plugins}} * {{Link|Arma Reforger:Script Editor: Fill From Template Plugin}}

{{GameCategory|armaR|Modding|Official Tools|Script Editor Plugins}}
stjd1w2ny8l9mdbgax6u5oqbqyd29sx

# Arma Reforger:Script Editor: Basic Code Formatter Plugin

5050
38133
372984
369536
2025-03-03T16:18:03Z
Lou Montana
10739
Fix
372984
wikitext
text/x-wiki
{{Infobox/WorkbenchPlugin |name= Basic Code Formatter |editor= script |descr= A plugin to help formatting code and following {{Link|Arma Reforger:Scripting: Conventions|conventions}} and {{Link|Arma Reforger:Scripting: Best Practices|good practices}} |shortcut= <nowiki/> * {{Controls|Ctrl|Shift|K}} * {{Controls|Ctrl|Alt|Shift|K}} (forced) |file= {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_BasicCodeFormatterPlugin.c}} }} '''Basic Code Formatter''' is a plugin that helps formatting code to {{Name|bi}} standards as well as warns for bad practice.

It features: {{Columns|2| * General space formatting * Line end trimming * Indentation fix from spaces to tabs * Method separator fix * Auto line end at the end of the file * Scripting prefix check * Batch processing (all addon scripts at once) * The option to only formats modified lines (if using SVN/Git) * Bad practice warnings * A demo mode to practice in read-only. }}

== Usage ==

It is triggered by {{Controls|Ctrl|Shift|K}}; depending on the selected options, it will either process the current file or the selected addon's files.

{{Feature|informative|{{Controls|Ctrl|Alt|Shift|K}} can be used to force formatting of all the current file's lines.}}

== Features ==

=== Modification ===

It can: * trim line ends (trailing spaces and tabs) * fix indentation (turn four spaces into a tab, remove extra spaces) * auto-format method separators - all it takes is <enforce inline>//---</enforce> three dashes * do general formatting: ** remove semicolons {{hl|;}} after a class-closing bracket ** {{hl|if(}} / {{hl|while(}} / {{hl|foreach(}}, etc ** double spaces, double semicolons, capital NULL, etc<br>{{Feature|informative|See <enforce inline>SCR_BasicCodeFormatterPlugin.GeneralFormatting()</enforce>.}} * add a final line return to the file

{{Feature|informative|The plugin does not format comment or string content.}}

=== Warnings ===

It warns about: * wrong syntax (e.g {{hl|new ref}}) * improvable syntax (e.g {{hl|array<string> strings {{=}} new array<string>();}} can be reduced to {{hl|array<string> strings {{=}} {};}}) * multiple empty lines * usage of the {{hl|{{Link|Arma Reforger:Scripting: Keywords#auto|auto}}}} and {{hl|{{Link|Arma Reforger:Scripting: Keywords#autoptr|autoptr}}}} keywords * divisions that could be multiplications (e.g {{hl|value / 2}} is {{hl|value * 0.5}}), as multiplications are usually cheaper in term of CPU * unbracketed loops ({{hl|if}}, {{hl|for}}, {{hl|foreach}}, {{hl|while}}) * {{hl|if}} one-liners - always put the "then" part on a new line * badly named variables and constants (e.g {{hl|string m_iValue}} where the prefix for string is s - see {{Link|Arma Reforger:Scripting: Values#String|Values - String}}) * {{Link/Enfusion|armaR|ScriptInvoker}} direct usage (see {{Link|Arma Reforger:ScriptInvoker Usage}}) * a forgotten {{hl|Print()}} call (a Print/PrintFormat without log level is considered a temporary debug one) * non-tag-prefixed classes/enums (e.g {{hl|EMyEnum}} vs {{hl|TAG_EMyEnum}}) * ''some'' spelling mistakes in comments (e.g "solider", "overriden", "dammage"...)

== Example ==

{| class="wikitable valign-top" ! Before ! After |- | <enforce noGuess noTrim> class abc:Managed // must warn for non-prefixed class + must space around ':' { [Attribute()]; // must remove the semicolon

protected ScriptInvokerVoid Event_OnSomething; protected static string m_sValue;

// must fix the separator (below) //--- protected void Method() { // must replace 5 spaces by one tab if(true ) return; // must reformat the if and warn about one-liner // must warn about two empty lines (below)

// must remove trailing empty space (below) } // must remove the final semicolon below }; // must add a line return (below) </enforce> | <enforce noGuess noTrim> class abc : Managed // must warn for non-prefixed class + must space around ':' { [Attribute()] // must remove the semicolon

protected ScriptInvokerVoid Event_OnSomething; protected static string m_sValue;

// must fix the separator (below) //------------------------------------------------------------------------------------------------ protected void Method() { // must replace 5 spaces by one tab if (true) return; // must reformat the if and warn about one-liner // must warn about two empty lines (below)

// must remove trailing empty space (below) } // must remove the final semicolon below } // must add a line return (below)

</enforce> |- ! colspan="2" | Changelog |- | colspan="2" | <pre style="font-size: .9em"> SCRIPT : - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SCRIPT : SCR_BasicCodeFormatterPluginExample.c - 7 lines changed, 1× line trimming, 1× indent fix(es) at line(s) 11, 5 formattings, 1 end spaces trimming, 1 4-spaces indent -> tabs replaced, 1 space(s) in indentation removed, 1 method separators fixed, added final newline (read: 3 ms, format: 83 ms, diff: 81 ms - total: 167 ms) SCRIPT : Checking all 20 lines (100% of the file) SCRIPT : 1× multiple consecutive empty lines found at line(s) 14 - leave only one SCRIPT : 2× badly-named variables found at line(s) 5-6 - use proper prefixes: m_s for ResourceName/string, m_v for vectors, NO m_p, CASED_CONSTS, etc SCRIPT : 1× non-prefixed class/enum found at line(s) 1 - classes and enums should be prefixed; see the settings to setup accepted prefixes (current SCR_) </pre> |}

{{GameCategory|armaR|Modding|Official Tools|Script Editor Plugins}}
g2p2cgbcwbp4b0s89xvw0oymizfseyg

# Arma Reforger:Script Editor: Class Renaming Plugin

5050
47040
369684
369683
2024-10-02T12:13:24Z
Lou Montana
10739
Add From-To usage details
369684
wikitext
text/x-wiki
{{TOC|none}} {{Infobox/WorkbenchPlugin |name= Class Renaming |editor= script |descr= A plugin to rename a class in scripts and Prefabs |file= {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_ClassRenamingPlugin.c}} }} '''Class Renaming''' is a plugin that replaces a string by another in scripts and Prefabs (not terrain layers ''yet'').

{{Feature|warning|This plugin can break addons if used carelessly, be sure to make a backup before using it!}}

== Usage ==

Use it with {{hl|Plugins > Class Renaming Plugin}}; a window appears allowing to set replacement values and the concerned directories.

== Parameters ==

=== Renaming ===

* '''Only Rename Existing Editable Classes''' - only rename classes that exist in script files and that can be modified; if unchecked, replace all words that match criteria * '''Class Must Start With A Capital Letter''' - only rename words/classes that begin with a capital letter * '''Process Script Files''' - process {{hl|.c}} files in the provided directories * '''Process Prefab Files''' - process {{hl|.et}} files in the provided directories * '''Demo Mode''' - read-only mode that goes through all the steps without overwriting files * '''Parameters''' - a list of "from X to Y" replacement rules {{Feature|informative|Only the first matching rule applies ** The '''From''' field supports prefix and suffix wildcards: *** {{hl|word}} means exact match of "word" *** {{hl|word*}} means "word" as a prefix (e.g "'''word'''ing") *** {{hl|*word}} means "word" as a suffix (e.g "pass'''word'''") *** {{hl|*word*}} means inside a word (e.g "pass'''word'''ing" - does '''not''' match "word") *** any other combination is '''not''' supported (e.g {{hl|wor*d}} to try and match "wor'''l'''d")

=== Directories ===

* '''Script Directories''' - in which directories renaming can happen in script files ({{hl|.c}}) * '''Prefab Directories''' - in which directories renaming can happen in Prefab files ({{hl|.et}})

{{GameCategory|armaR|Modding|Official Tools|Script Editor Plugins}}
57tpx3m7sk65lao704gbu880mbfozhx

# Arma Reforger:Script Editor: Create New Script Plugin

5050
38141
352586
2024-02-15T10:40:18Z
Lou Montana
10739
Page creation
352586
wikitext
text/x-wiki
{{Infobox/WorkbenchPlugin |name= Create New Script |editor= script |descr= A plugin to help create a new file |file= {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_NewScriptPlugin.c}} |shortcut= {{Controls|Ctrl|N}} }} '''Create New Script''' is a plugin that fulfills the "Create New Script" feature for the {{Link|Arma Reforger:Script Editor}}.

== Parameters ==

* '''Addon''' - in which addon the file will be created * '''Destination Directory''' - in which ''directory tree'' the file will be created:<br>It is possible to select an "ArmaReforger" directory to create the file and the directory tree in the selected addon, e.g<syntaxhighlight lang="bat"> Addon: MyAddon Selected directory: $ArmaReforger:scripts/Game/Building End destination: $MyAddon:scripts/Game/Building </syntaxhighlight> * '''Parent Class Name''' - the parent class name, if any - it may be overridden by config's parent class name * '''Type''' - the script type (same as {{Link|Arma Reforger:Script Editor: Fill From Template Plugin#Parameters|Fill From Template's Type}}) * '''Template Config File''' - the template config to use, storing the different types's templates

== See Also ==

* {{Link|Arma Reforger:Script Editor: Fill From Template Plugin}} * {{Link|Arma Reforger:World Editor}}

{{GameCategory|armaR|Modding|Official Tools|Script Editor Plugins}}
1xwnx6jehbkn7tmtycsgikr82nl9hwr

# Arma Reforger:Script Editor: Doxygen Filler Plugin

5050
47015
369537
2024-09-16T11:19:16Z
Lou Montana
10739
Page creation
369537
wikitext
text/x-wiki
{{Infobox/WorkbenchPlugin |name= Doxygen Filler |editor= script |descr= Create/Format Doxygen documentation skeleton for configured methods (default public methods only) |file= {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_DoxygenFillerPlugin.c}} |shortcut= {{Controls|Ctrl|Alt|Shift|D}} }}

'''Doxygen Filler''' is a plugin that automatically adds a [[Doxygen]] skeleton structure to document methods properly, e.g: <enforce> //! //! \param[in] entity //! \param[out] health //! \return bool IsSoldierAlive(notnull IEntity entity, out float health = 0) { // ... } </enforce>

== Parameters ==

* '''Doxygen public/protected/private methods''': tick to add a Doxygen skeleton to public/protected/private methods respectively {{Feature|informative|It is considered good practice to at least document the public API.}} * '''Doxygen overridden/static/obsolete methods''': ** documenting overridden methods is not always wanted, unless the override drastically changes the method's behaviour ** documenting static methods is also a good practice, see public/protected/private methods above ** documenting obsolete methods may not be worth it, depending on the context * '''Partial Doxygen Prefixes''': method prefixes for which no description field is added (e.g {{hl|'''Get'''Health()}}, self-explanatory enough); if emptied, refilled with {{hl|Get}}, {{hl|Set}}, {{hl|On}}, {{hl|Is}} * '''Convert Doxygen Formatting''': converts comment blocks <enforce inline>/*! */</enforce> into inline comments <enforce inline>//!</enforce>, preferred <table style="min-width: 75em"><tr><td style="width: 50%"><enforce> /*! This is a comment Made in one block Try not to use this format too much, As it sometimes conflicts with other comments */ </enforce></td><td><enforce> //! //! This is a comment //! Made in one block //! Try not to use this format too much, //! As it sometimes conflicts with other comments //! </enforce></td></tr></table>Note that top/bottom lines can be removed here. * '''Add Missing Separators''': add the infamous method separator on methods not having it<br><enforce inline>//------------------------------------------------------------------------------------------------</enforce> * '''Add Constructor Normal Comment''': add a simple <enforce inline>// constructor</enforce> comment, helpful in case of class renaming and forgetting to rename the constructor * '''Add Destructor Normal Comment''': same with <enforce inline>// destructor</enforce>, so the constructor would not feel singled out

{{GameCategory|armaR|Modding|Official Tools|Script Editor Plugins}}
fxwtlc2bk8m8b976ufm40jaxxdp1gdl

# Arma Reforger:Script Editor: Fill From Template Plugin

5050
38138
352577
2024-02-14T14:31:18Z
Lou Montana
10739
Page creation
352577
wikitext
text/x-wiki
{{Infobox/WorkbenchPlugin |name= Fill from Template |editor= script |descr= A plugin to help create a script skeleton based on templates |file= {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_ScriptTemplatePlugin.c}} |shortcut= {{Controls|Ctrl|T}} }} '''Fill from Template''' is a plugin that allows adding content to a file (empty or not) based on the selected template. This is useful to gain time by automatically preparing a class to be e.g a Workbench plugin and respect standards (e.g ending with "Component" for a component).

== Parameters ==

* '''Class Type''' - can be one of: {{Columns|2| ** {{hl|None}} - a normal class ** {{hl|Entity}} - a {{Link|Arma Reforger:World Editor}} entity ** {{hl|Component}} - a scripted component ** {{hl|WidgetComponent}} - a widget component ** {{hl|ScriptInvoker}} - a {{Link|Arma Reforger:ScriptInvoker Usage|script invoker}} ** {{hl|ScriptedUserAction}} - a user action script ** {{hl|UIMenu}} - a UI menu script ** {{hl|ConfigRoot}} - a config ** {{hl|WorkbenchPlugin}} - a {{GameCategory|armaR|Modding|Official Tools|text= Workbench}} plugin (any editor) ** {{hl|WorldEditorTool}} - a {{Link|Arma Reforger:World Editor}} tool }} : {{Feature|informative|This type is defined by the {{Link/Enfusion|armaR|SCR_EScriptTemplateType}} enum.}} * '''Class Name''' - if left empty, it will use the file name * '''Parent Name''' - if left empty, the class does not inherit from anything unless the template mentions an inheritance

{{Feature|informative|See the Template config ({{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Workbench/ScriptTemplatePlugin/ScriptTemplateConfig.conf}}, an array of {{Link/Enfusion|armaR|SCR_ScriptTemplateConfigEntry}}) to know more about Template configuration.}}

== See Also ==

* {{Link|Arma Reforger:Script Editor: Create New Script Plugin}} * {{Link|Arma Reforger:World Editor}}

{{GameCategory|armaR|Modding|Official Tools|Script Editor Plugins}}
hzi2ajbvwi2lbq6jd9zyqgwenraoqyk

# Arma Reforger:Script Editor: SVN Plugins

5050
38135
370212
369535
2024-11-08T02:32:35Z
Lou Montana
10739
Fix typo
370212
wikitext
text/x-wiki
{{Infobox/WorkbenchPlugin |name= SVN Plugins |editor= resource script |descr= VCS-related shortcut commands |shortcut= <nowiki/> {{{!}} class="align-left" ! SVN Blame {{!}} {{Controls|Alt|Shift|B}}<br>''{{Link|Arma Reforger:Script Editor}} only'' {{!}}- ! SVN Diff {{!}} {{Controls|Alt|Shift|I}}<br>''{{Link|Arma Reforger:Script Editor}} only'' {{!}}- ! SVN Log {{!}} {{Controls|Alt|Shift|L}} {{!}}} |file= {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_SVNPlugin.c}} }}

SVN plugins are keyboard shortcuts to SVN commands - more precisely {{Link|https://tortoisesvn.net/|TortoiseSVN}} commands by default. They are defined in {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_SVNPlugin.c}}.

{{Feature|informative| The plugins are named {{Link|https://subversion.apache.org/|SVN}} but can absolutely be used with another VCS software like {{Link|https://git-scm.com/|Git}} (e.g {{Link|https://gitextensions.github.io/|Git Extensions}}), provided commands are replaced in the plugins's options.<br> They will be renamed to '''VCS''' plugins in {{GVI|armaR|1.3.0}}. }}

== Commands ==

Commands can be anything and have two possible parameters: * {{hl|$path}}: replaced by the absolute file path between double quotes ({{hl|"}}), e.g {{hl|"C:\Users\John Bob\MyFile.c"}}. * {{hl|$line}}: replaced by the current cursor position's line number.

{| class="wikitable" ! Name ! style="min-width: 12em" | Shortcut ! Description ! Command |- | ''SVN'' Blame | {{Controls|Alt|Shift|B}} | List the last author of each line, to find the culprit | TortoiseProc /command:blame /path:$path /startrev:1 /endrev:-1 /ignoreeol /ignoreallspaces /line:$line

gitex blame $path |- | ''SVN'' Diff | {{Controls|Alt|Shift|I}} | List the changes between the repository and the local file | TortoiseProc /command:diff /path:$path

gitex difftool $path |- | ''SVN'' Log | {{Controls|Alt|Shift|L}} | Show the file's changes commit history | TortoiseProc /command:log /path:$path

gitex filehistory $path |}

== See Also ==

* {{Link|https://subversion.apache.org/|SVN}} ** {{Link|https://tortoisesvn.net/|TortoiseSVN}} * {{Link|https://git-scm.com/|Git}} ** {{Link|https://gitextensions.github.io/|Git Extensions}} ** {{Link|https://tortoisegit.org/|TortoiseGit}}

{{GameCategory|armaR|Modding|Official Tools|Script Editor Plugins}}
rsqblp9m9utce709qxpzetqnmc7pi2a

# Arma Reforger:Animation Editor: Buffer Node Tutorial

5050
32822
370919
329625
2025-02-26T12:31:50Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370919
wikitext
text/x-wiki
{{TOC|side}} == Definitions ==

In order to understand the buffer nodes, you must first have a firm grasp of the animation system regarding its blending properties.

* An '''Absolute Animation''' is an animation which has absolute values; i.e. a '''run cycle animation''' or an '''idle animation'''. * A '''Differential Animation''' is animation that compares the '''difference''' between itself and a target animation; i.e. a '''look at animation''' or a '''short gesture animation'''. * An animation can be exported with different bones included; the run cycle will most likely use all of the bones, while the look at will only use the head.

'''However,''' animations can be exported with '''both Absolute & Differential Bones.''' This means that you can have an animation that includes '''different parts of the skeleton''' with '''different settings for each bone.'''

See below: {| class="wikitable" ! rowspan="2" | Bone ! colspan="2" | Animation |- ! Wave At ! Run |- | Head | Differential | Absolute |- | Neck | Differential | Absolute |- | Spine 2 | Absolute | Absolute |- | Spine 1 | Absolute | Absolute |- | Pelvis | Absolute | Absolute |- | L Clavicle | Absolute | Absolute |- | L Arm | Absolute | Absolute |- | L Elbow | Absolute | Absolute |- | L Hand | Absolute | Absolute |- | R Clavicle | {{n/a}} | Absolute |- | R Arm | {{n/a}} | Absolute |- | R Elbow | {{n/a}} | Absolute |- | R Hand | {{n/a}} | Absolute |}

Blending bones with these parameters has varying results, as shown below:

{| class="wikitable" |+ Animation Blending Result ! ! Absolute ! Differential |- ! Absolute | Blending two '''absolute bones''' will result in a '''linear interpolation''' between their positions and rotations. | Blending an '''absolute bone''' with a '''differential bone''' will give you a result wherein the '''differential bone''' is added on top of the '''absolute bone'''. |- ! Differential | Blending an '''absolute bone''' with a '''differential bone''' will give you a result wherein the '''differential bone''' is added on top of the '''absolute bone'''. | Blending two '''differential bones''' will result in a '''linear interpolation''' between them, which then still needs to be added on top of an '''absolute bone'''. |}

A combination of '''Any + '''Any''' (with missing bones) will result in '''ERROR''':<br> Blending '''two animations that are either absolute or differential''' with one or both of them '''having bones that the other does not''' will result in an error where it tries to blend '''from something to nothing''', which is not possible, and will therefore 'tick' when it starts/finished the blend.

This is where '''Buffer Nodes''' comes to the rescue.

== Buffer Node ==

First, you must understand the '''animation buffer.''' It is the '''processed data of the animation tree''' that gets used by the system to blend animations together to achieve different results. For example, by having a '''Queue Node,''' the system would calculate the result of the '''Queue Node's children''' and create a buffer for them and then blend it onto the '''Queue Node Main Link's Animation Buffer''' to achieve the final result.

Sometimes when you blend animations together, the animations might be using different parts of the skeleton, with details shown above.

An example that is used in DayZ is the '''Look At functionality,''' where the players can use their heads to look around themselves while still staying stationary. When you're running around you're only using your head, but when you're stationary the character uses its entire upper body to achieve a natural range of motion. The problem is when you're using an animation that uses the upper body, and blending it with an animation that only includes the head makes the animation 'tick'.

This is how the animations appear in the buffer when you are blending them together: {| class="wikitable" ! Look_Upperbody_Anim ! Blends ! Look_Head_Anim |- | Head | {{Icon|checked}} | Head |- | Neck1 | {{Icon|checked}} | Neck1 |- | Neck2 | {{Icon|checked}} | Neck2 |- | Spine3 | {{Icon|unchecked}} | --- |- | Spine2 | {{Icon|unchecked}} | --- |- | Arm | {{Icon|unchecked}} | --- |- | Elbow | {{Icon|unchecked}} | --- |- | Hand | {{Icon|unchecked}} | --- |} It fails because to complete this blend because it attempts to blend from/to something into nothing. The '''Buffer Node,''' however, will save the state of a part of the '''Animation Tree''' and use it at a later time. This way, we can fill in these 'gaps' and achieve a natural blend.

{{GameCategory|armaR|Modding|Official Tools|Workbench|Tutorials}}
ilhhb1b1qxlxhr5szhejpaagc59wyu8

# Arma Reforger:Animation Editor: Custom Properties

5050
32927
370942
347934
2025-02-26T12:31:53Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370942
wikitext
text/x-wiki
{{TOC|side}}{{Wiki|TODO|Add images}}Each {{hl|.anm}} and {{hl|.txa}} file can be edited to add events or custom properties when opened in the [[Arma Reforger:Animation Editor|Animation Editor]].

Events are mainly used when '''syncing animations''' or for evaluating transitions.

== Events ==

After double clicking on an .anm file in the animation editor, you must press edit in the animation editor preview window in order to add any properties to it.

Doing so, you will then get more options inside of the properties window.

=== Events ===

Events can be added by pressing the '''+''' button under the '''Events''' property, and removed by selecting the event and pressing the '''-''' button.

Events are frame-based and fire off events on the given frame.

=== Custom Properties ===

Custom properties can be added by pressing the '''+''' button under the '''Custom Properties''' section, and removed by selecting the property and pressing the '''-''' button.

Custom properties consists of:

* name of the property (string) * value of the property (also string although animation system can parse this string to other value types - float, int, vector, 3 angles)

Animation movement override:

There are 2 properties that override animation movement (usually EntityPosition bone in the animation)

If EntityPosition is missing in animation or if you want to override the movement with written values, you can add custom properties named "EntityPos" and "EntityRot" to a animation.

* animation movement - this is the whole animation movement - it's not speed ** name: "EntityPos" ** value: "x,y,z" ** example: "0,0,2.5" - moves entity for 2.5 in Z axis in ONE animation loop * animation rotation - this is the whole animation rotation ** name: "EntityRot" ** value: "x,y,z" - 3 angles in degrees ** example: "0,45,0" - rotates entity to right (+ right, -left) around Y axis in ONE animation loop

Animation speed override

* speed up factor ** name "SpeedUpFactor" ** value > 0 ... x , 1.0 is default ** example 1.2 - speeds animation of 20%

{{GameCategory|armaR|Modding|Official Tools|Workbench|Tutorials}}
k9ivzmhtvi4a7oruvzx1yykl3mszjf9

# Arma Reforger:Animation Editor: Live Debug Tutorial

5050
32928
371017
338599
2025-02-26T12:32:08Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
371017
wikitext
text/x-wiki
Live animation debugging can be useful to observe and record in-game animation evaluation.

Here is how to use it in few steps: * Start the scenario in '''World Editor''' or in the game itself. ** [enfusion://ResourceManager/~ArmaReforger:worlds/MP/MpTest.ent MpTest world] is a good candidate for isolated tests * Open the '''Animation Editor''' and load animation workspace you would like to debug. ** If you are trying to debug some '''entity''' ''(like weapon)'', make sure that it is present in the world * In '''Live Debug''', press '''Fetch'''. This will list all available instances and then you can '''Attach''' to one of the returned. * The editor should now record whatever happens to animation in-game. You can pause and rewind, check the set variables, commands and returned events and tags.

== Troubleshooting ==

* The animation debugging can be disabled. You can jumpstart it in [[Arma Reforger:Diag Menu|Diag Menu]] (win+alt) under '''Animation > Start Debugger'''. Triggering the variable starts the debugger and the variable returns to false. * Game is not updating when alt-tabbed to editor. This way it cannot submit any reports to the editor. Make sure that the game runs with [[Arma Reforger:Startup Parameters#forceUpdate|forced updates on]].

{{GameCategory|armaR|Modding|Official Tools|Workbench|Tutorials}}
gmx2y6id0rtcboum8zli4oe66kb09oc

# Arma Reforger:Animation Editor: Pose 2D Node Tutorial

5050
32830
371022
322421
2025-02-26T12:32:10Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
371022
wikitext
text/x-wiki
<!--{{TOC|side}}--> A '''Pose 2D Node''' is primarily used for when you want to map a animation with a pose in each frame to different ranges, such as '''Aim Spaces''' or '''Look At''' animations. This node is a bit more complicated than most others, but once you have created one, it will be easier for you.

{{Feature|informative|The more general details about the node can be found in the [[Arma Reforger:Animation Editor: Nodes|Animation Editor: Nodes]] page.}}

== Tables ==

Each '''Pose 2D Node''' has an assorted table for the animation. It looks like this:

Y(-90): X(-90) = 0, X(0) = 1, X(90) = 2

Y(0): X(-90) = 3, X(0) = 4, X(90) = 5

Y(90): X(-90) = 6, X(0) = 7, X(90) = 8

To properly illustrate this, see this table:

{| class="wikitable" style="font-size: 1.5em; text-align: center" ! rowspan="2" colspan="2" | ! colspan="3" | X |- ! -90 ! 0 ! 90 |- ! rowspan="3" | Y ! -90 | 0 | 1 | 2 |- ! 0 | 3 | 4 | 5 |- ! 90 | 6 | 7 | 8 |}

The numbers inside of the circles are the frame numbers in the pose animation, that correspond to a specific set of variable values.

Frame 0 is only played when both X and Y is -90, which is shown in the first line in the table shown before:

'''Y(-90): X(-90) = 0''', ''X(0) = 1, X(90) = 2''

''Y(0): X(-90) = 3, X(0) = 4, X(90) = 5''

''Y(90): X(-90) = 6, X(0) = 7, X(90) = 8''

Similarly, frame 5 is only played when X is at 90 and Y is at 0, shown here:

''Y(-90): X(-90) = 0, X(0) = 1, X(90) = 2''

'''Y(0):''' '' X(-90) = 3, X(0) = 4, '''''X(90) = 5'''

''Y(90): X(-90) = 6, X(0) = 7, X(90) = 8''

If the variables are in any number in between these (eg, Y: -45, X: 45) , the poses will be blended.

== Tips and Tricks ==

These tables are not limited to '''3 by 3 ranges''', but rather, you could have any combination of animations and strange variable values, shown below:

Y(-125): X(-60) = 0, X(0) = 1, X(88) = 2, X(155) = 3

Y(5): X(-150) = 4, X(5) = 5,

Y(29): X(-90) = 6, X(0) = 7, X(90) = 8

The only key rule to all of these is that '''you have to go from the smallest number to the highest number in both directions'''.The values '''in any direction must''' '''be higher than the previous''', e.g (-60, 0, 88, 155) in X and (-125, 5, 29) in Y.

{{GameCategory|armaR|Modding|Official Tools|Workbench|Tutorials}}
02x9h0ewfvue40s9khqd14mxzop5gxh

# Arma Reforger:Animation Editor: Sync Tutorial

5050
32814
370958
364660
2025-02-26T12:31:57Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370958
wikitext
text/x-wiki
{{TOC|side}} This article will explain in detail how you can set up animations to sync with each other, primarily focusing on locomotion.

== Overview ==

The '''Event Table''' keeps the data about what events exist in the '''Workspace''', the '''Sync Table''' defines when these events happen inside a specific cycle. Walk, run, and sprint all have different '''cycles''' but '''share the same events.''' The events defined in the '''Sync Table''' are then placed in the animations at the right time, and the '''Source Sync Node''' is assigned the proper '''Sync Line.'''

If you wish to transition from one animation with a different '''Sync Line''' than another animation, '''it will still work,''' assuming you are '''passing the right time'''.

== Event tables ==

Every workspace has an '''Event Table''', and this table defines the events that can be placed in animations. The basic events are the planting of the feet in any walk, run, or sprint animation.

Right clicking on the '''Event Table''' line in the '''Workspace''' menu will allow you to '''Create New Event Table''' which when opened will allow you to add events, shown below.

These will then be used in something called '''Sync Tables.'''

== Sync Table ==

Similarly, a '''Sync Table''' is needed in order for animations to properly sync across multiple transitions or changes in movement speed, and you can create one similar to the '''Event Table:'''

A '''Sync Table''' defines '''where in animation time the events will occur.''' To create multiple '''Sync Lines''', press the '''+''' button in the top left after opening the '''Sync Table. '''The time it is using is '''Normalised,''' which means that they are per cycle, explained in the next paragraph. For example, the order of events in a walk cycle are ''generally'' as following: Right Foot Down, Left Foot Up, Left Foot Down, Right Foot Up, repeating as many times as there are loops in that animation.

You would only have one of each event in one '''Sync Line;''' which would be the '''first loop''' of this animation. If you have a walk animation that is '''96''' frames and there are '''three''' loops (the right foot is planted 3 times), the '''first''' loop of this animation would be approximately '''32 frames'''. This is important to note down, as the '''Sync Line''' only accounts for the first loop and then assumes that the rest of the loops in that '''Sync''' share a similar pattern. This way, if you want to blend to another animation that has the same '''Sync Line''' as this one, but has a '''different length,''' the system can still approximate the syncing between them.

So, in the DayZ character's Walk Forward, we can look at the frame that has the first occurrence of '''Right Foot Down'''. The animation is just '''32''' frames and the right footfall is around frame '''8'''. So dividing the footfall frame with the total frames, we can get the '''Normalised time at which the footfall would normally occur.''' 8 / 32 = 0.25, which means that '''eight''' frames out of '''32''' is 25% through the animation, that makes it 0.25 in '''Normalised Time'''. Here it is applied to the '''Walk Sync Line''' inside of the '''Sync Table:'''

Repeating this for the rest of the events (Left Foot Up, Left Foot Down, Right Foot Up), then we get following:

== Events in Animations ==

Now that we have the proper '''Sync Line''' for an animation, you need to open up an animation in the workbench, then open the '''Anim Editor Preview''', click on Snap to make your scroll bar snap on frames, and then click on '''Edit''':

When clicking on '''Edit,''' you will get another button to '''Save''' any changes you made to the animation. By clicking on '''Edit,''' it allows you to add '''Events''' to the animation at the specific frame you are on. If you go to the 8th frame, as per your '''Sync Line,''' and click on the '''+''' button in the '''Properties''' window, you will see that a blank event has been added in the '''Properties''' window as well as in your animation''':'''

Pressing on '''Event,''' you will get a drop down list of the events that can be placed on that frame. As per the '''Sync Line''' we created before, the first one should be RFootDown. If you kept notes of the other footfalls, you should be able to place the other events at the appropriate frames.

After you have done this, the animation is done and it is ready to be added to the graph.

== Sync Node ==

Once you have created the '''Sync Line''' and filled it out, you can create a '''Source Sync Node''' and assign it the '''Walk Sync Line.''' once you have done this, you want to take another animation and create the proper events

== Syncing between multiple animations ==

Now that we have synced the animation in this particular clip, we need to actually sync between animations in order for all of this to actually matter. For you to understand the following steps, it would be best if you read the article on '''State Machines'''.

If you set up a simple state machine that looks something like this, and create a condition that will be able to transition you between the two states like so:

However, there's a problem. Each time you transition between two states, the time is reset and the animation skips back to the beginning of the clip. This is due to the fact that each state takes care of their own time due to performance optimization. See this video:

You will need to use a '''function''' in the '''transition''' that will allow you to take the time that the previous state was in and hand it to the new state, and this function is called '''GetLowerTime()'''. In order to add this, open the transition between two states that have sync animations in them and add it under '''Start Time:'''

You will need to tick the '''Post Eval''' checkbox, since you are dealing with time, and this is explained more in detail in the {{Link|Arma Reforger:Animation Editor: Nodes#State Machine Transition}} article. The '''GetLowerTime()''' function will then take the time that was in the previous state before the transition, pass it to the new state and play the animation from that time. Now, you'll get something that looks a bit more natural:

With the passing of time, the feet accurately step in the right order instead of going out of sync. These are the principles of '''Syncing''' and '''Events.'''

{{GameCategory|armaR|Modding|Official Tools|Workbench|Tutorials}}
cnf1490zl6q04z4sp89dczzidhcmhyk

# Arma Reforger:Animation Editor: Templates and Instances Tutorial

5050
32817
370913
370910
2025-02-26T12:31:49Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370913
wikitext
text/x-wiki
{{TOC|side}} In this article I will be explaining how you will utilise the animation template and animation instances in your workspaces.

The essence of Templates and Instances is that the '''Animation''' '''Template''' holds the '''generic lines''' in which the '''Animation Instances''' fills in.

== Templates and Instances ==

When you first create your workspace, you will have this visible in your Workspace tab:

Right clicking on '''Anim Template''' will allow you to create one, which will be the basis of your animation system. Name this '''player_template'''. You will need a template before you can create an instance, doing so in the same manner, and name it '''player_unarmed'''.

== Preview Model ==

In order for you to preview your animations, you will need to right click on '''Preview Models''' and add your player model, otherwise you might get an error message, or worse.

== Filling it in ==

Once you have created the template and at least one instance, you will need to add one of your animations to the '''Animation Sets''' window. Open the '''File Browser''' and look for the animation you wish to add, select it and then click the '''F->L''' (File Browser -> Line) button.

This will create the first line of your animation template, which can now be referenced in the graph nodes. However, this does not allow you to utilise the full functionality of the graph in the end. By right clicking on the line you can '''Create Line''', which allows you to have a generic name for, i.e. the player's walk forward, but in all stances. Simply, create the new line and name it '''WalkF'''.

You will notice that the new line has a red circle because it is missing an animation, whilst the line for standing walk forward does have an animation. Now, right click on the WalkF line and click '''Group Animations''', which will create a new group and add that line to that group. Name it '''Locomotion.''' You can delete the old line with the animation now, as it is not needed. The WalkF line has been grouped but the group has an '''Undefined column,''' simply right click on it to rename it, and rename it to something like '''Erc''' (short for Erected):

After naming it, right click on the '''Locomotion''' group (not the column) to create another column, this time naming it '''Cro''' (Crouched). Do the same thing for '''Pne''' (Prone). This is where you should be at this point:

However, the columns needs to have an assigned animation to them, so simply click on the red dot under the '''Cro Column,''' and then select the '''Crouched WalkF''' animation in the file browser and press '''Set Anim:'''

This will make the dot turn green, signalling that it now has an animation. Repeat this for '''Erected''' and '''Prone WalkF'''. You can add as many columns as you would like. For the DayZ player, we have '''Cro, CroRas, Erc, ErcRas, Pne, PneRas''' for stances and raised weapon stances, and using the Group Select makes getting the right animations from one group with multiple columns a breeze.

{{Feature|informative|Read more on the group select node in the [[Arma Reforger:Animation Editor: Nodes|Animation Editor: Nodes]] article.}}

== The power of Instances ==

However, none of this explains why one template can have multiple instances.

You have multiple guns ('''instances'''), that have multiple stances ('''columns'''), sharing the same lines ('''template''') and nodes in the graph.

They would all share the same lines and columns, '''but they don't have the same animations.''' By creating more instances, you can one '''Reload Line''' in your '''Animation Template,''' but switch what animations are slotted into the '''Template's Columns''' inside of each of your '''Animation Instances.''' Simply put, the Animation Template contain generic and immutable lines which then are dynamically filled by Animation Instances.

{{Feature|quote|One Template with one graph, multiple instances with multiple animations.}}

{{GameCategory|armaR|Modding|Official Tools|Workbench|Tutorials}}
tbmpzr226mlxptt8cd34ominu7cyxau

# Arma Reforger:Procedural Animation Editor Basics Tutorial

5050
33004
370992
341708
2025-02-26T12:32:04Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370992
wikitext
text/x-wiki
{{TOC|side}} For the demonstration of how Procedural Animation Editor works, let's see the example of vehicle exhaust, the end of which should be shaking a bit when the engine of the vehicle is on.

This shake should be also affected by vehicle RPM and also be a bit bigger when engine goes on or off. Let's go into it.

{{Feature|informative|See [[Arma Reforger:Procedural Animation Editor|Procedural Animation Editor]] documentation.}}

== Create Files ==

* Create a new {{hl|.pap}} and {{hl|.siga}} file: ** {{hl|File > New > Project}} for the {{hl|.pap}} file (or {{Controls|Ctrl|Shift|N}}) ** {{hl|File > New > Signal}} for the {{hl|.siga}} file

== Input and Output ==

# In the {{hl|.siga}} file, create two new '''Inputs''' and name them '''EngineRPM''' and '''EngineOn'''. - these are this animation's two parameters.<!-- --> In the same file, create an '''Output''' and name it '''EngineShake''' (the naming here is up to the modder).

== Project Setup ==

* In the {{hl|.pap}} file, click on '''Signal''' * In the new window, navigate to the existing {{hl|.siga}} file and press OK * Create two new nodes '''RotationMake''' and '''RotationSet''' * Connect the '''Signal'''<nowiki/>'s EngineShake output to both X and Y axis inputs of the '''RotationMake''' node * Connect '''RotationMake'''<nowiki/>'s Out to '''RotationSet'''<nowiki/>'s Rotation input * In the view window, select the vehicle: ** Click on the '''SelectModel''' button ** Search for {{hl|UAZ469_base.xob}} and select the {{hl|.xob}} file * Select on the model the bone to be used. Click on the exhaust bone (should be {{hl|v_exhaust}} and select '''Add bone''' - this will create a '''Bone''' node * Connect this new Bone node to '''RotationSet'''<nowiki/>'s In input <!--{{Feature|informative| In some cases the maximal value of rotation needs to be setup as shown on the example below. To do this, select signal node and set max value for desired signal.<br> The same window can be used for work preview but bear in mind that in the {{hl|.siga}} file's chain of nodes; no Smoother node can be present for this. }}-->

[[File:armareforger_proceduralanimationeditor-tutorial-pap-result.png]]

== Signal Processing ==

Now that the {{hl|.pap}} project file has been set up, it is time to work with the {{hl|.siga}} file, in order to process the signal from the engine. The following picture represents the wanted end result and is described in the next steps.

[[File:armareforger_proceduralanimationeditor-tutorial-siga-first-step.png]]

The whole process can be divided into two branches:

=== Engine RPM ===

Let's handle the shaking of exhaust based on engine RPM: * Create a '''Value''' node and set its value to 7500 * Create a '''Div''' node in order to divide engineRPM (value in range 0..~5000) by the '''Value'''<nowiki/>'s set value (7500) * Connect the '''Input'''<nowiki/> ''engineRPM''<nowiki/>'s Out to '''Div'''<nowiki/>'s In input * Connect the '''Value'''<nowiki/>'s Out to '''Div'''<nowiki/>'s Divisor input {{Feature|informative|The value '''7500''' could also have been set directly in the '''Div''' node.}} * Create a '''Random''' node to generate a random value ** Set its min value to -0.6 and max value to 0.6 to make it generate a random number in -0.6..+0.6 range * Create a '''Mul''' node to multiply the result of the division output by the random value * Connect the '''Div'''<nowiki/>'s Out and the '''Random'''<nowiki/>'s Out to '''Mul'''<nowiki/>'s In * Create a '''Smoother''' node ** Set its Fade-in and Fade-out values to 300 (milliseconds) ** Keep "Interpolate First" ticked * Connect the '''Mul'''<nowiki/>'s Out to '''Smoother'''<nowiki/>'s In * Connect the '''Smoother'''<nowiki/>'s Out to '''Output''' engineShake's In

[[File:armareforger_proceduralanimationeditor-tutorial-engine-rpm-result.png]]

The exhaust now shakes according to engine's RPM as well as a little randomization.

=== Engine On ===

Let's handle a shake of exhaust on start and stop of the engine: * Create a '''Smoother''' node, keep its default values * Connect the '''Input''' ''engineOn''<nowiki/>'s Out to this '''Smooker'''<nowiki/>'s In * Create a '''{{sic|Convertor}}''' node ** Set this node's Intervals' values (min/max/out):<br><!-- -->[0] 0.100/0.300/0.500<br><!-- -->[1] 0.301/0.600/1.000<br><!-- -->[2] 0.601/0.900/0.500<br><!-- -->[3] 0.901/1.000/0.000 {{Feature|informative|These values will create the effect of a stronger shake on engine start / stop (smoothed later).}} * Connect the '''Smoother'''<nowiki/>'s Out to the '''{{sic|Convertor}}'''<nowiki/>'s In ('''not''' Default) * Create another '''Smoother''' node ** Set its Fade-in value to 300 (milliseconds) and this time set its Fade-out value to '''0''' * Connect the '''{{sic|Convertor}}'''<nowiki/>'s Out to the '''Smoother'''<nowiki/>'s In * Create a '''Random''' node * Create a '''Mul''' node to multiply '''Smoother'''<nowiki/>'s and '''Random'''<nowiki/>'s Out values * Connect the '''Smoother'''<nowiki/>'s Out and the '''Random'''<nowiki/>'s Out to '''Mul'''<nowiki/>'s In

[[File:armareforger_proceduralanimationeditor-tutorial-engine-on-result.png]]

The whole Signal file is not completed! There are still "dangling" nodes.

[[File:armareforger_proceduralanimationeditor-tutorial-engine-intermediate-result.png]]

Now, in order to merge (by sum) engineRPM and engineOn's results, we will change engineRPM's flow: * Disconnect '''Output''' ''engineShake'' from the '''Smoother''' node<!-- -->{{Feature|informative|In order to do so, click on the node link and press {{Controls|Del}}.}} * Create a '''Sum''' node * Connect the two open ends to it: the last '''Smoother''' node from ''engineRPM'' and the last '''Mul''' node from ''engineOn'' * Connect the '''Sum'''<nowiki/>'s Out to ''engineShake''

The final result should look like the following image. [[File:armareforger_proceduralanimationeditor-tutorial-engine-final-result.png]]

== Vehicle Setup ==

Now, the last thing to be done is to set up the vehicle. For that, a {{Link/Enfusion|armaR|CarProcAnimComponent}} has to exist on the vehicle:

Hit the "'''+'''" button in its Parameters section and add a new '''ProcAnimParams'''. As a '''ResourceName''' navigate to the created {{hl|.pap}} file, in '''BoneNames''' click on "'''+'''" button and select the bone to be animated.

Index of added bones on ProcAnimComponent has to be same as the order in {{hl|.pap}} file.

Same goes for inputs in {{hl|.siga}} file, or the following could happen:

3 new input boxes were created in {{hl|.siga}} file in order Sig1, Sig3, Sig2. In script, using SignalManager's {{hl|FindSignal}} method: {| class="wikitable align-center" ! FindSignal ! Expected index ! Actual index |- | <enforce>int sigInd1 = m_SignalManager.FindSignal("Sig1");</enforce> | 0 | 0 |- | <enforce>int sigInd2 = m_SignalManager.FindSignal("Sig2");</enforce> | 1 | 2 |- | <enforce>int sigInd3 = m_SignalManager.FindSignal("Sig3");</enforce> | 2 | 1 |}

{{GameCategory|armaR|Modding|Official Tools|Workbench|Tutorials}}
6461x9dllg0k43o2qpdzcwnel7hgv64

# Arma Reforger:Resource Manager: Getting Started Tutorial

5050
33192
370962
363544
2025-02-26T12:31:58Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370962
wikitext
text/x-wiki
{{TOC|side}} Starting '''Arma Reforger Tools''' in Steam starts the [[Arma Reforger:Resource Manager|Resource Manager]], crossroads to all the {{GameCategory|armaR|Modding|Official Tools|text= Workbench}} Editors.

== First Launch ==

The Resource Manager requires game data and may not autodetect it. Click the {{hl|Add Existing}} button in the Projects popup to target {{hl|ArmaReforger.gproj}}, located in {{hl|<{{armaR}} installation dir>\addons\data}}. Once this is done, {{armaR}} appears in the projects list.

{{Feature|informative|Opening the {{armaR}} project will only allow to view game's data/scripts in read-only mode.}}

== New Project ==

See [[Arma Reforger:Mod Project Setup|Mod Project Setup]].

== Configuration ==

One of the first things to do is to register the {{hl|enfusion://}} protocol by using '''Workbench > Options > Workbench tab > Register enfusion:// protocol'''). This allows to click {{hl|enfusion://}} links such as this one: {{Link|enfusion://ResourceManager/~ArmaReforger:UI/Textures/Common/GenericProfileIcon_UI.edds}} - such links may be encountered on internet, and especially on this wiki.

{{GameCategory|armaR|Modding|Official Tools|Workbench|Tutorials}}
nsuzve8cy6qhsc60aporcykc1pe49pj

# Arma Reforger:World Editor: Navmesh Tool Tutorial

5050
32521
370921
322092
2025-02-26T12:31:50Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370921
wikitext
text/x-wiki
{{TOC|side}} This is a tutorial for [[Arma Reforger:World Editor: Navmesh Tool|World Editor: Navmesh Tool]].

== Setup ==

The loaded world must have an {{hl|AIWorld}} entity placed, holding a {{hl|NavmeshWorldComponent}}. This {{hl|NavmeshWorldComponent}} should have '''World Settings''', '''Navmesh Settings''' and '''Server Config''' initialised - pointing to a navmesh file ({{hl|.nmn}}).

=== Connect ===

Click connect to "connect" to a Navmesh Generation server. the "Connect" window appears, allowing to choose which Navmesh "server" to use.

=== Generate ===

Pressing the '''Generate''' button will bring the '''Recast params''' settings window. Click OK to confirm and it will open the '''Generator area''' settings window. Click OK again to apply the default settings and start navmesh generation.

While generating, the black square preview will fill with current terrain's navmesh preview.

=== Save ===

If '''Autosave when done''' was not ticked, it is important to click '''Save''' or '''Save As''' to properly save the generated data. Otherwise, the generated navmesh will be lost!

{{GameCategory|armaR|Modding|Official Tools|Workbench|Tutorials}}
0nondudadj1ucizmnq8hij87tf7fo3s

# Arma Reforger:World Editor: Terrain Preparation Tutorial

5050
32526
373013
370929
2025-03-18T03:06:25Z
Hypoxic125
11179
Adds suggested terrain prefabs for a default start.
373013
wikitext
text/x-wiki
{{TOC|side}} == Setup ==

=== World ===

In World Editor, click on '''Create new World''' to open the '''Create world''' interface.

In there, set '''world type''' to '''Base scene''' (the new world is to start 100% from scratch, '''Sub-scene''' would make an "additional layer" on an existing terrain).

=== Terrain ===

In the '''Create''' tab, search "terrain" to drag and drop a '''GenericTerrainEntity''' in the world.

'''Set its position to [0,0,0]''' (terrain collision/contact and Terrain Tools may encounter issues otherwise).

'''Save the terrain''' ({{Controls|Ctrl|S}} or {{hl|File > Save World}}).

Right-click on the created GenericTerrainEntity and choose '''Create new terrain…''' ; this will open the '''New Terrain''' interface, allowing to set terrain grid resolution values. When done, click '''Create'''.

<!-- See Generic Terrain Entity for more information about terrain tiles. -->

''et voilà !'' The newly created terrain is now ready to be sculpted.

== Additional Setup ==

=== Camera ===

In the '''Create''' tab, search for "camera" to drag and drop a '''CameraManager''' in the world. This makes the camera attach to the played character as the in-game behaviour, making the preview easier. Be sure to tick '''Play from camera position''' to spawn a unit when pressing '''Play'''.

=== Sun ===

In the '''Create''' tab, search for "light" to drag and drop a '''GenericWorldLightEntity''' in the world.

=== Transformation ===

* '''Angle X''' - Set light source's pitch angle (e.g -20° to have a low-on-horizon sun) * '''Angle Y''' - Set light source's yaw angle: 0 = from the South, 180 = from the North, 90 = from the West, 270 = from the East * '''Angle Z''' - Set light source's roll angle (does nothing)

=== Light color properties ===

* '''Specular Mul''' - Its a mutiplier of the Sun hotspot's specular intensity * '''Sun Angular Size''' - the size of the Sun in a hotspot

=== Global Light color properties ===

* '''Direct Light LV''' - Intensity of the Sun * '''Direct Light Color''' - Color of the Sun light * '''Indirect Light LV''' - Intensity of "ambient" light * '''Indirect Light Color''' - Color of the "ambient" light

=== Global Indirect light modificators ===

* '''Probe Reflection EV''' - Intensity of reflection at "LOW" roughness materials (chrom, glass etc.) * '''Probe Reflection Color''' - Color modificator for Reflection * '''Probe Diffuse EV''' - Intensity of diffuse light at "HI" roughness materials (wall, plastic cloth etc.) * '''Probe Diffuse Color''' - Color modificator for Diffuse

=== Skybox ===

==== Sky Preset ==== In world entity properties, set '''Sky Preset''' to '''Atmosphere.emat''' using the search bar to find it - this setups a "real world" atmosphere for the world.

{{Feature|informative|The screen will turn white for a moment, this is normal as the HDR takes time to adapt to the new brightness.}}

{{Feature|important|Using a static skybox (e.g '''HDRi_01.emat''') is a quick possibility but does not allow for further configuration such as adding Clouds or Celestial Bodies.}}

==== Planet Preset ==== In world entity properties, add '''Celestial Bodies''' by adding items to the '''Planet Preset''' list (by clicking "+") and add the following:

* '''Sun_01.emat''' - set a material to the skybox's light source * '''Moon_01.emat''' * '''Stars_01.emat'''

==== Clouds ==== In world entity properties, set '''Clouds Renderer''' to '''SkyVolCloudsRenderer'''.

Set '''Clouds Preset''' to '''Clouds_Volumetric.emat''' - this setups the volumetric clouds.

=== Ocean ===

In world entity properties,

Set the '''Ocean Material''' field to '''ocean.emat''' - this setups the ocean's surface.

Set the '''Ocean Simulation''' field to e.g '''oceanSimIsland.emat''' - this setups the ocean's simulation.

=== Post-Process Effects ===

In the '''Prefab Library''', search for "WorldP" to drag and drop {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/World/DefaultWorld/GenericWorldPP_Default.et|GenericWorldPP_Default.et}} in the world.

'''Post-process Entities''' are used for many effects:

Typical PP effects:

* SSR - Screen space reflection * SSDO - Screen space diffuse occlusion * GodRays - Fog effect (screen space) * UnderWater - Effect for underwater scenes * HBAO - Screen space Ambient Occlusion * Rain Effect - Rain effects in the scene. * PPAA - Antialiasing postprocess * HeightmapAO - Voxel ambient occlusion used for trees and rocks * HDR - Camera setting

Sorting order for basic PP:

* 0 = SSR * 1 = Godrays * 2 = UnderWater * 3..13 = free for game usage * 14 = SSDO * 15 = HBAO * 16 = HDR * 17 = PPAA

=== Weather ===

In the '''Resource Browser''', search "WeatherM" to drag and drop a '''TimeAndWeatherManager.et''' entity in the world.

Set the weather by opening the '''Weather Editor''' by its icon in the main toolbar. Load the weather state machine config ('''WeatherStates.conf''') and confirm by clicking OK.

{{Feature|important| Be sure to properly set geoposition! {{{!}} class{{=}}"wikitable" ! ! Latitude ! Longitude {{!}}- {{!}} + {{!}} North {{!}} East {{!}}- {{!}} - {{!}} South {{!}} West {{!}}} }}

=== Local Environment Probe ===

In the '''Create''' tab, search for "env" to drag and drop an '''EnvironmentProbeEntity''' in the world.

This is used to capture local reflection / diffuse.

=== Suggested Default Prefabs === These are suggested default prefabs to use for a simplistic setup of your terrain. Use instead of the base entities above.

{| class="wikitable" |+ Base World (Terrain) |- ! Prefab !! Notes |- | PreloadManager.et || Preloads prefabs that will be used often, such as, Character_US_AR.et |- | Lighting_Default.et || Use in place of GenericWorldLightEntity. Contains default settings. |- | SCR_CameraManager.et || Sets up camera system. Without it, things will break, such as 3rd person sprint camera. |- | MapEntity.et || Sets up map for players to use. Requires topography geometry data and satellite image. |- | GenericWorldPP_Default.et || Use in place of GenericWorldPPEffect. Contains default settings. |- | FogHaze_Default.et || Use in place of GenericWorldFogEntity. Contains default settings. |- | TimeAndWeatherManager.et || Modifies weather settings. |- | ProjectileSoundsManager.et || Sets up max audible distances for subsonic/supersonic projectiles. Sets up additional .acp files. |- | AmbientSounds_Everon.et || Creates a bunch of ambient wildlife sounds. |- | RadioBroadcastManager.et || Manages radio music broadcasts. Contains music start times and DJ times. |- | ForestSyncManager.et || Manages replication for forests when forest destruction is enabled for MP. |- | DestructionManager.et || Manages destruction. |- | MPDestructionManager.et || Manages replication for destruction for MP. |- | EnvProbe_Default.et || Use in place of EnvironmentProbeEntity. Contains default settings. |- | SoundWorld_Base.et || |- | MusicManager_Base.et || Sets up cycle of background music. |}

== Sculpting ==

Pick the '''Terrain Tool''' (mountains icon) in the toolbar.

Make sure to select the '''Terrain Tool''' tab.

=== Heightmap Import ===

In the '''Manage''' tab, click '''Import height map…''' to import a png heightmap.

=== First Editing ===

On heightmap's first editing, the '''Set normal map options and generate normal map''' appears; click on "OK" to apply its default settings, then confirm the following popup.

=== Terrain Tool ===

On the top of the tab are four tabs: {{Wiki|TODO|Add links}} * Manage * Sculpt * Paint * Info & Diags

Use the '''Sculpt''' tools to extrude, dig, sculpt the ground. See its documentation to know the usage of each section.

Use the '''Paint''' tools to set surfaces. <!-- Painting for the first time will show this popup. -->

{{Feature|informative| To add roads, powerlines, rivers, see: * [[Arma Reforger:World Editor: Forest Generator|Forest Generator]] * [[Arma Reforger:World Editor: Lake Generator|Lake Generator]] * [[Arma Reforger:World Editor: Powerline Generator|Powerline Generator]] * [[Arma Reforger:World Editor: Prefab Generator|Prefab Generator]] * [[Arma Reforger:World Editor: Road Generator|Road Generator]] * [[Arma Reforger:World Editor: Wall Generator|Wall Generator]] }}

{{GameCategory|armaR|Modding|Official Tools|Workbench|Tutorials}}
guvxfuuim0pebvv6epp4kjlgod8vw9g

# Arma Reforger:World Editor: Powerline Generator Tutorial

5050
32749
370941
322176
2025-02-26T12:31:53Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370941
wikitext
text/x-wiki
{{Wiki|TODO|Add more cases.}} == Junction Creation ==

A main polyline will become joined by a secondary one; here is how to proceed.

=== Main Polyline ===

The main polyline must have at least 3 points (start, end, and middle one(s)) so a middle point can be used as an anchor for the secondary polyline.

* Define a '''Junction Pole''' in the main polyline (see above) Click on the main polyline's point to become anchor * At the bottom of the Vector Tool tab, click "set class" on Junction Data (do not set any additional information in there)

=== Secondary Polyline ===

* Draw the other polyline that will be connected to the main one * Define the power line poles (especially the '''end pole''' definition is needed to connect to the main polyline) * Tick "snap to anchors" in the Vector Tool tab and set the "Anchor snap distance" to at least 1 * Drag and snap the extremity of the secondary polyline to the main polyline's defined anchor

''Et voilà!'' The secondary polyline is connected to the main one, using the main one's Junction Pole definition.

{{GameCategory|armaR|Modding|Official Tools|Workbench|World Editor Generators|Tutorials}}
7zvn5hfyzgmbe0j7vrkaxcojjjjpk7l

# Arma Reforger:World Editor: Forest Generator

5050
32747
349670
349625
2023-11-18T20:29:33Z
Lou Montana
10739
Add full Prefabs path, Add performance tip
349670
wikitext
text/x-wiki
{{TOC|side}} A '''Forest Generator''' is a generator creating entities in an area defined by a Shape.

Forest generators can be found in the Resource Browser in {{hl|ArmaReforger > Prefabs > WEGenerators > Forest}} and are prefixed with {{hl|FG_}} for '''F'''orest '''G'''enerator.

{{Feature|informative| * While a forest generator focuses on forests, it can actually generate any kind of entity defined in its {{Link|#Forest}} setting (can e.g be used for rocks on seabed, etc) * There can be multiple Forest Generators per defined area. }}

== Requirements ==

* A Shape (polyline, spline) defining an area (see {{Link|Arma Reforger:World Editor: Vector Tool|Vector Tool}}) ** Said area can be defined by either a polyline or a spline, but the spline will be considered a polyline (and not consider its curves, only its points) ** All shapes are considered "closed" ** At least three points are required * A forest generator entity as a '''direct child''' to this shape.

== Options ==

=== Obstacles ===

==== Avoid Objects ==== Avoid objects - the trace check is a 10cm cylinder (for trees mostly) {{Feature|informative|This setting is performance hungry for it does a trace for every tree to be created. For the best performances, uncheck it whenever possible.}}

==== Avoid Roads ==== Avoid roads, respecting their clearance setting

==== Avoid Rivers ==== Avoid rivers, respecting their clearance setting

==== Avoid PowerLines ==== Avoid power lines, respecting their clearance setting

==== Avoid Tracks ==== Avoid tracks, respecting their clearance setting

==== Avoid Lakes ==== Avoid lakes <!-- ==== Avoid Land ==== Avoid land

==== Avoid Ocean ==== Avoid ocean

==== Avoid Land Ocean Offset ==== Land/Ocean separation offset --> ==== Regenerate By Obstacle Changes ==== Entirely regenerates if a shape obstacle (listed and checked above) is added/(re)moved in the area

=== Generation ===

==== Seed ==== Seed used by the random generator of this forest generator

==== Allow Partial Regeneration ==== Allow partial forest regeneration, regenerates the whole forest otherwise

==== Regenerate Entire Forest ==== Click to regenerate the entire forest {{Feature|informative|This is a "button-like" checkbox, used to fix minor inconveniences due to partial regeneration.}}

=== Debug ===

==== Print Area ==== Print the area of the forest generator polygon

==== Print Entities Count ==== Print the count of entities spawned by this forest generator

==== Print Performance Details ==== Print advanced performance measurements

==== Draw Debug Shapes ==== Draw general debug shapes

==== Draw Debug Shapes Obstacles ==== Draw obstacles debug shapes

==== Draw Debug Shapes Rectangulation ==== Draw rectangulation debug shapes

==== Draw Debug Shapes Regeneration ==== Draw partial regeneration debug shapes

==== Entities Follow Terrain On Shape Move ==== Make entities follow terrain level on shape move (keeping their relative Y)

=== Forest ===

Forest's content is defined here - which entity types to spawn, what density, etc.

==== Levels ==== Forest generator levels to spawn in this forest generator polygon

==== Clusters ==== Forest generator clusters to spawn in this forest generator polygon

==== Global Outline Scale Curve ==== Curve defining general outline scaling; from inside (left, forest core) to outside (right, forest outline)

==== Global Outline Scale Curve Distance ==== Distance from shape over which the scaling occurs

== Levels ==

Levels define three tree levels: * Top level - tall trees * Bottom level - trees growing below top level * Outline level - forest's border trees

=== Top Level ===

=== Bottom Level ===

=== Outline Level ===

An outline can be one of two types: * Small * Medium

== Clusters ==

Clusters are groups of entities to be created within the forest's surface, but outside of the outline area. They allow to define various generators with the following properties:

* type(s) of generated objects ** min and max scale ** model ** number of models count ** min and max models placement radius * their {{Color|blue|density}} (in {{Color|darkgreen|cluster}} / {{Color|orange|hectare}} or {{Color|darkgreen|C}}{{Color|blue|DENS}}{{Color|orange|HA}}) * enabled or not

A cluster can be of two types: * Circle * Strip

=== Options ===

==== Uncategorised ====

===== Objects ===== Define which tree groups should spawn in this cluster

===== Min CDENSHA ===== The minimum density of the filling in number of clusters for hectare

===== Max CDENSHA ===== The maximum density of the filling in number of clusters for hectare

===== Generate ===== Generate this cluster or not

==== Circle ====

==== Strip ====

===== Max X Offset ===== Offset that is applied to generated objects to avoid seeing the exact shape of the curve

===== Max Y Offset ===== Offset that is applied to generated objects to avoid seeing the exact shape of the curve

===== Frequency ===== Defines how many times should the curve repeats for this strip

===== Amplitude ===== Defines the maximum extent of the curve

{{GameCategory|armaR|Modding|Official Tools|World Editor Generators}}
e3can5w3faebxgmbeew59ynxia6v9kg

# Arma Reforger:World Editor: Lake Generator

5050
32751
349646
322197
2023-11-17T19:14:56Z
Lou Montana
10739
Page filling
349646
wikitext
text/x-wiki
{{TOC|side}} A '''Lake Generator''' is a generator drawing a lake defined by a Shape.

Lake generators can be found in the Resource Browser in {{hl|ArmaReforger > Prefabs > WEGenerators > Water > Lake}} and are prefixed with {{hl|LG_}} for '''L'''ake Generator.

== Requirements ==

* A Shape (polyline, spline) defining the lake's perimeter (see {{Link|Arma Reforger:World Editor: Vector Tool|Vector Tool}}) ** Said shape can be either a polyline or a spline, but the spline will be considered a polyline (and not consider its curves, only its points) ** All shapes are considered "closed" ** At least three points are required ** It is recommended to not "cross" the shape's line unless having visual glitches (upside-down lake surface) is the wanted effect * A lake generator entity as a '''direct child''' to this shape.

== Options ==

=== Unsorted ===

==== Material Name ==== Water material

==== Surface Material Name ==== Water surface material

==== Physics Layer ==== Interaction layer of this water body

==== Reverse Point Order ==== Reverse winding order of the generated mesh - used if points are not in clockwise order

==== Flatten By Bottom Plane ==== Place the lake's surface at the lowest point's altitude; otherwise the highest

==== Geometry As OBB ==== Generate physics geometry as an OBB (Object Bounding Box, a "brick") instead of exact polyline shape

==== Min Depth ==== Min depth of lake for physics geometry

==== Water Surface Offset ==== Water surface offset for physics geometry

==== Shore Wetness ==== Enable shore wetness

==== Is Lake ==== Identify the purpose of this water body (e.g a water-filled sink is not a lake)

{{GameCategory|armaR|Modding|Official Tools|World Editor Generators}}
71lfy62ojjxucnqrshx5iixntgscftt

# Arma Reforger:World Editor: Power Line Generator

5050
32748
349635
349633
2023-11-16T17:55:45Z
Lou Montana
10739
Add description
349635
wikitext
text/x-wiki
{{TOC|side}} {{TOC|side}} A '''Power Line Generator''' is a generator creating a power line (cables and poles) along a shape.

== Requirements ==

* A Shape (polyline, spline) defining the power line's path (see {{Link|Arma Reforger:World Editor: Vector Tool|Vector Tool}}). * A power line generator entity as a '''direct child''' to this shape.

== Prefabs ==

Road Generator Prefabs can be found in {{hl|Data\Prefabs\WEGenerators\Powerline}}.

== Options ==

=== Pole Setup ===

There are four pole types:

* Start Pole - the pole type that starts it all * Default Pole - the standard pole that will run the distance between Start Pole and End Pole * End Pole - the pole that ends the power line * Junction Pole - the pole that connects to another powerline

==== Distance ==== Defines the expected distance between poles.

==== Default Pole ==== Defines the default pole's entity.

==== Start Pole ==== Defines the start pole's entity.

==== End Pole ==== Defines the end pole's entity.

==== Default Junction Pole ==== Defines the junction pole's entity.

==== Rotate 180 Degree Yaw Start Pole ==== Rotates the start pole 180° to "face" the other poles.

==== Rotate 180 Degree Yaw End Pole ==== Rotates the end pole 180° to "face" the other poles.

==== Clearance ==== Defines the minimum distance from the polyline for other objects to be generated ("empty space" around poles line).

=== Randomisation ===

==== Random Pitch Angle ==== Defines the angle randomization (in 0..180° range) of pitch - "rolling towards the back".

==== Random Pitch On Both Sides ==== Makes the Random Pitch Angle go both sides (forward and back), effectively doubling the range (-180..+180°)

==== Random Roll Angle ==== Defines the angle randomization (in 0..180° range) of roll - "rolling towards the right".

==== Random Roll On Both Sides ==== Makes the Random Roll Angle go both sides (left and right), effectively doubling the range (-180..+180°)

==== Apply Pitch And Roll Default ==== Applies the Pitch and Roll settings to the default pole.

==== Apply Pitch And Roll Start ==== Applies the Pitch and Roll settings to the start pole.

==== Apply Pitch And Roll End ==== Applies the Pitch and Roll settings to the end pole.

=== Power Lines ===

==== Powerline Material ==== Defines the power line cable material to be used between poles.

=== Debug ===

==== Draw Debug Shapes ==== Used to display debug shapes on generation.

=== Unsorted ===

==== Color ==== Defines the line's color.

{{GameCategory|armaR|Modding|Official Tools|World Editor Generators}}
48ibmf65km3766nh7y8vlz3e64cya44

# Arma Reforger:World Editor: Prefab Generator

5050
32750
369595
349675
2024-09-26T15:46:51Z
Lou Montana
10739
Text replacement - "bellow" to "below"
369595
wikitext
text/x-wiki
{{TOC|side}} A '''Prefab Generator''' is a generator creating entities on a line defined by a Shape.

Prefab generators can be found in the Resource Browser in {{hl|ArmaReforger > Prefabs > WEGenerators}} (mostly in the {{hl|Bushline}} directory), and are prefixed with {{hl|PG_}} for '''P'''refab '''G'''enerator (thus conflicting with {{Link|Arma Reforger:World Editor: Power Line Generator|'''P'''ower line '''G'''enerator}}).

{{Feature|informative|To generate entities more regularly, see {{Link|Arma Reforger:World Editor: Wall Generator|Wall Generator}}.}}

== Requirements ==

* A Shape (polyline, spline) defining the wall's's trajectory (see {{Link|Arma Reforger:World Editor: Vector Tool|Vector Tool}}) ** At least two points are required * A prefab generator entity as a '''direct child''' to this shape.

== Options ==

=== Unsorted ===

==== Prefab Names ==== Prefab list

==== Weights ==== Prefab weights - the higher the more chance for the Prefab to spawn

==== Only To Vertices ==== If checked prefabs are placed only to vertices

==== Distance ==== Distance between spawned assets along the spline/polyline

==== Align With Shape ==== If checked prefabs are aligned with the shape

==== Use X As Forward ==== Only when aligning with shape

==== Flip Forward ==== Flip forward

==== Offset Right ==== How much we offset from center to the side

==== Offset Variance ==== How much offset variability we want in meters when using offset from the center

==== Gap ==== Gap from the centerline

==== Random Spacing ==== Random Spacing Offset

==== Offset Up ==== How much we offset in world up vector

==== Offset Forward ==== Forward offset

==== Perlin Dens ==== Prefab spawn density uses Perlin distribution

==== Perlin Threshold ==== Spawns prefabs if perlin value is above this threshold

==== Perlin Asset Distribution ==== Prefab spawn type uses Perlin distribution. Prefabs in the prefab array are stacked up from lower to higher indicies on the Y axis

==== Perlin Size ==== Prefab size uses Perlin

==== Perlin Frequency ==== Perlin frequency, higher values mean smoother transitions

==== Perlin Seed ==== Perlin seed

==== Perlin Amplitude ==== Perlin Amplitude

==== Perlin Offset ==== Perlin Phase Offset

==== Perlin Throw Away ==== Disables asset generation below perlin threshold

==== Draw Debug ==== Draw developer debug

{{GameCategory|armaR|Modding|Official Tools|World Editor Generators}}
2q99gpeu9gxf6w2w6e7mlfocfzjl0j4

# Arma Reforger:World Editor: River Generator

5050
38007
349643
2023-11-17T19:01:17Z
Lou Montana
10739
Page creation
349643
wikitext
text/x-wiki
{{TOC|side}} A '''River Generator''' is a generator drawing a river defined by a Shape.

River generators can be found in the Resource Browser in {{hl|ArmaReforger > Prefabs > WEGenerators > Water > River}} and are prefixed with {{hl|R_}} for '''R'''iver Generator (the {{hl|RG_}} prefix being already used by {{Link|Arma Reforger:World Editor: Road Generator|Road Generator}}).

== Requirements ==

* A Shape (polyline, spline) defining the river's path (see {{Link|Arma Reforger:World Editor: Vector Tool|Vector Tool}}) ** Said shape can be either a polyline or a spline, but the polyline cannot be closed ** At least two points are required * A river generator entity as a '''direct child''' to this shape.

== Options ==

=== River ===

==== Width ==== River's base width {{Feature|informative|Note that this width is the ''possible'' water surface width; the ''visible'' water surface width will be less due to partial hiding by terrain banks.}}

==== Spline Offset Up ==== Vertical offset of the generated mesh from the spline

==== Reverse Flow ==== Invert texture coordinates to make the river flow the other direction

==== Material ==== The material used for the river's surface

==== Clearance ==== River's clearance ("empty space around it" for e.g Forest Generator to not plant trees there)

==== Shore Wetness ==== Enable shore wetness

=== Physics ===

==== Surface ==== Water surface game material

==== Physics Layer ==== Interaction layer of the river water body

==== Geometry As OBB ==== Generate physics geometry as an OBB (Object Bounding Box, a "brick") instead of exact polyline shape <!-- might not be true {{Feature|informative|This is recommended for North-South or East-West oriented rivers.}} -->

==== Min Depth ==== Min depth of river for physics geometry

==== Water Offset ==== Water surface offset for physics geometry

{{GameCategory|armaR|Modding|Official Tools|World Editor Generators}}
olc18vx5taeiwue3ifyrci8szh4v22h

# Arma Reforger:World Editor: Road Generator

5050
32752
349632
349631
2023-11-16T17:31:58Z
Lou Montana
10739
Fix
349632
wikitext
text/x-wiki
{{TOC|side}} A '''Road Generator''' is a generator creating a road along a spline. It can also shape the terrain (extrude or dig) around it to make it follow the spline.

== Requirements ==

* A spline defining the road's path - open or closed (see {{Link|Arma Reforger:World Editor: Vector Tool|Vector Tool}}).{{Feature|important|Polylines are '''not''' supported.}} * A road generator entity as a '''direct child''' to this shape. * A road entity as a direct child to this generator.

The road generator entity defines the shape's behaviour (terrain sculpting, road's width etc).<br> The road entity defines the road surface (material, etc).

== Prefabs ==

Road Generator Prefabs can be found in {{hl|Data\Prefabs\WEGenerators\Roads}}.

== Road Generator Options ==

=== Terrain ===

==== Adjust Height Map ==== If enabled, adjust terrain height map to road

==== Adjust Height Map Priority ==== Priority of terrain heightmap adjust

==== Falloff Start Width ==== Distance between road edge and start of fall-off

==== Road Falloff Width ==== Width of the road fall-off

=== Road ===

==== GenerateRoad ==== If enabled, regenerate road on shape modification

==== Road Clearance ==== Width of the clearance by the road

==== Road Width ==== Width of the road

== Road Options ==

=== Unsorted ===

==== Spline Points ==== Spline points used for road generation, synchronised by the Road Generator

==== Is Closed Spline ==== Is the road a loop, '''not''' synchronised by the Road Generator

==== Type ==== Used by map export

==== Width ==== Road width

==== V Scale ==== Texture v-coordinate scaling (0.5 = texture stretched to 200% its normal length, 2.0 = 50%, etc)

==== Beginning Piece ==== Beginning variant

==== Ending Piece ==== Ending variant

==== Random Seed ==== Used to randomise road's aspect

==== Force Full Length ==== Ensures that the road mesh is generated along the whole spline. It may be achieved by stretching the v-coordinate (if both end pieces are set), or "cutting" it at any value (otherwise)

==== Mid Piece Sequence ==== For materials with multiple middle piece versions: specifies how middle piece sequence should be generated

==== Road Sort ==== Road's render order within the same material: does not override material's render order!

==== Mat Sort Bias ==== Bias to be added to the material's sort bias - can be used to override that order {{Feature|warning|Avoid using this as much as possible.}}

{{GameCategory|armaR|Modding|Official Tools|World Editor Generators}}
7qqi42z3oqyebpmm4ai5i0swu6eocwq

# Arma Reforger:World Editor: Wall Generator

5050
32753
378050
349688
2026-01-29T20:44:41Z
Lou Montana
10739
Wall generator now supports splines
378050
wikitext
text/x-wiki
{{TOC|side}} A '''Wall Generator''' is a generator creating entities on a line defined by a Shape.

Wall generators can be found in the Resource Browser in {{hl|ArmaReforger > Prefabs > WEGenerators}} (mostly in {{hl|Walls}} and {{hl|Pavements}}) and are prefixed with {{hl|WG_}} for '''W'''all '''G'''enerator.

{{Feature|informative| While a wall generator focuses on walls, it can actually generate any kind of entity defined in its properties (can be used to spawn elements regularly, while {{Link|Arma Reforger:World Editor: Prefab Generator|Prefab Generator}} may be more adapted for randomness e.g bush lines) }}

== Requirements ==

* A Shape (polyline, spline) of at least two points defining the wall's's trajectory (see {{Link|Arma Reforger:World Editor: Vector Tool|Vector Tool}}) * A wall generator entity as a '''direct child''' to this shape.

== Options ==

=== Middle Object ===

==== Middle Object ==== Middle Object Prefab

==== Place Middle At Vertex ==== Place middle prefab at vertex

==== Place Middle At Vertex Only ==== Place middle prefab at vertex only

==== Middle Object Pre Padding ==== Middle object pre-padding, essentially a gap between previous prefab and this

==== Middle Object Offset Right ==== Middle object offset to the side

==== Middle Object Post Padding ==== Middle object post-padding, essentially a gap between this asset and the next one

==== Middle Object Offset Up ==== Middle object offset up/down

=== First Object ===

==== First Object ==== First Object Prefab

==== First Object Pre Padding ==== First object pre-padding, essentially a gap between previous vertex first object

==== First Object Post Padding ==== First object post-padding, essentially a gap between first object and the following one

==== First Object Offset Right ==== First object offset to the side

==== First Object Offset Up ==== First object offset up/down

=== Last Object ===

==== Last Object ==== Last Object Prefab

==== Last Object Pre Padding ==== Last object pre-padding, essentially a gap between previous vertex first object

==== Last Object Post Padding ==== Last object post-padding, essentially a gap between first object and the following one

==== Last Object Offset Right ==== Last object offset to the side

==== Last Object Offset Up ==== Last object offset up/down

=== Global ===

==== Pre Padding ==== Global object pre-padding, essentially a gap between previous prefab and this

==== Post Padding ==== Allow pre-padding on first wall asset in each line segment

==== Overshoot ==== Allow overshooting the segment line by this amount when placing assets

==== Offset Right ==== Objects offset to the side

==== Offset Up ==== Object offset up/down

==== Wall Groups ==== Contains wall groups which group Wall/Weight/Pre Padding/Post Padding

=== Other ===

==== Pre Pad First ==== Allow pre-padding on first wall asset in each line segment

==== Exact Placement ==== Copy the polyline precisely while sacrificing wall assets contact

==== Start From The End ==== Start the wall from the other end of the polyline

==== Use X As Forward ==== Rotate object so that its X axis is facing in the direction of the polyline segment

==== Rotate 180 ==== Rotate object 180° around the Yaw axis

==== Use For Very Small Objects ==== If you want to generate objects smaller than 10 centimetres

==== Debug ==== Draw developer debug

==== Snap To Terrain ==== Whether or not walls should be snapped to the terrain

{{GameCategory|armaR|Modding|Official Tools|World Editor Generators}}
7u1kkhkv60rsia75j1biz1ux21il6id

# Arma Reforger:Floaters Finder Plugin

5050
47017
376643
376641
2025-11-02T20:39:22Z
Lou Montana
10739
Fix
376643
wikitext
text/x-wiki
{{Infobox/WorkbenchPlugin |name= Floaters Finder |editor= world |descr= Detect floating entities that do not belong in the air |file= {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_FloatersFinderPlugin.c}} |shortcut= {{Controls|Ctrl|Alt|PageUp}} }} '''Floaters Finder''' is a plugin that detects '''''possibly''''' misplaced entities:

== Parameters ==

=== Search ===

* '''Active Layer Only''': only search in the currently active layer * '''Search For Entities Below Terrain''': check for entities entirely below terrain by bounding box vertices' altitude * '''Search For Vegetation''': look for misplaced vegetation (trees and bushes) floating above or below normal level

=== Angle ===

* '''Use Prefab Angles''': use the Prefab's random angles as acceptable margin, otherwise use '''Max Tree Angle''' below * '''Max Tree Angle''': maximum allowed angle within which a tree is not considered "fallen"

=== Vertical Offset ===

* '''Check Above Entities Surface''': check entity's altitude from '''entities''' below it (twice slower) * '''Use Prefab Vertical Offset''': use the Prefab's vertical offset range, otherwise use '''Min/Max Vertical Offset''' below * '''Min Vertical Offset''': minimum (included) vertical offset * '''Max Vertical Offset''': maximum (included) vertical offset * '''Check Below Water''': check for items being below water level (water = ocean only for now); the entity is selected if under water, no matter the offset

=== Performance ===

* '''Camera Search Radius''': search radius around the camera in metres - 0 = all entities * '''Show Search Radius Sphere''': show a sphere indicating the search radius * '''Max Selected Entities''': maximum number of selected entities in World Editor * '''Trace Vegetation Precisely''': trace only checks for the vegetation bounding box's full height, allowing it to be under a bridge but maybe missing a small tree being in a big rock (need Search/'''Search For Vegetation''') * '''Trace Origin Distance''': trace origin's distance in metres from above the entity to determine if it is below another entity AND '''Trace Vegetation Precisely''' above is unchecked

=== Output ===

* '''Output Findings To File''': write a file with links to all findings * '''Use Web Prefix''': prefix file links with the https prefix

== See Also ==

* {{Link|Arma Reforger:Snap And Orient Entities To Terrain Plugin}}

{{GameCategory|armaR|Modding|Official Tools|World Editor Plugins}}
feh61bkcjcls3jwy8shtg24o5dnng4s

# Arma Reforger:FPS Diagnostic Plugin

5050
49333
376642
2025-11-02T20:35:16Z
Lou Montana
10739
Page creation thanks to tanin69
376642
wikitext
text/x-wiki
{{TOC|none}} {{Infobox/WorkbenchPlugin |name= FPS Diagnostic |editor= world |descr= Generate an FPS heatmap to detect terrain areas with performance issues |shortcut= {{Controls|Ctrl|Alt|Shift|F}} |file= {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/BIKI/Helpers/SCR_BIKIWeaponHelper.c}} }} The '''FPS Diagnostic''' plugin is an advanced {{Link|Arma Reforger:World Editor}} plugin designed to analyse the performance of a terrain. It automatically collects FPS values on a grid of points distributed across the map and generates a visual heatmap from them. This heatmap allows terrain makers to quickly identify areas that suffer from performance drops.

== Main Features ==

* '''Automated Capture:''' The plugin moves the camera over a grid covering the entire terrain, stopping at each point to measure FPS. * '''Multi-Angle Analysis:''' At each grid point, it can take measurements from several camera orientations (by default, the four cardinal directions) for a more comprehensive analysis. * '''Heatmap Generation:''' The result is an image (.dds file) where colours represent performance levels. * '''Accurate Measurement Mode:''' It can run measurements in "Game Mode" (rather than in Workbench) to avoid the performance overhead of the Workbench and obtain results closer to the player experience. * '''High Configurability:''' The plugin offers numerous options to fine-tune the accuracy, resolution, appearance of the heatmap, and capture behaviour.

== Parameters ==

=== Camera ===

* '''Position offset''': defines the camera's position offset from the terrain or ocean surface. By default, it is placed 7.5 meters above. * '''Analyse On Ocean''': points located over the ocean will be included in the analysis, otherwise they are ignored. * '''Randomise Positions''': the order of capture points is random. Otherwise they are processed sequentially, which can benefit from pre-loading areas. * '''Orientations''': allows to define a list of orientations (Pitch, Yaw, Roll) for the camera at each point. If left empty, the plugin uses 4 default angles (North, East, South, West with a pitch of -10°). * '''Start Delay''': waiting time (in seconds) before the capture begins, to allow the game to load correctly and switch to fullscreen if necessary. * '''Scene Pause''': pause time (in seconds) after each camera movement to let the scene stabilise before measuring FPS.

=== Heatmap ===

* '''Heatmap Colour Mode''': chooses the colour style of the heatmap: ** Greyscale: Black (low FPS) to White (high FPS). ** Thermal: Blue (low) &rarr; Green &rarr; Red (high). ** Alpha: Transparent (low) to White (high). * '''Heatmap Value Inversion''': inverts the colour scale (e.g. in Greyscale black will represent the highest FPS, etc). * '''Heatmap Max Value Mode''': determines the FPS value considered as the maximum for the colour scale. This helps to normalise the heatmap and eventually highlight extreme values (see below). * '''Heatmap Highlight Values Above Max''': if an FPS value exceeds the maximum defined above, it will be highlighted with a specific colour (e.g. red in Greyscale). * '''Heatmap Definition''': defines the resolution of the analysis grid (e.g. 64 for a 64x64 grid); a higher definition gives a more precise heatmap but significantly increases the capture time. * '''Heatmap Resolution Factor''': multiplies the size of the final image. For example with a factor of 2, each data point will occupy 4 pixels (2&times;2) in the image.

=== Mode ===

* '''Use Game Mode''': strongly recommended - launches the capture in game mode for more reliable FPS measurements (less Workbench overhead). * '''Use Fullscreen''': if Use Game Mode above is enabled, the capture is done in fullscreen.

=== Misc ===

* '''Open Heatmap''': allows to automatically open the heatmap image and/or its containing folder once the generation is complete. * '''Time Estimate Frequency''': frequency (in seconds) at which the remaining time estimate is refreshed in the console.

=== Debug ===

* '''Use Fake Data''': uses random FPS data instead of real measurements in order to quickly test the heatmap configuration without waiting for a long capture to finish.

== Typical Usage ==

# Load the world to analyse. # Launch the '''FPS Diagnostic''' plugin via the Plugins menu or the shortcut. # Configure the settings in the dialog box. For a first pass, the default values are a good starting point except for the four camera angles; start with only one (north) at first. Consider using Game Mode. # A second dialog box appears with an estimate of the total capture time. Confirm to launch. # '''Do not touch the computer'''. The plugin will take control. Workbench window losing window will cancel the capture. # Once finished, the plugin generates the .dds heatmap file in your project's main folder and opens it if the option was checked. # Analyse the image: "cold" (or dark, depending on the mode) colour areas indicate performance issues to investigate.

{{GameCategory|armaR|Modding|Official Tools|World Editor Plugins}}
263fykuj7iw75g969jblxtmgf5mzuwh

# Arma Reforger:Scenario Framework Update Plugin

5050
38192
353227
353226
2024-03-13T13:56:15Z
Lou Montana
10739
Add version
353227
wikitext
text/x-wiki
{{GVI|armaR|1.1.0}}

With the 1.1.0 update, {{Link|Arma Reforger:Scenario Framework#1.1.0 Changes|huge changes}} were introduced about how AIs and their Waypoints are handled by the Scenario Framework.<br> This results in a backward compatibility impossibility for the scenarios created with a previous version.

This {{Link|Arma Reforger:World Editor}} plugin does the conversion in an automated way, provided its usage steps are respected.

== Usage ==

# Back up your work before loading your world (It is good practice to regularly back up your work whenever you can so you can always go back/fix things when something breaks) # Load the Scenario Framework world to be updated # Navigate to the top bar → Plugins → Update/1.0.0 to 1.1.0 and run phase 1 # Save the world # '''Load the World again''' (important!) # Navigate to the top bar → Plugins → Update/1.0.0 to 1.1.0 and run phase 2 # Save the world again to apply all changes.

The scenario is now 1.1.0-compatible and can be worked on again.

{{Feature|important|Running the plugin on a 1.1.0-compatible scenario is not recommended and its behaviour is undocumented (although it ''should not'' be an issue, no guarantees are offered).}}

{{GameCategory|armaR|Modding|Official Tools|World Editor Plugins}}
5ug2ceiae17ufqucj32sd826nnynhyz

# Arma Reforger:Snap And Orient Entities To Terrain Plugin

5050
47016
369538
2024-09-16T12:43:48Z
Lou Montana
10739
Page creation
369538
wikitext
text/x-wiki
{{Infobox/WorkbenchPlugin |name= Snap and Orient Entities to Terrain |editor= world |descr= Snaps and orients selected entities to terrain (not "ground" below, terrain only) |file= {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_SnapAndOrientToTerrainPlugin.c}} |shortcut= {{Controls|Ctrl|PageDown}} }} '''Snap and Orient Entities to Terrain''' is a plugin adding a shortcut to, as its name implies, snap all selected entities to the terrain. {{Feature|important| This plugin snaps entities to the '''terrain''', not to any surface or another entity. To snap to anything below, use World Editor's {{Controls|Ctrl|Down}} shortcut (this shortcut does not orient objects to the normal, however). }}

== See Also ==

* {{Link|Arma Reforger:Floaters Finder Plugin}}

{{GameCategory|armaR|Modding|Official Tools|World Editor Plugins}}
q9aeseqxctnd9m7gjiojjbg22jcjqtr

# Arma Reforger:Autotest Framework

5050
49328
376472
376469
2025-10-15T14:25:18Z
Lou Montana
10739
Fix wide tables
376472
wikitext
text/x-wiki
{{GVI|armaR|1.6.0}}

The Autotest Framework is a scripted extension of the Testing Framework. It expands the Testing Framework with additional features, such as the execution of the tests via Workbench Plugins, structured test report, CLI argument support, and all the necessary setup to run the tests in the specified environment.

The Autotest Framework allows you to create game feature tests with the minimal setup and less difficulty. You can only execute tests related to what you're working on.

Tests are composed of:

* '''Test group''' groups multiple test suites to be executed. It only serves to organize tests. A test group can contain other test groups. * '''Test suite''' provides API for setting up the test environment. It groups test cases. * '''Test case''' runs the actual test, and provides API for setting up test result and logging.

=== Test Execution: Command Line and Plugins ===

You can execute a test via Workbench plugins or via command line arguments. Both ways allow running a whole test group and test suites, or a single test case.

When you want the game to run automatically, you can start it with special instructions called command line arguments. But when you are working on the game yourself and want to quickly test something while developing, you can use plugins inside the development tool to run tests or other actions more easily. Below you will find parameters for the command line, as well as information on plugins.

==== Command Line ==== {| class="wikitable" ! Parameters ! Values ! Description |- | autotest | * {{hl|ResourceName}} of the <enforce inline>SCR_AutotestGroup</enforce> config file * {{hl|Classname}} of the <enforce inline>SCR_AutotestSuiteBase</enforce> class * {{hl|Classname}} of the <enforce inline>SCR_AutotestCaseBase</enforce> class | Tells the game to run specified tests. |}

==== Script Editor Plugin ==== The Script Editor plugin allows executing of test suites and test cases.

To use it, hover over the class name or the class body, then click '''Plugins''' → '''Run test'''. The World Editor opens to run the test. [[File:WE Test1.png|none|thumb|500px]]

==== World Editor Plugin ==== The World Editor can run tests via the Autotest tool.

To use it, either select the test group config or insert the name of the test suite/test case's class that you want to execute, then click '''Run group''' or '''Run class''' accordingly. [[File:WE Test2.png|none|thumb|500px]]

=== Scripting ===

In this example, assume that you need to write a simple test where you spawn a player character and make him shoot at the AI.

{{Informative|The scripts below are provided as an example to illustrate the overall structure and logic of game feature testing. The example scripts make use of <enforce inline>SCR_TestLib</enforce> helper library which is not accessible in game code at the moment.}}

==== Create the First Test ====

* Create a test suite. <enforce> [BaseContainerProps(category: "Autotest")] class SCR_TEST_CharacterWeaponShootingSuite : SCR_AutotestSuiteBase { override ResourceName GetWorldFile() { // allows us to specify the world the test suite will run in, uses MpTest by default return super.GetWorldFile(); } // you can remove these overrides if you intend to use default values } </enforce>{{Informative|Use the '''Fill from template''' plugin to quickly create a new test.}}

* Add the empty test case. You can insert it using the '''Fill from template''' plugin. <enforce> [Test(suite: "SCR_TEST_CharacterWeaponShootingSuite", timeoutS: 5)] class SCR_TEST_CharacterWeaponShooting_MyTestCase_MyExpectedResult : SCR_AutotestCaseBase { [Step(EStage.Setup)] void Setup() { // void returning methods will execute once }

[Step(EStage.Setup)] bool Setup_Await() { // bool returning methods will keep executing until the method returns true return true; }

[Step(EStage.Main)] bool Execute_DoSomething() { Print("Execute_DoSomething"); // return false; // uncomment this and the test will keep executing until it timeouts return true; }

[Step(EStage.Main)] void Execute_Assert() { Print("Execute_Assert");

// assert state of the test environment in separate method // if the state is different than expected SetResult of the test to failure. if (false) { SetResult(SCR_AutotestResult.AsFailure("Test failure due to some reason")); return; }

if (true) { SetResult(SCR_AutotestResult.AsFailure("Test failure due to other reason")); return; }

SetResult(SCR_AutotestResult.AsSuccess()); } } </enforce> * Implement the testing logic. <enforce> class SCR_TEST_CharacterWeaponShootingCase : SCR_AutotestCaseBase { static string CHARACTER_PREFAB = "{26A9756790131354}Prefabs/Characters/Factions/BLUFOR/US_Army/Character_US_Rifleman.et"; }

[Test(suite: "SCR_TEST_CharacterWeaponShootingSuite", timeoutS: 5)] class SCR_TEST_CharacterWeaponShooting_PlayerShoots_AiDies : SCR_TEST_CharacterWeaponShootingCase { SCR_ChimeraCharacter m_PlayerCharacter; SCR_ChimeraCharacter m_TargetCharacter;

[Step(EStage.Setup)] void Setup_CreateCharacters() { vector spawnPosPlayer = "120 1 120"; vector spawnPosTarget = spawnPosPlayer + "0 0 2.5";

// Entities created via SCR_TestLib.Spawn* methods will be automatilly deleted before subsequent tests will run m_PlayerCharacter = SCR_ChimeraCharacter.Cast(SCR_TestLib.SpawnPlayer(CHARACTER_PREFAB, spawnPosPlayer)); m_TargetCharacter = SCR_ChimeraCharacter.Cast(SCR_TestLib.SpawnEntity(CHARACTER_PREFAB, spawnPosTarget)); }

[Step(EStage.Main)] bool Execute_DoFire() { // this will be executed every frame until the method returns true SCR_TestLib.SetPlayerLookAtEntity(m_TargetCharacter); SCR_TestLib.SetActionValue(SCR_TestLib.ACTION_FIRE, Math.RandomInt(0, 2));

return !SCR_TestLib.IsCharacterAlive(m_TargetCharacter); }

[Step(EStage.Main)] void Execute_Assert() { // for readability purposes it's the best to do all assertions in separate method // this test is pretty simple, if it reached this stage it was completed successfully. SetResult(SCR_AutotestResult.AsSuccess()); } } </enforce> * In the World Editor, open any world. * Hover over the test case or the test suite class, and click '''Plugins''' → '''Run test'''. The tests will run, and when finished, the dialog window will appear:\

[[File:Test Success Window.png|none|thumb|600px]]

=== Best Practices ===

==== Naming ==== Follow the next rules when naming test suites and test cases: {| class="wikitable" ! ! Test Suite ! Test Case |- | '''Name Template''' | SCR_TEST_TestedFeatureSuite | SCR_TEST_TestedFeature_TestedCase_ExpectedResult |- | '''Example''' | SCR_TEST_CharacterLocomotionSuite | SCR_TEST_CharacterLocomotion_RunsForward_ReachesDestination |} Such a naming allows easier and faster navigating through logs and debugging in case of a failed test.

==== Stateful and Simple tests ==== In this framework, you should not write your tests as free function that is not a part of any class. Instead, every test should be written as a class, and this class must inherit from <enforce inline>SCR_AutotestCaseBase</enforce>.

If you use simple functions instead, your tests will not be able to use these features, and the framework may not be able to detect or run your tests correctly.

==== Do's and Don'ts ====

===== Prefix Step Methods ===== {| class="wikitable valign-top" ! Do ! Don't |- | <enforce> class SCR_TEST_MyTest_GoodTestEqualsBetterWorld : SCR_AutotestCase { void CreateCharacter() { // ... }

void CreateCar() { // ... }

[Step(EStage.Setup)] void Setup_CreateScene() { CreateCharacters(); CreateCar(); }

[Step(EStage.Main)] void Execute_Assert() { SetResult(SCR_AutotestResult.AsSuccess()); }

[Step(EStage.TearDown)] void TearDown_ClearScene() { SCR_TestLib.DeleteEntities(); } } </enforce> | <enforce> class SCR_TEST_MyTest_GoodTestEqualsBetterWorld : SCR_AutotestCase { void CreateCharacter() { // ... }

void CreateCar() { // ... }

[Step(EStage.Setup)] void CreateScene() { CreateCharacters(); CreateCar(); }

[Step(EStage.Main)] void Assert() { SetResult(SCR_AutotestResult.AsSuccess()); }

[Step(EStage.TearDown)] void ClearScene() { SCR_TestLib.DeleteEntities(); } } </enforce> |}

'''Use Shared Methods Instead of Shared Steps'''

When creating base test classes, it is better to put common actions and logic into regular helper methods, not as special test steps. Then, in each specific test, you can call these helper methods inside your own test steps. This way, it is clearer what happens in each test and makes your tests easier to understand and fix if something goes wrong. {| class="wikitable valign-top" ! Do ! Don't |- | <enforce> class SCR_TEST_MyTestCase : SCR_AutotestCaseBase { void CreateCharacter() { // spawn characters SCR_TestLib.SpawnPlayer("..", "0 0 0"); SCR_TestLib.SpawnEntity("..", "0 0 0");

// ... more complex logic }

void CreateCar() { // spawn car SCR_TestLib.SpawnEntity("..", "0 0 0");

// ... more complex logic } }

class SCR_TEST_MyTest_GoodTestEqualsBetterWorld : SCR_TEST_MyTestCase { // you can immediately see what's happening in the test [Step(EStage.Setup)] void Setup_CreateScene() { CreateCharacters(); CreateCar(); }

[Step(EStage.Main)] void Execute_DoSomething() { // ... } } </enforce> | <enforce> class SCR_TEST_MyTestCase : SCR_AutotestCaseBase { [Step(EStage.Setup)] void Setup_CreateCharacters() { // spawn characters SCR_TestLib.SpawnPlayer("..", "0 0 0"); SCR_TestLib.SpawnEntity("..", "0 0 0");

// ... more complex logic }

[Step(EStage.Setup)] void Setup_CreateCar() { // spawn car SCR_TestLib.SpawnEntity("..", "0 0 0");

// ... more complex logic } }

class SCR_TEST_MyTest_GoodTestEqualsBetterWorld : SCR_TEST_MyTestCase { // you can't see that the test will create some entities without // checking out the parent class

[Step(EStage.Main)] void Execute_DoSomething() { // ... } } </enforce> |}

{{GameCategory|armaR|Modding|Official Tools|World Editor Tools}}
erun842pt329h19hdzrzzzgzk6u4klb

# Arma Reforger:Object Import Tool

5050
49391
378046
378045
2026-01-29T12:00:45Z
Lou Montana
10739
Fix
378046
wikitext
text/x-wiki
{{Infobox/WorkbenchPlugin |name= CSV Object Import |editor= world |descr= A plugin to mass-import terrain objects |file= {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_ObjectImportPlugin.c}} |shortcut= }} The '''CSV Object Import''' {{Link|Arma Reforger:World Editor}} plugin allows users to parse a CSV file to mass-import objects in the currently-selected world layer.

== CSV File Format ==

CSV lines must be formatted the following way: resourceHash posX posY posZ quatX quatY quatZ quatW scale

where: * resourceHash: the ResourceName (or {GUID}) to be placed * posX posY posZ: the relative or absolute (depending on {{hl|Relative Y}} setting) * quatX quatY quatZ quatW: a {{Link|https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation|quaternion}} determining Prefab's angles * scale: the wanted Prefab's scale

{{Feature|important| * Prefab resource name MUST be in double quotes. Single quotes or no quotes '''will''' cause a parsing error. * As of {{GVI|armaR|1.6.0}}, only '''spaces''' are supported as data field separation. * As of {{GVI|armaR|1.6.0}}, the parser expects '''exactly''' nine fields. }}

{{GameCategory|armaR|Modding|Official Tools|World Editor Tools}}
mmfn067wyqa3otbtqoikr7ktvv6l6z7

# Arma Reforger:World Editor: Coords Tool

5050
49349
376785
376781
2025-11-18T20:42:52Z
Lou Montana
10739
Some wiki formatting
376785
wikitext
text/x-wiki
{{TOC|side}} The '''Coords Tool''' is a {{Link|Arma Reforger:World Editor}} tool that allows terrain creators to quickly navigate to specific coordinates and save important locations.

When creating terrains and scenes in {{armaR}}, it is often needed to: * Return to specific locations to check or modify elements * Share precise positions with other team members * Document points of interest or issues to resolve * Test different camera views

The Coords Tool facilitates these tasks by allowing you to: * Save positions with a simple click * Generate shareable links (enfusion:// protocol) * Navigate instantly to coordinates * Keep a history of visited positions

== User Interface ==

[[File:Coords_Tool_Interface.png|thumb|400px|Coords Tool Interface]]

The tool can be accessed through '''Menu''': Tools &rarr; Coords Tool.<br> It consists of three main sections: {{Link|#Coordinates}}, {{Link|#Options}} and {{Link|#Data}}.

=== Coordinates ===

* '''Position''': X, Y, Z coordinates in world space * '''Rotation''': Camera angles (Pitch, Yaw, Roll) in degrees

=== Options ===

* '''Use Web Prefix''': Adds the {{hl|https://enfusionengine.com/api/redirect?to{{=}}}} prefix to generated links, allowing them to be used in web browsers

=== Data ===

* '''Entries''': List of saved positions (most recent entry at the top)

== Usage ==

=== Navigate to Manual Coordinates ===

# Enter the '''Position''' coordinates (X, Y, Z) # Enter the '''Rotation''' (Pitch, Yaw, Roll) if needed # Click '''Go to coords''' # The camera instantly moves to this position

=== Copy Current Position ===

# Position your camera at the desired location # Click '''Copy link to clipboard''' # A link in the format {{hl|<nowiki>enfusion://WorldEditor/...</nowiki>}} is copied to the clipboard # You can share this link with other developers

'''Link format:''' {{hl|<nowiki>enfusion://WorldEditor/worlds/world_name.ent;X,Y,Z;Yaw,Pitch,Roll</nowiki>}} - see {{Link|Arma Reforger:Workbench Links}}.

=== Navigate from Clipboard ===

# Copy an {{hl|enfusion://}} link (received from a colleague or generated previously) to the clipboard (e.g {{Controls|Ctrl|C}}) # Click '''Go to clipboard link''' # The camera moves to this position

'''Accepted formats:''' * {{hl|<nowiki>enfusion://WorldEditor/worlds/...;X,Y,Z;Pitch,Yaw,Roll</nowiki>}} * {{hl|<nowiki>https://enfusionengine.com/api/redirect?to=enfusion://...</nowiki>}} * X,Y,Z;Pitch,Yaw,Roll (simplified format, works across all terrains)

=== Save an Entry to History ===

# Position your camera # Click '''Add entry''' # A new entry is created with: #* An automatic name: Link #X (world_name) #* The complete position link # The entry appears at the top of the '''Entries''' list

'''Using a saved entry:''' # Open the entry in the '''Entries''' list # Copy the content of the '''Link''' field # Click '''Go to clipboard link'''

== Practical Use Cases ==

=== Bug Documentation ===

Problematic position found &rarr; Add entry &rarr; Share link in bug report

=== Collaborative Work ===

* Creator A: Finds a good viewpoint &rarr; Copy link to clipboard &rarr; Sends to Creator B * Creator B: Pastes the link &rarr; Go to clipboard link &rarr; Sees exactly the same view

=== Recurring Test Points ===

Save multiple entries for: * Player spawn point * Main city center * Map boundaries * Problem areas

== Console Messages ==

The tool displays messages in the Workbench console:

{| class="wikitable" ! Message ! Meaning |- | Camera set to Position = X Y Z, Rotation = P Y R | Successful navigation |- | Link copied to clipboard: enfusion://... | Link successfully copied |- | Current position is last log entry | This position is already the last entry |- | String is in invalid format... | Pasted link format is incorrect |- | Error obtaining the link | Error generating the link |}

== Limitations ==

* History is not persistent (lost when Workbench closes) * Coordinates are specific to the currently open terrain (unless simple coordinates are used) * Links only work if the terrain is accessible to the recipient

== Tips ==

* Enable "Use Web Prefix" to create clickable links in web browsers (useful for wikis and documentation) * Entries can be manually renamed for better organisation * Use the simple format X,Y,Z;Pitch,Yaw,Roll for quick annotations in your notes

{{GameCategory|armaR|Modding|Official Tools|World Editor Tools}}
q1c994qalcfpwk8stgwgwm9v0wifh1d

# Arma Reforger:World Editor: Ground Manipulation Tool

5050
32707
350047
322205
2023-11-21T09:16:42Z
Lou Montana
10739
Fix gizmo usage description, Add Place using physics description
350047
wikitext
text/x-wiki
{{TOC|side}} == Usage ==

While clicking on the point gizmo: * holding {{Controls|Ctrl}} while dragging a selection up/down will change its '''elevation''' (altitude) * holding {{Controls|Shift}} while dragging a selection up/down will change its 2D '''rotation''' (direction).

While clicking outside the gizmo: * holding {{Controls|Ctrl}} or {{Controls|Shift}} while dragging a selection will change its '''3D''' rotation.

== Settings ==

=== Snap horizontally ===

Defines the snap steps for horizontal movement on X and Z axes, in meters.

=== Snap vertically ===

Defines the snap steps for vertical movement on Y axis, in meters.

{{Feature|informative|Also applies to ground-level following selection placement.}}

=== Snap rotation ===

Defines the steps for rotation on Y axis.

=== Transform specs ===

==== Snap separately ==== If checked, snaps horizontally/vertically for each selected objects.

If unchecked, acts like one big object.

==== Rotate separately ==== If checked, selected objects will rotate each on their own axis; if not, they will all rotate around the same axis (as one big object).

==== Keep elevation of all ==== If checked, sets elevation like one big object for the selection.

==== Negative elevation ==== If checked, allows for negative elevation value ("object in the ground").

==== Transform children ====

=== Snap to ground === Sets elevation to 0 from the ground.

=== Place using physics ===

{{Feature|informative|This button is inert as of {{armaR}} 1.0.0.}} This button places entities with rigid body to the ground using physical simulation.

{{GameCategory|armaR|Modding|Official Tools|World Editor Tools}}
8vf7rhnqll08qyow47r8hn50nbii2yi

# Arma Reforger:World Editor: Navmesh Tool

5050
32520
322192
322013
2022-05-27T11:39:01Z
Lou Montana
10739
Text replacement - "|Modding|Tools|Official Tools" to "|Modding|Official Tools"
322192
wikitext
text/x-wiki
{{TOC|side}} == Main Interface ==

=== Navmesh ===

Choose a navmesh to display in the viewport

=== Show ===

Select which data to display in the viewport, from: {{Columns|2| * Result * Heightfield * Heightfield Filtered * Compact heightfield * Heightfield regions * Raw contours * Contours * Region connections * Polygons * Detailed Mesh |shrink= y }}

=== Vertical Offset ===

Add a vertical offset to the displayed navmesh; this setting does not impact the actual navmesh, only its on-screen representation

=== Rebuild tile ===

-

=== Rebuild/Regenerate changed tiles ===

-

=== Connect ===

Connect to a navmesh server

=== Disconnect ===

Disconnect from the navmesh server

=== Generate ===

Start navmesh generation

=== Stop Generation ===

Stop the navmesh generation before completion

=== Autosave when done ===

Save the generated navmesh on generation completion

=== Save ===

Save the generated navmesh over the original file

=== Save As ===

Save the generated navmesh in a different file

== See Also ==

* [[Arma Reforger:World Editor: Navmesh Tool Tutorial|World Editor: Navmesh Tool Tutorial]]

{{GameCategory|armaR|Modding|Official Tools|World Editor Tools}}
ezfbhsx0xmsktxkbh6xel5kt8rbo4y1

# Arma Reforger:World Editor: Object Brush Tool

5050
35016
378092
378090
2026-02-12T22:48:30Z
Lou Montana
10739
Fix
378092
wikitext
text/x-wiki
{{TOC|side}}__NOEDITSECTION__ '''Object Brush''' is a scripted {{Link|Arma Reforger:World Editor}} Tool. It allows for quick terrain "painting" with entities, based on the set parameters.

To access it, click the paintbrush icon in World Editor.

== Usage ==

* {{Controls|LMB}} to generate Prefabs in the area * {{Controls|LMB}} and drag to generate Prefabs along mouse movement * {{Controls|Alt|LMB}} then to generate Prefabs along a straight line; {{Controls|Esc}} to cancel * Hold {{Controls|Space}} to delete Object Brush-created entities (works with all control combinations above)

== Settings ==

{{TOC|subtoc |title= |content= * 1. {{Link|#Object Brush}} * 2. {{Link|#Objects Config 2|Objects Config}} * 3. {{Link|#Obstacles}} * 4. {{Link|#Obstacles - Area}} }}

=== Object Brush ===

{| class="wikitable valign-top" ! Name ! Description |- | ==== Radius ==== | Brush's radius |- | ==== Strength ==== | Brush's strength, value being in entity per hectare (100×100m) |- | ==== Scale Fall Off Curve ==== | Define the scale's Fall Off curve - curve goes from centre to border |- | ==== Density Fall Off Enabled ==== | Enable Density Fall Off settings below Density Fall Off only works well for wid brush single click placements |- | ==== Density Fall Off Curve ==== | Define the density's Fall Off curve - curve goes from centre to border |- | ==== Density Fall Off Subarea Count ==== | Define the amount of sub-areas (internal sub-division for performance) |- | ==== Override Brush ==== | Remove previously Brush-placed entities |- | ==== Objects Config ==== | This is where objects to be created are defined - see the section below. An {{Link/Enfusion|armaR|SCR_ObjectBrushArrayConfig}} config can be drag & dropped here. {{Feature|informative|Config examples can be found in {{Link/Enfusion|armaR|Configs/Workbench/ObjectBrush}}.}} |}

=== Objects Config ===

{| class="wikitable valign-top" ! Name ! Description |- | ==== Min Scale ==== | Maximum scale the object can have - requires Override Randomization enabled |- | ==== Max Scale ==== | Maximum scale the object can have - requires Override Randomization enabled |- | ==== Prefab ==== | The Prefab to use |- | ==== Bot Distance ==== | ''unused'' |- | ==== Random Pitch Angle ==== | Random X angle ("looking down/up") |- | ==== Random Roll Angle ==== | Random Z angle ("barrel roll") |- | ==== Vertical Offset ==== | ''unused'' |- | ==== Random Yaw Angle ==== | Random Y angle ("direction") |- | ==== Prefab Offset Y ==== | Static value that will be added to the Prefab's Y position |- | ==== Min Random Vertical Offset ==== | -value..0 negative range of Y randomness (cumulative with Prefab Offset Y) |- | ==== Max Random Vertical Offset ==== | 0..+value positive range of Y randomness (cumulative with Prefab Offset Y) |- | ==== Override Randomization ==== | If checked, Prefab will use:

* Min Scale / Max Scale * Random Pitch, Random Roll, Random Yaw values

Otherwise, Prefab's Library random values will be used |- | ==== Weight ==== | The selection probability weight; if set to zero, the Prefab is ignored |- | ==== Align To Normal ==== | Align the generated Prefab to terrain's normal (makes it perpendicular to the terrain) |- | ==== Scale Falloff ==== | Whether or not using Scale Fall Off parameters |- | ==== Lowest Scale Falloff Value ==== | Minimum scale value the Scale Fall Off can set |}

=== Obstacles ===

{| class="wikitable valign-top" ! Name ! Description |- | ==== Avoid Objects ==== | Avoid creating Prefabs where other entities are placed |- | ==== Avoid Objects Detection Radius ==== | Objects detection radius - can be zero |- | ==== Avoid Objects Detection Height ==== | Objects detection's max height (from the ground) |- | ==== Avoid Roads ==== | Avoid roads, using their {{Link/Enfusion|armaR|RoadGeneratorEntity}} '''Road Clearance''' value |- | ==== Avoid Rivers ==== | Avoid rivers, using their {{Link/Enfusion|armaR|RiverEntity}} '''Clearance''' value |- | ==== Avoid Power Lines ==== | Avoid powerlines, using their {{Link/Enfusion|armaR|SCR_PowerlineGeneratorEntity}} '''Clearance''' value |- | ==== Avoid Land ==== | Avoid anything above ocean's level |- | ==== Avoid Ocean ==== | Avoid anything below ocean's level |}

=== Obstacles - Area ===

{| class="wikitable valign-top" ! Name ! Description |- | ==== Avoid Forests ==== | Avoid forests (areas with a {{Link/Enfusion|armaR|ForestGeneratorEntity}}) |- | ==== Avoid Lakes ==== | Avoid lakes (areas with a {{Link/Enfusion|armaR|LakeGeneratorEntity}} '''and''' with "Is Lake" checked) |- | ==== Area Detection Radius ==== | Area (forest, lake) detection radius ''from the first click'' Set to zero to detect all areas of the world, takes more time the first time (and more RAM) |}

{{GameCategory|armaR|Modding|Official Tools|World Editor Tools}}
0pplguf6nk06syxdb0tk3jhx1kgarpw

# Arma Reforger:World Editor: Parallel Shape Tool

5050
49351
376783
376742
2025-11-18T17:26:38Z
Lou Montana
10739
Some wiki formatting
376783
wikitext
text/x-wiki
{{TOC|side}} The '''Parallel Shape Tool''' is a {{Link|Arma Reforger:World Editor}} tool that allows automatic creation of parallel shapes (polylines or splines) from a selected shape.

== Main Interface ==

[[File:Parallel_Shape_Tool_UI.png|thumb|400px|Parallel Shape Tool Interface]]

The tool consists of three main sections: {{Link|#Margins}}, {{Link|#Debug}} and {{Link|#Shape Creation}}.

=== Margins ===

==== Offset Safety Margin ==== [m] Offset safety for neater inner curves (Spline only) * '''Default value:''' 1.00 m * '''Range:''' 0 to 10 m * '''Usage:''' Prevents overlapping in tight curves

==== Min Distance Between Points ==== Minimum distance between points, as to not saturate inner curves (Spline only) * '''Default value:''' 1.00 m * '''Range:''' 0 to 20 m * '''Usage:''' Reduces point density in complex areas

=== Debug ===

==== Show Debug Log ==== Show more logs in the console for debugging purposes * '''Default:''' Disabled

=== Shape Creation ===

==== Snap To Ground ==== Snap the newly created shapes' points to the ground * '''Default:''' Enabled * '''Usage:''' Ensures shapes follow terrain relief

==== Use Spline If Possible ==== Use spline if shape is a spline, may help in sharp turns; generally not needed, polyline should be enough * '''Default:''' Disabled * '''Usage:''' May help with tight curves

==== Create Shape As Child ==== Create shapes as the selected shape(s)' children; otherwise, create them on the same level * '''Default:''' Enabled * '''Advantage:''' Clear hierarchical organization

==== Symmetrical Shapes ==== Create shapes on the provided offsets and their negative, bordering the selected shape(s) * '''Default:''' Enabled * '''Example:''' A 5m offset will create shapes at +5m AND -5m

==== Remove Duplicates ==== Cleans up the duplicated offsets to only keep unique ones - also applies to Symmetrical Shapes above * '''Default:''' Enabled

==== Offsets ==== New shapes' offset(s) - negative means "to the left" of the shape, positive means "to the right" (from its first to its last point) * '''Negative value:''' "Left" of the shape (first to last point) * '''Positive value:''' "Right" of the shape (first to last point) * '''Range:''' -50 to +50 m * '''Default values:''' -10.0, 10.0

== Usage ==

=== Create Parallel Shapes ===

# Select one or more shapes (polyline or spline) in the World Editor # Configure parameters according to your needs: #* Set offsets in '''Offsets''' (e.g., 3, 6 to create two shapes at 3m and 6m) #* Enable '''Symmetrical Shapes''' to also create shapes on the other side #* Adjust '''Offset Safety Margin''' if needed for curves # Click the '''Create''' button # New shapes are created accordingly.

=== Offset Direction ===

The left/right orientation is determined by the '''shape's direction''': * From the '''first point''' to the '''last point''' of the shape * '''Negative''' (-) = left side * '''Positive''' (+) = right side

{{Feature|informative|To reverse the direction, reverse the order of the original shape's points.}}

== Practical Use Cases ==

=== Road with Shoulders ===

Configuration: * Offsets: 3, 6 * Symmetrical Shapes: Enabled * Snap To Ground: Enabled

Result: 4 shapes created * -6m (left ditch) * -3m (left edge) * +3m (right edge) * +6m (right ditch)

=== River with Banks ===

Configuration: * Offsets: 2, 5 * Symmetrical Shapes: Enabled * Offset Safety Margin: 0.5 * Min Distance Between Points: 0.5

Result: Banks that follow the river's meanders

=== Simple Parallel Wall ===

Configuration: * Offsets: 0.5 * Symmetrical Shapes: Disabled * Create Shape As Child: Enabled

Result: Single wall 0.5m to the right of the original shape

== Console Messages ==

The tool displays messages in the Workbench console:

{| class="wikitable" ! Message ! Meaning |- | No entities selected | No entity selected - select a shape |- | The selected entity is not a shape | The selected entity is not a polyline/spline |- | The selected shape requires at least two points | The shape must have at least 2 points |- | The number of created points (...) is not enough | Too many points removed - adjust margins |- | Cannot create shape | Creation error - check logs |}

== Limitations ==

* Requires at least '''2 points''' per source shape * Closed shapes are supported but may require adjustments * Curves with tight turns may require '''Offset Safety Margin''' adjustment * Performance may decrease with a large number of points

== Tips ==

* For roads, use '''Offsets: 3''' with '''Symmetrical Shapes''' to instantly create both edges * Increase '''Min Distance Between Points''' if created shapes have too many points in curves * Disable '''Snap To Ground''' to create aerial structures (bridges, aqueducts) * Use '''Remove Duplicates''' to automatically clean up your offset lists * For complex shapes with tight curves, increase '''Offset Safety Margin''' to 1.5-2.0m

{{GameCategory|armaR|Modding|Official Tools|World Editor Tools}}
687aqgjwfrifafhdouox49fiue6jxjn

# Arma Reforger:World Editor: Prefab Management Tool

5050
47018
369540
2024-09-16T13:56:02Z
Lou Montana
10739
Page creation
369540
wikitext
text/x-wiki
{{TOC|side}} '''Prefab Management Tool''' is a toolbox allowing for multiple Prefab operations, such as: * import 3D models (XOBs) into a new Prefab * create existing Prefabs' children * clone existing Prefabs

== Usage ==

* Select resources in one of the possible ways: ** Open a Prefab in Prefab Edit Mode ** (Multi-)select models/Prefabs in the '''Resource Browser''' ** Highlight one directory in the '''Resource Browser''' (XOB import only, to mimic its structure - see [[#XOB Import|'''Keep Single Directory Structure''']] below) * Fill the wanted options * Press the wanted button * ???? * Profit - Prefabs are created

== Parameters ==

=== General ===

* '''Addon''': file system where new prefabs will be created * '''Overwrite Files''': if a destination file already exists, it is overwritten

=== Suffixes ===

* '''Suffixes 1..3''': suffixes to name clones, e.g {{hl|_red}}, {{hl|_blue}}, {{hl|_US}}, etc; the underscore is added automatically if needed - accepted chars: {{hl|[a-zA-Z0-9_-]}}

=== Clone ===

* '''Clone Suffixes''': which Suffixes array will be used for Clones - 0 = no suffixes * '''Clone Save Path''': path to save the clones

=== Children ===

* '''Children Suffixes''': which Suffixes array will be used for creating Children - 0 = no suffixes * '''Children Save Path''': path to save the Prefabs' children

=== XOB Import ===

* '''XOB Save Path''': path to save the XOB Prefabs * '''Keep Single Directory Structure''': if ONE directory is selected and '''XOB Save Path''' above is defined, relative paths will be used to mimic that directory's structure<br>e.g {{hl|{{Color|blue|Assets}}/{{Color|green|Rocks}}/{{Color|darkorange|Granite}}/{{Color|teal|Granite_01}}'''.xob'''}} saves to {{hl|''XOBSavePath''/{{Color|green|Rocks}}/{{Color|darkorange|Granite}}/{{Color|teal|Granite_01}}'''.et'''}} * '''Parent Prefab''': parent Prefab to created Prefabs * '''Create Base Prefab''': create a "_base" prefab for each imported XOB

{{GameCategory|armaR|Modding|Official Tools|World Editor Tools}}
5ag71j2x1z7rtq8r8cct7dl3vvu4jtv

# Arma Reforger:World Editor: Rotate Tool

5050
32706
322200
322097
2022-05-27T11:39:04Z
Lou Montana
10739
Text replacement - "|Modding|Tools|Official Tools" to "|Modding|Official Tools"
322200
wikitext
text/x-wiki
{{TOC|side}} This tool allows for object(s) rotation.

== Shortcuts ==

Holding {{Controls|Ctrl}} while rotating will temporarily enable '''Snap angle''' (it will not ''toggle'' its state - only enable it)

{{Controls|Alt|LMB}} will duplicate the element and rotate the copy.

== Snap angle ==

Snaps the object's rotation to steps of below-defined angle.

The angle can be freely defined or picked from a selection of angles (1, 5, 10, 15, 20, 30, 45, 60°).

== Rotate separately ==

If checked, selected objects will rotate each on their own axis; if not, they will all rotate around the same axis (as one big object).

== Transform children ==

If checked, the children will rotate ''on their own axis'' too - not keeping their relative position to the parent.

{{Feature|informative|In order to keep the same relative position for children, they should be selected and "rotate separately" unticked.}}

{{GameCategory|armaR|Modding|Official Tools|World Editor Tools}}
ln2zz6df7a80rb4ni89qc0sr8fi8oub

# Arma Reforger:World Editor: Shape Area Tool

5050
49354
378088
376786
2026-02-12T18:00:00Z
Lou Montana
10739
Lou Montana moved page [[Arma Reforger:World Editor: Shape Tool]] to [[Arma Reforger:World Editor: Shape Area Tool]]: Name standard
376786
wikitext
text/x-wiki
{{TOC|side}} The '''Shape Area Tool''' is a World Editor tool for Enfusion that turns polylines and splines into specific geometric shapes (circles, rectangles, stars) or creates these shapes directly in the middle of the screen.

{{Feature|informative| * To make a "diamond" (rhombus), use Circle and set the number of points to 4 * Points are created '''clockwise'''. }}

== Main Interface ==

[[File:Shape_Area_Tool_UI.png|thumb|400px|Shape Area Tool Interface]]

The tool consists of five main sections: {{Link|#Global}}, {{Link|#Circle}}, {{Link|#Rectangle}}, {{Link|#Star}} and {{Link|#Points}}.

=== Global ===

==== Shape Type ==== Shape type to be created * '''Circle:''' Can be used to create polygons * '''Rectangle:''' Rectangle shape * '''Star:''' Star shape * '''Default:''' Circle

==== Width ==== Wanted shape's width in meters * '''Default value:''' 48.000 m * '''Range:''' 0.001 to infinity

==== Length ==== Wanted shape's length in meters * '''Default value:''' 32.000 m * '''Range:''' 0.001 to infinity

=== Circle ===

==== Circle Segments Count ==== Number of segments (points) in the circle * '''Default value:''' 12 * '''Minimum:''' 3 * '''Recommendation:''' A minimum of 12 points is recommended for a round circle * '''Special usage''': ** 3 points = triangle ** 4 points = diamond/rhombus ** 6 points = hexagon ** 8 points = octagon

=== Rectangle ===

==== Rectangle Segments Per Side ==== Number of segments per side * '''Default value:''' 1 * '''Minimum:''' 1 * '''Usage:''' Increase to subdivide sides (useful for terrain following)

=== Star ===

==== Star Branches Count ==== Number of branches in the star * '''Default value:''' 5 * '''Minimum:''' 2

==== Star Inner Radius Ratio ==== Star inner radius ratio - e.g 0.75 * width-length radius * '''Default value:''' 0.500 * '''Range:''' 0.01 to 1 * '''Usage:''' Controls the "depth" of star branches

=== Points ===

==== Snap To Terrain ==== Snap shape points to terrain * '''Default:''' Enabled * '''Usage:''' Ensures the shape follows terrain relief

==== Centre On Position ==== Whether or not points should be around the shape entity's origin or if the points should be in positive position only (shape origin being bottom-left) * '''Default:''' Enabled (centered) * '''Usage:''' Disable to place origin at bottom-left corner

==== Shape Closing ==== Define whether to close, open or leave as is the selected shape(s) * '''Leave as is:''' Keep current state * '''Open:''' Open the shape * '''Close:''' Close the shape * '''Default:''' Leave as is

== Usage ==

=== Create a New Shape at Screen Center ===

# Configure shape parameters: #* Choose the '''Shape Type''' #* Set '''Width''' and '''Length''' ("Height") #* Adjust specific parameters (segments, branches, etc.) # Center the camera on the desired position # Click on: #* '''Create Polyline''' for a polyline #* '''Create Spline''' for a spline # The shape is created at the center of the screen

=== Convert Existing Shapes ===

# Select one or more shapes (polylines or splines) in the World Editor # Configure conversion parameters # Click on '''Convert Sel. Shapes''' # Selected shapes are transformed according to defined parameters

== Practical Use Cases ==

=== Circular Plaza or Roundabout ===

Configuration: * Shape Type: Circle * Width: 50 * Length: 50 * Circle Segments Count: 16 * Snap To Terrain: Enabled * Centre On Position: Enabled

Action: Create Polyline<br> Result: 50m diameter circular plaza perfectly adapted to terrain

=== Diamond / Rhombus ===

Configuration: * Shape Type: Circle * Width: 20 * Length: 20 * Circle Segments Count: 4 * Centre On Position: Enabled

Action: Create Polyline<br> Result: 20m × 20m diamond shape

=== Decorative Star ===

Configuration: * Shape Type: Star * Width: 30 * Length: 30 * Star Branches Count: 8 * Star Inner Radius Ratio: 0.4

Action: Create Spline<br> Result: 8-branch star with pronounced branches

=== Hexagon ===

Configuration: * Shape Type: Circle * Circle Segments Count: '''6''' * Width: 25 * Length: 25

Action: Create Polyline<br> Result: Regular 25m hexagon

== Console Messages ==

The tool displays messages in the Workbench console:

{| class="wikitable" ! Message ! Meaning |- | No shapes were selected, no conversion needed | No shape selected for conversion |- | Cannot modify shape(s), points calculation went wrong | Error in point calculation |- | Cannot snap shape(s) to terrain, entity not found from source | Cannot project to terrain |}

== Limitations ==

* Circle shapes require at least '''3 points''' * Star requires at least '''2 branches''' * Snap to terrain requires valid terrain under points

== Tips ==

* To create regular polygons, use Circle and adjust segment count (3 for triangle, 4 for diamond, 5 for pentagon, etc) * For shapes following rough terrain perfectly, increase '''Rectangle Segments Per Side''' * Use '''Star Inner Radius Ratio''' at 0.3-0.4 for very pronounced stars, 0.7-0.8 for softer stars * Disable '''Centre On Position''' if you want to precisely place a corner of the shape * To convert multiple shapes at once while keeping their positions, select them all and use '''Convert Sel. Shapes''' * For organic paths (trails, rivers), create a circle with few points (6-8) for a less regular appearance

{{GameCategory|armaR|Modding|Official Tools|World Editor Tools}}
ke8zoz70jzmqeerw6eqgtn4hy8nrevc

# Arma Reforger:World Editor: Terrain Creation Tool

5050
32724
378067
370494
2026-02-06T12:21:59Z
Lou Montana
10739
Add [[Arma Reforger:Terrain Tutorial]] link
378067
wikitext
text/x-wiki
{{Feature|important|Before anything: '''save frequently'''. After height map importation, normal maps, terrain texture and layer maps import/generation as they are '''not''' saved to file after the operation.}} {{Feature|informative|For more advices and tips, see {{Link|Arma Reforger:Terrain Tutorial}}.}}

== Manage ==

=== Height Map ===

The height map is terrain altitude's information. World Editor can work with both {{hl|.asc}} and 16-bit {{hl|.png}} height map files. The section offers options to import, export, and rebuild the height map.

==== Import Height Map ==== This option allows to import a height map from an external source or a World Editor export.

It allows to '''invert in X and Z axis''', importing the terrain "from right to left" (a hill being West of the terrain would be East) or "from bottom to top" (South would be North). Ticking both corresponds to a 180° terrain rotation.

The '''resampling heights''' option allows to override the terrain's altitude range by linear interpolation. It is required for png import as the png format only holds ''relative'' {| class="wikitable align-center" |+ Example |- ! Original (-10 to +10m range) | -10 | -5 | 0 | 1 | 5 | 10 |- ! Imported (0 to +100m range) | 0 | 25 | 50 | 55 | 75 | 100 |}

==== Export Height Map ==== The '''Base'''/'''Modified''' option targets the terrain's height map - either the base terrain one, or the one modified by e.g road generators and other entities that edit terrain through script.

==== Rebuild Height Map ==== This button allows to rebuild the height map manually in the event it is not synchronised properly with the actual data (road, building placements).

==== Bake Selection ==== This "bakes" the selected entities' terrain modification into the base height map.

For example: if a building is placed on a slope, it flattens the terrain by default; this flattening follows the building and is destroyed with the building. With this button the building's flattening is stored into the height map and will remain even if that building is moved or deleted.

==== Generate Normal Map ==== Allows to (re)generate the terrain's normal map. Normal map interpolation settings (minimum and maximum angle for vertex interpolation) are only available when the Interpolation Mode option is set to {{hl|Auto}}.

=== Satellite Map ===

==== Import satellite map ==== This imports a satellite map for the terrain, used for long-distance terrain texture.

=== Surface Map ===

==== Fix block border ==== This is to be used if hard edges between textures of neighbouring terrain blocks appear.

==== Change surface map size ====

==== Rebuild terrain materials ==== '''Rebuild terrain materials''' must be run if a layer map reimport goes wrong - in the event of wrong or missing clutter or when terrain material tracing does not work properly.

=== Options ===

<!-- '''Terrain tool step edit only''' checkbox -->

=== Tile Map ===

The Tile Map is an overhead map of the terrain tiles.

==== Minimap Controls ==== Hold {{Controls|RMB}} to drag the map around.

===== Scale To Fit ===== Fit the minimap to the view widget.

===== Center on Camera ===== Move the minimap so the camera position is centered.

===== Claim Tiles ===== Lock tiles so only your account can work on them.

===== Release Tiles ===== Release tiles so everyone can work on them.

===== Cogwheel ===== ; Set Background Image Set the minimap's texture. {{Feature|informative|See also [[Arma Reforger:2D Map Creation|2D Map Creation]].}}

; Clear Background Image Remove the minimap's texture.

== Sculpt ==

=== Common Values ===

'''Strength''': strength of the effect - range 0..500

'''Height''' (in '''Flatten''' mode): wanted terrain's absolute height

'''Radius''': radius (in metres) range 0..200

'''Falloff''': the "cone/cylinder" slope ratio (see below) - range 0..100

'''Angle''': the effect angle - range 0..360

=== Common Controls ===

{| class="wikitable valign-top" ! Controls ! Effect |- | {{Controls|Shift|Mouse up}}<br> {{Controls|Shift|Mouse down}} | Set strength/height |- | {{Controls|Ctrl|Mouse up}}<br> {{Controls|Ctrl|Mouse down}} | Set radius |- | {{Controls|Ctrl|Shift|Mouse up}}<br> {{Controls|Ctrl|Shift|Mouse down}} | Set falloff |- | {{Controls|Ctrl|Shift|Mousewheel}} | Set angle |}

<gallery mode="packed" heights="200px"> File:armareforger-world_editor_terrain_tool_brush_linear.png|Linear File:armareforger-world_editor_terrain_tool_brush_smooth.png|Smooth File:armareforger-world_editor_terrain_tool_brush_sphere.png|Sphere File:armareforger-world_editor_terrain_tool_brush_inverted_sphere.png|Inv-Sphere </gallery>

<gallery mode="packed" heights="200px"> File:armareforger-world_editor_terrain_tool_brush_round.png|Round File:armareforger-world_editor_terrain_tool_brush_rect.png|Rect File:armareforger-world_editor_terrain_tool_brush_rect.png|User<ul style="text-align: left"><li>shown shape is identical to '''Rect'''<li>Falloff does not impact the result<li>Looks into the Data\Brushes directory</ul> </gallery>

<gallery mode="packed" heights="200px"> File:armareforger-world_editor_terrain_tool_brush_falloff_small.png|Falloff (small) File:armareforger-world_editor_terrain_tool_brush_falloff_medium.png|Falloff (medium) File:armareforger-world_editor_terrain_tool_brush_falloff_large.png|Falloff (large) </gallery>

=== Sculpt ===

{{Controls|LMB}} raises terrain according to Strength.

{{Controls|Alt|LMB}} lowers the terrain.

=== Flatten ===

Sets the terrain to a defined Height. '''Space''' picks the height of the current terrain position under the cursor.

=== Smooth ===

Softens edges.

=== Noise ===

Generates Perlin-based terrain noise.

== Paint ==

A specific terrain tool used for painting surface materials on terrain ground.

* Paint tool is used for painting surface materials on a terrain ground with an adjustable brush. All paint brush properties can be set in the same tab. * Information where each surface material is painted is stored as a mask inside game files upon saving a project. However, it is possible to both import and export each surface's mask in a .png file. * As of {{armaR}} v0.9.5 there is a limit of 5 surfaces per block for a terrain. <!-- More info about blocks can be found here: Generic Terrain Entity -->

{| class="wikitable valign-top" ! Feature ! Screenshot ! Description |- | === Basic Brush Settings === | [[File:armareforger-world_editor_terrain_tool_paint_basic_brush_settings.png]] | '''Show diagnostics for block under cursor''' – this option enables a simple surface layer list per block tab in World Editor viewport when using Paint tool and hovering over terrain. Information about block under cursor will be shown. Useful as an overview to manage surfaces in multiple blocks efficiently while painting. {{Feature|informative|See the {{Link|#Sculpt}} section above for more information.}}

==== Strength ==== range: 0..40

Strength of the brush. {{Controls|Shift|MouseUp}}/{{Controls|Shift|MouseDown}} to adjust.

==== Radius ==== range: 0..200

Radius of the brush. {{Controls|Ctrl|MouseUp}}/{{Controls|Ctrl|MouseDown}} to adjust.

==== Falloff ==== range: 0..100

Fadeout of the brush. {{Controls|Ctrl|Shift|MouseUp}}/{{Controls|Ctrl|Shift|MouseDown}} to adjust.

==== Angle ==== range: 0..360

Rotation of the brush – useful for rectangular or user brushes. |- | === Brush Shape and Type === | [[File:armareforger-world_editor_terrain_tool_paint_brush_shape_and_type.png]] | * '''Brush shape''' – Linear/Smooth/Sphere/Inverted Sphere – these options define the style of painting, icons next to these tabs work as an indication what each option provides. * '''Brush type''' – Round/Rectangle/User. User brushes are loaded from root/Brushes (i.e. root/Brushes/blot.png). |- | === Surface Layer List === | [[File:armareforger-world_editor_terrain_tool_paint_surface_layer_list.png]] | * Surface layer list – A simple drag & drop list of surface materials. These can be dropped from either Workbench or World Editor's Resource Browser. * The very first surface layer is always used as default and while it can not be removed or imported, it can be changed to a different one. In this scenario, Grass_03 is used as a default surface. When masks are stored in game files, they are all merged together. Any information that is remaining from the resulting merged mask is used as default layer. |- | === Basic Painting === | {{Wiki|TODO}} | |- | === Extra Surface Layer Operations === | [[File:armareforger-world_editor_terrain_tool_paint_extra_surface_layer_operations.png]]<br> [[File:armareforger-world_editor_terrain_tool_paint_extra_surface_layer_operations_path.png]] | * '''Change layer's material...''' – Change surface material to a one not included in the list. * '''Clear surface layer''' – selected surface layer's mask will be cleared with default surface layer. * '''Fill surface layer (clear other)''' – selected surface layer will fill the entire terrain ground, replacing every other surface layer. * '''Remove surface layer''' – removes surface layer from the list. * '''Priority surface mask import''' – will automatically import mask of a selected surface layer. * '''Priority surface mask import...''' – will import a specific surface layer mask. * '''Export surface mask''' – will automatically export mask of a selected surface layer. * '''Export surface mask...''' – will export a specific surface layer mask.

* A simple batch import and export feature for surface masks is also available – these options work with masks from all surfaces at once.

''All surface masks are in a .png format and for the best results a predetermined sizing should be followed – this information can be found in the {{Link|#Info & Diags}} tab (section below).'' |}

<!-- == Holes ==

Holes are a way to '''hide''' the terrain. One can create a hole or disable a block for that. {{Feature|informative|The invisible terrain is '''still''' walkable.}}

=== Options ===

==== Show terrain in holes and disabled blocks ==== If ticked, the terrain in holes and disabled blocks will appear.

==== Show holes diag ==== Highlight the holes.

==== Show disabled blocks diag ==== Highlight the disabled blocks. -->

== Info & Diags ==

This tab contains useful info about blocks and their surface layers. These diagnostics also allow either manual merging or replacing of surface layers in specific blocks.

{| class="wikitable valign-top" ! Step ! Screenshot ! Description |- | === Block and Pixel Under Cursor Diagnostics === | [[File:armareforger-world_editor_terrain_tool_info_n_diags_block_and_pixel_under_cursor_diagnostics.png]] | * In the lower part of the '''Info & Diags''' tab, there is an extra information about blocks containing painted surface layers. * While in '''Info & Diags''' tab, you can press Ctrl+X in World Editor's viewport to visualize surface layers painted on the terrain ground. Diagnostic colors are set in each surface layer.

==== Block ==== ** '''Live (under cursor)''' – diagnostics will describe the block actually under cursor in World Editor's viewport. If the tile is clicked then this checkbox becomes unticked. ** '''Camera auto-align''' – when a block is selected, camera will automatically align to it. ** '''Coordinates''' – it is possible to input specific tile coordinates and have camera automatically moved to their location. Below is a list of specific pixel coordinates of height map, satellite texture and surface mask. As each has a different size, the coordinates are different. Listed coordinates are Top-left coordinates/Bottom-right coordinates. ** Percentage list determines the mask coverage of a surface layer in a selected block. These percentages work with surface layer mask blending as well, meaning that the total value can be up to 500%.

==== Pixel Under Cursor ==== ** '''Coordinates''' – same as above. ** The Pixel Surface statistics list shows surface layers per pixel. The range is set from 0 to 255 (black - white) and always add up to '''255'''. It is possible to determine exactly which pixel contains what surface layers through this data. |- | === Basic Surface Diagnostics === | [[File:armareforger-world_editor_terrain_tool_info_n_diags_basic_surface_diagnostics.png]] | * '''Merge''' – merges selected surface layer with already existing one. * '''Replace''' – replaces selected surface layer with a layer not present in selected block. ** A 3x3 grid is an indicator of selected block and its neighbours. The orientation is based on cardinal directions. *** '''Green''' – there is a free slot for that surface layer. *** '''Yellow''' – selected block. *** '''Red''' – the limit of 5 surface layers is reached in that block. |- | === Surface Layer Merge or Replace Operations === | {{Wiki|TODO|Add graphic element?}} | # Select a block in which you want a surface layer merged or replace. # Select specific surface in the percentage list by right-clicking on it. # Pick between either ''Merge'' or ''Replace'' options. # If ''Replace'' is further expanded, pick a surface layer which you want to replace selected one. # If there is a red square in the 3x3 grid, the 5 surface layer limit is reached in that block and it needs to be processed by further merging surface layers there to empty the slot. |}

{{GameCategory|armaR|Modding|Official Tools|World Editor Tools}}
c6r3n2v5ik3o1jn2noftq8kctozw82b

# Arma Reforger:World Editor: Vector Tool

5050
32705
370489
370488
2024-12-20T14:47:32Z
Lou Montana
10739
Add Clone point data info
370489
wikitext
text/x-wiki
{{TOC|side}} == Definitions ==

* '''Shape''': a '''Polyline''' or a '''Spline''', defined by points - the shape can be closed or not * '''Polyline''': a group of points linked by straight lines * '''Spline''': a group of points drawing a {{Link|https://en.wikipedia.org/wiki/Bézier_curve}}

=== Details ===

'''Polylines''' and '''Splines''' share the following properties:

'''Coords''': position of the first-placed point

'''Angle X''': rotation of the whole shape on the X-axis from the first-placed point

'''Angle Y''': rotation of the whole shape on the Y-axis from the first-placed point

'''Angle Z''': rotation of the whole shape on the Z-axis from the first-placed point

'''Scale''': shape scale, e.g 0.5 being twice as small, 2 being twice as big

'''Is Closed''': defines if the shape is closed or left open

'''Line Color''': defines the line's colour in World Editor

== Creation ==

=== New Shape ===

'''New Polyline''' / '''New Spline''' is used to create a new shape.

As reminded in the Vector Tool interface,

{{Controls|Ctrl|LMB}} adds a point '''after''' the selected one, whereas

{{Controls|Alt|LMB}} adds a point '''before''' the selected one.

=== Terrain Snapping ===

==== Snap to terrain ==== Checkbox: sets if newly-placed points are to snap to the terrain or to world's zero.

==== Snap to anchors ==== Checkbox: sets if dragged points get secured by neighbour points. '''Anchor snap distance''' value must be set to a value above zero.

==== Snap to terrain ==== Snaps selected points to terrain below them.

==== Reset elevation ==== Resets elevation of selected points to world's zero.

=== Point management ===

==== Split ==== This "cuts" the shape on the selected point and duplicates it: one for the "previous" shape, one for the "next" shape.

==== Merge ==== This merges the shapes of selected points that are part of different shapes.

==== Reverse ==== Reverses all the points of the selected shape.

==== Delete ==== Deletes selected point(s).

==== Subdivide ==== Adds an additional point mid-distance between the currently selected point and the next one, or the first one if the last is selected.

==== Select all ==== Selects all points of the shape.

==== Anchor snap distance ==== This defines the distance from which a dragged point will snap to a neighbouring one. This can be useful for e.g road connections.

==== Tangent mode ==== {{Wiki|TODO}} Defines the tangent's behaviour (for a Spline) Possible values: * Mirror * Same orientation * Free

==== Gizmo mode ==== Defines if mouse drag and drop can move on all three axis or only flat 2D (X-Z).

==== Clone point data ==== Checkbox: when inserting a point with {{Controls|Ctrl|LMB}} or {{Controls|Alt|LMB}}, clones the highlighted point's data into the newly created point.

==== Only active layer ==== Selects the entities from within the active layer only.

==== Select entities in shapes ==== Selects all entities within the shape(s) surface.

==== Exclude children ==== When ticked, '''Select entities...''' actions will not include children (useful to e.g avoid trees from a Forest Generator)

==== Select entities near shapes ==== Expands the search surface - '''Select near distance''' must be defined.

==== Select near distance ==== Sets the '''Select entities near shapes''' additional distance, in meters.

==== Occlude shapes by geometry ==== Hides shapes behind terrain/objects.

==== Show far shapes ==== Shows distant shapes in the editor, however great their distance is from the camera.

== Generators ==

A right-click on a Polyline's or Spline's ShapeEntity offers options allowing to create and use {{GameCategory|armaR|Modding|Official Tools|World Editor Generators|link= y}}.

{{GameCategory|armaR|Modding|Official Tools|World Editor Tools}}
32c6t1g465vpticqe4cn43wa6jlb4zr

# Arma Reforger:Scenario Framework

5050
37978
378111
376787
2026-02-16T15:01:09Z
Tsanet
8725
/* Components */ Updated paths due to specification changes.
378111
wikitext
text/x-wiki
{{TOC|side}} The goal of the '''Scenario Framework''' is to provide scenario creators simple way how to build their scenarios using World Editor without any scripting knowledge.

It is expected that scenario creators are already familiar with the basic usage of World Editor.

However, most of the work is done by drag and dropping components into the world and adjusting the attributes which is the least difficult and with using just that, you can build even more complex scenarios.

As always, people with scripting knowledge can modify and expand the framework to suit their needs.

{| class="valign-top" | {{TOC|subtoc|content= * 1. {{Link|#Prerequisites}} * 2. {{Link|#Basics}} * 3. {{Link|#Log Messages}} * 4. {{Link|#Components}} * 5. {{Link|#Plugins 2|Plugins}} * 6. {{Link|#Logic 2|Logic}} * 7. {{Link|#Getters}} * 8. {{Link|#Actions}} * 9. {{Link|#Dynamic Spawn/Despawn 2|Dynamic Spawn/Despawn}} * 10. {{Link|#Samples}} * 11. {{Link|#Compositions}} * 12. {{Link|#QRF System}} * 13. {{Link|#1.1.0 Structural Changes}} }} | {{Feature|informative| In this documentation, we will be providing links that lead directly to the tools to said items. It is advised to explore said links in the tools yourself so you can get familiar with them as we go. Before clicking on any of the links, you will need to register the Enfusion protocol on your computer - see the {{Link|Arma Reforger:Resource Manager: Options#Register .22enfusion:.2F.2F.22 protocol|Register enfusion:// protocol}} section for more information. }} |}

== Prerequisites ==

In order to properly work with the Scenario Framework, you need to have several things already set in your world that you are already working on.

For this, we have created a very simple way how to setup any functional world on its own using the World Editor Plugin called Game Mode Setup.

Here, you can choose from several Game Mode Templates, but for the Scenario Framework, you will want to use the {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Workbench/GameModeSetup/ScenarioFramework.conf}} variant.

However if you do not want to use this Prefab, note that it contains the following Prefabs that are needed for an optimal functionality of your scenario:

* {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Scenario Framework/GameModeSF.et}} * {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/AI/SCR_AIWorld.et}} * {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/MP/Managers/Factions/FactionManager_USxUSSR.et}} * {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/MP/Managers/Loadouts/LoadoutManager_USxUSSR.et}} * {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Radio/RadioManager.et}} * {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/World/Game/PerceptionManager.et}} * {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/MP/ScriptedChatEntity.et}} * {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/ScenarioFramework/Tasks/TaskManager.et}}

and in the Game Mode's Mission Header, {{Link/Enfusion|armaR|SCR_MissionHeaderCombatOps}} is used.

== Basics ==

Scenario Framework has a hierarchical setup which upon getting familiar with, you will be able to build your scenarios very quickly and do many interesting things.

Once you have your world properly setup with all the {{Link|#Prerequisites|requirements}} listed above, you are ready to build.

=== GameMode Manager Settings ===

The core entity of each Scenario is the GameMode entity.

In the case of Scenario Framework, it is recommended to use the {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Scenario Framework/GameModeSF.et}} Prefab.

It has many components already added to it and they can be adjusted according to your needs.

It is recommended to go through them all and explore the possibilities that each component gives you.

The most important component on this GameMode is the {{Link/Enfusion|armaR|SCR_GameModeSFManager}} which allows you to use the properties listed below.

==== Tasks ==== ''Task Types Available'' - Setup a random task generation on scenario start by setting which Task Types are available <!-- (see the types of tasks here WIP) -->

''Max Number Of Tasks'' - Maximal number of tasks that will get spawned using this system

''After Tasks Init Actions'' - Actions that will be activated after task generation is finished (see {{Link|#Actions}})

Here is the example from CombatOps Arland that has 4 possible Task Types set but only 3 of them will be randomly selected upon scenario start

==== Debug ==== Debug can easily allow you to pick only certain Area and Layer Tasks for you to debug in the midst of your scenario. Useful in a scenario with many elements and depending on randomisation.

Or you can activate predefined sets of Debug Actions to your liking and execute them on the fly.

{{GVI|armaR|1.1.0|size= 0.75}} ''Debug Areas'' - List of Areas that will be spawned (Optionally with desired Layer Task) as opposed to leaving it to random generation

{{GVI|armaR|1.1.0|size= 0.75}} ''Core Areas'' - List of Core Areas that are essential for the Scenario to spawn alongside Debug Areas

{{GVI|armaR|1.1.0|size= 0.75}} ''Debug Areas'' - List of Areas that will be spawned (Optionally with desired Layer Task) as opposed to leaving it to random generation

==== Dynamic Spawn/Despawn ==== ''Dynamic Despawn'' - In default, it is set to false, but upon setting it to true, it will enable the Dynamic Despawn feature <!-- (more about it here WIP) -->

''Update Rate'' - Controls the update rate for the Dynamic Spawn/Despawn on how frequently it is being checked to perform Spawn/Despawn of Areas

{{GVI|armaR|1.2.0|size= 0.75}} Voice Over Data Config - Config with voice over data that is global through the Scenario and can be used for all Voice Over actions

=== Basic Hierarchy Components ===

After setting up the GameMode entity and possibly other entities (listed above) we can get creative with the main part of the Scenario Framework and that are all the pieces from which the scenarios are built from.

We will go very briefly over the basic hierarchy of how it works, and detailed information about each component are provided<!-- (here WIP) -->.

==== Area ==== At top of the hierarchy stands so called Area.

Idea behind this is that your scenario is divided into several areas (as you can for example see on CombatOps Arland) and each area is handling its own things and has its purpose.

Area has all the other components under it in its own hierarchy and it also serves with the Dynamic Spawn/Despawn as an enclosure.

==== Layer ==== Right under the Area is the so-called Layer.

Note that there is a "basic" Layer that serves as a hierarchical tool to further divide things and it can contain other layers or slots.

It is one of the most powerful entities that you will be using when building your scenario because it allows you to set the layout exactly how you will want it and knowing how it works will allow you to create all sorts of scenarios.

==== LayerTask ==== One of the types of the Layer is a LayerTask which has many subtypes depending on the task it is focused on and it serves to handle the Task creation and workflow.

==== Slot ==== At the bottom of the hierarchy, there is a Slot.

"Basic" Slot allows you to spawn any prefab which is the main purpose of it, but you do not have to spawn anything and attach some components onto it as well (for example smart action component for the AI).

It has other subtypes focused on the AI and also the SlotTask which is designed to work in sync with the corresponding LayerTask.

==== Logic ==== There are also Logic entities (LogicCounter, LogicOR and LogicSwitch) that are similar to Slots but their main purpose is to receive inputs and activate actions further down the line to allow you to design more sophisticated workflows <!-- (more on Logic here WIP) -->

==== Example ==== For starters, here is one of the most simple task you can create within seconds using Scenario Framework.

Here it will be very briefly commented, all the examples are documented in more detail. <!-- (here WIP) -->

At the top, there is Area, right under it is LayerTaskMove intended to encapsulate the SlotMoveTo which spawns said task.

In this view, we have three columns.

In the left column, there is an unique name of this entity.

In the middle, there is a name of the Prefab and on the right column, it is the class.

==== Tutorial ==== Here is a step-by-step tutorial on how to setup a world from scratch and using functionalities such as a Task Move, going over all the basics: {{Link|Arma Reforger:Scenario Framework Setup Tutorial}}.

{{ArgTitle|2|Debug Menu|{{GVI|armaR|1.2.1}}}}

ScenarioFramework gives you an extensive Debug Menu Suite that allows you to Inspect, Activate further debug lines in Script Editor and depending on what you are debugging, there are run-time options to manipulate with much of the ScenarioFramework.

In order to work with it, you need to enable the Debug in Debug Menu. First, go to the category Systems > Systems diag and enable it to basic. Then in System points, you need to change it to FixedFrame and here, you will tick the box for SCR_ScenarioFrameworkSystem. Then you can close this Systems Diag and go back to the root of the debug menu. Unfortunately, you will have to do this everytime re-launch the game including the Play from Workbench mode. After that, it is very straightforward. In the root of the debug menu, there is ScenarioFramework category that then contains respective debug tools.

Some of these tools are interconnected and they have both standalone variant or certain tools can initialise specific instance of said tool that works the same way as the standalone variant. This was done for easier usage thanks to the hierarchical design of the ScenarioFramework. In some cases, you will have to know the entity name which is usually set in workbench, but it should be accessible via Registered Areas tool. Intended usage is for Scenario Creators to use it when playing the scenario from workbench as it is not made for multiplayer environment.

=== Tasks ===

It shows you a list of all the active tasks in the Scenario. Each entry is selectable and begins with the Name of the Task, Name of the parent Area, LayerTask and from which SlotTask it is spawned.

It gives you option to Inspect related Area, LayerTask and Slot Task. It also shows the Task State and gives you option to Finish the Task. You can also Restore the Task To Default. Here, Randomization is turned off so it will restore exactly the same variant, but it could be toggled and if there are more options to randomly choose from, it will do so.

=== Registered Areas ===

It shows you a list of all the registered Areas that are valid in this Scenario. You can then select and Inspect Area which will open instance of Layer Inspector for it.

=== Debug Areas ===

This can closely work with the Debug Areas from the Component where it will show these, but here you can also add new Debug Area entries by their name and optionally specify Layer Task and Slot Task. If there are any Debug entries already present, you can select it and remove specific one or clear it all.

There is also an option to show possible Debug Area Presets that tries to group possible Task Combinations for given Scenario into a presets that you can add as well.

Lastly, you can Reinit ScenarioFramework in a sence that everything that was spawned via Areas will be reinitialised and if Debug Areas are set, it will use these to generate these tasks.

=== Layer Inspector ===

It will show you relevant information for given layer. When used as a standalone variant, you have to input a Layer Name to inspect which is the unique name of desired entity. This can be also opened from variety of other places.

Depending on the type of given layer, there will be different attributes shown and certain buttons to perform runtime changes available.

* For all Layers, it will show it Layer is Initiated (aka it is spawned, active and not for example dynamically despawned). * If it was terminated (This is mainly for AI slots but certain layers might be marked to be terminated via action). * If Spawning of child layers is in progress, you can spot currently spawned children out of the supposed number. However if that number would not go away, it means that init of this layer failed and certain children have issues. * Name of the Parent Area and Layer (If it exists) * If it is not a slot, it can show Layer Hierarchy and ability to inspect these, where number of dashes is used for hierarchy level * If it is not a slot, it can show Logic Hierarchy and ability to inspect these. * If given layer has Plugins, there shall be option to Inspect it. Same goes for Actions and Conditions * Ability to Teleport to the Layer Entity * Initiate Dynamic Spawn/Despawn * Restore To Default with respective options - Include Children will affect child layers, Reinit after restoration will once again reinitialise given layer and Affect Randomization will restore the layer but it can re-randomise itself again

For LayerTasks, there shall be shown a Task State, ability to Finish the Task and Teleport to Spawned entity.

For Slots, there might be shown Spawned Entity Display Name and if it is a Trigger, it will show Trigger Periodic Queries status (If said trigger is actively scanning for entities) and ability to turn it enable/disable it.

For SlotTasks, there shall be shown a Task State, ability to Finish the Task and Teleport to Spawned entity. Additionaly all the different Actions for Conditions and Finish/Create/Failed/Progress/Updated states will be shown here.

=== Action Inspector ===

It will show you relevant information for given layer Actions. When used as a standalone variant, you have to input a Layer Name to inspect which is the unique name of desired entity. This can be also opened from variety of other places.

For Each action, it can show your other sub actions hierarchy and for selected ones, you can enable Action debug that can be used in Script Editor to break a break-point. You can also Init said action again and Activate it. For Basic Actions it will also show you Number of Activations for this action.

=== Logic Inspector ===

It will show you relevant information for given Logic. When used as a standalone variant, you have to input a entity name of desired logic. This can be also opened from variety of other places.

For Each logic, you can enable Action debug that can be used in Script Editor to break a break-point. Termination status is shown. If said logic has Actions, it can show you the hiearchy of these and further debug it.

In Cases of Logic Counter, it shows the Counter Value and gives you ability to Increase/Decrease Counter.

=== Plugin Inspector ===

It will show you relevant information for given layer plugins. When used as a standalone variant, you have to input a Layer Name to inspect which is the unique name of desired entity. This can be also opened from variety of other places.

For Each plugin, you can enable Plugin debug that can be used in Script Editor to break a break-point. and then depending on the variant of the plugin, it will show you relevant info/options.

* Trigger - Will have option to see and enable/disable Periodic Querries and Force Finish Trigger * OnInventoryChange - Will show you respective actions and ability to further inspect/debug it * SpawnPoint - Will show you respective actions and ability to further inspect/debug it * OnDestroyEvent - Will show you respective actions and ability to further inspect/debug it

=== Condition Inspector ===

It will show you relevant information for a given layer's Conditions. When used as a standalone variant, you have to input a Layer Name to inspect, which is the unique name of the desired entity. This can be also opened from a variety of other places.

For each Condition, you can enable Condition debug that can be used in Script Editor to break a break-point. You can also Init said action condition again and see if the Condition is True/False.

=== Debug Actions ===

It will show you a list of predefined Debug Actions.

For Each Debug Action, you can select it from the list and activate it.

== Log Messages ==

Scenario Framework prints messages into the log.

Some of them are there to inform you about the most important things and usually, you do not need to worry about them as much.

They always have Scenario Framework word contained in them.

However, there are two other types of log messages that vary in severity:

* (W) - Warnings - These messages warn you about improper usage of the system and can give you a hint as to why is something not working as you might expect. ** This can help you troubleshoot your scenarios * (E) - Errors - These messages have high severity and mark that something is technically not working (not necessarily user fault). ** They can help you understanding an issue in configuration<!-- but usually, if you encounter these, please report them to developers here FILE TICKET LINK WIP -->

== Components ==

All Scenario Framework components can be found in {{hl|Prefabs/Systems/Scenario Framework/Components}}.

=== Shared Attributes ===

All of the listed components below contain a lot of shared attributes and we are going to quickly go through them.

Some of those categories are then further expanded by the specific components but that will be explained within them.

Attributes are divided into categories:

==== Children ==== This Category contains handling of the child layers that is affecting spawning of them

''Spawn Children'' - Controls how many child layers will get spawned.

It provides 4 different options: * {{hl|ALL}} - Spawns all Children * {{hl|RANDOM_ONE}} - Spawns random child * {{hl|RANDOM_MULTIPLE}} - It spawns random number of children based on the Random Percent attribute setting and number of children according to this equation: {{hl|NumberOfChildren / 100 * RandomPercentAttribute}}; children are then picked randomly and results are rounded up to the closest whole number * {{hl|RANDOM_BASED_ON_PLAYER_COUNT}} - It spawns number of children based on how many children are there compared to the number of players according to this equation: {{hl|NumberOfChildren / 100 * (CurrentNumberOfPlayers / MaximumNumberOfPlayers) * 100}}; children are then picked randomly and results are rounded up to the closest whole number

''Random Percent'' - Sets the random chance for the Spawn Children

''Enable Repeated Spawn'' - Enables repeated Spawn of children layers in hierarchy

''Repeated Spawn Number'' - If Repeated Spawn is enabled, how many times can children be spawned? If set to -1, it is unlimited

''Repeated Spawn Timer'' - If Repeated Spawn is enabled, how frequently it will spawn next wave of children? Value -1 means disabled, thus children will not be spawned by the elapsed time.

==== Asset ==== This Category handles the Asset properties.

More specific layers/slots have expanded attributes in this category, but here is the only one for the inheritance purposes

''Faction Key'' - Faction key that corresponds with the SCR_Faction set in FactionManager.

It also applies this attribute to all the child layers unless they override it there with different key. If left empty, "US" Faction Key is used as default. For Layer Tasks, this dictates for which Faction is that task going to be assigned.

{{GVI|armaR|1.1.0|size= 0.75}} ''Can Be Garbage Collected'' - If the spawned entity can be garbage-collected (Default setting is set to true so the Garbage Collector can delete this entity)

==== Debug ==== This Category handles debug visuals

''Show Debug Shapes During Runtime'' - When enabled, there will be a colored sphere on the position of the layer. In some instances, size of a sphere is set by the trigger range or Dynamic Despawn range.

''Show Debug Shapes In Workbench'' - When enabled, there will be a colored sphere on the position of the layer in World Editor. In some instances, size of a sphere is set by the trigger range or Dynamic Despawn range.

==== Activation ==== This Category handles activation type, conditions and Dynamic Spawn/Despawn.

===== Activation Type ===== Sets how the layer is activated and spawned.

It has the following options: * {{hl|SAME_AS_PARENT}} - It activates the same way how the parent layer gets activated * {{hl|ON_TRIGGER_ACTIVATION}} - It gets activated from the trigger or actions that are using this activation type to activate it <!-- (WIP - MORE DETAILS AS IT IS UNCLEAR) --> * {{hl|ON_AREA_TRIGGER_ACTIVATION}} - It gets activated when the parent area of this layer has trigger and that gets activated * {{hl|ON_INIT}} - It gets activated right after said layer is created (which does not need to happen on scenario start, but for example when said layer is being spawned somehow else<!-- WIP, MORE DETAILS NEEDED -->) * {{hl|ON_TASKS_INIT}} - It activates after scenario is started and the system for random task generation is triggered <!-- (WIP - MORE DETAILS NEEDED?) --> * {{hl|CUSTOM1}}, {{hl|CUSTOM2}}, {{hl|CUSTOM3}}, {{hl|CUSTOM4}} - These are for modders to activate this layer via custom ways and you will not use it in common scenario creating <!-- (WIP - BETTER PHRASING?) -->

''Exclude From Dynamic Despawn'' - It excludes this layer from being despawned by Dynamic Spawn/Despawn system. Layer will get spawned, but it will be skipped and will not get despawned, including all the children layers of this layer

{{ArgTitle|5|Activation Conditions|{{GVI|armaR|1.1.0|size= 0.75}}}} Conditions that will be checked upon init and based on the result it will let this to finish init or not. Conditions are evaluated in order which they are inserted here. Modders can easily add their own conditions * {{GVI|armaR|1.2.0|size= 0.75}} Character In Vehicle Condition ** Getter - Entity to check * {{GVI|armaR|1.5.0|size= 0.75}} ADS Condition ** Getter - Entity to check ** Must Be ADS - Entity(s) must have this aim down sights state * Day Time Condition ** Only During Day - If true, this can be activated only during the day. If false, only during the night. * Day Time Hour Condition - Allows you to limit activation to only a certain time window ** Min Hour - Minimal day time hour ** Max Hour - Maximal day time hour * Weather Condition ** Min Wind Speed - Minimal wind speed in meters per second ** Max Wind Speed - Maximal wind speed in meters per second ** Min Rain Intensity - Minimal rain intensity ** Max Rain intensity - Maximal rain intensity * {{GVI|armaR|1.2.0|size= 0.75}} Variable Value Condition ** Variable Name - Name of the variable ** Variable Value To Check - Check if the variable has set this value or not * {{GVI|armaR|1.2.1|size= 0.75}} Entity Damage State Condition<br>Contains a mistake in class name, where it is Entityk.{{Feature|informative|Contains a mistake in class name, where it is {{hl|Entityk}}.}} ** Getter - Entity to check ** Damage State - Damage state to check. Returns true when the entity state match. If entity doesn't have damage manager, returns true. If array of entities is passed on, return false when at least one entity doesn't fit selected damage state. * {{GVI|armaR|1.2.1|size= 0.75}} AI Threat State Condition ** Entity - AI Entity to evaluate. Leave empty to use entity spawned by this slot. ** AI Threat State - What threat state should be checked by this condition. If used on a group, return true when at least one member of group has this threat state. * {{GVI|armaR|1.2.1|size= 0.75}} Entity Distance Condition ** Getter A - Entity A ** Getter B - Entity B ** Min Distance - Minimum distance between entities in metres (Inclusive). ** Max Distance - Maximum distance between entities in metres (Inclusive). -1 for infinity" * {{GVI|armaR|1.2.1|size= 0.75}} Medical Condition ** Getter - Entity to check ** Requiered Medical Conditions - Character must have all of these medical conditions. *** Bleeding - Checking the bleeding status according to further settings **** Can Bleed Anywhere - If true, is satisfied by bleeding on any HitZone. **** Hit Zone Names - Is satisfied by bleeding on any specified HitZone. **** Hit Zones Groups - Is satisfied by bleeding in any specified HitZoneGroups. *** Health - Similar to SCR_ScenarioFrameworEntitykDamageStateCondition but with propulated selections for character and character hit zone groups. **** Health Minimum - Minimum health of hit zone or group to satisfy condition. (Inclusive) **** Health Maximum - Maximum health of hit zone or group to satisfy condition. (Inclusive) **** Use Default Health - If true, uses the health hitpoint. **** Hit Zone Names - Is satisfied by health on any specified hit zone. **** Hit Zones Groups - Is satisfied by health in any specified hit zone groups *** Tourniquet - Checking the tourniquet status **** Can Apply Tourniquet Anywhere - If true, is satisfied by tourniquet on any HitZone. **** Hit Zones Groups - Is satisfied by tourniquet in any specified HitZoneGroups. * {{GVI|armaR|1.2.1|size= 0.75}} Task Status Condition ** Getter - Layer task(s) to check for condition. If multiple layer tasks are specified, they must all have an acceptable state. ** Acceptable Task States - If the layer task is any of these states, the condition will be statisfied * {{GVI|armaR|1.2.0|size= 0.75}} Variable Value Condition ** Variable Name - Name of the variable ** Variable Value To Check - Check if the variable has set this value or not * {{GVI|armaR|1.5.0|size= 0.75}} Stance Condition ** Getter - Entity to check ** Requiered Stances - Entity(s) must have at least one of the required stances. For entity(s) that are not characters, the condition will return true * {{GVI|armaR|1.5.0|size= 0.75}} Damage Context Condition Collider ** Collider IDs - Accepted collider IDs * {{GVI|armaR|1.5.0|size= 0.75}} Damage Context Condition Damage Type ** Accepted Damage Types - Accepted damage types * {{GVI|armaR|1.5.0|size= 0.75}} Damage Context Condition Hit Zone ** Hit Zone Group Selector - Hit Zone Group * {{GVI|armaR|1.5.0|size= 0.75}} Condition Projectile Prefab ** Projectile Prefab Name - Projectile Prefab Name * {{GVI|armaR|1.5.0|size= 0.75}} Damage Context Condition Value ** Activation Value - Activation Value * {{GVI|armaR|1.5.0|size= 0.75}} Resource Condition ** Getter - Entity to check ** Required Resource Conditions - Required resource related conditions * {{GVI|armaR|1.5.0|size= 0.75}} Resource Condition Value ** Target Value - Activation amount ** Comparison Operator - Operator * {{GVI|armaR|1.5.0|size= 0.75}} Item In Storage Condition ** Getter - Entity with storage to check ** Prefab Resources - Prefabs to search ** Negation - Negation of condition * {{GVI|armaR|1.5.0|size= 0.75}} Time Specific Condition ** Hours - Minimal day time hour ** Minutes - Maximal day time hour ** Seconds - Maximal day time hour ** Comparison Operator * {{GVI|armaR|1.5.0|size= 0.75}} Weapon Ammo Condition ** Getter - Entity to check. ** Required Percentage - Activation Percentage

{{ArgTitle|5|Activation Condition Logic|{{GVI|armaR|1.2.1}}}} Which Boolean Logic will be used for Activation Conditions * Currently supported types: AND, OR, NOT, XOR

Exclude From Dynamic Despawn - It excludes this layer from being despawned by Dynamic Spawn/Despawn system. Layer will get spawned, but it will be skipped and will not get despawned, including all the children layers of this layer

==== OnActivation ==== This Category handles what happens after this layer is fully spawned and activated

Activation Actions - Executes Scenario Framework actions in listed order (see {{Link|#Actions}})

==== Plugins ==== This Category handles what happens after this layer is fully spawned and activated

Plugins - Attaches Scenario Framework plugins in listed order (see {{Link|#Plugins 2|Plugins}})

=== Area ===

See {{Link|#Area}}

This variant can be used to create generic task without any specialised logic and it is expected from the Scenario Creator to control it via other means (Such as Actions).

Same Attributes as {{Link|#Layer}}

==== Debug ==== ''Show Debug Shapes In Workbench'' - Due the fact that Area can handle both triggers and Dynamic Spawn/Despawn, this sets whether or not debug sphere is visible in workbench or not

==== Activation ==== Dynamic Despawn - Enables/Disables Dynamic Spawn/Despawn feature for particular area - see {{Link|#Dynamic Spawn/Despawn}}

Dynamic Despawn Range - How close at least one observer camera must be in order to activate spawn/despawn - see {{Link|#Dynamic Spawn/Despawn}}

==== OnActivation ==== Trigger Actions - Executes Scenario Framework actions in listed order when the Trigger attached to this Area is activated (see {{Link|#Actions}})

==== Trigger ==== This category handles attached trigger spawning. Also check out the {{Link|#Plugins 2|Plugins}} for the Trigger Plugin to have greater control over the trigger

Trigger Resource - Sets which Trigger prefab will be used <!-- (more about trigger Prefabs here - WIP) -->

Area Radius - Sets the radius of the Area for this trigger

Once - If trigger is activated (conditions are true), it will be activated just one or every time it is true

=== Layer ===

See {{Link|#Layer}}

No additional attributes

=== LayerTask ===

See {{Link|#LayerTask}}

This variant can be used to create generic task without any specialised logic and it is expected from the Scenario Creator to control it via other means (Such as Actions).

==== Task Enums ==== This Category handles different enums for Task

Type Of Task - Type of task used for ON_TASKS_INIT generation

Task Ownership - Who will be the owner of the task for whom it will be assignable. By default, it will be owned by the given Faction.

Task Visibility - To whom the task will be visible. By default, it will be visible for the given Faction.

Task UI Visibility - Where the task will be visible in UI. By default, it will be visible in the Task List and on the Map.

==== Task ==== This Category handles setting of task properties

Task Title - Name of the task in the list of tasks

Task Description - Description of the task

Task Prefab - Task prefab

Override Object Display Name - Overrides display name of the spawned object for task purposes

Task Functions On Its Own - Whether the task has functionality on its own or is just a holder for a parent task without actual functionality

Finish Conditions - Conditions that will be checked upon trying to finish a task

Finish Condition Logic - Which Boolean Logic will be used for Finish Conditions.

==== Subtask ==== This Category handles further setup of the subtask feature

Subtasks Description - Description that is displayed above subtasks in the parent task

Is Subtask - If it is a subtask, it will be grouped under the topmost LayerTask or, if the attribute target parent task is filled, it will group it under that

Is Optional - If this is a subtask, whether or not the subtask is optional

Parent Layer Task - Name of the parent LayerTask if this LayerTask is set to be a Subtask. It will override default behavior, where the parent LayerTask is the topmost LayerTask in hierarchy.

=== Task UI ===

This Category handles UI settings

Task Icon Set - Task icon set

Task Icon Name - Name of the specific icon from the icon set

Progress Bar - Whether or not to show a progress bar

Calculate Progress Bar On Completed Tasks - It will set percentage of progress based on the number of completed tasks that are not optional

Place Marker On Subject Slot - Marker on map is placed directly on the task subject Slot or on layer Slot

Progressed State Change Popup - When this task will get its state changed to PROGRESSED, it will trigger a popup message

==== Task State Changed Actions ==== Trigger Actions On Finish - What to do once the task is finished

Actions On Created - What to do once the task is created

Actions On Failed - What to do once the task is created

Actions On Cancelled - What to do once the task is cancelled

Actions On Progress - What to do once the task is progressed

Actions On Assigned - What to do once the task is updated

=== LayerTaskMove ===

Layer Task specialised for Task Move. It is expecting to have {{Link|#SlotMove}} in its spawned hierarchy.

Same Attributes as {{Link|#LayerTask}}

=== LayerTaskDestroy ===

Layer Task specialised for Task Destroy. It is expecting to have {{Link|#SlotDestroy}} in its spawned hierarchy.

No additional attributes

=== LayerTaskKill ===

Layer Task specialised for Task Kill. It is expecting to have {{Link|#SlotKill}} in its spawned hierarchy.

No additional attributes

=== LayerTaskDefend ===

Layer Task specialised for Task Defend. It is expecting to have {{Link|#SlotDefend}} in its spawned hierarchy.

No additional attributes

==== Task ==== This Category is further expanded for the Task Defend by additional attributes:

Trigger Name - Task Defend requires a trigger attached to it for it to work in cases where you want to set this task to defend some entity or both entity and area. Input the name of the slot that spawns the trigger

==== Defend Params ==== This category contains all the Defend parameters that you can set for this type of task

Countdown Title Text - Text that will be displayed above the countdown number

Defend Time - For how long you have to Defend the objective of the task. Value -1 is for indefinitely.

Display Countdown HUD - When enabled, it will display the text and how much time remains for the Task Defend

Countdown HUD - Layout of the Countdown HUD

Faction Settings - Here you set who is considered as a Defender and Attacker for this Task. Each entry then contains these two attributes: * FactionKey - Faction key that corresponds with the {{Link/Enfusion|armaR|SCR_Faction}} set in FactionManager * Count Only Players - When disabled, all units from this faction will be counted with for other Task Defend conditions

Min Defender Percentage Ratio - When compared to the number of attackers, minimum of how much of the characters present in the task area must be from defending side to successfully complete the objective on evaluation

Attacker Layer Names - Layer containing attacker forces. Can be more layers, but these layers must include only AI units/groups and nothing else

Earlier Evaluation - When enabled, it will can finish the task earlier than the countdown when all attackers are eliminated. Can be combined with Delayed Evaluation.

Delayed Evaluation - When enabled, the evaluation will be delayed and defenders will need to eliminate all attackers in order for the task to be successfully completed. Can be combined with Earlier Evaluation.

Display Delayed Evaluation Text - When enabled, it will display the text to inform players that they have to eliminate all attacker units

Delayed Evaluation Text - Text that will be displayed to inform players that they have to eliminate all attacker units

=== LayerTaskClearArea ===

Layer Task specialised for Task Clear Area. It is expecting to have SlotClearArea in its spawned hierarchy.

No additional attributes

=== LayerTaskDeliver ===

Layer Task specialised for Task Deliver. It is expecting to have SlotPick in its hierarchy spawned and then SlotDelivery spawned somewhere else or to be spawned for full funtionality.

No additional attributes

==== Task ==== This Category is further expanded for the Task Deliver by additional attributes:

Task Title Updated - Sets new task title when task gets updated

Task Description Updated - Sets new task description when task gets updated

Intel Map Marker Update Delay - If Place Marker On Subject Slot is true, the task marker will be on position of the task item and this attribute can set a delay between the updates for the position

=== Slot ===

See {{Link|#Slot}}

No additional attributes

==== Asset ==== This Category is further expanded by following attributes:

Object To Spawn - Prefab name of the object to be spawned

{{GVI|armaR|1.2.1|size= 0.75}} Faction Switched Objects - Selects which object to spawn based on the selected Faction Key. Designed to work with Faction Aliases feature. * Faction Key - Required faction key to spawn this object. * Object To Spawn - Prefab name of the object to be spawned

ID - Unique name of the entity that can be later used for identification and finding via {{Link|#Getters}} in the scenario

Use Existing World Asset - If enabled, slot will not spawn new object, but it will rather use the object already existing in the world in the vicinity of it

Override Object Display Name - Overrides display name of the spawned object for task purposes

==== Randomization ==== This Category handles the randomisation of asset that is supposed to be spawned

''Randomize Per Faction'' - Randomise spawned asset(s) per Faction Key Attribute which needs to be filled as well. Overrides Object To Spawn Attribute.

Entity Catalog Type - Select Entity Catalog type for random spawn

Include Editable Entity Labels - Select Entity Labels which you want to optionally include to random spawn. If you want to spawn everything, you can leave it out empty and also leave Include Only Selected Labels attribute to false.

Exclude Editable Entity Labels - Select Entity Labels which you want to exclude from random spawn

Include Only Selected Labels - If true, it will spawn only the entities that are from Included Editable Entity Labels and also do not contain Label to be Excluded

==== Composition ==== This Category handles setting behavior for potential composition to be spawned. It currently has only one attribute:

Ignore Orient Children To Terrain - When disabled orientation to terrain will be skipped for the next composition. This is used for example when placing sandbags and you want "stack" them at top of each other.

=== SlotAI ===

SlotAI is specialised to handle AI units. It can spawn both singular units or groups. Using the Waypoints category and Misc AIs can be further directed and adjusted.

No additional attributes

==== Waypoints ==== This Category handles the setting of task properties and can override what is set in the parent TaskLayer of this SlotTask

{{GVI|armaR|1.1.0|size= 0.75}} Waypoint Set - Here you can define and set the layer containing waypoints and further adjust how they are going to be used * Layer Name - Here you put name of the layer that contains SlotWaypoints or directly the name of desired SlotWaypoint. In case you want to have waypoints cycled, just input name of the SlotWaypoint that spawns Cycle Waypoint.

Waypoint Group Names - '''obsolete''' since {{GVI|armaR|1.1.0|size= 0.75}}, it will be removed in {{GVI|armaR|1.2.0|size= 0.75}}. Please relocate it to '''Waypoint Set'''.

Spawn AI on WP Pos - If true, it will spawn AI on the first WP Slot

WP To Spawn - Default waypoint that will be spawned for the AI if Waypoint Set is not defined or does not contain any waypoints.

==== Balance ==== This Category handles the setting of task properties and can override what is set in the parent TaskLayer of this SlotTask

Balance On Players Count - Spawns number of AIs in the group based on the player count according to the equation that takes the number of players currently playing and scales it to determine the appropriate number of units to spawn, using a randomly determined starting point in the spawning range. The number of units is linearly mapped so that the more players there are, the closer the spawned units reach the maximum number dictated by the prefab, starting from a base number decided randomly between 1 and 3.

Min Units In Group - Least amount of AIs in the group after balancing occurs. Will not exceed maximum number of units defined in the group prefab.

{{ArgTitle|4|Common|{{GVI|armaR|1.1.0}}}} Contains some common attributes for the AI to be set.

AI Group Formation - AI group formation

AI Skill - AI skill in combat

AI Combat Type - AI combat type

Perception Factor - Sets perception ability. Affects speed at which perception detects targets. Bigger value means proportionally faster detection.

Group Prefab - Each AI needs to have their group and here is the default group prefab defined

=== SlotTrigger ===

Slot specialised to spawn trigger prefabs <!-- (enf link here WIP) --> and then be further adjusted via {{Link|#Plugins 2|Plugins}}

No additional attributes

{{ArgTitle|3|SlotPlayerTrigger|{{GVI|armaR|1.2.0}}}}

Slot specialised to spawn trigger prefab already set to detect players and then be further adjusted via {{Link|#Plugins 2|Plugins}}

No additional attributes

=== SlotTask ===

This slot is is supposed to spawn generic empty task where Scenario Creators are in control of the whole logic via other means (Such as Actions and so on). Other SlotTask types are inheriting from it and have specialised behaviour already in place.

No additional attributes

==== Task ==== This Category handles the setting of task properties and can override what is set in the parent TaskLayer of this SlotTask

Task Title - Sets name of the task the player Task List

Task Description - Sets text description of the task in the player Task List

Task Execution Briefing - Here you can put text that can then get written into the Execution part of the Briefing via this action (see {{Link|#Actions}})

{{GVI|armaR|1.1.0|size= 0.75}} Task Intro Voiceline - StringID for the Intro Voiceline action to be processed. Processing must be setup after tasks are initialised.

{{GVI|armaR|1.2.1|size= 0.75}} Finish Conditions - Conditions that will be checked upon trying to finish a task

{{GVI|armaR|1.2.1|size= 0.75}} Finish Condition Logic - Which Boolean Logic will be used for Finish Conditions

=== SlotMoveTo ===

This slot is designed to work with LayerTaskMove and it is supposed to spawn a Trigger prefab with attached Plugin Trigger <!-- (see more here WIP) --> for the desired functionality of Task Move creation.

No additional attributes

=== SlotDestroy ===

This slot is designed to work with LayerTaskDestroy. It attaches listener to the spawned entity which listens whether or not the entity is destroyed. If the target entity is a vehicle, it will also gets triggered by flooding the engine with water.

No additional attributes

=== SlotKill ===

This slot is designed to work with LayerTaskKill. It works very similarly as SlotDestroy but this is intended for AI characters.

No additional attributes

=== SlotDefend ===

This slot is designed to work with {{Link|#LayerTaskDefend}}. It can either spawn Trigger <!-- (more about triggers here WIP) --> to work as a Defend Area task, or it can spawn an entity (can be a character or vehicle, anything that has a DamageManager component) and then the task is about to defend provided entity. Or you can combine it by spawning entity to defend and linking trigger in the LayerTaskDefend from the outside SlotTrigger to expand the possibilities and parameters of this task.

No additional attributes

=== SlotClearArea ===

This slot is designed to work with {{Link|#LayerTaskClearArea}}. It spawns TriggerDominance <!-- (more about triggers here WIP) --> that is adjusted via Plugin Trigger that needs to be tweaked for each usage and you have to put FactionKey of the faction that will receive the task to Clear Area into the Activated By This Faction Attribute.

{{GVI|armaR|1.3.0|size= 0.75}} Ignored Faction Keys - Ignored Faction Keys that won't be used for any calculations for this Slot Clear

No additional attributes

=== SlotPick ===

This slot is designed to work with LayerTaskDeliver. It will spawn the desired item that will be used for this task and it handles updates of the task title + description in the Task category.

No additional attributes

==== Task ==== Task Title Updated1 - Sets name of the task the player Task List when target Intel is picked up

Task Description Updated1 - Sets text description of the task in the player Task List when target Intel is picked up

Task Title Updated2 - Sets name of the task the player Task List when target Intel is dropped

Task Description Updated2 - Sets text description of the task in the player Task List when target Intel is dropped

=== SlotDelivery ===

This slot is designed to work with LayerTaskDeliver. It spawns TriggerCharacterSlow <!-- (more about triggers here WIP) --> and Plugin Trigger that is used to detect items spawned from SlotPick.

No additional attributes

==== Task ==== Associated Task Layers - Here you can define which LayerTaskDeliver is associated with this SlotDelivery in order to deliver Intel there

=== SlotExtraction ===

This slot is designed to work with LayerTaskMove. It is just a slightly adjusted variant of SlotMove but with countdown mechanics set in the Plugin Trigger <!-- (more about triggers here WIP) -->

No additional attributes

=== SlotTriggerClearArea ===

{{Feature|informative|Placeholder for a planned feature.}}

{{ArgTitle|3|SlotMarker|{{GVI|armaR|1.1.0}}}}

SlotMarker is specialised to handle map markers. Be aware that we are not using the '''Object To Spawn''' but specialised attribute in the Map Marker category.

No additional attributes

==== Map Marker ==== Map Marker Type - Here a map Marker Type is selected. It serves as an API for the MapMarker system and will be using this config ({{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Map/MapMarkerConfig.conf}}).<br> There are currently two types available: * Marker Custom - Using the {{hl|PLACED_CUSTOM}} from the config above ** Map Marker Text - Text which will be displayed for the Map Marker ** Map Marker Icon - You can choose from the dropdown menu ** Map Marker Color - You can choose from the dropdown menu ** Map Marker Rotation - Rotation of the Map Marker (from -180 to 180 degrees) ** Can Be Removed By Owner - Can this map marker be deleted from map by owner of the map * Marker Military - Using the {{hl|PLACED_MILITARY}} from the config above * Map Marker Text - Text which will be displayed for the Map Marker ** Map Marker Faction Icon - You can choose from the dropdown menu ** Map Marker Dimension - You can choose from the dropdown menu ** Map Marker Type1 Modifier - You can choose from the dropdown menu ** Map Marker Type2 Modifier - You can choose from the dropdown menu

{{ArgTitle|3|SlotWaypoint|{{GVI|armaR|1.1.0}}}}

SlotWaypoint is made to handle AI Waypoints. Be aware that the attribute in the Waypoint category is used, not the '''Object To Spawn''' field.

No additional attributes

==== Waypoint ==== Waypoint - This gives the option to select a waypoint from a huge variety of them. It provides a simple API for all the waypoint Prefabs located in the Waypoints directory ({{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/AI/Waypoints}}).

Currently, there are these available waypoints intended to be used: * Animation * Artillery Support * Attack * Capture Relay * Cycle * Defend * Defend CP (Combat Patrol) * Defend Hierarchy * Defend Large * Defend Large CO (Combat Ops) * Deploy Smoke * Follow * Forced Move * Get In * Get In Nearest * Get Out * Heal * Loiter CO (Combat Ops) * Move * Observation Point * Open Gate * Patrol * Patrol Hierarchy * Scout * Search And Destroy * Smart Action * Suppress * User Action * Wait

If you want to have Waypoints cycled, just select the Cycle Waypoint. Here you have two options: * input the Layer name that contains the SlotWaypoints you want to be cycled into the "Layers With Waypoints To Cycle" attribute * or if this waypoint is inserted into the target layer, you can leave it empty and it will get the parent layer where this Cycle Waypoint is located and it will add all the non-cycle waypoints to be cycled.

== Plugins ==

Plugins allow you to add more functionalities, usually to slots, that can further help you creating more specific things. Some of the plugins are already in use, most notably the Plugin Trigger to set attributes to the spawned triggers. You can inherit from the base class of the plugin to script your own plugins to easily add new features to your scenarios.

=== OnDestroyEvent ===

Plugin intended to be used on Any slot to activate actions upon asset destruction

Actions On Destroy - Upon asset destruction, it will activate set actions (see {{Link|#Actions}})

=== OnInventoryChange ===

Plugin intended to be used on Any slot to activate actions upon asset inventory changes in terms of item addition/removal.

Actions On item Added - Once upon an item is added to the inventory of the asset, it will activate set actions (see {{Link|#Actions}})

Actions On Item Removed- Once upon an item is removed from the inventory of the asset, it will activate set actions (see {{Link|#Actions}})

{{ArgTitle|3|SpawnPoint|{{GVI|armaR|1.1.0}}}}

Spawn Point plugin is used to manipulate Spawn point properties and provide the possibility to execute actions upon it being used. These actions will always carry the player entity that just spawned.

Spawn Radius - Find empty position for spawning within given radius. When none is found, entity position will be used.

Faction - Determines which faction can spawn on this spawn point.

Show In Deploy Map Only - If Spawnpoint will be showed just in the Deploy Map

Timed Spawn Point - Use custom timer when deploying on this spawn point. Takes the remaining respawn time from SCR_TimedSpawnPointComponent

Info - Allows to select which Info to use for filling the name or other properties.

Use Nearby Spawn Positions - Allow usage of Spawn Positions in range

Spawn Positions Usage Range - Spawn position detection radius, in metres

Respawn Time - Additional respawn time (in seconds) when spawning on this spawn point

{{GVI|armaR|1.3.0|size= 0.75}} Pass Spawned Entity - Pass Spawned Entity for Actions On Spawn Point Used. Otherwise it will pass the slot (layer) this plugin is attached to.

Actions On Spawn Point Used - What to do once Spawn Point is used. These actions will always carry the player entity that just spawned.

=== Trigger ===

Trigger Plugin is used to set attributes for the triggers that are being spawned. It is designed to work with trigger prefabs that inherit from the {{Link/Enfusion|armaR|SCR_CharacterTriggerEntity}} ({{hl|TriggerCharacterSlow}} and {{hl|TriggerAnyPlayerSlow}}) which has variety of use-cases even though its name would suggest it is mainly used for Characters. With the variety of attributes to set, it allows you to modify the trigger in very interesting way and create a lot of different tasks/scenarios/logics once you understand what each attribute does and what it allows.

One of the most common use-cases for triggers are tasks which are also included in Samples such as Task Move, Task Exfil, Task Clear Area, Deliver Weapons In Vehicle to certain Area or Deliver cars/any other items to certain area.

Area Radius - Radius of the trigger coverage

Activation Presence - This controls the category of presence that can activate this trigger. * {{hl|PLAYER}} - Trigger will require at least 1 player character inside for it to activate * {{hl|ANY_CHARACTER}} - Trigger will require any character inside for it to activate * {{hl|SPECIFIC_CLASS}} - This setting is supposed to be used when you are working with Specific Class Names attribute and it will require to have them inside the trigger for it to activate * {{hl|SPECIFIC_PREFAB_NAME}} - Works similarly as {{hl|SPECIFIC_CLASS}} but intended mainly for Prefab Filter. However it will use OR with Specific Class Names and other conditions for the trigger to activate

{{GVI|armaR|1.3.0|size= 0.75}} Specific Entity Names - Fill the entity names here for detection. Is combined with other filters using OR.

Specific Class Names - Allows you to set list of classnames that will be detected by the trigger (such as ChimeraCharacter, Vehicle and so on). Is combined with other filters using OR.

Prefab Filter - Allows you to add list of Prefab Filters that each will allow you to specify a prefab name and whether or not it should include child prefabs. Is combined with other filters using OR.

Activated By This Faction - For which faction this trigger is assigned. This also influences the Activation Presence which will additionally check the Faction for all the filtered entities inside.

Custom Trigger Conditions - This allows you to extend the trigger conditions for when the trigger gets activated. There are already two conditions in-place, but this is created in a way that you can create your own conditions in script and you will see them here. Conditions are then evaluated in the listed order and if one fails, it will not continue to the other one.

* Specific Class Name Count - Used for counting how many times specific class name is inside the trigger. It works similarly like the Specific Class Names attribute but with addition of a Classname count attribute where you can set the desired number.<!-- --> Additionally, this will add the class name to the trigger filter from this condition so you do not have to add it again in the Specific Class Names attribute. * Specific Prefab Count - Used for counting how many times specific prefab is inside the trigger.<!-- --> It works similarly like the Prefab Filter attribute but with addition of a Prefab count attribute where you can set the desired number.<!-- --> Additionally, this will add the prefab to the trigger filter from this condition so you do not have to add it again in the Prefab Filter attribute.

Search Vehicle Inventory - Entities (usually items) that are in inventory of vehicles are not detected by triggers in default. However, this Plugin added the such behavior as it is sometimes needed to detect entities that are situated in inventories of vehicles and this attribute allows just that.

Once - If set to true, the trigger will be activated only once if conditions are true. If set to false, the trigger will get activated every time its conditions are true.

{{GVI|armaR|1.3.0|size= 0.75}} Activate On Empty - Activate the trigger once it is empty

Update Rate - How frequently is the trigger updated and performing calculations. Lower numbers will decrease performance.

Minimum Players Needed Percentage - Minimum players needed to activate this trigger when PLAYER Activation presence is selected

Activation Countdown Timer - For how long the trigger conditions must be true in order for the trigger to activate. If conditions become false, timer resets

Notification Enabled - Whether or not the notification is allowed to be displayed

Player Activation Notification Title - Notification title text that will be displayed when the PLAYER Activation presence is selected

Enable Audio - Whether or not the audio sound is played and affected by the trigger

Countdown Audio - Audio sound that will be playing when countdown is active.

{{GVI|armaR|1.2.1|size= 0.75}} Entity Entered Actions - Actions that will be activated when entity that went through the filter entered the trigger and is inside (Be carefull as Framework Triggers activate this periodically if you don't disable the Once attribute)

{{GVI|armaR|1.2.1|size= 0.75}} Entity Left Actions - Actions that will be activated when entity that went through the filter left the trigger

{{GVI|armaR|1.2.1|size= 0.75}} Finished Actions - Actions that will be activated when all conditions are met and Trigger finishes

== Logic ==

Logic entities will allow you to create "systems" that can drive scenario logic based on how you build it.

=== Shared Attributes ===

==== Input ==== Allows you to set Inputs for this counter via the Input Action - do not confuse with Scenario Framework Actions.

===== Input Action ===== These actions if conditions are true, will increase the counter.

{{Feature|informative|Each Input Action has the Latch attribute which currently does nothing.}}<!-- (WIP) -->

====== On Task Event Increase Counter ====== Optional, used to increase the counter based on the task event update and Task Layer name

Task Layer Name - optional attribute, to either set specific {{Link|#LayerTask}} or if left empty, it will be processing all the LayerTasks

Event Name - On Which Task Event update it will increase the counter.

====== Check Entities In Trigger ====== Used to increase the counter based on the selected comparison operator on how many entities are there in the trigger. This is supposed to be used for SlotTrigger.

Getter - To link which Trigger will be compared.

Comparison Operator - Which comparison operator will be used. You can choose from: {{hl|LESS_THAN}}, {{hl|LESS_OR_EQUAL}}, {{hl|GREATER_THEN}}, {{hl|GREATER_OR_EQUAL}} or {{hl|EQUAL}}

Value - To which value will it be compared using the Comparsion Operator attribute and number of entities from trigger linked from Getter attribute

====== Check Entities In Area Trigger ====== Same as {{Link|#Check Entities In Trigger}} but it is supposed to be used directly to Area rather than SlotTrigger.

=== LogicCounter ===

Logic Counter allows you to store the count of something and then it can execute actions (see {{Link|#Actions}}) either on Activation (a.k.a upon reaching certain count) or on Increase. It also has Input that can listen to other events but other Scenario Framework components can also have actions that can increase the counter from their side.

Attribute categories are exactly the same as in {{Link|#Shared Attributes}} with one category as an addition

==== Counter ==== Specific category for the Counter which is keeping the count

Count To - Up until which number it should count towards for it to trigger actions in OnActivate.

=== LogicOR ===

{{Feature|informative|Placeholder for a planned feature.}}

Attribute categories are exactly the same as in {{Link|#Shared Attributes}}

=== LogicSwitch ===

{{Feature|informative|Placeholder for a planned feature.}}

Attribute categories are exactly the same as in {{Link|#Shared Attributes}}

== Getters ==

Getters allow you to retrieve usually entity or a number from something already existing in the Scenario for the purposes of using it usually in some {{Link|#Actions}}.

=== GetArea ===

Area Name - the name of the wanted Area

Return value: <enforce inline>IEntity</enforce>

=== GetAreaTrigger ===

Area Name - the name of the Area from which you want the trigger

Return value: <enforce inline>IEntity</enforce>

{{ArgTitle|3|GetArrayOfPlayers|{{GVI|armaR|1.2.0}}}}

This Getter will return array of player entities with the possibility to filter them using Faction Keys.

Return value: <enforce inline>array<IEntity></enforce>

* Faction Keys - (Optional) You can filter players by putting the Faction Key of desired faction(s); if not used, all factions will be eligible

{{ArgTitle|3|GetArrayOfEntities|{{GVI|armaR|1.5.0}}}}

This Getter will return an array of entities from multiple getters.

Return value: <enforce inline>array<IEntity></enforce>

* Getters - Array of Getters that should return an entity or array of entities

{{ArgTitle|3|GetArrayOfLayerBases|{{GVI|armaR|1.5.0}}}}

This Getter will return an array of layer bases.

Return value: <enforce inline>array<IEntity></enforce>

* Layer Base Names - Names of the layer bases to retrieve

{{ArgTitle|3|GetChildEntityByClassName|{{GVI|armaR|1.5.0}}}}

This Getter will return a child entity with the specified class name.

Return value: <enforce inline>IEntity</enforce>

* Layer Name - Name of the layer containing the child entity * Class Name - Class Name of the child entity to retrieve

{{ArgTitle|3|GetChildEntityByPrefabName|{{GVI|armaR|1.5.0}}}}

This Getter will return a child entity with the specified prefab name.

Return value: <enforce inline>IEntity</enforce>

* Layer Name - Name of the layer containing the child entity * Prefab Name - Prefab Name of the child entity to retrieve

=== GetClosestPlayerEntity ===

This Getter will return the closest Player entity you want to work with using another Getter to get the position of a an object to search from.

Return value: <enforce inline>IEntity</enforce>

* Getter - Supposed to be a getter that will return some entity from which position you want to find the closest player * {{GVI|armaR|1.2.0|size= 0.75}} Faction Keys - (Optional) You can filter players by putting the Faction Key of desired faction(s); if not used, all factions will be eligible

=== GetCountEntitiesInTrigger ===

Trigger Name - Input name of the trigger to get the entity count inside it

Return value: <enforce inline>int</enforce>

=== GetEntityByName ===

This one is one of the most powerful one which will allow you to get any Scenario Framework entity to further work with it.

Return value: <enforce inline>IEntity</enforce>

* Entity Name - the name of the entity you want to obtain (can be be any entity)

{{ArgTitle|3|GetEntityFromSlotManager|{{GVI|armaR|1.5.0}}}}

This Getter will return an entity from a slot manager.

Return value: <enforce inline>IEntity</enforce>

* Layer Name - Name of the layer containing the slot manager * Slot Name - Slot Name from which to retrieve the entity

=== GetLastFinishedTaskEntity ===

This will return the last finished task's entity

Return value: <enforce inline>IEntity</enforce>

=== GetLayerBase ===

Layer Base Name - the name of the wanted Layer

Return value: <enforce inline>IEntity</enforce>

{{ArgTitle|3|GetLayerBaseFromVariable|{{GVI|armaR|1.5.0}}}}

This Getter will return a layer base from a variable.

Return value: <enforce inline>IEntity</enforce>

* Variable Name - Name of the variable containing the layer base

=== GetLayerTask ===

Layer Task Name - the name of the wanted LayerTask

Return value: <enforce inline>IEntity</enforce>

=== GetListEntitiesInTrigger ===

Trigger Name - Input name of the trigger to get array of all the entities inside it

Return value: <enforce inline>array<IEntity></enforce>

=== GetPlayerEntity ===

This will return the first player entity it finds. It is supposed to be used mainly for 1-player scenarios.

Return value: <enforce inline>IEntity</enforce>

{{ArgTitle|3|GetArrayOfPlayers|{{GVI|armaR|1.1.0}}}}

This getter will fetch all the players that are currently spawned in-game with the possibility to filter them using Faction Keys.

Return value: <enforce inline>array<IEntity></enforce>

* {{GVI|armaR|1.2.0|size= 0.75}} Faction Keys - (Optional) You can filter players by putting the Faction Key of desired faction(s). If not used, all factions will be eligible

{{ArgTitle|3|GetRandomLayerBase|{{GVI|armaR|1.1.0}}}}

This getter will randomly select a layer from provided list

Name Of Layers - From this list, random layer will be selected

Return value: <enforce inline>array<IEntity></enforce>

=== GetSpawnedEntity ===

This is one of the most powerful getter to use as it will allow you to get get access to the entities that Slots are spawning.

Return value: <enforce inline>IEntity</enforce>

* Layer Name - Insert name of the Layer you want to get the Spawned Entity from. This name could be a bit misleading, but main usage is on Slot, SlotAI, SlotTrigger and so on.

{{ArgTitle|3|GetSpawnedEntityFromVariable|{{GVI|armaR|1.5.0}}}}

This Getter will return a spawned entity from a variable.

Return value: <enforce inline>IEntity</enforce>

* Variable Name - Name of the variable containing the spawned entity

=== GetTask ===

This is one of the most powerful getter to use as it will allow you to get get access to the task that the LayerTask has attached to it.

Return value: <enforce inline>IEntity</enforce>

* Layer Task Name - name of the wanted LayerTask from which to get the attached Task

{{ArgTitle|3|GetTopParentEntity|{{GVI|armaR|1.3.0}}}}

This getter will return top parent entity from target entity

Getter - Entity to get the top parent from

Return value: <enforce inline>IEntity</enforce>

{{ArgTitle|3|GetVoiceOverActorEntity|{{GVI|armaR|1.2.0}}}}

This getter will allow to get Actor enum and Actor Entity intended for Voice Over Actions

Return value: <enforce inline>IEntity</enforce>

* Actor - Actor enum in VO system * Actor Entity - Entity playing the voiceover.

== Actions ==

Actions allow you to perform runtime changes to many aspects of the game, alter different states, adjust entities and so much more. In many cases, there are things that you would be able to do in-game as a player or as a Game Master very easily. Currently not everything will be here, but things will be added as time goes on and you can add your own actions as well if you properly inherit from the base class.

All of the actions have one shared attribute that is the Max Number of Activations. In default, it is set to -1, which means infinite number of activations. You can restrict the number of activations of each action if you happen to be in a situation where certain action could be called several times from different sources but you only want it to be activated once or x amount of times.

Many of the Actions are designed in a way that if they have single and empty Getter, the action will automatically be working with the spawned entity of the Slot to which this action is attached. This information is specified in each Getter description.

{{ArgTitle|3|ActionAI|{{GVI|armaR|1.1.0}}}}

Allows to perform actions on AIs.

It uses the {{Link|#Getters|Getter}}, but for these actions, the expected target is SlotAI (Using GetLayerBase); or, if this is directly attached on a SlotAI, the Getter can be left empty and will work with the AIs spawned by this slot.

==== AI actions ====

===== Add Waypoint =====

Adds waypoint for the targer AI

Getter - Here you have to specify which SlotWaypoint you want to use for the AI (Using GetLayerBase)

{{GVI|armaR|1.2.0|size= 0.75}} Add On Top Of Queue - True checked, this waypoint will be added on a first position. Otherwise it will append it at the end of the waypoint queue.

{{GVI|armaR|1.2.0|size= 0.75}} Clear Previous Waypoints - True checked, previous waypoints should be cleared.

===== On Waypoint Completed =====

Executes actions if selected waypoint was completed

Getter - Here you have to specify which SlotWaypoint you want to use for the AI (Using GetLayerBase)

Actions On Waypoint Completed - Actions that will get executed upon waypoint completition

{{GVI|armaR|1.2.0|size= 0.75}} Remove On Completed - Remove the event on action completion

===== On Threat State Changed ===== Executes actions based on the Threat state change

AI Threat State - On what Threat State will actions be activated

Actions On Waypoint Completed - Actions that will get executed upon Threat state being changed to desired state

{{ArgTitle|4|On Animation Waypoint Started|{{GVI|armaR|1.5.0}}}} Executes actions based on the Animation Waypoint Started

* Getter - SlotWaypoint that spawns waypoint * Actions On Waypoint Completed - Actions that will be executed upon the provided waypoint completion for the provided AI group * Remove On Completed - Remove the event on action completion * Animation Index - Index of animation that should trigger the event. Leave -1 and set m_eEvaluationState to evaluate only animation as a whole.

{{ArgTitle|4|Set Max Autonomous Distance|{{GVI|armaR|1.2.0}}}} Set max autonomous distance of AI group.

Investigation Distance - Distance in metres

{{ArgTitle|4|Set Max Autonomous Distance|{{GVI|armaR|1.2.0}}}} Set max autonomous distance of AI group.

Investigation Distance - Distance in metres

===== Set Skill ===== Changes AI Skill in run-time to desired value

AI Skill - AI skill in combat

===== Set Combat Type ===== Changes Combat Type in run-time to desired value

Combat Type - AI combat type

===== Set Hold Fire ===== Changes Hold Fire behaviour in run-time

Hold Fire - If AI in the group should hold fire

===== Set Perception Factor ===== Changes Perception factor in runtime to desired value

Perception Factor - Sets perception ability. Affects speed at which perception detects targets. Bigger value means proportionally faster detection.

===== Set Formation ===== Changes Formation in run-time

AI Group Formation - AI formation from available formations

===== Set Character Stance ===== Changes character stance in run-time

AI Character Stance - AI character stance from available formations

===== Set Movement Type ===== Changes movement type in run-time

AI Movement Type - AI movement type from available formations

{{ArgTitle|4|Shoot Flare|{{GVI|armaR|1.2.1}}}} Orders given AI unit to shoot flare at given target. * Getter - Target entity should shoot at. * Target Offset - Offset from target entity. If target entity doesn't exist, origin is shooter position and target vector is offset from his position - use PointInfo"

{{ArgTitle|4|On Agent Count Changed|{{GVI|armaR|1.5.0}}}} Actions that will be executed upon the threat state being changed and matching the desired state * Actions On AI Count Changed - Actions that will be executed upon the threat state being changed and matching the desired state * Comparison Operator * Activation Percentage - Activation Percentage

{{ArgTitle|4|Move AI Into Vehicle|{{GVI|armaR|1.5.0}}}} Teleports AI units into the specified vehicle * Vehicle Getter - Vehicle Getter * Allow Partial Move - Allow partial move of AI units if there are not enough compartments for the whole group. * Allow Driver * Allow Gunner * Allow Cargo

{{ArgTitle|4|Change Attached AI|{{GVI|armaR|1.2.1}}}} * Getter - New target entity, usually selected by name to be hooked into target SlotAI. It is optional; if left empty, this action will just remove all references from target SlotAI.

=== ActionMedical ===

Allows you to change target character medical values or states.

It uses the {{Link|#Getters|Getter}}, but for these actions, expected target is ChimeraCharacter. Usually you will want to use GetSpawnedEntity from some Slot or GetPlayerEntity.

==== Medical Actions ====

===== Add Particular Bleeding ===== Adds bleeding to the specific Hit Zone according to its name (see {{Link/Enfusion|armaR|SCR_CharacterDamageManagerComponent}})

===== Add Random Bleeding ===== Adds random bleeding

===== Remove All Bleedings ===== Removes all bleedings

===== Remove Group Bleeding ===== Removes bleeding from target hit zone group that you can choose from provided ENUM

===== Set Bleeding Rate ===== Sets bleeding rate for the target character

===== Set Blood ===== Sets blood level for the target character

===== Set Permit Unconsciousness ===== Sets whether or not unconsciousness is enabled for target character

===== Set Regeneration Rate ===== Sets regeneration rate for the target character

===== Set Resilience ===== Sets resilience value (used for unconsciousness) for the target character

===== Set Saline Bagged Group ===== Sets whether target hit zone group is saline bagged or not

===== Set Tourniquetted Group ===== Sets whether target hit zone group is tourniquetted or not

=== Add Item To Inventory ===

It uses the {{Link|#Getters|Getter}}, but for this action, expected target is some entity that has Inventory component (such as GetSpawnedEntity, GetPlayerEntity or GetEntityByName)

It uses the Prefab Filter (a scripted class) to add prefabs of items and their count into the target inventory

{{ArgTitle|3|Add Score To CAH Faction|{{GVI|armaR|1.3.0}}}}

This action allows you to add score to specified Faction in Capture and Hold scenario

* Faction Key - Target Faction key * Score To Be Added - The amount of score to be added to the specified faction.

{{ArgTitle|3|Add Task Progress|{{GVI|armaR|1.5.0}}}}

This action allows you to add progress percentage to a given task.

* Getter - Which task to work with - Use GetTask * Percentage - Progress in percent

{{GVI|armaR|1.2.0|size= 0.75}} ID - Name of the entity used for identification. If entity with given name exists suffix _numberOfAttemptToNameEntity is added.

=== Append Briefing Entry Text ===

Appends existing briefing entry texts with the new string on a new line

* Faction Key - Target Faction key * Custom Entry Name - Name of the entry to be appended * Target Text - Text that will be appended

=== Append Briefing Entry Text Based On Task ===

Appends existing briefing entry texts with the new string on a new line that is based on Task Execution Briefing (see {{Link|#Task 4|SlotTask's Task}})

* Faction Key - Target Faction key * Custom Entry Name - Name of the entry to be appended * Getter - Here, it is expected to use the GetTask which will contain the Task Execution Briefing (see {{Link|#Task 4|SlotTask's Task}}) attribute that will get appended

=== Change Layer Activation Type ===

This will change the Layer Activation Type attribute (see {{Link|#Activation}}). It is mainly used for example when you have a layer that is set to be activated via trigger and the trigger activates it and when you have Dynamic Despawn Enabled (see {{Link|Dynamic Spawn/Despawn}}) and you would like the layer to be respawned with subsequent activations, you will need it to change it to {{hl|SAME_AS_PARENT}}

* Getter - the name of the wanted Layer * Activation Type - Sets the Activation Type (see {{Link|#Activation}})

=== Change Layer Termination Status ===

This will change the Layer Termination Status, which is an internal value set usually when child layers are terminated as well or if a slot has its asset destroyed.

* Getter - Name of the layer to change the termination status * Terminated - If layer will be marked as terminated or not

{{ArgTitle|3|Change Task Icon|{{GVI|armaR|1.5.0}}}}

This action allows you to change Task Icon in runtime

* Getter - Which task to work with - Use GetTask * Task Icon Set - Task icon set * Task Icon Name - Name of the specific icon from the icon set

{{ArgTitle|3|Change Task Ownership|{{GVI|armaR|1.5.0}}}}

This action allows you to change Task Ownership in runtime

* Getter - Which task to work with - Use GetTask * Task Ownership - Who will be the owner of the task for whom it will be assignable. By default, it will be owned by the given Faction.

=== Change Task State ===

This action changes the state of the Task. It also triggers other things that listen to the task changed events.

* Getter - Designed to work with the {{Link|#GetTask}} getter * Task State - Sets the task's new state once this action is activated

{{ArgTitle|3|Change Task Title Or Description|{{GVI|armaR|1.2.1}}}}

This action allows you to change Task Title or Description in runtime

* Getter - Which task to work with * Task title - New Task title * Task Description - New task description

{{ArgTitle|3|Change Task UI Visibility|{{GVI|armaR|1.5.0}}}}

This action allows you to change Task UI Visibility in runtime

* Getter - Which task to work with - Use GetTask * Task UI Visibility - Where the task will be visible in UI. By default, it will be visible in the Task List and on the Map.

{{ArgTitle|3|Change Task Visibility|{{GVI|armaR|1.5.0}}}}

This action allows you to change Task Visibility in runtime

* Getter - Which task to work with - Use GetTask * Task Visibility - To whom the task will be visible. By default, it will be visible for the given Faction.

{{ArgTitle|3|Change Task Visibility|{{GVI|armaR|1.5.0}}}}

This action allows you to change Task Visibility in runtime

* Getter - Which task to work with - Use GetTask * Task Visibility - To whom the task will be visible. By default, it will be visible for the given Faction.

{{ArgTitle|3|Remove Task Progress|{{GVI|armaR|1.5.0}}}}

This action allows you to remove Task progress in runtime

* Getter - Which task to work with - Use GetTask * Percentage - Progress in percent

{{ArgTitle|3|Set Task Progress|{{GVI|armaR|1.5.0}}}}

This action allows you to Set Task progress in runtime

* Getter - Which task to work with - Use GetTask * Percentage - Progress in percent

{{ArgTitle|3|Set Parent Task|{{GVI|armaR|1.5.0}}}}

This action allows you to Set Parent task to a given task at runtime

* Getter - Task Getter * Parent Task Layer Name - Parent Task Layer Name * Is Optional - Whether or not the subtask is optional

{{ArgTitle|3|Change Time|{{GVI|armaR|1.3.0}}}}

This action allows you to change time in-game

* Hours - Time of day (hours) * Minutes - Time of day (minutes)

=== Change Trigger Activation Presence ===

This will change the trigger activation presence for a given trigger.

* Getter - You can either use the GetEntityByName provided that the entity you are searching for is indeed the Trigger, you can also put there a GetSpawnedEntity, or even the Area as this action will try to retrieve the trigger from numerous types of getters * Activation Presence <!-- (see the attribute link {{Link|#Activation}}) -->

{{ArgTitle|3|Change User Action Visibility|{{GVI|armaR|1.3.0}}}}

This action allows you to change user action visibility during runtime.

* Getter - Target entity that has the UserAction on it (Optional if action is attached on Slot that spawns target entity) * Action ID - ID corresponding to the action attached on ActionsManagerComponent on target entity * Visible - If checked, user action will be visible, otherwise it will be hidden.

{{ArgTitle|3|Change Weather|{{GVI|armaR|1.3.0}}}}

This action allows you to change weather

* Weather Preset Name - The name of the weather preference as it can be found in weatherStates.conf. * Random Weather Changes - Weather it can change during gameplay * Transition Duration - Transition Duration * Automatic Wind - Automatic Wind behaviour. Untick to further tune it with other attributes. * Wind Speed - Wind Speed in m/s * Wind Direction - Wind Direction

=== Compare Counter And Execute ===

This will compare Logic Counter <!-- (see more about it here WIP LINK) --> value to the set value and if conditions are true, it can execute other actions

* Comparison Operator (see {{Link|#Check Entities In Trigger|comparison}}) * Value - Value that is the counter is to be compared to * Counter Name - Name of the counter entity * Actions - Actions that will be executed (see {{Link|#Actions}})

=== Count Inventory Items And Execute Action ===

This will count items in target entity inventory and optionally execute defined actions.

* Getter - Target entity (Optional if action is attached on Slot that spawns target entity) * Prefab Filter - Which Prefabs and how many out of each will be added to the inventory of target entity * Actions To Execute - If conditions from Prefab Filter are true, it will execute these actions (see {{Link|#Actions}})

{{ArgTitle|3|Damage Wheel|{{GVI|armaR|1.1.0}}}}

This action allows you to set damage to specific wheels on a vehicle.

* Getter - Target entity to damage (Optional if action is attached on Slot that spawns target entity) * Slot Names On Slot Manager - Name of Slots that are defined on the SlotManagerComponent on target vehicle * Health Percentage - Health Percentage to be set for target wheels

=== Delete Entity ===

This will delete provided entity. Be careful as this can be very dangerous action with dire consequences and it cannot be reversed!

* Getter - Any getter that returns an Entity (see {{Link|#Getters}})

{{ArgTitle|3|Debug Action|{{GVI|armaR|1.5.0}}}}

This action is specific for Debug Actions for Debug menu

* Debug Action Name - Debug Action Name shown in debug menu * Debug Actions - List of Actions to perform for debug (see {{Link|#Actions}})

=== End Mission ===

Action to end mission with further adjustments

* Override Game Over Type - If this action should override what is already set as a Game Over Type or not. This can be used to end mission via some specific thing and either let it end with the Game Over Type that is already set there by the flow of the mission previously or you can choose to override it and in the Overriden Game Over Type choose a new type. * Overriden Game Over Type - If Override Game Over Type is set to true, you can choose which type will be used for the end.

{{ArgTitle|3|Action Based On Conditions|{{GVI|armaR|1.2.0}}}}

This action allows you execute other actions if certain conditions are fullfilled at the time of Action activation. It performs this check only once, not periodically.

* Activation Conditions - Conditions that will be evaluated in given order * {{GVI|armaR|1.2.1|size= 0.75}} Activation Condition Logic - Which Boolean Logic will be used for Activation Conditions. * Actions - Actions to be executed if conditions' evaluation is successful. * Failed Actions - Actions to be executed if conditions' evaluation is failed.

=== Execute Function ===

This is intended for advanced usages and it is expected some scripting knowledge. It will allow you to call methods on certain objects with parameters.

* Object To Call The Method From - It is basically a getter, but it will limit you with the methods depending on which class you will choose. You can for example trigger a despawn or repeated spawn on Slots if getting them that way and using their methods. * Method to Call - Name of the method to call * Parameter...Parameter5 - There are the method parameters that you can pass. It is however very limited as it operates with strings.

=== Fail Task If Vehicles In Trigger Destroyed ===

This can fail task (even a previously finished one) when vehicles in trigger provided by the Getter attribute will get destroyed.

* Getter - Here you are supposed to link the trigger (see {{Link|#Getters}}) * Target Layer Task - Name of the Layer Task of which Task will get failed * Caused By Player - If set to true, it will fail the task only when player caused the destruction

{{ArgTitle|3|Feed Param To Task Description|{{GVI|armaR|1.1.0}}}}

This action allows you to feed Params based on Prefab Filter for the specific Slot Task that will be added to the description (Which needs to have parameters in %1 format) * Getter - Name of the slot task to influence the description parameter * Prefab Filter - Which Prefabs and how many of them will be converted to a description string

=== Increment Counter ===

This action increments Counter by 1

* Counter Name - Name of the target Counter

{{ArgTitle|3|Decrease Logic Counter|{{GVI|armaR|1.2.0}}}}

This action decreases Logic Counter by 1

* Counter Name - Name of the target Counter

{{ArgTitle|3|On User Action Event|{{GVI|armaR|1.2.0}}}}

This action allows you to link it to existing user actions on some other entities and based on the User Action Event, you can execute other actions.

* Getter - Target entity that has the UserAction on it (Optional if action is attached on Slot that spawns target entity) * Action ID - Corresponding to the action attached on ActionsManagerComponent on target entity * Getter User - Only listen to changes when UserAction is activated by specific Entity (Optional - leave it empty to trigger by anyone) * User Action Event - On which user action event this ScenarioFramework action will be triggered * Actions - Which actions will be executed based on User Action Event settings

{{ArgTitle|3|Voice Over Play Line|{{GVI|armaR|1.2.0}}}}

This action allows you to play single line from the Voice Over Data Config.

* Voice Over Data Config - Config with voice over data for this action. * Line Name - Name of the line as defined in Voice Over Data Config * {{GVI|armaR|1.2.1|size= 0.75}} Actor Getter - Entity playing the voiceover. Order must be the same as the order of actor enums in Voice Over Data Config. Reminder: Related .acp needs to be present in the SCR_CommunicationSoundComponent of target entity. * {{GVI|armaR|1.2.1|size= 0.75}} Player Getter - Player entity or entities that the voice over will be played for. Reminder: Related .acp needs to be present in the SCR_CommunicationSoundComponent of target entity * {{GVI|armaR|1.2.1|size= 0.75}} Play Immediately - If Voice Line should play right now or wait for the current voice lines to finish and then play it * Getter - Entity playing the voiceover. If left empty, default will be player character. Reminder: Related .acp needs to be present in the {{Link/Enfusion|armaR|SCR_CommunicationSoundComponent}} of target entity. * Actions - Actions that will be triggered once Line finishes playing

{{ArgTitle|3|Voice Over Play Sequence|{{GVI|armaR|1.2.0}}}}

This action allows you to play sequence of lines from the Voice Over Data Config

* Voice Over Data Config - Config with voice over data for this action. * Sequence Name - Name of the sequence as defined in Voice Over Data Config * {{GVI|armaR|1.2.1|size= 0.75}} Actor Getter - Entity playing the voiceover. Order must be the same as the order of actor enums in Voice Over Data Config. Reminder: Related .acp needs to be present in the SCR_CommunicationSoundComponent of target entity. * {{GVI|armaR|1.2.1|size= 0.75}} Player Getter - Player entity or entities that the voice over will be played for. Reminder: Related .acp needs to be present in the SCR_CommunicationSoundComponent of target entity * {{GVI|armaR|1.2.1|size= 0.75}} Play Immediately - If Voice Line should play right now or wait for the current voice lines to finish and then play it * Actors - Entities playing the voiceover. If left empty, default will be player character. Reminder: Related .acp needs to be present in the SCR_CommunicationSoundComponent of target entity. * Actions - Actions that will be triggered once Sequence finishes playing

{{ArgTitle|3|Intro Voiceline Based On Tasks|{{GVI|armaR|1.1.0}}}}

This action will play voice line based on what tasks were generated and their voice line attribute. Action Process Voiceline Enum And String needs to be called before this action for it to work. * Sound - Sound to play * Getter - (Optional) If getter is provided, sound will come from the provided entity

{{ArgTitle|3|Change All Task State|{{GVI|armaR|1.5.0}}}}

This action will change all tasks' task states. * Layer Tasks To Ignore - Layer Tasks To Ignore * Ignored Task States - Ignored Task States * New Task State - New Task State

{{ArgTitle|3|Set Grenade Live|{{GVI|armaR|1.5.0}}}}

This action will set a grenade live. * Getter - Grenade entity to set live. * Enable Simulation - If enabled, grenade will be affected by physics

{{ArgTitle|3|Spawn Objects From Variable|{{GVI|armaR|1.5.0}}}}

This action will spawn objects passed by variable * Name Of Variables To Spawn Objects From On Activation - These variables will be checked for object names once the trigger becomes active.

{{ArgTitle|3|On Weapon Ammo Count Changed Action|{{GVI|armaR|1.5.0}}}}

This action will activate other actions based on ammo count changes * Getter - Weapon getter. * Actions - Actions to be executed if conditions' evaluation is successful.

{{ArgTitle|3|Resource Component Action|{{GVI|armaR|1.5.0}}}}

This action will activate other subactions working with Resources aka Supplies * Getter - Target entity for Resource Action * Resource Component Actions - Resource system actions to be executed

{{ArgTitle|3|Resource Component Actions|{{GVI|armaR|1.5.0}}}} ==== SCR_ScenarioFrameworkActionOnResourceChanged ====

* Actions - Actions that will be executed on compartment entered * Activation Percentage - Activation Percentage * Comparison Operator - Operator

==== SCR_ScenarioFrameworkActionOnResourceConsumerChange ====

* Actions - Actions that will be executed on compartment entered * Activation Amount - Activation amount * Comparison Operator - Operator

==== SCR_ScenarioFrameworkActionSetResourceTypeEnabled ====

* Getter - entity to manage resource types on. * Check Children - Check Children * Enable Resource Type - Enable Resource Type * Resource Type To Handle - Resource Type To Handle

==== SCR_ScenarioFrameworkResourceComponentActionTransfer ====

* Target Getter - Target entity for Resource Action * Transfer Amount - Transfer Amount * Allow Partial Transfer - Allow Partial Transfer

{{ArgTitle|3|Action Destruction|{{GVI|armaR|1.5.0}}}}

* Entity Getter - Specific building to be destroyed. * Radius Destruction - Radius Destruction * Destruction Radius - Destruction Radius

{{ArgTitle|3|Action On Damage|{{GVI|armaR|1.5.0}}}} * Getter - Entity to check for damage. * Damage Context Conditions - Checked Conditions. * Actions - Actions to be executed if conditions' evaluation is successful.

{{ArgTitle|3|Action On Damage State Changed|{{GVI|armaR|1.5.0}}}}

* Getter - Entity to check damage changes on. * Action - What to do on damage state change

{{ArgTitle|3|Action Vehicle|{{GVI|armaR|1.5.0}}}} * Getter - Target entity for Vehicle Action * Vehicle Actions - Vehicle actions that will be executed on the target entity

==== SCR_ScenarioFrameworkVehicleActionDamageHitZoneByName ==== * Health Percentage - Health Percentage to be set for target hit zone * Hit Zone Name - HitZone Name

==== SCR_ScenarioFrameworkVehicleActionDamageHitZonesByGroup ==== * Health Percentage - Health Percentage to be set for target hitzone

==== SCR_ScenarioFrameworkVehicleActionResourceUnloadAction ==== * Resource Type - Resource Type * Resources To Unload - Resources To Unload

==== SCR_ScenarioFrameworkVehicleActionSetHandbrake ==== * Set Handbrake - Set Handbrake

{{ArgTitle|3|Random Action|{{GVI|armaR|1.2.1}}}}

This action will select one random subaction and execute it. * Random Action - Upon activation, one random Action will be selected from these Actions

=== Kill Entity ===

This action allows you to kill any provided entity. Be careful as this is quite dangerous action and it cannot be reverted back.

* Getter - Any getter that returns an Entity (see {{Link|#Getters}}) * Randomize Ragdoll - If target entity is Character, it will randomise ragdoll upon death

=== Lock or Unlock All Target Vehicles In Trigger ===

This action will either lock or unlock all target vehicles in trigger provided by the Getter attribute.

* Getter - To get the trigger you want to work with to influence all vehicles inside it (see {{Link|#Getters}}) * Lock - If true, it will lock vehicle, if false, it will unlock vehicles

=== Lock or Unlock Vehicle ===

This action will either lock or unlock target vehicle provided by the Getter attribute.

* Getter - To get the entity of a vehicle you want to work with (see {{Link|#Getters}}) * Lock - If true, it will lock vehicle, if false, it will unlock the vehicle

{{ArgTitle|3|Loop Over Not Randomly Selected Layers|{{GVI|armaR|1.1.0}}}}

This action allows you to loop over the layers that were not selected by GetRandomLayerBase

* Getter - Use GetRandomLayerBase * Action - Which actions will be executed for each layer that was not randomly selected

{{ArgTitle|3|On Compartment Entered Or Left|{{GVI|armaR|1.1.0}}}}

This action allows you to trigger actions if someone gets in or out of the vehicle. You can further specify to only listen to certain Slots in the vehicle (Driver, passenger on specific seats) and even listen for some specific entity to enter such slots.

* Entered or Left - If true, we execute actions On Compartmented Entered. Otherwise On Compartment Left * Getter - Target entity (Optional if action is attached on Slot that spawns target entity) * Occupant Getter - (Optional) If used, it will get executed only when specific entity enters the compartment * Slot IDs - (Optional) If used, it will get executed only when specific compartment slots are entered (Inspect each Prefab BaseCompartmentManagerComponent to see the slots. From our observation, driver usually has ID number 2) * Actions - Actions that will be executed on compartment entered

{{ArgTitle|3|On Engine Started Or Stop|{{GVI|armaR|1.1.0}}}}

This action allows you to trigger actions if target entity engine gets started or stops.

* Started Or Stop - If true, we execute actions On Engine Started. Otherwise On Engine Stop * Getter - Target entity (Optional if action is attached on Slot that spawns target entity) * Actions - Actions that will be executed on one of these circumstances

=== Play Music ===

Play define music.

* Music - Name of the music to be played. Music manager needs to be present in the world and music needs to be configured in acp file.

=== Play Sound ===

This action will play sound on player entity position

* Sound - String of with the name of the sound

=== Play Sound On Entity ===

This action will play sound on entity position provided by the Getter Attribute

* Getter - Supposed to be any that will return entity (see {{Link|#Getters}}) * Sound - String of with the name of the sound

=== Prepare Area From Dynamic Despawn ===

It adds target Area into the {{Link|#Dynamic Spawn/Despawn 2|Dynamic Spawn/Despawn}} during runtime.

* Getter - Supposed to be a GetArea (see {{Link|#Getters}}) * Stay Spawned - If set to false, area will be despawned upon activation of this action * Dynamic Despawn Range - How close at least player character must be in order to trigger dynamic spawn/despawn

{{ArgTitle|3|Prepare Layer From Dynamic Despawn|{{GVI|armaR|1.3.0}}}}

It adds target Layer into the {{Link|#Dynamic Spawn/Despawn 2|Dynamic Spawn/Despawn}} during runtime.

* Getter - GetLayerBase with Layer Base Name (see {{Link|#Getters}}) * Stay Spawned - If set to false, layer will be despawned upon activation of this action * Dynamic Despawn Range - How close at least player character must be in order to trigger dynamic spawn/despawn

{{ArgTitle|3|Process Voiceline Enum And String|{{GVI|armaR|1.1.0}}}}

This action processes the Voiceline Enum to specific strings that will be then used in Intro Voiceline Based On Tasks action.

* Target Enum - Name of the enum to work with

=== Remove Area From Dynamic Despawn ===

It removes target Area from the {{Link|#Dynamic Spawn/Despawn 2|Dynamic Spawn/Despawn}} during runtime.

* Getter - Supposed to be a GetArea (see {{Link|#Getters}}) * Stay Spawned - If set to false, area will be despawned upon activation of this action

{{ArgTitle|3|Remove Layer From Dynamic Despawn|{{GVI|armaR|1.3.0}}}}

It removes target Layer from the {{Link|#Dynamic Spawn/Despawn 2|Dynamic Spawn/Despawn}} during runtime.

* Getter - GetLayerBase with Layer Base Name (see {{Link|#Getters}}) * Stay Spawned - If set to false, layer will be despawned upon activation of this action

=== Remove Item From Inventory ===

This action is used to remove items from target inventory. This can be quite dangerous as it will delete it and it cannot be reversed.

* Getter - target entity that has inventory (see {{Link|#Getters}}) * Prefab Filter - Here you can set which items and how many out of each will be removed <!-- . Settings are same as here (WIP LINK) -->

=== Reset Counter ===

This action will reset the counter back to 0. It is supposed to be activated only from the counter it is to reset. * {{GVI|armaR|1.2.1|size= 0.75}} Counter Name - Counter to reset (Optional if this action is attached on Counter)

=== Set Briefing Entry Text ===

Sets Briefing category text with the one you provide

* Faction Key - Target Faction key * Custom Entry Name - Name of the entry to be changed * Target Text - Text that you want to use

=== Set Briefing Entry Text Based On Generated Tasks ===

Sets Briefing category text based on generated tasks. This is used to dynamically the texts based on which tasks are actually spawned.

* Faction Key - Target Faction key * Custom Entry Name - Name of the entry to be changed based on generated tasks * Target Text - Text that you want to use. Leave empty if you want to utilise the one set in config.

=== Set Entity Position ===

Moves entity to a different position. Similar to [[setPosASL]] from previous titles, teleports the entity.

* Entity Getter - Getter of which Entity we want to work with (see {{Link|#Getters}}) * Destination - world coordinates * Destination Entity Getter - (Optional) You can also use some other entity as a destination coordinates * Destination Entity Relative Position - (Optional) you can further define offset from the destination entity where to move you entity

=== Set Entity Scale ===

Set a scale of given entity.

* - Entity Getter - Getter of which Entity we want to work with (see {{Link|#Getters}}) * - Entity Scale - Intended Scale

=== Set Execution Entry Text Based On Generated Tasks ===

Sets Execution category text based on generated tasks. This is used to dynamically the texts based on which tasks are actually spawned.

* Faction Key - Target Faction key * Custom Entry Name - Name of the entry to be changed based on generated tasks * Target Text - Text that you want to use. Leave empty if you want to utilise the one set in config

{{ArgTitle|3|Set Faction to CAH Area|{{GVI|armaR|1.3.0}}}}

This action allows you to set faction to Capture and Hold Area

* Getter - Entity of the CAH Area (Optional if action is attached on Slot that spawns target entity) * Faction Key - Target Faction key

{{ArgTitle|3|Set Fuel Consumption|{{GVI|armaR|1.2.1}}}}

This action allows you to set fuel consumption for target entity.

* Getter - Target entity to manipulate fuel (Optional if action is attached on Slot that spawns target entity) * Fuel Percentage - Percentage of a fuel to be set

{{ArgTitle|3|Set Fuel Percentage|{{GVI|armaR|1.1.0}}}}

This action allows you to set fuel percentage for target entity.

* Getter - Target entity to manipulate fuel consumption (Optional if action is attached on Slot that spawns target entity) * Fuel Consumption - Fuel consumption at max power RPM\n[liters/hour] * Fuel Consumption Idle - Fuel consumption idle\n[liters/hour]

{{ArgTitle|3|Set Supply Percentage|{{GVI|armaR|1.2.0}}}}

This action allows you to set specific percentage of supply on target entity.

* Getter - Target entity to manipulate supply (Optional if action is attached on Slot that spawns target entity) * Supply Percentage - Percentage of a supply to be set.

{{ArgTitle|3|Set Signal|{{GVI|armaR|1.2.0}}}}

This action allows you to set specific value to specific signal on target entity.

* Getter - Entity to set the signal on (Optional if action is attached on Slot that spawns target entity) * Signal - Signal to set * Value - Value to set

{{ArgTitle|3|Create Variable|{{GVI|armaR|1.2.0}}}}

This action allows you to create specific variable to specific value.

* Variable Name - Name of the variable * Variable Value - Value of the variable

{{ArgTitle|3|Set Variable|{{GVI|armaR|1.2.0}}}}

This action allows you to set specific variable to specific value.

* Variable Name - Name of the variable * Variable Value - Value of the variable

{{ArgTitle|3|Get Variable Value|{{GVI|armaR|1.2.0}}}}

This action gets the Variable Name.

* Variable Name - Name of the variable

{{ArgTitle|3|Item Safeguard|{{GVI|armaR|1.2.0}}}}

This action allows you to attach Item Safeguard logic on any item that you might regard as important and in case of it being in a car that gets destroyed, or in player inventory and similar cases, it this item will be dropped on the ground. It also prevents Garbage System from deleting this item. It also allows you to execute actions in situations when item is dropped or possessed.

* Getter - Target entity (Optional if action is attached on Slot that spawns target entity) * Actions On Item Dropped - Actions that will be executed when target item is dropped * Actions On Item Possessed - Actions that will be executed when target item is possesed by someone/something

=== Set Mission End Screen ===

Sets mission end screen based on the Game Over Type attribute and it can also provide which Subtitle will be used

* Game Over Type - Which Game Over Type will be set upon using this action. * Subtitle - Which subtitle text will be used

=== Set Vehicle Cruise Speed ===

Set a maximal cruise speed of a given vehicle.

* Getter - Target entity * Max Cruise Speed - The maximum speed the vehicle can go. (Does not apply to a vehicle driven by players).

=== Show Hint ===

Shows a very simple hint with Title and Text for a certain duration.

* Title - Title of the hint * Text - Text in the body of the hint * Timeout - duration in seconds how long will the hint stay before disappearing * Faction Key - For which Faction these hints will be shown * Getter - (Optional) Getter to get either a specific player or array of player entities to whom the hint will be shown

{{ArgTitle|3|Show Layout|{{GVI|armaR|1.3.0}}}}

Shows a layout to specified players.

* Layout - Resource name of the layout * Fade In - Fade in time * Fade Out - Fade out time * Visibility Time - For how long the layout should stay visible. * Opacity Value - Target value for opacity. * ID - Unique layout ID * Getter - Getter to get either a specific player or array of player entities

{{ArgTitle|3|Show Popup Notification|{{GVI|armaR|1.1.0}}}}

This action allows you to show Popup notification. You can further filter it to specific faction and players.

* Title - Title of the Popup * Text - Text of the Popup (Keep it short) * Faction Key - (Optional) You can filter only specific faction * Getter - Getter to get either a specific player or array of player entities

=== Spawn Closest Object From List ===

This action is used to trigger spawning of certain layers that are set with {{hl|ON_TRIGGER_ACTIVATION}} and you are supposed to put their names into the attribute List Of Objects. It will then find the closest one to the entity provided by Getter Attribute.

* Getter - Supposed to be the one that returns any entity you want to look the closest objects from (see {{Link|#Getters}}) * List Of Objects - List of the named Scenario Framework components that are supposed to be spawned. In most cases, you just need to put there the top layer which was not activated by other means. * {{GVI|armaR|1.2.1|size= 0.75}} Activation Type - Sets the Activation Type (see {{Link|#Activation}})

=== Spawn Objects ===

This action is used to trigger spawning of certain layers that are set with {{hl|ON_TRIGGER_ACTIVATION}} based on their names listed into the '''Name Of Objects To Spawn On Activation''' attribute.

* Name Of Objects To Spawn On Activation - List of the named Scenario Framework components that are supposed to be spawned. In most cases, you just need to put there the top layer which was not activated by other means. * {{GVI|armaR|1.2.1|size= 0.75}} Activation Type - Sets the Activation Type (see {{Link|#Activation}})

{{ArgTitle|3|Spawn Objects Based On Distance|{{GVI|armaR|1.1.0}}}}

This action allows you to spawn other objects based on a distance parameters and employ some randomisation

* Getter - Measure distance from what - use getter * Min Distance - It will select only objects that are at least x amount of meters away * Max Distance - You can also set max distance to setup the hard limit of the max distance - but be aware that there might be a situation where it would not spawn anything * List Of Objects - List of objects that are to be compared * {{GVI|armaR|1.2.1|size= 0.75}} Activation Type - Sets the Activation Type (see {{Link|#Activation}}) * Spawn Objects - Spawn all objects, whether only a random one multiple random ones * Random Percent - If the {{hl|RANDOM_MULTIPLE}} option is selected, the chance percentage

{{ArgTitle|3|Toggle Engine|{{GVI|armaR|1.1.0}}}}

This action allows you to start/stop engine of target entity.

* Getter - Target entity to turn on/off the engine (Optional if action is attached on Slot that spawns target entity * Turned On - If true, engine will be turned on. Otherwise it will turn it off

{{ArgTitle|3|Toggle Light|{{GVI|armaR|1.1.0}}}}

This action allows you turn on/off specific lights on target entity (usually a vehicle or a lamp).

* Getter - Target entity to manipulate lights with (Optional if action is attached on Slot that spawns target entity) * Light Type - Which lights to be toggled * Turned On - If true, light will be turned on. Otherwise it will turn it off.

=== Wait And Execute ===

This is used to activate other actions with a timed delay.

* Delay In Seconds - How long it will wait before activating set actions. * Delay In Seconds Max - If this is set to a number larger than Delay In Seconds, it will randomise resulted delay between these two values * Looped - If true, it will activate actions in looped manner using Delay settings as the frequency. If randomised, it will randomise the time each time it loops. * Actions - Actions to be activated after the delay has passed.

{{ArgTitle|2|Nested Subtasks|{{GVI|armaR|1.5.0}}}}

Layer Tasks are capable of handling singular Tasks but also able to handle nested subtasks. By default, all Layer Task is set to be a parent task, but you can set it to be a subtask as well. This is done by either setting the Parent Task Name in the Layer Task component or putting the Layer Task in hierarchy under the parent Layer Task.

The parent task can handle all subtasks and their states. The subtasks can handle their own states as well. The parent task can also be set to how many tasks are required to be finished, and if the Parent task functions on its own - Has its own functionality so it is a task of its own at the top of its subtasks. The parent task set functionality can be finished before finishing all subtasks, but it will not be finished until all subtasks are finished.

It also has a progress bar feature that is disabled by default. It is calculated based on the number of completed tasks (optional tasks excluded), but this feature can be turned off and the progress bar can be managed by dedicated actions (Add Task Progress, Remove Task Progress or Set Task Progress).

Subtasks can be set to be Optional, meaning they are not necessary to be finished in order to trigger the finish of the parent task. You can also change some task into a Subtask in run-time via Set Parent Task Action.

You can check out the SF-Sample-Subtasks sample to see how easily it can be set up.

== QRF System ==

'''QRF''' stands for '''Q'''uick '''R'''eaction '''F'''orce and is a unit that is capable to respond to certain actions as a response in a manner of minutes or hours depending on the size and application of that unit.

=== Usage ===

In {{armaR}}, the QRF system is responsible for reacting to players' actions, such as killing enemy soldiers, by sending a stronger response force each time a certain threshold is met.

=== Configuration ===

As an example of such an application, we can use the Combat Ops scenario on Everon, for which QRF is already configured. The process of adding a new QRF to the area is as follows:

# Create an {{Link|Arma Reforger:Scenario Framework#Area|Area}} which QRF will be monitoring # Go to the {{Link/Enfusion|armaR|SCR_ScenarioFrameworkArea}} component in the Area's "Object Properties" window # Find the section called "Activation Actions" where you will have to drag and drop pre made config of QRFDispacher or optionally use the action script itself: {{Link/Enfusion|armaR|SCR_ScenarioFrameworkActionQRFDispacher}} #* (Optional) Configure QRF as wanted by changing the values of all properties, e.g add new or change the cost of existing QRF groups # In order to define the QRF units's spawn positions, create a QRF spawn point layer for this area by dragging and dropping the Prefab on the area # Copy the name of the QRF spawn point layer and paste it into the "''QRF Layer Name''" field in Area's QRFDispatcher<!-- -->{{Feature|informative|The spawn point layer can be renamed but the name in "''QRF Layer Name''" has to match the actual entity name.}} # Place the QRF spawn point at the wanted location by selecting it in and then moving it to desired location using gizmos<!-- -->{{Feature|informative|It is highly recommended to use function "''Snap to Ground''" in order to ensure that the spawn point is not above or below ground.}} # Configure the spawn point: what can be spawned there, what is the minimum distance in metres from the nearest player

If more spawn points are needed, more QRF spawn point Prefabs can be dragged and dropped on the QRF layer, then configured the same way as explained in steps 6 and 7.

== Dynamic Spawn/Despawn ==

This system works on {{Link|#Area 2|Areas}} that are then handling their hierarchy and its purpose is to save performance by having spawned only things that need to be spawned.

There is a continuous check that is being triggered every 4 seconds in default (can be adjusted on GameMode component called {{Link/Enfusion|armaR|SCR_GameModeCombatOpsManager}}) for all the Areas that have Dynamic Spawn/Despawn enabled.

Furthermore, when Dynamic Spawn is initiated, it is spawning its children with slight delays between them in order to avoid huge stutters when a lot of different things are spawned at once, so upon successful Dynamic Spawn initiation, it can take few seconds for the Area to completely spawn (depending on the complexity of each Area setup).

Each Area has a range that is then compared to the distance from player characters.

If just one player is within a range, Area will spawn all of its content that has Activation Type {{hl|SAME_AS_PARENT}} set in workbench or this activation was changed in runtime via ScenarioFrameworkAction.

Runtime change is the case for QRF units in CombatOps on Arland Scenario where they are initially not spawned with the Area but via trigger.

Once the trigger spawns these units, it also changes the Activation Type to SAME_AS_PARENT so when said Area would despawn and then spawn again, it will spawn these units as well.

On layers that are under the Area, there is an option to "Exclude from Dynamic Despawn" which if set to true will prevent said layer to despawn once it is spawned.

This is used for example for Spawn Points, where we want to spawn them, but then we are not dynamically despawning them using this system.

Furthermore, all of the Slots that are spawning vehicles are set in a way that once someone gets inside of them, it will "Exclude" them from the Dynamic Despawn as well to prevent vehicle deletion upon moving away from Area range.

Slots and AI Slots retain their position where their spawned entity was located before Spawn/Despawn, so for example AI units that moved to different position will get their position saved and once respawned, they will be spawned on their previously saved position.

If AI units are killed, their bodies will remain there for the GarbageCollector to handle and for the vehicles, it will remove their wreck and destroyed wreck will not be spawned again.

All this above can be also setup for Layers themselves that are managed by their parent Area.

{{ArgTitle|2|Faction Aliases|{{GVI|armaR|1.2.1}}}}

Faction Aliases feature allows you to setup your scenario in a way where you create Aliases for given Faction Keys that can be then easily changed either in the World Editor or even Server Admins via Mission Header.When you are creating scenario, you can designate which Faction will be the default "OPFOR" and "BLUEFOR". For example, the CombatOps on Arland has playable faction US and the adversary force is USSR. You can easily create so called Alias for each of those two with the default value and then, if you would like to change the adversary for to FIA, you can do so with simple change on one place. Then you can use Faction Alias instead of the Faction Key, provided that you are utilizing Faction catalogs or Faction Switched objects to spawn faction-specific objects.

Basically, you setup your mission only once and you can change Factions later on / or when launching the server as you wish, provided that everything is setup correctly.

=== Configuration ===

# Add {{Link/Enfusion|armaR|SCR_FactionAliasComponent}} to your FactionManager in the world # Configure the Faction Aliases by reating the Alias and give it a Faction Key # Configure Mission Header to mirror the setup of {{Link/Enfusion|armaR|SCR_FactionAliasComponent}} # Use your Faction Aliases instead of Faction Keys on ScenarioFramework related things # Use Randomization together with Faction Catalogs to configure which asset should get spawned or use Faction Switched objects

== Samples ==

Samples are simple "scenarios" that usually focus on one particular feature of the Scenario Framework or a goal to show how it could be done.

There are many ways how to achieve things and here will be the small selection of endless possibilities that this system can provide.

You can use it to learn from it, copy it and adapt it as you please.

All the samples already have prepared necessary entities for the Framework to work so if you would just copy-pasted it into the empty world, it would not straight up work.

You need to setup your worlds according to the {{Link|Arma Reforger:Scenario Framework Setup Tutorial}}.

They are located in the {{hl|/worlds/ScenarioFramework}} directory where there are root files and Tutorial and then the Samples are in the Samples folder. Task Move is one of the most simple tasks to have presented here and recommended to start learning the Framework with it.

=== TaskMove ===

''Goal:''

Create a Task Move for the US Faction.

''Setup:''

It is achieved by having an {{Link|#Area 2|Area}} with {{Link|#LayerTaskMove}} and the {{Link|#SlotMoveTo}} placed in the hierarchy as seen in the image below.

Everything is set basically in default.

''Mechanics:''

Area spawns LayerTaskMove which Spawns SlotMoveTo that spawns Task Move and assigns it to the default US faction and the slot also spawns trigger that is used to detect if some player entered it in order to finish the Task.

Here the radius set to 10 meters and it will require at least 1 player to enter for it to finish this task.

=== TaskKill ===

''Goal:''

Create a Task Kill for the US Faction.

''Setup:''

It is achieved by having an {{Link|#Area 2|Area}} with {{Link|#LayerTaskKill}} and the {{Link|#SlotKill}} placed in the hierarchy as seen in the image below.

LayerTaskKill has set Task Title and Task Description attributes and SlotKill has Object To Spawn attribute set to spawn Unarmed soldier.

This is done for the sample purposes, having Unarmed soldiers as targets for SlotKill is a war crime.

''Mechanics:''

Area spawns LayerTaskKill which Spawns SlotKill that spawns Task Kill and assigns it to the default US faction and the slot also spawns Unarmed soldier which is the target of the Task Kill. LayerTaskKill will also process display name of the entity and can display it in provided description, in this case: Unarmed. In order to finish this task, target entity must be killed.

=== TaskExfil ===

''Goal:''

Create a Task Exfil for the US Faction.

''Setup:''

It is achieved by having an {{Link|#Area 2|Area}} with {{Link|#LayerTaskMove}} and the {{Link|#SlotExtraction}} placed in the hierarchy as seen in the image below.

Everything is set basically in default apart from the SlotExtraction timer set to 20 seconds.

''Mechanics:''

Area spawns LayerTaskMove which Spawns SlotExtraction that spawns Task Exfil (which is basically the Task Move) and assigns it to the default US faction and the slot also spawns trigger that is used to detect if some player entered it and been there for 20 seconds in order to finish the Task.

Here the radius set to 10 meters and it will require at least 1 player to stay inside for 20 seconds to finish this task.

After finishing the task, mission is ended ''via'' the {{Link|#End Mission}} action that is attached in OnTaskFinished in LayerTaskMove.

=== TaskDestroyRock ===

''Goal:''

Create a Task Destroy Rock for the US Faction.

This example is here to show how to link entities either already in world or newly spawned before the Slot will be spawned and then being able to work with them.

''Setup:''

It is achieved by having an {{Link|#Area 2|Area}} with {{Link|#LayerTaskDestroy}} which has Layer that contains normal Slots that will spawn RPG-7 and SlotDestroy that in this case will not spawn anything but it will search in the vicinity for the prefab that was set in the Object To Spawn attribute thanks to Use Exsiting World Asset attribute being set to true.

Outside of the Scenario Framework, there is a Granite_Boulder_01 prefab put into the world and named RockToDestroy.

It was modified in a way that we have added destruction to it via the {{Link/Enfusion|armaR|SCR_DestructionMultiPhaseComponent}} and also the {{Link/Enfusion|armaR|RplComponent}} so it can be properly destroyed.

''Mechanics:''

First the RockToDestroy is placed in the world and then the Area spawns the LayerTaskDestroy which spawns Layer that spawns all the Slots with RPG-7 and SlotDestroy that will search for the Granite_Boulder_01 and then it will use it as target entity for the Task.

Task is then finished upon destroying target entity, in this case, the rock.

=== TaskDestroy ===

''Goal:''

Create a Task Destroy for the US Faction - in this case, target will be a vehicle.

''Setup:''

It is achieved by having an {{Link|#Area 2|Area}} with {{Link|#LayerTaskDestroy}} which has Layer that contains normal Slots that will spawn RPG-7 and SlotDestroy that spawns UAZ-469 which is linked to the created Task.

''Mechanics:''

Area spawns the LayerTaskDestroy which spawns Layer that spawns all the Slots with RPG-7 and SlotDestroy that spawns UAZ-469.

LayerTaskKill will also process display name of the entity and can display it in provided description, in this case: UAZ-469.

In order to finish this task, you need to destroy the vehicle (you can also drown it in the water).

=== TaskDeliverIntel ===

''Goal:''

Create a Task Deliver Intel for the US Faction.

In this case, we want a specific item to be delivered there it cannot be interchanged with the same prefab.

''Setup:''

It is achieved by having an {{Link|#Area 2|Area}} with {{Link|#LayerTaskDeliverIntel}} and the {{Link|#SlotPick}} together with {{Link|#SlotDelivery}} placed in the hierarchy as seen in the image below.

Everything is set basically in default, but SlotPick has texts filled in the Task category and it is supposed to spawn IntelligenceFolder_E_01.et from the Object To Spawn attribute.

SlotDelivery then spawns Trigger and LayerTaskDeliver is linked there in Associated Task Layers attribute.

''Mechanics:''

Area spawns the LayerTaskDeliverIntel which spawns SlotPick that will spawn the intelligence folder for you to pick it up and carry.

In this particular example, SlotDelivery is also spawned from thy LayerTask right from the start and it spawns trigger that is used to detect player character and search for the folder in it.

The spawned asset from SlotPick is linked to this task so truly have to deliver this specific item.

In order to finish the task, deliver the intel to the trigger with the player character.

=== TaskDefendTarget ===

''Goal:''

Create a Task Defend Target for the US Faction.

It can be any entity that can be destroyed, in this case, we chose unarmed US Soldier.

''Setup:''

it is achieved by having an {{Link|#Area 2|Area}} with {{Link|#LayerTaskDefend}} that spawns SlotDefend that will further spawn the Unarmed US Soldier.

''Mechanics:''

Area spawns LayerTaskDefend which spawns SlotDefend which spawns target to defend, in our case Unarmed US Soldier.

There is a timer set for 15 seconds and in order to finish this scenario successfully, you just have to wait whilst Unarmed Soldier still being alive. If he dies, the task will fail.

=== TaskDefendArea ===

''Goal:''

Create a Task Defend Area for the US Faction.

Goal will be to repel enemy forces and have majority at the end of the task countdown.

''Setup:''

It is achieved by having an {{Link|#Area 2|Area}} with {{Link|#LayerTaskDefend}} that has two layers under it.

{{hl|Attacker_USSR}} which is defined in '''Attacker Layer Names''' contains three SlotAI that each will spawn Unarmed USSR Soldier on repeated basis.

Each slot has the Repeated Spawn enabled and the layer has it enabled as well and set it to spawn repeatedly 2x each 15 seconds.

{{hl|Defender_US}} layer then contains SlotTrigger that will spawn Trigger, Slot1 which spawns M60 machinegun turret and SlotDefend which will not spawn anything but the trigger is set there instead.

LayerTaskDefend also has Faction Settings set in a way that the attacking faction is considered USSR and it counts all the characters.

Defending faction is set to be US and it will count all the characters as well.

Defend time is set to 60 seconds and Defender percentage ratio is set to 0.51 which means that at the evaluation, there needs to be a majority of defenders in comparison to attackers.

''Mechanics:''

Area spawns LayerTaskDefend which spawns Attacker_USSR layer that will spawn 3 Unarmed USSR Soldiers initially and 15 seconds later, it will spawn additional wave using the Repeated Spawn feature.

Alongside it, Defender_US layer will spawn SlotTrigger which will spawn trigger that will be used to detect characters inside the designated area.

Slot1 then spawns M60 machinegun that can be used to quickly eliminate all the attackers.

SlotDefend then spawns trigger.

Area needs to be cleared out of the enemy presence in ratio that the majority of the units inside need to be of US faction.

If it is below this ratio, task will fail.

=== TaskDefendAreaAndTarget ===

''Goal:''

Create a Task Defend Area and Target for the US Faction.

This will be a combination of Defend Area and Defend Target and indeed both conditions will apply at the same time.

''Setup:''

It is achieved by having an {{Link|#Area 2|Area}} with {{Link|#LayerTaskDefend}} that has two layers under it.

Attacker_USSR which is defined in Attacker Layer Names contains three SlotAI that each will spawn Unarmed USSR Soldier on repeated basis.

Each slot has the Repeated Spawn enabled and the layer has it enabled as well and set it to spawn repeatedly twice every 15 seconds.

Defender_US layer then contains SlotTrigger that will spawn Trigger, Slot1 which spawns M60 machinegun turret and SlotDefend which spawns Unarmed US Soldier.

LayerTaskDefend also has Faction Settings set in a way that the attacking faction is considered USSR and it counts all the characters.

Defending faction is set to be US and it will count all the characters as well.

Defend time is set to 60 seconds and Defender percentage ratio is set to 0.51 which means that at the evaluation, there needs to be majority of defenders in comparison to attackers.

''Mechanics:''

Area spawns LayerTaskDefend which spawns Attacker_USSR layer that will spawn 3 Unarmed USSR Soldiers initially and 15 seconds later, it will spawn additional wave using the Repeated Spawn feature.

Alongside it, Defender_US layer will spawn SlotTrigger which will spawn trigger that will be used to detect characters inside the designated area.

Slot1 then spawns M60 machinegun that can be used to quickly eliminate all the attackers.

SlotDefend then spawns Unarmed US Soldier that is supposed to be defended.

This combines both conditions so the whole time the Unarmed US Soldier needs to be kept alive and at the end of the timer, area needs to be cleared out of the enemy presence in ratio that the majority of the units inside need to be of US faction.

If one of the conditions will fail, it will fail the task.

=== TaskClearArea ===

''Goal:''

Create a Task Clear Area for US Faction.

There is some area that is occupied by enemy forces and you need to clear it out.

''Setup:''

It is achieved by having an {{Link|Area 2|Area}} with {{Link|#LayerTaskClearArea}} that has two layers under it.

First layer holds SlotClearArea which spawns TriggerDominance <!-- (link WIP) --> trigger that is set in a way that it is activated by Player and detects all {{Link/Enfusion|armaR|SCR_ChimeraCharacter}}.

Second Layer contains 3x SlotAI that will spawn Unarmed USSR soldiers.

''Mechanics:''

Area spawns LayerTaskClearArea which spawns Layer that spawns SlotClearArea which spawns TriggerDominance that is used to periodically check the set area for the enemy presence.

Then Layer_AI spawns 3 SlotAIs that each spawns 1 Unarmed USSR Soldier. In order to finish this task, you need to clear out all the enemies in the area.

=== PatrollingGroup ===

''Goal:''

Create a AI group that will be patrolling in set patern indefinitely.

''Setup:''

It is achieved by having an {{Link|#Area 2|Area}} that has Layer AI_group which has Layer Patrol1 that has SlotAI1 which spawns US Sentry group. Then there is Layer Patrol_Waypoints that contains three slots, each spawning Patrol waypoint. SlotAI1 has modified attribute category Waypoints where in the Waypoint Group Names, there was added a WaypointSet which contains Patrol_Waypoints and attribute Cycle Waypoints is set to true. Also Spawn AI On WP Pos is enabled for the SlotAI1.

''Mechanics:''

Area Spawns AI_group which spawns Patrol1 which Spawns SlotAI1 which spawns US Sentry group that has link to the Patrol_Waypoints Layer that is spawned right after it which spawns 3 Patrol waypoints. These waypoints are then assigned to the AI group and are being cycled indefinitely. There is no end state, this group will conduct patrol for eternity.

=== FinishTaskToCreateTask ===

''Goal:''

Create simple sequence of tasks that once one is completed, next one is spawned upon finishing it showing one possible way how to create this workflow.

''Setup:''

It is achieved by having 3 distinct Areas. Each Area has LayerTaskMove with SlotMoveTo in their hierarchy that works exactly the same as {{Link|#TaskMove}} sample. Additionally, Area_A and Area_B also has LogicCounter. Each listen to their respective TaskMove set in the Input for the task finish via OnTaskEventIncreaseCounter (see {{Link|#On Task Event Increase Counter}}) action and then OnActivate, there is an action Spawn Objects which will spawn next LayerTask. There are many ways how to create this sequence, Here, we used Counters to showcase them, but it can be achieved without them just by putting the action Spawn Objects to the LayerTask OnTaskFinished action. LayerTaskMove in Area_B and Area_C both have Activation Type attribute set to {{hl|ON_TRIGGER_ACTIVATION}} which prevents these layers being spawned on scenario start of task generation init. These Layers will be able to spawn only when called with {{hl|ON_TRIGGER_ACTIVATION}} action, such as is set in LogicCounter.

''Mechanics:''

All Areas spawn in, but only the Area_A will spawn the LayerTaskMove with the SlotMoveTo and LogicCounter. Upon entering trigger that the SlotMoveTo spawns, finishing the objective will increase the counter which will trigger spawning of next LayerTaskMove from Area_B. That will do the same as in Area_A and spawning LayerTaskMove in Area_C as a final objective.

=== EndScreenBasedOnCompletedTasks ===

''Goal:''

Create a workflow that will alter end screen based on the completed tasks.

''Setup:''

There are 4 areas each containing their respective tasks. Documents have similar setup to TaskDeliverIntel Sample, but SlotPick 2 upon picking up documents ends the scenario via OnTaskProgress action End mission. Extraction bears similarities from TaskExfil, but additionaly, it has SlotDelivery_01 there that is linked for the D_Documents and Slot_1 which spawns american flag. Upon finishing it, it will also end the mission via OnTaskFinished action End Mission. It has the endScreenCounter as well that is set in a way that upon each task finish, it increases its count up until 4. OnIncrease actions are then set with Compare Counter And Execute with nested action to {{Link|#Set Mission End Screen}}. Task Kill is very similar to TaskKill Sample and those 4 BrickWall_01_4m_1 surround its target. Move is the same as TaskMove Sample.

''Mechanics:''

All of the Areas spawn their tasks as you may know it from samples mentioned above with minor tweaks to them. Under the USSR flag, the folder with intel can end the scenario right away and you will get end screen where you did not manage to complete any of the tasks if you do just that. If you finish at least one, you will get different ending and this goes on and on according to what is set in the endScreenCounter. In order to finish the scenario completely, you need to finish all the objectives and then end the scenario by exfilling under the US flag an not picking up the intel under the USSR flag.

=== DynamicDespawn ===

''Goal:''

This Sample is here to showcase how to use the Dynamic Spawn/Despawn feature.

''Setup:''

It is achieved by having Area that has three layers in the hierarchy.

Area has Dynamic Despawn attribute enabled and Dynamic Despawn Range set to 30.

Layer "AI" that has several AI slots that each is setup to spawn either group or singular unit.

LayerTaskDestroy "LayerTaskDestroy_1" which has Spawn Children attribute set to ''RANDOM_ONE'' that can spawn either Layer1 or Layer2 which each would spawn SlotDestroy that spawns different vehicle.

Layer "RandomFlag" is set to ''RANDOM_ONE'' as well and it will randomly pick one of three Slots that each has different flag set (US, USSR or FIA).

On a GameMode (SF-Tutorial-Empty -> default -> GameModeSF1) component called SCR_GameModeSFManager, Dynamic Despawn attribute is set to true and Update Rate is lowered to 1 second from 4 seconds for the Sample purposes.

''Mechanics:''

At first, ''Area'' is Spawned but it does not do anything and does not spawn any children until you move player character inside its Dynamic Despawn Range which is set to 30 meters.

This check is in Sample worlds performed every 1 second, but '''it is recommended to have it set around 4 seconds in real scenarios to save up the performance'''.

''Area'' is also set to visualise this range to make it easier for you to see the range.

Upon entering, Dynamic Spawn will be triggered that will spawn ''Layer "AI"'' with all the AI slots and their groups.

Then ''LayerTaskDestroy "LayerTaskDestroy_1"'' will perform random pick of the child layer and spawn selected task with vehicle to be destroyed.

Lastly, ''RandomFlag layer'' is spawned where again, one of three slots will be spawned.

All the random selections are saved and layers will remember it.

Upon leaving the range, everything inside will get despawned.

Upon reentry, everything will get spawned in back again, random selection will use the saved layers, positions of vehicles/AIs will be also set to where these entites were before and if some of it got killed/destroyed, it will not spawn (see {{Link|#Dynamic Spawn/Despawn}}).

=== DetectPrefabInTrigger ===

''Goal:''

Create a Task to Deliver specific vehicle prefabs in specific counts into the trigger for US Faction.

''Setup:''

It is achieved by having Area that spawns Layer1 which spawns Slots that each will spawn vehicles. Then LayerTaskMove that spawns SlotMoveTo which has adjusted Plugin Trigger attributes (see image below) to detect specific prefabs in specific numbers.

''Mechanics:''

Area spawns Layer1 which spawns Slots that each spawn vehicles. Then LayerTaskMove spawns SlotMoveTo that has adjusted Plugin Trigger to be activated by {{hl|SPECIFIC_PREFAB_NAME}} and using Custom Trigger Conditions, in order to activate this trigger, there needs to be at least two Ural-4320 vehicles or any of their child prefabs aka variants of Ural. UAZ-469 is requiered to be there in number of three but there needs to be this specific one, not any other variants. Otherwise, the trigger will not get activated and the Task will never finish. This setup can be used for any prefabs or even classnames to create variety of different tasks and logics.

Attributes of SlotMoveTo1 for Plugin Trigger

=== DeliverWeaponsToCrate ===

''Goal:''

Create a Task Deliver weapons into crate for US Faction.

''Setup:''

It is achieved by having Area that spawns Layer1 with Slot1 that is set to detect a prefab of a crate set in Object To Spawn attribute via Use Existing World Asset attribute.

Then It has Plugin On Inventory Change attached to (see in the image below) it and set Actions On Item Added to Count Inventory Items And Execute Action which then can execute Change Task State and Remove Item From Inventory actions.

LayerTaskMove then spawns SlotMoveTo that spawns trigger which is set to detect a medical crate 10x which will never be in the scenario spawned to create this "dummy" task.

Then outside of the Scenario Framework, there is a WeaponsCrate spawned and adjusted to have inventory. Lastly there are 5x M9 Handgun spawned around the crate.

''Mechanics:''

Area spawns Layer1 which spawns Slot1 that finds the WeaponsCrate in the vicinity and attaches the Plugin On Inventory Change to it that is set to detect 5x M9 Handgun inside it and upon reaching desired count, it will finish the objective and remove those weapons from the crate.

LayerTaskMove spawns SlotMoveTo but that is just used as "dummy" task to have some to work with and set in a way that conditions cannot be fulfilled in this scenario any other way than by that Scenario Framework action.

Attributes of Slot1 for Plugin On Inventory Change

=== DeliverWeaponsInVehicle ===

''Goal:''

Create a Task to Deliver weapons in a vehicle for the US Faction.

''Setup:''

It is achieved by having Area that Spawns Layer1 which spawns Slot1 that will spawn M1025 Humvee that has OnActivation action set with Add Item To Inventory that will add 10x M16A2 into its inventory after spawning. Then LayerTaskMove has OnTaskFinished action set to Remove Item From Inventory that will target the Slot1 spawned entity and attempt to remove it from there. Lastly, this Layer will spawn SlotMoveTo that has adjusted Plugin Trigger to search for M16A2 inside of it (see second image below) - it is important to set the Specific Class Names for this use case to the Vehicle so it can search vehicle inventories. In default cases, items in inventory are not searched by the trigger.

''Mechanics:''

Area spawns Layer1 which spawns Slot1 that spawns M1025 Humvee and adds 10x M16A2 to its inventory. Then gets spawned LayerTaskMove which spawns SlotMove to that spawns trigger which is responsible for searching all for the M16A2 inside it and set in a way that it also searches inventory of vehicles. This task can be finished either by driving the vehicle straight to the trigger or putting 10x M16A2 by any means. If they are delivered via provided vehicle, weapons will be removed from said vehicle to showcase this action here.

{{ArgTitle|3|GenericTask|{{GVI|armaR|1.2.0}}}}

''Goal:''

Create a Task linked to user action that will display the hint and finish the task - in this case, target user action will be our infamous Flush the toilet to complete the Scenario.

''Setup:''

It is achieved by having an Area with LayerTask which has SlotTask that has On User Action Event added to the Activation Actions under the OnInit category. This user action is linked to a namedToilet entity that is placed in the world outside the ScenarioFramework hierarchy. Action ID is set to 0 as the Flush the toilet action has this ID in this case. Then there are two additional actions in the Actions list that will be activated upon someone using linked user action. First will display a hint using Show Hint. Second will change the task state to FINISHED for the LayerTask. Lastly, the OnTaskFinish has Action Wait and Execute that after 2 seconds will activate End Mission Action.

''Mechanics:''

Area spawns the LayerTask which spawns SlotTask that will attach the User Action Event listener on toilet. Upon someone activating the user action, it will show a hint, then finish a task and then it will finish the mission. In order to finish this task, you need to flush the toilet.

{{ArgTitle|3|Waypoints|{{GVI|armaR|1.2.0}}}}

''Goal:''

Create a sequence of different waypoints for the AI group to complete.

''Setup:''

It is achieved by having an Area that has Layer Layer1 which has Slot1 that spawns UH-1H helicopter that names it namedHeli for future reference, then Slot3 spawns UAZ-469 and lastly SlotAI1 which spawns US Fire Team. Then there is Layer Waypoints that contains various SlotWaypoints. SlotAI1 has modified attribute category OnInit where in the Activation Actions, there are defined actions to assign waypoints to the AI group and upon completing each waypoint, it adds another in said sequence. Outside the ScenarioFramework hierarchy, there is BarGate.

''Mechanics:''

Area Spawns Layer1 that spawns UAZ-469, UH-1H and US Fire Team. Then Layer Waypoints spawns waypoints. These waypoints are then assigned to the AI group one by one and next one is assigned after completing the previous one. First, Fire Team is ordered to get in UH-1H and then get out. After that, they are ordered to move to the crossroad. Shortly after that, they are ordered to open a bar gate and then get in UAZ-469 and drive on the crossroad where they get out. There is no end state, this group will finish waypoints in given order.

=== LastStand ===

''Goal:''

Create a sequence of Task Defend to hold off enemy waves of attack for the US faction.

''Setup:''

It is split into 4 Areas called Stages. Stage_0 contains LayerTaskMove with SlotMoveTo and Slot2 that spawns an M60 machinegun. Each of the following Stage is then set to be activated by previous stage finishing task and it contains slightly modified version of DefendArea Sample where most notable differences are in Title, different timer and not requiering to having majority in said area.

''Mechanics:''

Area Stage_0 spawns LayerTaskMove with SlotMoveTo that spawns Task prompting you to move to said area. It also Spawns M60 machinegun from Slot2. Upon moving to the designated area and finishing the task, LayerTaskDefend from Stage_1 will spawn and alongside it the AIs from attached Attacker Layer. Once the timer runs out, it will spawn contents of Stage_2 and similarly for the Stage_3 which then ends the scenario after 4 seconds via the Wait And Execute action to then End Mission.

=== TutorialFull ===

''Goal:''

Create a small show-case mission that can serve as a tutorial for a bit more advanced workflow than it is shown in Samples. It expects knowledge of the basic Scenario Framework samples.

''Setup:''

It is achieved by having several areas that splits the parts of the scenario. Area_1_island spawns LayerTaskDeliver with spawns SlotDelivery that is set to detect Barrel.et and SlotPick which is set to find the nearest barrel and link it as an item to be delivered. It also spawns two SlotTriggers that upon entry, they will display a hint, play sound and TriggerHintNoFuel spawns TaskMoveToFacility. Area_2_Facility holds previously mentioned task layer that has {{hl|ON_TRIGGER_ACTIVATION}}. Once that is activated, it spawns SlotMoveTo which spawns Task Move To and it also spawns SlotTrigger that is set to check for Vehicles in order to display a hint. Upon finishing the Task Move from the TaskMoveToFacility, it will display a hint to Search for the barrels with oil. You then need to move to the Area_3_Garage near the rock where LayerTaskDestroy spawns SlotDestroy that has in target nearest rock. Upon task Destroy rock being spawned, it will provide a hint. After the rock being destroyed, Ural-4320 that is spawned there outside of the Framework can be moved to the previously mentioned trigger that is set to check vehicles - the TriggerHintLoadBarrels. Once there, upon loading barrel into the truck and then moving it to the SlotDelivery_1 trigger, it will finish this task and display hint set in TaskDeliverFuel. Then it will spawn contents of the Area_4_Landing that will spawn ClearAreaAI which will spawn SlotAI that spawns a group and WPInvasion Slot that spawns attack waypoint. It also spawns TaskClearArea similar to what you know from the Samples. Upon clearing the Area, the TaskClearArea sets the Mission End Screen and Ends the mission via actions attached in OnTaskFinished.

''Mechanics:''

Area_1_island spawns LayerTaskDeliver with Pickup and Delivery points and two SlotTriggers. Player is spawned directly to the TriggerHintWelcome which issues a hint saying: Your primary task is to activate the radar located on top of the hill. Check your tasks.

After that, you are supposed to go to the hill where the radar is located and here TriggerHintNoFuel says: The radar is not working since the generator lacks the fuel. Find it and transport it to here.

This leads you to the Area_1_Facility to finish the LayerTaskMove and then going to the Area_3_Garage where the Ural-4320 behind the rock is located. Upon destroying the rock, you are supposed to move the Ural-4320 back to the facility where oil barrels are located and there you are prompted with another hint telling you to load the barrel. Upon loading the barel to the truck, move it to the SlotDelivery_1 and unload it there. This will spawn enemy AI going to attack your position with TaskClearArea. Upon finishing it, it ends the scenario.

== Compositions ==

Scenario Framework Compositions are just Scenario Framework components put together for easier and quicker use when creating your scenarios.

In fact, many of these are directly taken from the Scenario Framework Samples so you do not have to reopen those and you can easily put them into your scenarios, perform few adjustments and you are good to go.

* {{Link|#TaskMove}} sample * {{Link|#TaskKill}} sample * {{Link|#TaskExfil}} sample * {{Link|#TaskDestroy}} sample * {{Link|#DetectPrefabInTrigger|TaskDeliverVehicles}} sample (if the prefab is in the trigger, it is delivered) * {{Link|#TaskDeliverIntel}} sample * {{Link|#TaskDefendTarget}} sample * {{Link|#TaskDefendAreaAndTarget}} sample * {{Link|#TaskDefendArea}} sample * {{Link|#TaskClearArea}} sample

{{ArgTitle|2|1.1.0 Structural Changes|{{GVI|armaR|1.1.0}}}}

Update 1.1.0 brought many changes to the Scenario Framework structure from 1.0.0. {{Feature|important|A {{Link|Arma Reforger:Scenario Framework Update Plugin}} is provided along the 1.1.0 update, updating the Scenario Framework automatically.}}

The main difference is the switch from normal Slots spawning prefabs of waypoints to the specialised {{Link|#SlotWaypoint}} that has the necessary API for you to have full control over the waypoint attributes and their behaviour. This includes a new waypoint management that allows to customise the attributes of waypoints that are about to be spawned, making it easier to influence AI units movement, allowing for more control overall. Waypoints also have a new visualisation in the World Editor to better see the position of each one.

This aside many new options have had a few changes, the most important one being the switch from '''Waypoint Group Names''' (deprecated and unused) attribute to '''Waypoint Set'''.

If Waypoints have to be cycled, just select the Cycle Waypoint. Two methods are available: * Either input the Layer name that contains the SlotWaypoints to be cycled into the "Layers With Waypoints To Cycle" attribute * Or, if this waypoint is inserted into the target layer, leave the field empty and the parent layer where this Cycle Waypoint is located will automatically cycle all the (non-cycle) waypoints in it.

{{Feature|warning| The '''Waypoint Group Names''' attribute will remain until a further (unspecified for now) version so there can be an update period.<br> Be wary that once the attribute is removed, '''the plugin will not be able to save old scenarios'''. }}

{{GameCategory|armaR|Modding|Scenario|Guidelines}}
n6vwl9a70icl20g13kieop6pr7ouyho

# Arma Reforger:Task System Usage

5050
49315
376471
376470
2025-10-15T13:47:45Z
R3vo
10479
fixed typo
376471
wikitext
text/x-wiki
As a rule, the task system is used with the Scenario Framework. In this article, you will learn how to use it separately.

== Setup ==

The <enforce inline>SCR_TaskSystem</enforce> game system is a tool for controlling tasks. The system is automatically registered, and you do not need to add anything to it.

=== World Editor ===

You can directly place prefabs in the world. They will be automatically inserted into the task system on init.

There are two basic task prefabs:

* {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Tasks/BaseTask.et}} * {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Tasks/ExtendedTask.et}}

Scenario Framework tasks folder: ''Prefabs/Systems/ScenarioFramework/Tasks/'' [[File:Task System Workbench UI.png|none|thumb|450px]] <nowiki>*</nowiki>The featured fields exist only for the [[#Tasks and Extended Tasks|extended tasks]].

Base properties:

* '''Task ID:''' ID to distinguish between different tasks. * '''Task UI Info:''' data to be shown in the game UI: a name, a description, an icon, and an icon set name. * '''Task State:''' initial state of the task. * '''Task Ownership:''' [[#Ownership and Visibility|ownership level]]. * '''Task Visibility:''' [[#Ownership and Visibility|visibility level]]. * '''Task UI Visibility:''' UI visibility level to determine where the task is visible for players (a task list, a map, or both). * '''Owner Faction Keys:''' key of factions that are owners or viewers of the task. * '''Owner Group IDs:''' group ID of groups that are owners of viewers of the task. * '''Owner Executors:''' [[#Task Executor|task executor]] that is owner or viewer of the task. * '''Assignees:''' array that allows you to pre-assign players/groups/entities on init.

Extended properties:

* '''Link Data To Related Tasks:''' enable or disable sharing data between parent/child tasks if you work with [[#Task Nesting|nested tasks]]. * '''Progress:''' the initial progress of the task on init.

=== Game User Interface ===

Press and hold {{Controls|J}} to open or close the task list. Two tabs open: [[File:Task System Game UI 1.png|none|thumb]] The left tab shows available objectives, the right one shows completed and failed tasks.

When clicking the task, a window with the details opens: [[File:Task System Game UI 2.png|none|thumb]] You can see the task icon, name, description, the '''Show on map''' button, the '''Assign''' button, and the list of assignees.

If you enabled progress for extended tasks, the progress bar appears in the task entry.

If the task has a child task, you can click a dropdown icon to open a child task. If you click the parent task entry, the info panel will show child tasks required for completion. It does not allow to assign.

If you enabled visibility on map, you can select tasks right there by clicking their icons. [[File:Task System Game Assignment.png|none|thumb|500px]] To assign someone to a task, hover over the task icon on the map, and click the panel next to it.

=== Debug Menu ===

The debug menu allows manipulating asks at runtime for debugging and monitoring. To enable it:

# Press {{Controls|Win|Alt}} # Go to '''Systems → Task System'''

[[File:Debug system task system.png|none|thumb|600px]] '''Task List''' shows all the tasks that exist in the game world. You can expand the selected task to open its properties. You can open a context menu for each property that provides tools for the further configuration.

At the moment, it is not possible to input number or string attributes for editable entities via the Game Master - the game mode itself. However, support for this feature is being considered for future updates.

== Tasks and Extended Tasks ==

There are two classes: <enforce inline>SCR_Task</enforce> and <enforce inline>SCR_ExtendedTask</enforce>.

<enforce inline>SCR_Task</enforce> features the following:

* basic info, such as a unique ID, a name, a description, and location * array of assignee executors * task state, levels of [[#Ownership and Visibility|ownership and visibility]], and a type of UI visibility * FactionKey/GroupID/Executor array to restrict tasks in [[#Ownership and Visibility|visibility and ownership]]

<enforce inline>SCR_ExtendedTask</enforce> has all the same with a couple of actions in addition:

* creation of [[#Task Nesting|nested tasks]]. You can parent this class to another extended task or create child tasks. It allows you to create complex missions with multiple moving parts. * monitoring progression. You can set progress in increments (0..100%). {{Feature|informative|Use progression for tasks that imply collecting multiple items.}}

All the data for both types is stored in <enforce inline>SCR_TaskData</enforce> and <enforce inline>SCR_ExtendedTaskData</enforce> accordingly. Both classes provide methods for copying data or merging two instances of data. All the data is replicated as one package. Storing important information in its own separate class helps keep the codebase clean and easier to work with.

== Task System API ==

{| class="wikitable" ! Method ! Parameters ! Description |- | <enforce methods="GetAssigneesForTask">void GetAssigneesForTask</enforce> | * SCR_Task '''task''' * out array<nowiki><ref SCR_TaskExecutor> </nowiki>'''assignees''' * bool '''notify''' | Outputs an array of assignee executors for the task. {{Feature|informative|Set notify to false not to receive a warning message when the assignee list is empty.}} |- | <enforce methods="IsTaskVisibleFor">bool IsTaskVisibleFor</enforce> | * SCR_Task task * SCR_TaskExecutor executor | Returns '''true''' if the task is visible to the executor. |- | <enforce methods="CanTaskBeAssignedTo">bool CanTaskBeAssignedTo</enforce> | * SCR_Task '''task''' * SCR_TaskExecutor '''executor''' | Returns '''true''' if the task is assignable to the executor. The method looks at the [[#Ownership and Visibility|task ownership]] for comparison. |- | <enforce methods="GetTasksByState">void GetTasksByState</enforce> | * out array<SCR_Task> '''outTasks''' * SCR_ETaskState '''state''' * FactionKey '''filterFaction''' * int '''filterGroup''' | Outputs an array of tasks that match the state. You can further filter tasks by factions and groups. |- | <enforce methods="RegisterTask">void RegisterTask</enforce> | * SCR_Task '''task''' | Registers the task into the task system. |- | <enforce methods="UnregisterTask">void UnregisterTask</enforce> | * SCR_Task '''task''' | Unregisters the task from the task system. |- | <enforce methods="AssignTask">void AssignTask</enforce> | * SCR_Task '''task''' * SCR_TaskExecutor '''executor''' | Tries to assign the task to the executor. |- | <enforce methods="UnassignTask">void UnassignTask</enforce> | * SCR_Task '''task''' * SCR_TaskExecutor '''executor''' | Tries to unassign the task from the executor. |- | <enforce methods="GetTaskProgress">float GetTaskProgress</enforce> | * SCR_Task '''task''' | Returns progress of the task as float. The value ranges from 0 to 100. |- | <enforce methods="AddTaskProgress">void AddTaskProgress</enforce> | * SCR_Task '''task''' * float '''percentage''' | Tries to add progress to the task. |- | <enforce methods="RemoveTaskProgress">void RemoveTaskProgress</enforce> | * SCR_Task '''task''' * float '''percentage''' | Tries to remove progress from the task. |- | <enforce methods="GetTaskState">SCR_ETaskState GetTaskState</enforce> | * SCR_Task '''task''' | Returns the state of the task. |- | <enforce methods="SetTaskState">void SetTaskState</enforce> | * SCR_Task '''task''' * SCR_ETaskState '''state''' | Changes the state of the task. |- | <enforce methods="GetTaskOwnership">SCR_ETaskOwnership GetTaskOwnership</enforce> | * SCR_Task '''task''' | Returns ownership of the task. |- | <enforce methods="SetTaskOwnership">void SetTaskOwnership</enforce> | * SCR_Task '''task''' * SCR_ETaskOwnership '''ownership''' | Tries to change ownership of the task. |- | <enforce methods="GetTaskVisibility">SCR_ETaskVisibility GetTaskVisibility</enforce> | * SCR_Task '''task''' | Returns visibility of the task. |- | <enforce methods="SetTaskVisibility">void SetTaskVisibility</enforce> | * SCR_Task '''task''' * SCR_ETaskVisibility '''visibility''' | Tries to change visibility of the task. |- | <enforce methods="GetTaskUIVisibility">SCR_ETaskUIVisibility GetTaskUIVisibility</enforce> | * SCR_Task '''task''' | Returns visibility of the task in the UI (e.g. on the map). |- | <enforce methods="SetTaskUIVisibility">void SetTaskUIVisibility</enforce> | * SCR_Task '''task''' * SCR_ETaskUIVisibility '''visibility''' | Tries to change visibility of the task in the UI (e.g. on the map). |- | <enforce methods="GetTaskFactions">array<string> GetTaskFactions</enforce> | * SCR_Task '''task''' | Returns owner factions of the task. |- | <enforce methods="AddTaskFaction">void AddTaskFaction</enforce> | * SCR_Task '''task''' * FactionKey '''factionKey''' | Adds the owner faction to the task. |- | <enforce methods="RemoveTaskFaction">void RemoveTaskFaction</enforce> | * SCR_Task '''task''' * FactionKey '''factionKey''' | Removes the owner faction from the task. |- | <enforce methods="GetTaskGroups">array<int> GetTaskGroups</enforce> | * SCR_Task '''task''' | Returns owner group IDs of the task. |- | <enforce methods="AddTaskGroup">void AddTaskGroup</enforce> | * SCR_Task '''task''' * int '''groupID''' | Adds the owner group ID to the task. |- | <enforce methods="RemoveTaskGroup">void RemoveTaskGroup</enforce> | * SCR_Task '''task''' * int '''groupID''' | Removes the owner group ID from the task. |- | <enforce methods="GetTaskExecutors">array<ref SCR_TaskExecutor> GetTaskExecutors</enforce> | * SCR_Task '''task''' | Returns owner executors of the task. |- | <enforce methods="AddTaskExecutor">void AddTaskExecutor</enforce> | * SCR_Task '''task''' * SCR_TaskExecutor executor | Adds the owner [[#Task Executor|task executor]] to the task. |- | <enforce methods="RemoveTaskExecutor">void RemoveTaskExecutor</enforce> | * SCR_Task '''task''' * SCR_TaskExecutor executor | Removes the owner task executor from the task. |- | <enforce methods="GetTaskLocation">vector GetTaskLocation</enforce> | * SCR_Task '''task''' | Returns the location of the task as a vector. |- | <enforce methods="MoveTask">void MoveTask</enforce> | * SCR_Task '''task''' * vector '''destination''' | Sets the location of the task as a new one. |- | <enforce methods="GetChildTasksFor">void GetChildTasksFor</enforce> | * SCR_Task '''task''' * out array<SCR_Task> '''childTasks''' | Outputs an array of tasks that are parented to a particular task. |- | <enforce methods="AddChildTaskTo">void AddChildTaskTo</enforce> | * SCR_Task '''task''' * SCR_Task '''childTask''' | Tries to parent a '''childTask''' to the task.{{Feature|informative|Tasks that are already parented to a particular task cannot have their own child tasks as the maximum allowed depth is set as 1.}} |- | <enforce methods="RemoveChildTaskFrom">void RemoveChildTaskFrom</enforce> | * SCR_Task '''task''' * SCR_Task '''childTask''' | Tries to unparent a '''childTask''' from the task |- | <enforce methods="CreateTask">SCR_Task CreateTask</enforce> | * ResourceName '''taskResourceName''' * string '''taskID''' * string '''name''' * string '''desc''' * vector '''position''' | Creates a new task and registers it into <enforce inline>SCR_TaskSystem</enforce>. |- | <enforce methods="DeleteTask">void DeleteTask</enforce> | * SCR_Task '''task''' | Deletes the task from <enforce inline>SCR_TaskSystem</enforce>. |- | <enforce methods="GetTaskFromTaskID">SCR_Task GetTaskFromTaskID</enforce> | * string '''taskID''' * bool '''notify''' | Finds the task by the '''taskID''' and returns it.{{Feature|informative|Set notify to false not to receive a warning message if the task could not be found.}} |}

== Task System Control Flow ==

The task system performs operations in strict order. Rules ensure that no sensitive data gets manipulated and potentially corrupted by external scripts. [[File:Control Flow.png|none|thumb|600px]]

where each element of the system only performs certain actions:

{| class="wikitable valign-top" ! <enforce inline>SCR_TaskSystem</enforce> ! <enforce inline>SCR_Task</enforce> ! <enforce inline>SCR_TaskData</enforce> |- | * exposes an API for the UI and external scripts * checks if operations are allowed/valid * provides feedback for almost all operations<br>(whether it is successful of failed, and the reason of fail) | * performs operations directly * handles replication * reads and writes data | * stores data |}

When handling the task system, follow the rules below:

* When managing tasks on a high level (assigning to players, changing task states, etc.), only use the API provided by <enforce inline>SCR_TaskSystem</enforce>. * You can retrieve information directly from <enforce inline>SCR_Task</enforce> using its public getters. However, it is not allowed invoking public methods that manipulate task data inside <enforce inline>SCR_Task</enforce> directly. * Never modify or read data in <enforce inline>SCR_TaskData</enforce> directly. Use <enforce inline>SCR_TaskSystem</enforce> to modify data and <enforce inline>SCR_Task</enforce> to read data.

== Task Executor ==

A task executor serves as data collection for everything related to the player/entity/group assignment. Whenever the task system needs to handle data related to the assignment or [[#Ownership and Visibility|task ownership]], it uses a task executor for communication of data. The <enforce inline>SCR_TaskExecutor</enforce> class inherits from <enforce inline>ScriptAndConfig</enforce> and stores the following information:

* Player ID * Entity RplID * Group ID

There are currently six ways to create a task executor: {| class="wikitable" ! Method ! Parameters ! Description |- | <enforce methods="FromPlayerID">SCR_TaskExecutor.FromPlayerID</enforce> | int '''playerID''' | Creates and returns a new '''player''' executor. The task system treats the executor as a player. |- | <enforce methods="FromPlayerID">SCR_TaskExecutor.FromEntity</enforce> | IEntity '''ent''' | Creates and returns a new '''entity''' executor. The task system treats the executor as an entity. It can be an AI character, a vehicle, etc. |- | <enforce methods="FromGroup">SCR_TaskExecutor.FromGroup</enforce> | int '''groupID''' | Creates and returns a new '''group''' executor. This executor is only used for group assignment. |- | <enforce methods="TaskExecutorFromPlayerID">SCR_TaskSystem.TaskExecutorFromPlayerID</enforce> | int '''playerID''' | Creates and returns a new '''player''' executor. The task system treats the executor as a player. |- | <enforce methods="TaskExecutorFromEntity">SCR_TaskSystem.TaskExecutorFromEntity</enforce> | IEntity '''ent''' | Creates and returns a new '''entity''' executor. The task system treats the executor as an entity. It can be an AI character, a vehicle, etc. |- | <enforce methods="TaskExecutorFromGroup">SCR_TaskSystem.TaskExecutorFromGroup</enforce> | int '''groupID''' | Creates and returns a new '''group''' executor. This executor is only used for group assignment. |}

=== Working with Task Executor ===

How to assign a task:

# Create a task executor using the methods above. # Call <enforce inline>SCR_TaskSystem.AssignTask</enforce> and provide the task reference and a newly created task executor.

The task system will directly insert the provided executor into the assignee list of the given task.

How to unassign a task:

# Create a task executor using the methods above. # Call <enforce inline>SCR_TaskSystem.UnassignTask</enforce> and provide the task reference and a newly created task executor.

'''Deleting a task executor'''

When you want to remove an assignee executor from a task, the task system does not care about the exact object in memory. Instead, it looks at the data inside the new executor you give it (like player ID or group ID). Then, it compares this data with each executor in the task's list. As soon as it finds a match, it removes that executor from the list.

You do not have to worry about giving the system the same object as before. As long as the data matches, the system will find and remove the right one.

An example in Java: instead of asking if two string objects are the exact same (<syntaxhighlight lang="java" inline>==</syntaxhighlight>), you ask if their contents are equal (<syntaxhighlight lang="java" inline>.equals()</syntaxhighlight>). The task system always uses the <syntaxhighlight lang="java" inline>.equals()</syntaxhighlight> style check.

== Ownership and Visibility ==

Both ownership and visibility are used to restrict tasks for certain players or group of players. Ownership determines who or what can assign to a task. There are the following levels of ownership:

* '''None:''' no one can assign * '''Executor:''' only specified executors can assign (it works both for players and entities).<!-- -->{{Feature|informative|Such a task can only be assigned to executors presented in the owner executor array.}} * '''Group:''' all players inside specified groups can assign * '''Faction:''' all players inside specified factions can assign * '''Everyone:''' everyone can assign

Visibility determines who can see the task in the task list or in the map view. It has all the levels listed above, and one more: '''Assignees'''. A task can be set up in a way that players only see the task in their task list once it is assigned to them. {{Feature|informative| Let's imagine you want to work with the US faction.

If you want the task to be owned by it, set Task Ownership as Faction, then add the US faction key to the array.

If you want the task to appear in the US players' task list or a map, set Task Visibility as Faction, then add the US faction key to the array. }}

Once ownership and visibility are set, executors/groups/etc. (depending on the set level) need to be added to owner arrays, so that anyone could assign to the task or view it.

== Group Tasks ==

You can assign a task to a player group. The task needs to meet the following conditions:

* To have the ownership level set as '''Executor'''. * To include one or more player groups as executor instances.

If a group is included in the task's owner list, the group leader can assign the task to their group. When the leader does this, the whole group will be assigned to the task. [[File:Group Tasks.png|none|thumb|450px]]

{{Feature|important| Group assignment implies the group as a whole to assign to a task. It does not assign every group member one by one. If a game event requires checking a player for the assignment, the task system checks whether the player belongs to the whole group. }}

=== Assignment ===

There are two ways of working with group tasks.

'''Assigning group members:'''

# Set ownership as '''GROUP''' # Insert the group ID to the owner group array.

Every member in the group can assign himself to the task.

'''Assigning the whole group:'''

# Set ownership as '''EXECUTOR''' # Insert a new group executor to the owner executor array. # In the '''executor group ID''' field, enter the group ID.

A group as a whole can assign to a task.

== Task Progression ==

The progress bar is part of an extended task that allows it to be completed in increments (0..100%). It is a useful tool for tasks that require certain amounts of items to be collected. Players can track their progress in the task list. [[File:Task Bar.png|none|thumb]]

Use the following <enforce inline>SCR_TaskSystem</enforce> methods to manage the task progress:

<enforce methods="AddTaskProgress RemoveTaskProgress"> SCR_TaskSystem.AddTaskProgress SCR_TaskSystem.RemoveTaskProgress </enforce>

You can enable or disable the progress if you do not want tasks to be progressed in increments, but want to nest them.

The progress behavior changes if both a parent and a child tasks have it enabled. See the [[#Task Nesting|Task Nesting section]].

=== The State-Progress Behavior ===

The behavior follows the principles:

* If the progress goes above 0%, the task state switches to '''PROGRESSED'''. * When the progress reaches 100%, the task state switches to '''COMPLETED'''. * If the progress is enabled, and the task state is manually set as '''COMPLETED''', the progress will not updated and show 100%. * When the progress is added or removed, the task system caches the previous task state in the case if the progress gets reverted.

== Task Nesting ==

Task nesting means organizing tasks in a parent-child hierarchy, where one task can contain and manage multiple subtasks.

The nested task structure: [[File:Nested Task Structure.png|none|thumb|700px]]

The nested tasks in the game UI: [[File:Nested Task Structure in UI.png|none|thumb|500px]]

=== Setting Up Nesting Task ===

You can set up nested tasks both in Workbench or during the runtime.

==== Workbench ==== Both a parent and a child tasks must be <enforce inline>SCR_ExtendedTask</enforce>.

To create a task hierarchy, drag and drop the child task onto the parent task in the hierarchy, in the {{Link|Arma Reforger:World Editor}}.

The task system parents the child task to the parent one automatically on init. [[File:Workbench nested tasks.png|none|thumb|450px]]

==== Runtime ==== Both a parent and a child tasks must be <enforce inline>SCR_ExtendedTask</enforce>.

To manage nested tasks:

* Call <enforce inline methods="AddChildTaskTo">SCR_TaskSystem.AddChildTaskTo</enforce> to parent the child task to the parent task. * Call <enforce inline methods="RemoveChildTaskFrom">SCR_TaskSystem.RemoveChildTaskFrom</enforce> to unparent it.

=== Behavior ===

Each task can be set to share data with other tasks in the same hierarchy. This means some settings, like ownership and visibility, will automatically be inherited from the parent task.

==== Assignment ==== Information about assignees also can be shared with parent or child tasks. The following principles work:

* If the executor is assigned to a child task, it will be assigned to a parent task as well. * Executors cannot be manually assigned to parent tasks (tasks with child tasks). It works so to avoid confusion about task ownership and responsibility. Only child tasks should have direct assignees. * Only one task can be assigned to the executor at a time.

==== Ownership and Visibility ==== Since task assignment depends on ownership settings, there are some corner cases to consider when dealing with nested tasks:

* Parent tasks can have [[#Ownership and Visibility|any level of ownership]]. * Child tasks can only switch between ownership levels that are lower than their parent task's ownership.

<spoiler text="Ownership example in nested tasks">If the parent task's ownership is set as FACTION, the child task's ownership can only be set to GROUP, EXECUTOR, or NONE. If the child tasks are set to GROUP ownership, the main task is assigned to the whole faction, and the child tasks are then distributed to individual player groups within that faction</spoiler>

The same principles work for the visibility.

==== Progression ==== Progress for nested tasks is handled according to the following:

* When progress is made on a child task, that progress is averaged across all sibling tasks and then applied to the parent task. For example, if there are three child tasks and one of them reaches 100% progress, about 33% progress will be reflected on the parent task. * Parent tasks can still receive progress independently from their child tasks.

{{Feature|informative| A parent task could gain 10% progress for every minute the team holds out, regardless of the status of its child tasks. After 10 minutes, the parent task would reach 100% progress even if none of the child tasks were completed. }}

{{GameCategory|armaR|Modding|Scenario|Guidelines}}
4ve3zipvmrxbgc1kq3rgv0fp66e7qqj

# Arma Reforger:Capture & Hold Setup

5050
32435
377945
376306
2026-01-13T16:23:22Z
Lou Montana
10739
Fix typo
377945
wikitext
text/x-wiki
{{TOC|side}} Setting up a new '''Capture & Hold''' scenario based is easy, thanks to the Prefab system and already existing '''base world''' available as part of the Capture & Hold mod.

{{GVI|armaR|1.2.1}} '''Capture & Hold''' is now packed in base game ({{Link/Enfusion|armaR|worlds/CaptureAndHold/CAH_BaseWorld.ent}}) instead of the official mod.

== Creation Steps ==

* Open Arma Reforger Tools. If this is not visible in your Steam Library, activate "tools" in the filter. * Click on "Create New" * Give a good Project Name like "CAH The Cowshed by xyz" so that people can search for it and also directly understand what this is about.

=== Initial Setup ===

Start by opening the Workbench and launch the World Editor from either the Quick Launch screen or Editors context menu.

<gallery widths="600" heights="400" perrow="1"> File:armareforger-cah 01 baseworld.jpg|'''1.''' Navigate to {{hl|Worlds/CaptureAndHold}} and open one of the following world files (world icon): the '''CAH_BaseWorld.ent''' for Everon or '''CAH_BaseWorld_Arland.ent''' for Arland. File:armareforger-cah 02 newworld.jpg|'''2.''' In the '''File''' context menu, select the '''New World''' option. File:armareforger-cah 03 subscene.jpg|'''3.''' Make sure that the '''Sub-scene (of current world)''' option is selected in the dialog. File:armareforger-cah 04 saveas.jpg|'''4.''' In the '''File''' context menu select the '''Save World As''' option and pick the scenario's save destination. File:armareforger-cah 05 save dir.jpg|'''4bis.''' In our case, we select the root directory. '''TODO Add info that need to create folder Worlds and save file .ent in that folder''' File:armareforger-cah 06 location.jpg|'''5.''' Find a suitable scenario location. In our example, we chose St Philippe. </gallery>

=== Scenario Setup === {{Feature|informative| By creating a sub-world of an existing CAH world you are already adding some elements to the world: [[File:Reforger CAH Base World.png|none|468px]] }}

Continue to place the required elements to your world.

Drag and drop the following elements from the Resource Browser:<gallery widths="600" heights="400" perrow="1"> File:armareforger-cah 07 gamemode.jpg|'''1.''' From {{hl|Prefabs/MP/Modes/CaptureAndHold}} drag {{hl|GameMode_CaptureAndHold.et}} File:armareforger-cah 08 managers.jpg|'''2.''' From {{hl|Prefabs/MP/Managers/Factions}} drag the {{hl|FactionManager_USxUSSR.et}} and from {{hl|Prefabs/MP/Managers/Loadouts}} drag the {{hl|LoadoutManager_USxUSSR.et}} File:armareforger-cah 09 area.jpg|'''3.''' From {{hl|Prefabs/MP/Modes/CaptureAndHold/Areas}} drag {{hl|CaptureAndHoldArea_Major.et}} File:armareforger-cah 10 area setup.jpg|'''4.''' While the '''SCR_CaptureAndHoldArea''' entity is still selected, adjust the shape as desired. File:armareforger-cah 11 spawns.jpg|'''5.''' From {{hl|Prefabs/MP/Spawning}} drag {{hl|SpawnPoint_US.et}} and {{hl|SpawnPoint_USSR.et}} <br>'' </gallery>

'''Note:''' The GarbageManager is not necessary anymore.

Now '''save''' the scenario and proceed.

=== System Test ===

<gallery mode="traditional" widths="600px" heights="400px" perrow="1"> File:armareforger-cah_12_play.jpg|'''1.''' Make sure that the '''Play from camera position''' option is disabled and press the '''Play''' button. File:armareforger-cah_13_test.jpg|'''2.''' Verify that the scenario is working as intended - capture points, respawn, etc. Drawing of the area trigger can help visualising its coverage. File:armareforger-cah_14_disable_drawing.jpg|'''3.''' Press Escape to return to the Edit mode. Select the '''SCR_CaptureAndHoldArea''' entity and uncheck '''Draw Shape'''. </gallery>

Once done, save your changes once more and close the World Editor.

{{Feature|informative|It is highly recommended to use {{Name|bi}}-prepared scenarios for inspiration and usage examples of individual features and components available in {{armaR}}.}}

=== Scenario Header ===

To launch the scenario in-game a Scenario header (named {{hl|MissionHeader}}) config must be created.

Exit the World Editor and return to the Resource Browser.

In the Resource Browser find your mod root directory and create a "Missions" directory inside.

<gallery mode="traditional" widths="600px" heights="400px" perrow="1"> File:armareforger-cah_15_new_missionheader.jpg|'''1.''' {{Controls|RMB}} in your directory and select Create Resource → Config File in the context menu. File:armareforger-cah_16_missionheader_class.jpg|'''2.''' Pick a name for your Mission Header and then select the {{hl|SCR_MissionHeader}} class from the list. </gallery>

Open the newly created Mission Header config.

In the '''World''' field, navigate to and select the world file. In our example it is the {{hl|MyScenario.ent}} in the mod's root directory.

<gallery mode="traditional" widths="600px" heights="400px" perrow="1"> File:armareforger-cah_17_missionheader_edit.jpg|'''1.''' Fill in remaining fields as desired then save the file. </gallery>

=== In-Game Test ===

Launching {{armaR}} with this newly created mod enabled should allow you to see the and launch the scenario directly:

<gallery mode="traditional" widths="600px" heights="400px" perrow="1"> File:armareforger-cah_18_scenarios.jpg|'''1.''' Navigate to '''Scenarios'''. File:armareforger-cah_19_result.jpg|'''2.''' Verify that your scenario is working as intended. </gallery>

=== Publish it to the Workshop ===

Now that the scenario can be launched from the game, only a few things remain. Testing the scenario '''in multiplayer''' is important, making sure that there are enough spawn points and other gameplay details. {{Feature|informative|For detailed information look at [[Arma Reforger:Multiplayer Scripting|Multiplayer Scripting]].}}

Last, but not least is to '''publish''' the mod in the Bohemia Interactive Workshop for other people to see and play!

Important: Until your masterpiece has been tested, you should use Visibility: "Private" (only for you) or "Test" (Test mod category that can be enabled in the Workbench filter).

{{Feature|informative|See {{Link|Arma Reforger:Mod Publishing Process}}.}}

=== Additional Settings Information ===

This is added as additional information so that you get up and running with a simple version first and then start worrying about the details.

==== Score Ending ==== * Hierarchy Window: Select the object "GameMode_CaptureAndHold" * Object Properties: Select "SCR_ScoringSystemComponent" * In the settings for "Scoring:Actions" change the Score Limit [[File:CAH Score.png|none|thumb|Set the score to end the CAH game.]]

==== Time Ending ==== * Hierarchy Window: Select the object "GameMode_CaptureAndHold" * Object Properties: Select "SCR_CaptureAndHoldManager" * In the settings for "End Game Duration" change the value which is given in seconds

[[File:CAH Duration.png|none|thumb]]

==== Scoring: Multipliers ==== You can adjust several actions so that they will have a bigger impact on the game / scoring. [[File:CAH Score Multipliers.png|none|thumb]]

==== Kill Feed ==== It can be thrilling to leave the default values for this but for some communities the fun starts when they get more details in the "Kill Feed".

With this setting there will be no secrets about who was eliminated by whom. [[File:CAH Kill Feed.png|none|thumb]]

==== Activate Unconsciousness ==== If you want to use it, you must activate it in the GameMode_CaptureAndHold. By default it is deactivated: [[File:capture-and-hold unconsciousness.png|none|thumb]]

==== Spawn-Areas - No-Go Zone - Death Zone ==== You don't want the enemy to get too close to your spawn point? Simple: Use the spawn areas. [[File:CAH CAH-Zone.png|none|thumb|567x567px]]

==== GarbageManager - Delete bodies from map ==== 2024-03 This got disabled for now and is not available - might come back so this documentation stays. If you are annoyed of too many bodies in your CAH areas, you need to make these adjustments: [[File:ReforgerGarbageConfigCAH.png|none|thumb|1016x1016px]]

# Select your instance of CAH GameMode # Select {{hl|SCR_BaseGameMode}} # Scroll down and select "Garbage System Config" and click on the search icon # Select "Override" in the right mouse button menu for GarbageSystem.conf

This will create a copy of the locked file into your scenario folder so that you are able to edit it.

The system will automatically open the new folder: [[File:reforger-garbage-config-2.png|none|thumb|503x503px]] Open the file and edit it.

{{Feature|important|Only the classes which are defined will be deleted.}}

This example shows how dead bodies are deleted after 180 seconds when player are further away than 3 meters. [[File:reforger-garbage-config-3.png|none|thumb|798x798px]]

# Add a new class filter # Select "only destroyed" # Define Lifetime and the distance a living player has to have when the class is deleted.

=== Common Issues ===

==== Can't initialize the game (World Editor won't start) ==== "World Editor and some other game depended features will not be available. But rest of workbench will be functional." [[File:world-editor-does-not-start.jpg|none|thumb|485x485px]]

'''Solution:''' Delete the official CAH from "... \My Games\ArmaReforger\addons". If the error remains, delete all addons.

==== Editor crashes when using the garbage collector ==== '''Solution:''' Do not use it. A developer stated said that it is not needed anymore.

==== Repair your C&H scenario after version 1 of Arma Reforger ==== Sadly, with version 1 of {{armaR}} all Capture And Hold Scenarios have to be repaired and re-published.

* Open your scenario. * Accept this message with "Yes".[[File:cah-repair-message2023-12-26 15 07 30-Window.png|none|thumb]]Place a new CaptureAndHold area as described above since it was removed while validating. Do not worry about the Garbage Collector: It is gone for good.

==== Repair your C&H scenario after version 1.2 of Arma Reforger ==== With version 1.2 the official Capture And Hold Scenario was implemented in the game and you have to remove the dependency from your scenario and re-publish it.

* Without opening Reforger Tools: ** Edit the addon.gproj from the main directory of your scenario ** Remove the Dependency "591AF5BDA9F7CE8B". A corrected version without any other mods will look like this: <syntaxhighlight lang="json"> Dependencies { "58D0FB3206B6F859" } </syntaxhighlight>

Save and open your scenario:

* Publish * If there are errors or problems selecting a Category: Don't give up - try again. Restart Workbench.

After you have fixed your scenario, it is important to delete the official Capture&Hold from .<var>%userprofile%\Documents\My Games\ArmaReforger\addons\CaptureAMPHold_591AF5BDA9F7CE8B</var> Otherwise Reforger will run into errors. CAUTION: Move the official Capture&Hold to a safe location, as you will need to copy it back for adjustments to other maps. {{GameCategory|armaR|Modding|Scenario|Tutorials}}
lhycj5okkalla1q2c7l6gn1nxv7im6p

# Arma Reforger:General Game Mode Setup

5050
32890
371013
365080
2025-02-26T12:32:07Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
371013
wikitext
text/x-wiki
{{TOC|side}} The '''SCR_BaseGameMode''' entity is the lowest usable game mode implementation that allows you to set up a custom game mode.

The core idea behind {{Link/Enfusion|armaR|SCR_BaseGameMode}} is the expansion via specialised components of {{Link/Enfusion|armaR|SCR_BaseGameModeComponent}} type.

These provide the user with API that allows hooking onto certain game events as necessary. Many provided components can work standalone and can be mixed and matched.

== Example Scenarios ==

To easily get familiar with how game modes can be set up now, please see the following scenarios:

{| class="wikitable" ! Mode ! Link ! Description |- | '''Plain''' | {{Link|enfusion://ResourceManager/~ArmaReforger:worlds/MP/MpTest.ent}} | * Simplest scenario * Automatic respawn * Free for all <!-- |- | '''Deathmatch''' | {{Link|enfusion://ResourceManager/~ArmaReforger:worlds/FeatureTests/GameModes/Deathmatch/TestGameMode_Deathmatch_Auto.ent}} | * Scoring * Automatic respawn * Free for all |- | '''Deathmatch''' | {{Link|enfusion://ResourceManager/~ArmaReforger:worlds/FeatureTests/GameModes/Deathmatch/TestGameMode_Deathmatch_Selection.ent}} | * Scoring * Menu respawn * Free for all |- | '''Team Deathmatch''' | {{Link|enfusion://ResourceManager/~ArmaReforger:worlds/FeatureTests/GameModes/TeamDeathmatch/TestGameMode_TeamDeathmatch_Auto.ent}} | * Scoring * Automatic respawn * Team based |- | '''Team Deathmatch''' | {{Link|enfusion://ResourceManager/~ArmaReforger:worlds/FeatureTests/GameModes/TeamDeathmatch/TestGameMode_TeamDeathmatch_Selection.ent}} | * Scoring * Menu respawn * Team based |- | '''Capture Point''' | {{Link|enfusion://ResourceManager/~ArmaReforger:worlds/FeatureTests/GameModes/CapturePoint/TestGameMode_CapturePoint.ent}} | * CP Scoring * Menu respawn * Free for all |- | '''Capture & Hold''' | {{Link|enfusion://ResourceManager/~ArmaReforger:worlds/FeatureTests/GameModes/CaptureAndHold/TestGameMode_CaptureAndHold.ent}} | * C&H Scoring * Menu respawn (wave) * Team based |- | '''Game Master''' | {{Link|enfusion://ResourceManager/~ArmaReforger:worlds/FeatureTests/GameModes/GameMaster/TestGameMode_GameMaster.ent}} | * Game master logic --> |}

=== Basic Setup ===

To setup the most basic scenario the user must add the following. For the simplest set-up add all items from the '''"Pre-made"''' column.

==== Free for All ==== {| class="wikitable" ! Type ! Pre-made Prefab ! Base Prefab ! Description |- | '''SCR_BaseGameMode''' | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/MP/Modes/Plain/GameMode_Plain.et}} | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/MP/Modes/GameMode_Base.et}} | Specialises game mode by using components and their combinations. Must always have a ''SCR_RespawnSystemComponent'' and specialised ''SCR_RespawnHandlerComponent'' to allow proper spawning. See {{Link|#Requirements}}. |- | '''SCR_FactionManager''' | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/MP/Managers/Factions/FactionManager_FFA.et}} | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/MP/Managers/Factions/FactionManager_Base.et}} | Provides list of available factions and their properties. For free for all modes, use the FFA faction. |- | '''SCR_LoadoutManager''' | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/MP/Managers/Loadouts/LoadoutManager_FFA.et}} | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/MP/Managers/Loadouts/LoadoutManager_Base.et}} | Provides list of available loadouts and their properties. For free for all modes, use the FFA faction. |- | '''SCR_SpawnPoint''' | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/MP/Spawning/SpawnPoint_FFA.et}} | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/MP/Spawning/SpawnPoint_Base.et}} | Provides information to the respawn system, marking a location available for spawning at. Set per faction. For free for all modes, use the FFA faction. |}

==== Faction Based ==== {| class="wikitable" ! Type ! Pre-made Prefab ! Base Prefab ! Description |- | '''SCR_BaseGameMode''' | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/MP/Modes/Plain/GameMode_Plain.et}} | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/MP/Modes/GameMode_Base.et}} | Specialises game mode by using components and their combinations. Must always have a ''SCR_RespawnSystemComponent'' and specialised ''SCR_RespawnHandlerComponent'' to allow proper spawning. See {{Link|#Requirements}}. |- | '''SCR_FactionManager''' | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/MP/Managers/Factions/FactionManager_USxUSSR.et}} | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/MP/Managers/Factions/FactionManager_Base.et}} | Provides list of available factions and their properties. |- | '''SCR_LoadoutManager''' | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/MP/Managers/Loadouts/LoadoutManager_USxUSSR.et}} | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/MP/Managers/Loadouts/LoadoutManager_Base.et}} | Provides list of available loadouts and their properties. |- | '''SCR_SpawnPoint''' | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/MP/Spawning/SpawnPoint_USSR.et}} (USSR) {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/MP/Spawning/SpawnPoint_US.et}} (US) | {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/MP/Spawning/SpawnPoint_Base.et}} | Provides information to the respawn system, marking a location available for spawning at. Set per faction. |}

== Requirements ==

{{Feature|informative|See {{Link|Arma Reforger:Respawn Setup}} in order to setup a game mode's respawn properly.}}

== Instances ==

'''SCR_BaseGameMode''': single instance in the world - mandatory.

Ties game mode together, manages attached '''SCR_BaseGameModeComponent'''(s), calls necessary methods. <enforce> BaseGameMode baseGameMode = GetGame().GetGameMode(); SCR_BaseGameMode gameMode = SCR_BaseGameMode.Cast(baseGameMode); </enforce> '''SCR_FactionManager''': single instance in the world - mandatory.

Provides available factions and API for retrieving and finding these by keys or indices. <enforce> FactionManager baseFactionManager = GetGame().GetFactionManager(); SCR_FactionManager factionManager = SCR_FactionManager.Cast(baseFactionManager); </enforce> '''SCR_LoadoutManager''': single instance in the world - mandatory.

Provides available loadouts and API for retrieving and finding these by indices. <enforce> SCR_LoadoutManager loadoutManager = GetGame().GetLoadoutManager(); </enforce> '''SCR_RespawnSystemComponent:''' single instance in the world, attached to game mode. Mandatory.

Provides means of setting and request/response player faction, loadout and spawn points. <enforce> SCR_GameModeBase gameMode; /* = yourInstance; */ SCR_RespawnSystemComponent respawnSystemComponent = gameMode.GetRespawnSystemComponent(); </enforce> '''SCR_RespawnComponent:''' Not to confuse with '''SCR_RespawnSystemComponent'''!

This component is and should always be attached to a player controller. That means that remote client will always be able to retrieve their '''local''' SCR_RespawnComponent only! The authority will be able to retrieve and iterate over all SCR_RespawnComponent. <enforce> int myId; /* = my_local_id */ RespawnComponent baseRespawnComponent = GetGame().GetPlayerManager().GetPlayerRespawnComponent(myId); SCR_RespawnComponent respawnComponent = SCR_RespawnComponent.Cast(baseRespawnComponent); // Client: if myId is local playerId, respawn component is returned. Null otherwise. (Owned PlayerController component only) // Authority: if myId is valid playerId, respawn component is returned. Null otherwise. (Any PlayerController component) </enforce>

== Game State ==

The game has three pre-defined states that can be set by the server and are automatically replicated with appropriate callback to the clients. This can be omitted, leaving the game always in GAME state.

* '''PREGAME''' (e.g. wait for ''n'' players?) * '''GAME''' (core game loop) * '''POSTGAME''' (e.g. show scoreboard, next scenario voting)

For particular implementation and details, see {{Link/Enfusion|armaR|SCR_EGameModeState}}, {{Link/Enfusion|armaR|SCR_GameModeEndData}} and <enforce inline>SCR_BaseGameMode.OnGameStateChanged()</enforce>.

=== Gamemode End ===

The game mode transitions into POSTGAME state once the authority deems so by calling the '''EndGameMode()''' method.

This method accepts an instance of {{Link/Enfusion|armaR|SCR_GameModeEndData}}, which is a small serialisable structure that is replicated to all clients and contains somewhat arbitrary data. This can be used to synchronise the end state (''winner player, winner faction, ...'') to show e.g. the end-game screen.

== Troubleshooting ==

'''My game mode is not working as it was before, errors are logged into the console regarding missing game mode, what do I do?'''

Navigate to the {{Link|#Basic Setup}} section.

Drag prefabs from the {{Link|#Faction Based}} table if you want to have US versus USSR game mode or Free for All table if FFA is what you are looking for.

{{GameCategory|armaR|Modding|Scenario|Tutorials}}
dqx0poh4r9ljqdvm5ozyogw48kme3jw

# Arma Reforger:Respawn Setup

5050
35138
371024
343755
2025-02-26T12:32:09Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
371024
wikitext
text/x-wiki
== Game Mode Setup ==

[[File:armaR_respawn-system-RespawnSystemComponent.png|thumb|The Spawn Logic can be found and set under Game Mode components\SCR_RespawnSystemComponent\'''Respawn System'''.]] # Make sure the game mode's {{Link/Enfusion|armaR|SCR_RespawnSystemComponent}} component has Spawn Logic set (under Respawn System).<br>Spawn Logic is an object responsible for defining respawn logic. # You can override {{Link/Enfusion|armaR|SCR_SpawnLogic}} to define your custom respawn behaviour.<br>Right now, there are two Spawn Logic objects defined: #* {{Link/Enfusion|armaR|SCR_AutoSpawnLogic}} - spawns the player automatically after assigning random faction, loadout and spawn point.<!-- --> You can also define Forced Faction and Forced Loadout, which will assign the player with a specific faction and loadout. #* {{Link/Enfusion|armaR|SCR_MenuSpawnLogic}} - spawning is done via respawn menu. This object notifies the player when they're ready for spawn and opens respawn menu. # You can notice that SCR_RespawnSystemComponent has multiple {{Link/Enfusion|armaR|SCR_SpawnHandlerComponent}} components as its children. This signifies what types of respawn are possible with the game mode to which it is attached. #* {{Link/Enfusion|armaR|SCR_FreeSpawnHandlerComponent}} - allows for spawning player at a certain position. #* {{Link/Enfusion|armaR|SCR_PossessSpawnHandlerComponent}} - allows for possessing a character by passing its {{Link/Enfusion|armaR|RplId}}. #* {{Link/Enfusion|armaR|SCR_SpawnPointSpawnHandlerComponent}} - allows for spawning player at a spawn point. # The Deploy menu got a overhaul too.<!-- --> Instead of using a {{Link/Enfusion|armaR|SCR_SuperMenuBase}} and {{Link/Enfusion|armaR|SCR_SubMenuBase}}, the deploy menu now consists of 3 separate menus, all inheriting from {{Link/Enfusion|armaR|SCR_DeployMenuBase}}.<br><!-- -->Opening/closing logic of respawn menu screens is handled in {{Link/Enfusion|armaR|SCR_PlayerDeployMenuHandlerComponent}}, which is attached to the player controller. #* {{Link/Enfusion|armaR|SCR_WelcomeScreenMenu}} - serves as an overview of the current game mode, objectives and rules, similar to what briefing submenu used to be. Opens only once when player joins the game. #* {{Link/Enfusion|armaR|SCR_RoleSelectionMenu}} - here you can select your faction, group and a loadout. Opens only for the initial setup when the player does not yet have an assigned faction. #* {{Link/Enfusion|armaR|SCR_DeployMenuMain}} - main deploy menu with map for selecting spawning points, but you are able to change your loadout and group as well. Opens after player's death.

== Requesting Respawn ==

If you need to request respawn, you can do easily by creating a new {{Link/Enfusion|armaR|SCR_SpawnData}} class and passing it to the <enforce inline>SCR_RespawnComponent.RequestSpawn(SCR_SpawnData data)</enforce> method.

Here are examples for requesting respawn for aforementioned spawn handlers:

; SCR_FreeSpawnHandlerComponent : <enforce> void RequestFreeSpawn() { ResourceName prefab = "{84B40583F4D1B7A3}Prefabs/Characters/Factions/INDFOR/FIA/Character_FIA_Rifleman.et"; SCR_FreeSpawnData data = new SCR_FreeSpawnData(prefab, "0 0 0"); m_RespawnComponent.RequestSpawn(data); } </enforce>

; SCR_PossessSpawnHandlerComponent : <enforce> void RequestPossessEntity(IEntity ent) { SCR_PossessSpawnData data = SCR_PossessSpawnData.FromEntity(ent); m_RespawnComponent.RequestSpawn(data); } </enforce>

; SCR_SpawnPointSpawnHandlerComponent : <enforce> void RequestSpawnPointSpawn(SCR_BasePlayerLoadout loadout, SCR_SpawnPoint spawnPoint) { SCR_SpawnPointSpawnData data = new SCR_SpawnPointSpawnData(loadout.GetLoadoutResource(), spawnPoint.GetRplId()); m_RespawnComponent.RequestSpawn(data); } </enforce>

{{GameCategory|armaR|Modding|Scenario|Tutorials}}
t4so2yomeppe6j7dgnqvcpmfmf38l7f

# Arma Reforger:Scenario Framework Setup Tutorial

5050
33998
373358
371034
2025-04-27T19:03:42Z
Snake1984
11206
/* Spawn Area Creation */ correct path to SF/Components
373358
wikitext
text/x-wiki
{{TOC|side}} This Tutorial will quickly show you how to setup ScenarioFramework for a new world and create simple scenario.

It is also highly recommended to read through the {{Link|Arma Reforger:Scenario Framework|Scenario Framework}} documentation or have it open and ready. == World Setup ==

Open {{Link|Arma Reforger:World Editor}} and load the world of your choice with '''File > Load World''' (or {{Controls|Ctrl|O}}).

For the purposes of this tutorial, we will use {{Link|enfusion://WorldEditor/worlds/Arland/Arland.ent|Arland}}.

Create a new world using '''File > New World''' (or {{Controls|Ctrl|N}}); in the popup window, select "Sub-scene (of current world)" and click OK.

Once the process is done, save the file using '''File > Save World''' (or {{Controls|Ctrl|S}}), save in the directory of your choice.

Try and use the same directory structure as {{armaR}} has, so e.g {{hl|MyModDirectory\worlds\WorldName\WorldName.ent}}. == Scenario Framework Setup ==

Once we have that, we need to setup necessary things for the Scenario Framework to work.

Open the Game Mode Setup plugin through '''Plugins > Game Mode Setup'''.

# Use the two dots (..) in the Template field to target {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Workbench/GameModeSetup/ScenarioFramework.conf}}. Once done, click Next. # The '''World Scan''' screen appears asking if you want to scan the world for proper game mode setup. As this is a clean copy of a world, this is not required - click Skip. # The '''World Configuration''' screen appears to ask if you want to create required entities - click Create entities this time to generate all the required entities. # The '''World Configuration Completed''' screen appears now, with a potential list of issues to fix; click Next. # The '''Mission Header''' screen asks about creating a mission header in order for the scenario to appear in the main menu's scenario list - click Create header to do so, then Next on its confirmation and Close on the ending screen.

Once you are finished, you can find the created entities in the current layer. == Scenario Framework Usage ==

=== Spawn Area Creation ===

Before we start creating all the fancy tasks and scenario workflows, we need to add a spawn for the player.

# To keep things organised, we create a layer: right-click on the world's subscene (named as the created world, at the bottom of the Hierarchy panel) and we name it "Start". # Then we make it the active layer by right-clicking on it and choosing "Set as active" (a double-click on it does the same thing). # Then we add a Scenario Framework Area by going to the {{hl|ArmaReforger/Prefabs/Systems/ScenarioFramework/Components}} directory and drag and dropping it into the scene ({{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/ScenarioFramework/Components/Area.et}}) # Then drag a Layer, but this time drop it on the Area in the Hierarchy panel in order to have it as a child entity of the Area # Then drag a Slot on the previously created Layer so it looks like this:<br>[[File:armaR-scenario_framework_tutorial_hierarchy.png]] # Now, select the Slot ("Slot1") in the Hierarchy tab and find the {{Link/Enfusion|armaR|SCR_ScenarioFrameworkSlotBase}} component to click on it in the '''Object Properties''' panel. # Under the Asset category, we click on two dots (..) for the '''Object To Spawn''' attribute to assign it the {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/MP/Spawning/SpawnPoint_US.et}} Prefab. That way, we have added spawning Spawnpoint for the US Faction using the Scenario Framework.

Press {{Controls|Ctrl|S}} to save the world.

You can already try if it is working for you and if you will get spawned on the position where you put that Slot which holds the Spawnpoint by pressing the World Editor's Play button (or {{Controls|F5}}).

Let's add another Slot under the same Layer to give players the Arsenal in order for them to customise their loadout.

We will do it the same way as with the SpawnPoint but using {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Props/Military/Arsenal/ArsenalBoxes/US/ArsenalBox_US.et}} (the one in {{hl|Prefabs/Props/Military/Arsenal/ArsenalBoxes/US/}}) for the '''Object To Spawn''' attribute.

In order to give a player some vehicle to move around, we will add a third slot and use the {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/M998/M1025.et}} Prefab (or the {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/M998/M1025_MERDC.et}} for the camo version).

In a similar fashion, you can build up your starting area any way you like.

The end result should look like this: :: [[File:armaR-scenario_framework_tutorial_hierarchy_complete.png]]

=== Add a Move Task ===

Now is the time for some Tasks to be created.

For starters, we will create one of the most simple task that is Task Move.

# Before we start, it is good to organise these things via layers in a similar fashion as the Start layer, so we will create the FirstTask layer and set it as active (see {{Link|#Spawn Area Creation}} above for a reminder of how to create a layer and set it as current). # Then we find a suitable location and we create an Area there by drag and dropping it from the Components folder the same way we did with the spawn area. # But then, instead of the Layer, we will find the {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/ScenarioFramework/Components/LayerTaskMove.et}}, drag and drop it in the freshly created Area (Area2 if you did not rename any). # Then, we drag and drop a {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/ScenarioFramework/Components/SlotMoveTo.et}} into this LayerTaskMove. # Notice that the slot's sphere is larger. This visualises the trigger radius for the Task Move you just created. # All you have to do now is launch the game (Play button or {{Controls|F5}}), open the map and then open the Task List (default {{Controls|J}}) to see the Task.

And when you move your character in the trigger, you will complete the objective.

=== Add a Random Destroy Task ===

Since this was pretty easy, let's expand this scenario a little bit by adding a Task Destroy vehicle once you complete the Task Move.

# To keep things organised, we create another layer and name it SecondTask, then set it as active. # Again, we create an Area, but to make it more interesting, we will randomise the kind of vehicle we will want to destroy.<br><!-- -->It can be achieved in various ways but the safest approach is to put a {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/ScenarioFramework/Components/LayerTaskDestroy.et}} under Area3 hierarchy # After selecting the ''SCR_ScenarioFrameworkLayerTaskDestroy'' component, set its '''Spawn Children''' attribute value to {{hl|RANDOM_ONE}} and change the '''Activation Type''' to {{hl|ON_TRIGGER_ACTIVATION}} # Now, add two Layers under this hierarchy # Under each of these Layers, add a {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/ScenarioFramework/Components/SlotDestroy.et}} Prefab # Now let's define what we want to destroy. In SlotDestroy1 we will put {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et}} and in the SlotDestroy2 {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vehicles/Wheeled/Ural4320/Ural4320_transport_covered.et}} as '''Object To Spawn'''. # Then we will head back to the FirstTask layer where we added the Task Move, select the LayerTaskMove1, click on its {{hl|SCR_ScenarioFrameworkLayerTask}} component and in the category '''OnTaskFinished''', we will add an Action by clicking on the plus '''+''' icon #* Search for "SpawnObjects" to find the {{hl|SCR_ScenarioFrameworkActionSpawnObjects}} action and select it #* Now we expand the action by clicking on that arrow and click on the plus '''+''' icon in the '''Name Of Objects To Spawn On Activation''' attribute #* And then input the LayerTaskDestroy1 name as the first item in the list # Now you can try it in-game. This setup will result in a behavior that will not spawn Task Destroy right away, but only after you complete the Task Move.<!-- --> Since we added the {{hl|RANDOM_ONE}} and two layers under the LayerTaskDestroy1, it will randomly pick one of the two SlotDestroy, helping to make less repetitive scenarios.

=== Add a Game Over ===

# To conclude this scenario, we can end it by adding an EndMission action in the '''OnTaskFinished''' on the LayerTaskDestroy1 #* Tick the '''Override Game Over Type''' attribute checkbox #* Set Game Over Type to {{hl|FACTION_VICTORY_SCORE}} which will end the mission upon completing Task Destroy.

That's it!

Now go ahead and try other Layer/Slot types.

If needed, see the {{Link|Arma Reforger:Scenario Framework|Scenario Framework}} documentation for more details!

{{GameCategory|armaR|Modding|Scenario|Tutorials}}
1zbjp1xm3dwxss9c62kt2am1y809vl8

# Arma Reforger:Enforce Script Syntax

5050
49366
376866
376863
2025-12-09T14:39:50Z
Lou Montana
10739
Add data types
376866
wikitext
text/x-wiki
{{TOC|side}} '''Enforce Script''' is the language that is used by the [[Enfusion]] engine first introduced in {{GameCategory|dayz|link= y}} Standalone. It is an Object-Oriented scripting language that works with objects and classes and is similar to the {{Link|https://en.wikipedia.org/wiki/C_Sharp_(programming_language)|C#}} programming language.

{{Feature|dayz|For {{dayz}}, see {{Link|DayZ:Enforce Script Syntax}}.}}

== Data Types ==

{{Feature|informative|See {{Link|Arma Reforger:Scripting: Values#Types}}.}}

There are many types of data, the most common being:

{| class="wikitable align-center-col-1" ! Type ! Description ! Example ! Wikipedia |-

! colspan="4" | Native types

|- | <enforce>bool</enforce> | a bool, a.k.a <enforce inline>true</enforce> or <enforce inline>false</enforce> (and nothing else!) | <enforce>bool value = true;</enforce> | see {{Link|https://en.wikipedia.org/wiki/Boolean_data_type|Bool}} |- | <enforce>int</enforce> | an integer, a.k.a a whole number e.g 1, 42, -10, etc. | <enforce>int value = 42;</enforce> | see {{Link|https://en.wikipedia.org/wiki/Integer_(computer_science)|Integer}} |- | <enforce>float</enforce> | a floating point value, a.k.a a partial number e.g 1.0, 4.2, -0.1, etc | <enforce>float value = 0.333;</enforce> | see {{Link|https://en.wikipedia.org/wiki/Floating-point_arithmetic|Float}} |- | <enforce>string</enforce> | a text value, a.k.a a sequence of characters, e.g "Hello there" | <enforce>string owk = "Hello" + " " + "there";</enforce> | see {{Link|https://en.wikipedia.org/wiki/String_(computer_science)|String}} |- | <enforce>vector</enforce> | an array of three float values e.g <enforce inline>{ 1.0, 42.2, 66.6 }</enforce> | <enforce>vector position = { 5, 1.5, 10 };</enforce> | see {{Link|https://en.wikipedia.org/wiki/Euclidean_vector|Vector}} |-

! colspan="4" | Objects

|- | <enforce>class</enforce> | an object able to hold properties and methods. | see {{Link|Arma Reforger:Object Oriented Programming Basics}} | see {{Link|https://en.wikipedia.org/wiki/Class_(programming)|Class}} |- | <enforce>enum</enforce> | a structure having static values "listed" as its properties.{{Feature|informative|An enum is not an object ''per se''.}} | <enforce>SCR_EBloodType myBloodType = SCR_EBloodType.O_POSITIVE;</enforce> | see {{Link|https://en.wikipedia.org/wiki/Enumerated_type|Enum}} |- | static array | a '''static''' array of elements (of ''a'' type) - it cannot contain a mix of types.{{Feature|important|Arrays (dynamic or static) are the only list type that can be initialised in line.}} | <enforce>string helloThereWords[] = { "Hello", "there" };</enforce> | see {{Link|https://en.wikipedia.org/wiki/Array_(data_type)|Array}} |- | <enforce>array<x></enforce> | a '''dynamic''' array of elements (of ''a'' type) - it cannot contain a mix of types.{{Feature|important|Arrays (dynamic or static) are the only list type that can be initialised in line.}} | <enforce>array<string> helloThereWords = { "Hello", "there" };</enforce> | see {{Link|https://en.wikipedia.org/wiki/Array_(data_type)|Array}} |- | <enforce>set<x></enforce> | a set of '''''unique''''' elements, it can only contain one type of elements.{{Feature|important|Values are '''not''' stored in insertion order.}} | <enforce> set<string> helloThereWords = new set<string>(); helloThereWords.Insert("Hello"); helloThereWords.Insert("there"); helloThereWords.Insert("Hello"); // ignored Print(helloThereWords.Count()); // prints '2' </enforce> | see {{Link|https://en.wikipedia.org/wiki/Set_(abstract_data_type)|Set}} |- | <enforce>map<x, y></enforce> | a map constituted of key-value pairs, where the key aspect is used to obtain the value.{{Feature|important|Values are '''not''' stored in insertion order.}} | <enforce> map<string, int> wordsAndLength = new map<string, int>(); wordsAndLength.Insert("General", 7); wordsAndLength.Insert("Kenobi", 6); Print(replyWordsAndLength.Get("Kenobi")); // prints '6' </enforce> | see {{Link|https://en.wikipedia.org/wiki/Map_%28higher-order_function%29|Map}} |}

== Object-Oriented Programming ==

See {{Link|Arma Reforger:Object Oriented Programming Basics}} and {{Link|Arma Reforger:Object Oriented Programming Advanced Usage}}.

== Operations ==

=== Assignation ===

Assignation operations convert the value to the expected type; see below: <enforce> // adding int and int int result = 1 + 2; // result == 3

// adding float and float float result = 1.25 + 2.75; // result == 4

// adding int and float int result = 1 + 0.9; // result == 1 - int ''truncates'' a float result int result = 0.9 + 0.9 + 0.9; // result == 2 - 2.7 truncated to 2 float result = 0.9 + 0.9 + 0.9; // result == 2.7 float result = 1 + 1.9; // result == 2.9 float result = 1.9 + 1; // result == 2.9

bool invalid = new SCR_Ray(); // error: Types 'SCR_Ray' and 'bool' are unrelated SCR_Ray instance = new SCR_Ray(); bool valid = instance; // valid == true bool result = 42; // result == true </enforce>

=== Logic ===

<enforce> SCR_Ray instance = new SCR_Ray(); if (instance) // identical to "instance != null" Print("Instance exists"); else Print("Instance does not exists");

string text; if (text) // identical to "!text.IsEmpty()" Print("Text is not empty"); else Print("Text is empty");

int val = 42; // same with float if (val) // identical to "val != 0" Print("Val is not zero"); else Print("Val is zero"); </enforce>

{{Feature|important|<enforce inline>if (intValue)</enforce> and <enforce inline>if (stringValue)</enforce> are '''not''' recommended by {{Link|Arma Reforger:Scripting: Best Practices}}.}}

{{Wiki|WIP}}

[[Category:Syntax]] {{GameCategory|armaR|Modding|Scripting}}
h0d7c9yl9o97kz0mz1m7g0jdtlguaou

# Arma Reforger:BaseContainer Usage

5050
47261
372990
2025-03-04T22:59:08Z
Lou Montana
10739
Page creation
372990
wikitext
text/x-wiki
{{TOC|side}} A {{Link/Enfusion|armaR|BaseContainer}} is a data holder for many kinds of data: Prefab, Config, {{Link/Enfusion|armaR|IEntitySource}}, {{Link/Enfusion|armaR|IEntityComponentSource}}, {{Link/Enfusion|armaR|WidgetSource}}, {{Link/Enfusion|armaR|UserSettings}}, {{Link/Enfusion|armaR|MetaFile}} are all {{hl|BaseContainers}}.

== Structure ==

Let's take a look at the {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vegetation/Core/Tree_Base.et}} Prefab to understand a {{hl|BaseContainer}}'s structure: <syntaxhighlight lang="cpp"> Tree { // ... Flags 524291 MaxHealth 10000 // ... } </syntaxhighlight>

* {{Link/Enfusion|armaR|Tree}} is the {{hl|BaseContainer}}'s class * there is no inheritance, this is the topmost Prefab; inheritance (e.g in {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Vegetation/Tree/Tree_Coniferous_Base.et}}) looks like this:<syntaxhighlight lang="cpp"> Tree : "{388AE316D09D0680}Prefabs/Vegetation/Core/Tree_Base.et" { // ... } </syntaxhighlight> ** {{hl|Tree}} being the class (a Prefab can have a class that is different from its ancestor) ** {{hl|"{388AE316D09D0680}Prefabs/Vegetation/Core/Tree_Base.et"}} being the ancestor, the inherited Prefab * its {{hl|Flags}} value is 524291, which is the {{hl|General > Flags}} value of {{hl|Traceable}}, {{hl|Visible}} and {{hl|Relative Y}} flags together * its {{hl|MaxHealth}} value is 10000, which is a GameCode-side property (not defined in script)

=== Inheritance ===

In case of inheritance: * every level can set a property's value * if the value is not defined in a level, the value is read from its ancestor where it is defined (making it a "default value" for its children) * if a property is not set anywhere, the default value is the type's default value (see {{Link|Arma Reforger:Scripting: Values#Types}})

=== Object Array ===

A property can be an array of objects, represented as a {{Link/Enfusion|armaR|BaseContainerList}}.

== Usage ==

a {{hl|BaseContainer}} '''cannot''' be strongly referenced in script (<enforce inline>ref BaseContainer m_BaseContainer; // not possible</enforce>).

See {{Link/Enfusion|armaR|BaseContainerTools}} and {{Link/Enfusion|armaR|SCR_BaseContainerTools}} classes for useful methods.

{{Feature|informative|For Resource-related BaseContainers, see also {{Link|Arma Reforger:Resource Usage}}.}}

=== Create ===

<enforce> Resource resource = BaseContainerTools.CreateContainer("GenericEntity"); BaseContainer baseContainer = resource.GetResource().ToBaseContainer(); </enforce>

=== Obtain ===

=== Read ===

<enforce> int value; if (baseContainer.Get("m_iValue", value)) // the Get method must be provided a variable of the good type as second argument Print("m_iValue has been properly read"); // e.g be sure to provide a ResourceName when required and not a string else Print("m_iValue cannot be read"); </enforce>

Iterating a {{hl|BaseContainerList}}: <enforce> BaseContainer baseContainer; for (int i, count = baseContainerList.Count(); i < count; ++i) { baseContainer = baseContainerList.Get(i); // BaseContainerList does not support foreach } </enforce>

=== Config ==== <enforce> // provided SCR_ConfigClass is decorated with [BaseContainerProps(configRoot: true)] SCR_ConfigClass configInstance = SCR_ConfigHelperT<SCR_ConfigClass>.GetConfigObject(configResourceName); </enforce>

==== IEntitySource ==== An {{hl|IEntitySource}} can be obtained from {{Link/Enfusion|armaR|WorldEditorAPI}} usage: <enforce> IEntitySource entitySource; entitySource = worldEditorAPI.CreateEntity(prefab, string.Empty, worldEditorAPI.GetCurrentEntityLayerId(), null, vector.Zero, vector.Zero); entitySource = worldEditorAPI.EntityToSource(entity); entitySource = worldEditorAPI.FindEntityByName("entityName"); entitySource = worldEditorAPI.GetEntityUnderCursor(); // etc </enforce>

<enforce> array<IEntitySource> entitySources = {}; for (int i, count = worldEditorAPI.GetEditorEntityCount(); i < count; ++i) { entitySources.Insert(worldEditorAPI.GetEditorEntity(i)); } </enforce>

==== Localization ==== <enforce> LocalizationEditor locEditor = Workbench.GetModule(LocalizationEditor); BaseContainer table = locEditor.GetTable(); if (!table) return;

BaseContainerList items = table.GetObjectArray("Items"); </enforce>

==== Meta File ==== <enforce> ResourceManager resourceManager = Workbench.GetModule(ResourceManager); MetaFile metaFile = resourceManager.GetMetaFile(absoluteFilePath); // MetaFile inherits from BaseContainer </enforce>

=== Update ===

Editing: <enforce> if (baseContainer.Set("m_iValue", 42)) // m_iValue HAS to be defined in the class - random properties cannot be added Print("m_iValue has been properly set"); else Print("m_iValue cannot be set"); </enforce>

Saving: <enforce> BaseContainerTools.SaveContainer(baseContainer, resourceName); // saving using a ResourceName BaseContainerTools.SaveContainer(baseContainer, ResourceName.Empty, absoluteFilePath); // alternatively, for e.g a MetaFile </enforce>

==== WorldEditorAPI ==== {{Feature|warning|{{hl|IEntitySource}} '''must''' be edited with World Editor API for the changes to stay in the saved world/Prefab - otherwise, only the {{hl|BaseContainer}} loaded in memory is edited and no data is changed on save.}}

<enforce> worldEditorAPI.SetVariableValue(entitySource, null, "m_iValue", "42"); // value is set by '''string''' in WorldEditorAPI </enforce>

For a value that is not at root level, the path must be defined: <enforce> array<ref ContainerIdPathEntry> path = { new ContainerIdPathEntry("m_SubObject") }; worldEditorAPI.SetVariableValue(entitySource, path, "m_iValue", "42"); </enforce>

An {{hl|IEntitySource}} component's value can be set the same way: <enforce> array<ref ContainerIdPathEntry> path = { new ContainerIdPathEntry("Components", 0) }; // assuming this is the first component worldEditorAPI.SetVariableValue(entitySource, path, "m_iValue", "42"); // the targeted source is always the parent entitySource </enforce>

{{GameCategory|armaR|Modding|Scripting|Guidelines}}
4asqik207fs1ktzfqe1p6eqvasxrlfu

# Arma Reforger:Damage Effects

5050
43624
370930
364639
2025-02-26T12:31:52Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370930
wikitext
text/x-wiki
{{TOC|side}} '''Damage Effects''' are used in order to have a data-oriented damage system and to allow for more complex behaviours in damage by defining the interaction between different Damage Effects.

== DamageEffects ==

DamageEffects are either sources of damage and they generally handle their consequences. They are separated in three types, described below.

{| class="valign-top" | === InstantDamageEffects ===

These effects are added and instantly get applied. The most common example would be a bullet.

Notice how '''InstantDamageEffects''' are never removed from the '''ExtendedDamageManager'''. | [[File:armar-damageeffects_instantdamageeffects_flowchart.png|right]] |- | === PersistentDamageEffects ===

Persistent effects are the ones that get added to a DamageManager and stay there until terminated. Their termination is usually handled by the effect itself or because a different DamageEffect got applied.

Persistent effects have EOnFrame support.

An example of a persistent effect would be something like a broken leg or a tourniquet. They stay affecting the limb until the effect is removed.

Note that PersistentDamageEffects don't apply their effect automatically (OnEffectApplied). OnEffectApplied is replicated and should be saved for cases where it is needed. | [[File:armar-damageeffects_persistentdamageeffects_flowchart.png|right]] |- | === DotDamageEffects ===

These effects are a PersistentDamageEffect specialised for applying Damage Over Time (DOT).

Duration-based DOTs are fully supported, and an effect is terminated as soon as its duration ends. | [[File:armar-damageeffects_dotdamageeffects_flowchart.png|right]] |}

== DamageManager ==

{{Wiki|TODO}}

== DamageEffectEvaluator ==

Every ExtendedDamageManager has its own instance of the {{hl|DamageEffectEvaluator}}. Whenever <enforce inline>ApplyEffect()</enforce> gets called on a DamageEffect, <enforce inline>HandleEffectConsequences()</enforce> gets called. By writing in this class the consequences of effects getting applied, {{hl|DamageEffects}} become more flexible.

=== Example ===

Imagine that the consequence of a bullet effect is to add a bleeding effect. Vehicles should not be getting bleeding effects.

* If the bleeding logic is on the DamageEffect, the DamageManager type needs to be checked before deciding how to handle it * If the bleeding logic is on the DamageManager, various DamageEffect types must be checked * If the bleeding should only apply to some characters, the DamageManager logic needs to be overcomplicated - sign of a wrong design.

The solution is to apply the consequences through these evaluators. The evaluator will handle the logic of DamageEffects being applied to the DamageManager. It is also possible to change what evaluator is used during runtime with ExtendedDamageManager.SetEvaluator().

== ApplyEffect ==

InstantDamageEffects automatically call <enforce inline>ApplyEffect()</enforce> when they get added to the manager, however this is not the case for Persistent and Dot DamageEffects. This is because clients do not update their DamageEffects, so any logic written inside of EOnFrame will only happen on the server.

DamageEffectEvaluator.HandleConsequences() gets called when DamageEffects get applied, and since effect application gets automatically replicated to clients, it is possible to use the evaluator (or inside <enforce inline>OnEffectApplied()</enforce>) to run some logic on clients.

=== Example ===

Let's have a WoundDamageEffect (a persistent effect) that deals damage to a player every 50 meters they run. When it reaches 50 meters, we would call <enforce inline>ApplyEffect()</enforce>. In the evaluator's HandleEffectConsequences, we can play a sound and deal some damage.

Persistent and Dot effects can call <enforce inline>ApplyEffect()</enforce> as many times as needed, however keep in mind that the whole effect gets replicated every time the effect gets applied, so try to keep them to a minimum.

== DamageHistory ==

The damage history contains all the DamageEffects that got applied to a damage manager since the last time it was cleared. The damage history is only stored on the server, and it can be used to properly determine who should be given kill credits or assists for helping taking down someone.

== DamageEffects Hijack ==

{{hl|HijackDamageEffect}} has similarities with {{hl|HijackDamageHandling}}; it gets called right before a {{hl|DamageEffect}} gets added. It is possible to prevent an effect from being added, as well as change its parameters before any callbacks happen. Sometimes effects are unique and only one of them should be present at a time.

=== Example ===

Let's create a BurningDamageEffect that lasts 4 seconds. If the entity is already burning when the effect gets applied, we want the duration to be refreshed. If the entity is burning for one second already, the burning effect is updated (reset to four) so the total burning duration will be five seconds.

The proper way to do it is via HijackDamageEffect: <enforce> event override bool HijackDamageEffect(SCR_ExtendedDamageManagerComponent dmgManager) { // if there are no burning effects present, we add one. if (!dmgManager.IsDamageEffectPresent(BurningDamageEffect)) return false;

array<ref PersistentDamageEffect> burningEffectArray = dmgManager.GetAllPersistentEffectsOfType(BurningDamageEffect);

// we know the cast won't fail and that at least there will be 1 element BurningDamageEffect burningEffect = BurningDamageEffect.Cast(burningEffectArray[0]);

// change duration of the effect on the manager burningEffect.SetMaxDuration(burningEffect.GetCurrentDuration() + 4);

// return true so this effect does not get added return true; } </enforce>

== Damage Over Time ==

While {{hl|ExtendedDamageManager}} inherit from {{hl|DamageManager}}, their DOT logic is completely different. {{hl|ExtendedDamageManager}} can only take damage over time through {{hl|DamageEffects}}, and therefore the following methods are no longer supported on ExtendedDamageManagers:

<enforce> OnDamageOverTimeAdded(EDamageType dType, float dps, HitZone hz) OnDamageOverTimeRemoved(EDamageType dType, HitZone hz) IsDamagedOverTime(EDamageType dType) GetDamageOverTime(EDamageType dType) RemoveDamageOverTime(EDamageType dType) </enforce>

Any calls to this methods from an ExtendedDamageManager will get ignored by the system.

{{Feature|informative|See {{Link|Arma Reforger:Damage System}} for more information.}}

{{GameCategory|armaR|Modding|Scripting|Guidelines}}
2m3u98x84l38d4swjjj8kzf1dke27pj

# Arma Reforger:Damage System

5050
43622
370972
364607
2025-02-26T12:32:00Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370972
wikitext
text/x-wiki
{{TOC|side}} The '''Damage System''' is the system that handles entity damage.

{{Feature|informative|The Damage System explained in this document targets the {{GVI|armaR|1.2.0}} version.}}

[[File:armar-damage_system_flowchart.png|thumb|600px]] == Logic Flow ==

The workflows goes as follows (see the attached image):

* damage is received * the <enforce inline>DamageManagerComponent</enforce> checks that: ** damage handling is enabled ** damage handling is '''not''' hijacked ** received damage should count as a hit ** check if the entity is dead ** check if actual damage shalt be dealt * it then ** sends damage to the hit zone which calculates the effective damage ** replicate the hit over the network for clients to calculate damage locally and display damage effects ** deals damage ** sends damage to the hit zone again for it to *** deal damage *** trigger <enforce inline>OnDamage()</enforce> *** pass damage to the parent hit zones and do the same process for themselves ** triggers DamageManager's <enforce inline>OnDamage()</enforce> ** if the DamageStates did not change, exits ** if they did, trigger the hit zone's <enforce inline>OnDamageStateChanged()</enforce> then its own <enforce inline>OnDamageStateChanged()</enforce>

== Classes ==

Class hierarchy goes as follows: <enforce style="display: inline-block"> HitZoneContainerComponent // ''engine-side'' - itself inheriting from GameComponent, irrelevant here DamageManagerComponent // ''engine-side'' SCR_DamageManagerComponent // script-side ExtendedDamageManagerComponent // ''engine-side'' SCR_ExtendedDamageManagerComponent // script-side - be sure to read its comments and the warning below SCR_CharacterDamageManagerComponent // script-side </enforce>

== ExtendedDamageManagerComponent Changes ==

The following API will not be useful for damageManagers inheriting from <enforce inline>ExtendedDamageManagerComponent</enforce>:

<enforce style="display: inline-block"> void OnDamageOverTimeAdded(EDamageType dType, float dps, HitZone hz); void OnDamageOverTimeRemoved(EDamageType dType, HitZone hz); bool IsDamagedOverTime(EDamageType dType); float GetDamageOverTime(EDamageType dType); void RemoveDamageOverTime(EDamageType dType); </enforce>

DamageEffects logic replaces the conventional {{hl|damageOverTime}}, and has its own API.

{| class="wikitable" |- | <enforce>OnDamageOverTimeAdded()</enforce> | <enforce>OnDamageEffectAdded()</enforce> |- | <enforce>OnDamageOverTimeRemoved()</enforce> | <enforce>OnDamageEffectRemoved()</enforce> |- | <enforce>IsDamagedOverTime()</enforce> | <enforce> SCR_CharacterDamageManagerComponent.IsBleeding() GetPersistentEffects() GetAllPersistentEffectsOnHitZone() GetAllPersistentEffectsOfType() </enforce> |- | <enforce>GetDamageOverTime()</enforce> | <enforce> SCR_RegeneratingHitZone.GetHitZoneDamageOverTime() SCR_CharacterBloodHitZone.GetTotalBleedingAmount() </enforce> |}

== SetHealth() ==

The <enforce inline>HitZone.SetHealth()</enforce> method "magically" changes the amount of HP a hit zone has.

This means that the flowchart above will not take place since damage is not actually being dealt - this also means there is no instigator. Instead, only <enforce inline>OnHealthSet()</enforce> and <enforce inline>OnDamageStateChanged()</enforce> are called.

<enforce inline>SetHealth()</enforce> should be used very sparingly, for example in cases where one wants to force a character death, even when damage handling is disabled for that manager (remember, this method is not ''dealing damage'', the health is magically changing).

An alternative to <enforce inline>SetHealth()</enforce> is to call HandleDamage and deal the entity's max health as true damage. By doing it this way, the entity is guaranteed to take enough damage to be destroyed, and the callback structure of a more "natural" cause of death above is maintained.

=== Bad Usage Example ===

Keep in mind that doing HandleDamage with true damage max health is not always the best way to destroy an entity. For example, killing a player inside a vehicle.

At first glance, killing the player by dealing damage equal to their max hp sounds like a good idea (and it would work fine on vanilla). However, now think of the (non-existent) Terminator mod.

If the Terminator is inside of a vehicle and the vehicle explodes, it should survive it (because of small damage multipliers, a large health pool, etc.), but since the applied damage is equal to max health, it would die.

This is why the best way to destroy entities is by dealing a "realistic" amount of damage that achieves the wanted goal, but that could technically be survivable by a modded entity.

When writing damage code, try to think of this fictional Terminator mod to ensure as much compatibility as possible.

{{GameCategory|armaR|Modding|Scripting|Guidelines}}
n8fje0d4915t9vd1wsi5kki9mfvfl32

# Doxygen

0
35008
371142
370777
2025-02-28T17:07:06Z
Lou Montana
10739
Fix categories & link
371142
wikitext
text/x-wiki
{{TOC|side}} '''Doxygen''' is a tool that generates documentation from code comment respecting a certain format. This code documentation is used across [[Enfusion]] projects, starting with {{armaR}}.

{{Feature|informative| * The official Doxygen format documentation can be found here: https://www.doxygen.nl/manual/ * See also {{Link|enfusion://ScriptEditor/scripts/Game/Examples/SCR_ExampleDoxygen.c;52|SCR_ExampleDoxygen}} for "live" examples. }}

{{Feature|important|2= <div style="font-size: 1.25em; text-align: center">What is not documented does not exist!</div>}}

== Project<!-- s --> Documentation ==

{| class="wikitable" ! Game ! File Location ! Browse |- | {{armaR}} | {{Link|https://store.steampowered.com/app/1874910/Arma_Reforger_Tools/|{{armaR}} Tools}} \ {{hl|Workbench\docs}} | {{GameCategory|armaR|Modding|Scripting|Guidelines|text= {{armaR}} Scripting Guidelines Hub}} |- |}

== {{Name|bi}} Guidelines ==

Documentation is important:

* Document what is '''public''' (protected methods go second - people should use public methods anyway) * Document what is '''important''' (features, concepts, specifics like variables or constants, etc) * Document what is '''dangerous''' (performance-wise, crash-wise)

{{Name|bi}} recommendations:

* use {{hl|//!}} and {{hl|//!<}} ** {{hl|/*! */}}, {{hl|///}} and {{hl|/** */}} are to be avoided (inline comment is preferred in order to remain able to comment big chunks of code with {{hl|/* */}} without conflict) * do not go too much into details (e.g {{hl|//! This method does xxx if provided Y but will not do it if Z is set to true at line 246 and ...}}) * do not over-document code (e.g {{hl|//! Get the name}} on {{hl|string GetName()}} is of absolutely no value); again, code should be self-explanatory and a comment should explain a design decision (if needed) See {{Link|#Examples}} below.

{{Feature|important| Reminder: an eventual '''code''' comment tells '''''why''''' code is done this way, '''method''' comment plainly explains '''''what''''' the method does / when it should be used, and '''class''' comment explains the whole system / feature of this class.<br> For a system / feature that spans across multiple classes, Doxygen grouping is required. See {{Link|https://www.doxygen.nl/manual/grouping.html|Doxygen Grouping}} documentation. }}

=== Class ===

A class documentation explains what the class does. It can add said class to groups (see Doxygen's {{Link|https://www.doxygen.nl/manual/grouping.html|grouping}} documentation). Grouping is usually done in a different comment block than class comment. <enforce> //! This class is a databag used by the TAG_WholeSystemClass's WholeSystem feature. //! Member variables are public for that purpose. It holds info X and Y related to Z. class TAG_MyDataClass { bool m_bIsValid; int m_iNumber; ref TAG_MyOtherDataClass m_OtherData; } </enforce> <enforce> //! \addtogroup TAG_WholeSystemClass //! \{

//! This class is commented class TAG_MyOtherDataClass { }

//! \} </enforce>

=== Method ===

A method documentation goes below the {{hl|//---}} separator and must ideally document the method's purpose, its '''parameters''', and its '''return value'''.

{{Feature|warning|'''Always''' amend the documentation when changing a method's signature/behaviour!}}

<enforce> class Example { //------------------------------------------------------------------------------------------------ //! Documentation goes here with the same indent int GetIntMethod1(bool returnPositive) { // method content }

//------------------------------------------------------------------------------------------------ /*! Alternative syntax - not recommended in {{armaR}} Note that indentation is on the same level as the comment start */ int GetIntMethod2(bool returnPositive) { // method content } } </enforce>

Various parameter formats: <enforce> //! \param[in] myParam parameter description //! \param[out] myParam parameter description //! \param[in,out] myParam parameter description </enforce>

Only one return format: <enforce> //! \return return value description </enforce> To be used when a signature other than <enforce inline>void</enforce> is used.

=== Variable ===

<enforce> //! a member variable can be documented like this protected float m_fVar1;

protected float m_fVar2; //!< or like this - the '<' symbol means "document what just precedes" </enforce>

== Examples ==

=== Do ===

This example is taken from {{Link/Enfusion|armaR|SCR_ObstacleDetector}}: <enforce> //------------------------------------------------------------------------------------------------ //! Detects obstacles based on current settings - a SCR_ObstacleDetector.RefreshObstaclesBy*() method must have been called earlier //! \param[in] worldPos the location to check - only the 2D position will be checked //! \param[in] exclusionList list of entities that should not be considered as obstacles //! \return true if an obstacle has been detected or on error, false otherwise bool HasObstacle(vector worldPos, array<IEntity> exclusionList = null) </enforce>

This comment is fine for multiple reasons: * the main description states the method's goal and usage condition * parameters are documented and specifics (when present) are explained * the return value is described accurately * error cases are covered

=== Don't ===

{| class="wikitable" style="width: 100%" ! Example ! Explanation |- | <enforce> //------------------------------------------------------------------------------------------------ //! Returns true if has obstacle bool HasObstacle(vector worldPos, array<IEntity> exclusionList = null) </enforce> | * the description is straightforward but does not provide context * parameters are not described * return value is included in the description and only covers one case (when everything works) |- | <enforce> //------------------------------------------------------------------------------------------------ //! Returns true if has obstacle //! \param[in] worldPos the world position //! \param[in] exclusionList the exclusion list //! \return true or false bool HasObstacle(vector worldPos, array<IEntity> exclusionList = null) </enforce> | * the description is still straightforward without context * parameter descriptions are based on their name and do not help understanding further * the return value's description describes the value itself and not the added value |- | <enforce> //------------------------------------------------------------------------------------------------ //! Returns false when an obstacle is detected bool HasObstacle(vector worldPos, array<IEntity> exclusionList = null) </enforce> | This one is one of the worst possible cases: '''no comment is better than a wrong comment'''.<br> Prefer leaving it undocumented (ideally with a {{hl|// TODO}}) if you do not have the time to document your code at the moment. |}

== See Also ==

* {{Link|https://www.doxygen.nl/}} - the official Doxygen website * {{Link|https://www.doxygen.nl/manual/}} - the official documentation * {{Link|https://www.doxygen.nl/manual/commands.html}} - \commands list

{{GameCategory|armaR|Modding|Scripting|Guidelines}} {{GameCategory|arma4|Modding|Scripting|Guidelines}}
pv748b8qiq740739n172lo18z3oodwb

# Arma Reforger:Entity Activeness

5050
34545
376289
370965
2025-09-29T13:58:58Z
Lou Montana
10739
/* Good Practices */ Fix typo
376289
wikitext
text/x-wiki
{{TOC|side}} == Active Flag and Frame Events ==

Setting a {{hl|FRAME}} event on a component or an entity makes said entity (or component's parent entity) simulated. The {{hl|ACTIVE}} flag should be set on entities that are moved every frame but do not have any components using the {{hl|FRAME}} event.

Doing so automatically calls an update on the entity along other engine operations such as updating the bounding box, etc.

When activating/deactivating a component, {{hl|EOnActivate}}/{{hl|EOnDeactivate}} component events are called, meaning that every component needs to take care of its own activation and deactivation by setting or clearing its {{hl|FRAME}} flag.

{{Feature|important|Since '''0.9.8''' {{hl|EOnActivate}} is '''not''' called on components when an entity is spawned anymore, as components are now considered active by default.}}

{{ArgTitle|3|Pre-0.9.8 Behaviour|{{GVI|armaR|0.9.5}}}}

'''Before 0.9.8''', an {{hl|ACTIVE}} flag on the entity would be necessary for any {{hl|FRAME}} events. This means that any component which needed the {{hl|FRAME}} events would need to set {{hl|ACTIVE}} on its owner.

This led to the issue where multiple components could clear the {{hl|ACTIVE}} flag event of the entity where another component would still require the {{hl|FRAME}} event, bringing to this change.

== Good Practices ==

The first step is to not set the {{hl|ACTIVE}} flag on the entity by the component in order to have {{hl|FRAME}} events (pre-0.9.8 way).

And then, as said above, when a component is disabled, it is its job to set/clear its event mask itself when it gets activated/deactivated.

=== Examples ===

{| class="wikitable valign-top" ! Bad Example ! Good Example |- | <enforce> class MyComponent : ScriptComponent { override void OnPostInit(IEntity owner) { SetEventMask(owner, EntityEvent.FRAME); owner.SetFlags(EntityFlags.ACTIVE); } } </enforce> | <enforce> class MyComponent : ScriptComponent { override void OnPostInit(IEntity owner) { SetEventMask(owner, EntityEvent.FRAME); }

override void EOnActivate(IEntity owner) { super.EOnActivate(owner);

SetEventMask(owner, EntityEvent.FRAME); }

override void EOnDeactivate(IEntity owner) { super.EOnDeactivate(owner);

ClearEventMask(owner, EntityEvent.FRAME); } }</enforce>

Advanced example: <enforce> class MyComponent : ScriptComponent { protected bool m_bCustomCondition = false;

void SetCustomCondition() { m_bCustomCondition = true; SetEventMask(owner, EntityEvent.FRAME); }

override void EOnActivate(IEntity owner) { super.EOnActivate(owner);

if (!m_bCustomCondition) return;

SetEventMask(owner, EntityEvent.FRAME); }

override void EOnDeactivate(IEntity owner) { super.EOnDeactivate(owner);

if (!m_bCustomCondition) return;

ClearEventMask(owner, EntityEvent.FRAME); } } </enforce> |}

{{GameCategory|armaR|Modding|Scripting|Guidelines}}
en3e1hrhitx15xk816hcio2mvlcxpvp

# Arma Reforger:Entity Lifecycle

5050
35072
373910
370943
2025-06-30T22:08:19Z
OOKexOo
10521
Remark that EOnSimulate has the same time slice as EOnPhysicsMove
373910
wikitext
text/x-wiki
{{TOC|side}} == Definitions ==

* Frame: every drawing frame (frame as in FPS) * Fixed Frame: a fixed event happening 30 times per second * Physics Simulation Frame: a fixed event at 60 simulations per second (frequency defined in Workbench → Options → Game Project → Modules → Physics Settings → Ticks)

== Lifecycle ==

{{Feature|important| Note that some event methods are called only when: * such events were enabled through <enforce inline>IEntity.SetEventMask()</enforce> * some conditions are met (EOnPhysicsActive requires the entity to have valid and activated physics, etc) }}

{| class="wikitable" ! rowspan="2" | Section ! colspan="2" | Mode ! colspan="2" | Method ! rowspan="2" | Description |- ! WB Play<br> Game ! WB Edit ! Entity ! Component |- | rowspan="10" | Instantiation | class="align-center" | {{Icon|checked}} | class="align-center" | {{Icon|checked}} | Constructor | | |- | class="align-center" | {{Icon|checked}} | class="align-center" | {{Icon|checked}} | | Constructor | |- | class="align-center" | {{Icon|checked}} | class="align-center" | {{Icon|checked}} | | OnPostInit | |- | class="align-center" | {{Icon|checked}} | class="align-center" | {{Icon|checked}} | | EOnInit | |- | class="align-center" | {{Icon|checked}} | class="align-center" | {{Icon|checked}} | EOnInit | | |- | | class="align-center" | {{Icon|checked}} | _WB_SetTransform | | |- | | class="align-center" | {{Icon|checked}} | | _WB_SetTransform | |- | | class="align-center" | {{Icon|checked}} | _WB_OnInit | | |- | | class="align-center" | {{Icon|checked}} | | _WB_OnInit | |- | | class="align-center" | {{Icon|checked}} | _WB_MakeVisible | | |- | rowspan="2" | Workbench

Execution loop

(World Editor) | | class="align-center" | {{Icon|checked}} | _WB_AfterWorldUpdate | | |- | | class="align-center" | {{Icon|checked}} | | _WB_AfterWorldUpdate | |- | Simulation init | class="align-center" | {{Icon|checked}} | | EOnActivate | | |- | rowspan="16" | Simulation loop | class="align-center" | {{Icon|checked}} | | | EOnFrame | |- | class="align-center" | {{Icon|checked}} | | EOnFrame | | |- | class="align-center" | {{Icon|checked}} | | | EOnDiag | |- | class="align-center" | {{Icon|checked}} | | EOnDiag | | |- | class="align-center" | {{Icon|checked}} | | | EOnFixedFrame | if 1/30s passed since the last execution |- | class="align-center" | {{Icon|checked}} | | EOnFixedFrame | | if 1/30s passed since the last execution |- | class="align-center" | {{Icon|checked}} | | | EOnSimulate | if 1/60s passed since the last execution - can be executed multiple times per frame |- | class="align-center" | {{Icon|checked}} | | EOnSimulate | | if 1/60s passed since the last execution - can be executed multiple times per frame |- | class="align-center" | {{Icon|checked}} | | | EOnPostSimulate | |- | class="align-center" | {{Icon|checked}} | | EOnPostSimulate | | |- | class="align-center" | {{Icon|checked}} | | | EOnPhysicsMove | if 1/60s passed since the last execution - can be executed multiple times per frame |- | class="align-center" | {{Icon|checked}} | | EOnPhysicsMove | | if 1/60s passed since the last execution - can be executed multiple times per frame |- | class="align-center" | {{Icon|checked}} | | | EOnPostFrame | |- | class="align-center" | {{Icon|checked}} | | EOnPostFrame | | |- | class="align-center" | {{Icon|checked}} | | | EOn'''PostFixed'''Frame | If {{hl|EOnFixedFrame}} executed this frame |- | class="align-center" | {{Icon|checked}} | | EOn'''FixedPost'''Frame | | If {{hl|EOnFixedFrame}} executed this frame |- | rowspan="3" | Destruction | class="align-center" | {{Icon|checked}} | class="align-center" | {{Icon|checked}} | | OnDelete | |- | class="align-center" | {{Icon|checked}} | class="align-center" | {{Icon|checked}} | Destructor | | Do NOT delete components in an entity's destructor - this can lead to nullpointer exceptions |- | class="align-center" | {{Icon|checked}} | class="align-center" | {{Icon|checked}} | | Destructor | Do NOT reference the parent entity in a component's destructor - the entity is already deleted by then |}

== Example Code ==

The following code is to be placed in a {{hl|.c}} file in the {{hl|scripts/Game}} module. <spoiler text="Show test Entity and Component"> <enforce> #define _PRINT_EVENTS // this flag enables/disables all event prints // #define _WB_WORLD_UPDATES // this flag enables/disables Workbench's world updates-related event prints

[EntityEditorProps(category: "Test", description: "Test entity")] class SCR_MyEntityClass : GenericEntityClass { }

class SCR_MyEntity : GenericEntity { #ifdef _PRINT_EVENTS protected static const int DELETE_AFTER = 3000; //!< duration in ms after which the entity deletes itself - for log's sake

protected void DeleteThis() { Print("DELETE THIS"); delete this; // delete this }

protected void _Print(string input) { Print("ENT : " + input, LogLevel.NORMAL); }

// IEntity events override void EOnTouch(IEntity owner, IEntity other, int touchTypesMask) { _Print("EOnTouch"); } override void EOnInit(IEntity owner) { _Print("EOnInit"); } override void EOnVisible(IEntity owner, int frameNumber) { _Print("EOnVisible"); } override void EOnFrame(IEntity owner, float timeSlice) { _Print("EOnFrame"); } override void EOnPostFrame(IEntity owner, float timeSlice) { _Print("EOnPostFrame"); } override void EOnAnimEvent(IEntity owner, int type, int slot) { _Print("EOnAnimEvent"); } override void EOnSimulate(IEntity owner, float timeSlice) { _Print("EOnSimulate"); } override void EOnPostSimulate(IEntity owner, float timeSlice) { _Print("EOnPostSimulate"); } override void EOnJointBreak(IEntity owner, IEntity other) { _Print("EOnJointBreak"); } override void EOnPhysicsMove(IEntity owner) { _Print("EOnPhysicsMove"); } override void EOnContact(IEntity owner, IEntity other, Contact contact) { _Print("EOnContact"); } override void EOnPhysicsActive(IEntity owner, bool activeState) { _Print("EOnPhysicsActive"); } override void EOnDiag(IEntity owner, float timeSlice) { _Print("EOnDiag"); } override void EOnFixedFrame(IEntity owner, float timeSlice) { _Print("EOnFixedFrame"); } override void EOnFixedPostFrame(IEntity owner, float timeSlice) { _Print("EOnFixedPostFrame"); }

// GenericEntity events override void EOnActivate(IEntity owner) { Physics physics = GetPhysics(); if (physics) physics.SetActive(ActiveState.ALWAYS_ACTIVE);

_Print("EOnActivate");

// delete after some time GetGame().GetCallqueue().CallLater(DeleteThis, DELETE_AFTER); }

override void EOnDeactivate(IEntity owner) { _Print("EOnDeactivate"); }

override IEntity _WB_GetEditableOwner() { _Print("_WB_GetEditableOwner"); return super._WB_GetEditableOwner(); } override void _WB_MakeVisible(IEntitySource src, bool visible) { _Print("_WB_MakeVisible"); } override void _WB_SetTransform(inout vector mat[4], IEntitySource src) { _Print("_WB_SetTransform"); } override void _WB_OnInit(inout vector mat[4], IEntitySource src) { _Print("_WB_OnInit"); } override bool _WB_CanDelete(IEntitySource src) { _Print("_WB_CanDelete"); return super._WB_CanDelete(src); } override bool _WB_CanRename(IEntitySource src) { _Print("_WB_CanRename"); return super._WB_CanRename(src); } override bool _WB_CanCopy(IEntitySource src) { _Print("_WB_CanCopy"); return super._WB_CanCopy(src); } override bool _WB_CanSelect(IEntitySource src) { _Print("_WB_CanSelect"); return super._WB_CanSelect(src); } override int _WB_GetAnchorCount(IEntitySource src) { _Print("_WB_GetAnchorCount"); return super._WB_GetAnchorCount(src); } override void _WB_GetAnchor(inout vector position, IEntitySource src, int index) { _Print("_WB_GetAnchor"); } override void _WB_OnAnchorSnapped(IEntitySource thisSrc, int thisAnchor, IEntitySource otherSrc, int otherAnchor, bool isReceiver) { _Print("_WB_OnAnchorSnapped"); } override bool _WB_CanAnchorSnap(IEntitySource thisSrc, int thisAnchor, IEntitySource otherSrc, int otherAnchor, bool isReceiver) { _Print("_WB_CanAnchorSnap"); return super._WB_CanAnchorSnap(thisSrc, thisAnchor, otherSrc, otherAnchor, isReceiver); } override void _WB_GetBoundBox(inout vector min, inout vector max, IEntitySource src) { _Print("_WB_GetBoundBox"); } override bool _WB_ShouldShowBoundBox(IEntitySource src) { _Print("_WB_ShouldShowBoundBox"); return super._WB_ShouldShowBoundBox(src); } override void _WB_SetExtraVisualiser(EntityVisualizerType type, IEntitySource src) { _Print("_WB_SetExtraVisualiser"); } override array<ref WB_UIMenuItem> _WB_GetContextMenuItems() { _Print("_WB_GetContextMenuItems"); return super._WB_GetContextMenuItems(); } override bool _WB_OnPhysSimulPlacementBegin(IEntitySource src) { _Print("_WB_OnPhysSimulPlacementBegin"); return super._WB_OnPhysSimulPlacementBegin(src); } override bool _WB_EnablePhysics(IEntitySource src, bool physics) { _Print("_WB_EnablePhysics"); return super._WB_EnablePhysics(src, physics); } override array<ref ParamEnum> _WB_GetUserEnums(string varName, IEntitySource src) { _Print("_WB_GetUserEnums"); return super._WB_GetUserEnums(varName, src); } override bool _WB_OnKeyChanged(BaseContainer src, string key, BaseContainerList ownerContainers, IEntity parent) { _Print("_WB_OnKeyChanged"); return super._WB_OnKeyChanged(src, key, ownerContainers, parent); } #ifdef _WB_WORLD_UPDATES override void _WB_AfterWorldUpdate(float timeSlice) { _Print("_WB_AfterWorldUpdate"); } #endif override void _WB_OnContextMenu(int id) { _Print("_WB_OnContextMenu"); } override void _WB_OnKeyDown(int keyCode) { _Print("_WB_OnKeyDown"); } override void _WB_OnCreate(IEntitySource src) { _Print("_WB_OnCreate"); } override void _WB_OnDelete(IEntitySource src) { _Print("_WB_OnDelete"); } override void _WB_OnRename(IEntitySource src, string oldName) { _Print("_WB_OnRename"); }

void SCR_MyEntity(IEntitySource src, IEntity parent) { SetEventMask(EntityEvent.ALL); _Print("Constructor"); }

void ~SCR_MyEntity() { _Print("Destructor"); } #endif }

// // Component below //

[ComponentEditorProps(category: "Test", description: "Test component")] class SCR_MyComponentClass : ScriptComponentClass { }

class SCR_MyComponent : ScriptComponent // which itself inherits from GenericComponent { #ifdef _PRINT_EVENTS protected void _Print(string input) { Print("COMP: " + input, LogLevel.NORMAL); }

// GenericComponent events override void _WB_SetTransform(IEntity owner, inout vector mat[4], IEntitySource src) { _Print("_WB_SetTransform"); } override void _WB_OnInit(IEntity owner, inout vector mat[4], IEntitySource src) { _Print("_WB_OnInit"); } override bool _WB_CanDelete(IEntity owner, IEntitySource src) { _Print("_WB_CanDelete"); return super._WB_CanDelete(owner, src); }; override bool _WB_CanRename(IEntity owner, IEntitySource src) { _Print("_WB_CanRename"); return super._WB_CanRename(owner, src); }; override bool _WB_CanCopy(IEntity owner, IEntitySource src) { _Print("_WB_CanCopy"); return super._WB_CanCopy(owner, src); }; override bool _WB_CanSelect(IEntity owner, IEntitySource src) { _Print("_WB_CanSelect"); return super._WB_CanSelect(owner, src); }; override void _WB_GetBoundBox(IEntity owner, inout vector min, inout vector max, IEntitySource src) { _Print("_WB_GetBoundBox"); } override void _WB_SetExtraVisualiser(IEntity owner, EntityVisualizerType type, IEntitySource src) { _Print("_WB_SetExtraVisualiser"); } override array<ref WB_UIMenuItem> _WB_GetContextMenuItems(IEntity owner) { _Print("_WB_GetContextMenuItems"); return super._WB_GetContextMenuItems(owner); } override bool _WB_OnPhysSimulPlacementBegin(IEntity owner, IEntitySource src) { _Print("_WB_OnPhysSimulPlacementBegin"); return super._WB_OnPhysSimulPlacementBegin(owner, src); }; override bool _WB_EnablePhysics(IEntity owner, IEntitySource src, bool physics) { _Print("_WB_EnablePhysics"); return super._WB_EnablePhysics(owner, src, physics); } override bool _WB_OnKeyChanged(IEntity owner, BaseContainer src, string key, BaseContainerList ownerContainers, IEntity parent) { _Print("_WB_OnKeyChanged"); return super._WB_OnKeyChanged(owner, src, key, ownerContainers, parent); } #ifdef _WB_WORLD_UPDATES override void _WB_AfterWorldUpdate(IEntity owner, float timeSlice) { _Print("_WB_AfterWorldUpdate"); } #endif override void _WB_OnContextMenu(IEntity owner, int id) { _Print("_WB_OnContextMenu"); } override void _WB_OnKeyDown(IEntity owner, int keyCode) { _Print("_WB_OnKeyDown"); } override void _WB_OnCreate(IEntity owner, IEntitySource src) { _Print("_WB_OnCreate"); } override void _WB_OnDelete(IEntity owner, IEntitySource src) { _Print("_WB_OnDelete"); } override void _WB_OnRename(IEntity owner, IEntitySource src, string oldName) { _Print("_WB_OnRename"); } override array<ref ParamEnum> _WB_GetUserEnums(string varName, IEntity owner, IEntityComponentSource src) { _Print("_WB_GetUserEnums"); return super._WB_GetUserEnums(varName, owner, src); } override void OnTransformResetImpl(TransformResetParams params) { _Print("OnTransformResetImpl"); };

// ScriptComponent events override void EOnTouch(IEntity owner, IEntity other, int touchTypesMask) { _Print("EOnTouch"); } override void EOnInit(IEntity owner) { _Print("EOnInit"); } override void EOnVisible(IEntity owner, int frameNumber) { _Print("EOnVisible"); } override void EOnFrame(IEntity owner, float timeSlice) { _Print("EOnFrame"); } override void EOnPostFrame(IEntity owner, float timeSlice) { _Print("EOnPostFrame"); } override void EOnAnimEvent(IEntity owner, int type, int slot) { _Print("EOnAnimEvent"); } override void EOnSimulate(IEntity owner, float timeSlice) { _Print("EOnSimulate"); } override void EOnPostSimulate(IEntity owner, float timeSlice) { _Print("EOnPostSimulate"); } override void EOnJointBreak(IEntity owner, IEntity other) { _Print("EOnJointBreak"); } override void EOnPhysicsMove(IEntity owner) { _Print("EOnPhysicsMove"); } override void EOnContact(IEntity owner, IEntity other, Contact contact) { _Print("EOnContact"); } override void EOnPhysicsActive(IEntity owner, bool activeState) { _Print("EOnPhysicsActive"); } override void EOnDiag(IEntity owner, float timeSlice) { _Print("EOnDiag"); } override void EOnFixedFrame(IEntity owner, float timeSlice) { _Print("EOnFixedFrame"); } override void EOnPostFixedFrame(IEntity owner, float timeSlice) { _Print("EOnPostFixedFrame"); } override void EOnActivate(IEntity owner) { _Print("EOnActivate"); } override void EOnDeactivate(IEntity owner) { _Print("EOnDeactivate"); } override void OnPostInit(IEntity owner) { _Print("OnPostInit"); } override void OnDelete(IEntity owner) { _Print("OnDelete"); } override void OnAddedToParent(IEntity child, IEntity parent) { _Print("OnAddedToParent"); } override void OnRemovedFromParent(IEntity child, IEntity parent) { _Print("OnRemovedFromParent"); } override void OnChildAdded(IEntity parent, IEntity child) { _Print("OnChildAdded"); } override void OnChildRemoved(IEntity parent, IEntity child) { _Print("OnChildRemoved"); }

void SCR_MyComponent(IEntityComponentSource src, IEntity ent, IEntity parent) { SetEventMask(GetOwner(), EntityEvent.ALL); _Print("Constructor"); }

void ~SCR_MyComponent() { _Print("Destructor"); } #endif } </enforce> </spoiler>

{{GameCategory|armaR|Modding|Scripting|Guidelines}}
6mht5vsyckj6kdnfgusf6yzf1292rg7

# Arma Reforger:Event Handlers

5050
32511
370982
369044
2025-02-26T12:32:01Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370982
wikitext
text/x-wiki
__NOEDITSECTION__ {{TOC|side}} {{TOC|subtoc|content= * 1 {{Link|#Script Invokers}} * 2 {{Link|#Event Handler Manager Component Events}} * 3 {{Link|#Entity Event Handlers}} }}

== Script Invokers ==

* An Event Handler can be created using a '''{{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_ScriptInvokerHelper.c|ScriptInvoker}}''' class. * Any Script Invoker signature can be created using {{hl|{{Link|Arma Reforger:Scripting: Keywords#typedef|typedef}}}} - see {{Link|Arma Reforger:ScriptInvoker Usage#Signature Declaration}}. * Using the {{Link/Enfusion|armaR|ScriptInvoker}} class itself is considered bad practice and '''must''' be avoided. * As Script Invokers are big objects and can be numerous, it is good practice to '''not''' instanciate them by default but to rather create them on request, using their getter - saving memory.

{{Feature|informative| See {{Link|Arma Reforger:ScriptInvoker Usage}} and its {{Link|Arma Reforger:ScriptInvoker Usage#Signature Declaration|Signature Declaration}} section for tutorials on how to use Script Invokers. }}

== Event Handler Manager Component Events ==

The {{Link/Enfusion|armaR|EventHandlerManagerComponent}} groups the following events under its category:

{| class="wikitable sortable valign="top" ! Event ! Class ! class="unsortable | Description |- | style="font-size: 0.8em" | === OnADSChanged === | rowspan="3" | {{Link/Enfusion|armaR|CharacterControllerComponent}} | |- | style="font-size: 0.8em" | === OnConsciousnessChanged === | |- | style="font-size: 0.8em" | === OnInspectionModeChanged === | on player character which switches in/out of inspection mode |- | style="font-size: 0.8em" | === OnMagazineCountChanged === | {{Link/Enfusion|armaR|InventoryStorageManagerComponent}} | |- | style="font-size: 0.8em" | === OnDestroyed === | {{Link/Enfusion|armaR|DamageManagerComponent}} | when the default hit zone is set to destroyed |- | style="font-size: 0.8em" | === OnCompartmentEntering === | rowspan="4" | {{Link/Enfusion|armaR|BaseCompartmentManagerComponent}} | |- | style="font-size: 0.8em" | === OnCompartmentEntered === | |- | style="font-size: 0.8em" | === OnCompartmentLeft === | |- | style="font-size: 0.8em" | === OnCompartmentLeaving === | |- | style="font-size: 0.8em" | === OnLightStateChanged === | {{Link/Enfusion|armaR|BaseLightManagerComponent}} | |- | style="font-size: 0.8em" | === OnTurretReload === | rowspan="2" | {{Link/Enfusion|armaR|TurretControllerComponent}} | {{hl|isFinished}} is true when reload is done and false when it started |- | style="font-size: 0.8em" | === OnADSChanged === | on player character which switches to ADS<br>{{Link/Enfusion|armaR|TurretControllerComponent}} can also trigger this event |- | style="font-size: 0.8em" | === OnWeaponChanged === | {{Link/Enfusion|armaR|BaseWeaponManagerComponent}} | |- | style="font-size: 0.8em" | === OnMuzzleChanged === | {{Link/Enfusion|armaR|BaseWeaponComponent}} | |- | style="font-size: 0.8em" | === OnAmmoCountChanged === | rowspan="4" | {{Link/Enfusion|armaR|BaseMuzzleComponent}} | Both weapon and character can raise this event (see {{hl|BaseWeaponManagerComponent}}) |- | style="font-size: 0.8em" | === OnMagazineChanged === | |- | style="font-size: 0.8em" | === OnProjectileShot === | |- | style="font-size: 0.8em" | === OnFiremodeChanged === | |- | style="font-size: 0.8em" | === OnWeaponAttachmentChanged === | rowspan="2" | {{Link/Enfusion|armaR|WeaponComponent}} | {{hl|isAttached}} is true if {{hl|attachmentEntity}} was attached to the weapon, and false if it was detached |- | style="font-size: 0.8em" | === OnZeroingChanged === | currently does not carry currentMuzzle |- | style="font-size: 0.8em" | === OnGrenadeThrown === | {{Link/Enfusion|armaR|WeaponSlotComponent}} | |- | style="font-size: 0.8em" | === HHMMSS === | rowspan="3" | {{Link/Enfusion|armaR|TimeAndWeatherManagerEntity}} | Triggers based on {{Link/Enfusion|armaR|TimeAndWeatherManagerEntity}}'s {{hl|TIME_EVENT_PERIODICITY}} value: * 0: never * 1: every hour * 2: every minute * 3: every second |- | style="font-size: 0.8em" | === OnDayStart === | |- | style="font-size: 0.8em" | === OnNightStart === | |}

== Entity Event Handlers ==

{{Feature|informative|See also {{Link|Arma Reforger:Entity Lifecycle}}.}} The following events are present and available in the '''{{Link/Enfusion|armaR|IEntity}}''' class - read the code documentation to learn more about them and how to use them. {{Feature|informative|'''E''' in e.g '''E'''OnInit stands for Event (not Entity).}}

{| class="wikitable sortable valign-top" ! Event ! class="unsortable" | Description |- | style="font-size: 0.8em" | === EOnInit === | Event after the entity is allocated and initialised. |- | style="font-size: 0.8em" | === EOnVisible === | This event triggers when the entity is made visible (versus being invisible). |- | style="font-size: 0.8em" | === EOnFrame === | This event, as its name suggests, triggers on each simulation frame. |- | style="font-size: 0.8em" | === EOnPostFrame === | Triggers after physics update. |- | style="font-size: 0.8em" | === EOnFixedFrame === | {{Feature|warning|This event can be called on another thread than the main thread. This means that you must avoid any modifications on other entities during this event!}} |- | style="font-size: 0.8em" | === EOnFixedPostFrame === | |- | style="font-size: 0.8em" | === EOnAnimEvent === | Event from the animation system |- | style="font-size: 0.8em" | === EOnPhysicsActive === | Triggers on (de)activation of the {{hl|RigidBody}}'s physics. |- | style="font-size: 0.8em" | === EOnPhysicsMove === | Triggers when the physics engine moves this entity. |- | style="font-size: 0.8em" | === EOnSimulate === | Happens before physics engine iteration - called from sub-iterations. |- | style="font-size: 0.8em" | === EOnPostSimulate === | Happens after physics engine iteration. Happens once per frame.

|- | style="font-size: 0.8em" | === EOnJointBreak === | Triggers when a joint attached to this entity's {{hl|RigidBody}} is broken. |- | style="font-size: 0.8em" | === EOnTouch === | Event when touched by another entity. It requires the entity to have {{hl|TouchComponent}}. |- | style="font-size: 0.8em" | === EOnContact === | Triggers when contact with another {{hl|RigidBody}} has been registered. |- | style="font-size: 0.8em" | === EOnDiag === | Happens every frame after {{Link|#EOnFrame}} when "Entity Diag" is enabled in the [[Arma Reforger:Diag Menu|Diag Menu]] (e.g {{GameCategory|armaR|Modding|Official Tools|text= Workbench}}). |- | style="font-size: 0.8em" | === EOnUser0 === | |- | style="font-size: 0.8em" | === EOnUser1 === | |- | style="font-size: 0.8em" | === EOnUser2 === | |- | style="font-size: 0.8em" | === EOnUser3 === | |- | style="font-size: 0.8em" | === EOnUser4 === | |}

{{GameCategory|armaR|Modding|Scripting|Guidelines}}
5mzkazvlklraossg1qrpx6c3n704n13

# Arma Reforger:Input Manager

5050
33240
370928
364640
2025-02-26T12:31:51Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370928
wikitext
text/x-wiki
{{Wiki|TODO|See all {{hl|TODO}} entries.}} {{TOC|side}} '''Input Manager''', a sub-class of {{hl|Action Manager}}, both holds and updates actions by input controllers (mouse, keyboard, gamepad, joystick etc).

== Configuration File ==

{{Link|enfusion://ResourceManager/~ArmaReforger:Configs/System/chimeraInputCommon.conf|chimeraInputCommon.conf}} is the file used by {{armaR}} to setup controls.

It holds '''[[#Action|Actions]]''' and '''[[#Context|Contexts]]''', described below.

== Action ==

In gameplay code '''actions''' are used in order to never have any direct reference to control inputs themselves (such as keyboard key or mouse click).

An action is named (e.g {{hl|CharacterFire}}) and see inputs assigned to it (e.g {{hl|mouse:button0}} and {{hl|gamepad0:right_trigger}} both in an {{hl|InputSum}}'s list). Each action has: * a '''name''' * a '''type'''

Action type tells Input Manager how the action's input value should be used as well as how to deal with different types of inputs. An action can be of one of these four types: * Digital - e.g keyboard, mouse buttons etc. * Analog - e.g thumb/trigger controller on gamepad etc. * AnalogRelative - e.g mouse wheel, relative mouse pos etc. * Motion - e.g motion controllers for VR, absolute mouse position etc.

Various combinations of Action type vs Input type behave differently: {| class="wikitable align-center" ! ! Input: Digital ! Input: Analog ! Input: AnalogRelative ! Input: Motion |- ! Action: Digital | value | value | '''sum''' | '''diff''' |- ! Action: Analog | value | value | '''sum''' | '''diff''' |- ! Action: AnalogRelative | value | value | value | '''diff''' |- ! Action: Motion | '''sum''' | '''sum''' | '''sum''' | value |}

=== InputSource ===

Each action has an '''InputSource''' defining from which input(s) (used in a certain way) the action is triggered.

Each input source has the '''Visible''' flag as well as the '''Filter preset''' entry. The '''Visible''' flag makes the input source visible (active? TODO) or not. The '''Filter preset''' applies the provided filter preset to the input (TODO).

There are several source classes with different behaviours.

==== InputSourceValue ==== Simply provides value, parameters for only one possible key.

* Input - any possible input (keyboard key, mouse click or movement, gamepad button, etc) * Filter - see {{Link|#InputFilter}} below

==== InputSourceSum ==== Sums values from any number of children input sources (when more than one key is valid for one action)

* Sources: an array of {{hl|InputSource}} items from which to sum return values

==== InputSourceCombo ==== Provides "combo" functionality - all of children sources must be activated for activating {{hl|InputSourceCombo}}. When the first input from combo is activated, all other inputs in combo are blocked for other Input Sources (to distinguish between e.g {{Controls|Ctrl|A}} and {{Controls|A}})

* Sources: an array of InputSource items from which to sum return values

==== InputSourceEmpty ==== * Device Type - TODO

=== Input Type ===

The input type is either a specific key/control (e.g {{hl|keyboard:KC_RETURN}}), a positive/negative value (e.g {{hl|gamepad0:left_thumb_horizontal}}), or a more generic input (e.g {{hl|joystick0:any_button}}). The prefix can be one of: * {{hl|keyboard}} - e.g {{hl|keyboard:KC_F5}}, {{hl|keyboard:KC_NUMPAD0}} * {{hl|mouse}} - e.g {{hl|mouse:button0}}, {{hl|mouse:''any''_button}}, {{hl|mouse:x_abs}} * {{hl|gamepad0}} - e.g {{hl|gamepad0:pad_down}}, {{hl|gamepad0:right_trigger}}, {{hl|gamepad0:a}} * {{hl|joystick0}} - e.g {{hl|joystick0:button4}}, {{hl|joystick0:axis0}} * {{hl|trackir}} - e.g {{hl|trackir:yaw}}, {{hl|trackir:z}}

=== InputFilter ===

A filter transforms raw value from input to output value, for example filters just rising edge of signal (key down), transform input by curve, reacts just when input is active for some time (key hold), etc. Same as source class, it is supposed to extend functionality by overriding this class. The following filters are available:

* {{hl|InputFilterValue}} redirect normalised input value to output * {{hl|InputFilterPressed}} returns 1.0 when input value is above threshold, otherwise 0.0 * {{hl|InputFilterDown}} returns 1.0 only in frames where the input value just hit raising edge (key DOWN) * {{hl|InputFilterDoubleClick}} returns 1.0 only in frames where input value just hit raising edge (key DOWN) 2nd time in short time period ({{hl|DOUBLE_CLICK_DURATION`}}) * {{hl|InputFilterHold}} returns 1.0 when input value is above threshold for minimal amount of time {{hl|HOLD_DURATION}} (value is rising gradually from 0.0 to 1.0 in time of {{hl|HOLD_DURATION}}) * {{hl|InputFilterHoldOnce}} returns 1.0 once when input value is above threshold for minimal amount of time {{hl|HOLD_DURATION}} (value is rising gradually from 0.0 to 1.0 in time of {{hl|HOLD_DURATION}}) * {{hl|InputFilterToggle}} has value 0.0 or 1.0 switched by rising edge (key DOWN) of input value * {{hl|InputFilterUp}} returns 1.0 only in frames where input value just hit lowering edge (key UP) * {{hl|InputFilterClick}} returns 1.0 only in frames where input value just hit lowering edge (key UP) AND duration between high and low edge is less than {{hl|HOLD_DURATION}} * {{hl|InputFilterSingleClick}} returns 1.0 only in frames where input value just hit lowering edge (key UP) AND duration between high and low edge is less than {{hl|HOLD_DURATION}} * {{hl|InputFilterRepeat}} similar to {{hl|InputFilterDown}} returns 1.0 only in frames where input value just hit raising edge (key DONW), and then after {{hl|INITIAL_INTERVAL}}, every {{hl|REPEAT_INTERVAL}} returns 1.0 for just one frame, until the value is above threshold

[[File:armareforger inputmanager-wave-diagram.png|frameless]]

== Context ==

All actions are organised in '''contexts'''. A context is a group of actions belonging together. One action can be in multiple contexts. Because many actions are sharing same inputs, but naturally not all actions are used at the same time, the game must activate pertinent contexts on each frame or activate/deactivate it once for some amount of time. Each context has '''priority''' and '''flags'''. Input Manager during update iterate trough contexts and if context was activated by game in this frame, and there is not any active context with higher priority, processes its actions. Otherwise values of actions are zeroed or unchanged (depends on action type). By setting context flag '''Overlay''' we let activate event context with lower priority. Flag '''CursorVisible''' tells Input Manager that the context is using mouse cursor.

=== Flags ===

* {{hl|Overlay}} - TODO * {{hl|Cursor Visible}} - shows the game cursor * {{hl|Exclusive}} - disables other contexts that might have been activated. If two Exclusive contexts are active at the same time, TODO * {{hl|Force Cursor}} - forces the game cursor to be shown * {{hl|Capture Cursor}} - TODO

=== Example ===

See the following four contexts: {| class="wikitable" ! Name ! Description ! Priority ! Flags |- | CharacterLookContext | mouse look actions | 1 | |- | CharacterMovementContext | {{Controls|W}}{{Controls|A}}{{Controls|S}}{{Controls|D}} movement actions | 2 | Overlay |- | InventoryContext | mouse UI interaction actions | 2 | CursorVisible |- | InGameMenuContext | mouse UI interaction actions | 3 | CursorVisible |}

* During regular gameplay, {{hl|CharacterLookContext}} and {{hl|CharacterMovementContext}} are activating by gameplay code/script.<!-- --> {{hl|CharacterMovementContext}} has priority 2, but it has overlay flag, so it let to update also {{hl|CharacterLookContext}} with lower priority.<br><!-- -->Result: character can both walk and look around, cursor is not visible * When the inventory is open, {{hl|InventoryContext}} gets activated too.<!-- --> It has priority 2, but no '''Overlay''' flag, so only contexts with priority 2 or higher are updated - here {{hl|InventoryContext}} and {{hl|CharacterMovementContext}}.<br><!-- -->Result: character can still walk, but mouse movement is used by for interaction with UI in inventory, cursor is now visible because of {{hl|InventoryContext}} has the '''CursorVisible''' flag * In-Game menu is open: {{hl|InGameMenuContext}} is activating by the game. It has priority 3, so the first three contexts are inactive.<br><!-- -->Result: character do not react to any input, player can just interact with in-game menu, cursor is now visible because of the '''CursorVisible''' flag on {{hl|InGameMenuContext}}

{{GameCategory|armaR|Modding|Scripting|Guidelines}}
8a2xm0mtldqh6z33sr1ey2h6jzwbqbr

# Arma Reforger:Object Oriented Programming Advanced Usage

5050
32924
376538
373184
2025-10-25T15:03:31Z
Lou Montana
10739
Some wiki formatting
376538
wikitext
text/x-wiki
{{TOC|side}} {{Feature|informative|This guideline requires the understanding of {{Link|Arma Reforger:Object Oriented Programming Basics}}.}}

== Casting ==

Casting is the act of "presenting" a value as another type. For example, if a class hierarchy is {{hl|Animal > Dog > Cocker}}, a dog is an animal, a cocker is a dog (that is an animal), but a dog is not especially a cocker.

<enforce> class Animal {} class Dog : Animal {} class Cocker : Dog {} class Labrador : Dog {} </enforce>

=== Upcasting ===

Upcasting means seeing the class as one of its parents: <enforce> void Method() { Cocker cocker = new Cocker(); Animal animal = cocker; // OK, as a cocker is an animal string sentence = cocker; // error: cocker does -not- inherit from string } </enforce>

=== Downcasting ===

Downcasting means seeing a parent class as a specific child - this must be done by manually casting: <enforce> void Method(Dog dog) { Cocker cocker1 = dog; // error: "Dog" is too generic to be casted as Cocker - it could be e.g a Labrador Cocker cocker2 = Cocker.Cast(dog); // OK: manual casting tells the code "the developer knows what he is doing" // if 'dog' is not castable as a Cocker, null is returned - the code does not crash } </enforce>

=== Manual Casting ===

<enforce> void Method() { float value1 = 4.9; int value2 = value1; // value2 = 4 as integer casting -truncates- the value, not rounds it string value3 = "result = " + (bool)value2; // "result = true", as a non-zero integer is true when casted to bool } </enforce>

== Template ==

A template is a class that allows a generic management for multiple types. Its methods cannot assume anything about the type.

{{Feature|informative|The generic type is by convention declared by the {{hl|T}} letter.}}

<enforce> // template class Item with generic type T class Item<Class T> { protected T m_Data;

void Item(T data) { m_Data = data; }

void SetData(T data) { m_Data = data; }

T GetData() { return m_Data; }

void PrintData() { Print(m_Data); } } </enforce>

<enforce> void Method() { Item<string> stringItem = new Item<string>("Hello!"); // template class Item declared with type "string". In Item<string> class, all Ts are substituted with 'string' Item<int> intItem = new Item<int>(72); // template class Item declared with type "int". In Item<int> class, all Ts are substituted with 'int'

stringItem.PrintData(); // prints "m_Data = 'Hello!'" intItem.PrintData(); // prints "m_Data = 72" } </enforce>

== Modding ==

A mod can inherit/replace an existing class with the use of the <enforce inline>modded</enforce> keyword.<br> It is used to inject inherited class into class hierarchy without modifying other scripts (especially suitable in modding). A modded class behaves like a class inherited from the original class (one can use {{Link|Arma Reforger:Object Oriented Programming Basics#super|super}} to access the original class) but also allows <enforce inline>private</enforce> methods and functions access and modification. When a modded class is declared, the modded class will be instantiated instead of the original class. {{Feature|important|Only classes within the same module can be modded (to mod a class in e.g {{hl|GameLib}} module, the modded class has to be placed in the {{hl|GameLib}} module).}}

<enforce> // game class A { private string m_sPrivateString = "something said";

void Say() { Print("original Say method"); Print(m_sPrivateString); } }

void Test() { A a = new A(); // "class A" is instantiated a.Say(); // prints "original Say method" then "something said" }

// mod modded class A // this class automatically inherits from the original class A { override void Say() { m_sPrivateString = "modded said"; Print("modded Say method"); super.Say(); } }

void TestModded() { A a = new A(); // "modded class A" is instantiated a.Say(); // prints "modded Say method" then "original Say method" and "modded said" } </enforce>

=== Precedence ===

Multiple mods can edit the same class if loaded together. In such case, vanilla class gets modded in order by mod1, mod2, mod3. Mod loading order is defined by dependency (if mod2 requires mod1, mod1 is loaded first) - if no dependencies are involved, order is not guaranteed.

{| class="valign-top" style="width: 100%" ! Vanilla ! Mod 1 ! Mod 2 |- | <enforce> class SCR_ExampleClass { string GetMessage() { return "Vanilla message"; } } </enforce> | <enforce> modded class SCR_ExampleClass { override string GetMessage() { return super.GetMessage() + ", Mod A"; } } </enforce> | <enforce> modded class SCR_ExampleClass { override string GetMessage() { return super.GetMessage() + ", Mod B"; } } </enforce> |}

{| style="width: 100%" | If Mod B requires Mod A, the load order will be Vanilla > Mod A > Mod B. | <enforce>instance.GetMessage(); // Vanilla message, Mod A, Mod B</enforce> |- | If Mod A requires Mod B, the load order will be Vanilla > Mod B > Mod A (obviously). | <enforce>instance.GetMessage(); // Vanilla message, Mod B, Mod A</enforce> |- | If no dependencies are defined between mods, the load order is arbitrary. | <enforce> // can be one of instance.GetMessage(); // Vanilla message, Mod A, Mod B // or instance.GetMessage(); // Vanilla message, Mod B, Mod A </enforce> |}

{{GameCategory|armaR|Modding|Scripting|Guidelines}}
ahdz0f9ok4zw165t7tuoez439ayxj0e

# Arma Reforger:Object Oriented Programming Basics

5050
32443
376924
376914
2025-12-30T18:04:28Z
Lou Montana
10739
/* super */ Fix example
376924
wikitext
text/x-wiki
{{TOC|side}} == Class vs Object ==

A class is a definition of an object; it can be seen as the blueprint for an object's creation. An object is an '''''instance''''' of a class, as in an entity created following the class' specifics.

An object can hold values, known as '''member variables''', and functions, known as '''methods'''.

A class can have variables and methods too, known as '''static''' variables and methods.

== Member Variable ==

A member variable is a variable scoped to that object instance. It is usually {{hl|protected}} but can be {{hl|private}} (see {{Link|#Visibility}}); a public member is usually a bad practice - it is best to use {{Link|#Getter and Setter|Getters and Setters}}.

See {{Link|Arma Reforger:Scripting: Values}} for naming prefixes.

<enforce> class MyClass { protected int m_iValue = 100;

void MyClass(int value) { m_iValue = value; } } </enforce>

== Method ==

A method is an object's function or a class' (static) function - it can be seen as a "member function".

A method has a '''signature''', i.e a return type, a name and a parameters list - e.g: <enforce>int GetNumber(bool canBeNegative)</enforce>

Two methods can be named identically as long as they differ by their parameters.

<enforce> class MyClass { void MyMethod() { Print("MyMethod without arguments"); }

int MyMethod() // error: only the return type differs { return 42; }

void MyMethod(int a) { Print("MyMethod with 1 int argument"); }

void MyMethod(int a, int b = 0) // error: "identical" to the above method due to the optional parameter { // both can be called MyMethod(42) Print("MyMethod with 1 or 2 int argument(s)"); }

void MyMethod(string a) { Print("MyMethod with 1 string argument"); }

void MyMethod(bool a, string b) { Print("MyMethod with 1 bool, 1 string argument"); }

static int MyStaticMethod() { return 33; } }

MyClass instance = new MyClass(); // creates an instance of MyClass int result = instance.MyMethod(); // returns 42 instance.MyMethod(10); // prints "MyMethod with 1 int argument" instance.MyMethod("hello"); // prints "MyMethod with 1 string argument" instance.MyMethod(false, "hey"); // prints "MyMethod with 1 bool, 1 string argument"

delete instance; // deletes instance - instance variable value is now null

int staticResult = MyClass.MyStaticMethod(); // without instance usage, staticResult is 33 </enforce>

=== Getter and Setter ===

A Getter describes a method that '''gets''' the value of a property;

A Setter describes a method that '''sets''' it.

<enforce noGuess> class MyClass { int Health = 100; // bad - public access }

class MyClass { protected int m_iHealth; // good - getter and setter allow for evolution

int GetHealth() // health getter { return m_iHealth; }

void SetHealth(int health) // health setter { m_iHealth = health; }

void MyClass() // constructor method { m_iHealth = 100; } }

// because health could be implemented another way - and if it is, we do not want to have to go through old code to change calls

class MyClass { protected int m_iHeadHealth; protected int m_iBodyHealth;

void MyClass() // constructor method { m_iHeadHealth = 100; m_iBodyHealth = 100; }

int GetHealth() // health getter { return m_iHeadHealth * 0.75 + m_iBodyHealth * 0.25; // head damage counts thrice }

void SetHealth(int health) // health setter { if (health > 100 || health < 0) { return; }

m_iHeadHealth = health * 0.75; m_iBodyHealth = health * 0.25; } } </enforce>

=== Constructor ===

A constructor method is a specific one: it is a method that is automatically called on object instanciation, and can be with or without arguments.<br> There can be zero to one constructor.

A constructor is declared as a method having the same name as its class.

{{Feature|informative| The parent class constructor (see the {{Link|#Inheritance}} chapter below) is automatically called. An inheriting class can only '''add''' new arguments to those accepted by the base class constructor. }}

<enforce> class MyClass { int m_iValue;

void MyClass() { PrintFormat("Instance created"); m_iValue = 50; } }

MyClass instance = new MyClass(); // instance.m_iValue = 50 </enforce>

<enforce> class MyClass { int m_iValue;

void MyClass(int value) { PrintFormat("Instance created with value %1", m_iValue); m_iValue = value; } }

MyClass instance = new MyClass(42); // prints "Instance created with value 42" MyClass instance = new MyClass(); // error: argument is missing </enforce>

=== Destructor ===

A destructor method is a specific one: it is a method that is automatically called on object destruction, and exists only without arguments.<br> There can be zero to one destructor.

A destructor is declared as a method having the same name as its class, starting with a tilde {{hl|~}}.

<enforce> class MyClass { void ~MyClass() { Print("I am being destroyed!"); } }

MyClass instance = new MyClass(); delete instance; // prints "I am being destroyed!"; </enforce>

== Visibility ==

Visibility is the accessibility of an object's or class' method/variable from the "outside" of that object/class.

=== public ===

This is the default visibility - the member is accessible from inside as well as outside the object. As the default visibility, it does not need a keyword.

<enforce noGuess> class ParentClass { int Health = 100; // while a bad practice, a public member is PascalCase-named }

class ChildClass : ParentClass { void ChildClass() { Health = 200; // stronger child } }

ParentClass parent = new ParentClass(); parent.Health = 10; // OK

ChildClass child = new ChildClass(); child.Health = 10; // OK </enforce>

=== protected ===

This is a "hierarchy" visibility - the member is accessible from the object and objects of inheriting classes. It uses the {{hl|protected}} keyword.

{{Feature|important|It is important to keep visibility to {{hl|protected}} for modding purpose - an inherited class can then expand or reuse these methods.}}

<enforce> class ParentClass { protected int m_iHealth = 100; }

class ChildClass : ParentClass { void SetHealth(int health) { m_iHealth = health; } }

ParentClass parent = new ParentClass(); parent.m_iHealth = 10; // error: cannot access from the outside parent.SetHealth(10); // error: the SetHealth method is a member of ChildClass, not ParentClass

ChildClass child = new ChildClass(); child.m_iHealth = 10; // error: cannot access from the outside child.SetHealth(10); // OK - the child can internally edit the inherited member </enforce>

=== private ===

This is the strictest visibility - only the object can access this member. This is useful to e.g cut code in smaller methods and not clutter the list of available methods on this object from the outside. It uses the {{hl|private}} keyword.

<enforce> class ParentClass { private int m_iHealth = 100; }

class ChildClass : ParentClass { void SetHealth(int health) { m_iHealth = health; // error: ChildClass does not know m_iHealth } }

ParentClass parent = new ParentClass(); parent.m_iHealth = 10; // error: cannot access from the outside parent.SetHealth(10); // error: the SetHealth method is a member of ChildClass, not ParentClass </enforce>

== Inheritance ==

Inheritance is the transmission of parent properties to a child class. Class inheritance is written with {{hl|:}}. A class can only inherit from '''one''' class.

<enforce> class ParentClass { void ParentMethod() { Print("Parent Method"); } }

class ChildClass : ParentClass { void ChildMethod() { Print("Child Method"); } }

ParentClass parent = new ParentClass(); parent.ParentMethod(); // outputs "Parent Method" parent.ChildMethod(); // error: ChildMethod is not a member of ParentClass, only ChildClass

ChildClass child = new ChildClass(); child.ParentMethod(); // outputs "Parent Method" child.ChildMethod(); // outputs "Child Method"</enforce>

=== override ===

A '''non-private''' (protected or public) inherited method can be overridden thanks to the {{hl|override}} keyword: <enforce> class ParentClass { void TheMethod() { Print("Parent Method"); } }

class ChildClass : ParentClass { override void TheMethod() { Print("Child Method"); } }

ParentClass parent = new ParentClass(); parent.TheMethod(); // outputs "Parent Method"

ChildClass child = new ChildClass(); child.TheMethod(); // outputs "Child Method" </enforce>

{{Feature|important| An overridden method must have the '''exact same signature''' as the overridden method - up to the parameter names. <enforce> int MyMethod(int value1, int value2);

// overrides override int MyMethod(int value1, int value2); // works override int MyMethod(int value1, string value2); // does not work - parameter types mismatch override int MyMethod(int valueA, int valueB); // does not work - parameter names mismatch </enforce> }}

=== super ===

An inherited object can call its parent's '''non-private''' (protected or public) method: <enforce> class ParentClass { void MethodA() { Print("Parent MethodA"); } }

class ChildClass : ParentClass { void MethodB() { super.MethodA(); Print("Child MethodB"); } }

ParentClass parent = new ParentClass(); parent.MethodA(); // outputs "Parent MethodA"

ChildClass child = new ChildClass(); child.MethodB(); // outputs "Parent MethodA" then "Child MethodB" </enforce>

It can even call an overridden one: <enforce> class ParentClass { void TheMethod() { Print("Parent Method"); } }

class ChildClass : ParentClass { override void TheMethod() { super.TheMethod(); Print("Child Method"); } }

ParentClass parent = new ParentClass(); parent.TheMethod(); // outputs "Parent Method"

ChildClass child = new ChildClass(); child.TheMethod(); // outputs "Parent Method" then "Child Method" </enforce>

== See Also ==

* [[Arma Reforger:Object Oriented Programming Advanced Usage|Object Oriented Programming Advanced Usage]]

{{GameCategory|armaR|Modding|Scripting|Guidelines}}
g9yuu2026i4qgz8nls4uv2mqcji4kzg

# OFPEC Tags List

0
5632
376843
371146
2025-12-03T17:16:01Z
Lou Montana
10739
Add BI and SCR tags
376843
wikitext
text/x-wiki
This list is a copy of [https://www.ofpec.com/tags/?action{{=}}list OFPEC's tag list] (with the addition of Bohemia's {{hl|BI_}}/{{hl|BIN_}}/{{hl|BIS_}}/{{hl|SCR_}} prefixes) and serves as its backup in case the [[OFPEC]] site is down. {{Feature|informative|For details about this list and how to add your own tags, see [[Scripting Tags]].}}

{{TOC|abc}}

<div style="columns: 3"> === A ===

{| class="wikitable sortable" style="width: 100%" ! TAG !! Owner |- | A139 || Kostas2413 |- | A140 || kevinb |- | A1618 || nesmonartis |- | A165 || Limeisland |- | A177 || Jona |- | A1L1P || prestonchism5 |- | A1PJ || Jona |- | A2020 || Aeneas2020 |- | A2203 || Big_Al |- | A2B || Snake@A2B |- | A2C || Laxentis |- | A2HOE || maxenzo2 |- | A2M || a2m |- | A2S || A2Script |- | A2TS3 || NouberNou |- | A32ND || CTLondon501st |- | A375E || tchou |- | A3B || WeißeFeder_Bruuudis |- | A3BL || TheIrishTrinity |- | A3DAN || Danerzz |- | A3DM || TRIPDEPALS |- | A3DS || TRIPDEPALS |- | A3FDEV || Freezer |- | A3HL || Tom Squirrel |- | A3L || Дмитруй |- | A3LFE || jonnyetiz |- | A3LIF || A3LifeBlue |- | A3M || Skeltoras |- | A3PH || Arma Philippines |- | A3PL || KokaKolaA3 |- | A3PMC || sy4 |- | A3R || acurlyninja |- | A3RES || Pillord |- | A3RO || Rangooo1337 |- | A3RP || Michael Swiss |- | A3RU || Blender |- | A3S || FunkFest |- | A3SRX || SAYREX |- | A3TC || Tomcat_1995 |- | A3TP || W0lle |- | A3YCA || YanCosta |- | A40K || ladie from hell |- | A455 || Andy455 |- | A4L || A.Deubelskerl [DBK] |- | A4RP || A.Deubelskerl [DBK] |- | A506 || Margiotta |- | A5221 || TiernanTheMan |- | A6105 || hairston630 |- | A69 || SandX |- | A974 || Christopher974 |- | A999 || DoctorSparks |- | AAA || Sama |- | AAAAA || QwertQ9 |- | AAC || Boiorix |- | AACF || ONI |- | AAD || Sabelzahntiger |- | AAF || eagles talon |- | AAK || Ala Ad Kabeer |- | AAL || al_liga |- | AALM || Ace |- | AAM || teratino |- | AAP || Dimitri_Harkov |- | AAS || Aasgeier |- | AAT || Bloberg |- | AAW || Australians At War |- | AB82 || Pollitt |- | ABASH || Abash |- | ABATO || Abartho |- | ABCDE || Broadsword |- | ABDDN || mrzachhigginsofficial |- | ABED || Abel |- | ABG || Sheildsy |- | ABI || JingaDinga |- | ABIP || RichesMaps |- | ABN13 || ThatArmaGuy |- | ABNOE || Wolfpack_Neko |- | ABO || Alph@bravo |- | ABR || Aberrunto |- | ABS || Abs_01 |- | ABT || coolcl |- | ABU || Abuu |- | ABYSS || AdeptAbyss |- | ABZ || Whitedan |- | ACA || acoustic |- | ACAVE || th3flyboy |- | ACDSU || d4n1ch |- | ACE || Advanced Combat Environment |- | ACERO || @CERO |- | ACES || Aircraft and Chopper Equipment Standard |- | ACF || ACF |- | ACH || Apache (AKA Dark Soldier) |- | ACHN || ItsYaBoiJabool |- | ACI || LiveFastDieFree |- | ACID || acidioussoul |- | ACL || razoraresharp |- | ACMM || antoniocarlosmaia |- | ACOLYTE || MemphisAcolyte |- | ACOM || OneMysteryMan |- | ACPL || zGuba |- | ACR || TheSun |- | ACS || razoraresharp |- | ACSE || Advanced Combat Sound Environment |- | ACTRG || Marksman1942 |- | ACU || Zerro |- | ACW || Kumariashamaki |- | ADAM || castell |- | ADC || cmndr_andi |- | ADDON || rodhalberd |- | ADE || Adelemphii |- | ADENF || AdenFlorian |- | ADEQU || AderQ |- | ADF || Australian Defence Force Mod |- | ADFT || mahtt |- | ADFU || pastor399 |- | ADG || tipster1 |- | ADL || ADLewis1975 |- | ADLER || GAdler |- | ADLP || Andy455 |- | ADM || iAd4m |- | ADMS || Adams (16AA) |- | ADNG || Thoron |- | ADR || AmerikanSn1p3r |- | ADS || admiralducksauce |- | ADT || DT_Holding |- | ADVIC || advictoriam |- | ADX || .:mazed:. |- | AE608 || AE-6080 |- | AED || eldstal |- | AEDIT || pastor399 |- | AEDS || rodhalberd |- | AEG || Loyalguard |- | AEGIS || Aegis |- | AEKO || Aeko |- | AER || rodhalberd |- | AERDF || jello100 |- | AEREO || rodhalberd |- | AERO || rodhalberd |- | AFB || afbrad |- | AFD || affraid |- | AFF || affraid |- | AFFRA || affraid |- | AFFRD || affraid |- | AFG || DarkFenix100 |- | AFG80 || granQ |- | AFGHA || Afghanka |- | AFMC || CSLA Mod |- | AFMOD || ArmA Francais Mission Development |- | AFRD || affraid |- | AFS || teamwolf |- | AFSF2 || coremanite |- | AFSR || EMSI |- | AFTL || Insane |- | AFUK || Uro |- | AFVET || Fire_Medic |- | AFW || mecharius |- | AG9 || ageA9 |- | AGAR || ignotus17 |- | AGG || Matthijs |- | AGGF || Jack6366 |- | AGITATOR || DogmatistAgitator |- | AGM || andersgrim |- | AGN || Attoric Games |- | AGP || Anglo Greek Pole Productions |- | AGR || AGERSTONE |- | AGRPG || Triebtaeter |- | AGS || ag_smith |- | AGUA || Agua |- | AHA || AugustoHA |- | AHK || jelrite346 |- | AHOST || seytan69 |- | AIA || Allies In Arms |- | AIBG || MasterJ |- | AIC23 || AICA |- | AIGAM || Danite |- | AIM || Typhon |- | AIOC || Noahd99 |- | AIR || Assassinator |- | AIRBO || DLocker |- | AIS || Fen |- | AJB || BiggAndrew24 |- | AJM || angusjm |- | AJN || McGling |- | AJS || Abuu & Jonno Studios |- | AJSK || AJS |- | AK3 || AK_A3 |- | AKA || kAk |- | AKE || Jayhawk |- | AKIRA || NevsZA |- | AKL || AK_A3 |- | AKO || Akolex |- | AKU || Akugagi |- | AKVA || Celgus |- | ALA46 || GrayFox |- | ALB92 || ALB92 |- | ALC || Alcore |- | ALD15 || Aldo15 |- | ALDI || alderous |- | ALE || Ale |- | ALEXA || alexa.hunts |- | ALEXK || alex-krug |- | ALEXS || Hasmat2815 |- | ALF || Rikugun |- | ALFA || AlexAltea |- | ALG || ITZSESHH |- | ALI || Alipali |- | ALIEN || Digital Carbon |- | ALJ0D || aljd |- | ALK || Linus |- | ALL || Arma Ladder/Liga |- | ALMAMONS || Shuljamac |- | ALO || Xtreme |- | ALPH0 || merauder146 |- | ALPHY || Alphawolfun |- | ALR || EthanB0527 |- | ALRP || AlexisFR |- | ALTF || sport308 |- | ALTF4 || Brycie |- | ALU || Alukard |- | ALV || AlexVestin |- | ALW || a-lone-wolf |- | ALWA || Alwandy |- | ALXMA || AlexanderHoraitis |- | ALZ || angry_lizard |- | AM92 || AnimalMother92 |- | AMA || TopHatt |- | AMB || Hairy Primate |- | AMB11 || Smootch |- | AMC || Anmac |- | AMF || Legion Tactical |- | AMH || TRG_Holicer |- | AMM || ianbanks |- | AMMO || rodhalberd |- | AMOD || ArmA Modifications |- | AMORE || The Avon Lady |- | AMPER || Amperloom |- | AMR || ThePhysGun |- | AMR28 || 4yDiK |- | AMRG || Coldfront15 |- | AMS || Assault Mission Studio |- | AMS66 || Moeller88DK |- | AMS88 || Moeller88DK |- | AMT || AustriaMod |- | AMU || jotel |- | AMUR || 4yDiK |- | AMUT || Raango |- | AMWAY || Mr_Amway |- | ANA || TriTard |- | ANATO || anatomix |- | ANC || giraffe |- | ANCH || Angeloh111 |- | AND || AND |- | AND2 || AND |- | ANDE || ande |- | ANDOR || andrewor |- | ANDY || andersson |- | ANDY1 || little_andy |- | ANG || ocramweb |- | ANGEL || MRANGELL96/David Angel |- | ANK || gonzai |- | ANN || AnotherNormalNick |- | ANNIE || WildAnnie |- | ANOE || ALEX.50 |- | ANON || AnonAustria13 |- | ANT || LtMadine |- | ANTH || Anthariel |- | ANTHA || Anthariel |- | ANTI || Antiprotestant |- | ANZ || anzacsas |- | AOA || TESHUB |- | AOH || ParryJD |- | AOI || th3flyboy |- | AOS || Ambient Occlusion Studios |- | AOT || Roaban |- | APAN || keivlech |- | APBW || GamingPanthers |- | APD || Aspide |- | APE || Apecengo |- | APEX1 || apexgames |- | APH || ahunn |- | APOC || Muppet1856 |- | APS || Australian Phantom Soldiers |- | APT || Cpt-Fred |- | APU || Apouh |- | APX || apexgaming |- | AQUIS || Aquis |- | AR308 || chayfo |- | ARA || Australian Regular Army |- | ARAB || damnbino |- | ARAKA || Arakatonga |- | ARAR || affraid |- | ARB || Aerobat14 |- | ARC || Archaine |- | ARCH || TemplarVX |- | ARCHI || Archi49 |- | ARCTO || Arctor |- | ARD || Aidas |- | ARDIN || Aridin |- | ARES || Clayman |- | ARG || ZoTTiixX |- | ARGO || ArgoChris |- | ARICP || Ariussin |- | ARK || Arctor |- | ARM4LIFE || MrRatSuper |- | ARMA || OFPEC |- | ARMA3MO || Redays |- | ARMAG || Giorgy |- | ARMAS || rodhalberd |- | ARMAT || ArMaTec |- | ARMEC || Aramec |- | ARMPT || onlybaldwin16 |- | ARMST || Dragster |- | ARN || Hotbrass |- | ARO || Aron |- | ARP || thedog |- | ARPA || MidShip |- | ARPL || MRANGELL96 |- | ARRON || Arronax |- | ARROW || baca85 |- | ARS || Ares |- | ARST1 || hfuser1 |- | ART || Ragnar |- | ARTIC || blazester |- | ARU || Spyke |- | ARW || theArdboegamer |- | ARWEN || dobermann91 |- | AS2 || FunkFest |- | ASB || Buehgler_AS |- | ASC || ASC |- | ASCT || CyDoN |- | ASCW || Julian2990 |- | ASD || asd163255 |- | ASDG || AlphaSquad.net |- | ASE || Advanced Sound Environment |- | ASEOB || obliv1on |- | ASF || David Berka |- | ASFF || firefly2442 |- | ASG || Gnome |- | ASH || AaronAsh |- | ASI || Vigilante |- | ASIN || Toaster |- | ASITA || joshpier3 |- | ASL || Vigilante |- | ASM || asmodeus |- | ASO || Picasso |- | ASP || ASP |- | ASPE || Asperche |- | ASRX || SAYREX |- | ASS || SnowSky |- | AST || astatine |- | ASTA || astast |- | ASTBY || mariusvnh |- | ASTHMA || Asthma |- | ASTR || STALKERGB |- | ASTRO || ionpara |- | ASV || Aramis |- | ASX || Assasin X |- | ASY || Stiltman |- | ASZ || arremba |- | ATC || Unnamed |- | ATDEF || SmokeDef |- | ATF || AustriaTacticalForce |- | ATG || Attoric Games |- | ATH || Math |- | ATHM || Marseille77 |- | ATK || toadeater |- | ATL || Atlas123 |- | ATM || nolips71 |- | ATMK || FraP-zsz |- | ATN || Atunero |- | ATOW || ArmA: Theatre of War Tournament |- | ATPN || bytopin |- | ATRO || Atrocittus |- | AUG || august_nox |- | AUNA || KarbineR |- | AURI || nate6631 |- | AUS || Foxhound |- | AUSIM || ausimus |- | AUSMD || austin_medic |- | AUST || AusTac |- | AUT || Blackii93 |- | AUXIL || Auxilirate |- | AVERS || mhodgson89 |- | AVO || dartist |- | AVON || The Avon Lady |- | AVS || Atom_Monky |- | AW0012 || Theawsome0012 |- | AWA || annihilator825 |- | AWAS || Authentic Warfare Addon Studio |- | AWM || Airwolf Mod |- | AWS || aws188 |- | AX2D || Grizlyian |- | AX4 || axhacker4 |- | AXL || Axyl |- | AXP || Alex.XP |- | AXXE || axxe |- | AYBAB || theonciest |- | AYM || Andymon |- | AZE || altazure |- | AZIZ || Abdulaziz Alashaikh |- | AZK || Pyrospastiac |- | AZP || AngeredZeus |- | AZR || Azraell_X |- | AZRYV || Y0an |- | AZT || Aztechnology |- | AZY || Azy |}

=== B ===

{| class="wikitable sortable" style="width: 100%" | B0SS || AnotherNormalNick |- | B10 || b101uk |- | B182 || Bebop182 |- | B2P || Chere |- | B2Z || Bravo 2 Zero Campaign Addons: spider_ipc |- | B33 || Sgt.James |- | B3N || cebus |- | B45 || Berlin1945 Staff |- | B4609 || Bread |- | B47 || BrendoB47 |- | B500 || Falcon |- | B851678 || Failiatus |- | BAAD || BrookeAnne |- | BAAL || baalzebuv |- | BABE || Bad_Benson |- | BABS || Zeak |- | BABYZ || Gigantobaby |- | BAC || CCrAsHH |- | BAD || B.A.D. |- | BADBOY || ruanbadboy |- | BADGR || FlattestGuitar |- | BADR || omarelrussi |- | BAE || Zim |- | BAEM || BAEM |- | BAER || unbrauchbaer |- | BAF || pathy |- | BAFS || Infiltrator_2K |- | BAGE || RoyalCabbage |- | BAGEL || Nuufa |- | BAGPE || bagdigger_actual |- | BAJ || baj1991 |- | BAK || Backoff |- | BAK0 || Bak0 |- | BAKFT || zhestyr |- | BAKH || byalexeykh |- | BAL || Gamefreak2ful |- | BALI || bali0025 |- | BALIS || Ballisticd8 |- | BALSK || wcnones |- | BAM || Brazilian Army Mod |- | BAMSE || Bamse |- | BANG || johnbangs |- | BAR || BarCode |- | BAR31 || barakokula31 |- | BART || bartkusa |- | BAS || Ballistic Addon Studio |- | BASE || rodhalberd |- | BASIC || Basic_Infantry |- | BAT || Ekengren |- | BATTL || rodhalberd |- | BATTY || batboyx2 |- | BATZ || AlexDovoski |- | BAUER || Schwarzbauer |- | BAV || B.A.Verrecus |- | BAZ || KevBaz |- | BAZBO || Bazooka_Boy |- | BAZEF || ENGENER |- | BBA || Black Baron Austria |- | BBB || bL4s |- | BBE || =[BBE]= MOD |- | BBEAR || bigdancingbear3 |- | BBEM || BBE Squad |- | BBM || General_Bacon_965 |- | BBOY || BladderBoy |- | BBP || Big Ben |- | BBR || ak12546 |- | BBRR || boberro |- | BBWV147 || bachbwv147 |- | BBY || BB128 |- | BC6 || bravo 6 |- | BCA3 || that1drifter |- | BCCAN || Cyanide1973 |- | BCD || darkmol12 |- | BCK || blue chook |- | BCM || beatzcraft |- | BCO || brando |- | BCRPG || B.Johnson |- | BCT || bobcatt666 |- | BDE || beedee |- | BDEF || bcdeforest |- | BDH || monk76 |- | BDK || bundook |- | BDKR || baedeker |- | BDM || Bloody Days Mod |- | BDN || Bandana |- | BDO || Baddo |- | BDOG || Scheintot |- | BDP || Backoff & DeaDMeaT Productions |- | BDPS || badpapasmurf |- | BDPSF || badpapasmurf |- | BDS || ryogugu |- | BEAR || GodsFist |- | BEAUSHAR || Mellowluva88 |- | BEB || bebbakhuis |- | BED || LordBen |- | BEDCR || Imatisis |- | BEDZ || DeliveryService |- | BEEF || WhereIsBeef |- | BEEP || banini |- | BEER || GodsFist |- | BEL || battlestar255 |- | BEL28 || Warrior |- | BEN || bennyboy |- | BENNZ || Ben.NZ |- | BENQ || BenQ |- | BENTDEV || malfar |- | BEO || MBMC |- | BEOB || 404 Dave Not Found |- | BEPO || McLupo |- | BERG || berghoff1 (aka Berghoff) |- | BERN || Bern |- | BERNO || Berno |- | BERT || albertoesponera |- | BES || Black Element Studio |- | BET || Beton |- | BETA || Betaknight |- | BETO || Beto |- | BETTY || Jona |- | BEW || Bullseyeworks |- | BFI || super-truite |- | BFM || Gurk |- | BFS || LoupVert |- | BFSGF || klinGiii |- | BG || Zelik and Mojo |- | BGA || bmgarcangel |- | BGBR || Bugbear44 |- | BGG || Biggs25 |- | BGI || scottieo321 |- | BGLEN || bglen |- | BGM || BritishGM |- | BGP || bloodyzyy |- | BGT || tini |- | BHAZ || Bhaz |- | BHB || bauerhousebourne |- | BHC || Thomas |- | BHD || Linker Split |- | BHG || ChaseTheFun |- | BHZ || BadHabitz |- | '''BI''' || '''{{Name|bi}}''' |- | BIALY || Ziemek |- | BIB || Bibmi |- | BIBO || Bibo164 |- | BIF || Belle Ile France |- | BIG || martynfromholland |- | BIGGS || Biggs25 |- | BIGL || BigLebowski |- | BIGPH || ebrand |- | BIGT || bigtony |- | BIH || cluster |- | BILA || turbo2 |- | ''BIN'' || Binesi |- | '''BIN''' || '''{{Name|bi|short}} Netherlands''' ([[Arma 3 Contact]] [[:Category:Function Group: Contact|functions]]) |- | BINF || alxntc2 |- | BINK || Binkowski |- | BIO || bio138 |- | BIOC || CD8-T-Lymphocyte |- | BIOPEG || BioPegasus |- | BIP || BipBip |- | BIR || Black1ron |- | BIRD || thebird |- | '''BIS''' || '''{{Name|bi}}''' ({{Name|arma2|short}}, {{Name|arma2oa|short}}, {{Name|tkoh|short}}, {{Name|arma3|short}}) |- | BIW || Biwi |- | BJAX || Banjaxed |- | BJD || Grekain1 |- | BJM || bombajack |- | BJP || bombajack |- | BJS || purefocus |- | BK12 || bk1276 |- | BKD || blackdog |- | BKF || BKFighter |- | BKH || lBlackDeathl |- | BKM || BKM Mod |- | BKR || BurgerKingRetard |- | BKS || 1B1KSniper |- | BL5KA || baltushka |- | BLACK || Blackflash |- | BLAZE || Blaze F22A |- | BLB || Blackblood |- | BLCKL1ST || Blacklist370 |- | BLD || BLADE |- | BLE || Blender |- | BLEF || Bleff |- | BLF || black_feather |- | BLG || Bloberg |- | BLG14 || bloodsheddt |- | BLIND || rodhalberd |- | BLIV || TheBliveon |- | BLIVE || TheBliveon |- | BLK || Blacknite |- | BLKAD || Blackadder |- | BLKCL || Blackclaw |- | BLKFS || blackfisch |- | BLKRV || Blackraven93 |- | BLND || Blindside |- | BLNW || blaunarwal |- | BLO || JussiPik |- | BLOOD || -Blood- |- | BLOW || thelobotomobile |- | BLP || Bloppo |- | BLRPG || musicshaggy |- | BLT || Blunt |- | BLTMC || TheBliveon |- | BLU || bluebottle |- | BLUE || ShadowBlue |- | BLW || SchleckDieNudel |- | BLX || cleggy |- | BLYAM || Blyamps |- | BLZ || blazero |- | BLZE || Blaze |- | BMC || BMCha |- | BMI || Bambi |- | BMICK || billy12822 |- | BMP || BM Production |- | BMR || BeAMer |- | BMRF || NotCorsair |- | BMS || daniellovatt |- | BNC || BoNeCoLLeCToR |- | BND || Bond006 |- | BNDR || bending_unit_22 |- | BNG || Bongo Bongo |- | BNI || BeenIdle |- | BNM || Challenger3 |- | BNSN || Benson |- | BOAT || rodhalberd |- | BOB || Ranger Bob |- | BOC || BoNeCoLLeCToR |- | BODE || Bode |- | BOE || Fokker |- | BOF || Rebel Man |- | BOFD || Rebel Man |- | BOG || bog819 |- | BOGEY || mkfester923 |- | BOH || Project:Battle Over Hokkaido |- | BOI || Mahboison |- | BOL || bol398 |- | BOMB || BeetleBomb |- | BON || TheBonBon |- | BOO || booRadley |- | BOOM || Boomotang |- | BOON || BoonChi |- | BOOP || Henri |- | BOOZ || booz |- | BOP || Blackop |- | BOPMA || *BOP*Matt |- | BOR || Bases Over Rahmadi |- | BORG || Borgamagos |- | BORGMAN || BorgerMan |- | BOROS || House Boros |- | BOS || Bases Over Sahrani |- | BOUNT || BountyXY |- | BOX || boxter |- | BOXY || Boxfinate |- | BOZO || BoZo_135 |- | BPC || tom_48_97 |- | BPS || [PTS] Panthers |- | BPX || BlackPixxel |- | BQC || curiousinternals |- | BRA || bracer |- | BRAD || TuszPro |- | BRADY || aefbrady319 |- | BRAF || Bran Flakes |- | BRANF || Bran Flakes |- | BRANK || lalote |- | BRAS || rodhalberd |- | BRASR || minimus |- | BRDT || Brandt |- | BREAD || SlicedBread |- | BRF || Brutal Force |- | BRG || berghoff1 (aka Berghoff) |- | BRGDA || Brigandia36 |- | BRH || Boborish |- | BRIG || TuszPro |- | BRIT || British89 |- | BRKT || GrooveByte |- | BRMOD || Battle Royale Mod |- | BRN || SgtBarnes73 |- | BRN73 || tgm0 |- | BRNDT || Brandt |- | BRO || BeerOps |- | BROAD || Broadsword |- | BROK || xpt0x |- | BRON || brontal77 |- | BRONX || kyoshofreak |- | BRP || Batdog |- | BRPG || BritishLifeRPG |- | BRS || BRAS |- | BRT || BraTTy |- | BRT96 || Its_imp |- | BRUH || koptwo |- | BRW || Battleredwing |- | BRX || Braxel |- | BRZ || rodhalberd |- | BS3 || BeefSunda3 |- | BSA || Burning Sands: Africa 42 |- | BSC || The Plague Healer |- | BSCT || Jack00 |- | BSD || BraveSteelDragon |- | BSF || TroyT |- | BSFC || TroyT |- | BSFM || Flax |- | BSH || Bishop |- | BSH19 || peter1415 |- | BSK || Bounty |- | BSLK || Sanchez00 |- | BSOC || Bastard Sons of Cannon Fodder |- | BSQ || icausecancer |- | BSQN || tomtucka |- | BSR || BrockLee |- | BSS || Abel |- | BSW || BusStopWilly |- | BT || BeeTee |- | BT153 || birdman |- | BTA || BTA-horrific |- | BTC || Giallustio |- | BTD || bTd Clan |- | BTH || BobTheHunted |- | BTHBC || BobTheHunted |- | BTP || Target Practice |- | BTS || BlackBat |- | BTYR || Reddagger36 |- | BUCE || ms1v |- | BUCK || buckfast |- | BUG || Joe Lemonade PSC |- | BUILD || rodhalberd |- | BUK || Buckerooski |- | BUKA || Buuka7 |- | BULB || GreenLightbulb |- | BUN || BUNTRO |- | BUNLU || bun76 |- | BURES || Burkal |- | BURRD || burrd |- | BURT || BadLuckBurt |- | BUSH || Bushlurker |- | BUSH1 || Bushbeater |- | BUST || BUST1 |- | BUTCH || TheButcher |- | BUTT || InquisitorL |- | BUTT1 || InquisitorL |- | BUUKA || Buuka |- | BW2 || SAAF |- | BWB || Black Watch Battalion |- | BWC || Bush Wars Conflict Mod |- | BWC1 || Rumplestiltz |- | BWCRO || bwcrow |- | BWE || kyoshofreak |- | BWF || Le_CuLtO |- | BWG || BWGw |- | BWINT || adios113 |- | BWMOD || Bundeswehr Mod |- | BWPH || bwph4273 |- | BWPP || BattlePOWER |- | BXX || Bioxx |- | BYB || Yellow Basterd |- | BYD || bydolg |- | BYR || DaBayer |- | BYRNE || Byrne |- | BZK || BerZerK |- | BZLY || Beazley |- | BZS || deroxaxe |}

=== C ===

{| class="wikitable sortable" style="width: 100%" | C094 || Cerberus094 |- | C130 || OperationSoulReaper |- | C15 || wantafanta |- | C1896 || Connorwarman |- | C1976 || Dimitri_Harkov |- | C1987 || Christian.1987 |- | C2K || Hamo |- | C3RB || Cerberus |- | C404 || Concept404 |- | C47 || crook47 |- | C4N || ChaseTheFun |- | C4TV || C4TVAtlas |- | C555 || CringleBerry |- | C76 || Camaro76 |- | C7K || c7kizer |- | C8X || Earl |- | CAA || alex.caa |- | CAA1 || kju |- | CAB || cabal0428 |- | CABLE || Cablebox |- | CACHE || bcashin |- | CAD || MajorElimRawne |- | CAEDE || Ahadiel |- | CAF || Edgecrusher |- | CAFT || Moofins |- | CAG || TheCaptain |- | CAIRS || kju |- | CAKES || Fail Cakes |- | CAL || calamity |- | CAL68 || burns |- | CALIM || diveyez |- | CAM || rodhalberd |- | CAME || camealeon |- | CAMP || rodhalberd |- | CAMUH || camuhflage |- | CAN || Can35 |- | CANMN || CANMAN |- | CAP || Captain |- | CAPP || The_Sprite |- | CAPPY || Cappylock |- | CAPRY || CapryCorn |- | CAPS || CAPTNCAPS |- | CAPTN || Captain Courageous |- | CAR || jano20 |- | CAR69 || Carthaginian_Reaper |- | CARL || SugarFreek |- | CAROL || FileEditor97 |- | CAS || Crazy addons studio |- | CASCO || Cablebox |- | CASH || ColeAshford |- | CASKT || CaspianKT |- | CASP || kju |- | CASS || Cassandras Addon Studio |- | CASSI || Cassius |- | CAT || CAT SHIT ONE MM |- | CATAR || CatArmour |- | CAU || Caucasus Crisis Mod |- | CAV || tierdisogni |- | CAV25 || veers13 |- | CAVS || MDI |- | CAW || BloodyRaiden907 |- | CAZ || Cazalla |- | CB3 || Apollo |- | CBA || Code Blue Addons |- | CBCP || kju |- | CBF || CBFASI |- | CBM || Code Blue MOD |- | CBN || chrisbobnorwich |- | CBO || kingfisher |- | CBR || CareyBear |- | CBT || Clan COMBAT! |- | CBW || Foxhound_ca |- | CC4 || Capt_Colt45 |- | CC45 || Capt_Colt45 |- | CCC || DESTINY0ne |- | CCG || justJenkins |- | CCH || clarkhalf |- | CCHOW || Yin0105 |- | CCM || Crime City Mod |- | CCO || Carol Cray |- | CCP || CatCaptain |- | CCR || 200rabbits |- | CCRPG || Avery Foutz |- | CCS || creepycrappyshow |- | CCT || cctoide |- | CDAH || Lotzo |- | CDC || x2dezjohn |- | CDE || Chernarus.de |- | CDEE || CodeE |- | CDHM || crazyDHarrison2 |- | CDM || ApocalypseDan |- | CEB || SlimShadII |- | CEEB || Ceeb |- | CEG || Loyalguard |- | CEL || Cell |- | CELO || celoush |- | CELTR || celltsar |- | CEP || CEP |- | CFD || CFD_Spectre |- | CFE || Chinese Fonts Engine |- | CFS || cfsfirefighter |- | CFSG || cfsjrandazzo |- | CFTEX || Captain Fantastic |- | CFX || CfX |- | CGB || CGB |- | CGC1 || CG-Robo |- | CGF1 || Chaingunfighter |- | CGI || Central Graphics and Imaging |- | CGR || christian2526 |- | CH2R || Ch2rly |- | CH35 || christoph35 |- | CH974 || Christopher974 |- | CHA || Chairborne |- | CHAD || chaddlesg |- | CHAF1 || Chickensky |- | CHAL || Challenger |- | CHANG || BakerChang |- | CHAR || Charlie Howarth |- | CHD || Chris Death |- | CHE || Cheetah |- | CHEF || chefd261 |- | CHGMS || Cyrokrypto |- | CHILE || Fabiantronc |- | CHILI || chillagin |- | CHIZ || Chizdna |- | CHK || chkilroy |- | CHL || Fabiantronc |- | CHMOD || Christophorus Mod |- | CHN || Charon Productions |- | CHO || Chonee |- | CHOYA || ChoYaYa |- | CHP || Jona |- | CHR || chris330 |- | CHRIS || chris4335 |- | CHRO || Chromegus |- | CHS || ChaosStudios |- | CHSCJ || Cj93Play |- | CHT || Crazy Hussars Team |- | CHUCK || cyckuan |- | CHUD || Chudlik |- | CHUMY || chumymalo |- | CHUP || ChupChup |- | CIA || Comrades in Arms |- | CIDF || Craggy Island Defence Force |- | CIL || Caillou |- | CIPE || HateDread |- | CIT || Citali |- | CIV || Sariel |- | CIVF || Flax |- | CIVIL || CivilityRP |- | CJ5 || cj525 |- | CJACK || jackjack |- | CJF || Popinjay_John |- | CJJ || jarv |- | CKMES || TimRambo |- | CKRU || Capt Krüger |- | CKY || cyckuan |- | CL3 || R3411y |- | CLA || Robster |- | CLAUS || pplluuttoo |- | CLEGG || Knobee |- | CLHK || leungkaho_p54 |- | CLI || clivewil |- | CLICK || ClicheUsername |- | CLINT || cring0 |- | CLON || Clon |- | CLR || xZeven |- | CLY || Celery |- | CMA || kju |- | CMC || Fsxcrone |- | CMCARTHY || C.McCarthy |- | CMCD || CameronMcDonald |- | CMCTD || Eckzy |- | CMD || Evalach |- | CMDBR || PedroLuigi |- | CMDO || capitao_commando |- | CME || Bigsmok |- | CMF || AtinAkiri |- | CMG || Panadur |- | CMGE || Zkorpyun |- | CMINF || Commander Infinty |- | CML || Jeringo |- | CMP || CymPatheeY |- | CMPB || XSparky |- | CMPGN || SULcorp |- | CMR || Commander |- | CMS || raptor 6 actual |- | CMT || Capt MacTavish |- | CMW || AlcapurriaPR |- | CMY || CrimyStickR |- | CN4 || ChaseTheFun |- | CNC || ThorWedd |- | CNCTE || HorribleGoat |- | CNGM || ChaseTheFun |- | CNM || Bravo93 |- | CNNT || hobart |- | CNO || Costno |- | CNR || Conroy |- | CNS || PewPewStraykbol |- | CNT || Capt MacTavish |- | CNW || Chrisnw |- | CO284 || cool2844 |- | COA || BadAss |- | COC || The Chain of Command |- | CODE || CodeBugd |- | CODI || Coding |- | CODY || CaptainCody |- | COE || FFAA Mod |- | COG || CognitoCon |- | COH || Coward_Heart |- | COL || ClawOfLight |- | COLEJ || colej_uk |- | COLH || saltybear |- | COLIX || ColibriX |- | COLLO || FloatStreak |- | COLSH || Col_Sherman |- | COLT || SoldierEPilot |- | COLUM || columdrum |- | COM || XSparky |- | COMET || BierAIG Comet |- | COMMA || Commandante |- | CON || Sgt.Ace |- | CONC || Concurssi |- | COOP || gYMO |- | COR2A || antonescu |- | CORAX || Corax |- | CORE || Methusalem |- | CORI || csudab |- | CORN || cornman |- | CORPS || Zycorpse |- | COS || Thyrrus |- | COTH || Cory-C |- | COU || Couga |- | COUL || Coulson |- | COV || CoValent |- | COW || W1nn13 |- | COWS || MutatedJackal |- | COY || Coyota |- | CPC || Sparfell_19 |- | CPF || complete_freak |- | CPJ || arles2464 |- | CPS || chops |- | CPT || CptCox |- | CPTBI || cptbirdseye |- | CPTN || Nick van der Lee |- | CPTVI || CPTVIEIRA |- | CQB || CQB |- | CRA || Craziks |- | CRAW || Crawliiee |- | CRB || wolffy.au |- | CRBR || crimsonbrother |- | CRCK || wildTangent |- | CREAL || Santa Cruz |- | CREEP || creeper |- | CREPR || Creeper |- | CRESP || AlbertoSGM |- | CREW || Rave |- | CRF || Mang |- | CRG || Divinitize |- | CRING || cring0 |- | CRIPP || Crippler |- | CRL || CarlW |- | CRM || krulsalomon |- | CRMIS || crmish |- | CRNY || Corny, but no jokes |- | CRO || crobarr |- | CROC || Crocuta |- | CROD || cronet |- | CROFT || Croftyy |- | CRONI || camilo |- | CROSS || Cross |- | CROWE || Crowe2Extreme |- | CRP || cockney_reeper |- | CRPSY || Crippsey |- | CRS || Christoph |- | CRSDR || lostcrusader93 |- | CRT || CRThumper |- | CRUE || TehDango |- | CRUVI || joaol |- | CRX || Corax |- | CRYPT || cryptonat |- | CRZDH || crazyDHarrison2 |- | CRZM || crazyDHarrison2 |- | CSA || Chritopher S. Atkins |- | CSA38 || petrlach |- | CSALTY || CFisk |- | CSAUK || TheDesertFox |- | CSC || Dan |- | CSF || CSF_Carlo |- | CSIG || babylonstew |- | CSJ || Scud |- | CSL || ColonelSandersLite |- | CSL || ColonelSandersLite |- | CSLA || MAA |- | CSLA2 || CSLA Mod |- | CSLA3 || CSLA Mod |- | CSM || MacGyver |- | CSM2 || Protegimus |- | CSM3 || Protegimus |- | CSMIT || csmith51637 |- | CSNOW || Cpt.Snow |- | CSS || Denisko-Redisko |- | CSSA3 || Cyrokrypto |- | CSSP || kju |- | CST || Shelestov |- | CSU || Doc. Caliban |- | CSV || Azamo |- | CSW || comradesythar |- | CSWP || Polish Army Addon |- | CTBAN || TreeoM |- | CTBS || TreeoM |- | CTC || CasualTheoryCrafters |- | CTGBA || Balu R.I.P |- | CTI44 || Der Blaue Wolf |- | CTITC || Coward_Heart |- | CTKEY || TreeoM |- | CTL || Contrails |- | CTOAD || CaneToad |- | CTRG || Flax |- | CTRO || Aitor |- | CTU || CTU Miguel |- | CUB || Cubitron |- | CUBA || tulkazurf |- | CUI || cuisinart8 |- | CULTO || Le_CuLtO |- | CUNT || randomdude |- | CUP || kju |- | CUS || JimBOB |- | CUSMC || CoyoteUSMC |- | CUSP || darwinscusp |- | CUSTOM || customseaglass |- | CVG || bobtom |- | CVL || Gulogulo |- | CVM || cavemanmods |- | CVP || TheMadMan24 |- | CW40K || Macser |- | CWAK || ChrisWithAKube |- | CWE || Cold War Expansion |- | CWK || Colonel_Klink |- | CWM || CRIONYK |- | CWR || Hoz |- | CWR2 || W0lle |- | CWR3 || Mikero |- | CWW || CWWSonic |- | CYB || Cybersoft |- | CYBP || Cyborg11 |- | CYCK || cyckuan |- | CYMIA || CommanderYuri |- | CYNO || cynobill |- | CYP || Chris Young Productions |- | CYPA3 || Ethan Cartwright |- | CYPE || CypeRevenge |- | CYT01 || CMB Unit 01 |- | CYURI || CommanderYuri |- | CZM || Conflict Zone Mindanao |- | CZS || haroon1992 |- |}

=== D ===

{| class="wikitable sortable" style="width: 100%" | D1404 || vip08 |- | D1A || Delta 1 Actual |- | D1H || d1haus |- | D3DO || Design-3Do |- | D3LTA || d3lta481 |- | D3P || F2F_BHO |- | D41 || Cosmo |- | D5211 || Dyer |- | DAA || Deejay1979 |- | DAB || blitzer |- | DAC || DaCoroner |- | DAE || Daeron |- | DAEMON || daemonspring |- | DAF || Danish Armed Forces Mod |- | DAFTI || Flamm |- | DAG || setman590 |- | DAGA1 || Dagarul |- | DAGON || Methusalem1982 |- | DAK || Deutsche Afrika Korps |- | DAKA || Pusztuljka/DaKa |- | DAKKA || dakkafex |- | DAKM || Dakmor |- | DALE || dale0404 |- | DAM || DeadActionMan |- | DAMN || Renz |- | DAMO || dev75 |- | DAN || DanAK47 |- | DANA || Dans |- | DANF || damianfiocca |- | DANL || dan-levi |- | DANL2 || DanL2mx |- | DANS || Dans |- | DANV || DanielV |- | DANY || face_smasher |- | DANYL || Danielle_rva |- | DAP || fizzyrocketeer |- | DAR || RichardsD |- | DARE || DarkSoldier |- | DARK || Darktower |- | DARKY || Barotall/Darky |- | DARTH || Darthfab |- | DASH || SoldierEPilot |- | DASHI || Bak0 |- | DAT || parabola949 |- | DATC || Datcoder |- | DAV || Dudeman44 |- | DAVID || David Ostman |- | DAVR || redoper |- | DAX || Duke Dax, aka Dax, aka ])a)( |- | DAY0 || corey88 |- | DAYI || galaxyblast |- | DAYZ || thepnarinch |- | DAYZG || dayzgo |- | DAYZS || Rekh0n |- | DAZ || Matijs |- | DBD || Axedup |- | DBE || BIS |- | DBFV || DerpyBlade |- | DBG || ukloadtoad |- | DBHBH || TeamZero |- | DBK || A.Deubelskerl |- | DBM || acurlyninja |- | DBO || DeanosBeano |- | DBY || DutchBoY |- | DC39 || DC39 |- | DCB || zsa_zsa_rasputin |- | DCP || DraigCoch |- | DCR || dreadnought |- | DCS || dcs_daryn |- | DCU || DC |- | DCV || DaChevs |- | DDAM || Danish Defence Army Mod |- | DDD || Ddriod |- | DDL || Daddldiddl (aka Joltan) |- | DDM || Darthdrunken |- | DDOG || Ddog-nz- |- | DDR || NVA-Mod Team |- | DDRS || Deaders |- | DDS || Knipper |- | DDZ || DangerousDiz |- | DEA || Deadeye |- | DEADF || DeadlyFreeze |- | DEATH || DeathmagnetiK |- | DEBUG || Worldeater |- | DED || gotdead |- | DEE || Deejay1979 |- | DEF || Deftoner |- | DEF0 || Defocus |- | DEFUK || defsco |- | DEG || drowelf23 |- | DEGA || deltagamer |- | DEIN || Localhost |- | DEJAY || Deejay1979 |- | DEL || CaptainCheesecake |- | DELA || Max Delaney | The Irish Ace | NPMproductions13 |- | DELTA || DELTA_STO |- | DELVO || Delvo_Boss |- | DEMI || demicanadian |- | DEMP || demsoft |- | DENUT || Denuth |- | DEOX || DeoX |- | DERK || Derkiantor |- | DERNG || Chasir01 |- | DERP || Bhaz / Hellrazor collaborative |- | DES || destiny14 |- | DESK || Desktop |- | DESPE || OPK-Desperado |- | DEST || destruktoid |- | DEUS || YouAreBamboozled |- | DEV || hk |- | DEV2 || kju |- | DEV49 || Devint |- | DEVH || kju |- | DEVS || The Negotiator |- | DEW || Dewsader |- | DEX || DeZzErX |- | DEZ || Dez |- | DFC || [D.F] Pat Cpt. |- | DFL || Daffles |- | DFNT || arma3reed@gmail.com |- | DFO || DeltaForce |- | DFP || Dpesce |- | DFRAG || deFRAGer |- | DFS || Deadfast |- | DFX || DesertFox |- | DG5 || DragonGurdian5 |- | DGAL || Domination Gaming |- | DGB || Doughboi |- | DGC || DGC |- | DGFX || darkgiver |- | DGGR || ColonialDagger |- | DGH || danimalhanke |- | DGZ || J3SUSM4N |- | DHC || dhc |- | DHL || I Can Explain |- | DHM || crazyDHarrison2 |- | DHU || Deaths Head Unit |- | DIAOS || JPDIAOSI |- | DICK || cunico |- | DIGI || digitaldeath |- | DIH || Dimitri_Harkov |- | DIIZ || Diizmo |- | DIK || 4yDiK |- | DIKDN || DickDanitz |- | DILON || cpldillon |- | DING || Schrödinger |- | DINO || pdinosaur |- | DIP || 11thSven |- | DIRT || DirtySanchezHUN |- | DIRTLORD || GRUBBYGRIMM |- | DIRTY || dirtyrazor01 |- | DISCI || discipulo |- | DISCO || tnayeatssavan |- | DISIDENT || DtheDissident |- | DITH || TheDragon117 |- | DIZZY || Dizzmaal |- | DJB || djbarney |- | DJD || donjuandavis |- | DJICH || DjIch1 |- | DJL || D_J_LMeyer |- | DJLF || SrDaju |- | DJMAP || Djalmajrr |- | DJOLE || djole94hns |- | DK12 || dkopl |- | DK7 || VAXPLAY |- | DKM || Xi Relax |- | DKMM || Decisive Killing Machines Mod |- | DKS || Doutor Suco |- | DKW || Dropkiwi |- | DLA || Drty_Windshield |- | DLB || Dozette |- | DLCNL || CrabNipples |- | DLL || rundll |- | DLM || DeLiltMon |- | DLPP || DL++ |- | DLS || Lukas Smith |- | DLSMS || Phil! |- | DLT8 || [MSK]Delta8 |- | DLXY || Dalaxy |- | DMA || Dynamic Mission Alliance |- | DMC || Demon Cleaner |- | DMI || Dmitri |- | DMK || Doomek |- | DMM || dragula |- | DMN || dmn |- | DMS || J_Murphy |- | DMX || deadmeatxm2 |- | DMY || dolomighty |- | DNA || colddna |- | DND || DND |- | DNF || damianfiocca |- | DNG || ding_jimmy |- | DNGEATER || Dung_eater |- | DNK || slamdunk |- | DNL || dnl04 |- | DNS || DonSucio |- | DNTFM || daniel1060 |- | DNZ || Denz |- | DOA || Disciples OFP Studio |- | DOARB || Doa. |- | DOARG || DaOarge |- | DOBO || Dobo |- | DOBY || JDoberman |- | DOC || Doc_69 |- | DOD || zer0_us |- | DOE || I-DOE-I |- | DOF || Drunken Officer |- | DOFP || Department of Funky Proxies / Peacepunk |- | DOG || dogigniter |- | DOLF || Dolfrang |- | DOMTARO || Domtaro |- | DON || DonDon |- | DONG || InquisitorL |- | DONGS || InquisitorL |- | DONK || DoNKaNaLi3 |- | DOO || Doolittle |- | DOS || dose |- | DOT || SoldierEPilot |- | DOUZI || 豆子Doge |- | DOV || Donnervogel |- | DOVEV || Dovev |- | DOW || Flowan |- | DPKEY || davipedroza |- | DPS || Das Penguin Studios |- | DPSEL || Select |- | DPT || dumpytom |- | DPTT || dpatt711 |- | DQC || dimitriqc |- | DR3AM || DR3AM |- | DRA || Dragunov |- | DRACK || DrackIxus |- | DRAM || Dramier |- | DREAD || Dread |- | DREAM || DreamRebel |- | DREX || Waveridr |- | DRF || DragoFire |- | DRG || Nightstalker Mod |- | DRGD || DaringD |- | DRGS || Dragster |- | DRI || Drill |- | DRIFT || That1Drifter |- | DRJ || Jona |- | DRK || sherbo |- | DRKSS || Darren Kesselman |- | DRKY || darkypunch |- | DRO || Drofseh |- | DRPRO || DreamRebel |- | DRS || Death Recon Squad |- | DRU || DrummFreak |- | DRWMS || Drewmaster |- | DS1 || Dutch_Sapper |- | DS7 || dragonslayer |- | DSA || Drill Sergeant |- | DSB || dsonbill |- | DSC || killick |- | DSD || Huntah |- | DSF || Deepsmeg & Frost |- | DSK || RedSmookey |- | DSL || Diesel |- | DSP || dr_strangepete |- | DST || TheDarkstar |- | DST1 || ocramweb |- | DSTPL || Dusty |- | DSV || diseva |- | DSW || dw5533 |- | DTC || datoco |- | DTLAB || DiabolicaTrix |- | DTM || Dirtman |- | DTNRW || Gooswin |- | DTT || CrabNipples |- | DTY || Dusty |- | DUCK || hducke |- | DUD || Dudestin |- | DUE || boulderer |- | DUTCH || dutchy |- | DUX || DuckVanDyke |- | DVDM1 || djazz |- | DVH || crazyDHarrison2 |- | DVPOL || SamCantCu |- | DVS || oneshot |- | DW316 || Daemonwulff316 |- | DWARD || Dwarden |- | DWCZ || DarkWolf |- | DWG || DeadWalking |- | DWK || soldier2390 |- | DWP || Sgt.Ace |- | DWR || Rhino592 |- | DWS || Vixer |- | DYBRO || kewin bertel |- | DYER || Dyer |- | DYHA || DynamiteHarry |- | DYNA || Deejay1979 |- | DYS || Dysproxia |- | DYZA || Dyzalonius |- | DZ || cebus |- | DZG || ikea_in_flames |- | DZK || Psyfer |- | DZM || KatzSmile |- | DZT || Dazitt |- |}

=== E ===

{| class="wikitable sortable" style="width: 100%" | E1000 || E1000 |- | E1K || e1k |- | E2411 || smithy2411 |- | E3D || bioxx |- | E4R || Echo4Romeo |- | E502 || 502_Entertainment |- | E76 || el76 |- | E7S36UAR || CallMeSnake |- | EA6 || Eagle-6 |- | EAF || East Asia Forces |- | EAGL || Blood Eagle |- | EAGLE || eagle_dev |- | EAL || Erik Master / Exclusiv Altis Life |- | EARTH || Thezigginator |- | EAX || ErazorX |- | EAZY || EAZY |- | EBA || rodhalberd |- | EBB || 8bitbilly |- | EBD || Ebud |- | EBE || EBEALIEN |- | EBIN || juhansson |- | EBK || Saber154 |- | EBO || ebolarama |- | EBR || Eric Brunik Reis Strambeque |- | EBV || rodhalberd |- | ECA || WWIIEC |- | ECAT || Ecatom |- | ECB || FW200 |- | ECH01 || echel0n1234 |- | ECHO || Evil_Echo |- | ECKLE || Eckle |- | ECL || everoncartel |- | ECLAP || bakzz |- | ECLPS || ECLYPSE_JAN |- | ECM || theonciest |- | ECO || Ecoalfa |- | ECP || Enhanced OFP Config Project |- | ECS || Enhanced Configuration System |- | ED102 || Mikero |- | ED88 || ed88 |- | EDAV || Davis237 |- | EDC || imemyself/edc |- | EDEN || GamingAstronamy |- | EDG || Edge OF The World |- | EDL || flui1989 |- | EDS || FishBop |- | EDU || Eduzumaki |- | EFF || Eff3ct1v |- | EFFGT || Eff3ct1v |- | EFL || terox |- | EFM || Zettrus |- | EFP || [EliteFraggers] PuNkRoCkEr |- | EFT || ReDDinG |- | EFW || enfusion-framework |- | EGN || ExiledVibe |- | EGO || Zeak |- | EGOX || Zeak |- | EGY || sherbo |- | EHC || EH_Chaser |- | EHD || EHDSeven |- | EHJ || einherj |- | EIRE || Irishpride92 |- | EJB || TGG |- | EJL || ejlemaire |- | EJW || EJ Will |- | ELAYSIA || squag__ |- | ELCA || elcabronazo |- | ELECH || elechos |- | ELECO || elechos |- | ELFO || raca20 |- | ELITE || Elite051 |- | ELLI || EliteWarfare |- | ELW || Elliot |- | EMC || edgemaster |- | EMFA || rodhalberd |- | EMS || Lukas.Spohn |- | EMSI || EMSI |- | ENDY || Endymion |- | ENEX || enex |- | ENF || enfusion-framework |- | ENFW || enfusion-framework |- | ENG || rodhalberd |- | ENGEN || rodhalberd |- | ENGIN || rodhalberd |- | ENI || eniac94 |- | ENNFO || Ennfo Merrow |- | ENT || entspeak |- | ENTR || Entaryn |- | ENV || Vespade |- | EOOQE || EOOQE |- | EPD || epd140 |- | EPIC || lbatalha |- | EPL || Epeli |- | EPOCH || theonciest |- | EPP || ExtracTioN & Pappy Bpyington Productions |- | EPWFL || EpicWaffles |- | EQU || Equalizer |- | EQUA || Hawk |- | EQW || Doglord |- | ERAL || grimmeral |- | ERAZ || ERazgriz13 |- | ERBUS || Erebus |- | ERCMT || ERC Modding Team |- | ERD || erik_red |- | ERETZ || TGG |- | ERGO || ergonsale |- | ERS || Erson |- | ERSON || Erson |- | ESF || [CSG] El Scheffe |- | ESG || EgilSandfeld |- | ESH || esham |- | ESK || Eskandare |- | ESL || Electronic Sports League |- | ESP || Esprit de Corps |- | ESPOO || floof |- | ESQN || Indisus |- | ESTER || Castor Willis |- | ESZO || Eszo |- | ETCH || Outdatedkero |- | ETDG || eltitodg |- | ETP || patomarin |- | ETQC || SpandexQc |- | EUBG || Smootch |- | EUCL || European Combat League |- | EUFOR || Nilia |- | EURO || Smootch |- | EUROF || Aplion |- | EUS || XtremeMikel |- | EUT || EUT.FakeTaxiDriver |- | EVE || Mikado |- | EVERON || cebus |- | EVI || Eviscerator |- | EVIL || e-VIL-loR-d |- | EVK || evoke |- | EVO || Evolutionary Productions |- | EVOG || Finex |- | EWD || Invasion of France/Europe |- | EWE || thumper |- | EWP || Yahoo |- | EXB || rodhalberd |- | EXBR || rodhalberd |- | EXBRA || rodhalberd |- | EXG || Rodeostar42 |- | EXI || Exiled Vibe |- | EXILE || HalusmNation |- | EXLPR || slimeenergy |- | EXO || IkåR |- | EXOP || _matteo_c |- | EXPLO || rodhalberd |- | EXPW || ROFLer |- | EXR || Ex-RoNiN |- | EXTRE || Marksman |- |}

=== F ===

{| class="wikitable sortable" style="width: 100%" | F00 || JamesF1 |- | F11N || f11n_7 |- | F1200 || Tarkus |- | F18 || Pennywise |- | F1977 || Novaline |- | F1RE || Firestorm4204 |- | F2F || TheFirst2Fight |- | F2FBH || F2FBHO |- | F2FUN || F2F Unkn0wn |- | F3WX || Schoeler |- | F4MM || Dragnipur47 |- | FAAB || Faab |- | FAB || FAB |- | FABS || fabian |- | FAC || Fenix Alliance |- | FACP || ms1v |- | FAG || Adumb |- | FAKED || FakeDeath |- | FAL || falconsan |- | FAP || fapret |- | FAR || Farside |- | FARN || farmerno1 |- | FAS || Fascist |- | FAT || fat-erik |- | FATAL || Gibster |- | FATEX || Mr Fatex |- | FAVOR || Favorlock |- | FBC || FenelBangcracker |- | FBG || scottieo321 |- | FBG12 || scottieo321 |- | FBS || Darkstar |- | FCF || Flashpoint Combat Force (GalComT) |- | FCS || Unnamed |- | FCZI || Ferenczi |- | FDA || olympicman |- | FDD || Doyle |- | FDEV || Fantasma |- | FDF || Finnish Defence Forces Modification |- | FDFHG || ruarai |- | FDG || 5dgaming |- | FDKTZ || fredkatz |- | FDM || Smootch |- | FDZ || CartoonrBOY |- | FEAN || feanix |- | FECNI || Nightmare |- | FEL || Felan |- | FELE || Feler |- | FELIZ || Feliz |- | FEN || Fen |- | FENG || Firewall233 |- | FENOY || Fenoy |- | FERCHU || Zeus1810 |- | FETTZERO || alphahomer15@gmail.com |- | FEVER || Jungle Fever |- | FEW || scud |- | FEX || Feuerex |- | FFD || FacuFeca |- | FFE || DanBonehill |- | FFFF || Puggerz |- | FFG || TheManDude |- | FFN || Fight For Nogova MOD by TonyRanger |- | FFR || justinn |- | FFS || FF Studio |- | FFS056 || ttanev056 |- | FFW || FFW-Helifreak |- | FG2 || l4ndl0rd |- | FGA || Gunny |- | FGC || SilverKnight |- | FGD || FatGod |- | FGDC || DmitryAlekseyev |- | FGF || DmitryAlekseyev |- | FGS || FugaS |- | FGSF || DmitryAlekseyev |- | FGSV || DmitryAlekseyev |- | FHA || AndyH |- | FHI || foxhoundinternational |- | FHPT || FourthPoint |- | FHQ || Varanon, Alwarren |- | FHT || JustNothing |- | FHW || deralky |- | FIA || Aeon & Edge |- | FIAL || FIAL Mod |- | FIC || Fiedelc |- | FICO || nirtulys |- | FIDEL || Fidel Tiger |- | FIFOX || FirefoxZeroOne |- | FIL || Filip5 |- | FILIN || Filin |- | FILO || [FILO] HuBBa |- | FIN || Blaster |- | FINCH || PlagueRaven_ |- | FIR || Firewill |- | FIRE || rocky_peter99 |- | FIREW || brfire1980 |- | FIRMA || jano20 |- | FISK1 || CFisk36 |- | FIST || GodsFist |- | FIZ || PsychD |- | FJT || Temme & Lagus |- | FKMAP || [FK] Fred |- | FL || Fountain Life |- | FLA || Flatline |- | FLAN || flanders25 |- | FLAY || mrflay |- | FLB || Floobie |- | FLBBQ || spartan31337 |- | FLC || mathematix |- | FLF || F.Lundin "Fox" |- | FLINT || AustinFlint |- | FLK || Falklands MOD |- | FLO || floosy |- | FLP || FlipeR |- | FLPI || ThePenguin |- | FLS || flashist |- | FLT || frankltcol |- | FLY || McFly |- | FMD || DmitryAlekseyev |- | FMFG || red281gt |- | FMODS || [FK] Fred |- | FMP || SagaraSousuke |- | FMS || FullMetalSoldier |- | FMT || Santa Cruz |- | FN07 || Mr Fatex |- | FNC || Fincuan |- | FNIX || Fnixer |- | FNK || FatNinjaKid |- | FNXD || mattiascibien |- | FOA || Alucard_Voss |- | FOCK || mikiej |- | FOF || Falloutfun |- | FOL || Folgore |- | FOLEY || Foley |- | FOLP || FossoresLP |- | FOO || JamesF1 |- | FOR || Fordy |- | FORCE || CSF_Carlo |- | FOS || Novaline |- | FOSCO || FoSCo |- | FOSSY || Novaline |- | FOU || Unnamed |- | FOUNTAIN || Fountain Life |- | FOUZ || Acecombat |- | FOW || Mathues82nd |- | FOX || Foxhound |- | FOX07 || Foxone007 |- | FOX1 || FOXONE |- | FOX2 || Fox2 |- | FOXUS || fox |- | FOXY || Foxy |- | FOZZ || foxernator |- | FPS || SoldierEPilot |- | FPSH || fps_holland |- | FR3EM || Fr3eMan |- | FR4 || Fr4nKy |- | FR83 || freeman83 |- | FRA || FragileTNT |- | FRAG || Fragsta |- | FRAN || Le sicilien |- | FRAN6 || FragileTNT |- | FRB || Frostbite |- | FRC || Pcorp |- | FRD || Freddo3000 |- | FRE || vixen |- | FRE19 || Fred19 |- | FRED || Fred bystrong |- | FREEX || MrFreex |- | FREEZ || Enfreez |- | FREGI || Zomblard |- | FRG || Fragorl |- | FRK || FREAK |- | FRL || FRL-Myke |- | FRM || Freshman |- | FRMAN || Freeman |- | FRO || froesch |- | FROMZ || Polo Fromz |- | FROST || Frost993 |- | FRP || Operation FrenchPoint |- | FRS || Frost |- | FRST || Frost |- | FRT || Forrestal |- | FRUMP || Frumpus |- | FRXA || freexavier |- | FRZ || frzburn |- | FSB || First Scots Brigade |- | FSCHJ || CrosShadow |- | FSG || Floof |- | FSH || Fishion |- | FSMC || XxFri3ndlyxX |- | FSQ || FatSquirrel |- | FSS || FlySimy Studios |- | FSTPC || SpawnThrasher |- | FT || leba101 |- | FTA || Fallen01135 |- | FTB || M. Lee |- | FTL || failtolawl |- | FTR || fighter |- | FTS || Sniperwolf572 |- | FTS27 || FTS27boyscout |- | FUD || Fudo |- | FUHAC || Dylmar |- | FUIN || Refurius |- | FULLY || Fully |- | FUN || Chain of Command Function Library Element |- | FUNC || Worldeater |- | FUNK || defunkt |- | FUNKY || FunkyBunch |- | FUS || HitmanFF |- | FUT || Futek |- | FUZZY || MikeD |- | FVL || halfgamer |- | FVN || DilutedSalt |- | FVRIO || viarty |- | FVT || Finlanders Vietnam Team |- | FWA || FW200 |- | FWB || FatWombat |- | FWS || FailWithStyle |- | FWW || Finnish Winter War modification |- | FWW2 || h- |- | FX2 || Fox2 |- | FX2K || FX2K |- | FX303 || FeliX303 |- | FXL || LaserWiesel |- | FXY69 || Foxy |- | FY2 || Foxhound948 |- | FZA || Franze |- | FZY || MikeD |- |}

=== G ===

{| class="wikitable sortable" style="width: 100%" | G1M3L || grimmeral |- | G1RRL || grimmeral |- | G2DX || .:mazed:. |- | G2R || jasox54 |- | G3698 || grimmeral |- | G3NTL || G3nt13psyc0 |- | G404 || deadbeat91 |- | GA || The Gator |- | GA2 || ga2 |- | GAD || Aldo15 |- | GAF || German Armed Forces Mod |- | GAFFA || gaffa |- | GAGE || Jsniper650 |- | GAIA || Gaia |- | GALVY || galvvy |- | GAM || gamma |- | GAMMO || paul gammage |- | GANG || arsagang |- | GAO || Gaosax |- | GAP || Kalle |- | GARB || Jacob_Mango |- | GARE || SabreSharks |- | GARR || Garritos |- | GAS || Gastovski |- | GAT || Gatsworth |- | GAW || Galaxy At War Team |- | GAZZA || Gazza |- | GBA || GreenBeret |- | GBAT || EckoMoire |- | GBCO || Gbco |- | GBL || Glowbal |- | GBO || gabiroska12 |- | GBR || GreenBeret |- | GBS || GRUBES |- | GC101 || Guy Cutler |- | GCA || g3015867 |- | GDC || Warzen |- | GDI || RicoADF |- | GDLD || Craziks |- | GDR || NVA-Mod Team |- | GDS || Geo-Dev Studios |- | GDY || gordy |- | GEARF || Flax |- | GECKO || Gecko6 |- | GEHCK || Gehock |- | GEHOC || Gehock |- | GEM || GemStar |- | GENB || General Barron |- | GEO || helpgeo5 |- | GEOD || Jakerod |- | GEOD5 || Jakerod |- | GEOG || Jakerod |- | GER || Gerben127 |- | GEWS || Gews |- | GFM || GodFather |- | GFST || Ghost Forces Sniper Team |- | GFX || GrayFox |- | GGR || GeeGeeRaffe |- | GGTP || geduardae |- | GH05T || LaserWiesel |- | GH0ST || LaserWiesel |- | GHBBT || GodlikeHobbit |- | GHCK || Gehock |- | GHEN || Ghengis Khan Designs |- | GHG || Jutka_GHG |- | GHK || Bloberg |- | GHORT || Ghorthor |- | GHOST || radical.ghost |- | GHOST79 || GH0ST |- | GHOZA || fgfghoza |- | GHS || GhostTeam1818 |- | GHST || Ghost644 |- | GHT || geoh13 |- | GIAN || Giampy |- | GIB || Gibbet |- | GICVT || captnmericah |- | GID || Lynx |- | GIG || Ghost in the Grass |- | GIJO || Aboode |- | GIJOE || Gijoe775 |- | GIL || fosko |- | GILA || Gilatar |- | GILIS || stuphor |- | GILS || Gil Shannon |- | GIM || grimmeral |- | GIMP || Jona |- | GIMP1 || Jona |- | GINSU || Ginsu |- | GISA || gug |- | GIT || trinec |- | GITM || Toppskillz |- | GIX || Giorox |- | GK || GameKnighted |- | GKA || Gourka |- | GKB || Gekkibi |- | GLA || Glaedar |- | GLAED || Glaedar |- | GLAGINA || gulagina |- | GLD || LegoUnicorn |- | GLG || Athan |- | GLR || Taskmaster65 |- | GLT || Legislator |- | GLTCH || TehGlitch |- | GLTOP || Likeboss |- | GLTOR || Likeboss |- | GLUIP || Gluipertje |- | GLXXY || Glxxyaj |- | GM404 || Infoulein |- | GMAN || gmangavin |- | GMC || ADOGMC |- | GMCN || GlitchedMan |- | GME || gameer_77 |- | GMEO || W0lle |- | GMI || Gummi |- | GMJ || gmJamez |- | GMK || TheGmork |- | GMM || GUSMARME |- | GMO || GuantanaMo |- | GMP || Gimplord |- | GMR || goldmember13 |- | GMRAL || grimmeral |- | GMRAL || grimmeral |- | GMRE || ghoulishpeach |- | GMRL || grimmeral |- | GMRR || grimmeral |- | GMS || gms |- | GMX || GeminiX |- | GNB || Green and Blue Clan |- | GNCIN || GenCincinnatus |- | GNG || GNGNUT |- | GNO || gnosis |- | GNOVA || Gazpa Nova |- | GNT || Gnat |- | GNV || Gone Native |- | GOAL || podjaa |- | GOAT || Mr White |- | GOBBL || THEGOBBLER |- | GOBEL || Gobelgobel |- | GOD || armygod |- | GOE || PepinKr |- | GOES || Teodosio Alforja |- | GOG || Gogs |- | GOGY || Gogy |- | GOL || GOL Clan |- | GOLD || NZXSHADOWS |- | GOON || gibfender |- | GOONS || GOON |- | GOT2 || .:mazed:. |- | GPA || Henrik |- | GR33N || gREENbERRY |- | GRACE || Grace |- | GRAVE || Mr.Hatchet |- | GRB || grazyboy |- | GRCON || DeltaGhost |- | GREAL || grimmreal |- | GREEN || Greenman |- | GRENA || Greenaa |- | GREY || Soldierman |- | GRF || GRFoxhound |- | GRH || grhayes |- | GRIFFY || Griff587 |- | GRIM || grimesy |- | GRK || Grokk |- | GRL || grimmeral |- | GRM || Grimfist |- | GRML || grimmeral |- | GRMRL || grimmeral |- | GRN || GreenMonster |- | GRNTS || Grunts1996 |- | GRO || DilutedSalt |- | GROTO || GGRotor |- | GRRAL || grimmeral |- | GRRL || grimmeral |- | GRRR || grrrrobots |- | GRRTH || Gauroroth |- | GRSTR || grester |- | GRT || Grotsky |- | GRTR || grester |- | GRU || massi |- | GRUNT || Choctaw |- | GRX || Gore |- | GSAVA || GuySavage |- | GSE || Fox2 |- | GSEP || Green Sea Expansion Project |- | GSF || Mr. Goodstuff |- | GSG9 || Grenzshutzgruppe 9 |- | GSH || Gunnery sergent Highway |- | GSRI || www.gsri.team |- | GST || Ghost |- | GSTE || Vibes |- | GSTUD || Gunther01 |- | GSW || Lt_Phoenix |- | GTA || ztrund |- | GTBR || tuszynski |- | GTF || inblow,jasox |- | GTM || Ghostman |- | GTOE || 22gtoe |- | GTOWN || capn_blastoff |- | GTV || HetzerGTV |- | GTV2 || Esro |- | GTWP || Evalach |- | GUARD || Guardian |- | GULAG || Warrior24 |- | GUMA3 || Mr.M98 |- | GUNIT || 50CENT |- | GUNN || SGTGunner |- | GURU || Guru Bear |- | GUSTY || Gustyy21 |- | GVKEY || gvn |- | GW || Leone |- | GW2 || Gulf War 2 Mod |- | GWA || gwa2100 |- | GWAR || Sham-13 |- | GWD || coyote39 |- | GWF || XxFri3ndlyxX |- | GWN || Gwnsystems |- | GWNAK || ZogMadDog |- | GWP || shawm3 |- | GWS || gonk |- | GXW || Falk |- | GZREP || GamerZ Repository |- |}

=== H ===

{| class="wikitable sortable" style="width: 100%" | H34 || headup |- | H3H || SaschQuasch |- | H3K || h3killa |- | H69 || Hellrazor69 |- | HAAD || Tomek |- | HAAS || Drofseh |- | HAB || Hablos |- | HAC || Hellenic ArmA Community |- | HACV || Aplion |- | HAF || Ex-RoNiN |- | HAFM || Aplion |- | HAGEN || Hagesol |- | HAHN || Micaelhahn |- | HAIZ || Haizor |- | HAL || Blockdude |- | HALF || Halftone |- | HAM || HAMMY |- | HAMM || Hammer |- | HAMO || Hamo |- | HAMU || chorodai |- | HANDD || Harold_Hoffmann |- | HAPPY || sebbe284 |- | HAR || hartreinn2015 |- | HARD || pochmann |- | HARDY || Hardy |- | HART || Hartwich |- | HARZ || Harzach |- | HAS || HoRi |- | HASE || Schokohase |- | HAT || Hattricx |- | HATE || HateDread |- | HAVE || TheDoctor63 |- | HAVEN || utomnia |- | HAW || Hawkins |- | HAWAI || ArmedGaming |- | HAWK || Hawk |- | HAWKES || HawkesTFS |- | HAX || Stanov |- | HAZ || Hazjibab |- | HAZC || HazardousChurch |- | HAZCK || hazckar |- | HAZE || Diablohaze |- | HAZZR || Hazzr |- | HBC || EggMcDragon |- | HBF || Hunter Bluefire |- | HBL || Herbal |- | HBNJ || HoboNinja |- | HBV || Humbugbananavan |- | HC || leba101 |- | HC1 || Hell's Circus |- | HCC || cartmen180 |- | HCMOD || SoldierEPilot |- | HCOLL || cunamo |- | HCP || Headcase9675 |- | HCRHH || Hellcow_2RHh |- | HCRT1 || hcrt1@hotmail.com |- | HCX || HitCorp/Captain Kirby |- | HDB03 || HDBrosky |- | HDBW || Adler |- | HDR || Hardrock |- | HDS || Elliot Carver |- | HDT || Linker Split |- | HDV || House Divided mod |- | HEA || Head |- | HEAD || Jona |- | HEAVY || Nullfati |- | HED || Hedcrusha |- | HED || Hedcrusha |- | HEDO || hedoniix |- | HEDU || Helmut Duregger |- | HEG || ILLUXN |- | HEH || Denisko-Redisko |- | HEJ || HeliJunkie |- | HEL || Helvete |- | HEL4 || Helion4 |- | HELI || rodhalberd |- | HELLF || Hellfire |- | HELYO || Heliioss |- | HEM || pvtHenk |- | HER || heros |- | HERB || herb0021 |- | HERO || MrHero55 |- | HEX || HeX|Fate |- | HEXA || IkåR |- | HEXOM || Hexomanya |- | HEXRP || HexReaper |- | HEY || ferio29 |- | HFF || HitmanFF |- | HFM || Feldmann |- | HFP || L0rd Vetinari |- | HFPL || halfapple |- | HFR || Helifreak |- | HGFS || Konchjaz |- | HGH || HenrikGH |- | HGR || Foxy |- | HGS || Ransid |- | HH101 || headedhorseman101 |- | HHSIR || HHSirbone |- | HIA3 || btmoon17 |- | HIC || Hiesc |- | HIDE || hide86 |- | HILL || Henrik |- | HIM || Him-Self |- | HIP || cunico |- | HIPPO || couplewavylines |- | HIS77 || Jona |- | HIZ || Hinkkiz |- | HJLA || Hejila |- | HKA || Hunter Killers Addons |- | HKK || Hawkkster |- | HKS || Hara Kiri |- | HLF || Hellfire257 |- | HLO || Hailo2 |- | HLS || Hawk_Silk |- | HMADE || human626 |- | HMFA || crazyDHarrison2 |- | HMFA3 || crazyDHarrison2 |- | HMG || Mast3r |- | HMJ || Mayor |- | HMLGT || Himmelsgott |- | HMM || JamesF1 |- | HMN || HumanNic |- | HMO || Jimpy |- | HMRMC || TemplarVX |- | HMXS || Haych |- | HNEG || h- |- | HNG || thevisad |- | HNK || hoink |- | HNTR || JackalopeHunter |- | HOB || Hobnob |- | HOBO || HoboPacifist |- | HOER || Soultakerl996 |- | HOGS || hogscraper |- | HOHO || HossHooray |- | HOJO || HomerJohnston |- | HOK || RavenDK |- | HOL || PsychoChicken |- | HOLDL || darpeyface |- | HOLI || Holibu |- | HOLIB || Holibu |- | HOLY || Inblow |- | HOME || spacenavy90 |- | HOMJ || Homer Johnston |- | HON || Hondobot |- | HOP || Hoplite |- | HOPL || Raven |- | HOR || horrido |- | HORDE || Das Attorney |- | HORVA || Horvath |- | HOSS || captainjack42 |- | HOTZE || Hotzenplotz |- | HOZ || Hoz |- | HPS || Hooah! Production Studios |- | HQR || Leo |- | HRBLS || Hairballs |- | HRD || SGTHardcore |- | HRF || HRF_avenger |- | HRG || ByteWad |- | HRN || haroon1992 |- | HRV || Hrvoje |- | HRY || harry))) |- | HRZ || Horizon |- | HSP || humansteak |- | HST || Mozz |- | HTC || Hugo the Clown |- | HTDM || Hektor_The_Dead_Medic |- | HTGO || Helikaon |- | HTK || Herratik |- | HTM || Hitman0956 |- | HTN || Norse_Harold |- | HTR || h- |- | HTR1 || frednaar |- | HTRDW || Hotrodw |- | HTRX || HunTRaX |- | HUBBA || hubba |- | HULK || HulkingUnicorn |- | HUMPH || humphrey |- | HUNTA || HuNtA |- | HUSKY || Husky |- | HVBS || Muzz123321 |- | HWM || Hellenic Warfare Mod |- | HWP || wizzywig/Hobbit |- | HWZ || HOWZ1T |- | HX001 || lululau8 |- | HX002 || lululau8 |- | HX003 || lululau8 |- | HX1 || VUSN042 |- | HYB || Hybrid |- | HYPER || bijx |- | HYPR || HarryPlobber |- | HYRO || Hyronos |- |}

=== I ===

{| class="wikitable sortable" style="width: 100%" | I2HI || LegaliseCheese |- | I420 || smittyjergensen |- | I44 || Invasion 1944 |- | I444 || kekwood |- | I878 || Lizardpile |- | IAC || Gummybear_Qc |- | IAN || Ian Malcolm |- | IAP || RKSL-Rock |- | IBER || Sovietzug |- | IBL || AllowedRaven | Aka: Hugo_Bishop |- | IBR || IceBreakr |- | IBULL || Irish_Bu11et |- | IBUX || ibux |- | ICA || International Conflict:Armed Assault |- | ICA3 || IC-Hit |- | ICARG || TheIcarus |- | ICE || Dr Eyeball |- | ICEP || englishbullox |- | ICET || iCEtIMed |- | ICK || IceColdKilla |- | ICKYN || ickynk |- | ICM || Darylsteak |- | ICO || Iconoclast |- | ICP || ORCS Development Studios |- | ICY || Icy |- | IDA || IPDarby |- | IDFH || idfhayal |- | IDM || dragonsyr |- | IEC9 || LinuxMaster9 |- | IEG || Soul_Assassin |- | IFEXP || jagy |- | IGRX || IguanasaurusRex |- | IGT || ingametek Studios |- | IGW || walker |- | IIW || Burt |- | IJA || Itsjustale |- | IKAR || IkÃƒÂ¥R |- | IKE || Ike |- | IKG || ikillglitch |- | IKRS || Anthall |- | IKSE || IKSE-Phoenix |- | IKY || [icarus_uk] |- | IKZ || ikiilzom |- | ILL || TheIllest57 |- | ILMAR || Ilmars |- | ILS || Kammorne |- | ILYA || ilya.erokha |- | ILZ || redeye |- | IMA || Reimarus |- | IMB || Bremmer |- | IMBEL || rodhalberd |- | IMD || AAB |- | IMF || Morgan Montiel |- | IMIKE || iReckonItzMike |- | IMUC || Iraqi Mod: Unforeseen Circumstances |- | INACI || Inacio |- | INC || Increment |- | INCA || Le sicilien |- | IND || Indieboi918 |- | INDIE || Indie |- | INF || infinity |- | INFA || TheInfamousNA |- | INFI || Infidel |- | INK || Ink_25 |- | INKO || Inkompetent |- | INL || Inlesco |- | INQ || InQUisiToR |- | INR || iNeaR |- | INRDF || International Rapid Deployment Force |- | INS || Instructor |- | INSET || InsetJesux |- | INSNE || Insane |- | INSOMNIA || Insomnia |- | INT || Intruder |- | INTER || interoth |- | INV || Invasion 1944 |- | IOH || Invasion of Holland |- | IOM || McCabe |- | ION || i0n0s |- | IOSKY || Foxtrotter |- | IOWAR || IO Warrior |- | IPL || EddyStark |- | IQQ || Synchronized |- | IR0N || ir0n |- | IR0N1 || Ir0n1E |- | IRA || The_MusswaH |- | IRDF || Irish Defence forces |- | IRE || IrregularElements |- | IRISH || Irishpride |- | IRM || Sariel |- | IRMA || saffuan666 |- | IRO || Ironsight |- | IRON || Ironman |- | IRONX || ironxbay |- | IRP || Phelps |- | IRS || Imal rai Shakeen |- | IRZ || I-RZ# |- | ISAF || NZXSHADOWS |- | ISCP || ISCP |- | ISIL || Isildur |- | ISIS || ISIS |- | ISK || Mac Spliff |- | ISKY || isky |- | ISL || Buba |- | ISLES || Willliam |- | ISLSK || Foxtrotter |- | ISMA || Isma22. |- | ISN1P || isn1p3r |- | ISO || iso111 |- | ISOS || Isoterik |- | ISOTE || Isoterik |- | ISR || johnny0964 |- | ISS || Schubi |- | ISSK || Foxtrotter |- | ISSKE || Foxtrotter |- | ISSKY || Foxtrotter |- | IST || Gruul |- | ITA || colorchanger |- | ITC || Scott Marshall(Nodrog1061) |- | ITD || Bhaz |- | ITLA || Itla |- | ITZ || iTzREAPER |- | IVH || [_PcE_]Bastian |- | IWAS || iwasinnamuknow |- | IWS || Iron Warriors |- | IXWXI || IIxWALSHxII |- | IZLK || iZunLeK |- | IZU || Izu |- | IZULK || iZunLeK |- |}

=== J ===

{| class="wikitable sortable" style="width: 100%" | J117 || J117 |- | J198 || jens198 |- | J1FZ || technicalow |- | J23 || jthil23 |- | J2464 || James2464 |- | J33 || Jonpas |- | J45 || James45-Youtube |- | J4CK || J4ckInTheB0x |- | J4P || mp5gosu |- | J6392 || crow |- | J791 || J791 |- | JAAJ || ARNPIK |- | JAB || MrFlibbleUK |- | JACK || Jackson.M |- | JACO || JacoJazz |- | JAD || gastovski |- | JAE || Jaentzen |- | JAFFA || Jaffa |- | JAFKR || Jaffa |- | JAH || Jahve |- | JAKAL || JKL_ |- | JAKE || Leehr_19 |- | JALBY || yoomama |- | JAM || JAM |- | JAM1 || jam1234 |- | JAMES || J_Goodwin16 |- | JAN || D.Jankovic |- | JANIN || polskimacerator |- | JAP || jimbop |- | JARNO || jarno1227 |- | JASDF || Japan Air Self Defence Force Project |- | JASS || DoktorDauerfeuer |- | JAX || jaxCDN |- | JAXX || Jaaxxxxon |- | JAY || alan9413 |- | JAYCD || JayCodes |- | JAZZP || HotJazzCP |- | JBAD || M1lkm8n and Smokedog |- | JBCPP || Brendan |- | JBOY || johnnyboy |- | JBTO || Jabato |- | JBU || JACKBU |- | JBX || JoelBoiaX |- | JBY || Jellybelly |- | JC128 || JC128 |- | JCA || jack4607 (Jimmy Bulmer) |- | JCB || Cobra |- | JCK || Jock |- | JDAM || Spyder001 |- | JDF || DiFool |- | JDG || JDog |- | JDGAR || jdgaravito |- | JDO || JDoberman |- | JDOE || JohnDoe |- | JDP || JoeyD |- | JED || Jedra |- | JEDAN || Jesper |- | JEFFS || jeffs |- | JELLO || Jellow |- | JELME || windo |- | JELON || xarxil |- | JEQ || JanusEQ |- | JER || J3RICO |- | JEREM || jelrite346 |- | JERRY || jerryyou |- | JESS || Scarletmaunka |- | JESSE || jesse3339 |- | JETKR || Jetkar |- | JETS || Theflyingjets |- | JEX || Colonel Jex |- | JEY || JeyR |- | JEZ || jez_CreepingDeath |- | JF1 || JamesF1 |- | JFK || foglemark |- | JFL || JFL |- | JFLEX || JFL |- | JGAME || jgames |- | JGBTL || Grey Wolf |- | JGKP || Onizuka |- | JGSDF || gachopin |- | JHONK || LORDJHONKAS |- | JHPPR || jerryhopper |- | JHPR || joelbhv |- | JICL || CornerWookie |- | JJA || juanchoad |- | JJB || The Jub-Jub Bird |- | JJC || -----jayjayc----- |- | JJH || Rellikplug |- | JJS || Jenkins |- | JJS87 || Ignor_Uhallus |- | JKL || Junklord |- | JKN || JKNuke12 |- | JKR || Joker303 |- | JKRPT || jKrapotke |- | JLO || JohnO |- | JMAD || MichaelJMAD |- | JMADG || MichaelJMAD |- | JMAN || Jona |- | JMAP || Jsniper650 |- | JMAS || Jochem |- | JMB || JmB314 |- | JMG || Scanger |- | JMGJ || midgetgrimm |- | JMN || j-man |- | JMS || Herr Doktor |- | JMS7 || jonassm |- | JMSDF || gachopin |- | JNA || Jona33 |- | JNEEV || JNeeves |- | JNGLZ || AnointedServant |- | JNK || justJenkins |- | JNS || Jonpas |- | JNSN || Jensen, 16AA |- | JOAOL || joaol |- | JOAR || Joarius |- | JOC || Mew_AG |- | JODO || JohnDoe |- | JOE || Joe Lemonade PSC |- | JOE11 || jostler11 |- | JOEL || joelbhv |- | JOF || JorgF |- | JOFB || John & FAB's work |- | JOG || JesterOfGods |- | JOH || Jonny |- | JOHNS || sharkeye |- | JON || Jonno |- | JONA || Jona |- | JONA7 || Jona |- | JONAS || Jona |- | JONS || Jonpas |- | JORG || jorgchamorro |- | JOSGC || JONeill |- | JOTEL || jotel |- | JPAJ || Jona |- | JPH || jphacken |- | JPJ || Jona |- | JPL || James Lucas |- | JPP || Japan Police Project |- | JPS || SoldiA |- | JPS1 || Juanp15 |- | JPT || JahBit |- | JPTIG || jptiger |- | JR40 || juragan |- | JRE || jelrite346 |- | JRED || Jarob22 |- | JREH || jelrite346 |- | JRG || Jormangeud |- | JRH || JRH |- | JRS || JerStone |- | JRS2 || Josep02 |- | JSAW || James Sawyer |- | JSDF || JSDF |- | JSF || Grace |- | JSF10 || Grace |- | JSFHV || JSF 223 Havoc |- | JSK || jusk |- | JSN || Jonsson, 16AA |- | JSP || Jakerod |- | JSPH || Joseph |- | JSRS || JSRSMod |- | JSS || SultanJS |- | JSY || Juisy |- | JTAK || Takelmeifter |- | JTD || JTD |- | JTF2 || Psycho |- | JTL || JackalTeamLeader |- | JTOG || [1st JTOG] Cypher |- | JTP || jtp54 |- | JTR || jthered |- | JUCIY || JuciyFruity |- | JUDGE || Judge_Niklas |- | JULIU || Arquilius |- | JURA || Wollmilchsau |- | JUTKA || Jutka_GHG |- | JVG || asf |- | JVS || Josef |- | JW23 || kizio001 |- | JWC || JW Custom |- | JWMT || JWMissionTeam |- | JWTG || JustWayTooGangster |- | JYB || Yoshi |- | JYK || Jekyll |- | JYL || M. Vind |- | JYNX || Jynx |- | JZR || Jezuro |- |}

=== K ===

{| class="wikitable sortable" style="width: 100%" | K000 || Ceary Gaska |- | K10 || Killer10 |- | K1920 || Reign19k |- | K1MOD || kill1ng4nl |- | K432 || Ceary Gaska |- | K444 || Ceary Gaska |- | KAAR || kaar |- | KAG || KillerAussie |- | KAH || Sneaky_elephant |- | KAI || Kaiser |- | KAIN || Kain_Lowsta |- | KAL || Kaliyuga |- | KALE || kalelele |- | KALEL || fOkStROt |- | KAM || reyemlrak |- | KAN || Kanny |- | KANOR || seytan69 |- | KANZZ || canoekovski |- | KAO || Ka-Oz |- | KAP || Pr0t0s |- | KARR || Karrmann |- | KAT || kot |- | KATE || Katekarin |- | KATS || Katastrophenschutzmod |- | KAUE || Kaue1996 |- | KAUE2 || Kaue1996 |- | KAZ || Ka-Oz |- | KBC || SirClarks |- | KBG || KaBoNG |- | KBS || snajdan |- | KCD || mrkarp |- | KCT || Smootch |- | KDL || König_der_Leere |- | KDOKP || Insane / 7. Kommando Kompanie |- | KDUBS || KDubs |- | KEEF || KeefVCB |- | KEG || Kegetys |- | KEH || Kehlian |- | KEHL || Bier AIG Kehlenschnitt |- | KEIF || keif149 |- | KEIKA || KantanKei |- | KELLY || Cross |- | KEN || kenta |- | KENYA || puffadder |- | KERN || KernalPanic |- | KEXFM || ZOOmbi |- | KEY || KeyCat |- | KFC || GodTookMyKFC |- | KGM || KailGale |- | KH1 || ianbanks |- | KHA || King Homer |- | KHALI || Khalise |- | KHAN || Ghengis Khan Designs |- | KHI || ianbanks |- | KHNTR || koalahunter |- | KHOVA || Khovanet |- | KHP || KansasHellPrairie |- | KHS || Khayes |- | KIA || Jona |- | KIB || kiba3x |- | KIII || Ceary Gaska |- | KILO || KiloJules |- | KIM || Beyrunn |- | KIN || Kinnon |- | KING || King_Pyrrhus |- | KINGG || King_of_Gondor12 |- | KINGT || KingTsunami |- | KIO || Kiory |- | KIR || Kirthi Iyer |- | KIRU || Kirumy |- | KISL || Ceary Gaska |- | KISLA || Ceary Gaska |- | KITRA || KillTrader |- | KITTY || GetThatCat |- | KIVEC || Kivech |- | KIVI || Kivi |- | KK44 || Ceary Gaska |- | KKA3 || KokaKola |- | KKB || KKB |- | KKEIF || kaptinkeiff |- | KKK || BlinkDog |- | KKK4 || Ceary Gaska |- | KKM || Kabala Konflikt Mod |- | KKV || KokaKola |- | KKY || Kronzky |- | KLA || klavan |- | KLAM || klamacz |- | KLD || Klan_Destino |- | KLEDO || k2 |- | KLG || klgreload |- | KLJ || excelsior |- | KLL || kikill |- | KLMK || Klamauk |- | KLS || Killswitch |- | KLU || klubargutan |- | KMA || Smootch |- | KMD || RainDrop |- | KMDR || Kmdrfarsight |- | KMK || Kammak |- | KMP || the-f |- | KMT || Krzycu |- | KMZ || Kamizz |- | KN7 || KimsterN7 |- | KNDR || kondor |- | KNG8 || king8bit |- | KNO || knoedelsalat |- | KNP || KP |- | KNR || Keneraali |- | KNT || kevsnotrev |- | KNV || Knoxville |- | KNX || Knoxxius |- | KOBLD || TinfoilHate |- | KOBRA || Zapata |- | KOH || Alucard88 |- | KOHL || icekohl |- | KOJAK || Kojack |- | KOM || Kombatkow |- | KOMA || KomaKommander |- | KOMP || Kompetenzz |- | KOND || Ceary Gaska |- | KONDO || Ceary Gaska |- | KOR || Khorne |- | KORB || Korbelz |- | KORBI || Lt. Korbi |- | KORVA || korvalaakari |- | KOS || K0s |- | KOSEI || NekoSensei |- | KOT || SoldierEPilot |- | KOZ || kozak |- | KOZA || Kozach |- | KPFS || Marseille77 |- | KPH || Kill_Phil |- | KRA || Hans von Zettour |- | KRCE || Kristiyan Tsenov |- | KRDKY || LinuxMaster9 |- | KREM || Striborg |- | KRG || Krieg |- | KRGB || kbernges |- | KRIJG || Krijag |- | KRK || -=Kriesen Reaktions KrÃƒÂ¤fte=- |- | KRL || Karlos |- | KRNIS || MrFreex |- | KROK || Krok |- | KRON || Kronzky |- | KRONI || Kronik |- | KRP || TheLexoPlexx |- | KRSJ || Kresjah |- | KRY || Krynoc |- | KRYPT || Kryptonite |- | KRZ || KraveZ |- | KRZYC || Krzyciu |- | KSA || EleGhost |- | KSH || Katla_Haddock |- | KSN || Ksanatos |- | KSR || kaiser_5sm |- | KSZ || ks0908 |- | KTE || KTottE |- | KUANG || kuangmk11 |- | KUB || kuba |- | KUNAR || raptor_aviation |- | KUP || kuplion |- | KUR || Kuro |- | KURAS || AhegaoMyEggao |- | KUS || SmartGun [KUSARI] |- | KVBDF || Vendaar |- | KVS || Komplex |- | KYL || kylania |- | KZBK || 4Shades |- | KZO || krzychuzokecia |- |}

=== L ===

{| class="wikitable sortable" style="width: 100%" | L01 || LoserOne |- | L2K || Legionary2000 |- | L4145 || Liberation 1941-1945 |- | L4Z0R || l4z0rr0b0tz |- | L86 || Lifted86 |- | LABS || luk108 |- | LAC || Lacota |- | LAE || Laertes |- | LAF || Aidas |- | LAGGY || laggy |- | LAGNS || nigeyuk |- | LAKOS || Laikos_Vidar |- | LAMB || lambert |- | LAN || Landdon |- | LAND || Motra |- | LARIS || Pierson |- | LARS || Larrow |- | LAST || Last Aussie |- | LAT || l4t3 |- | LATIG || black.dragoncr18 |- | LATIN || StreetDog |- | LAUTS || laustrike |- | LAX || Laxentis |- | LAZY || lambofgodz |- | LBM || LBmaster |- | LBT || Totor Jenkins |- | LCA || Luca |- | LCD || LCD |- | LCDF || Lokiro |- | LCK33 || luckywin3 |- | LCO || LeadCommando |- | LDA || Roaban |- | LDG || Loc-Dog |- | LDL || LurchiDerLurch |- | LDN || Double Doppler |- | LDTM || LtDanTheArmyMan |- | LEARS || learsi0013 |- | LEB || unknownx9 |- | LECHO || elechos |- | LEE || Lulee |- | LEGIN || Legin88 |- | LEGIO || Emiuz97 |- | LEGIT || polskimacerator |- | LEGS || LuckyLegs |- | LEH || lendrom |- | LEL || Barazin |- | LEM || SubsidedLemon |- | LEMIL || Felipe Leclerc |- | LEN || LennyD |- | LEO || Leonardus |- | LEO1 || Leo_666_1 |- | LEON || leonz2019 |- | LEP || Lefterboy123 |- | LES || Lester |- | LESH || Leshrack |- | LETH || Lethio |- | LFMR || moonracer1313 |- | LFN || LucaGER |- | LFOV || FreddyCruger |- | LG666 || [Gen]F.Larry-12thACR |- | LG83 || Logan83 |- | LGD || Loyalguard |- | LHA || Laurenzl33 |- | LIB || Liberation 1941-1945 |- | LIBZ || Libz0rzz |- | LILG || JasonO |- | LILJE || thielbmw |- | LINCE || Fr4nKy |- | LIQD7 || liquid-7 |- | LIS || lis |- | LITTL || Littledog |- | LIZ || Lizard |- | LJPDZ || Proaf0 |- | LK108 || luk108 |- | LK40 || Skeltoras |- | LKD || Kinch |- | LKS || Vortex |- | LKY || Locky |- | LLAMA || Llama |- | LLOBU || llobu |- | LM || [[User:Lou Montana|Lou Montana]] |- | LMC || LimeCordial |- | LMP || 33OF11PE00 |- | LMS || Lockheed Martin$ch |- | LNB || Lean Bear |- | LNWH || loki72 |- | LNX || Lanix |- | LOBO || Lost Brothers Mod |- | LOC || Lockers |- | LOCKE || Locke@Germany |- | LOEL || Hoyt |- | LOGI || logi |- | LOK || unloco |- | LOKE || Loki |- | LOKI || loki72 |- | LOKII || Lokiro |- | LOKIL || Lokiro |- | LOKYI || Lokyi |- | LOL || windo |- | LOLMA || Smiffy |- | LOLO || Mr Fatex |- | LOLWHAT || WhatThe |- | LON || vilnil |- | LONDO || CTLondon501st |- | LOP || Loopez |- | LOR || Lorelei |- | LOU || 2lou2 |- | LOV || Mikjall |- | LOVE || WonderMike |- | LOW || LonelyWarrior |- | LOWP || ajlex |- | LPR || Diesel |- | LQG || candle088 |- | LRD || LORDREMCOK |- | LRS || larsen |- | LSD || sxpra |- | LSGSP || Sportyha11 |- | LSI || Liquid_Silence |- | LSR || Laser |- | LST || Lost_ofp |- | LSTF || Nojuxxs |- | LSW || liammanator |- | LT1 || Lieutenant |- | LTH || Lt HuNTeR |- | LTK || LoTekK |- | LTM || Lt.Meerkatflyer |- | LTS || A8B7C6 |- | LTU || ofpartizan |- | LTZK || latzka |- | LUCA || lucasmelo |- | LUCAS || SeriouK1LLS |- | LUCCI || rodhalberd |- | LUFT || Starluft |- | LUGS || Softpoint |- | LUKIS || lukis_spectre |- | LUM || Lumme |- | LUMA || Eluminate |- | LUMOD || LupusTheCanine |- | LUNAR || Lunarrabi |- | LUPO || McLupo |- | LURCH || LurchiDerLurch |- | LUT || lut |- | LV412 || Saethkept |- | LVH || LokiVH |- | LVW || Lovwyr |- | LWOF || lobo |- | LWOLF || lobo |- | LWP || LWP MOD |- | LWRET || Lost World Returns |- | LWZ || LegaWarz |- | LYGD || Loyalguard |- | LYNX || TinfoilHate |- | LYNXM || Lynx |- | LYRA || LyraGuy1985 |- | LZK || LizardKing |- | LZONE || antonin86 |- | LZX || LizardX |- |}

=== M ===

{| class="wikitable sortable" style="width: 100%" | M0100 || Michael0100 |- | M10ER || Mountaineer |- | M152 || MachinistG |- | M1J66 || mjdigit |- | M1LK || M1lkm8n |- | M1X || M1XT3NZ |- | M2033 || konna |- | M225 || AlexMcClaine |- | M2OP || Sgt Mix |- | M3M || mcmatrix |- | M3TAZ || Mootaz20Khelifi |- | M4XD || M4xD |- | M59 || Mysterion59 |- | M64 || massi64 |- | M720 || m720 |- | M90 || granQ |- | MAA || MAA |- | MAALL || mja2106 |- | MAAM || Mutually Accepted Ammo & Magazines |- | MAATZ || Maatz |- | MAC || Samu |- | MACAM || macamur2 |- | MACD || mattmac76 |- | MACE || SoldierEPilot |- | MACEC || flup52 |- | MACG || macguba |- | MACH || fragmachine |- | MAD || mollusc |- | MAD3 || fogu |- | MADL || Cowboy |- | MADQC || Madelinot |- | MAF || MAAC & MARFY |- | MAFF || iiMaffasouras |- | MAFIA || luckyluciano |- | MAG || alimag |- | MAG01 || Gizmo258963 |- | MAGBJ || Benjellio |- | MAGUM || Magnum |- | MAHP || mahp |- | MAHT || Maht |- | MAJ || McHide |- | MAJAR || Majarkin |- | MAJO || majoess |- | MAJOO || Majoolwip |- | MAK || Makhno |- | MAKAR || Makarenko |- | MALIC || Malicidus |- | MALKE || malkekoen |- | MALYN || Scott Malyn |- | MAN || M4NUM4N |- | MANA || Manason |- | MANAP || exitbrexit |- | MANDI || KlosTher |- | MANDO || Mandoble |- | MANGO || MangoAU |- | MANNY || kingmanatea |- | MANX || vaida |- | MAO || Mangoo |- | MAP || Mapfact |- | MAP1 || ItsCane |- | MAPL || Santa Cruz |- | MAPLE || Maple_Syrup32 |- | MAPZ || owej |- | MAR || Meatball0311 |- | MARC || Marcooo |- | MARF || Manyack |- | MARGE || Dealbreaker Jones |- | MARKY || markypea |- | MARLA || MarineLayer |- | MARO || MattRoch |- | MARQ || hugoomarques |- | MARS || Rastafa |- | MARSU || goldfinger |- | MART || PhonicStudios |- | MARTI || MartinFrost |- | MAS || massi |- | MASH || masheads |- | MAT || McLupo |- | MAT56 || matty5665 |- | MATH || Maddmatt |- | MATT || Mad |- | MATTY || matty45 |- | MATZ || Matt_T |- | MAU || Maurin080 |- | MAUR || Maur |- | MAV || Maverick |- | MAW || mwise |- | MAX || max |- | MAXVI || Maxvil |- | MAXZ || MaxZ |- | MAY || mayrhofen |- | MAYD || mayday simulations |- | MBART || mikebart |- | MBG || Mondkalb |- | MBK || The Milky Bar Kid |- | MBM || Martin_BM |- | MBMC || MBMC |- | MBOI || Mahboison |- | MBRAS || rodhalberd |- | MBT || rodhalberd |- | MC134 || maca134 |- | MC225 || AlexMcClaine | Philipp S. |- | MC5TH || Sablerno |- | MC9 || Macko |- | MCAR || mcar engine |- | MCB || McBeardy |- | MCC || Bloberg |- | MCCL || AlexMcClaine |- | MCDEE || sapharion |- | MCG || McGough |- | MCGEE || McGee |- | MCH || McHale |- | MCK || Macolik |- | MCL || mattaust |- | MCLU || McLupo |- | MCMC || McMonkeycho |- | MCOM || Mission Command |- | MCON || Max Conway |- | MCORD || matheuscordeiro |- | MCP || MrCrispPacket |- | MCR || MasterCipher |- | MCRD || raptor 6 actual |- | MCS || Semajnad |- | MCSR || Macser |- | MCSS || Mad_Cheese |- | MCY || MercenaryS |- | MDA || US Marine and Deadsoldier |- | MDAYZ || xdeejaycrazyx |- | MDCD || Michael Dorosh |- | MDF || Smootch |- | MDG || mdavidg |- | MDI || Magen David Industries |- | MDK || Elffi & too_Frosty of Marduk |- | MDO || Marek779 |- | MDR || mdr |- | MDS || MadDuck Studios |- | MDS17 || Fossil |- | MDSA || MenaceMedusa |- | MDSL || Mauricio_Souza_Leon |- | MDT || Maddmatt |- | MDX || MadDogX |- | MEA || Makad |- | MEATY || ChristmasMeat |- | MEB || Munk-E-Boi |- | MEC || Mendip Editing Consortium |- | MECHA || Mechanite |- | MED || Denisko-Redisko |- | MEDI || SyntaxMedium |- | MEE || Oxigeno |- | MEF || Mattastic |- | MEFA || Melissa |- | MEH || MehMan |- | MEI || todschlaeger |- | MEKA || Meka |- | MEL || Mellis |- | MEMO || alex31535 |- | MERCS || AK-Chester and AK-George |- | MERCY || Mercy |- | MERCZ || Merczateers |- | MERIC || mericerenler |- | MERL || Merlin |- | MES || messiah |- | MESH || meshcarver |- | MET || Double Doppler |- | METRO || Hazckar |- | MEU || 11thMEU Kavinsky |- | MEU13 || Degray |- | MEWLE || mewle |- | MEX || "México en Guerra" Mod |- | MEXT || MexterInfinite |- | MEZ || Itsmez |- | MFAF || Mod Armée Française |- | MFB || Major Fubar |- | MFMP || MrFarmer |- | MFOUR || Maxvil |- | MFP || The_MusswaH |- | MGA || warlord |- | MGG || Messiah and Greatgraddage Productions |- | MGI || Pierre MGI |- | MGS || Metal Gear Mod |- | MHE || Fumbles |- | MHJ || MaHuJa |- | MHL || Mikhail |- | MIA || MadAussie |- | MIC || michiyl |- | MIDF || The_Blink |- | MIG || mig |- | MIHKL || TheMihikle |- | MIK || M.K. |- | MIKE || freda |- | MIKEB || HellfireVevo |- | MIKEY || ciscomikey |- | MIKRO || Mike Andrew |- | MIL || Forest |- | MILER || mileredit |- | MINER || Minermail01 |- | MINF || Minf |- | MINT || mintblackbeard |- | MIP || micropilot |- | MIQ || miq |- | MIR4G || Miragexl |- | MIROS || nico100 |- | MIS || Misch |- | MISU || Misu |- | MISU1 || Castiel |- | MIW || annihilator825 |- | MIZOU || Mingala |- | MJB || Blath |- | MJD || Marshal_Jud |- | MJDI || mjdigit |- | MJDIG || mjdigit |- | MJDII || mjdigit |- | MJR || MJRamon |- | MJW || Major Woody |- | MK4 || mikey |- | MK5 || Mk5 |- | MKD || vasmkd |- | MKD3 || MKD |- | MKEY || CRUDER |- | MKH || Elfogadodhe |- | MKK || xorforever |- | MKM || Marksman |- | MKP || monkeyking |- | MKVMC || Kursius |- | MKY || m0nkey |- | ML559 || MiffedLyric559 |- | MLI345 || Bread Boi |- | MLK || Milkduster |- | MLM || Mellem |- | MLOS || Marlos |- | MLV || MOD Malvinas |- | MLW || MakeLoveWork |- | MM100 || Minimedic100 |- | MMH || MMHTsunami |- | MMK || MorMel reKreations |- | MMP || Military Mod Project |- | MMS || Marccom |- | MMT || sgtjonn |- | MMU || Mission Makers Unit |- | MMX || Madus Maximus |- | MMXX || .:mazed:. |- | MNICK || mnickels |- | MNKY || Jona |- | MNKY || Jona |- | MNKY || Jona |- | MNKY || Jona |- | MNN || marcosfnjf |- | MNYET || monyetswa |- | MOACH || moach |- | MOBY || Pro X |- | MOD || rodhalberd |- | MODBR || rodhalberd |- | MODEM || modEmMaik |- | MOK || bruteforce |- | MOKKA || Mokka |- | MOLO || Antonio Molo |- | MOM || Mother |- | MONS || BlueMonstro |- | MONSI || tjmonsi |- | MOO || mooncaine |- | MOOF || Moofins |- | MOOG || Moog |- | MOON || moonunit42 |- | MOPS || CfX |- | MOR || Morloc |- | MORI || Moriquendi |- | MORS || 5133p39 |- | MORTS || Morts |- | MOS || mossy |- | MOSH || Mosh |- | MOT || Motan |- | MOTIN || Motionman2008 |- | MOTO || BigBen |- | MOTOR || rodhalberd |- | MOU || Bell.K |- | MOW || Machines of War |- | MOX || MOXYJR |- | MP15 || Mantis |- | MP62 || Martinp62 |- | MPC || MultiPlayerCampaign |- | MPJ || Alezil |- | MPMC || GTR-34 |- | MPS || Double Doppler |- | MPU28 || kilroy952 |- | MPY || Moppy |- | MQS || muriloqsiqueira |- | MR85 || Master85 |- | MRAB || madrabbit711 |- | MRB || burns |- | MRC || Mrc |- | MRCA || MarcAlecai |- | MRCHO || MrChow |- | MRCMP || MrCappuccino |- | MRF || MrFata |- | MRG || Mrgascat |- | MRK || Operation Merkur MOD |- | MRM || Mr-Murray |- | MRMP || MrCappuccino |- | MRO || MisterO |- | MROM || Mromson |- | MROP || MrOwl |- | MRR || mikro |- | MRS || MrSherenai |- | MRSOC || MrSocomDude |- | MRT || MRT Accessory Functions team |- | MRVL || 2020Visionbut |- | MRY || Cadilakor |- | MRZ || MarcesscoMalkyre |- | MS || Dragnipur47 |- | MSA || Petie |- | MSALT || MashedSalt |- | MSBR || TRStinky |- | MSD || MustDie |- | MSDA || MrSocomDude |- | MSFIT || MisfitMaid |- | MSH || Messiah |- | MSK || Morthon |- | MSKEY || DineiDevos |- | MSMAP || brunoroseni |- | MSOT8 || Stump |- | MSP || Schilp |- | MSS || Spence |- | MST || Mostly |- | MSTEV || MRsteve |- | MSTH || [25th]Mountain Sheep |- | MSTK || KaulTheMystic |- | MSWD || Thereal-Chaseman |- | MT6 || Kokuroku |- | MTAC || Helikaon |- | MTB || MintyBoy |- | MTBR || fuchsmulder |- | MTCS || TheodoreM |- | MTEST || defusL |- | MTF || SenorMeltyface |- | MTG || lifeman |- | MTH || motho38 |- | MTI || Mokka/MokTech Industries |- | MTL || Metal Productions (Mads Furuvald) |- | MTM || Mr.ThunderMakeR |- | MTN || MaxQ |- | MTP || flaber |- | MTS || Tojo |- | MTY || Matyboy |- | MUD || Mud_Spike |- | MUG || GodsFist |- | MUHO || FDFj |- | MUKI || loki72 |- | MULF || TheSlufs |- | MUN || robert.munsey |- | MUNKE || Mun_key |- | MUPLA || multplaneta |- | MUR || J_Murphy |- | MURU || MugRuncher |- | MUX || MiauX |- | MVH || Mad Vince |- | MVR || mav |- | MWD || mwd2 |- | MWDOD || MWDodo |- | MWILL || M.Wills |- | MX || CRUDER |- | MXB || Mikeyxb |- | MXRY || Mixuray |- | MXY || MOXY |- | MYM || MightyMouse |- | MYMAP || orcadontist |- | MYN || MooN |- | MYT || Foley |- | MYUH || Jerimiah |- | MYZ || Yazza |- | MZA || Milky Bar Kid and Zippy Productions |- | MZP || MiszczuZPolski |- |}

=== N ===

{| class="wikitable sortable" style="width: 100%" | N0VA || novadose |- | N19 || Nano19 |- | N21 || At.St_Walker |- | N4DZ || namco-4 |- | N4P || XylofonKobra414 |- | N9NE || Midnightorder |- | NAAKK || naakkaparturi |- | NAAXA || naaksa |- | NAC || Larner6903 |- | NAF || Nogovan Armed Forces Mod |- | NAIL || Nailbomb72 |- | NAK || Vile Ace |- | NAKED || burtnaked |- | NALKSTUF || Nalkarauke |- | NAM || GodsFist |- | NANAT || DilutedSalt |- | NAPPA || GHoST_NApPA |- | NARA || Naranox |- | NARD || Nardypants |- | NAS || Ylguf |- | NASCO || Nascosta |- | NASSF || Black_Mantis |- | NATE || NAtionale Anti Terror Einheit |- | NATO || moritus |- | NAVAL || rodhalberd |- | NAZ || Rednaz |- | NBELL || Nicholas Bell |- | NBW || Nathan White |- | NCA || Nica |- | NCAFF || NCaffrey |- | NCE90 || NickEd90 |- | NCK || nick15654 |- | NDAC || nikos85 |- | NDJ || affraid |- | NDRN || Frostie |- | NDS || Neddles |- | NEA || NeoArmageddon |- | NEAL || nealsch |- | NEKO || kuroneko |- | NEL || Nelios |- | NEM || Nemesis |- | NEO || beowulf2014 |- | NERD || MrBoolean |- | NEREF || nÃ©rÃ©flo |- | NERO || Nero1986 |- | NETRS || George V |- | NEU || qba69 |- | NEURO || luckyluciano |- | NEW97 || sampmapper |- | NEWLF || Roran |- | NEWOR || burrd |- | NEXUSZ || sebafreitas |- | NEY || Neymeyer |- | NEZEL || hassenhoff |- | NF || h- |- | NF404 || Help_Im_Lost |- | NFACE || rodhalberd |- | NFC || Sauce, Mr_Sulli_Van |- | NFC3 || rodhalberd |- | NFCW || h- |- | NFS || Nfshotrods |- | NGG || Greatgraddage |- | NGL || NextGen |- | NGM48 || NGM48 |- | NGP || tipster1;Thomas White;Greg Smith;Floyd |- | NGS || JustKidding |- | NHK || lordkezlar |- | NHS3A || TheHutch |- | NIBB || fivenine |- | NIGHT || Nightwish1978 |- | NIK || nik |- | NIKE || TheNiki |- | NILCO || Nilcoireion |- | NIM || Northern Ireland Mod |- | NIN || GirrTheNinja |- | NIS || ejlemaire |- | NIT || NITRO |- | NIX || Nixer |- | NJDR || affraid |- | NKI || LEGION-Niki |- | NKM || x2dezjohn |- | NKNWN || Unknown |- | NKT || NekoTracker |- | NLAF || VXR |- | NLBS || ItsJustStan |- | NLD44 || Tuttie |- | NLDAF || OfficerGek |- | NLDO || Smootch |- | NLF || killmito |- | NLK || Filisecond |- | NLM || Fishu |- | NLRP || Guy Cutler |- | NLS || nameless |- | NMA || Noma |- | NME || neomagus00 |- | NML || No Man's Land |- | NMM || Nuclear_Man |- | NMMOD || Nuclear_Man |- | NNA || NNA |- | NNM || Bloberg |- | NNYA || MacBoy |- | NOAF || Stiltman |- | NOBAF || burns |- | NOBL1 || NoblGaming |- | NOF || freddern |- | NOLAG || nominesine, Laggy |- | NOM || Norwegian Mod team |- | NOMAD || Nomad Mod |- | NOMEX || Nomexe |- | NOMIN || nominesine |- | NOMM || FearsomeFenrir |- | NON || Noone |- | NONEL || Nonel |- | NOOK || el_P |- | NOOKA || el_P |- | NOOR || noordo |- | NOOVA || Novaline |- | NOQ || NoQuarter |- | NOR || NoRSu |- | NORAC || norac145 |- | NORAF || SceneryExplosion |- | NORD || Nordbo |- | NORG || NorGear Norwegian Armed Forces |- | NORRN || norrin |- | NORTH || h- |- | NOSE || Nosebai |- | NOT || Notorious |- | NOU || NouberNou |- | NOVA || RattSplat |- | NOVAL || Novaline |- | NPAM || Nam Pack Air Module |- | NPC || SoldierEPilot |- | NPCIT || Chuck Lebug |- | NPE || nick103 |- | NPM || SBSmac |- | NPTO || Not_PotatOS |- | NPTW || Napoleonm97d |- | NPW || GioSoupnazi |- | NRC || enarcy |- | NRPG || Nerds RPG |- | NRPL || SrDaju |- | NSBM || Blood Eagle |- | NSC || RobertJonesNSC |- | NSH || NSha1D0W |- | NSN || NotSoNinja |- | NSOF || Proxno |- | NSS || feb199 |- | NST || Sumrak |- | NSW || NinjaSayWhat |- | NSWC || VUSN042 |- | NSZ || CartoonrBOY |- | NTHB || NotaHappyBunneh |- | NTM || NATOMOD |- | NTMO || Notmo |- | NTX || nuttex |- | NUGS || Nuggit |- | NUKAF || Nikeleye |- | NUKE || NukePlant |- | NUM1 || rpoltera |- | NUN || NunoArstotzka |- | NUT || The KMan 3000 |- | NUTT || NuttyRabbit |- | NUTWK || NUTWORKS |- | NUX || nuxil |- | NV1 || Natversion1 |- | NVA || NVA-Mod Team |- | NVB || NavyBauer |- | NVBX || Nevbox |- | NVCHK || novacheck |- | NVTS || Legenden |- | NWD || NonWonderDog |- | NWDUL || j.ty.hall |- | NWF || spacecadett |- | NWO || NonovUrbizniz |- | NWOLF || Nightwolf |- | NX576 || RSF_Horn |- | NXG || NxG_Anima |- | NXS || sebafreitas |- | NYLON || CoreNylon |- | NYP || Singapore Home Grown MOD |- | NZB || Botanicus |- | NZBT || Botanicus |- | NZDF || New Zealand Defence Force Pack |- | NZDF2 || NZDF CRASH |- | NZDF3 || NZDF CRASH |- | NZDFX || A6 Intruder |- | NZL || almostOVERDOSE |- | NZLIF || iTzZJas0n |- | NZX || MR.B |- | NZX1 || NZXSHADOWS |- | NZX2 || NZXSHADOWS |- | NZX3 || NZXSHADOWS |- |}

=== O ===

{| class="wikitable sortable" style="width: 100%" | O1S || osol1tair3 |- | O311 || Cavs0311 |- | O3T || [L2K]s German Addon Tutorial Vers. 3 (ArmA) |- | O521 || theforeseen |- | OAC || kju |- | OAP || respawn |- | OAW || The Omega & a-lone-wolf |- | OBE || moberfel |- | OBL || obliv1on |- | OBO || Onkel Bo |- | OC1 || spartancain |- | OCD || Nixon |- | OCF || MOODQX |- | OCR || ocramweb Team =DST= |- | OCRAM || ocramweb |- | OCT || Octavian |- | OCU || 0cular |- | ODIN || cabewz |- | ODN || j-man |- | OEMOD || TomNedry |- | OFC || hdchristopher |- | OFCRA || OFCRA |- | OFD || OFP_f3d3 |- | OFFG || oifriendlyfire |- | OFP || todschlaeger |- | OFPDB || Operation Flashpoint Mission Database |- | OFPEC || OFPEC |- | OFPIP || the-f |- | OFPL || PL Mod |- | OFPS || SoldierEPilot |- | OFPTF || MI_Fred |- | OFR || einstein44 |- | OFRP || OperationFrenchPoint |- | OG420 || Stickyfingaz |- | OGD || SpikyPlatypus |- | OGI || obren2obren |- | OGR || DavidAtheist |- | OGRE || OldGit |- | OGRM || outlookgrim |- | OHL || K9 |- | OKA956 || Oka956 |- | OKI || antoniv |- | OKO || okoman |- | OKT || oktane |- | OKTY || Oktyabr |- | OKW || Vernichtend |- | OLDBR || OldBear |- | OLLI || Peter Haroski |- | OLY || olympi |- | OMA || OMaHTLD |- | OMAHA || seethingword |- | OMB || Cryptid87 |- | OME || Omega |- | OMG || The Omega |- | OMGI || NonovUrbizniz |- | OMP || Pillord |- | ONE || p1 |- | ONE8 || oNe8s3v3N |- | ONFS || operation flashpoint need for speed team |- | ONIX || DBR_ONIX |- | ONK || Onkel Bo |- | ONS || Abs |- | ONU || sonoboss |- | ONY || VivaLaViper |- | OO9 || mag009 |- | OOG || Oogieboogie |- | OOO || IMASoft |- | OORAH || JamesGarrison |- | OP1 || jimdangle |- | OP4 || ViperMcgee |- | OPB || Operation : Barbarossa team |- | OPEF || Operation Enduring Freedom |- | OPF || mr_shady |- | OPFG || bob123 |- | OPFL || Goschie |- | OPFOR || LoupVert |- | OPG || overpricedgorilla |- | OPGWC || Leone |- | OPJ || Jona |- | OPK || Frandsen |- | OPKID || Aldrone |- | OPP || Jona |- | OPT || Ultimatum |- | OPTRE || thedog |- | OPX || Opteryx |- | ORBX || BinaryPi |- | ORC || Orcinus |- | ORCUT || Firsk |- | ORDER || TheOrdersMaster |- | ORE || DavidAtheist |- | ORF || Macko |- | ORION || Orion |- | ORLY || OrlyNO |- | ORM || oRobin |- | ORNG || AppleOrange72 |- | ORS || orsone |- | ORUST || Vargen |- | ORWEL || Orwell |- | OS11 || hupfer |- | OSCER || OscerMike |- | OSE || Operation Snakeyes MOD |- | OSH || oshovah |- | OSK || Oskar |- | OSKO || Russellocean |- | OSS || GingaWRATH |- | OSSR || Faly |- | OTCP || Sgt. Anderson/Trident Team |- | OTE || otectg |- | OTI || banini |- | OTL7 || Outlawz7 |- | OTT || Ottie |- | OUB || OutbreakeR |- | OUF || Operation Urgent Fury Mod |- | OUT || Outlander |- | OUTER || OUTER GAMER |- | OVAS || ovas11 |- | OVI || Ovibag |- | OVT || aaronstatic |- | OW3 || Overwatch3 |- | OWAR || Cienias |- | OWL || O:W:L |- | OWN || Mellis |- | OWNER || LaserWiesel |- | OWP || Our Weapons Project (Nashe Orujie) |- | OWWW || OwwwThatHurts |- | OXI || Oxi |- | OYMAN || oyman |- | OZ || KatataFish |- | OZ3D || Ozono |- | OZR || DragoMican |- |}

=== P ===

{| class="wikitable sortable" style="width: 100%" | P0INT || p0int |- | P11 || podvoxx |- | P1350 || Phoenix1350 |- | P141 || itzphi |- | P3P || PepperMenthe |- | P613 || xXExiledPandaXx |- | P77 || Jona |- | P82 || CimaleX |- | P88 || Fuggschen |- | PABLO || PabloDiablo |- | PAC || zGuba |- | PACK || thepackett |- | PACP || zGuba |- | PAF || Pafetik Bazerka |- | PAJ || Jona |- | PAK || Pakman |- | PAL || Paladin |- | PALO || Palono |- | PANDA || [K.I.A.murcia] PandaPilot |- | PANIC || FranticPanic |- | PANTH || panthera283 |- | PANTS || Pants_Johnson |- | PANTZ || SilentPantz |- | PAR || johnparker |- | PARA || Paralyzed |- | PARAS || Stealth_Alpha |- | PARSC || parsec |- | PARTZ || Pvt. Partz |- | PAS || People's Army Studio |- | PASKA || Laur1x |- | PATAG || cptnnick |- | PATCH || patchs |- | PATHF || thecleaner |- | PAULS || Pauliesss |- | PAVE || allergic2life |- | PAYRO || Payrot |- | PAZ || pazzze |- | PAZE || Paze |- | PBC || pbcrazy |- | PBIT || paritybit |- | PBJ || suhsjake |- | PBL || Paintball Mod |- | PBM || Paintball MOD |- | PCA3 || PolyCat |- | PCANE || pcaneto |- | PCP || BBaY |- | PCRPG || SpawnThrasher |- | PCV || pcverden |- | PDB || Pandoras Box |- | PDC || MiraJu |- | PDG || XianGrim |- | PDH || PanDemiHuman |- | PDT || Fawks |- | PEACE || peacebob |- | PEARL || seethingword |- | PEB || Prancer |- | PEC || lucapec |- | PED || Predator |- | PEDRO || Pedro |- | PEE || needaweeman |- | PEER || Peer |- | PEG6 || BrenGun |- | PEGY || PegarosCZ |- | PEK || Pek |- | PEN || pennyworth |- | PENG || PenguinInATuxedo |- | PENIS || Sydcul |- | PER || Pachacutec |- | PERC || Colonel_Moustache |- | PERCD || PerceptionD |- | PERGR || PervasiveGroove |- | PERP || Perpetual |- | PERRY || perry_rhodan |- | PESTIS || Bilgecrank |- | PET || Russellocean |- | PET17 || peter1415 |- | PET24 || Petrich |- | PETNC || prestonchism5 |- | PEUH || 11004757 |- | PFE || TheWaltsu |- | PFH || Pfhaota |- | PFLP || LCD |- | PFU || PuFu |- | PFVK || paulofvkbo |- | PFWD || ThePointForward |- | PGKGH || eniac94 |- | PGS || pablogsalto |- | PH1 || Palehorse1 |- | PHA || Phantom |- | PHAHX || bluu |- | PHE || Phemetrix |- | PHER || pherik |- | PHIL || phillyb |- | PHU || Phusck |- | PIE || pi123263 |- | PIERS || Pierson |- | PIKE || pike713 |- | PILOT || Student Pilot |- | PINGU || pingu |- | PINV3 || mortdurone |- | PIRAT || PIRAT |- | PIXEL || Chicago |- | PJ1 || Jona |- | PJ111 || Jona |- | PJ12 || Jona |- | PJ77 || Jona |- | PJA || pjarnold |- | PJE || PatriotJake |- | PJETU || Pjetu |- | PJJ || Jona |- | PJJ77 || Jona |- | PJL || Pjlom |- | PKM || SoldierEPilot |- | PKO || PakoAry |- | PKR || Parker |- | PKW || YacieK |- | PLA || PLA MOD |- | PLAN || _William |- | PLAS || callumw2 |- | PLC || SpawnThrasher |- | PLD || Palador |- | PLDSA || PedroLuigi |- | PLK || Planck |- | PLP || poolpank |- | PLR || Prowler |- | PLS || Aarronious |- | PLUM || PlummerHD |- | PLXYABLE || PLXYABLE Team |- | PLZ || PolariZ |- | PMA || FlamedBanana |- | PMB || Pedro |- | PMC || InsetJesux |- | PMDR || paladinmcdragon |- | PMRV || PacmanRv |- | PMS || Phantom Modification Studio |- | PN915 || Person915 |- | PND || djp4nd4 |- | PNL || Pekuru |- | PNMOD || OnyxPhoenix |- | PNWMP || Neoluminum |- | PO1 || fallujahmedic |- | POC || Linkyman |- | POCEK || darkus |- | POD || Mikkelsen |- | POL || polat |- | POLI || SgtPoli |- | POLO || ehpolo |- | POLOK || Polok |- | POLU || ItsAkea |- | POO || GhostRanger |- | POP || otto |- | POPE || the_pope |- | POR || Skaven |- | PORSH || Porshen |- | PORTA || JosephPorta |- | POTAT || NightPotato |- | POUL || Poulern |- | POW || GodsFist |- | POWER || PowerBOX |- | POX || smallpox |- | POZU || pozuelo |- | PPP || Platoon Patton Projects |- | PPT || AlphaNeoFight |- | PQDPQ || pqdpq |- | PR3S0 || prestonchism5 |- | PR9IN || PR9INICHEK |- | PRA || -Para- |- | PRA3 || Project Reality |- | PRAA || DeanosBeano |- | PRAAA || Deadfast |- | PRACS || wld427 |- | PRAE || trapw0w |- | PRC || Kareca |- | PRCM || highlandff7 |- | PRD || PRDxcm |- | PRE || preca |- | PRECH || prestonchism5 |- | PREFIX || YouAreBamboozled |- | PRERP || NatanBrody |- | PRES || prestonchism5 |- | PRES5 || prestonchism5 |- | PRESH || phresh |- | PRF || Profecy |- | PRIM || Primzon |- | PRIME || gprime87 |- | PRJ || Piraj |- | PRL || A.Deubelskerl [DBK] |- | PRO || silesian |- | PROAF || Proaf0 |- | PROG || progamler |- | PROPE || PROPER MOD Team |- | PROWL || Prowler |- | PROX || TermiKiller |- | PRP || Private-Pile |- | PRSC || parsec |- | PRTK || parataku |- | PRY0 || primey0 |- | PSC || PSC |- | PSERV || Xaneas |- | PSG || Forry |- | PSNI || DrDank |- | PSORA || PsychOrange |- | PSQDM || kinhos |- | PST || Pochyst |- | PST30 || pastito30 |- | PSY || Psychic Productions |- | PSYFX || Psyfox |- | PSZ || zGuba |- | PT2 || leba101 |- | PTA || Smootch |- | PTG || Mutal |- | PTMAO || PowderedToastMan |- | PTR || [PTS] Panthers |- | PTS || Partisan. |- | PTSA || PipoTheSailor |- | PTW || PTW-105 |- | PTX || paleo |- | PTY || Pathfinder |- | PTZ || Partizan |- | PUB || TheLocalPub |- | PUB1 || TheLocalPub |- | PUD || Puddleflop |- | PUDD || Puddingdwarf |- | PUFIN || RagingPufindail |- | PUG || KainIronmonger |- | PUK || ProjectUK |- | PUL || Pringles |- | PULSE || Cobra@Pulse |- | PUN || Punk |- | PUNK || Lorelei |- | PUP22 || Puppa |- | PUPZ || Kefvski |- | PUREG || vicious |- | PURGA || CoffeeFluff |- | PURP || drewdevelops |- | PUSH || Pushtan |- | PVDV1 || TheHelmetHead |- | PVP || sbsmac |- | PVPFW || Conroy |- | PVT60 || Pvt. Partz |- | PVTGN || PRIVATE_GREEN |- | PWA || Umbarion |- | PWE || PENNYWISE |- | PWR || Poweruser |- | PX1 || Richie |- | PXH || pixelhenne |- | PXMO || iTrAmPzi |- | PXS || Pixel Art Studio |- | PYN || pynaple |- | PYP || SOPMOD |- | PYR || pyrofriendie |- | PYRO || pyro05x |- | PZ23 || T.Muller |- | PZB || PizzaBoytjuh |- | PZE || Paze |- | PZF || Pizzafreak5 |- |}

=== Q ===

{| class="wikitable sortable" style="width: 100%" | Q11 || Q1184 |- | QAZ || qazwsxal |- | QKG || quakergamer |- | QNICO || Cunico |- | QRK || GrandNagusQuark |- | QTZ || CRUDER |- | QUA || SamWarren |- | QUAD || QuadBLScopes |- | QUAG || McQuag |- | QUAN || Motra |- | QUEL || quelphath |- | QUI || Quinncunx |- | QUK || quantum |- | QWERT || Qwertyalex |- | QZG || GooseQZG |- |}

=== R ===

{| class="wikitable sortable" style="width: 100%" | R0CK || Rockoria |- | R2112 || 00doubleoh |- | R25 || Chris1986 |- | R34L || Steezy |- | R3D || ScotG |- | R3F || clint |- | R4L || J117 |- | R974 || Christopher974 |- | R98 || redoper |- | R981 || redoper |- | RA256 || RusselAngelos |- | RAA || riksuFIN |- | RAB || Rabidus |- | RAB18 || 18Rabbit |- | RABB || rabbity |- | RABIT || R@bbiT |- | RABS || Rabs |- | RACKY || Racky |- | RACS || FA Dalai Lamar |- | RAD || Hudson & Pennywise |- | RADAR || Radarcontact |- | RAE || raedor |- | RAF || NZXShadows |- | RAFAS || shoXy |- | RAFO || Rafo23 |- | RAFT || Grimlock |- | RAFTY || Rafters |- | RAG || {442}RangerNick |- | RAGE || RagingPufindail |- | RAGE4 || RagingPufindail |- | RAGEP || RagingPufindail |- | RAGES || Rage |- | RAGEZ || PinkLegacy |- | RAIZE || Raizer91 |- | RAL || ralian |- | RALLY || escortrally |- | RAM || Ramzi Sah |- | RAMA || ramissin |- | RAMC || Royal Army Medical Corps |- | RAMP || DutchMuffin |- | RAN || Rancid |- | RANCO || Rancorusia |- | RANG2 || theranger12 |- | RAO || Ogrinho83 |- | RAOA || Ogrinho83 |- | RAP || Rapter |- | RAPT || RaptorBravo5 |- | RAS || Rastavovich |- | RASH || Rashomon |- | RAT || shinRaiden |- | RATS || rats404 |- | RAV || ravetree |- | RAVE || corvus |- | RAVEN || Raven3.14 |- | RAW || REAL ADDON WORKSHOPS |- | RAX || RaXaR |- | RAY || ran (the.yan) |- | RAYK || RayK |- | RAZOR || razoraresharp |- | RAZR || stolzerrabe |- | RAZZ || Razzolution |- | RB211 || rorybateman |- | RBB || Ranger Bob |- | RBB83 || robborobbo |- | RBL || SoulRebel18 |- | RBLM || Rebel Man |- | RBM || Rhodesian Bushwar Mini-mod |- | RBN || Roaban |- | RBRE || ribera1945e |- | RBRS || rbrs |- | RBS || ruhigBlut |- | RCC || 1RCC Kay |- | RCD || Redcloud |- | RCDC || redleouf |- | RCFG || joemoemino |- | RCHT || RatchetTheWusky |- | RCIR || zandhaas |- | RCK || Rockeye |- | RCO || RicoADF |- | RCP || Nahuel |- | RCT || Nasogx |- | RCX || rodhalberd |- | RDAM || Faab |- | RDC || Bod57 |- | RDD || Stiltman |- | RDF || Royal Danish Forces |- | RDGUN || redgun |- | RDI || Rhodes |- | RDK || RaoulJWZ |- | RDLS || venter08 |- | RDP || 11RDP |- | RDS || Reyhard Addons |- | RDW || mhodgson89 |- | RDX || raid3n |- | RE974 || Christopher974 |- | REACH || Leshrack |- | REAL || RA_Thirias |- | REALDO || Realdo |- | REALQ || vovi |- | REBEL || RebelCid |- | REBO || MrRebo |- | REBOR || Ltc-Bullet |- | REBUS || Rebus |- | RECON || Sniper Recon |- | RECON2 || RedRecon |- | RED || RED |- | RED1 || redoper |- | RED11 || REDDAWG 1 |- | REDB || RedBeard |- | REDBA || red_bandit |- | REDO || redoper |- | REDOP || redoper |- | REE || Resident Emil |- | REEP || Cockney Reeper |- | REFRB || RefinedRubbr |- | REH || reh052965 |- | REI || reiler cardoso |- | REIDY || Reidy |- | REIT || Reitherfuzi |- | RELS || A.Deubelskerl [DBK] |- | REM || Lt. Hawkins |- | REM41 || REM41 |- | REN || Cpt_Overlord_ |- | RENG || Renegade Gaming Management |- | RENZ || Renz |- | REOX || reox |- | REP || gogus12 |- | REPZ || Repz |- | RES || BIS |- | RESR || Planck |- | RESTK || ReStrooke |- | RETR || fsxfreak |- | RETRD || Spire1812 |- | REUST || reustonium |- | REV || revellion |- | REV1 || super-truite |- | REVEN || Reven_Darkwood |- | REVN || Revan9190 |- | REVO || Real Men of Genius |- | REX || Rastic & Eamoe |- | REXS || RASmith1030 |- | REXX || Rexxenexx |- | REY || reyemlrak |- | REZ || rezende2352 |- | RFFAZ || AzzaR4 |- | RFL || shoXyRafael |- | RFLO || RFlorea |- | RFLY || Airfly |- | RFR31 || RavenFR31 |- | RFV || registered_fugitiv |- | RFX || cc114 |- | RGBOB || Bobby_McDangle |- | RGE || Rageman |- | RGM || RG_Murphy |- | RGMS || RaccoonGaming |- | RGN || bitto |- | RGO || Darkstar |- | RGR || Evan Kev |- | RGR21 || bjacobs9944 |- | RGT || Rangerteam |- | RGTF || TheIcarus |- | RGY || ryguy |- | RH96 || rustyhook96 |- | RHA || BbGunroo |- | RHARP || Cots |- | RHB || RichUK |- | RHENN || rhennigan |- | RHI || RobertHammer |- | RHO || rhodesy_77 |- | RHOD || RhodesianScout |- | RHP || NyremC |- | RHR || RedheadedRed |- | RHS || Red Hammer Studios |- | RHSCA || Abaddon |- | RHX || rodhalberd |- | RHZM || rhzm23 |- | RIA || Liam McKendrick |- | RIBER || ribera1945e |- | RIC98 || Herpyderpy987 |- | RID || Walthzer |- | RIGGI || GRSteelers |- | RINJ || RinJ |- | RIO || MyransGhost |- | RIP || randyandy |- | RIVAL || Rosellonsito |- | RJDEV || Ronald |- | RJM || RjM |- | RJS || Robert James Sullivan |- | RJT || nindall |- | RKKA || badanov |- | RKN || Runekn |- | RKSL || Rockape |- | RKT || footmunch |- | RKTCO || Rocket Taco |- | RLK || FA Dalai Lamar |- | RLP || kinhos |- | RLRPG || CreedSun |- | RLS || Denisko-Redisko |- | RM104 || Rom104 |- | RMC || rm_snipe |- | RMCTJ || ipagewebsite |- | RMG || ramgee |- | RMM || Rommel |- | RMMU || RMMU_Gibbs |- | RMO || jamick94 |- | RMP || Romnipotent |- | RMR || Reimarus |- | RMS || rm_snipe |- | RMY || Orakel78 |- | RN974 || Christopher974 |- | RNBAM || RazMan83 |- | RNE || Escobar_RN |- | RNJ || nordvang |- | RNK || GerDeBuX |- | RNM || Williamson |- | RNY || Rainey |- | RO4 || Roaban |- | ROA || Roach |- | ROAB || Roaban |- | ROB || ausimus |- | ROB21 || Rob21C_UK |- | ROBB || Roaban |- | ROC || Macko |- | ROCH || Caillou |- | ROCK || SoldierEPilot |- | ROCKO || rocko |- | ROD || rodhalberd |- | RODEO || Rodeostar42 |- | RODI || FlintForossa |- | ROF || rofice |- | ROFL || roflpie |- | ROFL8 || ROFLer |- | ROHO || Bastet |- | ROJ || Yourry |- | ROK || rokket |- | ROKM || RokMelon |- | ROKME || RokMelon |- | ROM || romanze87 |- | ROMEO || Romeo Foxtrot |- | ROMM || Rommel92 |- | RONE || affraid |- | RONIN || Dotanuki |- | ROOK || Moses |- | ROOT || xMidnightSnowx |- | ROPEY || Ropeytwo |- | ROR || ROR |- | ROS || Régiment des Operations spéciales |- | ROSEB || matthew.sm |- | ROSS || rossoe |- | ROW || Robnewww |- | ROX || [ROX]Rocku |- | ROY || roykingtree |- | ROYAL || RoyalTS |- | ROYSC || Royal351 |- | ROZC || ROZC team |- | RPG || rolandinho |- | RPL || RangerPL |- | RPM || Raptor-Man |- | RPS || Schwimmfreak1 |- | RPT || Raptorsaurus |- | RPTR || EmRaptor |- | RRB || RabsRincon |- | RRCJM || JamesMason |- | RRL || grimmeral |- | RRYD || RedRyder |- | RSA || rubaka |- | RSF || Royal Silver Falcons |- | RSG || Scoobz187 |- | RSK || Raserisk |- | RSK2003 || Ryski |- | RSKEW || Siuqram_ |- | RSKY || Ryski |- | RSL || Radiosilence |- | RSLO || Riouken |- | RSO || SpookyGnu |- | RSP || Raging Storm Productions |- | RSQ || AWildBrian |- | RSS || Red Star Studio |- | RST || Volk |- | RSTM || TheodoreM |- | RSTTV || Soda_ |- | RSW || Raven Sheep Wolf |- | RTA || Jakerod |- | RTF || Rastafa |- | RTF42 || Fr4nKy |- | RTI || The War of Last Man |- | RTK || Rutek |- | RTMS || Goschie |- | RTR || RTR_Commander |- | RU23 || Iexpertman |- | RUB || RubberKite |- | RUBE || ruebe (rÃ¼be) |- | RUEB || Rübenritter |- | RUF || Ruffled Grouse |- | RUG || Wolfrug |- | RUIZ || Sklaven |- | RUK || rexehuk |- | RUM || Meatball0311 |- | RUMP || DrRumpPhD |- | RUND || rund |- | RUS || AND |- | RUSK || D_J_LMeyer |- | RUSS || Dakir |- | RUTLAND || Landfaller |- | RUUL || live:.cid.af0d27413f371e0 |- | RVCS || Yuri |- | RVN || Raven |- | RW18 || Razorwings18 |- | RWC || raid3n |- | RWD || Zelik |- | RWF || Rathwulf |- | RWM || Crytech |- | RWS || joshpier3 |- | RWT || longbow |- | RWTS || longbow |- | RX8 || msiarx8 |- | RXO || Rxo |- | RXO01 || Rxo |- | RYAKR || ryakr |- | RYAN || Ryan |- | RYANL || ryry_208 |- | RYD || jackryder |- | RYJMC || ryanjmcmanus |- | RZN || Rezin's Addons |- | RZT || Razzmatazz |- |}

=== S ===

{| class="wikitable sortable" style="width: 100%" | S0120 || steven00120 |- | S117 || SIDNESS |- | S13 || Sierra 13 |- | S2040 || s2040 |- | S2300 || Sgt.Toaster |- | S47KA || mkfester923 |- | S4G || Cunico |- | S63 || Spectre-63 |- | S73OB || s73obrien |- | S75R || Seavea |- | S76 || #76 |- | S76S || #76 |- | S8B || Soldier8Boy |- | S8S || [S8S] Vapor |- | SAAF || Floosy |- | SAB || Sabelzahntiger |- | SABAS || SABAS |- | SABB || Dr.Death JM |- | SABER || SoldierEPilot |- | SAD || sad |- | SADGG || thegoatman |- | SADIZ || CT-7567 |- | SAF || Mellis |- | SAFAR || Safari |- | SAFFG || prestonchism5 |- | SAG || JemsKeks |- | SAGE || sagefhopkins |- | SAGO || Sago |- | SAH || Sahbazz |- | SAHEH || Sasc_ |- | SAIGN || Saigon Flashback |- | SAK || Hateboarder |- | SAKS || sakstoki |- | SAKU || SaschQuasch |- | SAL || Sabre, Ardvarkdb and Lennard |- | SALAD || koalasalad |- | SALB || gamersasa |- | SALT || zisb |- | SALTY || Salty McHaggis |- | SAM || Stiltman |- | SAM1 || samwardle1 |- | SAMA || Sama |- | SAMAX || Samax |- | SAML || samotion |- | SAMR || samir17864 |- | SAN || Sanchez00 |- | SANDF || hellfish6.2 |- | SANDI || Sandiford |- | SANDY || SandyBandy |- | SANDZ || Sandz |- | SANZ || Sanzhere |- | SAP || Sgt.Ace |- | SAPP || Sapper |- | SAR || The KMan 3000 |- | SARO || Sarogahtyp |- | SAS || Smart Ass Scripters |- | SASC || Sasc_ |- | SASM || SASMOD |- | SASR || Anmac |- | SAT || Atsche |- | SATR || Satire |- | SAU || Sauen |- | SAV || steggieav |- | SAVOT || Savot |- | SAW || shaneuk |- | SAX || SAX |- | SAY || SniperAndy |- | SB101 || SteveBuchanan |- | SBAC || SBacon |- | SBAY || ScriptingBay |- | SBE || sabre19 |- | SBFR || www.shark-bambi.fr |- | SBG || savedbygrace |- | SBJ || Team SBJ |- | SBLK || SomeBloke |- | SBR || saber3 |- | SBS || Flax |- | SBT || Smootch |- | SBW || SabinoWess |- | SC9 || scars09 |- | SCA || Scaatis |- | SCANIA || PentiumD |- | SCANY || Flames09 |- | SCB || ScottyB |- | SCC || CollCreper |- | SCE || Reidond |- | SCF || vektorboson |- | SCG || DragonGurdian5 |- | SCHEP || Drake Vhett |- | SCHS || Howl Shepard |- | SCHTZ || Schultz |- | SCJ || ScouseJedi |- | SCM || scabstermooch |- | SCN || SCFan42 |- | SCO || [= M Troops =]scouter |- | SCOM || TheCaptain |- | SCOO || Scoo Studios |- | SCOOB || Scoob |- | SCOR || DSV |- | SCOTT || Scotty1207 |- | SCOUT || proeteus |- | SCPAR || Tyran |- | '''SCR''' || '''{{Name|bi}}''' ({{Name|armaR|short}}) |- | SCRIM || sgeour |- | SCT || reconscout |- | SCU || xneilyox |- | SCUBA || sgtscuba |- | SCY || Scythax |- | SD48 || sleepydragon4888 |- | SDJ || RDL109 |- | SDK || ShAdOwKiller |- | SDL || Shaun Lepisto (aka TheShadow) |- | SDM || Sodom |- | SDMF || krik killer |- | SDN || Sandman |- | SDOC || sdoc |- | SDP || Sudden Death Projects |- | SDR || silderoy |- | SEA || Sefe |- | SEAD || Sefe |- | SEALS || rocha amry 3 |- | SEB || SelectThis/ebud |- | SEB01 || Seb |- | SEB11 || Sawyer11 |- | SEB3 || seb3sec |- | SEBA || sebandrez |- | SEBAS || SebasSalazar |- | SEC || Somerset Editing Consortium |- | SED || physhack |- | SEF || Sefe |- | SEFE || Sefe |- | SEH || seedhe |- | SEJAR || Nizo117 |- | SEK || Sekra |- | SELRK || Selrahk |- | SEOW || 4Shades |- | SER || Serializer |- | SERC || Serclaes |- | SERO || seroktika |- | SES || Wildgoose |- | SETH || JustSeth |- | SEV || SEV |- | SEV07 || sev501cc7001 |- | SFC || sfc.itzhak |- | SFF1 || SFF |- | SFG || SFG |- | SFM || Spetsnaz Mod |- | SFP || Swedish Forces Pack |- | SFTY || SafetyCatch |- | SFUK || Pxzys |- | SFX || Silent Fox |- | SGA || BTK |- | SGB || sgtbarnes73 |- | SGC || SGCTrooper |- | SGCA3 || Ace |- | SGCOL || Jutka |- | SGF || sgt-franko |- | SGH || sgtGunneryHighway |- | SGL || SigiL |- | SGM || Master0r0 |- | SGM82 || SniperGhost |- | SGMAP || frizensami |- | SGN || Sgt_Nathan |- | SGP || AcadianCrusader |- | SGREG || praguado |- | SGRT || ScreamingRobot |- | SGS || Sarge |- | SGT || tgm0 |- | SGTB || SgtBryne |- | SGTEV || Sgt Eversman |- | SGTF || SgtFlyer |- | SGTW || SGTWilliams |- | SGUN || SmokingGun |- | SGW || someguywho |- | SGWD || SGTWilliams_Daddy |- | SGWZ || Sturmgrenadier Warzone |- | SHA || Shakal |- | SHAD || shadow64 |- | SHADC || ShadowCola |- | SHADO || aviax |- | SHAE || shaeone |- | SHAKA || shaka |- | SHAL || shalazan |- | SHANG || Ketzl |- | SHAW || Shadow1 |- | SHAY1 || Shayamal |- | SHB || jockeyboy2_0 |- | SHED || shed |- | SHEEP || fallingsheep1985 |- | SHEZ || shezan74 |- | SHG || Shogun |- | SHGL || Bob Winser |- | SHIP || rodhalberd |- | SHK || ShakI |- | SHL || sheltem |- | SHM || Shamwill |- | SHNK || Shennko |- | SHOE || w33n33s |- | SHOK || CaptainWalker |- | SHOW || showmaker |- | SHP || MyersTheShape |- | SHREK || DavidAtheist |- | SHRTB || short boi |- | SHRTY || Shorty |- | SHS || ShadeySam |- | SHY || Shockley |- | SHZ || Shiza |- | SIA || Liam McKendrick |- | SIA3F || Soldiers In Arms |- | SIC || SiC |- | SICUK || SiC_UK |- | SID || Sidthesloth |- | SIG || EAGLE_Sigurd |- | SIGDT || SiGclan |- | SIGE || SiegeToaster |- | SIGHT || CFSight |- | SIGM || EckoMoire |- | SIL || silderoy |- | SILASP || Petrich |- | SILOS || bstocks32 |- | SILV || spSilver |- | SIM || Simonpro |- | SIMHQ || Wepps |- | SIN13 || Fugitive2013 |- | SING || singlot |- | SINGL || singlot |- | SINK || Sniki |- | SINO || hiddenzone |- | SINON || Sinon50BMG |- | SINOP || koptwo |- | SIR || SirDude |- | SIRK || sirklejerk |- | SIS || siredwin24 |- | SITC || Quinncunx |- | SITHX || sithixc |- | SIV || Sivutle |- | SIXX || Neko |- | SJB || Jackal326 |- | SJDVD || SSJDiVaD |- | SJH || mesh |- | SJK || sojaku |- | SJM || SanjuromackOFP |- | SJM50 || SJM505427 |- | SJOUL || sjoulbak |- | SK1 || Sigie |- | SK3Y || Sk3y |- | SKA || Ska1ix |- | SKB || Skeltoras |- | SKBOZ || theworrior |- | SKBT || Bareen |- | SKC || Skaircro |- | SKE || Special Kodo Edition |- | SKEG || skeg_man |- | SKEL || Skeltoras |- | SKEYE || skeye |- | SKI || skiline5 |- | SKIRA || GENPrice10 |- | SKIS || Foxtrotter |- | SKM || Skumball |- | SKN || Mr.Skellington |- | SKRS || Fire Vine |- | SKS || ViconX |- | SKSE || SK-SE |- | SKT || SilvesterKilledTweety |- | SKULL || Ginsu |- | SKUNK || skunk |- | SKW || Skewballzz |- | SKY || stankywizzleteets |- | SKYE || SkyeGuy |- | SLAP || Slapstick |- | SLAT || SlatDogg |- | SLAW || slawterer |- | SLAY || slayercccp |- | SLIMY || theycallmehslimy |- | SLIVE || steviedlive |- | SLK || Solski |- | SLNSH || SlaaneshiBoi |- | SLOTH || wantafanta |- | SLOTHA || HowSloth |- | SLOW || Slowrider8 |- | SLP || Sleepingbag |- | SLR || ArmA-RPG |- | SLRHK || Selrahk |- | SLS || S. Snake |- | SLT || Silent_64 |- | SLX || Solus |- | SLYNX || SlovakianLynx |- | SMAG || swissMAG |- | SMANG || sMangust |- | SMB || Sock Monkey Brigade |- | SMBD || Some_Belgian_Dude |- | SMBJS || BJS |- | SMC || Smoking Cloud |- | SMCB || Scouty_McBird |- | SMD || NonovUrbizniz |- | SMDC || Rapter |- | SMES || dech81 |- | SMF || sneakymcfox |- | SMG || Scumbag |- | SMHL || smalhill |- | SMITH || Igor "Smith" Petruchek |- | SMK || XWP-Smoke |- | SMKS || smurkus |- | SML || Smile89 |- | SMM || AAB |- | SMO || Smokeylope |- | SMOKE || SmokeDog |- | SMOON || salamouis |- | SMP || Sandro M. Passos |- | SMPR || Semperfid |- | SMR || shlomo |- | SMS || Syrtis Major Studios |- | SMT || Pennyworth |- | SMW || Sage |- | SMY || smallfly |- | SN4 || thesn4k3 |- | SN90 || spacenavy90 |- | SNA || snafu |- | SNACK || Snack |- | SNAFU || indecimal |- | SNAKE || Snakeater |- | SNB || SirPsychoBerg |- | SNBN || SeenBeen |- | SNBZ || Skullnbonez |- | SNC || -Sonic- |- | SNCHZ || Sanchez |- | SND || Sandman |- | SNEAK || SneakyBeaver |- | SNEAKY || SneakyAzWhat |- | SNFO || nfosam |- | SNK || SolidSnake-(SNK) |- | SNLNG || Sneling |- | SNO || LeahSnow |- | SNOW || Snowflake |- | SNS || Stormtrooper and Skaven |- | SNW || Snekw |- | SNWO || NonovUrbizniz |- | SNY || snYpir |- | SO9 || Spec Op 9 |- | SOAP || soapboxsubmarine |- | SOAPY || thediscript |- | SOAS || WarLord554 |- | SOB || Sobric |- | SOBS || Guardian |- | SOC || Meatball0311 |- | SOC36 || 36SOC |- | SOCAL || BarnesBL0278 |- | SOCOM || radicalatheart |- | SOD || Trash Can Man |- | SODS || Nalv Arrac |- | SOEP || Jesper |- | SOFMF || sofmisfortune |- | SOFS || Camouflage |- | SOG || DirtDiver |- | SOGC || JDubbSOG |- | SOI || solomani |- | SOLTG || 1(nld)soltg |- | SOPROTIV || studzy |- | SOSP || bigpickle |- | SOTD || sotdyeti |- | SOTO || Tomms123 |- | SOUL || Spiedr |- | SOULY || souly |- | SOUTH || southy |- | SOW || CrashDome |- | SOYU || Soyunidota |- | SPA || aulero |- | SPACE || spacerules |- | SPAG || Lord_Spag |- | SPAIN || pozuelo |- | SPAIS || Spaceballcookie |- | SPANK || SpankFrank |- | SPAR || Sparib |- | SPARTA || TheSparta |- | SPB || Spackenbremse |- | SPC || Scorpio |- | SPC4 || cunico |- | SPD || spider |- | SPDY || Speedy |- | SPEC || spec |- | SPEC4 || cunico |- | SPECE || JSpectre |- | SPECT || SpectrumWarrior |- | SPEED || Speedy1978 |- | SPENC || marsuk21 |- | SPF || spiffalski |- | SPG || switchplategaming |- | SPG44 || Verus12b |- | SPGDZ || Spounge84 |- | SPHD || Spearhead |- | SPI || Almightyom |- | SPICY || Scoob256 |- | SPIF || spifmo |- | SPIL || Victor94,Bamupa,SpainIsLife Team |- | SPIRIT || kaiotcp1 |- | SPK || Spyke |- | SPKEY || kaiotcp1 |- | SPKG || SpookyGnu |- | SPM || Isardy |- | SPM8R || spamin8r |- | SPN || scorpion |- | SPNY || spacenavy90 |- | SPON || Spooner |- | SPOTT || spottersblink |- | SPR || SparK |- | SPRK || Dreager |- | SPRUT || Spruten |- | SPS || Stalker Production Studios |- | SPT || patr1 |- | SPTFR || Spitfire1102 |- | SPUDS || McSpuds |- | SPUR || Spur |- | SPV || Supervenio |- | SPWE || Remus111VADT |- | SPWNH || Spooneh |- | SPY || Spyder001 |- | SPYLO || spylon |- | SPYR || parsec |- | SPZ || Spetznatz |- | SQD || ubersquid |- | SQL || Squelch |- | SQU || Squeeze |- | SQUIL || onepantsuman |- | SQUIZ || squizzy |- | SQY || squidy08 |- | SR5 || Crasso |- | SRA || Marseille77 |- | SRAF || Jastreb |- | SRAT || Spac3Rat |- | SRB || Radnik |- | SRG || Sergei_Q |- | SRK || Serial Killer |- | SRL || surrealalucard |- | SRM || Devilsartist |- | SRP || Sr.Pomidor |- | SRRA || SRPSKI RATNIK |- | SRSGS || Jutka_GHG |- | SRSR || StonedRhino |- | SRT || ScreamingRobot |- | SRU || Spackenbremse |- | SRV || BTK |- | SRX || shinraiden |- | SS3 || CaboVieira |- | SS38 || Cowboy |- | SS9 || SickSidewinder9 |- | SSA || SirSmok@lot |- | SSAL || ssalaza |- | SSC || SScrivener |- | SSDD || Darkhorse-1-6 |- | SSG || SSG Squad Modworks |- | SSGAR || SoYouDie |- | SSK || lilmock22 |- | SSM || minuzed |- | SSQD || TheG4Gaming |- | SSS || Spanish Sniper Squad |- | SST || Starship Troopers Mod |- | SSTRM || SandstormA3 |- | SSV || Sole |- | ST3 || st3rv |- | ST6 || Joey King |- | STA2 || Abs |- | STAF || Moony |- | STAHL || CYXAPNK |- | STAOS || Staos |- | STAR || startrekern |- | STARF || Starfanger |- | STARG || TheSenate |- | STASH || St5ashy |- | STAT || Staticky |- | STBE || Stickie |- | STBIA || lieutenantlz |- | STD || Swatdog |- | STDR || Sparfell_19 |- | STE || SelectThis, Ebud |- | STE86 || Ste86 |- | STEAK || humansteak |- | STEIN || SteinTroll |- | STEOT || StealthyOtter |- | STERK || sterkt |- | STEYR || Liberator |- | STFU || Vixer |- | STG || Woods |- | STGN || STGN |- | STGST || Stormgast |- | STH || Solttuh |- | STI || Stiltman |- | STICK || Br |- | STIVI || [SONAF]stivik |- | STK || stijniman |- | STKR || STALKERGB |- | STL || STEELE |- | STLGD || ph_enix |- | STO || Strike Tactical Operations |- | STONE || stonecold |- | STOO || stoo65 |- | STORK || kuba14063 |- | STOSN || Arioio |- | STOV || Storied.Veterans |- | STP || ShrewdTactician |- | STPMC || Spartan Tactical Group |- | STPUP || fence |- | STR || Stress2 |- | STR8 || Str8jackitz |- | STRA || Gaia ArmA Missions |- | STRAT || Strat |- | STREE || michelvanw |- | STRM || stormridge |- | STS || Status_cz |- | STSDE || Deathhood98 |- | STSU || EroMusha |- | STT || SelectThis |- | STTH || Steffen Thomsen |- | STTS || SauronTs |- | STU || StuKa |- | STUBB || stubbies |- | STUMP || Stump |- | STURM || Sturmovik |- | STY || styles2304 |- | STZ || Steezy |- | SUB || subminuentisch |- | SUBAR || subarulibtard |- | SUCH || suchey |- | SUD || sudden |- | SUKH || CYXAPNK |- | SUL || SULcorpÃ‚Â© |- | SULLY || Sully |- | SULO || Soolie |- | SUM || Beton |- | SUOMI || wuffe |- | SUP || Superchaschper |- | SUPER || super-truite |- | SURPH || surpher |- | SVD || Dragunovska |- | SVG || StrohVogel |- | SVN || Sven2157 |- | SWAF || Exodus_SWAF |- | SWAG || bozott |- | SWAGG || swaggy |- | SWAGU || Chazillor |- | SWAMP || swampy |- | SWC || shadow552 |- | SWE || granQ |- | SWEC || Coward_Heart |- | SWEDE || Swede295 |- | SWEE2 || Seaweed |- | SWEED || Seaweed |- | SWF || swordfish |- | SWFLA || shockwaveflash |- | SWI || PicVert |- | SWIFTPAW || Fox Swiftpaw |- | SWISS || Bibo164 |- | SWM || Switzerland Mod |- | SWO || SilverWolf |- | SWORD || SoldierEPilot |- | SWP || Patrik.91 |- | SWR || Soviet War Rebellion |- | SWRSW || JarredT1029 |- | SWT || SWIFT88 |- | SWU || Turnip Dreams |- | SX69 || Schneidex69 |- | SY4 || sy4 |- | SYD || Syd Zedler |- | SYDD || Sydney |- | SYF || syphboy |- | SYG || sygsky |- | SYM || Synide |- | SYN || Synide |- | SYNA || Syna |- | SYNC || Syncing |- | SYNCO || SYNCO |- | SYNCY || Syncy34 |- | SYNDE || Synide |- | SYNG || jester |- | SYNWR || SynWreck |- | SYNXE || Synxe |- | SYP || syphobia |- | SZE || Szephi |- | SZEPY || SzepyCZ |- | SZM || Tow. Szumek |- | SZRP || zGuba |- | SZWAGIER || Szwagier |- | SZY || Szymanski |- |}

=== T ===

{| class="wikitable sortable" style="width: 100%" | T0BI || T0bi |- | T0MMY || Tommy |- | T147 || TITO147 |- | T1CW || Spyder001 |- | T2P || t2p |- | T3D || volchara |- | T3G || DarthWeasel |- | T4G || TGG |- | T4TH || combs |- | T5051 || Finnoraven |- | T69 || tanin69 |- | T6CL || CliffracerX |- | T9988 || timo9988 |- | TABOU || equipier_sas |- | TAC || Theseus Inc. |- | TACD || Tactical Distractions |- | TACDB || Tac |- | TACER || atacticalerror |- | TACG || Cat Harsis |- | TACGT || Theseus Incorporated |- | TACHI || th3flyboy |- | TACO || YarX |- | TACP || tacplay |- | TACRG || Armaholicer & Shorty |- | TACS || Theseus Services |- | TACSO || Theseus Incorporated |- | TACT || Tactician |- | TACTG || Unkl |- | TACTR || PeenerShot |- | TAFM || Bread Boi |- | TAG || Nixon |- | TAGBL || BigLebowski |- | TAGD || Dickcheney |- | TAGR || Missile Magnet |- | TAGTC || BigLebowski |- | TAGTS || BigLebowski |- | TAH || Snakeater |- | TAHO || Snakeater |- | TALI || TALIHAM |- | TALIT || thomasbeech123 |- | TALLTEX || TallTexGuy |- | TALM || alminator |- | TALOS || Tristanxh |- | TAM || synQ |- | TANK || rodhalberd |- | TANK6 || Tank615 |- | TAOST || t0ast |- | TARI || Tari |- | TARMA || TurmaApe |- | TAROV || Nickarma3 |- | TAS || Thomas |- | TAS88 || Schrödinger |- | TASM || AlphaSquad |- | TASMA || Tasman83 |- | TASO || CYXAPNK |- | TASRPT || DooieHaai |- | TAST || Team Alpha Studios |- | TAT || pointblank |- | TATER || Tatertot |- | TATH || Tath |- | TAV || Tavish |- | TAW || JonBons |- | TBA || Tom_Anger |- | TBC || kraftholocism24 |- | TBLST || Tablesalt |- | TBM || NatherAylomen |- | TBN || T_Bone |- | TBO || T-BO |- | TBR || thebarricade |- | TBS || tbsthug |- | TBST || Tablesalt |- | TBW || DaaRuski |- | TC6 || Rubble_Maker |- | TCA || Masterofdie |- | TCE || SoldierEPilot |- | TCGE || thecubegaming |- | TCGM || TaurusCGM |- | TCGN || thecubegaming |- | TCGNO || thecubegaming |- | TCM || The Corps Mod |- | TCN || TheCaptain |- | TCOTS || Cots |- | TCP || teaCup |- | TCR || TheCrazyRussian |- | TCRAT || justinstroud@gmail.com |- | TCUBE || thecubegaming |- | TCVM || tcvm |- | TCW || Frogstar |- | TD3 || ThreeDots |- | TDARK || TomDark |- | TDM || Porshen |- | TDMC || Mr.Ben |- | TDMG || Total Damage |- | TDNL || michelvanw |- | TEAJ || Tea_jaey |- | TED || teddy |- | TEDDY || knaaarfel |- | TEET || Jona |- | TEI || spacenavy90 |- | TEIM || Teimir |- | TEL || Telson1968 |- | TEM || Temppa |- | TEMPLAR || CroatianTemplar91 |- | TEN || Sniperwolf572 |- | TENDG || Tendgar |- | TENTH || NeoShadowdream |- | TER || TeRpEnTiN |- | TERRA || rodhalberd |- | TEST || rodhalberd |- | TEST91 || Piter91 |- | TESTH || Havanna |- | TETE || ngttrojo |- | TEX || texaschainsaw01 |- | TEXAS || texaschainsaw01 |- | TEXT || rodhalberd |- | TEZZA || Terramesa |- | TF168 || ICEMAN3668 |- | TF47 || Costo |- | TF47A || audiocustoms |- | TF47M || meat147 |- | TF63P || ZogMadDog |- | TFB || UGLY58 |- | TFBS || cilerc |- | TFD || christian2526 |- | TFG || The Forgotten Guard |- | TFH || Chris1986 , Task Force Helmand |- | TFP || TheFallingPlane |- | TFR || J. Andrews |- | TFS || KamikazeXeX |- | TFSA || Collision |- | TFSU || iiMaffasouras |- | TFT || Trenchfeet |- | TFW || bmgarcangel |- | TFWC || Rave808 |- | TGA || The Great Ape |- | TGA4567 || Bread Boi |- | TGG || The Guild Gaming |- | TGGUK || TGG |- | TGI || ToW:GI |- | TGL || Neborno |- | TGM || tgm0 |- | TGM0 || tgm0 |- | TGM73 || tgm0 |- | TGNJ || Two Guys Named Jim |- | TGO || TheGoldyOne |- | TGS || Tigg@lot |- | TGWPS || Ghostworrior |- | TGX || TugeX |- | TGZ || Teags |- | THB || thomsonb |- | THC || TheCounter54231 |- | THE || TheBliveon |- | THEA || chrisbobnorwich |- | THEIM || Forumtroll |- | THEOD || theodean |- | THERO || therob |- | THEV || theveninja |- | THG || Skyshift |- | THINQ || thinq |- | THIRD || Third Infantry Division |- | THOR || ThorWedd |- | THP || THP |- | THPAR || theparagon |- | THR || Thorne |- | THS || TheShadow |- | THY || Thyreos |- | THYED || Thy_English_DeViiL |- | TIA || The Irish Ace |- | TIAD || Ghost77788 |- | TIGER || Tigerwulf |- | TIJAI || Tijai |- | TIKA || tikakino |- | TIL || NathanRulez213 |- | TIMMY || TIMSTONe |- | TIMOY || timothefisherboy |- | TIN || Tinnuculus |- | TINF || D.Bowling[3RD] |- | TIP || tipster1 |- | TIRP || Tirpitz93 |- | TIS || Drunken Cheetah |- | TISPI || Thomas Helledi |- | TIT || Tito |- | TITO || titodumortier |- | TJM || cartman69 |- | TJOBO || tjobo |- | TJP || Tigershark/JellyBelly Productions |- | TKA || tomtucka |- | TKGAM || TKGamer01 |- | TKM || TKM |- | TKO || SoldierEPilot |- | TKY || Tankbuster |- | TKZ || Tuerkas |- | TLA || droogs |- | TLC || io-oi |- | TLF || toadlife |- | TLOW || birdistdaswort |- | TLP || Teller |- | TM2 || kingcoran |- | TM21 || the_master_21 |- | TMAN || TMan10K |- | TMB || Tomb |- | TMD || TomiD |- | TMDBN || TimidBun |- | TME || Temme |- | TMF || Tyrghen |- | TMH || The-Mad_Hatter |- | TMI || TheMinion |- | TMJ || Tha_Masta_Joo |- | TMK || TeMaK |- | TMM || Captain Winters |- | TMN || TMN_Fr33d0m |- | TMS || TabloMaxos |- | TMYK || Team Yankee |- | TNDR || Thunder |- | TNK || Tawnik |- | TNL || Deadfast |- | TNOR || TNOR |- | TNRL || madsl |- | TNW || TheNoobWar |- | TOAST || iwanttoasty |- | TOB || tOBdavian |- | TOBS || TobsA13 |- | TOBSA || TobsA13 |- | TOC || ToC |- | TOD || todschlaeger |- | TOF || Russellocean |- | TOFU || lolo |- | TOHO || pizywizy506 |- | TOKES || FapperDanMan |- | TOM || Toma |- | TOMA || wizzywig |- | TOMEU || KantanKei |- | TOMLV || tomislav |- | TOMMY || tommyelgamer |- | TOMTE || Tomtefan |- | TOMZO || Tomzo |- | TON || LegendaryShark |- | TONE || AlbertONEx |- | TONG || rodhalberd |- | TONY || VladimirY |- | TOON || Jona |- | TOP || Tactical Operation |- | TOP1 || Tactical Operation |- | TOP2 || Tactical Operation |- | TOP21 || topster21 |- | TOP23 || Top2323 |- | TOR || Patrik.91 |- | TORTI || torti |- | TOUR || The Tour Of Teamrespawn |- | TOW || Tales of War |- | TOWJC || Tales of War: Joint Command |- | TP || TuszPro |- | TPA || osymann |- | TPG || ThePhysGun |- | TPIST || osymann |- | TPZ || Salbei |- | TQP || Pathy |- | TR || TonyRanger |- | TR8 || Travis One |- | TRA || dmakatra |- | TRAC || TRACY |- | TRAU || Trauzer |- | TRB || TheRob |- | TRBLR || TROFIM BLACK |- | TRCNR || Tracnor |- | TRDUK || z5342x |- | TRE || nyqbgcd |- | TREE || Treelor |- | TREND || treendy |- | TRENT || Trento |- | TRG || TriggerHappy |- | TRGU || Fizz and Rabidus |- | TRH || Burt77 |- | TRI || trident |- | TRIBE || Tribe |- | TRICO || tricolo |- | TRIODOS || mendys |- | TRIT || MSG Trit |- | TROLL || Trollgaard |- | TRON || Jona |- | TRONE || Tyrone144 |- | TROP || TROPtastic |- | TRRH || CornerWookie |- | TRS || nigeysuk |- | TRSP || FreakPsych |- | TRT || paolo.trotta |- | TRUBB || trubb |- | TRUE || cheap_truth |- | TRUPE || Trupe |- | TRUPP || Trupper1990 |- | TRX || TraX |- | TRY || Taray |- | TRYZN || Tryzen |- | TS2 || DineiDevos |- | TSBMA || ModAddict |- | TSC || Plage |- | TSF || tyra314 |- | TSG || Toppskillz |- | TSH || Tigershark |- | TSI || The_Sanctuary_Island |- | TSM || Kefvski |- | TSN || TheSun |- | TSP || Satchel, PSC |- | TSRP || Sylver |- | TST || TST |- | TSTAG || DineiDevos |- | TTI || Skullman |- | TTLOR || TheTrueLor |- | TTP || TTP_nutcase |- | TTT || TeTeT |- | TUB || Tubal |- | TUC || Plutonium |- | TUCKA || tomtucka |- | TUG || Tug2000 |- | TUKA || ReverseTV |- | TUMOD || Turkish Union Mod - Armed Forces |- | TUP || Tupolov |- | TURSU || TurboSulttaani |- | TUT || Filip5 |- | TUTO || tutoveenee |- | TUVEI || Vegard |- | TVR || PK |- | TWA || wedge |- | TWADD || TheWaltsu |- | TWAM || wedge |- | TWC || The Wrecking Crew |- | TWD || Tom Daniels (Tomfool) |- | TWG || Twyggy |- | TWIRL || twirly |- | TWK || sciencetweak |- | TWL || JamesCatra |- | TWLI || lien0233 |- | TWN || Twean |- | TWOC || CERDIP |- | TWOOD || TwoodZ |- | TWP || NathanRulez213 |- | TWS || TheWaltsu |- | TXCT || toxiccat |- | TXH || Tristanxh |- | TXU || Terox Utilities |- | TYB || tybriel |- | TYG || Tyger |- | TYNE || Revlim |- | TYPEO || CommanderSalamander |- | TYR || Tyrryal |- | TYTL || Bctytler |- | TZR || 2kohm |- | TZU || Ash2501 |- |}

=== U ===

{| class="wikitable sortable" style="width: 100%" | UAMRC || Methusalem |- | UBE || subarulibtard |- | UBERU || overunity |- | UBR || soccermiles |- | UBUTO || Ubuto |- | UBZ || Urbeltz |- | UCE || UceeFin |- | UCG || Tuitor |- | UD45P || Shana-Chan |- | UDL || udaloy |- | UELS || jÜffLoS |- | UETF || Yuuki |- | UGAF || G-Man |- | UGG || Ugga |- | UGM || UglyMogly |- | UIOX || uiox |- | UK2SG || J_Murphy |- | UK3CB || Apollo |- | UKAF || madkaddy |- | UKBL || Sabergaming |- | UKF || Project-UKForces |- | UKL || Double Doppler |- | UKO || Roku |- | UKPR || kngpig |- | UKR || UkrMOD |- | UKRP || Double Doppler |- | UKRPG || Double Doppler |- | UKRPVP || gmomo |- | UKSF || Markus Fisher/TemplarVX |- | UKT || UrKeT |- | UL || Jat1ya |- | UL2 || MUMIA |- | ULF || Proxno |- | ULT || ultima |- | ULT1M || Ult1mateForce |- | ULTIM || ultima911 |- | ULTRA || RonhillUltra |- | ULU || Jat1ya |- | ULV || Steiner |- | UMB || Umbarion |- | UMBRE || Methusalem |- | UMI || umi |- | UNA || UNA-Dark |- | UNBR || rodhalberd |- | UNC || Zeak |- | UND || Undeceived |- | UNL || Jat1ya |- | UNN || Unnamed |- | UNPNG || Unknown.png |- | UNS || The Unsung |- | UNSC || AkulaSerona |- | UNX || Dimitri_Harkov |- | UPO || NOPROBLEMFOME |- | UPR || GRUBES |- | UPSL || upsl |- | URA || URANIOM |- | URAN || uranoxyd |- | URBAN || Jonposo |- | URBCN || urban__concepts |- | URC || Larner6903 |- | URO || Uro |- | URRP || TristenBill |- | URS || Ursidae |- | URX || uranoxyd |- | US101 || columdrum |- | USA || NZXSHADOWS |- | USAC || Bubby |- | USASS || zenrevolt |- | USCAD || Cadman |- | USD || AmerikanSn1p3r |- | USEC || Rocket |- | USM || Bennett |- | USM1 || usm1 |- | USMC || NZXSHADOWS |- | USMC || Phaeden |- | USS || ussmarines |- | USSR || USSRsniper |- | UST || Urist |- | USUKR || PewPewStraykbol |- | USW || Jenkins |- | UTDS || Matt_T |- | UTG || Jonpas |- | UTOM || utomnia |- | UVA || Angelocasali007 |- | UVQQ || UmVeadoQualquer |- | UWAR || Unscripted War |- | UXPB || uranoxyd |- | UXR || Larner6903 |- |}

=== V ===

{| class="wikitable sortable" style="width: 100%" | V0ID || void |- | V200 || Viper200 |- | V29 || veteran29 |- | V3LLU || V3LLU |- | VA123 || Voodoo_Actual |- | VAA || Mat11155 |- | VAC || Varick |- | VAD3R || VaD_3r |- | VADER || NeoShadowdream |- | VAKE || VAKE |- | VAL || valdark |- | VAN || vanhouten.cz |- | VANRA || Vanra |- | VARG || Vargen |- | VAS || Vastiny |- | VASF || jeffs |- | VAUL || Vaultin |- | VAXBR || VAXPLAY |- | VBI || Verbii |- | VBRAS || rodhalberd |- | VBS || Virtual Battlefield Systems |- | VBS1 || NZXSHADOWS |- | VBS2 || NZXSHADOWS |- | VBW || vBundeswehr |- | VBWA3 || vBundeswehr |- | VCA || VBS Commuity Addon |- | VCB || SteveVCB |- | VCL || Morpheus |- | VCTM || Victim913 |- | VDA || Flax |- | VDE || VoRtHaX |- | VDMJ || Denisko-Redisko |- | VDPL || VeryCaptain |- | VEF || mecharius |- | VEGA || Vega Paradox |- | VEK || vek0611 |- | VELIK || birdistdaswort |- | VEN || Venom |- | VENUS || BiGangEnbyGang |- | VEP || Sim |- | VER || Verox |- | VERTO || verto |- | VES || Vespade |- | VET || [VE] (OF-4) Tilliboy |- | VET1 || mzerby |- | VFL || IronmentalisT |- | VFX || bizibiz |- | VGH || Vaaghoofd |- | VGN || TwisT |- | VIA || viking and angusjm |- | VIBE || Vibe |- | VIBI || vilas |- | VICE || heli_pilot |- | VICFA || VictorFarbau |- | VICKO || vicko |- | VICTA || ODSTGeneral |- | VICWW || VIPER[CWW] |- | VIDORTX || FaLL1726 |- | VIET || Aixie |- | VIF || Viking |- | VIG || Vigilante |- | VIGAM || Violator Gaming |- | VIGH || Vigilante & GodHammer |- | VIK || Vikingo |- | VIK22 || Viking22 |- | VIKIN || pplluuttoo |- | VIL || vilas |- | VILAK || Kaike123 |- | VILAS || vilas |- | VILE || Vile Ace |- | VIP || Vipersheart |- | VIPER || viper169th |- | VIPRR || VIPER[CWW] |- | VIRUZ || sigwar |- | VIS || Mandible |- | VIT || AKM74 |- | VIX || Vixer |- | VIZOR || Scott Malyn |- | VJO || von Jo |- | VKU || Vosku |- | VLA || Vladimir |- | VLPNK || VoltairePunk |- | VMA || A6 Intruder |- | VMC || domasgim |- | VME || Virtual Military Engineers |- | VMZA || Vleismasjien |- | VN || Savage Game Design |- | VNDF || Arne |- | VNEM || vNeMeSiiSsx - Harman Uppal |- | VNX || Savage Game Design |- | VOID || burrywog |- | VONR || Von Rundstedt |- | VOO || Voodoo |- | VOR || The Raven Guard Chapter |- | VORES || voorhees |- | VOWS || desrat |- | VOXER || VoXeR |- | VPM || VATICAN PSYCHO |- | VPR || VIPeR2511 |- | VPSA || VATICAN PSYCHO |- | VPSC || VATICAN PSYCHO |- | VRASI || Vrasin |- | VRS || Verse |- | VSD || wired |- | VSS || Hayden.T |- | VSUK || froggy333 |- | VSW || R. Diveyez Neff |- | VTE || Vietnam: The Experience |- | VTG || PixelMonkey |- | VTN || udaloy |- | VTP || Izu |- | VTR || Tyrghen |- | VTS || Izu |- | VTT || ClunkiestPage8 |- | VTX || vortex3d |- | VVW || viktortw |- | VWM || Dude96 |- | VXBW || ViconX-Bionic |- | VXR || VXR |- | VZL || ElvisDS |- | VZM || sigwar |- |}

=== W ===

{| class="wikitable sortable" style="width: 100%" | W0L || W0lle |- | W39 || petrlach |- | W4Y || W4lly63 |- | WAB || Wabbit |- | WACKY || WackyIraqi |- | WAF || wantafanta |- | WAFEL || DirtyShoes |- | WAG || Wagons |- | WAITW || g3015867 |- | WAK || Jona |- | WAKER || 654wak654 |- | WAKO || Jona |- | WAL || Col Bob |- | WALC || Claymore |- | WALOP || wallop |- | WALSH || IIxWALSHxII |- | WALTS || Walts |- | WAM || Jona |- | WANG || DehKushGuy420 |- | WANTA || wantafanta |- | WAR || Worldeater |- | WARFX || opticalsnare |- | WARLO || WarLord554 |- | WARS || 7angel7 |- | WAS || wastul |- | WASCI || DinapeS |- | WASTE || Zelik and Mojo |- | WATER || Waterman |- | WATS || wats |- | WAX || Waxbutter |- | WB22 || will221996 |- | WBB || themoosemasoose |- | WBC || WanderingBear |- | WBE || wolfbane |- | WBG || warbirdguy1 |- | WBJR || bennyman71 |- | WBT || Wildebeest |- | WCG || usmc2847 |- | WCM || Rave808 |- | WDB || willdebohun |- | WDJN || WoodyJohnson |- | WDL || Lockers |- | WDM || Wardking |- | WDS || tmthwoods |- | WDW || Who Dares Wins |- | WDY || Artharon |- | WEAP || rodhalberd |- | WEAST || Zkull |- | WEED || indaweed |- | WEEDY || deroxaxe |- | WEF || mhodgson89 |- | WEK || Walter_E_Kurtz |- | WES || WesleyS |- | WES28 || wihardy |- | WESSX || wessix |- | WESTI || WestDevs |- | WESTS || wests |- | WESTY || Westy |- | WGL || WarGames League |- | WHA || Whale |- | WHALE || Whale |- | WHB || wobbleyheadedbob |- | WHD || walkinghd |- | WHIS || WhisperOFP |- | WHM || WolfhoundActual |- | WHSKY || Whiskey.S |- | WHT || wh1ten3ss |- | WIA3 || btmoon17 |- | WIEL || Harold_Hoffmann |- | WIKED || Wiked Bubble |- | WIL || Cliger |- | WILK || JohnWildkins |- | WILL || Willsdorf |- | WILLS || torak289 |- | WILLY || Chill |- | WIN || Windfeld |- | WINCON || umibato |- | WINDO || jelmer50 |- | WING7 || wing70 |- | WIP || charles wipman |- | WIR || Wires |- | WISKY || wiskey |- | WITEKPPL || Witek.PL |- | WIZ || wizzywig |- | WKF || Wikfin |- | WL5 || WarLord554 |- | WLD || greyhound32 |- | WLF || LoneWulf |- | WLFLB || WolfePatches |- | WLK || Walrusking |- | WLLE || joelbhv |- | WLM || william1 |- | WLRUS || Walrus |- | WLY || B.Poncho |- | WM61 || 2Alpha |- | WMC || Nightwolf |- | WMP || WesMP |- | WNB || Williamson |- | WNTRS || Winters |- | WODS || Woodstock21 |- | WODZU || Wodzu |- | WOLF || XxTRUExxWOLFxX |- | WOLFE || Wolfenburgz |- | WOLFG || gaffa |- | WOM || BrokenWombat |- | WOODS || Woods |- | WOODY || Artharon |- | WORKING || panzersniper |- | WOTAN || LaserWiesel |- | WOUPY || woupypoupy |- | WP2 || zGuba |- | WPL || Razor (Worthy Platoon) |- | WPS || zGuba |- | WQG || wanderley |- | WR5 || WinteR5 |- | WRATH || Wraith68 |- | WRECC || Wrecca |- | WRG || teejza |- | WRN || Mike Styles |- | WRSUN || Warrior |- | WRW || +Werewolf+ |- | WSC || SGTGunner |- | WSI || SGTGunner |- | WSK || WhiskeyWarrior |- | WSL || WhiteSkyline |- | WSS || WarriorScholar |- | WSTLD || Agent_jetz |- | WT7 || Wytetyger7 |- | WTF || WiredTiger |- | WUB || wubz |- | WUD || Wudy |- | WUFPK || BNS130 |- | WUK || trippingtourist |- | WVNT || Williamson |- | WW1 || No Man's Land |- | WW2 || Operation WW2 |- | WW2EC || WWIIEC |- | WW2MA || WW2 Mod Alliance |- | WW2W || WW2Weasel |- | WWA || White Wolf Addons |- | WWAF || Nightwolf |- | WWAR || Makad |- | WWB || Worgal |- | WWM || Silva |- | WYS || wysterine |- | WYVER || zSchlopp |- | WYW || newiy/WYWY |- | WZN || Wizzen |- | WZR || WZR |- |}

=== X ===

{| class="wikitable sortable" style="width: 100%" | X29A || VirtualReal |- | X2D || x2dezjohn |- | X2RGT || ChoYaYa |- | XAN || Xankriegor |- | XAS || Extreme Addon Studios |- | XAVO || xavo |- | XCOM || X-COM |- | XDSJ || koptwo |- | XEN || Xeno |- | XES || owen250708 |- | XESS || DarkXess |- | XFX || xFURYx |- | XHK || x_Horst |- | XIII || MOC_XIII |- | XIM || x00010 |- | XIMEN || ximenjia |- | XKHDX || xKurtHDx |- | XLA || Alexander (ImperialAlex) |- | XM29 || XM29 |- | XNO || Xeno |- | XOR || SoldierEPilot |- | XOTO || Xotodazo |- | XOW || OnyxWyvern |- | XPO || Expostech |- | XPS || xpsion |- | XRA || Xram |- | XRFLO || XRflo |- | XRO || Xer0 |- | XRP || Whip |- | XSF || StormForce |- | XSHDX || xXShrekHDXx |- | XSQS || Texx |- | XSX || nidaroz |- | XTA || xT._AnGeLr!pPeR_.Tx |- | XTR || dev1ceR6 |- | XULAT || Xulat |- | XWO || ocramweb |- | XWX || turk3y |- | XXX || Joe Lemonade PSC |- | XYV || Xyvern |- | XZE || xZeven |- |}

=== Y ===

{| class="wikitable sortable" style="width: 100%" | YAA || Jona |- | YAB || YouAreBamboozled |- | YAH || silderoy |- | YAMA || Jona |- | YAMUA || Yamuar |- | YANKI || Ben_Nachos |- | YANKO || Yanko |- | YAS || SargeantCannoot |- | YAZZA || Yazza |- | YB || YouAreBamboozled |- | YB3 || Nagual |- | YBA || SchleckDieNudel |- | YBS || yosarin |- | YCAA3 || yancosta01 |- | YDE || framedyannick |- | YEB || Yeb |- | YEIIJ || Yeiij |- | YETI || TheYeti |- | YGO2 || rezin |- | YHM || Yearhoo |- | YLS || yannis |- | YMAN || YesmanY |- | YOL || Yol96 |- | YOUNG || youngTriceps |- | YOWL || alexyowl |- | YP27 || YEETpotato27 |- | YPA || mawr |- | YRRY || Yourry |- | YRUN || Hooty |- | YSA || YetheSamartaka |- | YSB || coronelcortez |- | YSL || Yoshilus |- | YSP || Yanshuo Production |- | YSTER || Ysterfeis |- | YTRPG || zitrone475 |- | YUG || Vojo_Kecman |- | YUP || yurapetrov |- | YURTX || Yurtex |- | YVL || Yuval |- | YVL || Yuval |- | YWN || Yawnathan |- |}

=== Z ===

{| class="wikitable sortable" style="width: 100%" | Z0M || Z0MBiE |- | Z3D || Zjajo |- | ZADE || DerZade |- | ZAGOR || Askanio |- | ZAK || Zak |- | ZAKT || zman6258 |- | ZAM || Zetho |- | ZAMO || Zulu-Alpha Mods Office |- | ZAP || ZAP |- | ZAR || Oldnick |- | ZARV || zarvona |- | ZASAR || Kikiobi |- | ZAV || zavodnyrichard |- | ZAY || Zayfod |- | ZCD || Zeus |- | ZCOW || zippycow |- | ZDC || medicalzombiez |- | ZDGC || jobey44 |- | ZDGS || rodhalberd |- | ZDRK || ZephyrDark |- | ZEAK || Zeak |- | ZEB || zebra1993 |- | ZED || Placeholder Interactive |- | ZEDZ || Smoozilla |- | ZEEP || Jona |- | ZEL || Zelik |- | ZEN || Zen Llama |- | ZEN77 || Jona |- | ZENIT || rodhalberd |- | ZERO || Kikiobi |- | ZERO6 || ZeroSix |- | ZEROT || Fugitive09 |- | ZEROX || MrZeroX |- | ZET || Zethre |- | ZETA || Zeedious |- | ZEU || Protegimus |- | ZEUS || Pimmelorus |- | ZFJKP || knaaarfel |- | ZGB || zGuba |- | ZGM || ZeroG |- | ZHOST || PoweredByte |- | ZIJ || Ziijej |- | ZIP || Zippy |- | ZIPNG || Zipang |- | ZISB || zisb |- | ZJA || Zjajo |- | ZKB || zkb1325 |- | ZKJ1 || droogs |- | ZLT || Zealot |- | ZLX || ZileX |- | ZLXEN || zloxen |- | ZMX || Terox |- | ZNDR || vlekzandr |- | ZOCK || J3r3my1337 |- | ZOD || Zodd |- | ZOM || l552342444 |- | ZONA || Bravo Wilco |- | ZONAP || zukera2 |- | ZONE || Welcome_To_Hell |- | ZOOL || Jona |- | ZOOM || Jona |- | ZOOT || Jona |- | ZOOT || Jona |- | ZOOT || Jona |- | ZOPS || MasterCraftyMonster |- | ZOR || xorzizten |- | ZORG || ZorgBot |- | ZOU || zouloum |- | ZOV || Zovirl |- | ZP5 || Zipper5 |- | ZPP || Zippy |- | ZRDP || 11RDP |- | ZRG || ZRG |- | ZRO || zaro |- | ZRU || rpoltera |- | ZRW || Lucifer |- | ZSF || Zelik |- | ZSO || morox |- | ZTLOV || voltz |- | ZUL99 || Zul99 |- | ZULU || SoldierEPilot |- | ZUMBI || Jonathan30 |- | ZUMO || zumorc |- | ZUP || soupie von soup |- | ZUSERZ || zzusernamezz |- | ZVS || zwobot |- | ZWA || zwadar |- | ZWEAR || Zwear1 |- | ZYAD || rando |- | ZZR || Zsa_Zsa_Rasputin |- | ZZZ || Jona |} </div>

{{GameCategory|ofp|Editing}} {{GameCategory|ofpe|Editing}} {{GameCategory|arma1|Editing}} {{GameCategory|arma2|Editing}} {{GameCategory|arma3|Editing}} {{GameCategory|armaR|Modding|Scripting|Guidelines}} {{GameCategory|arma4|Modding|Scripting|Guidelines}} {{GameCategory|tkoh|Editing}}
b0ecp75kwx97vuwkgv4775gd0i3w8z7

# Arma Reforger:Prefab Data

5050
38022
371031
363461
2025-02-26T12:32:11Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
371031
wikitext
text/x-wiki
A '''Prefab Data''' is an object storing variables which are shared among all of the instances of the given prefab.

{{Feature|informative|This concept works for both entities and components, where we then talk about '''Component Data''' and use the <enforce inline>GetComponentData()</enforce> method instead of the <enforce inline>GetPrefabData()</enforce> one.}}

* Example 1: set a value that works for all instances of this Prefab (e.g max health, fuel capacity, etc.) * Example 2: precalculate a value to not set it manually. The calculation will happen within a script callback that instanciates the variable when the first Prefab instance is created and store the value in the Prefab Data. e.g kinetic energy in a given velocity: Parameter velocity is 40 km/h, another parameter is object's mass, 1050 kg. These two variables allow to precalculate the kinetic energy threshold above which damage will be dealt. This result is the same for all the Prefab instances.

== Requirements ==

Before moving instance variables to prefab data, please consider the following: * How many instances of the object (entity/component) will there be in the map and will the saved memory be worth the increased performance consumption? ** Are there going to be 10 instances of this object? If so, this is probably not worth it, unless it has a 100 variables which can be shared. ** Are there going to be 100+ instances of this object with multiple variables which can be shared? Totally worth it to use prefab data. * How often do I access these variables, do I need these values every frame? If so, maybe then the performance consumption of getting and casting prefab data is not worth it. ** I need these variables only for occasional calculations happening on, for example, collisions, user clicking a button or on periodic check. No worries here, for the performance difference is not noticeable ** I need these variables each frame on each of my 30 instances. In such case consider storing the prefab data as a member variable (8 bytes for pointer), but only if more memory than that is saved by moving other member variables there - moving 3 and more (non-bool) variables should be enough to compensate for it.

== Code Example ==

Making a prefab data stored variable from a member variable is really easy.

All that is needed is to put the variable in {{hl|SCR_MyEntity'''Class'''}} insted of {{hl|SCR_MyEntity}}.

<nowiki/>{{hl|*'''Class'''}} classes are required for all Entities and Components, so no more preparation is required.

{| class="wikitable valign-top" ! style="width: 50%" | Before ! style="width: 50%" | After |- | <enforce> // prefab data class class SCR_AIGroupClass : ChimeraAIGroupClass { }

// regular functional class class SCR_AIGroup : ChimeraAIGroup { [Attribute("42")] protected int m_iValue;

int GetValue() { return m_iValue; } } </enforce> | <enforce> // prefab data class class SCR_AIGroupClass : ChimeraAIGroupClass { [Attribute("42")] int m_iValue; }

// regular functional class class SCR_AIGroup : ChimeraAIGroup {

int GetValue() { SCR_AIGroupClass prefabData = SCR_AIGroupClass.Cast(GetPrefabData()); if (!prefabData) return -1; // assuming -1 is an invalid value

return prefabData.m_iValue; } } </enforce> |}

{{GameCategory|armaR|Modding|Scripting|Guidelines}}
s669cvix4fky7bf496yo25liv6i7dnc

# Arma Reforger:Resource Usage

5050
38005
372991
371021
2025-03-04T23:19:35Z
Lou Montana
10739
Add [[Arma Reforger:BaseContainer Usage|BaseContainer Usage]] link
372991
wikitext
text/x-wiki
<!-- {{TOC|side}} --> A {{Link/Enfusion|armaR|Resource}} object is a source of data through many classes ({{Link/Enfusion|armaR|BaseResourceObject}} and its {{Link/Enfusion|armaR|BaseContainer}}, {{Link/Enfusion|armaR|IEntitySource}} etc). Due to how resource references are managed, some safeties are required.

{{Feature|informative|See also {{Link|Arma Reforger:BaseContainer Usage}}.}}

== Good Practice ==

Resources are managed by the engine, outside of script's reach. If the script loses reference to a Resource object, the engine may dispose of it instantly or at some point in the future, deleting also its related {{hl|BaseContainer}}/{{hl|IEntitySource}}/etc objects (it is impossible to have a strong {{hl|ref}} to a BaseContainer object in script).<br> To avoid this, always keep a reference to the parent Resource.

=== Examples ===

{| class="wikitable valign-top" ! Bad Example ! Good Example |- | <enforce> static BaseContainer GetBaseContainer(ResourceName resourceName) { // the only reference to said Resource is here and will be lost at the end of the scope Resource resource = Resource.Load(resourceName); if (!resource.IsValid()) return null;

return resource.GetResource().ToBaseContainer(); // resource's reference is dropped here // the returned BaseContainer may become null at any time, // even with a script's reference } </enforce> | <enforce> static BaseContainer GetBaseContainer(notnull Resource resource) { if (!resource.IsValid()) return null;

return resource.GetResource().ToBaseContainer(); // resource's reference is managed by the method caller } </enforce> |- | <enforce> // GetBaseContainer being the above method BaseContainer baseContainer = GetBaseContainer(m_sPrefab); string name = baseContainer.GetClassName(); // may result in a null pointer exception </enforce> | <enforce> Resource resource = Resource.Load(m_sPrefab); BaseContainer baseContainer = GetBaseContainer(resource); string name = baseContainer.GetClassName(); // fine as long as a reference to resource is kept </enforce> |- | <enforce> // beware of loops! array<BaseContainer> baseContainers = {}; // strong ref is not possible Resource resource; foreach (ResourceName resourceName : resourceNames) { resource = Resource.Load(resourceName); if (!resource.IsValid()) continue;

baseContainers.Insert(resource.GetResource().ToBaseContainer()); // reference to resource is lost at each loop end }

Process(baseContainers); // the array may contain nulls </enforce> | <enforce> array<ref Resource> resources = {}; array<BaseContainer> baseContainers = {}; Resource resource; foreach (ResourceName resourceName : resourceNames) { resource = Resource.Load(resourceName); if (!resource.IsValid()) continue;

resources.Insert(resource); baseContainers.Insert(resource.GetResource().ToBaseContainer()); // reference to resource is kept in the resources array }

Process(baseContainers); // all references are kept resources = null; // this can now be done without issue </enforce> |- | {{n/a}} | <enforce> // this is fine - a Managed instance is created, resource reference can be dropped // simplified, from {{Link/Enfusion|armaR|SCR_BaseContainerTools}}.CreateInstanceFromPrefab() static Managed CreateInstanceFromPrefab(ResourceName prefab) { Resource resource = Resource.Load(prefab); if (!resource.IsValid()) return null;

BaseContainer baseContainer = resource.GetResource().ToBaseContainer(); if (!baseContainer) return null;

return BaseContainerTools.CreateInstanceFromContainer(baseContainer); // resource reference is dropped but the created instance will remain } </enforce> |}

{{GameCategory|armaR|Modding|Scripting|Guidelines}}
3s264qu916vzujs0gjc9h7qhzvsdl5g

# Arma Reforger:Scripting: Automatic Reference Counting

5050
32425
370988
363913
2025-02-26T12:32:04Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370988
wikitext
text/x-wiki
{{TOC|side}} '''Automatic Reference Counting''', shortened to '''ARC''', is a memory management solution used in Enforce Script. Enforce Script does not use Garbage Collection (a.k.a GC). <!-- In a spirit of flexibility, a developer can choose if his class should or should not be managed simply by inheriting or not from the {{hl|Managed}} class. Usage of managed classes can be enforced for whole script modules (e.g. gameplay module, mods).

A simple "C++"-like classes remains as an option for high performance, but less secure scripts: * raw power of Enforce Script! * objects referenced by plain C pointers * no automatic memory management, owner must delete them * suitable to use by programmers and experienced scripters/designers

For common gameplay scripts/mods/etc there are managed objects, which are: * slightly slower (due to indirect weak pointer object accessing), but still fast enough for most situations * internally ref-counted and automatically deleted when no needed. * objects referenced by weak pointers (pointer is always valid or NULL, never points to deleted memory etc.) * suitable to use by everyone --> In comparison with the widely used {{Link|https://en.wikipedia.org/wiki/Tracing_garbage_collection}} (in e.g C#, Java): * it does not suffer from cleanup stuttering (lags due to high GC load) * memory management performance is not dependent on the number of managed instances * it is simple to implement (having a good working GC is a big issue)

On the negative side, it is open to the cyclic reference problem, described in the {{Link|#Cyclic Reference}} paragraph below.

{{Feature|informative|This whole system impacts '''objects''' passed by '''reference''' - see {{Link|Arma Reforger:Scripting: Values#Types|Value Types}}.}}

== Principle ==

Enfusion has an internal counter of strong references to objects; when this counter reaches 0, the object is released from memory.

=== Strong Reference ===

A strong reference is a reference to an object that increments the reference counter. The referenced object '''cannot''' become null during the referencing object's lifetime unless manually deleted (with the {{hl|[[Arma Reforger:Scripting: Keywords#delete|delete]]}} keyword).

Strong references: * using the {{hl|[[Arma Reforger:Scripting: Keywords#ref|ref]]}} keyword * scope lifetime's script reference

=== Weak Reference ===

A weak reference is a reference to an object that does not increment the reference counter. The reference may become null during the program's lifetime.

== Usage ==

<enforce> class ExampleClass { // weak reference to an object ReferencedClass m_WeakRefObject;

// strong reference to an object ref ReferencedClass m_StrongRefObject;

// strong reference to a dynamic array (that is an object itself) of weak references ref array<ReferencedClass> m_aWeakRefArray;

// strong reference to dynamic array of strong references ref array<ref ReferencedClass> m_aStrongRefArray;

// static array of strong references ref ReferencedClass m_aStrongRefStaticArray[10];

// maps and sets work the same ref map<string, ReferencedClass> m_mWeakRefMap; ref map<string, ref ReferencedClass> m_mStrongRefMap; ref set<ReferencedClass> m_sWeakRefSet; ref set<ref ReferencedClass> m_sStrongRefSet;

void Method() { ReferencedClass localReference = new ReferencedClass(); localReference = new ReferencedClass(); // the previous object loses its strong reference and is immediately released // the newly created object replaces it

array<ReferencedClass> arrayOfWeakRef = new array<ReferencedClass>(); // array of weak references is created arrayOfWeakRef.Insert(new ReferencedClass()); // ReferencedClass object is created and immediately deleted, as arrayOfWeakRef does not increment the reference counter

array<ref ReferencedClass> arrayOfStrongRef = new array<ref ReferencedClass>(); // array of strong references is created arrayOfStrongRef.Insert(new ReferencedClass()); // ReferencedClass object is created and kept

// at the end of the method, local variables 'localReference', 'arrayOfWeakRef' and 'arrayOfStrongRef' are released: // localReference is destroyed // arrayOfWeakRef is destroyed (it only contains NULL), // arrayOfStrongRef is destroyed (it contains the last strong ref to object, so its contained object is destroyed as well } } </enforce>

=== Cyclic Reference ===

==== Problem ==== The main issue with reference counting is cyclic references (aka "Island of isolation"). In the code below: * the main method creates object A and object B * object A references object B * object B references object A * the main method ends, dropping its references to object A and B * both objects a and b should be deleted but they still reference each other, keeping the reference counting above 0: ** any reference to them is lost after main method's ending ** they remain in memory until the program is stopped

<enforce> class Parent { ref Child m_Child; }

class Child { ref Parent m_Parent; }

void main() { Parent a = new Parent(); // 'a' has 1 reference Child b = new Child(); // 'b' has 1 reference a.m_Child = b; // 'b' has 2 references b.m_Parent = a; // 'a' has 2 references

// local variables 'a', 'b' are released (reference count is decreased by 1) // both objects remain in memory, having 1 reference each (each other) } </enforce>

==== Solution ==== The solution to this issue is to have one object have a strong reference, while the other only holds a weak one: <enforce> class Parent { ref Child m_Child; }

class Child { Parent m_Parent; }

void main() { Parent a = new Parent(); // 'a' has 1 strong (scope) reference Child b = new Child(); // 'b' has 1 strong (scope) reference a.m_Child = b; // 'b' has 2 strong references b.m_Parent = a; // 'a' has 1 strong reference, 1 weak reference

// local variables 'a', 'b' are released (reference count is decreased by 1) // a only has 1 weak reference and is released from memory // b loses a's reference and has no more reference to it - it gets released } </enforce> Using weak references makes null-checking take more importance in scripting.

{{GameCategory|armaR|Modding|Scripting|Guidelines}}
qhxfprgdlmk8ygz46m4qifs10p05hbm

# Arma Reforger:Scripting: Best Practices

5050
32442
370955
369668
2025-02-26T12:31:57Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370955
wikitext
text/x-wiki
{{TOC|side}} == Getting Started ==

In the domain of development, any rule is a rule of thumb. If a rule states for example that it is better that a line of code doesn't go over 80 characters, it doesn't mean that any line '''''must not''''' go over 80 characters; sometimes, the situation needs it.

If the code has a good structure, '''do not''' change it to enforce a single arbitrary rule. If many of them are not implemented/not respected, changes should be applied; again, this is according to one's judgement.

With that being said, let's go!

== Best Practices ==

{{Feature|informative|See {{Link|Arma Reforger:Scripting: Conventions|Scripting Conventions}} for all the conventions to date.}}

=== Code Format ===

* '''Reminder:''' chosen indentation for Enfusion is {{Link|https://en.wikipedia.org/wiki/Indentation_style#Allman_style|Allman style}} * '''Reminder:''' indentation is done with '''tabulations''' * Use empty space. Line return, spaces before and after brackets, if this improves readability, use it: space is free * ''One-lining'' (putting everything in one statement) memory improvement is most of the time not worth the headache it gives when trying to read it: don't overuse it ** it also hinders debugger's usage, e.g in the event of an inlined {{hl|if}}

=== Variable Format ===

* Name variables and functions properly: code must be readable by a human being, e.g variables like '''u''' instead of '''uniform''' should not exist. ** '''{{hl|i}}''' is an accepted iteration variable name (e.g in {{hl|for}} loops). * Prefix any public content (classes, global methods, global variables) with a [[Scripting Tags|Creator Tag]] in order to prevent conflicts with other mods. * Use the closest value type whenever possible; using {{hl|auto}} for a known variable type makes code more obscure and prevents autocompletion.

=== Code Structuration ===

==== SOLID ==== A series of development principles to follow in order to ensure an easy code maintenance and lifetime.

{{Feature|informative|See {{Link|https://en.wikipedia.org/wiki/SOLID}}.}}

==== DRY ==== '''D'''on't '''R'''epeat '''Y'''ourself. If within the same class, the same code or the same pattern is written in various places, write a protected method and use appropriate parameters. {{Feature|informative|See {{Link|https://en.wikipedia.org/wiki/Don't_repeat_yourself}}.}}

==== Logical Simplifications ==== If the code has too many repetitions, make a common method as stated above.

If the code has too many levels, it is time to split it and rethink it.

==== Examples ==== {| class="wikitable valign-top" ! Improvable ! Good

|- | <enforce> auto number = 42; Animal cutePet = new Dog(); </enforce> | <enforce> int number = 42; Dog cutePet = new Dog(); </enforce>

|- | <enforce> int i = 0; string result = ""; SCR_MyClass obj = null; </enforce> | <enforce> int i; // default value = 0 - see {{Link|Arma Reforger:Scripting: Values#Integer|Values - integer}} string result; // default value = "" (a string cannot be null) SCR_MyClass obj; // default value = null </enforce>

|- | <enforce> // a method call is more expensive than a bool check if (obj.MustBeTreated() || m_bTreatAllObjects) Print(obj);

if (obj.MustBeTreated() && m_bTreatAllObjects) Print(obj); </enforce> | <enforce> // cheap checks go first, expensive checks (method calls) go after if (m_bTreatAllObjects || obj.MustBeTreated()) Print(obj);

if (m_bTreatAllObjects && obj.MustBeTreated()) Print(obj); </enforce>

|- | <enforce> // many identical method calls if (obj.MustBeTreated() && obj.GetObject()) Print("Result: " + obj.GetObject().m_sValue1 + " " + obj.GetObject().m_sValue2); </enforce> | <enforce> // "bigger", non-repetitive code can be beneficial for performance and readability if (obj.MustBeTreated()) { SCR_Object subObj = obj.GetObject(); if (subObj) Print("Result: " + subObj.m_sValue1 + " " + subObj.m_sValue2); } </enforce>

|- | <enforce> foreach (SCR_Object obj : list) { Method(obj); // one method call per iteration }

void Method(SCR_Object obj) { if (!obj) return;

Print(obj.m_sName + " has a value of " + obj.m_sValue); } </enforce> | <enforce> foreach (SCR_Object obj : list) // the least method calls, the better { if (!obj) continue;

Print(obj.m_sName + " has a value of " + obj.m_sValue); } </enforce>

|- | <enforce> bool IsObjectAlive(SCR_Object obj) { if (!obj) return false;

if (obj.m_Health > 0) // keep this structure for complex code return true; else return false; } </enforce> | <enforce> bool IsObjectAlive(SCR_Object obj) { return obj && obj.m_Health > 0; } </enforce>

|- | <enforce> bool IsObjectValid(SCR_Object obj) { if (!obj) return false;

return true; } </enforce> | <enforce> bool IsObjectValid(SCR_Object obj) { return obj != null; // for readability } </enforce>

|- | <enforce> for (int i; i < list.Count(); i++) // list.Count() is called on every iteration { // ... } </enforce> | <enforce> for (int i, count = list.Count(); i < count; i++) // only one list.Count() call { // ... } </enforce>

|- | <enforce> for (int i, count = list.Count(); i < count; i++) { if (list[i]) // first Print(list[i]); // and second .Get(i) method calls } </enforce> | <enforce> foreach (SCR_Object obj : list) // foreach is faster for start-to-end iterating { if (obj) Print(obj); // no additional method call } </enforce>

|- | <enforce> for (int i, count = list.Count(); i < count; i++) { PrintFormat("Object #%1 = %2", i, list[i]); } </enforce> | <enforce> foreach (int i, SCR_Object obj : list) // iteration index is available this way too { PrintFormat("Object #%1 = %2", i, obj); } </enforce>

|- | <enforce> // declaring an 'obj' every loop generates a pointer release each time foreach (SCR_ParentObject parent : list) { SCR_Object obj = parent.m_Object; if (obj) Print(obj.m_sName); } </enforce> | <enforce> SCR_Object obj; // external declaration = only one release at the end of the scope foreach (SCR_ParentObject parent : list) { obj = parent.m_Object; if (obj) Print(obj.m_sName); } </enforce>

|- | <enforce> array<SCR_Object> toRemove = {}; foreach (SCR_Object obj : bigArray) { if (obj.m_bShouldBeRemoved) toRemove.Insert(obj); }

foreach (SCR_Object obj : toRemove) { bigArray.RemoveItem(obj); // or RemoveItemOrdered if order is important } </enforce> | <enforce> for (int i = bigArray.Count() - 1; i >= 0; i--) // reverse iterating { if (bigArray[i].m_bShouldBeRemoved) bigArray.Remove(i); // or RemoveItemOrdered if order is important } </enforce>

|- | <enforce> if (a) { if (b) { if (c) // also known as Hadouken code Method(true); else Method(false); } } </enforce> | <enforce> if (a && b) Method(c); </enforce>

|- | <enforce> if (a) { Method(a); if (b) { Method(b); if (c) // another Hadouken code, with complications { Method(c); return 42; } else { return -1; } } else { return -1; } } else { return -1; } </enforce> | <enforce> if (!a) return -1; // this is called early return and helps funnel down the code

Method(a); if (!b) return -1;

Method(b); if (!c) return -1;

Method(c); return 42; </enforce>

|- | <enforce> int i; if (a) i++;

if (b) i++;

if (c) i++;

// etc </enforce> | <enforce> int i; array<bool> conditions = { a, b, c, /* etc */ }; foreach (bool condition : conditions) { if (condition) i++; } </enforce>

|- | <enforce> Initialise(player1, 1); Initialise(player2, 2); Initialise(player3, 3); Initialise(player4, 4); Initialise(player5, 5); Initialise(player6, 6); </enforce> | <enforce> array<IEntity> list = { player1, player2, player3, player4, player5, player6 }; foreach (int i, IEntity item : list) { Initialise(item, i + 1); } </enforce> <enforce> // or, better, one method call that initialises all of them Initialise(list); // numbering is then done inside the method, if possible Initialise(list, 1); // otherwise the starting number can be provided </enforce>

|}

==== Code Comments ==== Code comments are surprisingly '''not''' a must-have for inside code; code organisation combined to variable names should be enough to be read by a human, '''then''' comment can be used: * a comment should explain '''''why''''' the code is written this way * a comment should not tell '''''what''''' the code does; code should be self-explanatory * as a last resort in the event of a complex piece of code, a comment can be used to describe what the code actually does - or at least its intention

On the other hand, ''documentation'' is more than welcome as it provides information from the outside without having to read the code. Enfusion uses {{Link|Doxygen}}.

==== Files Organisation ==== {{Feature|informative|See {{Link|Arma Reforger:Directory Structure}} to know how/where to organise script files (Scripts\GameCode).}}

* Have one class/enum per file ** Small classes/enums can always be grouped together in the same file, provided they are part of the same system or only used there * Use (sub-)directories to group related classes together

{{GameCategory|armaR|Modding|Scripting|Guidelines}}
4clwe5fk632jolchxkfh6dnyqjkftny

# Arma Reforger:Scripting: Config Object

5050
43582
376848
370973
2025-12-07T19:07:13Z
Ansin11
10751
Fixed terminology
376848
wikitext
text/x-wiki
{{TOC|side}} == Config Base Container Class ==

A {{hl|BaseContainerProps}} decorator tells the Workbench that this class serves as a blueprint for the Config Editor.

=== BaseContainerProps ===

The usage of a {{hl|BaseContainerProps}} decorator is required for the class to be visible and editable in the Config Editor - see the examples below.

The minimum required decorator is <enforce inline>[BaseContainerProps(configRoot: true)]</enforce> for the base object Config to be visible in the Config creation process.

A class inheriting from a decorated class must be decorated as well in order to be usable.

It accepts the following parameters: <enforce> BaseContainerProps( string category = "", string description = "", string color = "255 0 0 255", bool visible = true, bool insertable = true, bool configRoot = false, string icon = "", NamingConvention namingConvention = NamingConvention.NC_MUST_HAVE_GUID) </enforce>

A class name display is defined as follow:

* if the class uses a name instead of a GUID (see NC_MUST_HAVE_NAME), the name is displayed - otherwise, the classname is * the class can use a custom name with the usage of an additional decorator such as <enforce inline>BaseContainerCustomTitle</enforce> or one of its children

{| class="wikitable" |+ Parameters Description ! Parameter ! Type <!-- ! Default Value --> ! Description |- | category | string <!-- | "" --> | The class's category - only useful in {{Link|Arma Reforger:World Editor}} plugins definition. |- | description | string <!-- | "" --> | The class's description - only useful in World Editor plugins definition. |- | color | string <!-- | "255 0 0 255" --> | The class's colour in RGBA format (Red Green Blue Alpha) in a 0..255 range - only useful in World Editor plugins definition. |- | visible | bool <!-- | true --> | The class's visibility - only useful in World Editor plugins definition. |- | insertable | bool <!-- | true --> | |- | configRoot | bool <!-- | false --> | Define if the class is selectable when creating a new Config. |- | icon | string <!-- | "" --> | The class's icon - only useful in World Editor plugins definition. |- | namingConvention | enum <!-- | <enforce inline>NamingConvention.NC_MUST_HAVE_GUID</enforce> --> | See the {{Link/Enfusion|armaR|NamingConvention}} enum. Possible values: * NC_CAN_HAVE_NAME: Internal use. * NC_MUST_HAVE_NAME: Force providing a name on object creation (whether a class or an array of them) instead of having an automatically generated GUID. The displayed object name is then the entered name. * NC_MUST_HAVE_GUID: The default value - the Workbench generates a GUID for this config entry. The displayed object name is then the classname. |}

=== Attribute ===

The usage of an {{hl|Attribute}} member variable decorator is required for the value to be visible and editable in the Config Editor - see the examples below.

The minimum required decorator is <enforce inline>[Attribute()]</enforce>.

A variable's display name is deduced as follows:

{{hl|m_iMyVariable}} is split by removing {{hl|m_}} (conventional name prefix for a member variable), {{hl|i}} (optional, additional prefix for variable type - see {{Link|Arma Reforger:Scripting: Values#Types|Values - Types}}) and splitting the remaining part using the capital letters: here {{hl|My Variable}}.

It accepts the following parameters: <enforce> Attribute( string defvalue = "", string uiwidget = "auto", string desc = "", string params = "", ParamEnumArray enums = null, string category = "", int precision = 3) </enforce>

{| class="wikitable" |+ Parameters Description ! Parameter ! Type <!-- ! Default Value --> ! Description |- | defvalue | string <!-- | "" --> | The default value. It is always a string, even in the case of a boolean ("0", "1", '''not''' "false"/"true"), a number ("5678", "12.34") or a vector ("0 0 0"). {{Feature|informative| * There is '''no''' way to set the default value of an object * There is '''no''' way to set the default value of an array, only of its new item. }} |- | uiwidget | string <!-- | "auto" --> | The Widget type to be used. It can be forced to whatever wanted. Note that not all widgets fit all variable types. See the {{Link/Enfusion|armaR|UIWidgets}} class.

{{Feature|informative|In the case of an array, the value will define the UI for the items, not the array itself.}}

{| class="wikitable align-center-col-3 align-center-col-4 align-center-col-5 align-center-col-6 align-center-col-7" ! rowspan="2" | Value ! rowspan="2" | Description ! colspan="5" | Compatible With |- <!-- bool float int string vector --> ! bool ! float ! int ! string ! vector |- | Auto |

{| class="wikitable" ! Attribute Type ! Default UI Widget |- | bool | Checkbox |- | int | SpinBox |- | float | EditBox (numerical version) |- | string | EditBox (text version) |- | vector | Coords |- | array | Array Widget and item type Widget |- | Color | ColorPicker |- | ResourceName | ResourceNamePicker |}

<!-- bool float int string vector --> | {{Icon|checked}} | {{Icon|checked}} | {{Icon|checked}} | {{Icon|checked}} | {{Icon|checked}} |- | Hidden | Does not display the field. | colspan="5" {{n/a}} |- | None | Identical to Hidden. | colspan="5" {{n/a}} |- | ColorPicker | A colour modification UI. Clicking the colour rectangle will display the colour picker, allowing to set values in many ways. <!-- bool float int string vector --> | colspan="5" | <enforce inline>Color</enforce> |- | ResourceNamePicker | Allows referring to a resource of any kind. | colspan="5" | <enforce inline>ResourceName</enforce> |- | ResourcePickerThumbnail | Allows previewing images and textures - to be combined with edds and/or imageset {{hl|params}} Attribute parameter. | colspan="5" | <enforce inline>ResourceName</enforce> |- | FileNamePicker | Internal use. | colspan="5" {{n/a}} |- | ResourceAssignArray | Internal use. | colspan="5" {{n/a}} |- | Date | Range 01/01/2000 00:00 → 31/12/2063 23:59 '''UTC Time''' (e.g 01/01/2000 '''01:00''' in Western Europe) <!-- bool float int string vector --> | {{Icon|unchecked}} | {{Icon|unchecked}} | {{Icon|checked}} | {{Icon|unchecked}} | {{Icon|unchecked}} |- | Graph | Internal use. | colspan="5" {{n/a}} |- | Font | Internal use. | colspan="5" {{n/a}} |- | FileEditBox | Internal use. | colspan="5" {{n/a}} |- | SpinBox | A numerical, editable up-down field. <!-- bool float int string vector --> | {{Icon|unchecked}} | {{Icon|checked}} | {{Icon|checked}} | {{Icon|unchecked}} | {{Icon|unchecked}} |- | ComboBox | A combo box that opens and allows to pick one value among a selection. <!-- bool float int string vector --> | {{Icon|unchecked}} | {{Icon|checked}} | {{Icon|checked}} | {{Icon|checked}} | {{Icon|unchecked}} |- | EditComboBox | <!-- bool float int string vector --> | {{Icon|unchecked}} | {{Icon|checked}} | {{Icon|checked}} | {{Icon|checked}} | {{Icon|unchecked}} |- | SearchComboBox | <!-- bool float int string vector --> | {{Icon|unchecked}} | {{Icon|checked}} | {{Icon|checked}} | {{Icon|checked}} | {{Icon|unchecked}} |- | LocaleEditBox | Internal use. | colspan="5" {{n/a}} |- | EditBox | <!-- bool float int string vector --> | {{Icon|unchecked}} | {{Icon|checked}} | {{Icon|checked}} | {{Icon|checked}} | {{Icon|unchecked}} |- | Checkbox | Checked for true, unchecked for false. <!-- bool float int string vector --> | {{Icon|checked}} | {{Icon|unchecked}} | {{Icon|unchecked}} | {{Icon|unchecked}} | {{Icon|unchecked}} |- | Slider | A click and drag allows to set the value on the slider; a click on the slider itself allows to type in the wanted value. <!-- bool float int string vector --> | {{Icon|unchecked}} | {{Icon|checked}} | {{Icon|checked}} | {{Icon|unchecked}} | {{Icon|unchecked}} |- | Flags | Offers checkboxes for each enums provided. Power of two values are recommended, e.g: <enforce> enums: { ParamEnum("First flag", "1"), ParamEnum("Second flag", "2"), ParamEnum("Third flag", "4"), ParamEnum("Fourth flag", "8"), // etc } </enforce> <!-- bool float int string vector --> | {{Icon|unchecked}} | {{Icon|unchecked}} | {{Icon|checked}} | {{Icon|unchecked}} | {{Icon|unchecked}} |- | Button | Internal use. | colspan="5" {{n/a}} |- | Script | Internal use. | colspan="5" {{n/a}} |- | EditBoxWithButton | Internal use. | colspan="5" {{n/a}} |- | LODFactorsEdit | Internal use. | colspan="5" {{n/a}} |- | Object | Clicking the "set class" button creates an instance allowing to set its values (if any). | colspan="5" | All objects |- | Coords | Clicking an axis letter and dragging left or right changes the value. <!-- bool float int string vector --> | {{Icon|unchecked}} | {{Icon|unchecked}} | {{Icon|unchecked}} | {{Icon|unchecked}} | {{Icon|checked}} |- | Range | Internal only. | colspan="5" {{n/a}} |- | Callback | Pick a callback method. {{Feature|important|A callback method '''must''' be decorated with <enforce inline>[CallbackMethod()]</enforce> and have the following signature: <enforce inline>void MethodName(Managed eventParams)</enforce>.}} | colspan="5" | <enforce inline>Event</enforce> |- | TopLevelObject | Internal use. | colspan="5" {{n/a}} |- | GraphDialog | A graph modification UI. Double-clicking on the graph creates a new point, click/dragging on a point moves it (no further than its surrounding ones on the X-axis), clicking on a point focuses it, and pressing {{Controls|Del}} removes that point. | colspan="5" | <enforce inline>Curve</enforce> |- | BoundingVolume | Internal use. | colspan="5" {{n/a}} |}

|- | desc | string <!-- | "" --> | The variable's description; this provides a '''tooltip''' when hovering the variable name and does not replace it. |- | params | string <!-- | "" --> | Used to define UI-specific settings, e.g a numerical range. * Array: "MaxSize=10" to limit the amount of possible elements * Number: "minValue maxValue step" (e.g {{hl|"0 100 5"}} for a 0..100 range with steps of 5) * Curve: "rangeX rangeY offsetX offsetY" (e.g "50.0 80.0 10.0 20.0" for curve axes to go X:10..60 (10 + 50) and Y:20..100 (20 + 80)) * Vector: "minValue maxValue step purpose=purposeType space=spaceType anglesVar=anglesVariableName coordsVar=coordsVariableName" (e.g {{hl|"0 100 5"}} for a 0..100 range with steps of 5) for each vector value.<br><!-- -->{{hl|purpose}} and {{hl|space}} are optional; using them makes {{hl|step}} optional and allows to set the vector value in World Editor using the transformation gizmo. ** {{hl|purpose}} possible values: *** {{hl|coords}} - the vector property represents coordinates *** {{hl|angles}} - the vector property represents rotations ** {{hl|space}} possible values: *** {{hl|entity}} - the vector represents a value in the entity's local space (relative coordinates) *** {{hl|world}} - the vector is an absolute world position *** {{hl|custom}} - any custom space defined by the entity ** {{hl|anglesVar}}/{{hl|coordsVar}} is the direct variable name, e.g {{hl|m_vAngles}}/{{hl|m_vRelativePos}} ** examples: *** {{hl|1= inf inf purpose=coords space=entity}} *** {{hl|1= -90 +90 5 purpose=angles space=world}} * ResourcePicker: "extension1 extension2 class=classname inheritedClasses=false" ** {{hl|extension1 extension2}} file extensions, e.g {{hl|"dds edds imageset png"}} for an Image Resource Picker ** {{hl|class}} is the Entity or config class type from which the selection must inherit, e.g {{hl|"et class{{=}}AIWaypoint"}} for {{hl|AIWaypoint}} entities ** {{hl|inheritedClasses}} set to false to only have a selection from the exact class defined with {{hl|class}}, e.g {{hl|1= "conf class=TAG_MyClass inheritedClasses=false"}} for {{hl|.conf}} files of {{hl|TAG_MyClass}} class and only this class

{{Feature|informative| * Note that setting a step for an integer does not prevent the user to type in the value manually. * It is possible to use {{hl|inf}} (for "infinity") to specify a non-restricted range - e.g {{hl|"inf inf 0"}}. }}

|- | enums | <enforce inline>ParamsEnumArray</enforce> <!-- | <enforce inline>null<enforce> --> | An array of {{Link/Enfusion|armaR|ParamEnum}}. Used to define ComboBox's items. It can be defined as follows: <enforce>{ ParamEnum("Text 1", "Value 1", "Description"), ParamEnum("Text 2", "Value 2") }</enforce>

The description is optional and is to fill a combobox's entry tooltip. As many as needed {{hl|ParamEnum}} entries can exist.

|- | category | string <!-- | "" --> | The variable's category - only useful in World Editor plugins to categorise properties.

|- | precision | int <!-- | 3 --> | The wanted floating point precision. Restricts a floating point field to a certain amount of decimals. |}

{{GameCategory|armaR|Modding|Scripting|Guidelines}}
klr672rwsrhxngtlr23wt4b461fyaik

# Arma Reforger:Scripting: Conventions

5050
32426
371014
370550
2025-02-26T12:32:08Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
371014
wikitext
text/x-wiki
{{TOC|side}} {{Feature|informative| Format reminder: * '''camelCase''' is writing by gluing words together and making their first letter capital, but for the first one, e.g {{hl|namingLikeThis}}. * '''PascalCase''' is writing in '''camelCase''' but with the first letter set uppercase, e.g {{hl|NamingLikeThis}}. * '''snake casing''' ({{hl|naming_like_this}}) is '''not''' a convention used in Enfusion.<br>Only {{hl|const}} values should be {{hl|NAMED_LIKE_THIS}}. }}

== Tag ==

To prevent conflict with other scripts all classes, and global functions must be distinguished by a [[Scripting Tags|Tag]].

{{Name|bi}} scripts have been prefixed with {{hl|SCR_}}. A mod developer must choose their own tag and not use one already taken by {{Name|bi}} or another developer.

When {{Link|Arma Reforger:Scripting Modding|modding}} any class, all methods and variables within that modded class must also be distinguished by the same unique tag to prevent conflict.

== File/Class ==

* File should be called {{hl|TAG_MyObject.c}} ** A component must end with "component": {{hl|TAG_ExampleComponent.c}} ** An entity must end with "entity': {{hl|TAG_ExampleEntity.c}} * Class should be called the same (without file extension): ** {{hl|class TAG_MyObject}} ** {{hl|class TAG_ExampleComponent}} ** {{hl|class TAG_ExampleEntity}} * Enum: ** name must be prefixed with a capital E, e.g {{hl|TAG_EMyEnum}} ** values use all capital letters with words separated by underscores, e.g {{hl|TAG_EMyEnum.VALUE_1}} * The file should be located in the {{hl|scripts\Game}} directory * The use of plural is prohibited at the end of combined keywords: e.g {{hl|TAG_Notification'''s'''Component}} &rarr; {{hl|TAG_NotificationComponent}}

== Method ==

* '''Functions'''/'''Methods''' naming uses '''PascalCase''', e.g:<enforce>int ReturnNumber()</enforce> * Parameters are named with '''camelCase''', e.g:<enforce>int ReturnNumber(bool canBeNegative)</enforce>

== Variable == <!-- {| class="wikitable float-right" |+ Prefix cheat sheet ! Type ! Prefix |- | <enforce inline>bool</enforce> | {{hl|m_b}} |- | <enforce inline>int</enforce> | {{hl|m_i}} |- | <enforce inline>float</enforce> | {{hl|m_f}} |- | <enforce inline>string</enforce> | {{hl|m_s}} |- | <enforce inline>enum</enforce> | {{hl|m_e}} |- | <enforce inline>vector</enforce> | {{hl|m_v}} |- | <enforce inline>array</enforce> | {{hl|m_a}} |- | <enforce inline>map</enforce> | {{hl|m_m}} |- | <enforce inline>class</enforce> | {{hl|m_}} |- | <enforce inline>typename</enforce> | {{hl|m_}} |- | <enforce inline>set</enforce> | {{hl|m_}} |- | <enforce inline>Color</enforce> | {{hl|m_}} |} --> {| class="wikitable float-right" |+ Prefix cheat sheet |- | <enforce> // root prefixes bool m_bValue; int m_iValue; float m_fValue; string m_sValue; SCR_EEnum m_eValue; vector m_vValue; array<x> m_aValue; map<x, y> m_mValue;

// children use parent's prefix ResourceName m_sResourceName; LocalizedString m_sLocalisedString; Curve m_aCurve;

// no prefix SCR_Class m_ClassInstance; typename m_ClassTypename; set<x> m_Set; Color m_Color; </enforce> |}

{{Feature|informative|See {{Link|Arma Reforger:Scripting: Values#Identifier}} for more information.}} * '''Member''' variables are prefixed with {{hl|m_}}, a one-letter type prefix for specific types (see {{Link|Arma Reforger:Scripting: Values#Types|Value types}}), and use '''PascalCase''', e.g:<enforce> IEntity m_Entity; int m_iHealth; bool m_bIsEnemy; </enforce> * '''Global''' variables are prefixed with {{hl|g_}}. {{Feature|important|Global variables are bad practice and must not be used outside of absolute necessity!}} * '''Static''' variables are prefixed with {{hl|s_}} ('''constants''' are not), eventually a one-letter type prefix, and use '''PascalCase''', e.g<enforce> protected static int s_iUnitsCount; </enforce> * '''Local''' variables and '''arguments''' (method parameters) use '''camelCase''', e.g:<enforce> void MethodA() { int value = 42; string name = "John";

float result = MethodB(value, name); } </enforce> * '''Constant''' values use '''all capital letters''' with words separated by '''underscores''' (uppercase snake casing), e.g:<enforce> const int MAX_VALUE = 9999; // no 'm_' prefix nor 'i' type prefix static const int TOTAL = 10; // no 's_' prefix either </enforce>

=== Order ===

* First go '''Attributes''' (if any), * then public, protected, private '''member variables''' * then public, protected, private '''static variables''' * then public, protected, private '''constants'''

<enforce> [Attribute()] protected int m_iAttribute;

int m_iPublic; protected int m_iProtected; private int m_iPrivate;

static int s_iPublic; protected static int s_iProtected; private static int s_iPrivate;

static const int PUBLIC; protected static const int PROTECTED; private static const int PRIVATE; </enforce>

== Script ==

=== General ===

* Curly braces must always be on a new line - Enforce Script uses '''{{Link|https://en.wikipedia.org/wiki/Indentation_style#Allman_style|Allman style}}''' * Variables and functions should be '''{{hl|protected}}''' whenever possible (respecting OOP black box principle) unless they are '''intended''' to be exposed * '''Getters'''/'''Setters''': variables should be made {{hl|protected}} and accessed through getters and setters (entry methods getting/setting the value) <enforce> class SCR_HumanComponent : ScriptComponent { protected int m_iAge;

void SetAge(int age) { m_iAge = age; PrintFormat("Age of instance %1 is now %2", this, m_iAge); }

int GetAge() { return m_iAge; } } </enforce>

=== Spacing ===

* '''Tabs''' are used for indentation - they are set to a size of '''4 spaces''' in [[Arma Reforger:Script Editor|Script Editor]] * A space is used before and after: ** a binary [[Arma Reforger:Scripting: Operators|operator]] ** a {{hl|foreach}} colon ** a class' inheritance colon * A space is used after: ** {{hl|if}}, {{hl|for}}, {{hl|foreach}}, {{hl|switch}}, {{hl|while}} keywords ** a {{hl|for}} semicolon * Spaces are used inside parentheses but not around their content <enforce> class SCR_HumanComponent : ScriptComponent { if (true) { }

for (int i = 0; i < 10; i++) { }

foreach (string item : stringArray) { }

switch (value) { case 42: break; }

while (true) { break; // in case of a hasty copy-paste :) } } </enforce>

=== Method ===

* All methods must be separated using this sequence of characters: two slashes followed by 96 dashes (see {{Link|#Example}})<enforce> //------------------------------------------------------------------------------------------------ </enforce> * '''Documentation''' must be done with {{Link|Doxygen}} support in mind, using the {{hl|//!}} comment syntax (see {{Link|#Example}}) * Methods should be '''sorted''' in the following order (top to bottom): ** General methods ** EOnFrame ** EOnInit ** Constructor ** Destructor <enforce> //! A scripted entity class SCR_ScriptedEntity : GenericEntity { //------------------------------------------------------------------------------------------------ //! Get the normalized direction vector at position A pointing to B //! \param vectorA First position, direction origin //! \param vectorB Second position, direction goal //! \return The direction from A to B as a normalized vector protected vector GetNormalizedDirection(vector vectorA, vector vectorB) { vector dir = vectorB - vectorA; return dir.Normalized(); }

//------------------------------------------------------------------------------------------------ //! Frame override void EOnFrame(IEntity owner, float timeSlice) { vector direction = GetNormalizedDirection(owner.GetOrigin(), vector.Zero); Print("OnFrame was called! Direction: " + direction); }

//------------------------------------------------------------------------------------------------ //! Init override void EOnInit(IEntity owner) { Print("Init was called!"); }

//------------------------------------------------------------------------------------------------ // constructor void SCR_ScriptedEntity(IEntitySource src, IEntity parent) { SetEventMask(EntityEvent.INIT | EntityEvent.FRAME | EntityEvent.CONTACT); }

//------------------------------------------------------------------------------------------------ // destructor void ~SCR_ScriptedEntity() { Print("Destructing SCR_ScriptedEntity"); } } </enforce>

=== Miscellaneous ===

* class instanciation with the {{hl|new}} keyword '''must''' use parentheses:<enforce> SCR_Class myClass = new SCR_Class(); // correct SCR_Class myClass = new SCR_Class; // wrong </enforce> * arrays can be initialised directly:<enforce> array<string> myArray = {}; // correct array<string> myArray = new array<string>(); // tolerable array<string> myArray = new array<string>; // wrong </enforce>

== Moddability ==

It is important to keep moddability in mind when scripting to ensure. Modded classes work very similar to inherited ones and come with the same restrictions: * '''Constructor/Destructor''': a modded class has its own const/destructor and cannot modify the parent one * '''Private variables & methods''': a modded class cannot override parent's private members - use <enforce inline>protected</enforce> instead of <enforce inline>private</enforce> * '''Static variables & methods''': same as above - do not use unless absolutely necessary * '''Global methods''': no classes to mod - do not use unless absolutely necessary.

== Example ==

<enforce> [EntityEditorProps("GameScripted/SomeFolder", "Description of this component", "255 0 0 255", true, true, "", "box", "-0.25 -0.25 -0.25", "0.25 0.25 0.25", "0 0 0 0")] class SCR_SomeComponentClass { }

SCR_SomeComponentClass SCR_SomeComponentSource;

//! Flags used for an entity to define its currently active components. enum SomeFlags { MESH = 1, BODY = 2, HIERARCHY = 4, NET = 8, }

//! A brief explanation of what this component does. //! The explanation can be spread across multiple lines. //! This should help with quickly understanding the script's purpose. class SCR_SomeComponent : ScriptComponent { //! Defines the maximum distance at which this object will be rendered in metres. [Attribute("30.0", UIWidgets.Slider, "The maximum distance at which this object will be rendered in metres.", "0 120 0.1")] protected float m_fRenderDistance;

//! Maximum count of children that can be spawned at any time. If the limit is exceeded no more children are spawned. [Attribute("100", desc: "Maximum count of children that can be spawned at any time. If the limit is exceeded no more children are spawned.", "0 500")] protected int m_iMaximumChildCount;

//! The offset of this object in metres. protected vector m_vPositionOffset = "0 0 0";

//! A public variable float m_fSomethingPublic = 3.2;

//! A public vector vector m_vOtherPublic = "1 2 3";

//! Defines the minimum distance (in metres) for this object to render. If below this value, object will be culled. const float RENDER_DISTANCE_MINIMUM = 10;

//! Defines the maximum distance (in metres) for this object to render. If above this value, object will be culled. const float RENDER_DISTANCE_MAXIMUM = 100;

//------------------------------------------------------------------------------------------------ //! Returns the render distance of this object (metres). float GetRenderDistance() { return m_fRenderDistance; }

//------------------------------------------------------------------------------------------------ //! Set the render distance of this object. //! \param renderDistance distance in metres. Is clamped between RENDER_DISTANCE_MINIMUM and RENDER_DISTANCE_MAXIMUM. void SetRenderDistance(float renderDistance) { m_fRenderDistance = Math.Clamp(renderDistance, RENDER_DISTANCE_MINIMUM, RENDER_DISTANCE_MAXIMUM); }

//------------------------------------------------------------------------------------------------ //! Prints hello to the debug console. Protected method, not exposed to outside classes but available to child classes. protected void SayHello() { string localString = "Hello!"; Print(localString); }

//------------------------------------------------------------------------------------------------ //! Compare two integers, return the larger one. (Don't mind the silly documentation, mind the syntax) //! \param a first parameter to be compared with the second one //! \param b second parameter to be compared with the first one //! \return true if a is equal to b, false otherwise. bool AreEqual(int a, int b) { // can be simplified to "return a == b;" if (a == b) return true; else return false; }

//------------------------------------------------------------------------------------------------ override void EOnInit(IEntity owner) { Print("Initialized some component!"); }

//------------------------------------------------------------------------------------------------ // constructor - remove if empty void SCR_SomeComponent(IEntityComponentSource src, IEntity ent, IEntity parent) { ent.SetEventMask(EntityEvent.INIT);

// If offset is 0, no need to update if (m_vPositionOffset != "0 0 0") { // Get current transformation matrix, add the position offset and update transformation. vector mat[4]; ent.GetTransform(mat); mat[3] = mat[3] + m_vPositionOffset; ent.SetTransform(mat); } }

//------------------------------------------------------------------------------------------------ // destructor - remove if left empty void ~SCR_SomeComponent() { // ... } } </enforce>

{{GameCategory|armaR|Modding|Scripting|Guidelines}}
8kyuut3tbuxiy1qijoyj16ydadxdh0b

# Arma Reforger:Scripting: Do's and Don'ts

5050
32421
370911
369506
2025-02-26T12:31:00Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370911
wikitext
text/x-wiki
{| class="wikitable valign-top" style="width: 100%" |+ {{Feature|important|Do follow {{Link|Arma Reforger:Scripting: Conventions|Scripting Conventions}}.}} ! style="width: 50%" | Don't ! style="width: 50%" | Do |- | <enforce noGuess methods="Print"> class ExampleClass { int LProcLgh;

int stringlength( string Value ){ LProcLgh= Value.Length(); Print ( "String length obtained: "+LProcLgh ); return LProcLgh; } } </enforce> | <enforce> class ExampleClass { protected int m_iLastProcessedLength;

int GetStringLength(string value) { m_iLastProcessedLength = value.Length(); Print("String length obtained: " + m_iLastProcessedLength); return m_iLastProcessedLength; }

int GetLastProcessedLength() { return m_iLastProcessedLength; } } </enforce> |}

{| class="wikitable valign-top" style="width: 100%" |+ {{Feature|important|Keep variables as close as possible to their usage.}} ! style="width: 50%" | Don't ! style="width: 50%" | Do |- | <enforce> class ExampleClass { protected int m_iLength;

int GetStringLength(string name) { m_iLength = name.Length(); Print("String length obtained: " + m_iLength); return m_iLength; } } </enforce> | <enforce> class ExampleClass { // keeping the variable into method scope and away from the instance

int GetStringLength(string name) { int length = name.Length(); Print("String length obtained: " + length); return length; } } </enforce> |}

{| class="wikitable valign-top" style="width: 100%" |+ {{Feature|important|Do not scope more than necessary.}} ! style="width: 50%" | Don't ! style="width: 50%" | Do |- | <enforce> switch (value) { case 0: { Print("0"); break; }

default: { Print("default"); break; } } </enforce> | <enforce> switch (value) { case 0: Print("0"); break;

default: // brackets are needed only if variables are declared in the 'case' code { // otherwise scoping is superfluous (and very slightly impacts performance) string message = "default"; Print(message); break; } } </enforce> |}

{| class="wikitable valign-top" style="width: 100%" |+ {{Feature|important|Keep a strong reference (<enforce inline>ref</enforce> keyword) to required objects.}} ! style="width: 50%" | Don't ! style="width: 50%" | Do |- | <enforce> // this array only lists pointers but does not increase the reference count array<ExampleClass> classArray = {};

ExampleClass newInstance; for (int i; i < 10; i++) { newInstance = new ExampleClass(); classArray.Insert(newInstance); // newInstance will be deleted at the end of the scope // as there are no references to it } </enforce> | <enforce> // this array keeps a strong reference to its items array<ref ExampleClass> classArray = {};

ExampleClass newInstance; for (int i; i < 10; i++) { newInstance = new ExampleClass(); classArray.Insert(newInstance); // classArray keeps a strong reference to newInstance - it will not be cleared } </enforce> |}

{| class="wikitable valign-top" style="width: 100%" |+ {{Feature|important|Avoid strong reference cyclic trap.}} ! style="width: 50%" | Don't ! style="width: 50%" | Do |- | {{Feature|informative| Here, both ParentClass and ChildClass have a strong reference to each other, keeping the reference count above zero - creating an "island of isolation" (see {{Link|Arma Reforger:Scripting: Automatic Reference Counting}} for more information). }} <enforce> class MainClass { ref SubClass m_SubClass;

void MainClass() { m_SubClass = new SubClass(this); } }

class SubClass { ref MainClass m_Parent;

void SubClass(MainClass parent) { m_Parent = parent; }

void DoSomething() { Print(m_Parent); } } </enforce> | {{Feature|informative| Here, the MainClass needs the SubClass (it creates it in its constructor meaning it needs it to work) but the subClass does not require MainClass - if the MainClass reference does not exist, it will simply not use it. }} <enforce> class MainClass { ref SubClass m_SubClass;

void MainClass() { m_SubClass = new SubClass(this); } }

class SubClass { MainClass m_Parent; // ref removed

void SubClass(MainClass parent) { m_Parent = parent; }

void DoSomething() { if (!m_Parent) // null safety check return;

Print(m_Parent); } } </enforce> |}

{{GameCategory|armaR|Modding|Scripting|Guidelines}}

<!-- {| class="wikitable valign-top" style="width: 100%" |+ {{Feature|important|Do this instead of that.}} ! style="width: 50%" | Don't ! style="width: 50%" | Do |- | <enforce>

</enforce> | <enforce>

</enforce> |} -->
pasq4mq325e09ao8bif7hxhu25pkzux

# Arma Reforger:Scripting: JSON

5050
32812
370966
341460
2025-02-26T12:31:57Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370966
wikitext
text/x-wiki
{{TOC|side}} == JSON Format ==

'''JSON''' stands for '''J'''ava'''S'''cript '''O'''bject '''N'''otation. It is a way to present data in a simple form. {{Feature|informative| See: * {{Link|https://en.wikipedia.org/wiki/JSON}} for a more informative Wikipedia article * {{Link|https://datatracker.ietf.org/doc/html/rfc7159|RFC7159}} for the RFC * {{Link|https://www.ecma-international.org/publications-and-standards/standards/ecma-404/|ECMA-404}} for the standard * https://www.json.org/ for general details and libraries * [https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/JSON Mozilla's article] for more information. }}

The parent class is always an object (the '''O''' from JSON). <syntaxhighlight lang="json"> { } </syntaxhighlight>

A property is defined with its name on the left of the colon, and its value on the right. '''Properties and strings''' are defined by '''double-quotes''' {{hl|"}}.<br> If another property follows, a comma is required. If no other property follows, '''there must be no comma'''.

{{Feature|important|There can be '''no comments''' in a JSON file.}}

<syntaxhighlight lang="json"> { "property": 42 } </syntaxhighlight> <syntaxhighlight lang="json"> { "property1": 41, "property2": "fourty-two" } </syntaxhighlight>

Spacing does not matter outside of the quotes. <syntaxhighlight lang="json"> { "property1": "name", "property2": 42 } </syntaxhighlight> is identical to <syntaxhighlight lang="json"> {"property1":"name","property2":42} </syntaxhighlight> but for obvious readability reasons, tabs and spaces are welcome.

=== Boolean ===

A boolean can be either {{hl|true}} or {{hl|false}} and nothing else. <syntaxhighlight lang="json"> { "boolean1": true, "boolean2": false } </syntaxhighlight>

=== Number ===

A number can be either an integer or a float. There are no quotes around it. It cannot start with a period {{hl|.}}. Scientific notations are accepted. <syntaxhighlight lang="json"> { "number1": 42, "number2": 4.2, "number3": -33, "number4": 10e10 } </syntaxhighlight>

=== String ===

Line returns cannot happen in JSON strings. The following character escape sequences are accepted: {{Columns|4| * {{hl|\b}} * {{hl|\f}} * {{hl|\r}} * {{hl|\n}} * {{hl|\t}} * {{hl|\"}} * {{hl|\\}} * {{hl|\/}} * {{hl|\u####}} - see {{Link|https://en.wikipedia.org/wiki/List_of_Unicode_characters|Unicode chars}} }}

<syntaxhighlight lang="json"> { "string1": "This is a string", "string2": "Is \"this\" a string?\tYes, Sir\u0021" } </syntaxhighlight>

=== Object ===

<syntaxhighlight lang="json"> { "object1": { "property1": "sub-object" } } </syntaxhighlight>

The null value is covered. <syntaxhighlight lang="json"> { "object1": null } </syntaxhighlight>

=== Array ===

An array can contain anything: direct values, or other objects with named properties. <syntaxhighlight lang="json"> { "array1": [ 4, 5, 6 ], "array2": ["This", "is", "Sparta!"], "array3": [ { "name": "object's name", "value": 33 }, { "name": "another object, inlined", "value": 42 } ] } </syntaxhighlight>

== See Also ==

* {{Link|Arma Reforger:JsonApiStruct Usage}} - covers JSON serialisation, deserialisation, validation * {{Link|Arma Reforger:Serialisation#JSON}}

{{GameCategory|armaR|Modding|Scripting|Guidelines}}
s9zlblnc79ftdu5qudal81vvg7ckaxc

# Arma Reforger:Scripting: Keywords

5050
32423
378112
376214
2026-02-17T07:01:55Z
Lou Montana
10739
Fix override example
378112
wikitext
text/x-wiki
{{TOC|side}} {{TOC|subTOC|content= * 1 {{Link|#Class Keywords}} * 2 {{Link|#Method Keywords}} * 3 {{Link|#Values Keywords}} * 4 {{Link|#Code Keywords}} * 5 {{Link|#Code Flow Keywords}} }} == Class Keywords ==

{| class="wikitable valign-top" ! Keyword ! Description |- ! === class === | Declares a class <enforce> class ExampleClass { } </enforce> |- ! === modded === | See {{Link|Arma Reforger:Object Oriented Programming Advanced Usage#Modding}}. <enforce> class ExampleClass { }

modded class ExampleClass // inherits and "takes the place" of the original ExampleClass { } </enforce> |- ! === sealed === | A class marked with the '''sealed''' keyword cannot be inherited from <enforce> sealed class Infertile { }

class Child : Infertile // compilation error - a class cannot inherit from a sealed class { } </enforce> |- ! === extends === | states that the declared class inherits from another <enforce> class ChildClass extends ParentClass { }

// alias class ChildClass : ParentClass { } </enforce> |- ! === typedef === | Declares an alias for a type <enforce> typedef string Text;

class ExampleClass { Text m_sMyText = "This is my text, that is a string"; } </enforce> |}

== Method Keywords ==

{| class="wikitable valign-top" ! Keyword ! Description |- ! === proto === | Disclose an engine-side method to script (Engine side). |- ! === external === | Compiler hint to link API methods - only applies to {{hl|proto}} methods (Engine side). |- ! === native === | Native call convention of internal method (Engine side). |- ! === volatile === | Internal method that may call back to script (hint for compiler that context need to be saved on stack). |- ! === private === | Modifier for class method. The method can be called only from inside of the same class' methods. A {{Link|#modded}} class will still be able to use it (but not its children). <enforce> class ExampleClass { private void HelloWorld() { Print("Hello there"); }

void PublicHelloWorld() { HelloWorld(); // works from within the object } }

ExampleClass classInstance = new ExampleClass(); classInstance.PublicHelloWorld(); // works - calls PublicHelloWorld() that calls HelloWorld() classInstance.HelloWorld(); // compilation error - HelloWorld() is private and cannot be accessed </enforce> |- ! === protected === | Modifier for class method. The method can be called only from inside of class' methods or methods of its extended (children) classes, or a modded class. <enforce> class ParentClass { protected void HelloWorld() { Print("Hello there"); } }

class ChildClass : ParentClass { void PublicHelloWorld() { HelloWorld(); // works from within the object } }

ChildClass classInstance = new ChildClass(); classInstance.PublicHelloWorld(); // works - calls PublicHelloWorld() that calls HelloWorld() classInstance.HelloWorld(); // compilation error - HelloWorld() is protected and cannot be accessed

ParentClass classInstance = new ParentClass(); classInstance.HelloWorld(); // compilation error - HelloWorld() is protected and cannot be accessed </enforce> |- ! === static === | Modifier for class method. The method can be called without object pointer, just by ClassName.methodName(). Only static values/methods can be accessed from a static method. <enforce> class ExampleClass { static void HelloWorld() { Print("Hello there"); } }

ExampleClass.HelloWorld(); // works

ExampleClass classInstance = new ExampleClass(); classInstance.HelloWorld(); // works </enforce> |- ! === event === | Hint for tools that the method should be exposed as Entity script event. |- ! === override === | Modifier for class method indicating overriding of base class method. Compiler checks if is method present in base class and if method signature matches. <enforce> class ParentClass { void HelloWorld() { Print("Hello world"); } }

class ChildClass : ParentClass { override void HelloWorld() { Print("Hello there"); } }

ParentClass parentClassInstance = new ParentClass(); parentClassInstance.HelloWorld(); // prints "Hello world"

ChildClass childClassInstance = new ChildClass(); childClassInstance.HelloWorld(); // prints "Hello there" </enforce>

{{Feature|warning| Please note that an overridden <enforce inline>static</enforce> method uses the object's currently-known class: <enforce> class ParentClass { static int GetAge() { return 50; } }

class ChildClass : ParentClass { override static int GetAge() { return 10; } }

ChildClass child = new ChildClass(); ParentClass childAsParent = child; Print(childAsParent.GetAge()); // returns 50 Print(child.GetAge()); // returns 10 </enforce> }} |- ! === sealed === | Modifier for class method. The method cannot be overridden in derived classes. <enforce> class ParentClass { sealed void HelloWorld() { Print("Hello there"); } }

class ChildClass : ParentClass { override void HelloWorld() // compilation error - cannot override a sealed method { Print("Hello world"); } } </enforce> |}

== Value Keywords ==

{| class="wikitable valign-top" ! Keyword ! Description |- ! === owned === | Modifier for returning internal methods. Tells the script VM that the returning variable (string or array) must not be released. |- ! === out === | Modifier for method parameters. It means that the argument may be changed by the method call. <enforce> void Method(out array<string> parameter) { parameter = {}; parameter.Insert("Hello"); parameter.Insert("there"); }

// ...

array<string> myArray = null; Method(myArray); // myArray is now { "Hello", "there" } </enforce> |- ! === inout === | Modifier for method parameters. It means that the argument will be used and may be changed by the method call. <enforce> class ExampleClass { private ref array<string> m_aOldParameter;

void Method(inout array<string> parameter) { m_aOldParameter = parameter;

parameter = {}; parameter.Insert("Hello"); parameter.Insert("there"); } }

ExampleClass classInstance = new ExampleClass();

array<string> myArray = null; classInstance.Method(myArray); // myArray is now { "Hello", "there" } and classInstance.m_aOldParameter is referencing myArray's old value </enforce> |- ! === const === | Declares a constant, that is a value that cannot be modified later. <enforce> const string MY_TEXT = "Hello there";

void Method1() { Print(MY_TEXT); // will print "Hello there" MY_TEXT = "General Kenobi"; // compilation error - a constant is set in stone and cannot be modified }

void Method2() { const string myUnmodifiableString = "Hello there"; // constant valid for method's scope Print(myUnmodifiableString); myUnmodifiableString = "General Kenobi"; // compilation error } </enforce> |- ! === reference === | Hint for tools (Material editor) that the value may be used as parameter in material. |- ! === notnull === | Modifier for method parameter of class pointer type. It means that the method expect the parameter to never be '''null'''; if a null value is provided, a VM Exception is raised and the method is not called. <enforce> void Method(notnull IEntity entity) // no need to check for "if (!entity)" inside the method { entity.DoSomething(); // the argument can be accessed safely }

if (myEntity) // it is still needed to check for null before calling the method { Method(myEntity); } </enforce> |- ! === private === | Value can only be accessed from the class/instance methods. Mutually exclusive with "protected". <enforce> class ExampleClass { private bool m_bIsActive;

void SetActive(bool value) { m_bIsActive = value; } }

ExampleClass classInstance = new ExampleClass(); Print(classInstance.m_bIsActive); // compilation error - m_bIsActive is private and cannot be accessed </enforce> |- ! === protected === | Value can only be accessed from the class/instance methods or its children. Mutually exclusive with "private". <enforce> class ParentClass { protected bool m_bProtected; private bool m_bPrivate;

void SetPrivate(bool value) { m_bPrivate = value; } }

class ChildClass : ParentClass { void SetProtected(bool value) { m_bProtected = value; // works - m_bProtected declaration reaches ChildClass } }

ChildClass childClassInstance = new ChildClass(); Print(childClassInstance.m_bProtected); // compilation error - m_bProtected is protected and cannot be accessed </enforce> |- ! === static === | Value belongs to the class and not an instance of it. If public, it can be accessed without object pointer, just by <enforce>ClassName.variable</enforce> <enforce> class ExampleClass { static bool bStaticValue; private static bool m_bPrivate; // it is good practice to make it protected/private and have getters/setters instead }

Print(ExampleClass.bStaticValue); // works ExampleClass.bStaticValue = true; // works

ExampleClass classInstance = new ExampleClass(); Print(classInstance.bStaticValue); // works classInstance.bStaticValue = true; // works </enforce> {{Feature|warning|Due to the nature of per-scenario mod loading/unloading, {{hl|static}} properties '''are reset game-wide''' on modded scenario start/leave due to game and scripts' entire reload.}} |- ! === autoptr === | Modifier for class/pointer values. Pointed object will be automatically destroyed upon end of variable lifetime (end of scope, or deletion of class, that contain it). {{Feature|informative|This keyword is useless in scripting as all classes inherit {{hl|Managed}}, therefore are managed by [[Arma Reforger:Scripting: Automatic Reference Counting|ARC]].}} |- ! === ref === | Strong reference. See [[Arma Reforger:Scripting: Automatic Reference Counting|Automatic Reference Counting]] for more information. |}

== Code Keywords ==

{| class="wikitable valign-top" ! Keyword ! Description |- ! === auto === | Guess the type of the variable. Its usage is '''not''' recommended (see {{Link|Arma Reforger:Scripting: Best Practices|Best Practices}})! <enforce> auto myVar = 5; // understood as int myVar = 5

// but it may have been meant as: float myVar = 5; </enforce> |- ! === new === | Creates an instance of the provided class. <enforce> class ExampleClass { }

ExampleClass classInstance = new ExampleClass(); </enforce> <enforce> class ExampleClass { void ExampleClass(int myValue) // a method named from the class is the constructor { Print(myValue); } }

ExampleClass classInstance = new ExampleClass(5); // needs Constructor-defined arguments </enforce> |- ! === delete === | Deletes an object and sets all its references to {{hl|null}}. {{Feature|important|It is not possible to delete an object if there is an external reference to it, like an array.}} <enforce> class ExampleClass { void Method() { ReferencedClass obj; if (!obj) Print("obj is null");

obj = new ReferencedClass(); if (obj) Print("obj is not null");

delete obj; if (!obj) Print("obj is null");

// everything was fine

obj = new ReferencedClass(); if (obj) Print("obj is not null");

array<ref ReferencedClass> list = {}; list.Insert(obj);

delete obj; // throws a VM Exception } } </enforce> |- ! === thread === | Creates a script thread from a method. {{Feature|important| * {{hl|thread}} is to be used in {{GameCategory|armaR|Modding|Official Tools|text= Workbench}} plugins. In game, use the <enforce inline>GetGame().GetCallQueue().CallLater()</enforce> method. * A script thread is not a real thread and member variables are therefore "thread-safe". }} <enforce> class ExampleClass { // calling this method will print // "MainMethod start" // "ThreadMethod start", // "MainMethod end" // then 500ms later, "ThreadMethod end" void MainMethod() { Print("MainMethod start"); thread ThreadMethod(); Print("MainMethod end"); }

protected void ThreadMethod() { Print("ThreadMethod start"); Sleep(500); Print("ThreadMethod end"); } } </enforce> ; Thread methods are only possible within a threaded method<nowiki>:</nowiki> * {{hl|Sleep}} takes an integer and waits for the provided amount of milliseconds * {{hl|Wait}} takes a bool condition and holds until the provided condition is true |- ! === null === | A null value. |- ! === this === | Refers to the method's object itself. <enforce> class ExampleClass { void MethodA() { this.MethodB(); }

void MethodB() { Print("It works"); } } </enforce>

Since {{GVI|armaR|1.1.0}}, {{hl|this}} is supported in static methods and behaves like the current type. <enforce> class Gen1 { static void DoSmth() { Print("A"); } }

class Gen2 : Gen1 { static override void DoSmth(Widget utility) { Print("B"); Print(this); // > Gen2 } } </enforce> |- ! === super === | Refers to the '''parent''' class for the requested variable/method. <enforce> class Gen1 { void Method() { Print("Gen1 method"); } }

class Gen2 : Gen1 { override void Method() { Print("Gen2 method"); } }

class Gen3 : Gen2 { override void Method() { super.Method(); // prints "Gen2 method" } } </enforce>

Since {{GVI|armaR|1.1.0}}, {{hl|super}} is supported in static methods and behaves like a type. <enforce> class Gen1 { static int a = 33; int b = 42; static void ShowMessage() { Print("A"); } }

class Gen2 : Gen1 { static override void ShowMessage(Widget utility) { Print("B"); Print(super); // > Gen1 Print(super.a); // > a = 33 // Print(super.b); <- error - not a static property super.ShowMessage(); // > "A" } } </enforce>

|- ! {{ArgTitle|3|vanilla|{{GVI|armaR|1.1.0}}}} | Refers to the '''unmodded''' version of the modded variable/method. <enforce> class ClassA { static void Hello() { Print("vanilla"); } }

// mod 1 content modded class ClassA { override static void Hello() { Print("modded 1"); } }

// mod 2 content modded class ClassA { override static void Hello() { super.Hello(); vanilla.Hello(); Print("modded 2"); } }

void Test() { ClassA o = new ClassA(); o.Hello(); // prints modded 1, vanilla, modded 2 } </enforce> |- | === debug === | Triggers a breakpoint in {{Link|Arma Reforger:Script Editor}}. {{Feature|informative|This keyword is currently not highlighted as such in Script Editor.}} <enforce> class MyClass { [Attribute(defvalue: "0", desc: "Use breakpoints in Workbench")] protected bool m_bUseBreakpoints;

static void Hello() { Print("This is debugging"); #ifdef WORKBENCH if (m_bUseBreakpoints) debug; #endif // WORKBENCH } } </enforce> |}

== Code Flow Keywords ==

{| class="wikitable valign-top" ! Keyword ! Description |- ! === if === | verifies a boolean condition. If the condition is true then the code is executed. <enforce> void Method(int value = 0) { if (value > 50) Print("value is > 50"); } </enforce> |- ! === else === | optional, declares code to be executed if the if condition is not met <enforce> void Method(int value = 0) { if (value > 50) Print("value is > 50"); else Print("value is <= 50"); } </enforce> |- ! === for === | processes code while the provided condition is met. The syntax is: <enforce> for (initialisation; loopCondition; completionCode) { // code here } </enforce> <enforce> void MethodA(notnull array<string> words) { // for (int i = 0; i < words.Count(); i++) // this if for example's sake; use '''foreach''' instead for (int i, count = words.Count(); i < count; ++i) // optimised { Print(words[i]); } }

void MethodB(notnull array<string> words) { int i; // auto-initialised to zero int count = words.Count(); for (; i < count; i++) // initialisation is optional { Print(words[i]); } }

void MethodC(notnull array<string> words) { for (int i, count = words.Count(); i < count;) // so is completionCode { Print(words[i]); i++; // do not forget it! } } </enforce> |- ! === foreach === | processes code for each element of an iterable object (e.g an array). Iteration separator is{{hl|:}}. <enforce> // array example void Method(notnull array<string> words) { foreach (string word : words) { Print(word); }

foreach (int index, string word : words) { PrintFormat("word #%1 is %2", index, word); } } </enforce> <enforce> // map example void Method(notnull map<string, int> data) { foreach (string key, int value : data) { PrintFormat("Key %1's value is %2", key, value); } } </enforce> |- ! === while === | processes code while condition is met. Beware, as it can lock the program on wrong conditions! <enforce> void Method(array<string> words) { int i = 0; while (i < words.Count()) { Print(words[i]); i++; // do not forget it! } } </enforce> |- ! === switch === | switches the code to execute depending on the condition <enforce> void Method(string word) { switch (word) { case "Hello": Print("it's Hello"); break;

case "there": Print("it's there"); break;

default: Print("it's not interesting."); break; } } </enforce> |- | === continue === | Used to skip to the next iteration in {{hl|for}}, {{hl|foreach}}, {{hl|while}} loops <enforce> class ExampleClass { // this method will print 0, 1, 2, 4 void Skip3() { for (int i; i < 5; i++) { if (i == 3) continue;

Print(i.ToString()); } }

void MethodB() { foreach (IEntity entity : m_aEntities) { if (!entity) continue;

Print(entity); } } } </enforce> |- ! === return === | Exits the method immediately with the provided value if any. <enforce> class ExampleClass { void PrintHelloThere(bool print) { if (!print) return; // ends here if print is false

Print("Hello there"); }

float GetDistanceNotZero(vector v1, vector v2) { if (v1 == v2) return -1;

return vector.Distance(v1, v2); } } </enforce> |}

{{GameCategory|armaR|Modding|Scripting|Guidelines}}
mya72m1dc0o9xo66jta6q91m8ydbw6x

# Arma Reforger:Scripting: Operators

5050
32422
376063
373188
2025-07-24T19:25:59Z
Lou Montana
10739
Add <<=, >>= operators and sign extension warning
376063
wikitext
text/x-wiki
{{TOC|side}} '''Operators''' are elements used to generate operations between two values.

{{TOC|subtoc|content= * 1 {{Link|#Precedence}} * 2 {{Link|#Types}} ** 2.1 {{Link|#Assignment}} ** 2.2 {{Link|#Arithmetic}} ** 2.3 {{Link|#Relational}} ** 2.4 {{Link|#Logical}} ** 2.5 {{Link|#Bitwise}} ** 2.6 {{Link|#String}} ** 2.7 {{Link|#Indexing}} }}

== Precedence ==

Operators precedence (one having execution priority over another) in Enforce Script is identical to the C language:

<spoiler text="Show Enfusion Operator Precedence table"> {| class="wikitable" ! Precedence ! Operator ! Description ! Associativity |- ! rowspan="5" | 1 | <enforce>++</enforce> | Postfix increment | rowspan="5" | Left-to-right |- | <enforce>--</enforce> | Postfix decrement |- | <enforce>()</enforce> | Function call |- | <enforce>[]</enforce> | Array subscripting |- | <enforce>.</enforce> | Element selection by reference |- ! rowspan="8" | 2 | <enforce>++</enforce> | Prefix increment | rowspan="8" | Right-to-left |- | <enforce>--</enforce> | Prefix decrement |- | <enforce>+</enforce> | Unary plus |- | <enforce>-</enforce> | Unary minus |- | <enforce>!</enforce> | Logical NOT |- | <enforce>~</enforce> | Bitwise NOT |- | <enforce>new</enforce> | Dynamic memory allocation |- | <enforce>delete</enforce> | Dynamic memory deallocation |- ! rowspan="3" | 3 | <enforce>*</enforce> | Multiplication | rowspan="3" | Left-to-right |- | <enforce>/</enforce> | Division |- | <enforce>%</enforce> | {{Link|https://en.wikipedia.org/wiki/Modulo_operation|Modulo}} (remainder) |- ! rowspan="2" | 4 | <enforce>+</enforce> | Addition | rowspan="2" | Left-to-right |- | <enforce>-</enforce> | Subtraction |- ! rowspan="2" | 5 | <enforce><<</enforce> | {{Link|https://en.wikipedia.org/wiki/Bitwise_operation|Bitwise}} left shift | rowspan="2" | Left-to-right |- | <enforce>>></enforce> | {{Link|https://en.wikipedia.org/wiki/Bitwise_operation|Bitwise}} right shift |- ! rowspan="4" | 6 | <enforce><</enforce> | Less than | rowspan="4" | Left-to-right |- | <enforce><=</enforce> | Less than or equal to |- | <enforce>></enforce> | Greater than |- | <enforce>>=</enforce> | Greater than or equal to |- ! rowspan="2" | 7 | <enforce>==</enforce> | Equal to | rowspan="2" | Left-to-right |- | <enforce>!=</enforce> | Not equal to |- ! 11 | <enforce>&</enforce> | Bitwise AND | Left-to-right |- ! 12 | <enforce>^</enforce> | Bitwise XOR (e'''x'''clusive '''or''') | Left-to-right |- ! 13 | <enforce>|</enforce> | Bitwise OR (inclusive or) | Left-to-right |- ! 14 | <enforce>&&</enforce> | Logical AND | Left-to-right |- ! 15 | <enforce>||</enforce> | Logical OR | Left-to-right |- ! rowspan="11" | 8 | <enforce>=</enforce> | Direct assignment | rowspan="11" | Right-to-left |- | <enforce>+=</enforce> | Assignment by sum |- | <enforce>-=</enforce> | Assignment by difference |- | <enforce>*=</enforce> | Assignment by product |- | <enforce>/=</enforce> | Assignment by quotient |- | <enforce>%=</enforce> | Assignment by remainder |- | <enforce><<=</enforce> | Assignment by bitwise left shift |- | <enforce>>>=</enforce> | Assignment by bitwise right shift |- | <enforce>&=</enforce> | Assignment by bitwise AND |- | <enforce>^=</enforce> | Assignment by bitwise XOR |- | <enforce>|=</enforce> | Assignment by bitwise OR |} </spoiler> or see the {{Link|https://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence|Wikipedia article section}}.

== Types ==

=== Assignment ===

<div style="font-family: monospace"> ==== = ==== </div> The "assign" operator sets the righthand value to the lefthand variable. <enforce> int five = 5; </enforce> {{Feature|important|This operator is '''NOT''' an equality check. For this, see {{Link|#{{=}}{{=}}}}.}}

<div style="font-family: monospace"> ==== ++ ==== </div> The increment (or post-increment) operator adds 1 to the provided numerical variable. It only applies to int and float values. <enforce> int result = 5; result++; // result is 6 </enforce>

This operator can be used ''before'' the value as well (it is then called ''pre-increment'' operator): <enforce> int result = 5; ++result; // result is 6 </enforce>

The difference is that the ''returned'' value is incremented too: <!-- let's not talk about how ++i ''may'' be faster than i++ here --> {| | <enforce> int result = 5; Print(result++); // outputs 5, result is 6 </enforce> | <enforce> int result = 5; Print(++result); // outputs 6, result is 6 </enforce> |}

<div style="font-family: monospace"> ==== -- ==== </div> The decrement (or post-decrement) operator removes 1 to the provided numerical variable. It only applies to int and float values. <enforce> int result = 5; result--; // result is 4 </enforce>

Same as {{Link|#++}}, this operator can be used ''before'' the value (then called ''pre-decrement'' operator): <enforce> int result = 5; --result; // result is 4 </enforce>

{| | <enforce> int result = 5; Print(result--); // outputs 5, result is 4 </enforce> | <enforce> int result = 5; Print(--result); // outputs 4, result is 4 </enforce> |}

<div style="font-family: monospace"> ==== += ==== </div> The "add to" operator adds the righthand value to the lefthand variable. <enforce> int result = 5; result += 3; // result is 8 </enforce>

<div style="font-family: monospace"> ==== -= ==== </div> The "subtract from" operator subtract the righthand value to the lefthand variable. <enforce> int result = 5; result -= 3; // result is 2 </enforce>

<div style="font-family: monospace"> ==== *= ==== </div> The "multiply with" operator multiplies the lefthand variable with the righthand value. <enforce> int result = 5; result *= 3; // result is 15 </enforce>

<div style="font-family: monospace"> ==== /= ==== </div> The "divide by" operator multiplies the lefthand variable with the righthand value. <enforce> int result = 5; result /= 3; // result is 1 (floored int value) </enforce>

<div style="font-family: monospace"> ==== <<= ==== </div> The "left-offset by" operator offsets the lefthand variable to the left by the righthand value. <enforce> int result = 0x0000FF32; result <<= 8; // result is 0x00FF3200 </enforce>

<div style="font-family: monospace"> ==== >>= ==== </div> The "right-offset by" operator offsets the lefthand variable to the right by the righthand value. <enforce> int result = 0x00FF3200; result >>= 8; // result is 0x0000FF32 </enforce> {{Feature|important| Beware of {{Link|https://en.wikipedia.org/wiki/Sign_extension|sign extension}}: <enforce> int result = 0x80000000; result >>= 8; // result is 0x<u>'''FF'''</u>800000 </enforce> }}

=== Arithmetic ===

<div style="font-family: monospace"> ==== + ==== </div> he "adds" operator does an addition between two numeric values, float and/or integer. <enforce> 5 + 3; // result is 8 (int) 5 + 2.5; // result is 7.5 (float) 3.25 + 1.75; // result is 5.0 (float) </enforce>

<div style="font-family: monospace"> ==== - ==== </div> The "subtract from" operator does a subtraction between two numerical values, float and/or integer. <enforce> 5 - 3; // result is 2 (int) 5 - 2.5; // result is 2.5 (float) 3.25 - 1.25; // result is 2.0 (float) </enforce>

<div style="font-family: monospace"> ==== * ==== </div> The multiplication sign does a multiplication between two numerical values, float and/or integer. <enforce> 5 * 3; // result is 15 5 * 2.5; // result is 12.5 (float) 1.5 * 3.25; // result is 4.875 (float) </enforce>

<div style="font-family: monospace"> ==== / ==== </div> The "divided by" operator divides the left argument by the right one.<br> It can be applied to int, float or a mix of those. If both values are int, the return value will be a '''floored''' integer as well. <enforce> 5 / 3; // result is 1 (int): 5/3 = 1.666(...), but integer floors the value 5 / 2.5; // result is 2.0 (float) 3.5 / 0.5; // result is 7.0 (float) </enforce>

<div style="font-family: monospace"> ==== % ==== </div> Modulo is an operator that gives the remainder of a division.<br> It only applies to integers. {{Feature|informative|See the <enforce inline>Math.Repeat()</enforce> method for a float modulo approximation.}} <enforce> 5 % 3; // result is 2: 5 is one time 3, remaining 2 10 % 2; // result is 0: 10 is five times 2, remaining 0 </enforce>

=== Relational ===

<div style="font-family: monospace"> ==== &gt; ==== </div> The "greater than" operator returns '''true''' if the left argument is strictly greater than the right argument, false otherwise.<br> It can be applied to int, float or a mix of those. <enforce> 10 > 11; // false 10 > 10; // false 10 > 9; // true

10 > 5; // true 10 > 5.5; // true 10.5 > 5; // true </enforce>

<div style="font-family: monospace"> ==== &lt; ==== </div> The "lesser than" operator returns '''true''' if the left argument is strictly smaller than the right argument, false otherwise.<br> It can be applied to int, float or a mix of those. <enforce> 10 < 11; // true 10 < 10; // false 10 < 9; // false

10 < 5; // false 10 < 5.5; // false 10.5 < 5; // false </enforce>

<div style="font-family: monospace"> ==== &gt;= ==== </div> The "greater than or equal" operator returns '''true''' if the left argument is greater than or equal to the right argument, false otherwise.<br> It can be applied to int, float or a mix of those. <enforce> 10 >= 11; // false 10 >= 10; // true 10 >= 9; // true

10 >= 5; // true 10 >= 5.5; // true 10.5 >= 5; // true </enforce>

<div style="font-family: monospace"> ==== &lt;= ==== </div> The "lesser than or equal" operator returns '''true''' if the left argument is smaller than or equal to the right argument, false otherwise.<br> It can be applied to int, float or a mix of those. <enforce> 10 <= 11; // true 10 <= 10; // true 10 <= 9; // false

10 <= 5; // false 10 <= 5.5; // false 10.5 <= 5; // false </enforce>

<div style="font-family: monospace"> ==== == ==== </div> The "equals" operator returns '''true''' if the left argument is strictly equal to the right argument, false otherwise.

Applies to: * bool * int * float * int / float, float / int * string (case-sensitive) * vector (value) * array (reference) * object (reference) <enforce> true == true; // true true == false; // false

10 == 11; // false 10 == 10; // true 10 == 9; // false

10 == 10.0; // true 10 == 10.1; // false

MyClass object1 = new MyClass(); MyClass object2 = object1; object1 == object2; // true - same type, same instance

MyClass object1 = new MyClass(); MyClass object2 = new MyClass(); object1 == object2; // false - same type, different instance </enforce>

<div style="font-family: monospace"> ==== != ==== </div> The "different" operator returns '''true''' if the left argument is different from the right argument, false otherwise.

Applies to: * bool * int * float * int / float, float / int * string (case-sensitive) * vector (value) * array (reference) * object (reference) <enforce> 10 != 11; // true 10 != 10; // false 10 != 9; // true

10 != 10.0; // false 10 != 10.1; // true

MyClass object1 = new MyClass(); MyClass object2 = object1; object1 != object2; // false - same instance

MyClass object1 = new MyClass(); MyClass object2 = new MyClass(); object1 != object2; // true - different instance </enforce>

=== Logical ===

<div style="font-family: monospace"> ==== &amp;&amp; ==== </div> The "and" operator returns '''true''' if both left and right conditions are true. <enforce> bool a = false; bool b = false; bool result = a && b; // result is false

bool a = true; bool b = false; bool result = a && b; // result is false

bool a = true; bool b = true; bool result = a && b; // result is true </enforce>

<div style="font-family: monospace"> ==== {{!}}{{!}} ==== </div> The "or" logical operator returns '''true''' if left or right condition is true (or both). <enforce> bool a = false; bool b = false; bool result = a || b; // result is false

bool a = true; bool b = false; bool result = a || b; // result is true

bool a = true; bool b = true; bool result = a || b; // result is true </enforce>

<div style="font-family: monospace"> ==== ! ==== </div> The "not" logical operator inverts a bool value: {{hl|true}} becomes {{hl|false}} and {{hl|false}} becomes {{hl|true}}.<br> It can also be used on: * int or float (0 comparison) * string (empty string comparison - usage of the {{hl|string.IsEmpty()}} method is preferred) * object (null comparison) <enforce> bool a = true; bool result = !a; // result is false

bool a = false; bool result = !a; // result is true

bool isAlive = player.IsAlive(); bool isDead = !isAlive;

int health = 0; if (!health) // same as if (health == 0) - not recommended Print("dead");

float fHealth = 0.0; if (!fHealth) // same as if (fHealth == 0) - not recommended Print("dead");

string data = ""; if (!data) // same as if (data.IsEmpty()) and if (data == "") - not recommended Print("empty string");

MyClass instance = null; if (!instance) // same as if (instance == null) Print("instance is null!");

// note that if (value) to check an object is -not- null works too if (instance) // same as if (instance != null) Print("instance is NOT null!"); </enforce>

=== Bitwise ===

<div style="font-family: monospace"> ==== &amp; ==== </div> The "bitwise AND" operator applies a AND operation between values bits - both bits must be 1 to return 1, otherwise 0 is returned. <enforce> int a = 13; // 00001101 in binary int b = 11; // 00001011 in binary int result = a & b; // 00001001 in binary // result is 9 </enforce>

<div style="font-family: monospace"> ==== {{!}} ==== </div> The "bitwise OR" operator applies a OR operation between values bits - one of the bits must be 1 to return 1, otherwise 0 is returned. <enforce> int a = 13; // 00001101 in binary int b = 11; // 00001011 in binary int result = a | b; // 00001111 in binary // result is 15 </enforce>

<div style="font-family: monospace"> ==== ~ ==== </div> The "bitwise NOT" operator reverts all bits of the provided value: 1 becomes 0 and vice-versa. <enforce> int a = 7; // 0000 0000 0000 0000 0000 0000 0000 0111 in binary (integer is 32 bits) int result = ~a; // 1111 1111 1111 1111 1111 1111 1111 1000 in binary // result is -8 </enforce>

<div style="font-family: monospace"> ==== &lt;&lt; ==== </div> The left shift operator moves all bits of the provided value to the left. <enforce> int a = 1; // 00000001 in binary int result = a << 2; // shift 'a' bits 2 steps to the left // leftmost bits are pushed "out" // rightmost bits are filled with zeros // result is 00000100 // result is 4 </enforce>

<div style="font-family: monospace"> ==== &gt;&gt; ==== </div> The right shift operator moves bits of the provided value to the right. <enforce> int a = 6; // 00000110 in binary int result = a >> 2; // shift 'a' bits 2 steps to the left // leftmost bits are filled with zeros // rightmost bits are pushed "out" // result is 00000001 // result is 1 </enforce>

=== String ===

<div style="font-family: monospace"> ==== + ==== </div> The "adds" operator used with strings concatenates them. When it is used with string and another type, it will stringify (calling its .ToString() method) the other value. The left argument '''must''' be of string type for it to happen. <enforce> string a = "Hello"; string b = "there"; string result = a + b; // result is "Hellothere" string result = a + " " + b; // result is "Hello there"

string stringifiedBool = "string " + true; // result is "string true" string stringifiedInt = "string " + 42; // result is "string 42" string stringifiedFloat = "string " + 4.0; // result is "string 4" string stringifiedFloat = "string " + 4.2; // result is "string 4.2" string stringifiedArray = "string " + myArray; // result is e.g "string 0x000002820B75EA68 {0,1,2,3,4}" string stringifiedVector = "string " + myVector; // result is e.g "string <0.000000, 0.500000, 1.000000>" string stringifiedEnum = "string " + MyEnum.B; // result is e.g "string 1" string stringifiedObject = "string " + myObject; // result is e.g "string MyClass<0x00000282360ECFD0>" string stringifiedTypename = "string " + MyClass; // result is e.g "string MyClass"

string ok1 = "test" + 3; // will return "test3" string ok2 = "test" + 3 + true + false + 4; // will return "test3104" string error = 3 + "test"; // will throw a parsing error </enforce>

=== Indexing ===

<div style="font-family: monospace"> ==== <nowiki>[]</nowiki> ==== </div> The "get index" operator is used on arrays to get an element by its '''zero-based''' index (e.g 0 is first element, 1 is second, etc). It is '''very''' efficient on '''static''' arrays. It can also be used on strings, as strings are arrays of characters. <enforce> int staticNumbers[5] = { 1, 2, 3, 4, 5 }; int thirdStaticNumber = staticNumbers[2]; // result is 3, lightning fast on static arrays

array<int> numbers = { 1, 2, 3, 4, 5 }; int thirdNumber = letters[2]; // result is 3

array<string> letters = { "A", "B", "C", "D", "E" }; string thirdLetter = letters[2]; // result is "C"

string text = "ABCDE"; string thirdLetter = text[2]; // result is "C" </enforce>

{{Feature|important| The {{hl|[i]}} operator is equivalent to a <enforce inline>.Get(i)</enforce> method call for anything else than static arrays; in order to save unrequired method calls, either use {{Link|Arma Reforger:Scripting: Keywords#foreach|foreach}} or cache the call result whenever possible. <enforce> // bad for (int i, count = myArray.Count(); i < count; i++) { if (myArray[i].IsEmpty()) // .Get(i) equivalent Print("#" + i + " is empty"); else Print("trimmed '" + myArray[i] + "' is '" + myArray[i].Trim() + "'"); // .Get(i) equivalent, twice }

// good for (int i, count = myArray.Count(); i < count; i++) { string value = myArray[i]; // .Get(i) equivalent if (value.IsEmpty()) Print("#" + i + " is empty"); else Print("trimmed '" + value + "' is '" + value.Trim() + "'"); }

// best foreach (int i, string value : myArray) { if (value.IsEmpty()) Print("#" + i + " is empty"); else Print("trimmed '" + value + "' is '" + value.Trim() + "'"); } </enforce> }}

{{GameCategory|armaR|Modding|Scripting|Guidelines}}
rvoaewco9ozkg2awtzs0ci0940p8hja

# Arma Reforger:Scripting: Performance

5050
32427
378053
371002
2026-02-02T12:03:40Z
Lou Montana
10739
Some wiki formatting
378053
wikitext
text/x-wiki
{{TOC|side}} Performance is an important aspect of scripting, as poor performance can tank the whole gaming experience, if not the game itself.

* What is tanking performances ** Crazy requests ** Memory saturation ** Redundant code operations * How to benchmark/identify what slows down things ** What is acceptable? ** What is not?

== Performance Enemies ==

Many if not all of the usual performance issues can see some of these questions asked: * is it ''needed? * is it ''needed there?'' * is it ''needed that much?'' * is it ''needed immediately?'' * is it ''needed that frequently?''

and the respective solutions to positive replies to these questions would be: * don't do it: quite straightforward, can mean to remove the code or to replace it with a simpler code * don't do it ''there'': the concerned class might be dealing with responsibilities that are out of its scope * don't do it ''that much'': the structure can be rethought in order to have fewer operations to be executed * don't do it ''in one frame'': the calculation can be spread over multiple frames and result delayed and cached * don't do it ''that frequently'': the code can be set to run every X seconds, result being delayed and cached until the next iteration

=== Not Needed ===

==== Problem ==== Partially unneeded calculation is done.

==== Solution ==== * Remove the unneeded code * Split the code to only do needed processing in each case

=== Misplaced ===

==== Problem ==== A calculation/storage is done on every instance whereas calculation could be centralised.

==== Solution ==== Move the responsibility and the data to a dedicated class ('''S''' from {{Link|https://en.wikipedia.org/wiki/SOLID}}, '''S'''ingle '''R'''esponsibility '''P'''rinciple).

==== Example ==== {| class="wikitable" style="width: 100%" ! style="width: 50%" | Original ! Optimised |- style="vertical-align: top" | <enforce> class PerformanceExample : IEntity { protected ref array<ref PotentialTarget> m_aBigObjectList = { /* ... */ };

protected array<ref PotentialTarget> GetTargets() { array<ref PotentialTarget> result = {}; foreach (PotentialTarget object : m_aBigObjectList) { if (object.IsEnemyTo(this.GetFaction())) result.Insert(object); }

return result; } } </enforce> | <enforce> class EnemyManager { protected ref map<Faction, ref array<ref PotentialTarget>> m_mTargetMap;

void EnemyManager(array<ref PotentialTarget> potentialTargets) { m_mTargetMap = new map<Faction, ref array<ref PotentialTarget>>();

array<ref PotentialTarget> factionTargets; foreach (Faction faction : Faction.GetAllFactions()) { factionTargets = {}; foreach (PotentialTarget potentialTarget : potentialTargets) { if (potentialTarget.IsEnemyTo(faction)) factionTargets.Insert(potentialTarget); }

m_mTargetMap.Set(faction, factionTargets); } }

array<ref PotentialTarget> GetTargets(Faction faction) { return m_mTargetMap.Get(faction); } }

class PerformanceExample : IEntity { protected ref EnemyManager m_EnemyManager;

void PerformanceExample(notnull EnemyManager enemyManager) { m_EnemyManager = enemyManager; }

protected array<ref PotentialTarget> GetTargets() { return m_EnemyManager.GetTargets(this.GetFaction()); } } </enforce> |}

=== Ill-Conceived ===

==== Problem ==== A big array of data is processed at once. Going through all the data is not needed.

==== Solution ==== Stop as soon as an acceptable result has been obtained.

==== Example ==== {| class="wikitable" style="width: 100%" ! style="width: 50%" | Original ! Optimised |- style="vertical-align: top" | <enforce> class PerformanceExample : IEntity { protected ref array<ref AliveOrNotObject> m_aBigObjectList = { /* ... */ };

protected int GetNumberOfAliveObjects() { int result; foreach (AliveOrNotObject object : m_aBigObjectList) { if (object.IsAlive()) result++; }

return result; }

bool IsAnObjectAlive() { // heavy: goes through all objects to know if -one- is alive return GetNumberOfAliveObjects() > 0; } } </enforce> | <enforce> class PerformanceExample : IEntity { protected ref array<ref AliveOrNotObject> m_aBigObjectList = { /* ... */ };

bool IsAnObjectAlive() { foreach (AliveOrNotObject object : m_aBigObjectList) { if (object.IsAlive()) return true; // stops on the first occurence }

return false; // goes through all instances to reach false - less likely } } </enforce> |}

=== Spread ===

==== Problem ==== A big array of data is processed at once. The calculation itself is not the issue, the amount of items is.<br> '''or'''<br> A heavy calculation is done, and only one such operation should happen per frame.

==== Solution ==== Spread the calculation over multiple frames.

==== Example 1 ==== Array size issue: {| class="wikitable" style="width: 100%" ! style="width: 50%" | Original ! Optimised |- style="vertical-align: top" | <enforce> class PerformanceExample : IEntity { protected ref array<ref AliveOrNotObject> m_aBigObjectList = { /* ... */ };

void EOnInit(IEntity owner) { GetGame().GetCallqueue().CallLater(PrintResult, 250, true); }

int GetNumberOfAliveObjects() { int result = 0; foreach (AliveOrNotObject object : m_aBigObjectList) { if (object.IsAlive()) result++; }

return result; }

void PrintResult() { Print("Alive objects = " + GetNumberOfAliveObjects()); } } </enforce> | <enforce> class PerformanceExample : IEntity { protected ref array<ref AliveOrNotObject> m_aBigObjectList = { /* ... */ }; protected ref array<ref AliveOrNotObject> m_aObjectsToBeProcessed = {}; protected bool m_bIsCalculating; protected int m_iTempResult; protected int m_iAliveCountBuffer;

void EOnInit(IEntity owner) { Calculate(); GetGame().GetCallqueue().CallLater(PrintResult, 250, true); }

void EOnFrame(IEntity owner, float timeSlice) { if (m_bIsCalculating) Calculate();

// other frame things // ... }

void Calculate() { int objCount = m_aObjectsToBeProcessed.Count(); if (objCount < 1) { m_bIsCalculating = true; m_iTempResult = 0; m_aObjectsToBeProcessed.Copy(m_aBigObjectList); }

// max 10k items slice for (int i, maxCount = Math.Min(objCount, 10000); i < maxCount; i++) { AliveOrNotObject object = m_aObjectsToBeProcessed[0]; // always @ index 0 // for we remove the first item later if (object.IsAlive()) m_iTempResult++;

m_aObjectsToBeProcessed.Remove(0); objCount--; }

if (objCount < 1) { m_iAliveCountBuffer = m_iTempResult; GetGame().GetCallqueue().CallLater(Calculate, 1000); // restart calculation in 1 second m_bIsCalculating = false; } }

int GetNumberOfAliveObjects() { return m_iAliveCountBuffer; }

void PrintResult() { Print("Alive objects = " + GetNumberOfAliveObjects()); } } </enforce> |}

==== Example 2 ==== Heavy calculation issue: {| class="wikitable" style="width: 100%" ! style="width: 50%" | Original ! Optimised |- style="vertical-align: top" | <enforce> class PerformanceExample : IEntity { protected ref array<ref Player> m_aPlayers = { /* ... */ }; protected ref map<ref Player, bool> m_mCastResult; protected BaseWorld m_World;

void PerformanceExample() { m_mCastResult = new map<ref Player, bool>(); m_World = GetGame().GetWorld(); }

void CheckLineOfSight() { float result; TraceParam traceParam; foreach (Player player : m_aPlayers) { traceParam = new TraceParam(); traceParam.Start = this.Position(); traceParam.End = player.Position();

// a Trace is a very expensive operation result = m_World.TraceMove(traceParam, null); m_mCastResult.Set(player, result == 1); } } } </enforce> | <enforce> class PerformanceExample : IEntity { protected ref array<ref Player> m_aPlayers = { /* ... */ }; protected ref map<ref Player, bool> m_mCastResult; protected BaseWorld m_World; protected int m_iIndex = -1; protected bool m_bIsCalculating;

void PerformanceExample() { m_mCastResult = new map<ref Player, bool>(); m_World = GetGame().GetWorld(); }

void EOnFrame(IEntity owner, float timeSlice) { if (m_bIsCalculating) CheckLineOfSight(); }

void CheckLineOfSight() { m_iIndex++; m_bIsCalculating = m_iIndex < m_aPlayers.Count(); if (!m_bIsCalculating) { m_iIndex = -1; return; }

Player player = m_aPlayers[m_iIndex]; TraceParam traceParam = new TraceParam(); traceParam.Start = this.Position(); traceParam.End = player.Position();

// only one Trace per frame float result = m_World.TraceMove(traceParam, null); m_mCastResult.Set(player, result == 1); } } </enforce> |}

=== Immediate Calculation ===

==== Problem ==== A heavy operation is done frequently.

==== Solution ==== Do the heavy operation once, store its result in a member variable and accessible through a getter.

==== Example ==== {| class="wikitable" style="width: 100%" ! style="width: 50%" | Original ! Optimised |- style="vertical-align: top" | <enforce> class PerformanceExample : IEntity { protected ref array<ref AliveOrNotObject> m_aBigObjectList = { /* ... */ };

void EOnInit(IEntity owner) { GetGame().GetCallqueue().CallLater(PrintResult, 250, true); }

int GetNumberOfAliveObjects() { int result = 0; foreach (AliveOrNotObject object : m_aBigObjectList) { if (object.IsAlive()) result++; }

return result; }

void PrintResult() { Print("Alive objects = " + GetNumberOfAliveObjects()); } } </enforce> | <enforce> class PerformanceExample : IEntity { protected ref array<ref AliveOrNotObject> m_aBigObjectList = { /* ... */ }; protected int m_iAliveCountBuffer;

void EOnInit(IEntity owner) { GetGame().GetCallqueue().CallLater(Calculate, 1000, true); // calculate only every second GetGame().GetCallqueue().CallLater(PrintResult, 250, true); // display result every 1/4 second }

void Calculate() { int result = 0; foreach (AliveOrNotObject object : m_aBigObjectList) { if (object.IsAlive()) result++; }

m_iAliveCountBuffer = result; }

int GetNumberOfAliveObjects() { return m_iAliveCountBuffer; }

void PrintResult() { Print("Alive objects = " + GetNumberOfAliveObjects()); } } </enforce> |}

== Specific Issues ==

=== Big Foreach ===

==== Problem ==== Going through one big list of items in one operation.

==== Specific Solution ==== * Use a smaller list by being more precise * Continue out of the scope if the item is not viable for the operation

=== High-Frequency Scripts ===

==== Problem ==== OnEachFrame calculations - are they needed?

==== Specific Solution ==== * Less resource-hungry calls * Buffering/caching

=== High-Performance Request ===

==== Problem ==== Is a 10km raycast really needed?

==== Solution ==== * Reconsider the need * Find a smarter solution

== Benchmark ==

=== What Should Be Of Concern ===

* Non time-critical operations that are made in the same frame * High RAM usage

=== What Should Not Be Of Concern ===

* Normal operations that are required and that one cannot do without (yes, check if the player is alive before performing action, otherwise the feature breaks) * One-time required big operation (spawning a base = data loading, no can do anything about it) <!-- === XXX ===

==== Problem ====

==== Solution ====

==== Example ==== {| class="wikitable" style="width: 100%" ! style="width: 50%" | Original ! Optimised |- style="vertical-align: top" | <enforce> </enforce> | <enforce> </enforce> |} -->

{{GameCategory|armaR|Modding|Scripting|Guidelines}}
2emzbdflq41x6onxte4p54fbt8qhd1p

# Arma Reforger:Scripting: Preprocessor Directives

5050
35070
371033
364920
2025-02-26T12:32:12Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
371033
wikitext
text/x-wiki
__NOEDITSECTION__ {{TOC|side}} Preprocessor directives allow to determine preprocessor behaviour, e.g ignoring blocks of code depending on certain conditions.

For use cases, see e.g {{Link|Arma Reforger:Scripting Temporary Feature|Scripting Temporary Feature}}.

{{Feature|informative|See also {{Link|Arma Reforger:Scripting: Preprocessor Macros}}.}}

{{Clear}} {| class="wikitable valign-top" ! Directive ! Description ! Example |- | === #define === | Define a flag. A flag is either defined or not. {{Feature|informative|A flag can be determined outside of the code; see {{Link|Arma_Reforger:Startup_Parameters#scrDefine|Startup Parameters - scrDefine}}.}} | <enforce>#define MY_FLAG</enforce> |- | === #ifdef === | Open a preprocessor scope that is considered if the provided flag is defined. The scope must be ended by {{hl|#endif}} (see below). | <enforce> #define MY_FLAG

#ifdef MY_FLAG Print("Flag is defined"); #endif </enforce> |- | === #ifndef === | Open a preprocessor scope that is considered if the provided flag is '''not''' defined. The scope must be ended by {{hl|#endif}} (see below). | <enforce> #define MY_FLAG

#ifndef MY_FLAG Print("Flag is not defined"); #endif

</enforce> |- | === #else === | Add a preprocessor scope that is of the opposite condition of the current {{hl|#ifdef}}/{{hl|#ifndef}}. The scope must be ended by {{hl|#endif}} (see below). | <enforce> #ifdef MY_FLAG Print("Flag is defined"); #else Print("Flag is not defined"); #endif </enforce> |- | === #endif === | Close a preprocessor scope - see #ifdef and #ifndef above. | See {{hl|#ifdef}} and {{hl|#ifndef}} above. |- | === #include === | Include another file. The effect is as if the other file's content was copy-pasted at this exact {{hl|#include}} location. | <enforce> // FileToInclude.c protected static const string MY_PRINT = "Hello there"; </enforce> <enforce> class SCR_ScriptedClass { #include "scripts/Game/FileToInclude.c" void ShowMessage() { Print(MY_PRINT); } } </enforce> |}

{{GameCategory|armaR|Modding|Scripting|Guidelines}}
gntppooi7p7gl8w666kqc4wb96ybh2e

# Arma Reforger:Scripting: Preprocessor Macros

5050
43642
370983
364919
2025-02-26T12:32:02Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370983
wikitext
text/x-wiki
__NOEDITSECTION__ {{TOC|side}} Preprocessor macros provide helpful context information, especially useful in debug.

{{Feature|informative|See also {{Link|Arma Reforger:Scripting: Preprocessor Directives}}.}}

{{Clear}} {| class="wikitable valign-top" ! Macro ! Description ! Example |- | === __FILE__ === | Is replaced by a string containing the current file's relative path. | <enforce> Print(__FILE__, LogLevel.NORMAL); // ends as e.g Print("scripts/WorkbenchGame/ScriptEditor/TAG_MyTestPlugin.c", LogLevel.NORMAL);

// this is absolutely valid string absPath; Workbench.GetAbsolutePath(__FILE__, absPath, true); Print(absPath); // e.g "D:/MyMods/TAG_MyMod/scripts/WorkbenchGame/ScriptEditor/TAG_MyTestPlugin.c" </enforce> |- | === __LINE__ === | Is replaced by a '''string''' containing the current file's line number. | <enforce> Print(__LINE__ + 2, LogLevel.NORMAL); // ends as Print("4" + 2, LogLevel.NORMAL); // "42" </enforce> |}

{{GameCategory|armaR|Modding|Scripting|Guidelines}}
tgke18jjiszi48koynzfew5x1kng0yy

# Arma Reforger:Scripting: Values

5050
32424
376864
371023
2025-12-08T23:05:32Z
Lou Montana
10739
/* Class */ Fix [[Arma Reforger:Object Oriented Programming Advanced Usage]] link
376864
wikitext
text/x-wiki
{{TOC|side}} A '''value''' describes a ''data holder''; a value is either a '''variable''' (that can be changed) or a '''constant''' (that cannot be changed).

Values are declared in Enfusion with a type, in format {{hl|type identifier {{=}} value}} (the {{hl|{{=}} value}} part being optional). Enforce Script uses strong types, which means a value's type cannot be changed along its lifetime.

== Identifier ==

An '''identifier''' is the actual name of a value; it ''identifies'' the value. The naming rules are:

* an identifier can be composed of ASCII letters, numbers and underscores * an identifier '''must''' start with an underscore or a letter ('''cannot''' start with a number) * an identifier is '''case-sensitive''' * an identifier '''cannot be identical to a keyword'''

The regular expression to be respected is: {{hl|^[a-zA-Z_][a-zA-Z0-9_]*$}}

It is ''recommended'' to write variable identifiers in camelCase, (e.g {{hl|aNewVariable}}) and constants' in UPPER_CASE (e.g {{hl|A_NEW_CONSTANT}}). See {{Link|Arma Reforger:Scripting: Conventions#Variable}} for {{armaR}} naming conventions.

<enforce> int myNumber = 10; int _myNumber = 10; int myNUMBER = 10; // different from myNumber

int 1number = 1; // wrong - starts with a number int my#variable = 1; // wrong - contains a character that is not letter/number/underscore int auto = 1; // wrong - the "auto" keyword exists and cannot be replaced </enforce>

== Value Declaration ==

Declaring a value is done by using a type and an identifier: <enforce> int myNumber; // variable myNumber is declared and auto-initialised to 0

myNumber = 10; // myNumber is now 10 </enforce>

It can also be directly created with a value: <enforce> int myNumber = 10; </enforce>

=== const ===

A value can be made '''constant''', meaning that it will remain the same along its lifetime. <enforce> string value1 = "value"; // value1's value is "value" const string CONST_VALUE = "value";

value1 = "new value"; // value1 is now "new value" CONST_VALUE = "new value"; // error: cannot modify a const value </enforce>

An object (array, set, map, other class instance) can be {{hl|const}} yet still have its values changed - {{hl|const}} here only keeps the reference and does not "freeze" the object in place. <enforce> const ref array<string> STRINGS = {};

STRINGS.Insert("Hello there"); // OK: the array remains the same, its content is changed STRINGS = null; // error: cannot modify a const value </enforce>

== Passing a Value ==

=== By Content ===

<enforce> // integers (whole numbers) are passed by content int myVar1 = 33; int myVar2 = myVar1; // myVar2 is 33 - it copied myValue1's content myVar2 = 42; // myVar2 is now 42, myVar1 is still 33 - they are two different values </enforce>

=== By Reference ===

<enforce> // arrays (list of values) are passed by reference array<int> myArray1 = { 0, 1, 2, 3 }; array<int> myArray2 = myArray1; // myArray2 targets myArray1 object - value is not copied but referenced myArray2[0] = 99; // myArray1 is now { 99, 1, 2, 3 }; </enforce>

== Types == {| class="wikitable float-right" |+ Prefix cheat sheet |- | <enforce> // root prefixes bool m_bValue; int m_iValue; float m_fValue; string m_sValue; SCR_EEnum m_eValue; vector m_vValue; array<x> m_aValue; map<x, y> m_mValue;

// children use parent's prefix ResourceName m_sResourceName; LocalizedString m_sLocalisedString; Curve m_aCurve;

// no prefix SCR_Class m_ClassInstance; typename m_ClassTypename; set<x> m_Set; Color m_Color; </enforce> |}

Values can be of various types, listed below.

Notions: * Passed by: content or reference - see above * Naming prefix: used in '''Object'''<nowiki/>'s value convention (See {{Link|Arma Reforger:Scripting: Conventions#Variable|conventions}}): {{hl|m_}} or {{hl|s_}} + '''prefix''' + VariableName (e.g: {{hl|m_'''b'''PlayerIsAlive {{=}} true}}){{Feature|informative|No prefix is used for constants in conventions.}} * Default value: the default value given when a value is declared without content (e.g: {{hl|int value}} - the variable here is 0, integer's default value)

{| class="wikitable" ! Incorrect ! Correct |- | <enforce> bool variable = true; if (variable) { variable = "it works!"; // not - variable is and remains a bool Print(variable); } </enforce> | <enforce> bool variable = true; if (variable) { string display = "it works!"; // correct Print(display); } </enforce> |}

=== Primitive Types ===

{| class="wikitable" ! Type name ! C++ equivalent ! Range ! Default value ! Size (Bytes) |- ! int | int32 | -2,147,483,648 through +2,147,483,647 | 0 | 4 |- ! float | float | ±1.18E-38 through ±3.402823E+38 | 0.0 | 4 |- ! bool | bool |''true'' or ''false'' | false | 4 |- ! string | char* | - |"" (empty string) | 8 (pointer) + (length × 1 byte) |- ! vector | float[3] | like float | { 0.0, 0.0, 0.0 } | 8 (pointer) + (3 × float) 12* |- ! void | void | - | - | - |- ! class | Instance* | pointer to any script object | null | 8 |- ! typename | VarType* | pointer to type structure | null | 8 |}

<nowiki>*</nowiki>the asterisk in C++ means a pointer.

=== Bool ===

Passed by: '''value'''

Naming prefix: '''b'''

Default value: '''false'''

A '''bool''' is a value that can be either '''true''' or '''false''' . For example, <enforce inline>bool result = 10 > 5;</enforce> result can either be true or false (here is true, as 10 is greater than 5).

Example: <enforce> bool myValue; // myValue is false myValue = 10 > 0; // myValue is true </enforce>

=== Integer ===

Passed by: '''value'''

Naming prefix: '''i'''

Default value: '''0'''

Range: -2,147,483,648 to 2,147,483,647

Description: An '''integer''' (or int) is a whole number, meaning a value without decimals. It can be positive or negative.

Example: <enforce> int myValue; // myValue is 0 myValue = 20; // myValue is 20 myValue /= 3; // myValue is 6: 20 / 3 = 6.666… which gets floored to 6 (and not rounded) </enforce>

=== Float ===

Passed by: '''value'''

Naming prefix: '''f'''

Default value: '''0.0'''

Range: 1.18 E-38 to 3.40 E+38

A '''float''', or its full name '''floating-point number''' is a number that can have decimals.

'''Precision''' is a matter at hand when working with floats; do not expect exact calculations: {{hl|0.1 + 0.1 + 0.1 !{{=}} 0.3}} - rounding would be needed to have the result one can expect.

{{Feature|informative| The further away from 0 the float value is, the less precision it has.<br> For "almost equal" comparison, see {{hl|float.AlmostEqual}}; the default accepted difference (epsilon) is 0.0001 (1/10000) and can be set for each operation as an optional third argument. }}

Example: <enforce> float myValue; // myValue is 0 (or 0.0) myValue = 1; // myValue is 1 (or 1.0) myValue /= 3; // myValue is 0.333333…

float originalValue = 1; float divisionResult = originalValue/3333; float result = divisionResult * 3333; originalValue == result; // returns false due to floating point precision float.AlmostEqual(originalValue, result); // returns true </enforce>

=== String ===

Passed by: '''value'''

Naming prefix: '''s'''

Default value: '''""''' (empty string)

Maximum length: 2,147,483,647 characters

Description: a '''string''' is a sequence of characters; it supports the following escape characters: {{hl|\n}} (line return) {{hl|\r}} (caret return) {{hl|\t}} (horizontal tabulation) {{hl|\\}} (antislash) {{hl|\"}} (double quote).

{{Feature|informative| * A string '''cannot''' be null * String comparison is '''case-sensitive'''; e.g <enforce inline>"abc" != "ABC"</enforce> }}

Example: <enforce> string username; // username is "" (empty string) username = "Player 1"; // username is "Player 1"; </enforce>

=== Enum ===

Passed by: '''value'''

Naming prefix: '''e'''

Default value: 0 (which may '''not''' exist in the enum)

An '''enum''' is a value that offers a choice between defined options.

"Behind the curtains" it is also an integer that can be assigned to an int variable.

Examples: <enforce> enum EHealthState { ALIVE, INJURED, UNCONSCIOUS, DEAD, }

EHealthState healthState; // healthState is ALIVE (0) healthState = EHealthState.UNCONSCIOUS; // healthState is UNCONSCIOUS (4) int myValue = EHealthState.ALIVE; // valid </enforce>

By default, the first value is equal to 0 and the next values are incremented by 1.

<enforce> enum EHealthState { ALIVE = 42, INJURED, // equals 43 UNCONSCIOUS = 50, DEAD, // equals 51 }

EHealthState healthState; // healthState is 0 (no corresponding enum) healthState = EHealthState.INJURED; // healthState is 43 (INJURED) int myValue = EHealthState.ALIVE; // 42 </enforce> <enforce> // an enum value can also be defined through {{Link|Arma Reforger:Scripting: Operators#<<|bit shifting}} for e.g flag usage enum ELifeStatus { HEALTHY = 1 << 0, // 1 HAS_HOUSE = 1 << 1, // 2 HAS_FOOD = 1 << 2, // 4 } </enforce>

=== Vector ===

Passed by: '''value'''

Naming prefix: '''v'''

Default value: '''{ 0, 0, 0 }'''

A '''vector''' is a type that holds '''three''' float values. Two vectors can be compared with == for '''value''' comparison.

Example: <enforce> // there are three ways to create a vector vector myVector0; // myVector0 is { 0, 0, 0 } vector myVector1 = { 0, 1.5, 2 }; vector myVector2 = "0 1.5 2";

myVector1 == myVector2; // true

// editing one of the vector values vector myVector3 = myVector1; // '''copies''' the value myVector1 == myVector3; // true myVector1[1] = 42; // myVector1 is now { 0, 42, 2 } myVector1 == myVector3; // false

// editing the whole vector myVector3 = { 0, 42, 2 }; // syntax "0 42 2" works too myVector1 == myVector3; // true

// operators work myVector1 += "0 1 0"; myVector1 -= "0 1 0"; myVector1 *= 3.33; myVector1 /= 3.33;

// {{Link|https://en.wikipedia.org/wiki/Cross_product|cross product}} and {{Link|https://en.wikipedia.org/wiki/Dot_product|dot product}} in one operation vector crossProduct = vector1 * vector2; float dotProduct = vector1 * vector2; auto product = vector1 * vector2; // product is by default a vector </enforce>

=== Array ===

Passed by: '''reference''' (dynamic array) or '''value''' (static array)

Naming prefix: '''a''' for both

Default value: null ('''not''' an empty array) or static array filled with default item type value (e.g 0 for int, null for object, etc)

Maximum size: int.MAX

An '''array''' is a list of values. In Enforce Script, an array can only hold one type of data (defined in its declaration).

There are two types of array in Enfusion:

* dynamic array: "list" that will extend the more items are added * static array: fixed-size list of items - items can be changed, but the array size cannot

Example: <enforce> array<string> dynamicArray = {}; string staticArray[2] = { "Hello", "" };

dynamicArray.Insert("Hello"); // dynamicArray = { "Hello" }; dynamicArray.Insert(""); // dynamicArray = { "Hello", "" };

dynamicArray[1] = "there"; // dynamicArray = { "Hello", "there" }; staticArray[1] = "there"; // staticArray = { "Hello", "there" };

// dynamic/static arrays cannot be directly compared for values; == would compare pointers (a.k.a is it the same array, not the same values) dynamicArray == staticArray; // false dynamicArray[0] == staticArray[0]; // true dynamicArray[1] == staticArray[1]; // true </enforce>

=== Set ===

Passed by: '''reference'''

Naming prefix: none

Default value: null ('''not''' an empty set)

A '''set''' is a list that ensures uniqueness of values. Due to this uniqueness check, item insertion is slower than for an Array; however, checking if an item is contained is faster.

Example: <enforce> set<string> setInstance = new set<string>();

setInstance.Insert("Hello there"); setInstance.Insert("General Kenobi"); setInstance.Insert("Hello there"); // setInstance will still only contain "Hello there" and "General Kenobi"

setInstance.Get(0); // the values order is never guaranteed as it can change on value insertion! </enforce>

=== Map ===

Passed by: '''reference'''

Naming prefix: '''m'''

Default value: null ('''not''' an empty map)

A '''map''' is a list of key-value pairs, also known as a dictionary. Two keys cannot be identical as they are used to index the values.

A float '''cannot''' be a map key.

Example: <enforce> map<int, string> mapInstance = new map<int, string>();

mapInstance.Set(5712, "Hello there"); mapInstance.Set(5716, "General Kenobi");

mapInstance.Get(5712); // returns "Hello there" mapInstance.Get(5715); // /!\ returns "" (default string) mapInstance.Get(5716); // returns "General Kenobi"

mapInstance.GetKeyByValue("Hello there"); // returns 5712 mapInstance.GetKeyByValue("test"); // /!\ returns 0 (default int)

mapInstance.Contains(5716); // true mapInstance.ReplaceKey(5716, 5715); // replaces "General Kenobi" key mapInstance.Contains(5716); // false

mapInstance.Contains(5715); // true mapInstance.Remove(5715); // removes "General Kenobi" from the map mapInstance.Contains(5715); // false </enforce>

=== Class ===

Passed by: '''reference'''

Naming prefix: none

Default value: '''null'''

A '''class''' is what defines an object's structure - said from the other end, an object is an '''instance''' of a class.

{{Feature|informative|For more information on classes and Object Oriented Programming, see {{Link|Arma Reforger:Object Oriented Programming Basics}} and {{Link|Arma Reforger:Object Oriented Programming Advanced Usage}}.}}

Example: <enforce> class ObjectClass { protected int m_iHealth = 100;

int GetHealth() { return m_iHealth; }

bool SetHealth(int health) { if (health < 0 || health > 100) return false;

m_iHealth = health; return true; } }

void HealthMethod() { ObjectClass myObjectInstance; // myObjectInstance is null myObjectInstance = new ObjectClass(); int objectHealth = myObjectInstance.GetHealth(); Print(objectHealth); } </enforce>

=== Typename ===

Passed by: '''reference'''

Naming prefix: none

Default value: '''typename.Empty'''

A '''typename''' is a "class information" type allowing to obtain values and other instance details through {{Link|https://en.wikipedia.org/wiki/Reflective_programming|reflection}}.

Example: <enforce> class ObjectClass { int m_Health = 100;

void MyMethod() { typename myTypename = ObjectClass; string myClassName = myTypename.ToString(); // returns "ObjectClass" string myTypename = myClassName.ToType(); // returns ObjectClass typename

int localHealth; myTypename.GetVariableValue(this, 0, localHealth); // localHealth now has m_Health's value

// typename cannotAssignNull = null; // throws an error - cannot assign null typename canAssignEmpty = typename.Empty; // good

string nonExistingClass = "ThisClassDoesNotExist"; typename wrongTypename = nonExistingClass.ToType(); // returns typename.Empty typename uninitialisedTypename; // is typename.Empty } } </enforce>

== Scope ==

A value has a lifetime, whether it is the game instance, mission or script duration; but it also has a scope that defines its existence and its accessibility. <enforce> void SetDammage(int dammage) { int newHealth; // newHealth variable is declared newHealth = m_iHealth - dammage; if (newHealth < 0) { newHealth = 0; } else if (newHealth > 100) { int difference = newHealth - 100; // difference variable is declared Print("health overflow: " + difference); newHealth = 100; // difference variable is destroyed after leaving the "else" scope and doesn't exist outside of it } // difference variable does not exist in this scope and cannot be used

m_iHealth = newHealth; // newHealth variable's last usage - the variable still exists

Print("Health has been set"); // newHealth is destroyed after this line (on closing the "SetDammage" scope) } </enforce>

{| class="wikitable" ! Incorrect ! Correct ! Shorter but more expensive |- style="vertical-align: top" | <enforce> if (soldiersHealth > 75) { string message = "I'm doing well"; } else { // no conflict with the previous variable as scopes are different string message = "I don't feel so good"; } Print(message); // error: message variable is undefined here </enforce> | <enforce> string message; if (soldiersHealth > 75) { message = "I'm doing well"; } else { message = "I don't feel so good"; } Print(message); // OK </enforce> | <enforce> string message = "I don't feel so good"; if (soldiersHealth > 75) { message = "I'm doing well"; }

Print(message); // OK </enforce> |}

== Casting ==

A value can sometimes be returned as one of its inherited classes or interfaced type - it can be '''casted''' ("forced" into a type) if the underlying type is known.

{{Feature|important|A wrong cast will return a '''null''' value - no exception will be thrown.}}

<enforce> class Soldier_Base { int m_iScope = 0; }

class B_Soldier_F : Soldier_Base { int m_iScope = 2; void SayHello() { Print("Hello there"); } }

Soldier_Base aSoldier = new B_Soldier_F(); // valid aSoldier.SayHello(); // invalid - Soldier_Base does not have the SayHello method

B_Soldier_F mySoldierF = B_Soldier_F.Cast(aSoldier); mySoldierF.SayHello(); // valid </enforce>

{{GameCategory|armaR|Modding|Scripting|Guidelines}}
oe0nh7omuzgft3qxzrtrytxpyadevei

# Arma Reforger:Workbench Plugin

5050
32440
371069
370920
2025-02-26T13:25:26Z
Lou Montana
10739
Fix link
371069
wikitext
text/x-wiki
{{TOC|side}} '''Workbench Plugins''' are script files that can be triggered from within any editor (Resource Browser, World Editor, Script Editor, etc).

Existing plugins are listed in {{hl|Data\Scripts\WorkbenchGame}} and are sorted by directories.

{| class="wikitable" ! Editor ! Directory ! API Class<br>(Module Type) |- | Common Plugins | {{hl|Data\Scripts\WorkbenchGame}} | {{n/a}} |- | Resource Manager | {{hl|Data\Scripts\WorkbenchGame\ResourceManager}} | {{Link/Enfusion|armaR|ResourceManager}} |- | World Editor (Tools and Plugins) | {{hl|Data\Scripts\WorkbenchGame\WorldEditor}} | {{Link/Enfusion|armaR|WorldEditor}} |- | Particle Editor | {{n/a}} | {{n/a}} |- | Animation Editor | {{n/a}} | {{n/a}} |- | Script Editor | {{hl|Data\Scripts\WorkbenchGame\ScriptEditor}} | {{Link/Enfusion|armaR|ScriptEditor}} |- | Audio Editor | {{n/a}} | {{n/a}} |- | Behavior Editor | {{n/a}} | {{n/a}} |- | String Editor | {{hl|Data\Scripts\WorkbenchGame\LocalizationEditor}} | {{Link/Enfusion|armaR|LocalizationEditor}} |- | Procedural Animation Editor | {{n/a}} | {{n/a}} |}

A '''Plugin''' must be named {{hl|Classname'''Plugin'''}}, and its file too.

A '''Tool''' must be named {{hl|Classname'''Tool'''}}, and its file too.

== Plugin ==

A plugin inherits from {{hl|WorkbenchPlugin}} and is decorated with a {{hl|WorkbenchPluginAttribute}} attribute which signature is as follow:

<enforce> WorkbenchPluginAttribute(string name, string description = "", string shortcut = "", string icon = "", array<string> wbModules = null, string category = "", int awesomeFontCode = 0) </enforce>

* name is mandatory: it is the plugin's display name * description: optional, it is the on hover description text * shortcut: in format e.g {{hl|"Ctrl+Shift+I"}} for {{Controls|Ctrl|shift|I}} - none (empty string) can be defined, the plugin will then need to be triggered from the Plugin top menu * icon * wbModules: to which editors does this plugin apply (e.g {{hl|wbModules {{=}} { "ScriptEditor" }<nowiki/>}}) * category: the plugins menu entry in which this plugin will find itself (e.g Plugins > Text > ''Plugin Name''){{Feature|informative|{{hl|category}} accepts forward slash {{hl|/}} to create sub-categories.}} * awesomeFontCode: the FontAwesome icon associated with the plugin (see {{Link|https://fontawesome.com/FontAwesome}}'s {{Link|https://fontawesome.com/v5/search?o{{=}}r&m{{=}}free|Free Icons Cheatsheet}})

A plugin must also override either or both {{hl|Run}} or {{hl|RunCommandLine}} methods in order to have an impact. It can also, but is not mandatory, override the {{hl|Configure}} method to display a settings entry.

== Tool ==

A tool is a system that allows for direct manipulation with a config panel available on the side.

{{Feature|informative|For now, Tools are only available for the World Editor, and inherit from the {{hl|WorldEditorTool}} class.}}

A tool inherits from the editor-related class (e.g World Editor: {{hl|WorldEditorTool}}) in order to be found in said editor's Tools menu.

It is decorated with a {{hl|WorkbenchToolAttribute}} attribute which signature is identical to {{hl|WorkbenchPluginAttribute}} (see above).

== Scripting ==

=== Modules ===

A plugin has access to the currently loaded game/project resources, but in order to be as adaptable as possible it should also be generic.

Each Workbench module (editor) API can be accessed through the following script: <enforce> ModuleType moduleType = Workbench.GetModule(ModuleType); </enforce>

Where {{hl|ModuleType}} can be one of the classes listed {{Link|#mw-content-text|at the beginning of this document}}, all children of the {{hl|WBModuleDef}} class).

Each module has obviously a different API - see their classes for more information.

=== Plugins ===

Other plugins can be accessed through <enforce inline>aWorkbenchModule.GetPlugin(TAG_ClassNamePlugin);</enforce>.

=== Common Methods ===

See {{Link/Enfusion|armaR|WorkbenchPlugin}}.

==== Run ==== The {{hl|Run}} method is called when clicking Plugins > ''Plugin Name'' or using its shortcut if any. If this method is not overridden with a non-empty code, the plugin does not appear in this menu. {{Feature|informative|There is no way to distinguish between clicking the plugin in the menu or using the shortcut.}}

==== RunCommandline ==== The {{hl|RunCommandline}} method is called when calling the script from {{Link|Arma Reforger:Startup Parameters}}'s {{Link|Arma Reforger:Startup Parameters#plugin|plugin}} option, e.g: ArmaReforgerWorkbenchSteam.exe -wbModule=ScriptEditor -plugin=TAG_MyPlugin pluginArguments

==== Configure ==== The {{hl|Configure}} method is called when clicking Plugins > Settings > ''Plugin Name''. If this method is not overridden with a non-empty code, the entry does not appear in this menu.

{{Feature|informative| Think of the plugin's behaviour: should the end user encounter a configuration popup: * on each plugin usage (e.g from the <enforce inline>Run</enforce> method) * only when reaching for the plugin settings * and/or should only ''some'' settings be offered on every usage? }}

==== OnResourceContextMenu ==== The {{hl|OnResourceContextMenu}} method is called when clicking {{Link|Arma Reforger:Resource Manager}} Resource Browser Context Menu's Plugins > ''Plugin Name''. {{Feature|important|For the plugin to appear, {{hl|WorkbenchPluginAttribute}}'s {{hl|resourceTypes}} parameter must be defined (e.g <enforce inline>resourceTypes: { "fbx", "xob", "et" }</enforce>)

=== Generic Modal ===

The <enforce inline>Workbench.Dialog()</enforce> method can be used to create a modal addressed to the user. It takes a caption (modal title) a text (in-modal description text), and a detailed text if needed.

The end result is a modal with an OK button and a "Show Details" button if a detailed text has been provided.

=== Scripted Modal ===

The <enforce inline>Workbench.ScriptDialog()</enforce> method can be used to create a modal addressed to the user to confirm an action or set values. It can be used in any method (e.g not only {{hl|Configure}}). It takes a caption (modal title) a text (in-modal description text), and a class instance - usually <enforce inline>this</enforce>.

The class instance can be anything but {{hl|null}}, but it is much more interesting to offer options to the user, at least an OK/Cancel button choice.

{{Feature|informative|If no buttons are defined, the modal can still be closed through the close button (« × ») or using {{Controls|Alt|F4}}.}}

==== Attributes ==== Same as a {{Link|Arma Reforger:Scripting: Config Object|Config Object}} declaration, the <enforce inline>[Attribute()]</enforce> decorator is required. <enforce> [Attribute(defvalue: "1", desc: "Does something, otherwise does nothing")] protected m_bDoSomething; </enforce>

==== Buttons ==== A button method is decorated with a <enforce inline>[Button()]</enforce> decorator which signature is as follow: <enforce> ButtonAttribute(string label = "ScriptButton", bool focused = false) </enforce>

A button method's return type can be anything, but the value will be treated as a boolean int (1 = true, 0 = false). A {{hl|void}} method will return 0. {{Feature|important|Beware, as an empty string result will convert as a 1.}}

<enforce> [ButtonAttribute("OK", true)] // focused by default int ButtonOK() { return 42; // Workbench.ScriptDialog will return 1/true }

[ButtonAttribute("Cancel")] int ButtonCancel() { return 0; // Workbench.ScriptDialog will return 0/false } </enforce>

The {{hl|Workbench.ScriptDialog}}'s return value can then be used to know if the user confirmed or cancelled an interface.

{{Feature|informative|By default, a scripted dialog does not have any buttons and clicking on the close button (« × ») or using {{Controls|Alt|F4}} will make the {{hl|Workbench.ScriptDialog}} method return 0.}}

== Tutorials ==

See {{GameCategory|armaR|Modding|Scripting|Workbench|Tutorials|text= Plugin/Tool tutorials}}.

{{GameCategory|armaR|Modding|Scripting|Guidelines}}
pbdqjikvwdozc1lf4sknazkvpnvbgs0

# Arma Reforger:Class Template Example

5050
43617
370947
364402
2025-02-26T12:31:54Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370947
wikitext
text/x-wiki
A '''Class Template''' is a class definition that allows managing various types (separately) with only one declaration.

A good example that may not appear as obvious is the <enforce inline>array</enforce> class; as you may now realise, an array is simply a generic list of items where we declare the managed type on instanciation (like a {{hl|set}} or a {{hl|map}}), e.g: <enforce> array<string> arrayOfStrings = {}; array<bool> arrayOfBools = {};

set<int> setOfInts = new set<int>();

map<string, vector> mapOfStringsAndVectors = new map<string, vector>(); </enforce>

{| class="wikitable" ! style="width: 50%" | Pros ! Cons |- | * Not repeating generic code * Not repeating generic code * Not repeating generic code | * {{Link|Arma Reforger:Script Editor}} cannot detect an error in code unless the template is used somewhere * Some silent errors can occur (e.g <enforce inline>if (!value)</enforce> check on a class instance is different from an int, etc) * Too generic code may not always fit the encountered scenarios - its usage is up to the user |}

== Examples ==

Below is a raw example of how to use a template, here used for casting: <enforce> class TAG_EntityCastHelper<Class T> { static T Get(Managed something) { return T.Cast(something); }

static bool IsValid(Managed something) { return Get(something) != null; }

static void Output(T anInstance) { if (anInstance) Print(anInstance.ToString()); } } </enforce>

<enforce> array<bool> anArray = {}; IEntity anEntity = EntityUtils.GetPlayer(); // provided anEntity is not null like in e.g Script Editor

TAG_EntityCastHelper<IEntity> entityCastHelper = new TAG_EntityCastHelper<IEntity>(); Print("IEntity = " + entityCastHelper.IsValid(anEntity)); // IEntity = true Print("Managed = " + entityCastHelper.IsValid(anArray)); // Managed = false

TAG_EntityCastHelper<Managed> managedCastHelper = new TAG_EntityCastHelper<Managed>(); Print("IEntity = " + managedCastHelper.IsValid(anEntity)); // IEntity = true Print("Managed = " + managedCastHelper.IsValid(anArray)); // Managed = true

TAG_EntityCastHelper<array<bool>> boolArrayCastHelper = new TAG_EntityCastHelper<array<bool>>(); Print("IEntity = " + boolArrayCastHelper.IsValid(anEntity)); // IEntity = false Print("Managed = " + boolArrayCastHelper.IsValid(anArray)); // Managed = true

TAG_EntityCastHelper<array<string>> stringArrayCastHelper = new TAG_EntityCastHelper<array<string>>(); Print("IEntity = " + stringArrayCastHelper.IsValid(anEntity)); // IEntity = false Print("Managed = " + stringArrayCastHelper.IsValid(anArray)); // Managed = false - not a ''string'' array </enforce>

{{Feature|important| Methods used on <enforce inline noGuess>T</enforce> '''must''' be generic enough; for example, <enforce inline noGuess>T.Cast()</enforce> is possible on many classes/types but e.g '''not''' on an <enforce inline>int</enforce> type - trying to use this type here raises an error. }}

It is also possible to use multiple types at once: <enforce> class TAG_EntityCastHelper<Class T, Class U, Class V> { protected ref array<T> m_aT = {}; protected ref array<U> m_aU = {}; protected ref array<V> m_aV = {};

static void Insert(T item1, U item2, V item3) { m_aT.Insert(item1); m_aU.Insert(item2); m_aV.Insert(item3); }

static bool GetByItem1(T item1, out U item2, out V item3) { int index = m_aT.Find(item1);

if (index < 0) return false;

item2 = m_aU[index]; item3 = m_aV[index];

return true; } } </enforce>

{{GameCategory|armaR|Modding|Scripting|Tutorials}}
h7rrj7dnqf1fkcrxrz89avzro8jkkbm

# Arma Reforger:Create a Component

5050
43609
376542
370998
2025-10-26T21:14:32Z
Lou Montana
10739
Fix GameComponent → ScriptComponent, thanks Ezcoo
376542
wikitext
text/x-wiki
{{TOC|side}} A {{Link|Arma Reforger:World Editor}} Component is a code element that can be placed as a child (well, as a ''component'') of an {{Link|Arma Reforger:Create an Entity|entity}} from the World Editor's '''Add Component''' button.

In this example, we will create a Component that teleports humans if they get too close.

== Declaration ==

=== Component ===

Create a new file and name it as your component - here, we will go with {{hl|TAG_TeleportFieldComponent}} so the file should be {{hl|TAG_TeleportFieldComponent.c}}. {{Feature|informative|By convention, all Component classnames must end with the {{hl|Component}} suffix, here {{hl|TAG_TeleportField'''Component'''}}.}} {{Feature|important|A component script file '''must''' be created in the '''Game''' module ({{hl|scripts/Game}}), otherwise it will not be listed in the Components list!}}

<enforce> class TAG_TeleportFieldComponent : ScriptComponent // ScriptComponent &rarr; GenericComponent { } </enforce>

=== Component Class ===

Like an Entity, a Component requires a Component Class declaration. This allows it to be visible in {{Link|Arma Reforger:World Editor}}. The name must be '''exactly''' the Component name suffixed by {{hl|Class}}, here {{hl|TAG_TeleportFieldComponent'''Class'''}}. A Component Class is usually placed just above the Component definition as such:

<enforce> [ComponentEditorProps(category: "Tutorial/Component", description: "TODO")] class TAG_TeleportFieldComponentClass : ScriptComponentClass { }

class TAG_TeleportFieldComponent : ScriptComponent { } </enforce>

The class is decorated using {{Link/Enfusion|armaR|ComponentEditorProps}}; the {{hl|category}} is where the Component will be found using e.g the '''Add Component''' button - see {{Link|#ComponentEditorProps|below}}.

==== ComponentEditorProps ==== ; category : the "Create" tab's category in which the Component can be found

; description : '''unused''' (for now)

; color : the bounding box's unselected line colour - useful only when {{hl|visible}} is set to {{hl|true}}

; visible : have the bounding box always visible - drawn in {{hl|color}}

; insertable :

; configRoot : '''unused'''

; icon : set the component's icon in World Editor's UI - direct path to a {{hl|png}} file, e.g <enforce inline>icon: "WBData/ComponentEditorProps/componentEditor.png"</enforce>

{{Feature|informative|In order for the component to appear in {{Link|Arma Reforger:World Editor}}, scripts '''must''' be compiled and reloaded ''via'' {{Controls|Shift|F7}}.}}

== Filling ==

The Component is now visible in World Editor's "Add Component" UI, the next step is to make it do something.

=== Add Code ===

Let's use the {{hl|Component}}'s <enforce inline>OnPostInit()</enforce> method to call code.

<enforce methods="QueryEntitiesCallbackMethod"> [ComponentEditorProps(category: "Tutorial/Component", description: "Teleport humans that are too close to the entity")] class TAG_TeleportFieldComponentClass : ScriptComponentClass { }

class TAG_TeleportFieldComponent : ScriptComponent { protected float m_fCheckDelay; protected ref array<IEntity> m_aNearbyCharacters;

protected static const float CHECK_PERIOD = 0.25; protected static const float CHECK_RADIUS = 10;

//------------------------------------------------------------------------------------------------ override void EOnFrame(IEntity owner, float timeSlice) { super.EOnFrame(owner, timeSlice);

vector ownerPos = owner.GetOrigin();

m_fCheckDelay -= timeSlice; if (m_fCheckDelay <= 0) { m_fCheckDelay = CHECK_PERIOD;

m_aNearbyCharacters.Clear(); owner.GetWorld().QueryEntitiesBySphere(ownerPos, CHECK_RADIUS, QueryEntitiesCallbackMethod, null, EQueryEntitiesFlags.DYNAMIC | EQueryEntitiesFlags.WITH_OBJECT); Print("There are " + m_aNearbyCharacters.Count() + " human entities around the teleporter."); foreach (IEntity character : m_aNearbyCharacters) { vector charPos = character.GetOrigin(); vector vectorDir = vector.Direction(owner.GetOrigin(), charPos).Normalized(); character.SetOrigin(charPos + 5 * vectorDir); } } }

//------------------------------------------------------------------------------------------------ // QueryEntitiesCallback type protected bool QueryEntitiesCallbackMethod(IEntity e) { if (!e || !ChimeraCharacter.Cast(e)) // only humans return false;

m_aNearbyCharacters.Insert(e); return true; }

//------------------------------------------------------------------------------------------------ protected override void OnPostInit(IEntity owner) { m_aNearbyCharacters = {}; SetEventMask(owner, EntityEvent.FRAME); } } </enforce>

This code does multiple things: * in <enforce inline>OnPostInit()</enforce> the nearby characters array is initialised and the "on frame" event mask is set, allowing <enforce inline>EOnFrame</enforce> to be executed every frame * in <enforce inline>EOnFrame()</enforce> we query entities by sphere (by straight line distance from point to point) and fill the nearby characters array through the <enforce inline>QueryEntitiesCallbackMethod()</enforce> callback method * still in <enforce inline>EOnFrame()</enforce> we move all detected entities 5 metres back using in <enforce inline>IEntity.SetOrigin()</enforce>

{{Feature|informative| The <enforce inline>GetOwner()</enforce> method as well as the <enforce inline>IEntity owner</enforce> (<enforce inline>EOnFrame</enforce>'s parameter), although not {{hl|notnull}}ed, never return null. If they do, there is a '''much''' bigger problem than a null owner, given a component cannot exist without an entity. }}

=== Add Properties ===

Now, we can declare properties with the {{hl|Attribute}} decorator in order to be able to adjust some settings from the World Editor interface. The following code only contains the added attributes:

<enforce> [ComponentEditorProps(category: "Tutorial/Component", description: "Warn then teleport humans that are too close to the entity")] class TAG_TeleportFieldComponentClass : ScriptComponentClass { }

class TAG_TeleportFieldComponent : ScriptComponent { /* Teleportation */

[Attribute(defvalue: "10", desc: "Distance at which the field draws a line to its target to warn it about teleportation", category: "Teleportation")] protected float m_fWarningRadius;

[Attribute(defvalue: "2", desc: "Distance at which the field triggers the teleportation", params: "0.25 10 0.25", category: "Teleportation")] protected float m_fTriggerRadius;

[Attribute(defvalue: "10", desc: "Distance at which the teleportation places the unit from the teleporter", category: "Teleportation")] protected float m_fTeleportDistance;

/* Line Drawing */

[Attribute(defvalue: "1 0.75 0 1", desc: "The line's colour", category: "Line Drawing")] protected ref Color m_LineColour;

[Attribute(defvalue: "1", desc: "Whether or not the line must fade in/out with transparency based on distance", category: "Line Drawing")] protected bool m_bLineFadeInOut;

[Attribute(defvalue: "0 1 0", desc: "The line offset from entities's origins", category: "Line Drawing")] protected vector m_vOffset;

/* Performance */

[Attribute(defvalue: "0.25", desc: "Duration between proximity checks", category: "Performance")] protected float m_fCheckPeriod;

// ... } </enforce>

These attributes's implementation can be a good exercise. As you may have noticed some additional attributes made their way to the code.

The goal is to draw a line from the object to the entity in order to warn them they ''will'' be teleported if they keep on getting closer. You can try to figure out how to do it properly then take a peek at {{Link|#Final Code}} to see one possible solution.

Now all there is to do is to attach a {{hl|TAG_TeleportFieldComponent}} component to a world entity and see its effects!

== Final Code ==

The final file content can be found here: <spoiler text="Show File Content"> <enforce methods="QueryEntitiesCallbackMethod"> [ComponentEditorProps(category: "Tutorial/Component", description: "Warn then teleport humans that are too close to the entity")] class TAG_TeleportFieldComponentClass : ScriptComponentClass { }

class TAG_TeleportFieldComponent : ScriptComponent { /* Teleportation */

[Attribute(defvalue: "10", desc: "Distance at which the field draws a line to its target to warn it about teleportation", category: "Teleportation")] protected float m_fWarningRadius;

[Attribute(defvalue: "2", desc: "Distance at which the field triggers the teleportation", params: "0.25 10 0.25", category: "Teleportation")] protected float m_fTriggerRadius;

[Attribute(defvalue: "10", desc: "Distance at which the teleportation places the unit from the teleporter", category: "Teleportation")] protected float m_fTeleportDistance;

/* Line Drawing */

[Attribute(defvalue: "1 0.75 0 1", desc: "The line's colour", category: "Line Drawing")] protected ref Color m_LineColour;

[Attribute(defvalue: "1", desc: "Whether or not the line must fade in/out with transparency based on distance", category: "Line Drawing")] protected bool m_bLineFadeInOut;

[Attribute(defvalue: "0 1 0", desc: "The line offset from entities's origins", category: "Line Drawing")] protected vector m_vOffset;

/* Performance */

[Attribute(defvalue: "0.25", desc: "Duration between proximity checks", category: "Performance")] protected float m_fCheckPeriod;

protected float m_fCheckDelay; protected int m_iTempLineColour; protected ref array<ref Shape> m_aShapes; protected ref array<IEntity> m_aNearbyCharacters;

//------------------------------------------------------------------------------------------------ //! Draw a debug line between two entities //! \param[in] from //! \param[in] to //! \param[in] offset protected Shape DrawLine(notnull IEntity from, notnull IEntity to, vector offset) { vector points[2] = { from.GetOrigin() + offset, to.GetOrigin() + offset }; float distance = vector.Distance(points[0], points[1]); if (m_bLineFadeInOut) { int alpha255 = 255 * (1 - ((distance - m_fTriggerRadius) / (m_fWarningRadius - m_fTriggerRadius))); m_iTempLineColour = m_iTempLineColour & 0x00FFFFFF | (alpha255 << 24); return Shape.CreateLines(m_iTempLineColour, ShapeFlags.TRANSP, points, 2); } else { return Shape.CreateLines(m_iTempLineColour, 0, points, 2); } }

//------------------------------------------------------------------------------------------------ override void EOnFrame(IEntity owner, float timeSlice) { super.EOnFrame(owner, timeSlice);

vector ownerPos = owner.GetOrigin();

m_fCheckDelay -= timeSlice; if (m_fCheckDelay <= 0) { m_fCheckDelay = m_fCheckPeriod;

m_aNearbyCharacters.Clear(); owner.GetWorld().QueryEntitiesBySphere(ownerPos, m_fWarningRadius, QueryEntitiesCallbackMethod, null, EQueryEntitiesFlags.DYNAMIC | EQueryEntitiesFlags.WITH_OBJECT); }

m_aShapes.Clear(); m_aShapes.Reserve(m_aNearbyCharacters.Count()); foreach (IEntity character : m_aNearbyCharacters) { vector characterPos = character.GetOrigin(); if (vector.Distance(characterPos, ownerPos) > m_fTriggerRadius) // in the warning zone { m_aShapes.Insert(DrawLine(owner, character, m_vOffset)); // draw line } else // in the trigger zone { vector dir = vector.Direction(ownerPos, characterPos).Normalized(); character.SetOrigin(ownerPos + dir * m_fTeleportDistance); // teleport } } }

//------------------------------------------------------------------------------------------------ // QueryEntitiesCallback type protected bool QueryEntitiesCallbackMethod(IEntity e) { if (!e || !ChimeraCharacter.Cast(e)) // only humans return false;

m_aNearbyCharacters.Insert(e); return true; }

//------------------------------------------------------------------------------------------------ protected override void OnPostInit(IEntity owner) { m_aShapes = {}; m_aNearbyCharacters = {}; m_iTempLineColour = m_LineColour.PackToInt(); SetEventMask(owner, EntityEvent.FRAME); } } </enforce> </spoiler>

{{GameCategory|armaR|Modding|Scripting|Tutorials}}
3teqtgav67ook1tw70iy8w9n0eezll8

# Arma Reforger:Create a Config Class

5050
43583
371010
363896
2025-02-26T12:32:07Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
371010
wikitext
text/x-wiki
{{TOC|side}} Creating a class used as {{hl|.conf}} root is as easy as creating a standard class, with a few additions.

{{Feature|informative| Be sure to read {{Link|Arma Reforger:Resource Manager: Config Editor|Config Editor documentation}} as well as the {{Link|Arma Reforger:Scripting: Config Object|Config Object guidelines}} before following this tutorial. }}

== Creation ==

=== Class ===

Let's create a class with the wanted properties, using the {{Link|Arma Reforger:Resource Manager: Config Editor}} documentation:

<enforce> class TAG_SuperConfig { [Attribute(defvalue: "DEFAULT VALUE", category: "Personal Details")] string m_sName; // member variables are not {{Link|Arma Reforger:Scripting: Keywords#protected 2|protected}} as this class is considered a databag // let's not clutter it with getters

[Attribute(defvalue: "100", params: "1 500", category: "Damage")] int m_iTotalHealth;

bool m_bOtherValue; // other properties without [Attribute()] will be ignored by the .conf UI but are still accessible by script } </enforce>

=== Make It Root ===

The class exists, now to make it appear as an option in {{Link|Arma Reforger:Resource Manager}} > Create > Config file; all it takes is this class decorator: <enforce> [BaseContainerProps(configRoot: true)] </enforce>

making the end result look like: <enforce> [BaseContainerProps(configRoot: true)] class TAG_SuperConfig { [Attribute(defvalue: "DEFAULT VALUE", category: "Personal Details")] string m_sName;

[Attribute(defvalue: "100", params: "1 500", category: "Damage")] int m_iTotalHealth; } </enforce>

Now, the class can be used as config root.

== Config File Creation ==

# In {{Link|Arma Reforger:Resource Manager}}'s '''Resource Browser''', browse to the directory in which to create the config file; then click on the '''Create''' button and select the '''Config File''' option # Enter the new file's name in the appearing dialog # Look for the wanted "BaseContainerProp" class in the next dialog # After clicking the classname once, the file is created from this model in the selected directory.<br>Double-click on it to open it and edit it.

== Example ==

See a broad {{hl|SCR_ConfigExample}} class:

<spoiler text="Show Example"> <enforce> [BaseContainerProps(configRoot: true)] class SCR_ConfigExample { //---------------------------------------------------------------------------------- // basic //----------------------------------------------------------------------------------

[Attribute(defvalue: "1", desc: "This is a Bool value")] bool m_bBoolValue;

[Attribute(defvalue: "-1", desc: "This is an Int value")] int m_iIntValue;

[Attribute(defvalue: "0.5", desc: "This is a Float value")] float m_fFloatValue;

[Attribute(defvalue: "-", desc: "This is a String value")] string m_sStringValue;

[Attribute(defvalue: "0 1 0", desc: "This is a Vector value")] vector m_vVectorValue;

[Attribute(defvalue: "1", uiwidget: UIWidgets.CheckBox, desc: "This is a Bool Array value")] ref array<bool> m_aBoolArrayValue;

[Attribute(defvalue: "String default value", desc: "This is a String Array value")] ref array<string> m_aStringArrayValue;

[Attribute(defvalue: "0.008 0.365 0 1", desc: "This is a Colour value")] ref Color m_ColourValue;

// does not show up - no Attribute defined int m_iIntValueNotShown;

// does not show up - no set<> UI exists [Attribute(defvalue: "", desc: "This is a String Set value")] ref set<string> m_SetValue;

// does not show up - no map<> UI exists [Attribute(defvalue: "", desc: "This is an Int-String Map value")] ref map<int, string> m_mMapValue;

//---------------------------------------------------------------------------------- // advanced //----------------------------------------------------------------------------------

[Attribute(defvalue: "50", desc: "This is an Int value in a 0..100 range with steps of 5", params: "0 100 5")] int m_iIntValueMinMax;

[Attribute(defvalue: "50", uiwidget: UIWidgets.Slider, desc: "This is an Int value using a 0..100 slider with steps of 5", params: "0 100 5")] int m_iIntValueSlider;

[Attribute(defvalue: "1", uiwidget: UIWidgets.ComboBox, desc: "This is an Int value using a combobox", enums: { ParamEnum("Zero", "0"), ParamEnum("One", "1"), ParamEnum("Two", "2") })] int m_iIntValueComboBox;

[Attribute(defvalue: "", uiwidget: UIWidgets.ResourcePickerThumbnail, desc: "This is an Image Resource value", params: "edds imageset")] ResourceName m_sImageResourcePickerThumbnail;

[Attribute(defvalue: "", uiwidget: desc: "This is a ResourceName selection that only sees Prefabs (.et files)", params: "et")] ResourceName m_sFilteredResourceName;

[Attribute(defvalue: "", uiwidget: desc: "This is a ResourceName selection that only sees Prefabs with the Vehicle parent class", params: "et class=Vehicle")] ResourceName m_sFilteredResourceNameByClass; } </enforce> </spoiler>

{{GameCategory|armaR|Modding|Scripting|Tutorials}}
s1evpfpdumdxoozqctxwp8nfa0dnn7x

# Arma Reforger:Create an Entity

5050
33250
370937
369677
2025-02-26T12:31:52Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370937
wikitext
text/x-wiki
{{TOC|side}} A {{Link|Arma Reforger:World Editor}} entity is a scripted entity that can be placed from the World Editor's [[Arma Reforger:World Editor#Create|'''Create''' tab]].

In this example, we will create an Entity that once placed in the world, will print the player's position with a certain frequency.

== Declaration ==

=== Entity ===

Create a new file and name it as your entity - here, we will go with {{hl|[[Scripting Tags|TAG_]]PrintPlayerPositionEntity}} so the file should be {{hl|[[Scripting Tags|TAG_]]PrintPlayerPositionEntity.c}}. {{Feature|informative|By convention, all Entity classnames must end with the {{hl|Entity}} suffix, here {{hl|[[Scripting Tags|TAG_]]PrintPlayerPosition'''Entity'''}}.}} {{Feature|important|An entity script file '''must''' be created in the '''Game''' module ({{hl|scripts/Game}}), otherwise it will not be listed in the Entities list!}}

<enforce> class TAG_PrintPlayerPositionEntity : GenericEntity { } </enforce>

=== Entity Class ===

An Entity requires an Entity Class declaration. This allows it to be visible in {{Link|Arma Reforger:World Editor}}. The name must be '''exactly''' the Entity name suffixed by {{hl|Class}}, here {{hl|TAG_PrintPlayerPosition''Entity''<nowiki/>'''Class'''}}. An Entity Class is usually placed just above the Entity definition as such:

<enforce> [EntityEditorProps(category: "Tutorial/Entities", description: "Prints player's position regularly")] class TAG_PrintPlayerPositionEntityClass : GenericEntityClass { }

class TAG_PrintPlayerPositionEntity : GenericEntity { } </enforce>

The class is decorated using {{Link/Enfusion|armaR|EntityEditorProps}}; the {{hl|category}} is where the Entity will be found in World Editor's '''Create''' tab - see {{Link|#EntityEditorProps|below}}.

==== EntityEditorProps ==== ; category : the "Create" tab's category in which the Entity can be found

; description : '''unused''' (for now)

; color : the bounding box's unselected line colour - useful only when {{hl|visible}} is set to {{hl|true}}

; visible : have the bounding box always visible - drawn in {{hl|color}}

; insertable :

; configRoot : '''unused'''

; icon : '''unused''': direct path to a {{hl|png}} file, e.g {{hl|WBData/EntityEditorProps/entityEditor.png}}

; style : can be "none", "box", "sphere", "cylinder", "capsule", "pyramid", "diamond"

; sizeMin : bounding box's lower dimensions

; sizeMax : bounding box's higher dimensions

; color2 : the bounding box's surface colour

; dynamicBox : enables the entity visualiser using custom dimensions (provided by <enforce inline>_WB_GetBoundBox()</enforce>)

== Filling ==

The Entity is now visible in World Editor, the next step is to make it do something.

=== Add Code ===

Let's use the {{hl|IEntity}}'s constructor to set flags and call code.

<enforce> class TAG_PrintPlayerPositionEntity : GenericEntity { protected float m_fWaitingTime = float.INFINITY; // trigger Print on start protected int m_iCycleDuration = 10; // in seconds

//------------------------------------------------------------------------------------------------ protected void PrintPlayerPosition() { PlayerController playerController = GetGame().GetPlayerController(); if (!playerController) return;

IEntity player = playerController.GetControlledEntity(); if (!player) { Print("Player entity position: no player", LogLevel.NORMAL); return; }

Print("Player entity position: " + player.GetOrigin(), LogLevel.NORMAL); }

//------------------------------------------------------------------------------------------------ override void EOnFrame(IEntity owner, float timeSlice) { m_fWaitingTime += timeSlice; if (m_fWaitingTime < m_iCycleDuration) return;

m_fWaitingTime = 0; PrintPlayerPosition(); }

//------------------------------------------------------------------------------------------------ void TAG_PrintPlayerPositionEntity(IEntitySource src, IEntity parent) { SetEventMask(EntityEvent.FRAME); } } </enforce>

=== Make It Unique ===

Let's assume we do not want the {{hl|Print}} to be displayed multiple times in the case someone placed multiple Entities in the world. {{Feature|informative|A singleton is an entity that can only be instanciated once. See {{Link|https://en.wikipedia.org/wiki/Singleton_pattern}}.}}

For that we will use the {{Link|Arma Reforger:Scripting: Keywords#static 2|static}} keyword to keep a single reference:

<enforce> class TAG_PrintPlayerPositionEntity : GenericEntity { // other properties

protected static TAG_PrintPlayerPositionEntity s_Instance;

// other methods

//------------------------------------------------------------------------------------------------ void TAG_PrintPlayerPositionEntity(IEntitySource src, IEntity parent) { if (s_Instance) { Print("Only one instance of TAG_PrintPlayerPositionEntity is allowed in the world!", LogLevel.WARNING); delete this; return; }

s_Instance = this;

// rest of the init code } } </enforce>

=== Add Properties ===

Now, we can declare properties with the {{hl|Attribute}} in order to be able to adjust some settings from the World Editor interface. The following code only contains the added attributes:

<enforce> class TAG_PrintPlayerPositionEntity : GenericEntity { [Attribute(defvalue: "1", desc: "Print player position")] protected bool m_bPrintPlayerPosition;

[Attribute(defvalue: "1", desc: "Print a message when player is null")] protected bool m_bPrintWhenPlayerIsNull;

[Attribute(defvalue: "1", uiwidget: UIWidgets.Slider, desc: "Print cycle period (in seconds)", params: "1 30 1")] protected int m_iCycleDuration; } </enforce>

The following code contains code with the implemented attributes:

<enforce> class TAG_PrintPlayerPositionEntity : GenericEntity { [Attribute(defvalue: "1", desc: "Print player position")] protected bool m_bPrintPlayerPosition;

[Attribute(defvalue: "1", desc: "Print a message when player is null")] protected bool m_bPrintWhenPlayerIsNull;

[Attribute(defvalue: "1", uiwidget: UIWidgets.Slider, desc: "Print cycle period (in seconds)", params: "1 30 1")] protected int m_iCycleDuration;

// other properties

//------------------------------------------------------------------------------------------------ protected void PrintPlayerPosition() { PlayerController playerController = GetGame().GetPlayerController(); if (!playerController) return;

IEntity player = playerController.GetControlledEntity(); if (!player) { if (m_bPrintWhenPlayerIsNull) Print("Player entity position: no player", LogLevel.NORMAL); return; }

Print("Player entity position: " + player.GetOrigin(), LogLevel.NORMAL); }

// other methods

//------------------------------------------------------------------------------------------------ void TAG_PrintPlayerPositionEntity(IEntitySource src, IEntity parent) { if (!m_bPrintPlayerPosition) { delete this; return; }

// rest of the init code } } </enforce>

Now all there is to do is to place one {{hl|TAG_PrintPlayerPositionEntity}} entity in the world and see the player's position printed in logs!

{{Feature|informative|In order for the entity to appear in {{Link|Arma Reforger:World Editor}}, scripts must be compiled and reloaded ''via'' [[Arma_Reforger:Script_Editor#Menu_Bar|'''Compile & Reload Scripts''']] function in '''Build''' tab ( {{Controls|Shift|F7}} ).}}

== Final Code ==

The final file content can be found here: <spoiler text="Show File Content"> <enforce> [EntityEditorProps(category: "Tutorial/Entities", description: "Prints player's position regularly", color: "0 255 0 0")] class TAG_PrintPlayerPositionEntityClass : GenericEntityClass { }

class TAG_PrintPlayerPositionEntity : GenericEntity { [Attribute(defvalue: "1", desc: "Print player position")] protected bool m_bPrintPlayerPosition;

[Attribute(defvalue: "1", desc: "Print a message when player is null")] protected bool m_bPrintWhenPlayerIsNull;

[Attribute(defvalue: "1", uiwidget: UIWidgets.Slider, desc: "Print cycle period (in seconds)", params: "1 30 1")] protected int m_iCycleDuration;

protected float m_fWaitingTime = float.INFINITY; // trigger Print on start

protected static TAG_PrintPlayerPositionEntity s_Instance;

//------------------------------------------------------------------------------------------------ protected void PrintPlayerPosition() { PlayerController playerController = GetGame().GetPlayerController(); if (!playerController) return;

IEntity player = playerController.GetControlledEntity(); if (!player) { if (m_bPrintWhenPlayerIsNull) Print("Player entity position: no player", LogLevel.NORMAL); return; }

Print("Player entity position: " + player.GetOrigin(), LogLevel.NORMAL); }

//------------------------------------------------------------------------------------------------ override void EOnFrame(IEntity owner, float timeSlice) { m_fWaitingTime += timeSlice; if (m_fWaitingTime < m_iCycleDuration) return;

m_fWaitingTime = 0; PrintPlayerPosition(); }

//------------------------------------------------------------------------------------------------ void TAG_PrintPlayerPositionEntity(IEntitySource src, IEntity parent) { if (s_Instance) { Print("Only one instance of TAG_PrintPlayerPositionEntity is allowed in the world!", LogLevel.WARNING); delete this; return; }

if (!m_bPrintPlayerPosition) { delete this; return; }

SetEventMask(EntityEvent.FRAME); s_Instance = this; } } </enforce> </spoiler>

{{GameCategory|armaR|Modding|Scripting|Tutorials}}
r3rr5kyrjy2wnd6xfz980yizyuynpeg

# Arma Reforger:From SQF to Enforce Script

5050
32436
371066
371008
2025-02-26T13:22:55Z
Lou Montana
10739
Fix links
371066
wikitext
text/x-wiki
{{TOC|side}} Welcome to '''Enfusion'''!

While '''{{GameCategory|arma3|link= y}}''' is powered by '''[[SQF Syntax|SQF]]''', '''{{GameCategory|armaR|link= y}}''' uses '''{{GameCategory|armaR|Modding|Scripting|Guidelines|text= Enforce Script}}''' as language, which is syntactically close to C#.

'''SQF''' is a succession of [[:Category:Scripting Commands|Scripting Commands]] processed in a certain order to give you a certain access or reference to the engine objects themselves (e.g [[player]]).

It is easy to access, read and process at the cost of performance.

'''Enforce Script''' is an '''Object-Oriented Programming''' '''language''' (OOP language) which as this designation suggests is based on objects.

{{Feature|informative|See {{Link|Arma Reforger:Object Oriented Programming Basics|Object Oriented Programming Basics}} for an introduction to the OOP approach.}}

The language is way closer to the engine and is inspired by C++, which allows scripters '''more possibilities''', but also '''more responsibilities''' - a script can make or break one's game experience.

It is a stricter language that allows for a wider, stronger interaction with the engine.

{{Clear}} == Similarities ==

Let's start with the similarities between the languages… because they are very different, the list will actually be a short one.

{| class="wikitable valign-top" style="width: 100%" ! style="width: 50%" | SQF ! Enforce Script |- | <sqf> // inline comment /* comment block */

private _booleanValue = true; private _floatValue1 = 5; private _floatValue2 = 5.5; private _stringValue = "Hello there"; </sqf> | <enforce> // inline comment /* comment block */

bool booleanValue = true; float floatValue1 = 5; float floatValue2 = 5.5; string stringValue = "Hello there"; </enforce> |}

And that's it! As this example already shows, even the variable declaration syntax has changed. Now, let's see the main differences on first sight!

== Main Differences ==

=== If-Then-Else ===

Definitely the most important point of this document. SQF being keyword-based, it needs to "bridge" the "if" condition to the "then" value, using the {{hl|[[then]]}} keyword. Enforce Script uses if-else structure like any recent language.

{| class="wikitable valign-top" style="width: 100%" ! style="width: 50%" | SQF ! Enforce Script |- | <sqf> if (alive player) then { hint "I am alive!"; }; </sqf> | <enforce> if (myPlayer.GetHealth() > 0) // no more 'then'! { Print("I am alive!"); }

if (myPlayer.GetHealth() > 0) Print("I am alive!"); // a short version is possible </enforce> |}

The same applies for other code structures (while-do, switch-do, for-do, etc), see {{Link|#Code Flow}} below.

The '''else''' part supports {{hl|else if}} (note: not {{hl|elseif}}) statements:

{| class="wikitable valign-top" style="width: 100%" ! style="width: 50%" | SQF ! Enforce Script |- | <sqf> if (alive player) then { hint "I am alive!"; } else { if (damage player > 0.9) then { hint "That's a lot of damage"; }; }; </sqf> | <enforce> if (myPlayer.GetHealth() > 0) { Print("I am alive!"); } else if (myPlayer.GetHealth() < 10) // no more "else { if }" structure { Print("That's a lot of damage"); } </enforce> |}

=== Code Flow ===

==== for ==== {| class="wikitable valign-top" style="width: 100%" ! style="width: 50%" | SQF ! Enforce Script |- | <sqf> // There are two ways to write a for-loop in SQF: for "_i" from 0 to 10 do { };

for [{ _i = 0 }, { _i < 10 }, { _i = _i + 1 }] do { }; </sqf> | <enforce> // Enforce Script has only one type of for loop // statement, condition and step are separated by semicolons for (int i; i < 5; i++) // i is automatically initialised to 0, but "int i = 0" could also be used { } </enforce> |}

==== foreach ==== {| class="wikitable valign-top" style="width: 100%" ! style="width: 50%" | SQF ! Enforce Script |- | <sqf> // forEach loop in SQF is very convenient by selecting the current index and element automatically { hint str _forEachIndex; // _forEachIndex is the current array index hint str _x; // _x represents the current element } forEach _items; </sqf> | <enforce> // foreach's syntax is changed and follows today's standards // the code to be run is placed after the keyword // beware of the syntax: currentIndex and currentElement are separated with "," // whereas currentElement and the array being iterated over are separated with ":" foreach (int currentIndex, string currentElement : items) { Print(currentIndex); Print(currentElement); }

// or, if the index is not required foreach (string currentElement : items) { Print(currentElement); } </enforce> |}

==== while ==== {| class="wikitable valign-top" style="width: 100%" ! style="width: 50%" | SQF ! Enforce Script |- | <sqf> // Unlike other flow structures, the "while" condition is written between {} brackets while { _i < 10 } do { _i = _i + 1; // only way to increment i by 1 as i++ does not exist in SQF }; </sqf> | <enforce> // Condition check in while loop is done in regular () brackets while (i < 10) { i++; // this will increment i by 1 } </enforce> |}

==== switch ==== {| class="wikitable valign-top" style="width: 100%" ! style="width: 50%" | SQF ! Enforce Script |- | <sqf> switch (i) do { case 0: { systemChat "case 0" }; // if i is 0, code in brackets is executed and switch is exited automatically case 1: { systemChat "case 1" }; default { systemChat "default" }; // default does -not- use ":" like case does }; </sqf> | <enforce> switch (i) { case 0: Print("case 0"); break;

case 1: Print("case 1"); break;

default: // default -does- use ":" just like case does Print("default"); break; } </enforce> |}

==== Others ==== {| class="wikitable valign-top" style="width: 100%" ! style="width: 50%" | SQF ! Enforce Script |- | <sqf> // SPECIAL CASES i = if (isScript) then { 1 } else { 0 }; // if-then-else returning value, not possible in Enforce Script if (isScript) exitWith {}; // exitWith breaks from the current -scope- // it will exit the script only if at its root

// lazy evaluation: by default, all statements in condition field are evaluated // to prevent this behaviour the second statement should be wrapped in code brackets {}

// if (!isNil "_value" && _value > 10) then // wrong as "_value > 10" will be evaluated if (!isNil "_value" && { _value > 10 }) then { hint "_value exists and is greater than 10"; }; </sqf> | <enforce> // SPECIAL CASES // an if statement can avoid brackets for only one line of code if (isScript) break; // this will exit a while loop

if (isScript) return 0; // this will exit the current method and return 0

// "value.GetValue() > 10" will not be evaluated if "value != null" returns false if (value != null && value.GetValue() > 10) { Print("value exists and is greater than 10"); } </enforce> |}

=== Case Sensitivity ===

Everything is case-sensitive in Enforce Script, unlike SQF:

{| class="wikitable valign-top" style="width: 100%" ! style="width: 50%" | SQF ! Enforce Script |- | <sqf> private _myValue = "Hello there"; hint _MYVALUE; // hints "Hello there"

IF (true) THEN { hint "it's true!"; };

if (_myValue == "HELLO THERE") then { // will work }; </sqf> | <enforce> string myValue = "Hello there"; Print(MYVALUE); // error: MYVALUE is undefined

IF (true) // error: "IF" is an unknown operator. "if" is the proper casing { Print("it's true!"); }

if (myValue == "HELLO THERE") { // will NOT work - "Hello there" is different from "HELLO THERE" } </enforce> |}

=== Typed Variables ===

In SQF, a variable can change its type on the go according to value assignation. In Enforce Script, a variable has one type and this type cannot be changed during the variable's lifetime.

{| class="wikitable valign-top" style="width: 100%" ! style="width: 50%" | SQF ! Enforce Script |- | <sqf> private _myValue = "Hello there"; // _myValue is a string _myValue = 5; // _myValue is now a floating point number _myValue = true; // _myValue is now a boolean, etc </sqf> | <enforce> string myValue = "Hello there"; // myValue is a string myValue = 5; // error: cannot convert an int to string myValue = true; // error: cannot convert a bool to string </enforce> |}

=== Position ===

A position is the location of an object. A position is composed of X, Y and Z values, X being the West → East axis, Y being the Floor → Sky axis, and Z being the South → North axis. A position is called {{hl|origin}} in Enfusion.

Real Virtuality uses the {{hl|[X, Z, Y]}} format (a vector pointing up being {{hl|[0, 0, 1]}}) whereas Enfusion uses {{hl|{ X, Y, Z }<nowiki/>}} (a vector pointing up being {{hl|{ 0, 1, 0 }<nowiki/>}}).

{{Feature|important|Note that in Enfusion the coordinate system is '''left-handed''' <!--; meaning the {{hl|{ 0, 0, 0 } coordinates is at the "bottom-left" (South-West) of the terrain --> - see {{Link|https://en.wikipedia.org/wiki/Cartesian_coordinate_system#Orientation_and_handedness|Wikipedia}}.}}

{| class="wikitable valign-top" style="width: 100%" ! style="width: 50%" | SQF ! Enforce Script |- | <sqf> private _northVector = [0, 1, 0]; private _westVector = [-1, 0, 0]; private _upVector = [0, 0, 1]; </sqf> | <enforce> vector northVector = "0 0 1"; vector westVector = "-1 0 0"; vector upVector = "0 1 0"; </enforce> |}

=== Array ===

In SQF, an array is a list that can contain any type of data including sub-arrays, and can be expanded at will. In Enforce Script, there are two types of array: static (extremely fast but of static size) and dynamic (size can change); also, an array can only contain '''one''' type of data.

{| class="wikitable valign-top" style="width: 100%" ! style="width: 50%" | SQF ! Enforce Script |- | <sqf> private _array = []; _array pushBack 0; // _array is [0] _array pushBack [1]; // _array is [0, [1]] _array pushBack "2"; // _array is [0, [1], "2"], etc _array set [0, 1]; // sets the first element to 1 // _array is [1, [1], "2"]

// array duplication private _array2 = +_array; </sqf> | <enforce> array<int> myArray = {}; // dynamic array myArray.Insert(0); // array is { 0 } myArray.Insert(true); // array is { 0, 1 } - true is 1 myArray.Insert("2"); // error: an array cannot contain a different type myArray[0] = 1; // sets the first element to 1

// array duplication array<int> duplicate = {}; duplicate.Copy(myArray); // does not work for ref items

// ref array duplication array<ref SCR_Class> refDuplicate = {}; foreach (SCR_Class item : myArray) { refDuplicate.Insert(item); }

// a helper is provided array<ref SCR_Class> refDuplicate = SCR_ArrayHelper<SCR_Class>.GetCopy(myArray);

// new array type: static (size) array int myArray[3]; // automatically initialised to the type's default value (here { 0, 0, 0 }) myArray[0] = 1; // { 1, 0, 0 } myArray[1] = 2; // { 1, 2, 0 } myArray[2] = 3; // { 1, 2, 3 } </enforce> |}

=== Data Types ===

Including '''vectors''', '''enums''', '''sets''', '''classes''' of course and others! Find all the new data types on their {{Link|Arma Reforger:Scripting: Values|dedicated page}}.

{| class="wikitable valign-top" style="width: 100%" ! style="width: 50%" | SQF ! Enforce Script |- | <sqf> private _position = [50, 50, 0]; // an array private _number1 = 42; // a Number, a.k.a float private _number2 = 5.5; // a Number, a.k.a float _number1 = _number1 + 1; _number2 = _number2 - 1;

private _hashmap = createHashMap; _hashmap set [1, "oops"]; _hashmap set [2, "two"]; _hashmap set ["two", true]; _hashmap set [1, "one"];

private _value = nil; if (isNil "_value") then { hint "_value is not defined" };

private _value = objectParent player; if (isNull _value) then { hint "player has vehicle" }; </sqf> | <enforce> vector position = { 50, 0, 50 }; int number1 = 42; float number2 = 5.5; number1++; number2--;

map<int, string> hashmap = new map<int, string>(); // types are set in stone hashmap.Insert(1, "oops"); hashmap.Insert(2, "two"); // no Enforce Script equivalent hashmap.Set(1, "one"); // Set() is to update a value - it can create it too, but Insert() is faster

set<string> stringSet = new set<string>(); stringSet.Insert("value1"); stringSet.Insert("value2"); stringSet.Insert("value1"); // returns false as value1 already exists

// there is no isNil equivalent in Enforce Script as a variable is either defined or not // its content can still be null as seen below

MyClass myInstance; if (myInstance == null) Print("myInstance is null");

// alternatively if (!myInstance) Print("myInstance is null"); </enforce> |}

=== Object-Oriented Programming ===

SQF is a scripting language based on sequences of expressions set in scripts. Enforce Script is Object-Oriented Programming (OOP) meaning that the code is placed inside declared objects.

{{Feature|informative|The basics of OOP can be found in {{Link|Arma Reforger:Object Oriented Programming Basics|Object Oriented Programming Basics}}; see also {{Link|https://en.wikipedia.org/wiki/Object-oriented_programming|Wikipedia}}.}}

{| class="wikitable valign-top" style="width: 100%" ! style="width: 50%" | SQF ! Enforce Script |- | <sqf> // in-script code declaration - normally one would have to declare it in CfgFunctions private _sum = { params [ ["_value1", 0, [0]], ["_value2", 0, [0]] ]; _value1 + _value2; };

private _result = [5, 3] call _sum; </sqf> | <enforce> // a method is a class' function class MyClass { int Sum(int value1, int value2) { return value1 + value2; }

// a different method signature, yet named the same string Sum(string value1, string value2) { return value1 + value2; } }

// further in code MyClass myInstance = new MyClass(); int result = myInstance.Sum(5, 3); string result = myInstance.Sum("Hello ", "there"); string result = myInstance.Sum("Hello ", 3); // does not work - no such string/int signature, only string/string </enforce> |}

{{Feature|warning| It is worth noting that Enforce Script does '''not''' benefit from previous titles' [[Scheduler]], therefore wildly creating new threads is not recommended! See Enforce Script's example below for {{hl|Callqueue}}'s usage. }}

{| class="wikitable valign-top" style="width: 100%" ! style="width: 50%" | SQF ! Enforce Script |- | <sqf> hint "Thread A 1/2"; [] spawn { hint "Thread B 1/2"; sleep 1; hint "Thread B 2/2"; }; hint "Thread A 2/2"; </sqf> | <enforce> class MyClass { void PrintMessage() { Print("Thread A 1/2"); GetGame().GetCallqueue().CallLater(PrintOtherMessage, 1000); // in milliseconds // thread Thread_PrintOtherMessage(); // thread usage is not recommended Print("Thread A 2/2"); }

void PrintOtherMessage() { Print("CallQueue later"); }

void Thread_PrintOtherMessage() { Print("Thread B 1/2"); Sleep(1000); Print("Thread B 2/2"); } }

// further in code MyClass myInstance = new MyClass(); myInstance.PrintMessage(); </enforce> |}

== See Also ==

* {{Link|Arma Reforger:Scripting: Conventions|Scripting: Conventions}} * {{GameCategory|armaR|Modding|Scripting|Guidelines|text= Scripting Guidelines}} * {{GameCategory|armaR|Modding|Scripting|Tutorials|text= Scripting Tutorials}}

{{GameCategory|armaR|Modding|Scripting|Tutorials}}
tpbb2sdynr27l8nxh93iq0yraf6zwr8

# Arma Reforger:JsonApiStruct Usage

5050
34299
371018
365053
2025-02-26T12:32:08Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
371018
wikitext
text/x-wiki
{{TOC|side}} '''{{Link/Enfusion|armaR|JsonApiStruct}}''' is scripted object with support to:

* Encode script object/variable to JSON format * Decode data from JSON format onto script object/ variable * Import/export from/to file * Import/export from/to string

It can also be used as callback object when handling responses from Backend API (script) where incoming data are automatically expanded.

{{Feature|informative| {{Link/Enfusion|armaR|JsonApiStruct}} is primarily meant for automatic data "conversion" from JSON to script - but it is also possible to assemble JSON using object's API: # by using the variable registration system - based upon additional variable registering ''via'' the <enforce inline>RegV()</enforce> (Register Variable) method # as general stream assembly - by calling methods to add values, object or starting arrays }}

== How To ==

* Create your own class by inheriting {{Link/Enfusion|armaR|JsonApiStruct}} * Register all variables you require in constructor of object * Create hierarchy from objects if you need more complex structures

=== Simple Declaration ===

<enforce> // Example object class MyObject : JsonApiStruct { string name; string year;

void MyObject() { // these variables will be converted to JSON or filled from JSON RegV("name"); RegV("year"); } } </enforce>

=== Hierarchy Declaration ===

<enforce> // Child 1 class MyName : JsonApiStruct { string name;

void MyName() { RegV("name"); } }

// Child 2 class MyFloats : JsonApiStruct { float float1; float float2;

void MyFloats() { RegV("float1"); RegV("float2"); } }

// Parent structure class MyParent : JsonApiStruct { MyName name; MyFloats floats;

void MyParent() { RegV("name"); RegV("floats"); } } </enforce>

{{Feature|informative| <enforce inline>RegV()</enforce> adds the provided variable name to the defined object's list of values to be processed. * Registered variable names are case-sensitive! * Non-registered variables are simply ignored. }}

== File Operations ==

You can store your object into file (ie. invoke Pack + Save to file) or you can just save already packed JSON (Save to File).

=== File Import ===

<enforce> // unpack from RAW data - either put data there manually (JSON!) or its callback result void UnpackFromRAW(string data) { Dummy dummy = new Dummy(); // Dummy extends JsonApiStruct dummy.ExpandFromRAW(data);

// pack + create file at once dummy.SaveToFile("dummy_test.json"); }

// call OnPack() and save result into file void PackAndSaveLocally() { dummy.PackToFile("dummy_test.json"); } </enforce>

=== File Export ===

<enforce> void LoadJSON() { Dummy dummy = new Dummy(); // Dummy extends JsonApiStruct dummy.LoadFromFile("dummy_test.json"); // now dummy object is hydrated with json data

// note that Expand is automatically called upon object

// you can also use its data as string Print(dummy.AsString()); } </enforce>

== Packing ==

Packing is fairly easy, when object is either asked by thread/callback or invoked manually to pack its data, the <enforce inline>OnPack()</enforce> event method is called.

{{Feature|informative|See the {{Link|#JSON Validation}} chapter below for a simple way to check JSON structure.}}

=== Automated Packing/Expanding ===

To make things easier, it is possible to work with a JSON object just by registering variables and object into {{Link/Enfusion|armaR|JsonApiStruct}}.

{| class="wikitable valign-top" ! What Works ! What Does not |- | * If JSON is expanded onto given object or hierarchy and variable name and format match, variables are filled with appropriate data * If JSON is assembled from given object or hierarchy, variable content is used to create JSON structures * float, int, bool, string, array, object and array of objects are supported * automatic allocation of object * getting JSON as string | * Even though the JSON format does support it, multi-type arrays (like combined strings and integers) are not supported by Enforce Script * Declaration of variables or objects - if there is no adequate variable present on during expand, it is ignored - if an object type is missing, it cannot be expanded |}

<enforce> // Child class MyChild : JsonApiStruct { // object example }

// Parent class MyParent : JsonApiStruct { string name; string year; MyChild obj1;

void MyParent() { obj1 = new MyChild();

// this register variables for auto use RegV("name"); RegV("year"); RegV("obj1"); } } </enforce>

<enforce> // Create JSON and print to console void PackExample() { MyParent dummy = new MyParent();

// variables will be default unless set to something reasonable dummy.name = "King Henry VIII"; dummy.year = 1509;

// create JSON dummy.Pack();

// print result data to console as string Print(dummy.AsString()); }

// Load from existing file in JSON format void LoadAndExpandExample() { MyParent dummy = new MyParent(); dummy.LoadFromFile("dummy_test.json");

// now json is upon dummy object // note that Expand is called automatically upon object and all variables registered! // no additional scripting required unless you want to handle something specific or debug perhaps

// you can also use its data as string Print(dummy.AsString()); } </enforce>

=== Variables ===

<enforce> // assuming you have variables declared upon JsonApiStruct itself! float m_fMyFloat;

// add simple variable void OnPack() { StoreFloat("MyFloat", m_fMyFloat); } </enforce>

=== Objects and Variables ===

<enforce> // assuming variables are declared upon JsonApiStruct itself float m_fMyFloat; int m_iMyInt; protected ref AvatarStruct m_Avatar; // AvatarStruct extends JsonApiStruct

// add object and several variables void OnPack() { StoreFloat("MyFloat", m_fMyFloat); StoreInt("MyInt", m_iMyInt); StoreObject("avatar", m_Avatar); } </enforce>

If the <enforce inline>OnPack()</enforce> event method is declared upon children objects, it is called upon them hierarchically as well.

<enforce> // assuming the array is declared upon JsonStruct itself protected ref array<string> m_aItems = {};

// add array and its items void OnPack() { StartArray("m_aItems"); foreach (string item : m_aItems) { ItemString(item); } EndArray(); } </enforce>

== Error Handling ==

If you use object as a callback and an error happen during JSON processing, it generates events upon that very object: <enforce> class Dummy : JsonApiStruct { void OnExpand() { // Event when expand (unpack) process starts // if you want to handle something before process starts (init/clear variables for example) }

void OnBufferReady() { // this is called after successfull JSON pakc process // if you want the buffer's finalised string for any purpose }

void OnSuccess(int errorCode) { // errorCode is EJsonApiError // Event called when pending store operation is finished - callback when all went as expected }

void OnError(int errorCode) { // errorCode is EJsonApiError // Event called when pending store operation is finished - callback when error happened } } </enforce>

{{Feature|informative|Error codes are processed as such due to the asynchronous processing of REST requests in order not to block the main thread and stop the game from processing.}}

=== Error Codes ===

As defined in {{Link/Enfusion|armaR|EJsonApiError}}:

{| class="wikitable" ! Code Enum ! Description |- | {{hl|ETJSON_UNKNOWN}} | General error - not implemented |- | {{hl|ETJSON_OK}} | This is generated upon sucessfull processing at onSuccess() event |- | {{hl|ETJSON_COMMSEND}} | Sending of object failed (callback got error code) |- | {{hl|ETJSON_COMMRECV}} | Receiving of object failed (callback got error code) |- | {{hl|ETJSON_PARSERERROR}} | Parsing process failed - invalid data or corrupted format? |- | {{hl|ETJSON_PACKNOSTART}} | Packing process cannot start - invalid state or other problems |- | {{hl|ETJSON_TIMEOUT}} | Failed to send data due to timeout (when JsonStruct data is sent via RestApi or BackendApi |- | {{hl|ETJSON_NOBUFFERS}} | Too many objects processed at once! |- | {{hl|ETJSON_FAILFILELOAD}} | Could not load file with JSON data |- | {{hl|ETJSON_FAILFILESAVE}} | Could not save file with JSON data |}

== JSON Validation ==

JSON validation allows to test the input/output values.

Result structure can be used as input as well and it should match in the end, similar process can be used for verifying already existing structures.

<enforce> // root structure example class DummyRoot : JsonApiStruct { // content + pack/expand methods }

DummyRoot dummy = new DummyRoot();

dummy.Pack(); // pack content string data1 = dummy.AsString(); // get packed JSON #1

dummy.ExpandFromRAW(data1); // load structure once more from data!

// repeat process :-) dummy.Pack(); // pack content string data2 = dummy.AsString(); // get packed JSON #2

// now both can be visualised </enforce>

Packing object will produce a long, non-formatted string like: {"m_bool":false,"m_int":1024,"m_double":1.2345678806304932,"m_string":"Hello I am your new string!","m_objects":{"obj1":{"name":"Van Ceulen","year":"1706","val":3.1415927410125734},"obj2":{"name":"Bernoulli","year":"1683","val":0.5772156715393066},"obj3":{"name":"Feidius","year":"430BC","val":1.6180340051651}}}

Use suitable online/other tool for readable structure, result can be stored to textfile and compared by binary/text compare tool if necessary.

{{Feature|informative| * {{Link|https://jsonformatter.org/|JSONFormatter.org}} offers a JSON beautifier (default tabulation {{=}} 2 spaces) * {{Link|https://notepad-plus-plus.org/|Notepad++}} has the feature built-in (default tabulation {{=}} 1 tab); Plugins > JSON Viewer > Format JSON ({{Controls|Ctrl|Alt|Shift|M}}): <spoiler text="Show Result"> <syntaxhighlight lang="json"> { "m_bool": false, "m_int": 1024, "m_double": 1.2345678806304932, "m_string": "Hello I am your new string!", "m_objects": { "obj1": { "name": "Van Ceulen", "year": "1706", "val": 3.1415927410125734 }, "obj2": { "name": "Bernoulli", "year": "1683", "val": 0.5772156715393066 }, "obj3": { "name": "Feidius", "year": "430BC", "val": 1.6180340051651 } } } </syntaxhighlight> </spoiler> }}

{{GameCategory|armaR|Modding|Scripting|Tutorials}}
oq7vdqggq1xsnkesh9pbedpapawyvg4

# Arma Reforger:Multiplayer Scripting

5050
32437
376622
376309
2025-10-31T17:01:26Z
Lou Montana
10739
Remove now obsolete BaseFlattenGrassComponent class
376622
wikitext
text/x-wiki
{{TOC|side}} '''Multiplayer Scripting''' in Enfusion is based on '''Replication''' - it determines which machine does what in a situation.

When a Prefab entity is created on the server (and has a replication node set to broadcast), it is ''replicated'' on other network machines for them to see a representation of this object. This created representation is called a ''proxy'' – more information below.

== Network ==

The Arma Reforger network architecture is a classical one with one server to which clients connect. Clients do not communicate between each others, they communicate with the server which redistributes data.

{{Feature|informative| In '''single player''', the local machine is considered a '''player-hosted server'''. A properly designed multiplayer code should run flawlessly in single player, and ideally ''vice versa''. }}

=== Server ===

The '''Server''' is the core network machine: it is the central system that receives and redistributes network information. There is only '''one''' server per multiplayer game, and the multiplayer game is destroyed if the server loses connection (server role does not get transferred).

{{Feature|informative| A server can be: * '''dedicated''', as in it is a game instance running by itself, without a player behind * {{GVI|armaR|0.9.7|size= 0.75}} '''player-hosted''' (also known as '''listen server'''), meaning that a player's game instance is also hosting a game. Distributed server (multiple servers) is '''not''' a thing in {{armaR}}. }}

{{Feature|important| The following Components and others inheriting from them are '''not''' instanciated on a Dedicated Server: * {{Link/Enfusion|armaR|CameraHandlerComponent}} * {{Link/Enfusion|armaR|DebugShootComponent}} * {{Link/Enfusion|armaR|MotorExhaustEffectComponent}} * {{Link/Enfusion|armaR|BaseSoundComponent}} }}

=== Client ===

A '''Client''' is a machine that is connected to the server. A client is everything else that is '''not''' the server. A client can join after a game has started (even leave and join again) depending on the scenario. Such client is known as '''JIP''', standing for Join in Progress - see the {{Link|#Join In Progress}} section below.

{{Feature|informative| A client can be * a '''player client''', the most common understanding of a client: a machine connecting to the server with a player behind it to play the game and control a character <!-- * a '''headless client''', which is the "dedicated server equivalent" for a client: this is a game instance that has no player behind, and this client's resources can be used to offload the server from calculations. --> {{arma3}}'s [[Arma 3: Headless Client|Headless Client]] system is '''not''' a thing in {{armaR}}. }}

== Replication ==

'''Replication''' (shortened as '''RPL''') is the name of the system used to ''replicate'' an entity or effect on all the concerned machines. For example, when a grenade explodes the damage is calculated on the server, whereas the visual effect is broadcast (replicated) to all the clients.

'''Remote Procedure Call''' (shortened as '''RPC''') is the system allowing to queue network messages on other machines.

{{Feature|informative|An entity that is to be replicated should '''always''' have an '''RplComponent''' script component.}}

=== Preamble ===

The network structure is based on server-client relationship; Scripting and RPC Replication methods, on the other hand, should be oriented towards '''Roles''' - code should be written on '''authority role''' principle, server-client principle should be avoided:

* is the entity present on this machine the '''Authority'''? * if not, the local entity is a '''Proxy''' ** if so, is it an '''Owner''' entity?

See the next chapters for further explanations.

=== Entity Role ===

When an entity gets created on a network machine, this entity is the '''Authority''' and this role is set in stone; it can never get changed or transferred.

If the network machine is the server, the entity's existence is broadcast to other network machines; the authority (server's entity) is represented on each client by locally-created entities named '''Proxies''' (local representation of the authority's reference).

* For an entity created on the '''server:''' ** the server hosts the authority entity ** the entity is replicated as proxy on other machines ** ownership can be given and taken by the authority

* For an entity created on a '''client:''' ** the client hosts the authority entity ** the server being unaware of it, the entity is '''not''' replicated on any network machine

{{Feature|important|An entity that has been created on a client is not known by the server and its methods cannot therefore be broadcast to everyone.}}

==== Authority ==== The '''Authority''' is the reference entity.

All mission objects belong to the '''server'''; the server has almost if not all the authority entities.

{{Feature|informative| A client can host an authority on its machine by having it created locally; by doing so the entity will be local to this client, no other machine including the server will be aware of it and therefore no replication can ever happen on it. }}

==== Proxy ==== A '''Proxy''' is an entity that ''represents'' an authority on another machine; it only '''receives''' entity updates from the authority and cannot send network updates about it - unless the machine has been designated '''owner''' (see below).

===== Owner ===== An '''Owner''' is a special entity role that comes in addition to an authority or a proxy. An owner entity is the entity that has minor rights on the entity such as owner-specific methods. Only '''one''' machine can own an entity. The '''server''' can be an '''owner''', and ownership can be transferred by the authority.

A client owner is only a machine with an "elevated" proxy access, being able to use RPC methods about this entity towards the authority (and only towards the authority).

Ownership behaviour example:

* a machinegun car exists on the server; the server is '''hosting''' the '''authority''' and is the '''owner''' of it * a player enters the car as the driver; the host (the server) gives car's ownership to the player's machine, which becomes the '''owner''' of the car * another player enters the car's machinegun; the host (still and always the server) gives machinegun's ownership to this player's machine, which becomes the '''owner''' of the car's machinegun entity * the server keeps authority of this car and its machinegun - it is the one that overrides all clients' positions/states * when said players leave their respective entities, the server takes ownership back

{{Feature|important| Giving ownership is '''not''' giving authority and is unrelated to it!<br> Ownership can be changed, authority location is set in stone. }}

=== Replication State ===

There are two main replication game states which replication distinguishes and which affect some characteristics of replicated items: loadtime state and runtime state. Items inserted into replication while game is loading (ie. at loadtime) are treated as loadtime items, while those inserted once the game is running (ie. at runtime) are treated as runtime items when inserted on server, or local items when inserted on client (as they only exist locally).

{{Feature|informative| Previously, loadtime items were referred to as ''static'', while runtime items were referred to as ''dynamic''. However, for several reasons (mainly naming consistency and collision with other systems using the same terminology), they were renamed to hopefully better reflect their nature. }}

for simplicity, this page will use "items" to refer to both entities, components and in general anything else that might be replicated.

==== Loadtime ==== '''Loadtime''' items are generally entity instances placed in world. These are objects that shouldn't be moved around too much (though some degree of movement is allowed) and usually need to be visible from greater distances. Typical examples are buildings or street signs. Main things to keep in mind:

* They do '''not''' require prefab for spawning. * Their insertion '''must''' be deterministic on the server and clients. The server relies on clients to have the same initial world state after the map has been loaded so it can replicate changes from this initial state as they become relevant for a given client, reducing overall traffic (by sending only changes) and spreading the load over time. Clients will still be able to see things in the distance, even though their state has not been perfectly synchronised. ** Replication validates that the initial world state matches. That is, RplId and type information of each loadtime item is the same on client as it initially was on the server. When a mismatch is detected, "inconsistent item table" error will appear in log and client will be disconnected with {{hl|JIP_ERROR}}. * They may be out-of-sync with the server '''for a long time''' (possibly through the whole game session). The replication scheduler (running server-side) decides when to stream their current state to each client. When this decision is based on proximity, clients will only get the current state streamed in when they get "close enough" for these changes to be relevant. Because of the world size, this may take time or never happen at all. ** The only exception is complete removal of these items on the server. In that case, removal will be replicated to clients unconditionally. * As long as the authority exists on the server, the proxy exists on the clients. ** Streaming in synchronizes state of proxy with authority. Once streamed in, proxy starts receiving state updates and it can send and receive RPCs.<br><!-- -->{{Feature|warning|Streaming out while the authority exists on the server is currently considered undefined behaviour and must be avoided!}}

==== Runtime ==== '''Runtime''' items generally come from a game system that creates them during the session (A game mode, {{Link|Arma Reforger:Game Master}}, etc). They can move around the map freely and they are usually not visible from far away. Typical examples are vehicles, player characters, collectible items. Main things to keep in mind:

* They require prefab for spawning. * They may only be inserted on the server. This is the authority. * Their proxy may or may not exist on a client.

===== Local Runtime ===== Local items are items created on client during the session. They can be used for locally predicted effects of player actions, such as firing from rocket launcher immediately creating a flying rocket on client who fired it, instead of waiting for server-side rocket to be streamed to this client. Main things to keep in mind:

* They do not require prefab for spawning. * They may only be inserted '''on a client'''. This is the authority. * There are no proxies on the server or other clients.

==== Replication State Override ==== Replication state override (a.k.a "Rpl State Override") is a {{Link/Enfusion|armaR|RplComponent}} property that allows modifying the behaviour of spawning and insertion process to behave as-if insertion of node hierarchy happened in the specified state. The currently supported values are:

* {{hl|None}}: no override. The state for this node and its descendants at the time of insertion is inherited from its parent node (whether it is Loadtime or Runtime). * {{hl|Runtime}}: The state for this node and its descendants at the time of insertion is overridden to be Runtime.

{{Feature|important| With entities and components, child entities spawned during initialisation must be attached to parent as part of spawning process. A common mistake is to spawn an entity first and then attach it as child of entity that spawned it. However, this results in spawned entity being inserted separately from parent. If this happens at loadtime and the parent entity had its state overridden to be runtime, it will revert state override back to loadtime, which is currently considered '''undefined behaviour''' and must be avoided! }}

=== RPC Call ===

An RPC call is an entity method's call through the network, e.g from the authority to its proxies (on other machines). Specific targets can be defined, such as "all proxies" or "owner only".

=== Join In Progress ===

'''Join In Progress''' is the fact of having a client that connects to the server while a multiplayer game is already running.

=== Streaming ===

'''Streaming''' is the system creating/updating/deleting entities that are '''relevant''' to the local machine. An entity is '''not''' always present on all machines. Streaming is the way of saving network and CPU process by only sending '''relevant''' entities' information.

Consider a server hosting a game with multiple clients, with "player" designating the local player on the local client machine. A car parked 5 km away from the player is not important to them, so only the server and players near the car have this entity's information - it actually does not exist on the player's machine. If someone damages that car, the server is informed and this information is transferred to whomever it is relevant - nearby players, not distant players.

If the player gets close to it, the server decides this car becomes relevant to that client and streams it the proxy's information along with its current state (damage, position, etc).

* Streaming in creates a proxy * Streaming out destroys this proxy * While the proxy exists, it receives state updates and can send and receive RPCs.

{{Feature|informative|The streaming system is also what is at work during '''Join In Progress'''.}}

==== Relevance ==== Relevance is a value decided authority-side by the engine that sets whether or not a proxy should be streamed to a network machine or not, in order to save network messages and CPU cycles.

A simple example would be a car that is five kilometres away from a player is not '''relevant''' to that player; so the proxy on this player's machine is deleted by the replication system automatically, and re-created/synchronised again when it becomes relevant (e.g close-by) again.

==== Special Cases ==== The authority '''always''' exists, as it is the reference entity for replication.

The owner entity is '''always''' present on its machine; it is never unloaded/reloaded depending on relevance unless ownership is taken away.

==== Broadcast ==== An RPC call with broadcast as a target will send the message on machines that have said entity present on their system; as seen above, a proxy owner entity is guaranteed to exist on

{{Feature|important|This is a very important aspect of Replication: if the proxy is not streamed on a machine, the broadcast message will '''not''' reach this machine, as there is no entity target!}}

==== Operations Order ==== {{Feature|warning|As of v0.9.5: loading order between {{hl|RplLoad}} and member variable updates is '''not''' guaranteed and may be '''subject to change'''.}}

'''Current''' loading order: {| class="wikitable" ! Order ! Operation |- | 1 | entity hierarchy creation |- style="opacity: 0.6" | 2 | RplLoad operations |- style="opacity: 0.6" | 3 | member variable values in '''''unguaranteed''''' order

triggering their respective {{hl|onRplName}} methods |}

== Code ==

Entity methods get executed with the {{hl|Rpc}} method using their {{hl|RplRpc}} attribute to determine the targets.

=== Rpc Method ===

The {{hl|Rpc}} method (present in both {{Link/Enfusion|armaR|GenericEntity}} and {{Link/Enfusion|armaR|GenericComponent}}) is the starting point to trigger a network-friendly code call. <enforce methods="Rpc_MyMethod"> Rpc(Rpc_MyMethod, parameter1, parameter2); </enforce>

The engine will make it so that this method will call the provided one where it needs to be, depending on the {{hl|RplRpc}} target method attribute.

By convention, methods that can be called through replication are prefixed with the {{hl|Rpc_}} prefix: e.g {{hl|Rpc_MyMethod()}}.

the {{hl|RpcAsk_}} prefix is used by the owner to ask the authority to do an action (sender = owner, receiver = authority).

the {{hl|RpcDo_}} prefix is used by the authority to do an action (sender = authority, receiver = owner proxy or all proxies).

==== Usage ==== <enforce> void Rpc(func method, void p0 = NULL, void p1 = NULL, void p2 = NULL, void p3 = NULL, void p4 = NULL, void p5 = NULL, void p6 = NULL, void p7 = NULL); </enforce>

Network-wise, a method RPC is added to a list of "to do tasks"; it means that they might be sent separately, or all in one network packet. The order of the calls between two machines is however guaranteed.

{{Feature|informative|Calling an RPC method from {{hl|EOnInit}} is '''not''' supported for initialisation order reasons.}}

=== RplRpc Attribute ===

The {{hl|RplRpc}} attribute is to decorate an entity's '''method''', allowing the engine to run said method on targeted machines through the {{hl|Rpc}} method. <enforce> [RplRpc(RplChannel.Reliable, RplRcver.Owner)] </enforce>

==== Usage ==== Here is {{hl|RplRpc}} attribute's signature: <enforce> void RplRpc(RplChannel channel, RplRcver rcver, RplCondition condition = RplCondition.None, string customConditionName = "") </enforce>

{| class="wikitable" ! Parameter ! Usage |- | channel | {{hl|RplChannel}} enum, can be one of:

* '''Reliable''': the packet is guaranteed to reach its destination * '''Unreliable''': the packet is sent but may be overridden depending on the order of arrival

{{Feature|important|Using '''Reliable''' is more expensive and should be used carefully. '''Unreliable''' should be used for non-important or very frequent calls (e.g updating positions).}} |- | rcver (receiver) | {{hl|RplRcver}} enum, can be one of:

* '''''Server''':'' run the method on the authority entity * '''Owner''': run the method on the owner entity * '''Broadcast''': run the method on proxies only ('''not''' on the authority) ** only machines that have the proxy streamed on their machine will receive the broadcast, '''not''' all the machines. ** an immediate '''broadcast''' may ''not'' reach the owner entity right after transferring ownership; however an '''owner''' RPC call is guaranteed to reach it.

{| class="wikitable" style="text-align: center" ! colspan="5" | Permissions Table |- | colspan="5" | <div style="display: inline-block; margin: auto; text-align: left"> {{Icon|checked}} = RPL call is processed over the network<br> {{Icon|unchecked}} = RPL call is abandoned </div> |- ! rowspan="2" | Action ! colspan="2" | Authority ! colspan="2" | Proxy |- ! Server ! Client (local entity) ! Owner ! Client |- | {{hl|RplRcver.Server}}<br>Send to the authority | {{Icon|checked}}<br>(code is run locally) | {{Icon|checked}}<br>(code is run locally) | {{Icon|checked}}<br>| {{Icon|unchecked}} |- | {{hl|RplRcver.Owner}}<br>Send to the owner | {{Icon|checked}}<br>(code is run locally if authority is owner) | {{Icon|checked}}<br>(code is run locally) | {{Icon|checked}}<br>(code is run locally) | {{Icon|unchecked}} |- | {{hl|RplRcver.Broadcast}}<br>Send to all but authority | {{Icon|checked}}<br>(code is run on all proxies and ''not'' locally) | {{Icon|unchecked}}<br>(other machines have no proxy) | {{Icon|unchecked}}<br>(code is run locally) | {{Icon|unchecked}}<br>(code is run locally) |} |- | condition | style="text-align: left" | {{hl|RplCondition}} enum, can be one of:

* '''None''': run the method in all cases * '''OwnerOnly''': run the method on the owner machine only * '''NoOwner''': run the method on all the other machines that are not the owner * '''Custom''': uses the {{hl|customConditionName}} field to use the named function as custom execution condition |- | customConditionName | if {{hl|condition}} has been set to {{hl|Custom}}, {{hl|customConditionName}} must be set to the name of the method to be checked. This method must return a {{hl|bool}}.

Example: <enforce> class RplClass { [RplProp(onRplName: "OnBroadcastValueUpdated", condition: RplCondition.Custom, customConditionName: "RpcConditionMethod")] protected int m_iBroadcastValue;

void OnBroadcastValueUpdated() { // this method will only run on proxies if authority's RpcConditionMethod returns true }

[RplRpc(RplChannel.Reliable, RplRcver.Server)] void RpcAsk_Method() { m_iBroadcastValue = 33; Replication.BumpMe(); }

bool RpcConditionMethod() { return m_iBroadcastValue < 50; } } </enforce> |}

=== RplProp Attribute ===

The {{hl|RplProp}} attribute is to decorate an object's '''property''', allowing the engine to synchronise values on network machines.

Only a change on the authority '''and''' notifying the replication system with {{hl|Replication.BumpMe()}} method will trigger a broadcast to other machines (see the {{Link|#BumpMe}} section).

{{Feature|informative| {{hl|RplProp}}-decorated properties are automatically synchronised by the {{Link|#Streaming}} system. <enforce> [RplProp()] </enforce> }}

==== Usage ==== Here is {{hl|RplProp}} attribute's signature: <enforce> void RplProp(RplGroup group = RplGroup.Mandatory, string onRplName = "", ScriptCtx ctx = NULL, RplCondition condition = RplCondition.None, string customConditionName = "") </enforce>

{| class="wikitable" ! Parameter ! Usage |- | group | {{hl|RplGroup}} enum, can be one of:

* Mandatory * Group_1 * Group_2 * Group_3 * Group_4 * Group_5 * Group_6

{{Feature|informative|These groups are meant to update parts of said entity in the event of a big data structure - more details ''later''}} |- | onRplName | The method name to be called on proxies when the property's value is changed on the authority (and synchronised with {{hl|Replication.BumpMe()}} method). {{Feature|important| * This method will '''not''' be called on the authority * This method '''will''' be called on proxies' streaming (synchronisation) * only machines that have the proxy streamed on their machine will receive the broadcast, '''not''' all the machines. }} |- | ctx | Script context - engine only, unused script-side |- | condition |{{hl|RplCondition}}, can be one of:

* '''None''': update the property in all cases * '''OwnerOnly''': update the property on the owner machine only * '''NoOwner''': update the property on all the machines that are not the owner * '''Custom''': uses the {{hl|customConditionName}} field as custom execution condition |- | customConditionName | if {{hl|condition}} has been set to {{hl|Custom}}, {{hl|customConditionName}} must be set to the name of the method to be checked. This method must return a {{hl|bool}}.

Example: <enforce> class RplClass { [RplProp(onRplName: "OnBroadcastValueUpdated", condition: RplCondition.Custom, customConditionName: "RpcConditionMethod")] protected int m_iBroadcastValue;

void OnBroadcastValueUpdated() { // this method will only run on proxies if authority's RpcConditionMethod returns true }

[RplRpc(RplChannel.Reliable, RplRcver.Server)] void RpcAsk_Method() { m_iBroadcastValue = 33; Replication.BumpMe(); }

bool RpcConditionMethod() { return m_iBroadcastValue < 50; } } </enforce> |}

=== RplSave/RplLoad ===

==== RplSave ==== '''RplSave''' is the method called on the authority's side to write custom synchronisation data.

{{Feature|informative| {{hl|RplSave}} writes data to a provided {{hl|ScriptBitWriter}} instance. Different data types have different sizes, see Values - Primitive Types for their default size.<br> Helper methods such as {{hl|WriteBool}} or {{hl|WriteVector}} exist to save some trouble as syntactical sugar.<br> Note that using the default size is not always the best/economical option; see below example. }}

==== RplLoad ==== '''RplLoad''' is the method called on the streamed entity after the entity, its components and the whole entities hierarchy to which it belongs has been loaded, if any.

It is called immediately after initialisation but before anything else ({{hl|EOnFrame}}, etc).

{{Feature|important| {{hl|RplLoad}} reads data from a provided {{hl|ScriptBitReader}} instance. Reading from it '''must''' be done in the same order and with the same number of bits than the writing that happened in {{hl|RplSave}}, otherwise data discrepancy may happen and behaviour is not guaranteed. }}

=== Replication Class === The {{hl|Replication}} class is a very useful Replication tool, holding the following methods (only the most used ones are listed here).

==== FindId ==== Return the provided entity's id. ''should be an {{hl|RplId}}''

If the entity does not have one, it returns {{hl|Replication.INVALID_ID}}.

{{Feature|informative|This method uses a table lookup and therefore should not be used in a tight loop - once found, the id should instead be stored in a variable.}}

==== FindItem ==== Return the provided id's entity.

If no entities have the provided id, it returns {{hl|null}}.

==== FindOwner ==== Return the owner machine's network id.

If the entity has no owner id, it returns {{hl|Replication.INVALID_IDENTITY}}.

==== BumpMe ==== This method tells the Replication system that at least one property has been updated and that the change(s) should be broadcast.

{{Feature|important|This method should be used whenever an {{hl|RplProp}} property has been changed and is '''not''' to be randomly called hoping a property has been changed. <enforce> class RplClass { [RplProp()] protected int m_iValue;

[RplRpc(RplChannel.Reliable, RplRcver.Server)] protected void RpcAsk_Authority_Method(int newValue) { if (m_iValue != newValue) // not necessary for small changes { m_iValue = newValue; Replication.BumpMe(); } } } </enforce> }}

== Network Modding ==

Defining codec methods is required when a scripted class is marked with <enforce inline>[RplProp()]</enforce>.

=== Definitions ===

; Codec : A '''Cod'''er-'''Dec'''oder - an element that is in charge of encoding/decoding data

; Snapshot : An "image" of an object's replicated properties - used by the engine to compare with the current status' snapshot and detect a change

; Packet : (naming may change) An object's transferrable data - unrelated to network packet

=== Methods ===

{{Link|enfusion://ScriptEditor/scripts/Core/proto/EnNetwork.c|EnNetwork.c}} provides an example class with declarable methods overriding the default behaviour. These methods can be written/overridden in any Enforce Script classes. {{Feature|informative|See e.g {{Link/Enfusion|armaR|SCR_MapMarkerBase}} for a real implementation.}} <enforce> class CustomClass { //! From snapshot to packet. // Takes snapshot and compresses it into packet. Opposite of Decode() static void Encode(SSnapSerializerBase snapshot, ScriptCtx ctx, ScriptBitSerializer packet);

//! From packet to snapshot. // Takes packet and decompresses it into snapshot. Opposite of Encode() static bool Decode(ScriptBitSerializer packet, ScriptCtx ctx, SSnapSerializerBase snapshot);

//! Snapshot to snapshot comparison. // Compares two snapshots to see whether they are the same or not static bool SnapCompare(SSnapSerializerBase lhs, SSnapSerializerBase rhs, ScriptCtx ctx);

//! Property mem to snapshot comparison. // Compares instance and a snapshot to see if any property has changed enough to require a new snapshot static bool PropCompare(CustomClass prop, SSnapSerializerBase snapshot, ScriptCtx ctx);

//! Property mem to snapshot extraction. // Extracts relevant properties from an instance of type T into snapshot. Opposite of Inject() static bool Extract(CustomClass prop, ScriptCtx ctx, SSnapSerializerBase snapshot);

//! Snapshot to property memory injection. // Injects relevant properties from snapshot into an instance of type T . Opposite of Extract() static bool Inject(SSnapSerializerBase snapshot, ScriptCtx ctx, RplTestPropType prop); } </enforce> <spoiler text="See a full codec implementation"> <enforce> class ComplexType { bool m_bValue; int m_iValue; float m_fValue; vector m_vValue;

// ## Extract/Inject // Extracting data from instance into snapshot, and injecting data from snapshot to instance. // Snapshot is meant to be fast to work with, so values are left uncompressed to avoid extra work when accessing these values.

// ## Encode/Decode // Encoding snapshot into a packet and decoding snapshot from a packet. // Packets need to be as small as possible, so this process tries to reduce the size as much as it can. // Knowing what range of values can certain variable have and encoding that range in minimum number of bits required is key. // If it is to assume the full range of values is needed, helpers that already implement those for different types can be used.

static bool Extract(ComplexType instance, ScriptCtx ctx, SSnapSerializerBase snapshot) { // Fill a snapshot with values from an instance. snapshot.SerializeBool(instance.m_bValue); snapshot.SerializeInt(instance.m_iValue); snapshot.SerializeFloat(instance.m_fValue); snapshot.SerializeVector(instance.m_vValue); return true; }

static bool Inject(SSnapSerializerBase snapshot, ScriptCtx ctx, ComplexType instance) { // Fill an instance with values from snapshot. snapshot.SerializeBool(instance.m_bValue); snapshot.SerializeInt(instance.m_iValue); snapshot.SerializeFloat(instance.m_fValue); snapshot.SerializeVector(instance.m_vValue); return true; }

static void Encode(SSnapSerializerBase snapshot, ScriptCtx ctx, ScriptBitSerializer packet) { // Read values from snapshot, encode them into smaller representation, then // write them into packet. snapshot.EncodeBool(packet); // m_bValue snapshot.EncodeInt(packet); // m_iValue snapshot.EncodeFloat(packet); // m_fValue snapshot.EncodeVector(packet); // m_vValue }

static bool Decode(ScriptBitSerializer packet, ScriptCtx ctx, SSnapSerializerBase snapshot) { // Read values from packet, decode them into their original representation, // then write them into snapshot. snapshot.DecodeBool(packet); // m_bValue snapshot.DecodeInt(packet); // m_iValue snapshot.DecodeFloat(packet); // m_fValue snapshot.DecodeVector(packet); // m_vValue return true; }

static bool SnapCompare(SSnapSerializerBase lhs, SSnapSerializerBase rhs, ScriptCtx ctx) { // Compare two snapshots and determine whether they are the same. return lhs.CompareSnapshots(rhs, 4 + 4 + 4 + 12); }

static bool PropCompare(ComplexType instance, SSnapSerializerBase snapshot, ScriptCtx ctx) { // Determine whether current values in instance are sufficiently different from // an existing snapshot that it's worth creating new one. // For float or vector values, it is possible to use some threshold to avoid creating too // many snapshots due to tiny changes in these values. return snapshot.CompareBool(instance.m_bValue) && snapshot.CompareInt(instance.m_iValue) && snapshot.CompareFloat(instance.m_fValue) && snapshot.CompareVector(instance.m_vValue); } } </enforce> </spoiler>

=== Codec Steps ===

{| class="wikitable valign-top" ! On Server ! On Client |- | * {{hl|Replication.BumpMe()}} is used to signal that properties of an item have changed and they need to be replicated to clients * Replication compares replicated properties against the most recent snapshot it has using the {{hl|PropCompare()}} codec function. If the codec says snapshot is the same as the current state, the process ends * Replication creates a new snapshot and uses the {{hl|Extract()}} codec function to copy values from instance to snapshot * That created snapshot is transmitted to clients as needed. {{Feature|informative| This process tracks multiple snapshots per item per connected client, join-in-progress, streaming, relevancy, etc. It often uses the {{hl|SnapCompare()}} codec function to determine whether two snapshots are the same. When a snapshot is finally being prepared for transmission over network, the {{hl|Encode()}} codec function will be used to convert snapshot into compressed form (using as few bits as possible for each value) suitable for network packet. }} | * When a new packet with the compressed snapshot arrives, it is decompressed using codec function {{hl|Decode()}} * Snapshots are compared using the codec function {{hl|SnapCompare()}} to determine whether or not changes have occurred * Replication updates properties of the replicated item using the codec function {{hl|Inject()}}. |}

== Examples ==

For the sake of the examples, let's assume that:

* the server hosts the {{hl|ComputerEntity}} authority entity * a client hosts the owner entity

=== RplRpc ===

In the following code:

* the protected {{hl|RpcAsk_Authority_Method}} method is set to be RPC-called on the authority * the protected {{hl|RpcDo_Owner_Method}} method is set to be RPC-called on the owner * the protected {{hl|RpcDo_Broadcast_Method}} method is set to be RPC-called on every proxy

We assume the public {{hl|TurnOn}} method has been triggered '''owner-side''', making the following events happen:

* the {{hl|TurnOn}} method calls the {{hl|RpcAsk_Authority_Method}} through RPC; as stated earlier, this method executes on the authority's machine - the server in this case * the {{hl|RpcAsk_Authority_Method}} method (running on the authority): ** prints "authority-side code" in the authority machine's logs ** calls the {{hl|PlayMusic}} method on the authority ** calls the {{hl|RpcDo_Broadcast_Method}} method on all the proxies (see below) ** calls the {{hl|RpcDo_Owner_Method}} method on the owner's proxy (see below) * the {{hl|RpcDo_Broadcast_Method}} method (running on every proxy, including owner's): ** prints "proxy-side code" in proxy machines' logs ** calls the {{hl|PlayMusic}} method on the proxy * the {{hl|RpcDo_Owner_Method}} method (running on the owner's proxy): ** prints "owner-side code"

The end result:

* all the machines' instances: ** called the {{hl|PlayMusic}} method and played the "OSWelcome" music * the authority's machine has ** "authority-side code" in the logs - had the server been the owner too, "owner-side code" would be present as well * the owner's machine has ** "proxy-side code" '''then''' "owner-side code" in the logs (the order is guaranteed) * all other machines have ** "proxy-side code" in the logs

<enforce methods="RpcAsk_Authority_Method RpcDo_Broadcast_Method RpcDo_Owner_Method"> class ComputerEntity : IEntity { protected bool m_bIsTurnedOn; // this value is edited only on authority's side

[RplRpc(RplChannel.Reliable, RplRcver.Server)] protected void RpcAsk_Authority_Method(bool turningOn) { Print("authority-side code");

if (turningOn == m_bIsTurnedOn) // the authority has authority return; // prevent useless network messages

m_bIsTurnedOn = turningOn;

PlayMusic(turnOn); // play music on authority Rpc(RpcDo_Broadcast_Method, turningOn); // send the music broadcast request Rpc(RpcDo_Owner_Method); // run specific code on the owner's entity (that may or may not be the authority) }

[RplRpc(RplChannel.Reliable, RplRcver.Owner)] protected void RpcDo_Owner_Method() { Print("owner-side code"); }

[RplRpc(RplChannel.Reliable, RplRcver.Broadcast)] protected void RpcDo_Broadcast_Method(bool turningOn) { Print("proxy-side code"); PlayMusic(turningOn); }

protected void PlayMusic(bool turningOn) { if (turningOn) SomeSoundClass.PlayMusic(this, "OSWelcome"); else SomeSoundClass.PlayMusic(this, "OSGoodbye"); }

// public methods

void TurnOn() { Rpc(RpcAsk_Authority_Method, true); }

void TurnOff() { Rpc(RpcAsk_Authority_Method, false); } } </enforce>

=== RplProp ===

In the following code:

* the {{hl|m_bIsTurnedOn}} property is set to update to all the proxies on authority value's modification * the {{hl|m_bIsTurnedOn}} property is set to execute the {{hl|OnTurnedOnUpdated}} method on proxies when its value is updated by Replication (JIP included)

We assume the public {{hl|TurnOn}} method has been triggered '''owner-side''', making the following events happen:

* the {{hl|TurnOn}} method calls the {{hl|RpcAsk_Authority_Method}} through RPC; as stated earlier, this method executes on the authority's machine - the server in this case * the {{hl|RpcAsk_Authority_Method}} method (running on the server): ** sets LED colour on the server ** sets the {{hl|m_bIsTurnedOn}} property to "true" on the authority; as the {{hl|m_bIsTurnedOn}} property is set to broadcast its changes thanks to the {{hl|RplProp}} attribute, the change is broadcast to every proxy machine * the {{hl|OnTurnedOn}} method is triggered on proxies and "The proxy has been updated" is printed

The end result:

* all the machines' instances: ** have the {{hl|m_bIsTurnedOn}} property set to "true" ** have their light set to green * the authority: ** printed "authority-side code" * all the proxies: ** printed "proxy-side code"

<enforce methods="RpcAsk_Authority_Method"> class ComputerEntity : IEntity { [RplProp(onRplName: "OnTurnedOnUpdated")] protected bool m_bIsTurnedOn = false; // this value is to be updated by the authority, not set locally by proxies (even owner) // if it is set locally, the change will not broadcast and there will be a difference between the proxy and the authority // this state discrepancy will last until authority's next update broadcast

[RplRpc(RplChannel.Reliable, RplRcver.Server)] protected void RpcAsk_Authority_Method(bool turningOn) { if (turningOn == m_bIsTurnedOn) return; // prevent useless network messages

Print("authority-side code"); m_bIsTurnedOn = turningOn; // m_bIsTurnedOn is changed only in an authority-targeting method // it will broadcast over the network automatically due to Replication setting (line 3)

SetLedLightColour(); // SetLedLightColour is not automatically called on the authority

Replication.BumpMe(); // tell the Replication system this entity has changes to be broadcast // the Replication system will update the member variable AFTER RpcAsk_Authority_Method is done }

protected void OnTurnedOnUpdated() { Print("proxy-side code"); // this method is called on proxies when m_bIsTurnedOn is updated through Replication // it is NOT called on the authority SetLedLightColour(); }

protected void SetLedLightColour() { if (m_bIsTurnedOn) SomeLightClass.SetLedLightColour(this, Color.Green); else SomeLightClass.SetLedLightColour(this, Color.Red); }

// public methods

void TurnOn() { if (m_bIsTurnedOn) // m_bIsTurnedOn can be read from any entity return;

Rpc(RpcAsk_Authority_Method, true); }

void TurnOff() { if (!m_bIsTurnedOn) return;

Rpc(RpcAsk_Authority_Method, false); } } </enforce>

=== RplSave/RplLoad ===

Without {{hl|RplSave}}/{{hl|RplLoad}} override, the following entity would be created with {{hl|m_iSoldierId}}, {{hl|m_iHealth}} and {{hl|m_bHadLunch}} set to their default value, as these are not decorated with {{hl|RplProp}}. <enforce> class SCR_RplTestSoldier : IEntity { [RplProp()] protected string m_sName = "Player 1"; // joining in progress automatically synchronises RplProp variables

protected int m_iSoldierId = 12345678; protected int m_iHealth = 100; // range 0..100 protected bool m_bHadLunch = false; protected string m_sSoldierDogTag = "PID 1234";

// Called on the authority when an entity gets streamed override bool RplSave(ScriptBitWriter writer) { // m_sName is automatically synchronised, no need to do it manually writer.Write(m_iSoldierId, 32); // write 32 bits of soldier ID - int is 32 bits in size writer.Write(m_iHealth, 7); // write 7 bits of health - 7 bits are enough if the value cannot go over 100 (7 bits range is 0..127) writer.WriteBool(m_bHadLunch); // write 1 bit only writer.WriteString(m_sSoldierDogTag); // write the string - the size varies with the string and characters used

return true; }

// Called on the streamed proxy override bool RplLoad(ScriptBitReader reader) { // m_sName is automatically synchronised, no need to do it manually if (!reader.Read(m_iSoldierId, 32)) // read 32 bits of data - the authority wrote soldier ID first, so it needs to be read first return false;

if (!reader.Read(m_iHealth, 7)) // read 7 bits of data - the authority wrote health second, so it needs to be read second return false;

if (!reader.ReadBool(m_bHadLunch)) // read 1 bit only return false;

if (!reader.ReadString(m_sSoldierDogTag)) // read the string - size is managed automatically return false;

return true; } } </enforce>

{{GameCategory|armaR|Modding|Scripting|Tutorials}}
2as0u4jhgjd1qbwosehgpzgaotqvj0a

# Arma Reforger:REST API Usage

5050
34298
376143
370984
2025-09-03T14:39:18Z
Lou Montana
10739
Some wiki formatting
376143
wikitext
text/x-wiki
{{TOC|side}} The '''REST API''' ({{Link/Enfusion|armaR|RestApi}}) is a simplified way to call REST requests and handle results/data, allowing to communicate with a web API. This page explains the terminology and how to use the scripting API.

{{Feature|informative|See also the {{Link|https://en.wikipedia.org/wiki/Representational_state_transfer}} Wikipedia article.}}

{{Feature|important| The REST API is only meant to provide basic REST functionality (GET and POST methods - see {{Link|https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods|HTTP request methods}}), ''not'' full server functionality (like e.g {{Link|https://curl.se/|curl}}). * Data size accepted by the API has to be '''below 1 MB''' * There is no support for custom headers * There is limited printout }}

== Definitions ==

=== Context ===

The '''context''' is simply the website URL with which transactions will happen, e.g https://httpbin.org/.

A {{Link/Enfusion|armaR|RestContext}} context can be created with the following: <enforce> RestContext ctx = GetGame().GetRestApi().GetContext("https://httpbin.org/"); </enforce>

=== Callback ===

A '''callback''' is a script class handling a request's success, error or timeout.

Once the request happens (asynchronously) the callback methods are called to process the received result.

The scripter is responsible for the callback object's lifetime. Inherit from {{Link/Enfusion|armaR|RestCallback}} and implement the desired methods to create a custom callback: <enforce> class RestCallbackExample : RestCallback { } </enforce>

== Example ==

=== Declaration ===

<enforce> class RestCallbackExample : RestCallback { //------------------------------------------------------------------------------------------------ override void OnError(int errorCode) { PrintFormat("OnError(%1)", errorCode); }

//------------------------------------------------------------------------------------------------ override void OnTimeout() { Print("OnTimeout()"); }

//------------------------------------------------------------------------------------------------ override void OnSuccess(string data, int dataSize) { PrintFormat("OnSuccess() - data size = %1 bytes", dataSize); if (dataSize > 0) Print(data); // note that Print() will not output strings longer than 1024b to console, check the dataSize! } }

class HttpElement { protected ref RestCallbackExample m_CallbackExample;

//------------------------------------------------------------------------------------------------ void ExecuteRequest() { if (!m_CallbackExample) m_CallbackExample = new RestCallbackExample();

string contextURL = "https://httpbin.org/"; RestContext context = GetGame().GetRestApi().GetContext(contextURL);

// executed request is "get" in "https://httpbin.org/" context (i.e "https://httpbin.org/get") // using the HTTP's GET method context.GET(m_CallbackExample, "get");

// it is possible to assemble a more complex request using arguments, like this: // ctx.GET(m_CallbackExample, "get?x=10&y=5"); } } </enforce>

=== Call ===

<enforce> class HolderClass { protected ref HttpElement m_HttpElement;

void PerformGETRequest() { if (!m_HttpElement) m_HttpElement = new HttpElement();

m_HttpElement.ExecuteRequest(); } } </enforce>

{{GameCategory|armaR|Modding|Scripting|Tutorials}}
k4lkj3zqf465luje65rjrjic4m05wu7

# Arma Reforger:Scripting Conf File Usage

5050
35073
370976
341826
2025-02-26T12:32:01Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370976
wikitext
text/x-wiki
Sometimes, a {{hl|.conf}} file can be useful in order to store multiple settings/values that would otherwise be flooding a class' member variables.

Two main approaches exist to refer to a {{hl|.conf}} file: {| class="wikitable" ! {{Link|#ResourceName Approach}} ! {{Link|#Object Approach}} |- | * {{Icon|checked}} a default value is possible * {{Icon|unchecked}} Big setup * {{Icon|unchecked}} No data preview | * {{Icon|checked}} Quick setup * {{Icon|checked}} Data preview and creation on the fly * {{Icon|unchecked}} a default value is not possible |}

The following examples assume a {{hl|.conf}} file is to be used in a custom entity.

<enforce> [EntityEditorProps(category: "GameScripted/Misc")] class SCR_ExampleEntityClass : GenericEntityClass { }

class SCR_ExampleEntity : GenericEntity { // config will be used here } </enforce>

== ResourceName Approach ==

The simplest course of action is to target the wanted {{hl|.conf}} file with a {{hl|ResourceName}} path: <enforce> class SCR_ExampleEntity : GenericEntity { protected ResourceName m_sConfig = "{EAD206A79A774696}Configs/EntityCatalog/FactionLess/EntityCatalog_Characters.conf"; } </enforce>

A proper way to make things easy is to have this property as an attribute: <enforce> class SCR_ExampleEntity : GenericEntity { [Attribute(defvalue: "{EAD206A79A774696}Configs/EntityCatalog/FactionLess/EntityCatalog_Characters.conf", params: "conf")] protected ResourceName m_sConfig; } </enforce>

At this point, ''any'' config file can be used. This is not what is wanted here. Hopefully, the Attribute can be made to target the specific config type we want: <enforce> class SCR_ExampleEntity : GenericEntity { [Attribute(defvalue: "{EAD206A79A774696}Configs/EntityCatalog/FactionLess/EntityCatalog_Characters.conf", params: "conf class=SCR_EntityCatalogMultiList")] protected ResourceName m_sConfig; } </enforce>

With this done, the entity now either has a ''path'' to a config, or an empty path. Remains here to ''load'' this config, cast it to make sure of its content - requiring a dedicated method: <enforce> class SCR_ExampleEntity : GenericEntity { [Attribute(params: "conf")] protected ResourceName m_sConfig = "{EAD206A79A774696}Configs/EntityCatalog/FactionLess/EntityCatalog_Characters.conf";

SCR_EntityCatalogMultiList LoadConfig() { if (m_sConfig.IsEmpty()) return null;

Resource resource = Resource.Load(m_sConfig); if (!resource.IsValid()) return null;

return SCR_EntityCatalogMultiList.Cast(BaseContainerTools.CreateInstanceFromContainer(resource.GetResource().ToBaseContainer())); } } </enforce>

== Object Approach ==

This way is faster to setup, but disallows a default value: <enforce> class SCR_ExampleEntity : GenericEntity { [Attribute()] protected ref SCR_EntityCatalogMultiList m_Config; } </enforce>

This method makes the Config field void of any data, but allows to either click the "set class" button to '''create''' a config on the fly or to '''drag and drop''' a {{hl|.conf}} file to fill the field instantly.

{{GameCategory|armaR|Modding|Scripting|Tutorials}}
g9vptdqha1r7gfj9mfzjb1eh3qmayif

# Arma Reforger:Scripting Example

5050
32439
376752
370938
2025-11-16T13:12:44Z
Tanin69
11232
/* Debug(Remote) Console */ precision about allowed values
376752
wikitext
text/x-wiki
{{TOC|side}} This tutorial aims to provide scripting logic basics. The abstract project is to find certain values (smallest, biggest, average, etc) from a list of numbers.

For starters, we are aiming at "get the smallest value from the array" functionality.

== Create the Script ==

=== New File ===

* [[Arma Reforger:Resource Manager|Resource Manager]]: '''Resource Browser''' > "Create" button > Script * [[Arma Reforger: Script Editor| Script Editor]]: {{Controls|RMB}} (on a directory in the Projects window) > "Add New Script..." * [[Arma Reforger: Script Editor| Script Editor]]: {{Controls|Ctrl|N}} or Plugins > Script Wizard:

{{Feature|important| '''Always''' prefix the filename and the classname with a [[Scripting Tags|modder tag]] (e.g {{hl|ABC_}}, {{hl|AR15_}}, etc) in order to avoid class conflicts: * {{hl|'''TAG_'''MyFile.c}} * {{hl|class '''TAG_'''MyFile}} / {{hl|class '''TAG_'''MyFile : ParentFile}} Methods and values are not concerned by this. }}

{{Feature|important| Scripting modding can only happen in '''Modules''', defined in {{armaR}}'s {{hl|.gproj}} ({{hl|Enfusion Workbench -> Workbench -> Options -> Game Project -> Script Project Manager Settings > Modules}}): {{{!}} class{{=}}"wikitable valign-top-row-2" ! Module ! core ! gameLib ! game ! workbench ! workbenchGame {{!}}- ! Directories {{!}} * Core {{!}} * GameLib {{!}} * Game * GameCode {{!}} * Workbench {{!}} * WorkbenchGame {{!}}}

Scripts placed '''outside of those folders''' will be simply '''ignored!'''}}

== Get the Smallest Value ==

=== Method Setup ===

==== Creation ==== Let's begin by creating the object and its method that will host the code. <enforce> class TAG_TutorialExample { void Method() { } } </enforce> The method exists now. It is important to name objects, methods and variables properly, therefore it has to be more precise than "Method": <enforce> class TAG_TutorialExample { void GetMinValue() { } } </enforce>

==== Parameters ==== The method is empty, takes no parameters and returns nothing. Since we want to provide a list of numbers from which to extract a result, let's add a parameter: <enforce> class TAG_TutorialExample { void GetMinValue(array<int> numbers) { } } </enforce> Here, one could pass a {{hl|null}} array to the method, which could create a NULL pointer exception on code run; as an author it is our task to cover such case. There are two ways to do such check: <enforce> class TAG_TutorialExample { void GetMinValue(array<int> numbers) // the numbers array can be null { if (!numbers) // or if (numbers == null) return; // a null numbers is intercepted and stops the code } } </enforce> <enforce> class TAG_TutorialExample { void GetMinValue(notnull array<int> numbers) // the numbers array cannot be null { } } </enforce> The latter version would make the engine throw an exception before the method is actually called. This is the version with which we are going in this tutorial's scope.

==== Return Value ==== The method is supposed to return the array's smallest value: it should then return a number. <enforce> class TAG_TutorialExample { int GetMinValue(notnull array<int> numbers) { } } </enforce>

{{Feature|informative|Some methods use an {{hl|out}} parameter to provide the result to an already-assigned variable for memory management purpose. This is not going to be the case here for the sake of clarity.}}

=== Code Setup ===

==== Conception ==== The goal here, as decided earlier, is to get the smallest value from the provided array of numbers. To begin, let's start with writing human code before writing machine code, to lay the logic properly:

* have a "current best result" value * read each element of the list ** if an element is a better candidate (smaller) than the stored one, use this element instead * when the end of the list is reached, return the best value

This is fine. But what happens if the list has no values? In that case, we must decide for a default value. Depending on the method's role, default values can change:

* methods will return -1 to indicate an error or a "not found" * methods will return 0 to state "no value = default value"

We are going for the latter here as we are returning a value.

{{Feature|informative|Note that this method could be returning the index of the best candidate's element, and returning -1 (an invalid index) would be a perfectly acceptable answer.}}

The end logic:

* have a "current best result" value '''initialised to zero''' * '''if the list is empty, return the current best value''' * read each element of the list ** if an element is a better candidate (smaller) than the stored one, use this element instead * when the end of the list is reached, return the best value

'''But<!--t-->!'''

What if the array has only one element that is 10? The return value would be 0 here, which is an invalid result. Back to the drawing board:

* '''if the list is empty, return 0''' * have a "current best result" '''initialised to the array first element's value''' * read each element of the list ** if an element is a better candidate (smaller) than the stored one, use this element instead * when the end of the list is reached, return the best value

No more pitfalls in sight, code can be started!

=== Writing ===

Following the earlier code conception, here is how it would translate to code:

<enforce> class TAG_TutorialExample { int GetMinValue(notnull array<int> numbers) { if (numbers.IsEmpty()) return 0;

int result = numbers[0];

foreach (int number : numbers) { if (number < result) result = number; }

return result; } } </enforce>

=== Commenting ===

One can note that the above code does not contain any comments.

In the past, commenting has been taught to be extensive, to cover the maximum number of lines of code; on the other hand, some people consider commenting as the last resort.

The balance is somewhere in-between, somewhat closer to the latter:

* a comment should explain '''''why''''' the code is written this way * a comment should not tell '''''what''''' the code does; code should be self-explanatory * as a last resort in the event of a complex piece of code, a comment can be used to describe what the code actually does - or at least its intention

{| class="wikitable" style="width: 100%" ! Bad Example ! Good Example |- style="vertical-align: top" | <enforce> int i = 0; // initialises i to 0 i++; // increments i by 1 </enforce> | <enforce> // int i = 0; // i++; for (int i = 1; i < 10; i++) // starts from 1 to not have 0-based index miscalculation { Print(i); } </enforce> |}

=== Optimisation ===

{{Feature|quote|Premature optimization is the root of all evil.|[https://en.wikipedia.org/wiki/Donald_Knuth Donald Knuth]}}

The basic rules of coding are as follow:

* Make it work * Make it readable * Optimise then

'''Once the code works''', optimisation can be accessed.

What is wrong with this code; it takes the wanted arguments, it returns the expected result, it is fast?<br> ''Almost'' nothing. If we want to care about performance impact, go "straight to the point", '''avoid useless operations''' (thus saving cycles):

Remaining issue:

''result'' is set to the array's first value, but {{hl|foreach}} then goes and compares every array element to it, including itself

<enforce> class TAG_TutorialExample { int GetMinValue(notnull array<int> numbers) { if (numbers.IsEmpty()) return 0;

int result = numbers[0];

for (int i = 1; i < numbers.Count(); i++) // change has been made here { if (numbers[i] < result) // and here (number → numbers[i]) result = numbers[i]; // and here (number → numbers[i]) }

return result; } } </enforce>

So, are we done now?

'''No!'''

As improvement has been done, another loss has been introduced in the process: {{hl|numbers.Count()}}.<br> The {{hl|Count}} method is called on every {{hl|for}} loop; since the array is not changing its size between each loops, it is considered wasting resource.

<enforce> class TAG_TutorialExample { int GetMinValue(notnull array<int> numbers) { if (numbers.IsEmpty()) return 0;

int result = numbers[0];

for (int i = 1, count = numbers.Count(); i < count; i++) // count is defined once { if (numbers[i] < result) result = numbers[i]; }

return result; } } </enforce>

But: technically, {{hl|foreach}} is still faster.

<enforce> class TAG_TutorialExample { int GetMinValue(notnull array<int> numbers) { if (numbers.IsEmpty()) return 0;

int result = numbers[0];

foreach (int i, int number : numbers) // we use foreach's index { if (i > 0 && number < result) // here - one bool check is faster than two results[] .Get method call result = number; }

return result; } } </enforce>

The code flow is now optimal, and there is nothing more to be done.

Except perhaps an {{hl|int.MIN}} check, but… this would be overkill and not worth it!

An optimisation should be a balance between time spent and performance gained.

Something 50% optimal but working will always be better than something 98% optimal but unreleased!

{{Feature|informative|For further performance advices, see [[Arma Reforger:Scripting Performance|Scripting Performance]].}}

== Get the Average Value ==

=== Method Setup ===

In this section the {{hl|GetMinValue}} method code above will be reused.

<enforce> class TAG_TutorialExample { int GetAverageValue(notnull array<int> numbers) { } } </enforce>

But an average is most likely a '''floating point''' number, so {{hl|float}} will be used here.

<enforce> class TAG_TutorialExample { float GetAverageValue(notnull array<int> numbers) { } } </enforce>

=== Code Setup ===

==== Conception ====

* have a "sum" variable set to zero * read each element of the list * add each element to the sum variable * when the end of the list is reached, return the sum divided by the array size

'''But<!--t-->!'''

What if the array has no elements? "sum" would remain a valid value (zero), but then the division could be by zero, which is a forbidden operation in computer science.

{{Feature|important|Every time a division is used, the reflex must be to check if the divisor (the right-hand division element) value can be zero, as this is a crash reason.}}

* '''if the list is empty, return 0''' * have a "sum" variable set to zero * read each element of the list ** add each element to the sum variable * when the end of the list is reached, return the sum divided by the array size Code writing can be started.

=== Writing ===

Here is the code translation:

<enforce> class TAG_TutorialExample { float GetAverageValue(notnull array<int> numbers) { if (numbers.IsEmpty()) return 0;

int sum = 0;

foreach (int number : numbers) { sum += number; }

return sum / numbers.Count(); // numbers.Count() cannot be zero here as it is checked line 5 } } </enforce>

=== Testing ===

For demonstration purpose, both methods will be setup inside the {{hl|TutorialExample}} class:

<enforce> class TAG_TutorialExample { int GetMinValue(notnull array<int> numbers) { if (numbers.IsEmpty()) return 0;

int result = numbers[0];

foreach (int i, int number : numbers) { if (i > 0 && number < result) result = number; }

return result; }

float GetAverageValue(notnull array<int> numbers) { if (numbers.IsEmpty()) return 0;

int sum = 0;

foreach (int number : numbers) { sum += number; }

return sum / numbers.Count(); } } </enforce>

== Debug(Remote) Console ==

The following code can be used in the Debug(Remote) Console to try and see the result of previous methods - be sure to set the Console's running environment to "Game":

<enforce> array<int> values = { 18, 10, 5, 4, 5, 10, 33, 42, 666 }; // setup any wanted integer value here TutorialExample tutorialExample = new TutorialExample(); int minValue = tutorialExample.GetMinValue(values); float avgValue = tutorialExample.GetAverageValue(values); PrintFormat("Array %1: min value is %2, average is %3", values, minValue, avgValue); </enforce>

{{Feature|informative| Note that for the debug code to run, it is important to have the Console set to "Game" and either: * have the game running in World Editor and press "Run" * press "Run" then compile (if no World Editor is running) }}

The code logs to the Output window something like this: Array 0x000001C150656B48 {18,10,5,4,5,10,33,42,666}: min value is 4, average is 88.1111

{{GameCategory|armaR|Modding|Scripting|Tutorials}}
d5nyfk62zng5m316a6msnt1cwyjkkm9

# Arma Reforger:Scripting First Steps

5050
49360
376784
376779
2025-11-18T17:40:30Z
Lou Montana
10739
Some wiki formatting
376784
wikitext
text/x-wiki
Welcome to Enforce Script! This guide will get you writing and testing your first lines of code in 5 minutes.

{{Feature|informative|This is a hands-on quick start. Skip the theory, start coding immediately!}}

== Requirements ==

* '''Arma Reforger Tools''' ({{GameCategory|armaR|Modding|Official Tools|text= {{armaR}} Workbench}}) installed via Steam * That's it!

== Open Workbench and Remote Console ==

# Launch '''Enfusion Workbench''' from Steam (Arma Reforger Tools) # Click on the '''Script Editor''' icon or select it from the menu<br>[[File:WE_UI.png|thumb|left|500px|Launch Script Editor from Workbench]]{{Clear}} # If the '''Remote Console''' window is not visible, open it from the menu # Click on the '''Remote Console''' and '''Output''' tabs at the bottom to switch to the appropriate view<br><!-- -->[[File:SE_UI_Default.png|thumb|left|500px|Script Editor default UI - click the tabs at the bottom]]<!-- -->[[File:SE UI RC and output.png|thumb|left|500px|Script Editor with Remote Console and Output panels visible]]{{Clear}} # You are ready to start coding!

{{Feature|informative|For these basic exercises, you do not need to load a world or run the game. The Remote Console can execute simple code directly.}}

== First Line of Code ==

Type the following in the '''Remote Console''' and click the '''Run''' button at the top of the remote console panel:

The <enforce inline methods="Print">Print</enforce> method prints (as its name states) the provided arguments into the log console: <enforce> Print("Hello there!"); // displays "Hello there!" in the log console </enforce>

'''You did it!''' You just wrote your first Enforce Script code. The text appears in the console output.

<enforce inline methods="PrintFormat">PrintFormat</enforce> allows for printing a string with arguments: <enforce> PrintFormat("Hello %1, welcome to %2!", "there", "Arma Reforger"); // %1 is replaced by "there" (the first argument), %2 by "Arma Reforger PrintFormat("Hello %1, welcome to %2!", "you", "Enfusion"); // result here is "Hello you, welcome to Enfusion!" </enforce>

{{Feature|important| A percent sign is printed without issue using <enforce inline methods="Print">Print</enforce>, however it requires to be doubled with <enforce inline methods="PrintFormat">PrintFormat</enforce>, being a special character to this function: <enforce> Print("5%"); // prints "5%" Print("%%"); // prints "%%"

PrintFormat("%1", 5); // prints "5" PrintFormat("5%"); // prints "5" PrintFormat("5%%"); // prints "5%" PrintFormat("%1%%", 5); // prints "5%" </enforce> }}

== Basic Maths ==

Try these commands one by one in the Remote Console:

<enforce> Print(10 + 5); Print(20 * 3); Print(100 / 4); </enforce>

The console shows: <enforce inline>15</enforce>, <enforce inline>60</enforce>, <enforce inline>25</enforce>.

== Variables ==

Variables let you store and reuse values:

<enforce> int myAge = 25; Print("I am " + myAge + " years old"); </enforce>

Try changing the number and run it again!

'''Common variable types:''' * <enforce inline>int</enforce> - whole numbers (1, 42, -5) * <enforce inline>float</enforce> - decimal numbers (3.14, 10.5) * <enforce inline>string</enforce> - text ("Hello", "Arma") * <enforce inline>bool</enforce> - true or false

{{Feature|informative|For a complete list of all data types, see {{Link|Arma Reforger:Scripting: Values|Scripting Values}}.}}

<enforce> float distance = 150.5; string playerName = "Soldier";

PrintFormat("%1 is at %2m", playerName, distance); </enforce>

== Decisions ==

<enforce> int health = 75;

if (health > 50) Print("Healthy!"); else Print("Need medical attention"); </enforce>

Try changing <enforce inline>health</enforce> to different numbers!

== Arrays ==

Arrays can be seen as lists that store naught to multiple values '''of the same type''':

<enforce> array<string> soldiers = { "Alpha", "Bravo", "Charlie" };

Print(soldiers[0]); // Prints "Alpha" Print(soldiers[1]); // Prints "Bravo"

soldiers.Insert("Delta"); // soldiers is now { "Alpha", "Bravo", "Charlie", "Delta" } Print("Squad size: " + soldiers.Count()); // Squad size: 4 </enforce>

== Loops ==

=== For ===

A <enforce inline>for</enforce> loop repeats instructions a specific number of times:

<enforce> for (int i; i < 5; i++) { Print("Count: " + i); // prints ("Count: ") 0, 1, 2, 3, 4 then leaves (i < 5) } </enforce>

=== Foreach ===

A <enforce inline>foreach</enforce> loop goes through all array items:

<enforce> array<string> weapons = { "Rifle", "Pistol", "Grenade" };

foreach (string weapon : weapons) { Print("Weapon: " + weapon); // prints "Rifle", "Pistol", "Grenade" } </enforce>

The index can also be obtained this way: <enforce> foreach (int i, string weapon : weapons) </enforce>

== A First Mini-Program ==

Combine what you learned! Copy this entire block and run it:

<enforce> // Soldier health checker array<string> soldierNames = { "Alpha", "Bravo", "Charlie", "Delta" }; array<int> healthValues = { 100, 45, 80, 20 };

Print("=== Squad Status Report ===");

foreach (int i, string soldierName : soldierNames) { int health = healthValues[i];

if (health > 70) PrintFormat("%1: Healthy (%2%%)", soldierName, health); else if (health > 30) PrintFormat("%1: Injured (%2%%)", soldierName, health); else PrintFormat("%1: Critical! (%2%%)", soldierName, health); }

Print("=== End of Report ==="); </enforce>

{{Feature|informative|Lines starting with <enforce inline>//</enforce> are '''comments''' - they are ignored by the code but help explain what is happening.}}

== Quick Reference Card ==

{| class="wikitable" ! Category !! Code !! Description |- | '''Output''' || <enforce>Print("text");</enforce> || Shows text in console |- | rowspan="4" | '''Variables''' || <enforce>int number = 42;</enforce> || Stores a whole number |- | <enforce>float decimal = 3.14;</enforce> || Stores a decimal number |- | <enforce>string text = "Hi";</enforce> || Stores text |- | <enforce>bool flag = true;</enforce> || Stores true/false |- | rowspan="3" | '''Arrays''' || <enforce>array<int> numbers = { 1, 2, 3 };</enforce> || Creates a list |- | <enforce>myArray.Insert(value);</enforce> || Adds item to list |- | <enforce>myArray.Count();</enforce> || Gets list size |- | rowspan="2" | '''If/Else''' || <enforce> if (condition) { } </enforce> || Do something if true |- | <enforce> else { } </enforce> || Do something if false |- | rowspan="2" | '''Loops''' || <enforce> for (int i; i < 10; i++) { } </enforce> || Repeat 10 times |- | <enforce> foreach (int item : myArray) { } </enforce> || Execute for each item |- | rowspan="4" | '''Math''' || <enforce inline>+</enforce> || Add |- | <enforce inline>-</enforce> || Subtract |- | <enforce inline>*</enforce> || Multiply |- | <enforce inline>/</enforce> || Divide |- | rowspan="6" | '''Compare''' || <enforce inline>==</enforce> || Equal to |- | <enforce inline>!=</enforce> || Not equal to |- | <enforce inline>></enforce> || Greater than |- | <enforce inline><</enforce> || Less than |- | <enforce inline>>=</enforce> || Greater or equal |- | <enforce inline><=</enforce> || Less or equal |}

== Common Mistakes ==

{| class="wikitable" ! Incorrect !! Correct !! Explanation |- | <enforce inline>print("hello")</enforce> | <enforce inline>Print("hello")</enforce> | Capital P in Print |- | <enforce inline>int x = 5</enforce> | <enforce inline>int x = 5;</enforce> | Missing semicolon |- | <enforce inline>if (x = 5)</enforce> | <enforce inline>if (x == 5)</enforce> | Use == for comparison, = for assignment |- | <enforce inline>int firstElement = myArray[1];</enforce> | <enforce inline>int firstElement = myArray[0];</enforce> | Arrays start at 0, not 1 |- | <enforce inline noGuess>string name = John</enforce> | <enforce inline>string name = "John"</enforce> | Text needs quotes |}

{{Feature|informative|Follow professional coding standards: {{Link|Arma Reforger:Scripting: Conventions|Scripting Conventions}}.}}

== Exercises ==

The following challenges help in practicing and understanding scripting.

=== Temperature Converter ===

Create a program that converts 25°C to Fahrenheit. <spoiler text="Show solution"> <enforce> // Convert Celsius to Fahrenheit float celsius = 25; float fahrenheit = (celsius * 9 / 5) + 32; PrintFormat("%1°C = %2°F", celsius, fahrenheit); </enforce> </spoiler>

=== Countdown ===

Create a countdown from 10 to 0, then print "Launch!". <spoiler text="Show solution"> <enforce> // Count down from 10 to 0 for (int i = 10; i >= 0; i--) { Print(i); }

Print("Launch!"); </enforce> </spoiler>

=== Squad Filter ===

Print only the soldiers with health above 50 from two arrays (names and health values). <spoiler text="Show solution"> <enforce> // Only print soldiers with health above 50 array<string> names = { "Alpha", "Bravo", "Charlie" }; array<int> health = { 80, 30, 90 };

foreach (int i, string name : names) { if (health[i] > 50) Print(name + " is combat ready"); } </enforce> </spoiler>

== Troubleshooting ==

'''Console will not open?''' * Make sure the '''Script Editor''' is opened in Workbench * Look for the '''Remote Console''' panel - if hidden, open it from the menu * Ensure Workbench is properly installed via Steam (Arma Reforger Tools)

'''Code does not work?''' * Check for missing semicolons <enforce inline>;</enforce> * Make sure quotes match: <enforce inline>"text"</enforce> * Check spelling and capitalisation (casing matters: {{hl|print("ok");}} is different from {{hl|Print("ok");}}) * Look for error messages in red

'''Getting errors?''' * Read the error message - it often tells you what is wrong * Click the error message and check reported line number(s) * Make sure all open brackets <enforce inline>{ }</enforce> are closed

== See Also ==

'''Reference Documentation:''' * {{Link|Arma Reforger:Scripting: Values|Scripting Values}} - All data types in detail * {{Link|Arma Reforger:Scripting: Conventions|Scripting Conventions}} - {{Name|bi}} coding standards * {{Link|Arma Reforger:Object Oriented Programming Basics|OOP Basics}} - Object-oriented programming fundamentals

{{GameCategory|armaR|Modding|Scripting|Tutorials}}
62r78itj2ejpn6ocgshqasn0bx50rrn

# Arma Reforger:Scripting Modding

5050
32441
371032
369671
2025-02-26T12:32:11Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
371032
wikitext
text/x-wiki
{{TOC|side}} Before starting working on modified scripts, we need to prepare the basic structure for our new version of the scoring system. Therefore we will create:

* Basic folder structure (see [[Arma Reforger:Directory Structure|Directory Structure]]) * Empty script files ready for our new code

In this tutorial, the scoring system will be used as an example of script modding and following things will be changed:

Permanently changing scoring coefficients for death & suicide * Playing a sound upon character suicide * Those changes are fairly simple and should be a good showcase about how to proceed when modding files.

{{Feature|important| Scripting modding can only happen in '''Modules''', defined in {{armaR}}'s {{hl|.gproj}} ({{hl|{{armaR}} > Script Project Manager Settings > Modules}}): {{{!}} class{{=}}"wikitable valign-top-row-2" ! Module ! core ! gameLib ! game ! workbench ! workbenchGame {{!}}- ! Directories {{!}} * Core {{!}} * GameLib {{!}} * Game * GameCode {{!}} * Workbench {{!}} * WorkbenchGame {{!}}}

Scripts placed '''outside of those folders''' will be simply '''ignored!'''}}

== File structure ==

[[Image:armareforger-scripting-modding-find-symbol.png|left]] Before writing any code, let's start with investigating which files we need to modify and then, prepare structure for our modded files.

Since we want to modify the scoring system, we can begin by searching for terms related to it.

By typing {{hl|scoring}} into the '''Find Symbol''' search field, we should see '''SCR_ScoringSystemComponent.c''' on the first place.

Double clicking {{Controls|LMB2}} opens the file containing that class and reveals its location in the file structure.

Next to it is '''SCR_BaseScoringSystemComponent.c''' and those two files should be enough to achieve the goals stated above.

Note that these two files are located in the {{hl|Scripts/Game/GameMode/Scoring}} directory and contain most of the scoreboard-related functionality.

We will be interested in changing the behaviour of: <enforce> // SCR_BaseScoringSystemComponent.c void AddSuicide(int playerID) // method which increases suicides & deaths count in score system </enforce>

<enforce> // SCR_ScoringSystemComponent.c int CalculateScore(SCR_ScoreInfo info) // method used to calculate total score </enforce>

SampleMod_ModdedScript/Scripts/Game/GameMode/Scoring/Modded

Once the directory is prepared, create two new script files inside the '''Modded''' folder.

To do so, right-click on the Resource Browser field to open the context menu.

From there, select "Script" to create a new script file. From here, it is time to create actual code!

# Create a new Script File: In Resources Manager, click the {{hl|Create}} button then "Script" to create a script file # Name the new Script File: the files should have the same name as the modded ones; namely {{hl|SCR_BaseScoringSystemComponent.c}} and {{hl|SCR_ScoringSystemComponent.c}} {{Feature|informative|It is also recommended to replace '''SCR_ prefix with your own [[Scripting Tags|tag]]''' - this will ensure good inter-compatibility with other scripts by preventing naming conflicts.

For instance, instead of naming file ''SCR_ScoringSystemComponent.c'' you would call it ''YOURTAG_ScoringSystemComponent.c''}}{{Clear}}

It is usually a good habit to keep the original script and file structures; for the purpose of this tutorial, it assumed that following addon structure is used: [[Image:armareforger-scripting-modding-file-structure.png]]

== Create a Modified Script ==

=== Syntax ===

It is possible to modify already existing scripts by using some of special keyword:

* '''modded''' - keyword used to modify existing scripting class * '''override''' - keyword to override methods in modded classes * '''super''' - allows to invoke content of overridden method

We will use all these three words to create modded variants of '''SCR_ScoringSystemComponent'''.

{{Feature|informative|For more elaborate information please refer to the [[Arma_Reforger:Object_Oriented_Programming_Basics]], where more details can be found about how these keywords are working as well as simple examples.}}

=== Writing ===

{{Feature|informative| Please note that:

* this is a proof of concept used for this tutorial and there are other ways to achieve the same effect * this particularly method is only going to work when the scoring system is present in the mission. }}

First, we will begin with the '''modded''' keyword:

<enforce> modded class SCR_ScoringSystemComponent // declares which class is being modded { } </enforce>

Next, we can proceed with replacing the CalculateScore method by using the override keyword:

<enforce> modded class SCR_ScoringSystemComponent { override int CalculateScore(SCR_ScoreInfo info) // declares a method replacing an existing one { } } </enforce>

As there is no intention to modify regular kill, team kills or objective score, lines containing: * <enforce>info.m_iKills * m_iKillScoreMultiplier</enforce> * <enforce>info.m_iTeamKills * m_iTeamKillScoreMultiplier</enforce> * <enforce>info.m_iObjectives * m_iObjectiveScoreMultiplier</enforce> are left untouched.

<enforce> int score = info.m_iKills * m_iKillScoreMultiplier + info.m_iTeamKills * m_iTeamKillScoreMultiplier + info.m_iDeaths * m_iDeathScoreMultiplier + info.m_iSuicides * m_iSuicideScoreMultiplier + info.m_iObjectives * m_iObjectiveScoreMultiplier; </enforce>

We are replacing their modifiers which would normally be provided via parameters

* '''m_iDeathScoreMultiplier''' is replaced by 10 * '''m_iSuicideScoreMultiplier''' is also replaced by 10

<enforce> int score = info.m_iKills * m_iKillScoreMultiplier + info.m_iTeamKills * m_iTeamKillScoreMultiplier + info.m_iDeaths * 10 + info.m_iSuicides * 10 + info.m_iObjectives * m_iObjectiveScoreMultiplier; </enforce>

This translates into what we want: for every death or suicide, ten points are obtained.

Original code - calculated score is only returned if its above 0, otherwise method returns 0.

<enforce> if (score < 0) return 0; return score; </enforce>

=== Super ===

[[Image:armareforger-scripting-modding-get-resource-name.png|right|thumb|300px|'''Resource Name''' can be easily obtained via '''Copy Resource Name(s)''' function available in file context menu. Resource name obtained this way contains GUID and relative path to the file.]]

Same as with '''SCR_ScoringSystemComponent''', we will use the '''modded''' keyword on '''SCR_BaseScoringSystemComponent''' to modify the content of that class.

The '''AddSuicide''' method is called every time the player commits suicide and adds score according to previously defined modifiers.

Since we don't want to change that part and instead want to add a new behaviour to it, we will use the '''super''' keyword to call the overridden method's code.

Once this is done, we can use the '''PlaySound''' method from the '''AudioSystem''' class - this takes one argument, '''ResourceName''' of a sound file - and plays a 2D, non spatial, sound.

<enforce> modded class SCR_BaseScoringSystemComponent { override void AddSuicide(int playerId, int count = 1) { super.AddSuicide(playerId, count); // calls the original method AudioSystem.PlaySound("{E89D9A1F4BA63CDC}Sounds/Props/Furniture/Piano/Samples/Props_Piano_Jingle_1.wav"); // plays a sound - hardcoded here for example purpose } } </enforce> A more mod-friendly way would be the following:

<enforce> modded class SCR_BaseScoringSystemComponent { [Attribute(defvalue: "{E89D9A1F4BA63CDC}Sounds/Props/Furniture/Piano/Samples/Props_Piano_Jingle_1.wav", params: "wav")] protected ResourceName m_sSuicideSound; // configurable from Workbench!

override void AddSuicide(int playerId, int count = 1) { super.AddSuicide(playerId, count); // calls the original method AudioSystem.PlaySound(m_sSuicideSound); // plays the sound } } </enforce>

The code is now ready to compile ({{Controls|Shift|F7}}) and the result can be tested in-game.

{{Clear}}

== Mod Test ==

=== Terrain Preparation ===

{{Feature|informative|Below prefabs are using '''Enfusion link''' which directly loads Workbench and points you to a proper resource. This functionality has to be '''manually enabled''' in '''Resource Manager''' options though!

For more details see [[Arma_Reforger:Resource_Manager:_Options#Register_.22enfusion:.2F.2F.22_protocol|'''Resource Manager: Options page''']].}}

[[Image:armareforger-scripting-modding-hierarchy-prefabs.png|left|600px|thumb|Prefabs in World Editor [[Arma_Reforger:World_Editor#Hierarchy|Hierarchy tab]]]] At minimum, a new test scenario built in '''World Editor''' requires the following prefabs: * [enfusion://ResourceManager/~ArmaReforger:Prefabs/MP/Modes/Deathmatch/GameMode_Deathmatch_Automatic.et GameMode_Deathmatch_Automatic.et] - this prefab contains '''Deathmatch''' game mode configuration * [enfusion://ResourceManager/~ArmaReforger:Prefabs/MP/Managers/Factions/FactionManager_FFA.et FactionManager_FFA.et] - prefab defining which factions are participating in the game. '''FFA''' means represents '''F'''ree '''F'''or '''A'''ll, meaning there is only one faction * [enfusion://ResourceManager/~ArmaReforger:Prefabs/MP/Spawning/SpawnPoint_FFA.et SpawnPoint_FFA.et] - spawn point with '''FFA''' specific configuration * [enfusion://ResourceManager/~ArmaReforger:Prefabs/MP/Managers/Loadouts/LoadoutManager_FFA.et LoadoutManager_FFA.et] - respawn loadout manager - the '''FFA''' variants contains all available loadouts for both USSR & US characters {{Clear}} All those prefabs can be placed in '''World Editor'''<nowiki/>'s viewport by drag and dropping them from the '''Resource Browser'''.

[[Image:armareforger-scripting-modding-adding-prefabs.gif]]

=== Debug Process ===

While testing scripts, built-in debugging options such as '''Breakpoints''', '''Console''' and '''Watch''' features - see [[Arma Reforger:Script Editor#Debugging|Script Editor - Debugging]] for more information.

[[Image:armareforger-scripting-modding-adding-breakpoints.gif]]

{{GameCategory|armaR|Modding|Scripting|Tutorials}}
hkh2ro6oybf26vjxxb0s32e2tajaojm

# Arma Reforger:Scripting Temporary Feature

5050
33253
371019
370450
2025-02-26T12:32:09Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
371019
wikitext
text/x-wiki
Developing or updating a feature may happen over the course of multiple days and sometimes having the ability to switch it on/off for feature or performance comparison is a good thing. Multiple options are available.

== Bool Switch ==

<enforce> class TAG_TestEntity : GenericEntity { [Attribute(defvalue: "0")] protected bool m_bActivateFeature; // can be changed during runtime with SetActivateFeature

void SetActivateFeature(bool activate) { m_bActivateFeature = activate; }

void PublicMethod() { if (m_bActivateFeature) { // feature actions } else { // old/no feature actions } } } </enforce>

== Preprocessor If ==

{{Feature|important|[[Arma Reforger:Script Editor|Script Editor]] ''usually'' covers such cases well but proper error finding in {{hl|#ifdef}} blocks is not guaranteed.}}

Sometimes a bool switch is not a possible solution (due to required data initialisation or other systems, etc). A preprocessor definition can be used: <enforce> class TAG_TestEntity : GenericEntity { protected ref array<int> m_aObjectData; #ifdef TAG_ACTIVATE_FEATURE protected ref array<int> m_aNewFeatureData; // this will not exist at all in the object if the flag is not defined, therefore no reference/memory will be attributed #endif

void PublicMethod() { #ifdef TAG_ACTIVATE_FEATURE // feature actions #else // old/no feature actions - m_aNewFeatureData can NOT be referenced as it does not exist here #endif }

void TAG_TestEntity() { m_aObjectData = {}; #ifdef TAG_ACTIVATE_FEATURE // all these operations will not happen at all - actually, all these instructions will not even exist if the flag is not defined m_aNewFeatureData = {}; for (int i = 0; i < 1001; i++) { m_aNewFeatureData.Insert(i * 2); } #endif } } </enforce>

This is very often used with <enforce inline>#ifdef WORKBENCH</enforce> across {{armaR}} code, allowing code to only be compiled for Workbench usage (saving memory space in game).

{{Feature|informative|Useful frequently used flags: * {{hl|WORKBENCH}} - if the {{GameCategory|armaR|Modding|Official Tools|text= Workbench}} executable is running * {{hl|PLATFORM_CONSOLE}} - if the platform is a game console (Xbox, PlayStation, etc) }}

=== Definition ===

A preprocessor value can be defined in two ways: * preprocessor definition, using <enforce inline>#define TAG_ACTIVATE_FEATURE</enforce> at the top of the file - required in every file that uses it. Can be commented with {{hl|//}} * the [[Arma Reforger:Startup Parameters#scrDefine|scrDefine]] startup parameter {{hl|ArmaReforgerSteam.exe -scrDefine TAG_ACTIVATE_FEATURE}}

{{GameCategory|armaR|Modding|Scripting|Tutorials}}
n0jxgwuhwb389z1otgg8mlsa0mcsz4o

# Arma Reforger:ScriptInvoker Usage

5050
35005
370981
351644
2025-02-26T12:32:01Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370981
wikitext
text/x-wiki
{{Feature|informative|See {{Link|Arma Reforger:Event Handlers}} for {{Link/Enfusion|armaR|ScriptInvoker}} guidelines.}}

A {{Link/Enfusion|armaR|ScriptInvoker}} is an object that allows other objects to subscribe to the event it represents by registering a method. Such event can provide arguments and it is important for the subscribing methods to fit the proper method signature.

The interest of using Events is that the subscribed method is be executed only ''if'' and ''when'' a specific event occurs (e.g a fired weapon, someone leaving a vehicle, etc) - no periodical check is done, saving CPU cycles and executing exactly on event.

== Usage ==

{{Feature|warning|Using the {{Link/Enfusion|armaR|ScriptInvoker}} class directly is considered bad practice and should be avoided!}}

<spoiler text="Show example"> <enforce methods="OnDogBark"> class TAG_Dog { protected ref ScriptInvokerVoid m_OnBark; // initialised on request - this allows saving RAM as ScriptInvokers are not small objects // IN GENERAL, do NOT expose the ScriptInvoker variable directly (as anyone could delete it) // {{armaR}} code keeps Component events public for performance reason

//! This method provides the ScriptInvoker for outsiders to subscribe to it ScriptInvokerVoid GetOnBark() { if (!m_OnBark) m_OnBark = new ScriptInvokerVoid(); // the invoker is only created on external request

return m_OnBark; }

void Bark() { if (m_OnBark) // the invoker can be null if nobody subscribed to it - no need to create it m_OnBark.Invoke();

Print("Dog barked", LogLevel.DEBUG); } }

class TAG_Neighbour { protected TAG_Dog m_Dog; // no strong ref protected int m_iBarkCount;

protected void OnDogBark() { if (m_iBarkCount < 1) Print("The dog barked!", LogLevel.NORMAL); else if (m_iBarkCount < 10) Print("Oh, it barked again!", LogLevel.NORMAL); else Print("MAKE IT STOP", LogLevel.WARNING);

m_iBarkCount++; }

//! Constructor void TAG_Neighbour(notnull TAG_Dog dog) { m_Dog = dog; m_Dog.GetOnBark().Insert(OnDogBark); // GetOnBark() creates the invoker // Insert() adds OnDogBark to the list of methods to be called }

//! Destructor void ~TAG_Neighbour() { // do not forget to unsubscribe for good practice, clean code aaand to avoid potential memory leaks if (m_Dog) m_Dog.GetOnBark().Remove(OnDogBark); // removes OnDogBark from the list of methods to be called } } </enforce> </spoiler>

== Signature Declaration ==

The <enforce inline>ScriptInvokerVoid</enforce> class used above is the "default" one used for methods without arguments. In order to provide arguments to the subscribed methods, a generic {{Link/Enfusion|armaR|ScriptInvokerBase}} type must be used, e.g <enforce inline>ScriptInvokerBase<func></enforce>.

A method signature can be declared using {{hl|typedef}}: <enforce> void ScriptInvokerIntMethod(int i); typedef func ScriptInvokerIntMethod; typedef ScriptInvokerBase<ScriptInvokerIntMethod> ScriptInvokerInt; </enforce>

And used like this: <enforce> protected ref ScriptInvokerInt m_OnEventWithIntParameter = new ScriptInvokerInt(); </enforce>

<spoiler text="Show full example"> <enforce methods="WarnOfScoreChange"> class TAG_EventHolder { protected int m_iScore; protected ref ScriptInvokerInt m_OnScoreChanged; // still created on request

ScriptInvokerInt GetOnScoreChanged() { if (!m_OnScoreChanged) m_OnScoreChanged = new ScriptInvokerInt();

return m_OnScoreChanged; }

void AddScore(int points) { m_iScore += points;

if (m_OnScoreChanged) m_OnScoreChanged.Invoke(m_iScore); } }

class TAG_Subscriber { protected TAG_EventHolder m_EventHolder;

protected void WarnOfScoreChange(int newScore) // note the similarity with ScriptInvokerIntMethod's signature { Print("The score is now " + newScore + "!", LogLevel.NORMAL); }

void Subscribe(notnull TAG_EventHolder eventHolder) { if (m_EventHolder) UnSubscribe();

eventHolder.Insert(WarnOfScoreChange); // if the method signature were not matching, the compiler would warn here m_EventHolder = eventHolder; }

void UnSubscribe() { if (!m_EventHolder) return;

m_EventHolder.Remove(WarnOfScoreChange); m_EventHolder = null; }

void ~TAG_Subscriber() { UnSubscribe(); } } </enforce> </spoiler>

That's it! Remember that ScriptInvokers/Event Handlers are very powerful, but dangerous tools. Be sure not to fall into any trap or loop!

{{GameCategory|armaR|Modding|Scripting|Tutorials}}
j2r3uba3qq9akr3qn21rf38gu58xnjw

# Arma Reforger:Serialisation

5050
33056
370999
369647
2025-02-26T12:32:05Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370999
wikitext
text/x-wiki
{{TOC|side}} This page explains serialisation using {{Link/Enfusion|armaR|SCR_JsonSaveContext}}/{{Link/Enfusion|armaR|SCR_JsonLoadContext}} and {{Link/Enfusion|armaR|SCR_BinSaveContext}}/{{Link/Enfusion|armaR|SCR_BinLoadContext}}.

== JSON ==

{{Feature|informative| * Passing an empty string as the name parameter into <enforce inline>BaseSerializationSaveContext.WriteValue()</enforce> or <enforce inline>BaseSerializationLoadContext.ReadValue()</enforce> allows for a complex top-level struct to be written/read. * See also {{Link|Arma Reforger:JsonApiStruct Usage|JsonApiStruct Usage}}. }}

=== Serialisation ===

<enforce> SCR_JsonSaveContext saveContext = new SCR_JsonSaveContext();

string stringValue = "data"; int integerValue = 123;

saveContext.WriteValue("key1", stringValue); saveContext.WriteValue("key2", integerValue);

// process saved data (export, send, save...), in this case data are exported as json string string dataString = saveContext.ExportToString(); </enforce>

=== Deserialisation ===

<enforce> SCR_JsonLoadContext loadContext = new SCR_JsonLoadContext(); loadContext.ImportFromString(dataString);

string stringValue; int integerValue;

// order does not matter for JSON as it uses key names loadContext.ReadValue("key2", integerValue); loadContext.ReadValue("key1", stringValue); </enforce>

== Binary ==

=== Serialisation ===

<enforce> SCR_BinSaveContext saveContext = new SCR_BinSaveContext();

string stringValue = "data"; int integerValue = 123;

saveContext.WriteValue("key1", stringValue); saveContext.WriteValue("key2", integerValue);

// process saved data (export, send, save...), in this case data are saved to "file.bin" saveContext.SaveToFile("file.bin"); </enforce>

=== Deserialisation ===

<enforce> SCR_BinLoadContext loadContext = new SCR_BinLoadContext(); loadContext.LoadFromFile("file.bin");

string stringValue; int integerValue;

// order matters for Binary serialisation, as Binary ignores names loadContext.ReadValue("key1", stringValue); loadContext.ReadValue("key2", integerValue); </enforce>

== Object Serialisation ==

=== Simple ===

The following class set to serialise will serialise all its properties. {{Feature|warning|Data structures that shall be serialised are not allowed to have parameters in their constructor, otherwise they can not be read back.}}

<enforce> class MyClass : Managed { protected int m_iVariable = 42; protected string m_sVariable; protected float m_fVariable = 33.3; } </enforce>

==== NonSerialized ==== Adding the {{hl|NonSerialized()}} decorator to a field will make the serialisation ignore it. <enforce> class MyClass : Managed { protected int m_iVariable = 42; protected string m_sVariable = "Hello there";

[NonSerialized()] protected float m_fVariable = 33.3; } </enforce>

=== Advanced ===

The following methods allow to define a custom serialisation per class. This is useful to avoid saving lengthy yet useless information for loading as well as load values in a certain order.

{{Feature|informative|The {{hl|{{Link|#NonSerialized}}}} decorator is only useful with the simple object serialisation - {{Link|#SerializationSave}}/{{Link|#SerializationLoad}} will ignore it.}}

==== SerializationSave ==== If an object has the {{hl|SerializationSave}} method defined, the SaveContext will use it and not process object's properties automatically at all. <enforce> class MyClass : Managed { protected int m_iVariable = 42; protected string m_sVariable = "Hello there"; protected float m_fVariable = 33.3;

bool SerializationSave(BaseSerializationSaveContext context) { if (!context.IsValid()) return false;

context.WriteValue("theString", m_sVariable); context.WriteValue("integer", m_iVariable); context.WriteValue("floatingpoint", m_fVariable);

return true; } } </enforce>

==== SerializationLoad ==== If an object has the {{hl|SerializationLoad}} method defined, the SaveContext will use it and not process object's properties automatically at all.

<enforce> class MyClass : Managed { protected int m_iVariable = 42; protected string m_sVariable = "Hello there"; protected float m_fVariable = 33.3;

bool SerializationLoad(BaseSerializationLoadContext context) { if (!context.IsValid()) return false;

context.ReadValue("theString", m_sVariable); context.ReadValue("integer", m_iVariable); context.ReadValue("floatingpoint", m_fVariable);

return true; } } </enforce>

{{GameCategory|armaR|Modding|Scripting|Tutorials}}
nygpisci627f4sksywcpop8q1k85udq

# Arma Reforger:Resource Manager Plugin

5050
43590
370956
369673
2025-02-26T12:31:57Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370956
wikitext
text/x-wiki
{{TOC|side}} This tutorial teaches how to create a {{Link|Arma Reforger:Resource Manager}}-specific plugin.

{{Feature|important|Please read {{Link|Arma Reforger:Workbench Plugin}} before following this tutorial.}}

== Setup ==

* Open [[Arma_Reforger:Script_Editor|Script Editor]] * In an addon, create a new script in {{hl|WorkbenchGame/ResourceManager}} - name it {{hl|[[Scripting Tags|TAG_]]TutorialPlugin.c}} (must end with {{hl|Plugin}} by convention) * Double-click the file to open it * Press {{Controls|Ctrl|T}} to use the {{Link|Arma Reforger:Script Editor: Fill From Template Plugin|Script Template plugin}} ** In its window, select "Class Type: WorkbenchPlugin", '''set the parent class to {{Link/Enfusion|armaR|ResourceManagerPlugin}}''' and leave the other fields blank/default ** A Workbench plugin skeleton is inserted.<!-- * In the {{hl|WorkbenchPluginAttribute}}, replace <enforce inline>wbModules: { "ResourceManager" }</enforce> by <enforce inline>wbModules: { "ScriptEditor" }</enforce>--> * In the <enforce inline>Run()</enforce> method, write <enforce inline>Print("It works!");</enforce> and save the file * Reload Workbench scripts via '''Reload WB Scripts''' option located in ''Plugins→Settings'' menu (default shortcut: {{Controls|Ctrl|Shift|R}}) * The {{hl|[[Scripting Tags|TAG_]]TutorialPlugin}} plugin should appear in the Resource Manager's Plugins list, available in the top bar - click on the plugin entry * "It works!" gets printed in the output console.

== Contextual Menu Option ==

The Resource '''Browser'''<nowiki/>'s Contextual Menu can provide a Plugin option allowing to run code on the selected resource(s) of the defined type(s).

{{Feature|informative|The Plugin Contextual Menu is only available in Resource Manager, not any other Workbench module.}}

In the {{Link/Enfusion|armaR|WorkbenchPluginAttribute}}, the {{hl|resourceTypes}} parameter must be filled, e.g <enforce inline>resourceTypes: { "et", "c" }</enforce>.

The <enforce inline methods="OnResourceContextMenu">OnResourceContextMenu</enforce> method must be overridden to work with said resources.

<enforce> [WorkbenchPluginAttribute(name: "Tutorial Plugin", wbModules: { "ResourceManager" }, resourceTypes: { "et", "c" })] class TAG_TutorialPlugin : ResourceManagerPlugin { //------------------------------------------------------------------------------------------------ override void OnResourceContextMenu(notnull array<ResourceName> resources) { Print("Resource context menu action has been called! Here are the selected resources:"); foreach (ResourceName resource : resources) { if (resource.EndsWith("c")) Print("- Script File: " + resource); else Print("- Prefab File: " + resource); } } } </enforce>

== ResourceManager Module API ==

{{Feature|informative|See the {{Link/Enfusion|armaR|ResourceManager}} class.}}

The Resource Manager API allows to register resources, rebuild them, get the selected ones or get their meta file content. In the below code: * the <enforce inline methods="GetResourceBrowserSelection">GetResourceBrowserSelection</enforce> method is used to temporarily store Resource Browser-selected resources in <enforce inline>m_aResourceNames</enforce> and their file path in <enforce inline>m_aFilePaths</enforce> * the <enforce inline methods="GetMetaFile">GetMetaFile</enforce> method is used to get the current resource's {{hl|.meta}} file as a {{Link/Enfusion|armaR|MetaFile}} instance.

<enforce methods="WorkbenchSearchResourcesCallbackMethod"> [WorkbenchPluginAttribute(name: "Tutorial Plugin", wbModules: { "ResourceManager" }, awesomeFontCode: 0xF188)] class TAG_TutorialPlugin : ResourceManagerPlugin { protected ref array<ResourceName> m_aResourceNames; protected ref array<string> m_aFilePaths;

//------------------------------------------------------------------------------------------------ override void Run() { ResourceManager resourceManager = Workbench.GetModule(ResourceManager);

m_aResourceNames = {}; m_aFilePaths = {}; resourceManager.GetResourceBrowserSelection(WorkbenchSearchResourcesCallbackMethod, false); // non-recursive search

if (m_aFilePaths.IsEmpty()) { Print("No Resources selected in Resource Browser"); return; }

MetaFile metaFile; foreach (int i, ResourceName filePath : m_aFilePaths) { metaFile = resourceManager.GetMetaFile(filePath); if (!metaFile) // e.g directory continue;

PrintFormat( "#%1: %3 (dir %2)", i, metaFile.GetSourceFilePath(), // returns the directory tree, e.g $MyMod:Path/To/ metaFile.GetResourceID()); // returns the file's ResourceName, equal to 'resName' below } }

//------------------------------------------------------------------------------------------------ // \param[in] resName // \param[in] filePath is in format $MyMod:Path/To/File.ext protected void WorkbenchSearchResourcesCallbackMethod(ResourceName resName, string filePath = "") { m_aResourceNames.Insert(resName); m_aFilePaths.Insert(filePath); } } </enforce>

{{GameCategory|armaR|Modding|Scripting|Workbench|Tutorials}}
gq5pcyuc2k6rf5xbb36bvxqnpbsazo2

# Arma Reforger:Script Editor Plugin

5050
43586
370977
369682
2025-02-26T12:32:00Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370977
wikitext
text/x-wiki
{{TOC|side}} This tutorial teaches how to create a {{Link|Arma Reforger:Script Editor}}-specific plugin.

{{Feature|important|Please read {{Link|Arma Reforger:Workbench Plugin}} before following this tutorial.}}

== Setup ==

* Open Script Editor * In an addon, create a new script in {{hl|WorkbenchGame/ScriptEditor}} - name it {{hl|{{Link|Scripting Tags|TAG_}}TutorialPlugin.c}} (must end with {{hl|Plugin}} by convention) * Double-click the file to open it * Press {{Controls|Ctrl|T}} to use the {{Link|Arma Reforger:Script Editor: Fill From Template Plugin|Script Template plugin}} ** In its window, select "Class Type: WorkbenchPlugin", leave the other fields blank/default ** A Workbench plugin skeleton is inserted. * In the {{hl|WorkbenchPluginAttribute}}, replace <enforce inline>wbModules: { "ResourceManager" }</enforce> by <enforce inline>wbModules: { "ScriptEditor" }</enforce> * In the <enforce inline>Run()</enforce> method, write <enforce inline>Print("It works!");</enforce> and save the file * Reload Workbench scripts via '''Reload WB Scripts''' option located in ''Plugins→Settings'' menu (default shortcut: {{Controls|Ctrl|Shift|R}}) * The {{hl|TAG_TutorialPlugin}} plugin should appear in the Script Editor's Plugins list, available in the top bar - click on the plugin entry * "It works!" gets printed in the output console.

== ScriptEditor Module API ==

{{Feature|informative|See the {{Link/Enfusion|armaR|ScriptEditor}} class.}}

In the below code, the {{hl|GetCurrentLine}} method is used to get the cursor location's line number (0-based index, first line = 0, second line = 1, etc). The {{hl|GetLineText}}/{{hl|SetLineText}} methods are used to obtain and change the line's value by adding an inline comment indicating the current line number ("hardcoded" into the comment).

<enforce> [WorkbenchPluginAttribute(name: "Tutorial Plugin", description: "This tutorial plugin does something.", shortcut: "Ctrl+Shift+H", wbModules: { "ScriptEditor" }, awesomeFontCode: 0xF188)] class TAG_TutorialPlugin : WorkbenchPlugin { //------------------------------------------------------------------------------------------------ override void Run() { ScriptEditor scriptEditor = Workbench.GetModule(ScriptEditor); int lineNumber = scriptEditor.GetCurrentLine(); string lineContent; scriptEditor.GetLineText(lineContent); lineContent += " // current line is " + (lineNumber + 1); scriptEditor.SetLineText(lineContent); } } </enforce>

{{Feature|important|Each text operation goes into one {{Controls|Ctrl|Z}} '''each''', making reverting a multi-line text operation successive Ctrl+Zs.}}

== Configuration ==

Displayed parameters are declared values decorated with an {{hl|Attribute}}; a full setup is done as follow:

<enforce> [WorkbenchPluginAttribute(name: "Tutorial Plugin", description: "This tutorial plugin does something.", shortcut: "Ctrl+Shift+H", wbModules: { "ScriptEditor" }, awesomeFontCode: 0xF188)] class TAG_TutorialPlugin : WorkbenchPlugin { [Attribute(desc: "Only display the line number without any other text")] protected bool m_bOnlyLineNumber;

//------------------------------------------------------------------------------------------------ override void Run() { ScriptEditor scriptEditor = Workbench.GetModule(ScriptEditor); int lineNumber = scriptEditor.GetCurrentLine(); string lineContent; scriptEditor.GetLineText(lineContent);

if (lineContent.IsEmpty()) { Workbench.Dialog("Empty line", "You cannot add a comment to a completely empty line."); // absolutely arbitrary tutorial decision :) return; }

if (m_bOnlyLineNumber) lineContent += " // " + (lineNumber + 1).ToString(); else lineContent += " // current line is " + (lineNumber + 1).ToString();

scriptEditor.SetLineText(lineContent); }

//------------------------------------------------------------------------------------------------ override void Configure() { Workbench.ScriptDialog("Tutorial Plugin Configuration", "Usage:\nTick the checkbox or not, depending on if the line number should be written or not", this); } } </enforce>

{{GameCategory|armaR|Modding|Scripting|Workbench|Tutorials}}
iaxvox6lcxime0e9bzg9aiaa5smolkl

# Arma Reforger:String Editor Plugin

5050
43592
371029
369674
2025-02-26T12:32:11Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
371029
wikitext
text/x-wiki
{{TOC|side}} This tutorial teaches how to create a {{Link|Arma Reforger:String Editor}}-specific plugin.

{{Feature|important|Please read {{Link|Arma Reforger:Workbench Plugin}} before following this tutorial.}}

== Setup ==

* Open [[Arma_Reforger:Script_Editor|Script Editor]] * In an addon, create a new script in {{hl|WorkbenchGame/LocalizationEditor}} - name it {{hl|[[Scripting Tags|TAG_]]TutorialPlugin.c}} (must end with {{hl|Plugin}} by convention) * Double-click the file to open it * Press {{Controls|Ctrl|T}} to use the {{Link|Arma Reforger:Script Editor: Fill From Template Plugin|Script Template plugin}} ** In its window, select "Class Type: WorkbenchPlugin", '''set the parent class to {{Link/Enfusion|armaR|LocalizationEditorPlugin}}''' and leave the other fields blank/default ** A Workbench plugin skeleton is inserted. * In the {{hl|WorkbenchPluginAttribute}}, replace <enforce inline>wbModules: { "ResourceManager" }</enforce> by <enforce inline>wbModules: { "LocalizationEditor" }</enforce> * Make the plugin inherit from <enforce inline>LocalizationEditorPlugin</enforce> instead of <enforce inline>WorkbenchPlugin</enforce> * In the <enforce inline>Run()</enforce> method, write <enforce inline>Workbench.Dialog("Does it?", "It works!");</enforce> (the String Editor not having a log console) and save the file * Reload Workbench scripts via '''Reload WB Scripts''' option located in '''Plugins → Settings''' (default shortcut: {{Controls|Ctrl|Shift|R}}) * The {{hl|[[Scripting Tags|TAG_]]TutorialPlugin}} plugin should appear in the String Editor's Plugins list, available in the top bar - click on the plugin entry * The "It works!" modal appears on screen.

== LocalizationEditorPlugin API ==

{{Feature|informative|See the {{Link/Enfusion|armaR|LocalizationEditorPlugin}} class.}}

== LocalizationEditor Module API ==

{{Feature|informative|See the {{Link/Enfusion|armaR|LocalizationEditor}} class.}}

The String Editor API allows In the below code: * the <enforce inline methods="GetTable">GetTable</enforce> method is used to grab the table as a {{Link/Enfusion|armaR|BaseContainerList}} * the <enforce inline methods="OnSelectionChanged">OnSelectionChanged</enforce> method is used to Print the currently selected row IDs.

<enforce methods="WorkbenchSearchResourcesCallbackMethod"> [WorkbenchPluginAttribute(name: "Tutorial Plugin", shortcut: "Ctrl+Shift+H", wbModules: { "LocalizationEditor" }, awesomeFontCode: 0xF188)] class TAG_TutorialPlugin : LocalizationEditorPlugin { [Attribute(defvalue: "", desc: "If no username is provided, the Windows username will be used")] protected string m_sAuthorName;

protected ref array<ResourceName> m_aResourceNames; protected ref array<string> m_aFilePaths;

//------------------------------------------------------------------------------------------------ override void Run() { LocalizationEditor stringEditor = Workbench.GetModule(LocalizationEditor); array<int> rows = {}; stringEditor.GetSelectedRows(rows); if (rows.IsEmpty()) { Workbench.Dialog("Input Error", "Please enter a valid author name"); return; }

BaseContainer stringTable = stringEditor.GetTable(); if (!stringTable) { Print("No string table opened", LogLevel.WARNING); return; }

BaseContainerList items = stringTable.GetObjectArray("Items"); // entries - cannot be empty since rows are selected

if (Workbench.ScriptDialog("Author", "Please input the wanted author's name for these entries.", this) == 0) return; // on Cancel

m_sAuthorName.Trim(); if (m_sAuthorName.IsEmpty()) { Workbench.GetUserName(m_sAuthorName); if (m_sAuthorName.IsEmpty()) { Workbench.Dialog("Input Error", "Please enter a valid author name"); return; } }

BaseContainer item; string itemId, itemAuthor;

stringEditor.BeginModify("RowEdit"); // prepare the Undo operation

foreach (int row : rows) { item = items.Get(row); item.Get("Id", itemId); item.Get("Author", itemAuthor);

Print("Changing #" + itemId + "'s Author from '" + itemAuthor + "' to '" + m_sAuthorName + "'", LogLevel.NORMAL); // log for manual Undo if needed stringEditor.ModifyProperty(item, item.GetVarIndex("Author"), m_sAuthorName); }

stringEditor.EndModify(); // wrap the Undo operation

// stringEditor.Save(); // we allow the user to save, let's not override data ourselves }

//------------------------------------------------------------------------------------------------ override void OnSelectionChanged() { LocalizationEditor stringEditor = Workbench.GetModule(LocalizationEditor); array<int> rows = {}; stringEditor.GetSelectedRows(rows);

Print("Selected rows: " + rows, LogLevel.NORMAL); }

//------------------------------------------------------------------------------------------------ [ButtonAttribute("OK", true)] bool ButtonOK() { return true; }

//------------------------------------------------------------------------------------------------ [ButtonAttribute("Cancel")] bool ButtonCancel() { return false; } } </enforce>

{{GameCategory|armaR|Modding|Scripting|Workbench|Tutorials}}
301vebxhd1gjeibaduepj5ckh5ofp91

# Arma Reforger:Workbench Plugin Tutorial

5050
33024
377847
370927
2026-01-03T11:18:25Z
Lou Montana
10739
Update from ModifyEntityKey to SetVariableValue and angleXYZ to angles
377847
wikitext
text/x-wiki
{{TOC|side}} {{Link|:Category:Arma Reforger/Modding/Official Tools|Workbench}} allows to extend its functionality to certain degree. With help of scripts, you can create plugins for {{Link|Arma Reforger:Resource Manager}}, {{Link|Arma Reforger:Script Editor}}, {{Link|Arma Reforger:String Editor}} and {{Link|Arma Reforger:World Editor}}. Furthermore, you can also create additional {{Link|Arma Reforger:World Editor Tool|World Editor '''Tools'''}}.

In general, you can use both plugins and tools for various types of automation like:

* Batch processing files * Automatic testing of assets * Generating databases * Performing automation task on action

{{Feature|informative| Plugins can be invoked from the '''Plugins''' menu, by '''shortcut''' or can be triggered on some '''action''' like saving file or registering new resource. It is also possible to use '''CLI parameters''' to launch Workbench with specific plugin and parameters which is especially useful when you consider using some automation pipeline.

For more general information about '''Workbench Script API''' and plugins, see [[Arma Reforger:Workbench Plugin|Workbench Plugin]]. }}

== Editor Plugins ==

Plugin can be located in top toolbar in "Plugins" section '''(1)'''. From there, you can either select one of the already existing plugins '''(3)''' or change their settings in Settings sub menu '''(2)'''. Plugins can be also organised in submenus '''(4)''', so you can conveniently gather multiple plugins.

[[Image:armareforger-workbench-plugin-category-usage.png]]

{{Feature|informative|It is worth noting that each editor has its own API. Some of the functionalities available in World Editor's API (like the ability to modify prefabs) might not be available in Resource Manager and vice versa.}}

== World Editor Tools ==

By default, World Editor Tools can be found right above the preview window of '''World Editor.'''

[[Image:armareforger-workbench-plugin-world-editor-tools.png]]

Some of those tools are part of the engine and some of them are scripted. Once some tool is selected, you can change its properties.

To start using World Editor Tools, make sure that you have enabled '''Current Tool (2)''' window in '''Windows tab (1)'''. Once you have that completed, you can pick one of the Tools either from the '''tool bar (3)''' or from '''Tools''' category''''''. After that, you can go to the '''Current Tool tab (4)''' and change parameters of '''currently selected tool (5)'''.

[[Image:armareforger-workbench-plugin-world-tools-steps.gif]]

'''World Editor Tools''' are often used to assist with prefab management (like spawning assets) but they can be also used for autotests due to ability to switch to game mode.

It is also possible to '''drag and drop''' resources (''like prefabs'') into current tool properties, which is especially useful when you want to change multiple hand picked prefabs.

=== Preparing Data Structure ===

All your new plugins and tools should be located in '''Scripts/WorkbenchGame''' folder. It is possible to have them in some sub folder to keep structure bit more clear and in this tutorial '''SamplePlugins''' subfolder will collect all new scripts.

[[Image:armareforger-workbench-plugin-structure.png]]

In '''SamplePlugin''' folder, we will create in total 5 new scripts:

* '''SampleResourceManagerPlugin.c''' - containing Resource Manager plugin code * '''SampleScriptEditorPlugin.c -''' containing Script Editor plugin code * '''SampleStringEditorPlugin.c -''' containing String Editor plugin code * '''SampleWorldEditorPlugin.c''' - containing World Editor plugin code * '''SampleWorldEditor.c -''' containing World Editor Tool code

Assuming that you have already created folders in way described above (either through system file explorer or through Workbench context menu available in '''Resource Browser'''), you can start creating empty script file by clicking on '''Resource Browse''' field '''(1)''' with {{Controls|RMB}} which will invoke context menu. From there, you can select option to create a '''new empty script file''' with name of your choice. Alternatively, you can click on '''Create''' button '''(2)''' which will show you same context menu as previous method. {| class="wikitable" | '''Creating script file''' | '''Resulting file structure''' |- ![[Image:armareforger-workbench-plugin-creating-script.png]] ![[Image:armareforger-workbench-plugin-script-structure.png]] |}

<!--

PLUGIN CREATION

-->

== Resource Manager Plugin ==

=== Basic structure ===

'''At minimum''', new plugin needs to inherit from '''WorkbenchPlugin''' class. This class offers you ability to define behaviour of the plugin when it's '''launched''' ''(either by clicking on it or by CLI parameter)'' or when its '''settings are being changed'''.

There are also few more specialised variants of '''WorkbenchPlugin''' class, which exposes additional API, like:

* '''ResourceManagerPlugin''' * '''WorldEditorPlugin''' * '''LocalizationEditorPlugin'''

Let's start with '''SampleResourceManagerPlugin.c''' and try to create some minimum code for new Workbench plugin which is visible in Resource Manager plugins tab.

One of the requirements was already listed above but let's summarise all ingredients necessary to create a new plugin:

* New plugin class needs to inherit from '''WorkbenchPlugin''' or its derivatives * Needs '''WorkbenchPluginAttribute''' correctly defined * Needs some code in '''Run()''' method

{{Feature|important| If you do not have any code in the <enforce inline>Run()</enforce> method, your plugin will not be visible in Plugins tab. This is done on purpose so CLI plugins are not cluttering the interface! }}

<enforce> [WorkbenchPluginAttribute(name: "Sample Resource Manager Plugin", wbModules: { "ResourceManager" })] class SampleResourceManagerPlugin : WorkbenchPlugin { override void Run() { Print("I'm here!"); } } </enforce>

The above code should result in a new entry in the '''Resource Manager''' plugins tab.

[[Image:armareforger-workbench-plugin-rm-plugin.jpg]]

Now it is time to test the plugin in action! Clicking on '''Sample Resource Manager Plugin''' in the Plugins tab should result in "I'm here!" being printed in the '''Log Console'''.

[[Image:armareforger-workbench-plugin-rm-plugin-console.jpg]]

=== Workbench Attribute ===

'''WorkbenchPluginAttribute''' defines how and where the plugin is going to be visible. We already have display name defined ''via'' '''name''' attribute and '''wbModules''' parameter to show this plugin only in '''Resource Manager'''. There are few more attributes which are quite handy when developing plugins.

{{Feature|informative| '''WorkbenchPluginAttribute''' parameters: <enforce> void WorkbenchPluginAttribute(string name, string description = "", string shortcut = "", string icon = "", array<string> wbModules = null, string category = "", int awesomeFontCode = 0) </enforce> }}

===== Attributes =====

{| class="wikitable" ! Parameter Name ! Description |- | ====== name ====== | Name of the plugin/tool |- | ====== description ====== | Description of tool visible in Current Tool panel (''only relevant to '''World Editor Tools''')'' |- | ====== shortcut ====== | Keyboard shortcut in text format - "Ctrl+G" means that plugin will be activated after pressing {{Controls|Ctrl|G}} on the keyboard. |- | ====== icon ====== | ''Plugin custom PNG icon - it's recommended to use awesomeFontCode instead!'' |- | ====== wbModules ====== | List of strings representing Workbench modules where this tool should be avalaible (''e.g. {"ResourceManager", "ScriptEditor"}''). Leave null or empty array for any module |- | ====== category ====== | Category of the plugin ( see #4 ) - ('''''not''' relevant to '''World Editor Tools''')'' |- | ====== awesomeFontCode ====== | Hexadecimal code for Awesome icon.

https://fontawesome.com/cheatsheet codes from that page need the {{hl|'''0x'''}} prefix! |}

==== Adding category parameter ==== Adding a new category is fairly simple as typing <enforce inline>category: "Sample Plugins"</enforce> into '''WorkbenchPluginAttribute''' is enough to add your plugin to "'''''Sample Plugins"''''' sub menu in the Plugins tab. Multiple plugins can be collected in one category if they all use same "category" parameter

==== Adding custom icon ==== First of all, it's recommended to use '''awesomeFontCode''' instead of '''icon''' parameter and that's why this paragraph only focus on usage of awesome font.

On https://fontawesome.com/cheatsheet webpage you can try to find suitable icon for you. Let's say you are interested in '''copy''' icon. On the right you can see code for that icon - in this case it is '''F0C5'''

[[Image:armareforger-workbench-plugin-awesome-font.png|center]] {{Clear}} To use that icon in Workbench, add '''awesomeFontCode''' parameter to '''WorkbenchPluginAttribute''' with following data - '''0x'''F0C5. '''0x is a prefix required by the Workbench'''.

'''Custom icon''' <enforce>awesomeFontCode: 0xF0C5</enforce>

As result, you should get following thing in '''Workbench'''

[[Image:armareforger-workbench-plugin-awesome-font-icon.png|thumb|left|800px|'''''1''' - category, '''2''' - icon'']] {{Clear}}

; Full WorkbenchPluginAttribute code <enforce>[WorkbenchPluginAttribute(name: "Sample Resource Manager Plugin", category: "Sample Plugins", wbModules: {"ResourceManager"}, awesomeFontCode: 0xF0C5)]</enforce>

==== Expanding plugin functionality ====

It's time to expand plugin functionality!

In this chapter the '''Resource Manager''' plugin will be expanded with following options:

* Getting array of currently selected files in Resource Browser * Printing array of selected files to Console Log * Copying content of that array to the clipboard

<enforce> [WorkbenchPluginAttribute(name: "Sample Resource Manager Plugin", category: "Sample Plugins", shortcut: "", wbModules: {"ResourceManager"})] class SampleResourceManagerPlugin: WorkbenchPlugin { //---------------------------------------------------------------------------------------------- override void Run() { } } </enforce>

=== Settings ===

If the <enforce inline>Configure()</enforce> method is not empty, plugins settings can be accessed by selecting appropriate entry in Plugins → Settings tab (see #2).

Usually, you are going to use following code to invoke UI window to change plugin settings: <enforce>Workbench.ScriptDialog("Plugin script dialog title", "Description of the plugin\nThis description can use multiple lines.", this);</enforce>

[[Image:armareforger-workbench-plugin-script-dialog.png|center]] {{Clear}} ScriptDialog has 3 parameters which lets you change:

* Title (1) - Title of the UI * Text (2) - Text that is inside of UI dialog - it's useful to fill there i.e. usage instruction or general description of the plugin * Data (3) - Data (parameters) that are passed to dialog. All members of the method with [Attribute] are exposed to this script dialog if "this" is used as last parameter.

{{Feature|informative| Variables which are following the camel-case convention are parsed to a more pleasant format.<br> The following rules are applied: * {{hl|m_}}/{{hl|s_}} prefix is stripped * the variable type letter (i.e {{hl|i}} for int in iNumber) is removed * space is added before each capital letter (unless followed by another capital letter)

{{hl|m_bCopyToClipboard}} will then be displayed as {{hl|Copy To Clipboard}}. }}

Furthermore, dialog can be expanded with additional buttons (4), which can execute any code you want. All you have to do is to add {{hl|[ButtonAttribute()]}} above the method.

<enforce>ButtonAttribute(string label = "ScriptButton", bool focused = false)</enforce>

This attribute has two parameters: * label - string which is used as a display name in UI * focused - boolean which controls if given button is by default focused. (default: false)

<enforce> [ButtonAttribute("OK")] void OkButton() {} </enforce>

The above code will show simple "OK" button which doesn't do anything.

Below is a bit more advanced example which lets import/export current settings from/to clipboard. <spoiler> <enforce> // Plugins settings - those can be changed in Plugins -> Settings section [Attribute("0", UIWidgets.CheckBox, "Check this option to print output to clipboard.")] bool m_bCopyToClipboard;

[Attribute("0", UIWidgets.CheckBox, "Check this option to print output array to the console log.")] bool m_bPrintToConsole;

// Simple ButtonAttributes which shows OK in dialog - no extra functonality [ButtonAttribute("OK")] void OkButton() {}

// Cancel button [ButtonAttribute("Cancel")] bool CancelButton() { return false; }

// Button responsible for importing plugin parameters from clipboard [ButtonAttribute("Import")] void ImportButton() { // Get content of user clipboard string input = System.ImportFromClipboard();

// Verify input if (input.IsEmpty()) return;

// Parse input array<string> parsedText = {}; input.Split(" ", parsedText, false);

// Verify parse input int parsedTextCount = parsedText.Count(); if (parsedTextCount != 2) { PrintFormat("Invalid parameter count, typed %1 parameters while 2 were expected", parsedTextCount); return; }

// Update variables states according to clipboard data m_bCopyToClipboard = parsedText[0].ToInt() != 0; m_bPrintToConsole = parsedText[1].ToInt() != 0; }

// Button responsible for exporting plugin parameters to clipboard [ButtonAttribute("Export")] void ExportButton() { string export = string.Format("%1 %2", m_bCopyToClipboard, m_bPrintToConsole); System.ExportToClipboard(export); }

// Code which is executed when settings are accesed override void Configure() { Workbench.ScriptDialog("Plugin script dialog title", "Description of the plugin\nThis description can use multiple lines.\nPress export to copy plugin settings to clipboard.\nPress import to grab data from clipboard.", this); } </enforce> </spoiler>

{{Feature|informative|You can also, above the line of code in the <enforce inline>Run()</enforce> method, invoke the settings window every time plugin is used.}}

Below is full example which you can test yourself in '''Resource Manager'''. Try changing either Copy To Clipboard or Print To Console parameter and check how it behaves in Workbench.

<spoiler> <enforce> [WorkbenchPluginAttribute(name: "Sample Resource Manager Plugin", category: "Sample Plugins", shortcut: "Ctrl+T", wbModules: { "ResourceManager" }, awesomeFontCode: 0xf0c5)] class SampleResourceManagerPlugin : ResourceManagerPlugin { // Plugins settings - those can be changed in Plugins -> Settings section [Attribute(desc: "Check this option to print output to clipboard.")] bool m_bCopyToClipboard;

[Attribute(desc: "Check this option to print output array to the console log.")] bool m_bPrintToConsole;

// ButtonAttributes [ButtonAttribute("OK")] void OkButton() { }

// Cancel button [ButtonAttribute("Cancel")] bool CancelButton() { return false; }

// Button responsible for importing plugin parameters from clipboard [ButtonAttribute("Import")] void ImportButton() { // Get content of user clipboard string input = System.ImportFromClipboard();

// Verify input if (input.IsEmpty()) return;

// Parse input array<string> parsedText = {}; input.Split(" ", parsedText, false);

// Verify parse input int parsedTextCount = parsedText.Count(); if (parsedTextCount != 2) { PrintFormat("Invalid parameter count, typed %1 parameters while 2 were expected", parsedTextCount); return; }

// Update variables states according to clipboard data m_bCopyToClipboard = parsedText[0].ToInt() != 0; m_bPrintToConsole = parsedText[1].ToInt() != 0; }

// Button responsible for exporting plugin parameters to clipboard [ButtonAttribute("Export")] void ExportButton() { string export = string.Format("%1 %2", m_bCopyToClipboard, m_bPrintToConsole); System.ExportToClipboard(export); }

// Code which is executed when settings are accesed override void Configure() { Workbench.ScriptDialog("Plugin script dialog title", "Description of the plugin\nThis description can use multiple lines.\nPress export to copy plugin settings to clipboard.\nPress import to grab data from clipboard.", this); }

// This code is executed when plugin is executed either by clicking on it in Plugins list or when shortcut is used override void Run() { // Grab reference to ResourceManager ResourceManager resourceManager = Workbench.GetModule(ResourceManager); if (!resourceManager) return;

// Get list of currently selected resources array<ResourceName> selection = {}; resourceManager.GetResourceBrowserSelection(selection .Insert, true);

// Verify if something is selected - if no, exit method and print error message if (selection.IsEmpty()) { Print("No elements are selected in Resource Browser"); return; }

if (m_bPrintToConsole) { // Print ResourceManager selection directly to the console Print(selection); }

if (m_bCopyToClipboard) { // Copy file name to clipboard - each element will be written on new line string export; foreach (string element : selection) { export = export + "element: " + element + "\n"; }

System.ExportToClipboard(export); } } } </enforce> </spoiler>

{{Feature|informative|After the plugin dialog is closed, all attributes are saved in Windows registry - making them '''persistent'''.}}

=== Key shortcuts ===

Shortcuts can be easily added by changing '''shortcut''' parameter in '''WorkbenchPluginAttribute''' of plugin.

<enforce>[WorkbenchPluginAttribute(name: "Sample Resource Manager Plugin", category: "Sample Plugins", shortcut: "Ctrl+T", wbModules: { "ResourceManager" })]</enforce>

In this case, adding {{hl|shortcut: "Ctrl+T"}} to the attribute will result in the selected keybind to be displayed next to the plugin name.

[[Image:armareforger-workbench-plugin-shortcut.png]]

=== Running through CLI parameter ===

Beside launching plugin from the Workbench itself, it is also possible to launch selected plugins through CLI parameter on Workbench shortcut, which is really useful when creating some automation systems.

To do so, first specify in '''wbModule''' name of the module which plugin relays on (in this case its '''ResourceManager''') and then type name of the plugin in '''-plugin''' parameter. O:\PathToReforger\ArmaReforgerWorkbenchSteam.exe -wbmodule=ResourceManager -plugin=SampleResourceManagerPlugin

Furthermore, you can also read custom command line parameters which are passed to the Workbench ''via'' '''GetCmdLine''' method! To do so, add additional parameter in your shortcut after '''-plugin=SampleResourceManagerPlugin''' (see [[Arma Reforger:Startup Parameters|Startup Parameters]]).

O:\PathToReforger\ArmaReforgerWorkbenchSteam.exe -wbmodule=ResourceManager -plugin=SampleResourceManagerPlugin -myParameter="$ArmaReforger:Prefabs\Vehicles"

After that, you can fetch '''myParameter''' from the script ''via'' the <enforce inline>GetCmdLine()</enforce> method.

<enforce> override void RunCommandline() { ResourceManager resourceManager = Workbench.GetModule(ResourceManager); string param; resourceManager.GetCmdLine("-myParameter", param); } </enforce>

Below is bit more advanced example which you can use in '''SampleResourceManagerPlugin'''. This code will copy to clipboard total amount of prefabs in selected location. By default code is working without any extra parameters and is looking for prefabs in '''"$ArmaReforger:"'''. You can change search location through '''myParameter''' - example '''-myParameter="$ArmaReforger:Prefabs\Vehicles"'''

Optionally, you can also use '''-autoclose=1''' parameter to automatically close Workbench once search for prefabs was completed.

<spoiler text="RunCommandLine example"> <enforce> override void RunCommandline() { ResourceManager resourceManager = Workbench.GetModule(ResourceManager);

// Default values string param = "$ArmaReforger:"; string autoclose = "0";

// First parameter called myParameter resourceManager.GetCmdLine("-myParameter", param); resourceManager.GetCmdLine("-autoclose", autoclose);

// Print parameters in console PrintFormat("CLI parameters -myParameter= %1 -autoClose=%2", param, autoclose);

// Find any .et (prefab) files in selected location array<string> files = {}; System.FindFiles(files.Insert, param, ".et"); int numberOfFiles = files.Count();

// Print number of all files to Log Console Print(numberOfFiles);

// Export to clipboard result of the search System.ExportToClipboard("Number of all .et files in " + param + " = " + numberOfFiles);

// Close workbench if autoclose parameter is set to 1 if (autoclose == "1") Workbench.Exit(0); } </enforce> </spoiler>

=== Running plugin on event ===

Some of the Workbench editors supports additional actions which are executed when some '''event is triggered'''. As per info in this paragraph, you can check workbench.c file and look for classes which inherits from '''WorkbenchPlugin'''.

In below example, we are going to use '''OnRegisterResource''' method located in '''ResourceManagerPlugin'''. This method is called every time some resource is registered in Workbench. Whenever it happens, '''OnRegisterResource is called''' and you can use two parameters that are exposed there:

* '''absFileName''' - which is absolute path + name of newly registered file * '''metaFile -''' link to meta file which was created during that process

<enforce> // This method is executed every time some new resource is registered override void OnRegisterResource(string absFileName, BaseContainer metaFile) { // Print directly to the Log Console absolute path and file name of newly registered resource Print(absFileName); } </enforce>

You can add that code to '''SampleResourceManagerPlugin''' class and try to register a new resource in '''Workbench'''. If everything is done correctly, you should see name of newly registered resource in '''Log Console'''.

[[Image:armareforger-workbench-plugin-on-import.gif]]

=== Calling Run command and external executables ===

Workbench provides API for running Run command and executing external executables. This achieved by two '''Workbench''' methods:

{| class="wikitable" ! Method ! Description ! Parameters ! Return |- | ''int'' '''RunCmd'''(''string command, bool wait = false''); | Run command - <nowiki>https://en.wikipedia.org/wiki/Run_command</nowiki> | ''string '''command''''' - command to run

''bool '''wait''''' - tells whether Workbench should wait till command is completed | If wait is used, '''exit code''' represented as integer is returned. Otherwise 0 is returned |- | ''ProcessHandle'' '''RunProcess'''(''string command''); | Executes selected proccess | ''string '''command''''' - process to run | Returns handle to process which can be used to i.e. check if application was launched or to kill it later |} '''RunCmd''' allows to execute any Run command available on operating system.

In below example, a new button '''Ping''' is added to the plugin settings, which executes '''RunCmd''' and pings the bohemia.net host. Once pinging is completed, '''Cmd.exe''' window will be closed.

<enforce> [ButtonAttribute("Ping")] void PingBohemia() { // Ping bohemia.net page Workbench.RunCmd("ping bohemia.net"); } </enforce>

'''RunProcess''' can be used to any executable on PC. This method returns also handle to the process so you can check whether process was executed successfully or terminate it once some condition is reached.

In this example, Windows notepad is launched after pressing '''Notepad''' button in UI. If process was launched sucesfully, notepad will be closed after two seconds.

<enforce> void KillProcess(ProcessHandle handle) { // Sleep is in milliseconds Sleep(2000);

// Kill process passed to this method Workbench.KillProcess(handle); }

[ButtonAttribute("Notepad")] void OpenNotepad() { // Open notepad ProcessHandle handle = Workbench.RunProcess("notepad"); if (!handle) { Print("Couldn't start the notepad.", LogLevel.ERROR); return; }

// Run separate thread where notepad will be killed after 2000 miliseconds thread KillProcess(handle); } </enforce>

[[Image:armareforger-workbench-plugin-settings-buttons.png]]

Below is example code for '''SampleResourceManagerPluginSettings''' plugin which inherits from '''SampleResourceManagerPlugin'''. Import and Export buttons were removed and instead of them, there is '''Ping''' and '''Notepad''' button.

<spoiler> <enforce> // Variant of the plugin which opens settings UI on each run - inherits from basic SampleResourceManagerPlugin [WorkbenchPluginAttribute(name: "Sample Resource Manager Plugin (Settings)", category: "Sample Plugins", shortcut: "Ctrl+R", wbModules: { "ResourceManager" }, awesomeFontCode: 0xf085)] class SampleResourceManagerPluginSettings : SampleResourceManagerPlugin { // We don't want import and export buttons anymore. Overriding without providing ButtonAttribute above it is enough to stop it from showing override void ImportButton() {} override void ExportButton() {}

void KillProcess(ProcessHandle handle) { // Sleep is in milliseconds Sleep(2000);

// Kill process passed to this method Workbench.KillProcess(handle); }

[ButtonAttribute("Ping")] void PingBohemia() { // Ping bohemia.net page Workbench.RunCmd("ping bohemia.net"); }

[ButtonAttribute("Notepad")] void OpenNotepad() { // Open notepad ProcessHandle handle = Workbench.RunProcess("notepad"); if (!handle) { Print("Couldn't start the notepad.", LogLevel.ERROR); return; }

// Run separate thread where notepad will be killed after 2000 miliseconds thread KillProcess(handle); }

override void Configure() { Workbench.ScriptDialog("Configure settings", "", this); }

override void Run() { Workbench.ScriptDialog("Configure settings", "", this); super.Run(); } } </enforce> </spoiler>

== Script Editor Plugin ==

This simple plugin is going to print name of currently selected script and currently selected line in '''Script Editor'''. In principle, most of the plugin functionality was already above so this plugin is mainly to showcase possibilities lying in the API that various editors have.

Plugin can be activated either by selecting it in '''Plugins → Sample Plugins → Sample Script Editor Plugin''' or through the {{Controls|Ctrl|T}} shortcut.

<enforce> [WorkbenchPluginAttribute(name: "Sample Script Editor Plugin", category: "Sample Plugins", shortcut: "Ctrl+T", wbModules: { "ScriptEditor" })] class SampleScriptEditorPlugin : WorkbenchPlugin { override void Run() { ScriptEditor scriptEditor = Workbench.GetModule(ScriptEditor); if (!scriptEditor) return;

// Try to get currently selected file string file; if (!scriptEditor.GetCurrentFile(file)) { Print("No file is currently selected!"); return; }

// Try to get absolute path to currently selected file string absPath; if (!Workbench.GetAbsolutePath(file, absPath)) { Print("Workbench was unable to get absolute path of selected file!"); return; }

// Print local and absolute path of currently opened file Print(file); Print(absPath);

// Print current Line string currentLine; scriptEditor.GetLineText(currentLine, -1); Print(currentLine);

// Copy file name to clipboard System.ExportToClipboard(file); } } </enforce>

== String Editor plugin ==

This String Editor example plugin prints to the Log Console currently opened file and selected rows in this editor. Additionally, the name of the currently selected file is also copied to the user clipboard. This example plugin has no options available.

{{Feature|important|'''String Editor''' is internally referenced as '''LocalizationEditor'''.}}

<enforce> [WorkbenchPluginAttribute(name: "Sample String Editor Plugin", category: "Sample Plugins", shortcut: "Ctrl+T", wbModules: {"LocalizationEditor"}, awesomeFontCode: 0xf02d)] class SampleStringEditorPlugin: LocalizationEditorPlugin { override void Run() { LocalizationEditor localizationEditor = Workbench.GetModule(LocalizationEditor); if (!localizationEditor) return;

array<int> selectedIndexes = {}; localizationEditor.GetSelectedRows(selectedIndexes); Print(selectedIndexes); } } </enforce>

= Creating World Editor Extensions =

Compared to all other editors, '''World Editor''' is exposing to user much more functions than any other Workbench module. Beside World Editor API in '''workbench.c''' file, there is another in '''worldEditor.c''' file inside of '''WorldEditorAPI.'''

Among things that are possible to do in World Editor:

* Terrain manipulation * Game mode creation assistance * Loading scenarios and performing autotests * Making edits to prefabs or configs

== World Editor Plugin ==

This simple plugin is showing amount of currently selected entities in World Editor. You can invoke it by pressing {{Controls|Ctrl|T}} or by selecting it from the '''Plugins''' tab.

<enforce> [WorkbenchPluginAttribute(name: "Sample World Editor Plugin", category: "Sample Plugins", shortcut: "Ctrl+T", wbModules: {"WorldEditor"})] class SampleWorldEditorPlugin : WorldEditorPlugin { override void Run() { // Get World Editor module WorldEditor worldEditor = Workbench.GetModule(WorldEditor);

// Get World Editor API WorldEditorAPI api = worldEditor.GetApi();

int selectedEntitiesCount = api.GetSelectedEntitiesCount();

// Print result to the Log Console Print(selectedEntitiesCount); } } </enforce>

== World Editor Tool ==

=== Setting up new Tool ===

As indicated before, '''World Editor Tools''' has quite impressive API which can be used in many different ways. There are few subtle differences between '''World Editor Tools''' and plugins which are worth to note like:

* Usage of '''WorkbenchToolAttribute''' (which shares available parameters with plugin - see Workbench Attribute) to expose it to '''World Editor''' * Inheritance from '''WorldEditorTool''' class, which has different pool of methods available compared to plugins * They cannot be launched ''via'' CLI parameter * They can use description parameter '''(2)''' * They are not grouped in categories like plugins, therefore category parameter is not relevant for them

Beside that, they can have name '''(1)''', parameters '''(3)''' and buttons '''(4)''' as plugin.

[[Image:armareforger-workbench-plugin-world-editor-toool-window.png]]

Below is the minimal code required to create a new '''World Editor Tool'''.

<enforce> [WorkbenchToolAttribute(name: "Sample World Editor Plugin", description: "Description of plugin.\nSupports multiple lines.", wbModules: { "WorldEditor" }, awesomeFontCode: 0xF074)] class SampleWorldEditorTool : WorldEditorTool { } </enforce>

=== Using World Editor API ===

When performing any operations to entities, you need to call '''BeginEntityAction''', which marks start of logical edit actions. Use m_API.'''EndEntityAction'''(); to mark end of edit actions. All transformations between <enforce methods="BeginEntityAction" inline>BeginEntityAction</enforce> and <enforce methods="EndEntityAction" inline>EndEntityAction</enforce> are used by World Editor's history stack - such actions can be reverted by user either ''via'' '''Undo last action''' button or shortcut ({{Controls|Ctrl|Z}}).

In below example code is creating a new entity and applies random scale to it.

<enforce> m_API.BeginEntityAction("Processing entity");

// Create entity using one of the selected random prefabs IEntity entity = m_API.CreateEntity(m_aPrefabVariants.GetRandomElement(), "", m_API.GetCurrentEntityLayerId(), null, traceEnd, vector.Zero); m_aEntities.Insert(entity);

IEntitySource entitySource = m_API.EntityToSource(entity); m_API.SetVariableValue(entitySource, "scale", Math.RandomFloat(0.5, 2).ToString());

m_API.EndEntityAction(); </enforce>

{{Feature|informative| '''WorldEditorTool''' class has '''m_API''' variable which you can use to easily access '''WorldEditorAPI'''. This means that you do not have to write <enforce inline>WorldEditorAPI api = worldEditor.GetApi();</enforce> like in '''WorldEditorPlugin'''. }}

=== Example World Editor Tool code ===

[[Image:armareforger-workbench-plugin-tool-test.gif]]

Below is full '''World Editor Tool example''' which utilises some of the '''World Editor API'''. Tool will try to create a random prefab at cursor position from pool of Prefab Variants provided by user (''tip: you can drag and drop multiple prefabs there!)'' and then randomise scale of that new entity.

Entity creation happens on '''left mouse button''' {{Controls|LMB}} press and after that, tool will try to rotate that new entity in direction where mouse button was located when button was released.

All entities created by that tool can be deleted by pressing '''Escape''' key or by clicking on '''Delete all''' button in Current Tool tab. Additionally you can also use '''Randomise scale''' button to randomise scale of all entities created with this tool.

<spoiler text="World Editor Tool source code"> <enforce> [WorkbenchToolAttribute( name: "Sample World Editor Tool", description: "Click on map to create new entity from Prefab Variants array.\nPress Escape to delete all entities created during a single session.", wbModules: { "WorldEditor" }, awesomeFontCode: 0xF074)] class SampleWorldEditorTool : WorldEditorTool { [Attribute(desc: "Pool of prefabs for placement randomiser", params: "et")] protected ref array<ResourceName> m_aPrefabVariants;

[Attribute(desc: "Randomise scale of placed objects")] protected bool m_bRandomScale;

protected ref DebugTextScreenSpace m_Text; protected ref DebugTextScreenSpace m_Crosshair; protected ref array<IEntity> m_aEntities;

protected vector m_vPreviousTraceEnd;

[ButtonAttribute("Delete all")] void DeleteAll() { // do nothing if array is empty if (!m_aEntities || m_aEntities.IsEmpty()) return;

// delete all entities created by this tool m_API.BeginEntityAction("Deleting entities"); m_API.DeleteEntities(m_aEntities); m_API.EndEntityAction(); m_aEntities = null; }

// randomise scale button [ButtonAttribute("Randomise scale")] void RandomiseScale() { // do nothing if array is empty if (!m_aEntities || m_aEntities.IsEmpty()) return;

// delete all entities created by this tool m_API.BeginEntityAction("Changing scale of entities");

IEntitySource entitySource; foreach (IEntity entity : m_aEntities) { entitySource = m_API.EntityToSource(entity); if (entitySource) m_API.SetVariableValue(entitySource, "scale", Math.RandomFloat(0.5, 2).ToString()); }

m_API.EndEntityAction(); }

// method called on mouse movement override void OnMouseMoveEvent(float x, float y) { vector traceStart; vector traceEnd; vector traceDir;

m_Crosshair.SetTextColor(ARGBF(1, 1.0, 1.0, 1.0)); m_Text.SetTextColor(ARGBF(1, 1.0, 1.0, 1.0)); m_Crosshair.SetPosition(x - 9, y - 16); m_Crosshair.SetText("+"); m_Text.SetPosition(x + 15, y);

if (m_API.TraceWorldPos(x, y, TraceFlags.WORLD, traceStart, traceEnd, traceDir)) m_Text.SetText(traceEnd.ToString() + " cursor position"); else m_Crosshair.SetText(""); }

// method called on mouse key press override void OnMousePressEvent(float x, float y, WETMouseButtonFlag buttons) { vector traceStart; vector traceEnd; vector traceDir;

if (!m_aPrefabVariants || m_aPrefabVariants.IsEmpty()) return;

if (m_API.TraceWorldPos(x, y, TraceFlags.WORLD, traceStart, traceEnd, traceDir)) { m_vPreviousTraceEnd = traceEnd;

m_API.BeginEntityAction("Processing " + traceEnd);

// Create entity using one of the selected random prefabs IEntity entity = m_API.CreateEntity(m_aPrefabVariants.GetRandomElement(), "", m_API.GetCurrentEntityLayerId(), null, traceEnd, vector.Zero); if (!entity) { m_API.EndEntityAction(); return; }

IEntitySource entitySource = m_API.EntityToSource(entity); if (!entitySource) { m_API.EndEntityAction(); return; }

if (!m_aEntities) m_aEntities = {};

m_aEntities.Insert(entity);

if (m_bRandomScale) m_API.SetVariableValue(entitySource, "scale", Math.RandomFloat(0.5, 2).ToString());

m_API.EndEntityAction(); } }

// Method called on mouse key release override void OnMouseReleaseEvent (float x, float y, WETMouseButtonFlag buttons) { vector traceStart; vector traceEnd; vector traceDir;

if (!m_aEntities || m_aEntities.IsEmpty()) return;

// Get last modified entity IEntity entity = m_aEntities.Get(m_aEntities.Count() - 1);

// Exit if it was i.e. already deleted if (!entity) return;

IEntitySource entitySource = m_API.SourceToEntity(entity); if (!entitySource) return;

if (m_API.TraceWorldPos(x, y, TraceFlags.WORLD, traceStart, traceEnd, traceDir)) { m_API.BeginEntityAction("Processing " + traceEnd);

vector rotationVector; rotationVector = vector.Direction(m_vPreviousTraceEnd, traceEnd); rotationVector = rotationVector.VectorToAngles();

// Modify angle Y vector currentAngles; entitySource.GetVariable("angles", currentAngles); currentAngles[1] = rotationVector[0]; m_API.SetVariableValue(entitySource, "angles", currentAngles.ToString());

m_API.EndEntityAction(); } }

// Method called on keyboard key press override void OnKeyPressEvent(KeyCode key, bool isAutoRepeat) { // Remove all previously created entities if (key == KeyCode.KC_ESCAPE && !isAutoRepeat) { // Remove text m_Text.SetText("");

DeleteAll(); }

if (key == KeyCode.KC_C && !isAutoRepeat) { m_bRandomScale = !m_bRandomScale; Print(m_bRandomScale); } }

override void OnActivate() { m_Text = DebugTextScreenSpace.Create(m_API.GetWorld(), "", 0, 100, 100, 14, ARGBF(1, 1, 1, 1), 0x00000000); m_Crosshair = DebugTextScreenSpace.Create(m_API.GetWorld(), "", 0, 0, 0, 30, ARGBF(1, 1, 1, 1), 0x00000000); m_aEntities = {}; }

override void OnDeActivate() { m_Text = null; m_Crosshair = null; m_aEntities = null; } } </enforce> </spoiler>

{{GameCategory|armaR|Modding|Scripting|Workbench|Tutorials}}
j0pp5ee108vd4kdd33ahp720f8y9i6j

# Arma Reforger:World Editor Plugin

5050
43618
376156
370950
2025-09-08T12:25:13Z
Lou Montana
10739
/* Example */ Fix o_o
376156
wikitext
text/x-wiki
{{Hatnote|Not to be confused with {{Link|Arma Reforger:World Editor Tool}}.}}

{{TOC|side}} This tutorial teaches how to create a {{Link|Arma Reforger:World Editor}}-specific plugin.

{{Feature|important|Please read {{Link|Arma Reforger:Workbench Plugin}} before following this tutorial.}}

== Setup ==

* Open Script Editor * In an addon, create a new script in {{hl|WorkbenchGame/WorldEditor}} - name it {{hl|{{Link|Scripting Tags|TAG_}}TutorialPlugin.c}} (must end with {{hl|Plugin}} by convention) * Double-click the file to open it * Press {{Controls|Ctrl|T}} to use the {{Link|Arma Reforger:Script Editor: Fill From Template Plugin|Script Template plugin}} ** In its window, select "Class Type: WorkbenchPlugin", leave the other fields blank/default ** A Workbench plugin skeleton is inserted. * In the {{hl|WorkbenchPluginAttribute}}, replace <enforce inline>wbModules: { "ResourceManager" }</enforce> by <enforce inline>wbModules: { "WorldEditor" }</enforce> * Make the plugin inherit from <enforce inline>WorldEditorPlugin</enforce> instead of <enforce inline>WorkbenchPlugin</enforce> * In the <enforce inline>Run()</enforce> method, write <enforce inline>Print("It works!");</enforce> and save the file * Unlike other plugins, '''Rebuild Scripts''' using the {{Controls|Shift|F7}} default shortcut * Reload Workbench scripts via '''Reload Scripts''' option located in '''Plugins → Settings''' (default shortcut: {{Controls|Ctrl|Shift|R}}) * The {{hl|TAG_TutorialPlugin}} plugin should appear in the World Editor's Plugins list, available in the top bar - click on the plugin entry * "It works!" gets printed in the output console.

== WorldEditorPlugin API ==

{{Feature|informative|See the {{Link/Enfusion|armaR|WorldEditorPlugin}} class.}}

The WorldEditorPlugin class only exposes some events on which it is possible to subscribe (e.g <enforce inline>OnGameModeEnded()</enforce>).

== WorldEditor Module API ==

{{Feature|informative|See the {{Link/Enfusion|armaR|WorldEditor}} class.}}

The WorldEditor module allows to do some minor operations (e.g get Resource Browser's selection, get current world's boundaries). <enforce> vector min, max; WorldEditor worldEditor = Workbench.GetModule(WorldEditor); if (!worldEditor) return;

worldEditor.GetWorldBounds(min, max); Print("Min = " + min); Print("Max = " + max); </enforce>

The meat of the matter is happening in <enforce inline>WorldEditorAPI</enforce>, available through the <enforce inline>WorldEditor.GetApi()</enforce> method - see {{Link|#WorldEditorAPI API|below}}.

== WorldEditorAPI API ==

{{Feature|informative|See the {{Link/Enfusion|armaR|WorldEditorAPI}} class as well as {{Link|Arma Reforger:WorldEditorAPI Usage}}.}}

== Example ==

In this example, we will use <enforce inline>WorldEditorAPI</enforce> methods to hide/show all selected entities (it will hide a shown entity and vice versa): <enforce> #ifdef WORKBENCH [WorkbenchPluginAttribute(name: "Tutorial Plugin", shortcut: "Ctrl+Shift+H", wbModules: { "WorldEditor" }, awesomeFontCode: 0xF188)] class TAG_TutorialPlugin : WorldEditorPlugin { override void Run() { WorldEditor worldEditor = Workbench.GetModule(WorldEditor); if (!worldEditor) return;

WorldEditorAPI worldEditorAPI = worldEditor.GetApi(); IEntitySource entitySource;

worldEditorAPI.BeginEntityAction(); for (int i = worldEditorAPI.GetSelectedEntitiesCount() - 1; i >= 0; --i) { entitySource = worldEditorAPI.GetSelectedEntity(i); if (!entitySource) continue;

worldEditorAPI.SetEntityVisible(entitySource, !worldEditorAPI.IsEntityVisible(entitySource), false); } worldEditorAPI.EndEntityAction(); } } #endif </enforce>

{{Feature|informative|For a more advanced <enforce inline>WorldEditorAPI</enforce> usage, see {{Link|Arma Reforger:World Editor Tool}}.}}

{{GameCategory|armaR|Modding|Scripting|Workbench|Tutorials}}
okdf2uia5rxgrqg3mznzpjj0tte6l70

# Arma Reforger:World Editor Tool

5050
43620
377848
371003
2026-01-03T11:22:13Z
Lou Montana
10739
Update from angleXYZ to angles
377848
wikitext
text/x-wiki
{{Hatnote|Not to be confused with {{Link|Arma Reforger:World Editor Plugin}}.}}

{{TOC|side}} This tutorial teaches how to create a {{Link|Arma Reforger:World Editor}}-specific '''tool'''.

A World Editor tool appears in the Tools bar unlike plugins that appear in the plugins list.

{{Feature|important| * Please read {{Link|Arma Reforger:Workbench Plugin}} and {{Link|Arma Reforger:World Editor Plugin}} before following this tutorial. * Tools do not support {{hl|shortcut}} definition - the icon must be clicked. ** Tools do not run on icon click; they require button definition (see {{Link|#Setup}}) for them to trigger an action. }}

== Setup ==

* Open Script Editor * In an addon, create a new script in {{hl|WorkbenchGame/WorldEditor}} - name it {{hl|{{Link|Scripting Tags|TAG_}}TutorialTool.c}} (must end with {{hl|Tool}} by convention) * Double-click the file to open it * Press {{Controls|Ctrl|T}} to use the {{Link|Arma Reforger:Script Editor: Fill From Template Plugin|Script Template plugin}} ** In its window, select "Class Type: '''WorldEditorTool'''", leave the other fields blank/default ** A World Editor tool skeleton is inserted. * In the {{hl|WorkbenchToolAttribute}}, fill the description field with "Tool description and quick usage guide" * Make the plugin inherit from <enforce inline>WorldEditorPlugin</enforce> instead of <enforce inline>WorkbenchPlugin</enforce> * Uncomment the <enforce inline>Run()</enforce> method and write <enforce inline>Print("It works!");</enforce> in it, then save the file (default {{Controls|Ctrl|S}}) <!--* Unlike plugins, '''Rebuild Scripts''' using the {{Controls|Shift|F7}} default shortcut -->* Reload Workbench scripts via '''Reload Scripts''' option located in '''Plugins → Settings''' (default shortcut: {{Controls|Ctrl|Shift|R}}) * The {{hl|TAG_TutorialTool}} tool should appear in the World Editor's Tools list, available in the top bar - click on the defined icon * The tool's panel appears, with {{hl|Tool description and quick usage guide}} text and the "Run" button - click on the Run button * "It works!" gets printed in the output console.

== WorldEditorTool API ==

{{Feature|informative|See the {{Link/Enfusion|armaR|WorldEditorTool}} class.}}

The {{hl|WorldEditorTool}} API offers some interesting things: * the {{hl|m_API}} variable is a direct access to the {{hl|WorldEditorAPI}} instance * the <enforce inline>GetModifierKeyState()</enforce> and the {{hl|On*}} events methods allow to intercept user input * the <enforce inline>UpdatePropertyPanel()</enforce> method allows to refresh the tool's panel in case its values are changed by script.

== WorldEditorAPI API ==

{{Feature|informative|See the {{Link/Enfusion|armaR|WorldEditorAPI}} class as well as {{Link|Arma Reforger:WorldEditorAPI Usage}}.}}

== Example ==

In this example, we will use {{Link/Enfusion|armaR|BaseWorld}}, {{Link/Enfusion|armaR|WorldEditorTool}} and {{Link/Enfusion|armaR|WorldEditorAPI}} methods to: * use {{Controls|Ctrl|MSW}} to set the detection radius * detect entities in a radius around the cursor's world position * draw lines from the cursor to them * turn them upside-down on double-click {{Controls|LMB2}} * delete them on {{Controls|Backspace}} keypress:

{{Feature|important| Editing entities implies to wrap the action(s) (on potentially multiple entities) with <enforce inline>m_API.BeginEntityAction()</enforce> / <enforce inline>m_API.EndEntityAction()</enforce>; this is mandatory and also allows to have multiple actions into one "step", that undo/redo (default {{Controls|Ctrl|Z}} / {{Controls|Ctrl|Y}}) can process. See {{Link|Arma Reforger:WorldEditorAPI Usage}}. }}

<enforce> #ifdef WORKBENCH [WorkbenchToolAttribute( name: "TAG_TutorialTool", description: "Set the wanted radius, move the mouse to highlight found entities, then:" + "\n- double-click to turn them upside-down" + "\n- press BACKSPACE to delete them", awesomeFontCode: 0xF188)] class TAG_TutorialTool : WorldEditorTool { [Attribute(defvalue: "30", uiwidget: UIWidgets.Slider, params: MIN_RADIUS.ToString() + " " + MAX_RADIUS + " 0.1")] protected float m_fRadius;

[Attribute(defvalue: "0", desc: "If checked, the cursor stops on the hovered entity; otherwise it only considers the ground as an obstacle")] protected bool m_bCursorOnObject;

[Attribute(defvalue: "0.5 1 0.5 0.25", desc: "Sphere colour")] protected ref Color m_SphereColour;

[Attribute(defvalue: "1 1 0 1", desc: "Line colour")] protected ref Color m_LineColour;

protected ref array<IEntity> m_aNearbyEntities;

float m_cursorX; float m_cursorY; protected BaseWorld m_World; protected ref SCR_DebugShapeManager m_DebugShapeManager;

protected static const float MIN_RADIUS = 1; protected static const float MAX_RADIUS = 100;

//------------------------------------------------------------------------------------------------ protected override void OnMouseMoveEvent(float x, float y) { m_World = m_API.GetWorld(); if (!m_World) return;

m_cursorX = x; m_cursorY = y;

RefreshShapes(); }

//------------------------------------------------------------------------------------------------ protected override void OnKeyPressEvent(KeyCode key, bool isAutoRepeat) { if (key == KeyCode.KC_BACK) DeleteEntities(); }

//------------------------------------------------------------------------------------------------ protected override void OnMouseDoubleClickEvent(float x, float y, WETMouseButtonFlag buttons) { if (buttons == WETMouseButtonFlag.LEFT) TurnEntitiesUpsideDown(); }

//------------------------------------------------------------------------------------------------ protected override void OnWheelEvent(int delta) { if (GetModifierKeyState(ModifierKey.CONTROL)) { m_fRadius += delta / 120; if (m_fRadius < MIN_RADIUS) m_fRadius = MIN_RADIUS; else if (m_fRadius > MAX_RADIUS) m_fRadius = MAX_RADIUS;

RefreshShapes(); UpdatePropertyPanel(); } }

//------------------------------------------------------------------------------------------------ protected override void OnActivate() { m_DebugShapeManager = new SCR_DebugShapeManager(); }

//------------------------------------------------------------------------------------------------ protected override void OnDeActivate() { m_aNearbyEntities = null; m_DebugShapeManager = null; }

//------------------------------------------------------------------------------------------------ protected void RefreshShapes() { m_DebugShapeManager.Clear();

vector cursorWorldPos; if (!GetCursorWorldPosition(m_cursorX, m_cursorY, cursorWorldPos)) return; // not on screen

FillNearbyEntitiesArray(cursorWorldPos, m_fRadius);

m_DebugShapeManager.AddSphere(cursorWorldPos, m_fRadius, m_SphereColour.PackToInt(), ShapeFlags.NOOUTLINE | ShapeFlags.DEPTH_DITHER); DrawLinesFromPosToEntities(cursorWorldPos, m_aNearbyEntities); }

//------------------------------------------------------------------------------------------------ protected bool GetCursorWorldPosition(float x, float y, out vector cursorWorldPos) { vector traceStart, traceDir; TraceFlags flags = TraceFlags.WORLD; if (m_bCursorOnObject) flags |= TraceFlags.ENTS;

return m_API.TraceWorldPos(x, y, flags, traceStart, cursorWorldPos, traceDir) && cursorWorldPos != vector.Zero; }

//------------------------------------------------------------------------------------------------ protected void FillNearbyEntitiesArray(vector centre, float radius) { m_aNearbyEntities = {}; m_World.QueryEntitiesBySphere( centre, radius, QueryEntitiesCallbackMethod, queryFlags: EQueryEntitiesFlags.STATIC | EQueryEntitiesFlags.DYNAMIC | EQueryEntitiesFlags.WITH_OBJECT);

// as QueryEntitiesBySphere gets entities by sphere-AABB intersection, we shave by origin distance for (int i = m_aNearbyEntities.Count() - 1; i >= 0; --i) { if (vector.Distance(m_aNearbyEntities[i].GetOrigin(), centre) > radius) m_aNearbyEntities.Remove(i); } }

//------------------------------------------------------------------------------------------------ protected bool QueryEntitiesCallbackMethod(IEntity e) { if (!e) return false;

m_aNearbyEntities.Insert(e); return true; }

//------------------------------------------------------------------------------------------------ protected void DrawLinesFromPosToEntities(vector worldPos, notnull array<IEntity> entities) { foreach (IEntity entity : entities) { m_DebugShapeManager.AddLine(worldPos, entity.GetOrigin(), m_LineColour.PackToInt()); } }

//------------------------------------------------------------------------------------------------ protected void TurnEntitiesUpsideDown() { if (!m_aNearbyEntities || m_aNearbyEntities.IsEmpty()) return;

m_API.BeginEntityAction();

IEntitySource entitySource; foreach (IEntity nearbyEntity : m_aNearbyEntities) { entitySource = m_API.EntityToSource(nearbyEntity); if (!entitySource) continue;

vector angles; if (!entitySource.Get("angles", angles)) continue;

angles[2] = angles[2] + 180; angles[2] = Math.Repeat(angles[2] + 180, 360) - 180;

m_API.SetVariableValue(entitySource, null, "angles", angles.ToString()); }

m_API.EndEntityAction();

RefreshShapes(); }

//------------------------------------------------------------------------------------------------ protected void DeleteEntities() { if (!m_aNearbyEntities || m_aNearbyEntities.IsEmpty()) return;

m_API.BeginEntityAction();

foreach (IEntity nearbyEntity : m_aNearbyEntities) { m_API.DeleteEntity(m_API.EntityToSource(nearbyEntity)); }

m_API.EndEntityAction();

RefreshShapes(); } } #endif </enforce>

{{GameCategory|armaR|Modding|Scripting|Workbench|Tutorials}}
to68vx6kowr4abyth4lo10wgfcjx29i

# Arma Reforger:WorldEditorAPI Usage

5050
43638
370946
369598
2025-02-26T12:31:54Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370946
wikitext
text/x-wiki
{{TOC|side}} '''World Editor API''' allows for plugin/tool world operations like obtaining terrain resolution, but mostly for Prefab operations such as editing and saving a Prefab (called '''Entity Template''' in the API for historical reason – hence the {{hl|.et}} extension) using {{Link/Enfusion|armaR|BaseContainer}} references.

{{Feature|informative|See the {{Link/Enfusion|armaR|WorldEditorAPI}} class for in-code information.}}

== General Usage ==

Game classes such as {{hl|WorldEditorAPI}}, {{hl|ScriptEditor}} etc must '''not''' be a strong {{hl|ref}} script-side; on scripts reload, these references are not nulled and could point to anything.

{| class="wikitable valign-top" ! Do ! style="min-width: 40em" | Don't |- | Get {{hl|WorldEditorAPI}} as a '''method''' variable where needed: # <enforce> WorldEditor worldEditor = Workbench.GetModule(WorldEditor); if (!worldEditor) return;

WorldEditorAPI worldEditorAPI = worldEditor.GetApi(); </enforce><!-- -->or one-lined (no nullcheck)<!-- --><enforce> WorldEditorAPI worldEditorAPI = ((WorldEditor)Workbench.GetModule(WorldEditor)).GetApi(); </enforce> # <enforce> WorldEditorAPI worldEditorAPI = SCR_WorldEditorToolHelper.GetWorldEditorAPI(); </enforce> # <enforce> WorldEditorAPI worldEditorAPI = _WB_GetEditorAPI(); // in GenericEntity children WorldEditorAPI worldEditorAPIFromEntity = anEntity._WB_GetEditorAPI(); // it is public </enforce> # <enforce> m_API; // in WorldEditorTool children </enforce> | Store {{hl|WorldEditorAPI}} as a '''class''' pointer: <enforce> class TAG_MyClass { WorldEditorAPI m_WorldEditorAPI; // wrong } </enforce> |}

== Prefab Actions ==

Prefab actions allow editing Prefabs automatically, with or without user input.

{{Feature|important| Editing a {{Link/Enfusion|armaR|BaseContainer}} using {{hl|.Set*}} methods does '''not''' modify the Prefab itself; it only modifies the current instance in memory.<br> Proper Prefab editing '''always''' happens in {{Link/Enfusion|armaR|WorldEditorAPI}} methods, such as: <enforce> WorldEditorAPI.SetVariableValue() WorldEditorAPI.ClearVariableValue() WorldEditorAPI.CreateObjectVariableMember() WorldEditorAPI.CreateObjectArrayVariableMember() // etc </enforce> }}

=== Get Prefab ===

<enforce> //! Load ResourceName into a Resource //! \param[in] resourceName the resourceName to load //! \param[out] resource it is important to keep a strong reference to the loaded resource, //! otherwise its BaseContainer/IEntitySource will be dropped by memory management //! \return the provided resourceName's IEntitySource protected IEntitySource GetPrefabFromResourceName(ResourceName resourceName, out Resource resource) { resource = Resource.Load(resourceName); if (!resource.IsValid()) { resource = null; return null; }

return resource.GetResource().ToEntitySource(); } </enforce>

=== Set Value ===

<enforce>[Attribute()]</enforce> values are set as string through WorldEditorAPI in {{hl|.et}} files. For example, a {{hl|true}} bool value will be represented as {{hl|1}} in a {{hl|.et}} file, therefore {{hl|"1"}} must be provided (see {{hl|bool.ToString(true)}} for more information).

{{Feature|warning| Prefab actions '''must''' be wrapped between '''EntityAction''' begin/end methods below – the Workbench will remind you of that anyway with a VME. <enforce> worldEditorAPI.BeginEntityAction(); // actions here worldEditorAPI.EndEntityAction(); </enforce> }}

==== Direct Value ==== The {{hl|SetVariableValue}} method is used: <enforce> worldEditorAPI.SetVariableValue(myEntitySource, null, "m_bVariable", bValue.ToString(true)); // .ToString(true) to write it as "1" worldEditorAPI.SetVariableValue(myEntitySource, null, "m_fVariable", fValue.ToString()); worldEditorAPI.SetVariableValue(myEntitySource, null, "m_iVariable", iValue.ToString()); worldEditorAPI.SetVariableValue(myEntitySource, null, "m_sVariable", sValue); // no .ToString() for string worldEditorAPI.SetVariableValue(myEntitySource, null, "m_vVariable", vValue.ToString(false)); // .ToString(false) to write it as "0 1 2" and not "<0, 1, 2>" </enforce>

==== Native Type Array ==== The {{hl|SetVariableValue}} method is used, setting values with separating commas: <enforce> worldEditorAPI.SetVariableValue(myEntitySource, null, "m_aBoolArray", "0,1,0,0,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,1,0,1,0,1"); worldEditorAPI.SetVariableValue(myEntitySource, null, "m_aFloatArray", "1.1,2,3.14159"); worldEditorAPI.SetVariableValue(myEntitySource, null, "m_aIntArray", "1,2,3,4,5,6,-10"); worldEditorAPI.SetVariableValue(myEntitySource, null, "m_aStringArray", "value1,value2,value3"); // note: commas cannot be escaped, making string with commas NOT supported worldEditorAPI.SetVariableValue(myEntitySource, null, "m_aVectorArray", "0 1 0,0 0 1,1 0 0"); </enforce>

==== Object Creation ==== Two cases are identified: the object can either be a direct object property or an array item.

In the first case (direct object property), the {{hl|CreateObjectVariableMember}} method must be used: <enforce> // assuming an object is myEntitySource.m_SubObject // public, protected or private, WorldEditorAPI can write any Attribute worldEditorAPI.CreateObjectVariableMember(myEntitySource, null, "m_SubObject", "SubObjectClassName"); // returns true if type is valid and the object was created </enforce>

In the second case (array element), the {{hl|CreateObjectArrayVariableMember}} method is used: <enforce> // assuming an object is an item of the myEntitySource.m_aSubObjects array worldEditorAPI.CreateObjectArrayVariableMember(myEntitySource, null, "m_aSubObjects", "SubObjectClassName", 0); // returns true if type and index are valid and the object was created

// but... how to get the existing index? // we can use the BaseContainer.Get method on the entitySource // using BaseContainer methods is fine as long as it is for '''reading''' information, not '''set''' them BaseContainerList subObjectsArray = myEntitySource.GetObjectArray("m_aSubObjects"); int nextIndex = subObjectsArray.Count(); </enforce>

==== Object Value ==== To set an object's value, the {{hl|path}} parameter, an array of {{Link/Enfusion|armaR|ContainerIdPathEntry}} must be used: <enforce> // let's reuse the myEntitySource.m_SubObject situation // m_SubObject has a "m_sMessage" property we want to set // m_SubObject cannot be set as SetVariableValue's first argument, as it is not the root container (myEntitySource being its parent) worldEditorAPI.SetVariableValue(myEntitySource, { new ContainerIdPathEntry("m_SubObject") }, "m_sMessage", "Hello there"); </enforce>

{{Feature|informative| For performance reason, the path can be cached in order to create array and objects for each property.<br> Here for the sake of examples and teaching, arrays are created on the fly. }}

An array item is accessed using the ContainerIdPathEntry's ''index'' parameter, to determine which item is targeted <enforce> // let's reuse the myEntitySource.m_aSubObjects array situation worldEditorAPI.SetVariableValue(myEntitySource, { new ContainerIdPathEntry("m_aSubObjects", 3) }, "m_sMessage", "Hello there"); // changes the fourth array item </enforce>

A '''component''' is accessed the same way - using the "components" path: <enforce> worldEditorAPI.SetVariableValue(myEntitySource, { new ContainerIdPathEntry("components", 0) }, "m_sMessage", "Hello there"); // if the first component must be edited </enforce>

=== Delete Value ===

<enforce> worldEditorAPI.ClearVariableValue(myEntitySource, null, "m_sName"); // erases "m_sName" from this Prefab's definition (not from parents or children) </enforce>

An array '''cannot''' be deleted this way. All its items should be removed through {{hl|RemoveObjectArrayVariableMember}} usage instead: <enforce> BaseContainerList subObjectsArray = myEntitySource.GetObjectArray("m_aSubObjects"); for (int i = subObjectsArray.Count() - 1; i >= 0; --i) { worldEditorAPI.RemoveObjectArrayVariableMember(myEntitySource, null, "m_aSubObjects", i); } </enforce>

=== Save Changes ===

Simply use the following: <enforce> worldEditorAPI.SaveEntityTemplate(myEntitySource); </enforce> <!--

== Terrain Actions ==

{{Wiki|TODO}} -->

== Helpers ==

See also: * '''{{Link/Enfusion|armaR|SCR_WorldEditorToolHelper}}''' - a helper for WorldEditor/WorldEditorAPI usage * {{Link/Enfusion|armaR|SCR_PrefabHelper}} - a helper for various tools's Prefab management <!-- * {{Link/Enfusion|armaR|SCR_EntitySourceHelper}} -->

{{GameCategory|armaR|Modding|Scripting|Workbench|Tutorials}}
njwnvcvaqjlb3lxyarjo7rsqd68idhf

# Arma Reforger:Terrain: Terrain Entity

5050
32892
370967
338204
2025-02-26T12:31:59Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370967
wikitext
text/x-wiki
{{TOC|side}} TerrainEntity, class {{hl|GenericTerrainEntity}}, is responsible for the entire terrain system; rendering terrain mesh and its textures, collision, etc.

The terrain is split into blocks and tiles; TerrainEntity supports non-square shapes of terrain as well; it is possible to set different grid size for X and Z axes.

A world can have 0 to 1 terrain - multiple terrains (e.g in order to avoid terrain size limitation) is not supported.

{{Feature|informative|Visualization of Blocks & Tiles can be turned on from [[Arma Reforger:Diag Menu|Diag Menu]] (holding {{Controls|Win|Alt}}), Render → Terrain menu → Block's/Tile's bounding boxes.}}

<!--

TO BE CONFIRMED

{{Feature|important| Like any other entity, the Terrain entity must always be placed completely within world's bounds (world entity). In case any part of terrain entity is sticking out of bounds rendering glitches may appear(eg. missing terrain blocks).<br><br> It is recommended (mandatory!) to place it at the 0,0,0 position! }} -->

=== Vertex ===

(Plural: '''vertices''') {{Feature|informative|See {{Link|https://en.wikipedia.org/wiki/Vertex_(geometry)}}.}}

=== Block ===

A '''block''' is the smallest part of the TerrainEntity which gets LODed, as opposed to the [[Real Virtuality]] engine where terrain LODing was done on tiles level.

1 block = 1 draw call

Even though surface mask (for rendering detail surfaces) is split and mapped per tile, a limit of maximum 5 detail surfaces is being applied to blocks.

Enfusion engine currently supports 5 LODs per block.<!-- 6 may happen in the future -->

Each block consists of 32x32 faces (33x33 vertices) down to 2x2 faces (3x3 vertices)

=== Tile ===

A '''tile''' may consist of 1 up to 32 blocks.

When the camera is close to a tile typically (if provided) super texture ("satellite texture"), normal map and surface mask (detail surfaces) are being drawn. These textures are mapped per tile.

=== Terrain Grid Size ===

Count of terrain faces in rows/columns, remember that 512 faces is 513 vertices, this necessary to keep in mind when importing heightmaps.

=== Grid Cell Size ===

Distance between two neighboring terrain vertices. The lower the value, the higher the detail of terrain.

Increasing/decreasing this value affects the final size of terrain.

=== Terrain Size ===

The terrain's total size is '''Terrain Grid Size''' multiplied by '''Grid Cell Size'''.

=== Heightmap ===

The terrain's heightmap is internally in 16 bits integer format and the height scale value is the difference between minimum delta, so e.g. difference between 100 and 101 in internal representation is 0.0315 as default. This value shows the maximum possible height of terrain, {{hl|0.03125 &times; 65535}} (the 16 bit value) = ~2048 meters range.

Changing this value affects elevation range (the vertical range of the terrain).

The lower the value, the higher the precision, but smaller vertical range (and vice-versa).

{{GameCategory|armaR|Modding|Terrains|Guidelines}}
j74cn0yyjafpz00na569ko3bnnax7d0

# Arma Reforger:New Terrain Setup

5050
35019
370932
351807
2025-02-26T12:31:52Z
Lou Montana
10739
Text replacement - "\{\{GameCategory\|armaR\|Modding\|(Guidelines|Tutorials)\|([^=&#8629;]*)\}\}" to "{{GameCategory|armaR|Modding|$2|$1}}"
370932
wikitext
text/x-wiki
{{TOC|side}} This tutorial explains the very first steps of how to setup a new terrain.

== Terrain Setup ==

=== Create a New World ===

In {{Link|Arma Reforger:World Editor}}, click on '''Create new World''' to open the '''Create world''' interface.

In there, set '''world type''' to '''Base scene''' (the new world is to start 100% from scratch, '''Sub-scene''' would make an "additional layer" on an existing, opened terrain).

=== Create the Terrain Entity ===

# In the '''Resource Browser''', search for "terrain" and drag and drop a {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/World/DefaultWorld/GenericTerrain_Default.et}} Prefab in the world.{{Feature|important|This prefab will set correct terrain parameters like for instance '''Terrain''' [[Arma_Reforger:Collision_Layer|Layer Preset]], without which vehicles might not behave correctly! <br>Incorrect behavior can be manifested, for example, by '''bouncing or colliding wheels of vehicles'''.}} # Set its position to X: 0, Y:0, Z:0 {{Feature|warning|This step is important as terrain collision/contact and Terrain Tools may encounter issues otherwise.}} # Save the terrain (using e.g {{Controls|Ctrl|S}}). # Right-click on the created GenericTerrainEntity and choose '''Create new terrain...'''; this will open the New Terrain interface, allowing to set terrain grid resolution values. # When everything is setup, press the Create button.

'''Et voilà&nbsp;!''' The newly created terrain is now ready to be sculpted with {{Link|Arma Reforger:World Editor: Terrain Creation Tool#Sculpt|World Editor's sculpting tools}}.

== Environment Setup == <!-- === Camera ===

In the '''Resource Browser''', search for "cameram .et" to drag and drop a {{Link/Enfusion|armaR|SCR_CameraManager}} Prefab in the world. <!-- not required anymore: This makes the camera attach to the played character as the in-game behaviour, making the preview easier. -->

=== Sun ===

In the '''Create''' tab, search for "light" to drag and drop a {{Link/Enfusion|armaR|GenericWorldLightEntity}} in the world.

==== Transformation ==== * '''Angle X''' - Set light source's pitch angle (e.g -20° to have a low-on-horizon sun) * '''Angle Y''' - Set light source's yaw angle: 0 = from the South, 180 = from the North, 90 = from the West, 270 = from the East * '''Angle Z''' - Set light source's roll angle (does nothing)

==== Light color properties ==== * '''Specular Mul''' - It is a multiplier of the Sun hotspot's specular intensity * '''Sun Angular Size''' - the size of the Sun in a hotspot

==== Global Light color properties ==== * '''Direct Light LV''' - Intensity of the Sun * '''Direct Light Color''' - Color of the Sun light * '''Indirect Light LV''' - Intensity of "ambient" light * '''Indirect Light Color''' - Color of the "ambient" light

==== Global Indirect light modificators ==== * '''Probe Reflection EV''' - Intensity of reflection at "LOW" roughness materials (chrom, glass etc.) * '''Probe Reflection Color''' - Color modificator for Reflection * '''Probe Diffuse EV''' - Intensity of diffuse light at "HI" roughness materials (wall, plastic cloth etc.) * '''Probe Diffuse Color''' - Color modificator for Diffuse

=== Skybox ===

==== Sky Preset ==== In '''world''' entity's properties, set '''Sky Preset''' field (under '''Environment''') to {{Link|enfusion://ResourceManager/~ArmaReforger:Terrains/Common/Sky/Atmosphere/Atmosphere.emat}} - this setups a "real world" atmosphere for the world.

{{Feature|informative|The screen will turn white for a moment, this is normal as the HDR takes time to adapt to the new brightness.}} {{Feature|important|Using a static skybox (e.g {{Link|enfusion://ResourceManager/~ArmaReforger:Terrains/Common/Sky/SkyBox/HDRi_01.emat}}) is a quick possibility but does not allow for further configuration such as adding Clouds or Celestial Bodies.}}

==== Celestial Bodies ==== In '''world''' entity's properties, add celestial bodies by adding items to the '''Planet Preset''' list (by clicking "+") and add the following: * {{Link|enfusion://ResourceManager/~ArmaReforger:Terrains/Common/Sky/Planets/Sun_01.emat}} - set a material to the skybox's light source * {{Link|enfusion://ResourceManager/~ArmaReforger:Terrains/Common/Sky/Planets/Moon_01.emat}} * {{Link|enfusion://ResourceManager/~ArmaReforger:Terrains/Common/Sky/Planets/Stars_01.emat}}

==== Clouds ==== In '''world''' entity's properties, set '''Clouds Renderer''' to '''SkyVolCloudsRenderer'''.

Set '''Clouds Preset''' to {{Link|enfusion://ResourceManager/~ArmaReforger:Terrains/Common/Sky/Clouds/Clouds_Volumetric.emat}} - this setups the volumetric clouds.

=== Fog ===

In '''Resource Browser''', search for {{hl|fog .et}} to drag and drop {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/World/DefaultWorld/FogHaze_Default.et}} for fog to reach this world.

=== Ocean ===

In '''world''' entity's properties, * set the '''Ocean Material''' field to e.g {{Link|enfusion://ResourceManager/~ArmaReforger:Terrains/Common/Water/Ocean/ocean.emat}} (along others in the {{Link|enfusion://ResourceManager/~ArmaReforger:Terrains/Common/Water/Ocean}} directory) - this setups the ocean's surface. * set the '''Ocean Simulation''' field to e.g {{Link|enfusion://ResourceManager/~ArmaReforger:Terrains/Common/Water/Ocean/Simulation/oceanSimIsland.emat}} (along others in the {{Link|enfusion://ResourceManager/~ArmaReforger:Terrains/Common/Water/Ocean/Simulation}} directory) - this setups the ocean's simulation.

=== Post-Process Effects ===

In '''Resource Browser''', search for {{hl|PP_ .et}} to drag and drop a {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/World/DefaultWorld/GenericWorldPP_Default.et}} Prefab that setups the most commonly required post-process effects (PPAA, HDR, etc).

Typical PP effects:

{| class="wikitable sortable" ! Effect ! Priority ! class="unsortable| Description |- | SSR | 0 | Screen space reflection |- | HeightmapAO | 1 | Voxel ambient occlusion used for trees and rocks |- | GodRays | 2 | Fog effect (screen space) |- | UnderWater | 3 | Effect for underwater scenes |- | Rain Effect | 4 | Rain effects in the scene |- | {{n/a}} | 5..13 | Unused range left free for game usage |- | SSDO | 14 | Screen space diffuse occlusion |- | HBAO | 15 | Screen space ambient occlusion |- | HDR | 16 | Camera setting |- | PPAA | 17 | Post-process antialiasing |- | {{n/a}} | 18 | {{Icon|unknown}} |- | Noise | 19 | Night noise (to prevent brightness/gamma advantage - uses {{Link|enfusion://ResourceManager/~ArmaReforger:Common/Postprocess/NightNoise.emat}}) |}

=== Weather ===

<div class="float-right"> {{Feature|important|2= Be sure to properly set the Geographic Coordinates:

{{{!}} class="wikitable align-center" ! style="min-width: 3em" {{!}} ! Latitude ! Longitude {{!}}- ! + {{!}} North {{!}} East {{!}}- ! - {{!}} South {{!}} West {{!}}} }} </div> In the '''Resource Browser''', search for {{hl|WeatherM .et}} to drag and drop a {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/World/Game/TimeAndWeatherManager.et}} entity in the world. * In its '''Weather State Machine''' field, set the {{Link|enfusion://ResourceManager/~ArmaReforger:Terrains/Common/WeatherPresets/StateMachine/WeatherStates.conf}} config. * In its '''Weather Parameters''' field, set the {{Link|enfusion://ResourceManager/~ArmaReforger:Terrains/Common/WeatherPresets/WeatherParameters.conf}} config.

Set the weather by opening the '''Weather Editor''' by its icon (a sun behind a cloud) in the main toolbar. * Click "Enable Preset" * Set the '''Preset File''' field to {{Link|enfusion://ResourceManager/~ArmaReforger:Terrains/Common/WeatherPresets/StateMachine/WeatherStates.conf}} config. * Set the '''Master Cycle''' field to e.g {{Link|enfusion://ResourceManager/~ArmaReforger:Terrains/Common/WeatherPresets/StateMachine/Items/Variant_Clear_items.conf}} config (along others in {{Link|enfusion://ResourceManager/~ArmaReforger:Terrains/Common/WeatherPresets/StateMachine/Items}} directory).

=== Local Environment Probe ===

In the '''Resource Browser''', search for {{hl|envp .et}} to drag and drop an {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/World/DefaultWorld/EnvProbe_Default.et}} Prefab in the world to properly capture local reflection / diffuse.

== AI Setup ==

A world needs some elements for the AI to behave as expected: * an AI world provide navmeshes to AIs for them to navigate the world; drag and drop {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/AI/SCR_AIWorld.et}} in the world {{Feature|important| Only '''one''' AIWorld-type entity can exist in the world; the present AIWorld can however contain multiple {{Link/Enfusion|armaR|NavmeshWorldComponent}} in order to hold multiple navmeshes. }}{{Feature|informative| See the {{Link|Arma Reforger:Navmesh Tutorial}} for more information on how to create, and {{Link|Arma Reforger:Navmesh Tutorial#Usage|setup}} a navmesh. }} * a faction manager is required to make the AIs understand their affiliation and enmities {{Feature|important| A faction manager requires a '''game mode''' to work.<br>Drag and drop e.g {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/MP/Modes/Plain/GameMode_Plain.et}} (or any game mode in the {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/MP/Modes}} directory) for a simple game mode. }} * a perception manager is required for AI spotting, fighting and understanding its environment; drag and drop {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/World/Game/PerceptionManager.et}}

{{GameCategory|armaR|Modding|Terrains|Tutorials}}
js7jpn58rw9sds35quboxcpjo4kikga

# Arma Reforger:Terrain Tutorial

5050
47282
378068
373306
2026-02-06T12:25:16Z
Lou Montana
10739
Fix L3DT link (main page is down)
378068
wikitext
text/x-wiki
{{Feature|informative|This article was originally written by '''blud''' and published on {{Link|https://reforger.armaplatform.com/news/terrain-tutorial|{{arma}} Platform}} in 2022.}}

Welcome to a guide to efficient terrain creation workflow in Enfusion Tools for {{armaR}}. Terrain Creation is possible '''only on PC!'''

Before we begin - you will need these basic tools:

* {{Link|https://store.steampowered.com/app/1874910/Arma_Reforger_Tools/|Enfusion Workbench}} * an image editor like Photoshop or Gimp or similar; even Paint can be used, but it will not be very easy * a plan * free time in the foreseeable future to be able to make your dream project * a browser window opened on {{Link|Category:Arma_Reforger/Modding/Official_Tools|the BIKI section on World Editor}} * a third-party terrain generator like {{Link|https://www.wysilab.com/|Instant Terra}} (my personal favorite) is next to essential and will save an enormous amount of time. ** {{Link|http://www.bundysoft.com/L3DT/downloads/standard.php|L3DT}} was the most popular one for {{arma3}} terrains but seems to have been discontinued or abandoned now; hopefully, there are many different ones.

== Goals ==

* teach workflow * to get the best terrain in an iterative way * if multiple people, use repo * artistic approach

The goal of this guide is to be a suggested, efficient and fast workflow in order to create a terrain for Reforger; this workflow is as close to the Bohemia Interactive environment team's as possible, translated down to how a single person or a couple of friends can make terrain on their own.

This should help you obtain a fully playable terrain iteration quickly, which you can endlessly refine and iterate on as you want. Making a terrain that is good quality and works as it should takes a long time but making a playable one you can use as a platform to develop on can be very easy. You will need to adapt your workflow to the number of people with whom you intend to work if you are not working alone.

{{Feature|important|It is recommended, whether working in a team or alone, to use a version-controlled repository to be able to cooperate and revert at any time.}}

We will be following an artistic approach where the objective is to get as many puzzle pieces on the table as possible and then arrange them as we need as per our requirements.

We will try to get rid of as many tedious parts (depending on the type of location you are making) as possible by planning ahead.

Anybody with some artistic inclination will find this workflow familiar as everything we do translates to painting a picture, including setting up the canvas.

This guide will assume you are using a vanilla asset and texture libraries and will not be covering making your own structures/textures or working with modded content.

{{Feature|quote| You should be in the official {{Link|https://discord.com/invite/arma|{{arma}} Platform Discord Server}}. All the information in this document and much, much more has been discussed and expanded upon there, and all the legendary terrain makers from the Arma community are in there, as well as the Arma devs. If anything in this guide is unclear, please post your question there or search the chat logs there for related things. There are no stupid questions when trying to learn. | blud }}

{{Feature|informative|This document does not cover the in-game 2D map view - see {{Link|Arma Reforger:2D Map Creation}}.}}

== Vocabulary ==

The word '''Map''', as used in this document, refers to an ''image map'' with data but also to a picture file with a shape or gradient that is used to define various elements of the terrain itself. Examples are height maps, satellite maps, etc.

The '''Terrain''' is what you will be creating and sculpting.

The '''World''' is the container to the terrain, entities, and other components (e.g., Weather).

== Terrain Data ==

The absolutely most important thing before we start making our terrain is understanding the data that goes into it. There are three main components: Heightmap, Rasters, and Layers.

=== Height Map ===

Also called {{Link|https://en.wikipedia.org/wiki/Heightmap|height field}}, {{Link|https://en.wikipedia.org/wiki/Digital_elevation_model|Digital elevation model}} (DEM), and other words that are interchangeable for our purpose, this is the data that defines the shape of our terrain. You can also get rasterised height data from various sources, but we recommend converting those using a {{Link|https://en.wikipedia.org/wiki/Geographic_information_system|GIS}} program.

This guide will not cover sourcing real-world data.

In the game engine, the height map is a coordinate system with fixed squares, and the only variable is the height.

There are many places to get hold of real-world data. Licensing and rules will apply to each one. Some software can download and convert various data, including roads, as well as a heightmap and sat imagery, and other vectors that can help you.

This will require knowledge beyond what this document is intended to provide.

The first place to start looking into real-world data would be to use {{Link|https://www.qgis.org/en/site/|QGIS}}, {{Link|https://www.opentopography.org/|OpenTopography}}, and other various software that can work with such data, export it to formats that Workbench's World Editor can read, and you can use that as your foundation.

It is entirely possible to start out with a totally flat ground plane in Enfusion and sculpt everything by hand, but this is not recommended. You should at least look into using software designed for generating or sculpting game terrain landscapes.

The sample island files already include a height map we can use for this guide.

==== ASC Format ==== The ASC format is a text-based file format that simply stores these coordinates. With it, we can import and export the data between different software, make edits to small areas and import them back into Enfusion and every little detail except the area that was changed remains the same.

==== Image Format ==== When using an image format for this, the data is not lossless, and colour curves and colour space are things that affect it. Many editors work with image files for this purpose.

{{Feature|informative| Due to the scale and detail level of Arma terrains, ASC is preferred because it is the best at retaining detail losslessly over unlimited iterations and using multiple tools. }}

=== Rasters ===

These are your SOURCE image files that distribute surfaces onto the terrain geometry and your satellite map or your height field if you are using an image format for this. When these are imported, they will turn into data that the game can understand.

This happens entirely automatically, and in this process, your source rasters are turned into the textures we see in the game.

In some cases, we can also export this data so it can be processed inside another software. We will cover this later when we start setting up our first terrain.

Rasters are image files, usually TIF or PNG. When the tools import these, they are turned into smaller files that the game engine itself reads when showing the world on your screen. This is why we refer to rasters as source files, and the terms are often used interchangeably.

The '''satellite map''' in Enfusion has a slightly different purpose than in {{arma3}}.

In Enfusion, it simply provides the basic colour of the land (albedo), as the engine does all the shading itself. There should be no actual satellite images used on your final terrain, but it is great to use one as a template for where to place objects when making a terrain based on the real world.

More on this later.

The most important rasters are the surface masks. These are big, grayscale images that define where each surface, grass, rock, forest, asphalt, etc., is painted on the ground. This works where black means 0 coverage and white means complete coverage.

The masks are much more powerful than before since the distribution is in a range from 0 to 1 and not like in {{arma3}}, where you either had one surface or the other.

Here the surfaces can be blended and mixed, but there are limitations.

Most importantly, '''each block can only have 5 surfaces total,''' and 5 you can pick depending on which are used in the surrounding blocks. We will expand on this later in this document.

The sample island files contain a basic sat map.

=== Object Layers ===

The layers are text files that contain all of the information about the objects you place, the terrain configuration, and all the generators like forests, roads, water, etc. Each layer created in World Editor is one file.

The default layer should, by convention, be named "default" and contain only the parts that are required for your terrain to work. More on this later. You should never use the default layer for object placement, generators, and the like.

Toponyms should be in their own layer.

Each settlement should ideally be in its own layer, but some overlap is natural.

It is very important to keep your layers neat and tidy. Especially when working with others. ''When cooperating with others, it is important that nobody works in the same layers!''

=== Data Management ===

It is very important to set up data properly before you start so that you can keep track of everything. Here it is vital to separate your source data and your game data.

It is a good practice to keep your directory structure close to this setup:

{{Feature|informative| * It is important to '''never''' keep your projects inside the Game or Tools directory — these are "temporary" directories than can be cleared/corrupted by Steam. * The project files can be in any directory; the default Workbench mod directory is '''%userprofile%\Documents\My Games\ArmaReforgerWorkbench/addons'''. }}

In our case, D:\MyModProjects\MySweetTerrainMod\ is the root folder of the project. If you have additional directories for your mod with textures, models, etc., you should place them here.

\Sourcefiles\ is where all the source data goes. You should put all your source rasters, Photoshop files, etc., in this folder. Every time you edit rasters in another software, they should be saved and kept here. The data that Enfusion Tools generates inside the game is made from this data. Keep your source texture files and rasters here. You can also use this folder to save your related Photoshop files and research, and anything that belongs to the project but is not included in the game files.

The source folder should always contain the most recent edits of masks.

Remember that if you re-import a mask, you lose all the surface painting you did, so remember to export the latest changes before you edit them in other software!

\TutorialIslandMay\ is where the game file "addon.gproj" should go. It is where we save our files in Workbench. The Enfusion Tools save goes in this folder and will create the needed subfolders when you import your rasters. Its name does not matter.

{{Feature|informative| All the files in this directory '''will''' end up in the mod files - think of the file size; keep the sources away from the gproj directory. }}

== Project Planning ==

With Enfusion's new tools, we can make terrains much faster and more efficiently than before. The most important part is what to prepare for and in what order to do things.

For the first-time terrain maker, it is important to start small. Your first terrain should be a test platform where you learn how everything works. This test project can also help you troubleshoot later should anything break!

Even if you are using our sample source files to learn the process, it is a good idea to keep them around when you plan out your big dream project after learning the basics.

Since we do not have the major logistical problems of RV/{{arma3}} in Enfusion, we do not have to wait for hours to see our terrain in-game and walk around on it. Everything else is also much more efficient. We no longer have to include waiting for hours in our workflow. You can place a nice village layout in a few minutes, walk around and see how it feels, then start adding the details. A few hours later, you can have a complete village with dozens of houses and gardens that look great. You can place a village, houses with yards and gardens and driveways, press play, and then test it right away on foot in-game.

=== Research ===

At Bohemia Interactive, we do major research long before we start actually working on a terrain. This contains all the information we need to start laying it out. This involves cultural, logistical, flora, fauna, biome, geology information, and anything particularly important for the area we are (re)creating. Most often, our landscape is taken from the real world and adapted to our needs, like turning inland into islands or taking one side of a river valley and turning it into a coastline (Chernarus). We will also most often scale the real data down to manageable sizes, as well as to fit within the limitations of the engine. For instance, using a 40m resolution source dataset will require a lot of processing to look great when resampled to 2m resolution, which is the target in Enfusion.

Gather reference imagery, and read up on the science of why a particular landmass is how it is. If you are creating a real-world location in any way, combining or freehand working, you need reference imagery. We use thousands of those. Research is the most important job of the environment designer, other than the ability to work with the tools in order to make a good terrain.

== Terrain Files Setup ==

In Enfusion, it is not important to have any of the source files in the same resolution. Each surface has one grayscale mask, which can be resampled on import, exported, edited, and re-imported at any time we want. Just remember that with the masks, any surface painting you do will be lost if you do not export the latest versions.

=== Height Field Import ===

Similarly to {{arma3}}, we recommend using the ASC Format in the Workbench.

These are the settings for our sample terrain files: {| class="wikitable" ! Parameter ! Value |- | Planar resolution | 1.5m |- | Block | 33 × 33 vertices (48 × 48 m²) |- | Tile | 129 × 129 vertices (192 × 192 m²) |- | Total | 8193 × 8193 vertices (12,288 × 12,288 m²) |- | Height resolution | 3.125 cm |- | Height range | -204.781..1843.188 m |}

These are similar to the ones used on Everon and we recommend staying as close to them as possible.

{{Feature|informative| We do not recommend going too far from the values internally used, as engine-side optimisations and QA are done with our particular settings in mind, and some edge-cases may appear in unexpected scenarios. Things may seem to go well at first, and you may get quite far in the progress before noticing the settings do not work for your case (e.g., too big file size, height steps, minimal value on a terrain with big altitude differences). If values different than set standards are required by the wanted terrain, be sure to experiment extensively. }}

If you are importing your own data instead of using our example terrain, try to aim for a 2m resolution. This is what we use, and you can be quite certain it will work for your terrain too. Having a lower resolution may imply problems such as imprecise distant terrain LODs, objects appearing to hover on distant terrain, rivers, and roads being more difficult to implement, the less ground detail you have, etc.

Our structures and other terrain assets are also designed to fit in a 2m terrain grid (e.g. the church crypt or the water treatment plant). With 3m resolution, these can be very hard to place and impossible at 4m without holes in the terrain.

{{Feature|important| * Always save and reload your world in World Editor after importing your height field. * Pay close attention to the upper right corner of World Editor every time you save - do not work on the terrain while this loading bar is displayed: once it has disappeared, reload the terrain. }}

=== Surface Mask Setup ===

==== Main Usage ==== We have included some masks in our sample terrain. These cover basic nature. To use them, we must first add some surfaces in our project to which we can assign the masks.

We can find the surface files for Everon in the Reforger game files using the Resource Browser. We start by using a proper surface for the default one. The default texture always covers every block 100%.

If you remove a surface, the default one is the one that will show up instead. In our test project, the default one is {{hl|rock_01}}, so go ahead and right-click the default to replace the surface.

The rock one is used as that is the bottom one and the second most used texture.

Grass grows on top of it, so we will add grass_03 to it as the second surface.

Grass_03 is the surface we use for wilderness on Everon.

Next, we will '''add''' more surfaces in the order we would like to have them - this is a personal preference based on terrain and usage. For our example terrain, we want them as shown above.

Now go ahead and '''import''' the example project masks, each to their respective surfaces, by right-clicking and choosing "priority surface mask import."

{{Feature|informative| It can be tempting to look around already, but you should save your terrain and reload it again first.<br> Remember: let this finish before you do anything else! This is the only annoying waiting we have to do besides AI navmesh generation. }}

There are some very important things to know about surface masks:

You can have a '''maximum of 5 surfaces''' in each block. Blending more than two or three can be difficult. Which 5 you can use also depends on which ones are used in the surrounding blocks.

We recommend only using 3 basic surfaces to start with. Use those when generating your first masks, whichever way you choose to do so.

In the terrain tool, you can hover with the mouse using the "Info & Diags" panel to get all the information you know about each block.

Right-click the surfaces in use in your currently selected block, and you will find functions to replace or merge them with other surfaces. It is recommended to spend some time at this point to get familiar with how to paint and how the different surfaces work together. Try painting some random surfaces on our sample terrain to familiarise yourself with how this works. When you have 5 in a block, try to merge them, etc.

{{Feature|quote| I would recommend limiting yourself to 3 surfaces on the whole terrain when generating your masks using external software. It may not seem like a lot, but it is much easier to handle the next surfaces and to blend. Select the most prevalent natural surfaces in your biome and try to generate nature using those. The less we have to juggle mask limits around later when we start working on the detailing later, the better. It is faster to brush something by hand than to manually fix saturated areas afterward. Another tip is if you have to generate complex surface distribution, roughly paint it out on your map using a giant brush and then export those. This is only to map out all the areas with the most important surfaces. Then use them to crop the masks you generate in other software to make them fit your needs. It is fully possible to generate all the masks, but it will take an enormous amount of planning and unlikely to be worth the time. | blud }}

==== Secondary Usage ==== Now that you know how masks work, we will use them for their secondary purpose.

Creating a rudimentary satellite map with which to start is easy and should not be given much effort. In most cases, if your terrain is in a temperate climate with green vegetation, you will have enough at this point with simply an image that is coloured the same hue of green as your most common surface.

Usually, {{hl|grass_03}} and {{hl|Ground_Granite_01}} are used for the generic wilderness. The *middle_BCR of these surfaces looks like this:

On our sample sat map, we have used these as a pattern to cover everywhere that has basic grass and rock.

Using any terrain generator software, you can extract data to 2D, such as slopes and convexity/concavity, as well as height from sea level and such. This is very useful for creating 2D masks for surfaces like bedrock or sand.

Later in the workflow, when we have done more mask work and started detailing, we will go back to the sat map and add the things we need to make it look nice at a distance.

Quick satellite map in a few steps:

# Import the mask for your grass and the rock mask into Photoshop or any other image editor, each in their own layer in one document # Fill each of them with the average colours of the images above. (Or define the middle_BCR of the surfaces as patterns in Photoshop and fill with those) # save as png

We already did this for you and provided one already made in this way with our sample terrain. You can import that one in the next step.

{{Feature|quote| If recreating a real area, use the satellite image for your data location as the template to place objects on. If you are using our surfaces, you can blend this grass pattern with your sat map, and it will match a little better with the distance blending by overlaying it some 90% or so in Photoshop. If you are approaching this from {{arma3}}, forget what you know about satellite maps. More on this later in this document. At the end of this guide, there will be some tips for making the final version of the satellite map after everything has been placed and we are happy with our terrain! The final satellite map should be the very last thing we finalise for the release version of our new playground. | blud }}

You can go ahead and import the sat map for our sample island from the source files folder now.

==== Import ==== Importing a satellite map is done with the World Editor's Terrain Tool.

Select the location of the sat map, use the settings above and click OK to begin.

It will now recreate many material files, which can take a while, so pay attention to this progress bar in the upper right corner until it is complete.

Again, '''wait until the progress bar disappears''' before doing anything. Save your terrain and reload it again.

==== Normal Map Generation ==== In Enfusion, the normal map is regenerated every time you do anything that affects terrain normals, and you save your project.

If your height map is 2m resolution, you can have the same or many times higher resolution, and the normals will look the same; this is because the engine uses the height field to generate the normal map, and at this point, with our current implementation of normal maps, it will only ever be the same resolution data as the height field.

You only need one texel per vertice in the terrain mesh. ''Any extra resolution in the normal map is simply wasted space on your drive and in the mod size.''

Save your terrain and let this finish before you do anything else, and we will move on to the fun part! Reload your terrain, and we will now move on to the fun bit. Placing objects! It is recommended to backup your project now.

== Order of Operations ==

It is important to have a good method and workflow. Since we will be making a freeform terrain, we must first decide on all the components we will be adding. This is referred to as high-level design. Here at Bohemia Interactive, this starts long before the first prototypes of the terrains are made. At this point, we decide what sort of nature, biome, what kind of towns, industry, infrastructure, and everything appears in our creation. Having all these things on paper before starting saves us from having to redo things and adapt later. If you are recreating a specific real-world area terrain, your approach will be different as the high-level design already exists.

In our example terrain, one settlement is already planned out, nature has been designed and generated on the whole island, and all we have to do is fill in the blanks as we want them. It is never a good idea to process a terrain by completely finishing one area and moving to the next. Gauging performance issues will be impossible this way and must then be solved later.

Always start with the big things, like forests and settlements. If you need a major city, fill the area with structures of even spacing. Do not worry about pretty or functional for now.

We will add all the small details and cool things later when we have our whole project working as a concept. The processes are explained later in this document.

=== Layout ===

* structures location & placement (docks, power plants, etc.) * village location & building placement * seabed landscape preparation

=== Population ===

* {{Link|#Road Network}} * {{Link|#Forest Generators}} * {{Link|#Water Bodies}} * {{Link|#Rivers}} * {{Link|#Powerlines}} * {{Link|#Shorelines}}

=== Good Habits ===

There are many things to pay attention to and to do in order to avoid trouble later. Here are some.

Save often! If you create a polyline shape. Nice and detailed to match your settlement or such, SAVE! You do this before you apply the generator in case something goes wrong. If you put in weird parameters or anything crashes, you will still have the shape and will not have lost much time other than reloading your project. {{Controls|Ctrl|S}} must become a reflex.

Backup as often as possible through your repository system or eventually copy the whole directory somewhere else. Preferably after each long work session. Did you back up your project yet?

Backup again. You can never have too many backups. Even of the individual components we added to the world when starting out, masks, etc., it is useful to back up your masks to files after every working session just to be on the safe side.

== Entities Placement ==

Sketching out settlements/infrastructure/nature help to anticipate and solve performance implications, along with being a design template to be filled, following the usual steps: Concept → Prototype → Alpha → Beta → Final.

Our Example Island has examples of most generators, sketched-out beginnings of settlements, and other things already in place.

Feel free to share it with your friends, build on it, raze everything, and make it entirely your own as a practice ground.

=== Vector Tool Practice ===

The '''Vector Tool''' is our best friend at this stage. It will be used for everything except deciding where buildings will be in this stage of the work.

See {{Link|Arma_Reforger:World_Editor:_Vector_Tool|the Vector Tool wiki page}} for more information.

The important thing to note here is the difference between Splines and Polylines:

* The Spline is generally used for roads, rivers, streetlamps, crash barriers, and things that have to follow a smooth curve * The Polyline is used to define more linear features as well as outline larger areas for use with forest generators, fences, curbs, and other things that are placed along a straight line.

Play around with the features for a bit. Try creating a polyline and a spline and see how they behave. Try selecting a vertice (point) at the end of one of them, hold {{Controls|Ctrl}} and click somewhere else to create another point, and draw the vector between.

Here we can see a forest generator on a polyline shape where the vertice is not snapped to the ground. This can be confusing as the generator distributes objects only in a two-dimensional pattern. Selecting a vertice like this and hitting the Snap to Terrain button will fix it.

{{Feature|informative| It is always useful to pay attention to terrain-snapping, you will usually want it turned on, but if you are using a road generator and want the terrain to follow the road vector's elevation (with the '''Adjust Height Map''' option ticked), you need to disable this setting. }}

The Snap To Terrain button is used to put the currently selected vertice(s) to the ground below it.

The next steps require that you have practiced a little with the vector tool, as all the generators are applied to either splines or polylines as you place them.

Our sample terrain has all the basic generators already placed, and you can have a look at those and modify them to see how they work before you read further.

=== Buildings and Structures Placement ===

'''Putting in some random houses''' where we will need specific facilities, villages, camps, farms, and other areas is a good way to get started in zoning.

Go over the whole terrain and put down all the major buildings you think will be needed. Do not worry about the details or exact positioning because the big picture is the important thing at this stage.

If you want to be extra efficient, paint down some surfaces like crop fields and meadows, and put asphalt down to cover your industrial or city area. Quickly brushing them approximately where the farm or other site will eventually be is the goal.

Doing this early will also help us with future mask work in the settlements, where we then simply need to add the details.

See a spot and want a nice village here later? Put down a number of houses approximately where they should be with enough spacing for future gardens and such details.

Add some patches with cobblestone ground texture or asphalt where you just put that supermarket object; then add a few roads in different directions in a reasonable pattern. Move on to the next area quickly.

See a good location for a beach resort? Put in some cabins and shacks there. See a mountain that definitely needs a radio tower? Go ahead and place all these landmarks now in their future general location.

Lighthouses are important. Research how they work in the real world and place them according to what you learn. Do not bother with the details yet. This will help us get an idea of how to connect things, and our terrain will feel lively already from the start.

We may need an airport somewhere. Our sample island already has the basis of one laid down. Did you make a harbor/port yet? We will put one here.

We will start by placing some of the buildings we need in the area and then put in the quays and piers.

Our high-level design states this area needs to be a fishing village.

The first thing to do is level the seafloor to make it deep enough that ships could actually go in there. This is easy with the "Sculpt and Smoothing" tool. {{Link|Arma_Reforger:World_Editor:_Terrain_Creation_Tool|See the wiki}}.

We will use the naturally sheltering shape of the landscape to plan our small port. The docks and piers will follow the general shape of the cove, and then this will dictate how the buildings are placed around it. We start by leveling the terrain so that the piers can be connected to completely flat ground.

Simply raise the terrain with the sculpting tools, just on the corner of the pier object, then use the Flatten tool to repeat this height so that we can blend the objects we insert properly:

Select the Flatten tool, hit space when the cursor is at terrain with the wanted height, and you can now paint that height level where you need it. Play with the radius and falloff angles.

We can already see a small village and fish packing plant taking shape, and the area shows purpose.

Once we have the basic layout and number of houses placed, we add the surfaces we will need in the future quickly with a brush.

Doing this is particularly helpful to people who use a terrain generator as part of their workflow, as this will help map specific-surface areas and avoid having to clean up blocks.

The idea here is to get the most important features in as quickly as possible, serving as a draft for future iterations.Now, we can move on to another area and bring it to the same level. We will refine the area in later passes of our workflow.

{{Feature|quote| It is a long road, and we want to have the rewards in the form of visible results as often as possible. When we start roughly sketching out, we get a full picture developing early, and adding details can be done very efficiently. It can be very disheartening to work for many, many hours on a single spot, only to look at the rest of the terrain that has not even been started yet. Do not ask me how I know 😉 | blud }}

This brings us to...

=== Road Network ===

'''Laying out the road network''' is our next step. Now we connect all the settlements, factories, farms, and villages we sketched out in the first step. It is not important to be accurate at this step. Simply lay things out so that you can, at the very least, drive on the roads. Intersections will be made nicely, and details will be added later. It is ok if you can drive on the roads, but they do not even need to connect at this point. Basic playability should be fine. You can also add temporary generators of sidewalks on them where needed to just have them there already. The sidewalks will need to be adjusted by hand later anyway, which saves you from placing them later.

Making the road network drivable from the get-go is good but do not go overboard with details yet. The goal is to simply place all the roads in working order on the whole terrain so we can playtest a little by going for a drive...

=== Forest Generators ===

Now is a good idea to place a bunch of '''nature generators''' on the whole terrain in the basic shapes you want for your forest and different biome. Sketch out your rough forest shapes and add generators to them. Keep in mind that these can be very expensive when covering a large area, and many clearings and open fields must be made. This is the part of our project where we must find the balance between performance and object count. It is not important to make these perfect at this time. The goal is to populate the terrain with the approximate object count it will have in the future. When we go into detail areas later, we will refine each of them.

{{Feature|important| If you are painting over a satellite image you downloaded from somewhere, doing just very general outlines or exact shapes is up to you. Both can save you time in the long run, depending on your approach, but in the case of recreation of a real area, it is probably best to do it right from the beginning. It is very likely you will have to make compromises since forests can be very performance-demanding. }}

This forest shows the optimal forest setup. The roads and power lines interrupt the trees dynamically if you turn on the option in the forest generator properties. The outer border of the forest is adjusted later when we refine the area on a detailed level.

We can select points on the vector and disable the forest generator parameters inside the vector tools. Each point has these flags, and they will toggle the undergrowth on the edge of forests. In the previous example, these are both disabled inside the clearing to make it look clear-cut and recently lumbered. There has not been enough time for undergrowth and wilderness to reclaim the area.

{{Feature|quote| It is beneficial to have a lot of terrain height variation because the terrain acts as an occluder very effectively. A very large flat area (Kilometers) covered in a forest will not run very well as all entities will have to be rendered at once. A flat landscape can have much, much worse performance with the exact same object placement as one with rolling hills and mountains using the same object count due to the terrain blocking the view of other objects, hence preventing their drawing.

Forests cresting the horizon or hills will be more demanding than bare hilltops and ridge lines. These are important optimisations the designer must consider. It is good practice to have the wilderness between settlements be either in one collective layer or split into sections named after major natural features such as {{hl|Forest_East}}, {{hl|Mountains_West}}, {{hl|Shorelines_NE}}, {{hl|Coves_East}}, etc. Generators are meant to cover a large area with vegetation, rock combinations, or anything you need to distribute semi-randomly on your terrain. It is, however, recommended to keep each generator a certain size because we will want to adjust them later in the refining phase of this workflow, and too big shapes with generators can take many times longer to fill than many small ones. Besides, we will not want to use the same prefab all over and have a totally uniform forest everywhere, either, even if it is a large forest. A few hundred meters in each direction per shape is a good size to aim for in making a large forested area. Plan ahead and experiment with these important things early. It will save you from the worst of the headaches you can encounter in making terrains! | blud }}

=== Water Bodies ===

'''Lakes and ponds''' are super easy. Find a nice spot for a waterbody, draw a polyline around, drag a pond or lake prefab from the Prefab Library, and BAM – our lake is done!

Now we just need to spice it up a bit by adding the necessary flora that enjoys a wet environment. For the lakebed, we simply brush the shape with a big brush following the shoreline, using an appropriate ground surface, rock or sand, etc.

It is good practice to keep the polyline shape for the ponds entirely flat. If it is very uneven, unforeseen things can happen. If your pond looks weird, try reversing the polyline, it is possible that your lake is facing upside down.

{{Feature|quote| You can easily make a dam if you want! Just draw a spline spanning a gap in a valley and use a wide offset on the "affect terrain" part of the road generator. At least as wide as the dam will be deep. Put a lake behind it, and you have a dam! | blud }}

=== Rivers ===

It is pretty simple to make '''rivers'''. Start with the vector tool, make sure snap to terrain is turned on, and place a spline where and how you want your river. Make sure to add enough points that you can make it snake along the low ground of the terrain nicely.

Next, add a '''road generator''' to it, preferably the dirt one from Prefab Library. Make sure it has the '''Affect Height Map''' checkbox ticked in the road generator properties. Now we will use this road to deform the terrain and make a nice riverbed.

In the vector tool, turn off snap to terrain and click select all. It will now have selected all the nodes in your vector, and all we have to do is move the whole thing down in the terrain half a meter to a meter, depending on how wide and deep we want our river.

Experiment with the falloff in the road properties to make a profile you like. Whether you want steep or easily fordable river banks.

Now go into Prefab Library and pick a river prefab, and drag it onto your spline in the hierarchy. Does the river flow upwards? You can reverse it in the river generator properties.

Now simply select a round brush and the surface you want in your riverbed and paint along the spline with a brush slightly wider than the river - you are done!

When the river shape is entirely done, select the road object, go into the Terrain tool, and bake the road to the height map.

Now the road can be deleted. If done properly, the terrain that was deformed by the road generator is now still deformed, and our basic river is complete.

We will make it look nice in later stages when we have already put down all of our basic rivers where we want them.

When you place rivers, you can use the function in the picture above to regenerate the terrain flow maps, which will alter the way the water flows. More on this later when we start detailing our terrain.

There are many parameters to modify how the river works. Notice the object properties when you have the spline and child object generators selected, respectively.

Since a river normally flows from a water body or simply comes out of the ground as a tiny stream, we can recreate both of these by camouflaging the river with object placement.In our example terrain, we made a dam and used culvert objects from which the river can start.

=== Powerlines ===

Creating '''Power lines''' is a very good next step.

Lay out your power grid loosely between every area that needs power. There are different types for different usage. A farm will, for example, not have high-voltage lines connected to it, but it is very likely to have high-voltage pylons in the farmer's fields just to annoy him when he plows.

When placing power lines, we want them to span gaps in the terrain, if possible, from peak to peak. We can set the generator to place a pole exactly where we need it!

With the Vector Tool activated, select a point and enable "Generate Per Point." It should now put a pole exactly on the point.

This is also how to make angles where the power lines need to divert because something is in the way. Roads and intersections, structures that were there before the power lines were laid out, and similar.

If your power line crosses a road and you get a power pole on it, simply add a point next to the road and do it like above. The generator should then figure out how to make space itself.

It is not important to put them in very neatly at this point. Just put them in between settlements generally where they will be needed. We will tidy up the ends later and adjust the middle sections as we work near those when we do the final detailing of our terrain.

The idea here is to quickly put the assets and generators in the world. If you need to run power lines through the forest, no biggie, just turn on the avoid power lines flag on said forest generator, and it will make room for the powerline after regeneration.

See the following pages for more information:

* {{Link|Arma Reforger:World Editor: Powerline Generator}} * {{Link|Arma Reforger:World Editor: Powerline Generator Tutorial}}

Now backup your project if it is not done already!

=== Shorelines ===

These are so varied and involved that writing a single segment about them will increase this document by many pages. Most elevation data to be found on the internet will not have bathymetry (underwater landscape), and it is mostly necessary to make this ourselves.

On our sample terrain, the beach was quickly sculpted by lowering the terrain in the bay and using a smooth brush. When sculpting terrain, work large first. Use the Flatten tool to get the basic depth, and then use smoothing and different brushes to create some variation. You can also use a big brush, flatten the rough max depth area of your bays and coves and general coastline in one pass, and then work over it with the smoothing brush in a second or third pass.

Then, add details as you work on object placement in each area when refining your areas in detail later.

It can be very hard to make the underwater and shorelines look good. We have provided an underwater set of our rocks to help us make the difference better on the shoreline. It is recommended to make your own generators with how to place things underwater if you need them. There are also decals to be used on splines with road generators to crate beach debris.

The seabed surface mask is quickly painted with some random brushes. It can be generated with simulations in external editors too.

Creating underwater landscape and terrain mesh/height data should be done at a source file level, and third-party software solutions will be needed.

== Final Details ==

(Beta stage, maybe?)

'''In this phase,''' we will detail all our areas. Now we finally move the houses we placed earlier to where they should be. Line them up into nice streets and add the sidewalks and streetlights etc. Now we paint all the details that go with our properties and areas. Add lawn grass, driveways, etc., by painting them. Now is the time to place all of the sheds and flowerbeds in gardens. Make your special zones with your crazy ideas. Add military bases and all the fun stuff. This is the part of the project where we go into super close detail. Also, in this stage, it is good to work big picture first. Try to make every settlement or site consistent in detail. Example: Do gardens in one village, then do all the gardens in the next one until all gardens are pretty equal across the terrain.

We recommend planning your project and splitting it into some sort of milestone-based loop where you repeat this stage until your terrain is uniformly complete. It is a nice goal to work towards having consistent levels of detail as well as playability over the whole terrain. Particularly when making terrains for the community, where players have access to the terrain during development.

{{Feature|quote| Internally, at {{Name|bi}}, each major area with a person responsible for it will have a separate concept-alpha-beta stage where the playability is analysed and improved in different passes where the area gets work. We refer to this as refining, detailing, or refinements. Near completion, each area gets a form of data lock where only bug fixes are allowed to be made while work on the remaining areas is being completed. Features are no longer added, and ones that will not be finished in time are cut. You never want to end up with some places super detailed and some places nearly empty if it is avoidable. For a community project where the terrain is being developed and publicly playable at the same time, it is good to consider this whole segment of the tutorial as a loop you repeat for every public iteration of the terrain. Exceptions would naturally be areas where players would stage for missions etc. Areas that are unique to the terrain, such as airports or strategic areas. You will want these playable early, but do not go overboard. This is the way. | blud }}

=== Roads ===

'''Road details''' are done as soon as we have them where we want them to be on our whole terrain. We now pull together the vertices to make nice intersections etc. If you have trouble making the intersections work properly with heightmap integration, try adjusting the vertexes in your splines. There are many decal prefabs that are useful for making your roads look cool and getting rid of things like stripes and such. You can apply generators to add things like verge posts and street lights.

When placing roads, it is important not to use too many points. If you want to make a nice S curve or something, it is better to adjust the vectors properly or add a point where we need it later when we start detailing.

Remember to have "Snap to Terrain" turned on in the Vector tool when placing the roads (unless, as said before, you want the road to adjust the terrain under it).

It is best to make your roads using relatively evenly spaced vertices, even if they do not turn much. This is important if we want roads that follow the terrain more than cut into it. Sometimes we will want roads that are lowered between hedgerows.

Remember that when you use the terrain integration feature, the road follows the spline and NOT the terrain shape.

After you have your roads placed as perfectly as you want them, re-import your satellite map, and they will be rendered at a distance without clutter on them.

'''Intersections can be tricky'''. The important thing to pay attention to is that all the roads join approximately at a single point and that they are all at the same height.

Making sure to flatten the terrain so that it is completely level where you want the intersection. It is much easier this way to make it where the landscape is not totally flat.

We will add decals and make the intersections even nicer and more detailed. Do not go overboard. Try to use them to cover up blemishes and make it look like in the real world where repairs have happened. Phone cables were buried, potholes were fixed, and maybe some cracks.

Add manholes and patches, speed signs, crosswalks, etc.

Remember to re-import your sat map every time you do some major roadworks so that the roads are added to the distance, and the clutter gets occluded!

The basic fuel station was positioned earlier. Now we line up everything and add the small details we need to make it look used.

Now we add all the small details on a consistent level in each settlement: sidewalks, crosswalks, benches, all the small things. Add street lights at an interval that suits you. Make sure to set the time to night every now and then to see how the lighting looks when it is dark!

It is highly advised to paint all surfaces at the same time as you adjust your houses to final positions and place fences and sidewalks and such. Line things up nicely.

Road signs, rubbish bins, benches, junctioning power lines, and roads. Fences, crash barriers. All of those things should be put in at this stage, and our terrain should be looking pretty awesome by now.

=== Rivers ===

The rivers use flow maps of the terrain shape and river depth to make the current flow.

This river bend looks rather boring and artificial. There are many things we can do to spice it up. One of the coolest is to make variations in the depth and width of the river itself.

As always, the big picture first: let's start by making some shallows in the terrain mesh, and then we will move on to adding objects afterward.

Make sure your river has been baked to the height map and you can now manually sculpt the terrain in the riverbed. Add some surface variation in the river where you want the differences. This is easily done by using the surface paint tool with a small brush with a soft setting. This is where artistry comes in. Get creative!

When you have something decent to start detailing, you can regenerate the flow maps and see how the river now reacts to your ground changes.

You can liven the scene up a whole lot just by adding a few rock objects in and around the river.

The small scene is done. Notice how the stream appears to flow around the objects, and the rocks look wet. Objects in the water will also affect the flow!

It is good practice to keep the manually placed objects to a minimum and use generators for the detail on the shore. You can finish this section of the river on our sample terrain.

=== Light Probes ===

Using '''light probes''' and probe volumes, we can create dark areas inside our terrain if we need to. We can, this way, make caves or hidden areas that do not get direct sunlight, and everything inside it is also dark.

This area looks suitable for a small cave. We start by flattening the terrain inwards into the landscape.

Cover the hole with some rock objects to hide the floor with some rock objects.

Find the env probe like above and drag it inside your new cave.

Find the '''ProbeVolume_Base''' prefab and drag it onto the env probe you placed previously so that it becomes a child object of it.

In the ProbeVolume's Object Properties, click '''set class,''' and we can begin modifying the shape.

Now use the '''Bounding Volume Tool''' to adjust the volume to cover the inside of the cave where the player should see darkness.

Be careful that the volume does not clip through your rock placement.

You can modify the Box Lerp setting on the probe volume properties to make a smoother transition to darkness.

Our basic cave is finished. We can now add some details to make it look like a mine or super-secret lair. Use vegetation objects, rocks, and your imagination to hide the entrance if you need to.

What time is it? You guessed it, backup time! Backup your project now. You also want to export all your masks and back them up too. We will use those files in the next step!

=== Satellite Map ===

Now that all our settlements have been placed, it is time to finalise our sat map. We start by taking all the mask layers we have painted, exporting them one by one as single files, and then adding them in an image editor, layer by layer, in the same order as in the surface painting panel in Workbench (opposite order when working with layers in Photoshop as the bottom layer is the first layer there).

The first layer should be the bottom layer because these are completely filled on every tile. Now we open up the middle_BCR files of our surfaces and fill each of our layers in Photoshop with the respective middle MCO textures. In Photoshop, this is easy. Open the file, select "all," and choose "define pattern from the menu."

Similarly, rock surfaces and wheat fields should be added. When all the surfaces are in, it is all down to how good you are with image editors in how to enhance the images. In the real world, many factors will add to the colouration of your surfaces. Fields will have brighter parts where the ground is drier, and where water accumulates, vegetation is generally greener and healthier. On Everon, such variation was added using other software to simulate hydration using generated flow and accumulation maps. These are added to the satellite map to create subtle but important variations.

There are many subtle artistic things you can do to enhance your sat map. The important thing is to have them very subtle, as you want them to match the mid-distance shading of your surface as much as possible. These are all the advanced photo editor tricks, and we will not cover them in detail in this guide as they are not at all essential to make a great terrain and are entirely done in third-party software.

Backup your project now.

'''Import your fancy new sat map''' in World Editor, and as usual, '''wait''' until it is done processing everything.

Remember this? Wait for that, too, before doing anything else. When it is done, reload your terrain, and you can enjoy the new distant look!

== Final Words ==

All done!

...but not really. There are still many things left to make the terrain 100% (most of it is up to your object placing and surface painting skills but not all).

Now we have a working terrain. Completely finished, or long-term project to build on... you may need further information:

* See the {{Link|Arma_Reforger:World_Editor:_Terrain_Preparation_Tutorial|Terrain Preparation Tutorial}} to know the basics of terrain setup * See the {{Link|Arma_Reforger:Publishing_Process|Publishing Process}} to know how to upload and update your mod in the {{Link|https://reforger.armaplatform.com/workshop|Workshop}} * See the {{Link|Arma_Reforger:Navmesh_Tutorial|Navmesh Tutorial}} know how to generate a navmesh

The {{Link|Main Page|Wiki}} will answer further questions... Soon™!

=== Recommended Tools ===

* Images: {{Link|https://krita.org/|Krita}}, {{Link|https://gimp.org/|Gimp}}, {{Link|https://adobe.com/|Adobe Photoshop}}, or alternatives * Terrain: {{Link|https://wysilab.com/|Instant Terra}} for terrain generation, masks, height maps, etc. You can use it to create all the source files and implement them in your workflow from start to finish. There are alternatives but no free ones I can recommend * Data: {{Link|https://qgis.org/|QGIS}} For manipulating and converting DEM and terrain data; {{Link|https://github.com/lutraconsulting/serval/blob/master/Serval/docs/user_manual.md|Serval}}, a {{Link|https://qgis.org/|QGIS}} tool that can be used to add bathymetry data and other features to DEM data * Repository: we use {{Link|https://en.wikipedia.org/wiki/Apache_Subversion|Subversion (SVN)}} along {{Link|https://tortoisesvn.net/|TortoiseSVN}} as a version control repository. This helps a lot when several people are working on the same files and can serve as a backup/revert solution.

Remember to '''Use Search''' on the {{Link|https://forums.bohemia.net/forums/forum/401-arma-reforger/|{{armaR}} Forums}} ({{Link|https://forums.bohemia.net/forums/forum/419-arma-reforger-terrain-creation/|Terrain Creation sub-forum}}) for keywords related to your problem before you post a new thread.

You will find helpful people in the {{Link|https://discord.gg/arma|Arma Platform Discord Server}} - the {{hl|#enfusion_terrain_makers}} channel is waiting for you!

{{GameCategory|armaR|Modding|Terrains|Tutorials}}
q6rl67q0yobty34w6x6jiecq30vdljj

# Arma Reforger:Action Context Setup

5050
32596
364638
341267
2024-05-24T20:07:46Z
Lou Montana
10739
Text replacement - "ized" to "ised"
364638
wikitext
text/x-wiki
{{TOC|side}} == Select Entity ==

Select the entity you want to add contexts and actions into. Select the '''"ActionsManagerComponent"''' or add one if it doesn't exist.

{{Feature|important| * For user actions to be properly synchronised and work as intended, the entity requires a '''RplComponent'''. * ActionsManagerComponent is not the same thing as ActionManager. The former manages user actions, the latter input actions! * To be able to interact with the entity properly, such entity must have valid physical representation.<!-- --> For most entities, this is already the case. If you are setting up an entity from scratch, please make sure that: ** Entity has '''MeshObject''' component with valid mesh ** Entity has '''RigidBody''' component with ''Model Geometry'' checked. }}

[[File:armareforger-actioncontext_add_component.png|600px]]

== Define Context ==

Fill the {{hl|Action Contexts}} array with your contexts for this entity. The context name is a unique identifier used to register child actions. Do not forget to fill the {{hl|Position}} field with valid {{hl|PointInfo}} or derived class instance. The component {{hl|UIInfo}} is required too.

[[File:armareforger-actioncontext_add_context.png|600px]]

== Add Action Location ==

=== General Action ===

For general actions use the {{hl|Additional Actions}} field in the {{hl|ActionsManagerComponent}}.

[[File:armareforger-actioncontext_add_action_general.png|600px]]

=== Contextual Action ===

For actions provided by a component (''compartments'' - GetInAction, ''doors'' - DoorAction) find the proper component. In this case it will be one of this entity's {{hl|DoorComponent}}.

[[File:armareforger-actioncontext_add_action_component.png|600px]]

== Add Action ==

=== General Action ===

For '''general''' actions add the action straight into the '''"Additional Actions"''' field in the '''ActionsManagerComponent'''. To set a parent context for our new action add an entry to the '''"Parent Context List"''' field of the action. As the value choose one of the context names you specified in the '''"Action Contexts"''' field in the "'''ActionsManagerComponent"'''. Don't forget to add UIInfo and fill it with desired data. If an action should be visible in multiple contexts, add that unique identifier (target context's '''Context Name''') to the "'''Parent Context List'''" too.

[[File:armareforger-actioncontext_setup_action_general.png|600px]]

=== Contextual Action ===

For '''actions provided by a component''' add the action to a slot provided by the component. In this case the field '''"DoorAction"''' provided by the '''"DoorComponent"'''. To set a parent context for our new action add an entry to the '''"Parent Context List"''' field of the action. As the value choose one of the context names you specified in the '''"Action Contexts"''' field in the "'''ActionsManagerComponent"'''. Don't forget to add UIInfo and fill it with desired data. If an action should be visible in multiple contexts, add that unique identifier (target context's '''Context Name''') to the "'''Parent Context List'''" too.

[[File:armareforger-actioncontext_setup_action_component.png|600px]]

== Add Parameters ==

=== Example ===

<enforce> class TAG_MyTeleportScriptedUserAction : ScriptedUserAction { [Attribute(defvalue: "0 0 0", uiwidget: UIWidgets.Coords, desc: "Teleport destination")] protected vector m_vTeleportDestination;

[Attribute(defvalue: "2", uiwidget: UIWidgets.EditBox, desc: "Spawn min. distance")] protected int m_iSpawnMinDist;

[Attribute(defvalue: "4", uiwidget: UIWidgets.EditBox, desc: "Spawn max. distance")] protected int m_iSpawnMaxDist;

//------------------------------------------------------------------------------------------------ override void PerformAction(IEntity pOwnerEntity, IEntity pUserEntity) { RandomGenerator randomGenerator = new RandomGenerator(); vector teleportPosition = randomGenerator.GenerateRandomPointInRadius(m_iSpawnMinDist, m_iSpawnMaxDist, m_vTeleportDestination); pUserEntity.SetOrigin(teleportPosition); }

//------------------------------------------------------------------------------------------------ override bool CanBeShownScript(IEntity user) { return true; }

//------------------------------------------------------------------------------------------------ override bool CanBePerformedScript(IEntity user) { return true; }

//------------------------------------------------------------------------------------------------ override bool HasLocalEffectOnlyScript() { return true; } } </enforce>

== Walkthrough ==

=== Script Setup ===

# Create this directory: {{hl|Scripts/Game/generated/UserAction/Modded}} # In it, create {{hl|TAG_MyScriptedUserAction.c}} # Inside this file put this: <enforce> class TAG_MyScriptedUserAction : ScriptedUserAction { //------------------------------------------------------------------------------------------------ override void PerformAction(IEntity pOwnerEntity, IEntity pUserEntity) { Print("MyScriptedUserAction.PerformAction() method reached", LogLevel.NORMAL); SCR_HintManagerComponent.GetInstance().ShowCustomHint("My test ground world - DONE", "TEST GROUND", 3.0); }

//------------------------------------------------------------------------------------------------ override bool CanBeShownScript(IEntity user) { return true; }

//------------------------------------------------------------------------------------------------ override bool CanBePerformedScript(IEntity user) { return true; }

//------------------------------------------------------------------------------------------------ override bool HasLocalEffectOnlyScript() { return true; } } </enforce>

=== World/Entity Setup ===

# If not present, add an ActionsManagerComponent (read wiky for minimum components present in order to work) # Add one {{hl|Action Context}} # In it: #* input some '''Context Name''' (myContext) #* set '''Position''' to PointInfo and move up the Y offset (you will se the point moving in the world editor) # Add one Additional Actions selecting your class inside {{hl|TAG_MyScriptedUserAction.c}}, in this example {{hl|TAG_MyScriptedUserAction}} # In {{hl|Additional Actions/TAG_MyScriptedUserAction}}: #* add one parent context list and select the Context Name created before (myContext) #* add '''UiInfo''' and input some '''Name''' to be shown #* set '''visibility range''' to some value, e.g 2 #* set '''duration''' to some value, e.g 2 # ???? # Profit!

{{GameCategory|armaR|Modding|Tutorials}}
m12kyf5tn02xg0t4jogvb9ncmjv9wpy

# Arma Reforger:AI Debug Panel Tutorial

5050
43663
365177
2024-08-02T11:00:56Z
Lou Montana
10739
Page creation
365177
wikitext
text/x-wiki
{{TOC|side}} The AI Debug Panel is an important tool for AI debug, allowing to see in real time an AI's condition.

== Usage ==

Use the {{Link|Arma Reforger:Startup Parameters#scrDefine|scrDefine}} startup parameter: -scrDefine AI_DEBUG

Select a Character or a Group with {{Link|Arma Reforger:Game Master}}. Open the {{Link|Arma Reforger:Diag Menu}}, select '''AI → AI Script → Open Debug Panel'''. It will create a debug panel for this AI Agent.

== Debug Panel ==

A debug panel is assigned to only one AI Group/Character and shows data about it.

=== Available Data ===

{| class="wikitable align-center-col-2 align-center-col-3" ! rowspan="2" | Data ! colspan="2" | Available for |- ! Groups ! Characters |- | Call sign | {{Icon|checked}} | {{Icon|checked}} |- | Current action | {{Icon|checked}} | {{Icon|checked}} |- | List of available actions and their priority | {{Icon|checked}} | {{Icon|checked}} |- | Threat level | {{Icon|unchecked}} | {{Icon|checked}} |- | Unit roles | {{Icon|unchecked}} | {{Icon|checked}} |- | Unit states | {{Icon|unchecked}} | {{Icon|checked}} |}

=== Available Buttons ===

==== Dump Debug Msgs ==== Dumps all events of this AI. You can also select a time interval.

==== Breakpoint ==== {{Link|Arma Reforger:Script Editor}} will hit a breakpoint on this AI's next update.

==== Locate ==== ''Character only''

Press to locate the selected AI in the world.

== Add Debug Panel Information ==

To add more information to the debug panel, mod the {{Link/Enfusion|armaR|SCR_AIAgentDebugPanel}} class.

Please note that the same class is used for both Groups and Characters!

{{GameCategory|armaR|Modding|Tutorials}}
fsxebqktiaz5ty316ytavv3mki6qbt8

# Arma Reforger:Commanding Menu Modding

5050
37974
347709
347702
2023-10-13T16:17:21Z
Lou Montana
10739
Add another one
347709
wikitext
text/x-wiki
{{TOC|side}} {{GVI|armaR|1.0.0}}

== Class Creation ==

The first step is to create a new class inheriting from <enforce inline>SCR_BaseGroupCommand</enforce>.

From there, it is time to override important methods to give life to the command:

=== Execute ===

The <enforce inline>Execute()</enforce> method determines what happens when the command is executed from the menu; it can be AI commanding, but it can actually be anything - an emote, a hint, a Game Master lightning, etc.

{{Feature|important| This method is broadcast to '''everyone''', meaning it is executed on the server '''and''' on each client; be sure to have the adequate checks to retain server-only logic or target UI-equipped machines.

This behaviour may change in the future with more network targeting options.

See also {{Link|Arma Reforger:Multiplayer Scripting#Replication|Replication}}. }}

=== CanBeShown ===

The <enforce inline>CanBeShown()</enforce> method determines when is the command ''shown'' in the command menu; for example, a "move" order cannot be issued by a non-leader, a "get in" order cannot be issued without aiming at a vehicle, etc.

The command can be shown, yet be unavailable - see {{Link|#CanBePerformed}} below.

=== CanBePerformed ===

The <enforce inline>CanBePerformed()</enforce> method determines whether or not the command can be ''executed''; for example, an emote cannot be used when in a vehicle, lightning cannot be thrown if not aiming at the terrain, etc.

=== Example ===

<enforce> [BaseContainerProps()] class SCR_MurderinoCommand : SCR_BaseGroupCommand { //------------------------------------------------------------------------------------------------ override bool Execute(IEntity cursorTarget, IEntity target, vector targetPosition, int playerID, bool isClient) { // server-only, as killing a character is handled by other systems that handle its replication if (isClient) return false;

ChimeraCharacter character = ChimeraCharacter.Cast(cursorTarget); if (!character) return false;

// we get the damage manager so we can do the intended thing SCR_DamageManagerComponent dmgManager = character.GetDamageManager(); if (!dmgManager) return false;

// execute dmgManager.Kill(dmgManager.GetInstigator()); return true; }

//------------------------------------------------------------------------------------------------ // this method is always called on player machine, no need for additional checks override bool CanBePerformed() { PlayerCamera camera = PlayerCamera.Cast(GetGame().GetCameraManager().CurrentCamera()); if (!camera) return false;

// get the entity at which the local player is currenty aiming IEntity cursorEntity = camera.GetCursorTarget();

// only characters can be killed if (!ChimeraCharacter.Cast(cursorEntity)) return false;

SCR_CharacterControllerComponent characterControllerComp = SCR_CharacterControllerComponent.Cast(cursorEntity.FindComponent(SCR_CharacterControllerComponent)); if (!characterControllerComp) return false;

// do not allow the action on dead characters if (characterControllerComp.IsDead()) return false;

// all checks passed - the action can be performed return true; } } </enforce>

== Config Declaration ==

=== Command Declaration ===

The {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Commanding/Commands.conf}} config file is the file that declares the class as a command and holds its various properties, including its string ID, whether or not the command is leader-only, etc.

Now remains adding that command to the commanding menu.

{{Feature|informative| A command class can be used more than once, provided its <enforce inline>[Attribute()]</enforce> make it generic and malleable enough <!-- see <enforce inline>SCR_WaypointGroupCommand</enforce> multiple usages in {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Commanding/Commands.conf}} .--> }}

=== Command Menu Declaration ===

* The {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Commanding/CommandingMenu.conf}} config file declares what is present in the actual commanding menu. * The {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Commanding/CommandingMapMenu.conf}} config file declares what is present in the ''map'' commanding menu.

Commands are referenced simply by their previously declared ID there along with their display text.

That's it! The new command is now added to the desired Command Menu.

{{GameCategory|armaR|Modding|Tutorials}}
hlphvfs4kgylwsrrkzp9bhsoawd4nui

# Arma Reforger:Dialog Configuration Tutorial

5050
47156
370696
2025-01-23T16:54:11Z
Lou Montana
10739
Page creation
370696
wikitext
text/x-wiki
{{TOC|side}} The Configurable Dialog system allows to easily make a custom dialog given a config file.

== Dialog Creation ==

* Make a layout if needed. * Inherit from {{Link/Enfusion|armaR|SCR_ConfigurableDialogUi}} for a custom dialog handler, if needed. * Make a {{Link/Enfusion|armaR|SCR_ConfigurableDialogUiPresets}} config file or choose an existing one. * Add entries of {{Link/Enfusion|armaR|SCR_ConfigurableDialogUiPreset}} in the config: these are your dialogs. Give them exclusive tags within the config file that holds them. * In scripts, when you want to spawn a dialog, you need to: ** Instantiate the custom handler (if created) ** Call the static method <enforce inline>SCR_ConfigurableDialogUi.CreateFromPreset()</enforce>. The parameters you need to provide are: *** '''presetsResourceName''': ResourceName (GUID) of the config file that holds the dialog preset. *** '''tag''': unique identifier string to target the dialog to be spawned. *** '''customDialogObj''': optional handler class inheriting from {{Link/Enfusion|armaR|SCR_ConfigurableDialogUi}} - if not provided the base SCR_ConfigurableDialogUi will be used instead. The <enforce inline>CreateFromPreset()</enforce> method returns the instance of the dialog handler that has been made for the newly spawned dialog, so you can cast to your custom handler type to perform further operations.

=== Layouts ===

{{armaR}} generally uses three layouts: {{hl|ConfigurableDialog}}, {{hl|ConfigurableDialog_Medium}}, {{hl|ConfigurableDialog_Big}}.

<gallery> </gallery>

The structure is: * a Size widget that defines the dimensions of the whole dialog * a Header with title and icon * a Message text * a Content area * a Footer for the buttons.

The content of complex dialogs should be its own layout, which the system will dynamically add to the base.

Still, nothing stops anyone from creating their own "complete" layout by inheriting from one of the bases and filling the {{hl|ContentLayoutContainer}} widget manually with whatever needed content.

It is recommended to have the content be its own layout; however for ease of maintenance, future changes to the base hierarchy might cause the loss of content that is not protected in its own prefab layout. Same goes with buttons: they either get added through the {{hl|.conf}} files or in the manually created layout.

=== SCR_ConfigurableDialogUi ===

The base dialog handler is a {{Link/Enfusion|armaR|ScriptedWidgetComponent}} that will be instantiated by the dialog creation process and attached to the dialog layout.

It provides handling of the Title, Message, Content and Footer as defined in the presets, and includes methods and invokers for confirming, canceling and closing.

The dialog itself is technically a menu,, since the Configurable layout is inserted into a proxy menu created with the enfusion Menu Manager, and thus has also access to menu events.

By inheriting from {{Link/Enfusion|armaR|SCR_ConfigurableDialogUi}} you can freely extend its functionality.

=== SCR_ConfigurableDialogUiPresets ===

These config files allow us to spread the large amount of dialogs needed by the game into multiple, smaller lists.

This avoids unnecessary clutter in chimeraMenus.conf, and allows to organize dialogs in their own .confs and scripts.

A dialog config file can contain multiple presets, identified by tag. The standard Configurable dialog preset should already have all the attributes necessary for your dialog, but you can always inherit from {{Link/Enfusion|armaR|SCR_ConfigurableDialogUiPreset}} and extend it.

'''The Tag is used to know which dialog to create'''. As such, you need unique tags in a single {{hl|.conf}} file.

The system will assemble the dialog, adding the content and buttons to the base.

It is possible to create prefab {{hl|.conf}} files for single dialogs and buttons, and then use those in the general dialog {{hl|.conf}} files. An example is {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/ConfigurableDialogs/DialogPrefabs/MessageOkCancel.conf}}.

=== Related Classes ===

==== Configuration Classes ==== * {{Link/Enfusion|armaR|SCR_ConfigurableDialogUiPresets}} - collection of dialog presets. This is a config root. * {{Link/Enfusion|armaR|SCR_ConfigurableDialogUiPreset}} - class of one preset configuration. A preset contains some properties of a dialog (dialog tag, style, message, title, buttons configuration) * {{Link/Enfusion|armaR|SCR_ConfigurableDialogUiButtonPreset}} - class of one button configuration (button tag, name, label, alignment).

==== Main Classes ==== * {{Link/Enfusion|armaR|SCR_ConfigurableDialogUi}} - the main class which represents a configurable dialog. You can override some methods in inherited classes for custom functionality. This class inherits from {{Link/Enfusion|armaR|ScriptedWidgetComponent}}, and in the end gets attached to the dialog's root widget as a component. There are several ways to attach it to the widget: *# call <enforce inline>CreateByPreset()</enforce> with customDialogObj left null. In this case the system creates a new <enforce inline>SCR_ConfigurableDialogUi</enforce> object and attaches it to the widget. *# call <enforce inline>CreateByPreset()</enforce> and provide it with a customDialogObj, in this case the provided object will be attached to the widget. *# attach a {{Link/Enfusion|armaR|SCR_ConfigurableDialogUi}}-inherited object directly to the layout's root widget, in the layout file. * {{Link/Enfusion|armaR|SCR_ConfigurableDialogUiProxy}} - this is the parent menu which holds the actual dialog widgets.

== Initialisation Sequence ==

The whole dialog creation and initialisation sequence is done in <enforce inline>SCR_ConfigurableDialogUi.CreateFromPreset()</enforce> and <enforce inline>CreateByPreset</enforce> methods.

* <enforce inline>CreateFromPreset(ResourceName presetsResourceName, string tag, SCR_ConfigurableDialogUi customDialogObj = null)</enforce> is called. * the config file provided in presetsResourceName is loaded, the preset object is found by tag. * the proxy dialog in game's MenuManager is created. * the actual dialog widgets are created inside proxy dialog's root widget. The actual dialog layout is taken from preset's {{hl|m_sLayout}} property. * a new {{hl|customDialogObj}} is created and attached to the dialog's root, or the provided {{hl|customDialogObj}} is used, or the one which is already attached to the layout. * <enforce inline>Dialog.Init</enforce> is called - here we apply title, message, add buttons. * <enforce inline>Dialog.OnMenuOpen</enforce> is called - here we expect derived class to perform the custom initialisation, if needed.

== Examples ==

=== Basic Usage ===

We create a simple dialog with message. If we want to do something when a button is pressed, we can subscribe to one of the available events.

<enforce> const ResourceName DIALOGS_CONFIG = "{814FCA3CB7851F6B}Configs/Dialogs/CommonDialogs.conf";

SCR_ConfigurableDialogUi dialog = SCR_ConfigurableDialogUi.CreateFromPreset(DIALOGS_CONFIG, "timeout_ok"); // "timeout_ok" is the Tag property

// we can execute our code when dialog is closed // useful for a common dialog which is called from many places, // but in each place we want to run different code on dialog closure dialog.m_OnClose.Insert(OnDialogClose);

// we can also use m_OnConfirm or m_OnCancel events </enforce>

=== Standard Usage ===

The dialog has some code associated only with itself, and we want that code to run regardless from where the dialog was invoked.

The takeaway here is the call signature of <enforce inline>CreateFromPreset</enforce>: <enforce> static SCR_ConfigurableDialogUi CreateFromPreset(ResourceName presetsResourceName, string tag, SCR_ConfigurableDialogUi customDialogObj = null) </enforce>

the last argument is {{hl|customDialogObj}}, which lets us tie an object to a dialog if needed.

<enforce> class SCR_ExitGameWhileDownloadingDialog : SCR_ConfigurableDialogUi { //--------------------------------------------------------------------------------------------- void SCR_ExitGameWhileDownloadingDialog() { // note that we pass 'this' into CreateFromPreset call! SCR_ConfigurableDialogUi.CreateFromPreset(SCR_CommonDialogs.DIALOGS_CONFIG, "exit_game_while_downloading", this); }

//--------------------------------------------------------------------------------------------- override void OnConfirm() { // try to terminate all current downloads SCR_DownloadManager dlManager = SCR_DownloadManager.GetInstance(); if (dlManager) dlManager.EndAllDownloads();

// exit the game GetGame().RequestClose(); SCR_AllFilterSetsStorage.ResetAllToDefault(); } }

void SomeOtherMethod() { new SCR_ExitGameWhileDownloadingDialog(); } </enforce>

<!-- === Parameterised Usage ===

We can also provide the message procedurally, but it is a bit of a hassle to inject the data into dialog initialisation sequence.

<enforce> //! there is not enough storage on your hard drive. The space required is at least %1. class SCR_NotEnoughStorageDialog : SCR_ConfigurableDialogUi { protected float m_fSizeBytes;

//------------------------------------------------------------------------------------------------ static SCR_NotEnoughStorageDialog Create(float sizeBytes) { SCR_NotEnoughStorageDialog dialog = new SCR_NotEnoughStorageDialog(sizeBytes);

SCR_ConfigurableDialogUi.CreateFromPreset( SCR_CommonDialogs.DIALOGS_CONFIG, "error_not_enough_storage", dialog); // also note that we provide dialog to CreateFromPreset

return dialog; }

//------------------------------------------------------------------------------------------------ // Inside OnMenuOpen we can set custom message override void OnMenuOpen(SCR_ConfigurableDialogUiPreset preset) { // The idea is that if possible, formatting of data should be performed by dialog class string sizeStr = SCR_ByteFormat.GetReadableSize(m_fSizeBytes); string messageStr = WidgetManager.Translate(preset.m_sMessage, sizeStr); this.SetMessage(messageStr); }

//------------------------------------------------------------------------------------------------ void SCR_NotEnoughStorageDialog(float sizeBytes) { // the idea is to store m_fSizeBytes and use it when OnMenuOpen is called m_fSizeBytes = sizeBytes; } }

void SomeOtherMethod() { SCR_NotEnoughStorageDialog.Create(1024.0); } </enforce> -->

=== Advanced Usage ===

We can create a dialog's more advanced content <enforce> class SCR_AddonListDialog : SCR_ConfigurableDialogUi { array<ref SCR_WorkshopItem> m_aItems = {}; protected ref array<SCR_DownloadManager_AddonDownloadLine> m_aDownloadLines = {};

protected ResourceName ADDON_LINE_LAYOUT = "{BB5AEDDA3C4134FD}UI/layouts/Menus/ContentBrowser/DownloadManager/DownloadManager_AddonDownloadLineConfirmation.layout";

//------------------------------------------------------------------------------------------------ void SCR_AddonListDialog(array<ref SCR_WorkshopItem> items, string preset) { foreach (SCR_WorkshopItem i : items) { m_aItems.Insert(i); }

if (!preset.IsEmpty()) SCR_ConfigurableDialogUi.CreateFromPreset(SCR_WorkshopUiCommon.DIALOGS_CONFIG, preset, this); }

//------------------------------------------------------------------------------------------------ override void OnMenuOpen(SCR_ConfigurableDialogUiPreset preset) { VerticalLayoutWidget layout = VerticalLayoutWidget.Cast(GetRootWidget().FindAnyWidget("AddonList")); // the widget we have added WorkspaceWidget workspace = getGame().GetWorkspace();

// Create a line for each entry in m_aItems Widget w; SCR_DownloadManager_AddonDownloadLine comp; foreach (SCR_WorkshopItem item : m_aItems) { w = workspace.CreateWidgets(ADDON_LINE_LAYOUT, layout);

component = SCR_DownloadManager_AddonDownloadLine.Cast(w.FindHandler(SCR_DownloadManager_AddonDownloadLine)); component.InitForWorkshopItem(item, string.Empty, false);

m_aDownloadLines.Insert(component); } } } </enforce>

=== Common ConfigurableDialog ===

# Game exit popup - MainMenuUI:<br>Binds the OnBack function to the "Back" button click<enforce> // subscribe to buttons SCR_InputButtonComponent back = SCR_InputButtonComponent.GetInputButtonComponent("Back", footer); if (back) back.m_OnActivated.Insert(OnBack); </enforce> # <enforce inline>OnBack()</enforce> calls <enforce inline>TryExitGame()</enforce>:<enforce> protected static void TryExitGame() { int numCompleted, numTotal; SCR_DownloadManager dlManager = SCR_DownloadManager.GetInstance(); if (dlManager) dlManager.GetDownloadQueueState(numCompleted, numTotal);

if (numTotal > 0) new SCR_ExitGameWhileDownloadingDialog(); else new SCR_ExitGameDialog(); } </enforce> # {{Link/Enfusion|armaR|SCR_ExitGameWhileDownloadingDialog}} and {{Link/Enfusion|armaR|SCR_ExitGameDialog}} are defined in {{hl|CommonDialogs.c}}, they inherit from {{Link/Enfusion|armaR|SCR_ConfigurableDialogUi}}.<enforce> class SCR_ExitGameDialog : SCR_ConfigurableDialogUi { //--------------------------------------------------------------------------------------------- void SCR_ExitGameDialog() { SCR_ConfigurableDialogUi.CreateFromPreset(SCR_CommonDialogs.DIALOGS_CONFIG, "exit_game", this); }

//--------------------------------------------------------------------------------------------- override void OnConfirm() { GetGame().RequestClose(); SCR_AllFilterSetsStorage.ResetAllToDefault(); } } </enforce> # DIALOGS_CONFIG is the config file CommonDialogs.conf.<br><!-- -->"exit_game" is a tag in CommonDialogs that <enforce inline>CreateFromPreset()</enforce> uses to find the right preset. <enforce inline>CreateFromPreset()</enforce> then calls <enforce inline>CreateByPreset()</enforce> to initialise the dialog and bind events to the buttons. {{Feature|informative| The actual widget created is ConfigurableDialogProxy, an empty overlay widget which is referenced in {{hl|chimeraMenus.conf}}, and the new {{hl|ConfigurableDialog}} preset is then created inside it.}}<enforce> static SCR_ConfigurableDialogUi CreateByPreset(SCR_ConfigurableDialogUiPreset preset, SCR_ConfigurableDialogUi customDialogObj = null) { // Open the proxy dialog SCR_ConfigurableDialogUiProxy proxyComp = SCR_ConfigurableDialogUiProxy.Cast(GetGame().GetMenuManager().OpenDialog(ChimeraMenuPreset.ConfigurableDialog));

// Create the actual layout inside proxy Widget internalWidget = GetGame().GetWorkspace().CreateWidgets(preset.m_sLayout, proxyComp.GetRootWidget()); if (!internalWidget) { Print(string.Format("[SCR_ConfigurableDialogUi] internalWidget wans't created"), LogLevel.ERROR); return null; }

SCR_ConfigurableDialogUi dialog = SCR_ConfigurableDialogUi.Cast(internalWidget.FindHandler(SCR_ConfigurableDialogUi));

// Create a new dialog object, or apply the provided one, if the dialog obj was not found in the layout. if (!dialog) { if (customDialogObj) dialog = customDialogObj; else dialog = new SCR_ConfigurableDialogUi();

dialog.InitAttributedVariables(); internalWidget.AddHandler(dialog); }

dialog.Init(internalWidget, preset, proxyComp); proxyComp.Init(dialog);

// Set action context if (!preset.m_sActionContext.IsEmpty()) proxyComp.SetActionContext(preset.m_sActionContext);

// Call dialog's events manually dialog.OnMenuOpen(preset);

return dialog; } </enforce>

=== Accessing the content layout ===

<enforce> VerticalLayoutWidget layout = VerticalLayoutWidget.Cast(GetContentLayoutRoot(GetRootWidget()).FindAnyWidget("AddonList")); </enforce>

<enforce inline>SCR_ConfigurableDialogUi.GetContentLayoutRoot()</enforce> will return the first widget of the content layout. Useful for those dynamically generated dialogs.

{{GameCategory|armaR|Modding|Tutorials}}
0zzo69d2xlk9w5ssnn4at3vyttbiq3i

# Arma Reforger:End Screen Creation

5050
34266
364678
364661
2024-05-24T20:12:21Z
Lou Montana
10739
Fix typo
364678
wikitext
text/x-wiki
{{TOC|side}} The End Screen (interchangeably called Game Over screen) are screens shown when the game ends. This guide will go through each part and how to set up your own game over screen.

The end screen consists out of various parts:

{| class="wikitable" ! Element ! Type ! Description |- | <enforce inline>GameMode.EndGameMode()</enforce> (from {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_BaseGameMode.c|SCR_BaseGameMode.c}}) | Method | The end screen is called by means of the <enforce inline>GameMode.EndGameMode()</enforce> method and uses the data provided, combined with the local player data to decide what to display. |- | {{Link/Enfusion|armaR|SCR_GameModeEndData}} | Data | Data used in the <enforce inline>EndGameMode</enforce> method combined with wining player(s) and winning faction(s). See the script itself as well as the <enforce inline>SCR_GameModeEndData.Create()</enforce> and <enforce inline>SCR_GameModeEndData.CreateSimple()</enforce> to get more information as to how to call end game. |- | {{Link|enfusion://ResourceManager/~ArmaReforger:UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout|EndScreen.layout}} | Layout | This is the base layout which fades in when game over is called. The specific game over widgets are spawned within this layout. |- | {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/GameOverScreen/GameOverScreensConfig.conf|GameOverScreensConfig.conf}} | Config | This holds all the gameover screens and is referenced to by various scripts to get the specific information that needs to be shown such as but not limited to: The specific layout spawned within the {{Link|enfusion://ResourceManager/~ArmaReforger:UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout|EndScreen.layout}}, the localised title, subtitle, briefing, the icon shown, audio played as well as various optional parameters. |- | {{Link|enfusion://ResourceManager/~ArmaReforger:UI/layouts/HUD/GameOver/EndScreen/EndScreenContent_Default.layout|EndScreenContent_Default.layout}}<br> {{Link|enfusion://ResourceManager/~ArmaReforger:UI/layouts/HUD/GameOver/EndScreen/EndScreenContent_NoImage.layout|EndScreen_NoImage.layout}} | Layout | These are two standard layouts used in the End Screens in the config. These are spawned within the EndScreen.layout and hold the actual visuals. (It is possible that there are more layouts by the time you are reading this). Use these as an example if you want to display any specific information like: Score or some custom screen. '''Create your own if you want to modify the end screen''' (Keep in mind that changing the basic ones will change it for all game modes). Do take note that some widgets like text widgets and the image will need specific naming, though leaving them out will not cause any issues. |- | {{Link/Enfusion|armaR|SCR_GameOverScreenContentUIComponent}} | Script | This is the main widget component found on the EndScreen_Default and EndScreen_NoImage layout. If you want to do something special with the layout then it would be advised to inherit from this component and override the methods. |- | {{Link|enfusion://ScriptEditor/scripts/Game/GameOverScreen/EGameOverTypes.c|EGameOverTypes.c}} | Enum | This hold the enums used as identifiers within the config. Config endscreens mostly use this as an identifier for developers but any editor or custom endscreen will need a specific unique enum. |}

== Config Modding ==

=== Add New End Screen ===

* Open {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/GameOverScreen/GameOverScreensConfig.conf|GameOverScreensConfig.conf}} * Press the '+' to start creating a new End Screen. Here you will be presented with a few options.<br>These are the options by the time of writing this guide: : {| class="wikitable" ! Class ! Description |- | {{Link/Enfusion|armaR|SCR_BaseGameOverScreenInfo}} | Basic game over screen to set a title, subtitle, briefing and image. If you create any new End Screens this is the base you will inherent from |- | {{Link/Enfusion|armaR|SCR_FactionGameOverScreenInfo}} | If the end condition contains one or more factions then this allows you to get the faction flag for the image and faction name as parameter in the Subtitle |- | {{Link/Enfusion|armaR|SCR_FactionVictoryGameOverScreenInfo}} | Similar to {{Link/Enfusion|armaR|SCR_FactionGameOverScreenInfo}} but also sets the Vignette color to the winning faction |- | {{Link/Enfusion|armaR|SCR_EditorFactionGameOverScreenInfo}} | Similar to the above but supports multiple winning factions which by default it does not. |- | {{Link/Enfusion|armaR|SCR_DeathMatchGameOverScreenInfo}} | Used to get the wining player name(s) and show it as params in the Subtitle. Note that by the time of writing, this is not used. |}<!-- -->Chose any of the above scripts, though if you want to make it fully custom simply create your own or use {{Link/Enfusion|armaR|SCR_BaseGameOverScreenInfo}} and handle any other logic by inheriting and overriding the {{Link/Enfusion|armaR|SCR_GameOverScreenContentUIComponent}}.

=== Main Variables ===

The following variables must be filled in:

{| class="wikitable" ! Variable ! Description |- | Game Over Content Layout | This is the actual layout spawned within the game over screen. You can use {{Link/Enfusion|armaR|SCR_GameOverScreenContentUIComponent}} (or an inherited version).

More information about the layout in the steps below. |- | Game Over Screen Id | The ID of the game over screen. Make sure it is an unique enum which you added to the {{Link/Enfusion|armaR|EGameOverTypes}} enum. |}<!-- -->{{Feature|informative|Some of the End screen types such as {{Link/Enfusion|armaR|SCR_EditorFactionGameOverScreenInfo}} have additional variables (see {{Link|#Optional Variables}} and {{Link|#Optional Game Master Variables}} below). As usual, hover over the description to read what they mean.

=== Optional Variables ===

The following are optional parameters which affect various base UI elements. To use this Press the '''Optional Params'''<nowiki/>' {{hl|set class}} button. {{Feature|informative| Note that in order to use most of these optional variables, the layout you used as "Game Over Content Layout" will need to have the Text/Image components with the correct name as set in the {{Link/Enfusion|armaR|SCR_GameOverScreenContentUIComponent}}. }}

{| class="wikitable" ! Variable ! Description |- | Title | This is the localised string for the title. |- | Subtitle | The localised string for the subtitle. |- | Image Texture | What image will be shown. Note that using {{Link/Enfusion|armaR|SCR_FactionGameOverScreenInfo}} will show the players faction, or in case of {{Link/Enfusion|armaR|SCR_FactionVictoryGameOverScreenInfo}} will show the faction that won. |- | Debriefing | The localised string for debriefing text |- | Audio One Shot | The audio music one shot that will be played upon the opening of the end screen. |- | Title Param | %1 param shown in Title |- | Subtitle Param | %1 param shown in Subtitle. This is the player faction's name if using the {{Link/Enfusion|armaR|SCR_FactionGameOverScreenInfo}} or the winning faction's name if {{Link/Enfusion|armaR|SCR_FactionVictoryGameOverScreenInfo}}. | |- | Debriefing Param | %1 for debriefing param |}

{{Feature|informative|In most cases the Title, Subtitle and Debriefing params are actually set by script (such as {{Link/Enfusion|armaR|SCR_FactionGameOverScreenInfo}}) instead of being set directly in the config.}}

=== Optional Game Master Variables ===

In most cases you would want to make sure your end screen is compatible with [[Arma Reforger:Game Master|Game Master]]; one thing you need to keep in mind is that there can be more than one winning faction in Game Master.

Similarly to the {{Link|#Optional Variables}} above press the {{hl|set class}} button to add Game Master compatibility. If you leave this null then the game will never allow Game Masters to access this particular End Screen.

{| class="wikitable" ! Variable ! Description |- | Can Be Set By Game Master | Set to true if you want the Game Master to specifically be able to set this End Screen. You can leave this false, see the 'Mirrored State' variable below for more information. |- | Needs Playable Factions | Some End screens such as {{hl|FactionVictory}} will need factions to be set, while others like {{hl|EndSession}} do not need any factions. If your end screen checks factions then make sure this is true. Only relevant if 'Can Be Set By Game Master' is true. |- | Display Name | This is the localised string name seen by the Game Master when selecting the End Screen. Only relevant if 'Can Be Set By Game Master' is true. |- | Description | This is the localised string description the player sees when selecting the End Screen. Only relevant if 'Can Be Set By Game Master' is true. |- | Description Param1 and Description Param2 | %1 and %2 of Description. Generally this is set through script rather then in the config. Only relevant if 'Can Be Set By Game Master' is true. |- | Mirrored State | In some cases you don't want the Game Master to be able to choose the End Screen directly. Think of Defeat End Screen if there is already a Victory End Screen. In this cause you set 'Can Be Set By Game Master' true for victory and false for defeat and set the Mirrored state of Victory to Defeat and ''vice versa''.

If the Victory End screen is chosen then any faction that is not selected will automatically get the Defeat End Screen.

{{Feature|informative| Currently mirrored states are only supported with factions. Any player of the faction that is not selected will get the mirrored state end screen. This is mainly because only factions are supported in end screens. }}

|}

== Layout ==

The End screen layout is the actual layout shown when the end screen is called and '''needs to be set to the 'Game Over Content Layout' variable in the config'''. Most things are already explained in the steps above. Here though you can go in the most details for your custom End Screen.

The following Table will show all the Default widgets which are affected by the config element we set up before. Do not worry though, you can delete the widgets you do not need as the system will check if they exist. Also the widget names are the default names and can be changed in the {{Link/Enfusion|armaR|SCR_GameOverScreenContentUIComponent}} class.

{| class="wikitable" ! Widget Name ! Widget Type ! Target ! Description |- | GameOver_Image | ImageWidget | Image Texture | The image shown in the end screen |- | GameOver_State | TexWidget | Title | The title shown in the end screen |- | GameOver_Condition | TextWidget | Subtitle | The Subtitle Shown in the end screen |- | GameOver_Description | TextWidget | Debrief | The Debrief shown in the end screen |}

== Scripting ==

=== Layout Component ===

If you create a new End screen layout then do make sure it has the {{Link/Enfusion|armaR|SCR_GameOverScreenContentUIComponent}} or an inherited version of it.

The {{Link/Enfusion|armaR|SCR_GameOverScreenContentUIComponent}} is the base component used to initialise the end screen. If you want to make a fully custom end screen simply inherent from this script. Simply override the <enforce inline>InitContent()</enforce> method to initialise the end screen. This method will give you the {{Link/Enfusion|armaR|SCR_GameModeEndData}} as well as all the data set in the config as mentioned above. You can always use <enforce inline>super.InitContent()</enforce> in the method if you want to keep the base functionality.

=== Screen Manager Component ===

The {{Link/Enfusion|armaR|SCR_GameOverScreenManagerComponent}} handles things like displaying the right endscreen depending on local player faction and winning faction but you can also handle this within the layout script as well. You will need to set up the End screen in the {{Link/Enfusion|armaR|SCR_GameOverScreenManagerComponent}} specifically in the <enforce inline>GetGameOverType()</enforce> method. It is a bit convoluted as the GameOverData and the Game Over Screens are not very compatible in some causes. It mostly is about factions (or winning player Id) and if the local player should get the victory or defeat game end screen.

Either use the existing code as a guide or use the code below to ignore this section altogether:

<enforce> else if (endReason == EGameOverTypes.YOUR_ENUM) { // your logic

return endReason; } </enforce>

{{Feature|informative|This system may change in the future.}}

=== End the Game ===

The last step is to actually make sure to call your end game.

Use the <enforce inline>GameMode.EndGameMode()</enforce> to actually end the game. This method takes a new {{Link/Enfusion|armaR|SCR_GameModeEndData}} which you can create with the <enforce inline>SCR_GameModeEndData.CreateSimple()</enforce> and <enforce inline>SCR_GameModeEndData.Create()</enforce> static methods.

Create Simple method params:

{| class="wikitable" ! Variable ! Description |- | int reason | The end reason. Generally if using a custom end screen you will be using the {{Link/Enfusion|armaR|EGameOverTypes}} enum you created as the reason. Check the {{Link/Enfusion|armaR|SCR_GameModeEndData}} class for more in-depth information. |- | int winnerId | The winner player ID. Leave -1 if no winning player |- | int winnerFactionId | The winning faction index. Leave -1 if no winning faction |}

Create method params:

{| class="wikitable" ! Variable ! Description |- | int reason | Same as Create Simple |- | array<int> winnerIds | An array of winning players. Leave null if no winning players. |- | array<int> winnerFactionIds | An array of wining factions. Leave null if no winning factions. |}

Example of calling end game in script: <enforce> SCR_BaseGameMode gamemode = SCR_BaseGameMode.Cast(GetGame().GetGameMode()); if (!gamemode) return; // No winning player nor faction gamemode.EndGameMode(SCR_GameModeEndData.CreateSimple(EGameOverTypes.YOUR_ENUM)); // Winning player gamemode.EndGameMode(SCR_GameModeEndData.CreateSimple(EGameOverTypes.YOUR_ENUM, PLAYER_ID)); // Winning Faction gamemode.EndGameMode(SCR_GameModeEndData.CreateSimple(EGameOverTypes.YOUR_ENUM, -1, FACTION_INDEX)); // Winning players gamemode.EndGameMode(SCR_GameModeEndData.Create(EGameOverTypes.YOUR_ENUM, PLAYER_ID_ARRAY)); // Winning Factions gamemode.EndGameMode(SCR_GameModeEndData.Create(EGameOverTypes.YOUR_ENUM, null, FACTION_INDEX_ARRAY)); </enforce>

{{GameCategory|armaR|Modding|Tutorials}}
sazhkk4benx9cr4lzhbirkgpu5ewbda

# Arma Reforger:Field Manual Modding

5050
34311
352324
338623
2024-02-07T13:36:24Z
Lou Montana
10739
Fix class link
352324
wikitext
text/x-wiki
{{TOC|side}} The '''Field Manual''' is the helpful in-game manual available at all time from either the main menu or the pause menu.

Here we will see how to add our own entries.

== Config Modding ==

{{Feature|informative| * the actual structure is: Root Config > Categories > SubCategories > Entries > Pieces. * the structure itself can support an infinite amount of levels, but the UI does not. * a Category and a SubCategory are the same {{Link/Enfusion|armaR|SCR_FieldManualConfigCategory}} object - they only differ in their hierarchy level. }}

=== Root Config ===

The Field Manual's root config can be found here: {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/FieldManual/FieldManualConfigRoot.conf|FieldManualConfigRoot.conf}} (in {{hl|Data\Configs\FieldManual}}).

It holds: * the Field Manual's main title * the tab names * various layouts * categories (other {{hl|.conf}}) * tile backgrounds from which it will select randomly

=== Add a Category ===

A category holds: * its title * sub-categories

{{Feature|informative| * A sub-category is identical to a category ({{Link/Enfusion|armaR|SCR_FieldManualConfigCategory}}) - they only differ in hierarchy level. * Even if first-level categories can hold ''entries'', they should not for the time being (they will be ignored as the UI does not support them). * Even if second-level categories can hold ''categories'', they should not for the time being (they will be ignored as the UI does not support them). }}

{| class="wikitable" ! Variable ! Description |- | Enabled | This allows to enable/disable (show/hide) the category. |- | Title | This is the category's title - it will also be shown in the config entry name |- | Categories | Sub-categories to this category |- | Entries | Sub-category entries to display (the "tiles" and their content) |- | Category Layout | {{Link|enfusion://ResourceManager/~ArmaReforger:UI/layouts/Menus/FieldManual/MenuParts/FieldManual_MenuCategory.layout|FieldManual_MenuCategory.layout}} by default |- | Sub Category Layout | {{Link|enfusion://ResourceManager/~ArmaReforger:UI/layouts/Menus/FieldManual/MenuParts/FieldManual_MenuSubCategory.layout|FieldManual_MenuSubCategory.layout}} by default |}

=== Add a Sub-Category ===

Repeat the same operation as above in a Category instead of the config root.

=== Add an Entry ===

The following entry types are available: * {{Icon|unchecked}} {{Link/Enfusion|armaR|SCR_FieldManualConfigEntry}} - the parent type, not to be used directly * {{Icon|checked}} {{Link/Enfusion|armaR|SCR_FieldManualConfigEntry_Standard}} - the standard type, full width page * {{Icon|checked}} {{Link/Enfusion|armaR|SCR_FieldManualConfigEntry_Weapon}} - an unused weapon type with an automatically-filled weapon statistics' side panel (with rate of fire, weight, etc)

{| class="wikitable" ! Variable ! Description |- | Enabled | This allows to enable/disable (show/hide) the entry. |- | Id | This ID is an {{Link/Enfusion|armaR|EFieldManualEntryId}} enum constant - required only if this entry is to be opened from the outside (e.g a hint) through <enforce inline>SCR_FieldManualUI.Open(enumValue);</enforce> |- | Title | This is the entry's title, both for the tile and for the opened entry - it will also be shown in the config entry name |- | Image | The tile content. Recommended definition: 400&times;300. |- | Content | A list of {{Link/Enfusion|armaR|SCR_FieldManualPiece}} used to define and setup the entry's content. |- | Weapon Entity Path | {{Link/Enfusion|armaR|SCR_FieldManualConfigEntry_Weapon}} only: the path to the weapon's prefab (e.g {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Weapons/Rifles/AK74/Rifle_AK74.et|Rifle_AK74.et}}) |- | Layout | * {{Link|enfusion://ResourceManager/~ArmaReforger:UI/layouts/Menus/FieldManual/Entries/FieldManual_Entry_Standard.layout|FieldManual_Entry_Standard.layout}} by default for {{Link/Enfusion|armaR|SCR_FieldManualConfigEntry_Standard}} * {{Link|enfusion://ResourceManager/~ArmaReforger:UI/layouts/Menus/FieldManual/Entries/FieldManual_Entry_Weapon.layout|FieldManual_Entry_Weapon.layout}} by default for {{Link/Enfusion|armaR|SCR_FieldManualConfigEntry_Weapon}} |}

=== Add Content ===

An Entry's content is made out of multiple pieces. All pieces are vertically set, one after another - there are no "image to the left, scroll to the right" elements.

The available piece types are as follow: {{TOC|subtoc |title= Field Manual Entry Pieces |content= * {{Icon|unchecked}} {{Link|#SCR_FieldManualPiece}} * {{Icon|checked}} {{Link|#SCR_FieldManualPiece_ConfigEntry}} * {{Icon|checked}} {{Link|#SCR_FieldManualPiece_ConfigEntryList}} * {{Icon|checked}} {{Link|#SCR_FieldManualPiece_Header}} * {{Icon|checked}} {{Link|#SCR_FieldManualPiece_Image}} * {{Icon|checked}} {{Link|#SCR_FieldManualPiece_ImageGallery}} * {{Icon|checked}} {{Link|#SCR_FieldManualPiece_Keybind}} * {{Icon|checked}} {{Link|#SCR_FieldManualPiece_KeybindList}} * {{Icon|checked}} {{Link|#SCR_FieldManualPiece_LineBreak}} * {{Icon|checked}} {{Link|#SCR_FieldManualPiece_Separator}} * {{Icon|checked}} {{Link|#SCR_FieldManualPiece_Text}} }}

==== SCR_FieldManualPiece ==== {{Link/Enfusion|armaR|SCR_FieldManualPiece}} - the parent type, not to be used directly.

==== SCR_FieldManualPiece_ConfigEntry ==== {{Link/Enfusion|armaR|SCR_FieldManualPiece_ConfigEntry}}.

{| class="wikitable" ! Variable ! Description |- | Display Name | The config entry text |- | Config Path | the {{hl|.conf}}/{{hl|.et}} file to read |- | Entry Path | the config path, in format {{hl|path/to/entry}} (case-sensitive!) |- | Value Format | A specific format can be used along with {{hl|%1}} |- | Layout | {{Link|enfusion://ResourceManager/~ArmaReforger:UI/layouts/Menus/FieldManual/Pieces/FieldManual_Piece_ConfigEntry.layout|FieldManual_Piece_ConfigEntry.layout}} by default |- | Decimal Move | Move the comma left (negative) or right (positive), range -9..+9, default 0 |- | Fixed Decimals | Define the amount of number's decimals, range -1..5, default -1 |}

==== SCR_FieldManualPiece_ConfigEntryList ==== {{Link|#SCR_FieldManualPiece_ConfigEntryList}} - a list of {{Link|#SCR_FieldManualPiece_ConfigEntry}}.

{| class="wikitable" ! Variable ! Description |- | Config Entries | A list of {{Link/Enfusion|armaR|SCR_FieldManualPiece_ConfigEntry}} - see {{Link|#SCR_FieldManualPiece_ConfigEntry}} above |- | Layout | {{Link|enfusion://ResourceManager/~ArmaReforger:UI/layouts/Menus/FieldManual/Pieces/FieldManual_Piece_ConfigEntryList.layout|FieldManual_Piece_ConfigEntryList.layout}} by default |}

==== SCR_FieldManualPiece_Header ==== {{Link/Enfusion|armaR|SCR_FieldManualPiece_Header}} - a text "title".

{| class="wikitable" ! Variable ! Description |- | Image Path | Can be an {{hl|.edds}} file or an {{hl|.imageset}} |- | Image Set Name | If an image set has been used in '''Image Path''', set the image name here |- | Text | The header's text |- | Layout | {{Link|enfusion://ResourceManager/~ArmaReforger:UI/layouts/Menus/FieldManual/Pieces/FieldManual_Piece_Header.layout|FieldManual_Piece_Header.layout}} by default |}

==== SCR_FieldManualPiece_Image ==== {{Link/Enfusion|armaR|SCR_FieldManualPiece_Image}} - a simple image.

{| class="wikitable" ! Variable ! Description |- | Image Path | Can be an {{hl|.edds}} file or an {{hl|.imageset}} |- | Image Set Name | If an image set has been used in '''Image Path''', set the image name here |- | Image Color | Can be used to colour an image with a colour filter |- | Caption | The text associated to the image; be wary as some layouts cannot take a long text |- | Layout | {{Link|enfusion://ResourceManager/~ArmaReforger:UI/layouts/Menus/FieldManual/Pieces/FieldManual_Piece_Image.layout|FieldManual_Piece_Image.layout}} by default |}

==== SCR_FieldManualPiece_ImageGallery ==== {{Link/Enfusion|armaR|SCR_FieldManualPiece_ImageGallery}} - a gallery of {{Link/Enfusion|armaR|SCR_FieldManualPiece_Image}}.

{| class="wikitable" ! Variable ! Description |- | Type | One of {{Link/Enfusion|armaR|SCR_EFieldManual_ImageGalleryType}}, can be either {{hl|ICONS_VERTICAL}}, {{hl|ICONS_LIST}}, {{hl|GALLERY_HORIZONTAL}} or {{hl|GALLERY_VERTICAL}} |- | Text | The text displayed along the gallery |- | Images | A list of {{Link/Enfusion|armaR|SCR_FieldManualPiece_Image}} - see {{Link|#SCR_FieldManualPiece_Image}} above |- | Layout | {{Link|enfusion://ResourceManager/~ArmaReforger:UI/layouts/Menus/FieldManual/Pieces/FieldManual_Piece_ImageGallery.layout}} by default |}

==== SCR_FieldManualPiece_Keybind ==== {{Link/Enfusion|armaR|SCR_FieldManualPiece_Keybind}} - a keybind information.

{| class="wikitable" ! Variable ! Description |- | Keybind | The keybind in format <syntaxhighlight lang="html" inline><action name="ActionName"/></syntaxhighlight> |- | Description | The keybind's description |- | Input Display Condition | One of {{Link/Enfusion|armaR|SCR_EInputTypeCondition}}, can be either {{hl|ALL_INPUTS}}, {{hl|KEYBOARD_ONLY}} or {{hl|GAMEPAD_ONLY}}: * {{hl|ALL_INPUTS}}: the keybind is always displayed * {{hl|KEYBOARD_ONLY}}: the keybind is only displayed if keyboard/mouse are currently used * {{hl|GAMEPAD_ONLY}}: the keybind is only displayed if gamepad is currently used {{Feature|informative|The UI will automatically show/hide the appropriate keybinds when controls change.}} |- | Layout | {{Link|enfusion://ResourceManager/~ArmaReforger:UI/layouts/Menus/FieldManual/Pieces/FieldManual_Piece_Keybind.layout|FieldManual_Piece_Keybind.layout}} by default |}

==== SCR_FieldManualPiece_KeybindList ==== {{Link/Enfusion|armaR|SCR_FieldManualPiece_KeybindList}} - a list of {{Link/Enfusion|armaR|SCR_FieldManualPiece_Keybind}}.

{| class="wikitable" ! Variable ! Description |- | Keybinds | A list of {{Link/Enfusion|armaR|SCR_FieldManualPiece_Keybind}} keybinds - see {{Link|#SCR_FieldManualPiece_Keybind}} above |- | Layout | {{Link|enfusion://ResourceManager/~ArmaReforger:UI/layouts/Menus/FieldManual/Pieces/FieldManual_Piece_KeybindList.layout|FieldManual_Piece_KeybindList.layout}} by default |}

==== SCR_FieldManualPiece_LineBreak ==== {{Link/Enfusion|armaR|SCR_FieldManualPiece_LineBreak}} an empty space, used to separate elements where a bigger gap is needed.

No variables.

==== SCR_FieldManualPiece_Separator ==== {{Link/Enfusion|armaR|SCR_FieldManualPiece_Separator}} - a Reforger-themed horizontal separator

{| class="wikitable" ! Variable ! Description |- | Padding Top | Top padding, range 0..100, default 20 |- | Width Percentage | Total parent's width, range 0..100, default 75 |- | Thickness | "Height" of the separator, range 0..10, default 2 |- | Padding Bottom | Bottom padding, range 0..100, default 20 |- | Layout | {{Link|enfusion://ResourceManager/~ArmaReforger:UI/layouts/Menus/FieldManual/Pieces/FieldManual_Piece_Separator.layout|FieldManual_Piece_Separator.layout}} by default |}

==== SCR_FieldManualPiece_Text ==== {{Link/Enfusion|armaR|SCR_FieldManualPiece_Text}} - a block of text.

{| class="wikitable" ! Variable ! Description |- | Text | The paragraph's content |- | Layout | {{Link|enfusion://ResourceManager/~ArmaReforger:UI/layouts/Menus/FieldManual/Pieces/FieldManual_Piece_Text.layout|FieldManual_Piece_Text.layout}} by default |}

== Script Modding ==

The concerned classes are: * '''{{Link/Enfusion|armaR|SCR_FieldManualUI}}''' for the UI management * {{Link/Enfusion|armaR|SCR_FieldManualConfigRoot}} for the root config * {{Link/Enfusion|armaR|SCR_FieldManualConfigCategory}} for categories * {{Link/Enfusion|armaR|SCR_FieldManualConfigEntry}} for entries ** {{Link/Enfusion|armaR|SCR_FieldManualConfigEntry_Standard}} ** {{Link/Enfusion|armaR|SCR_FieldManualConfigEntry_Weapon}} * {{Link/Enfusion|armaR|SCR_FieldManualPiece}} and children for the content pieces * {{Link/Enfusion|armaR|EFieldManualEntryId}} for the entry ID

=== Open Field Manual ===

<enforce> EFieldManualEntryId entryId = EFieldManualEntryId.CONFLICT_OVERVIEW; SCR_FieldManualUI.Open(entryId); </enforce>

{{GameCategory|armaR|Modding|Tutorials}}
4at5nz4innijnepdplrplyolwkp4nza

# Arma Reforger:From Arma 3 Tools to Workbench

5050
32433
364787
321593
2024-06-12T21:23:58Z
Lou Montana
10739
Add Workbench links
364787
wikitext
text/x-wiki
[[File:a3ct playArma3Tools.jpg|thumb|300px|{{arma3}} Tools Launcher]] This page offers an equivalence table between {{arma3}} Tools and Workbench, the new Enfusion Tools suite.

Equivalences are not always possible nor entirely accurate, as some functionalities do not have a perfect match, if any. {| class="wikitable" ! {{arma3}} Tool ! Function ! Workbench equivalent |- | [[Addon Builder]] | Addon packing | {{Link|Arma Reforger:Resource Manager}}: Pack Project |- | [[Binarize]] | Addon binarisation | {{Link|Arma Reforger:Resource Manager}}: Import (model) |- | [[BinMake]] | Addon binarisation | {{Link|Arma Reforger:Resource Manager}}: Pack Project |- | [[CfgConvert]] | Config binarisation | {{Link|Arma Reforger:Resource Manager}}: Pack Project |- | [[Sound Tools]] | Audio file conversion | {{Link|Arma Reforger:Resource Manager}}: Import (audio) |- | [[ImageToPAA]] | Image file conversion | {{Link|Arma Reforger:Resource Manager}}: Import (image) |- | [[FontToTga]] | Font conversion | {{Link|Arma Reforger:Resource Manager}}: Font Viewport |- | [[FBX to RTM]] | Animation conversion | {{Link|Arma Reforger:Animation Editor}} |- | [[Object Builder]] | 3D modelisation | External Editor + {{Link|Arma Reforger:Resource Manager}} / {{Link|Arma Reforger:World Editor}} |- | [[Terrain Builder]] | Terrain generation | {{Link|Arma Reforger:World Editor}} |- | [[Game Updater]] | devBranch updater | {{n/a}} |- | [[FSM Editor]] | AI editor | {{Link|Arma Reforger:Behavior Editor}} |- | [[Publisher]] | Content publisher | {{Link|Arma Reforger:Resource Manager}}: Publish Project |- | [[Terrain Processor]] | Terrain object population | {{Link|Arma Reforger:World Editor}} |- | [[TexView 2]] | Texture importer/viewer | {{Link|Arma Reforger:Resource Manager}}: Import (image), Image Viewport |}

{{GameCategory|armaR|Modding|Tutorials}}
i1ck7cp8dgiisyj7bwpjbwgfayd11h9

# Arma Reforger:Hint Usage

5050
38029
369641
351366
2024-09-29T22:37:45Z
Lou Montana
10739
Some wiki formatting
369641
wikitext
text/x-wiki
{{TOC|side}} This tutorial explains the Hint system.

== Config Creation ==

Create a config that inherits from {{Link/Enfusion|armaR|SCR_HintUIInfo}}; this config has a lot of customisation options.

=== Name ===

Hint's title - should be as short as possible.

=== Description ===

The text displayed in the hint. {{Feature|important|Use either this or the {{Link|#Description Blocks}} - do not use both.}}

=== Icon ===

This will be shown right below the title. If an imageset is provided, the desired icon from the set needs to be set in {{Link|#Icon Set Name}} below.

=== Icon Set Name ===

The icon name if an imageset has been provided in {{Link|#Icon}}.

=== Description Blocks ===

The text displayed in the hint; like {{Link|#Description}}, but allows for more customisation. {{Feature|important|Use either this or the {{Link|#Description}} - do not use both.}}

==== Details ==== Description blocks can be seen like building blocks with which you build your Hint.

There are different types of description blocks that each have their own purpose. {| class="wikitable" ! Block ! Description ! Properties |- | ActionBlockUIName | This is used to display key binds. Automatically changes between keyboard and gamepad. | * Name: this will be displayed above the Key to tell the user what the button does. * Device: only show the block if the user uses the selected Input Device. * Action Name: defines what action will be shown - the action name is defined in {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/System/chimeraInputCommon.conf}} |- | BulletPointUIName | This is just a Text that has a Bullet point in front of it. | * Name: text displayed with the bullet point in front of it. |- | DeviceBlockUIName | This is a normal description block that can be shown when selected Input device is used. | * Name: text displayed. * Device: what input device needs to be used in order for this to be shown. |- | ImageBlockUIName | This allows you to insert an Image into the Text. Other than the Icon, this can be anywhere in the text. Can be either from an imageset or a normal image. Size and color can be changed. | * Name: text shown above the Image. * Image Set: path to the Image or Imageset * Image: if 'Image Set' is a Imageset, define the icon you want to use from the Imageset here. * Scale: defines the scale of the Icon. * Color: sets the color of the Icon. |- | KeyBlockUIName | This works like the ''''ActionBlockUIName'''<nowiki/>' with the difference, that you are not limited to an action but can show custom key binds. | * Name: Text shown above the Keys. * Device: which device should be used in order for this block to be shown. * Key: array of key binds that will be shown. |- | SimpleTextBlockUIName | This can be used as a sub header. An easy way to make the text bold, italic, etc. Can be formatted into "H1, H2, P, B, I". | * Name: text that will be formatted. * Tags: selected tags change the format of the text defined in 'Name". |- | SubBlockUIName | This is just a normal text with no special stuff | * Name: text shown in this block. |- | TipBlockUIName | This can be used as a small Tip. Gets a tip icon in front of it. Has lower opacity and is slightly grey. | * Name: text shown in this block with a tip icon in front of it. |}

=== Type ===

When defined, the hint can be shown only a certain amount of times (defined by the {{Link|#Show Limit}} property below)

=== Show Limit ===

{{Feature|informative|{{GVI|armaR|1.0.0}} This property has currently no effect.}} Determines how often the hint will be shown; if set to 1 the hint is only shown once and then never again, even after game restart.

=== Priority ===

Sets the priority of the hint over other hints: * If the priority if higher or equal to the currently shown hint, this hint will be shown. * If the priority is less than the currently shown hint, the hint will only be shown once the current hint disappears.

=== Duration ===

Defines how long the hint will be visible; if set to 0, set time from HintManager will be used, if set to -1 the hint will stay on screen until closed manually.

=== Highlight Widgets Names ===

Highlights widgets with the provided names - useful for explaining widgets usage in a menu.

=== Is Timer Visible ===

If enabled, a timer bar will appear at the top of the hint: * If a duration is set the bar will behave like a timer. * When the bar finishes its animation, the hint is hidden automatically. * If no duration is set, the bar stays static and does not move.

=== Field Manual Link ===

If set, an option to open the Field Manual to the selected page will be added to the hint.

== Script Creation ==

To create a Hint in script create a new script or use an existing one. In there create a new variable for {{Link/Enfusion|armaR|SCR_HintUIInfo}}.

Then using the <enforce inline>SCR_HintUIInfo.CreateInfo()</enforce> method you can create a hint with your own parameters.

{{Feature|important|{{GVI|armaR|1.0.0}} A Hint created in script does not support Description blocks and as of right now only works with title and description.}}

This is a example on how to create a hint in script using a {{Link/Enfusion|armaR|SCR_ScriptedWidgetComponent}}: <enforce> protected SCR_HintUIInfo TAG_HintInfo { override void HandlerAttached(Widget w) { string description = "#AR-LocalisedDescription"; // see {{Link|#Description}} - this text is localised string name = "Hint's title"; // see {{Link|#Name}} float duration = 10; // see {{Link|#Duration}} EHint type = EHint.UNDEFINED; // see {{Link|#Type}} bool isTimerVisible = true; // see {{Link|#Is Timer Visible}}

// each entry in the EFieldManualEntryId enum represents a specific FieldManual entry // if set, a Field Manual button will appear in the hint, leading to said entry EFieldManualEntryId fieldManualEntry = EFieldManualEntryId.NONE; // see {{Link|#Field Manual Link}}

// create the hint with the information set above // this will only create the Hint but not show it - to show it, a call to SCR_HintManagerComponent.ShowHint() is required // SCR_HintUIInfo is an object with all the set information stored inside. TAG_HintInfo = SCR_HintUIInfo.CreateInfo(description, name , duration, type, fieldManualEntry, isTimerVisible); } } </enforce>

And to show the hint: <enforce> // this will show the Hint immediately. // if there is another hint currently shown it will be replaced with this one. SCR_HintManagerComponent.ShowHint(TAG_HintInfo); </enforce>

== Config Modification ==

To edit a hint that was created in a config you first need to get a reference to it. The easiest way to do that is to create a variable in your script, make it an attribute and assign your {{Link/Enfusion|armaR|SCR_HintUIInfo}} config to it. With this done you are able to edit the following things in your hint: * Description * Title * Text in your description blocks

<enforce> [Attribute("{AE7B95B82AC8B864}TAG_TestHint.conf")] protected ref SCR_HintUIInfo m_Hint; { override void HandlerAttached(Widget w) { if (!m_Hint) return;

// change the description of the Hint m_Hint.SetDescription("Some Description");

// change the titel of the hint m_Hint.SetName("Some Titel");

// change the Text of the selected description block // index = index of description block in descriptionBlocks array in the Hint // text will be formatted to add the needed information like action for the ActionBlock m_Hint.SetDescriptionBlockName(0, "Some Input: %1");

// if the hint is already shown, it can be updated immediately using this // if the hint is not currently shown this can be skiped and SCR_HintManagerComponent.ShowHint(m_Hint) can be called when the hint should be shown SCR_HintManagerComponent.Refresh(); } } </enforce>

== Script Modification ==

Editing a Hint you previously created in your script is the easiest. Take the variable that holds the just change the values you want. {{Feature|informative|{{GVI|armaR|1.0.0}} It is currently only possible to change the hint's description and label. Methods to change other attributes will be added later&reg;.}}

<enforce> class TAG_SomeClass { protected SCR_HintUIInfo TAG_HintInfo;

// ... override void HandlerAttached(Widget w) { // create the hint as we did in the example earlier. TAG_HintInfo = SCR_HintUIInfo.CreateInfo(hintDescription, hintName, duration, type, fieldManualEntry, isTimerVisible);

// change the description of the Hint. TAG_HintInfo.SetDescription("This is a new description");

// change the label of the Hint. TAG_HintInfo.SetName("This is a new name");

// if the hint is already shown, it can be updated immediately using this SCR_HintManagerComponent.Refresh(); } } </enforce>

{{Feature|informative|If the hint is already shown and you want to refresh it, you need to use <enforce inline>SCR_HintManagerComponent.Refresh();</enforce>}}

== Hint Sequence Creation ==

To create a Hint sequence, it is recommended to first create the different configs for each hint as shown above. It is also possible to create the different hints inside the sequence config to have less configs.

# Create a config that inherits from {{Link/Enfusion|armaR|SCR_HintSequenceList}} # Insert or create your hints in the Hints array - hints will be displayed in the order of the array, from first to last # Create an entity (or use an existing one in your world) and attach the {{Link/Enfusion|armaR|SCR_HintSequenceComponent}} to it # In that component, assign your Sequence config to the Sequence attribute

=== Show the Sequence ===

In script, get a reference to your entity and find its {{Link/Enfusion|armaR|SCR_HintSequenceComponent}}. <enforce> // SCR_EditorModeEntity is used as example SCR_EditorModeEntity currentMode = SCR_EditorModeEntity.GetInstance(); if (!currentMode) return;

// find the SCR_HintSequenceComponent attached to the entity SCR_HintSequenceComponent hintSequence = SCR_HintSequenceComponent.Cast(currentMode.FindComponent(SCR_HintSequenceComponent)); </enforce>

With the reference to the {{Link/Enfusion|armaR|SCR_HintSequenceComponent}} you can then start/stop the sequence as well as listen to its <enforce inline>OnSequenceChange()</enforce> invoker.

{| class="wikitable" ! Method ! Description |- | GetOnSequenceActive | Get the event triggered when the hint sequence starts or stops.

return Script invoker. |- | IsSequenceActive | Check if the hint sequence is currently active.

return True when active. |- | StartSequence | Start the hint sequence defined in the {{Link/Enfusion|armaR|SCR_HintSequenceComponent}}. |- | StopSequence | Stop the hint sequence defined in the {{Link/Enfusion|armaR|SCR_HintSequenceComponent}}. |- | ToggleSequence | Toggle the hint sequence defined in the {{Link/Enfusion|armaR|SCR_HintSequenceComponent}}.

Stops the sequence if it is active and starts it if it is not. |}

{{GameCategory|armaR|Modding|Tutorials}}
ssplvz4nem4kytzw5j1fu78vro67lc9

# Arma Reforger:Layout Creation

5050
34486
370904
351827
2025-02-22T16:12:17Z
Lou Montana
10739
Some wiki formatting
370904
wikitext
text/x-wiki
{{TOC|side}} == Definitions ==

=== Display ===

A display is a layout that only provides information to the player; it does not require any input. The player can control his character normally, movement/cursor are not captured. {{Feature|informative|Think Head-Up Display (HUD).}}

=== Menu ===

A menu is an interface that provides choices or functionality to the player. {{Feature|informative|Think Field Manual, Inventory etc.}}

=== Dialog ===

A dialog is an interface that requires player's input. There can be multiple dialogs at the same time, they are then ordered by priority. It is displayed on top of a menu, if any is present. {{Feature|informative|Think OK/Cancel popup window, name input, etc.}}

=== Widget ===

A widget is an element composing a layout - a button, a text, a scrollbar, any "layout part" is a widget.

== Create a Mod ==

See {{Link|Arma Reforger:Mod Project Setup|Mod Project Setup}}.

== Create a Layout ==

Using {{Link|Arma Reforger:Resource Manager}}, open the mod's directory and create the directory tree {{hl|UI\layouts}}; in it, '''right-click > GUI layout''' (or the '''Create button > GUI layout''') to create a {{hl|.layout}} file - this is our new layout.

Double-click on it to open it, using the {{Link|Arma Reforger:Resource Manager: Layout Editor|Layout Editor}} to edit it.

This first example will sport three features: a title, a change text button and a close button. * Clicking the change button will change the title * Clicking the close button will close the UI * Clicking the title will do nothing.

=== Add the Close Button ===

The first widget is an important one; this button will be used to close the opened UI.

Place a {{Link|enfusion://ResourceManager/~ArmaReforger:UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout|WLib_ButtonText.layout}} button by dragging the layout file from the Resource Browser into the opened layout. In the Hierarchy window, name it {{hl|ButtonClose}}.

{{Feature|informative| * Widget names will be used later in the code. * The WLib prefix means Widget Library and is used to find widget prefabs more easily. * Buttons are only useful in Menu and Dialog; as a Display is not interactable }}

To change this button's text, one could be tempted to change ButtonClose > SizeLayout > Overlay > Text's {{hl|Text}} property.

However, as this prefab uses a {{Link/Enfusion|armaR|SCR_ButtonTextComponent}} script component, the displayed value is set within this component.

Click on '''ButtonClose''' (the prefab's topmost widget) and in its properties, under {{Link|Arma Reforger:Resource Manager: Layout Editor#Script|Script}}, find this said component to change its {{hl|Text}} property.

=== Add the Title Text ===

The second widget is the title. Place a {{Link|enfusion://ResourceManager/~ArmaReforger:UI/layouts/WidgetLibrary/RichTextWidgets/RichText_Heading2.layout|RichText_Heading2.layout}} and name it "TextTitle".

=== Add the Change Text Button ===

Place another {{Link|enfusion://ResourceManager/~ArmaReforger:UI/layouts/WidgetLibrary/Buttons/WLib_ButtonText.layout|WLib_ButtonText.layout}} button and name it {{hl|ButtonChange}}.

== Menu/Dialog Setup ==

Menus and Dialogs share the same first steps:

* Add an enum constant by {{Link|Arma Reforger:Scripting Modding|modding}} the {{Link/Enfusion|armaR|ChimeraMenuPreset}} enum in a new script file:<enforce> modded enum ChimeraMenuPreset { TAG_LayoutTutorialExample, } </enforce> * ''Override'' chimeraMenus.conf in the mod (see {{Link|Arma Reforger:Data Modding Basics#Overriding_assets}} - right-click → {{hl|override in LayoutTutorial}}) * Declare this new layout in it by adding an entry (clicking the "+" button): ** The entry name ("object name" required on new entry) '''must''' match the enum constant, here {{hl|TAG_LayoutTutorialExample}}, otherwise the engine will not be able to find the menu and will throw an error ** '''Layout''' - the path to the created layout ** '''Action Context''' - ''unused in this tutorial'' ** '''Class''' - the script class to be used with the menu/dialog, see the next chapter where we will create the {{hl|TAG_LayoutTutorialUI}} class. ** '''Menu Items''' - ''unused in this tutorial'' ** '''Preload Count''' - ''unused in this tutorial'' ** '''Persistent''' - ''unused in this tutorial''

== Class Setup ==

The menu/dialog class must inherit from at least {{Link/Enfusion|armaR|MenuBase}}, {{Link/Enfusion|armaR|ChimeraMenuBase}} or {{Link/Enfusion|armaR|MenuRootBase}}, depending on the required features.

Here is the example adapted to our earlier layout: <spoiler text="Show TAG_LayoutTutorialUI code"> <enforce> class TAG_LayoutTutorialUI : MenuBase { protected static const string TEXT_TITLE = "TextTitle"; protected static const string BUTTON_CLOSE = "ButtonClose"; protected static const string BUTTON_CHANGE = "ButtonChange";

//------------------------------------------------------------------------------------------------ protected override void OnMenuOpen() { Print("OnMenuOpen: menu/dialog opened!", LogLevel.NORMAL);

Widget rootWidget = GetRootWidget(); if (!rootWidget) { Print("Error in Layout Tutorial layout creation", LogLevel.ERROR); return; }

// Close button

SCR_ButtonTextComponent buttonClose = SCR_ButtonTextComponent.GetButtonText(BUTTON_CLOSE, rootWidget); if (buttonClose) buttonClose.m_OnClicked.Insert(Close); else Print("Button Close not found - won't be able to exit by button", LogLevel.WARNING);

// Change button

SCR_ButtonTextComponent buttonChange = SCR_ButtonTextComponent.GetButtonText(BUTTON_CHANGE, rootWidget); if (buttonChange) buttonChange.m_OnClicked.Insert(ChangeText); else Print("Button Change not found", LogLevel.WARNING); // the button can be missing without putting the layout in jeopardy

/* ESC/Start listener */

InputManager inputManager = GetGame().GetInputManager(); if (inputManager) { // this is for the menu/dialog to close when pressing ESC // an alternative is to have a button with the SCR_NavigationButtonComponent component // and its Action Name field set to MenuBack - this would activate the button on ESC press inputManager.AddActionListener("MenuOpen", EActionTrigger.DOWN, Close); inputManager.AddActionListener("MenuBack", EActionTrigger.DOWN, Close); #ifdef WORKBENCH // in Workbench, F10 is used because ESC closes the preview inputManager.AddActionListener("MenuOpenWB", EActionTrigger.DOWN, Close); inputManager.AddActionListener("MenuBackWB", EActionTrigger.DOWN, Close); #endif // WORKBENCH } else if (!buttonClose) { Print("Auto-closing the menu that has no exit path", LogLevel.WARNING); Close(); return; } }

//------------------------------------------------------------------------------------------------ protected override void OnMenuClose() { // here we clean action listeners added above as the good practice wants it InputManager inputManager = GetGame().GetInputManager(); if (inputManager) { inputManager.RemoveActionListener("MenuOpen", EActionTrigger.DOWN, Close); inputManager.RemoveActionListener("MenuBack", EActionTrigger.DOWN, Close); #ifdef WORKBENCH inputManager.RemoveActionListener("MenuOpenWB", EActionTrigger.DOWN, Close); inputManager.RemoveActionListener("MenuBackWB", EActionTrigger.DOWN, Close); #endif // WORKBENCH } }

//------------------------------------------------------------------------------------------------ protected void ChangeText() { Widget rootWidget = GetRootWidget(); if (!rootWidget) return;

TextWidget textTitle = TextWidget.Cast(rootWidget.FindWidget(TEXT_TITLE)); if (!textTitle) { Print("Title as TextWidget could not be found", LogLevel.WARNING); return; }

string result; switch (Math.RandomInt(1, 6)) { case 1: result = "This is a title"; break; case 2: result = "Random text"; break; case 3: result = "Third text, actually"; break; case 4: result = "Bonjour"; break; case 5: result = "I like trains"; break; }

textTitle.SetText(result); } } </enforce> </spoiler>

== Usage ==

In order to test more easily, we can place a prefab with an ActionsManagerComponent to add actions that trigger UI creation. Each action targets a specific type (display, menu, dialog and their respective classes, {{hl|TAG_DisplayAction}}, {{hl|TAG_MenuAction}} and {{hl|TAG_DialogAction}}).

{{Feature|informative|See {{Link|Arma Reforger:Action Context Setup|Action Context Setup}} for more information.}}

=== Display ===

<enforce>GetGame().GetWorkspace().CreateWidgets(m_sLayout);</enforce>

=== Menu ===

<enforce>GetGame().GetMenuManager().OpenMenu(ChimeraMenuPreset.TAG_LayoutTutorialExample);</enforce>

=== Dialog ===

<enforce>GetGame().GetMenuManager().OpenDialog(ChimeraMenuPreset.TAG_LayoutTutorialExample, DialogPriority.INFORMATIVE, 0, true);</enforce>

=== Code ===

<spoiler text="Show Scripted Action code"> <enforce> class TAG_ScriptedUserAction : ScriptedUserAction { [Attribute(defvalue: "{74A4182551CBD740}UI/layouts/TAG_LayoutTutorial.layout")] // setup the created layout here protected ResourceName m_sLayout;

protected ref Widget m_wDisplay; }

class TAG_DisplayAction : TAG_ScriptedUserAction { //------------------------------------------------------------------------------------------------ override void PerformAction(IEntity pOwnerEntity, IEntity pUserEntity) { if (m_wDisplay) { delete m_wDisplay; return; }

m_wDisplay = GetGame().GetWorkspace().CreateWidgets(m_sLayout); }

//------------------------------------------------------------------------------------------------ override bool GetActionNameScript(out string outName) { if (m_wDisplay) outName = "Delete display"; else outName = "Create display";

return true; } }

class TAG_MenuAction : TAG_ScriptedUserAction { //------------------------------------------------------------------------------------------------ override void PerformAction(IEntity pOwnerEntity, IEntity pUserEntity) { if (m_wDisplay) { delete m_wDisplay; return; }

GetGame().GetMenuManager().OpenMenu(ChimeraMenuPreset.TAG_LayoutTutorialExample); }

//------------------------------------------------------------------------------------------------ override bool GetActionNameScript(out string outName) { if (m_wDisplay) outName = "Delete menu"; else outName = "Create menu";

return true; } }

class TAG_DialogAction : TAG_ScriptedUserAction { //------------------------------------------------------------------------------------------------ override void PerformAction(IEntity pOwnerEntity, IEntity pUserEntity) { if (m_wDisplay) { delete m_wDisplay; return; }

GetGame().GetMenuManager().OpenDialog(ChimeraMenuPreset.TAG_LayoutTutorialExample, DialogPriority.INFORMATIVE, 0, true); }

//------------------------------------------------------------------------------------------------ override bool GetActionNameScript(out string outName) { if (m_wDisplay) outName = "Delete dialog"; else outName = "Create dialog";

return true; } } </enforce> </spoiler>

Using these actions allow to see the different behaviours of said interface - be sure to set the action's default layout ({{hl|m_sLayout}} either in code or in Action's configuration UI.

== See Also ==

{{Link/Enfusion|armaR|MenuManager}}'s various methods, including: * <enforce inline>IsAnyDialogOpen()</enforce> - check if an existing dialog exists * <enforce inline>GetTopMenu()</enforce> - get the topmost menu * <enforce inline>CloseAllMenus()</enforce> - close all opened menus

{{GameCategory|armaR|Modding|Tutorials}}
bxmzxeyarjvoffkdvxybmrbvju9c44e

# Arma Reforger:Mod Localisation

5050
32681
369730
369676
2024-10-08T14:08:47Z
Lou Montana
10739
Some wiki formatting
369730
wikitext
text/x-wiki
{{TOC|side}} [[File:armareforger-localization-logo.png|400px|center]]

This page describes the process of adding localisation to addons. It is recommended to go through [[Arma_Reforger:String_Editor|String Editor documentation]] first since most of the procedures are shared.

== Creating new localisation table ==

Creating of new string table (.st) file is described on String Editor - New *.st file page and below is quick rehearsal of those instructions

=== Creating new localisation files ===

{{Feature|informative|This is the '''recommended method'''.}} [[File:armareforger-localization-workbench-create-new.png|right|frameless|544x544px]] New localisation files - string table and runtime string tables - can be simply created via '''File → New''' option (alternatively, Ctrl+N shortcut can be used). Once activated, a new pop up window will appear and ask you to provide file name and location of new localisation files. After it is confirmed with '''OK''' button, '''String Editor''' will create new '''.st file''' and '''runtime configs for all languages''' available in-game (see the {{Link|#Localisation targets table}} for a list of languages). {{Clear}} [[File:armareforger-localization-workbench-create-new-files.png|right|frameless|532x532px]] If you do not plan to translate your addon into all languages, you can '''safely remove unnecessary config files''' and recreate them at later point manually.

In any case, at this stage it is possible to move forward and register both '''string table''' and '''runtime stringtable configs''' in Workbench options. To do so, skip to [[#Registering_localisation_table|Register Localisation Table]] segment{{Clear}}

=== Manual method ===

{{Feature|obsolete|this method is error-prone and no longer recommended.}} <spoiler> ==== Creating new string table ==== {| class="wikitable" | [[File:armareforger-localization-create-stringtable.png]] | 1. In '''Resource Browser''' select a folder where you want to create a new '''*.st''' file - In this example it is '''SampleMod_NewCar/Language folder.''' Next, either click with ''Right Mouse Button'' on '''Resource Manager''' field '''(1a)''' or use '''Create''' button '''(1b)'''

In both cases, new context menu should appear - pick "'''GUI string table'''" '''(2)''' from that list. |- | [[File:armareforger-localization-set-filename.png]] | 2. Set the name of the file. It is highly recommended to use some [[Scripting Tags|unique tag]] in front of the file name (f.e. ''samplenewcar_localization.st'') to avoid GUID clashes. |- | [[File:armareforger-localization-set-class.png]] | 3. Choose '''StringTable''' class and confirm by clicking once on it '''StringTable''' entry with ''Left Mouse Button'' |}

==== Setting basic parameters ==== If those steps above were performed successfully, a new '''localization_MyAddon.st''' should be now visible in '''Resource Manager''' asset browser.

[[File:armareforger-localization-open-stringtable.png]]

Click on newly created localization.st file with ''Right Mouse Button'' and select '''Open File in New Tab (1)''' option from context menu. This should open that string table in new tab, where some of the internal bits of string table class can be changed.

By default, newly created string tables are using platform agnostic settings and both '''Target Prefix''' & '''Item Class Name''' parameter have to be changed in order to be used in '''String Editor'''. Following values must be used

* ''Target Prefix'': '''Target_''' * ''Item Class Name'': '''CustomStringTableItem'''

After that, '''localization.st''' file should be ready to be used by '''String Editor'''. A simple test can be performed by either double clicking with ''Left Mouse Button'' on localization.st resource in '''Resource Browser''' (this will open that file in String Editor) or by manually opening '''String Editor''' (''Editors → String Editor'') and then using File → Open option.

[[File:armareforger-localization-stringtable-empty.png]]

==== Adding runtime string tables ==== [[File:armareforger-localization-create-config.png|right]] Runtime string tables are files which are used by the game itself and they are created in very similar way to regular string tables.

Main difference is fact that instead of selecting '''GUI string table''' context menu, you should pick '''Config file (2)''' option instead of ''GUI string table''.

In next dialog, fill name of that new run time string table (i.e. ''samplenewcar_localization.en_us.conf''). Once that step is completed, a new window will appear, asking you to '''choose a class''' of new config - this time '''StringTableRuntime''' should be used.

Depending on how many languages are supposed to be translated, repeat above steps till all translation variants are created. </spoiler>

=== Localisation targets table ===

Below is small table showing various localisation targets shortcuts {| class="wikitable" | '''en_us''' | English (United States)

Serves as a source for translated texts.

If proofreading or translation is in progress, use 'Target_en_us_edited' instead. |- | '''en_us_edited''' | English (United States)

Use this when the string is being processed by proofreaders or translators.

Once it is done, the Localisation Manager will move this text to 'Target_en_us' |- | '''fr_fr''' | French (France) |- | '''it_it''' | Italian (Italy) |- | '''de_de''' | German (Germany) |- | '''es_es''' | Spanish (Spain) |- | '''cs_cz''' | Czech (Czech Republic) |- | '''pl_pl''' | Polish (Poland) |- | '''ru_ru''' | Russian (Russia) |- | '''ja_jp''' | Japanese (Japan) |- | '''ko_kr''' | Korean (South Korea) |- | '''pt_br''' | Portuguese (Brazil) |- | '''zh_cn''' | Chinese (China) |}

{{Clear}}

== Registering localisation table ==

[[File:armareforger-localization-workbench-options-add.png|right]] Next step is registering of localisation table in game project file. To do so, navigate to '''Workbench → Options'''

[[File:armareforger-localization-workbench-settings.png]]

# Make sure that you are editing correct game project by checking which addon is shown in '''drop down menu (1)'''. In this case it is '''SampleMod_NewCar''' # Navigate to '''Widget Manager Settings (2)''' # Locate '''String Tables (3)''' entry and expand it by pressing on little blue arrow on the left side # Add new element to '''String Tables''' array by clicking on small plus sign '''(4)'''. This will be a new entry holding information about string table file created previously # Locate previously created '''string table (.st) file''' by clicking on three small dots '''(5)''' and then selecting that file # Add new element to '''Languages''' array by clicking on dot on the right side '''(6)''' # Type '''code of new language''' (see table above for available codes) to field marked with number '''7''' on the picture # Select '''runtime stringtable file (8)''' appropriate to the language code which was created in previous step. In this case code is en_us, so String Table Runtime is ''samplenewcar_localization.en_us.conf''

If all steps were performed correctly, new string table should be now ready to be used!

{{Clear}}

{{Feature|important|Restart of the workbench might be necessary to initialise new string tables properly.}}

== Localising assets ==

In this chapter, name of Sample New Car visible in in-game Editor will be localised.

=== Localising asset via plugin ===

[[File:armareforger-localization-plugin.png|right]] Alternative method involves using '''Resource Manager''' plugin called "'''Localize Selected Assets'''".

This plugin automates most of the process by searching for strings defined by a config file. Localisation parser configs (selected through '''Config Path''' parameter in '''Localize Selected''' plugin) contain various look up rules, default string table where to store changes & prefix settings. While having string table and prefix defined in config might be quite useful when working on projects involving multiple people, it is also possible to override '''String Table Path & Prefix''' parameters, so it is also possible to use existing {{armaR}} configs in smaller addons. {{Clear}} [[File:armareforger-localization-asset-string.png|left]]

Vehicles in-game Editor display name is defined in '''SCR_EditableVehicleComponent -''' there, in the '''Visualization''' section, a '''Name''' parameter can be found. In this case, '''Name''' parameter was set to ''Sample New Car (Black)'' and goal is to have that string present in runtime string table.

To do so, select in Resource Browser assets to localise and then navigate to '''Plugins → Localize Selected Files''' in top navigation bar or use Ctrl+Alt+L shortcut.

'''Localize Selected File''' plugin window should now appear. Following changes to default parameter values need to be performed:

* Changing '''Config Path''' param to '''Editor.conf''' - this config will ensure that all editor related strings (like this vehicle display name) will be properly localised * Changing '''String Table Override -''' by default plugin is storing all changes to the string table defined in config file itself. Since duplicating this config file might be an overkill for localising 2 assets, it is possible to change string table which is used by selecting another string table in plugin itself. In this case '''localization.st''' in '''SampleMod_NewCar''' is selected * Changing '''Prefix Override''' - similar to string table, string prefix is stored in config file. In this case, prefix is changed to '''SampleMod-''' to ensure that those new string tables will not clash with vanilla data.

Once parameters are adjusted, it is possible to localise those files - to do so, press the '''Localize''' button.

After that, plugin will open '''String Editor''' (if it is not open already), '''open string table''' defined in '''String Table Override''' property, '''perform scan''' for any editor related entries & then finally '''store it in string table'''. {{Clear}}

[[File:armareforger-localization-using-plugin.gif]]

=== Localising asset manually ===

[[File:armareforger-localization-new-string-asset-manual.png|right]]

It is also possible to manually change '''Name''' property in '''Editable Component''' and then add that string to string table. To do so, it is necessary to replace '''Name''' property in '''Editable Component''' with variant containing # prefix - i.e. ''#SampleMod-EditableEntity_SampleCar_01_Base_Name''.

Next, it possible to add that string to '''String Table''' by following instructions on [[Arma_Reforger:String_Editor#Add_a_New_Localised_String|String Editor page]]. In principle, following steps have to be done: * Fill in the new string name ('''without a hastag in front!''') into StringID field * Click on '''Insert''' button '''(2)'''. After that, new string should be added to '''list of available strings (3)''' * Write English version of the string in '''Target En Us''' field located in '''Default (4)''' section * Add localisation for rest of languages - if field is empty, English is used.

Parameters in '''Custom (5)''' section are usually filled by the plugin and those serve as hint for localisation team, so they are aware of string/sentence context. That section is non mandatory.

{{Clear}} [[File:armareforger-localization-new-string-manual.jpg]]

=== Regenerating runtime tables ===

[[File:armareforger-localization-runtime-table.jpg|left|frame]]

If all strings were properly added to string table then it is time to '''generate runtime tables'''. Without '''runtime tables''', game will be not able to see strings located in string table file. Only after string table is parsed to optimized, game ready format, strings will be ready to use. To do so, head to String Editor and select from top bar '''Table → Build Runtime Table''' (''also accessible under Ctrl+B shortcut''). That's it - process should take just few seconds and runtime string table should be ready to go.

{{Feature|important|Don't forget to regenerate runtime tables every time you are done with tweaking string table file!}}

{{Clear}}

== Localising scripts ==

By default, any engine will try to localise any string (''LocalizedString'' ) in '''UI''' if it is starting with '''hash (#) sign'''. There is no equivalent of the previous [[SQF Syntax|SQF]] [[localize]] command.

{{Feature|informative| Please use '''LocaleEditBox''' when exposing variables in script

<enforce> [Attribute(uiwidget: UIWidgets.LocaleEditBox, defvalue: "#AR-Editor_Hint_Intro_Title")] protected LocalizedString m_sIntroHintTitle; </enforce> }}

== Testing result in-game ==

String can be verified in game by launching i.e. in game editor and checking if strings are showing proper data instead of hashtag prefixed strings.

It is also possible to verify if strings are localised by selecting from '''[[Arma Reforger:Diag Menu|Diag Menu]] &rarr; UI &rarr; Disable &rarr; Disable Loc''' option. This debug will disable automatic localisation of strings and will show names in their original, with hash tag prefix, form.

{{Feature|informative|See [[Arma Reforger:Diag Menu|Diag Menu]] for more information.}}

[[File:armareforger-localization-results.jpg]]

{{GameCategory|armaR|Modding|Tutorials}}
qylmg6btp3h9jyl0trcyd01f0vr24ko

# Arma Reforger:Mod Project Setup

5050
32878
373987
371067
2025-07-15T12:30:45Z
Reyhard
10671
/* Project is read-only */
373987
wikitext
text/x-wiki
{{TOC|side||4}} == Prerequisites ==

* {{GameCategory|armaR|link= y}} installed * {{GameCategory|armaR|Modding|Official Tools|text= Workbench}} installed

== Workbench Launcher Setup ==

Before creating a new project, it is necessary to set Enfusion Workbench Launcher so it knows where Reforger data is located. Reforger data is essential for Workbench to function correctly so its important

There are two ways how to prepare Workbench for creation of the addon - automatic & manual - which are described below

=== Preparing Data ===

By default, every time '''Arma Reforger (game)''' is launched, executable will automatically add hidden link to the data '''ArmaReforger.gproj''' in Windows Register.

It might happen though, that automatic detection is not working (f.e. installation dir was moved) and because of that, '''it is recommended to manually add ArmaReforger.gproj''' to Project list

==== Adding Arma Reforger Project ====

# Start the Workbench either through Steam ({{hl|Tools > Arma Reforger Tools > START}}) or by double-clicking '''ArmaReforgerWorkbenchSteam.exe''' located in the Workbench installation directory.<br>The following screen will appear:<br>[[File:armareforger_modsetup-launcherwindow-reforgernotfound.png]] # Click "Add Existing" button # Browse to {{hl|ArmaReforger.gproj}} (located in {{hl|&lt;{{armaR}} installation directory&gt;\addons\data\ArmaReforger.gproj}}) and select it #{{armaR}} project is now listed in the Projects window.<br>[[File:armareforger_modsetup-launcherwindow-reforgerfound.png]]

==== Adding Other Existing Projects ==== Other projects, like dependencies, can be added one by one via '''Add Existing Project''' as described above or by using '''Scan for Projects''' button. * Click on '''+ Add Project''' button * Select '''Scan for Projects''' from the list * Select folder where you have addons located, which you want to use as dependencies * Confirm selection [[File:armareforger-modsetup-scan-for-projects.gif]]

Now you can either try to launch one of those mods or use them as dependencies

{{Feature|informative|Projects list is stored in user profile. You can use different profile via [[Arma_Reforger:Startup_Parameters#profile|-profile]] command line parameter, allowing you to have '''set of mods''' for various occasions or for '''different version of game'''. [[File:armareforger-modsetup-profile-cli.png]]}} == Project Creation ==

* Open Enfusion Workbench Launcher if you don't have it already open.<br><!-- -->[[File:armareforger_modsetup-launcherwindow-reforgerfound.png]]<br><!-- -->This interface displays existing projects known to Workbench and will later display the current creation; an existing project is openable by selecting it and clicking '''Open''' to edit it. * Click "'''Create New'''" to open the project creation interface {| | [[File:armareforger_modsetup-newprojectwindow.png|thumb|Vanilla {{armaR}}]] | [[File:armareforger_modsetup-newprojectwindow-modded.png|thumb|Modded {{armaR}}]] |} * Enter the project's name ** the project's name can only contain '''letters''', '''numbers''', '''spaces''' and the following symbols: '''-''' (dash) '''_''' (underscore) and '''.''' (dot). * Confirm or edit the project's location<!-- --> *{{Feature|warning|Do not create projects in '''OneDrive''' directories - such project will fail to load! }}{{Feature|important|Be sure to pick a location where the current Windows user has write permissions (e.g {{hl|C:\Users\Username\Documents}} - '''not''' {{hl|C:\Program Files}}).}}<!-- -->{{Feature|informative| The default project directory's location is {{hl|%userProfile%\Documents\My Games\ArmaReforgerWorkbench\addons}}; the default project name (and directory name) is {{hl|New Enfusion Project}} - it can only contain letters, numbers, ampersands, spaces, dashes, dots and underscores. }} * Pick the project's dependencies: ** dependencies are other projects (and/or mods) on which the current project relies to work ** a project cannot be loaded if a dependency is missing ** the dependency link is one-way: a dependency does not need the current project in order to be loaded ** {{armaR}} is a default dependency: an {{armaR}} mod needs {{armaR}} data to run properly * Click "'''OK'''" to create the project. {{Messagebox|Dependencies of created project can be later changed in [[Arma_Reforger:Resource_Manager:_Options#Dependencies|Resource Manager Options]]|✩|#88cc88}}''Et voilà !'' The project is created and the Workbench [[Arma Reforger:Resource Manager|'''Resource Manager''']] is waiting for input.

{{Feature|informative|The {{hl|addon.gproj}} file can be renamed to have a more fitting name; the project will then need to be re-added to the Projects list on Workbench opening.}} {{Messagebox|'''Recommended read''': * {{GameCategory|armaR|Modding|Official Tools|text= Tools Documentation}} - for general knowledge about using Workbench * {{GameCategory|armaR|Modding|Assets|Tutorials|text= Asset Creation Tutorials}} - if you intend to create or modify assets, like changing weapon parameters or adding new vehicle * {{GameCategory|armaR|Modding|Scripting|Tutorials|text= Scripting Tutorials}} - this category contains various pages explaining how to create your first script * {{GameCategory|armaR|Modding|Scenario|Tutorials|text= Scenario Creation Tutorials}} - tutorials explaining how to create your first scenario in World Editor * {{GameCategory|armaR|Modding|Terrains|Tutorials|text= Terrain Tutorials}} - tutorials containing information how to create your first terrain |📖|lightgrey}}

== Managing Projects ==

=== Launching Project === When launching Enfusion Workbench Launcher second and after projects were added to the list, launching of mods can be done in following ways:

* By double clicking with {{Controls|LMB}} on mod (either tile or element in list view) * By clicking on it with with {{Controls|rmb}} and selecting option "'''Open'''" (1) from context menu [[File:armareforger-modsetup-open-project.png]]

==== With Mods ==== [[File:armareforger-modsetup-open-with-presets.png|thumb|Launching mod with additional mods and preset menu]] Launching your project with other addons, which are '''not dependencies''', can be done via '''Open with Addons''' '''(2 on picture above)''' option which is available in context menu visible after pressing on mod in list with {{Controls|rmb}}. After selecting this option, a new menu '''''- Open project with additional addons''''' (similar to one, used for setting dependencies) - will show up and you will be able to select your dependencies.

===== Presets ===== List of additionally launched mods in '''''Open project with additional addons''''' menu is saved and restored when using this option. Additionally, selections of those addons is stored in '''Presets,''' which you can use to switch between specific mod sets. '''Presets''' are shared for all addons listed in '''Enfusion Workbench Launcher.'''

'''You can select one of the 8 presets''' by clicking on '''Preset ''x''''' list box in top right corner of the window'''.'''

=== Removing Projects === Projects can be removed by Enfusion Project List by clicking on them with {{Controls|rmb}} and then selecting '''Remove from List''' option. This will remove project '''only from the list''' and data itself will remain intact.

[[File:armareforger-modsetup-removing-project.png]]

=== Projects View === It is possible to switch between List & Grid view. To do so, click on '''cog''' icon in top right corner and select one of the views from the context menu.

[[File:armareforger-modsetup-list-grid-view.gif|alt=]] == Experimental Branch ==

It is also possible to create and publish projects using Experimental Branch of the tools. For more info, head out to [[Arma Reforger:Experimental Branch|'''Experimental Branch''']] page. == Troubleshooting ==

=== {{armaR}} project is not found in the Projects window ===

* You need to add '''Arma Reforger game project''' ('''not your project!''') to the list. See instructions listed in [[Arma Reforger:Mod Project Setup#Adding Arma Reforger Project|Adding Arma Reforger Project]] section {{Feature|important|Be sure to use the adequate Workbench to open the corresponding data. Using default Workbench to open e.g Experimental branch data may result in errors!}}

{{GameCategory|armaR|Modding|Tutorials}}

=== Arma Reforger Workbench loads without selected mod === Make sure that all dependencies of your mod are visible in the Workbench project list. This also includes dependencies of dependencies!

Usually you will find following error in '''Log Console'''<enforce> INIT : Workbench startup INIT : Workbench Init Engine ENGINE (E): Addon 'SampleMod' dependency '5614E48126E3ADF2' can't be added </enforce>

This means, that addon ''5614E48126E3ADF2'' was not found and due to that, '''SampleMod''' cannot be loaded. Workbench will still launch but it will skip all mods which couldn't be loaded and quite often only ArmaReforger addon will be loaded. To find name of that name, you can for instance try to find it on workshop, by adding GUID to the end of link https://reforger.armaplatform.com/workshop/ (f.e. https://reforger.armaplatform.com/workshop/5614E48126E3ADF2 ). If this is a local mod, then search for that specific GUID in local addons that you have created.

Instruction how to add mod to Enfusion Workbench Launcher project list can be [[Arma Reforger:Mod Project Setup#Adding Other Existing Projects|found above]].{{Feature|important|Keep in mind dependencies of dependencies have also to be listed in Projects list - otherwise Workbench will not be able to locate such addon.}} ===== Empty dependency ===== In some cases, you might end up with dependency with empty dependency (<nowiki>''</nowiki>) which most likely was done by trying to remove dependency in incorrect way.<enforce> INIT : Workbench startup INIT : Workbench Init Engine ENGINE (E): Addon 'SampleMod' dependency '' can't be added </enforce>

In such scenario it might be necessary to open mentioned mod .gproj file in text editor (like notepad) and manually remove <nowiki>''</nowiki> dependency from '''Dependencies''' array.

=== Project is read-only === If you see read-only icon in project then ensure that:

* It's not synced via OneDrive (or similar, issue also applies to GDrive) * Project is not in the same folder as where downloaded Workshop mods are located If you need to unlock your mod, which was locked by cloud service, use following code in batch file and then execute it in root of your addon.<enforce> @echo off setlocal enabledelayedexpansion

echo Removing read-only attributes recursively from all files and folders... echo Current directory: %CD% echo.

echo Processing folders... for /d /r %%D in (*) do ( attrib -r -s "%%D" /S /D echo Processed: %%D )

echo. echo Processing files... attrib -R *.* /S

echo. echo Process completed successfully. pause </enforce>
cy7gizwuzoiqm7mrgiqhty127nmhst4

# Arma Reforger:Mod Publishing Process

5050
32755
376065
373990
2025-07-25T10:49:05Z
Reyhard
10671
/* Troubleshooting */
376065
wikitext
text/x-wiki
{{TOC|side}} == Publication ==

=== Prerequisites ===

To publish mod on the Workshop, following things are necessary:

* '''Working mod''' (if it was published before, you have be '''owner''' of that mod) * '''Bohemia Account'''

If you already have '''Bohemia Account''', then you can login to Bohemia backend by using '''Workbench > Link option.''' This option should open new pop up window where it is possible to type email & password associated with '''Bohemia Account'''. After that was typed in, you can click on '''Login''' button - if password and account are correct, this will log into your '''Bohemia Account''' and link it with '''currently logged Steam account'''.

[[File:armareforger-publishing-mod-window.png]] [[File:armareforger-publishing-mod-login.png]]

If you don't have account or you don't remember password to it, it is possible to click on '''Forgot Password?''' link, to initiate password recovery or use '''Create Account''' link, to create a new '''Bohemia Account'''.{{Feature|important|For collaboration on mod it is recommended to use '''Contributors''' feature described in [[#Interface|interface]] segment.

Otherwise, due to Bohemia Account being linked to Steam account after first login, you would need to share credentials for '''Bohemia & Steam account''' which were used to upload the mod.}}

==== Experimental version ==== When using [[Arma Reforger:Experimental Branch|Arma Reforger Experimental Tools]], it is necessary to create separate {{Link|https://accounts-sub-ar.bistudio.com/auth/register|account on experimental backend}}. Same email address as for regular tools can be added. Once account is created, you can login into it as described above.

Experimental Workshop is separate from stable (non experimental) - mods published to experimental workshop are not visible in stable version of the game and vice versa (mods published to stable Workshop are not visible experimental version of the game)

=== Interface ===

Publishing a mod is the process of making the mod available on the Workshop. A bundled mod is required.

In order to do so, click on '''Workbench > Publish Project'''.

This will open the following interface:

[[File:armareforger-publishing-mod-interface.png|left|thumb|700px|Publish project window]] [[File:armareforger-publishing-mod-workshop-game-interface.png|thumb|right|600px|Workshop in-game interface]]

The following fields are offered: [[File:armareforger-publishing-mod-workshop-categories.png|thumb|right|600px|Workshop categories]]

{| class="wikitable" ! Field Name ! Description ! Additional Notes |- | '''Project Name''' | Project's workshop name. | A maximum of 30 characters is allowed. |- | '''Working Dir''' | Directory where bundled version of the project will be stored. '''Do not use same directory as where your addon is located!!! It best to leave it to default location in most cases.''' | By default it is ''%userprofile%\Documents\My Games\ArmaReforger\publish\addonName''. |- | '''Preview Image''' | The project's workshop preview image. | Maximum allowed size of the image is 2MB,. It can be JPG or PNG. |- | '''Screenshots''' | A gallery of pictures for the users to browse. | Maximum allowed size of the image is 2MB. It can be JPG or PNG. |- |'''Contributors''' |List of contributors which can publish updates of the mod. Only original author of the mod is able to edit list of contributors and remove it completely from Workshop. List should contain '''emails''' used in Bohemia Account '''separated by coma, space or a new line.'''

Contributor needs to '''accept invitation''' via '''Workbench>Check''' '''Pending Invitation''' option in the toolbar. | |- | '''Category''' | One or multiple categories in which the mod fit. | At '''least one category''' has to be selected. |- | '''Tags''' | Search tags used to get a more precise search result (e.g WW2, CTF, Survival etc). | Tags are separated by space. |- |'''License''' |License which is applied to the mod. Can either use one of 3 [[Licenses|existing licenses]] or custom one

* [https://www.bohemia.net/community/licenses/arma-public-license Arma Public License (APL)] * [https://www.bohemia.net/community/licenses/arma-public-license-share-alike Arma Public License Share Alike (APL-SA)] * [https://www.bohemia.net/community/licenses/arma-public-license-nd Arma Public License Non Derivative (APL-ND)] * Custom license - if this option is picked, a full license of the addons has to be provided in '''license.txt''' file inside root of the addon. | Currently there is no way to check license of the addon as 3rd party user. |- | '''Version''' | The project's version. In the format <major>.<minor>.<bugfix>, should ideally be incremented on every update, with the exception of workshop information fix. |Version number can go up 32000 |- | '''Visibility''' | * '''Public:''' Makes the project visible to everyone. * '''Private:''' Makes the project visible only to the uploader. * '''Unlisted:''' Hides the project in search results. Mod can be still used on dedicated server and downloaded by other users. * '''Test:''' Makes the project visible only in '''Test''' mods category. |- | '''Summary''' | The project's workshop '''short''' text preview. |Maximum '''1024 characters are allowed''' |- | '''Description''' | The project's workshop '''full''' description. It is possible to open larger, pop up window, for longer descriptions. |Maximum '''5000 characters are allowed''' |- | '''Change Notes''' | A summary of all changes introduced in this version of the update. |Maximum '''30000 characters are allowed''' |} {{Clear}} === Publishing Process ===

When everything needed is filled and bundle was prepared, click on '''Publish''' to publish the package to the workshop. {{Feature|warning| Before proceeding, it is worth making yourself familiar with {{Link|https://reforger.armaplatform.com/workshop-terms|{{armaR}} Workshop Terms of Service}} and make sure that you '''hold all the required rights''' to the uploaded mod's content.<br> If you are not sure about this aspect, '''check the {{Link|Intellectual Property}} page'''. }} After pressing '''Publish''' button, bundling process starts, which creates '''packed data''', where any unneeded source files are removed, '''manifest.json''' - where backend related data is stored, '''copies pictures''' (''preview image, screenshots, mission previews'') and '''prepares zip''' '''file,''' with all previously generated data''',''' which is ready to be uploaded to '''Workshop'''. The editable data set is called the '''source files'''. Once packaged, this is called '''packaged files''' or '''package''' – the data is compressed, indexed and encrypted. * Packaged files are meant for public distribution * Packaged files cannot be extracted back to source files – so '''be sure to keep them safe and with backups'''! * '''Source files are ignored''': ** .meta ** .txa (text animation) ** .txo (text model) see [[Arma Reforger:File Types|File Types]] page for full list * Deflate compression is applied to the resulting files ** .anm, .data, .edds, .et, .nmn, .wav, and .xob are excluded from compression * Encryption

Depending on the size of the project, bundling process can take from few seconds to couple minutes.

After bundling is completed, a new pop up window will appear showing how much data is going to be uploaded to Workshop and asking you if you want to continue. After clicking yes, uploading process itself begins.

== Update ==

To update an already published mod, open the mod project again with the Workbench. Apply any changes needed (data, metadata), fill the new '''Change Notes''' field with the changes applied, and press '''Publish button''' to update the data.

Any change to description, visibility, pictures, etc has to be '''bundled first''' and then '''published as new version'''.

== Removing mod ==

[[File:armareforger-publishing-mod-removing-mod.png|thumb]] Mods can be removed from by selecting '''''Workbench →'' Remove from Workshop''' option in '''Resource Manager''' top bar. {{Feature|warning|Warning, removing mods is '''irreversible and permanent!''' Proceed with caution!}} {{Feature|informative|If you lost your source addon you can still delete it by either downloading that mod in game Workshop, opening it in Workbench and then using Remove from Workshop or just by creating new addon, grabbing GUID of your addon from web version of the Workshop and then using that GUID in your addon: Create an empty folder that just gets an addon.gproj file with the well known structure and this GUID. Add this as a project, open it and then remove it from the workshop.}}

{{Clear}} == CLI Parameters ==

Mods can be bundled and packed using command line parameters documented at {{Link|Arma Reforger:Startup Parameters#Workbench}}.

== Troubleshooting ==

If problems arise with logging to Bohemia Account or publishing mod, the first thing to do is to look at the '''Console Log'''.

=== Failed to load metafile of mission config image === RESOURCES : Packaging project successful RESOURCES (E): Failed to load metafile of mission config image: DEFAULT (E): Cannot copy image: RESOURCES (E): Creating bundle failed Make sure that all mission configs in your mod are pointing to .edds files which have sources (like png, tiff or similar) available.

=== You are not the owner of the asset ===

Make sure that the '''Steam''' '''account''' you are using is the same as the one you used for the initial upload. === Sound map/Topology map/Navmesh is missing ===

DEFAULT (W): Sound map is missing DEFAULT (W): Topology map is missing DEFAULT (W): Navmesh is missing

This issue can be ignored if the published mod is not a terrain. Otherwise, make sure the terrain has all the listed things - see [[Arma Reforger:2D Map Creation|2D Map Creation]] and [[Arma Reforger:Navmesh Tutorial|Navmesh Tutorial]].

{{GameCategory|armaR|Modding|Tutorials}}

=== Addon processing failed === <syntaxhighlight lang="c"> DEFAULT (E): Addon processing on Workshop side failed! Error UID: "" Error Message : "Unknown Error" </syntaxhighlight>

* Make sure that your mod contains some content - it is not allowed to publish empty mods. See https://feedback.bistudio.com/T193526

=== Workshop timeout === <syntaxhighlight lang="c"> BACKEND (E): [RestApi] ID:[54] TYPE:[EBREQ_WORKSHOP_UploadAssetFile] Error Code:524 - Unimplemented 5xx, apiCode="", uid="", message="" </syntaxhighlight>Try publishing again later - Workshop is timing out
518mdw4jw6fuubl794be12m7t9ign6t

# Arma Reforger:Modular Button Component Tutorial

5050
47147
370632
2025-01-16T17:57:10Z
Lou Montana
10739
Page creation
370632
wikitext
text/x-wiki
{{TOC|side}} The Modular button component is a system which consists of a button component itself and various effects attached to it. The aim of the system is to separate the effect types (animation, opacity, color, text, image, ...) from when they can happen (on click, or hover, on toggle, on focus, ...).

== Usage ==

# Create a layout containing a Button widget{{Feature|informative| The {{Link/Enfusion|armaR|SCR_ModularButtonComponent}} component is meant to be used on a button widget to control the look and properties of the underlying hierarchy, and to provide an API for other classes to interact. }} # Add the {{Link/Enfusion|armaR|SCR_ModularButtonComponent}} to the button - it is also possible to drag and drop a config of {{hl|SCR_ModularButtonComponent}} type # Add Effects to the {{hl|Effects}} array the component provides. Effects represent the properties of widgets under the button that you want to change, and the events on which you want to change them # Specify the name of the widget whose properties are to be changed, and what the new value for each state change or event should be #* Different Effects offer different attributes, based on the type of property that will be modified. #* Keep in mind that there is not really an underlying state machine for the button: when an event triggers, the Effect will apply the new value to the property, and that's it. #* By using tags, you can give a custom identifier to the effects. The {{hl|SCR_ModularButtonComponent}} API then allows you to find effects through their tags and thus control which effects should be active at a time. # Define the button's behaviour #* These settings provide useful functionalities about how the button should behave in the UI hierarchy, from flagging itself as toggled when clicked, to moving focus to itself when hovered for consistent menu navigation between keyboard, mouse and gamepad. #* A notable attribute is the Event Return Value one, which controls how interaction events from widgets are propagated up the hierarchy:<!-- --> flagging an interaction will prevent the event from being propagated, which is useful, for example, when nesting multiple interactable widgets inside each other so that the ones higher in the hierarchy do not receive the events generated by the lower ones. # Use the hierarchy Prefab in other layouts

== SCR_ModularButtonComponent ==

The component itself is simple, it also has all the common usual ScriptInvokers for a button, such as Clicked, Toggled, Focused, Hovered, etc.

=== Effect Attributes === {| class="wikitable float-right" |+ Available Effects ! Class !! Description |- | SCR_ButtonEffectColor | Animates color |- | SCR_ButtonEffectImage | Sets image texture for an image widget. Supports imageset too. |- | SCR_ButtonEffectOpacity | Animates opacity |- | SCR_ButtonEffectPadding | Animates padding |- | SCR_ButtonEffectPosition | Animate/set position of a widget |- | SCR_ButtonEffectSize | Animate/set size of a widget |- | SCR_ButtonEffectText | Sets text of a text widget |- | SCR_ButtonEffectSound | Plays a sound |- | SCR_ButtonEffectVisibility | Sets a widget visible/invisible |- | SCR_ButtonEffectSlaveButton | Passes events to another button within this button |}

==== Enabled ==== Effect is enabled or disabled. When disabled, it ignores events.

==== Events ==== Events to which this effect listens. * STATE - events are always mutually exclusive. All buttons can be in one of these states: {{hl|DEFAULT}}, {{hl|HOVERED}}, {{hl|DISABLED}}. Toggle-buttons additionally have these states: {{hl|ACTIVATED}}, {{hl|ACTIVATED_HOVERED}}. * EVENT - events are not exclusive and can happen in any combinations: {{hl|CLICKED}}, {{hl|FOCUS_GAINED}}, {{hl|FOCUS_LOST}}, {{hl|TOGGLED_ON}}, {{hl|TOGGLED_OFF}}.

==== Input Devices ==== Input devices which this effect listens to. This is useful to implement different behaviour for gamepad and mouse control schemes.

==== Widget Name ==== The name of widget which will be affected by this effect. Not all effects are required to have it. For instance, a Play Sound effect doesn't interact with any widgets.

==== Tags ==== An effect can have many string tags. You can enable/disable/find effects by their tags. It is useful for more complex behaviours, for instance if a button must operate in multiple modes.

==== Event-Specific Attributes ==== Typically effects should have an attribute per each event type. For instance, Color Effect will have 10 color attributes - one for each event type.

=== Effect Title ===

The effect's title sums up its properties, generated based on its settings, e.g:

[[File:armar-modular button component effect title.png]]

=== Runtime API ===

Tags are very powerful when you need to implement many operation modes on the same button. You can just predefine different effects in layout and enable or disable them at runtime: <enforce> SCR_ButtonEffectBase FindEffect(string tag) // returns first effect with given tag array<SCR_ButtonEffectBase> FindAllEffects(string tag) // returns all effects with given tag array<SCR_ButtonEffectBase> GetAllEffects() // returns all effects void SetEffectsWithAnyTagEnabled(array<string> tags) // enables all effects with at least one of the provided tags. Other effects are disabled. void SetAllEffectsEnabled(bool enable) // enables or disables all effects </enforce>

You might need to change button effect's values to something that cannot be predefined. In this case, call <enforce inline>effect.PropertiesChanged()</enforce> after modifying properties, they will be re-applied according to the current state.

<!-- == Examples ==

; Simple animated toggle button :

; Toggle button with animated sub-button :

; Multi-state animated toggle button :

; Colour Effect Implementation : See {{Link/Enfusion|armaR|SCR_ButtonEffectColor}} -->

{{GameCategory|armaR|Modding|Tutorials}}
j20vnijuvsxb2la5jlhj2nzplt5fwwb

# Arma Reforger:Navmesh Tutorial

5050
32984
349579
341542
2023-11-09T14:30:42Z
Lou Montana
10739
Some wiki formatting
349579
wikitext
text/x-wiki
{{TOC|side}} The goal of this document is to help understanding the navmesh system and modding flow.

== Definitions ==

* '''Soldiers''' navmesh is is adapted to human navigation. * '''BTRLike''' navmesh is adapted to vehicle navigation. Its generation is disabled as of now (0.9.8) as AIs cannot drive yet. * '''LowRes''' navmesh is a low resolution navmesh used for navmesh streaming.

=== Navmesh Streaming ===

On large terrains, Using navmesh streaming and configuring a {{Link|#LowRes Navmesh}} is recommended for RAM and performance reasons. When needed (on larg terrains) and configured properly (see {{Link|#Usage}} below), this navmesh will be used to draw a rough path for the other, more precise navmesh to only use its tiles that are close to the LowRes' found path. This option saves a lot of RAM and calculations and should be used whenever possible, with the exception of small terrains.

== Creation ==

This section is about creating a navmesh for an editable terrain (modded terrain or sub-scene of an existing terrain).

# In the default layer of the terrain, add {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/AI/SCR_AIWorld.et|SCR_AIWorld.et}} prefab '''from Resource Browser'''<!-- --> which contains the {{Link/Enfusion|armaR|NavmeshWorldComponent}} component<!-- -->{{Feature|informative|the {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/AI/SCR_AIWorld.et|SCR_AIWorld.et}} prefab holds '''three''' {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/AI/NavmeshWorldComponent.c}}, the second one (BTRLike) being disabled for now (0.9.8).}} # Let's now create a new navmesh to be set in the {{hl|NavmeshFilesConfig}} entry: #* Open Navmesh Tool in the toolbar [[File:armareforger_worldeditor-navmeshtool-icon.png|32px]] and select its {{hl|Navmesh Tool}} tab #* Set Navmesh to {{hl|Soldiers}} the same as in the NavmeshWorldComponent's {{hl|Navmesh Project}} property #* Click Connect to open the {{hl|Connect}} window and select {{hl|Soldiers}} again - click OK to connect to the local navmesh server #* Click Generate to open the {{hl|Recast params}} options window #** Keep everything to default values and press OK to display then the {{hl|Generator area}} options window #** Keep everything to default again (to cover the whole area) and press OK #* The navmesh generation process has been started. This operation may take some time, the progress being displayed at the bottom of the Navmesh Tool tab # Click the Save button to save the resulting navmesh to storage (in a {{hl|.nmn}} file).<!-- Save Whole Navmesh -->

The navmesh file can now be added to the Navmesh Settings/Navmesh File property in SCR_AIWorld's NavmeshWorldComponent

Select {{hl|Soldiers}} in {{hl|Navmesh Project}} combobox and in Navmesh Tool/Navmesh to display the created navmesh.

== Modification ==

This section is about editing an existing navmesh for an editable terrain (modded terrain or sub-scene of an existing terrain).

Place e.g {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/Structures/Industrial/Houses/Office_E_01/Office_E_01.et|Office_E_01.et}} - note how the navmesh is not impacted and does not adapt around/with the building.

Multiple solutions are available, described below.

=== Full Regeneration ===

A full navmesh regeneration has multiple problems: * the generation time can be quite big * the file size can grow quickly as well. For instance, the {{Link|enfusion://ResourceManager/~ArmaReforger:worlds/MP/Navmeshes/CTI_Campaign_Eden.nmn|CTI_Campaign_Eden navmesh}} that is used on Everon for AI soldiers is over 1GB of size at the time of writing. As such, generating a whole navmesh for a minor modification the mod that changes one navmesh tile of bigger maps is quite long (depending on the system the operation can take over an hour) and expensive in storage.

There is a better option for that.

=== Partial Regeneration ===

This option allows to only generate tiles that changed and "patch" the full navmesh.

==== Current Tile ==== The {{hl|Rebuild Tile}} button regenerates the tile over which the camera is; to use it, move the camera anywhere over the wanted tile, then press the button to regenerate that specific tile.

This is useful when only a small area has been modified (e.g a couple of buildings or an outpost placed).

{{Feature|important|Be wary that a wide composition (e.g outpost) can cover multiple tiles, therefore be sure to check the resulting output in order to avoid partially generated navmeshes.}}

==== Tile Range ==== The Tile Range regeneration option allows to regenerate a wanted rectangle of tiles, defined by its South-West/"bottom-left" and North-East/"top-right" points.

In order to do so, X and Y tiles indices can be used but these are not easily available - hopefully, their position value can also be used. For that, it is important to keep track of min and max (South-West/"bottom-left" / North-East/"top-right") positions of the area to be regenerated; these values can be obtained using the World Editor camera's position found at the bottom-left of World Editor.

* Open the Navmesh Tool * Select {{hl|Soldiers}} navmesh * Connect to the local server * Click Generate * Click OK in the {{hl|Recast params}} window * Reaching the {{hl|Generator area}} options window, click on the {{hl|Position}} tab to input the area of generation - enter the min and max values from earlier in the Positions tab (From = min, To = max), then click OK.

The Tool then only generates the defined area and updates the current '''''memory''''' navmesh, and the map widget updates accordingly.

In order to save the updated navmesh, click {{hl|Save Generated}} and save where needed - overwriting the old navmesh being an option.

If the generated area generated more tiles than we need, we can mark only tiles that are actually needed to be saved by marking them on the map by leftclick drag, right clicking and clicking mark tiles then we could use SaveMarked and save only those that we marked.

== Modding ==

Everything up to this point expected the map to be freely changeable. But what if we want to modify Everon's navmesh without copying whole world?

=== Config Override ===

This is where overriding of the original config comes in handy. As you might have noticed in the Navmesh Files Config there is a array of Navmesh File Overrides. if we look at the {{hl|GM_Eden}} terrain, we can see that it uses {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Navmesh/Navmesh_GM_Eden_Soldier.conf|Navmesh_GM_Eden_Soldier.conf}}.

This config file points to a main navmesh ({{hl|Navmesh File}}) as well as an array of smaller navmeshes ({{hl|Navmesh File {{sic|Overide}}}}), array that lists smaller navmeshes that will "patch" the main navmesh file, overriding said areas in the order they are provided.

As the {{hl|Navmesh_GM_Eden_Soldier.conf}} file is read-only, we can override it in our mod by right-clicking and choosing "override". This creates an override file in the mod project, file that can now target {{hl|GM_Eden.nmn}} and the future partial navmesh files we are about to generate.

=== Partial Generation ===

Not unlike {{Link|#Partial Regeneration}}, connect to the Navmesh server and generate only the area around which the modded terrain has been edited (a new house lot, another castle on the next hill?); then, save it ({{hl|Save Generated}}/{{hl|Save Marked}}).

This file should now be listed under {{hl|Navmesh File {{sic|Overide}}}} in that earlier modded {{hl|.conf}} file - click on {{hl|+}} and point to the partial navmesh file, then save the config file.

{{Feature|important|In order to see the changes, the terrain must be reloaded.}}

== Usage ==

Navmeshes can then be used in {{Link/Enfusion|armaR|SCR_AIWorld}}'s {{Link/Enfusion|armaR|NavmeshWorldComponent}} components: * Drag and drop a {{Link|enfusion://ResourceManager/~ArmaReforger:Prefabs/AI/SCR_AIWorld.et}} Prefab '''if''' there are none in the world - only one per world can exist! ** The first NavmeshWorldComponent is for '''Soldiers''' navmesh - required for on-foot AIs to navigate through the land ** The second NavmeshWorldComponent is for '''BTRLike''' navmesh - disabled as of now (v0.9.8) as AIs do not drive yet ** The third NavmeshWorldComponent is for '''LowRes''' navmesh - it is '''required''' and must be linked in the Soldiers navmesh as follows: in Soldier's {{Link/Enfusion|armaR|NavmeshWorldComponent}}, *** check the '''Use Navmesh Streaming''' checkbox *** set the '''Low Resolution Navmesh''' that appeared to '''LowRes''' {{Feature|important|Do '''not''' check the '''Use Navmesh Streaming''' checkbox in the '''LowRes''' navmesh properties.}} * To setup a navmesh in a NavmeshWorldComponent, navigate to its '''Navmesh Settings > Navmesh Files Config'''. Here, two choices are offered: ** click '''set class''' and fill the '''Navmesh File''' field with a navmesh file ** drag and drop an existing {{hl|BaseNavmeshFilesConfig}}, e.g {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Navmesh/Navmesh_GM_Arland_Soldier.conf}}.

{{GameCategory|armaR|Modding|Tutorials}}
g00fnmrj3epprzmlh0epjd7zbkyygk7

# Arma Reforger:Notification Creation

5050
34283
337028
337019
2023-01-08T17:11:19Z
R3vo
10479
grammar
337028
wikitext
text/x-wiki
{{TOC|side}} This page explains how to create and declare a new notification for it to be used anywhere.

== Enum Declaration ==

Open the {{Link/Enfusion|armaR|ENotification}} enum and add a new entry to the list. Make sure that it has a unique int assigned to it! Also please add a description to it so people know what the notification is about and what variables it needs.

== Config Modding ==

Notifications are configured in {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Notifications/Notifications.conf|Notifications.conf}}. This config holds all the notifications and is added to the {{Link/Enfusion|armaR|PlayerController}}.

=== Add a Notification ===

Press the '''+''' button to add a new notification to the config.

Below is a list of ''most'' of the notification classes (some may be missing and classes for specific notifications will not be included). Use this table to choose the correct Class and add it to the list. Outside of [[Arma Reforger:Game Master|Game Master]] you would most likely need one of the following:

* {{Link/Enfusion|armaR|SCR_NotificationDisplayData}} * {{Link/Enfusion|armaR|SCR_NotificationPlayer}} * {{Link/Enfusion|armaR|SCR_NotificationPlayerTargetPlayer}}

{| class="wikitable valign-top" ! Class ! Description ! Parameters ! Format ! Code Example |- | {{Link/Enfusion|armaR|SCR_NotificationDisplayData}} | A simple notification targeting nothing and displaying text | None | {{n/a}} | <enforce>SCR_NotificationsComponent.SendToEveryone(ENotification);</enforce> |- | {{Link/Enfusion|armaR|SCR_NotificationEditableEntity}} | A notification that can hold the data of an EditableEntity | * Param1: EditableEntityID | * {{hl|%1}}: EditableEntity Name | <enforce>SCR_NotificationsComponent.SendToEveryone(ENotification, editableEntityID);</enforce> |- | {{Link/Enfusion|armaR|SCR_NotificationEditableEntityEditableEntityTarget}} | A notification that can hold the data of two EditableEntities | * Param1: EditableEntityID * Param2: Target EditableEntityID | * {{hl|%1}}: EditableEntity Name * {{hl|%2}}: Target EditableEntity Name | <enforce>SCR_NotificationsComponent.SendToEveryone(ENotification, editableEntityID, targetEditableEntityID);</enforce> |- | {{Link/Enfusion|armaR|SCR_NotificationEditableEntityTargetPlayer}} | A notification that can hold the data of an EditableEntity and target Player | * Param1: EditableEntityID * Param2: Target PlayerID | * {{hl|%1}}: EditableEntity Name * {{hl|%2}}: Target Player Name | <enforce>SCR_NotificationsComponent.SendToEveryone(ENotification, editableEntityID, targetPlayerID);</enforce> |- | {{Link/Enfusion|armaR|SCR_NotificationPlayer}} | A notification that can hold the data of a Player | * Param1: PlayerID | * {{hl|%1}}: Player Name | <enforce>SCR_NotificationsComponent.SendToEveryone(ENotification, playerID);</enforce> |- | {{Link/Enfusion|armaR|SCR_NotificationPlayerAndFaction}} | A notification that can hold the data of a Player and its faction | * Param1: PlayerID | * {{hl|%1}} Player Name * {{hl|%2}} Faction Name | <enforce>SCR_NotificationsComponent.SendToEveryone(ENotification, playerID);</enforce> |- | {{Link/Enfusion|armaR|SCR_NotificationPlayerTargetEditableEntity}} | A notification that can hold the data of an Player and target EditableEntity | * Param1: PlayerID * Param2: Target EditableEntityID | * {{hl|%1}} Player Name * {{hl|%2}} Target EditableEntity Name | <enforce>SCR_NotificationsComponent.SendToEveryone(ENotification, playerID, targetEditableEntityID);</enforce> |- | {{Link/Enfusion|armaR|SCR_NotificationPlayerTargetPlayer}} | A notification that includes a Player and target Player | * Param1: PlayerID * Param2: Target PlayerID | * {{hl|%1}}: Player Name * {{hl|%2}}: Target Player Name | <enforce>SCR_NotificationsComponent.SendToEveryone(ENotification, playerID, targetPlayerID);</enforce> |- | {{Link/Enfusion|armaR|SCR_NotificationNumber}} | A notification that includes a number (int).

{{Feature|informative| The number it takes is an Int. You can however multiply a float to a max of 1000 (10 means float: 0.0, 100: 0.00 and 1000: 0.000) and set the Number Divider in the Notification to the same as you multiply the number to display it correctly. }} | * Param1: Number * Param2: Number (Optional) * Param3: Number (Optional) * Param4: Number (Optional) * Param5: Number (Optional) | * {{hl|%1}}: Number | <enforce> SCR_NotificationsComponent.SendToEveryone(ENotification, number); // up to SCR_NotificationsComponent.SendToEveryone(ENotification, number1, number2, number3, number4, number5); </enforce> |- | {{Link/Enfusion|armaR|SCR_NotificationPlayerAndNumber}} | A notification that includes the player name and a number (int).

{{Feature|informative| The number it takes is an Int. You can however multiply a float to a max of 1000 (10 means float: 0.0, 100: 0.00 and 1000: 0.000) and set the Number Divider in the Notification to the same as you multiply the number to display it correctly. }} | * Param1: PlayerID * Param2: Number * Param3: Number (Optional) * Param4: Number (Optional) * Param5: Number (Optional) | * {{hl|%1}}: Player Name * {{hl|%2}}: Number | <enforce> SCR_NotificationsComponent.SendToEveryone(ENotification, PlayerID, number); // up to SCR_NotificationsComponent.SendToEveryone(ENotification, PlayerID, number1, number2, number3, number4); </enforce> |}

{{Feature|informative|See [[#New Notification System Class]] to find out how to create a new class.}}

=== Set the Key ===

Now scroll to the newly created notification and set the Notification Key to the enum created earlier. Each notification needs to have its own unique key as it is used to get the Notification information from a database.

=== Fill the Info Class ===

Next up click the button to create the Info class. There are currently three classes from which to choose.

{| class="wikitable" ! Class ! Description |- | {{Link/Enfusion|armaR|SCR_UINotificationInfo}} | The default notification |- | {{Link/Enfusion|armaR|SCR_ColoredTextNotificationUIInfo}} | Similar to the default notification but the text can be colored |- | {{Link/Enfusion|armaR|SCR_SplitNotificationUIInfo}} | A split notification. It has text left and right of the icon. Think of a "player kills player" notification, e.g: "PlayerKillerName" [Icon] "PlayerKilledName". This one has some additional logic to it explained in {{Link|#Notification Color}}. |}

The '''Name''' variable is the actual notification that you want to display. What format you can use depends on the class chosen earlier.

For example: * {{Link/Enfusion|armaR|SCR_NotificationDisplayData}} - only takes plain text * {{Link/Enfusion|armaR|SCR_NotificationPlayer}} - displays {{hl|%1}} as player name * {{Link/Enfusion|armaR|SCR_NotificationPlayerTargetPlayer}} - displays {{hl|%1}} as player name and {{hl|%2}} as target player name

{| class="wikitable" style="width: 100%" |+ {{Link/Enfusion|armaR|SCR_ColoredTextNotificationUIInfo}} additional variables ! Variable ! Description |- | Notification text color | Works the same as the notification colour. Takes a {{Link/Enfusion|armaR|ENotificationColor}} and instead of colouring the widgets it will color the text. |}

{| class="wikitable" style="width: 100%" |+ {{Link/Enfusion|armaR|SCR_SplitNotificationUIInfo}} additional variables ! Variable ! Description |- | Name | Unlike the default notification the Name in the UI info is the left side of the split message. The center is the icon and right is the right message. It still works similar to the normal message and can take params. |- | Split Notification Right Message | The right side of the split notification message. It still works similar to the normal message and can take params. |- | Left notification Text color | Works very similar to Notification text color in the ColoredTextNotificationUIInfo as it will color the text but only the '''left''' part. If using any faction colored it will use Param1 to check faction color instead of using param2 (target). Only relevant for targeted notifications. |- | Right notification Text color | Works very similar to Notification text color in the ColloredTextNotificationUIInfo as it will color the text but only the '''right''' part. If using any faction colored it will use param2 (target) to check the color. Only relevant for targeted notifications. |- | Replace Left Color With Right Color If Factions Are Ally | A mouthful but as descriptive as they get. If any of the FACTION specific {{Link/Enfusion|armaR|ENotificationColor}} enums are used it AND there are two entity targets (player or other entity) then it will check. Is param1 entity an ally of param2 entity. If they are allied then the color of param1 becomes the same as param2. This is to show for example teamkills. |}

==== Notification Colour ==== Notifications colours are listed in an enum found in {{Link/Enfusion|armaR|ENotificationColor}}. The enum is a key used to get the information data. In general the colors are straightforward though the {{hl|FACTION_RELATED_FRIENDLY_IS_NEGATIVE}} and {{hl|FACTION_RELATED_FRIENDLY_IS_POSITIVE}} have some additional logic attached to them - see below.

{| class="wikitable" ! Enum Value ! Description |- | {{hl|NEUTRAL}} | A neutral-coloured notification |- | {{hl|WARNING}} | A warning-coloured notification |- | {{hl|POSITIVE}} | A positive-coloured notification |- | {{hl|NEGATIVE}} | A negative-coloured notification |- | {{hl|GM}} | A Game Master-colored notification which all players can see |- | {{hl|GM_ONLY}} | A Game Master-only coloured notification which all Game Masters can see (and only them) |- | {{hl|FACTION_FRIENDLY_IS_NEGATIVE}} | If using Notification class that has a player or EditableEntity then it will check is the Entity faction (or if there are two entities then the target entity) is friendly to the player that receives the notification. If friendly the notification will get the {{hl|NEGATIVE}} color else it will get {{hl|POSITIVE}}. If either the player that receives the notification or the entity that is checked has no faction then it will display {{hl|NEUTRAL}}.

Think of "player died".

* If friendly it is negative * If enemy it is positive |- | {{hl|FACTION_FRIENDLY_IS_POSITIVE}} | If using Notification class that has a player or EditableEntity then it will check is the Entity faction (or if there are two entities then the target entity) is friendly to the player that receives the notification. If friendly the notification will get the {{hl|POSITIVE}} color else it will get {{hl|NEGATIVE}}. If either the player that receives the notification or the entity that is checked has no faction then it will display {{hl|NEUTRAL}}.

Think of new player joined the same faction as the player that receives the notification.

* If new friendly player joined it is positive * If new enemy player joined it is negative |- | {{hl|FACTION_ENEMY_IS_NEGATIVE_ONLY}} | Similar to {{hl|FACTION_FRIENDLY_IS_NEGATIVE}} but will set color to {{hl|NEUTRAL}} if faction is not friendly |- | {{hl|FACTION_FRIENDLY_IS_POSITIVE_ONLY}} | Similar to {{hl|FACTION_FRIENDLY_IS_POSITIVE}} but will set color to {{hl|NEUTRAL}} if faction is not friendly |}

==== Editor Set Position Data ==== This is an editor only setting and will essentially allow the Game Master to move to the notification's target. This is really only relative if the notification has a position attached to it or an entity (Player or EditableEntity). In most cases it is fine to keep it on default: {{hl|AUTO_SET_AND_UPDATE_POSITION}}. The table below explains what each means.

{| class="wikitable" ! Enum ! Description |- | {{hl|AUTO_SET_AND_UPDATE_POSITION}} | If the notification has a target then the position is set and updated; if the target moves, so does the location attached to the notification. If the Game Master clicks on the notification the camera will go to the current location of the target. |- | {{hl|AUTO_SET_POSITION_ONCE}} | The position of the notification is only set once when the notification is created and will never update. This is used for notifications such as "Player died". The Game Master does not care about the current location of that player but would want to see where the player died. |- | {{hl|NEVER_AUTO_SET_POSITION}} | Never set the notification position. This is used for positionless events, e.g if a player joins or leaves - the position is irrelevant and does not need to be set. |}

== Send Notification ==

The only thing left is sending out the notification now that the notification data is created.

To do this call one of the following {{Link/Enfusion|armaR|SCR_NotificationsComponent}} methods:

{| class="wikitable align-center-col-2" ! Method ! Server Only ! Description ! Parameters ! Example |- | <enforce inline>SCR_NotificationsComponent.SendToEveryone();</enforce> | {{Icon|checked}} | Sends to notification to every player | * First variable is the ENotification key * Other variables depend on the {{hl|SCR_Notification*}} class chosen earlier | <enforce>SCR_NotificationsComponent.SendToEveryone(ENotification, NotificationParameters);</enforce> |- | <enforce inline>SCR_NotificationsComponent.SendToPlayer();</enforce> | {{Icon|checked}} | Send the notification to specific players | * First variable is the specific Player ID the notification needs to be send to * Second variable is the {{Link/Enfusion|armaR|ENotification}} key * Other variables depend on the {{hl|SCR_Notification*}} class chosen earlier | <enforce>SCR_NotificationsComponent.SendToPlayer(PlayerID, ENotification, NotificationParameters);</enforce> |- | <enforce inline>SCR_NotificationsComponent.SendLocal();</enforce> | {{Icon|unchecked}} | Sends the notification locally | * First variable is the ENotification key * Other variables depend on the {{hl|SCR_Notification*}} class chosen earlier | <enforce>SCR_NotificationsComponent.SendLocal(ENotification, NotificationParameters);</enforce> |- | <enforce inline>SCR_NotificationsComponent.SendToGameMasters();</enforce> | {{Icon|checked}} | Sends the notification only to all game masters | * First variable is the {{Link/Enfusion|armaR|ENotification}} key * Other variables depend on the {{hl|SCR_Notification*}} class chosen earlier | <enforce>SCR_NotificationsComponent.SendToGameMasters(ENotification, NotificationParameters);</enforce> |- | <enforce inline>SCR_NotificationsComponent.SendToGameMastersAndPlayer()</enforce> | {{Icon|checked}} | Sends the notification to all game masters as well as the given player ID regardless if it is GM or not | * First variable is the specific Player ID the notification needs to be send to along with the GMs * Second variable is the {{Link/Enfusion|armaR|ENotification}} key * Other variables depend on the {{hl|SCR_Notification*}} class chosen earlier | <enforce>SCR_NotificationsComponent.SendToGameMastersAndPlayer(PlayerID, ENotification, NotificationParameters);</enforce> |- | <enforce inline>SCR_NotificationsComponent.SendLocalGameMaster();</enforce> | {{Icon|unchecked}} | A combination of <enforce inline>SendLocal()</enforce> and <enforce inline>SendToGameMasters()</enforce>. Sends the notification local but player will only receive it has GM rights | * First variable is the {{Link/Enfusion|armaR|ENotification}} key * Other variables depend on the {{hl|SCR_Notification*}} class chosen earlier | <enforce>SCR_NotificationsComponent.SendLocalGameMaster(ENotification, NotificationParameters);</enforce> |- | <enforce inline>SCR_NotificationsComponent.SendLocalNonGameMaster();</enforce> | {{Icon|unchecked}} | Similar to <enforce inline>SendLocalGameMaster()</enforce> but the player will only receive the notification if they are NOT game master | * First variable is the {{Link/Enfusion|armaR|ENotification}} key * Other variables depend on the {{hl|SCR_Notification*}} class chosen earlier | <enforce>SCR_NotificationsComponent.SendLocalNonGameMaster(ENotification, NotificationParameters);</enforce> |- | <enforce inline>SCR_NotificationsComponent.SendToGroup();</enforce> | {{Icon|checked}} | Sends a notification to all players in a given group | * First variable is the specific group ID the players need to be a part of to receive the notification * Second variable is the {{Link/Enfusion|armaR|ENotification}} key * Other variables depend on the {{hl|SCR_Notification*}} class chosen earlier | <enforce>SCR_NotificationsComponent.SendToGroup(groupID, ENotification, NotificationParameters);</enforce> |}

== Create a New SCR_Notification ==

It is possible to create a new notification class by creating a class that inherits from {{Link/Enfusion|armaR|SCR_NotificationDisplayData}}. This class already has a lot of function most of which you do not have to worry. Below in the table you find three of the most used. In general however you can simply inherit from {{Link/Enfusion|armaR|SCR_NotificationPlayer}}, {{Link/Enfusion|armaR|SCR_NotificationPlayerTargetPlayer}} or {{Link/Enfusion|armaR|SCR_NotificationPlayerAndFaction}} and override the <enforce inline>GetText()</enforce> method.

{| class="wikitable" ! Method ! Description |- | <enforce inline>GetText()</enforce> | This returns the string that is actually displayed and sets the correct formatting such as getting the player name and adding it.

Simple example of {{Link/Enfusion|armaR|SCR_NotificationPlayerTargetPlayer}}: <enforce> int playerID, playerTargetID; data.GetParams(playerID, playerTargetID); return string.Format(m_info.GetName(), GetPlayerName(playerID), GetPlayerName(playerTargetID)); </enforce> This sets {{hl|%1}} to the name of the player with ''playerID'' and {{hl|%2}} to the name of the player with ''playerTargetID''. |- | <enforce inline>SetFactionRelatedColor()</enforce> | If the {{hl|FACTION_RELATED_FRIENDLY_IS_NEGATIVE}} or {{hl|FACTION_RELATED_FRIENDLY_IS_POSITIVE}} colors are used then the notification needs to know what they need to check against the notification receiving player faction. <enforce> int playerID; data.GetParams(playerID); data.SetFactionRelatedColor(GetFactionRelatedColorPlayer(playerID, m_info.GetNotificationColor())); </enforce>

ColoredTextNotifications and SplitNotifications have additional logics for these where they can set the faction color of texts. Check {{Link/Enfusion|armaR|SCR_NotificationPlayerTargetPlayer}} for an example. |- | <enforce inline>SetPosition()</enforce> | Editor only, to help out the editor team make sure that the entity position is set or inherit for example from either {{Link/Enfusion|armaR|SCR_NotificationPlayer}} or {{Link/Enfusion|armaR|SCR_NotificationPlayerTargetPlayer}} which sets the position of the player if the first (or second) parameter is a ''playerID''.

Here is the example found in {{Link/Enfusion|armaR|SCR_NotificationPlayer}}:

<enforce> int playerID; data.GetParams(playerID); SetPositionDataPlayer(playerID, data); </enforce> |}

{{Feature|informative| * There are three notifications message prefab: {{hl|BaseNotificationMessage}}, {{hl|NotificationMessage}} and {{hl|NotificationMessageSplit}}; * Both {{hl|NotificationMessage}} and {{hl|NotificationMessageSplit}} inherit from {{hl|BaseNotificationMessage}}. }}

== Localisation ==

Select {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Notifications/Notifications.conf|Notifications.conf}} in the Resource Browser and open the '''Localisation Parser plugin''' by pressing {{Controls|Ctrl|Alt|L}} (or click on it in [[Arma Reforger:Resource Manager|Resource Manager]]'s '''Plugins''' dropdown menu).

This opens a window where the '''Config Path''' field should aim at {{Link|enfusion://ResourceManager/~ArmaReforger:Configs/Workbench/LocParser/Editor.conf|Editor.conf}}.

{{Feature|informative| * It is possible to set the target stringtable with the '''String Table Override''' field. * It is possible to override the config's {{hl|AR-}} translation key prefix using the '''Prefix Override''' field. }}

Clicking '''Logs''' simulates the localisation process and logs results and warnings in the Log Console (press {{Controls|F1}} to display it if hidden).

Clicking '''Localize''' will edit the translation, taking the values originally set in the field to the ''EN-US''' translation field with a new localisation key (e.g {{hl|PREFIX-Notification_ENUM_NAME}}).

{{Feature|important|While the new stringtable translations are automatically saved in [[Arma Reforger:String Editor|String Editor]], be sure to apply the newly created translation keys to the config as this is not done automatically.}}

{{GameCategory|armaR|Modding|Tutorials}}
7sffu4pe7gvr4z490su0b3l71rqnh9t

# Arma Reforger:Widget Tooltip Setup

5050
47134
370602
2025-01-15T12:07:14Z
Lou Montana
10739
Page creation
370602
wikitext
text/x-wiki
ScriptedWidgetTooltips is an Enfusion API for tooltips that is currently employed in core menus. It is expanded in scripts by {{Link/Enfusion|armaR|SCR_ScriptedWidgetTooltip}}, and allows setting up a customisable tooltip triggered by the mouse hovering a particular widget.

Most widgets in {{hl|.layout}} files support it, which can be set in their '''Behavior''' section. Choose {{hl|SCR_ScriptedWidegtTooltip}} as the Tooltip class.

[[File:armar-widget tooltip setup ui.png]]

Once the class is set, there are two fields to provide: a {{hl|.conf}} file and a tag. The config file must be of {{Link/Enfusion|armaR|SCR_ScriptedWidgetTooltipPresets}} type.

Similarly to Configurable Dialogs, the tooltip config provides modular options for tooltip's appearance and behaviour. Override the {{hl|Content}} class to provide further customisation.

[[File:armar-widget tooltip config ui.png]]

The tooltips are automatically displayed on mouse hover and gamepad focus.

{{Link/Enfusion|armaR|SCR_ScriptedWidgetTooltip}} provides {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetTooltip.c;41|invokers}} for different stages of a tooltip's lifetime.

<enforce> // Invokers // Reliance on static invokers is a bit of a bandaid solution but there is no other way for other scripts to access the tooltip class // If possible, only bind on hover/focus gained and make sure to unbind on lost. protected static ref ScriptInvokerTooltip m_OnTooltipShowInit; // Called before creating the content widget protected static ref ScriptInvokerTooltip m_OnTooltipShow; // Called after creating the content widget protected static ref ScriptInvokerTooltip m_OnTooltipHide; // Called after removing the content widget </enforce>

These are static, so make sure to check that the tooltip firing an invoker is the one your are actually interested in! You can use the <enforce inline>IsValid()</enforce> method, which checks for tags and optionally for hoverWidget and config file.

{{GameCategory|armaR|Modding|Tutorials}}
3pla1bgm3vg6k7g9j7tslmzgtbtb13w

# Arma Reforger:Crash Report

5050
34251
370449
347932
2024-12-12T10:59:57Z
Lou Montana
10739
Add PlayStation
370449
wikitext
text/x-wiki
{{TOC|side}} == Crash Reporter ==

In the unfortunate event of a crash, the '''Crash Reporter''' collects crash information in order to allow Bohemia Interactive to collect and process the crash reasons.

This is an important stone in the user feedback process.

[[File:armareforger crash-reporter-dialog.png|thumb|The Crash Reporter dialog.]] === Dialog ===

The Crash Reporter dialog offers a feedback field allowing the end user to provide details regarding the crash:

* The most important aspect of a report is reproducibility: which relevant steps lead to this crash * If the reproduction is not guaranteed (e.g a "random" crash), then an accurate description of the context is welcome * If there was absolutely nothing relevant, just sending crash files will do

{| class="wikitable valign-top-row-2" ! Correct Feedback ! Incorrect Feedback |- | * 100% repro: place a HMMWV, get in as driver, then switch to any rear seat = crash * Using World Editor with these mods crashes on opening Everon * The Game Master teleported me twice in 5s, then I crashed | * Pasting in viewport does that * It doesn't work * It crashed * Fix it! |}

{| class="wikitable align-center" |+ Dialog Availability ! Operating System ! Dedicated Server ! Game ! Workbench |- | Windows | {{Icon|unchecked}} | {{Icon|checked}} | {{Icon|checked}} |- | Linux | {{Icon|unchecked}} | {{n/a}} | {{n/a}} |} The dialog allows the user to cancel report sending.

The files are automatically sent if the dialog is not available, unless the {{Link|Arma Reforger:Startup Parameters#disableCrashReporter|disableCrashReporter}} startup parameter is used. <!-- === Collected Data ===

This is the list of data collected by the Crash Reporter:

==== Personal Information ==== * Operating System's username * Computer name * User message, if provided

==== Technical Information ==== * Game version (e.g 1.0.0.42) * build versions (exe + data) * Application (Game, Dedicated Server or Workbench) * [[Arma_Reforger:Startup_Parameters|Startup parameters]] (e.g <code style="display: block">armareforger.exe -noSplash</code>) * Encountered exception * Memory dump - if not sent, it will be kept locally, otherwise it will be deleted * Logs: ** console.log ** crash.log ** error.log ** script.log * [[:en:DxDiag|DxDiag]] report * List of loaded mods' GUID and name * Backend environment (Stable or Experimental) * Eventually additional files, listed by Crash Reporter * Backend session ID (if hosting, through Game or Dedicated Server)

===== Dedicated Server Specific ===== * Backend server ID (post-0.9.7)

===== Game/Workbench Specific ===== * User's backend identity -->

=== Crash Reports Log ===

CrashReports.log is a file containing information from crash reports that were sent to Bohemia Interactive through Crash Reporter. It contains the following crash information:

* Date and Time * Game version * State - Canceled, Failed (with error code), Successful (with report's GUID)

The GUID can be used as a reference to keep track while communicating with Bohemia Interactive.

{{Feature|informative| The '''Dedicated Server''' stacks reports as the server may run unattended with autorestart. Only the last crash report is kept for '''Game'''/'''Workbench'''. }}

== Logs Directory ==

Logs for Game are stored in the following directory: {| class="wikitable" ! Operating System ! Logs Directory |- | Windows | %userprofile%\Documents\My Games\ArmaReforger\logs <!-- |- | Linux | {{Wiki|TODO|This path is for the game being played with Proton, ''not'' from running the server natively.}} /home/{user}/.local/share/Steam/steamapps/compatdata/1874900/pfx/drive_c/users/steamuser/Documents/My Games/ --> |}

Logs for Workbench are stored in the following directory: {| class="wikitable" ! Operating System ! Logs Directory |- | Windows | %userprofile%\Documents\My Games\ArmaReforgerWorkbench\logs |}

== Feedback Tracker ==

The {{Link|https://feedback.bistudio.com/|{{Name|bi}} Feedback Tracker}} is a public feedback tracker available to end-users allowing them to report encountered issues.

{{Feature|informative|Be sure to follow the {{Link|https://feedback.bistudio.com/w/ft_ar_howto/|How-To guide}} and to use '''Search''' before posting.}}

{| class="wikitable align-right-col-1" |+ Available Forms ! ! PC (Project: {{Link|https://feedback.bistudio.com/project/view/66/|{{armaR}}}}) ! {{Icon|xbox|32}} Xbox (Project: {{Link|https://feedback.bistudio.com/project/view/67/|{{armaR}} Xbox}}) ! {{Icon|playstation|32}} Playstation (Project: {{Link|https://feedback.bistudio.com/project/view/88/|{{armaR}} PlayStation}}) |- | Bug Report | {{Link|https://feedback.bistudio.com/maniphest/task/edit/form/36/|New {{armaR}} Bug Report}} | {{Link|https://feedback.bistudio.com/maniphest/task/edit/form/37/|New {{armaR}} Xbox Bug Report}} | {{Link|https://feedback.bistudio.com/maniphest/task/edit/form/55/|New {{armaR}} PlayStation Bug Report}} |- | '''Private''' Bug Report | {{Link|https://feedback.bistudio.com/maniphest/task/edit/form/38/|New {{armaR}} Private Bug Report}} | {{Link|https://feedback.bistudio.com/maniphest/task/edit/form/39/|New {{armaR}} Private Xbox Bug Report}} | {{Link|https://feedback.bistudio.com/maniphest/task/edit/form/56/|New {{armaR}} Private PlayStation Bug Report}} |- | {{Link|https://feedback.bistudio.com/project/view/68/|Modding}} Bug Report | {{Link|https://feedback.bistudio.com/maniphest/task/edit/form/40/|New {{armaR}} Modding Bug Report}} | {{n/a}} | {{n/a}} |}

== See Also ==

* {{Link|https://en.wikipedia.org/wiki/Crash_reporter}} * {{Link|Arma Reforger:Startup Parameters#noCrashDialog}} * {{Link|Arma Reforger:Startup Parameters#keepCrashFiles}} * {{Link|Arma Reforger:Startup Parameters#disableCrashReporter}}

{{GameCategory|armaR|Support}}
pnemxrp69ypic9yxod2iuhvg5mzdl1x

# Arma Reforger:Known Issues

5050
32449
378054
364866
2026-02-02T20:25:28Z
Lou Montana
10739
Remove old Known Issues (v1.2)
378054
wikitext
text/x-wiki
{{Feature|informative|See {{Link|https://reforger.armaplatform.com/known-issues|{{armaR}} Known Issues page}} for the latest information.}}

{{GameCategory|armaR|Support}}
ej9jhx8ivpokos6ls3cnopsto3vhxdj

# Arma Reforger:Server Config

5050
35095
378051
376705
2026-02-01T09:30:41Z
Arkensor
10638
Note about not needing to configure persistence if you want to have it all be default anyway
378051
wikitext
text/x-wiki
{{TOC|side}} {{armaR}} servers uses {{Link|https://en.wikipedia.org/wiki/JSON|JSON}} configuration format. {{Link|#Template}} and {{Link|#Example}} are available at the bottom of this page.

{{Feature|important| Two '''very important''' aspects of dedicated server public hosting: * Keep {{Link|#fastValidation}} to {{hl|true}} * Limit max FPS with the {{hl|{{Link|Arma Reforger:Startup Parameters#maxFPS|-maxFPS}}}} startup parameter in order to save performance }} {{Feature|informative| * Parameters inside the JSON file are case-sensitive! * Values are strings, unless mentioned otherwise. * For Community config generators, see the following: ** {{Link|https://arscfg.johandejong.dev/}} ** {{Link|https://armareforger.se/server-generator/}} <!-- obsolete ** {{Link|https://scg.armaplatform.io/}} --> }}

== Summary ==

Default ports to be opened for hosting: :{| class="wikitable align-center valign-middle" style="min-width: 30em" ! Port ! Protocol ! Optional ! Reason |- | 2001 | rowspan="3" | UDP | {{Icon|unchecked}} | {{Link|#publicPort|Public port}} |- | 17777 | {{Icon|checked}} | {{Link|#port|A2S port}} |- | 19999 | {{Icon|checked}} | {{Link|#port 2|RCON port}} |}

== Root ==

=== bindAddress ===

IP address to which the server socket will be bound. In most cases, this should be left empty. It can be used to restrict connections to a particular network interface. When left out or empty, {{hl|0.0.0.0}} is used, which allows connections through any IP address. {{Feature|important| * This entryshould generally be left out of server config to use default value and should only be set by experienced users with specific network needs. * IP'''v6''' is '''not''' supported by {{armaR}}. }}

''was '''gameHostBindAddress''' before 0.9.8.73''

=== bindPort ===

number value, range 1..65535, default: 2001

UDP port to which the server socket will be bound.

{{Feature|important| This entry should generally be left out of server config so that it automatically uses same value as {{Link|#publicPort}}. It should only be used by users with specific port forwarding needs. }}

''was '''gameHostBindPort''' before 0.9.8.73''

=== publicAddress ===

IP address registered in backend. This should be set to the public IP address to which clients can connect in order to reach the server (either IP of the server itself or IP of the machine that will forward data to the server). If the entry is missing or empty, then the public IP address will be automatically detected and used by the backend. {{Feature|important| * This entry should generally be left out of server config to let the server automatically detect and use its public address used to reach it from internet. * It is possible to use the "local" keyword to automatically detect the local address of the network card. * IP'''v6''' is '''not''' supported by {{armaR}}. }}

''was '''gameHostRegisterBindAddress''' before 0.9.8.73''

=== publicPort ===

number value, range 1..65535, default: 2001

UDP port registered in backend. If the server itself has a public IP address, this should be the same value as in {{Link|#bindPort}}. Otherwise, this is the UDP port that is forwarded to the server.

''was '''gameHostRegisterPort''' before 0.9.8.73''

{{ArgTitle|3|a2s|{{GVI|armaR|0.9.9}}}}

''0.9.9.31''

Steam Query protocol definition - see the {{Link|#a2s 2|a2s}} section below. {{Feature|informative| Before {{GVI|armaR|0.9.9|size= 0.75}}, a2s settings were: * {{hl|a2sQueryEnabled}} - bool value, default: false * {{hl|steamQueryPort}} - number value, range 1..65535, default: 17777 }}

{{ArgTitle|3|rcon|{{GVI|armaR|1.0.0}}}}

The RCON Protocol is a UDP-based communication protocol that allows console commands to be issued to the server via a '''R'''emote '''CON'''sole, or RCON - see the {{Link|#rcon 2|rcon}} section below.

=== game ===

Define the server's settings - see the {{Link|#game 2|game}} section below. {{Feature|important|Only '''one''' scenario can be defined - {{armaR}} does '''not''' allow for mission rotation as of v0.9.8.}}

{{ArgTitle|3|operating|{{GVI|armaR|0.9.7}}}}

Define various server settings - see the {{Link|#operating 2|operating}} section below.

{{ArgTitle|2|a2s|{{GVI|armaR|0.9.9}}}}

''0.9.9.31''

See {{Link|https://developer.valvesoftware.com/wiki/Server_queries|A2S server queries}}.

=== address ===

required

IP address to which A2S socket will be bound. It can be used to restrict A2S queries to a particular network interface.

=== port ===

number value, range 1..65535, default: 17777

Change Steam Query UDP port on which game listens to A2S requests

{{ArgTitle|2|rcon|{{GVI|armaR|1.0.0}}}}

(Optional)

See {{Link|https://www.battleye.com/downloads/BERConProtocol.txt|RCON protocol}}.

=== address ===

required

IP address to which the RCON socket will be bound. It can be used to restrict connection to a particular network interface.

=== port ===

number value, range 1..65535, default 19999

RCON protocol port on which the game listens

=== password ===

string

{{Feature|important| The password: * is required for RCON to start * does '''not''' support spaces * must be at least '''3''' characters long }}

{{ArgTitle|3|maxClients|{{GVI|armaR|1.1.0}}}}

number value, range 1..16, default 16

The maximum number of clients that can connect to RCON at the same time. {{Feature|informative|RCON lacks client disconnect support, so when a user exits the RCON client, the server maintains the connection for an additional 30 seconds before a timeout removes the user from the list.}}

=== permission ===

string

Permission for all RCON clients. Possible values:

{| class="wikitable" ! Key ! Value |- | admin | The admin can perform any command. |- | monitor | The monitor can only perform commands which do not change the server's state. |}

=== blacklist ===

array value, default []

A list of commands excluded from execution.

=== whitelist ===

array value, default []

If defined, it specifies the list of commands that can be executed, and no other command is allowed.

== game ==

=== name ===

length 0..100 characters

=== password ===

length 0..x characters

Password required to join the server.

=== passwordAdmin ===

length: 0..x characters

Defines the server's admin password, allows a server administrator to login and control the server, to access this either open the chat input box by pressing {{Controls|C}} in the lobby or {{Controls|enter}} in-game followed by: {{hl|#login [the admin password]}} {{Feature|important|This password does not support spaces in it.}}

''was root/passwordAdmin before 0.9.8.73''

{{ArgTitle|3|admins|{{GVI|armaR|0.9.9}}}}

''0.9.9.31''

array value of '''IdentityIds''' and/or steamIds

List players as server admins - they can be checked in script using <enforce inline>BackendApi.IsListedServerAdmin(int playerId)</enforce> regardless of their logged-in state.

{{GVI|armaR|1.0.0|size= 0.75}} Listed users can {{hl|#login}} without a password.

{{GVI|armaR|1.3.0|size= 0.75}} :* list is now limited to only 20 unique IDs :* listed admins can use priority queue when joining server :** they will have their own queue which have priority before normal players when joining the server :** priority queue works only with admins which are specified by '''IdentityIds''' :** '''admins specified by their SteamId are not currently supported for priority queue'''

=== scenarioId ===

The scenario's {{hl|.conf}} file path is defined here. See the {{Link|Arma Reforger:Startup Parameters#listScenarios|listScenarios}} startup parameter to list available scenarios and obtain their {{hl|.conf}} file path.

: {{GVI|armaR|1.6.0|size= 0.75}} <spoiler text="Show Official Scenarios (1.6.0)"> -------------------------------------------------- Official scenarios (31 entries) -------------------------------------------------- {ECC61978EDCC2B5A}Missions/23_Campaign.conf (Conflict - Everon) {002AF7323E0129AF}Missions/Tutorial.conf (Training) {59AD59368755F41A}Missions/21_GM_Eden.conf (Game Master - Everon) {2BBBE828037C6F4B}Missions/22_GM_Arland.conf (Game Master - Arland) {F45C6C15D31252E6}Missions/27_GM_Cain.conf (Game Master - Kolguyev) {C700DB41F0C546E1}Missions/23_Campaign_NorthCentral.conf (Conflict - Northern Everon) {28802845ADA64D52}Missions/23_Campaign_SWCoast.conf (Conflict - Southern Everon) {94992A3D7CE4FF8A}Missions/23_Campaign_Western.conf (Conflict - Western Everon) {FDE33AFE2ED7875B}Missions/23_Campaign_Montignac.conf (Conflict - Montignac) {DAA03C6E6099D50F}Missions/24_CombatOps.conf (Combat Ops - Arland) {C41618FD18E9D714}Missions/23_Campaign_Arland.conf (Conflict - Arland) {DFAC5FABD11F2390}Missions/26_CombatOpsEveron.conf (Combat Ops - Everon) {3F2E005F43DBD2F8}Missions/CAH_Briars_Coast.conf (Capture & Hold - Briars) {F1A1BEA67132113E}Missions/CAH_Castle.conf (Capture & Hold - Montfort Castle) {589945FB9FA7B97D}Missions/CAH_Concrete_Plant.conf (Capture & Hold - Concrete Plant) {9405201CBD22A30C}Missions/CAH_Factory.conf (Capture & Hold - Almara Factory) {1CD06B409C6FAE56}Missions/CAH_Forest.conf (Capture & Hold - Simon's Wood) {7C491B1FCC0FF0E1}Missions/CAH_LeMoule.conf (Capture & Hold - Le Moule) {6EA2E454519E5869}Missions/CAH_Military_Base.conf (Capture & Hold - Camp Blake) {2B4183DF23E88249}Missions/CAH_Morton.conf (Capture & Hold - Morton) {C47A1A6245A13B26}Missions/SP01_ReginaV2.conf (Elimination) {0648CDB32D6B02B3}Missions/SP02_AirSupport.conf (Air Support) {0220741028718E7F}Missions/23_Campaign_HQC_Everon.conf (Conflict: HQ Commander - Everon) {68D1240A11492545}Missions/23_Campaign_HQC_Arland.conf (Conflict: HQ Commander - Arland) {BB5345C22DD2B655}Missions/23_Campaign_HQC_Cain.conf (Conflict: HQ Commander - Kolguyev) {10B8582BAD9F7040}Missions/Scenario01_Intro.conf (Operation Omega 01: Over The Hills And Far Away) {1D76AF6DC4DF0577}Missions/Scenario02_Steal.conf (Operation Omega 02: Radio Check) {D1647575BCEA5A05}Missions/Scenario03_Villa.conf (Operation Omega 03: Light In The Dark) {6D224A109B973DD8}Missions/Scenario04_Sabotage.conf (Operation Omega 04: Red Silence) {FA2AB0181129CB16}Missions/Scenario05_Hill.conf (Operation Omega 05: Cliffhanger) {CB347F2F10065C9C}Missions/CombatOpsCain.conf (Combat Ops - Kolguyev) </spoiler> : {{GVI|armaR|1.3.0|size= 0.75}} <spoiler text="Show Official Scenarios (1.3.0)"> -------------------------------------------------- Official scenarios (20 entries) -------------------------------------------------- {ECC61978EDCC2B5A}Missions/23_Campaign.conf (Conflict - Everon) {59AD59368755F41A}Missions/21_GM_Eden.conf (Game Master - Everon) {002AF7323E0129AF}Missions/Tutorial.conf (Training) {2BBBE828037C6F4B}Missions/22_GM_Arland.conf (Game Master - Arland) {C700DB41F0C546E1}Missions/23_Campaign_NorthCentral.conf (Conflict - Northern Everon) {28802845ADA64D52}Missions/23_Campaign_SWCoast.conf (Conflict - Southern Everon) {94992A3D7CE4FF8A}Missions/23_Campaign_Western.conf (Conflict - Western Everon) {FDE33AFE2ED7875B}Missions/23_Campaign_Montignac.conf (Conflict - Montignac) {DAA03C6E6099D50F}Missions/24_CombatOps.conf (Combat Ops - Arland) {C41618FD18E9D714}Missions/23_Campaign_Arland.conf (Conflict - Arland) {DFAC5FABD11F2390}Missions/26_CombatOpsEveron.conf (Combat Ops - Everon) {3F2E005F43DBD2F8}Missions/CAH_Briars_Coast.conf (Capture & Hold - Briars) {F1A1BEA67132113E}Missions/CAH_Castle.conf (Capture & Hold - Montfort Castle) {589945FB9FA7B97D}Missions/CAH_Concrete_Plant.conf (Capture & Hold - Concrete Plant) {9405201CBD22A30C}Missions/CAH_Factory.conf (Capture & Hold - Almara Factory) {1CD06B409C6FAE56}Missions/CAH_Forest.conf (Capture & Hold - Simon's Wood) {7C491B1FCC0FF0E1}Missions/CAH_LeMoule.conf (Capture & Hold - Le Moule) {6EA2E454519E5869}Missions/CAH_Military_Base.conf (Capture & Hold - Camp Blake) {2B4183DF23E88249}Missions/CAH_Morton.conf (Capture & Hold - Morton) {C47A1A6245A13B26}Missions/SP01_ReginaV2.conf (Elimination) </spoiler> : {{GVI|armaR|1.2.1|size= 0.75}} <spoiler text="Show Official Scenarios (1.2.1)"> : -------------------------------------------------- : Official scenarios (17 entries) : -------------------------------------------------- : {ECC61978EDCC2B5A}Missions/23_Campaign.conf (Conflict - Everon) : {59AD59368755F41A}Missions/21_GM_Eden.conf (Game Master - Everon) : {002AF7323E0129AF}Missions/Tutorial.conf (Training) : {2BBBE828037C6F4B}Missions/22_GM_Arland.conf (Game Master - Arland) : {C700DB41F0C546E1}Missions/23_Campaign_NorthCentral.conf (Conflict - Northern Everon) : {28802845ADA64D52}Missions/23_Campaign_SWCoast.conf (Conflict - Southern Everon) : {DAA03C6E6099D50F}Missions/24_CombatOps.conf (Combat Ops - Arland) : {C41618FD18E9D714}Missions/23_Campaign_Arland.conf (Conflict - Arland) : {DFAC5FABD11F2390}Missions/26_CombatOpsEveron.conf (Combat Ops - Everon) : {3F2E005F43DBD2F8}Missions/CAH_Briars_Coast.conf (Capture & Hold: Briars ) : {F1A1BEA67132113E}Missions/CAH_Castle.conf (Capture & Hold: Montfort Castle) : {589945FB9FA7B97D}Missions/CAH_Concrete_Plant.conf (Capture & Hold: Concrete Plant) : {9405201CBD22A30C}Missions/CAH_Factory.conf (Capture & Hold: Almara Factory) : {1CD06B409C6FAE56}Missions/CAH_Forest.conf (Capture & Hold: Simon's Wood) : {7C491B1FCC0FF0E1}Missions/CAH_LeMoule.conf (Capture & Hold: Le Moule) : {6EA2E454519E5869}Missions/CAH_Military_Base.conf (Capture & Hold: Camp Blake) : {2B4183DF23E88249}Missions/CAH_Morton.conf (Capture & Hold: Morton) </spoiler> : {{GVI|armaR|1.1.0|size= 0.75}} <spoiler text="Show Official Scenarios (1.1.0)"> : -------------------------------------------------- : Official scenarios (9 entries) : -------------------------------------------------- : {ECC61978EDCC2B5A}Missions/23_Campaign.conf (Conflict - Everon) : {59AD59368755F41A}Missions/21_GM_Eden.conf (Game Master - Everon) : {94FDA7451242150B}Missions/103_Arland_Tutorial.conf (Training) : {2BBBE828037C6F4B}Missions/22_GM_Arland.conf (Game Master - Arland) : {C700DB41F0C546E1}Missions/23_Campaign_NorthCentral.conf (Conflict - Northern Everon) : {28802845ADA64D52}Missions/23_Campaign_SWCoast.conf (Conflict - Southern Everon) : {DAA03C6E6099D50F}Missions/24_CombatOps.conf (Combat Ops - Arland) : {C41618FD18E9D714}Missions/23_Campaign_Arland.conf (Conflict - Arland) : {DFAC5FABD11F2390}Missions/26_CombatOpsEveron.conf (Combat Ops - Everon)

: -------------------------------------------------- : Workshop scenarios (8 entries) : -------------------------------------------------- : {6EA2E454519E5869}Missions/CAH_Military_Base.conf : {7C491B1FCC0FF0E1}Missions/CAH_LeMoule.conf : {F1A1BEA67132113E}Missions/CAH_Castle.conf : {589945FB9FA7B97D}Missions/CAH_Concrete_Plant.conf : {2B4183DF23E88249}Missions/CAH_Morton.conf : {3F2E005F43DBD2F8}Missions/CAH_Briars_Coast.conf : {9405201CBD22A30C}Missions/CAH_Factory.conf : {1CD06B409C6FAE56}Missions/CAH_Forest.conf </spoiler> : {{GVI|armaR|1.0.0|size= 0.75}} <spoiler text="Show Official Scenarios (1.0.0)"> : {ECC61978EDCC2B5A}Missions/23_Campaign.conf (Conflict - Everon) : {59AD59368755F41A}Missions/21_GM_Eden.conf (Game Master - Everon) : {94FDA7451242150B}Missions/103_Arland_Tutorial.conf (Training) : {2BBBE828037C6F4B}Missions/22_GM_Arland.conf (Game Master - Arland) : {C700DB41F0C546E1}Missions/23_Campaign_NorthCentral.conf (Conflict - Northern Everon) : {28802845ADA64D52}Missions/23_Campaign_SWCoast.conf (Conflict - Southern Everon) : {DAA03C6E6099D50F}Missions/24_CombatOps.conf (Combat Ops - Arland) : {C41618FD18E9D714}Missions/23_Campaign_Arland.conf (Conflict - Arland) </spoiler> : {{GVI|armaR|0.9.9|size= 0.75}} <spoiler text="Show Official Scenarios (0.9.9)"> : {ECC61978EDCC2B5A}Missions/23_Campaign.conf (Conflict - Everon) : {59AD59368755F41A}Missions/21_GM_Eden.conf (Game Master - Everon) : {90F086877C27B6F6}Missions/99_Tutorial.conf (Tutorial) : {2BBBE828037C6F4B}Missions/22_GM_Arland.conf (Game Master - Arland) : {C700DB41F0C546E1}Missions/23_Campaign_NorthCentral.conf (Conflict - Northern Everon) : {28802845ADA64D52}Missions/23_Campaign_SWCoast.conf (Conflict - Southern Everon) : {DAA03C6E6099D50F}Missions/24_CombatOps.conf (Combat Ops - Arland) : {C41618FD18E9D714}Missions/23_Campaign_Arland.conf (Conflict - Arland) </spoiler>

=== maxPlayers ===

number value, range 1..128, default: 64

Set the maximum amount of players on the server.

''was '''playerCountLimit''' before 0.9.8.73''

=== visible ===

bool value, default: true (since 0.9.8.73)

Set the visibility of the server in the Server Browser.

{{ArgTitle|3|crossPlatform|{{GVI|armaR|0.9.9}}}}

bool value, default: false

Accept all platforms if set to true, use {{Link|#supportedPlatforms}} if set to false.

{{Feature|informative|It is recommended to use '''crossPlatform''' only, leaving {{Link|#supportedPlatforms}} undefined.}}

=== supportedPlatforms ===

array value, default: ["PLATFORM_PC"]

Define the platforms which the server accepts, allowing crossplay. Possible values:

{| class="wikitable" ! Key ! Value |- | PLATFORM_PC | PC |- | PLATFORM_XBL | Xbox console |- | PLATFORM_PSN | PlayStation console (since {{armaR}} 1.2.1.169) |}

{{Feature|important|2= It is recommended to use '''{{Link|#crossPlatform}}''' instead and leave this property undefined: {{{!}} {{!}} <syntaxhighlight lang="cpp">crossPlatform = true;</syntaxhighlight> {{!}} rowspan="2" {{!}} &nbsp;is equivalent to&nbsp; {{!}} <syntaxhighlight lang="cpp">supportedPlatforms = ["PLATFORM_PC", "PLATFORM_XBL", "PLATFORM_PSN"];</syntaxhighlight> {{!}}- {{!}} <syntaxhighlight lang="cpp">crossPlatform = false;</syntaxhighlight> {{!}} <syntaxhighlight lang="cpp">supportedPlatforms = ["PLATFORM_PC"];</syntaxhighlight> {{!}}} These two being the only valid combinations. }}

''was '''supportedGameClientTypes''' before 0.9.8.73''

=== gameProperties ===

Define the scenario's settings - see the {{Link|#gameProperties 2|gameProperties}} section below.

{{ArgTitle|3|modsRequiredByDefault|{{GVI|armaR|1.2.1}}}}

bool value, default: true

Overrides default value for {{Link|#required}} for all mods.

=== mods ===

The list of mods required by the client that will automatically be downloaded and activated on join. It can be created by activating wanted mods in the {{Link|Arma Reforger:Workshop|Workshop}} and then, via the '''Mod manager''', result can be converted to ready to be used string after navigating to '''JSON''' tab and then clicking on the '''Copy to clipboard''' button.

[[File:armareforger-server-hosting-mod-list.png|906x906px]]

==== modID ==== GUID of the mod. Single GUID can be obtained from Workshop webpage

[[File:armareforger-server-hosting-workshop-guid.png]]

Alternatively you can grab it from Workbench options when mod is running or directly from gproj file

[[File:armareforger-server-hosting-guid.png|1200px]]

==== name ==== This parameter does not do anything and is only used as sort of comment, with human readable name of the mod.

==== version ==== {{Feature|informative|The {{hl|version}} mod parameter is optional. If it missing, the latest mod version will be used.}}

{{ArgTitle|4|required|{{GVI|armaR|1.2.1}}}}

bool value, default: true or value of {{Link|#modsRequiredByDefault}}

Is optional parameter to specify if this addon is required for server to start. If set to false then addon will be automatically removed from list with warning in logs if it cannot be for some reason downloaded from the Workshop.

== gameProperties ==

=== serverMaxViewDistance ===

number value, range 500..10000, default: 1600

=== serverMinGrassDistance ===

number value, range 0 / 50..150, default: 0

Minimum grass distance in meters. If set to 0 no distance is forced upon clients.

=== fastValidation ===

bool value, default: true (since 0.9.6)

Validation of map entities and components loaded on client when it joins, ensuring things match with initial server state. * true (enabled) - minimum information required to make sure data matches is exchanged between client. When a mismatch occurs, no additional information will be available for determining where client and server states start to differ.<!-- --> All servers that expect clients to connect over internet should have fast validation enabled. * false (disabled) - extra data for every replicated entity and component in the map will be transferred when new client connects to the server.<!-- --> When a mismatch occurs, it is possible to point at particular entity or component where things start to differ.<!-- --> When developing locally (ie. both server and client run on the same machine), it is fine to disable fast validation to more easily pin point source of the problem.

{{Feature|warning|'''Always''' set this value to {{hl|true}} for a public server!}}

=== networkViewDistance ===

number value, range 500..5000, default: 1500

Maximum network streaming range of replicated entities.

=== battlEye ===

bool value, default: true (since 0.9.8.73)

true to enable BattlEye, false to disable it.

=== disableThirdPerson ===

bool value, default: false

Force clients to use the first-person view.

=== VONDisableUI ===

bool value, default: false

Force clients to not have VON (Voice Over Network) UI.

=== VONDisableDirectSpeechUI ===

bool value, default: false

Force clients to not have VON (Voice Over Network) Direct Speech UI.

{{ArgTitle|3|VONCanTransmitCrossFaction|{{GVI|armaR|1.0.0}}}}

bool value, default: false

Option to allow players to transmit on other factions radios. true is allow to communicate, false is listen-only

=== missionHeader ===

This property overwrites the scenario's header, allowing to e.g change the scenario's displayed name: <syntaxhighlight lang="json"> "missionHeader": { "m_sName": "My Very Own Hosted Conflict", "m_sDetails": "If you teamkill or commit war crimes, you WILL be banned!", "m_iStartingHours": 7, "m_iStartingMinutes": 30, "m_bRandomStartingWeather": true } </syntaxhighlight>

Generic scenario properties (from {{Link/Enfusion|armaR|SCR_MissionHeader}}): <spoiler> {| class="valign-top" | <syntaxhighlight lang="json"> "missionHeader": { "m_sName": "My Very Own Hosted Conflict", "m_sAuthor": "Bohemia and I", "m_sDescription": "Play Conflict here!", "m_sDetails": "Here are the rules: have fun!", "m_iPlayerCount": 64, "m_bIsSavingEnabled": true, "m_sSaveFileName": "MyConflict_Save", "m_sBriefingConfig": "{0123456789ABCDEF}Configs/MyBriefingConfig.conf", "m_bOverrideScenarioTimeAndWeather": true, "m_iStartingHours": 7, "m_iStartingMinutes": 30, "m_bRandomStartingDaytime": false, "m_fDayTimeAcceleration": 6, "m_fNightTimeAcceleration": 12, "m_bRandomStartingWeather": true, "m_bRandomWeatherChanges": false, "m_fXpMultiplier": 10, "m_bMapMarkerEnableDeleteByAnyone": false, "m_iMapMarkerLimitPerPlayer": 99 } </syntaxhighlight> | * '''m_sName''': scenario name * '''m_sAuthor''': scenario author <!-- * '''m_sPath''': scenario path --> * '''m_sDescription''': brief description of this scenario's purpose * '''m_sDetails''': detailed description of this scenario (i.e. rules) <!-- * '''m_sIcon''': icon texture of this scenario visible e.g. in menus * '''m_sLoadingScreen''': texture of this scenario visible when loading this scenario * '''m_sPreviewImage''': texture of this scenario visible when loading this scenario * '''m_sGameMode''': game mode of this scenario --> * '''m_iPlayerCount''': The count of players for this scenario <!-- * '''m_eEditableGameFlags''': editable game flags * '''m_eDefaultGameFlags''': default game flags --> * '''m_bIsSavingEnabled''': enable saving scenario state * '''m_sSaveFileName''': name of save file for this scenario; when undefined, the name of associated world file will be used * '''m_sBriefingConfig''': configuration file for briefing screen * '''m_bOverrideScenarioTimeAndWeather''': if the scenario allows it, its daytime and weather will use values from this header * '''m_iStartingHours''': starting time of day (hours) * '''m_iStartingMinutes''': starting time of day (minutes) * '''m_bRandomStartingDaytime''': randomise the start time (overrides above parameters) * '''m_fDayTimeAcceleration''': time acceleration during the day (1 = 100%, 2 = 200% etc) * '''m_fNightTimeAcceleration''': time acceleration during the night (1 = 100%, 2 = 200% etc) * '''m_bRandomStartingWeather''': the weather is randomised on start * '''m_bRandomWeatherChanges''': weather can change during gameplay * '''m_fXpMultiplier''': player XP multiplier (when enabled in gamemode; 1 for default) * '''m_bMapMarkerEnableDeleteByAnyone''': determines whether map markers can be deleted only by player who placed them or by anyone within faction * '''m_iMapMarkerLimitPerPlayer''': how many map markers per player can exist at a time |} </spoiler>

Conflict-specific properties (from {{Link/Enfusion|armaR|SCR_MissionHeaderCampaign}}): <spoiler> {| class="valign-top" | <syntaxhighlight lang="json"> "missionHeader": { "m_iControlPointsCap": 42, "m_fVictoryTimeout": -1, "m_iStartingHQSupplies": 9001, "m_iMinimumBaseSupplies": 500, "m_iMaximumBaseSupplies": 10000, "m_bCustomBaseWhitelist": true, "m_bIgnoreMinimumVehicleRank": true, "m_fSupplyOffloadAssistanceReward": 0.25, "m_aCampaignCustomBaseList": { { "m_sBaseName": "MajorBaseMorton", "m_bIsControlPoint": false, "m_bCanBeHQ": true, "m_bDisableWhenUnusedAsHQ": true, "m_fRadioRange": 500 } } } </syntaxhighlight> | * '''m_iControlPointsCap''': how many control points are required to win (-1 = default) * '''m_fVictoryTimeout''': how long a faction needs to hold a control point, in seconds (-1 = default) * '''m_iStartingHQSupplies''': how much supplies should the main HQ start with (-1 = default) * '''m_iMinimumBaseSupplies''': minimum starting amount of supplies in small bases (-1 = default) * '''m_iMaximumBaseSupplies''': maximum starting amount of supplies in small bases (-1 = default) * '''m_bCustomBaseWhitelist''': use custom base list whitelist instead of blacklist * '''m_bIgnoreMinimumVehicleRank''': disable rank requirements for vehicle spawning * '''m_fSupplyOffloadAssistanceReward''': fraction of XP awarded to players unloading supplies which they have not loaded themselves (-1 = default) * '''m_aCampaignCustomBaseList''': array of custom bases (from {{Link/Enfusion|armaR|SCR_CampaignCustomBase}}): ** '''m_sBaseName''': base entity name as set up in World Editor ** '''m_bIsControlPoint''': whether or not the base is a control point ** '''m_bCanBeHQ''': whether or not the base can be a headquarter ** '''m_bDisableWhenUnusedAsHQ''': whether or not the base is disabled if not used as HQ ** '''m_fRadioRange''': base's radio range in metres (-1 = default) |} </spoiler>

{{ArgTitle|3|persistence|{{GVI|armaR|1.6.0}}}}

Configuration values for the {{Link|Arma Reforger:Persistence System}} that can be optionally defined. The system is setup to automatically work for most use cases by default.

<spoiler text="Show example"> <syntaxhighlight lang="json"> "persistence": { "autoSaveInterval": 15, "hiveId": 1337, "databases": { "webapi": { "preset": "{0123456789ABCDEF}Configs/Systems/Persistence/Database/JsonWebApi.conf", "options": { "url": "https://persistence-db.armareforger.local:5539/api/v1?query=parameter&and=more", "headers": { "X-API-KEY": "4rm4R3f0rg3r", "Content-Type": "application/json" } } } }, "storages": { "session": { "database": "webapi" } } } </syntaxhighlight> </spoiler>

==== autoSaveInterval ==== number value, range 0..60, default: 10

Interval (in minutes) at which automatic saves are created, if possible for the current mission. Disabled if set to 0.

==== hiveId ==== number value, range 0..16383, default: 0

Number identifying each hive (server) when they share the same persistence database. Used for separating UUIDs for save game data.

==== databases ==== (Case-insensitive) named objects representing an override of the system configuration provided databases or the addition of a new one. Optional child properties: * "preset" - refers to database config presets that are defined in game/mod data. Full resource name. * "options" - a complex object which corresponds to the individual database type of the preset. Usually, a key-value collection

==== storages ==== (Case-insensitive) named objects representing an override of the system configuration-provided storages. Optional child properties: * "database" - changes the storage to use a different database than the default configured. Must match the name given in the databases object or "main".

{{ArgTitle|2|operating|{{GVI|armaR|0.9.7}}}}

=== lobbyPlayerSynchronise ===

bool value, default: true (since 0.9.8.73)

If enabled, the list of player identities present on server is sent to the GameAPI along with the server's heartbeat. {{Feature|informative|This setting fixes the discrepancy between the real and reported number of players on the server.}}

{{ArgTitle|3|disableCrashReporter|{{GVI|armaR|0.9.8}}}}

bool value, default: false

If enabled, the automatic server-side {{Link|Arma Reforger:Crash Report|Crash Report}} is disabled. Has the same effect as {{Link|Arma Reforger:Startup Parameters#disableCrashReporter|-disableCrashReporter}}.

{{ArgTitle|3|disableNavmeshStreaming|{{GVI|armaR|1.0.0}}}}

{{GVI|armaR|1.0.0|size= 0.75}} bool value, default: false<br> {{GVI|armaR|1.2.0|size= 0.75}} array value, default undefined

A disabled navmesh streaming loads the entire navmesh in memory - this provides slightly better server performance and reaction times of moving AIs at the cost of a bigger memory footprint (up to hundreds of MB depending on the terrain) - see {{Link|https://reforger.armaplatform.com/news/modding-update-june-7-2024|2024-07-07 Modding Update}} * {{GVI|armaR|1.0.0|size= 0.75}} If set to true, navmesh streaming is disabled on all navmesh components * {{GVI|armaR|1.2.0|size= 0.75}} If not provided, no navmesh streaming is disabled; if provided empty, streaming of all navmeshes is disabled; if filled, only disables provided navmeshes's streaming

''was '''bool''' before 1.2.0''

{{ArgTitle|3|disableServerShutdown|{{GVI|armaR|0.9.8}}}}

bool value, default: false

If enabled, the server will not automatically shutdown if connection to backend is lost. Related to room requests errors - other causes like corrupted config will still shutdown the server.

{{ArgTitle|3|disableAI|{{GVI|armaR|1.1.0}}}}

bool value, default: false

If enabled, the server will prevent initialization and ticking of AIWorld and its components. Will completely disable AI functionality on the server.

{{ArgTitle|3|playerSaveTime|{{GVI|armaR|0.9.8}}}}

number value, default: 120

Default period in seconds for saving players for both Online and Local storage (player save can still be requested on demand).

{{ArgTitle|3|aiLimit|{{GVI|armaR|0.9.8}}}}

''0.9.8.64''

number value, default: -1

Sets the top limit of AIs. No system will be able to spawn any AIs when this ceiling is reached (through <enforce inline>aiWorld.CanAICharacterBeAdded()</enforce>)

A negative number is not considered as valid value and is then ignored - limit is not applied.

This param is overridden by the {{Link|Arma Reforger:Startup Parameters#AILimit|-aiLimit}} startup parameter.

{{ArgTitle|3|slotReservationTimeout|{{GVI|armaR|0.9.9}}}}

''0.9.9.31''

number value, range 5..300, default 60

Sets the duration (in seconds) for how long will the backend and server reserve a slot for kicked player. It is considered disabled when set to the minimal value, the value being the same as for a normal disconnect.

It can be used in scripts ''via'' Game Mode events: <enforce> OnPlayerAuditTimeouted(int iPlayerID) // invoked when player did not reconnect in time OnPlayerAuditRevived(int iPlayerID) // invoked when player successfully reconnected in time </enforce>

{{Feature|informative|Reservation works only for '''replication''' kicks.}}

{{ArgTitle|3|joinQueue|{{GVI|armaR|1.2.1}}}}

''1.2.1.66''

Configuration for player join queue to the server

{{ArgTitle|4|maxSize|{{GVI|armaR|1.2.1}}}}

number value, range 0..50, default 0 (disabled)

Sets maximum size of how many people can be at one time in join queue to the server.

== Template ==

<syntaxhighlight lang="json"> { "bindAddress": "", "bindPort": 0, "publicAddress": "", "publicPort": 0, "a2s": { "address": "", "port": 0 }, "rcon": { "address": "", "port": 0, "password": "", "permission": "monitor", "blacklist": [], "whitelist": [] }, "game": { "name": "", "password": "", "passwordAdmin": "", "admins" : [], "scenarioId": "", "maxPlayers": 0, "visible": true, "gameProperties": { "serverMaxViewDistance": 1600, "serverMinGrassDistance": 0, "networkViewDistance": 1500, "disableThirdPerson": false, "fastValidation": true, "battlEye": true, "VONDisableUI": false, "VONDisableDirectSpeechUI": false, "VONCanTransmitCrossFaction": false }, "mods": [] } } </syntaxhighlight>

== Example ==

<spoiler text="Show Example Configuration"> <syntaxhighlight lang="json"> { "bindAddress": "0.0.0.0", "bindPort": 2001, "publicAddress": "192.168.9.10", "publicPort": 2001, "a2s": { "address": "192.168.9.10", "port": 17777 }, "rcon": { "address": "192.168.9.10", "port": 19999, "password": "changeme_withoutspaces", "permission": "monitor", "blacklist": [], "whitelist": [] }, "game": { "name": "Server Name - Mission Name", "password": "", "passwordAdmin": "changeme", "admins" : [ "76561198200329058" ], "scenarioId": "{ECC61978EDCC2B5A}Missions/23_Campaign.conf", "maxPlayers": 32, "visible": true, "crossPlatform": true, "supportedPlatforms": [ "PLATFORM_PC", "PLATFORM_XBL" ], "gameProperties": { "serverMaxViewDistance": 2500, "serverMinGrassDistance": 50, "networkViewDistance": 1000, "disableThirdPerson": true, "fastValidation": true, "battlEye": true, "VONDisableUI": true, "VONDisableDirectSpeechUI": true, "missionHeader": { "m_iPlayerCount": 40, "m_eEditableGameFlags": 6, "m_eDefaultGameFlags": 6, "other": "values" } }, "mods": [ { "modId": "59727DAE364DEADB", "name": "WeaponSwitching", "version": "1.0.1" }, { "modId": "59727DAE32981C7D", "name": "Explosive Goats beta", "version": "0.5.42" } ] }, "operating": { "lobbyPlayerSynchronise": true, "joinQueue" : { "maxSize" : 12 }, "disableNavmeshStreaming": [ "Soldiers", "BTRlike" ] } } </syntaxhighlight> </spoiler>

{{GameCategory|armaR|Support}}
3m5x69dks00rz79kge6dpnl5wmbt0vr

# Arma Reforger:Server Hosting

5050
32414
373604
369507
2025-05-24T12:41:58Z
Benargee
9829
/* Docker Setup */ curl error note
373604
wikitext
text/x-wiki
{{TOC|side}} Server Hosting is the fact of hosting a game instance accessible over the network to other players. There are two possible modes in {{armaR}}: '''player-hosted''' and '''dedicated'''.

{{Feature|important| [[File:armar-port_fowarding_connection_failed.png|thumb|Connection fails from the outside if the door is closed.]] For a hosted server to be visible from outside the local network (e.g from internet), {{Link|https://en.wikipedia.org/wiki/Port_forwarding|Port Forwarding}} must be used.

Please refer to your router's user guide for assistance.

Main router brands's documentation links: * {{Link|https://www.cisco.com/c/en/us/support/docs/smb/routers/cisco-rv-series-small-business-routers/smb5818-configure-port-forwarding-port-triggering-nat-on-rv34x-serie.html|Cisco router}} * {{Link|https://www.dlink.com/uk/en/support/faq/routers/mydlink-routers/dir-810l/how-do-i-configure-port-forwarding-on-my-router|D-Link router}} * {{Link|https://kb.netgear.com/24290/How-do-I-add-a-custom-port-forwarding-service-on-my-NETGEAR-router|Netgear router}} * {{Link|https://www.tp-link.com/us/support/faq/1379/|TP-Link router}} }}

== Dedicated Server ==

A '''Dedicated Server''' is a server without any game instance launched; it purely processes game information and network synchronisation.

{{Feature|informative| stable is app id: '''1874900''' - https://steamdb.info/app/1874900/

experimental: '''1890870''' - https://steamdb.info/app/1890870/ }}

=== BattlEye ===

{{Feature|informative|See {{Link|http://www.battleye.com/|BattlEye}}'s {{Link|https://www.battleye.com/support/documentation/|documentation}} and {{Link|https://www.battleye.com/support/faq/|FAQ}} - there is also a [[BattlEye]] wiki article.}}

It is possible to modify BattlEye's RCon port and password by '''adding''' the following settings to {{hl|Arma Reforger\BattlEye\BEServer_x64.cfg}}:

RConPort 5678 RConPassword myNewBEPassword

{{Feature|warning| When editing {{armaR}}'s BattlEye config, make sure to '''append''' new settings to it and not ''erase'' or even ''edit'' existing information.<br> Missing information will have the kick message "Missing GameID/MasterPort server config settings" welcome (and eject) players, whereas modified values will prevent BattlEye from working.<br> In the event of the file being already incorrectly edited, verify the game's files on {{Link|https://steampowered.com/|Steam}} (see {{Link|https://help.steampowered.com/en/faqs/view/0C48-FCBD-DA71-93EB|Steam's tutorial}}): * delete {{hl|BEServer_x64.cfg}} * in Steam, right-click on {{armaR}} * select "Properties" * click on "Local Files" * press "Verify integrity of game files" Steam will now verify and repair modified files. This will not erase any personal files, game progress, controls and other configurations will remain unchanged. }}

=== Startup Parameters ===

See {{Link|Arma Reforger:Startup Parameters#Hosting}} and the {{Link|Arma Reforger:Server Config|Server Config}} page for more information.

==== config ==== The Server exe uses the {{hl|-config}} {{Link|Arma Reforger:Startup Parameters|startup parameter}} to target the configuration file. ArmaReforgerServer.exe -config ".\Configs\Campaign_SWCoast.json" In above example, Campaign_SWCoast.json is expected to be locted in Configs folder next to the exe.

==== maxFPS ==== {{Feature|warning|As of '''0.9.8''' it is '''heavily recommended''' to use {{Link|Arma Reforger:Startup Parameters#maxFPS|this}} {{Link|Arma Reforger:Startup Parameters|startup parameter}}, set to a value in the 60..120 range; otherwise, the server can try to use all the available resources!}} ArmaReforgerServer.exe -maxFPS 60

==== server ==== This parameter instructs the executable to launch '''local''' server and '''load selected world'''. When this parameter is used, config is ignored. Server parameter can be combined with {{Link|Arma Reforger:Startup Parameters#addons|addons}} and {{Link|Arma Reforger:Startup Parameters#addonsDir|addonsDir}} parameters to start a server with local mods, which can be useful when testing addon before uploading it Workshop. ArmaReforgerServer.exe -server "worlds/MP/MPTest.ent" -addonsDir "C:\MyModsDir" -addons MyCustomMod

==== Others ==== The below {{Link|Arma Reforger:Startup Parameters}} are optional but may prove useful upon some cases: * {{Link|Arma Reforger:Startup Parameters#logStats|logStats}} - allows to log server's FPS every x milliseconds * {{Link|Arma Reforger:Startup Parameters#logLevel|logLevel}} - sets the log detail level * {{Link|Arma Reforger:Startup Parameters#listScenarios|listScenarios}} - logs available scenario {{hl|.conf}} file paths on startup

=== Configuration File ===

See {{Link|Arma Reforger:Server Config}}.

{{ArgTitle|2|Player-Hosted Server|{{GVI|armaR|0.9.7}}}}

Also known as '''Listen Server''', a '''Player-Hosted Server''' is a server also hosting a local player. Such server is started from within the game, in {{hl|Multiplayer > Host tab > Host new server}}.

{{Feature|PC|Player-hosting is only available on PC.}}

=== Settings ===

The settings are all self-explanatory and {{Link|#Dedicated Server}} can be used.

==== Scenario Selection ==== '''Scenario''' and '''Source''' are two related fields: * '''Scenario''' is the list of all available scenarios * '''Source''' is a read-only field telling from which mod (or {{armaR}}) the selected Scenario is.

==== Crossplay ==== This option allows console players to join - see {{Link|#supportedGameClientTypes}}.

=== Mods ===

This tab allows to enable or disable local mods to make them available to the hosted game (or not). The {{Link|Arma Reforger:Workshop}} is accessible from here.

== Linux Server ==

The game server will by default use Docker container's IP for server browser registration and client connection which will cause failure during client connection attempt.<br> To avoid it use: * Run the "ipconfig" command in cmd to list the local IPs * "IP Connect" option in the server browser and insert one of the server's local IPs * Custom server config (.json file) with "gameHostRegisterBindAddress" and "gameHostRegisterPort" parameters set to one of the local IP:Port combinations Example: -config "./My_Config.json" ClientConnectAddress 192.168.39.98

=== SteamCMD Setup ===

{{Feature|important|This tutorial has been tested on '''Ubuntu'''.}}

# Install SteamCMD - for the latest documentation, see {{Link|https://developer.valvesoftware.com/wiki/SteamCMD}} ## Download and install it (link on the {{Link|https://developer.valvesoftware.com/wiki/SteamCMD|SteamCMD}} page) - it will auto-update to the latest version ## Set the install path with the {{hl|force_install_dir}} command (otherwise the default location will be used, {{hl|home/<username>/.steam/steam/steamcmd}}) ### You can name the folder ''arma-reforger, armaR, armarserver, armarexpserver'' and etc ## Login as anonymous - type in {{hl|login anonymous}} # Download and install the server {{hl|app_update 1874900}} ## ''1890870'' for experimental version # Quit SteamCMD {{hl|quit}}

{{Feature|informative|To run {{armaR}}'s server, run {{hl|./ArmaReforgerServer}} in the installation directory.}}

==== Example Script ==== ; update_armar_ds.txt Based on the {{Link|https://developer.valvesoftware.com/wiki/SteamCMD|SteamCMD}} page's example <syntaxhighlight lang="bash"> // update_armar_ds.txt // @ShutdownOnFailedCommand 1 @NoPromptForPassword 1 force_install_dir ../armar_ds login anonymous app_update 1874900 validate quit </syntaxhighlight>

; Execution <syntaxhighlight lang="bash">steamcmd +runscript update_armar_ds.txt</syntaxhighlight>

==== With Bash Scripts ==== # Install SteamCMD<syntaxhighlight lang="bash">sudo apt install steamcmd</syntaxhighlight> # create a directory lets say <code>armaR</code> somewhere, lets say <code>/home/<username>/armaR</code> # Create in it a steam shell script that will install reforger server <code>steamShell.txt</code> with something like <syntaxhighlight lang="bash"> @ShutdownOnFailedCommand 1 login anonymous // Stable ID: 1874900 EXP: 1890870 app_update 1874900 validate quit </syntaxhighlight> # then create bash script that will install/update game <code>steamInstall.sh</code> with: <syntaxhighlight lang="bash"> /usr/games/steamcmd +force_install_dir /home/<username>/armaR +runscript /home/<username>/armaR/steamShell.txt </syntaxhighlight> # after that, server startup script <code>start.sh</code> with: <syntaxhighlight lang="bash"> // Install or Update game ./steamInstall.sh // Start server ./ArmaReforgerServer -config /home/<username>/.config/ArmaReforgerServer/config.json -profile /home/<username>/.config/ArmaReforgerServer -maxFPS 60 </syntaxhighlight> # So the actual file tree will look something like this: <syntaxhighlight lang="bash"> /home/<username>/armaR steamShell.txt steamInstall.sh start.sh </syntaxhighlight> # Then create actual <code>config.json</code> at <code>/home/<username>/.config/ArmaReforgerServer/config.json</code>, create folders if they don't exist # Run <code>start.sh</code> to install the server and start it.

Console logs etc can be found in above mentioned profile folder, addons will also install there by default, you can again change that.

You can also change profile/config directories as desired.{{Feature|informative|You can then create new service for systemctl to run start.sh and the thing will run in the background and auto restart after crashes etc}}

=== LinuxGSM ===

The {{Link|https://linuxgsm.com/servers/armarserver/|{{arma}} LinuxGSM Tool}} can also be used.

# It can monitor the game server by checking that the proccess is running and querying it. Should the server go offline LinuxGSM can restart the server and send you an alert. You can use cronjobs to setup monitoring. # Update checks for any server updates and applies them. The server will update and restart only if required. '''This also needs to be set up on a schedule.'''

{{Feature|informative|For server's experimental version, add <code>appid{{=}}"1890870"</code> to your <code>./lgsm/config-lgsm/armarserver/armarserver.cfg</code> and validate files by <code>./armarserver v</code>.}}

=== Docker Setup ===

{{Feature|important|This Docker configuration is adapted to '''Ubuntu'''. Other distributions such as Fedora or Arch Linux may store their certificates at the following location: {{hl|/etc/pki/ca-trust/}} - be sure to edit the configuration accordingly.}}

{{Feature|informative|A community Docker image is available on GitHub: https://github.com/acemod/docker-reforger}}

# Install the latest Docker: ## {{Link|https://docs.docker.com/desktop/windows/install/|Download}} and install Docker ## [https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v Enable Hyper-V in Windows] if it is not already ## Assign HW resources in {{hl|Docker/Settings/Resources/Advanced}}: ### CPU: 4 cores ### Memory: 6 GB # Download Ubuntu 18.04 image ''via'' batch or powershell cmd: {{hl|docker pull ubuntu:18.04}} # Run Ubuntu image: ## mount volume with server data ## expose client connection UDP port ## Example: {{hl|docker container run -t -d -p 2001:2001/udp -v D:\server_data\linux_packed:/home/packed --name ubuntu_test ubuntu:18.04}} # Connect to bash console: {{hl|docker exec -it ubuntu_test /bin/bash}} # Install necessary software: ## libcurl4 - required by server app ## net-tools - for debug purposes (enables ifconfig etc) ## Installation: ### apt-get update ### apt-get install libcurl4 ### apt-get install net-tools ### apt-get install libssl1.1 # Create logs directory, e.g: {{hl|mkdir /home/profile}} # Run server: ## server executable needs proper execution/access rights: ### cd server_root_folder ### chmod +x ArmaReforgerServer ## Example: {{hl|./ArmaReforgerServer -gproj ./addons/data/ArmaReforger.gproj -config Configs/ServerConfig/Campaign.json -backendlog -nothrow -profile /home/profile}}

{{Informative|1=If you are getting curl errors <code>Curl error=Failed writing received data to disk/application</code> and <code>error curl_easy_perform, code: 23</code> when downloading large mods in a docker container, you might need to set -addonTempDir ./tmp or some other location where the container has write permissions.}}{{GameCategory|armaR|Support}}
n6g50ftyrcjb2o4pt50frfh9a4v234m

# Arma Reforger:Server Management

5050
32792
376879
370483
2025-12-15T14:31:19Z
Lou Montana
10739
Some wiki formatting
376879
wikitext
text/x-wiki
{{TOC|side}} {{Feature|informative|See also: {{Link|Arma Reforger:Server Hosting|Server Hosting}}.}}

== Administrator Roles ==

An in-game server administrator can be: * the player hosting the server (PC only) * a logged-in admin, using <code>#login passwordAdmin</code> (see {{Link|#login}} and {{Link|Arma Reforger:Server Config#passwordAdmin|passwordAdmin}} config) * a voted-in admin

== Permissions ==

<div style="display: flex; flex-wrap: wrap; align-items: flex-start; justify-content: space-around">

{| class="wikitable sortable align-center valign-middle align-left-col-1" |+ Standard |- class="align-center valign-middle" ! rowspan="2" style="text-align: center; min-width: 8em" | Right ! colspan="3" | Player Role ! colspan="2" | RCON Permission |- class="align-center" ! Logged Admin ! Voted Admin ! Player ! RCON Admin ! RCON Monitor |- | {{hl|#login}} | {{Icon|unchecked}} | {{Icon|unchecked}} | {{Icon|checked}} | {{Icon|unchecked}} | {{Icon|unchecked}} |- | {{hl|#logout}} | {{Icon|checked}} | {{Icon|checked}} | {{Icon|unchecked}} | {{Icon|unchecked}} | {{Icon|unchecked}} |- | {{hl|#roles}} | {{Icon|checked}} | {{Icon|checked}} | {{Icon|checked}} | {{Icon|unchecked}} | {{Icon|unchecked}} |- | {{hl|#restart}} | {{Icon|checked}} | {{Icon|unchecked}} | {{Icon|unchecked}} | {{Icon|checked}} | {{Icon|unchecked}} |- | {{hl|#shutdown}} | {{Icon|checked}} | {{Icon|unchecked}} | {{Icon|unchecked}} | {{Icon|checked}} | {{Icon|unchecked}} |- | {{hl|#kick}} | {{Icon|checked}} | {{Icon|unchecked}} | {{Icon|unchecked}} | {{Icon|checked}} | {{Icon|unchecked}} |- | {{hl|#ban}} | {{Icon|checked}} | {{Icon|unchecked}} | {{Icon|unchecked}} | {{Icon|checked}} | {{Icon|unchecked}} |- | {{hl|#id}} | {{Icon|checked}} | {{Icon|checked}} | {{Icon|checked}} | {{Icon|unchecked}} | {{Icon|unchecked}} |- | {{hl|#players}} | {{Icon|checked}} | {{Icon|checked}} | {{Icon|checked}} | {{Icon|checked}} | {{Icon|checked}} |}

{| class="wikitable sortable align-center valign-middle align-left-col-1" |+ Custom |- class="align-center valign-middle" ! rowspan="2" style="text-align: center; min-width: 8em" | Right ! colspan="3" | Player Role ! colspan="2" | RCON Permission |- class="align-center" ! Logged Admin ! Voted Admin ! Player ! RCON Admin ! RCON Monitor |- | {{GVI|armaR|1.2.1|size= 0.75}} {{hl|@logout}} | {{Icon|unchecked}} | {{Icon|unchecked}} | {{Icon|unchecked}} | {{Icon|checked}} | {{Icon|checked}} |}

</div>

== Commands ==

=== login ===

Login as server administrator with the password set in server config's field {{hl|[[Arma Reforger:Server Hosting#passwordAdmin|passwordAdmin]]}}. {{Feature|informative|Admins (in server config) or Owner (in {{hl|ownerToken.bin}}) can use the command without password.}}

; Syntax #login #login <password>

; Example #login #login myServersPassword

=== logout ===

; Example #logout

=== roles ===

Print the list of server roles the player possesses. ; Example #roles

=== restart ===

Restart the actually running scenario. The server keeps the clients connected. ; Example #restart <!-- === restartServer ===

Shut down and restarts the server - clients are disconnected. ; Example #restartServer --> === shutdown ===

Shut down the server, disconnecting all the clients. ; Example #shutdown <!-- === loadScenario ===

Load the provided scenario. The parameter is GUID or missionheader or just {{hl|.ent}} path

; Example #loadScenario {ECC61978EDCC2B5A}Missions/23_Campaign.conf --> === kick ===

Kick (eject) the player out of the server through their playerId (obtained by {{Link|#players}}). Said player can still rejoin the server. ; Syntax #kick <playerId>

; Example #kick 123456789

=== ban ===

This command prefixes ban-related commands: "create", "remove", "list" Ban (eject and banish forever or for a certain duration in seconds) the player out of the server through their playerId (obtained by {{Link|#players}}). Said player cannot rejoin until ban expiration. {{Feature|important|This command can only be executed on a dedicated server.}}

==== create ==== Create a ban entry for the player related to the provided id.

; Syntax #ban create <playerId or identityId or {{GVI|armaR|1.2.0|size= 0.75}} playerName> <durationInSeconds> <reason (optional)> if using {{hl|playerId}}, the player must actually be connected to the server; use {{hl|identityId}} otherwise.

; Example Ban for an hour #ban create 123456789 3600 Ban forever #ban create 123456789 0 Ban with a reason #ban create 123456789 86400 teamkilling

==== remove ==== Remove a ban entry linked to the provided identity, allowing the player to rejoin.

; Syntax #ban remove <identityId>

; Example #ban remove 123456789

==== list ==== List current bans in a format {{hl|BanID ; Player UID ; Duration}}. {{Feature|important| * If the ''page'' parameter is not provided then the first page is shown. * RCON can show 25 bans per page while game only 10. }}

; Syntax #ban list <page (optional)>

; Example #ban list #ban list 2

=== id ===

Gives the local player's id. ; Example #id

=== players ===

Lists session's players and their playerId. ; Example #players

== Custom RCON Commands ==

{{Feature|informative|Custom RCON commands are {{Name|bi|short}}-specific and are not part of RCON standards. They start with {{hl|@}} to differenciate them from standard commands.}}

{{ArgTitle|3|logout|{{GVI|armaR|1.2.1}}}}

De-authenticate RCON client on server server side which immediately frees the connection for new RCON client. If the RCON client is killed without issuing this command, it is de-authenticated automatically after 45s due to connection timeout.

{{GameCategory|armaR|Support}}
n8zaqlk0ylddcp6yg21cx4nf2it6z7b

# Arma Reforger:Startup Parameters

5050
32417
376803
376520
2025-11-21T13:04:47Z
Lou Montana
10739
/* forceDisableNightGrain */ changed to enableNightGrain
376803
wikitext
text/x-wiki
{{TOC|side}} Startup parameters are command line interface(CLI) arguments that go after the executable's name in order to set options; e.g {{hl|ArmaReforgerSteam.exe -window}} to start the game in {{Link|#window}}ed mode. {{Feature|informative| * Startup parameters' ''names'' are case-insensitive - e.g {{hl|-logstats}} and {{hl|-LogSTATS}} are identical. * Spaces in parameter values must be wrapped in quotations - e.g. {{hl|-addonDownloadDir "E:\Arma Addons"}} }} {{TOC|subtoc |content= {{Columns|2| # {{Link|#General}} # {{Link|#Window}} # {{Link|#Workbench}} # {{Link|#Workbench - AnimationEditor Module}} # {{Link|#Workbench - LocalizationEditor Module}} # {{Link|#Workbench - NavmeshGeneratorMain Module}} # {{Link|#Workbench - ResourceManager Module}} # {{Link|#Workbench - ScriptEditor Module}} # {{Link|#Workbench - WorldEditor Module}} # {{Link|#Hosting}} # {{Link|#Network Tuning}} # {{Link|#Debug}} # {{Link|#Profiling}} }} }}

== General ==

=== addons ===

{{hl|-addons}} takes a list of mod IDs (specified in their gproj files, without brackets) to be loaded on game start, separated by a comma {{hl|,}}.<br> Mods are searched in {{hl|profile/addons}}, in {{hl|&lt;executableDir&gt;/addons}} and in directories specified by {{hl|-addonsDir}} (see [[#addonsDir|below]]). {{Feature|informative| Mod IDs can be: * GUIDs ('''preferred''' - found in {{hl|.gproj}}) * Project ID (found in {{hl|.gproj}}) * Sub-directory name (fallback solution) }}

; Example ArmaReforgerSteam.exe -addons 88037E46AD234C72,88037E46AD234C73

=== addonsDir ===

{{hl|-addonsDir}} specifies additional directories in which the game must look for mods to load, separated by a comma {{hl|,}}. {{Feature|informative| By default, the game looks into: * {{hl|Documents/My Games/ArmaReforger/profile/addons}} * {{hl|&lt;executableDir&gt;/addons}} }} {{Feature|important|It is recommended to use ''absolute'' paths to Mod directories even though the provided path ''can'' be relative to the executable location.}}

; Example ArmaReforgerSteam.exe -addonsDir D:\DownloadedMods

=== addonDownloadDir ===

{{hl|-addonDownloadDir}} specifies where the game and the Workshop should download addons. Downloaded addons will be stored in addons subfolder inside of target directory. {{Feature|important|It is recommended to use ''absolute'' paths to Mod directories even though the provided path ''can'' be relative to the executable location.}}{{Feature|informative|It is not necessary to combine this command with '''addonsDir''' parameter.}}

; Example ArmaReforgerSteam.exe -addonDownloadDir D:\DownloadedMods

{{ArgTitle|3|addonTempDir|{{GVI|armaR|1.1.0}}}}

{{hl|-addonTempDir}} specifies the directory for temporary content. The default temporary directory is: * before {{GVI|armaR|1.4.0}}: {{hl|%localappdata%/Temp/<addon>/<temp data>}} on Windows or {{hl|/tmp/<addon>/<temp data>}} on Linux * since {{GVI|armaR|1.4.0}}: {{hl|<addonsDir>/<addon>/temp/<temp data>}}

; Example ArmaReforgerSteam.exe -addonTempDir "C:\Temp"

=== backendDisableStorage ===

{{hl|-backendDisableStorage}} disables use of storage, no loads or saves can be performed both online and '''local'''.

; Example ArmaReforgerSteam.exe -backendDisableStorage

=== backendFreshSession ===

{{hl|-backendFreshSession}} skips the initial load request from dedicated server's configuration file or from script - the DS Session basically starts as a brand new one, the rest of functionalities is not affected (saves, runtime loads, etc).

; Example ArmaReforgerSteam.exe -backendFreshSession

=== backendLocalStorage ===

{{hl|-backendLocalStorage}} forces Save & Load of player and general data normally sent to/received from the backend to work with local JSON files in profile folder instead.

; Example ArmaReforgerSteam.exe -backendLocalStorage

{{ArgTitle|3|freezeCheck|{{GVI|armaR|1.2.0}}}}

number value, range 0..600, default 300

{{hl|-freezeCheck}} overrides time in seconds to forcefully crash on application freeze or completely disable detection. {{Feature|informative|Workbench has default time set to 1 minute and will only generate minidump without crashing.}}

; Example ArmaReforgerSteam.exe -freezeCheck 30

{{ArgTitle|3|freezeCheckMode|{{GVI|armaR|1.2.0}}}}

string value, default minidump (workbench) or crash

{{hl|-freezeCheckMode}} overrides behavior which should happen when freeze is detected. * {{hl|crash}} - force crashes the application * {{hl|minidump}} - silently generates minidump and keeps application running until it unfreezes or is terminated by user * {{GVI|armaR|1.3.0|size= 0.75}} {{hl|kill}} - will force kill the application - is more reliable than {hl|crash} but does not provide any data about the freeze

{{Feature|important|Option {{hl|minidump}} is supported only on Windows.}}

; Example ArmaReforgerSteam.exe -freezeCheckMode crash ArmaReforgerSteam.exe -freezeCheckMode minidump

=== cfg ===

{{hl|-cfg}} forces to load specific user engine settings config (things like graphics settings, window position and size etc).

=== GPUAdapter ===

{{hl|-GPUAdapter}} forces to use the graphic card at the provided index. GPU index can be found using {{Link|https://support.microsoft.com/en-us/windows/open-and-run-dxdiag-exe-dad7792c-2ad5-f6cd-5a37-bf92228dfd85|DxDiag}}.

; Example ArmaReforgerSteam.exe -GPUAdapter 0

=== language ===

{{hl|-language}} sets the game language by language code - supported language codes depends on StringTable which is set in gproj. {{armaR}} supported languages are: {{Columns|4| * [[File:flag_uk.gif]] {{hl|en_us}} - English * [[File:flag_france.gif]] {{hl|fr_fr}} - French * [[File:flag_italy.gif]] {{hl|it_it}} - Italian * [[File:flag_germany.gif]] {{hl|de_de}} - German * [[File:flag_spain.gif]] {{hl|es_es}} - Spanish * [[File:flag_czechrep.gif]] {{hl|cs_cz}} - Czech * [[File:flag_poland.gif]] {{hl|pl_pl}} - Polish * [[File:flag_russia.gif]] {{hl|ru_ru}} - Russian * [[File:flag_japan.gif]] {{hl|ja_jp}} - Japanese * [[File:flag_korea.gif]] {{hl|ko_kr}} - Korean * [[File:flag_portugal.gif]] {{hl|pt_br}} - Portuguese * [[File:flag_china.gif]] {{hl|zh_cn}} - Mandarin * {{GVI|armaR|1.2.0|size= 0.75}} [[File:flag_ukraine.gif]] {{hl|uk_ua}} - Ukrainian }}

; Example ArmaReforgerSteam.exe -language cs_cz

=== noBackend ===

{{hl|-noBackend}} disables backend-related http communication.

; Example ArmaReforgerSteam.exe -noBackend

=== noSound ===

{{hl|-noSound}} disables the sound system processing.

; Example ArmaReforgerSteam.exe -noSound

=== noSplash ===

{{hl|-noSplash}} skips splash screens on game load.

; Example ArmaReforgerSteam.exe -noSplash

=== noThrow ===

{{hl|-noThrow}} disables all kinds of error message dialogs. (VMEs, asserts, crashes, ...).

; Example ArmaReforgerSteam.exe -noThrow

=== profile ===

{{hl|-profile}} defines the path to the {{hl|profile}} directory to be used, either by parent directory name or by path.

; Example ArmaReforgerSteam.exe -profile "David Armstrong" // targets {{hl|%userprofile%\My Documents\My Games\David Armstrong\profile}} ArmaReforgerSteam.exe -profile "C:\Users\MyUserName\Documents\ArmaReforgerDir" // targets {{hl|"C:\Users\MyUserName\Documents\ArmaReforgerDir\profile"}}

=== singleThreadedUpdate ===

{{hl|-singleThreadedUpdate}} disables multithreaded update.

; Example ArmaReforgerSteam.exe -singleThreadedUpdate

=== world ===

{{hl|-world}} defines the world file to be loaded on startup, both absolute and relative paths are supported although it is recommended to use path relative to created filesystems (eg. worlds/myworld.ent). Workbench ignores this parameter - for that, use [[#load|-load]] parameter instead.

; Example ArmaReforgerSteam.exe -world worlds/myworld.ent

== Window ==

=== window ===

{{hl|-window}} starts the game windowed (fullscreen by default).

; Example ArmaReforgerSteam.exe -window

=== posX === === posY ===

{{hl|-posX}} and {{hl|-posY}} define the initial window position. They must be used with {{hl|-window}}.<br> posX 0 is left of the screen,<br> posY 0 is top of the screen.

; Example ArmaReforgerSteam.exe -window -posX 0 -posY 64

=== screenWidth === === screenHeight ===

{{hl|-screenWidth}} and {{hl|-screenHeight}} define the window's size (and not its render ''resolution''). They must be used with {{hl|-window}}.

; Example ArmaReforgerSteam.exe -window -screenWidth 1024 -screenHeight 578

=== forceUpdate ===

{{hl|-forceUpdate}} forces the application to render and update even when the window is out of focus.

{{Feature|informative|Previously known as {{Link|Arma 3: Startup Parameters#noPause|-noPause}} in earlier titles.}}

; Example ArmaReforgerSteam.exe -forceUpdate

=== noFocus ===

{{hl|-noFocus}} prevents window focus stealing on game initialization.

; Example ArmaReforgerSteam.exe -noFocus

== Workbench ==

{{Feature|important|These parameters apply to the Workbench executable.}}

=== forceSettings ===

{{hl|-forcesettings}} forces to use the specified Workbench settings from a file instead of the usual settings stored in Windows registry which will be entirely ignored. The settings in a file will be used for reading and also writing. This functionality is compatible with {{hl|wbSettingsDump.ini}} files being attached to crash reports.

{{Feature|informative|It is possible to export Workbench settings to an {{hl|.ini}} file from {{Link|Arma Reforger:Resource Manager: Options#Export settings|Workbench options}}.}}

=== gproj ===

{{hl|-gproj}} defines the addon project to be loaded - it can be used to skip the Workbench's addon selection screen.

; Example ArmaReforgerWorkbenchSteamDiag.exe -gproj "C:\Program Files (x86)\Steam\steamapps\common\Arma Reforger\addons\data\ArmaReforger.gproj"

=== gprojConfig ===

{{hl|-gprojConfig}} forces loading the provided configuration e.g {{hl|PC}}, {{hl|HEADLESS}} etc.

; Example ArmaReforgerWorkbenchSteamDiag.exe -gprojConfig PC

=== wbModule ===

{{hl|-wbModule}} specifies which {{GameCategory|armaR|Modding|Official Tools|text= Workbench}} module must be launched (with {{hl|[[#run|-run]]}}):

{| class="wikitable" ! Editor ! Entry (case-insensitive) ! Additional Information |- | [[Arma Reforger:Resource Manager|Resource Manager]] | resourceManager |- | [[Arma Reforger:World Editor|World Editor]] | worldEditor | See also {{Link|#Workbench - WorldEditor Module}} below |- | [[Arma Reforger:Particle Editor|Particle Editor]] | particleEditor |- | [[Arma Reforger:Animation Editor|Animation Editor]] | animEditor |- | [[Arma Reforger:Script Editor|Script Editor]] | scriptEditor | See also {{Link|#Workbench - ScriptEditor Module}} below |- | [[Arma Reforger:Audio Editor|Audio Editor]] | audioEditor |- | [[Arma Reforger:Behavior Editor|Behavior Editor]] | behaviorEditor |- | [[Arma Reforger:Procedural Animation Editor|Procedural Animation Editor]] | procAnimEditor |- | [[Arma Reforger:String Editor|String Editor]] | localizationEditor | See also {{Link|#Workbench - LocalizationEditor Module}} below |- | Navmesh Generator | navmeshGeneratorMain | See also {{Link|#Workbench - NavmeshGeneratorMain Module}} below |}

{{Feature|important| * {{hl|-wbmodule}} requires an equal sign {{hl|{{=}}}} to work. * Parameters specified after the module name are considered to be parameters to the module specifically. * The {{hl|{{Link|#run|-run}}}} parameter must be added after each instance of {{hl|-wbModule}} for them to launch. }}

; Example ArmaReforgerWorkbenchSteamDiag.exe -wbModule=WorldEditor -run

=== plugin ===

{{hl|-plugin}} specifies which {{GameCategory|armaR|Modding|Official Tools|text= Workbench}} plugin must be launched (WorldTestPlugin, TextureImportTool, MaterialImportTool, WorldDataExport etc).

{{Feature|informative| * Parameters specified after the plugin are considered to be parameters to the plugin specifically. * Plugins are loaded for specific modules. Before loading a plugin specify the appropriate [[#wbModule|wbModule]]. }}

; Example ArmaReforgerWorkbenchSteamDiag.exe -wbModule=ResourceManager -plugin=ResavePlugin pluginArguments

=== run ===

{{hl|-run}} tells the executable to open the designated Workbench module (specified by {{hl|[[#wbModule|-wbModule]]}} usage).

; Example ArmaReforgerWorkbenchSteamDiag.exe -wbModule=WorldEditor -run

=== load ===

{{hl|-load}} tells the executable to open selected file in the designated Workbench module (specified by {{hl|[[#wbModule|-wbModule]]}} usage). The file path can be specified either by absolute path, relative path, exact path or by resource name.

; Example ArmaReforgerWorkbenchSteamDiag.exe -wbModule=WorldEditor -run -load "world/myworld.ent"

This will open up the [[Arma Reforger:World Editor|World Editor]] and load the {{hl|myworld.ent}} file.

=== packAddon ===

{{hl|-packAddon}} is the main parameter used for addon packing.

When no directory is specified (by using {{hl|{{Link|#packAddonDir}}}}), the directory from the last session is used.

When packing an addon for the first time, a new directory is automatically created in the same dir as {{hl|profile}}.

; Example ArmaReforgerWorkbenchSteamDiag.exe -wbModule=ResourceManager -packAddon

=== packAddonDir ===

{{hl|-packAddonDir}}specifies the output directory where resulting PAKs will be saved.

; Example ArmaReforgerWorkbenchSteamDiag.exe -wbModule=ResourceManager -packAddon -packAddonDir "D:\build\Green"

=== publishAddon ===

{{hl|-publishAddon}} is main parameter used for addon publishing.

It should be used only for publishing addon updates, and not for the initial publish because data from last session are used to fill in the blanks.

It can be used on its own, in combination with '''packAddon''' or in combination with parameters starting with "publishAddon".

When no directory is specified (by using '''publishAddonDir''') a directory from last session is used.

; Example ArmaReforgerWorkbenchSteamDiag.exe -wbModule=ResourceManager -publishAddon

=== publishAddonDir ===

{{hl|-publishAddonDir}} specifies the pre-packed data directory (obtained by the {{hl|-packAddon}} parameter above). When not specified, directory from the last session is used.

; Example ArmaReforgerWorkbenchSteamDiag.exe -wbModule=ResourceManager -publishAddon -publishAddonDir "D:\build\Green"

=== publishAddonVersion ===

{{hl|-publishAddonVersion}} specifies the mod's version number. When not specified, newest version found on back-end is used and it's last digit is automatically incremented.

; Example ArmaReforgerWorkbenchSteamDiag.exe -wbModule=ResourceManager -publishAddon -publishAddonVersion "2.3.5"

=== publishAddonChangeNote ===

{{hl|-publishAddonChangeNote}} is an optional parameter that specifies a note to the provided update.

; Example ArmaReforgerWorkbenchSteamDiag.exe -publishAddonChangeNote "Fix shading"

=== publishAddonChangeNoteFile ===

{{hl|-publishAddonChangeNoteFile}} is an optional parameter which is used to specify this update's change note.

; Example ArmaReforgerWorkbenchSteamDiag.exe -publishAddonChangeNoteFile "C:\Addon\changelog.txt"

=== publishAddonPreviewImage ===

{{hl|-publishAddonPreviewImage}} is an optional parameter which you can use to specify the preview image file's path.

; Example ArmaReforgerWorkbenchSteamDiag.exe -publishAddonPreviewImage "z:/mymod/my_preview_image.jpg"

=== publishAddonScreenshots ===

{{hl|-publishAddonScreenshots}} is an optional parameter that specifies the directory from where the screenshots should be taken. It is then automatically scanned for all valid image file types (jpg, png, bmp).

; Example ArmaReforgerWorkbenchSteamDiag.exe -publishAddonScreenshots "Z:/mymod/screenshots"

=== rebuild-database-only ===

{{hl|-rebuild-database-only}} makes Workbench automatically exit when the database file is refreshed. This is useful for creating game packages which should be distributed with the latest database file.

; Example ArmaReforgerWorkbenchSteamDiag.exe -rebuild-database-only

=== scrDefine ===

{{hl|-scrDefine}} allows to determine a script preprocessor definition. Multiple ones can be chained using multiple {{hl|-scrDefine}}. {{Feature|informative|This parameter also works for Client and Server executables.}} <enforce> #ifdef TAG_DEBUG Print("The TAG_DEBUG flag is defined."); #else Print("The TAG_DEBUG flag is not defined."); #endif </enforce>

; Example ArmaReforgerWorkbenchSteamDiag.exe -scrDefine TAG_DEBUG -scrDefine OTHER_FLAG ArmaReforgerSteam.exe -scrDefine TAG_DEBUG -scrDefine OTHER_FLAG ArmaReforgerServer.exe -scrDefine TAG_DEBUG -scrDefine OTHER_FLAG

{{ArgTitle|3|scrNoInline|{{GVI|armaR|1.1.0}}}}

{{Feature|important|This parameter only works on '''diag exe'''!}}

{{hl|-scrNoInline}} disables inline optimisation for debug purposes.

; Example ArmaReforgerSteam'''Diag'''.exe -scrNoInline

=== wbBackendLogin ===

{{hl|-wbBackendLogin}} enforces a specific account to log in. Password is hidden console log.

; Example ArmaReforgerWorkbenchSteamDiag.exe -wbBackendLogin myEmail@bistudio.com myPassword

=== noGameScriptsOnInit ===

{{hl|-noGameScriptsOnInit}} skips game scripts compilation on Workbench initialisation. This results in a faster startup but with the need to recompile scripts before using any script-dependent elements (prefabs, configs, etc).

{{Feature|informative|Game scripts can be compiled in Script Editor using {{Controls|F7}}.}}

; Example ArmaReforgerWorkbenchSteamDiag.exe -noGameScriptsOnInit

=== enableWARP ===

{{hl|-enableWARP}} allows {{Link|https://docs.microsoft.com/en-us/windows/win32/direct3darticles/directx-warp|DirectX WARP}} (Windows Advanced Rasterization Platform) to create a virtual device for computers without a DirectX 12 device. {{Feature|informative|This parameter does not force WARP, only allows it.}}

; Example ArmaReforgerWorkbenchSteamDiag.exe -enableWARP

{{ArgTitle|3|clearSettings|{{GVI|armaR|0.9.7}}}}

{{hl|-clearSettings}}, as its name suggests, clears all Workbench user preference - window positions, preview settings, last opened files etc.

; Example ArmaReforgerWorkbenchSteamDiag.exe -clearSettings

{{ArgTitle|3|exitAfterInit|{{GVI|armaR|1.1.0}}}}

{{hl|-exitAfterInit}} makes Workbench automatically exit once it is completely initialised and all startup parameters are executed.

; Example ArmaReforgerWorkbenchSteamDiag.exe -exitAfterInit

{{ArgTitle|3|diagMenu|{{GVI|armaR|1.1.0}}}}

{{hl|-diagMenu}} overrides where diagnostic menu saved settings are stored (see hints section of [[Arma Reforger:Diag Menu]] ).

; Example ArmaReforgerWorkbenchSteamDiag.exe -diagMenu "file.txt"

== Workbench - AnimationEditor Module ==

=== animDebugger ===

{{Feature|important|This parameter only works on '''diag exe'''!}}

{{hl|-animDebugger}} enables animation debugging.

; Example ArmaReforgerWorkbenchSteam'''Diag'''.exe -animDebugger

== Workbench - LocalizationEditor Module ==

=== build ===

{{hl|-build}} creates runtime string tables from the opened string table.

; Example: -wbModule=LocalizationEditor -run -load {C014582791ECBF24}Language/localization.st -build -saveDir C:\tmp\ For building also hidden items from the localisation database, use {{hl|-scrDefine LOCALIZATION_BUILD_HIDDEN}}: ArmaReforgerWorkbenchSteamDiag.exe -scrDefine LOCALIZATION_BUILD_HIDDEN -wbModule=LocalizationEditor -run -load {C014582791ECBF24}Language/localization.st -build -saveDir C:\tmp\

=== saveDir ===

{{hl|-saveDir}} specifies the (absolute) save directory for the module's {{hl|build}} command.

; Example see above

== Workbench - NavmeshGeneratorMain Module ==

=== autogenerate ===

{{hl|-autogenerate}} generates the provided world's navmesh.

; Example // This opens up the World Editor with {{hl|myworld.ent}} loaded, connects Navmesh Editor to it and starts navmesh generation of the specified navmesh projects. // Navmesh Editor generates the navmesh and saves it to the path originally held by NavmeshWorldEntity in the world. ArmaReforgerWorkbenchSteamDiag.exe -wbModule=NavmeshGeneratorMain -run -autogenerate "world/myworld.ent"

navmesh projects are optional and can be {{hl|ALL}} to generate all projects.

=== saveDir ===

{{hl|-saveDir}} is an optional parameter that defines in which directory the data will be exported.

; Example ArmaReforgerWorkbenchSteamDiag.exe -wbModule=NavmeshGeneratorMain -run -autogenerate "world/myworld.ent" -saveDir "C:/temp/output/"

=== logNavmeshGen ===

{{hl|-logNavmeshGen}} logs output from changing states of the navmesh generator state machine. {{Feature|informative|This parameter does nothing at the moment as it is always enabled.}}

== Workbench - ResourceManager Module ==

=== buildData ===

{{hl|-buildData}} builds all data of one addon in a specified directory. Without addon specification, it builds data of the current addon (usually a game). There are two mandatory parameters: {{hl|PlatformName}} and {{hl|TargetFolder}}. The third parameter, {{hl|AddonName}}, is not mandatory.

; Example 1 This builds data of a current addon ArmaReforgerWorkbenchSteamDiag.exe -wbModule=ResourceManager -builddata PC "C:\Data\PCData"

; Example 2 This builds data of a specific addon called "ArmaReforger" ArmaReforgerWorkbenchSteamDiag.exe -wbModule=ResourceManager -builddata PC "C:\Data\PCData" ArmaReforger

This will build PC data to the provided directory. Possible options for the platform name are PC, PC_WB, XBOX_ONE, XBOX_SERIES, PS4, HEADLESS.

Resource database cache file {{hl|resourceDatabase.rdb}} is being saved after build too. It contains only the files which are part of the build.

State of the incremental build progress is being continuously saved every 60 seconds into {{hl|LastBuildInfo.binfo}} file. After an unexpected crash, the next build will continue from this last saved state.

Note that entire workbench application will be exited when build is completed.

=== metaFiles ===

{{hl|-metaFiles}} is an optional parameter which may be used together with {{Link|#buildData|-buildData}} - it copies {{hl|.meta}} files to the built data.

; Example ArmaReforgerWorkbenchSteamDiag.exe -wbModule=ResourceManager -buildData PC "C:\Data\PCData" -metaFiles

=== loadBuiltData ===

{{hl|-loadBuiltData}} is an optional parameter which may be used together with {{Link|#buildData|-buildData}} - built resource is loaded into memory and possible errors are printed into the log. Useful for identifying broken resources.

; Example ArmaReforgerWorkbenchSteamDiag.exe -wbmodule=ResourceManager -buildData PC "C:\Data\PCData" -metaFiles -loadBuiltData

=== includeTypes === {{hl|-includeTypes}} is an optional parameter which may be used together with {{Link|#buildData|-buildData}} - it specifies a list of file types (separated by a comma) that will be included in data build. Can be combined together with {{Link|#excludeTypes|-excludeTypes}}

; Example ArmaReforgerWorkbenchSteamDiag.exe -wbmodule=ResourceManager -builddata PC "c:\Data\PCData" -metaFiles -includeTypes "edds,xob,emat"

=== excludeTypes ===

{{hl|-excludeTypes}} is an optional parameter which may be used together with {{Link|#buildData|-buildData}} - it specifies a list of file types (separated by a comma) that will not be included in data build. Can be combined together with {{Link|#excludeTypes|-includeTypes}}

; Example ArmaReforgerWorkbenchSteamDiag.exe -wbmodule=ResourceManager -builddata PC "C:\Data\PCData" -metaFiles -excludeTypes "nmn,ent,terr"

=== filterPath ===

{{hl|-filterPath}} is an optional parameter which may be used together with {{Link|#buildData|-buildData}} - it allows to limit data build to only a single folder or file.

; Example 1 ArmaReforgerWorkbenchSteamDiag.exe -wbmodule=ResourceManager -buildData -filterPath "c:\Data\ArmaReforger\worlds\Arland" This limits that only data from this specific folder will go to data build

; Example 2 ArmaReforgerWorkbenchSteamDiag.exe -wbmodule=ResourceManager -buildData -filterPath "c:\Data\ArmaReforger\worlds\Arland\Arland.ent" This limits that only data that belong to {{hl|Arland.ent}} will go to data build (ent, smap, smd, ...)

=== filterTags ===

{{hl|-filterTags}} is an optional parameter which may be used together with {{Link|#buildData|-buildData}} - it can be used to exclude/include particular files and folders from/to data build. It is based on tagging files and folders through the "Build Tags" property which is part of file/folder import settings. This parameter has a form of a C++ expression where can be used only string tags and these three operators:

* '''&''' - logical AND * '''|''' - logical OR * '''!''' - logical NOT

; Examples: ArmaReforgerWorkbenchSteamDiag.exe -filterTags "!wbOnly & !testOnly & !consolesOnly" This includes to build everything except files and folders tagged as wbOnly or testOnly or consolesOnly

ArmaReforgerWorkbenchSteamDiag.exe -filterTags "wbOnly" This includes to build only files and folders tagged as wbOnly

ArmaReforgerWorkbenchSteamDiag.exe -filterTags "wbOnly & !testOnly" This includes to build only files and folders tagged as wbOnly but without those of them that are tagged as testOnly

ArmaReforgerWorkbenchSteamDiag.exe -filterTags "wbOnly | testOnly" This includes to build only files and folders tagged as wbOnly or testOnly

ArmaReforgerWorkbenchSteamDiag.exe -filterTags "(!wbOnly & !testOnly) | alwaysIncluded" This includes to build everything except files and folders tagged as wbOnly or testOnly. If some file or folder is tagged with alwaysIncluded it will be included even though it's located inside a wbOnly folder for example

=== wbSilent ===

{{hl|-wbsilent}} initialises the engine, workbench modules and exit without opening any windows; it can be used to validate engine/game initialisation and script compilation.

== Workbench - ScriptEditor Module ==

=== validate ===

string value, default ALL

{{hl|-validate}} checks if the game scripts are compilable and returns Workbench application return code of "-1" when compilation failed and "0" when compilation was successful. Value is optional and script configuration name is expected (Configurations can be found in project settings, it is usually PC, XBOX_SERIES, etc).

== Workbench - WorldEditor Module ==

{{ArgTitle|3|forceSaveAll|{{GVI|armaR|1.1.0}}}}

{{hl|-forceSaveAll}} * '''Normal edit mode:''' re-saves all entity layers of opened map (.ent file + its .layer files) and also all prefabs and configs that are used in the opened map. * '''Prefab edit mode:''' re-saves only opened prefab and also all other prefabs and configs that are used in the opened prefab.

; Example 1 (normal edit mode) ArmaReforgerWorkbenchSteamDiag.exe -wbModule=WorldEditor -run -load "world/myworld.ent" -forceSaveAll

; Example 2 (prefab edit mode) ArmaReforgerWorkbenchSteamDiag.exe -wbModule=WorldEditor -run -load "Prefabs/Structures/Houses/Villa/Villa_E_2I01/Villa_E_2I01.et" -forceSaveAll

== Hosting ==

{{Feature|important|These parameters apply to the Server executable.}}

=== a2sIpAddress ===

{{hl|-a2sIpAddress}} sets Steam Query Protocol's Bind IP address.

; Example ArmaReforgerServer.exe -a2sIpAddress 192.168.1.10

=== a2sPort ===

{{hl|-a2sPort}} sets Steam Query Protocol's Bind port.

; Example ArmaReforgerServer.exe -a2sPort 7777

{{ArgTitle|3|autoreload|{{GVI|armaR|0.9.6}}}}

{{hl|-autoreload}} reloads the scenario when the session ends after the provided delay, without shutting down the server. Value is in seconds.

{{GVI|armaR|1.3.0}} the {{hl|disabled}} value makes the ''server'' restart and relaunch as the same instance.

; Example ArmaReforgerServer.exe -autoreload 10

{{ArgTitle|3|autoshutdown|{{GVI|armaR|1.3.0}}}}

{{hl|-autoshutdown}} ensures the correct server shutdown process.

To give 30 seconds post game and then shutdown: ; Example ArmaReforgerServer.exe -autoreload 30 -autoshutdown

{{Feature|gvi|armaR|1.3.0| To circumvent 1.3.0's server restart issue, make sure to use this command and configure the server to automatically restart on failure or shutdown. }}

=== bindIP ===

{{hl|-bindIP}} can be used to override both [[Arma Reforger:Server Hosting#gameHostBindAddress|gameHostBindAddress]] and [[Arma Reforger:Server Hosting#gameHostRegisterBindAddress|gameHostRegisterBindAddress]] values present in [[Arma Reforger:Server Hosting#Configuration File|server config]].

; Example ArmaReforgerServer.exe -bindIP 192.168.1.42

=== bindPort ===

{{hl|-bindPort}} can be used to override both [[Arma Reforger:Server Hosting#gameHostBindPort|gameHostBindPort]] and [[Arma Reforger:Server Hosting#gameHostRegisterBindPort|gameHostRegisterBindPort]] values present in [[Arma Reforger:Server Hosting#Configuration File|server config]].

; Example ArmaReforgerServer.exe -bindPort 2302

=== config ===

{{hl|-config}} is used by servers to point to a JSON server configuration. {{Feature|informative|See [[Arma Reforger: Server Hosting| Server Hosting]] for more information.}}

; Example ArmaReforgerServer.exe -config myConfigFile.json

{{ArgTitle|3|enableNightGrain|{{GVI|armaR|1.6.0}}}}

''was {{hl|forceDisableNightGrain}} in 1.6.0.54, changed in 1.6.0.76''

{{hl|-enableNightGrain}} enables night grain in multiplayer (dedicated or hosted).

{{Feature|informative|Single player always has night grain disabled.}}

; Example ArmaReforgerServer.exe -enableNightGrain

=== listScenarios ===

{{hl|-listScenarios}} prints to game logs the scenario .conf file paths. {{Feature|informative| * Workshop scenarios will only be listed if no scenario is being loaded (through e.g a {{Link|#config}}). * A list of official scenarios can be found on {{Link|Arma Reforger:Server Config#scenarioId}}. }}

; Example ArmaReforgerServer.exe -listScenarios

{{ArgTitle|3|loadSessionSave|{{GVI|armaR|1.0.0}}{{GVI|armaR|1.6.0}}}}

{{hl|-loadSessionSave}} allows the game to load a previous game session.

It can be used alone to load the latest save, or with a specific save file name. When left empty, it will attempt to locate the latest save game data for the current scenario on launch. Optionally, as a parameter, the UUID of a specific save can be passed, which is found inside each save point's {{hl|meta-info.json}} file.

; Examples ArmaReforgerSteam.exe -loadSessionSave ArmaReforgerSteam.exe -loadSessionSave 07e8fa26-d5b6-47f6-a19b-641c72ab05bc ArmaReforgerServer.exe -loadSessionSave ArmaReforgerServer.exe -loadSessionSave 0d51b792-2a66-47d2-b71a-09086cffba3a

{{ArgTitle|3|keepSessionSave|{{GVI|armaR|1.6.0}}}}

{{hl|-keepSessionSave}} keeps any save data for completed playthroughs on the game's end screen.

; Example ArmaReforgerSteam.exe -keepSessionSave

=== logStats ===

{{hl|-logStats}} allows to log performance statistics every (optionally) defined interval (in milliseconds).

; Example : {{hl|ArmaReforgerServer.exe -logStats}} - logs every seconds : {{hl|ArmaReforgerServer.exe -logStats 10000}} - only logs every 10s

; Result : <code style="display: block">FPS: 60.0, frame time (avg: 16.7 ms, min: 9.3 ms, max: 23.7 ms), Mem: 3291106 kB, Player: 2, AI: 104, Veh: 0 (17), Proj (S: 12, M: 0, G: 0 | 12), RplItemsS: 410, RplItemsC0: 17068</code> * FPS: <float> = Current server FPS value * frame time (avg: <float> ms, min: <float> ms, max: <float> ms) = The average, minimum, & maximum server frame times * Mem: <int> = The current memory usage in kilobytes as reported internally by the server * Player: <int> = Number of current players * AI: <int> = Number of current AI spawned on the server * Veh <int> (<int>) = The value inside the parentheses is the current number of vehicles spawned on the server * Proj: ** S: <int> = Number of active '''s'''hells ** M: <int> = Number of active '''m'''issiles ** G: <int> = Number of active '''g'''renades ** | <int> = Total projectiles * RplItemsS: <int> = The number of dynamic (spawned during game) streams on the server * RplItemsC0: <int> = The number of streams open to the client

{{Feature|important|The memory usage reported by {{hl|-logStats}} is a server approximation and is therefore not 100% accurate when compared with the operating system values.}}

{{ArgTitle|3|logVoting|{{GVI|armaR|1.3.0<!--.157-->}}}}

{{hl|-logVoting}} adds logging info to the voting system with information about who created, voted, and against whom the vote was created.

; Example ArmaReforgerServer.exe -logVoting

=== maxFPS ===

{{hl|-maxFPS}} sets max FPS limit - useful for a server, or to force a client's max FPS. {{Feature|informative|Also works on clients, even though the Video Settings FPS limitation option is preferred.}}

; Example ArmaReforgerServer.exe -maxFPS 30

=== server ===

This parameter instructs the executable to launch '''local''' server and '''load selected world'''. When this parameter is used, config is ignored. Server parameter can be combined with {{Link|#addons}} & {{Link|#addonsDir}} parameters to start a server with local mods, which can be useful when testing addon before uploading it Workshop. ArmaReforgerServer.exe -server "worlds/MP/MPTest.ent" -addonsDir "C:\MyModsDir" -addons MyCustomMod {{Feature|important|These parameters apply to the Game executable.}}

=== client ===

{{hl|-client}} starts up an RplSession in local client mode. The session tries to connect to the provided IP.

; Example #1 ArmaReforgerSteam.exe -client 127.0.0.1

; Example #2 This will connect the game to a {{Link|#server|locally hosted dedicated server}} and load the local MyCustomMod addon: ArmaReforgerSteam.exe -client -addonsDir "C:\MyModsDir" -addons MyCustomMod

{{ArgTitle|3|worldSystemsConfig|{{GVI|armaR|1.6.0}}}}

{{Feature|important|This parameter only works on '''diag exe'''!}}

{{hl|-worldSystemsConfig}} allows setting a world systems config file (of type <enforce inline>SystemSettings</enforce>) '''when starting a mission directly''' (''not'' via {{hl|MissionHeader.conf}}).

; Example ArmaReforgerSteam'''Diag'''.exe -worldSystemsConfig "{C50579A2EC48E8EF}Configs/Systems/MissionSystems.conf"

{{ArgTitle|3|addonsVerify|{{GVI|armaR|1.3.0}}}}

{{Feature|important|This parameter only works on '''dedicated server'''!}} Verifies the integrity of all installed addons. If any corrupted addons are found, the server will shut down and log the corrupted files. The verification may take some time depending on the size of the addons.

{{ArgTitle|3|addonsRepair|{{GVI|armaR|1.3.0}}}}

{{Feature|important|This parameter only works on '''dedicated server'''!}} Verifies the integrity of all installed addons. If any corrupted addons are found, they will be repaired automatically. If the repair fails, the server will shut down. The repair duration depends on the addons size and the amount of data which needs to be repaired.

== Network Tuning ==

{{Feature|important|These parameters apply to the Server executable.}}

=== nds ===

number value, default 2

{{hl|-nds}} Network Dynamic Simulation (nds) is a server feature that only streams in relevant replicated entities for each client. The provided value stands for diameter, or the number of cells which are being replicated. To turn the feature off use {{hl|-nds 0}}. A higher diameter will result in a bigger networked view range, lower server performance.

; Example ArmaReforgerServer.exe -nds 1

=== nwkResolution ===

{{hl|-nwkResolution}} defines what resolution Spatial Map cells should be set at in a 100..1000m range. Smaller resolution will result in less "pop-in" but lower networked view range. For high view range use high resolution, but small diameter.

; Example ArmaReforgerServer.exe -nwkResolution 500

=== rpl-timeout-ms ===

{{hl|-rpl-timeout-ms}} sets the client/server timeout's value, in milliseconds.

; Example ArmaReforgerServer.exe -rpl-timeout-ms 10000

=== rpl-timeout-disable ===

{{Feature|important|This parameter only works on '''diag exe'''!}}

{{hl|-rpl-timeout-disable}} disables the client/server timeout. {{Feature|important|If a connection stops responding, the server's performance will deteriorate until it eventually runs out of memory and crash. This parameter is strictly for debugging purposes.}}

; Example ArmaReforgerSteam'''Diag'''.exe -rpl-timeout-disable

=== rpl-reconnect ===

{{Feature|important|This parameter only works on '''diag exe''', on '''client'''!}}

The replication tries to reconnect instead of immediately raising connection.

; Example ArmaReforgerSteam'''Diag'''.exe -rpl-reconnect

=== rpl-vcons ===

number value, range 0..200, default 0

{{Feature|important|This parameter only works on '''diag exe'''!}}

{{hl|-rpl-vcons}} sets the number of virtual connections.

; Example ArmaReforgerSteam'''Diag'''.exe -rpl-vcons 5

=== rpl-validation-rdb-disable ===

{{Feature|important|This parameter only works on '''diag exe'''!}}

{{hl|-rpl-validation-rdb-disable}} disables the validation of clients resource database. {{Feature|warning|Make sure you know what you are doing first before disabling the validation as data mismatch may bring undefined behaviour!}}

; Example ArmaReforgerSteam'''Diag'''.exe -rpl-validation-rdb-disable

=== rpl-validation-scr-disable ===

{{Feature|important|This parameter only works on '''diag exe'''!}}

{{hl|-rpl-validation-scr-disable}} disables the validation of clients scripts checksum. {{Feature|warning|Make sure you know what you are doing first before disabling the validation as script mismatch may bring undefined behaviour!}}

; Example ArmaReforgerSteam'''Diag'''.exe -rpl-validation-scr-disable

=== rpl-validation-version-disable ===

{{Feature|important|This parameter only works on '''diag exe'''!}}

{{hl|-rpl-validation-version-disable}} disables the validation of clients executable version. {{Feature|warning|Make sure you know what you are doing first before disabling the validation as version mismatch may bring undefined behaviour!}}

; Example ArmaReforgerSteam'''Diag'''.exe -rpl-validation-version-disable

=== rpl-validation-devbin-disable ===

{{Feature|important|This parameter only works on '''diag exe'''!}}

{{hl|-rpl-validation-devbin-disable}} disables the validation of developer binary flag, allowing mixing developer and non-developer binaries in the same multiplayer session.

=== staggeringBudget ===

{{hl|-staggeringBudget}} defines how many stationary spatial map cells are allowed to be processed in one tick in 1..10201 range. If not set it uses "{{Link|#nds|-nds}}" diameter. A lower number will limit how many cells the server has to process per tick, but increase the time it takes for a client to have all relevant entities streamed in. If the server experiences significant performance drops on spawning/teleporting then the number is set too high, if the client experiences "pop-in" of replicated items then the number is set too low.

; Example ArmaReforgerServer.exe -staggeringBudget 5000

=== streamingBudget ===

{{hl|-streamingBudget}} is the global streaming budget that is equally distributed between all connections. To decrement the budget, it uses the replicated hierarchy size of each entity that needs to be streamed in. It cannot go under 100 to prevent the system stalling. A lower number will limit how many entities the server has to process per tick, but increase the time it takes for a client to have that entity streamed in, if the server experiences significant performance drops on spawning/teleporting then the number is set too high, if the client experiences "pop-in" of replicated items then the number is set too low.

; Example ArmaReforgerServer.exe -streamingBudget 500

=== streamsDelta ===

number value, range 1..1000, default 100

{{hl|-streamsDelta}} is a tool to limit the amount of streams being opened for a client. If the difference between 'the number of streams the server has open' and 'the number of streams the client has open' is larger than the NUMBER then the server will not open any more streams this tick. To be adjusted based on average client networking speed.

; Example ArmaReforgerServer.exe -streamsDelta 200

== Debug ==

{{ArgTitle|3|AILimit|{{GVI|armaR|0.9.8}}}}

{{hl|-aiLimit}} sets the top limit of AIs. No systems will be able to spawn any AIs when this ceiling is reached (through <enforce inline>aiWorld.CanAICharacterBeAdded()</enforce> - see also {{Link/Enfusion|armaR|SCR_AIGroup}} and {{Link/Enfusion|armaR|SCR_ChimeraAIAgent}}). {{Feature|informative|A value less than or equal to zero simply disables any possible AI.}} {{Feature|important|This parameter applies to both hosted and singleplayer scenarios; while it can save performance, it can also break the experience!}}

; Example ArmaReforgerServer.exe -AILimit 32 ArmaReforgerServer.exe -AILimit 0 ArmaReforgerSteam.exe -AILimit 100 ArmaReforgerSteam.exe -AILimit 0

{{ArgTitle|3|AIPartialSim|{{GVI|armaR|1.0.0}}}}

number value, default: 4

{{hl|-aiPartialSim}} sets in how many batches all simulable AIs will divided and processed.<br> e.g: 150 AIs, 100 simulable AIs (100 in LOD0, 50 in LOD 10), these 100 AIs divided by 4 will make four batches of 25 AIs each.

; Example ArmaReforgerSteam.exe -aiPartialSim 5

{{ArgTitle|3|autodeployFaction|{{GVI|armaR|1.0.0}}}}

''alias: tdmf''

{{hl|-autodeployFaction}} overrides respawn faction (e.g US, USSR, FIA etc).

{{Feature|important|This parameter only works on '''diag exe'''!}}

; Example ArmaReforgerSteam'''Diag'''.exe -autodeployFaction US

{{ArgTitle|3|autodeployLoadout|{{GVI|armaR|1.0.0}}}}

''alias: tdml''

{{Feature|important|This parameter only works on '''diag exe'''!}}

{{hl|-autodeployLoadout}} overrides respawn role (using role name from scenario's LoadoutManager).

; Example ArmaReforgerSteam'''Diag'''.exe -autodeployLoadout #AR-Role_Driver

=== createDB ===

{{hl|-createDB}} forces database file's regeneration. Useful after file directories changes, when some resources were moved elsewhere. Takes a few seconds upon start.

; Example ArmaReforgerServer.exe -createDB

=== debugger ===

string value, default localhost

{{hl|-debugger}} sets the script debugger to a specific address.

; Example ArmaReforgerServer.exe -debugger 192.168.0.5

=== debuggerPort ===

number value, default 1000

{{hl|-debuggerPort}} sets the script debugger to a specific port.

; Example ArmaReforgerServer.exe -debuggerPort 1040

{{ArgTitle|3|disableAI|{{GVI|armaR|1.1.0}}}}

{{hl|-disableAI}} disables AIWorld initialisation and ticking.

{{ArgTitle|3|disableCrashReporter|{{GVI|armaR|0.9.7}}}}

{{hl|-disableCrashReporter}} disables the [[Arma Reforger:Crash Report#Crash Reporter|Crash Reporter]] from appearing/sending reports automatically.

; Example ArmaReforgerSteam.exe -disableCrashReporter

{{ArgTitle|3|disableNavmeshStreaming|{{GVI|armaR|1.1.0}}}}

{{hl|-disableNavmeshStreaming}} disables navmesh streaming on all navmesh worlds.

{{GVI|armaR|1.2.0|size= 0.75}} added navmesh projects list support ("BTRlike" for vehicles, "Soldiers" for characters), separated by commas.

; Example ArmaReforgerSteam.exe -disableNavmeshStreaming ArmaReforgerSteam.exe -disableNavmeshStreaming NAVMESH_PROJECT1,NAVMESHPROJECT2,etc // >= 1.2.0

=== disableShadersBuild ===

{{hl|-disableShadersBuild}} disables shaders generation.

; Example ArmaReforgerServer.exe -disableShadersBuild

=== generateShaders ===

{{hl|-generateShaders}} forces shaders generation.

; Example ArmaReforgerServer.exe -generateShaders

{{ArgTitle|3|rplEncodeAsLongJobs|{{GVI|armaR|1.1.0}}}}

{{hl|-rplEncodeAsLongJobs}} makes replication use long encoding jobs instead of short ones.

; Example ArmaReforgerServer.exe -rplEncodeAsLongJobs

{{ArgTitle|3|jobsysShortWorkerCount|{{GVI|armaR|1.1.0}}}}

{{hl|-jobsysShortWorkerCount}} sets the number of threads working on short jobs (jobs that must finish in one update loop). Value is limited to the number of CPUs or 16, whichever is the lowest.

; Example ArmaReforgerServer.exe -jobsysShortWorkerCount 4

{{ArgTitle|3|jobsysLongWorkerCount|{{GVI|armaR|1.1.0}}}}

number value, range 1..CPUCount, default ''{{Link|#jobsysShortWorkerCount}} / 2''

{{hl|-jobsysLongWorkerCount}} sets the number of threads working on long jobs (jobs that can span multiple iterations of update loop).

; Example ArmaReforgerServer.exe -jobsysLongWorkerCount 4

{{ArgTitle|3|keepNumOfLogs|{{GVI|armaR|0.9.8}}}}

number value, default: 10

{{hl|-keepNumOfLogs}} sets the maximum amount of logs to keep.

; Example ArmaReforgerServer.exe -keepNumOfLogs 3

=== log-rdb-checksum ===

{{hl|-log-rdb-checksum}} enables logging detailed information about RDB checksum computation (GUID and path in order in which they are added to checksum) for RDB checksum issues debugging.

; Example ArmaReforgerSteam.exe -log-rdb-checksum

=== log-scr-checksum ===

{{hl|-log-scr-checksum}} enables the logging of all script files used in compilation and their checksums.

; Example ArmaReforgerSteam.exe -log-scr-checksum

=== logAppend ===

{{hl|-logAppend}} makes logs to not be emptied on game start, keeping the history.

; Example ArmaReforgerSteam.exe -logAppend

=== logFS ===

{{hl|-logFS}} logs every ''F'''ile '''S'''ystem's read/write operation in {{hl|filesystem.log}}. This option is very demanding and can produce a big file in a short time, so it is to be used with caution for debug purpose only.

; Example ArmaReforgerSteam.exe -logFS

=== logLevel ===

{{hl|-logLevel}} allows for different log levels. Each level includes the ones below it (e.g {{hl|error}} includes error and {{hl|fatal}}). Possible values range from {{hl|normal}} (where everything is logged) to {{hl|fatal}} (where only extreme issues are logged): <!-- those are internal only - soz guys * spam * verbose * debug --> * normal * warning * error * fatal

; Example ArmaReforgerSteam.exe -logLevel warning

{{ArgTitle|3|logTime|{{GVI|armaR|1.3.0}}}}

string value, default time

{{hl|-logTime}} sets log line time's format; can be one of: * none * time (default) * datetime

; Example ArmaReforgerServer.exe -logTime datetime

{{ArgTitle|3|logsDir|{{GVI|armaR|0.9.8}}}}

{{hl|-logsDir}} defines the directory by name (located in the {{Link|#profile}} directory) or {{GVI|armaR|0.9.8|size= 0.75}} by path, in which game instance specific data are stored like logs, memory dumps, temporary files etc.

; Examples ArmaReforgerSteam.exe -logsDir "DebugSession1337" // targets {{hl|{{Link|#profile|&lt;profileDir&gt;}}\logs\DebugSession1337}} ArmaReforgerSteam.exe -logsDir "C:\Users\MyUserName\Documents\ArmaReforgerDir" // targets {{hl|"C:\Users\MyUserName\Documents\ArmaReforgerDir"}} directly

=== keepCrashFiles ===

{{hl|-keepCrashFiles}} prevents Crash Reporter from cleaning crash files on successful crash sending.

; Example ArmaReforgerSteam.exe -keepCrashFiles

{{ArgTitle|3|minidump|{{GVI|armaR|1.1.0}}}}

{{hl|-minidump}} allows minidump generation to include additional data; possible values: {| class="wikitable" ! Value ! Microsoft Equivalent<br>(see {{Link|https://learn.microsoft.com/en-us/windows/win32/api/minidumpapiset/ne-minidumpapiset-minidump_type#constants|minidump API documentation}}) |- | normal | MiniDumpNormal |- | dataSegs | MiniDumpWithDataSegs |- | fullMemory | MiniDumpWithFullMemory |}

; Example ArmaReforgerSteam.exe -minidump fullMemory

=== scriptAuthorizeAll ===

{{hl|-scriptAuthorizeAll}} disables the security popup about {{hl|RunCmd}}, {{hl|RunProcess}}, {{hl|KillProcess}} and (outside of profile directory) {{hl|FileIO}} operations.

; Example ArmaReforgerSteam.exe -scriptAuthorizeAll

{{ArgTitle|3|silentCrashReport|{{GVI|armaR|1.0.0}}}}

{{hl|-silentCrashReport}} suppresses the Crash Reporter's dialog and automatically sends the report without any user input or message.

; Example ArmaReforgerWorkbenchSteamDiag.exe -silentCrashReport

''was '''noCrashDialog''' before 1.0.0''

=== VMErrorMode ===

{{hl|-VMErrorMode}} sets script VM's error reporting mode; possible values are: * {{hl|silent}} - silently continues * {{hl|log_only}} - logs the error then continues * {{hl|full}} - shows the VME dialog, logs the error, then clicking "ignore" continues execution * {{hl|fatal}} - logs the error then exits the game

== Profiling ==

=== checkInstance ===

{{hl|-checkInstance}} turns on script VM's memory allocations logging - see [[Arma Reforger:Script Profiling|Script Profiling]].

; Example ArmaReforgerSteam.exe -checkInstance <!-- {{ArgTitle|3|scriptExtProfiler|{{GVI|armaR|0.0.0}}}}

{{hl|-scriptExtProfiler}} turns on script VM's support for external [[Arma Reforger:Script Profiling|Script Profiling]]. {{Feature|informative|The External Profiler can also be enabled through the [[Arma Reforger:Diag Menu|Diag Menu]]: [[Arma_Reforger:Diag Menu#Statistics|Diag Menu > Statistics > Script prof. external]] set to {{hl|true}}.}}

; Example ArmaReforgerSteam.exe -scriptExtProfiler --->

{{GameCategory|armaR|Support}}
er6jz0rdz1gocawt0zjlqpm87h9b67z

# Arma Reforger:Update History

5050
38190
378056
378055
2026-02-02T20:51:12Z
Lou Montana
10739
Remove sortable table
378056
wikitext
text/x-wiki
{{Feature|informative|See also {{Link|Arma Reforger:Known Issues}}.}}

{{Clear}} == 1.6.x ==

{| class="wikitable" ! Date ! Version ! Changelog |- | 2026-01-29 | 1.6.0.119 | {{Link|https://reforger.armaplatform.com/news/update-january-29-2026|Minor update}} |- | 2026-01-15 | 1.6.0.108 | {{Link|https://reforger.armaplatform.com/news/update-january-15-2026|Minor update}} |- | 2025-12-11 | 1.6.0.95 | {{Link|https://reforger.armaplatform.com/news/update-december-11-2025|Minor update}} |- | 2025-12-05 | 1.6.0.87 | {{Link|https://reforger.armaplatform.com/news/update-december-5-2025|Minor update}} |- | 2025-11-21 | 1.6.0.76 | {{Link|https://reforger.armaplatform.com/news/update-november-21-2025|Minor update}} |- | 2025-11-11 | 1.6.0.68 | {{Link|https://reforger.armaplatform.com/news/update-november-11-2025|Minor update}} |- | 2025-10-30 | 1.6.0.54 | '''{{Link|https://reforger.armaplatform.com/news/changelog-october-30-2025|Major update}}''' ({{Link|https://reforger.armaplatform.com/news/update-october-30-2025|Kolguyev}}) |}

== 1.5.x ==

{{Feature|informative|Version 1.5.x was skipped and made part of {{Link|#1.6.x}} update.}}

== 1.4.x ==

{| class="wikitable" ! Date ! Version ! Changelog |- | 2025-09-04 | 1.4.0.55 | {{Link|https://reforger.armaplatform.com/news/update-september-4-2025|Minor update}} |- | 2025-08-28 | 1.4.0.53 | {{Link|https://reforger.armaplatform.com/news/update-august-28-2025|Minor update}} |- | 2025-07-10 | 1.4.0.48 | {{Link|https://reforger.armaplatform.com/news/update-july-10-2025|Minor update}} |- | 2025-06-19 | 1.4.0.45 | {{Link|https://reforger.armaplatform.com/news/update-june-19-2025|Minor update}} |- | 2025-06-12 | 1.4.0.38 | {{Link|https://reforger.armaplatform.com/news/update-june-12-2025|Minor update}} |- | 2025-06-05 | 1.4.0.31 | {{Link|https://reforger.armaplatform.com/news/update-june-5-2025|Minor update}} |- | 2025-05-29 | 1.4.0.29 | {{Link|https://reforger.armaplatform.com/news/update-may-29-2025|Minor update}} |- | 2025-05-22 | 1.4.0.22 | '''{{Link|https://reforger.armaplatform.com/news/update-may-22-2025|Major update}}''' ({{Link|https://reforger.armaplatform.com/news/playstation-5-mods-technical-statement|PlayStation 5 mods}}) |}

== 1.3.x ==

{| class="wikitable" ! Date ! Version ! Changelog |- | 2025-05-07 | 1.3.0.170 | {{Link|https://reforger.armaplatform.com/news/update-may-7-2025|Minor update}} |- | 2025-04-17 | 1.3.0.157 | {{Link|https://reforger.armaplatform.com/news/update-april-17-2025|Minor update}} |- | 2025-04-10 | 1.3.0.144 | {{Link|https://reforger.armaplatform.com/news/update-april-10-2025|Minor update}} |- | 2025-03-27 | 1.3.0.130 | '''{{Link|https://reforger.armaplatform.com/news/changelog-march-27-2025|Major update}}''' ({{Link|https://reforger.armaplatform.com/news/fire-support|Fire Support}}) |}

== 1.2.x ==

{| class="wikitable" ! Date ! Version ! Changelog |- | 2025-02-27 | 1.2.1.202 | {{Link|https://reforger.armaplatform.com/news/update-february-27-2025|Minor update}} |- | 2025-01-24 | 1.2.1.189 | {{Link|https://reforger.armaplatform.com/news/update-january-24-2025|Minor update}} |- | 2025-01-10 | 1.2.1.173 | {{Link|https://reforger.armaplatform.com/news/update-january-10-2025|Minor update}} |- | 2024-12-12 | 1.2.1.169 | {{Link|https://reforger.armaplatform.com/news/update-december-12-2024|Minor update}} |- | 2024-08-22 | 1.2.0.124 | {{Link|https://reforger.armaplatform.com/news/update-august-22-2024|Minor update}} |- | 2024-07-31 | 1.2.0.102 | {{Link|https://reforger.armaplatform.com/news/update-july-31-2024|Minor update}} |- | 2024-07-25 | 1.2.0.98 | {{Link|https://reforger.armaplatform.com/news/update-july-25-2024|Minor update}} |- | 2024-07-18 | 1.2.0.92 | {{Link|https://reforger.armaplatform.com/news/update-july-18-2024|Minor update}} |- | 2024-07-03 | 1.2.0.76 | {{Link|https://reforger.armaplatform.com/news/update-july-3-2024|Minor update}} |- | 2024-06-26 | '''1.2.0.70''' | '''{{Link|https://reforger.armaplatform.com/news/update-june-26-2024|Major update}}''' ({{Link|https://reforger.armaplatform.com/news/update-june-26-2024-2|Reinforcements}}) |}

== 1.1.x ==

{| class="wikitable" ! Date ! Version ! Changelog |- | 2024-03-26 | 1.1.0.42 | {{Link|https://reforger.armaplatform.com/news/update-march-26-2024|Minor update}} |- | 2024-03-13 | 1.1.0.34 | '''{{Link|https://reforger.armaplatform.com/news/update-march-13-2024|Major update}}''' ({{Link|https://reforger.armaplatform.com/news/update-march-13-2024|Resistance Ops}}) |}

== 1.0.x ==

{| class="wikitable" ! Date ! Version ! Changelog |- | 2024-02-28 | 1.0.0.98 | {{Link|https://reforger.armaplatform.com/news/update-february-28-2024|Minor update}} |- | 2024-02-06 | 1.0.0.95 | {{Link|https://reforger.armaplatform.com/news/update-february-6-2024|Minor update}} |- | 2023-12-14 | 1.0.0.80 | {{Link|https://reforger.armaplatform.com/news/update-december-14-2023|Minor update}} |- | 2023-12-07 | 1.0.0.70 | {{Link|https://reforger.armaplatform.com/news/update-december-7-2023|Minor update}} |- | 2023-11-30 | 1.0.0.59 | {{Link|https://reforger.armaplatform.com/news/update-november-30-2023|Minor update}} |- | 2023-11-22 | 1.0.0.53 | {{Link|https://reforger.armaplatform.com/news/update-november-22-2023|Minor update}} |- | 2023-11-16 | '''1.0.0''' | '''{{Link|https://reforger.armaplatform.com/news/update-november-16-2023|Major update}}''' ({{Link|https://reforger.armaplatform.com/news/update-november-16-2023|Full Release}}) |}

== 0.9.x ==

{| class="wikitable" ! Date ! Version ! Changelog |- | 2023-09-26 | 0.9.9.104 | {{Link|https://reforger.armaplatform.com/news/update-september-26-2023|Minor update}} |- | 2023-09-14 | '''0.9.9.97''' | '''{{Link|https://reforger.armaplatform.com/news/update-september-14-2023|Major update}}''' (Environment) |- | 2023-08-10 | 0.9.9.62 | {{Link|https://reforger.armaplatform.com/news/update-august-10-2023|Minor update}} |- | 2023-07-20 | '''0.9.9.47''' | '''{{Link|https://reforger.armaplatform.com/news/update-july-20|Major update}}''' (Health System) |- | 2023-05-25 | 0.9.8.73 | {{Link|https://reforger.armaplatform.com/news/update-may-25-2023|Minor update}} |- | 2023-05-18 | 0.9.8.64 | {{Link|https://reforger.armaplatform.com/news/update-may-18|Minor update}} |- | 2023-05-11 | '''0.9.8.53''' | '''{{Link|https://reforger.armaplatform.com/news/update-may-11|Major update}}''' (Mines) |- | 2023-03-30 | 0.9.7.106 | {{Link|https://reforger.armaplatform.com/news/update-march-30|Minor update}} |- | 2023-03-23 | 0.9.7.102 | {{Link|https://reforger.armaplatform.com/news/update-march-23|Minor update}} |- | 2023-03-02 | 0.9.7.95 | {{Link|https://reforger.armaplatform.com/news/update-march-2|Minor update}} |- | 2023-02-23 | 0.9.7.91 | {{Link|https://reforger.armaplatform.com/news/update-february-23|Minor update}} |- | 2023-01-12 | 0.9.7.61 | {{Link|https://reforger.armaplatform.com/news/update-january-12|Minor update}} |- | 2022-12-15 | 0.9.7.53 | {{Link|https://reforger.armaplatform.com/news/update-december-15|Minor update}} |- | 2022-12-08 | 0.9.7.48 | {{Link|https://reforger.armaplatform.com/news/december-update-8|Minor update}} |- | 2022-12-01 | '''0.9.7.41''' | '''{{Link|https://reforger.armaplatform.com/news/december-update-1|Major update}}''' (Ground Support) |- | 2022-11-10 | 0.9.6.64 | {{Link|https://reforger.armaplatform.com/news/november-update-10|Minor update}} |- | 2022-10-26 | 0.9.6.60 | {{Link|https://reforger.armaplatform.com/news/october-update-26|Minor update}} |- | 2022-10-20 | '''0.9.6.56''' | '''{{Link|https://reforger.armaplatform.com/news/october-update-20|Major update}}''' |- | 2022-08-24 (PC)<br>2022-08-25 (Xbox) | 0.9.5.116 | {{Link|https://reforger.armaplatform.com/news/august-update-24|Minor update}} |- | 2022-08-10 (PC)<br>2022-08-11 (Xbox) | 0.9.5.107 | {{Link|https://reforger.armaplatform.com/news/august-update-10|Minor update}} |- | 2022-07-20 (PC)<br>2022-07-21 (Xbox) | 0.9.5.101 | {{Link|https://reforger.armaplatform.com/news/july-update-20|Minor update}} |- | 2022-07-13 (PC)<br>2022-07-14 (Xbox) | 0.9.5.97 | {{Link|https://reforger.armaplatform.com/news/july-update-13|Minor update}} |- | 2022-06-29 (PC)<br>2022-06-30 (Xbox) | 0.9.5.90 | {{Link|https://reforger.armaplatform.com/news/june-update-29|Minor update}} |- | 2022-06-15 (PC)<br>2022-06-16 (Xbox) | 0.9.5.73 | {{Link|https://reforger.armaplatform.com/news/june-update-15|Minor update}} |- | 2022-06-07 (PC)<br>2022-06-08 (Xbox) | 0.9.5.66 | {{Link|https://reforger.armaplatform.com/news/june-update-7|Minor update}} |- | 2022-06-01 | 0.9.5.61 | {{Link|https://reforger.armaplatform.com/news/june-update-1|Minor update}} |- | 2022-05-23 (PC)<br>2022-05-25 (Xbox) | 0.9.5.51 | {{Link|https://reforger.armaplatform.com/news/minor-update-arma-reforger-steam|Minor update}} |- | 2022-05-19 | 0.9.5.49 (PC)<br>0.9.5.44 (Xbox) | {{Link|https://reforger.armaplatform.com/news/may-19th-update|Minor update}} |- | 2022-05-17 | '''0.9.5''' | '''{{Link|https://reforger.armaplatform.com/news/early-access-reforger|Alpha Release}}''' |}

{{GameCategory|armaR|Support}}
i0bf25g0lbfqfxa55rhbaqfk3qvck3y

# Arma Reforger:Video Settings

5050
33247
378063
364424
2026-02-05T14:24:40Z
Lou Montana
10739
Some wiki formatting
378063
wikitext
text/x-wiki
{{Feature|informative| {{{!}} style{{=}}"width: 100%" {{!}} : {{Colorball|red|1.125}} means a heavy impact on performance : {{Colorball|orange|1.125}} means an average impact : {{Colorball|green|1.125}} means little to no performance impact. {{!}} [[File:Reforger Video Settings.jpg|thumb|500px|{{armaR}} video settings]] {{!}}} }}

{| class="wikitable" |- class="sticky-top" ! Category !! Setting !! CPU !! GPU !! RAM !! VRAM !! Additional Details |- | rowspan="1" | === Presets === | Quality Presets | style="text-align: center" | {{Colorball|red}} | style="text-align: center" | {{Colorball|red}} | style="text-align: center" | {{Colorball|red}} | style="text-align: center" | {{Colorball|red}} | Choose from one of four quality presets. Preset ''Custom'' is automatically set once a setting was adjusted manually. |- | rowspan="7" | === General === | Window mode | style="text-align: center" | {{Colorball|green}} | style="text-align: center" | {{Colorball|green}} | | | Defines how the window is displayed. Also influences the Render Scale / Resolution setting. |- | Render scale / Resolution | style="text-align: center" | {{Colorball|green}} | style="text-align: center" | {{Colorball|red}} | | | Define the resolution at which the game scene will be rendered. A reduced resolution will drastically improve performance and a very high loss of image quality. It is recommended to use the default monitor resolution (100%). |- | FidelityFX Super Resolution 1.0 | style="text-align: center" | {{Colorball|green}} | style="text-align: center" | {{Colorball|orange}} | | | Enables [https://www.amd.com/en/technologies/fidelityfx-super-resolution AMD FidelityFX™ Super Resolution] |- | V-Sync | style="text-align: center" | {{Colorball|green}} | style="text-align: center" | {{Colorball|green}} | | | Vertical synchronisation prevents image tearing, to the potential cost of input lag. |- | FPS limit | style="text-align: center" | {{Colorball|green}} | style="text-align: center" | {{Colorball|green}} | | | Limit your FPS to reduce stuttering and power consumption due to unnecessary high frame rates. |- | Draw distance | style="text-align: center" | {{Colorball|red}} | style="text-align: center" | {{Colorball|green}} | | | Sets the overall terrain draw distance. |- | Nearby depth of field | style="text-align: center" | {{Colorball|green}} | style="text-align: center" | {{Colorball|red}} | | | Enable or disable nearby Depth of Field (especially visible when aiming down sights). |- | rowspan="5" | === Post-processing === | Post-process anti aliasing | style="text-align: center" | {{Colorball|orange}} | style="text-align: center" | {{Colorball|red}} | | | Choose between None, FXAA low, FXAA high, SMAA low, SMAA high. |- | Depth of field quality | style="text-align: center" | {{Colorball|green}} | style="text-align: center" | {{Colorball|green}} | | | Choose between None, Simple or Bokeh (more accurate but more expensive). |- | Ambient occlusion (HBAO) | style="text-align: center" | {{Colorball|green}} | style="text-align: center" | {{Colorball|orange}} | | | Ambient occlusion is a rendering method that provides an approximation of how bright light should be at different parts of a visible surface. |- | Screen space reflections | style="text-align: center" | {{Colorball|green}} | style="text-align: center" | {{Colorball|red}} | | | Defines how many reflections are shown in the scene and their quality. |- | Contact shadows | style="text-align: center" | {{Colorball|green}} | style="text-align: center" | {{Colorball|orange}} | | | Enables {{Link|https://en.wikipedia.org/wiki/Screen space directional occlusion|SSDO}}'s contact shadows. |- | rowspan="13" | === Quality === | Hardware anti-aliasing | style="text-align: center" | {{Colorball|green}} | style="text-align: center" | {{Colorball|red}} | | | See {{Link|https://en.wikipedia.org/wiki/Multisample_anti-aliasing}}. |- | Foliage smoothing | style="text-align: center" | {{Colorball|orange}} | style="text-align: center" | {{Colorball|orange}} | | | Defines if and what foliage is smoothed. Only available if '''Hardware anti-aliasing''' is at least set to ''Low''. |- | Model geometric detail | style="text-align: center" | {{Colorball|green}} | style="text-align: center" | {{Colorball|orange}} | | | Sets the overall quality of model geometry. |- | Object draw distance | style="text-align: center" | {{Colorball|red}} | style="text-align: center" | {{Colorball|green}} | | | Sets the objects' maximum draw distance from the camera, relative to Terrain's draw distance. |- | Terrain surface detail | style="text-align: center" | {{Colorball|green}} | style="text-align: center" | {{Colorball|orange}} | | | Sets the terrain's shader quality. |- | Texture detail | style="text-align: center" | {{Colorball|red}} | style="text-align: center" | {{Colorball|orange}} | | style="text-align: center" | {{Colorball|red}} | Sets the overall texture quality. |- | Texture filtering | style="text-align: center" | {{Colorball|red}} | style="text-align: center" | {{Colorball|green}} | | | Define {{Link|https://en.wikipedia.org/wiki/Texture_filtering}} quality. |- | Grass quality | style="text-align: center" | {{Colorball|green}} | style="text-align: center" | {{Colorball|red}} | | | Sets the overall grass quality. |- | Grass draw distance | style="text-align: center" | {{Colorball|red}} | style="text-align: center" | {{Colorball|red}} | | | Sets the rendering distance of grass and other 3D clutters (small rocks, etc). |- | Shadow quality | style="text-align: center" | {{Colorball|green}} | style="text-align: center" | {{Colorball|orange}} | | | Sets the overall shadow quality. |- | Distant shadows | style="text-align: center" | {{Colorball|green}} | style="text-align: center" | {{Colorball|orange}} | | | Rendering distance of shadows. |- | Render target format | style="text-align: center" | {{Colorball|red}} | style="text-align: center" | {{Colorball|green}} | | style="text-align: center" | {{Colorball|red}} | Choose between 32 or 64-bit colour render. |- | Environment quality | style="text-align: center" | {{Colorball|green}} | style="text-align: center" | {{Colorball|orange}} | | | Affects volumetric clouds quality (number of samples, temporal filter settings, noise resolution etc), sky rendering quality (texture resolution, fog, cascade shadow), rain quality. |}

{{GameCategory|armaR|Support}}
l7wlta63awkgj0uls8bgcrsill48aaz

# Arma Reforger:Roadmap

5050
33177
369432
364635
2024-09-03T19:12:13Z
Lou Montana
10739
Remove roadmap
369432
wikitext
text/x-wiki
{{Feature|armaR|An up-to-date roadmap can be found on {{Link|https://reforger.armaplatform.com/roadmap|{{arma}} Platform}}.}}

{{GameCategory|armaR|Support|Updates}}
si6z5ysmqbh9edvfemmaudv909a2sw3

# Template:Link

10
32780
376872
369859
2025-12-10T22:44:00Z
Lou Montana
10739
Add armareforger:// and steam:// protocol examples, Format lists
376872
wikitext
text/x-wiki
<includeonly>{{#if:{{{link|{{{1|}}}}}} | {{#if:{{#pos:{{{link|{{{1|}}}}}}|<nowiki/>://}}{{#pos:{{{link|{{{1|}}}}}}|mailto:}} | {{Link/External|link= {{{link|{{{1}}}}}}|text= {{{text|{{{2|}}}}}}}} | {{Link/Internal|link= {{{link|{{{1}}}}}}|text= {{{text|{{{2|}}}}}}}} }} | -no link provided-{{TemplateCase||[[Category:Link template usage error]]}} }}</includeonly><noinclude>{{Doc/Template

|descr= This template combines {{Template|Link/External}} and {{Template|Link/Internal}} under one entrypoint. It also adds the page to the [[:Category:Link template usage error|Link template usage error]] category on usage error.

|param1= link |descr1= (possibly named parameter) the URL or the local link, hashed or not ({{hl|Operation Flashpoint#Introduction}})

|param2= text |descr2= (Optional, possibly named parameter) text to be displayed

|example1= <nowiki/> <nowiki>* {{Link}}</nowiki> |result1= <nowiki/> * {{Link}}

|example2= <nowiki/> <nowiki>* {{Link|http://}}</nowiki><br> <nowiki>* {{Link|https://}}</nowiki><br> <nowiki>* {{Link|ftp://}}</nowiki><br> <nowiki>* {{Link|enfusion://}}</nowiki><br> <nowiki>* {{Link|armareforger://}}</nowiki><br> <nowiki>* {{Link|steam://}}</nowiki><br> <nowiki>* {{Link|mailto:}}</nowiki> |result2= <nowiki/> * {{Link|http://}} * {{Link|https://}} * {{Link|ftp://}} * {{Link|enfusion://}} * {{Link|armareforger://}} * {{Link|steam://}} * {{Link|mailto:}}

|example3= <nowiki/> <nowiki>* {{Link|https://ofp.gamepark.cz/index.php?showthis{{=}}2302}}</nowiki><br> <nowiki>* {{Link|link= https://ofp.gamepark.cz/index.php?showthis=2302}}</nowiki><br> <nowiki>* {{Link|https://www.arma3.com/}}</nowiki><br> <nowiki>* {{Link|https://www.arma3.com/|{{arma3}} website}}</nowiki> |result3= <nowiki/> * {{Link|https://ofp.gamepark.cz/index.php?showthis{{=}}2302}} * {{Link|link= https://ofp.gamepark.cz/index.php?showthis=2302}} * {{Link|https://www.arma3.com/}} * {{Link|https://www.arma3.com/|{{arma3}} website}}

|example4= <nowiki/> <nowiki>* {{Link|setDir}}</nowiki><br> <nowiki>* {{Link|setDir#notes}}</nowiki><br> <nowiki>* {{Link|setDir#notes|setDir and nothing else}}</nowiki> |result4= <nowiki/> * {{Link|setDir}} * {{Link|setDir#notes}} * {{Link|setDir#notes|setDir and nothing else}}

|example5= <nowiki/> <nowiki>* {{Link|#}}</nowiki><br> <nowiki>* {{Link|#Usage}}</nowiki><br> <nowiki>* {{Link|#Usage|The Usage chapter}}</nowiki><br> <nowiki>* {{Link|link= #Usage|text=}}</nowiki><br> <nowiki>* {{Link|link= #Usage|text= The Usage chapter}}</nowiki> |result5= <nowiki/> * {{Link|#}} * {{Link|#Usage}} * {{Link|#Usage|The Usage chapter}} * {{Link|link= #Usage|text=}} * {{Link|link= #Usage|text= The Usage chapter}}

|example6= <nowiki/> <nowiki>* {{Link|Arma Reforger:Getting Started}}</nowiki><br> <nowiki>* {{Link|Arma Reforger:Getting Started|Test}}</nowiki><br> <nowiki>* {{Link|Arma Reforger:Getting Started#Play in Single Player}}</nowiki><br> <nowiki>* {{Link|Arma Reforger:Getting Started#Play in Single Player|Play in Single Player}}</nowiki> |result6= <nowiki/> * {{Link|Arma Reforger:Getting Started}} * {{Link|Arma Reforger:Getting Started|Test}} * {{Link|Arma Reforger:Getting Started#Play in Single Player}} * {{Link|Arma Reforger:Getting Started#Play in Single Player|Play in Single Player}}

|example7= <nowiki/> <nowiki>* {{Link|setDir}}</nowiki><br> <nowiki>* {{Link|Arma Reforger:Getting Started}}</nowiki><br> <nowiki>* {{Link|Template:Messagebox}}</nowiki><br> <nowiki>* {{Link|Template:Messagebox|Messagebox Template}}</nowiki><br> <nowiki>* {{Link|Template:Messagebox#Usage}}</nowiki><br> <nowiki>* {{Link|Template:Messagebox#Usage|Messagebox template usage}}</nowiki><br> <nowiki>* {{Link|mailto:support@example.com|support e-mail}}</nowiki> |result7= <nowiki/> * {{Link|setDir}} * {{Link|Arma Reforger:Getting Started}} * {{Link|Template:Messagebox}} * {{Link|Template:Messagebox|Messagebox Template}} * {{Link|Template:Messagebox#Usage}} * {{Link|Template:Messagebox#Usage|Messagebox template usage}} * {{Link|mailto:support@example.com|support e-mail}}

|example8= <nowiki/> <nowiki>* {{Link|Category:Arma 3}}</nowiki><br> <nowiki>* {{Link|Category:Arma 3}}</nowiki><br> <nowiki>* {{Link|link= Category:Arma 3}}</nowiki><br> <nowiki>* {{Link|link= :Category:Arma 3}}</nowiki><br> <nowiki>* {{Link|link= Category:Arma 3 |text=}}</nowiki><br> <nowiki>* {{Link|link= :Category:Arma 3 |text=}}</nowiki><br> <nowiki>* {{Link|link= Category:Arma 3 |text= A3's category}}</nowiki><br> <nowiki>* {{Link|link= :Category:Arma 3 |text= A3's category}}</nowiki> |result8= <nowiki/> * {{Link|Category:Arma 3}} * {{Link|Category:Arma 3}} * {{Link|link= Category:Arma 3}} * {{Link|link= :Category:Arma 3}} * {{Link|link= Category:Arma 3 |text=}} * {{Link|link= :Category:Arma 3 |text=}} * {{Link|link= Category:Arma 3 |text= A3's category}} * {{Link|link= :Category:Arma 3 |text= A3's category}} }}</noinclude>
42k05u2a7kcse4316r1iytt7f5x0d3w

# Template:Link/External

10
29480
376871
373069
2025-12-10T22:33:44Z
Lou Montana
10739
Add armareforger:// and steam:// protocols
376871
wikitext
text/x-wiki
<includeonly>{{#if: {{{link|}}} | {{#switch:1

<!-- protocols -->

<!-- enfusion:// - must be above enfusionengine.com --> |{{#if: {{#pos:{{{link}}}|enfusion://}} |1|0}}= <span class="enfusion">{{#ifeq:{{#sub:{{{link}}}|0|43}}|https://enfusionengine.com/api/redirect?to=<!-- do NOT use redirects, just raw links --> | {{#if: {{{text|}}} | [{{#replace:{{#sub:{{{link}}}|43}}| |_}} {{{text}}}] | [{{#replace:{{#sub:{{{link}}}|43}}| |_}} {{#explode:{{{link}}}|/|-1}}] }} -redirect link provided-{{TemplateCase||[[Category:Link template usage error]]}} | {{#if: {{{text|}}} | [{{#replace:{{{link}}}| |_}} {{{text}}}] | [{{#replace:{{{link}}}| |_}} {{#explode:{{{link}}}|/|-1}}] }} }}</span>

<!-- armareforger:// --> |{{#if: {{#pos:{{{link}}}|armareforger://}} |1|0}}= <span class="armar">{{#if: {{{text|}}} | [{{#replace:{{{link}}}| |_}} {{{text}}}] | [{{#replace:{{{link}}}| |_}} {{#explode:{{{link}}}|/|-1}}] }}</span>

<!-- steam:// --> |{{#if: {{#pos:{{{link}}}|steam://}} |1|0}}= <span class="steam">{{#if: {{{text|}}} | [{{{link}}} {{{text}}}] | {{{link}}} }}</span>

<!-- domains -->

<!-- Bohemia Interactive --> <!-- must be below Enfusion in case of enfusionengine.com redirection --> |{{#if: {{#pos:{{{link}}}|bistudio.com}} {{#pos:{{{link}}}|bohemia.net}} {{#pos:{{{link}}}|arma2.com}} {{#pos:{{{link}}}|arma3.com}} {{#pos:{{{link}}}|armareforger.com}} {{#pos:{{{link}}}|arma4.com}} {{#pos:{{{link}}}|armaplatform.com}} {{#pos:{{{link}}}|enfusionengine.com}} {{#pos:{{{link}}}|dayz.com}} {{#pos:{{{link}}}|takeonthegame.com}} {{#pos:{{{link}}}|silicagame.com}} {{#pos:{{{link}}}|vigorgame.com}} |1|0}}= <span class="bohemia">[{{{link}}} {{{text|{{{link}}}}}}]</span>

<!-- web.archive.org --> |{{#if: {{#pos:{{{link}}}|web.archive.org}} |1|0}}= <span title="web.archive.org backup">{{#if: {{{text|}}} | [{{#replace:{{{link}}}| |_}} {{{text}}}] | {{#replace:{{{link}}}| |_}} }} <sub style="font-size: .8em">(archive)</sub></span>

<!-- Wikipedia / Wiktionary --> |{{#if: {{#pos:{{{link}}}|wikipedia.org}} |1|0}}= <span class="wikipedia" title="{{#if:{{#explode:{{{link}}}|/wiki/|1}}|Read the '{{#replace:{{#explode:{{{link}}}|/wiki/|1}}|_|&nbsp;}}' Wikipedia article|Access Wikipedia}}">[{{{link}}} {{#if:{{{text|}}}|{{{text}}}|{{#if:{{#explode:{{{link}}}|/wiki/|1}}|{{#replace:{{#explode:{{{link}}}|/wiki/|1}}|_|&#32;}}|{{{link}}}}}}}]</span> |{{#if: {{#pos:{{{link}}}|wiktionary.org}} |1|0}}= <span class="wikipedia" title="{{#if:{{#explode:{{{link}}}|/wiki/|1}}|Read the '{{#replace:{{#explode:{{{link}}}|/wiki/|1}}|_|&nbsp;}}' Wiktionary article|Access the Wiktionary}}">[{{{link}}} {{#if:{{{text|}}}|{{{text}}}|{{#if:{{#explode:{{{link}}}|/wiki/|1}}|{{#replace:{{#explode:{{{link}}}|/wiki/|1}}|_|&#32;}}|{{{link}}}}}}}]</span>

<!-- Steam --> |{{#if: {{#pos:{{{link}}}|steampowered.com}} {{#pos:{{{link}}}|steamcommunity.com}} {{#pos:{{{link}}}|steamgames.com}} {{#pos:{{{link}}}|steamstatic.com}} |1|0}}= <span class="steam" title="{{#if:{{#pos:{{{link}}}|steamcommunity.com}}|Steam Community file|Steam link}}">[{{{link}}} {{#if:{{{text|}}}|{{{text}}}|{{#if:{{#explode:{{{link}}}|/filedetails/|1}}|Steam File {{#replace:{{#explode:{{{link}}}|/filedetails/|1}}|?id=}}|{{{link}}}}}}}]</span>

<!-- Discord --> |{{#if: {{#pos:{{{link}}}|discord.gg}} {{#pos:{{{link}}}|discord.com}} |1|0}}= <span class="discord" title="Discord link">[{{{link}}} {{{text|{{{link}}}}}}]</span>

<!-- Facebook --> |{{#if: {{#pos:{{{link}}}|facebook.com}} |1|0}}= <span class="facebook" title="Facebook link">[{{{link}}} {{{text|{{{link}}}}}}]</span>

<!-- Twitter / X --> |{{#if: {{#pos:{{{link}}}|.x.com}} {{#pos:{{{link}}}|/x.com}} {{#pos:{{{link}}}|.twitter.com}} {{#pos:{{{link}}}|/twitter.com}} |1|0}}= <span class="twitter-x" title="Twitter/X link">[{{{link}}} {{{text|{{{link}}}}}}]</span>

<!-- YouTube --> |{{#if: {{#pos:{{{link}}}|youtu.be}} {{#pos:{{{link}}}|youtube.com}} |1|0}}= <span class="youtube">[{{{link}}} {{{text|{{{link}}}}}}]</span>

<!-- ofp.info fallback --> |{{#if: {{#pos:{{{link}}}|ofp.gamepark.cz}} {{#pos:{{{link}}}|ofp.gamepark.eu}} {{#pos:{{{link}}}|ofp.gamezone.cz}} {{#pos:{{{link}}}|ofp.info}} {{#pos:{{{link}}}|ofpr.info/ofpd/}} {{#pos:{{{link}}}|ftp://ofpr.info}} {{#pos:{{{link}}}|ftp://ftp.ofpr.info}} {{#pos:{{{link}}}|ftp://www.ofpr.info}} |1|0}}= <span class="ofp-faguss-link" title="Old link: {{{link}}}">[https://ofp-faguss.com/addonsearch.php?searchfor={{URLENCODE:{{{link}}}}} {{#if:{{{text|}}}|{{{text}}}|ofpr.info link}}]</span> <span class="ofp-faguss-info">link courtesy of<br>[https://ofp-faguss.com/ OFP-Faguss.com]</span>

<!-- AAN Online fallback - Kudos to Karel for it --> |{{#if: {{#pos:{{{link}}}|aan.moricky.com}} |1|0}}= <span class="aan-online" title="AAN Online article - courtesy of Karel Mořický">[{{{link}}} {{{text|{{{link}}}}}}]</span> |{{#if: {{#pos:{{{link}}}|aan-online.com}} |1|0}}= <span class="aan-online" title="AAN Online article - courtesy of Karel Mořický">[{{#replace:{{#replace:{{{link}}}|www.aan-online.com|aan.moricky.com}}|aan-online.com|aan.moricky.com}} {{{text|{{{link}}}}}}]</span>

<!-- drives --> |{{#if: {{#pos:{{{link}}}|drive.google.com}} |1|0}}= <span class="googledrive">[{{{link}}} {{{text|{{{link}}}}}}]</span>

|{{#if: {{#pos:{{{link}}}|onedrive.live.com}} {{#pos:{{{link}}}|1drv.ms/}} |1|0}}= <span class="onedrive">[{{{link}}} {{{text|{{{link}}}}}}]</span>

<!-- dead links --> |{{#if: {{#pos:{{{link}}}|6thsense.eu}} {{#pos:{{{link}}}|acemod.net}} {{#pos:{{{link}}}|armaholic.com}} {{#pos:{{{link}}}|armaholic.eu}} {{#pos:{{{link}}}|armedassault.com}} {{#pos:{{{link}}}|bohemiainteractive.com}} {{#pos:{{{link}}}|dev-heaven.net}} {{#pos:{{{link}}}|dyndns.org}} {{#pos:{{{link}}}|flashpoint1985.com}} {{#pos:{{{link}}}|pastebin.jonasscholz.de}} {{#pos:{{{link}}}|sprocketidea.com}} {{#pos:{{{link}}}|withsix.com}} |1|0}}= <span title="Old link: {{{link}}}">{{#if:{{{text|}}}|''{{{text}}}'' <sub style="font-size: .8em">(dead link)</sub>|''-dead link-''}}</span>

<!-- default link --> <!-- community.bistudio.com/wiki/ community.bohemia.net/wiki/ = add to [[:Category:Link template usage error]] --> |#default= {{#if: {{{text|}}} | [{{#replace:{{{link}}}| |_}} {{{text}}}] | {{#replace:{{{link}}}| |_}} }}{{#if: {{#pos:{{{link}}}|community.bistudio.com/wiki/}} {{#pos:{{{link}}}|community.bohemia.net/wiki/}} | <sub style="font-size: .66em">''[[:Category:Link template usage error|BIKI]]''</sub>{{TemplateCase||[[Category:Link template usage error]]}} }} }} | -no link provided{{#if:{{{text|}}}|<nowiki/> for {{{text}}}}}-{{TemplateCase||[[Category:Link template usage error]]}} }}</includeonly><noinclude>{{Doc/Template |descr= External link template allows external URLs filter/styliser depending on the domain name. It also replaces spaces in links by underscores. It adds the page to [[:Category:Link template usage error|Link template usage error]] category in case of improper formatting or BIKI link.

{{{!}} class="wikitable valign-top" ! Filtered ! Redirected ! Decorated {{!}}- {{!}} * 6thsense.eu * acemod.net * armaholic.com * armaholic.eu * armedassault.com * bohemiainteractive.com * dev-heaven.net * dyndns.org * flashpoint1985.com * pastebin.jonasscholz.de * sprocketidea.com * withsix.com {{!}} * aan-online.com (aan.moricky.com) * ofp.gamepark.cz * ofp.gamepark.eu * ofp.gamezone.cz * ofp.info * ofpr.info FTP links ({{hl|ftp:<nowiki/>//ofpr.info}}, {{hl|ftp:<nowiki/>//ftp.ofpr.info}}, {{hl|ofpr.info/ofpd}}) {{Feature|informative| [http://ofpr.info ofpr.info] domain itself is valid and points to http://ofpr.info.paradoxstudio.uk.<br> ofp.gamepark.cz &rarr; ofp.info redirections are possible thanks to [https://ofp-faguss.com OFP-Faguss.com]! }} {{!}} * bistudio.com / bohemia.net / arma2.com / arma3.com / armareforger.com / arma4.com / armaplatform.com / enfusionengine.com / dayz.com / takeonthegame.com / silicagame.com / vigorgame.com * {{hl|enfusion://}}, {{hl|steam://}} and {{hl|armareforger://}} links * steampowered.com / steamcommunity.com / steamgames.com / steamstatic.com * discord.com / discord.gg * wikipedia.org / wiktionary.org * web.archive.org * youtube.com / youtu.be * facebook.com * twitter.com / x.com * drive.google.com * onedrive.live.com / 1drv.ms {{!}}} |param1= link= |descr1= (named parameter) the URL |param2= text= |descr2= (Optional, named parameter) the link's text

|example1= <nowiki>{{Link/External}}</nowiki> |result1= {{Link/External}}

|example2= <nowiki>{{Link/External|link= https://www.bohemia.net}}</nowiki> |result2= {{Link/External|link= https://www.bohemia.net}}

|example3= <nowiki>{{Link/External|text= {{Name|bi}} website}}</nowiki> |result3= {{Link/External|text= {{Name|bi}} website}}

|example4= <nowiki/> <nowiki>* {{Link/External|link= https://www.bohemia.net|text= {{Name|bi}} website}}</nowiki><br> <nowiki>* {{Link/External|link= https://community.bistudio.com/wiki/setDir|text= setDir}}</nowiki><br> <nowiki>* {{Link/External|link= https://community.bohemia.net/wiki/setDir|text= setDir}}</nowiki> |result4= <nowiki/> * {{Link/External|link= https://www.bohemia.net|text= {{Name|bi}} website}} * {{Link/External|link= https://community.bistudio.com/wiki/setDir|text= setDir}} * {{Link/External|link= https://community.bohemia.net/wiki/setDir|text= setDir}}

<!-- dead websites --> |example5= <nowiki/> <nowiki>* {{Link/External|link= https://www.6thsense.eu}}</nowiki><br> <nowiki>* {{Link/External|link= https://www.acemod.net}}</nowiki><br> <nowiki>* {{Link/External|link= https://www.armaholic.com}}</nowiki><br> <nowiki>** {{Link/External|link= https://www.armaholic.com/page.php?id=1}}</nowiki><br> <nowiki>** {{Link/External|link= https://www.armaholic.com/page.php?id=1|text= My {{arma1}} mod}}</nowiki><br> <nowiki>* {{Link/External|link= https://www.armaholic.eu}}</nowiki><br> <nowiki>* {{Link/External|link= https://www.armedassault.com}}</nowiki><br> <nowiki>** {{Link/External|link= http://www.armedassault.com/william/|text= William Porter's Blog}}</nowiki><br> <nowiki>* {{Link/External|link= http://www.bohemiainteractive.com}}</nowiki><br> <nowiki>* {{Link/External|link= https://dev-heaven.net}}</nowiki><br> <nowiki>* {{Link/External|link= https://mywebsite.dyndns.org}}</nowiki><br> <nowiki>* {{Link/External|link= https://www.flashpoint1985.com}}</nowiki><br> <nowiki>* {{Link/External|link= https://pastebin.jonasscholz.de}}</nowiki><br> <nowiki>* {{Link/External|link= https://www.sprocketidea.com}}</nowiki><br> <nowiki>* {{Link/External|link= https://www.withsix.com}}</nowiki><br> <nowiki>** {{Link/External|link= https://dev.withsix.com}}</nowiki><br> |result5= <nowiki/> * {{Link/External|link= https://www.6thsense.eu}} * {{Link/External|link= https://www.acemod.net}} * {{Link/External|link= https://www.armaholic.com}} ** {{Link/External|link= https://www.armaholic.com/page.php?id=1}} ** {{Link/External|link= https://www.armaholic.com/page.php?id=1|text= My {{arma1}} mod}} * {{Link/External|link= https://www.armaholic.eu}} * {{Link/External|link= https://www.armedassault.com}} ** {{Link/External|link= http://www.armedassault.com/william/|text= William Porter's Blog}} * {{Link/External|link= http://www.bohemiainteractive.com}} * {{Link/External|link= https://dev-heaven.net}} * {{Link/External|link= https://mywebsite.dyndns.org}} * {{Link/External|link= https://www.flashpoint1985.com}} * {{Link/External|link= https://pastebin.jonasscholz.de}} * {{Link/External|link= https://www.sprocketidea.com}} * {{Link/External|link= https://www.withsix.com}} ** {{Link/External|link= https://dev.withsix.com}}

<!-- redirected websites --> |example6= <nowiki/> <nowiki>* {{Link/External|link= http://ofp.gamepark.cz/index.php?showthis=2302}}</nowiki><br> <nowiki>* {{Link/External|link= http://ofp.gamepark.cz/index.php?showthis=2302|text= Screen shot of the week 21}}</nowiki><br> <nowiki>* {{Link/External|link= http://ofpr.info}}</nowiki><br> <nowiki>* {{Link/External|link= ftp://ofpr.info}}</nowiki><br> <nowiki>* {{Link/External|link= http://www.aan-online.com/en/europe/29-black-element-rebrand-corporate-image.html}}</nowiki><br> <nowiki>** {{Link/External|link= http://www.aan-online.com/en/europe/29-black-element-rebrand-corporate-image.html|text= AAN Online explanation article}}</nowiki> <nowiki>* {{Link/External|link= http://www.aan.moricky.com/en/europe/29-black-element-rebrand-corporate-image.html}}</nowiki><br> <nowiki>** {{Link/External|link= http://www.aan.moricky.com/en/europe/29-black-element-rebrand-corporate-image.html|text= AAN Online explanation article}}</nowiki> |result6= <nowiki/> * {{Link/External|link= http://ofp.gamepark.cz/index.php?showthis=2302}} * {{Link/External|link= http://ofp.gamepark.cz/index.php?showthis=2302|text= Screen shot of the week 21}} * {{Link/External|link= http://ofpr.info}} * {{Link/External|link= ftp://ofpr.info}} * {{Link/External|link= http://www.aan-online.com/en/europe/29-black-element-rebrand-corporate-image.html}} ** {{Link/External|link= http://www.aan-online.com/en/europe/29-black-element-rebrand-corporate-image.html|text= AAN Online explanation article}} * {{Link/External|link= http://www.aan.moricky.com/en/europe/29-black-element-rebrand-corporate-image.html}} ** {{Link/External|link= http://www.aan.moricky.com/en/europe/29-black-element-rebrand-corporate-image.html|text= AAN Online explanation article}}

<!-- marked websites --> |example7= <nowiki/> <nowiki>* {{Link/External|link= https://bistudio.com}}</nowiki><br> <nowiki>** {{Link/External|link= https://bohemia.net}}</nowiki><br> <nowiki>** {{Link/External|link= https://arma2.com}}</nowiki><br> <nowiki>** {{Link/External|link= https://arma3.com}}</nowiki><br> <nowiki>** {{Link/External|link= https://armareforger.com}}</nowiki><br> <nowiki>** {{Link/External|link= https://arma4.com}}</nowiki><br> <nowiki>** {{Link/External|link= https://armaplatform.com}}</nowiki><br> <nowiki>** {{Link/External|link= https://enfusionengine.com}}</nowiki><br> <nowiki>** {{Link/External|link= https://dayz.com}}</nowiki><br> <nowiki>** {{Link/External|link= https://takeonthegame.com}}</nowiki><br> <nowiki>** {{Link/External|link= https://silicagame.com}}</nowiki><br> <nowiki>** {{Link/External|link= https://vigorgame.com}}</nowiki><br> <nowiki>* {{Link/External|link= enfusion://ScriptEditor/scripts/Game/generated/EPlayerRole.c;13|text= EPlayerRole}}</nowiki><br> <nowiki>** {{Link/External|link= enfusion://ScriptEditor/scripts/Game/generated/EPlayerRole.c;13}}</nowiki><br> <nowiki>** {{Link/External|link= https://enfusionengine.com/api/redirect?to=enfusion://ScriptEditor/scripts/Game/generated/EPlayerRole.c;13|text= EPlayerRole}}</nowiki><br> <nowiki>** {{Link/External|link= enfusion://ResourceManager/~ArmaReforger:UI/layouts/Menus/MainMenu/MainMenu.layout}}</nowiki><br> <nowiki>* {{Link/External|link= https://en.wikipedia.org/}}</nowiki><br> <nowiki>** {{Link/External|link= https://en.wikipedia.org/|text= An article}}</nowiki><br> <nowiki>** {{Link/External|link= https://en.wikipedia.org/Arma_2}}</nowiki><br> <nowiki>** {{Link/External|link= https://en.wikipedia.org/Arma_2|text= an {{arma2}} article}}</nowiki><br> <nowiki>* {{Link/External|link= https://en.wiktionary.org/}}</nowiki><br> <nowiki>** {{Link/External|link= https://en.wiktionary.org/wiki/arma}}</nowiki><br> <nowiki>* {{Link/External|link= https://steampowered.com/}}</nowiki><br> <nowiki>** {{Link/External|link= https://steamcommunity.com/sharedfiles/filedetails/2206040060}}</nowiki><br> <nowiki>** {{Link/External|link= https://steamcommunity.com/sharedfiles/filedetails/?id=2206040060}}</nowiki><br> <nowiki>** {{Link/External|link= https://partner.steamgames.com/doc/store/application/dlc}}</nowiki><br> <nowiki>** {{Link/External|link= http://cdn.akamai.steamstatic.com/steam/apps/107410/manuals/Arma_3_keylayout_ENG.pdf|text= {{arma3}} keyboard layout}}</nowiki><br> <nowiki>* {{Link/External|link= http://web.archive.org/web/20080401075137/http://www.armedassault.com/william/|text= William Porter's Blog}}</nowiki><br> <nowiki>* {{Link/External|link= https://discord.com/}}</nowiki><br> <nowiki>* {{Link/External|link= https://discord.com/invite/arma|Arma Discord Server}}</nowiki><br> <nowiki>* {{Link/External|link= https://facebook.com/}}</nowiki><br> <nowiki>* {{Link/External|link= https://www.facebook.com/armaplatform}}</nowiki><br> <nowiki>* {{Link/External|link= https://x.com/}}</nowiki><br> <nowiki>* {{Link/External|link= https://twitter.com/}}</nowiki><br> <nowiki>* {{Link/External|link= https://twitter.com/ArmaPlatform}}</nowiki><br> <nowiki>* {{Link/External|link= https://youtube.com/}}</nowiki><br> <nowiki>* {{Link/External|link= https://youtu.be/|text= Short YouTube link}}</nowiki><br> |result7= <nowiki/> * {{Link/External|link= https://bistudio.com}} ** {{Link/External|link= https://bohemia.net}} ** {{Link/External|link= https://arma2.com}} ** {{Link/External|link= https://arma3.com}} ** {{Link/External|link= https://armareforger.com}} ** {{Link/External|link= https://arma4.com}} ** {{Link/External|link= https://armaplatform.com}} ** {{Link/External|link= https://enfusionengine.com}} ** {{Link/External|link= https://dayz.com}} ** {{Link/External|link= https://takeonthegame.com}} ** {{Link/External|link= https://silicagame.com}} ** {{Link/External|link= https://vigorgame.com}} * {{Link/External|link= enfusion://ScriptEditor/scripts/Game/generated/EPlayerRole.c;13|text= EPlayerRole}} ** {{Link/External|link= enfusion://ScriptEditor/scripts/Game/generated/EPlayerRole.c;13}} ** {{Link/External|link= https://enfusionengine.com/api/redirect?to=enfusion://ScriptEditor/scripts/Game/generated/EPlayerRole.c;13|text= EPlayerRole}} ** {{Link/External|link= enfusion://ResourceManager/~ArmaReforger:UI/layouts/Menus/MainMenu/MainMenu.layout}} * {{Link/External|link= https://en.wikipedia.org/}} ** {{Link/External|link= https://en.wikipedia.org/|text= An article}} ** {{Link/External|link= https://en.wikipedia.org/wiki/Arma_2}} ** {{Link/External|link= https://en.wikipedia.org/wiki/Arma_2|text= an {{arma2}} article}} * {{Link/External|link= https://en.wiktionary.org/}} ** {{Link/External|link= https://en.wiktionary.org/wiki/arma}} * {{Link/External|link= https://steampowered.com/}} ** {{Link/External|link= https://steamcommunity.com/sharedfiles/filedetails/2206040060}} ** {{Link/External|link= https://steamcommunity.com/sharedfiles/filedetails/?id=2206040060}} ** {{Link/External|link= https://partner.steamgames.com/doc/store/application/dlc}} ** {{Link/External|link= http://cdn.akamai.steamstatic.com/steam/apps/107410/manuals/Arma_3_keylayout_ENG.pdf|text= {{arma3}} keyboard layout}} * {{Link/External|link= http://web.archive.org/web/20080401075137/http://www.armedassault.com/william/|text= William Porter's Blog}} * {{Link/External|link= https://discord.com/}} * {{Link/External|link= https://discord.com/invite/arma|text= Arma Discord Server}} * {{Link/External|link= https://www.facebook.com}} * {{Link/External|link= https://www.facebook.com/armaplatform}} * {{Link/External|link= https://x.com/}} * {{Link/External|link= https://twitter.com/}} * {{Link/External|link= https://twitter.com/ArmaPlatform}} * {{Link/External|link= https://www.twitter.com/}} * {{Link/External|link= https://youtube.com/}} * {{Link/External|link= https://youtu.be/|text= Short YouTube link}}

|example8= <nowiki/> <nowiki>* {{Link/External|link= https://drive.google.com}}</nowiki><br> <nowiki>* {{Link/External|link= https://drive.google.com|text= GDrive}}</nowiki><br> <nowiki>* {{Link/External|link= https://onedrive.live.com}}</nowiki><br> <nowiki>* {{Link/External|link= https://1drv.ms/}}</nowiki><br> <nowiki>* {{Link/External|link= https://onedrive.live.com|text= OneDrive}}</nowiki><br> |result8= <nowiki/> * {{Link/External|link= https://drive.google.com}} * {{Link/External|link= https://drive.google.com|text= GDrive}} * {{Link/External|link= https://onedrive.live.com}} * {{Link/External|link= https://1drv.ms/}} * {{Link/External|link= https://onedrive.live.com|text= OneDrive}}

<!-- protocols --> |example9= <nowiki/> <nowiki>* {{Link|steam://}}</nowiki><br> <nowiki>* {{Link|steam://install/1890860}}</nowiki><br> <nowiki>* {{Link|steam://install/1890860|install on Steam}}</nowiki><br> <nowiki>* {{Link|enfusion://}}</nowiki><br> <nowiki>* {{Link|enfusion://aaa/bbb/ccc.et}}</nowiki><br> <nowiki>* {{Link|enfusion://aaa/bbb/ccc.et|something.et}}</nowiki><br> <nowiki>* {{Link|armareforger://}}</nowiki><br> <nowiki>* {{Link|armareforger://aaa/bbb/ccc.c}}</nowiki><br> <nowiki>* {{Link|armareforger://aaa/bbb/ccc.c|something something}}</nowiki> |result9= * {{Link|steam://}} * {{Link|steam://install/1890860}} * {{Link|steam://install/1890860|install on Steam}} * {{Link|enfusion://}} * {{Link|enfusion://aaa/bbb/ccc.et}} * {{Link|enfusion://aaa/bbb/ccc.et|something.et}} * {{Link|armareforger://}} * {{Link|armareforger://aaa/bbb/ccc.c}} * {{Link|armareforger://aaa/bbb/ccc.c|something something}} }}</noinclude>
dtetngc2jmoyaure0wyzrm0tz8zdrfy

# Template:Name

10
15140
373000
363678
2025-03-11T14:56:21Z
Lou Montana
10739
Add Arma 2: Combined Operations
373000
wikitext
text/x-wiki
<includeonly>{{#switch:{{#replace:{{#replace:{{#replace:{{#replace:{{lc:{{{1}}}}}| |}}|:|}}|/|}}|-|}} <!--

COMPANIES

--> |bi |bohemiainteractive={{#switch:{{lc:{{{2}}}}} |id=bi |img=bi |short=BI |cat=Bohemia Interactive |com=Bohemia Interactive a.s |#default=Bohemia Interactive}} <!--

SERIES (namespace)

--> |arma |armaseries= Arma <!--

ENGINES

--> |rv |realvirtuality={{#switch:{{lc:{{{2}}}}} |id=realvirtuality |img=rv |short=RV |cat=Real Virtuality |com=Real Virtuality Engine |#default=Real Virtuality}} |enfusion={{#switch:{{lc:{{{2}}}}} |id=enfusion |img=enfusion |short=Enf. |cat=Enfusion |com=Enfusion Engine |#default=Enfusion}} <!--

PRODUCTS

Missing: Operation Flashpoint: Gold Edition Operation Flashpoint: GOTY Edition Arma 2: Firing Range Arma 2: Free Arma 2: Combined Operations Arma 2: Reinforcements Arma Tactics --> <!-- OPERATION FLASHPOINT: COLD WAR CRISIS --> |ofp={{#switch:{{lc:{{{2}}}}} |id=ofp |img=ofp |short=OFP |cat=Operation Flashpoint |com=Operation Flashpoint: Cold War Crisis |#default=Operation Flashpoint}}<!-- no "Cold War Crisis" --> <!-- ARMA: COLD WAR ASSAULT (OFP v1.99) --> |arma0={{#switch:{{lc:{{{2}}}}} |id=ofp |img=ofp |short=Arma:CWA |cat=Operation Flashpoint |com |#default=Arma: Cold War Assault}} <!-- OPERATION FLASHPOINT: RED HAMMER --> |ofprh |arma0rh |ofpredhammer={{#switch:{{lc:{{{2}}}}} |id=ofprh |img=ofprh |short=OFP:RH |cat=Operation Flashpoint |com |#default=Operation Flashpoint: Red Hammer}} <!-- OPERATION FLASHPOINT: RESISTANCE --> |ofpr |arma0r={{#switch:{{lc:{{{2}}}}} |id=ofpr |img=ofpr |short=OFP:R |cat |com |#default=Operation Flashpoint: Resistance}} <!-- OPERATION FLASHPOINT: ELITE --> |ofpe={{#switch:{{lc:{{{2}}}}} |id=ofpe |img=ofpe |short=OFP:E |cat=Operation Flashpoint: Elite |com |#default=Operation Flashpoint: Elite}} <!-- ARMA: ARMED ASSAULT --> |arma1={{#switch:{{lc:{{{2}}}}} |id=arma1 |img=arma |short=ArmA |cat |com=ArmA: Armed Assault |#default=Armed Assault}} <!-- ARMA: COMBAT OPERATIONS --> |arma1co={{#switch:{{lc:{{{2}}}}} |id=arma1co |img=arma |short=ArmA:CO |cat=Arma 1 |com |#default=ArmA: Combat Operations}} <!-- ARMA: QUEEN'S GAMBIT --> |arma1qg={{#switch:{{lc:{{{2}}}}} |id=armaqg |img=armaqg |short=Arma:QG |cat |com |#default=ArmA: Queen's Gambit}} <!-- ARMA 2 --> |arma2={{#switch:{{lc:{{{2}}}}} |id=arma2 |img=arma2 |short |cat |com |#default=Arma 2}} <!-- ARMA 2: OPERATION ARROWHEAD --> |arma2oa={{#switch:{{lc:{{{2}}}}} |id=arma2oa |img=arma2oa |short=Arma 2:OA |cat |com |#default=Arma 2: Operation Arrowhead}} <!-- ARMA 2: BRITISH ARMED FORCES --> |arma2baf={{#switch:{{lc:{{{2}}}}} |id=arma2baf |img=arma2baf |short=Arma 2:BAF |cat=Arma 2: Operation Arrowhead |com |#default=Arma 2: British Armed Forces}} <!-- ARMA2: PRIVATE MILITARY COMPANY --> |arma2pmc={{#switch:{{lc:{{{2}}}}} |id=arma2pmc |img=arma2pmc |short=Arma 2:PMC |cat=Arma 2: Operation Arrowhead |com |#default=Arma 2: Private Military Company}} <!-- ARMA2: ARMY OF CZECH REPUBLIC --> |arma2acr={{#switch:{{lc:{{{2}}}}} |id=arma2acr |img=arma2acr |short=Arma 2:ACR |cat=Arma 2 |com |#default=Arma 2: Army of the Czech Republic}} <!-- ARMA2: COMBINED OPERATIONS --> |arma2co={{#switch:{{lc:{{{2}}}}} |id=arma2co |img=arma2co |short=Arma 2:CO |cat=Arma 2 |com |#default=Arma 2: Combined Operations}} <!-- ARMA 3 --> |arma3={{#switch:{{lc:{{{2}}}}} |id=arma3 |img=arma3 |short |cat |com |#default=Arma 3}} <!-- ARMA 3 ZEUS --> |arma3zeus={{#switch:{{lc:{{{2}}}}} |id=arma3zeus |img=arma3zeus |short=Zeus |cat=Arma 3 |com |#default=Arma 3 Zeus}} <!-- ARMA 3 KARTS --> |arma3karts={{#switch:{{lc:{{{2}}}}} |id=arma3karts |img=arma3karts |short=Karts |cat=Arma 3 |com |#default=Arma 3 Karts}} <!-- ARMA 3 HELICOPTERS --> |arma3heli |arma3helicopters={{#switch:{{lc:{{{2}}}}} |id=arma3helicopters |img=arma3helicopters |short=Helicopters |cat=Arma 3 |com |#default=Arma 3 Helicopters}} <!-- ARMA 3 MARKSMEN --> |arma3mark |arma3marksmen={{#switch:{{lc:{{{2}}}}} |id=arma3marksmen |img=arma3marksmen |short=Marksmen |cat=Arma 3 |com |#default=Arma 3 Marksmen}} <!-- ARMA 3 APEX --> |arma3apex |arma3expansion={{#switch:{{lc:{{{2}}}}} |id=arma3apex |img=arma3apex |short=Apex |cat=Arma 3 |com |#default=Arma 3 Apex}} <!-- ARMA 3 JETS --> |arma3jets={{#switch:{{lc:{{{2}}}}} |id=arma3jets |img=arma3jets |short=Jets |cat=Arma 3 |com |#default=Arma 3 Jets}} <!-- ARMA 3 Malden --> |arma3malden={{#switch:{{lc:{{{2}}}}} |id=arma3malden |img=arma3malden |short=Malden |cat=Arma 3 |com |#default=Arma 3 Malden}} <!-- ARMA 3 LAWS OF WAR --> |arma3low |arma3lawsofwar={{#switch:{{lc:{{{2}}}}} |id=arma3lawsofwar |img=arma3low |short=Laws of War |cat=Arma 3 |com |#default=Arma 3 Laws of War}} <!-- ARMA 3 TAC-OPS --> |arma3tacops={{#switch:{{lc:{{{2}}}}} |id=arma3tacops |img=arma3tacops |short=Tac-Ops |cat=Arma 3 |com |#default=Arma 3 Tac-Ops Mission Pack}} <!-- ARMA 3 TANKS --> |arma3tanks={{#switch:{{lc:{{{2}}}}} |id=arma3tanks |img=arma3tanks |short=Tanks |cat=Arma 3 |com |#default=Arma 3 Tanks}} <!-- ARMA 3 CONTACT --> |arma3contact={{#switch:{{lc:{{{2}}}}} |id=arma3contact |img=arma3contact |short=Contact |cat=Arma 3 |com |#default=Arma 3 Contact}} <!-- ARMA 3 APEX: OLD MAN --> |arma3oldman={{#switch:{{lc:{{{2}}}}} |id=arma3oldman |img=arma3oldman |short=Old Man |cat=Arma 3 |com |#default=Arma 3 Apex: Old Man}} <!-- ARGO --> |argo={{#switch:{{lc:{{{2}}}}} |id=argo |img=argo |short |cat |com |#default=Argo}} <!-- ARMA REFORGER --> |armar={{#switch:{{lc:{{{2}}}}} |id=armar |img=armareforger |short=Reforger |cat |com |#default=Arma Reforger}} <!-- ARMA 4 --> |arma4={{#switch:{{lc:{{{2}}}}} |id=arma4 |img=arma4 |short |cat |com |#default=Arma 4}} <!-- DAYZ --> |dayz={{#switch:{{lc:{{{2}}}}} |id=dayz |img=dayz |short=DayZ |cat=DayZ |com |#default=DayZ}} <!-- TAKE ON HELICOPTERS --> |tkoh={{#switch:{{lc:{{{2}}}}} |id=tkoh |img=TKOH |short=TKOH |cat |com |#default=Take On Helicopters}} <!-- TAKE ON HELICOPTERS: HINDS --> |tkohh={{#switch:{{lc:{{{2}}}}} |id=tkohh |img=TKOHH |short=TKOHH |cat=Take On Helicopters |com |#default=Take On Helicopters: Hinds}} <!-- TAKE ON MARS --> |tkom={{#switch:{{lc:{{{2}}}}} |id=tkom |img=TKOM |short=TKOM |cat |com |#default=Take On Mars}} <!-- YLANDS --> |ylands={{#switch:{{lc:{{{2}}}}} |id=ylands |img=ylands |short |cat |com |#default=Ylands}} <!-- VIGOR --> |vigor={{#switch:{{lc:{{{2}}}}} |id=vigor |img=vigor |short |cat |com |#default=Vigor}} <!-- SILICA --> |silica={{#switch:{{lc:{{{2}}}}} |id=silica |img=silica |short |cat |com |#default=Silica}} <!-- CARRIER COMMAND --> |carriercommand={{#switch:{{lc:{{{2}}}}} |id=carriercommand |img=carriercommand |short=C. Command |cat |com=Carrier Command: Gaea Mission |#default=Carrier Command}} <!--

DEFAULT

--> |#default='''[[Bohemia Interactive Community:Guidelines#Format Guidelines|{{#if:{{{1|}}}|{{{1}}}|-no identifier defined-}}]]'''{{TemplateCase||[[Category:Name template usage error]]}}}}</includeonly><noinclude> {| class="wikitable" style="float: right; margin: 0 0 0.5em 1em" |+ Common ids/titles ! Id || Title |- | {{Name|bi|id}} || {{Name|bi}} |- | {{Name|arma1|id}} || {{Name|arma1}} |- | {{Name|arma2|id}} || {{Name|arma2}} |- | {{Name|arma2oa|id}} || {{Name|arma2oa}} |- | {{Name|arma3|id}} || {{Name|arma3}} |- | {{Name|armaR|id}} || {{Name|armaR}} |- | {{Name|arma4|id}} || {{Name|arma4}} |- | {{Name|tkoh|id}} || {{Name|tkoh}} |- | {{Name|tkom|id}} || {{Name|tkom}} |- | {{Name|dayz|id}} || {{Name|dayz}} |- | {{Name|ylands|id}} || {{Name|ylands}} |- | {{Name|vigor|id}} || {{Name|vigor}} |- | {{Name|silica|id}} || {{silica}} |} Provides a wiki-formatted game name/id.

== Usage == {{<nowiki/>Name|'''''identifier'''''|'''''format'''''}} * identifier: short "identifier", such as "bi", "ofpr", "arma3" etc. It is case-insensitive. * format: (Optional) can be one of: ** "id": wiki id ** "cat": wiki category name ** "com": commercial name (e.g "{{Name|ofp|com}}", "{{Name|bi|com}}") ** "img": wiki image link ** "short": short name (e.g BI for Bohemia Interactive). : Anything else or nothing will return the long version of the name. {{Feature|informative|if no matches are found for '''''identifier''''', the template will return the '''''identifier''''' string linked to [[Bohemia Interactive Community:Naming Conventions|Naming Conventions]] and add the page to [[:Category:Name template usage error]].}}

{{Clear}} {| class="wikitable" |+ Examples ! Code ! style="min-width: 18em" | Result ! Valid Identifiers |- | <nowiki>{{Name}}</nowiki> | {{Name}} | {{n/a}} |- | <nowiki>{{Name|}}</nowiki> | {{Name|}} | {{n/a}} |- | <nowiki>{{Name|1= }}</nowiki> | {{Name|1= }} | {{n/a}} |- | <nowiki>{{Name|unknown value}}</nowiki> | {{Name|unknown value}} | {{n/a}} |- ! colspan="3" |

Companies

|- | {{<nowiki/>Name|bi}}<br> {{<nowiki/>Name|bi|com}}<br> {{<nowiki/>Name|bi|id}}<br> {{<nowiki/>Name|bi|cat}}<br> {{<nowiki/>Name|bi|short}}<br> {{<nowiki/>Name|bi|img}}<br> | {{Name|bi}}<br> {{Name|bi|com}}<br> {{Name|bi|id}}<br> {{Name|bi|cat}}<br> {{Name|bi|short}}<br> {{Name|bi|img}}<br> | bi, bohemiainteractive

|- ! colspan="3" |

Engines

|- | {{<nowiki/>Name|rv}}<br> {{<nowiki/>Name|rv|com}}<br> {{<nowiki/>Name|rv|id}}<br> {{<nowiki/>Name|rv|cat}}<br> {{<nowiki/>Name|rv|short}}<br> {{<nowiki/>Name|rv|img}}<br> | {{Name|rv}}<br> {{Name|rv|com}}<br> {{Name|rv|id}}<br> {{Name|rv|cat}}<br> {{Name|rv|short}}<br> {{Name|rv|img}}<br> | rv, realvirtuality

|- | {{<nowiki/>Name|enfusion}}<br> {{<nowiki/>Name|enfusion|com}}<br> {{<nowiki/>Name|enfusion|id}}<br> {{<nowiki/>Name|enfusion|cat}}<br> {{<nowiki/>Name|enfusion|short}}<br> {{<nowiki/>Name|enfusion|img}}<br> | {{Name|enfusion}}<br> {{Name|enfusion|com}}<br> {{Name|enfusion|id}}<br> {{Name|enfusion|cat}}<br> {{Name|enfusion|short}}<br> {{Name|enfusion|img}}<br> | enfusion

|- ! colspan="3" |

Series

|- | {{<nowiki/>Name|arma}} | {{Name|arma}} | arma, armaseries |- ! colspan="3" |

Products

|- <!-- OPERATION FLASHPOINT: COLD WAR CRISIS --> | {{<nowiki/>Name|ofp}}<br> {{<nowiki/>Name|ofp|com}}<br> {{<nowiki/>Name|ofp|id}}<br> {{<nowiki/>Name|ofp|cat}}<br> {{<nowiki/>Name|ofp|short}}<br> {{<nowiki/>Name|ofp|img}}<br> | {{Name|ofp}}<br> {{Name|ofp|com}}<br> {{Name|ofp|id}}<br> {{Name|ofp|cat}}<br> {{Name|ofp|short}}<br> {{Name|ofp|img}}<br> | ofp |- <!-- ARMA: COLD WAR ASSAULT (OFP v1.99) --> | {{<nowiki/>Name|arma0}}<br> {{<nowiki/>Name|arma0|com}}<br> {{<nowiki/>Name|arma0|id}}<br> {{<nowiki/>Name|arma0|cat}}<br> {{<nowiki/>Name|arma0|short}}<br> {{<nowiki/>Name|arma0|img}}<br> | {{Name|arma0}}<br> {{Name|arma0|com}}<br> {{Name|arma0|id}}<br> {{Name|arma0|cat}}<br> {{Name|arma0|short}}<br> {{Name|arma0|img}}<br> | a0, arma0, armacwa |- <!-- OPERATION FLASHPOINT: RESISTANCE --> | {{<nowiki/>Name|ofpr}}<br> {{<nowiki/>Name|ofpr|com}}<br> {{<nowiki/>Name|ofpr|id}}<br> {{<nowiki/>Name|ofpr|cat}}<br> {{<nowiki/>Name|ofpr|short}}<br> {{<nowiki/>Name|ofpr|img}}<br> | {{Name|ofpr}}<br> {{Name|ofpr|com}}<br> {{Name|ofpr|id}}<br> {{Name|ofpr|cat}}<br> {{Name|ofpr|short}}<br> {{Name|ofpr|img}}<br> | ofpr, arma0r |- <!-- OPERATION FLASHPOINT: ELITE --> | {{<nowiki/>Name|ofpe}}<br> {{<nowiki/>Name|ofpe|com}}<br> {{<nowiki/>Name|ofpe|id}}<br> {{<nowiki/>Name|ofpe|cat}}<br> {{<nowiki/>Name|ofpe|short}}<br> {{<nowiki/>Name|ofpe|img}}<br> | {{Name|ofpe}}<br> {{Name|ofpe|com}}<br> {{Name|ofpe|id}}<br> {{Name|ofpe|cat}}<br> {{Name|ofpe|short}}<br> {{Name|ofpe|img}}<br> | ofpe |- <!-- ARMA: ARMED ASSAULT --> | {{<nowiki/>Name|arma1}}<br> {{<nowiki/>Name|arma1|com}}<br> {{<nowiki/>Name|arma1|id}}<br> {{<nowiki/>Name|arma1|cat}}<br> {{<nowiki/>Name|arma1|short}}<br> {{<nowiki/>Name|arma1|img}}<br> | {{Name|arma1}}<br> {{Name|arma1|com}}<br> {{Name|arma1|id}}<br> {{Name|arma1|cat}}<br> {{Name|arma1|short}}<br> {{Name|arma1|img}}<br> | arma1 |- <!-- ARMA: COMBAT OPERATIONS --> | {{<nowiki/>Name|arma1co}}<br> {{<nowiki/>Name|arma1co|com}}<br> {{<nowiki/>Name|arma1co|id}}<br> {{<nowiki/>Name|arma1co|cat}}<br> {{<nowiki/>Name|arma1co|short}}<br> {{<nowiki/>Name|arma1co|img}}<br> | {{Name|arma1co}}<br> {{Name|arma1co|com}}<br> {{Name|arma1co|id}}<br> {{Name|arma1co|cat}}<br> {{Name|arma1co|short}}<br> {{Name|arma1co|img}}<br> | arma1co |- <!-- ARMA: QUEEN'S GAMBIT --> | {{<nowiki/>Name|arma1qg}}<br> {{<nowiki/>Name|arma1qg|com}}<br> {{<nowiki/>Name|arma1qg|id}}<br> {{<nowiki/>Name|arma1qg|cat}}<br> {{<nowiki/>Name|arma1qg|short}}<br> {{<nowiki/>Name|arma1qg|img}}<br> | {{Name|arma1qg}}<br> {{Name|arma1qg|com}}<br> {{Name|arma1qg|id}}<br> {{Name|arma1qg|cat}}<br> {{Name|arma1qg|short}}<br> {{Name|arma1qg|img}}<br> | arma1qg |- <!-- ARMA 2 --> | {{<nowiki/>Name|arma2}}<br> {{<nowiki/>Name|arma2|com}}<br> {{<nowiki/>Name|arma2|id}}<br> {{<nowiki/>Name|arma2|cat}}<br> {{<nowiki/>Name|arma2|short}}<br> {{<nowiki/>Name|arma2|img}}<br> | {{Name|arma2}}<br> {{Name|arma2|com}}<br> {{Name|arma2|id}}<br> {{Name|arma2|cat}}<br> {{Name|arma2|short}}<br> {{Name|arma2|img}}<br> | arma2 |- <!-- ARMA 2: OPERATION ARROWHEAD --> | {{<nowiki/>Name|arma2oa}}<br> {{<nowiki/>Name|arma2oa|com}}<br> {{<nowiki/>Name|arma2oa|id}}<br> {{<nowiki/>Name|arma2oa|cat}}<br> {{<nowiki/>Name|arma2oa|short}}<br> {{<nowiki/>Name|arma2oa|img}}<br> | {{Name|arma2oa}}<br> {{Name|arma2oa|com}}<br> {{Name|arma2oa|id}}<br> {{Name|arma2oa|cat}}<br> {{Name|arma2oa|short}}<br> {{Name|arma2oa|img}}<br> | arma2oa |- <!-- ARMA 2: BRITISH ARMED FORCES --> | {{<nowiki/>Name|arma2baf}}<br> {{<nowiki/>Name|arma2baf|com}}<br> {{<nowiki/>Name|arma2baf|id}}<br> {{<nowiki/>Name|arma2baf|cat}}<br> {{<nowiki/>Name|arma2baf|short}}<br> {{<nowiki/>Name|arma2baf|img}}<br> | {{Name|arma2baf}}<br> {{Name|arma2baf|com}}<br> {{Name|arma2baf|id}}<br> {{Name|arma2baf|cat}}<br> {{Name|arma2baf|short}}<br> {{Name|arma2baf|img}}<br> | arma2baf |- <!-- ARMA2: PRIVATE MILITARY COMPANY --> | {{<nowiki/>Name|arma2pmc}}<br> {{<nowiki/>Name|arma2pmc|com}}<br> {{<nowiki/>Name|arma2pmc|id}}<br> {{<nowiki/>Name|arma2pmc|cat}}<br> {{<nowiki/>Name|arma2pmc|short}}<br> {{<nowiki/>Name|arma2pmc|img}}<br> | {{Name|arma2pmc}}<br> {{Name|arma2pmc|com}}<br> {{Name|arma2pmc|id}}<br> {{Name|arma2pmc|cat}}<br> {{Name|arma2pmc|short}}<br> {{Name|arma2pmc|img}}<br> | arma2pmc |- <!-- ARMA2: ARMY OF CZECH REPUBLIC --> | {{<nowiki/>Name|arma2acr}}<br> {{<nowiki/>Name|arma2acr|com}}<br> {{<nowiki/>Name|arma2acr|id}}<br> {{<nowiki/>Name|arma2acr|cat}}<br> {{<nowiki/>Name|arma2acr|short}}<br> {{<nowiki/>Name|arma2acr|img}}<br> | {{Name|arma2acr}}<br> {{Name|arma2acr|com}}<br> {{Name|arma2acr|id}}<br> {{Name|arma2acr|cat}}<br> {{Name|arma2acr|short}}<br> {{Name|arma2acr|img}}<br> | arma2acr |- <!-- ARMA2: COMBINED OPERATIONS --> | {{<nowiki/>Name|arma2co}}<br> {{<nowiki/>Name|arma2co|com}}<br> {{<nowiki/>Name|arma2co|id}}<br> {{<nowiki/>Name|arma2co|cat}}<br> {{<nowiki/>Name|arma2co|short}}<br> {{<nowiki/>Name|arma2co|img}}<br> | {{Name|arma2co}}<br> {{Name|arma2co|com}}<br> {{Name|arma2co|id}}<br> {{Name|arma2co|cat}}<br> {{Name|arma2co|short}}<br> {{Name|arma2co|img}}<br> | arma2co |- <!-- ARMA 3 --> | {{<nowiki/>Name|arma3}}<br> {{<nowiki/>Name|arma3|com}}<br> {{<nowiki/>Name|arma3|id}}<br> {{<nowiki/>Name|arma3|cat}}<br> {{<nowiki/>Name|arma3|short}}<br> {{<nowiki/>Name|arma3|img}}<br> | {{Name|arma3}}<br> {{Name|arma3|com}}<br> {{Name|arma3|id}}<br> {{Name|arma3|cat}}<br> {{Name|arma3|short}}<br> {{Name|arma3|img}}<br> | arma3 |- <!-- ARMA 3: ZEUS --> | {{<nowiki/>Name|arma3zeus}}<br> {{<nowiki/>Name|arma3zeus|com}}<br> {{<nowiki/>Name|arma3zeus|id}}<br> {{<nowiki/>Name|arma3zeus|cat}}<br> {{<nowiki/>Name|arma3zeus|short}}<br> {{<nowiki/>Name|arma3zeus|img}}<br> | {{Name|arma3zeus}}<br> {{Name|arma3zeus|com}}<br> {{Name|arma3zeus|id}}<br> {{Name|arma3zeus|cat}}<br> {{Name|arma3zeus|short}}<br> {{Name|arma3zeus|img}}<br> | arma3zeus |- <!-- ARMA 3: KARTS --> | {{<nowiki/>Name|arma3karts}}<br> {{<nowiki/>Name|arma3karts|com}}<br> {{<nowiki/>Name|arma3karts|id}}<br> {{<nowiki/>Name|arma3karts|cat}}<br> {{<nowiki/>Name|arma3karts|short}}<br> {{<nowiki/>Name|arma3karts|img}}<br> | {{Name|arma3karts}}<br> {{Name|arma3karts|com}}<br> {{Name|arma3karts|id}}<br> {{Name|arma3karts|cat}}<br> {{Name|arma3karts|short}}<br> {{Name|arma3karts|img}}<br> | arma3karts |- <!-- ARMA 3: HELICOPTERS --> | {{<nowiki/>Name|arma3helicopters}}<br> {{<nowiki/>Name|arma3helicopters|com}}<br> {{<nowiki/>Name|arma3helicopters|id}}<br> {{<nowiki/>Name|arma3helicopters|cat}}<br> {{<nowiki/>Name|arma3helicopters|short}}<br> {{<nowiki/>Name|arma3helicopters|img}}<br> | {{Name|arma3helicopters}}<br> {{Name|arma3helicopters|com}}<br> {{Name|arma3helicopters|id}}<br> {{Name|arma3helicopters|cat}}<br> {{Name|arma3helicopters|short}}<br> {{Name|arma3helicopters|img}}<br> | arma3heli, arma3helicopters |- <!-- ARMA 3: MARKSMEN --> | {{<nowiki/>Name|arma3marksmen}}<br> {{<nowiki/>Name|arma3marksmen|com}}<br> {{<nowiki/>Name|arma3marksmen|id}}<br> {{<nowiki/>Name|arma3marksmen|cat}}<br> {{<nowiki/>Name|arma3marksmen|short}}<br> {{<nowiki/>Name|arma3marksmen|img}}<br> | {{Name|arma3marksmen}}<br> {{Name|arma3marksmen|com}}<br> {{Name|arma3marksmen|id}}<br> {{Name|arma3marksmen|cat}}<br> {{Name|arma3marksmen|short}}<br> {{Name|arma3marksmen|img}}<br> | arma3mark, arma3marksmen |- <!-- ARMA 3 APEX --> | {{<nowiki/>Name|arma3apex}}<br> {{<nowiki/>Name|arma3apex|com}}<br> {{<nowiki/>Name|arma3apex|id}}<br> {{<nowiki/>Name|arma3apex|cat}}<br> {{<nowiki/>Name|arma3apex|short}}<br> {{<nowiki/>Name|arma3apex|img}}<br> | {{Name|arma3apex}}<br> {{Name|arma3apex|com}}<br> {{Name|arma3apex|id}}<br> {{Name|arma3apex|cat}}<br> {{Name|arma3apex|short}}<br> {{Name|arma3apex|img}}<br> | arma3apex, arma3expansion |- <!-- ARMA 3: JETS --> | {{<nowiki/>Name|arma3jets}}<br> {{<nowiki/>Name|arma3jets|com}}<br> {{<nowiki/>Name|arma3jets|id}}<br> {{<nowiki/>Name|arma3jets|cat}}<br> {{<nowiki/>Name|arma3jets|short}}<br> {{<nowiki/>Name|arma3jets|img}}<br> | {{Name|arma3jets}}<br> {{Name|arma3jets|com}}<br> {{Name|arma3jets|id}}<br> {{Name|arma3jets|cat}}<br> {{Name|arma3jets|short}}<br> {{Name|arma3jets|img}}<br> | arma3jets |- <!-- ARMA 3: MALDEN --> | {{<nowiki/>Name|arma3malden}}<br> {{<nowiki/>Name|arma3malden|com}}<br> {{<nowiki/>Name|arma3malden|id}}<br> {{<nowiki/>Name|arma3malden|cat}}<br> {{<nowiki/>Name|arma3malden|short}}<br> {{<nowiki/>Name|arma3malden|img}}<br> | {{Name|arma3malden}}<br> {{Name|arma3malden|com}}<br> {{Name|arma3malden|id}}<br> {{Name|arma3malden|cat}}<br> {{Name|arma3malden|short}}<br> {{Name|arma3malden|img}}<br> | arma3malden |- <!-- ARMA 3: LAWS OF WAR --> | {{<nowiki/>Name|arma3lawsofwar}}<br> {{<nowiki/>Name|arma3lawsofwar|com}}<br> {{<nowiki/>Name|arma3lawsofwar|id}}<br> {{<nowiki/>Name|arma3lawsofwar|cat}}<br> {{<nowiki/>Name|arma3lawsofwar|short}}<br> {{<nowiki/>Name|arma3lawsofwar|img}}<br> | {{Name|arma3lawsofwar}}<br> {{Name|arma3lawsofwar|com}}<br> {{Name|arma3lawsofwar|id}}<br> {{Name|arma3lawsofwar|cat}}<br> {{Name|arma3lawsofwar|short}}<br> {{Name|arma3lawsofwar|img}}<br> | arma3low, arma3lawsofwar |- <!-- ARMA 3: TAC-OPS --> | {{<nowiki/>Name|arma3tacops}}<br> {{<nowiki/>Name|arma3tacops|com}}<br> {{<nowiki/>Name|arma3tacops|id}}<br> {{<nowiki/>Name|arma3tacops|cat}}<br> {{<nowiki/>Name|arma3tacops|short}}<br> {{<nowiki/>Name|arma3tacops|img}}<br> | {{Name|arma3tacops}}<br> {{Name|arma3tacops|com}}<br> {{Name|arma3tacops|id}}<br> {{Name|arma3tacops|cat}}<br> {{Name|arma3tacops|short}}<br> {{Name|arma3tacops|img}}<br> | arma3tacops |- <!-- ARMA 3: TANKS --> | {{<nowiki/>Name|arma3tanks}}<br> {{<nowiki/>Name|arma3tanks|com}}<br> {{<nowiki/>Name|arma3tanks|id}}<br> {{<nowiki/>Name|arma3tanks|cat}}<br> {{<nowiki/>Name|arma3tanks|short}}<br> {{<nowiki/>Name|arma3tanks|img}}<br> | {{Name|arma3tanks}}<br> {{Name|arma3tanks|com}}<br> {{Name|arma3tanks|id}}<br> {{Name|arma3tanks|cat}}<br> {{Name|arma3tanks|short}}<br> {{Name|arma3tanks|img}}<br> | arma3tanks |- <!-- ARMA 3 CONTACT --> | {{<nowiki/>Name|arma3contact}}<br> {{<nowiki/>Name|arma3contact|com}}<br> {{<nowiki/>Name|arma3contact|id}}<br> {{<nowiki/>Name|arma3contact|cat}}<br> {{<nowiki/>Name|arma3contact|short}}<br> {{<nowiki/>Name|arma3contact|img}}<br> | {{Name|arma3contact}}<br> {{Name|arma3contact|com}}<br> {{Name|arma3contact|id}}<br> {{Name|arma3contact|cat}}<br> {{Name|arma3contact|short}}<br> {{Name|arma3contact|img}}<br> | arma3contact |- <!-- ARMA 3 APEX: OLD MAN --> | {{<nowiki/>Name|arma3oldman}}<br> {{<nowiki/>Name|arma3oldman|com}}<br> {{<nowiki/>Name|arma3oldman|id}}<br> {{<nowiki/>Name|arma3oldman|cat}}<br> {{<nowiki/>Name|arma3oldman|short}}<br> {{<nowiki/>Name|arma3oldman|img}}<br> | {{Name|arma3oldman}}<br> {{Name|arma3oldman|com}}<br> {{Name|arma3oldman|id}}<br> {{Name|arma3oldman|cat}}<br> {{Name|arma3oldman|short}}<br> {{Name|arma3oldman|img}}<br> | arma3oldman |- <!-- ARGO --> | {{<nowiki/>Name|argo}}<br> {{<nowiki/>Name|argo|com}}<br> {{<nowiki/>Name|argo|id}}<br> {{<nowiki/>Name|argo|cat}}<br> {{<nowiki/>Name|argo|short}}<br> {{<nowiki/>Name|argo|img}}<br> | {{Name|argo}}<br> {{Name|argo|com}}<br> {{Name|argo|id}}<br> {{Name|argo|cat}}<br> {{Name|argo|short}}<br> {{Name|argo|img}}<br> | argo |- <!-- ARMA REFORGER --> | {{<nowiki/>Name|armar}}<br> {{<nowiki/>Name|armar|com}}<br> {{<nowiki/>Name|armar|id}}<br> {{<nowiki/>Name|armar|cat}}<br> {{<nowiki/>Name|armar|short}}<br> {{<nowiki/>Name|armar|img}}<br> | {{Name|armar}}<br> {{Name|armar|com}}<br> {{Name|armar|id}}<br> {{Name|armar|cat}}<br> {{Name|armar|short}}<br> {{Name|armar|img}}<br> | armar |- <!-- ARMA 4 --> | {{<nowiki/>Name|arma4}}<br> {{<nowiki/>Name|arma4|com}}<br> {{<nowiki/>Name|arma4|id}}<br> {{<nowiki/>Name|arma4|cat}}<br> {{<nowiki/>Name|arma4|short}}<br> {{<nowiki/>Name|arma4|img}}<br> | {{Name|arma4}}<br> {{Name|arma4|com}}<br> {{Name|arma4|id}}<br> {{Name|arma4|cat}}<br> {{Name|arma4|short}}<br> {{Name|arma4|img}}<br> | arma4 |- <!-- DAYZ --> | {{<nowiki/>Name|dayz}}<br> {{<nowiki/>Name|dayz|com}}<br> {{<nowiki/>Name|dayz|id}}<br> {{<nowiki/>Name|dayz|cat}}<br> {{<nowiki/>Name|dayz|short}}<br> {{<nowiki/>Name|dayz|img}}<br> | {{Name|dayz}}<br> {{Name|dayz|com}}<br> {{Name|dayz|id}}<br> {{Name|dayz|cat}}<br> {{Name|dayz|short}}<br> {{Name|dayz|img}}<br> | dayz |- <!-- TAKE ON HELICOPTERS --> | {{<nowiki/>Name|tkoh}}<br> {{<nowiki/>Name|tkoh|com}}<br> {{<nowiki/>Name|tkoh|id}}<br> {{<nowiki/>Name|tkoh|cat}}<br> {{<nowiki/>Name|tkoh|short}}<br> {{<nowiki/>Name|tkoh|img}}<br> | {{Name|tkoh}}<br> {{Name|tkoh|com}}<br> {{Name|tkoh|id}}<br> {{Name|tkoh|cat}}<br> {{Name|tkoh|short}}<br> {{Name|tkoh|img}}<br> | tkoh |- <!-- TAKE ON HELICOPTERS: HINDS --> | {{<nowiki/>Name|tkohh}}<br> {{<nowiki/>Name|tkohh|com}}<br> {{<nowiki/>Name|tkohh|id}}<br> {{<nowiki/>Name|tkohh|cat}}<br> {{<nowiki/>Name|tkohh|short}}<br> {{<nowiki/>Name|tkohh|img}}<br> | {{Name|tkohh}}<br> {{Name|tkohh|com}}<br> {{Name|tkohh|id}}<br> {{Name|tkohh|cat}}<br> {{Name|tkohh|short}}<br> {{Name|tkohh|img}}<br> | tkohh |- <!-- TAKE ON MARS --> | {{<nowiki/>Name|tkom}}<br> {{<nowiki/>Name|tkom|com}}<br> {{<nowiki/>Name|tkom|id}}<br> {{<nowiki/>Name|tkom|cat}}<br> {{<nowiki/>Name|tkom|short}}<br> {{<nowiki/>Name|tkom|img}}<br> | {{Name|tkom}}<br> {{Name|tkom|com}}<br> {{Name|tkom|id}}<br> {{Name|tkom|cat}}<br> {{Name|tkom|short}}<br> {{Name|tkom|img}}<br> | tkom |- <!-- YLANDS --> | {{<nowiki/>Name|ylands}}<br> {{<nowiki/>Name|ylands|com}}<br> {{<nowiki/>Name|ylands|id}}<br> {{<nowiki/>Name|ylands|cat}}<br> {{<nowiki/>Name|ylands|short}}<br> {{<nowiki/>Name|ylands|img}}<br> | {{Name|ylands}}<br> {{Name|ylands|com}}<br> {{Name|ylands|id}}<br> {{Name|ylands|cat}}<br> {{Name|ylands|short}}<br> {{Name|ylands|img}}<br> | ylands |- <!-- VIGOR --> | {{<nowiki/>Name|vigor}}<br> {{<nowiki/>Name|vigor|com}}<br> {{<nowiki/>Name|vigor|id}}<br> {{<nowiki/>Name|vigor|cat}}<br> {{<nowiki/>Name|vigor|short}}<br> {{<nowiki/>Name|vigor|img}}<br> | {{Name|vigor}}<br> {{Name|vigor|com}}<br> {{Name|vigor|id}}<br> {{Name|vigor|cat}}<br> {{Name|vigor|short}}<br> {{Name|vigor|img}}<br> | vigor |- <!-- SILICA --> | {{<nowiki/>Name|silica}}<br> {{<nowiki/>Name|silica|com}}<br> {{<nowiki/>Name|silica|id}}<br> {{<nowiki/>Name|silica|cat}}<br> {{<nowiki/>Name|silica|short}}<br> {{<nowiki/>Name|silica|img}}<br> | {{silica}}<br> {{Name|silica|com}}<br> {{Name|silica|id}}<br> {{Name|silica|cat}}<br> {{Name|silica|short}}<br> {{Name|silica|img}}<br> | silica |- <!-- CARRIER COMMAND --> | {{<nowiki/>Name|carriercommand}}<br> {{<nowiki/>Name|carriercommand|com}}<br> {{<nowiki/>Name|carriercommand|id}}<br> {{<nowiki/>Name|carriercommand|cat}}<br> {{<nowiki/>Name|carriercommand|short}}<br> {{<nowiki/>Name|carriercommand|img}}<br> | {{Name|carriercommand}}<br> {{Name|carriercommand|com}}<br> {{Name|carriercommand|id}}<br> {{Name|carriercommand|cat}}<br> {{Name|carriercommand|short}}<br> {{Name|carriercommand|img}}<br> | carriercommand |}

[[Category:Templates|{{uc:{{PAGENAME}}}}]]</noinclude>
tv0g1903mr5h634kv39k7y0hz0odjxn

# Template:hl

10
32201
370842
370479
2025-02-14T13:57:51Z
Lou Montana
10739
Add semicolon escape
370842
wikitext
text/x-wiki
<includeonly>{{#if:{{{c|{{{1|}}}}}} | <var>{{#switch:0 | {{#pos:{{{c|{{{1}}}}}}|:}}= {{#replace:{{{c|{{{1}}}}}}|:|&colon;}} | {{#pos:{{{c|{{{1}}}}}}|;}}= {{#replace:{{{c|{{{1}}}}}}|;|&semi;}} | {{#pos:{{{c|{{{1}}}}}}|#}}= {{#replace:{{{c|{{{1}}}}}}|#|&num;}} | {{#pos:{{{c|{{{1}}}}}}|*}}= {{#replace:{{{c|{{{1}}}}}}|*|&#42;}} | {{#ifexpr: {{#if:{{#pos:{{{c|{{{1}}}}}}|/}}|1|0}} and {{#if:{{#pos:{{{c|{{{1}}}}}}|[<nowiki/>[}}|0|1}}|0}}= {{#replace:{{#replace:{{{c|{{{1}}}}}}|/|<wbr>/}}|<<wbr>/|</}} | {{#if:{{#pos:{{{c|{{{1}}}}}}|\}}|0}}= {{#replace:{{{c|{{{1}}}}}}|\|<wbr>\}} | {{{c|{{{1}}}}}} }}</var> | -No content provided-{{TemplateCase||[[Category:hl template usage error]]}} }}</includeonly><noinclude><!--

-->{{Doc/Template |descr= This template displays '''h'''igh'''l'''ighted content - it replaces {{hl|&lt;tt&gt;}} which was used across the wiki. It also adds the page to the [[:Category:hl template usage error|hl template usage error]] category on usage error. |param1= c |descr1= the content to display.<br>If it contains an equal sign {{hl|c= =}}, which '''it should not''' (for inline code, {{hl|<nowiki><syntaxhighlight></nowiki>}}/{{hl|<nowiki><sqf></nowiki>}} should be used instead): ** replace it with {{hl|<nowiki>{{=}}</nowiki>}} ** use {{hl|c= c=}} ** use the MediaWiki trick {{hl|c= 1=}}

|example1= <nowiki>{{hl}}</nowiki> |result1= {{hl}}

|example2= <nowiki>{{hl|"AWARE"}}</nowiki> |result2= {{hl|"AWARE"}}

|example3= <nowiki>{{hl|</nowiki>oneLongFilePath<wbr>/ThatCannotLineBreak<wbr>/OnMobileOrOtherNonWideScreen<wbr>/BecauseThereAreNoSpaces<wbr>/AndGivenFirefoxAndChromeBrowsersHaveADifferentBehaviour<wbr>/LetsCoverAllTheCases}<nowiki/>} |result3= {{hl|oneLongFilePath/ThatCannotLineBreak/OnMobileOrOtherNonWideScreen/BecauseThereAreNoSpaces/AndGivenFirefoxAndChromeBrowsersHaveADifferentBehaviour/LetsCoverAllTheCases}}

|example4= <nowiki>{{hl|</nowiki>oneLongFilePath<wbr>\ThatCannotLineBreak<wbr>\OnMobileOrOtherNonWideScreen<wbr>\BecauseThereAreNoSpaces<wbr>\AndGivenFirefoxAndChromeBrowsersHaveADifferentBehaviour<wbr>\LetsCoverAllTheCases}<nowiki/>} |result4= {{hl|oneLongFilePath\ThatCannotLineBreak\OnMobileOrOtherNonWideScreen\BecauseThereAreNoSpaces\AndGivenFirefoxAndChromeBrowsersHaveADifferentBehaviour\LetsCoverAllTheCases}}

|example5= <nowiki/> <nowiki>{{hl|#test1}} test2 {{hl|#test3}} test4</nowiki><br> <nowiki>{{hl|*test1}} test2 {{hl|*test3}} test4</nowiki><br> <nowiki>{{hl|:test1}} test2 {{hl|:test3}} test4</nowiki><br> <nowiki>{{hl| test1}} test2 {{hl| test3}} test4</nowiki> |result5= <nowiki/> {{hl|#test1}} test2 {{hl|#test3}} test4<br> {{hl|*test1}} test2 {{hl|*test3}} test4<br> {{hl|:test1}} test2 {{hl|:test3}} test4<br> {{hl| test1}} test2 {{hl| test3}} test4

|example6= <nowiki/> <nowiki>* {{hl|;}}</nowiki><br> <nowiki>* a {{hl|;}} b</nowiki><br> <nowiki>* {{hl|:}}</nowiki><br> <nowiki>* a {{hl|:}} b</nowiki><br> <nowiki>; test {{hl|test}}</nowiki><br> <nowiki>; test {{hl|:test}}</nowiki><br> <nowiki>; test: {{hl|test}}</nowiki><br> <nowiki>; {{hl|test}}: {{hl|test}}</nowiki><br> <nowiki>; {{hl|;test}}: {{hl|test}}</nowiki><br> <nowiki>; {{hl|:test}}: {{hl|test}}</nowiki><br> <nowiki>; {{hl|test}}: {{hl|;test}}</nowiki><br> <nowiki>; {{hl|test}}: {{hl|:test}}</nowiki><br> <nowiki>; {{hl|;test}}: {{hl|:test}}</nowiki> |result6= <nowiki/> * {{hl|;}} * a {{hl|;}} b * {{hl|:}} * a {{hl|:}} b ; test {{hl|test}} ; test {{hl|:test}} ; test :{{hl|test}} ; {{hl|test}}: {{hl|test}} ; {{hl|;test}}: {{hl|test}} ; {{hl|:test}}: {{hl|test}} ; {{hl|test}}: {{hl|;test}} ; {{hl|test}}: {{hl|:test}} ; {{hl|;test}}: {{hl|:test}}

|example7= <nowiki/> <nowiki>* {{hl|;}}</nowiki><br> <nowiki>* {{hl|; test}}</nowiki><br> <nowiki>* {{hl|:}}</nowiki><br> <nowiki>* {{hl|: test}}</nowiki><br> <nowiki>* ''{{hl|test}}''</nowiki><br> <nowiki>* '''{{hl|test}}'''</nowiki><br> <nowiki>* {{hl|[[Template:Link]]}}</nowiki><br> <nowiki>* {{hl|[[Template:Link/Internal]]}}</nowiki><br> <nowiki>* {{hl|[[Description.ext#CfgSounds]]}}</nowiki><br> <nowiki>* {{hl|{{Link|Description.ext#CfgSounds}}}}</nowiki><br> <nowiki>* {{hl|{{GVI|arma3|1.00}}}}</nowiki><br> <nowiki>* {{hl|&lt;nowiki>{{GVI|arma3|1.00}}&lt;/nowiki>}}</nowiki><br> <nowiki>* {{hl|c= &lt;nowiki>{{GVI|arma3|1.00}}&lt;/nowiki>}}</nowiki><br> <nowiki>* {{hl|2&amp;nbsp;km<sup>2</sup>}}</nowiki><br> |result7= <nowiki/> * {{hl|;}} * {{hl|; test}} * {{hl|:}} * {{hl|: test}} * ''{{hl|test}}'' * '''{{hl|test}}''' * {{hl|[[Template:Link]]}} * {{hl|[[Template:Link/Internal]]}} * {{hl|[[Description.ext#CfgSounds]]}} * {{hl|{{Link|Description.ext#CfgSounds}}}} * {{hl|{{GVI|arma3|1.00}}}} * {{hl|<nowiki>{{GVI|arma3|1.00}}</nowiki>}} * {{hl|c= <nowiki>{{GVI|arma3|1.00}}</nowiki>}} * {{hl|2&nbsp;km<sup>2</sup>}} }}</noinclude>
ly5hr6hghpqhfgunp2pnnixmqoylwlb

# Template:GameCategory

10
27613
347896
341660
2023-11-01T22:32:23Z
Lou Montana
10739
Fix space in link
347896
wikitext
text/x-wiki
<includeonly>{{#switch:{{lc:{{{1|}}}}} |#default= {{#if:{{{2|}}} | {{#if:{{{link|}}}{{{text|}}} | [[:Category: {{Name|{{{1}}}|cat}}: {{{2}}} |{{{text|{{Name|{{{1}}}|cat}}: {{{2}}}}}}]]<!-- no space otherwise <a> linkWithSpace</a> --> | [[ Category: {{Name|{{{1}}}|cat}}: {{{2}}} | {{#if:{{{sortKey|}}} | {{uc:{{{sortKey}}}}} | {{GameCategory/SortKey|{{Name|{{{1}}}|cat}}|{{PAGENAME}}}}}}]] }} | {{#if:{{{link|}}}{{{text|}}} | [[:Category: {{Name|{{{1}}}|cat}} |{{{text|{{Name|{{{1}}}|cat}}}}}]]<!-- same --> | [[ Category: {{Name|{{{1}}}|cat}} | {{#if:{{{sortKey|}}} | {{uc:{{{sortKey}}}}} | {{GameCategory/SortKey|{{Name|{{{1}}}|cat}}|{{PAGENAME}}}}}}]] }} }} |armar |arma4= {{#if:{{{link|}}}{{{text|}}} | [[:Category: {{Concat|/|{{Name|{{{1}}}|cat}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|{{{5|}}}|{{{6|}}}}} |{{{text|{{Concat|/|{{Name|{{{1}}}|cat}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|{{{5|}}}|{{{6|}}}}}}}}]]<!-- same --> | [[ Category: {{Concat|/|{{Name|{{{1}}}|cat}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|{{{5|}}}|{{{6|}}}}} | {{uc:{{{sortKey|{{SUBPAGENAME}}}}}}}]] }} |= -no [[Template:GameCategory|category]] provided-{{TemplateCase||[[Category:GameCategory template usage error]]}} }}</includeonly><noinclude>{{Doc/Template |descr= Adds a game (sub-)category to the proper format and finds the page Category Sort key (e.g {{hl|Arma 2: Editing}} gets sorted as {{hl|EDITING}}).<br> Uses {{Template|Name}}, {{Template|Concat}} and {{Template|GameCategory/SortKey}}.

|param1= game |descr1= game id, see {{Template|Name}}

|param2= subCategory |descr2= (Optional, default empty) sub-category (e.g Editing) - for &ge; {{armaR}} can be up to 5 sub-levels

|param3= link |descr3= (Optional, default empty - named argument) {{hl|y}} to make it a link '''to''' the category

|param4= text |descr4= (Optional, default empty - named argument) requires ''link''. The link's text (otherwise, the category name will be used) - activates {{hl|link}} as well

|param5= sortKey |descr5= (Optional, default {{hl|{{<nowiki/>uc:{{<nowiki/>PAGENAME}}}}}} (see {{Template|GameCategory/SortKey}}) or {{hl|{{<nowiki/>SUBPAGENAME}}}} (for &ge; {{armaR}}) - named argument) category sort key - will be uppercased

|example1= <nowiki>{{GameCategory}}</nowiki> |result1= {{hl|{{GameCategory}}}}

|example2= <nowiki>{{GameCategory|ofpr}}</nowiki> |result2= {{hl|<nowiki>[[Category: {{Name|ofpr|cat}}|PAGENAME]]</nowiki>}}<br>End result: {{hl|[[<nowiki/>Category: {{Name|ofpr|cat}}|PAGENAME]]}}

|example3= <nowiki>{{GameCategory|ofpr|link= y}}</nowiki> |result3= {{hl|{{GameCategory|ofpr|link= y}}}}

|example4= <nowiki>{{GameCategory|arma2|sortKey= the sort key}}</nowiki> |result4= {{hl|<nowiki>[[Category: {{Name|arma2|cat}}|THE SORT KEY]]</nowiki>}}<br>End result: {{hl|[[<nowiki/>Category: {{Name|arma2|cat}}|THE SORT KEY]]}}

|example5= <nowiki>{{GameCategory|arma1}}</nowiki> |result5= {{hl|<nowiki>[[Category: {{Name|arma1|cat}}|PAGENAME]]</nowiki>}}<br>End result: {{hl|[[<nowiki/>Category: {{Name|arma1|cat}}|PAGENAME]]}}

|example6= <nowiki>{{GameCategory|arma1qg}}</nowiki> |result6= {{hl|<nowiki>[[Category: {{Name|arma1qg|cat}}|PAGENAME]]</nowiki>}}<br>End result: {{hl|[[<nowiki/>Category: {{Name|arma1qg|cat}}|PAGENAME]]}}

|example7= <nowiki>{{GameCategory|arma3|Editing}}</nowiki> |result7= {{hl|<nowiki>[[Category: {{Name|arma3|cat}}/Editing|PAGENAME]]</nowiki>}}<br>End result: {{hl|[[<nowiki/>Category: {{Name|arma3|cat}}: Editing|PAGENAME]]}}

|example8= <nowiki>{{GameCategory|armaR|Editing|Scripting}}</nowiki> |result8= {{hl|<nowiki>[[Category: {{Name|armaR|cat}}/Editing/Scripting|PAGENAME]]</nowiki>}}<br>End result: {{hl|[[<nowiki/>Category: {{Name|armaR|cat}}/Editing/Scripting|PAGENAME]]}}

|example9= <nowiki>{{GameCategory|arma3|Editing|Scripting|link= y}}</nowiki><br><nowiki>{{GameCategory|arma4|0|1|2|3|4|5|6|7|8|9|10|link= y}}</nowiki> |result9= {{hl|{{GameCategory|arma3|Editing|Scripting|link= y}}}}<br>{{hl|{{GameCategory|arma4|0|1|2|3|4|5|6|7|8|9|10|link= y}}}}

|example10= <nowiki>{{GameCategory|ofp|link= y|text= OFP!}}</nowiki><br><nowiki>{{GameCategory|arma2|text= Game 2}}</nowiki><br><nowiki>{{GameCategory|arma4|link= y|text= A4 is great :)}}</nowiki> |result10= {{GameCategory|ofp|link= y|text= OFP!}}<br>{{GameCategory|arma2|text= Game 2}}<br>{{GameCategory|arma4|link= y|text= A4 is great :)}} }}
tky55h3z409j2f8zt9plxkyzcak9zdd

# Template:Trim

10
26334
337219
244844
2023-01-11T10:53:17Z
Lou Montana
10739
Text replacement - "<code>" to "<code style="display: block">"
337219
wikitext
text/x-wiki
<includeonly>{{#if:{{{1|}}}|{{{1|}}}}}</includeonly><noinclude>{{Doc/Template |descr= <pre>{{Trim| {{{parameter|}}} }}</pre> |param1= text |descr1= text to trim |example1= <code style="display: block"> test </code> |result1= <code style="display: block"> test </code> |example2= <code style="display: block"><nowiki>{{Trim| test }}</nowiki></code> |result2= <code style="display: block">{{Trim| test }}</code> }}</noinclude>
pyxgarz4qp5v46hd0t2p67xhp2ozasn

# Template:Feature

10
28061
373628
373548
2025-05-28T09:58:43Z
Lou Montana
10739
Fix template
373628
wikitext
text/x-wiki
<includeonly>{{#if:{{{1|}}} | {{#switch: {{uc:{{{1}}}}} |AFM= {{Messagebox|{{{2|For this command to have any effect, the [[Arma 3: Advanced Helicopter Flight Model|Advanced Flight Model]] (AFM) has to be enabled. AFM status can be checked with [[difficultyEnabledRTD]].}}}|{{Icon|afm|35}}|class= feature-{{lc:{{{1}}}}}}} |OFP |ARMA0= {{Messagebox|{{{2|This is an [[:Category:Operation Flashpoint|{{Name|arma0}}]] feature.}}}|{{Icon|arma0}}|class= feature-{{lc:{{{1}}}}}}} |OFPE= {{Messagebox|{{{2|This is an {{GameCategory|ofpe|link=y}} feature.}}}|{{Icon|ofpe}}|class= feature-{{lc:{{{1}}}}}}} |ARMA1= {{Messagebox|{{{2|This is an {{GameCategory|arma1|link=y}} feature.}}}|{{Icon|arma1}}|class= feature-{{lc:{{{1}}}}}}} |ARMA2= {{Messagebox|{{{2|This is an {{GameCategory|arma2|link=y}} feature.}}}|{{Icon|arma2}}|class= feature-{{lc:{{{1}}}}}}} |ARMA2OA= {{Messagebox|{{{2|This is an {{GameCategory|arma2oa|link=y}} feature.}}}|{{Icon|arma2oa}}|class= feature-{{lc:{{{1}}}}}}} |ARMA3= {{Messagebox|{{{2|This is an {{GameCategory|arma3|link=y}} feature.}}}|{{Icon|arma3}}|class= feature-{{lc:{{{1}}}}}}} |ARMA3CONTACT= {{Messagebox|{{{2|This content is exclusive to the [[Arma 3 Contact]] Expansion.}}}|{{Icon|arma3contact|32}}|class= feature-{{lc:{{{1}}}}}}} |ARMA3OLDMAN= {{Messagebox|{{{2|This function is used by the [[Arma 3 Apex: Old Man]] content. It might only work properly inside this scenario.}}}|{{Icon|arma3oldman_alt}}|class= feature-{{lc:{{{1}}}}}}} |ARMAR= {{Messagebox|{{{2|This is an {{GameCategory|armaR|link=y}} feature.}}}|{{Icon|armaR}}|class= feature-armaR}}<!-- armar != armaR --> |ARMA4= {{Messagebox|{{{2|This is an {{GameCategory|arma4|link=y}} feature.}}}|{{Icon|arma4}}|class= feature-{{lc:{{{1}}}}}}} |CONSOLES= {{Messagebox|{{{2|This is a console feature.}}}|{{Icon|gamepad}}|class= feature-{{lc:{{{1}}}}}}} |DAYZ= {{Messagebox|{{{2|This is a {{GameCategory|dayz|link=y}} feature.}}}|{{Icon|dayz_alt}}|class= feature-{{lc:{{{1}}}}}}} |EDENEDITOR |EDEN EDITOR= {{Messagebox|{{{2|This is an [[:Category:Eden Editor|Eden Editor]] feature.}}}|{{Icon|arma3eden}}|class= feature-eden-editor}} |GAMEPAD= {{Messagebox|{{{2|{{TemplateCase||[[Category:Feature template usage error]]}}}}}|<div style{{=}}"margin-top: -.25em">{{Icon|gamepad}}</div>|class= feature-{{lc:{{{1}}}}}}} |GVI= {{Messagebox|{{{4|{{#if:{{{2|}}}|This feature was introduced with {{Name|{{{2}}}}}{{#if:{{{3|}}}|<nowiki/> v{{{3}}}}}.|-no game provided-{{TemplateCase||[[Category:Feature template usage error]]}}}}}}}|{{#if:{{{2|}}}|<div style{{=}}"color: #333">{{GVI|{{{2}}}|{{{3|1.00}}}}}</div>|?}}|class= feature-{{lc:{{{1}}}}}}} |IMPORTANT= {{Messagebox|{{{2|{{TemplateCase||[[Category:Feature template usage error]]}}}}}|⚠|class= feature-{{lc:{{{1}}}}}}} |INFORMATIVE= {{Messagebox|{{{2|{{TemplateCase||[[Category:Feature template usage error]]}}}}}|ⓘ|class= feature-{{lc:{{{1}}}}}}} |KEYBOARD= {{Messagebox|{{{2|{{TemplateCase||[[Category:Feature template usage error]]}}}}}|<div style{{=}}"margin-top: -.25em">{{Icon|keyboard}}</div>|class= feature-{{lc:{{{1}}}}}}} |PC= {{Messagebox|{{{2|This is a PC feature.}}}|{{Icon|kbm}}|class= feature-pc}} |PLAYSTATION= {{Messagebox|{{{2|This is a PlayStation® feature.}}}|<div style{{=}}"margin-top: -.25em">{{Icon|playstation}}</div>|class= feature-{{lc:{{{1}}}}}}} |OBSOLETE= {{Messagebox|This information is '''obsolete'''{{#if:{{{3|}}}|<nowiki/> as of {{Name|{{{3}}}}}{{#if:{{{4|}}}|<nowiki/> v{{{4}}}}}|}}.{{#if:{{{2|{{{message|}}}}}}|<nowiki/> Reason: {{{2|{{{message}}}}}}}}|🕖|class= feature-{{lc:{{{1}}}}}}} |QUOTE= {{Messagebox|{{#if:{{Trim|{{{2|}}}}}|<span class="feature-quote">«&nbsp;{{Trim|{{{2}}}}}&nbsp;»</span>{{#if:{{{3|}}}|&nbsp;&ndash;&nbsp;{{Trim|{{{3}}}}}}}{{#if:{{{4|}}}|&nbsp;({{Link|{{{4}}}|source}})}}}}|«|class= feature-{{lc:{{{1}}}}}}} |SPOILER= <div class="biki-messagebox-spoiler"> <div class="spoiler-title">Spoiler Warning</div> '''The following text contains game spoilers such as story details or mission walkthroughs. Read at your own risk!'''{{#if:{{{2|}}} |<br>The potential spoilers concern the following topic: {{{2}}}.}}</div> |STEAM= {{Messagebox|{{{2|This is a [[Steam]] feature.}}}|{{Icon|steam}}|class= feature-{{lc:{{{1}}}}}}} |TKOH= {{Messagebox|{{{2|This is a {{GameCategory|tkoh|link=y}} feature.}}}|{{Icon|tkoh|32}}|class= feature-{{lc:{{{1}}}}}}} |UNSUPPORTEDDOC= {{Messagebox/BI|Disclaimer: This page describes internal undocumented structures of [[Bohemia Interactive]] software.| This page contains unofficial information.

Some usage of this information may constitute a violation of the rights of Bohemia Interactive and is in no way endorsed or recommended by {{Name|bi}}.<br><!-- -->{{Name|bi}} is not willing to tolerate use of such tools if it contravenes any general licenses granted to end users of this community wiki or BI products. }} |UNSUPPORTEDTOOL= {{Messagebox/BI|Disclaimer: This page describes an unofficial tool created without permission or support of [[{{Name|bi}}]].| The product itself and its usage may be violating rights of Bohemia Interactive and is in no way endorsed or recommended by {{Name|bi}}. See also '''[[:Category:Official Tools|Official Tools]]'''.}} |WARNING= {{Messagebox|{{{2|{{TemplateCase||[[Category:Feature template usage error]]}}}}}|⚠|class= feature-{{lc:{{{1}}}}}}} |XBOX= {{Messagebox|{{{2|This is an Xbox® feature.}}}|<div style{{=}}"margin-top: -.25em">{{Icon|xbox}}</div>|class= feature-{{lc:{{{1}}}}}}} |YLANDS= {{Messagebox|{{{2|This is a {{GameCategory|ylands|link=y}} feature.}}}|{{Icon|ylands|60}}|class= feature-{{lc:{{{1}}}}}}} | -unknown [[Template:Feature|feature]] ("{{{1}}}") defined-{{TemplateCase||[[Category:Feature template usage error]]}} }} | -no feature defined-{{TemplateCase||[[Category:Feature template usage error]]}} }}</includeonly><noinclude>{{Feature/doc}}<templatedata> { "description": "", "params": { "1": { "label": "name", "description": "name of the feature used for the messagebox", "type": "string", "suggestedvalues": [ "AFM", "ofp", "arma0", "ofpe", "arma1", "arma2", "arma2oa", "arma3", "arma3contact", "arma3oldman", "armaR", "arma4", "dayz", "Eden Editor", "gamepad", "GVI", "keyboard", "important", "informative", "obsolete", "quote", "playstation", "spoiler", "tkoh", "UnsupportedDoc", "UnsupportedTool", "warning", "xbox", "ylands" ], "autovalue": "informative", "required": true }, "2": {}, "3": {}, "4": {}, "message": {} }, "paramOrder": [ "1", "2", "3", "4", "message" ], "format": "inline" } </templatedata></noinclude>
4iti2jktdfl429ots1hnxr09cy79e24

# Template:Messagebox

10
26263
370074
364602
2024-10-30T17:03:25Z
Lou Montana
10739
Remove forced background colour
370074
wikitext
text/x-wiki
<includeonly><div class="biki-messagebox{{#if:{{{class|}}}|<nowiki/> {{{class}}}}}"{{#if:{{{3|}}}|<nowiki/> style{{=}}"background-color:{{{3}}}}}"><!-- --><div>{{{2|i}}}</div><!-- --><div>{{#if:{{Trim|{{{1|}}}}}|{{Trim|{{{1|}}}}}|-Text not defined-}}</div><!-- --></div></includeonly><noinclude>Displays a standardised message box. Base of messageboxes, used by <span class="plainlinks">[{{SERVER}}/wiki?title=Special%3AWhatLinksHere&target=Template%3AMessagebox&namespace=10 many other templates]</span>.

== Usage == {{<nowiki/>Messagebox|'''''message'''''|'''''icon'''''|'''''colour'''''|'''''class='''''}} * message: the message to display * icon: (Optional, default "i") symbol to the left, a letter (written in white) or an image (format {{hl|[[<nowiki/>File]]) * colour: (Optional, default #025D00) box HTML colour, can be one of: ** HTML colour name - ''red'', ''darkgrey'', etc. ** HTML colour format - '''#RGB''' or '''#RRGGBB''' ** rgb format - '''rgb(255, 0, 0)''' ** rgba format - '''rgba(255, 0, 0, 0.5)''' ** hsl format - '''hsl(120, 100%, 50%)''' ** hsla format - '''hsla(120, 60%, 70%, 0.3)''' * class: (Optional, default none) makes it possible to add a CSS class

{| class="wikitable" |+ Examples ! Code ! Result |- | <nowiki>{{Messagebox}}</nowiki> | {{Messagebox}} |- | <nowiki>{{Messagebox|Hello there!}}</nowiki> | {{Messagebox|Hello there!}} |- | <nowiki>{{Messagebox|Hello there!|✔}}</nowiki> | {{Messagebox|Hello there!|✔}} |- | <nowiki>{{Messagebox|Hello there!|✔|orange}}</nowiki> | {{Messagebox|Hello there!|✔|orange}} |- | <nowiki>{{Messagebox|Hello there!|✔|#CDF}}</nowiki> | {{Messagebox|Hello there!|✔|#CDF}} |- | <nowiki>{{Messagebox|Text:</nowiki><br>Hello there!<br>General Kenobi!<br><nowiki>}}</nowiki> | {{Messagebox|Text: Hello there! General Kenobi! }} |- | <nowiki>{{Messagebox|Text:</nowiki><br>Hello there!<br><br>General Kenobi!<br><nowiki>}}</nowiki> | {{Messagebox|Text: Hello there!

General Kenobi! }} |- | ; Known Issues <pre> {{Feature|informative|Before}} * First : {{Feature|informative|indented}} : {{Feature|informative| {{GVI|arma3}}indented two lines}} * {{Feature|informative|Second, line return,

double line return}} * {{Feature|informative| Third, line return,

double line return}} * list {{Feature|informative| * list 1 * list 2 }} : {{Feature|informative|Indented messagebox list: * indented 1 * indented 2 }} * Last {{Feature|informative| * After 1 * After 2 }} </pre> | {{Feature|informative|Before}} * First : {{Feature|informative|indented}} : {{Feature|informative| {{GVI|arma3}}indented two lines}} * {{Feature|informative|Second, line return,

double line return}} * {{Feature|informative| Third, line return,

double line return}} * list {{Feature|informative| * list 1 * list 2 }} : {{Feature|informative|Indented messagebox list: * indented 1 * indented 2 }} * Last {{Feature|informative| * After 1 * After 2 }} |- | <nowiki>{{Messagebox|Yep|Unreadable!|#EEE}}</nowiki> | {{Messagebox|Yep|Unreadable!|#EEE}} |- | <nowiki>{{Messagebox|{{arma3}} logo|[[File:Arma 3_logo_black.png|300px|center]]|#888}}</nowiki> | {{Messagebox|{{arma3}} logo|[[File:Arma 3_logo_black.png|300px|center]]|#888}} |- | <nowiki>{{Messagebox|[[File:Arma 3_logo_black.png|300px|center]]|{{arma3}} logo|#333}}</nowiki> | {{Messagebox|[[File:Arma 3_logo_black.png|300px|center]]|{{arma3}} logo|#333}} |- | <nowiki>{{Messagebox|{{ofp}}<br>{{arma1}}<br>{{arma2}}<br>{{arma3}}|A|#333}}</nowiki> | {{Messagebox|{{ofp}}<br>{{arma1}}<br>{{arma2}}<br>{{arma3}}|A|#333}} |- | <nowiki>{{Messagebox|{{arma3}}|a<br>b<br>c<br>d|#333}}</nowiki> | {{Messagebox|{{arma3}}|a<br>b<br>c<br>d|#333}} |- | <nowiki>{{Messagebox|One line text|{{arma3}}|#FDA}}</nowiki> | {{Messagebox|One line text|{{arma3}}|#FDA}} |- | <nowiki>{{Messagebox|{{Wiki|lorem}}|{{arma3}}|#FDA}}</nowiki> | {{Messagebox|{{Wiki|lorem}}|{{arma3}}|#FDA}} |}

== Source == <syntaxhighlight lang="html"> <div class="biki-messagebox{{#if:{{{class|}}}|<nowiki/> {{{class}}}}}" style="background-color:{{{3|#025D00}}}"><!-- --><div>{{{2|i}}}</div><!-- --><div>{{#if:{{Trim|{{{1|}}}}}|{{Trim|{{{1|}}}}}|-Text not defined-}}</div><!-- --></div> </syntaxhighlight>

[[Category:Templates|{{uc:messagebox}}]] </noinclude>
f6lim8773wk1ghvsz21wxrbvwsc627a

# Template:TOC

10
28074
373177
365187
2025-04-09T14:27:43Z
Lou Montana
10739
Add Vector 2022 skin intel
373177
wikitext
text/x-wiki
<includeonly><div class="{{#if:{{{3|}}}|toclimit-{{{3|}}}}} {{#if:{{{4|}}}|toc-nonum}}" {{#if:{{{2|}}}|style="font-size: {{{2}}}em"}}>{{#switch:{{lc:{{{1|}}}}} |abc= __NOTOC__ <div class="toc-abc">[[#A|A]][[#B|B]][[#C|C]][[#D|D]][[#E|E]][[#F|F]][[#G|G]][[#H|H]][[#I|I]][[#J|J]][[#K|K]][[#L|L]][[#M|M]][[#N|N]][[#O|O]][[#P|P]][[#Q|Q]][[#R|R]][[#S|S]][[#T|T]][[#U|U]][[#V|V]][[#W|W]][[#X|X]][[#Y|Y]][[#Z|Z]][[##|#]]</div> |horizontal= <div class="toc-horizontal">__TOC__</div> |none= __NOTOC__ |side= <div class="toc-side">__TOC__</div> |subtoc= {{#if:{{{content|}}} | <div class="toc" style="font-size: .9em"> {{#if:{{{title|a}}}|<div class="toctitle">'''{{{title|Contents}}}'''</div>}} {{{content}}} </div> | {{TemplateCase||[[Category:TOC template usage error]]}} }} |#default= __TOC__ }}</div></includeonly><noinclude> {{Feature |important|Only '''one''' TOC (Table of Contents) is possible per page, with the exception of ''abc'' and ''subtoc''.}}

== Usage == {{<nowiki/>TOC|'''''mode'''''|'''''size'''''|'''''limit'''''|'''''nonum'''''|'''''title='''''|'''''content='''''}} * mode: (Optional, default: "normal"; case-insensitive) one of: ** abc - a horizontal A..Z TOC (more of an ''index'') ** ''horizontal'' - a horizontal TOC, where full titles are kept ** ''normal'' - the normal TOC - can be placed at the wanted position with this ** none - no TOC on the page (similar to {{hl|<nowiki>__NOTOC__</nowiki>}}) ** ''side'' - sets the TOC to the right ** subtoc - creates a TOC-like box. Additional parameters: *** title: (Optional, default empty) subTOC title *** content: subTOC content, usually a list of {{Template|Link}} internal links in format:<syntaxhighlight lang="handlebars"> * 1 {{Link|#Title 1}} * 2 {{Link|#Title 2}} * 3 {{Link|#Title 3}} </syntaxhighlight> * size: (Optional, default 1) size in em (e.g {{hl|.9}} for 90%) * limit: (Optional, default empty) sub-level limit (e.g {{hl|2}}) * nonum: (Optional, default empty) {{hl|y}} to hide numbers

{{Feature|important|{{hl|horizontal}}, {{hl|normal}} and {{hl|side}} values do not work anymore using the Vector 2022 skin.}}

{| style="width: 100%" |+ Examples |- style="background-color: #EEE" ! Code ! Result |- | <pre>{{TOC}}</pre> | style="padding-left: 2.5em" | {{TOC}} |- | <pre>{{TOC|abc}}</pre> | {{TOC|abc}} |- | <pre>{{TOC|subtoc |content= * 1 {{Link|#Title 1}} * 2 {{Link|#Title 2}} * 3 {{Link|#Title 3}} }}</pre> | style="padding-left: 2.5em" | {{TOC|subtoc |content= * 1 {{Link|#Title 1}} * 2 {{Link|#Title 2}} * 3 {{Link|#Title 3}} }} |- | <pre>{{TOC|subtoc |title= The sub-TOC title |content= * 1 {{Link|#Title 1}} * 2 {{Link|#Title 2}} * 3 {{Link|#Title 3}} }}</pre> | style="padding-left: 2.5em" | {{TOC|subtoc |title= The sub-TOC title |content= * 1 {{Link|#Title 1}} * 2 {{Link|#Title 2}} * 3 {{Link|#Title 3}} }} |- | <pre>{{TOC|subtoc |title= |content= * 1 {{Link|#Title 1}} * 2 {{Link|#Title 2}} * 3 {{Link|#Title 3}} }}</pre> | style="padding-left: 2.5em" | {{TOC|subtoc |title= |content= * 1 {{Link|#Title 1}} * 2 {{Link|#Title 2}} * 3 {{Link|#Title 3}} }} |} <!-- {| class="wikitable" style="width: 100%" |+ Examples ! Code ! Result |- | <nowiki>{{TOC}}</nowiki> | {{TOC}} |- | <nowiki>{{TOC|test}}</nowiki> | {{TOC|test}} |- | <nowiki>{{TOC|abc}}</nowiki> | {{TOC|abc}} |- | <nowiki>{{TOC|horizontal}}</nowiki> | {{TOC|horizontal}} |- | <nowiki>{{TOC|side}}</nowiki> | {{TOC|side}} |} -->

[[Category:Templates|{{uc:{{PAGENAME}}}}]]</noinclude>
gf4a2iy0bz6l4f096dqc7oi3skzozlv

# Template:Link/Internal

10
34477
369839
369834
2024-10-16T13:44:44Z
Lou Montana
10739
Fix link text
369839
wikitext
text/x-wiki
<includeonly>{{#if: {{{link|}}} | {{#ifeq: {{#pos:{{Trim|{{{link}}}}}|Category:}}<!-- with or without colon --> | | {{#ifeq: {{#pos:{{Trim|{{{link}}}}}|#}} | | {{#ifeq: {{NAMESPACENUMBER}} | {{NAMESPACENUMBER:{{{link}}}}} | [[{{{link}}}{{#if:{{{text|}}}|{{!}}{{{text}}}|{{#ifeq: {{NAMESPACENUMBER}} | {{NAMESPACENUMBER:{{{link}}}}} | {{!}}<!-- no space here or the link's text will start with it! -->{{PAGENAME:{{{link}}}}}}}}}]] | [[{{{link}}}{{#if:{{{text|}}}|{{!}}{{{text}}}}}]] }} | {{Link/Hash|{{{link}}}|{{{text|}}}}} }} | {{#ifeq: {{#pos:{{{link}}}|Category:}} | 0 | [[:{{{link}}} | {{#if:{{{text|}}}|{{{text}}}|{{PAGENAME:{{{link}}}}} Category}}]] | [[{{{link}}} | {{#if:{{{text|}}}|{{{text}}}|{{PAGENAME:{{{link}}}}} Category}}]]}} }} | -no link provided-{{TemplateCase||[[Category:Link template usage error]]}} }}</includeonly><noinclude> {{Doc/Template |descr= This template creates an internal link (within the BIKI). It uses {{Template|Link/Hash}}.<br> If ''text'' is not provided: * if ''link''<nowiki/>'s namespace is identical to the current page, only the page name is used as text * otherwise, the full namespace:pagename is used

|param1= link |descr1= the internal link

|param2= text |descr2= (Optional) the text to display

|example1= <nowiki>{{Link/Internal}}</nowiki> |result1= {{Link/Internal}}

|example2= <nowiki>{{Link/Internal|link= setDir}}</nowiki> |result2= {{Link/Internal|link= setDir}}

|example3= <nowiki>{{Link/Internal|text= setDir's page}}</nowiki> |result3= {{Link/Internal|text= setDir's page}}

|example4= <nowiki>{{Link/Internal|link= setDir|text= setDir's page}}</nowiki> |result4= {{Link/Internal|link= setDir|text= setDir's page}}

|example5= <nowiki>{{Link/Internal|link= setDir#Example 1}}</nowiki> |result5= {{Link/Internal|link= setDir#Example 1}}

|example6= <nowiki/> <nowiki>* {{Link/Internal|link= :Category:Scripting Commands}}</nowiki><br> <nowiki>* {{Link/Internal|link= Category:Scripting Commands}}</nowiki><br> <nowiki>* {{Link/Internal|link= :Category:Scripting Commands|text= All Commands}}</nowiki><br> <nowiki>* {{Link/Internal|link= Category:Scripting Commands|text= All Commands}}</nowiki><br> <nowiki>* {{Link/Internal|link= Category:Arma 3: Scripting Commands}}</nowiki><br> <nowiki>* {{Link/Internal|link= Category:Arma 3: Scripting Commands |text=}}</nowiki><br> <nowiki>* {{Link/Internal|link= :Category:Arma 3: Scripting Commands |text=}}</nowiki><br> <nowiki>* {{Link/Internal|link= Category:Arma 3: Scripting Commands |text= A3's commands}}</nowiki> |result6= <nowiki/> * {{Link/Internal|link= :Category:Scripting Commands}} * {{Link/Internal|link= Category:Scripting Commands}} * {{Link/Internal|link= :Category:Scripting Commands|text= All Commands}} * {{Link/Internal|link= Category:Scripting Commands|text= All Commands}} * {{Link/Internal|link= Category:Arma 3: Scripting Commands}} * {{Link/Internal|link= Category:Arma 3: Scripting Commands |text= }} * {{Link/Internal|link= Category:Arma 3: Scripting Commands |text= A3's commands}} * {{Link/Internal|link= :Category:Arma 3: Scripting Commands |text= A3's commands}}

|example7= <nowiki>* {{Link/Internal|link= DayZ:Diag Menu}}</nowiki><br><nowiki>* {{Link/Internal|link= Template:Link}}</nowiki><br><nowiki>* {{Link/Internal|link= Template:Link#Usage}}</nowiki> |result7= <nowiki/> * {{Link/Internal|link= DayZ:Diag Menu}} * {{Link/Internal|link= Template:Link}} * {{Link/Internal|link= Template:Link#Usage}} }}</noinclude>
c3ttwol2iyjfd1clykxblu8qui9zv7k

# Template:armaR

10
32406
322491
321514
2022-06-13T10:47:43Z
Lou Montana
10739
Some wiki formatting
322491
wikitext
text/x-wiki
<includeonly>{{Name|armaR}}</includeonly><noinclude>{{Doc/Template |descr= Returns {{hl|{{armaR}}}}. |example1= <nowiki>{{armaR}}</nowiki> |result1= {{armaR}} }}</noinclude>
h9260cva88nd3p4779gardo0c0nbipj

# Template:Concat

10
32412
321526
2022-05-17T19:15:58Z
Lou Montana
10739
Template creation
321526
wikitext
text/x-wiki
<includeonly>{{#if: {{{2|}}} | {{{2}}}{{#if: {{{3|}}} | {{{1|}}}{{{3}}}{{#if: {{{4|}}} | {{{1|}}}{{{4}}}{{#if: {{{5|}}} | {{{1|}}}{{{5}}}{{#if: {{{6|}}} | {{{1|}}}{{{6}}}{{#if: {{{7|}}} | {{{1|}}}{{{7}}}{{#if: {{{8|}}} | {{{1|}}}{{{8}}}{{#if: {{{9|}}} | {{{1|}}}{{{9}}}{{#if: {{{10|}}} | {{{1|}}}{{{10}}} }} }} }} }} }} }} }} }} | -no text provided- }}</includeonly><noinclude>{{Doc/Template |descr= Concatenates (joins) strings together. |param1= separator |descr1= string element to place between strings |param2= string# |descr2= other parameters are strings to be joined - max 10 elements |example1= <nowiki>{{Concat}}</nowiki> |example2= <nowiki>{{Concat|}}</nowiki> |example3= <nowiki>{{Concat||}}</nowiki> |example4= <nowiki>{{Concat|-}}</nowiki> |example5= <nowiki>{{Concat|-|A}}</nowiki> |example6= <nowiki>{{Concat||A|B|C}}</nowiki> |example7= <nowiki>{{Concat|-|A|B|C}}</nowiki> |result1= {{Concat}} |result2= {{Concat|}} |result3= {{Concat||}} |result4= {{Concat|-}} |result5= {{Concat|-|A}} |result6= {{Concat||A|B|C}} |result7= {{Concat|-|A|B|C}} }}</noinclude>
qsxd7xc2wrv1yxkmtn7pvlw5hdo1dpa

# Template:Icon

10
27088
376053
376050
2025-07-23T10:53:45Z
R3vo
10479
added SPEX icon
376053
wikitext
text/x-wiki
<includeonly>{{#switch: {{#replace:{{lc:{{{1|}}}}}|<nowiki> </nowiki>|_}} <!-- BOHEMIA INTERACTIVE --> | bi | bohemiainteractive = [[File:bi symbol black.png|{{{2|48}}}px|link={{{link|{{Name|bi}}}}}]] | bi_alt | bohemiainteractive_alt = [[File:bi symbol white.png|{{{2|48}}}px|link={{{link|{{Name|bi}}}}}]] <!-- OPERATION FLASHPOINT --> | ofp | cwa | arma0 = [[File:Logo_A0.png|{{{2|48}}}px|link={{{link|Category:{{Name|ofp|cat}} {{!}} {{ofp}}}}}]] | ofpr = [[File:ofpr version.gif|{{{2|48}}}px|link={{{link|{{Name|ofpr}}}}}]] | ofpe = [[File:ofpe logo.png|{{{2|48}}}px|link={{{link|Category:{{Name|ofpe|cat}} {{!}} {{Name|ofpe}}}}}]] <!-- ARMED ASSAULT --> | arma1 = [[File:Logo A1 black.png|{{{2|48}}}px|link={{{link|Category:{{Name|arma1|cat}} {{!}} {{arma1}}}}}]] | arma1_alt = [[File:Logo_A1.png|{{{2|48}}}px|link={{{link|Category:{{Name|arma1|cat}} {{!}} {{arma1}}}}}]] <!-- ARMA2 & OA --> | arma2 | a2 = [[File:Logo_A2.png|{{{2|48}}}px|link={{{link|Category:{{Name|arma2|cat}} {{!}} {{arma2}}}}}]] | arma2oa | oa | arrowhead | operation_arrowhead = [[File:A2 OA Logo.png|{{{2|48}}}px|link={{{link|Category:{{Name|arma2oa|cat}} {{!}} {{arma2oa}}}}}]] | arma2acr | acr = [[File:Logo_A2ACR.png|{{{2|48}}}px|link={{{link|Army of the Czech Republic {{!}} {{Name|arma2acr}}}}}]] | arma2baf | baf = [[File:Logo_A2BAF.png|{{{2|48}}}px|link={{{link|Arma 2: British Armed Forces {{!}} {{Name|arma2baf}}}}}]] | arma2pmc | pmc = [[File:Logo_A2PMC.png|{{{2|48}}}px|link={{{link|Arma 2: Private Military Company {{!}} {{Name|arma2pmc}}}}}]] <!-- ARMA3 - TODO: remove non-arma3prefixed shortcuts (and search & replace usages through the wiki) --> | a3 | arma3 = [[File:Arma 3 logo black.png|{{{2|48}}}px|link={{{link|Category:{{Name|arma3|cat}} {{!}} {{arma3}}}}}]] | arma3zeus | curator | zeus = [[File:arma3_curator_eye.png|{{{2|48}}}px|link={{{link|Arma 3 Zeus}}}]] | arma3karts | kart | karts = [[File:karts_icon_ca.png|{{{2|48}}}px|link={{{link|Arma 3 Karts}}}]] | arma3helicopters | heli | helicopter | helicopters = [[File:heli_icon_ca.png|{{{2|48}}}px|link={{{link|Arma 3 Helicopters}}}]] | arma3marksmen | mark | marks | marksmen = [[File:mark_icon_ca.png|{{{2|48}}}px|link={{{link|Arma 3 Marksmen}}}]] | arma3marksmen_alt | mark_alt = [[File:arma3 mark logoOver ca.png|{{{2|48}}}px|link={{{link|Arma 3 Marksmen}}}]] | arma3eden = [[File:edenEditor logo.png|{{{2|48}}}px|link={{{link|Category:Eden Editor {{!}} Eden Editor}}}]] | arma3apex | expansion | apex = [[File:apex_icon_ca.png|{{{2|48}}}px|link={{{link|Arma 3 Apex}}}]] | arma3jets | jets = [[File:jets_icon_ca.png|{{{2|48}}}px|link={{{link|Arma 3 Jets}}}]] | arma3malden | malden = [[File:malden_icon_ca.png|{{{2|48}}}px|link={{{link|Arma 3 Malden}}}]] | arma3lawsofwar | arma3low | orange | low | laws_of_war = [[File:orange_icon_ca.png|{{{2|48}}}px|link={{{link|Arma 3 Laws of War}}}]] | arma3tacops | tacop | tacops | tac-op | tac-ops = [[File:tacops_icon_ca.png|{{{2|48}}}px|link={{{link|Arma 3 Tac-Ops Mission Pack}}}]] | arma3tanks | tank | tanks = [[File:tank_icon_ca.png|{{{2|48}}}px|link={{{link|Arma 3 Tanks}}}]] | arma3contact | enoch | contact | arma3contact = [[File:enoch_icon_ca.png|{{{2|48}}}px|link={{{link|Arma 3 Contact}}}]] | arma3artofwar | aow | artofwar = [[File:aow_icon_ca.png|{{{2|48}}}px|link={{{link|Arma 3 Art of War}}}]] | oldman | arma3oldman = [[File:arma3apex oldman logo.png|{{{2|48}}}px|link={{{link|Arma 3 Apex: Old Man}}}]] | oldman_alt | arma3oldman_alt = [[File:arma3apex oldman logo simplyfied white.png|{{{2|48}}}px|link={{{link|Arma 3 Apex: Old Man}}}]] <!-- ARMA3 - CDLCs) --> | arma3spe | spe = [[File:arma3 spe logo ca.png|{{{2|48}}}px|link={{{link|Spearhead 1944}}}]] | arma3spex| spex = [[File:arma3 spex logo ca.png|{{{2|48}}}px|link={{{link|SPEX - Spearhead Extended}}}]] <!-- ARGO --> | argo = [[File:argo-logo.png|{{{2|48}}}px|link={{{link|Category:{{Name|argo|cat}} {{!}} {{Name|argo}}}}}]] <!-- ARMA REFORGER --> | armar = [[File:armareforger-symbol_black.png|{{{2|48}}}px|link={{{link|Category:{{Name|armaR|cat}} {{!}} {{armaR}}}}}]] | armar_alt = [[File:armareforger-symbol_white.png|{{{2|48}}}px|link={{{link|Category:{{Name|armaR|cat}} {{!}} {{armaR}}}}}]] <!-- ARMA 4 --> | arma4 = [[File:arma4-symbol_black.png|{{{2|48}}}px|link={{{link|Category:{{Name|arma4|cat}} {{!}} {{arma4}}}}}]] | arma4_alt = [[File:arma4-symbol_white.png|{{{2|48}}}px|link={{{link|Category:{{Name|arma4|cat}} {{!}} {{arma4}}}}}]] <!-- TAKE ON --> | tkoh = [[File:tkoh_logo_small.png|{{{2|48}}}px|link={{{link|Category:{{Name|tkoh|cat}} {{!}} {{tkoh}}}}}]] | tkoh_alt = [[File:Logo TakOH_full.png|{{{2|48}}}px|link={{{link|Category:{{Name|tkoh|cat}} {{!}} {{tkoh}}}}}]] | tkom = [[File:tkom_logo_small_v2.png|{{{2|48}}}px|link={{{link|Category:{{Name|tkom|cat}} {{!}} {{tkom}}}}}]] | tkom_alt = [[File:tkom_logo.png|{{{2|48}}}px|link={{{link|Category:{{Name|tkom|cat}} {{!}} {{tkom}}}}}]] <!-- OTHER GAMES --> | cc | carriercommand | carrier_command = [[File:CC_Logo.png|{{{2|48}}}px|link={{{link|Category:{{Name|carriercommand|cat}} {{!}} Carrier Command: Gaea Mission}}}]] | dayz = [[File:dayzlogoinv.png|{{{2|48}}}px|link={{{link|Category:{{Name|dayz|cat}} {{!}} {{dayz}}}}}]] | dayz_alt = [[File:dayz_logo_white.png|{{{2|48}}}px|link={{{link|Category:{{Name|dayz|cat}} {{!}} {{dayz}}}}}]] | silica= [[File:silica_logo_blue_800x200.png|{{{2|48}}}px|link={{{link|Category:{{Name|silica|cat}} {{!}} {{silica}}}}}]] | vigor = [[File:vigor_logo.png|{{{2|48}}}px|link={{{link|Category:{{Name|vigor|cat}} {{!}} {{vigor}}}}}]] | ylands = [[File:Ylands_3D_Logo.png|{{{2|48}}}px|link={{{link|Category:{{Name|ylands|cat}} {{!}} {{ylands}}}}}]] <!-- TIMELINE --> | aan = [[File:Logo_TVAAN.png|{{{2|48}}}px|link={{{link|http://aan.moricky.com {{!}} AAN}}}]] | person = [[File:Icon_Person.png|{{{2|48}}}px | Person]] | real = [[File:Icon_History.png|{{{2|48}}}px | Historical event]] <!-- MULTIPLAYER DEFINITIONS --> | globalargument = {{Icon2|global|argument|darkorange; background: linear-gradient(to top, #D00, #DD0); -webkit-background-clip: text; background-clip: text; color: transparent|link={{#if:{{{link|}}}|{{{link}}}|Multiplayer Scripting#Locality}}|size={{#expr:{{{2|48}}}/32}}}} | localargument = {{Icon2|local|argument|blue; background: linear-gradient(to top, #00D, #0DD); -webkit-background-clip: text; background-clip: text; color: transparent|link={{#if:{{{link|}}}|{{{link}}}|Multiplayer Scripting#Locality}}|size={{#expr:{{{2|48}}}/32}}}} | globaleffect = {{Icon2|global|effect|darkorange; background: linear-gradient(to top, #D00, #DD0); -webkit-background-clip: text; background-clip: text; color: transparent|link={{#if:{{{link|}}}|{{{link}}}|Multiplayer Scripting#Locality}}|size={{#expr:{{{2|48}}}/32}}}} | localeffect = {{Icon2|local|effect|blue; background: linear-gradient(to top, #00D, #0DD); -webkit-background-clip: text; background-clip: text; color: transparent|link={{#if:{{{link|}}}|{{{link}}}|Multiplayer Scripting#Locality}}|size={{#expr:{{{2|48}}}/32}}}} | serverexec = {{Icon2|server|execution|green; background: linear-gradient(to top, #080 25%, #8F8); -webkit-background-clip: text; background-clip: text; color: transparent|link={{#if:{{{link|}}}|{{{link}}}|Multiplayer_Scripting#Locality}}|size={{#expr:{{{2|48}}}/32}}}} <!-- OTHERS --> | afm = [[File:BIS_Helicopter_DLC_Icon_v2.png|{{{2|48}}}px|link={{{link|Arma 3: Advanced Helicopter Flight Model {{!}} Advanced Helicopter Flight Model}}}]] <!-- CONTROLS --> | mousel = [[File:mouse-button-left.png|{{{2|32}}}px|link=|Left Mouse Button]] | mousel2 = [[File:mouse-button-left-double.png|{{{2|32}}}px|link=|Double Left Mouse Button]] | mousem = [[File:mouse-button-middle.png|{{{2|32}}}px|link=|Middle Mouse Button]] | mousesw = [[File:mouse-button-scrollwheel.png|{{{2|32}}}px|link=|Mouse Scrollwheel]] | mouseswu = [[File:mouse-button-scrollwheel-up.png|{{{2|32}}}px|link=|Mouse Scrollwheel Up]] | mouseswd = [[File:mouse-button-scrollwheel-down.png|{{{2|32}}}px|link=|Mouse Scrollwheel Down]] | mouse | mousen = [[File:mouse-button-none.png|{{{2|32}}}px|link=|Mouse]] | mouser = [[File:mouse-button-right.png|{{{2|32}}}px|link=|Right Mouse Button]] | gamepad | controller = <span class="promptfont" style="font-size: {{#expr:{{{2|48}}}*.75}}px">␼</span> | keyboard = <span class="promptfont" style="font-size: {{#expr:{{{2|48}}}*.75}}px">␽</span> | kbm = <span class="promptfont" style="font-size: {{#expr:{{{2|48}}}*.75}}px">␿</span> <!-- WIKI --> | disamb = [[File:Disambig.png|{{{2|24}}}px|link={{{link|}}}|Disambiguation]] | unchecked = [[File:Ico_none.png|{{{2|24}}}px|link={{{link|}}}|Unchecked]] | checked = [[File:Ico_ok.png|{{{2|24}}}px|link={{{link|}}}|Checked]] | warning = [[File:Ico_warning.png|{{{2|24}}}px|link={{{link|}}}|Warning]] | unknown = [[File:Ico_unknown.png|{{{2|24}}}px|link={{{link|}}}|Unknown]] <!-- MISC --> | steam = [[File:Steam icon logo.png|{{{2|32}}}px|link=Steam]] | xbox = <span class="promptfont" style="font-size: {{#expr:{{{2|48}}}*.75}}px"></span> | playstation = <span class="promptfont" style="font-size: {{#expr:{{{2|48}}}*.75}}px"></span> | switch = <span class="promptfont" style="font-size: {{#expr:{{{2|48}}}*.75}}px"></span> <!-- DEFAULT --> | = -no [[Template:Icon|parameter]] defined!-{{TemplateCase||[[Category:Icon template usage error]]}} | #default = -wrong [[Template:Icon|parameter]] ("{{{1}}}") defined!-{{TemplateCase||[[Category:Icon template usage error]]}} }}</includeonly><noinclude>{{Icon/doc}}</noinclude>
7yamf3ip08pn0uakrf7szkoe5cxem72

# Template:arma

10
4115
322493
245439
2022-06-13T10:48:31Z
Lou Montana
10739
Some wiki formatting
322493
wikitext
text/x-wiki
<includeonly>{{Name|arma}}</includeonly><noinclude>{{Doc/Template |descr= Returns {{hl|{{arma}}}}. |example1= <nowiki>{{arma}}</nowiki> |result1= {{arma}} }}</noinclude>
b7nex0kpmr2otww0alhuciut0yjatu3

# Template:GVI

10
15261
376893
376595
2025-12-20T14:55:30Z
Lou Montana
10739
Add perf branch support
376893
wikitext
text/x-wiki
<includeonly>{{#if:{{{1|}}} | <span class="gvi2 gvi-{{Name|{{{1|}}}|id}}{{#switch:{{lc:{{{1}}}}} |arma3= {{#if:{{#pos:{{{2|}}}|.}} | {{#ifexpr:{{{2}}} < 0.7|<nowiki/> gvi-alpha}} {{#ifexpr:{{{2}}} >= 0.7 and {{{2}}} < 1|<nowiki/> gvi-beta}} {{#ifexpr:{{{2}}} > 2.20|<nowiki/> gvi-dev}} <!-- Arma 3 latest stable version set here --> {{#if:{{#pos:{{lc:{{{branch|}}}{{{2|}}}}}|dev}}|<nowiki/> gvi-dev}} {{#if:{{#pos:{{lc:{{{branch|}}}{{{2|}}}}}|diag}}|<nowiki/> gvi-diag}} {{#if:{{#pos:{{lc:{{{branch|}}}{{{2|}}}}}|perf}}|<nowiki/> gvi-perf}} | <!-- not an x.yy version --> {{#if:{{#pos:{{lc:{{{branch|}}}{{{2|}}}}}|dev}}|<nowiki/> gvi-dev}} {{#if:{{#pos:{{lc:{{{branch|}}}{{{2|}}}}}|diag}}|<nowiki/> gvi-diag}} {{#if:{{#pos:{{lc:{{{branch|}}}{{{2|}}}}}|perf}}|<nowiki/> gvi-perf}} }} |armar= {{#if:{{#pos:{{{2|}}}|.}} | {{#ifeq:{{#sub:{{{2|}}}|0|2}}|0. | <nowiki/> gvi-alpha | {{#ifexpr: {{#explode:{{{2|}}}|.|0}} > 1 <!-- Arma Reforger latest stable version set here --> or {{#explode:{{{2|}}}|.|1}} > 6 | <nowiki/> gvi-dev}} }} }} |arma4= <nowiki/> gvi-alpha }}"{{#if:{{{size|}}}|<nowiki/> style="font-size: {{#ifexpr:({{{size}}}*0.5+0.5)*12<24|{{#expr:({{{size}}}*0.5+0.5)*12}}|24}}px; height: {{#expr:{{{size}}}*32}}px; width: {{#expr:{{{size}}}*32}}px" }}><!-- --><span class="icon">{{Icon|{{Name|{{{1}}}|id}}|{{#if:{{{size|}}}|{{#expr:floor({{{size}}}*32-2)}}|30}}|link={{#switch:{{lc:{{{1}}}}} |armar |arma4= :Category:{{Name|{{{1}}}}}/Version {{{2|1.0.0}}} |#default= :Category:Introduced with {{Name|{{{1}}}}} version {{lc:{{{2|1.00}}}}} }}}}</span><!-- --><span class="version"{{#ifexpr:{{#len:{{{2|}}}}} > 4|<nowiki/> style="font-size: 0.9em"}}>{{#switch:{{lc:{{{1}}}}} |armar |arma4= {{Link|:Category:{{Name|{{{1}}}}}/Version {{{2|1.0.0}}}|{{{2|1.0.0}}}}} |#default= {{Link|:Category:Introduced with {{Name|{{{1}}}}} version {{lc:{{{2|}}}}}|{{#if:{{{2|}}}|{{uc:{{{2}}}}}|?}}}} }}</span><!-- --></span> | -no game provided- {{TemplateCase||[[Category:GVI template usage error]]}} }}</includeonly><noinclude>{{GVI/doc}}</noinclude>
t0no6wpten1g3lvjgia21x5wbddhl9j

# Template:Clear

10
12614
352908
154252
2024-03-03T23:57:36Z
Lou Montana
10739
Add side option + examples using doc template
352908
wikitext
text/x-wiki
<includeonly><div style="clear:{{#switch:{{{1|}}}|left=left|right=right|#default=both}}"></div></includeonly><noinclude>{{Doc/Template |descr= Adds an invisible HTML object to clear CSS float style.

Code: <syntaxhighlight lang="html"> <div style="clear:{{#switch:{{{1|}}}|left=left|right=|right|=both}}"></div> </syntaxhighlight>

|param1= alignment |descr1= (Optional, default {{hl|both}}) float clearing; can be {{hl|left}}, {{hl|right}} or {{hl|both}}. |example1= <syntaxhighlight lang="html+handlebars"> <div style="float: left; background-color: #5F5">LEFT</div> <div style="float: right; background-color: #F55; height: 3em">RIGHT</div>

<div style="background-color: #FD5">Cleared</div> </syntaxhighlight> <syntaxhighlight lang="html+handlebars"> <div style="float: left; background-color: #5F5">LEFT</div> <div style="float: right; background-color: #F55; height: 3em">RIGHT</div> {{Clear}} <div style="background-color: #FD5">Cleared</div> </syntaxhighlight> |result1= <div style="float: left; background-color: #5F5">LEFT</div> <div style="float: right; background-color: #F55; height: 3em">RIGHT</div>

<div style="background-color: #FD5">Cleared</div> <br> <div style="min-width: 15em"><!-- only for presentation --></div> <div style="float: left; background-color: #5F5">LEFT</div> <div style="float: right; background-color: #F55; height: 3em">RIGHT</div> {{Clear}} <div style="background-color: #FD5">Cleared</div>

|example2= <syntaxhighlight lang="html+handlebars"> <div style="float: left; background-color: #5F5">LEFT</div> <div style="float: right; background-color: #F55; height: 3em">RIGHT</div> {{Clear|ohhimark}} <div style="background-color: #FD5">Cleared</div> </syntaxhighlight> |result2= <div style="float: left; background-color: #5F5">LEFT</div> <div style="float: right; background-color: #F55; height: 3em">RIGHT</div> {{Clear|ohhimark}} <div style="background-color: #FD5">Cleared</div>

|example3= <syntaxhighlight lang="html+handlebars"> <div style="float: left; background-color: #5F5">LEFT</div> <div style="float: right; background-color: #F55; height: 3em">RIGHT</div> {{Clear|both}} <div style="background-color: #FD5">Cleared</div> </syntaxhighlight> |result3= <div style="float: left; background-color: #5F5">LEFT</div> <div style="float: right; background-color: #F55; height: 3em">RIGHT</div> {{Clear|both}} <div style="background-color: #FD5">Cleared</div>

|example4= <syntaxhighlight lang="html+handlebars"> <div style="float: left; background-color: #5F5">LEFT</div> <div style="float: right; background-color: #F55; height: 3em">RIGHT</div> {{Clear|left}} <div style="background-color: #FD5">Cleared</div> </syntaxhighlight> |result4= <div style="float: left; background-color: #5F5">LEFT</div> <div style="float: right; background-color: #F55; height: 3em">RIGHT</div> {{Clear|left}} <div style="background-color: #FD5">Cleared</div>

|example5= <syntaxhighlight lang="html+handlebars"> <div style="float: left; background-color: #5F5; height: 3em">LEFT</div> <div style="float: right; background-color: #F55">RIGHT</div> {{Clear|right}} <div style="background-color: #FD5">Cleared</div> </syntaxhighlight> |result5= <div style="float: left; background-color: #5F5; height: 3em">LEFT</div> <div style="float: right; background-color: #F55">RIGHT</div> {{Clear|right}} <div style="background-color: #FD5">Cleared</div> }}</noinclude>
cnnq368qbjd74eutn5grgzfbh0q68ho

# Template:Youtube

10
17303
363889
363620
2024-04-24T11:36:14Z
Lou Montana
10739
Fix description
363889
wikitext
text/x-wiki
<includeonly>{{#if:{{{1|}}} | <div style="text-align: {{#switch:{{{3|}}}|right=right|center=center|left}}"><div class="thumbinner" style="width: {{{4|300}}}px; display: inline-block">{{#tag:youtube | {{{1}}} | height = {{#expr: ({{{4|300}}} * 9/16) round 0}} | width = {{{4|300}}} }}{{#if:{{{2|}}}|<div class="thumbcaption">{{{2}}}</div>}}</div></div> | -Youtube ID not defined- }}</includeonly><noinclude> Shows a {{Link|https://www.youtube.com|YouTube}} video.

== Usage == {{<nowiki/>Youtube|'''''videoID'''''|'''''caption'''''|'''''position'''''|'''''size'''''}} * videoID: the ID part of the URL. e.g '''a75eG8HG5Fk''' * caption: (optional) caption below the video * textAlign: (optional, default left) "left", "right" or "center" - does '''not''' use the {{Link|https://developer.mozilla.org/en-US/docs/Web/CSS/float|float}} property * size: (optional, default 300) width in pixels

{| class="wikitable" |+ Examples ! Code ! style="min-width: 500px" | Result |- | <nowiki>{{Youtube}}</nowiki> | {{Youtube}} |- | <nowiki>{{Youtube|a75eG8HG5Fk}}</nowiki> | {{Youtube|a75eG8HG5Fk}} |- | <nowiki>{{Youtube|UgXq6z6-644|{{arma2}} trailer}}</nowiki> | {{Youtube|UgXq6z6-644|{{arma2}} trailer}} |- | <nowiki>{{Youtube|M1YBZUxMX8g|{{arma3}} trailer|right}}</nowiki> | {{Youtube|M1YBZUxMX8g|{{arma3}} trailer|right}} |- | <nowiki>{{Youtube|EwAxJC9AR_A|{{Name|arma3apex}} trailer|center|400}}</nowiki> | {{Youtube|EwAxJC9AR_A|{{Name|arma3apex}} trailer|center|400}} |}

[[Category:Templates|{{uc:{{PAGENAME}}}}]]</noinclude>
s96pk0lfcao8juwhklokpsed6rymw2m

# Template:arma3

10
12124
322488
174383
2022-06-13T10:36:49Z
Lou Montana
10739
Some wiki formatting
322488
wikitext
text/x-wiki
<includeonly>{{Name|arma3}}</includeonly><noinclude>{{Doc/Template |descr= Returns {{hl|{{arma3}}}}. |example1= <nowiki>{{arma3}}</nowiki> |result1= {{arma3}} }}</noinclude>
pdpbdfvjwigejjz31mm8wm70tfm8yz9

# Template:tkoh

10
11047
322487
174607
2022-06-13T10:36:26Z
Lou Montana
10739
Some wiki formatting
322487
wikitext
text/x-wiki
<includeonly>{{Name|tkoh}}</includeonly><noinclude>{{Doc/Template |descr= Returns {{hl|{{tkoh}}}}. |example1= <nowiki>{{tkoh}}</nowiki> |result1= {{tkoh}} }}</noinclude>
88dqijo2cvyfzssl84s9nboc1oane9v

# Template:GameCategory/SortKey

10
27616
295912
173520
2021-11-16T09:33:38Z
Lou Montana
10739
Text replacement - "<tt>([^ =]+)<\/tt>" to "{{hl|$1}}"
295912
wikitext
text/x-wiki
<includeonly>{{#if:{{{2|}}} |{{#ifeq:{{Trim|{{uc:{{{2|}}}}}}}|{{uc:{{{1}}}}} |{{uc:{{{1}}}}} |{{Trim| {{#replace: {{#replace:{{uc:{{{2}}}}} |{{uc:{{{1}}}}}: | }} |{{uc:{{{1}}}}} | }} }} }} }}</includeonly><noinclude> Returns an uppercase category sort key for the provided page.

== Usage == {{<nowiki/>GameCategory/SortKey|'''''categoryName'''''|'''''pageName'''''}} * categoryName: the game's ''category'' name (see {{Template|Name}} - e.g {{hl|Arma 2}}, '''not''' {{hl|arma2}}) * pageName: the page name from which the key is taken

{| class="wikitable" |+ Examples ! Code ! Result |- | <nowiki>{{GameCategory/SortKey}}</nowiki> | {{GameCategory/SortKey}} |- | <nowiki>{{GameCategory/SortKey|Arma 2}}</nowiki> | {{GameCategory/SortKey|Arma 2}} |- | <nowiki>{{GameCategory/SortKey|Arma 2|Arma 2}}</nowiki> | {{GameCategory/SortKey|Arma 2|Arma 2}} |- | <nowiki>{{GameCategory/SortKey|Arma 2|Arma 2: Editing}}</nowiki> | {{GameCategory/SortKey|Arma 2|Arma 2: Editing}} |- | <nowiki>{{GameCategory/SortKey|Arma 3|Arma 3 Editing}}</nowiki> | {{GameCategory/SortKey|Arma 3|Arma 3 Editing}} |}

[[Category:Templates|{{uc:{{PAGENAME}}}}]]</noinclude>
5cd4h20gu2qboc44y4guex9tg9wym1r

# Template:Columns

10
29512
373204
369885
2025-04-12T18:03:06Z
Lou Montana
10739
Add noresize wrapping
373204
wikitext
text/x-wiki
<includeonly>{{#if:{{{1|}}} | {{#if:{{{2|}}} | <div class="noresize">{{#if:{{{3|{{{expand|}}}}}}||<div>}}<div class="columns" style="columns: {{{1}}}{{#if:{{{3|{{{expand|}}}}}}||; display: inline-block}}">{{{2}}}</div>{{#if:{{{3|{{{expand|}}}}}}||</div>}}</div> | -no columns content defined-{{TemplateCase||[[Category:Columns template usage error]]}} }} | -no columns information defined-{{TemplateCase||[[Category:Columns template usage error]]}} }}</includeonly><noinclude>{{Doc/Template |descr= Creates CSS columns. It also adds the page to the [[:Category:Columns template usage error|Columns template usage error]] category on usage error.

|param1= colsInfo |descr1= {{hl|columns}} CSS attribute's definition - see {{Link|https://developer.mozilla.org/en-US/docs/Web/CSS/columns|columns}}, can be: ** desired columns number, e.g {{hl|4}} ** column width, e.g {{hl|12em}} ** a mix of the two, e.g {{hl|4 12em}} - in this case, columns number is the '''maximum''' columns number

|param2= content |descr2= to be split in columns, usually a list

|param3= expand |descr3= named parameter. makes the columns take the whole width

|example1= <syntaxhighlight lang="handlebars">{{Columns}}</syntaxhighlight> |result1= {{Columns}}

|example2= <syntaxhighlight lang="handlebars">{{Columns|3}}</syntaxhighlight> |result2= {{Columns|3}}

|example3= <syntaxhighlight lang="handlebars"> {{Columns|| * contentA * contentB * contentC * contentD }} </syntaxhighlight> |result3= {{Columns|| * contentA * contentB * contentC * contentD }}

|example4= <syntaxhighlight lang="handlebars"> {{Columns|2| * contentA * contentB * contentC * contentD }} </syntaxhighlight> |result4= {{Columns|2| * contentA * contentB * contentC * contentD }}

|example5= <syntaxhighlight lang="handlebars"> {{Columns|3| * contentA * contentB * contentC * contentD }} </syntaxhighlight> |result5= {{Columns|3| * contentA * contentB * contentC * contentD }}

|example6= <syntaxhighlight lang="handlebars"> {{Columns|4| * contentA * contentB * contentC * contentD }} </syntaxhighlight> |result6= {{Columns|4| * contentA * contentB * contentC * contentD }}

|example7= <syntaxhighlight lang="html+handlebars"> <div style="border: 1px solid red; width: 50em"> Above {{Columns|3| * contentA * contentB * contentC * contentD |expand= y }} Below </div> </syntaxhighlight> |result7= <div style="border: 1px solid red; width: 50em"> Above {{Columns|3| * contentA * contentB * contentC * contentD |expand= y }} Below </div>

|example8= <syntaxhighlight lang="html+handlebars"> <div style="border: 1px solid red; width: 50em"> {{Columns|3 10em| * contentA, which can totally do with a lipsum amongst other things, yes * contentB, which can totally do with a lipsum amongst other things, too * contentC, which can totally do with a lipsum amongst other things, too * contentD, which can totally do with a lipsum amongst other things, too * contentE, which can totally do with a lipsum amongst other things, too * contentF, which can totally do with a lipsum amongst other things, too * contentG, which can totally do with a lipsum amongst other things, too * contentH, which can totally do with a lipsum amongst other things, too * contentI, which can totally do with a lipsum amongst other things, too * contentJ, which can totally do with a lipsum amongst other things, too }} </div> </syntaxhighlight> |result8= <div style="border: 1px solid red; width: 50em"> {{Columns|3 10em| * contentA, which can totally do with a lipsum amongst other things, yes * contentB, which can totally do with a lipsum amongst other things, too * contentC, which can totally do with a lipsum amongst other things, too * contentD, which can totally do with a lipsum amongst other things, too * contentE, which can totally do with a lipsum amongst other things, too * contentF, which can totally do with a lipsum amongst other things, too * contentG, which can totally do with a lipsum amongst other things, too * contentH, which can totally do with a lipsum amongst other things, too * contentI, which can totally do with a lipsum amongst other things, too * contentJ, which can totally do with a lipsum amongst other things, too }} </div>

}}</noinclude>
2n1vg8bfbrcxc9ub7s5m430s78fyshv

# Template:Controls

10
16524
341718
336246
2023-06-20T06:47:21Z
Lou Montana
10739
Text replacement - "XBox" to "Xbox"
341718
wikitext
text/x-wiki
<includeonly>{{#switch:{{lc:{{{1}}}}} |xbox= {{#if:{{{2|}}} | {{Controls/Control|xbox|{{{2}}}}}{{#if:{{{3|}}}|&#32;+ {{Controls/Control|xbox|{{{3}}}}}{{#if:{{{4|}}}|&#32;+ {{Controls/Control|xbox|{{{4}}}}}{{#if:{{{5|}}}|&#32;+ {{Controls/Control|xbox|{{{5}}}}}}}}}}} | -no Xbox controls defined-{{TemplateCase||[[Category:Controls template usage error]]}} }} |playstation |playstation= {{#if:{{{2|}}} | {{Controls/Control|playstation|{{{2}}}}}{{#if:{{{3|}}}|&#32;+ {{Controls/Control|playstation|{{{3}}}}}{{#if:{{{4|}}}|&#32;+ {{Controls/Control|playstation|{{{4}}}}}{{#if:{{{5|}}}|&#32;+ {{Controls/Control|playstation|{{{5}}}}}}}}}}} | -no Playstation controls defined-{{TemplateCase||[[Category:Controls template usage error]]}} }} |#default= {{#if:{{{1|}}} | {{Controls/Control|{{{1}}}}}{{#if:{{{2|}}}|&#32;+ {{Controls/Control|{{{2}}}}}{{#if:{{{3|}}}|&#32;+ {{Controls/Control|{{{3}}}}}{{#if:{{{4|}}}|&#32;+ {{Controls/Control|{{{4}}}}}|}}|}}|}} |-no controls defined-{{TemplateCase||[[Category:Controls template usage error]]}} }} }}</includeonly><noinclude>{{Doc/Template |descr= Shows a key-styled keyboard shortcut and/or a mouse button. It also adds the page to the [[:Category:Controls template usage error|Controls template usage error]] category on usage error. * Mouse button can be (case-insensitive): ** mouseL or LMB ** mouseL2 or LMB2 ** mouseR or RMB ** mouseM or MMB ** mouseSW or MSW ** mouseSWU or MSWU ** mouseSWD or MSWD * Keyboard key can be anything - the first letter will be capitalised, see {{Template|Controls/Control}}.

|param1= ctrl1 |descr1= first control - if {{hl|xbox}} or {{hl|playstation}} (case-insensitive), all the following keys will be Xbox- or PlayStation-stylised (see {{Template|Controls/Control}})

|param2= ctrl2 |descr2= (Optional) second control

|param3= ctrl3 |descr3= (Optional) third control

|param4= ctrl4 |descr4= (Optional) fourth control

|param5= ctrl5 |descr5= (Optional) fourth console control

|example1= <nowiki>{{Controls}}</nowiki> |result1= {{Controls}}

|example2= <nowiki>{{Controls|Ctrl}}</nowiki> |result2= {{Controls|Ctrl}}

|example3= <nowiki>{{Controls|Ctrl|LMB}}</nowiki> |result3= {{Controls|Ctrl|LMB}}

|example4= <nowiki>{{Controls|Ctrl|Shift|T}}</nowiki> |result4= {{Controls|Ctrl|Shift|T}}

|example5= <nowiki>{{Controls|Ctrl|Alt|Shift|T}}</nowiki> |result5= {{Controls|Ctrl|Alt|Shift|T}}

|example6= <nowiki>{{Controls|Ctrl|Alt|Shift|T|U}}</nowiki> |result6= {{Controls|Ctrl|Alt|Shift|T|U}}

|example7= <nowiki/> <nowiki>{{Controls|Xbox|A|LT|start}}</nowiki><br> <nowiki>{{Controls|playstation|cross|L1|start}}</nowiki><br> <nowiki>{{Controls|padA|padLT|padStart}}</nowiki> |result7= <nowiki/> {{Controls|Xbox|A|LT|start}}<br> {{Controls|playstation|cross|L1|start}}<br> {{Controls|padA|padLT|padStart}} }}</noinclude>
ihk62rd8yrmper3ybzfsxbn2iv5azco

# Template:Controls/Control

10
32270
376919
376918
2025-12-28T02:22:36Z
Lou Montana
10739
Fix uppercasing first
376919
wikitext
text/x-wiki
<includeonly>{{#if:{{{1|}}} | {{#switch:{{lc:{{{1}}}}}

| mouse= {{Icon|mouse}} | lmb | mousel= {{Icon|mouseL}} | lmb2 | mousel2= {{Icon|mouseL2}} | mmb | mousem= {{Icon|mouseM}} | rmb | mouser= {{Icon|mouseR}} | msw | mousesw= {{Icon|mouseSW}} | mswu | mouseswu= {{Icon|mouseSWU}} | mswd | mouseswd= {{Icon|mouseSWD}}

| xbox= {{#switch:{{lc:{{{2}}}}} |up= <span class="control-gamepad">↟</span> |down= <span class="control-gamepad">↡</span> |left= <span class="control-gamepad">↞</span> |right= <span class="control-gamepad">↠</span>

|joymove= <span class="control-gamepad">⇳</span> |joyup= <span class="control-gamepad">⇈</span> |joyupright= <span class="control-gamepad">⇗</span> |joyright= <span class="control-gamepad">⇉</span> |joydownright= <span class="control-gamepad">⇘</span> |joydown= <span class="control-gamepad">⇊</span> |joydownleft= <span class="control-gamepad">⇙</span> |joyleft= <span class="control-gamepad">⇇</span> |joyupleft= <span class="control-gamepad">⇖</span> |joyupdown= <span class="control-gamepad">⇕</span> |joyleftright= <span class="control-gamepad">⇔</span>

|ljoymove= <span class="control-gamepad">⇱</span> |ljoyup= <span class="control-gamepad">↾</span> |ljoyright= <span class="control-gamepad">⇀</span> |ljoydown= <span class="control-gamepad">⇂</span> |ljoyleft= <span class="control-gamepad">↼</span> |ljoyupdown= <span class="control-gamepad">⇅</span> |ljoyleftright= <span class="control-gamepad">⇄</span>

|rjoymove= <span class="control-gamepad">⇲</span> |rjoyup= <span class="control-gamepad">↿</span> |rjoyright= <span class="control-gamepad">⇁</span> |rjoydown= <span class="control-gamepad">⇃</span> |rjoyleft= <span class="control-gamepad">↽</span> |rjoyupdown= <span class="control-gamepad">⇵</span> |rjoyleftright= <span class="control-gamepad">⇆</span>

|a= <span class="control-gamepad xbox-green">⇓</span> |b= <span class="control-gamepad xbox-red">⇒</span> |x= <span class="control-gamepad xbox-blue">⇐</span> |y= <span class="control-gamepad xbox-yellow">⇑</span>

|lb= <span class="control-gamepad">↘</span> |lt= <span class="control-gamepad">↖</span> |lsb= <span class="control-gamepad">↺</span> |rb= <span class="control-gamepad">↙</span> |rt= <span class="control-gamepad">↗</span> |rsb= <span class="control-gamepad">↻</span> |back |share= <span class="control-gamepad">⇺</span> |start= <span class="control-gamepad">⇻</span> |#default= -wrong Xbox key defined-{{TemplateCase||[[Category:Controls template usage error]]}} }} | playstation= {{#switch:{{lc:{{{2}}}}} |up= <span class="control-gamepad">↟</span> |down= <span class="control-gamepad">↡</span> |left= <span class="control-gamepad">↞</span> |right= <span class="control-gamepad">↠</span>

|joymove= <span class="control-gamepad">⇳</span> |joyup= <span class="control-gamepad">⇈</span> |joyupright= <span class="control-gamepad">⇗</span> |joyright= <span class="control-gamepad">⇉</span> |joydownright= <span class="control-gamepad">⇘</span> |joydown= <span class="control-gamepad">⇊</span> |joydownleft= <span class="control-gamepad">⇙</span> |joyleft= <span class="control-gamepad">⇇</span> |joyupleft= <span class="control-gamepad">⇖</span> |joyupdown= <span class="control-gamepad">⇕</span> |joyleftright= <span class="control-gamepad">⇔</span>

|ljoymove= <span class="control-gamepad">⇱</span> |ljoyup= <span class="control-gamepad">↾</span> |ljoyright= <span class="control-gamepad">⇀</span> |ljoydown= <span class="control-gamepad">⇂</span> |ljoyleft= <span class="control-gamepad">↼</span> |ljoyupdown= <span class="control-gamepad">⇅</span> |ljoyleftright= <span class="control-gamepad">⇄</span>

|rjoymove= <span class="control-gamepad">⇲</span> |rjoyup= <span class="control-gamepad">↿</span> |rjoyright= <span class="control-gamepad">⇁</span> |rjoydown= <span class="control-gamepad">⇃</span> |rjoyleft= <span class="control-gamepad">↽</span> |rjoyupdown= <span class="control-gamepad">⇵</span> |rjoyleftright= <span class="control-gamepad">⇆</span>

|a |cross= <span class="control-gamepad playstation-blue">⇣</span> |b |circle= <span class="control-gamepad playstation-red">⇢</span> |x |square= <span class="control-gamepad playstation-pink">⇠</span> |y |triangle= <span class="control-gamepad playstation-green">⇡</span> |lb |l1= <span class="control-gamepad">↰</span> |lt |l2= <span class="control-gamepad">↲</span> |lsb |l3= <span class="control-gamepad">↺</span> |rb |r1= <span class="control-gamepad">↱</span> |rt |r2= <span class="control-gamepad">↳</span> |rsb |r3= <span class="control-gamepad">↻</span> |back |select= <span class="control-gamepad">⇷</span> |options= <span class="control-gamepad">⇨</span> |touchpad= <span class="control-gamepad">⇧</span> |start= <span class="control-gamepad">⇸</span> |share= <span class="control-gamepad">⇦</span> |#default= -wrong PlayStation key defined-{{TemplateCase||[[Category:Controls template usage error]]}} }}

| padup | paddown | padleft | padright | padjoymove | padjoyup | padjoyupright | padjoyright | padjoydownright | padjoydown | padjoydownleft | padjoyleft | padjoyupleft | padjoyupdown | padjoyleftright | padljoymove | padljoyup | padljoyright | padljoydown | padljoyleft | padljoyupdown | padljoyleftright | padrjoymove | padrjoyup | padrjoyright | padrjoydown | padrjoyleft | padrjoyupdown | padrjoyleftright | pada | padb | padx | pady | padlb | padlt | padlsb | padrb | padrt | padrsb | padback | padstart= <span class="control-gamepad">{{#switch:{{lc:{{{1}}}}} |padup= ↟ |paddown= ↡ |padleft= ↞ |padright= ↠

|padjoymove = ⇳ |padjoyup = ⇈ |padjoyupright = ⇗ |padjoyright = ⇉ |padjoydownright = ⇘ |padjoydown = ⇊ |padjoydownleft = ⇙ |padjoyleft = ⇇ |padjoyupleft = ⇖ |padjoyupdown = ⇕ |padjoyleftright = ⇔

|padljoymove = ⇱ |padljoyup = ↾ |padljoyright = ⇀ |padljoydown = ⇂ |padljoyleft = ↼ |padljoyupdown = ⇅ |padljoyleftright = ⇄

|padrjoymove = ⇲ |padrjoyup = ↿ |padrjoyright = ⇁ |padrjoydown = ⇃ |padrjoyleft = ↽ |padrjoyupdown = ⇵ |padrjoyleftright = ⇆

|pada= ↧ |padb= ↦ |padx= ↤ |pady= ↥ |padlb= ↜ |padlt= ↚ |padlsb= ↺ |padrb= ↝ |padrt= ↛ |padrsb= ↻ |padback= ⇺ |padstart= ⇻ |#default= {{uc:{{#sub:{{{1}}}|3}}}} }}</span>

| #default= <kbd>{{#switch:{{lc:{{{1}}}}} |escape= Esc |enter |return= Return &crarr; |delete= Del |backspace= &#10229; |up= &uarr; |down= &darr; |left= &larr; |right= &rarr; |pageup= &#8607; PgUp |pagedown= &#8609; PgDown |ctrl |control |lctrl= Ctrl |rctrl |rcontrol= RCtrl |alt |lalt= Alt |ralt= AltGr |shift |lshift= &#8679; Shift |rshift= RShift &#8679; |caps |capslock |caps lock= &#128274;CapsLock <!-- ideally use caps lock --> |tab |tabulation= &#8633; Tab |win |lwin |windows= &#8862; Win |rwin |rwindows= RWin &#8862; |num0= NUM 0 |num1= NUM 1 |num2= NUM 2 |num3= NUM 3 |num4= NUM 4 |num5= NUM 5 |num6= NUM 6 |num7= NUM 7 |num8= NUM 8 |num9= NUM 9 |num/= NUM / |num*= NUM * |num-= NUM - |num+= NUM + |num.= NUM . |numenter= NUM Enter &crarr; |#default= {{ucfirst:{{{1}}}}} }}</kbd> }} |-no key defined-{{TemplateCase||[[Category:Controls template usage error]]}} }}</includeonly><noinclude>{{Doc/Template |descr= Displays a keyboard key or a mouse icon — used by {{Template|Controls}}. It also adds the page to the [[:Category:Controls template usage error|Controls template usage error]] category on usage error. {{Feature|informative| Gamepad icons use '''PromptFont''', a very nice font made under the {{Link|https://scripts.sil.org/cms/scripts/page.php?id{{=}}OFL|SIL Open Font Licence}}.<br> Find it at {{Link|https://shinmera.github.io/promptfont/}}. }}

|param1= control |descr1= can be one of: ** mouse icon (case-insensitive): *** mouse *** mouseL or LMB *** mouseL2 or LMB2 *** mouseR or RMB *** mouseM or MMB *** mouseSW or MSW *** mouseSWU or MSWU *** mouseSWD or MSWD ** generic pad buttons: *** padUp / padDown / padLeft / padRight *** padJoyUp / padJoyUpRight / padJoyRight / padJoyDownRight / padJoyDown / padJoyDownLeft / padJoyLeft / padJoyUpLeft *** padLjoyUp / padLjoyUpRight / padLjoyRight / padLjoyDownRight / padLjoyDown / padLjoyDownLeft / padLjoyLeft / padLjoyUpLeft *** padRjoyUp / padRjoyUpRight / padRjoyRight / padRjoyDownRight / padRjoyDown / padRjoyDownLeft / padRjoyLeft / padRjoyUpLeft *** padA / padB / padX / padY *** padLB / padLT / padLSB *** padRB / padRT / padRSB *** padBack / padStart ** Xbox- && PlayStation-specific: *** joyUp / joyUpRight / joyRight / joyDownRight / joyDown / joyDownLeft / joyLeft / joyUpLeft *** LjoyUp / LjoyUpRight / LjoyRight / LjoyDownRight / LjoyDown / LjoyDownLeft / LjoyLeft / LjoyUpLeft *** RjoyUp / RjoyUpRight / RjoyRight / RjoyDownRight / RjoyDown / RjoyDownLeft / RjoyLeft / RjoyUpLeft ** Xbox-specific with {{hl|Xbox}} as first parameter: *** A / B / X / Y *** LB / LT / LSB *** RB / RT / RSB *** Back / Start ** PlayStation-specific with {{hl|PlayStation}} as first parameter: *** Cross / Circle / Square / Triangle (also supports A / B / X / Y) *** L1 / L2 / L3 (also supports LB / LT / LSB) *** R1 / R2 / R3 (also supports RB / RT / RSB) *** Select / Start (also supports Back) *** Options / Touchpad / Share ** pre-formatted key: *** escape / return / enter / delete / backspace *** up / down / left / right *** pageUp / pageDown *** ctrl / control / LCtrl *** RCtrl / RControl *** RAlt *** shift / LShift *** RShift *** caps lock / capslock / caps *** tab / tabulation *** LWin / Windows *** RWin / RWindows *** num0..9 / num/ / num* / num- / num+ / num. / numEnter ** anything else for a keyboard key - the first letter will be capitalised (e.g {{hl|abcdEf}} will become {{hl|AbcdEf}})

|example1= <nowiki>{{Controls/Control}}</nowiki> |result1= {{Controls/Control}}

|example2= <nowiki>{{Controls/Control|ctrl}}</nowiki> |result2= {{Controls/Control|ctrl}}

|example3= <nowiki>{{Controls/Control|Ctrl}}</nowiki> |result3= {{Controls/Control|Ctrl}}

|example4= <nowiki>{{Controls/Control|a}}</nowiki><br><nowiki>{{Controls/Control|abc}}</nowiki><br><nowiki>{{Controls/Control|abC}}</nowiki><br><nowiki>{{Controls/Control|ABC}}</nowiki> |result4= {{Controls/Control|a}}<br>{{Controls/Control|abc}}<br>{{Controls/Control|abC}}<br>{{Controls/Control|ABC}}

|example5= <nowiki>{{Controls/Control|mouse}}{{Controls/Control|LMB}}{{Controls/Control|LMB2}}{{Controls/Control|MMB}}{{Controls/Control|MSW}}{{Controls/Control|MSWU}}{{Controls/Control|MSWD}}{{Controls/Control|RMB}}</nowiki> |result5= {{Controls/Control|mouse}}{{Controls/Control|LMB}}{{Controls/Control|LMB2}}{{Controls/Control|MMB}}{{Controls/Control|MSW}}{{Controls/Control|MSWU}}{{Controls/Control|MSWD}}{{Controls/Control|RMB}}

|example6= <nowiki>{{Controls/Control|escape}}{{Controls/Control|return}}{{Controls/Control|enter}}{{Controls/Control|delete}}{{Controls/Control|backspace}}{{Controls/Control|up}}{{Controls/Control|down}}{{Controls/Control|left}}{{Controls/Control|right}}{{Controls/Control|pageup}}{{Controls/Control|pagedown}}</nowiki> |result6= {{Controls/Control|escape}}{{Controls/Control|return}}{{Controls/Control|enter}}{{Controls/Control|delete}}{{Controls/Control|backspace}}{{Controls/Control|up}}{{Controls/Control|down}}{{Controls/Control|left}}{{Controls/Control|right}}{{Controls/Control|pageup}}{{Controls/Control|pagedown}}

|example7= <nowiki>{{Controls/Control|control}}{{Controls/Control|lctrl}}{{Controls/Control|rctrl}}{{Controls/Control|rcontrol}}{{Controls/Control|ralt}}{{Controls/Control|shift}}{{Controls/Control|rshift}}{{Controls/Control|caps lock}}{{Controls/Control|tabulation}}{{Controls/Control|lwin}}{{Controls/Control|windows}}{{Controls/Control|rwin}}{{Controls/Control|rwindows}}</nowiki> |result7= {{Controls/Control|control}}{{Controls/Control|lctrl}}{{Controls/Control|rctrl}}{{Controls/Control|rcontrol}}{{Controls/Control|ralt}}{{Controls/Control|shift}}{{Controls/Control|rshift}}{{Controls/Control|caps lock}}{{Controls/Control|tabulation}}{{Controls/Control|lwin}}{{Controls/Control|windows}}{{Controls/Control|rwin}}{{Controls/Control|rwindows}}

|example8= <nowiki/> <nowiki>{{Controls/Control|num/}}{{Controls/Control|num*}}{{Controls/Control|num-}}{{Controls/Control|num+}}</nowiki><br> <nowiki>{{Controls/Control|num7}}{{Controls/Control|num8}}{{Controls/Control|num9}}</nowiki><br> <nowiki>{{Controls/Control|num4}}{{Controls/Control|num5}}{{Controls/Control|num6}}</nowiki><br> <nowiki>{{Controls/Control|num1}}{{Controls/Control|num2}}{{Controls/Control|num3}}</nowiki><br> <nowiki>{{Controls/Control|num0}}{{Controls/Control|num.}}{{Controls/Control|numenter}}</nowiki> |result8= <nowiki/> {{Controls/Control|num/}}{{Controls/Control|num*}}{{Controls/Control|num-}}{{Controls/Control|num+}}<br> {{Controls/Control|num7}}{{Controls/Control|num8}}{{Controls/Control|num9}}<br> {{Controls/Control|num4}}{{Controls/Control|num5}}{{Controls/Control|num6}}<br> {{Controls/Control|num1}}{{Controls/Control|num2}}{{Controls/Control|num3}}<br> {{Controls/Control|num0}}{{Controls/Control|num.}}{{Controls/Control|numenter}}

|example9= <nowiki/> <nowiki>{{Controls/Control|padUp}}{{Controls/Control|padDown}}{{Controls/Control|padLeft}}{{Controls/Control|padRight}} {{Controls/Control|padA}}{{Controls/Control|padB}}{{Controls/Control|padX}}{{Controls/Control|padY}} {{Controls/Control|padLB}}{{Controls/Control|padLT}}{{Controls/Control|padLSB}}{{Controls/Control|padRB}}{{Controls/Control|padRT}}{{Controls/Control|padRSB}} {{Controls/Control|padBack}}{{Controls/Control|padStart}}</nowiki><br>

<nowiki>{{Controls/Control|padjoymove}}{{Controls/Control|padjoyupdown}}{{Controls/Control|padjoyleftright}} {{Controls/Control|padjoyup}}{{Controls/Control|padjoyupright}}{{Controls/Control|padjoyright}}{{Controls/Control|padjoydownright}}{{Controls/Control|padjoydown}} {{Controls/Control|padjoydownleft}}{{Controls/Control|padjoyleft}}{{Controls/Control|padjoyupleft}}

{{Controls/Control|padljoymove}}{{Controls/Control|padljoyupdown}}{{Controls/Control|padljoyleftright}} {{Controls/Control|padljoyup}}{{Controls/Control|padljoyright}}{{Controls/Control|padljoydown}}{{Controls/Control|padljoyleft}}

{{Controls/Control|padrjoymove}}{{Controls/Control|padrjoyupdown}}{{Controls/Control|padrjoyleftright}} {{Controls/Control|padrjoyup}}{{Controls/Control|padrjoyright}}{{Controls/Control|padrjoydown}}{{Controls/Control|padrjoyleft}}</nowiki> |result9= <nowiki/> {{Controls/Control|padUp}}{{Controls/Control|padDown}}{{Controls/Control|padLeft}}{{Controls/Control|padRight}} {{Controls/Control|padA}}{{Controls/Control|padB}}{{Controls/Control|padX}}{{Controls/Control|padY}} {{Controls/Control|padLB}}{{Controls/Control|padLT}}{{Controls/Control|padLSB}}{{Controls/Control|padRB}}{{Controls/Control|padRT}}{{Controls/Control|padRSB}} {{Controls/Control|padBack}}{{Controls/Control|padStart}}<br>

{{Controls/Control|padjoymove}}{{Controls/Control|padjoyupdown}}{{Controls/Control|padjoyleftright}} {{Controls/Control|padjoyup}}{{Controls/Control|padjoyupright}}{{Controls/Control|padjoyright}}{{Controls/Control|padjoydownright}}{{Controls/Control|padjoydown}} {{Controls/Control|padjoydownleft}}{{Controls/Control|padjoyleft}}{{Controls/Control|padjoyupleft}}

{{Controls/Control|padljoymove}}{{Controls/Control|padljoyupdown}}{{Controls/Control|padljoyleftright}} {{Controls/Control|padljoyup}}{{Controls/Control|padljoyright}}{{Controls/Control|padljoydown}}{{Controls/Control|padljoyleft}}

{{Controls/Control|padrjoymove}}{{Controls/Control|padrjoyupdown}}{{Controls/Control|padrjoyleftright}} {{Controls/Control|padrjoyup}}{{Controls/Control|padrjoyright}}{{Controls/Control|padrjoydown}}{{Controls/Control|padrjoyleft}}

|example10= <nowiki/> <nowiki>{{Controls/Control|xbox|up}}{{Controls/Control|xbox|down}}{{Controls/Control|xbox|left}}{{Controls/Control|xbox|right}} {{Controls/Control|xbox|A}}{{Controls/Control|xbox|B}}{{Controls/Control|xbox|X}}{{Controls/Control|xbox|Y}} {{Controls/Control|xbox|LB}}{{Controls/Control|xbox|LT}}{{Controls/Control|xbox|LSB}}{{Controls/Control|xbox|RB}}{{Controls/Control|xbox|RT}}{{Controls/Control|xbox|RSB}} {{Controls/Control|xbox|Back}}{{Controls/Control|xbox|Start}}</nowiki> <hr> <nowiki>{{Controls/Control|playstation|up}}{{Controls/Control|playstation|down}}{{Controls/Control|playstation|left}}{{Controls/Control|playstation|right}} {{Controls/Control|playstation|A}}{{Controls/Control|playstation|B}}{{Controls/Control|playstation|X}}{{Controls/Control|playstation|Y}} {{Controls/Control|playstation|LB}}{{Controls/Control|playstation|LT}}{{Controls/Control|playstation|LSB}}{{Controls/Control|playstation|RB}}{{Controls/Control|playstation|RT}}{{Controls/Control|playstation|RSB}} {{Controls/Control|playstation|Back}}{{Controls/Control|playstation|Start}}</nowiki><br> <nowiki>{{Controls/Control|playstation|Options}}{{Controls/Control|playstation|Touchpad}}{{Controls/Control|playstation|Share}}</nowiki> |result10= <nowiki/> {{Controls/Control|xbox|up}}{{Controls/Control|xbox|down}}{{Controls/Control|xbox|left}}{{Controls/Control|xbox|right}} {{Controls/Control|xbox|A}}{{Controls/Control|xbox|B}}{{Controls/Control|xbox|X}}{{Controls/Control|xbox|Y}} {{Controls/Control|xbox|LB}}{{Controls/Control|xbox|LT}}{{Controls/Control|xbox|LSB}}{{Controls/Control|xbox|RB}}{{Controls/Control|xbox|RT}}{{Controls/Control|xbox|RSB}} {{Controls/Control|xbox|Back}}{{Controls/Control|xbox|Start}} <hr> {{Controls/Control|playstation|up}}{{Controls/Control|playstation|down}}{{Controls/Control|playstation|left}}{{Controls/Control|playstation|right}} {{Controls/Control|playstation|A}}{{Controls/Control|playstation|B}}{{Controls/Control|playstation|X}}{{Controls/Control|playstation|Y}} {{Controls/Control|playstation|LB}}{{Controls/Control|playstation|LT}}{{Controls/Control|playstation|LSB}}{{Controls/Control|playstation|RB}}{{Controls/Control|playstation|RT}}{{Controls/Control|playstation|RSB}} {{Controls/Control|playstation|Back}}{{Controls/Control|playstation|Start}}<br> {{Controls/Control|playstation|Options}}{{Controls/Control|playstation|Touchpad}}{{Controls/Control|playstation|Share}}

}}</noinclude>
ejexhgb0bef1d8m13qbvayd480z0f00

# Template:n/a

10
12581
337201
322267
2023-01-11T10:53:10Z
Lou Montana
10739
Text replacement - "<code>" to "<code style="display: block">"
337201
wikitext
text/x-wiki
<includeonly>class="na-cell"{{#if:{{{style|}}}|<nowiki/> style="{{{style}}}"}} | {{{1|N/A}}}</includeonly><noinclude> Fills ''a table '''cell''''' in grey, with N/A text by default. {{Feature | important | This template has to be ''inside'' a table cell, e.g:

{{{!}} {{!}} <code style="display: block"><nowiki>{| class="wikitable" ! First Name !! Last Name |- | {{n/a}} || Miller |}</nowiki></code> {{!}} style{{=}}"text-align: center; width: 5em" {{!}} → {{!}} {{{!}} class{{=}}"wikitable" ! First Name !! Last Name {{!}}- {{!}} {{n/a}} {{!}}{{!}} Miller {{!}}} {{!}}}

If put in a text paragraph, it results in {{hl|{{n/a}}}}.}}

== Usage == <code style="display: block">{{<nowiki/>n/a|'''''text'''''|'''''style'''''}}</code> * text: (Optional, default "N/A") * style: (Optional, default "". Named parameter only) additional CSS (e.g {{hl|font-weight: bold}})

{| class="wikitable" |+ Examples ! Code ! style="width: 10em" | Result |- | <nowiki>{{n/a}}</nowiki> | {{n/a}} |- | <nowiki>{{n/a|abc}}</nowiki> | {{n/a|abc}} |- | <nowiki>{{n/a|style=font-size: 2em; font-weight: bold;text-align: right|wabbit}}</nowiki> | {{n/a|align=right|style=font-size: 2em; font-weight: bold; text-align: right|wabbit}} |}

== Source == <syntaxhighlight lang="html"> class="na-cell"{{#if:{{{style|}}}|<nowiki/> style="{{{style}}}"}} | {{{1|N/A}}} </syntaxhighlight>

[[Category:Templates|{{uc:{{PAGENAME}}}}]] </noinclude>
mnqxecq4ketyfj8ajnqqg3al6nj23wg

# Template:Link/Hash

10
27617
351389
351388
2023-12-01T20:07:19Z
Lou Montana
10739
Fix example
351389
wikitext
text/x-wiki
<includeonly>{{#if:{{{1|}}} | [[{{{1}}}{{!}}{{#if:{{{2|}}} | {{{2}}} | {{#ifeq:{{#pos:{{Trim|{{{1}}}}}|#}}|0 | {{#replace:{{#sub:{{Trim|{{{1}}}}}|1}}|#|&#35;}} | {{#ifeq: {{NAMESPACENUMBER}} | {{NAMESPACENUMBER:{{#explode:{{Trim|{{{1}}}}}|#|0|0|2}}}} | {{#explode:{{Trim|{{PAGENAME:{{#replace:{{{1}}}|:Category|Category}}}}}}|#|0|0|2}} - {{#explode:{{Trim|{{{1}}}}}|#|1|2}} | {{#explode:{{Trim|{{#replace:{{{1}}}|:Category|Category}}}}|#|0|0|2}} - {{#explode:{{Trim|{{{1}}}}}|#|1|2}} }} }} }}]] | -no link specified- }}</includeonly><noinclude>{{Doc/Template |descr= Creates an auto-formatted hash link (e.g {{hl|#value}} or {{hl|page#anchor}}). |param1= hashLink |descr1= wiki hash link, e.g {{hl|#toc}} or {{hl|Arma 3#Key features}} |param2= text |descr2= display text |example1= <nowiki>{{Link/Hash}}</nowiki> |result1= {{Link/Hash}} |example2= <nowiki>{{Link/Hash|setDir}}</nowiki> |result2= {{Link/Hash|setDir}} |example3= <nowiki/> <nowiki>{{Link/Hash|#toc}}</nowiki><br> <nowiki>{{Link/Hash|#Multipart Hashlink}}</nowiki> |result3= {{Link/Hash|#toc}}<br>{{Link/Hash|#Multipart Hashlink}} |example4= <nowiki>{{Link/Hash|#Multipart Hashlink|Display text}}</nowiki> |result4= {{Link/Hash|#Multipart Hashlink|Display text}} |example5= <nowiki>{{Link/Hash|Arma_3#Key_features}}</nowiki><br><nowiki>{{Link/Hash|Arma 3#Key features}}</nowiki> |result5= {{Link/Hash|Arma_3#Key_features}}<br>{{Link/Hash|Arma 3#Key features}} |example6= <nowiki>{{Link/Hash|Arma 3#Key features|A3's Key Features}}</nowiki> |result6= {{Link/Hash|Arma 3#Key features|A3's Key Features}} |example7= <nowiki/> <nowiki>.{{Link/Hash|Arma 3#Key features}}.</nowiki><br> <nowiki>{{Link/Hash|##if}}</nowiki><br> <nowiki>{{Link/Hash|##if#then##else}}</nowiki><br> <nowiki>{{Link/Hash|PreProcessor Commands##if}}</nowiki><br> <nowiki>{{Link/Hash|CT_LISTNBOX#BIS_fnc_initList example}}</nowiki><br> <nowiki>{{Link/Hash|:Category:Community Tools#Code Edition}}</nowiki><br> <nowiki>{{Link/Hash|Arma Reforger:Server Hosting#Dedicated Server}}</nowiki><br> <nowiki>{{Link/Hash|Template:Link#Usage}}</nowiki> |result7= <nowiki/> .{{Link/Hash|Arma 3#Key features}}.<br> {{Link/Hash|##if}}<br> {{Link/Hash|##if#then##else}}<br> {{Link/Hash|PreProcessor Commands##if}}<br> {{Link/Hash|CT_LISTNBOX#BIS_fnc_initList example}}<br> {{Link/Hash|:Category:Community Tools#Code Edition}}<br> {{Link/Hash|Arma Reforger:Server Hosting#Dedicated Server}}<br> {{Link/Hash|Template:Link#Usage}} }}</noinclude>
ttycxhezwunpa5bjm3j3l8k2hzi14lm

# Template:Infobox/Terrain

10
49324
376419
376386
2025-10-12T01:02:04Z
Lou Montana
10739
Fix description
376419
wikitext
text/x-wiki
<includeonly><div class="float-right"> {| class="wikitable mw-collapsible" ! colspan="2" | {{#if:{{{wbLink|}}}|{{Link|{{{wbLink}}}|{{{name|{{PAGENAME}}}}}}}|{{{name|{{PAGENAME}}}}}}} |- {{#if:{{{image|}}} |<nowiki/> {{!}} colspan="2" class="align-center" {{!}} {{{image}}} {{!}}- }} ! colspan="2" {{!}} General {{!}}- {{#if:{{{defaultDateTime|}}} |<nowiki/> ! Default date/time {{!}} {{{defaultDateTime}}} {{!}}- }}{{#if:{{{season|}}} |<nowiki/> ! Season {{!}} {{{season}}} {{!}}- }}{{#if:{{{landArea|}}} |<nowiki/> ! Terrain surface {{!}} {{{landArea}}} {{!}}- }}{{#if:{{{totalArea|}}} |<nowiki/> ! World surface {{!}} {{{totalArea}}} {{!}}- }}{{#if:{{{minMaxAltitude|}}} |<nowiki/> ! Min/max altitude {{!}} {{{minMaxAltitude}}} {{!}}- }}{{#if:{{{coords|}}} |<nowiki/> ! In-game coordinates {{!}} {{{coords}}} {{!}}- }}{{#if:{{{dimensions|}}}{{{resolution|}}}{{{basedOn|}}} |<nowiki/> ! colspan="2" {{!}} Technical {{!}}- {{#if:{{{dimensions|}}} |<nowiki/> ! Dimensions {{!}} {{{dimensions}}} {{!}}- }}{{#if:{{{resolution|}}} |<nowiki/> ! Resolution {{!}} {{{resolution}}} {{!}}- }}{{#if:{{{basedOn|}}} |<nowiki/> ! Based on {{!}} {{{basedOn}}} {{!}}- }} }} |}</div></includeonly><noinclude>{{Doc/Template

|descr= Describes a game terrain.

|param1= name |descr1= Terrain name

|param2= wbLink |descr2= {{Link|Arma Reforger:World Editor}} link to the terrain

|param3= image |descr3= (Optional) image

|param4= defaultDateTime |descr4= (Optional) terrain's default date and time

|param5= season |descr5= (Optional) terrain's current season

|param6= landArea |descr6= (Optional) land area surface

|param7= totalArea |descr7= (Optional) total area surface

|param8= minMaxAltitude |descr8= min and max altitude

|param9= coords |descr9= (Optional) in-game geographic coordinates

|param10= dimensions |descr10= (Optional) in-game dimensions (e.g 4096x4096m)

|param11= resolution |descr11= (Optional) terrain resolution (e.g 2m for a 2x2m cell)

|param12= basedOn |descr12= (Optional) real-life location on which it is based <!--

--> |example1= <nowiki>{{Infobox/Terrain}}</nowiki> |result1= {{Infobox/Terrain}}

|example2= <nowiki>{{Infobox/Terrain|name= Nogova}}</nowiki> |result2= {{Infobox/Terrain|name= Nogova}}

|example3= <nowiki>{{Infobox/Terrain|defaultDateTime= 1985-05-10 07:30:00}}</nowiki> |result3= {{Infobox/Terrain|defaultDateTime= 1985-05-10 07:30:00}}

|example4= <pre>{{Infobox/Terrain |name= Arland |wbLink= enfusion://WorldEditor/worlds/Arland/Arland.ent |image= [[File:armareforger_arland-1.jpg|300px]] |defaultDateTime= 1989-08-20 12:00:00 |season= Summer |coords= {{Link|https://www.google.com/maps/?q{{=}}47.411%20N%2027.184%20W|47.411&amp;nbsp;N<br>27.184&amp;nbsp;W}} |landArea= 6.38&amp;nbsp;km&amp;sup2; (1&amp;nbsp;m step) |totalArea= 16.78&amp;nbsp;km&amp;sup2; |minMaxAltitude= min. -163&amp;nbsp;m<br>max 148.38&amp;nbsp;m |dimensions= 4096&amp;nbsp;m &amp;times; 4096&amp;nbsp;m |resolution= 2&amp;nbsp;m |basedOn= {{n/a}} }}</pre> |result4= {{Infobox/Terrain |name= Arland |wbLink= enfusion://WorldEditor/worlds/Arland/Arland.ent |image= [[File:armareforger_arland-1.jpg|300px]] |defaultDateTime= 1989-08-20 12:00:00 |season= Summer |coords= {{Link|https://www.google.com/maps/?q{{=}}47.411%20N%2027.184%20W|47.411&nbsp;N<br>27.184&nbsp;W}} |landArea= 6.38&nbsp;km&sup2; (1&nbsp;m step) |totalArea= 16.78&nbsp;km&sup2; |minMaxAltitude= min. -163&nbsp;m<br>max 148.38&nbsp;m |dimensions= 4096&nbsp;m &times; 4096&nbsp;m |resolution= 2&nbsp;m |basedOn= {{n/a}} }} }}</noinclude>
latavfqjvcjdzmak7gtron11h4ei5wq

# Template:TemplateCase

10
28747
295906
194752
2021-11-16T09:33:33Z
Lou Montana
10739
Text replacement - "<tt>([^ =]+)<\/tt>" to "{{hl|$1}}"
295906
wikitext
text/x-wiki
<includeonly>{{#ifeq:{{uc:{{NAMESPACE}}}}|TEMPLATE|{{{1|}}}|{{{2|}}}}}</includeonly><noinclude>{{Doc/Template |descr= Adds content depending on the calling page's template. |param1= ifTemplate |descr1= content if the page is in the {{hl|Template:}} namespace |param2= ifNotTemplate |descr2= content if the page is not in the {{hl|Template:}} namespace |example1= <nowiki>{{TemplateCase|this is a template|this is -not- a template}}</nowiki> |result1= {{TemplateCase|this is a template|this is -not- a template}} }}</noinclude>
arjgvhmu7el0immcey7ff9pj3l2yae0

# Template:Wiki

10
28899
352926
347343
2024-03-04T18:33:54Z
Lou Montana
10739
Add [[:Category:Wiki template usage error|Wiki template usage error]] category
352926
wikitext
text/x-wiki
<includeonly>{{#if:{{{1|}}}|{{#switch:{{uc:{{{1|}}}}} |DELETE= {{Messagebox|'''This article has been submitted for''' <big>[[:Category:Deletion requests|deletion]]</big>'''.'''{{#if:{{{2|}}}|<nowiki> </nowiki>'''The reason given was:''' {{{2}}}}}|🗙|#F00}}{{TemplateCase||[[Category:Deletion requests]]}} |DISAMB |DISAMBIG= {{Messagebox|This [[:Category:Disambiguation Pages|disambiguation page]] lists articles associated with the same title.|{{Icon|disamb|35}}|burlyWood}}{{TemplateCase||[[Category:Disambiguation Pages]]}} |EXTRACTIONSCRIPT= {{Feature|informative|Extraction script can be found on the [[Biki Export Scripts#{{{2|{{FULLPAGENAME}}}}}|Biki Export Scripts]] page.}} |LIPSUM |LOREM= Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris{{#ifeq:{{{2|}}}|...|&hellip;|<nowiki/> nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.}} |MERGE= {{Messagebox|This article has been proposed to [[:Category:Merge Requests|merge]] with {{#if:{{{2|}}}|[[{{{2}}}]]|'''-no article provided-'''{{TemplateCase||[[Category:Wiki template usage error]]}}}}.{{#if:{{{3|}}}|<nowiki/> Reason: {{{3}}}}}|<div style{{=}}"font-size: .75em; line-height: .6em">↘<br>↗</div><!--↣-->|blueviolet}}{{TemplateCase||[[Category:Merge Requests]]}} |PLACEHOLDER= {{Messagebox|[[:Category:Maintenance/RV/Description needed|Placeholder description]] extracted from the function header by [[BIS_fnc_exportFunctionsToWiki]].|🏗|DarkGray}}{{TemplateCase||[[Category:Maintenance/RV/Description needed]]}} |STUB= <div class="notice metadata" id="stub">''This article is a [[:Category:Stubs|Stub]]. You can help BI Community Wiki by <span class="plainlinks">[{{fullurl:{{FULLPAGENAME}}|action=edit}} expanding it]</span>.''</div>{{TemplateCase||[[Category:Stubs]]}} |TODO= {{Messagebox|'''[[:Category:To-do|TODO]]:''' {{{2|this must be updated.}}}|🚧|#96C}}{{TemplateCase||[[Category:To-do]]}} |WIP= {{Messagebox|This article is a '''[[:Category:WIP|work in progress]]'''!{{#if:{{{2|}}}|<nowiki/> Reason: {{{2}}}}}|🏗|dodgerblue}}{{TemplateCase||[[Category:WIP]]}} |#default= -wrong wiki option ("{{{1}}}") defined-{{TemplateCase||[[Category:Wiki template usage error]]}} }} |-no wiki option defined!-{{TemplateCase||[[Category:Wiki template usage error]]}}}}</includeonly><noinclude> This template serves as a toolbox for wiki editors. It contains most useful templates, and automatically categorises pages - placing them in the [[:Category:Wiki template usage error|Wiki template usage error]] category if misused.

== Usage == {{<nowiki/>Wiki|'''''type'''''|'''''arguments'''''}} * type: (case-insensitive) messagebox type, can be: ** delete: a [[:Category:Deletion requests|Deletion request]] *** argument1: deletion request reason ** disamb: a [[:Category:Disambiguation Pages|Disambiguation]] page ** extractionScript: a link to the [[Biki Export Scripts]] page *** argument1: (Optional, default {{hl|<nowiki>{{FULLPAGENAME}}</nowiki>}} link anchor ** lipsum: a {{Link|https://en.wikipedia.org/wiki/Lorem_ipsum}} excerpt *** argument1: {{hl|...}} to have a shortened version (see examples below) ** merge: a [[:Category:Merge Requests|Merge request]] *** argument1: destination page *** argument2: merge reason ** placeholder: a [[:Category:Maintenance/RV/Description needed|placeholder]] mark, meaning the [[:Category:Functions|Function]] page has a basic header documentation ** stub: a [[:Category:Stubs|Stub]] mark, meaning the page/section can be expanded ** TODO: a [[:Category:To-do|To-Do]] mark, meaning the page/section must be (re)written ''soon''&trade; ** WIP: a [[:Category:WIP|work in progress]] page - a wiki editor is ''currently'' working on it * argument: (Optional) argument, depends on ''type''

{| class="wikitable" |+ Examples ! Code ! Result |- | <nowiki>{{Wiki}}</nowiki> | {{Wiki}} |- | <nowiki>{{Wiki|Hello there!}}</nowiki> | {{Wiki|Hello there!}} |- | <nowiki>{{Wiki|delete}}</nowiki> | {{Wiki|delete}} |- | <nowiki>{{Wiki|delete|Why not?}}</nowiki> | {{Wiki|delete|Why not?}} |- | <nowiki>{{Wiki|disamb}}</nowiki> | {{Wiki|disamb}} |- | <nowiki>{{Wiki|extractionScript}}</nowiki> | {{Wiki|extractionScript}} |- | <nowiki>{{Wiki|extractionScript|OtherName}}</nowiki> | {{Wiki|extractionScript|OtherName}} |- | <nowiki>{{Wiki|lorem}}</nowiki> | {{Wiki|lorem}} |- | <nowiki>{{Wiki|lorem|...}}</nowiki> | {{Wiki|lorem|...}} |- | <nowiki>{{Wiki|merge}}</nowiki> | {{Wiki|merge}} |- | <nowiki>{{Wiki|merge|Main Page}}</nowiki> | {{Wiki|merge|Main Page}} |- | <nowiki>{{Wiki|merge|Main Page|Why not?}}</nowiki> | {{Wiki|merge|Main Page|Why not?}} |- | <nowiki>{{Wiki|placeholder}}</nowiki> | {{Wiki|placeholder}} |- | <nowiki>{{Wiki|stub}}</nowiki> | {{Wiki|stub}} |- | <nowiki>{{Wiki|todo}}</nowiki> | {{Wiki|todo}} |- | <nowiki>{{Wiki|todo|message}}</nowiki> | {{Wiki|todo|This article needs a refresh!}} |- | <nowiki>{{Wiki|WIP}}</nowiki> | {{Wiki|WIP}} |- | <nowiki>{{Wiki|WIP|working on new pictures.}}</nowiki> | {{Wiki|WIP|working on new pictures.}} |}

[[Category:Templates|{{uc:{{PAGENAME}}}}]]</noinclude>
9pl85jltjz6tddujihmdwyyuj80laxk

# Template:Color

10
11639
347895
308495
2023-11-01T22:05:16Z
Lou Montana
10739
Add error category
347895
wikitext
text/x-wiki
<includeonly>{{#if:{{{1|}}} | <span class="template-colour" style="color:{{{1}}}">{{{2|-No text defined!-{{TemplateCase||[[Category:Color template usage error]]}}}}}</span> | {{{2|}}} {{TemplateCase||[[Category:Color template usage error]]}}[[:Category:Color template usage error|(no colour defined!)]] }}</includeonly><noinclude>

Helps colouring text.

== Usage == {{<nowiki/>Color|'''''colour'''''|'''''text'''''}} * colour (Optional) CSS text colour, can be one of: ** HTML colour name - ''red'', ''darkgrey'', etc. ** HTML colour format - '''#RGB''' or '''#RRGGBB''' ** rgb format - '''rgb(255, 0, 0)''' ** rgba format - '''rgba(255, 0, 0, 0.5)''' ** hsl format - '''hsl(120, 100%, 50%)''' ** hsla format - '''hsla(120, 60%, 70%, 0.3)''' * text: the text to be coloured

{| class="wikitable" |+ Examples ! Code ! Result |- | <nowiki>{{Color}}</nowiki> | {{Color}} |- | <nowiki>{{Color|red}}</nowiki> | {{Color|red}} |- | <nowiki>{{Color||Hello there!}}</nowiki> | {{Color||Hello there!}} |- | <nowiki>{{Color|#33C|Hello there!}}</nowiki> | {{Color|#33C|Hello there!}} |- | <nowiki>{{Color|#C33|General Kenobi!}}</nowiki> | {{Color|#C33|General Kenobi!}} |- | <nowiki>{{Color|darkorange|You are a '''bold''' one.}}</nowiki> | {{Color|darkorange|You are a '''bold''' one.}} |}

[[Category: Templates]] </noinclude>
bobzp6zhsb7w84mggggbourh51vxf3w

# Template:arma4

10
32407
322492
321515
2022-06-13T10:48:06Z
Lou Montana
10739
Some wiki formatting
322492
wikitext
text/x-wiki
<includeonly>{{Name|arma4}}</includeonly><noinclude>{{Doc/Template |descr= Returns {{hl|{{arma4}}}}. |example1= <nowiki>{{arma4}}</nowiki> |result1= {{arma4}} }}</noinclude>
myukepo3t9bej2k4h3iufzf3q61t99w

# Template:Link/Enfusion

10
34265
376620
373098
2025-10-31T16:31:25Z
Lou Montana
10739
Update to 1.6.0
376620
wikitext
text/x-wiki
<includeonly>{{#switch: {{lc:{{{1|}}}}}

<!-- ARMA REFORGER

regex search: "^(.+) (.+):([0-9]+)$" replacement: " | $1 = {{Link|enfusion://ScriptEditor/$2;$3|$1}}" sort alphabetically (case-insensitive) --> |armar= {{#switch: {{{2|}}}<!-- case-sensitive! --> | AABGridMap = {{Link|enfusion://ScriptEditor/scripts/Game/generated/GridMap/AABGridMap.c;16|AABGridMap}} | AchievementId = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Core/AchievementId.c;12|AchievementId}} | Achievements = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Core/Achievements.c;17|Achievements}} | AchievementStatId = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Core/AchievementStatId.c;12|AchievementStatId}} | ActionDisplayData = {{Link|enfusion://ScriptEditor/scripts/Game/Interactions/Base/SCR_BaseInteractionDisplay.c;29|ActionDisplayData}} | ActionFinishReason = {{Link|enfusion://ScriptEditor/scripts/Game/Interactions/Base/SCR_BaseInteractionDisplay.c;3|ActionFinishReason}} | ActionListenerCallback = {{Link|enfusion://ScriptEditor/scripts/GameLib/inputManager.c;19|ActionListenerCallback}} | ActionManager = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Input/ActionManager.c;13|ActionManager}} | ActionsManagerComponent = {{Link|enfusion://ScriptEditor/scripts/GameCode/UserAction/ActionsManagerComponent.c;5|ActionsManagerComponent}} | ActionsManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/GameCode/UserAction/ActionsManagerComponent.c;1|ActionsManagerComponentClass}} | ActionsPerformerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/ActionsPerformerComponent.c;16|ActionsPerformerComponent}} | ActionsPerformerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/ActionsPerformerComponent.c;12|ActionsPerformerComponentClass}} | ActionsTuple = {{Link|enfusion://ScriptEditor/scripts/Game/Interactions/Base/SCR_BaseInteractionDisplay.c;13|ActionsTuple}} | ActiveState = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Physics/ActiveState.c;15|ActiveState}} | AddonBuildInfoTool = {{Link|enfusion://ScriptEditor/scripts/WorkbenchCommon/AddonBuildInfoTool.c;1|AddonBuildInfoTool}} | AddonsToolsUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/AddonManager/AddonsTools/AddonsToolsUI.c;14|AddonsToolsUI}} | ADSCameraData = {{Link|enfusion://ScriptEditor/scripts/Game/Character/Cameras/ADS/CameraADSData.c;2|ADSCameraData}} | AfterItemPlacedInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/Callbacks/SCR_PlacementInventoryOperationCallback.c;3|AfterItemPlacedInvoker}} | AIActionBase = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIActionBase.c;12|AIActionBase}} | AIAgent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIAgent.c;16|AIAgent}} | AIAgentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIAgent.c;12|AIAgentClass}} | AIAmbientLightProbeSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/AIAmbientLightProbeSystem.c;12|AIAmbientLightProbeSystem}} | AIAnimal = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIAnimal.c;16|AIAnimal}} | AIAnimalClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIAnimal.c;12|AIAnimalClass}} | AIAnimalManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/AIAnimalManagerComponent.c;16|AIAnimalManagerComponent}} | AIAnimalManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/AIAnimalManagerComponent.c;12|AIAnimalManagerComponentClass}} | AIAnimalManagerReactToCloseEntitiesMovement = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIAnimalManagerReactToCloseEntitiesMovement.c;12|AIAnimalManagerReactToCloseEntitiesMovement}} | AIAnimalReactToDanger = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIAnimalReactToDanger.c;12|AIAnimalReactToDanger}} | AIAutotest = {{Link|enfusion://ScriptEditor/scripts/Game/AI/AIAutotest.c;6|AIAutotest}} | AIAutotestClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/AIAutotest.c;1|AIAutotestClass}} | AIBaseAimingComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIBaseAimingComponent.c;16|AIBaseAimingComponent}} | AIBaseAimingComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIBaseAimingComponent.c;12|AIBaseAimingComponentClass}} | AIBaseMovementComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIBaseMovementComponent.c;16|AIBaseMovementComponent}} | AIBaseMovementComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIBaseMovementComponent.c;12|AIBaseMovementComponentClass}} | AIBaseUtilityComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIBaseUtilityComponent.c;16|AIBaseUtilityComponent}} | AIBaseUtilityComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIBaseUtilityComponent.c;12|AIBaseUtilityComponentClass}} | AIBehaviorTreeComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIBehaviorTreeComponent.c;16|AIBehaviorTreeComponent}} | AIBehaviorTreeComponentBase = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIBehaviorTreeComponentBase.c;16|AIBehaviorTreeComponentBase}} | AIBehaviorTreeComponentBaseClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIBehaviorTreeComponentBase.c;12|AIBehaviorTreeComponentBaseClass}} | AIBehaviorTreeComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIBehaviorTreeComponent.c;12|AIBehaviorTreeComponentClass}} | AIBirdManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/AIBirdManagerComponent.c;16|AIBirdManagerComponent}} | AIBirdManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/AIBirdManagerComponent.c;12|AIBirdManagerComponentClass}} | AICarMovementComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AICarMovementComponent.c;12|AICarMovementComponent}} | AICarMovementComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AICarMovementComponentClass.c;12|AICarMovementComponentClass}} | AICarMovementComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Serializers/AICarMovementComponentSerializer.c;12|AICarMovementComponentSerializer}} | AICenterOfMassSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/WorldSystems/AICenterOfMassSystem.c;12|AICenterOfMassSystem}} | AICharacterMovementComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/Character/AICharacterMovementComponent.c;16|AICharacterMovementComponent}} | AICharacterMovementComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/Character/AICharacterMovementComponent.c;12|AICharacterMovementComponentClass}} | AIChimeraBehaviorTreeComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIChimeraBehaviorTreeComponent.c;16|AIChimeraBehaviorTreeComponent}} | AIChimeraBehaviorTreeComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIChimeraBehaviorTreeComponent.c;12|AIChimeraBehaviorTreeComponentClass}} | AICombatPropertiesComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AICombatPropertiesComponent.c;15|AICombatPropertiesComponent}} | AICombatPropertiesComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AICombatPropertiesComponentClass.c;12|AICombatPropertiesComponentClass}} | AICommunicationComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AICommunicationComponent.c;16|AICommunicationComponent}} | AICommunicationComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AICommunicationComponent.c;12|AICommunicationComponentClass}} | AIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIComponent.c;16|AIComponent}} | AIComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIComponent.c;12|AIComponentClass}} | AIComponentEntity = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIComponentEntity.c;16|AIComponentEntity}} | AIComponentEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIComponentEntity.c;12|AIComponentEntityClass}} | AIControlComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIControlComponent.c;16|AIControlComponent}} | AIControlComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIControlComponent.c;12|AIControlComponentClass}} | AIControlComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/AI/AIControlComponentSerializer.c;9|AIControlComponentSerializer}} | AIDangerEvent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIDangerEvent.c;13|AIDangerEvent}} | AIDangerEventWeaponFire = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIDangerEventWeaponFire.c;12|AIDangerEventWeaponFire}} | AIDiagSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIDiagSystem.c;12|AIDiagSystem}} | AIEvent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIEvent.c;13|AIEvent}} | AIExtraMoveParams = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIExtraMoveParams.c;12|AIExtraMoveParams}} | AIFlock = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIFlock.c;16|AIFlock}} | AIFlockClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIFlock.c;12|AIFlockClass}} | AIFlockMovementComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/Animals/AIFlockMovementComponent.c;16|AIFlockMovementComponent}} | AIFlockMovementComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/Animals/AIFlockMovementComponent.c;12|AIFlockMovementComponentClass}} | AIFlockUpdateSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/AIFlockUpdateSystem.c;12|AIFlockUpdateSystem}} | AIFormationComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIFormationComponent.c;16|AIFormationComponent}} | AIFormationComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIFormationComponent.c;12|AIFormationComponentClass}} | AIFormationComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/AI/AIFormationComponentSerializer.c;1|AIFormationComponentSerializer}} | AIFormationDefinition = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIFormationDefinition.c;12|AIFormationDefinition}} | AIGroup = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIGroup.c;16|AIGroup}} | AIGroupClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIGroup.c;12|AIGroupClass}} | AIGroupMovementComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIGroupMovementComponent.c;16|AIGroupMovementComponent}} | AIGroupMovementComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIGroupMovementComponent.c;12|AIGroupMovementComponentClass}} | AIKnowledgeComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AIKnowledgeComponent.c;11|AIKnowledgeComponent}} | AIKnowledgeComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AIKnowledgeComponent.c;7|AIKnowledgeComponentClass}} | AIMessage = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIMessage.c;13|AIMessage}} | AIMessageSelectionMenuEntry = {{Link|enfusion://ScriptEditor/scripts/Game/generated/UI/HUD/SelectionMenu/AIMessageSelectionMenuEntry.c;12|AIMessageSelectionMenuEntry}} | AimingComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/AimingComponent.c;12|AimingComponent}} | AimingComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/AimingComponentClass.c;12|AimingComponentClass}} | AimingModifierAttributes = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/AimingModifierAttributes.c;12|AimingModifierAttributes}} | AimPoint = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AimPoint.c;12|AimPoint}} | AIObstacleAvoidanceSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/AIObstacleAvoidanceSystem.c;12|AIObstacleAvoidanceSystem}} | AIOnMessage = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIOnMessage.c;12|AIOnMessage}} | AIOrder = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIOrder.c;13|AIOrder}} | AIPathfindingComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIPathfindingComponent.c;16|AIPathfindingComponent}} | AIPathfindingComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIPathfindingComponent.c;12|AIPathfindingComponentClass}} | AirplaneControllerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/AirplaneControllerComponent.c;16|AirplaneControllerComponent}} | AirplaneControllerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/AirplaneControllerComponent.c;12|AirplaneControllerComponentClass}} | AISmartActionComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/SmartActions/AISmartActionComponent.c;12|AISmartActionComponent}} | AISmartActionComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/SmartActions/AISmartActionComponentClass.c;12|AISmartActionComponentClass}} | AISmartActionSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/AISmartActionSystem.c;12|AISmartActionSystem}} | AISpawnerGroup = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AISpawnerGroup.c;16|AISpawnerGroup}} | AISpawnerGroupClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AISpawnerGroup.c;12|AISpawnerGroupClass}} | AITask = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITask.c;12|AITask}} | AITaskAim = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskAim.c;12|AITaskAim}} | AITaskCallMethod = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskCallMethod.c;12|AITaskCallMethod}} | AITaskChangeStance = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskChangeStance.c;12|AITaskChangeStance}} | AITaskCharacterAim = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskCharacterAim.c;12|AITaskCharacterAim}} | AITaskCharacterRaiseWeapon = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskCharacterRaiseWeapon.c;12|AITaskCharacterRaiseWeapon}} | AITaskCharacterSetMovementSpeed = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskCharacterSetMovementSpeed.c;12|AITaskCharacterSetMovementSpeed}} | AITaskCharacterStop = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskCharacterStop.c;12|AITaskCharacterStop}} | AITaskClearDanger = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskClearDanger.c;12|AITaskClearDanger}} | AITaskCreateGroup = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskCreateGroup.c;12|AITaskCreateGroup}} | AITaskCreatePosition = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskCreatePosition.c;12|AITaskCreatePosition}} | AITaskCurrentOrder = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskCurrentOrder.c;12|AITaskCurrentOrder}} | AITaskFindEntity = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskFindEntity.c;12|AITaskFindEntity}} | AITaskFindSmartAction = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskFindSmartAction.c;12|AITaskFindSmartAction}} | AITaskFinishOrder = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskFinishOrder.c;12|AITaskFinishOrder}} | AITaskFire = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskFire.c;12|AITaskFire}} | AITaskGetAimingPosition = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskGetAimingPosition.c;12|AITaskGetAimingPosition}} | AITaskGetControlledEntity = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskGetControlledEntity.c;12|AITaskGetControlledEntity}} | AITaskGetCurrentSmartAction = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskGetCurrentSmartAction.c;12|AITaskGetCurrentSmartAction}} | AITaskGetFormationOffset = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskGetFormationOffset.c;12|AITaskGetFormationOffset}} | AITaskGetGroupChildren = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskGetGroupChildren.c;12|AITaskGetGroupChildren}} | AITaskGetInVehicle = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskGetInVehicle.c;12|AITaskGetInVehicle}} | AITaskGetOutVehicle = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskGetOutVehicle.c;12|AITaskGetOutVehicle}} | AITaskGetSmartActionParams = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskGetSmartActionParams.c;12|AITaskGetSmartActionParams}} | AITaskGetWaypoint = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskGetWaypoint.c;12|AITaskGetWaypoint}} | AITaskGroupMove = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskGroupMove.c;12|AITaskGroupMove}} | AITaskGroupMoveToEntity = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskGroupMoveToEntity.c;12|AITaskGroupMoveToEntity}} | AITaskGroupSetMovementSpeed = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskGroupSetMovementSpeed.c;12|AITaskGroupSetMovementSpeed}} | AITaskIdle = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskIdle.c;12|AITaskIdle}} | AITaskMove = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskMove.c;12|AITaskMove}} | AITaskMoveInFormation = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskMoveInFormation.c;12|AITaskMoveInFormation}} | AITaskMoveToEntity = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskMoveToEntity.c;12|AITaskMoveToEntity}} | AITaskMoveToWaypoint = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskMoveToWaypoint.c;12|AITaskMoveToWaypoint}} | AITaskOrient = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskOrient.c;12|AITaskOrient}} | AITaskPerformObjectAction = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskPerformObjectAction.c;12|AITaskPerformObjectAction}} | AITaskPerformSmartAction = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskPerformSmartAction.c;12|AITaskPerformSmartAction}} | AITaskPickTarget = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskPickTarget.c;12|AITaskPickTarget}} | AITaskPlayGesture = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskPlayGesture.c;12|AITaskPlayGesture}} | AITaskReload = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskReload.c;12|AITaskReload}} | AITaskRequestAction = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskRequestAction.c;12|AITaskRequestAction}} | AITaskResetPathfindingFilters = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskResetPathfindingFilters.c;12|AITaskResetPathfindingFilters}} | AITaskReturnState = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskReturnState.c;12|AITaskReturnState}} | AITaskScripted = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskScripted.c;12|AITaskScripted}} | AITaskSendOrder = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskSendOrder.c;12|AITaskSendOrder}} | AITaskSetADS = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskSetADS.c;12|AITaskSetADS}} | AITaskSetMovementSpeed = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskSetMovementSpeed.c;12|AITaskSetMovementSpeed}} | AITaskSetPathfindingFilters = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskSetPathfindingFilters.c;12|AITaskSetPathfindingFilters}} | AITaskSetVariable = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskSetVariable.c;12|AITaskSetVariable}} | AITaskStop = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskStop.c;12|AITaskStop}} | AITaskThrowGrenade = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AITaskThrowGrenade.c;12|AITaskThrowGrenade}} | AIVehicleKnowledgeSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/AIVehicleKnowledgeSystem.c;12|AIVehicleKnowledgeSystem}} | AIWaypoint = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIWaypoint.c;20|AIWaypoint}} | AIWaypointClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIWaypoint.c;12|AIWaypointClass}} | AIWaypointCycle = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIWaypointCycle.c;21|AIWaypointCycle}} | AIWaypointCycleClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIWaypointCycle.c;12|AIWaypointCycleClass}} | AIWeaponTargetSelector = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIWeaponTargetSelector.c;12|AIWeaponTargetSelector}} | AIWorld = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIWorld.c;16|AIWorld}} | AIWorldClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIWorld.c;12|AIWorldClass}} | AIWorldSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AIWorldSystem.c;12|AIWorldSystem}} | AlignableSlot = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/AlignableSlot.c;12|AlignableSlot}} | AlignPlayerCinematicTrack = {{Link|enfusion://ScriptEditor/scripts/Game/Cinematics/AlignPlayerCinematicTrack.c;1|AlignPlayerCinematicTrack}} | AmbientSoundsComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/AmbientSoundsComponent.c;16|AmbientSoundsComponent}} | AmbientSoundsComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/AmbientSoundsComponent.c;12|AmbientSoundsComponentClass}} | AnimalAnimationComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Animal/AnimalAnimationComponent.c;16|AnimalAnimationComponent}} | AnimalAnimationComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Animal/AnimalAnimationComponent.c;12|AnimalAnimationComponentClass}} | AnimalCommandHandlerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Animal/AnimalCommandHandlerComponent.c;16|AnimalCommandHandlerComponent}} | AnimalCommandHandlerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Animal/AnimalCommandHandlerComponent.c;12|AnimalCommandHandlerComponentClass}} | AnimalControllerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Animal/AnimalControllerComponent.c;16|AnimalControllerComponent}} | AnimalControllerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Animal/AnimalControllerComponent.c;12|AnimalControllerComponentClass}} | AnimalSoundComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/AnimalSoundComponent.c;16|AnimalSoundComponent}} | AnimalSoundComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/AnimalSoundComponent.c;12|AnimalSoundComponentClass}} | AnimatedColliderComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Physics/AnimatedColliderComponent.c;22|AnimatedColliderComponent}} | AnimatedColliderComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Physiscs/AnimatedColliderComponentClass.c;12|AnimatedColliderComponentClass}} | AnimateWidget = {{Link|enfusion://ScriptEditor/scripts/GameLib/AnimateWidget.c;2|AnimateWidget}} | AnimateWidgetSystem = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/AnimateWidgetSystem.c;5|AnimateWidgetSystem}} | Animation = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Visual/Animation.c;12|Animation}} | AnimationControllerComponent = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Components/AnimationControllerComponent.c;16|AnimationControllerComponent}} | AnimationControllerComponentClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Components/AnimationControllerComponent.c;12|AnimationControllerComponentClass}} | AnimationDialogueData = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Dialogue/AnimationDialogueData.c;12|AnimationDialogueData}} | AnimationEventID = {{Link|enfusion://ScriptEditor/scripts/GameCode/Core/AnimationStringTypes.c;1|AnimationEventID}} | AnimationIKTargetInfo = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Core/Animations/AnimationIKTargetInfo.c;12|AnimationIKTargetInfo}} | AnimationPlayerComponent = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Components/AnimationPlayerComponent.c;16|AnimationPlayerComponent}} | AnimationPlayerComponentClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Components/AnimationPlayerComponent.c;12|AnimationPlayerComponentClass}} | AnimationPlayerSystem = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorldSystems/AnimationPlayerSystem.c;12|AnimationPlayerSystem}} | AnimationSource = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Resources/AnimationSource.c;12|AnimationSource}} | AnimationTagID = {{Link|enfusion://ScriptEditor/scripts/GameCode/Core/AnimationStringTypes.c;2|AnimationTagID}} | AnimEditor = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorkbenchAPI/Modules/AnimEditor.c;14|AnimEditor}} | AnimExportProfileChannels = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/AnimExportProfiles.c;90|AnimExportProfileChannels}} | AnimExportProfileChannelsRequest = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/AnimExportProfiles.c;49|AnimExportProfileChannelsRequest}} | AnimExportProfileChannelsResponse = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/AnimExportProfiles.c;59|AnimExportProfileChannelsResponse}} | AnimExportProfiles = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/AnimExportProfiles.c;29|AnimExportProfiles}} | AnimExportProfilesRequest = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/AnimExportProfiles.c;1|AnimExportProfilesRequest}} | AnimExportProfilesResponse = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/AnimExportProfiles.c;11|AnimExportProfilesResponse}} | AnimExportTrackExport = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/AnimExport.c;43|AnimExportTrackExport}} | AnimExportTrackExportRequest = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/AnimExport.c;8|AnimExportTrackExportRequest}} | AnimExportTrackExportResponse = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/AnimExport.c;32|AnimExportTrackExportResponse}} | AnimPhysCommandScripted = {{Link|enfusion://ScriptEditor/scripts/Game/Character/animPhysCommand.c;1|AnimPhysCommandScripted}} | AoeDamageSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/AoeDamageSystem.c;12|AoeDamageSystem}} | ArmaReforgerLoadingAnim = {{Link|enfusion://ScriptEditor/scripts/Game/UI/LoadingScreen/LoadingScreen.c;3|ArmaReforgerLoadingAnim}} | ArmaReforgerScripted = {{Link|enfusion://ScriptEditor/scripts/Game/game.c;31|ArmaReforgerScripted}} | array = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;153|array}} | AssetTypes = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/ValidateFBXPlugin.c;1|AssetTypes}} | AssignmentSolver = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/AssignmentSolver.c;15|AssignmentSolver}} | AsyncTraceFinishedCallback = {{Link|enfusion://ScriptEditor/scripts/Core/proto/EnWorld.c;12|AsyncTraceFinishedCallback}} | AttachBonePositionPlayerTrackModifier = {{Link|enfusion://ScriptEditor/scripts/Game/Cinematics/AttachBonePositionPlayerTrackModifier.c;1|AttachBonePositionPlayerTrackModifier}} | AttachBonePositionTrackModifier = {{Link|enfusion://ScriptEditor/scripts/Game/Cinematics/AttachBonePositionTrackModifier.c;1|AttachBonePositionTrackModifier}} | AttachBoneRotationTrackModifier = {{Link|enfusion://ScriptEditor/scripts/Game/Cinematics/AttachBoneRotationTrackModifier.c;1|AttachBoneRotationTrackModifier}} | AttachmentAttributes = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/AttachmentAttributes.c;12|AttachmentAttributes}} | AttachmentBayonet = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_base.c;67|AttachmentBayonet}} | AttachmentBayonet6Kh4 = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_bayonet.c;11|AttachmentBayonet6Kh4}} | AttachmentBayonet6Kh4Class = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_bayonet.c;9|AttachmentBayonet6Kh4Class}} | AttachmentBayonetClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_base.c;64|AttachmentBayonetClass}} | AttachmentBayonetM9 = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_bayonet.c;5|AttachmentBayonetM9}} | AttachmentBayonetM9Class = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_bayonet.c;3|AttachmentBayonetM9Class}} | AttachmentBayonetVz58 = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_bayonet.c;17|AttachmentBayonetVz58}} | AttachmentBayonetVz58Class = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_bayonet.c;15|AttachmentBayonetVz58Class}} | AttachmentCamouflage = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_base_KS.c;7|AttachmentCamouflage}} | AttachmentCamouflageClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_base_KS.c;4|AttachmentCamouflageClass}} | AttachmentCamouflageOptics = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_base_KS.c;15|AttachmentCamouflageOptics}} | AttachmentCamouflageOpticsClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_base_KS.c;12|AttachmentCamouflageOpticsClass}} | AttachmentFlashHider = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_muzzle.c;96|AttachmentFlashHider}} | AttachmentFlashHider6P20 = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_muzzle.c;117|AttachmentFlashHider6P20}} | AttachmentFlashHider6P20Class = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_muzzle.c;114|AttachmentFlashHider6P20Class}} | AttachmentFlashHider6P26 = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_muzzle.c;110|AttachmentFlashHider6P26}} | AttachmentFlashHider6P26Class = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_muzzle.c;107|AttachmentFlashHider6P26Class}} | AttachmentFlashHiderA2 = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_muzzle.c;103|AttachmentFlashHiderA2}} | AttachmentFlashHiderA2Class = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_muzzle.c;100|AttachmentFlashHiderA2Class}} | AttachmentFlashHiderClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_muzzle.c;93|AttachmentFlashHiderClass}} | AttachmentHandGuard = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_base.c;43|AttachmentHandGuard}} | AttachmentHandGuardClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_base.c;40|AttachmentHandGuardClass}} | AttachmentHandGuardM16 = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_handguards.c;7|AttachmentHandGuardM16}} | AttachmentHandGuardM16Class = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_handguards.c;4|AttachmentHandGuardM16Class}} | AttachmentMuzzle = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_base.c;51|AttachmentMuzzle}} | AttachmentMuzzle308 = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_muzzle.c;68|AttachmentMuzzle308}} | AttachmentMuzzle308Class = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_muzzle.c;65|AttachmentMuzzle308Class}} | AttachmentMuzzle45 = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_muzzle.c;26|AttachmentMuzzle45}} | AttachmentMuzzle45Class = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_muzzle.c;23|AttachmentMuzzle45Class}} | AttachmentMuzzle545_39 = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_muzzle.c;40|AttachmentMuzzle545_39}} | AttachmentMuzzle545_39Class = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_muzzle.c;37|AttachmentMuzzle545_39Class}} | AttachmentMuzzle556_45 = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_muzzle.c;33|AttachmentMuzzle556_45}} | AttachmentMuzzle556_45Class = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_muzzle.c;30|AttachmentMuzzle556_45Class}} | AttachmentMuzzle762_39 = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_muzzle.c;61|AttachmentMuzzle762_39}} | AttachmentMuzzle762_39Class = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_muzzle.c;58|AttachmentMuzzle762_39Class}} | AttachmentMuzzle762_51 = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_muzzle.c;54|AttachmentMuzzle762_51}} | AttachmentMuzzle762_51Class = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_muzzle.c;51|AttachmentMuzzle762_51Class}} | AttachmentMuzzle762_54 = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_muzzle.c;47|AttachmentMuzzle762_54}} | AttachmentMuzzle762_54Class = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_muzzle.c;44|AttachmentMuzzle762_54Class}} | AttachmentMuzzle9_18 = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_muzzle.c;12|AttachmentMuzzle9_18}} | AttachmentMuzzle9_18Class = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_muzzle.c;9|AttachmentMuzzle9_18Class}} | AttachmentMuzzle9_19 = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_muzzle.c;19|AttachmentMuzzle9_19}} | AttachmentMuzzle9_19Class = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_muzzle.c;16|AttachmentMuzzle9_19Class}} | AttachmentMuzzleClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_base.c;48|AttachmentMuzzleClass}} | AttachmentMuzzlePistol = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_muzzle.c;5|AttachmentMuzzlePistol}} | AttachmentMuzzlePistolClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_muzzle.c;3|AttachmentMuzzlePistolClass}} | AttachmentOptics = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_base.c;7|AttachmentOptics}} | AttachmentOpticsCarryHandle = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_optics.c;66|AttachmentOpticsCarryHandle}} | AttachmentOpticsCarryHandleClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_optics.c;63|AttachmentOpticsCarryHandleClass}} | AttachmentOpticsClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_base.c;4|AttachmentOpticsClass}} | AttachmentOpticsDovetail = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_optics.c;7|AttachmentOpticsDovetail}} | AttachmentOpticsDovetailAK = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_optics.c;31|AttachmentOpticsDovetailAK}} | AttachmentOpticsDovetailAKClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_optics.c;28|AttachmentOpticsDovetailAKClass}} | AttachmentOpticsDovetailAKSVD = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_optics.c;23|AttachmentOpticsDovetailAKSVD}} | AttachmentOpticsDovetailAKSVDClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_optics.c;20|AttachmentOpticsDovetailAKSVDClass}} | AttachmentOpticsDovetailClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_optics.c;4|AttachmentOpticsDovetailClass}} | AttachmentOpticsDovetailRPG7 = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_optics.c;15|AttachmentOpticsDovetailRPG7}} | AttachmentOpticsDovetailRPG7Class = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_optics.c;12|AttachmentOpticsDovetailRPG7Class}} | AttachmentOpticsDovetailSVD = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_optics.c;39|AttachmentOpticsDovetailSVD}} | AttachmentOpticsDovetailSVDClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_optics.c;36|AttachmentOpticsDovetailSVDClass}} | AttachmentOpticsDovetailUK59 = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_optics.c;47|AttachmentOpticsDovetailUK59}} | AttachmentOpticsDovetailUK59Class = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_optics.c;44|AttachmentOpticsDovetailUK59Class}} | AttachmentOpticsM21 = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_optics.c;55|AttachmentOpticsM21}} | AttachmentOpticsM21Class = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_optics.c;52|AttachmentOpticsM21Class}} | AttachmentOpticsRIS1913 = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_optics.c;78|AttachmentOpticsRIS1913}} | AttachmentOpticsRIS1913Class = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_optics.c;75|AttachmentOpticsRIS1913Class}} | AttachmentOpticsRIS1913Medium = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_optics.c;88|AttachmentOpticsRIS1913Medium}} | AttachmentOpticsRIS1913MediumClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_optics.c;85|AttachmentOpticsRIS1913MediumClass}} | AttachmentOpticsRIS1913Short = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_optics.c;98|AttachmentOpticsRIS1913Short}} | AttachmentOpticsRIS1913ShortClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_optics.c;95|AttachmentOpticsRIS1913ShortClass}} | AttachmentOpticsRIS1913VeryShort = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_optics.c;108|AttachmentOpticsRIS1913VeryShort}} | AttachmentOpticsRIS1913VeryShortClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_optics.c;105|AttachmentOpticsRIS1913VeryShortClass}} | AttachmentRIS1913 = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_base.c;17|AttachmentRIS1913}} | AttachmentRIS1913Class = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_base.c;14|AttachmentRIS1913Class}} | AttachmentRIS1913Short = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_base.c;27|AttachmentRIS1913Short}} | AttachmentRIS1913ShortClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_base.c;24|AttachmentRIS1913ShortClass}} | AttachmentSlotComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/AttachmentSlotComponent.c;12|AttachmentSlotComponent}} | AttachmentSlotComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/AttachmentSlotComponentClass.c;12|AttachmentSlotComponentClass}} | AttachmentsStorageComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/AttachmentsStorageComponent.c;16|AttachmentsStorageComponent}} | AttachmentsStorageComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/AttachmentsStorageComponent.c;12|AttachmentsStorageComponentClass}} | AttachmentStock = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_base.c;59|AttachmentStock}} | AttachmentStockClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_base.c;56|AttachmentStockClass}} | AttachmentStockVz58 = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_stocks.c;7|AttachmentStockVz58}} | AttachmentStockVz58Class = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_stocks.c;4|AttachmentStockVz58Class}} | AttachmentSuppressor = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_muzzle.c;75|AttachmentSuppressor}} | AttachmentSuppressorClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_muzzle.c;72|AttachmentSuppressorClass}} | AttachmentSuppressorMark3 = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_muzzle.c;82|AttachmentSuppressorMark3}} | AttachmentSuppressorMark3Class = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_muzzle.c;79|AttachmentSuppressorMark3Class}} | AttachmentSuppressorPBS4 = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_muzzle.c;89|AttachmentSuppressorPBS4}} | AttachmentSuppressorPBS4Class = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_muzzle.c;86|AttachmentSuppressorPBS4Class}} | AttachmentUnderBarrel = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_base.c;35|AttachmentUnderBarrel}} | AttachmentUnderBarrelClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_base.c;32|AttachmentUnderBarrelClass}} | AttachmentUnderBarrelGP25 = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_underbarrel.c;7|AttachmentUnderBarrelGP25}} | AttachmentUnderBarrelGP25Class = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_underbarrel.c;4|AttachmentUnderBarrelGP25Class}} | AttachmentUnderBarrelM203 = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_underbarrel.c;15|AttachmentUnderBarrelM203}} | AttachmentUnderBarrelM203Carbine = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_underbarrel.c;23|AttachmentUnderBarrelM203Carbine}} | AttachmentUnderBarrelM203CarbineClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_underbarrel.c;20|AttachmentUnderBarrelM203CarbineClass}} | AttachmentUnderBarrelM203Class = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_underbarrel.c;12|AttachmentUnderBarrelM203Class}} | AttachmentUnderbarrelRIS1913 = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_underbarrel.c;34|AttachmentUnderbarrelRIS1913}} | AttachmentUnderbarrelRIS1913Class = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_underbarrel.c;31|AttachmentUnderbarrelRIS1913Class}} | AttachmentUnderbarrelRIS1913Short = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_underbarrel.c;44|AttachmentUnderbarrelRIS1913Short}} | AttachmentUnderbarrelRIS1913ShortClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Attachments/Attachments_underbarrel.c;41|AttachmentUnderbarrelRIS1913ShortClass}} | AttachPoint = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/AttachPoint.c;7|AttachPoint}} | AttachPositionTrackModifier = {{Link|enfusion://ScriptEditor/scripts/Game/Cinematics/AttachPositionTrackModifier.c;1|AttachPositionTrackModifier}} | AttachRotationTrackModifier = {{Link|enfusion://ScriptEditor/scripts/Game/Cinematics/AttachRotationTrackModifier.c;1|AttachRotationTrackModifier}} | AttachToSlotManagerCinematicTrack = {{Link|enfusion://ScriptEditor/scripts/Game/Cinematics/AttachToSlotManagerCinematicTrack.c;1|AttachToSlotManagerCinematicTrack}} | Attribute = {{Link|enfusion://ScriptEditor/scripts/Core/attributes.c;284|Attribute}} | AudioDialogueData = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Dialogue/AudioDialogueData.c;12|AudioDialogueData}} | AudioEditor = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorkbenchAPI/Modules/AudioEditor.c;14|AudioEditor}} | AudioGlobalData = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Dialogue/AudioGlobalData.c;12|AudioGlobalData}} | AudioHandle = {{Link|enfusion://ScriptEditor/scripts/Core/proto/EnAudio.c;8|AudioHandle}} | AudioSourceConfig = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Sound/AudioSourceConfig.c;12|AudioSourceConfig}} | AudioSystem = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Audio/AudioSystem.c;12|AudioSystem}} | AutotestBase = {{Link|enfusion://ScriptEditor/scripts/GameLib/tools.c;133|AutotestBase}} | AutotestGrid = {{Link|enfusion://ScriptEditor/scripts/GameLib/entities/autotest/AutotestGrid.c;42|AutotestGrid}} | AutotestGridClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/entities/autotest/AutotestGrid.c;3|AutotestGridClass}} | AutotestRegister = {{Link|enfusion://ScriptEditor/scripts/GameLib/entities/autotest/AutotestRegister.c;159|AutotestRegister}} | AvailableActionEditorLayoutBehavior = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/SCR_AvailableActionsDisplay.c;816|AvailableActionEditorLayoutBehavior}} | AvailableActionLayoutBehavior = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/SCR_AvailableActionsDisplay.c;747|AvailableActionLayoutBehavior}} | AvailableActionLayoutBehaviorBase = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/SCR_AvailableActionsDisplay.c;723|AvailableActionLayoutBehaviorBase}} | AvailableActionMenuLayoutBehavior = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/SCR_AvailableActionsDisplay.c;802|AvailableActionMenuLayoutBehavior}} | Backend_Test_Storage = {{Link|enfusion://ScriptEditor/scripts/GameCode/Online/Backend_Storage.c;10|Backend_Test_Storage}} | BackendApi = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/BackendApi.c;13|BackendApi}} | BackendAuthenticatorApi = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/BackendAuthenticatorApi.c;20|BackendAuthenticatorApi}} | BackendCallback = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/BackendCallback.c;71|BackendCallback}} | BackendCallback_Storage = {{Link|enfusion://ScriptEditor/scripts/GameCode/Online/Backend_Storage.c;4|BackendCallback_Storage}} | BackendCallbackFunc = {{Link|enfusion://ScriptEditor/scripts/GameLib/online/OnlineTypes.c;4|BackendCallbackFunc}} | BackendDebugApi = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/BackendDebugApi.c;12|BackendDebugApi}} | BackendExamples = {{Link|enfusion://ScriptEditor/scripts/GameCode/Online/BackendExamples.c;2|BackendExamples}} | BackendImage = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/BackendImage.c;12|BackendImage}} | BakeInfo = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/BakeMLOD.c;372|BakeInfo}} | BakeInfoDialog = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/BakeMLOD.c;366|BakeInfoDialog}} | BakeInfoRequest = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/BakeMLOD.c;297|BakeInfoRequest}} | BakeInfoResponse = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/BakeMLOD.c;356|BakeInfoResponse}} | BakeMLODPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/BakeMLOD.c;65|BakeMLODPlugin}} | BakeMlodTool = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/BakeMLOD.c;325|BakeMlodTool}} | BallisticGenerationConfig = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/BallisticGenerationConfig.c;12|BallisticGenerationConfig}} | BallisticInfo = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Core/BallisticInfo.c;12|BallisticInfo}} | BallisticTable = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/BallisticTable.c;12|BallisticTable}} | BallisticTableArray = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/BallisticTableArray.c;12|BallisticTableArray}} | BanCommand = {{Link|enfusion://ScriptEditor/scripts/Game/Network/ServerCommands/BanCommands.c;50|BanCommand}} | BanListPageParams = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/BanListPageParams.c;13|BanListPageParams}} | BanServiceApi = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/BanServiceApi.c;13|BanServiceApi}} | BaseActionsManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/UserAction/BaseActionsManagerComponent.c;12|BaseActionsManagerComponent}} | BaseActionsManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/UserAction/BaseActionsManagerComponentClass.c;12|BaseActionsManagerComponentClass}} | BaseAimingComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/BaseAimingComponent.c;16|BaseAimingComponent}} | BaseAimingComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/BaseAimingComponent.c;12|BaseAimingComponentClass}} | BaseAimPoint = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/BaseAimPoint.c;12|BaseAimPoint}} | BaseAnimPhysComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Base/BaseAnimPhysComponent.c;12|BaseAnimPhysComponent}} | BaseAnimPhysComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Base/BaseAnimPhysComponentClass.c;12|BaseAnimPhysComponentClass}} | BaseAttachmentSlotComponent = {{Link|enfusion://ScriptEditor/scripts/GameCode/Weapon/BaseAttachmentSlotComponent.c;5|BaseAttachmentSlotComponent}} | BaseAttachmentSlotComponentClass = {{Link|enfusion://ScriptEditor/scripts/GameCode/Weapon/BaseAttachmentSlotComponent.c;1|BaseAttachmentSlotComponentClass}} | BaseAttachmentType = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Base/BaseAttachmentType.c;12|BaseAttachmentType}} | BaseAutopilotHelperComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/BaseAutopilotHelperComponent.c;16|BaseAutopilotHelperComponent}} | BaseAutopilotHelperComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/BaseAutopilotHelperComponent.c;12|BaseAutopilotHelperComponentClass}} | BaseBuilding = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Building/BaseBuilding.c;16|BaseBuilding}} | BaseBuildingClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Building/BaseBuilding.c;12|BaseBuildingClass}} | BaseChatChannel = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Chat/BaseChatChannel.c;12|BaseChatChannel}} | BaseChatChannelStyle = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Chat/BaseChatChannelStyle.c;12|BaseChatChannelStyle}} | BaseChatComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/BaseChatComponent.c;17|BaseChatComponent}} | BaseChatComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/BaseChatComponent.c;12|BaseChatComponentClass}} | BaseChatEntity = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Entities/BaseChatEntity.c;16|BaseChatEntity}} | BaseChatEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Entities/BaseChatEntity.c;12|BaseChatEntityClass}} | BaseCollimatorReticleColor = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/BaseCollimatorReticleColor.c;12|BaseCollimatorReticleColor}} | BaseCollimatorReticleInfo = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/BaseCollimatorReticleInfo.c;12|BaseCollimatorReticleInfo}} | BaseCollimatorSightsComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/BaseCollimatorSightsComponent.c;12|BaseCollimatorSightsComponent}} | BaseCollimatorSightsComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/BaseCollimatorSightsComponentClass.c;12|BaseCollimatorSightsComponentClass}} | BaseCommandHandlerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Base/BaseCommandHandlerComponent.c;16|BaseCommandHandlerComponent}} | BaseCommandHandlerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Base/BaseCommandHandlerComponent.c;12|BaseCommandHandlerComponentClass}} | BaseCompartmentDoor = {{Link|enfusion://ScriptEditor/scripts/Game/generated/BaseCompartmentDoor.c;7|BaseCompartmentDoor}} | BaseCompartmentManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/BaseCompartmentManagerComponent.c;12|BaseCompartmentManagerComponent}} | BaseCompartmentManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/BaseCompartmentManagerComponentClass.c;12|BaseCompartmentManagerComponentClass}} | BaseCompartmentManagerComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Serializers/BaseCompartmentManagerComponentSerializer.c;12|BaseCompartmentManagerComponentSerializer}} | BaseCompartmentSlot = {{Link|enfusion://ScriptEditor/scripts/GameCode/Vehicle/BaseCompartmentSlot.c;1|BaseCompartmentSlot}} | BaseContainer = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Containers/BaseContainer.c;12|BaseContainer}} | BaseContainerCatalogPlacableEntitiesTitleField = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/PlaceableEntities/SCR_PlaceableEntitiesRegistryFromCatalog.c;71|BaseContainerCatalogPlacableEntitiesTitleField}} | BaseContainerCustomCheckIntTitleField = {{Link|enfusion://ScriptEditor/scripts/Game/Global/Attributes.c;740|BaseContainerCustomCheckIntTitleField}} | BaseContainerCustomCheckIntWithFlagTitleField = {{Link|enfusion://ScriptEditor/scripts/Game/Global/Attributes.c;787|BaseContainerCustomCheckIntWithFlagTitleField}} | BaseContainerCustomDoubleCheckIntResourceNameTitleField = {{Link|enfusion://ScriptEditor/scripts/Game/Global/Attributes.c;672|BaseContainerCustomDoubleCheckIntResourceNameTitleField}} | BaseContainerCustomDoubleCheckTitleField = {{Link|enfusion://ScriptEditor/scripts/Game/Global/Attributes.c;607|BaseContainerCustomDoubleCheckTitleField}} | BaseContainerCustomDoubleTitleField = {{Link|enfusion://ScriptEditor/scripts/Game/Global/Attributes.c;562|BaseContainerCustomDoubleTitleField}} | BaseContainerCustomEnumWithValue = {{Link|enfusion://ScriptEditor/scripts/Game/Global/Attributes.c;364|BaseContainerCustomEnumWithValue}} | BaseContainerCustomStringTitleField = {{Link|enfusion://ScriptEditor/scripts/Game/Global/Attributes.c;533|BaseContainerCustomStringTitleField}} | BaseContainerCustomTitle = {{Link|enfusion://ScriptEditor/scripts/Core/generated/BaseContainerCustomTitle.c;29|BaseContainerCustomTitle}} | BaseContainerCustomTitleBlenderVersion = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/EBTConfig.c;132|BaseContainerCustomTitleBlenderVersion}} | BaseContainerCustomTitleField = {{Link|enfusion://ScriptEditor/scripts/Core/attributes.c;438|BaseContainerCustomTitleField}} | BaseContainerList = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Containers/BaseContainerList.c;12|BaseContainerList}} | BaseContainerObject = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Core/BaseContainerObject.c;16|BaseContainerObject}} | BaseContainerProps = {{Link|enfusion://ScriptEditor/scripts/Core/attributes.c;417|BaseContainerProps}} | BaseContainerTools = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Containers/BaseContainerTools.c;12|BaseContainerTools}} | BaseControllerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/BaseControllerComponent.c;16|BaseControllerComponent}} | BaseControllerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/BaseControllerComponent.c;12|BaseControllerComponentClass}} | BaseDamageAreaShape = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Damage/DamageAreas/Shapes/BaseDamageAreaShape.c;12|BaseDamageAreaShape}} | BaseDamageContext = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Damage/BaseDamageContext.c;12|BaseDamageContext}} | BaseDamageEffect = {{Link|enfusion://ScriptEditor/scripts/Game/generated/DamageEffects/BaseDamageEffect.c;12|BaseDamageEffect}} | BaseDecoratorTest = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/BaseDecoratorTest.c;12|BaseDecoratorTest}} | BaseDestructibleData = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Destruction/BaseDestructibleData.c;12|BaseDestructibleData}} | BaseDestructionPhase = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Destruction/BaseDestructionPhase.c;12|BaseDestructionPhase}} | BaseDialogueInterface = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Dialogue/BaseDialogueInterface.c;12|BaseDialogueInterface}} | BaseDoorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/BaseDoorComponent.c;12|BaseDoorComponent}} | BaseDoorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/BaseDoorComponentClass.c;12|BaseDoorComponentClass}} | BaseEffectComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Effects/BaseEffectComponent.c;16|BaseEffectComponent}} | BaseEffectComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Effects/BaseEffectComponent.c;12|BaseEffectComponentClass}} | BaseEjectorInterface = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/BaseEjectorInterface.c;12|BaseEjectorInterface}} | BaseEquipedWeaponStorageComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/BaseEquipedWeaponStorageComponent.c;16|BaseEquipedWeaponStorageComponent}} | BaseEquipedWeaponStorageComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/BaseEquipedWeaponStorageComponent.c;12|BaseEquipedWeaponStorageComponentClass}} | BaseEquipmentStorageComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/BaseEquipmentStorageComponent.c;16|BaseEquipmentStorageComponent}} | BaseEquipmentStorageComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/BaseEquipmentStorageComponent.c;12|BaseEquipmentStorageComponentClass}} | BaseEventHandler = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Events/BaseEventHandler.c;12|BaseEventHandler}} | BaseExplosionDamage = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Projectile/Explosions/BaseExplosionDamage.c;12|BaseExplosionDamage}} | BaseFireMode = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/BaseFireMode.c;12|BaseFireMode}} | BaseFuelNode = {{Link|enfusion://ScriptEditor/scripts/Game/generated/UI/BaseFuelNode.c;12|BaseFuelNode}} | BaseGameEntity = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Entities/BaseGameEntity.c;16|BaseGameEntity}} | BaseGameEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Entities/BaseGameEntity.c;12|BaseGameEntityClass}} | BaseGameMode = {{Link|enfusion://ScriptEditor/scripts/Game/generated/GameMode/BaseGameMode.c;16|BaseGameMode}} | BaseGameModeClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/GameMode/BaseGameMode.c;12|BaseGameModeClass}} | BaseGameTriggerEntity = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Trigger/BaseGameTriggerEntity.c;16|BaseGameTriggerEntity}} | BaseGameTriggerEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Trigger/BaseGameTriggerEntity.c;12|BaseGameTriggerEntityClass}} | BaseGridMap = {{Link|enfusion://ScriptEditor/scripts/Game/generated/GridMap/BaseGridMap.c;16|BaseGridMap}} | BaseHoveredInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Conflict/SCR_MapCampaignUI.c;3|BaseHoveredInvoker}} | BaseHUDComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/UI/HUD/BaseHUDComponent.c;16|BaseHUDComponent}} | BaseHUDComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/UI/HUD/BaseHUDComponent.c;12|BaseHUDComponentClass}} | BaseInfoDisplay = {{Link|enfusion://ScriptEditor/scripts/Game/generated/UI/HUD/BaseInfoDisplay.c;12|BaseInfoDisplay}} | BaseInteractionHandlerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/UserAction/BaseInteractionHandlerComponent.c;18|BaseInteractionHandlerComponent}} | BaseInteractionHandlerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/UserAction/BaseInteractionHandlerComponent.c;12|BaseInteractionHandlerComponentClass}} | BaseInventorySearchPredicate = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/InventoryTask/BaseInventorySearchPredicate.c;12|BaseInventorySearchPredicate}} | BaseInventoryStorageComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/BaseInventoryStorageComponent.c;16|BaseInventoryStorageComponent}} | BaseInventoryStorageComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/BaseInventoryStorageComponent.c;12|BaseInventoryStorageComponentClass}} | BaseInventoryStorageComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Serializers/BaseInventoryStorageComponentSerializer.c;12|BaseInventoryStorageComponentSerializer}} | BaseInventoryStorageComponentSerializerSlot = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Serializers/BaseInventoryStorageComponentSerializerSlot.c;12|BaseInventoryStorageComponentSerializerSlot}} | BaseInventoryTask = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/InventoryTask/BaseInventoryTask.c;12|BaseInventoryTask}} | BaseItemAnimationComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/BaseItemAnimationComponent.c;12|BaseItemAnimationComponent}} | BaseItemAnimationComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/BaseItemAnimationComponentClass.c;12|BaseItemAnimationComponentClass}} | BaseItemAttributeData = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/BaseItemAttributeData.c;12|BaseItemAttributeData}} | BaseJsonSerializationSaveContainer = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Serialization/BaseJsonSerializationSaveContainer.c;16|BaseJsonSerializationSaveContainer}} | BaseLightManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/BaseLightManagerComponent.c;16|BaseLightManagerComponent}} | BaseLightManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/BaseLightManagerComponent.c;12|BaseLightManagerComponentClass}} | BaseLightManagerComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Serializers/BaseLightManagerComponentSerializer.c;12|BaseLightManagerComponentSerializer}} | BaseLightSlot = {{Link|enfusion://ScriptEditor/scripts/Game/generated/BaseLightSlot.c;7|BaseLightSlot}} | BaseLightUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/generated/UserAction/BaseLightUserAction.c;12|BaseLightUserAction}} | BaseListboxWidget = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/BaseListboxWidget.c;12|BaseListboxWidget}} | BaseLoadingAnim = {{Link|enfusion://ScriptEditor/scripts/GameLib/gameLib.c;212|BaseLoadingAnim}} | BaseLoadoutClothComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Loadout/BaseLoadoutClothComponent.c;12|BaseLoadoutClothComponent}} | BaseLoadoutClothComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Loadout/BaseLoadoutClothComponentClass.c;12|BaseLoadoutClothComponentClass}} | BaseLoadoutManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Loadout/BaseLoadoutManagerComponent.c;16|BaseLoadoutManagerComponent}} | BaseLoadoutManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Loadout/BaseLoadoutManagerComponent.c;12|BaseLoadoutManagerComponentClass}} | BaseMagazineComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/BaseMagazineComponent.c;12|BaseMagazineComponent}} | BaseMagazineComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/BaseMagazineComponentClass.c;12|BaseMagazineComponentClass}} | BaseMagazineWell = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/BaseMagazineWell.c;12|BaseMagazineWell}} | BaseMaterialParamsComponent = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Components/BaseMaterialParamsComponent.c;19|BaseMaterialParamsComponent}} | BaseMaterialParamsComponentClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Components/BaseMaterialParamsComponent.c;12|BaseMaterialParamsComponentClass}} | BaseMissileGuidanceComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Projectile/BaseMissileGuidanceComponent.c;16|BaseMissileGuidanceComponent}} | BaseMissileGuidanceComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Projectile/BaseMissileGuidanceComponent.c;12|BaseMissileGuidanceComponentClass}} | BaseMuzzleComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/BaseMuzzleComponent.c;12|BaseMuzzleComponent}} | BaseMuzzleComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/BaseMuzzleComponentClass.c;12|BaseMuzzleComponentClass}} | BaseMuzzleComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Serializers/BaseMuzzleComponentSerializer.c;12|BaseMuzzleComponentSerializer}} | BasePreloadManager = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Preload/BasePreloadManager.c;16|BasePreloadManager}} | BasePreloadManagerClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Preload/BasePreloadManager.c;12|BasePreloadManagerClass}} | BaseProcAnimComponent = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Components/BaseProcAnimComponent.c;16|BaseProcAnimComponent}} | BaseProcAnimComponentClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Components/BaseProcAnimComponent.c;12|BaseProcAnimComponentClass}} | BaseProjectileComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Projectile/BaseProjectileComponent.c;16|BaseProjectileComponent}} | BaseProjectileComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Projectile/BaseProjectileComponent.c;12|BaseProjectileComponentClass}} | BaseProjectileEffect = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Projectile/BaseProjectileEffect.c;12|BaseProjectileEffect}} | BaseRadioComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/BaseRadioComponent.c;16|BaseRadioComponent}} | BaseRadioComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/BaseRadioComponent.c;12|BaseRadioComponentClass}} | BaseRadioComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Serializers/BaseRadioComponentSerializer.c;12|BaseRadioComponentSerializer}} | BaseRadioMessage = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Radio/BaseRadioMessage.c;12|BaseRadioMessage}} | BaseResourceObject = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Resources/BaseResourceObject.c;12|BaseResourceObject}} | BaseRoad = {{Link|enfusion://ScriptEditor/scripts/Game/generated/RoadNetwork/BaseRoad.c;12|BaseRoad}} | BaseRplComponent = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Components/BaseRplComponent.c;72|BaseRplComponent}} | BaseRplComponentClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Components/BaseRplComponent.c;12|BaseRplComponentClass}} | BaseScriptedCameraItem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Camera/BaseScriptedCameraItem.c;12|BaseScriptedCameraItem}} | BaseScriptedCameraSet = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Camera/BaseScriptedCameraSet.c;12|BaseScriptedCameraSet}} | BaseScriptedSelectionMenuEntry = {{Link|enfusion://ScriptEditor/scripts/Game/generated/UI/HUD/SelectionMenu/BaseScriptedSelectionMenuEntry.c;12|BaseScriptedSelectionMenuEntry}} | BaseSelectionMenu = {{Link|enfusion://ScriptEditor/scripts/Game/generated/UI/HUD/SelectionMenu/BaseSelectionMenu.c;12|BaseSelectionMenu}} | BaseSelectionMenuEntry = {{Link|enfusion://ScriptEditor/scripts/Game/generated/UI/HUD/SelectionMenu/BaseSelectionMenuEntry.c;12|BaseSelectionMenuEntry}} | BaseSensor = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Perception/BaseSensor.c;12|BaseSensor}} | BaseSerializationContainer = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Serialization/BaseSerializationContainer.c;15|BaseSerializationContainer}} | BaseSerializationContext = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Serialization/BaseSerializationContext.c;15|BaseSerializationContext}} | BaseSerializationLoadContainer = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Serialization/BaseSerializationLoadContainer.c;16|BaseSerializationLoadContainer}} | BaseSerializationLoadContext = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Serialization/BaseSerializationLoadContext.c;16|BaseSerializationLoadContext}} | BaseSerializationSaveContainer = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Serialization/BaseSerializationSaveContainer.c;16|BaseSerializationSaveContainer}} | BaseSerializationSaveContext = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Serialization/BaseSerializationSaveContext.c;16|BaseSerializationSaveContext}} | BaseSightsComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/BaseSightsComponent.c;12|BaseSightsComponent}} | BaseSightsComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/BaseSightsComponentClass.c;12|BaseSightsComponentClass}} | BaseSinglePortContainer = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/BaseSinglePortContainer.c;12|BaseSinglePortContainer}} | BaseSlotComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Buildings/BaseSlotComponent.c;12|BaseSlotComponent}} | BaseSlotComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Buildings/BaseSlotComponentClass.c;12|BaseSlotComponentClass}} | BaseSlotMapping = {{Link|enfusion://ScriptEditor/scripts/Game/generated/BaseSlotMapping.c;7|BaseSlotMapping}} | BaseSoundComponent = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Components/BaseSoundComponent.c;16|BaseSoundComponent}} | BaseSoundComponentClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Components/BaseSoundComponent.c;12|BaseSoundComponentClass}} | BaseStaminaComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Base/BaseStaminaComponent.c;16|BaseStaminaComponent}} | BaseStaminaComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Base/BaseStaminaComponent.c;12|BaseStaminaComponentClass}} | BaseSystem = {{Link|enfusion://ScriptEditor/scripts/GameLib/gameLib.c;4|BaseSystem}} | BaseTarget = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Perception/BaseTarget.c;12|BaseTarget}} | BaseTimeAndWeatherManagerEntity = {{Link|enfusion://ScriptEditor/scripts/Game/generated/World/BaseTimeAndWeatherManagerEntity.c;20|BaseTimeAndWeatherManagerEntity}} | BaseTimeAndWeatherManagerEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/World/BaseTimeAndWeatherManagerEntity.c;12|BaseTimeAndWeatherManagerEntityClass}} | BaseTransceiver = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Radio/BaseTransceiver.c;12|BaseTransceiver}} | BaseTree = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vegetation/BaseTree.c;16|BaseTree}} | BaseTreeClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vegetation/BaseTree.c;12|BaseTreeClass}} | BaseTriggerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Projectile/Trigger/BaseTriggerComponent.c;12|BaseTriggerComponent}} | BaseTriggerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Projectile/Trigger/BaseTriggerComponentClass.c;12|BaseTriggerComponentClass}} | BaseUniversalInventoryStorageComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/BaseUniversalInventoryStorageComponent.c;16|BaseUniversalInventoryStorageComponent}} | BaseUniversalInventoryStorageComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/BaseUniversalInventoryStorageComponent.c;12|BaseUniversalInventoryStorageComponentClass}} | BaseUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/generated/UserAction/BaseUserAction.c;12|BaseUserAction}} | BaseVehicle = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/BaseVehicle.c;12|BaseVehicle}} | BaseVehicleClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/BaseVehicleClass.c;12|BaseVehicleClass}} | BaseVehicleControllerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/BaseVehicleControllerComponent.c;16|BaseVehicleControllerComponent}} | BaseVehicleControllerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/BaseVehicleControllerComponent.c;12|BaseVehicleControllerComponentClass}} | BaseVehicleNodeComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/BaseVehicleNodeComponent.c;16|BaseVehicleNodeComponent}} | BaseVehicleNodeComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/BaseVehicleNodeComponent.c;12|BaseVehicleNodeComponentClass}} | BaseWeaponAimModifier = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/BaseWeaponAimModifier.c;12|BaseWeaponAimModifier}} | BaseWeaponComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/BaseWeaponComponent.c;12|BaseWeaponComponent}} | BaseWeaponComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/BaseWeaponComponentClass.c;12|BaseWeaponComponentClass}} | BaseWeaponManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/BaseWeaponManagerComponent.c;16|BaseWeaponManagerComponent}} | BaseWeaponManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/BaseWeaponManagerComponent.c;12|BaseWeaponManagerComponentClass}} | BaseWeaponStatsManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/BaseWeaponStatsManagerComponent.c;16|BaseWeaponStatsManagerComponent}} | BaseWeaponStatsManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/BaseWeaponStatsManagerComponent.c;12|BaseWeaponStatsManagerComponentClass}} | BaseWeatherManagerEntity = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/BaseWeatherManagerEntity.c;16|BaseWeatherManagerEntity}} | BaseWeatherManagerEntityClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/BaseWeatherManagerEntity.c;12|BaseWeatherManagerEntityClass}} | BaseWeatherStateTransitionManager = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/BaseWeatherStateTransitionManager.c;7|BaseWeatherStateTransitionManager}} | BaseWeatherTransitionCallbacks = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/BaseWeatherTransitionCallbacks.c;7|BaseWeatherTransitionCallbacks}} | BaseWorkshopItem = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/BaseWorkshopItem.c;12|BaseWorkshopItem}} | BaseWorld = {{Link|enfusion://ScriptEditor/scripts/Core/generated/World/BaseWorld.c;12|BaseWorld}} | BaseZeroingGenerator = {{Link|enfusion://ScriptEditor/scripts/Game/generated/BaseZeroingGenerator.c;11|BaseZeroingGenerator}} | BasicButtonComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Deprecated/BasicButtonComponent.c;1|BasicButtonComponent}} | BasicGraphWidget = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/BasicGraphWidget.c;12|BasicGraphWidget}} | BasicPrefabList = {{Link|enfusion://ScriptEditor/scripts/GameCode/Core/PrefabList.c;70|BasicPrefabList}} | BasicPrefabListClass = {{Link|enfusion://ScriptEditor/scripts/GameCode/Core/PrefabList.c;66|BasicPrefabListClass}} | BatchTextureProcessorPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/TextureImportTool.c;941|BatchTextureProcessorPlugin}} | BattlEyeInitError = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/BattlEyeInitError.c;7|BattlEyeInitError}} | BattlEyeKickReason = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/BattlEyeKickReason.c;7|BattlEyeKickReason}} | BehaviorEditor = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorkbenchAPI/Modules/BehaviorEditor.c;14|BehaviorEditor}} | BehaviorTree = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/BehaviorTree.c;12|BehaviorTree}} | BehaviorTreeSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/WorldSystems/BehaviorTreeSystem.c;12|BehaviorTreeSystem}} | BetaWarningDialogUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/BetaWarningDialog.c;2|BetaWarningDialogUI}} | BigForestGeneratorClusterObject = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/ForestGenerator/ForestGeneratorClusters.c;179|BigForestGeneratorClusterObject}} | BiggerOrEqualToFloat = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Dialogue/BiggerOrEqualToFloat.c;12|BiggerOrEqualToFloat}} | BiggerOrEqualToInt = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Dialogue/BiggerOrEqualToInt.c;12|BiggerOrEqualToInt}} | BiggerThanFloat = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Dialogue/BiggerThanFloat.c;12|BiggerThanFloat}} | BiggerThanToInt = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Dialogue/BiggerThanToInt.c;12|BiggerThanToInt}} | BinSerializationContainer = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Serialization/BinSerializationContainer.c;12|BinSerializationContainer}} | BinSerializationLoadContainer = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Serialization/BinSerializationLoadContainer.c;16|BinSerializationLoadContainer}} | BinSerializationSaveContainer = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Serialization/BinSerializationSaveContainer.c;13|BinSerializationSaveContainer}} | BirdAnimationComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Animal/BirdAnimationComponent.c;12|BirdAnimationComponent}} | BirdAnimationComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Animal/BirdAnimationComponentClass.c;12|BirdAnimationComponentClass}} | BirdAnimationsUpdateSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/BirdAnimationsUpdateSystem.c;12|BirdAnimationsUpdateSystem}} | BlenderOperatorDescription = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/CallBlenderFunction.c;52|BlenderOperatorDescription}} | BlenderPathContainer = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/EBTConfig.c;156|BlenderPathContainer}} | BlendMode = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/ResourceInfo.c;4|BlendMode}} | BlobBundler = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Bundling/BlobBundler.c;12|BlobBundler}} | BlockedRoomPlayer = {{Link|enfusion://ScriptEditor/scripts/Game/generated/online/BlockedRoomPlayer.c;12|BlockedRoomPlayer}} | BlockListItem = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/BlockListItem.c;13|BlockListItem}} | BlurWidget = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/BlurWidget.c;12|BlurWidget}} | BohemiaAccountApi = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/BohemiaAccountApi.c;18|BohemiaAccountApi}} | BoidsSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/BoidsSystem.c;12|BoidsSystem}} | BoneMask = {{Link|enfusion://ScriptEditor/scripts/Core/proto/EnEntity.c;17|BoneMask}} | bool = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Types/bool.c;12|bool}} | BoundingVolumeScr = {{Link|enfusion://ScriptEditor/scripts/GameLib/objects/BoundingVolumeScr.c;4|BoundingVolumeScr}} | BTNodeAttribute = {{Link|enfusion://ScriptEditor/scripts/GameLib/attributes.c;24|BTNodeAttribute}} | BTNodeInAttribute = {{Link|enfusion://ScriptEditor/scripts/GameLib/attributes.c;34|BTNodeInAttribute}} | BTNodeOutAttribute = {{Link|enfusion://ScriptEditor/scripts/GameLib/attributes.c;38|BTNodeOutAttribute}} | BTRBodyDustTrail = {{Link|enfusion://ScriptEditor/scripts/Game/Effects/ParticleEmitter/VehicleBody/BTRBodyDustTrail.c;5|BTRBodyDustTrail}} | BTRBodyDustTrailClass = {{Link|enfusion://ScriptEditor/scripts/Game/Effects/ParticleEmitter/VehicleBody/BTRBodyDustTrail.c;1|BTRBodyDustTrailClass}} | BtVariable = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/BtVariable.c;12|BtVariable}} | BtVariableAISmartActionComponent = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Utils/SCR_AISetPosition.c;1|BtVariableAISmartActionComponent}} | BtVariableBool = {{Link|enfusion://ScriptEditor/scripts/Game/AI/BtVariables.c;35|BtVariableBool}} | BtVariableEntity = {{Link|enfusion://ScriptEditor/scripts/Game/AI/BtVariables.c;10|BtVariableEntity}} | BtVariableGroup = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Groups/SCR_AIGetMyGroup.c;1|BtVariableGroup}} | BtVariableInteger = {{Link|enfusion://ScriptEditor/scripts/Game/AI/BtVariables.c;30|BtVariableInteger}} | BtVariableObject = {{Link|enfusion://ScriptEditor/scripts/Game/AI/BtVariables.c;5|BtVariableObject}} | BtVariableResourceName = {{Link|enfusion://ScriptEditor/scripts/Game/AI/BtVariables.c;20|BtVariableResourceName}} | BtVariableScalar = {{Link|enfusion://ScriptEditor/scripts/Game/AI/BtVariables.c;25|BtVariableScalar}} | BtVariableString = {{Link|enfusion://ScriptEditor/scripts/Game/AI/BtVariables.c;15|BtVariableString}} | BtVariableTypename = {{Link|enfusion://ScriptEditor/scripts/Game/AI/BtVariables.c;45|BtVariableTypename}} | BtVariableVector = {{Link|enfusion://ScriptEditor/scripts/Game/AI/BtVariables.c;40|BtVariableVector}} | BufferSerializationSaveContext = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Serialization/BufferSerializationSaveContext.c;15|BufferSerializationSaveContext}} | BuildableEntitySerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Entities/BuildableEntity.c;1|BuildableEntitySerializer}} | Building = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Building/Building.c;12|Building}} | BuildingClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Building/BuildingClass.c;12|BuildingClass}} | BuildingDamageState = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/Building/SCR_DestructibleBuildingEntity.c;34|BuildingDamageState}} | BuildResourceContext = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorkbenchAPI/BuildResourceContext.c;14|BuildResourceContext}} | BuildShoreMap = {{Link|enfusion://ScriptEditor/scripts/WorkbenchCommon/ShoreTool.c;1|BuildShoreMap}} | BuildShoreMapWEPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchCommon/ShoreTool.c;58|BuildShoreMapWEPlugin}} | BuoyancyComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Physics/BuoyancyComponent.c;12|BuoyancyComponent}} | BuoyancyComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Physics/BuoyancyComponentClass.c;12|BuoyancyComponentClass}} | BuoyancySystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/BuoyancySystem.c;12|BuoyancySystem}} | BurnUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_BurnUserAction.c;1|BurnUserAction}} | ButtonActionComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/ButtonComponents/ButtonActionComponent.c;2|ButtonActionComponent}} | ButtonAttribute = {{Link|enfusion://ScriptEditor/scripts/GameLib/workbench/workbench.c;40|ButtonAttribute}} | ButtonComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Deprecated/ButtonComponent.c;5|ButtonComponent}} | ButtonSlot = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/ButtonSlot.c;12|ButtonSlot}} | ButtonTexture = {{Link|enfusion://ScriptEditor/scripts/Game/generated/UI/Actions/ButtonTexture.c;12|ButtonTexture}} | ButtonWidget = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/ButtonWidget.c;15|ButtonWidget}} | CallbackContext = {{Link|enfusion://ScriptEditor/scripts/Core/attributes.c;493|CallbackContext}} | CallbackMethod = {{Link|enfusion://ScriptEditor/scripts/Core/attributes.c;471|CallbackMethod}} | CameraBase = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Camera/CameraBase.c;16|CameraBase}} | CameraBaseClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Camera/CameraBase.c;12|CameraBaseClass}} | CameraHandlerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Camera/CameraHandlerComponent.c;12|CameraHandlerComponent}} | CameraHandlerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Camera/CameraHandlerComponentClass.c;12|CameraHandlerComponentClass}} | CameraLensFlareSetType = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Visual/CameraLensFlareSetType.c;13|CameraLensFlareSetType}} | CameraManager = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Camera/CameraManager.c;16|CameraManager}} | CameraManagerClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Camera/CameraManager.c;12|CameraManagerClass}} | CameraOrientationTool = {{Link|enfusion://ScriptEditor/scripts/WorkbenchCommon/ViewOrientationTool.c;59|CameraOrientationTool}} | CamerasSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/CamerasSystem.c;12|CamerasSystem}} | CameraTweekCinematicTrack = {{Link|enfusion://ScriptEditor/scripts/Game/Cinematics/CameraTweakCinematicTrack.c;1|CameraTweekCinematicTrack}} | CameraType = {{Link|enfusion://ScriptEditor/scripts/Core/generated/World/CameraType.c;13|CameraType}} | CampaignBasesSystem = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/CampaignBasesSystem.c;1|CampaignBasesSystem}} | CanvasWidget = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/CanvasWidget.c;12|CanvasWidget}} | CanvasWidgetBase = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/CanvasWidgetBase.c;15|CanvasWidgetBase}} | CanvasWidgetCommand = {{Link|enfusion://ScriptEditor/scripts/Core/proto/EnWidgets.c;74|CanvasWidgetCommand}} | CaptureAreaEvent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Areas/SCR_CaptureArea.c;9|CaptureAreaEvent}} | CaptureAreaOwnershipEvent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Areas/SCR_CaptureArea.c;14|CaptureAreaOwnershipEvent}} | CaptureAreaTickEvent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/CaptureAndHold/SCR_CaptureAndHoldArea.c;9|CaptureAreaTickEvent}} | CarControllerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/CarControllerComponent.c;16|CarControllerComponent}} | CarControllerComponent_B = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/CarControllerComponent_B.c;16|CarControllerComponent_B}} | CarControllerComponent_BClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/CarControllerComponent_B.c;12|CarControllerComponent_BClass}} | CarControllerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/CarControllerComponent.c;12|CarControllerComponentClass}} | CarControllerComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Serializers/CarControllerComponentSerializer.c;12|CarControllerComponentSerializer}} | CareerBackendData = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Backend/CareerBackend.c;43|CareerBackendData}} | CareerMenuUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/CareerMenuUI.c;2|CareerMenuUI}} | CargoCompartmentSlot = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/CargoCompartmentSlot.c;12|CargoCompartmentSlot}} | CarProcAnimComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/CarProcAnimComponent.c;16|CarProcAnimComponent}} | CarProcAnimComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/CarProcAnimComponent.c;12|CarProcAnimComponentClass}} | CaseEjectingEffectComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/CaseEjectingEffectComponent.c;16|CaseEjectingEffectComponent}} | CaseEjectingEffectComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/CaseEjectingEffectComponent.c;12|CaseEjectingEffectComponentClass}} | CharacterAimingComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/CharacterAimingComponent.c;12|CharacterAimingComponent}} | CharacterAimingComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/CharacterAimingComponentClass.c;12|CharacterAimingComponentClass}} | CharacterAnimationComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/CharacterAnimationComponent.c;12|CharacterAnimationComponent}} | CharacterAnimationComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/CharacterAnimationComponentClass.c;12|CharacterAnimationComponentClass}} | CharacterAnimGraphComponent = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Components/Character/CharacterAnimGraphComponent.c;12|CharacterAnimGraphComponent}} | CharacterAnimGraphComponentClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/CharacterAnimGraphComponentClass.c;7|CharacterAnimGraphComponentClass}} | CharacterBuoyancyComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/CharacterBuoyancyComponent.c;12|CharacterBuoyancyComponent}} | CharacterBuoyancyComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/CharacterBuoyancyComponentClass.c;12|CharacterBuoyancyComponentClass}} | CharacterCamera1stPerson = {{Link|enfusion://ScriptEditor/scripts/Game/Character/Cameras/FirstPerson/CharacterCamera1stPerson.c;4|CharacterCamera1stPerson}} | CharacterCamera1stPersonBoneTransform = {{Link|enfusion://ScriptEditor/scripts/Game/Character/Cameras/FirstPerson/CharacterCamera1stPerson.c;135|CharacterCamera1stPersonBoneTransform}} | CharacterCamera1stPersonFloat = {{Link|enfusion://ScriptEditor/scripts/Game/Character/Cameras/FirstPerson/CharacterCamera1stPersonFloat.c;4|CharacterCamera1stPersonFloat}} | CharacterCamera1stPersonReady = {{Link|enfusion://ScriptEditor/scripts/Game/Character/Cameras/FirstPerson/CharacterCamera1stPersonReady.c;4|CharacterCamera1stPersonReady}} | CharacterCamera1stPersonTurret = {{Link|enfusion://ScriptEditor/scripts/Game/Character/Cameras/FirstPerson/CharacterCamera1stPersonTurret.c;5|CharacterCamera1stPersonTurret}} | CharacterCamera1stPersonTurretTransition = {{Link|enfusion://ScriptEditor/scripts/Game/Character/Cameras/FirstPerson/CharacterCamera1stPersonTurret.c;181|CharacterCamera1stPersonTurretTransition}} | CharacterCamera1stPersonUnconscious = {{Link|enfusion://ScriptEditor/scripts/Game/Character/Cameras/FirstPerson/CharacterCamera1stPersonUnconscious.c;4|CharacterCamera1stPersonUnconscious}} | CharacterCamera1stPersonVehicle = {{Link|enfusion://ScriptEditor/scripts/Game/Character/Cameras/FirstPerson/CharacterCamera1stPersonVehicle.c;6|CharacterCamera1stPersonVehicle}} | CharacterCamera1stPersonVehicleTransition = {{Link|enfusion://ScriptEditor/scripts/Game/Character/Cameras/FirstPerson/CharacterCamera1stPersonVehicle.c;179|CharacterCamera1stPersonVehicleTransition}} | CharacterCamera3rdPersonBase = {{Link|enfusion://ScriptEditor/scripts/Game/Character/Cameras/ThirdPerson/CharacterCamera3rdPersonBase.c;4|CharacterCamera3rdPersonBase}} | CharacterCamera3rdPersonClimb = {{Link|enfusion://ScriptEditor/scripts/Game/Character/Cameras/ThirdPerson/CharacterCamera3rdPersonClimb.c;4|CharacterCamera3rdPersonClimb}} | CharacterCamera3rdPersonCrouch = {{Link|enfusion://ScriptEditor/scripts/Game/Character/Cameras/ThirdPerson/CharacterCamera3rdPersonCrouch.c;4|CharacterCamera3rdPersonCrouch}} | CharacterCamera3rdPersonErc = {{Link|enfusion://ScriptEditor/scripts/Game/Character/Cameras/ThirdPerson/CharacterCamera3rdPersonErc.c;4|CharacterCamera3rdPersonErc}} | CharacterCamera3rdPersonFloat = {{Link|enfusion://ScriptEditor/scripts/Game/Character/Cameras/ThirdPerson/CharacterCamera3rdPersonFloat.c;4|CharacterCamera3rdPersonFloat}} | CharacterCamera3rdPersonProne = {{Link|enfusion://ScriptEditor/scripts/Game/Character/Cameras/ThirdPerson/CharacterCamera3rdPersonProne.c;4|CharacterCamera3rdPersonProne}} | CharacterCamera3rdPersonSitting = {{Link|enfusion://ScriptEditor/scripts/Game/Character/Cameras/ThirdPerson/CharacterCamera3rdPersonSitting.c;4|CharacterCamera3rdPersonSitting}} | CharacterCamera3rdPersonTurret = {{Link|enfusion://ScriptEditor/scripts/Game/Character/Cameras/ThirdPerson/CharacterCamera3rdPersonTurret.c;5|CharacterCamera3rdPersonTurret}} | CharacterCamera3rdPersonUnconscious = {{Link|enfusion://ScriptEditor/scripts/Game/Character/Cameras/ThirdPerson/CharacterCamera3rdPersonUnconscious.c;4|CharacterCamera3rdPersonUnconscious}} | CharacterCamera3rdPersonVehicle = {{Link|enfusion://ScriptEditor/scripts/Game/Character/Cameras/ThirdPerson/CharacterCamera3rdPersonVehicle.c;5|CharacterCamera3rdPersonVehicle}} | CharacterCameraADS = {{Link|enfusion://ScriptEditor/scripts/Game/Character/Cameras/ADS/CharacterCameraADS.c;4|CharacterCameraADS}} | CharacterCameraADSVehicle = {{Link|enfusion://ScriptEditor/scripts/Game/Character/Cameras/ADS/CharacterCameraADSVehicle.c;5|CharacterCameraADSVehicle}} | CharacterCameraBase = {{Link|enfusion://ScriptEditor/scripts/Game/Character/Cameras/CharacterCameraBase.c;1|CharacterCameraBase}} | CharacterCameraBinoculars = {{Link|enfusion://ScriptEditor/scripts/Game/Character/Cameras/CharacterCameraBinoculars.c;1|CharacterCameraBinoculars}} | CharacterCameraDebug = {{Link|enfusion://ScriptEditor/scripts/Game/Character/Cameras/CharacterCameraDebug.c;4|CharacterCameraDebug}} | CharacterCameraSet = {{Link|enfusion://ScriptEditor/scripts/Game/Character/CharacterCameraSet.c;1|CharacterCameraSet}} | CharacterCinematicTrack = {{Link|enfusion://ScriptEditor/scripts/Game/Cinematics/CharacterCinematicTrack.c;1|CharacterCinematicTrack}} | CharacterCommand = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/CharacterCommand.c;12|CharacterCommand}} | CharacterCommandClimb = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/CharacterCommandClimb.c;15|CharacterCommandClimb}} | CharacterCommandClimbResult = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/CharacterCommandClimbResult.c;15|CharacterCommandClimbResult}} | CharacterCommandClimbSettings = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/CharacterCommandClimbSettings.c;15|CharacterCommandClimbSettings}} | CharacterCommandDamage = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/CharacterCommandDamage.c;12|CharacterCommandDamage}} | CharacterCommandDamageFullBody = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/CharacterCommandDamageFullBody.c;12|CharacterCommandDamageFullBody}} | CharacterCommandDeath = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/CharacterCommandDeath.c;12|CharacterCommandDeath}} | CharacterCommandFall = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/CharacterCommandFall.c;12|CharacterCommandFall}} | CharacterCommandGadget = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/CharacterCommandGadget.c;12|CharacterCommandGadget}} | CharacterCommandHandlerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/CharacterCommandHandlerComponent.c;12|CharacterCommandHandlerComponent}} | CharacterCommandHandlerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/CharacterCommandHandlerComponentClass.c;12|CharacterCommandHandlerComponentClass}} | CharacterCommandItemChange = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/CharacterCommandItemChange.c;12|CharacterCommandItemChange}} | CharacterCommandItemUse = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/CharacterCommandItemUse.c;12|CharacterCommandItemUse}} | CharacterCommandLadder = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/CharacterCommandLadder.c;12|CharacterCommandLadder}} | CharacterCommandMelee = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/CharacterCommandMelee.c;12|CharacterCommandMelee}} | CharacterCommandMove = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/CharacterCommandMove.c;13|CharacterCommandMove}} | CharacterCommandMoveSettings = {{Link|enfusion://ScriptEditor/scripts/GameCode/Character/CharacterCommands.c;25|CharacterCommandMoveSettings}} | CharacterCommandScripted = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/CharacterCommandScripted.c;12|CharacterCommandScripted}} | CharacterCommandSlide = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/CharacterCommandSlide.c;12|CharacterCommandSlide}} | CharacterCommandSwim = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/CharacterCommandSwim.c;13|CharacterCommandSwim}} | CharacterCommandSwimSettings = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/CharacterCommandSwimSettings.c;15|CharacterCommandSwimSettings}} | CharacterCommandUnconscious = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/CharacterCommandUnconscious.c;12|CharacterCommandUnconscious}} | CharacterCommandVehicle = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/CharacterCommandVehicle.c;12|CharacterCommandVehicle}} | CharacterCommandWeapon = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/CharacterCommandWeapon.c;12|CharacterCommandWeapon}} | CharacterControllerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/CharacterControllerComponent.c;16|CharacterControllerComponent}} | CharacterControllerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/CharacterControllerComponent.c;12|CharacterControllerComponentClass}} | CharacterControllerComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Serializers/CharacterControllerComponentSerializer.c;12|CharacterControllerComponentSerializer}} | CharacterEntity = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/CharacterEntity.c;12|CharacterEntity}} | CharacterEntityClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/CharacterEntityClass.c;12|CharacterEntityClass}} | CharacterFSMComponent = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Components/Character/CharacterFSMComponent.c;15|CharacterFSMComponent}} | CharacterFSMComponentClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Components/Character/CharacterFSMComponentClass.c;15|CharacterFSMComponentClass}} | CharacterFSMState = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Components/Character/CharacterFSMState.c;15|CharacterFSMState}} | CharacterFSMStateActivateParams = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Components/Character/CharacterFSMStateActivateParams.c;12|CharacterFSMStateActivateParams}} | CharacterGrenadeSlotComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/CharacterGrenadeSlotComponent.c;16|CharacterGrenadeSlotComponent}} | CharacterGrenadeSlotComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/CharacterGrenadeSlotComponent.c;12|CharacterGrenadeSlotComponentClass}} | CharacterHandWeaponSlotComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/CharacterHandWeaponSlotComponent.c;16|CharacterHandWeaponSlotComponent}} | CharacterHandWeaponSlotComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/CharacterHandWeaponSlotComponent.c;12|CharacterHandWeaponSlotComponentClass}} | CharacterHeadAimingComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/CharacterHeadAimingComponent.c;16|CharacterHeadAimingComponent}} | CharacterHeadAimingComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/CharacterHeadAimingComponent.c;12|CharacterHeadAimingComponentClass}} | CharacterHeadingAnimComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/CharacterHeadingAnimComponent.c;17|CharacterHeadingAnimComponent}} | CharacterHeadingAnimComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/CharacterHeadingAnimComponent.c;12|CharacterHeadingAnimComponentClass}} | CharacterIdentityComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/CharacterIdentityComponent.c;19|CharacterIdentityComponent}} | CharacterIdentityComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/CharacterIdentityComponent.c;12|CharacterIdentityComponentClass}} | CharacterIgnoreDamageSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/CharacterIgnoreDamageSystem.c;12|CharacterIgnoreDamageSystem}} | CharacterInputContext = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/CharacterInputContext.c;12|CharacterInputContext}} | CharacterInventoryStorageComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/CharacterInventoryStorageComponent.c;16|CharacterInventoryStorageComponent}} | CharacterInventoryStorageComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/CharacterInventoryStorageComponent.c;12|CharacterInventoryStorageComponentClass}} | CharacterLeaningSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/CharacterLeaningSystem.c;12|CharacterLeaningSystem}} | CharacterModifierAttributes = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/CharacterModifierAttributes.c;12|CharacterModifierAttributes}} | CharacterMovement = {{Link|enfusion://ScriptEditor/scripts/GameLib/entities/gameLibEntities.c;68|CharacterMovement}} | CharacterMovementComponent = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Components/Character/CharacterMovementComponent.c;12|CharacterMovementComponent}} | CharacterMovementComponentClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Components/CharacterMovementComponentClass.c;12|CharacterMovementComponentClass}} | CharacterMovementState = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/CharacterMovementState.c;15|CharacterMovementState}} | CharacterPerceivableComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Perception/CharacterPerceivableComponent.c;12|CharacterPerceivableComponent}} | CharacterPerceivableComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Perception/CharacterPerceivableComponentClass.c;12|CharacterPerceivableComponentClass}} | CharacterPhysicsComponent = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Components/Character/CharacterPhysicsComponent.c;15|CharacterPhysicsComponent}} | CharacterSndComponent = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Components/Character/CharacterSndComponent.c;16|CharacterSndComponent}} | CharacterSndComponentClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Components/Character/CharacterSndComponent.c;12|CharacterSndComponentClass}} | CharacterSoundComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/CharacterSoundComponent.c;12|CharacterSoundComponent}} | CharacterSoundComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/CharacterSoundComponentClass.c;12|CharacterSoundComponentClass}} | CharacterStaminaComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/CharacterStaminaComponent.c;16|CharacterStaminaComponent}} | CharacterStaminaComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/CharacterStaminaComponent.c;12|CharacterStaminaComponentClass}} | CharacterStance = {{Link|enfusion://ScriptEditor/scripts/GameLib/entities/gameLibEntities.c;76|CharacterStance}} | CharacterVicinityComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/CharacterVicinityComponent.c;12|CharacterVicinityComponent}} | CharacterVicinityComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/CharacterVicinityComponentClass.c;12|CharacterVicinityComponentClass}} | CharacterWeaponManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/CharacterWeaponManagerComponent.c;17|CharacterWeaponManagerComponent}} | CharacterWeaponManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/CharacterWeaponManagerComponent.c;12|CharacterWeaponManagerComponentClass}} | CharacterWeaponSlotComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/CharacterWeaponSlotComponent.c;12|CharacterWeaponSlotComponent}} | CharacterWeaponSlotComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/CharacterWeaponSlotComponentClass.c;12|CharacterWeaponSlotComponentClass}} | ChatCommandCallback = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Chat/SCR_ChatPanelManager.c;2|ChatCommandCallback}} | ChatCommandHandler = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Network/ChatCommandHandler.c;12|ChatCommandHandler}} | ChatCommandInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Chat/SCR_ChatPanelManager.c;4|ChatCommandInvoker}} | CheckBoxWidget = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/CheckBoxWidget.c;12|CheckBoxWidget}} | CheckGUID = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/CheckGUID.c;21|CheckGUID}} | CheckGUIDRequest = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/CheckGUID.c;1|CheckGUIDRequest}} | CheckGUIDResponse = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/CheckGUID.c;11|CheckGUIDResponse}} | CheckLocalizationPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchCommon/CheckLocTool.c;1|CheckLocalizationPlugin}} | ChimeraAIAgent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/ChimeraAIAgent.c;16|ChimeraAIAgent}} | ChimeraAIAgentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/ChimeraAIAgent.c;12|ChimeraAIAgentClass}} | ChimeraAIControlComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/ChimeraAIControlComponent.c;17|ChimeraAIControlComponent}} | ChimeraAIControlComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/ChimeraAIControlComponent.c;12|ChimeraAIControlComponentClass}} | ChimeraAIGroup = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/ChimeraAIGroup.c;16|ChimeraAIGroup}} | ChimeraAIGroupClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/ChimeraAIGroup.c;12|ChimeraAIGroupClass}} | ChimeraAIPathfindingComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/ChimeraAIPathfindingComponent.c;16|ChimeraAIPathfindingComponent}} | ChimeraAIPathfindingComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/ChimeraAIPathfindingComponent.c;12|ChimeraAIPathfindingComponentClass}} | ChimeraAIVehicleControlComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/ChimeraAIVehicleControlComponent.c;16|ChimeraAIVehicleControlComponent}} | ChimeraAIVehicleControlComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/ChimeraAIVehicleControlComponent.c;12|ChimeraAIVehicleControlComponentClass}} | ChimeraAIWorld = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/ChimeraAIWorld.c;16|ChimeraAIWorld}} | ChimeraAIWorldClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/ChimeraAIWorld.c;12|ChimeraAIWorldClass}} | ChimeraCharacter = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/ChimeraCharacter.c;16|ChimeraCharacter}} | ChimeraCharacterClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/ChimeraCharacter.c;12|ChimeraCharacterClass}} | ChimeraCoverManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/ChimeraCoverManagerComponent.c;16|ChimeraCoverManagerComponent}} | ChimeraCoverManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/ChimeraCoverManagerComponent.c;12|ChimeraCoverManagerComponentClass}} | ChimeraGame = {{Link|enfusion://ScriptEditor/scripts/Game/generated/ChimeraGame.c;7|ChimeraGame}} | ChimeraGameWorldEditor = {{Link|enfusion://ScriptEditor/scripts/Game/generated/ChimeraGameWorldEditor.c;7|ChimeraGameWorldEditor}} | ChimeraMenuBase = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ChimeraMenuBase.c;71|ChimeraMenuBase}} | ChimeraMenuPreset = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ChimeraMenuBase.c;3|ChimeraMenuPreset}} | ChimeraSunAndMoon = {{Link|enfusion://ScriptEditor/scripts/GameCode/Light/ChimeraSunAndMoon.c;5|ChimeraSunAndMoon}} | ChimeraSunAndMoonClass = {{Link|enfusion://ScriptEditor/scripts/GameCode/Light/ChimeraSunAndMoon.c;1|ChimeraSunAndMoonClass}} | ChimeraWorld = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Core/ChimeraWorld.c;12|ChimeraWorld}} | ChimeraWorldBase = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Core/ChimeraWorldBase.c;12|ChimeraWorldBase}} | ChimeraWorldUtils = {{Link|enfusion://ScriptEditor/scripts/Game/generated/ChimeraWorldUtils.c;7|ChimeraWorldUtils}} | CinematicEntity = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/CinematicEntity.c;16|CinematicEntity}} | CinematicEntityClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/CinematicEntity.c;12|CinematicEntityClass}} | CinematicEventAttribute = {{Link|enfusion://ScriptEditor/scripts/GameLib/attributes.c;13|CinematicEventAttribute}} | CinematicTrackAttribute = {{Link|enfusion://ScriptEditor/scripts/GameLib/attributes.c;1|CinematicTrackAttribute}} | CinematicTrackBase = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/CinematicTrackBase.c;7|CinematicTrackBase}} | CinematicTrackModifier = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/CinematicTrackModifier.c;7|CinematicTrackModifier}} | CircleGridMap = {{Link|enfusion://ScriptEditor/scripts/Game/generated/GridMap/CircleGridMap.c;16|CircleGridMap}} | Class = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;34|Class}} | ClientLobbyApi = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/ClientLobbyApi.c;12|ClientLobbyApi}} | ClimbingDataComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Buildings/ClimbingDataComponent.c;12|ClimbingDataComponent}} | ClimbingDataComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Buildings/ClimbingDataComponentClass.c;12|ClimbingDataComponentClass}} | ClimbStates = {{Link|enfusion://ScriptEditor/scripts/GameCode/Character/CharacterCommands.c;56|ClimbStates}} | ClothNodeStorageComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/ClothNodeStorageComponent.c;16|ClothNodeStorageComponent}} | ClothNodeStorageComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/ClothNodeStorageComponent.c;12|ClothNodeStorageComponentClass}} | CollectiveMode = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/CollectiveMode.c;12|CollectiveMode}} | ColliderHistoryComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/ColliderHistoryComponent.c;16|ColliderHistoryComponent}} | ColliderHistoryComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/ColliderHistoryComponent.c;12|ColliderHistoryComponentClass}} | CollisionTriggerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Projectile/Trigger/CollisionTriggerComponent.c;16|CollisionTriggerComponent}} | CollisionTriggerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Projectile/Trigger/CollisionTriggerComponent.c;12|CollisionTriggerComponentClass}} | Color = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Visual/Color.c;12|Color}} | CommentCatalogue = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/CommentCatalogue.c;7|CommentCatalogue}} | CommentEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Editor/CommentEntity.c;6|CommentEntity}} | CommentEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Editor/CommentEntity.c;1|CommentEntityClass}} | CommonEditorProps = {{Link|enfusion://ScriptEditor/scripts/Core/attributes.c;333|CommonEditorProps}} | CommonStateV1 = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/CommonStateV1.c;15|CommonStateV1}} | CommunicationSoundComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/CommunicationSoundComponent.c;12|CommunicationSoundComponent}} | CommunicationSoundComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/CommunicationSoundComponentClass.c;12|CommunicationSoundComponentClass}} | CompartmentAccessComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/CompartmentAccessComponent.c;16|CompartmentAccessComponent}} | CompartmentAccessComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/CompartmentAccessComponent.c;12|CompartmentAccessComponentClass}} | CompartmentAccessComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Serializers/CompartmentAccessComponentSerializer.c;12|CompartmentAccessComponentSerializer}} | CompartmentAccessibilityContext = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/CompartmentAccessibilityContext.c;12|CompartmentAccessibilityContext}} | CompartmentControllerComponent = {{Link|enfusion://ScriptEditor/scripts/GameCode/Components/CompartmentControllerComponent.c;5|CompartmentControllerComponent}} | CompartmentControllerComponentClass = {{Link|enfusion://ScriptEditor/scripts/GameCode/Components/CompartmentControllerComponent.c;1|CompartmentControllerComponentClass}} | CompartmentDoorInfo = {{Link|enfusion://ScriptEditor/scripts/Game/generated/CompartmentDoorInfo.c;7|CompartmentDoorInfo}} | CompartmentDoorReference = {{Link|enfusion://ScriptEditor/scripts/Game/generated/CompartmentDoorReference.c;7|CompartmentDoorReference}} | CompartmentToSlotMapping = {{Link|enfusion://ScriptEditor/scripts/Game/generated/CompartmentToSlotMapping.c;7|CompartmentToSlotMapping}} | CompartmentUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/generated/UserAction/CompartmentUserAction.c;12|CompartmentUserAction}} | ComponentClassPersistenceConfigRule = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Config/Entries/Rules/ComponentClassPersistenceConfigRule.c;12|ComponentClassPersistenceConfigRule}} | ComponentEditorProps = {{Link|enfusion://ScriptEditor/scripts/Core/attributes.c;354|ComponentEditorProps}} | CompositeDrawCommand = {{Link|enfusion://ScriptEditor/scripts/Core/proto/EnWidgets.c;131|CompositeDrawCommand}} | ConsumableTypeStats = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/DataCollectorModules/SCR_DataCollectorHealingItemsModule.c;1|ConsumableTypeStats}} | Contact = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Physics/Contact.c;15|Contact}} | ContactSurface = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Physics/Vehicles/ContactSurface.c;13|ContactSurface}} | ContainerIdPathEntry = {{Link|enfusion://ScriptEditor/scripts/Core/worldEditor.c;25|ContainerIdPathEntry}} | ContainerJSONSerializer = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/ResourceInfo.c;37|ContainerJSONSerializer}} | ContainerSerializationLoadContext = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Serialization/ContainerSerializationLoadContext.c;16|ContainerSerializationLoadContext}} | ContainerSerializationSaveContext = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Serialization/ContainerSerializationSaveContext.c;16|ContainerSerializationSaveContext}} | ContentBrowserDetailsMenu = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/DetailsMenu/ContentBrowserDetailsMenu.c;2|ContentBrowserDetailsMenu}} | ContentBrowserUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/MainMenu/ContentBrowserUI.c;11|ContentBrowserUI}} | ContentWidget = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/ContentWidget.c;12|ContentWidget}} | ControlID = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/ControlID.c;12|ControlID}} | ControllerLightType = {{Link|enfusion://ScriptEditor/scripts/Game/FiringRange/SCR_FiringRangeController.c;747|ControllerLightType}} | ControllersManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/ControllersManagerComponent.c;16|ControllersManagerComponent}} | ControllersManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/ControllersManagerComponent.c;12|ControllersManagerComponentClass}} | CoverManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/CoverManagerComponent.c;16|CoverManagerComponent}} | CoverManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/CoverManagerComponent.c;12|CoverManagerComponentClass}} | CoverQueryProperties = {{Link|enfusion://ScriptEditor/scripts/GameCode/AI/CoverQueryProperties.c;1|CoverQueryProperties}} | CreateGroupSettingsDialogUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/CreateGroupSettingsDialogUI.c;1|CreateGroupSettingsDialogUI}} | CrossroadEntity = {{Link|enfusion://ScriptEditor/scripts/GameLib/entities/Crossroad.c;6|CrossroadEntity}} | CrossroadEntityClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/entities/Crossroad.c;1|CrossroadEntityClass}} | Cull = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/ResourceInfo.c;12|Cull}} | Curve = {{Link|enfusion://ScriptEditor/scripts/Game/Utilities/Math.c;21|Curve}} | Curve3 = {{Link|enfusion://ScriptEditor/scripts/Game/Utilities/Math.c;43|Curve3}} | CurveColor = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Math/CurveColor.c;34|CurveColor}} | CurveFloat = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Math/CurveFloat.c;33|CurveFloat}} | CurveVector = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Math/CurveVector.c;33|CurveVector}} | CustomStringTableItem = {{Link|enfusion://ScriptEditor/scripts/Game/Language/CustomStringTableItem.c;2|CustomStringTableItem}} | DamageArea = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Damage/DamageAreas/DamageArea.c;12|DamageArea}} | DamageAreaComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Damage/DamageAreaComponent.c;16|DamageAreaComponent}} | DamageAreaComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Damage/DamageAreaComponent.c;12|DamageAreaComponentClass}} | DamageAreaShapeBox = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Damage/DamageAreas/Shapes/DamageAreaShapeBox.c;12|DamageAreaShapeBox}} | DamageAreaShapeSphere = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Damage/DamageAreas/Shapes/DamageAreaShapeSphere.c;12|DamageAreaShapeSphere}} | DamageEffectEvaluator = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/DamageEffectEvaluator.c;1|DamageEffectEvaluator}} | DamageManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/DamageManagerComponent.c;12|DamageManagerComponent}} | DamageManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/HitZone/DamageManagerComponentClass.c;12|DamageManagerComponentClass}} | DampingComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Physics/DampingComponent.c;12|DampingComponent}} | DampingComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Physics/DampingComponentClass.c;12|DampingComponentClass}} | DataError = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/DataError.c;7|DataError}} | DataExportErrorType = {{Link|enfusion://ScriptEditor/scripts/Game/generated/DataExportErrorType.c;7|DataExportErrorType}} | DataVarType = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Containers/DataVarType.c;17|DataVarType}} | DateTimeUtcAsInt = {{Link|enfusion://ScriptEditor/scripts/GameLib/workbench/workbench.c;7|DateTimeUtcAsInt}} | DbgUI = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Debug/DbgUI.c;65|DbgUI}} | Debug = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Debug/Debug.c;12|Debug}} | DebugShootComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/DebugShootComponent.c;16|DebugShootComponent}} | DebugShootComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/DebugShootComponent.c;12|DebugShootComponentClass}} | DebugText = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Debug/DebugText.c;13|DebugText}} | DebugTextFlags = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Debug/DebugTextFlags.c;12|DebugTextFlags}} | DebugTextScreenSpace = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Debug/DebugTextScreenSpace.c;12|DebugTextScreenSpace}} | DebugTextWorldSpace = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Debug/DebugTextWorldSpace.c;12|DebugTextWorldSpace}} | Decal = {{Link|enfusion://ScriptEditor/scripts/Core/generated/World/Decal.c;12|Decal}} | DecalEntity = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/DecalEntity.c;16|DecalEntity}} | DecalEntityClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/DecalEntity.c;12|DecalEntityClass}} | DecalSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/DecalSystem.c;12|DecalSystem}} | DecoAiming = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/DecoAiming.c;12|DecoAiming}} | DecoCheckLOD = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/DecoCheckLOD.c;12|DecoCheckLOD}} | DecoDangerEvent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/DecoDangerEvent.c;12|DecoDangerEvent}} | DecoIsInVehicle = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/DecoIsInVehicle.c;12|DecoIsInVehicle}} | Decorator = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/Decorator.c;12|Decorator}} | DecoratorEntity = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/DecoratorEntity.c;12|DecoratorEntity}} | DecoratorPathCompletedTest = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/DecoratorPathCompletedTest.c;12|DecoratorPathCompletedTest}} | DecoratorScripted = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/DecoratorScripted.c;12|DecoratorScripted}} | DecoratorScripted_IsEqual = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Logical/DecoratorScripted_IsEqual.c;2|DecoratorScripted_IsEqual}} | DecoratorTestCanPerformSmartActions = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/DecoratorTestCanPerformSmartActions.c;12|DecoratorTestCanPerformSmartActions}} | DecoratorTestDamageIsAlive = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/DecoratorTestDamageIsAlive.c;12|DecoratorTestDamageIsAlive}} | DecoratorTestHasAimRequest = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/DecoratorTestHasAimRequest.c;12|DecoratorTestHasAimRequest}} | DecoratorTestHasAmmo = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/DecoratorTestHasAmmo.c;12|DecoratorTestHasAmmo}} | DecoratorTestHasMoveRequest = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/DecoratorTestHasMoveRequest.c;12|DecoratorTestHasMoveRequest}} | DecoratorTestHasWeapon = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/DecoratorTestHasWeapon.c;12|DecoratorTestHasWeapon}} | DecoratorTestIsPerformingSmartAction = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/DecoratorTestIsPerformingSmartAction.c;12|DecoratorTestIsPerformingSmartAction}} | DecoratorTestIsWeaponRaised = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/DecoratorTestIsWeaponRaised.c;12|DecoratorTestIsWeaponRaised}} | DecoratorTestNotNull = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/DecoratorTestScripted.c;2|DecoratorTestNotNull}} | DecoratorTestScripted = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/DecoratorTestScripted.c;12|DecoratorTestScripted}} | DecoratorTimedBase = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/DecoratorTimedBase.c;12|DecoratorTimedBase}} | DecoratorTimedDangerPerception = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/DecoratorTimedDangerPerception.c;12|DecoratorTimedDangerPerception}} | DecoratorWeaponObstructed = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/DecoratorWeaponObstructed.c;12|DecoratorWeaponObstructed}} | DecoTestDistanceToEntity = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/DecoTestDistanceToEntity.c;12|DecoTestDistanceToEntity}} | DecoTestOrder = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/DecoTestOrder.c;12|DecoTestOrder}} | DecoTestVariable = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/DecoTestVariable.c;12|DecoTestVariable}} | DedicatedServerPluginCLI = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_DedicatedServerPlugin.c;249|DedicatedServerPluginCLI}} | DedicatedServerPluginCLI_Config = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_DedicatedServerPlugin.c;298|DedicatedServerPluginCLI_Config}} | DedicatedServerPluginCLI_Server = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_DedicatedServerPlugin.c;260|DedicatedServerPluginCLI_Server}} | DefaultStringTableItem = {{Link|enfusion://ScriptEditor/scripts/GameLib/gameLib.c;281|DefaultStringTableItem}} | DeferredDecalEntity = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/DeferredDecalEntity.c;16|DeferredDecalEntity}} | DeferredDecalEntityClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/DeferredDecalEntity.c;12|DeferredDecalEntityClass}} | Dependency = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/Dependency.c;28|Dependency}} | DeployMenuSystem = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/DeployMenuSystem.c;1|DeployMenuSystem}} | DepthOfFieldTypes = {{Link|enfusion://ScriptEditor/scripts/Game/UI/ScreenEffects/SCR_DepthOfFieldEffect.c;1|DepthOfFieldTypes}} | DestructibleDebris = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Destruction/DestructibleDebris.c;12|DestructibleDebris}} | DestructibleEntity = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Entities/DestructibleEntity.c;12|DestructibleEntity}} | DestructibleEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Entities/DestructibleEntityClass.c;12|DestructibleEntityClass}} | DestructionHeatmapEntry = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Destruction/DestructionHeatmapEntry.c;12|DestructionHeatmapEntry}} | DestructionHeatmapRegion = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Destruction/DestructionHeatmapRegion.c;12|DestructionHeatmapRegion}} | DestructionHeatmapSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/DestructionHeatmapSystem.c;12|DestructionHeatmapSystem}} | DestructionManager = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Entities/DestructionManager.c;16|DestructionManager}} | DestructionManagerClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Entities/DestructionManager.c;12|DestructionManagerClass}} | DestructionManagerSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Serializers/DestructionManagerSerializer.c;12|DestructionManagerSerializer}} | DetailsPanelContentPreset = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/Common/SCR_ContentDetailsPanelBase.c;131|DetailsPanelContentPreset}} | DetailsPanelContentPresetConfig = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/Common/SCR_ContentDetailsPanelBase.c;120|DetailsPanelContentPresetConfig}} | DiagMenu = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Debug/DiagMenu.c;13|DiagMenu}} | DialogPriority = {{Link|enfusion://ScriptEditor/scripts/GameLib/menuManager.c;4|DialogPriority}} | DialogResult = {{Link|enfusion://ScriptEditor/scripts/GameLib/menuManager.c;11|DialogResult}} | Dialogue = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Dialogue/Dialogue.c;12|Dialogue}} | DialogueBaseElement = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Dialogue/DialogueBaseElement.c;13|DialogueBaseElement}} | DialogueBaseFloatRule = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Dialogue/DialogueBaseFloatRule.c;12|DialogueBaseFloatRule}} | DialogueBaseIntegerRule = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Dialogue/DialogueBaseIntegerRule.c;12|DialogueBaseIntegerRule}} | DialogueController = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Dialogue/DialogueController.c;12|DialogueController}} | DialogueData = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Dialogue/DialogueData.c;12|DialogueData}} | DialogueGlobalData = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Dialogue/DialogueGlobalData.c;12|DialogueGlobalData}} | DialogueID = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Dialogue/DialogueID.c;12|DialogueID}} | DialogueNode = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Dialogue/DialogueNode.c;12|DialogueNode}} | DialogueSpeaker = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Dialogue/DialogueSpeaker.c;12|DialogueSpeaker}} | DialogueSystem = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Dialogue/DialogueSystem.c;12|DialogueSystem}} | DialogueTransitionRule = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Dialogue/DialogueTransitionRule.c;13|DialogueTransitionRule}} | DialogueVariableMappingObject = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Dialogue/DialogueVariableMappingObject.c;12|DialogueVariableMappingObject}} | DialogUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DialogUI.c;1|DialogUI}} | DistanceParticleEffect = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Projectile/DistanceParticleEffect.c;12|DistanceParticleEffect}} | DistanceParticleEffectSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/DistanceParticleEffectSystem.c;12|DistanceParticleEffectSystem}} | DistanceType = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Generators/DistanceType.c;12|DistanceType}} | DoorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/DoorComponent.c;12|DoorComponent}} | DoorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/DoorComponentClass.c;12|DoorComponentClass}} | DoorComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Serializers/DoorComponentSerializer.c;12|DoorComponentSerializer}} | DoorSlotComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Buildings/DoorSlotComponent.c;12|DoorSlotComponent}} | DoorSlotComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Buildings/DoorSlotComponentClass.c;12|DoorSlotComponentClass}} | DoorStruct = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_doorOpener.c;7|DoorStruct}} | DoorSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Door/DoorSystem.c;12|DoorSystem}} | DoorSystemState = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Serializers/States/DoorSystemState.c;12|DoorSystemState}} | DoorSystemStateSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Serializers/DoorSystemStateSerializer.c;12|DoorSystemStateSerializer}} | DoorUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/generated/UserAction/DoorUserAction.c;12|DoorUserAction}} | DotDamageEffect = {{Link|enfusion://ScriptEditor/scripts/Game/generated/DamageEffects/DotDamageEffect.c;12|DotDamageEffect}} | DotDamageEffectTimerToken = {{Link|enfusion://ScriptEditor/scripts/Game/generated/DamageEffects/DotDamageEffectTimerToken.c;12|DotDamageEffectTimerToken}} | DrawingItem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Map/DrawingItem.c;12|DrawingItem}} | DropAndMoveOperationCallback = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_InventoryStorageManagerComponent.c;292|DropAndMoveOperationCallback}} | DSConfig = {{Link|enfusion://ScriptEditor/scripts/GameLib/online/DSConfig.c;73|DSConfig}} | DSGameConfig = {{Link|enfusion://ScriptEditor/scripts/GameLib/online/DSConfig.c;1|DSGameConfig}} | DSGameProperties = {{Link|enfusion://ScriptEditor/scripts/GameLib/online/DSConfig.c;43|DSGameProperties}} | DSMod = {{Link|enfusion://ScriptEditor/scripts/GameLib/online/DSConfig.c;59|DSMod}} | DSSession = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/DSSession.c;13|DSSession}} | DSSessionCallback = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/DSSessionCallback.c;13|DSSessionCallback}} | DynamicAudioDialogueData = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Dialogue/DynamicAudioDialogueData.c;12|DynamicAudioDialogueData}} | DynamicPhysicsObstacleComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Physics/DynamicPhysicsObstacleComponent.c;16|DynamicPhysicsObstacleComponent}} | DynamicPhysicsObstacleComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Physics/DynamicPhysicsObstacleComponent.c;12|DynamicPhysicsObstacleComponentClass}} | DynMaterialTemplate = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/ResourceInfo.c;785|DynMaterialTemplate}} | EAccessLevel = {{Link|enfusion://ScriptEditor/scripts/Core/proto/EnScript.c;74|EAccessLevel}} | EActionFactionUsage = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_BaseFactionCheckUserAction.c;106|EActionFactionUsage}} | EActionTrigger = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Input/EActionTrigger.c;12|EActionTrigger}} | EActionValueType = {{Link|enfusion://ScriptEditor/scripts/GameLib/inputManager.c;1|EActionValueType}} | EActionWhenDone = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/SCR_CustomMaterialAnimatorEntity.c;127|EActionWhenDone}} | EAddChildFlags = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Entities/EAddChildFlags.c;12|EAddChildFlags}} | EAddonExportFormat = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/AddonManager/AddonsTools/AddonsExport/SCR_AddonsExportSubMenuComponent.c;6|EAddonExportFormat}} | EAIActionFailReason = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIAction.c;2|EAIActionFailReason}} | EAIActionState = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/EAIActionState.c;12|EAIActionState}} | EAICombatPropertiesComponentTraits = {{Link|enfusion://ScriptEditor/scripts/Game/Enums/EAICombatPropertiesComponentTraits.c;2|EAICombatPropertiesComponentTraits}} | EAICompartmentType = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIVehicleBehavior.c;1|EAICompartmentType}} | EAIDangerEventType = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Events/EAIDangerEventType.c;1|EAIDangerEventType}} | EAIDangerEventType#734#1 = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/EAIDangerEventType.c;12|EAIDangerEventType#734#1}} | EAIDebugCategory = {{Link|enfusion://ScriptEditor/scripts/Game/AI/SCR_AIWorld.c;11|EAIDebugCategory}} | EAIDebugMsgType = {{Link|enfusion://ScriptEditor/scripts/Game/AI/SCR_AIDebugMessage.c;1|EAIDebugMsgType}} | EAIFindSmartAction_TagTest = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/EAIFindSmartAction_TagTest.c;12|EAIFindSmartAction_TagTest}} | EAIFirePattern = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Aiming/SCR_AIGetFireTimes.c;1|EAIFirePattern}} | EAIGroupCombatMode = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AIGroupUtilityComponent.c;5|EAIGroupCombatMode}} | EAimingPreference = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Aiming/SCR_AIGetAimErrorOffset.c;1|EAimingPreference}} | EAimPointType = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/EAimPointType.c;12|EAimPointType}} | EAIOrderType = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/EAIOrderType.c;12|EAIOrderType}} | EAISkill = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AICombatComponent.c;6|EAISkill}} | EAITargetClusterState = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_AITargetClusterState.c;6|EAITargetClusterState}} | EAITargetInfoCategory = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AITargetInfo.c;1|EAITargetInfoCategory}} | EAITargetInfoFlags = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AITargetInfo.c;11|EAITargetInfoFlags}} | EAIThreatState = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AIThreatSystem.c;5|EAIThreatState}} | EAIUnitType = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/EAIUnitType.c;12|EAIUnitType}} | EAIVehicleType = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AIVehicleUsageComponent.c;2|EAIVehicleType}} | EAIWaypointCompletionType = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/EAIWaypointCompletionType.c;12|EAIWaypointCompletionType}} | EAmmoType = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/WeaponInfo/SCR_WeaponInfo.c;10|EAmmoType}} | EAnimationCurve = {{Link|enfusion://ScriptEditor/scripts/GameLib/WidgetAnimation.c;5|EAnimationCurve}} | EApiCode = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/EApiCode.c;12|EApiCode}} | EAreaMeshShape = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AreaMesh/SCR_BaseAreaMeshComponent.c;255|EAreaMeshShape}} | EArsenalItemDisplayType = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Arsenal/SCR_ArsenalItemDisplayData.c;35|EArsenalItemDisplayType}} | EArsenalType = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_ArsenalBaseEditorAttribute.c;83|EArsenalType}} | EAssetTrait = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/UIInfoAssetCard.c;116|EAssetTrait}} | EAttachAction = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryMenuUI.c;35|EAttachAction}} | EAttachManualCameraType = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_AttachManualCameraComponent.c;251|EAttachManualCameraType}} | EAttributeToolBoxType = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Attributes/SCR_ButtonBoxAttributeUIComponent.c;473|EAttributeToolBoxType}} | EAttributeValueDynamicDescription = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/DynamicDescriptions/SCR_ValueAttributeDynamicDescription.c;96|EAttributeValueDynamicDescription}} | EAudioSourceConfigurationFlag = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Sound/SCR_AudioSourceConfiguration.c;1|EAudioSourceConfigurationFlag}} | EAudioSourceFlag = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Sound/SCR_AudioSource.c;1|EAudioSourceFlag}} | EBackendCallbackState = {{Link|enfusion://ScriptEditor/scripts/Game/Network/ServerCommands/UploadSaveCommand.c;1|EBackendCallbackState}} | EBackendCatalogueBoolFlag = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/EBackendCatalogueBoolFlag.c;13|EBackendCatalogueBoolFlag}} | EBackendCatalogueOrderDir = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/EBackendCatalogueOrderDir.c;13|EBackendCatalogueOrderDir}} | EBackendCredentials = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/EBackendCredentials.c;13|EBackendCredentials}} | EBackendDebugHandling = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/EBackendDebugHandling.c;12|EBackendDebugHandling}} | EBackendError = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/EBackendError.c;13|EBackendError}} | EBackendRequest = {{Link|enfusion://ScriptEditor/scripts/GameLib/online/EBackendRequest.c;2|EBackendRequest}} | EBandagingAnimationBodyParts = {{Link|enfusion://ScriptEditor/scripts/Game/HitZone/SCR_CharacterHitZone.c;29|EBandagingAnimationBodyParts}} | EBasicActionsModuleStats = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/DataCollectorModules/SCR_DataCollectorBasicActionsModule.c;191|EBasicActionsModuleStats}} | EBT_HTTPErrorResponse = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/EBT_HTTPRequest.c;1|EBT_HTTPErrorResponse}} | EBT_HTTPRequest = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/EBT_HTTPRequest.c;12|EBT_HTTPRequest}} | EBTAddonInfo = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/EBTResponse.c;3|EBTAddonInfo}} | EBTConfigPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/EBTConfig.c;4|EBTConfigPlugin}} | EBTContainerFields = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/EBTEmatUtils.c;3|EBTContainerFields}} | EBTEmatUtils = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/EBTEmatUtils.c;92|EBTEmatUtils}} | EBTInfo = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/EBTResponse.c;35|EBTInfo}} | EBTInfoDialog = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/EBTResponse.c;29|EBTInfoDialog}} | EBTInfoRequest = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/EBTResponse.c;15|EBTInfoRequest}} | EBurstType = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/EBurstType.c;12|EBurstType}} | ECallbackState = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_InventoryStorageManagerComponent.c;14|ECallbackState}} | ECampaignClientNotificationID = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignNetworkComponent.c;8|ECampaignClientNotificationID}} | ECanBeEquippedResult = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/ECanBeEquippedResult.c;12|ECanBeEquippedResult}} | ECantBuildNotificationType = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_CampaignBuildingPlacingEditorComponent.c;443|ECantBuildNotificationType}} | ECareerStatId = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/CareerMenuUI.c;226|ECareerStatId}} | ECharacterBloodState = {{Link|enfusion://ScriptEditor/scripts/Game/HitZone/SCR_CharacterHitZone.c;15|ECharacterBloodState}} | ECharacterCollisionShapeIndex = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/ECharacterCollisionShapeIndex.c;12|ECharacterCollisionShapeIndex}} | ECharacterCommandIDs = {{Link|enfusion://ScriptEditor/scripts/GameCode/Character/CharacterCommands.c;4|ECharacterCommandIDs}} | ECharacterDamageState = {{Link|enfusion://ScriptEditor/scripts/Game/HitZone/SCR_CharacterHitZone.c;3|ECharacterDamageState}} | ECharacterDataState = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/ECharacterDataState.c;12|ECharacterDataState}} | ECharacterDoorAnimType = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/ECharacterDoorAnimType.c;12|ECharacterDoorAnimType}} | ECharacterGestures = {{Link|enfusion://ScriptEditor/scripts/Game/Character/SCR_CharacterControllerComponent.c;1679|ECharacterGestures}} | ECharacterHealthState = {{Link|enfusion://ScriptEditor/scripts/Game/HitZone/SCR_CharacterHitZone.c;8|ECharacterHealthState}} | ECharacterHitZoneGroup = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Damage/SCR_CharacterDamageManagerComponent.c;1|ECharacterHitZoneGroup}} | ECharacterLifeState = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/ECharacterLifeState.c;12|ECharacterLifeState}} | ECharacterMovementMode = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Character/ECharacterMovementMode.c;12|ECharacterMovementMode}} | ECharacterResilienceState = {{Link|enfusion://ScriptEditor/scripts/Game/HitZone/SCR_CharacterHitZone.c;22|ECharacterResilienceState}} | ECharacterRotationMode = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Character/ECharacterRotationMode.c;12|ECharacterRotationMode}} | ECharacterStance = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/ECharacterStance.c;12|ECharacterStance}} | ECharacterStanceChange = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/ECharacterStanceChange.c;12|ECharacterStanceChange}} | ECloseDoorAfterActions = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/ECloseDoorAfterActions.c;12|ECloseDoorAfterActions}} | ECollectiveModeForSettings = {{Link|enfusion://ScriptEditor/scripts/Game/Global/SCR_GameplaySettings.c;1|ECollectiveModeForSettings}} | ECommandIDs = {{Link|enfusion://ScriptEditor/scripts/GameCode/Base/ECommandIDs.c;7|ECommandIDs}} | ECommMethod = {{Link|enfusion://ScriptEditor/scripts/Game/generated/ECommMethod.c;7|ECommMethod}} | ECommonItemType = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/InventoryConstants.c;30|ECommonItemType}} | ECommunicationType = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Talk/SCR_AISoundHandling.c;1|ECommunicationType}} | ECompartmentType = {{Link|enfusion://ScriptEditor/scripts/Game/generated/ECompartmentType.c;7|ECompartmentType}} | EComponentDeserializeEvent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Serializers/EComponentDeserializeEvent.c;12|EComponentDeserializeEvent}} | EConfigurableDialogStyle = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SCR_ConfigurableDialogUI.c;719|EConfigurableDialogStyle}} | EConfigurableDialogUiButtonAlign = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SCR_ConfigurableDialogUI.c;706|EConfigurableDialogUiButtonAlign}} | EContentBrowserAddonsSubMenuMode = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/MainMenu/SCR_ContentBrowser_AddonsSubMenu.c;7|EContentBrowserAddonsSubMenuMode}} | EControlerSection = {{Link|enfusion://ScriptEditor/scripts/Game/FiringRange/SCR_FiringRangeController.c;733|EControlerSection}} | ECP_Characters = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_CommunicationSoundComponent.c;17|ECP_Characters}} | ECP_VehicleRoles = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_CommunicationSoundComponent.c;6|ECP_VehicleRoles}} | ECP_VehicleTypes = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_CommunicationSoundComponent.c;29|ECP_VehicleTypes}} | ECurveType = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Math/ECurveType.c;12|ECurveType}} | EDamageState = {{Link|enfusion://ScriptEditor/scripts/Game/generated/HitZone/EDamageState.c;12|EDamageState}} | EDamageType = {{Link|enfusion://ScriptEditor/scripts/Game/generated/HitZone/EDamageType.c;12|EDamageType}} | EDayTimeCurve = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AmbientSoundsComponent/SCR_DayTimeCurveDef.c;3|EDayTimeCurve}} | EDayTimeEnums = {{Link|enfusion://ScriptEditor/scripts/GameCode/World/TimeAndWeatherManagerEntity.c;1175|EDayTimeEnums}} | EDeserializeFailHandling = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Serializers/EDeserializeFailHandling.c;12|EDeserializeFailHandling}} | EDestructionHeatmapCategory = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Heatmap/EDestructionHeatmapCategory.c;12|EDestructionHeatmapCategory}} | EDiagMenu = {{Link|enfusion://ScriptEditor/scripts/Core/constants.c;88|EDiagMenu}} | EDiagMenuGame = {{Link|enfusion://ScriptEditor/scripts/Game/game.c;25|EDiagMenuGame}} | EDiagMenuGameLib = {{Link|enfusion://ScriptEditor/scripts/GameLib/constants.c;4|EDiagMenuGameLib}} | EDialogType = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DialogUI.c;236|EDialogType}} | EDigit = {{Link|enfusion://ScriptEditor/scripts/Game/FiringRange/SCR_FiringRangeController.c;739|EDigit}} | EDirectBoneMode = {{Link|enfusion://ScriptEditor/scripts/GameCode/Camera/ScriptedCameraSet.c;107|EDirectBoneMode}} | EDirection = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_CollapseWidgetComponent.c;1|EDirection}} | EDirectJoinFormats = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/MultiplayerDialogUI.c;261|EDirectJoinFormats}} | EditablePrefabsComponent_Base = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/Editor/EditablePrefabsComponent/EditablePrefabsComponent_Base.c;2|EditablePrefabsComponent_Base}} | EditablePrefabsComponent_EditableEntity = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/Editor/EditablePrefabsComponent/EditablePrefabsComponent_EditableEntity.c;2|EditablePrefabsComponent_EditableEntity}} | EditablePrefabsComponent_PreviewEntity = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/Editor/EditablePrefabsComponent/EditablePrefabsComponent_PreviewEntity.c;2|EditablePrefabsComponent_PreviewEntity}} | EditablePrefabsConfig = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/Editor/EditablePrefabsConfig.c;2|EditablePrefabsConfig}} | EditablePrefabsLabel_Base = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/Editor/EditablePrefabsComponent/LabelsConfig/EditablePrefabsLabel_Base.c;1|EditablePrefabsLabel_Base}} | EditablePrefabsLabel_CharacterRole = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/Editor/EditablePrefabsComponent/LabelsConfig/EditablePrefabsLabel_CharacterRole.c;1|EditablePrefabsLabel_CharacterRole}} | EditablePrefabsLabel_CompositionType = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/Editor/EditablePrefabsComponent/LabelsConfig/EditablePrefabsLabel_CompositionType.c;1|EditablePrefabsLabel_CompositionType}} | EditablePrefabsLabel_EntityType = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/Editor/EditablePrefabsComponent/LabelsConfig/EditablePrefabsLabel_EntityType.c;1|EditablePrefabsLabel_EntityType}} | EditablePrefabsLabel_Faction = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/Editor/EditablePrefabsComponent/LabelsConfig/EditablePrefabsLabel_Faction.c;1|EditablePrefabsLabel_Faction}} | EditablePrefabsLabel_GroupSize = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/Editor/EditablePrefabsComponent/LabelsConfig/EditablePrefabsLabel_GroupSize.c;1|EditablePrefabsLabel_GroupSize}} | EditablePrefabsLabel_Size = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/Editor/EditablePrefabsComponent/LabelsConfig/EditablePrefabsLabel_Size.c;1|EditablePrefabsLabel_Size}} | EditablePrefabsLabel_Theme = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/Editor/EditablePrefabsComponent/LabelsConfig/EditablePrefabsLabel_Theme.c;1|EditablePrefabsLabel_Theme}} | EditablePrefabsLabel_Trait = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/Editor/EditablePrefabsComponent/LabelsConfig/EditablePrefabsLabel_Trait.c;1|EditablePrefabsLabel_Trait}} | EditablePrefabsLabel_VehicleType = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/Editor/EditablePrefabsComponent/LabelsConfig/EditablePrefabsLabel_VehicleType.c;1|EditablePrefabsLabel_VehicleType}} | EditablePrefabsSetting = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/Editor/EditablePrefabsConfig.c;1004|EditablePrefabsSetting}} | EditBoxFilterComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/EditBoxFilterComponent.c;8|EditBoxFilterComponent}} | EditBoxWidget = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/EditBoxWidget.c;12|EditBoxWidget}} | EditorAttributesDialogUI = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Menus/EditorAttributesDialogUI.c;3|EditorAttributesDialogUI}} | EditorBrowserDialogUI = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Menus/EditorBrowserDialogUI.c;3|EditorBrowserDialogUI}} | EditorCommentEntity = {{Link|enfusion://ScriptEditor/scripts/GameLib/entities/EditorCommentEntity.c;6|EditorCommentEntity}} | EditorCommentEntityClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/entities/EditorCommentEntity.c;1|EditorCommentEntityClass}} | EditorConstants = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Interactions/SCR_EditableAttachableEntityInteraction.c;28|EditorConstants}} | EditorEntityIterator = {{Link|enfusion://ScriptEditor/scripts/Core/worldEditor.c;42|EditorEntityIterator}} | EditorFactionTransceiver = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Radio/EditorFactionTransceiver.c;12|EditorFactionTransceiver}} | EditorMenuBase = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Menus/EditorMenuBase.c;7|EditorMenuBase}} | EditorMenuUI = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Menus/EditorMenuUI.c;3|EditorMenuUI}} | EditorPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_EditorPlugin.c;2|EditorPlugin}} | EditorTransceiver = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Radio/EditorTransceiver.c;12|EditorTransceiver}} | EDownloadManagerActionState = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DownloadManager/SCR_DownloadManager.c;834|EDownloadManagerActionState}} | EDriverModuleStats = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/DataCollectorModules/SCR_DataCollectorDriverModule.c;418|EDriverModuleStats}} | EDropContainer = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryMenuUI.c;28|EDropContainer}} | EDsSessionState = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/EDsSessionState.c;13|EDsSessionState}} | EEditableEntityAccessKey = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Enums/EEditableEntityAccessKey.c;8|EEditableEntityAccessKey}} | EEditableEntityBudget = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Enums/EEditableEntityBudget.c;1|EEditableEntityBudget}} | EEditableEntityFilterAutoAdd = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Enums/EEditableEntityFilterAutoAdd.c;1|EEditableEntityFilterAutoAdd}} | EEditableEntityFlag = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Enums/EEditableEntityFlag.c;5|EEditableEntityFlag}} | EEditableEntityHighlight = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Enums/EEditableEntityHighlight.c;2|EEditableEntityHighlight}} | EEditableEntityInteraction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Enums/EEditableEntityInteraction.c;5|EEditableEntityInteraction}} | EEditableEntityInteractionFlag = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Enums/EEditableEntityInteractionFlag.c;5|EEditableEntityInteractionFlag}} | EEditableEntityLabel = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Enums/EEditableEntityLabel.c;1|EEditableEntityLabel}} | EEditableEntityLabelGroup = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Enums/EEditableEntityLabel.c;218|EEditableEntityLabelGroup}} | EEditableEntityRegister = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Enums/EEditableEntityRegister.c;10|EEditableEntityRegister}} | EEditableEntitySaveFlag = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Enums/EEditableEntitySaveFlag.c;9|EEditableEntitySaveFlag}} | EEditableEntityState = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Enums/EEditableEntityState.c;37|EEditableEntityState}} | EEditableEntityType = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Enums/EEditableEntityType.c;5|EEditableEntityType}} | EEditorActionGroup = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/SCR_BaseEditorAction.c;7|EEditorActionGroup}} | EEditorActionType = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/SCR_BaseEditorAction.c;1|EEditorActionType}} | EEditorAttributeMultiSelect = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Enums/EEditorAttributeMultiSelect.c;3|EEditorAttributeMultiSelect}} | EEditorCanClose = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Enums/EEditorCanClose.c;5|EEditorCanClose}} | EEditorCanOpen = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Enums/EEditorCanOpen.c;5|EEditorCanOpen}} | EEditorCommandActionFlags = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Enums/EEditorCommandActionFlags.c;5|EEditorCommandActionFlags}} | EEditorContextActionFlags = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Enums/EEditorContextActionFlags.c;1|EEditorContextActionFlags}} | EEditorCursor = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Enums/EEditorCursor.c;5|EEditorCursor}} | EEditorEffectTarget = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Effects/SCR_ParticleEditorEffect.c;58|EEditorEffectTarget}} | EEditorEvent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Enums/EEditorEvent.c;5|EEditorEvent}} | EEditorEventOperation = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Enums/EEditorEventOperation.c;5|EEditorEventOperation}} | EEditorMenuOverlayLayer = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Enums/EEditorMenuOverlayLayer.c;5|EEditorMenuOverlayLayer}} | EEditorMenuOverlayRoot = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Enums/EEditorMenuOverlayRoot.c;5|EEditorMenuOverlayRoot}} | EEditorMode = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Enums/EEditorMode.c;5|EEditorMode}} | EEditorModeAccess = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Enums/EEditorModeAccess.c;1|EEditorModeAccess}} | EEditorModeFlag = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Enums/EEditorModeFlag.c;1|EEditorModeFlag}} | EEditorPlacingFlags = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Enums/EEditorPlacingFlags.c;1|EEditorPlacingFlags}} | EEditorRadialMenuType = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Enums/EEditorRadialMenuType.c;5|EEditorRadialMenuType}} | EEditorState = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Enums/EEditorState.c;5|EEditorState}} | EEditorTaskCompletionType = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Enums/EEditorTaskCompletionType.c;2|EEditorTaskCompletionType}} | EEditorToolbarActionFlags = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Enums/EEditorToolbarActionFlags.c;1|EEditorToolbarActionFlags}} | EEditorTooltip = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/SCR_TooltipManagerEditorUIComponent.c;397|EEditorTooltip}} | EEditorTransformSnap = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Enums/EEditorTransformSnap.c;5|EEditorTransformSnap}} | EEditorTransformVertical = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Enums/EEditorTransformVertical.c;5|EEditorTransformVertical}} | EEffectsModuleType = {{Link|enfusion://ScriptEditor/scripts/Game/Components/EffectModules/SCR_EffectModuleComponent.c;486|EEffectsModuleType}} | EEntityCatalogType = {{Link|enfusion://ScriptEditor/scripts/Game/EntityCatalog/Enums/EEntityCatalogType.c;4|EEntityCatalogType}} | EEntityDeserializeEvent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Serializers/EEntityDeserializeEvent.c;12|EEntityDeserializeEvent}} | EEntityFrameUpdateSpecs = {{Link|enfusion://ScriptEditor/scripts/GameLib/entities/gameLibEntities.c;18|EEntityFrameUpdateSpecs}} | EEnvironmentType = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AmbientSoundsComponent/SCR_SpawnDef.c;1|EEnvironmentType}} | EEquipItemType = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/EEquipItemType.c;12|EEquipItemType}} | EFactionMapID = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Locations/SCR_CampaignMilitaryBaseComponent.c;2776|EFactionMapID}} | EFallDamageType = {{Link|enfusion://ScriptEditor/scripts/Game/generated/HitZone/EFallDamageType.c;12|EFallDamageType}} | EffectManagerSystem = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/EffectManagerSystem.c;1|EffectManagerSystem}} | EffectsModuleOnChanged = {{Link|enfusion://ScriptEditor/scripts/Game/Components/EffectModules/SCR_EffectModuleComponent.c;8|EffectsModuleOnChanged}} | EFieldManualEntryId = {{Link|enfusion://ScriptEditor/scripts/Game/FieldManual/Models/Config/EFieldManualEntryId.c;2|EFieldManualEntryId}} | EFilterGroupType = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/SCR_ServerFilterBarComponent.c;347|EFilterGroupType}} | EFilterType = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/ServerBrowserFiltering.c;634|EFilterType}} | EFreqUnit = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_RadioComponent.c;18|EFreqUnit}} | EFuelFlowCapacityIn = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Fuel/SCR_FuelNode.c;2|EFuelFlowCapacityIn}} | EFuelFlowCapacityOut = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Fuel/SCR_FuelNode.c;13|EFuelFlowCapacityOut}} | EFuelType = {{Link|enfusion://ScriptEditor/scripts/Game/generated/EFuelType.c;7|EFuelType}} | EGadgetAnimVariable = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_GadgetComponent.c;39|EGadgetAnimVariable}} | EGadgetMode = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_GadgetComponent.c;27|EGadgetMode}} | EGadgetType = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_GadgetComponent.c;8|EGadgetType}} | EGameFlags = {{Link|enfusion://ScriptEditor/scripts/Game/game.c;16|EGameFlags}} | EGameModeEditorTarget = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_GameModeEditor.c;150|EGameModeEditorTarget}} | EGameOverTypes = {{Link|enfusion://ScriptEditor/scripts/Game/GameOverScreen/EGameOverTypes.c;1|EGameOverTypes}} | EGetOutType = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/EGetOutType.c;12|EGetOutType}} | EGraphNodePortDirection = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Graph/Ports/EGraphNodePortDirection.c;13|EGraphNodePortDirection}} | EGroupControlMode = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AIGroupInfoComponent.c;6|EGroupControlMode}} | EGroupState = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/SCR_AIGroup.c;2893|EGroupState}} | EHandBrakeType = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/EHandBrakeType.c;12|EHandBrakeType}} | EHint = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Hints/EHint.c;10|EHint}} | EHitReactionType = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/EHitReactionType.c;12|EHitReactionType}} | EHitZoneGroup = {{Link|enfusion://ScriptEditor/scripts/GameCode/Components/EHitZoneGroup.c;1|EHitZoneGroup}} | EHudLayers = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_HUDManagerComponent.c;5|EHudLayers}} | EInputBindingAxleCapture = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Input/EInputBindingAxleCapture.c;12|EInputBindingAxleCapture}} | EInputBindingCalibrationData = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Input/EInputBindingCalibrationData.c;12|EInputBindingCalibrationData}} | EInputBindingCalibrationStatus = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Input/EInputBindingCalibrationStatus.c;12|EInputBindingCalibrationStatus}} | EInputBindingCaptureState = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Input/EInputBindingCaptureState.c;12|EInputBindingCaptureState}} | EInputDeviceType = {{Link|enfusion://ScriptEditor/scripts/GameLib/inputManager.c;9|EInputDeviceType}} | EInventoryButton = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryButtonPageUI.c;1|EInventoryButton}} | EInventoryRetCode = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_InventoryStorageManagerComponent.c;6|EInventoryRetCode}} | EInvInitStage = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryMenuUI.c;42|EInvInitStage}} | EInvInsertFailReason = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryMenuUI.c;55|EInvInsertFailReason}} | EItemGesture = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/EItemGesture.c;12|EItemGesture}} | EItemInsertionResult = {{Link|enfusion://ScriptEditor/scripts/GameLib/components/gameLibComponents.c;21|EItemInsertionResult}} | EItemType = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_CharacterInventoryStorageComponent.c;1|EItemType}} | EjectableProjectile = {{Link|enfusion://ScriptEditor/scripts/Game/generated/EntityTypes/EjectableProjectile.c;12|EjectableProjectile}} | EjectableProjectileClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/EntityTypes/EjectableProjectileClass.c;12|EjectableProjectileClass}} | EjectorInterfaceHydra70 = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/EjectorInterface.c;5|EjectorInterfaceHydra70}} | EjectorInterfaceHydra70Class = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/EjectorInterface.c;2|EjectorInterfaceHydra70Class}} | EjectorInterfaceS5 = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/EjectorInterface.c;13|EjectorInterfaceS5}} | EjectorInterfaceS5Class = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/EjectorInterface.c;10|EjectorInterfaceS5Class}} | EjectorInterfaceSmokeLauncher = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/EjectorInterface.c;21|EjectorInterfaceSmokeLauncher}} | EjectorInterfaceSmokeLauncherClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/EjectorInterface.c;18|EjectorInterfaceSmokeLauncherClass}} | EJoinDialogState = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/SCR_ServerBrowserDialogManager.c;508|EJoinDialogState}} | EJsonApiError = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/EJsonApiError.c;15|EJsonApiError}} | EJsonApiStructValueType = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/ServerHosting/SCR_JsonApiStructHandler.c;87|EJsonApiStructValueType}} | EKillFeedReceiveType = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_NotificationSenderComponent.c;687|EKillFeedReceiveType}} | EKillFeedType = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_NotificationSenderComponent.c;677|EKillFeedType}} | ELadderDoorState = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Buildings/ELadderDoorState.c;12|ELadderDoorState}} | ELandType = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/ELandType.c;13|ELandType}} | ELeaningType = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AISmartActionSentinelComponent.c;5|ELeaningType}} | ELightState = {{Link|enfusion://ScriptEditor/scripts/Game/Lights/SCR_BaseInteractiveLightComponent.c;46|ELightState}} | ELightType = {{Link|enfusion://ScriptEditor/scripts/Game/generated/ELightType.c;7|ELightType}} | ELoadoutOccluderType = {{Link|enfusion://ScriptEditor/scripts/Game/Enums/ELoadoutOccluderType.c;1|ELoadoutOccluderType}} | ELocalAmbientSignal = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_AmbientInsectsComponent.c;1|ELocalAmbientSignal}} | ELogitechLEDState = {{Link|enfusion://ScriptEditor/scripts/Game/Utilities/SCR_LogitechLedManager.c;295|ELogitechLEDState}} | ELoiterCommandState = {{Link|enfusion://ScriptEditor/scripts/Game/Character/Commands/SCR_CharacterCommandLoiter.c;1|ELoiterCommandState}} | ELoiteringType = {{Link|enfusion://ScriptEditor/scripts/Game/AI/UserActions/SCR_LoiterUserAction.c;1|ELoiteringType}} | EManualCameraFlag = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/EManualCameraFlag.c;7|EManualCameraFlag}} | EMapAreaType = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Map/EMapAreaType.c;12|EMapAreaType}} | EMapAreaVisualizationType = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Map/EMapAreaVisualizationType.c;12|EMapAreaVisualizationType}} | EMapBuildingType = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Map/EMapBuildingType.c;12|EMapBuildingType}} | EMapCursorEdgePos = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapConstants.c;68|EMapCursorEdgePos}} | EMapCursorSelectType = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapConstants.c;78|EMapCursorSelectType}} | EMapCursorState = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapConstants.c;43|EMapCursorState}} | EMapDataType = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Map/EMapDataType.c;12|EMapDataType}} | EMapDescriptorGroup = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Map/EMapDescriptorGroup.c;15|EMapDescriptorGroup}} | EMapDescriptorType = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Map/EMapDescriptorType.c;15|EMapDescriptorType}} | EMapDescriptorUnit = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Map/EMapDescriptorUnit.c;15|EMapDescriptorUnit}} | EMapDrawingShapeType = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Map/EMapDrawingShapeType.c;12|EMapDrawingShapeType}} | EMapEntityMode = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapConstants.c;28|EMapEntityMode}} | EMapLightMode = {{Link|enfusion://ScriptEditor/scripts/Game/Map/ComponentsUI/SCR_MapLightUI.c;1|EMapLightMode}} | EMapLineType = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Map/EMapLineType.c;12|EMapLineType}} | EMapOtherComponents = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapConstants.c;86|EMapOtherComponents}} | EMapPanMode = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapConstants.c;19|EMapPanMode}} | EMapPowerlineType = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Map/EMapPowerlineType.c;12|EMapPowerlineType}} | EMenuAction = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryMenuUI.c;1|EMenuAction}} | EMessageType_Goal = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AIMessage.c;15|EMessageType_Goal}} | EMessageType_Info = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AIMessage.c;1|EMessageType_Info}} | EMilitarySymbolAmplifier = {{Link|enfusion://ScriptEditor/scripts/Game/GroupIdentity/EMilitarySymbol.c;63|EMilitarySymbolAmplifier}} | EMilitarySymbolDimension = {{Link|enfusion://ScriptEditor/scripts/Game/GroupIdentity/EMilitarySymbol.c;14|EMilitarySymbolDimension}} | EMilitarySymbolIcon = {{Link|enfusion://ScriptEditor/scripts/Game/GroupIdentity/EMilitarySymbol.c;29|EMilitarySymbolIcon}} | EMilitarySymbolIdentity = {{Link|enfusion://ScriptEditor/scripts/Game/GroupIdentity/EMilitarySymbol.c;1|EMilitarySymbolIdentity}} | EmissiveLightSurfaceSlot = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/EmissiveLightSurfaceSlot.c;12|EmissiveLightSurfaceSlot}} | EmitterParam = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Visual/EmitterParam.c;15|EmitterParam}} | EModularButtonEventFlag = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/ButtonComponents/ModularButton/SCR_ButtonEffectBase.c;5|EModularButtonEventFlag}} | EModularButtonEventHandler = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/ButtonComponents/ModularButton/SCR_ModularButtonComponent.c;17|EModularButtonEventHandler}} | EModularButtonInputDevice = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/ButtonComponents/ModularButton/SCR_ButtonEffectBase.c;18|EModularButtonInputDevice}} | EModularButtonState = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/ButtonComponents/ModularButton/SCR_ModularButtonComponent.c;6|EModularButtonState}} | EMoonPhaseEnums = {{Link|enfusion://ScriptEditor/scripts/GameCode/World/TimeAndWeatherManagerEntity.c;1168|EMoonPhaseEnums}} | EMoveError = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/EMoveError.c;12|EMoveError}} | EMovementType = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/EMovementType.c;12|EMovementType}} | EMuzzleType = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/EMuzzleType.c;12|EMuzzleType}} | EnableCinematicTrack = {{Link|enfusion://ScriptEditor/scripts/Game/Cinematics/EnableCinematicTrack.c;1|EnableCinematicTrack}} | ENameTagEntityState = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Nametags/SCR_NameTagData.c;4|ENameTagEntityState}} | ENameTagEntityType = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Nametags/SCR_NameTagData.c;47|ENameTagEntityType}} | ENameTagFlags = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Nametags/SCR_NameTagData.c;19|ENameTagFlags}} | ENameTagPosition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Nametags/SCR_NameTagData.c;39|ENameTagPosition}} | ENativeSerializerMode = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Serializers/ENativeSerializerMode.c;12|ENativeSerializerMode}} | EndGameAction = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Scoring/SCR_ScoringSystemComponent.c;33|EndGameAction}} | EngineState = {{Link|enfusion://ScriptEditor/scripts/Game/generated/EngineState.c;7|EngineState}} | ENodeResult = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/ENodeResult.c;12|ENodeResult}} | ENotification = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/ENotification.c;4|ENotification}} | ENotificationColor = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/ENotificationColor.c;4|ENotificationColor}} | ENotificationReceiver = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/ENotificationReceiver.c;4|ENotificationReceiver}} | ENotificationSetPositionData = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/ENotificationSetPositionData.c;6|ENotificationSetPositionData}} | EntityClassPersistenceConfigRule = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Config/Entries/Rules/EntityClassPersistenceConfigRule.c;12|EntityClassPersistenceConfigRule}} | EntityComponentPrefabData = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Entities/EntityComponentPrefabData.c;18|EntityComponentPrefabData}} | EntityEditorProps = {{Link|enfusion://ScriptEditor/scripts/Core/attributes.c;358|EntityEditorProps}} | EntityEvent = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Entities/EntityEvent.c;13|EntityEvent}} | EntityFlags = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Entities/EntityFlags.c;13|EntityFlags}} | EntityID = {{Link|enfusion://ScriptEditor/scripts/Core/proto/EnEntity.c;6|EntityID}} | EntityOrientationTool = {{Link|enfusion://ScriptEditor/scripts/WorkbenchCommon/ViewOrientationTool.c;1|EntityOrientationTool}} | EntityPersistenceConfig = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Config/EntityPersistenceConfig.c;12|EntityPersistenceConfig}} | EntityPrefabData = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Entities/EntityPrefabData.c;18|EntityPrefabData}} | EntityRelativePlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchCommon/EntityTool.c;1|EntityRelativePlugin}} | EntityReplacerTool_ReplaceWith = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_EntityReplacerTool.c;462|EntityReplacerTool_ReplaceWith}} | EntityReplacerTool_ToReplace = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_EntityReplacerTool.c;449|EntityReplacerTool_ToReplace}} | EntitySlotInfo = {{Link|enfusion://ScriptEditor/scripts/Game/generated/EntitySlotInfo.c;8|EntitySlotInfo}} | EntitySpawnParams = {{Link|enfusion://ScriptEditor/scripts/GameLib/gameLib.c;123|EntitySpawnParams}} | EntityUtils = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Entities/EntityUtils.c;12|EntityUtils}} | EntityVisualizerType = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Entities/EntityVisualizerType.c;13|EntityVisualizerType}} | EnumBitFlag = {{Link|enfusion://ScriptEditor/scripts/Core/attributes.c;563|EnumBitFlag}} | EnumLinear = {{Link|enfusion://ScriptEditor/scripts/Core/attributes.c;545|EnumLinear}} | EnvironmentProbeEntity = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/EnvironmentProbeEntity.c;16|EnvironmentProbeEntity}} | EnvironmentProbeEntityClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/EnvironmentProbeEntity.c;12|EnvironmentProbeEntityClass}} | EOrderType_Character = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Orders/SCR_AIOrder.c;1|EOrderType_Character}} | EParticleEffectInfoType = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_ParticleContactComponent.c;28|EParticleEffectInfoType}} | EParticleEffectState = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Particles/EParticleEffectState.c;12|EParticleEffectState}} | EPendingLoadState = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/EPendingLoadState.c;13|EPendingLoadState}} | EPersistenceIdFlags = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/EPersistenceIdFlags.c;12|EPersistenceIdFlags}} | EPersistenceParentHandling = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/EPersistenceParentHandling.c;12|EPersistenceParentHandling}} | EPersistenceStatusCode = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/EPersistenceStatusCode.c;12|EPersistenceStatusCode}} | EPersistenceSystemState = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/EPersistenceSystemState.c;12|EPersistenceSystemState}} | EPhysicsLayerDefs = {{Link|enfusion://ScriptEditor/scripts/GameLib/gameLib.c;80|EPhysicsLayerDefs}} | EPhysicsLayerPresets = {{Link|enfusion://ScriptEditor/scripts/GameLib/gameLib.c;18|EPhysicsLayerPresets}} | EPlatform = {{Link|enfusion://ScriptEditor/scripts/Core/generated/System/EPlatform.c;12|EPlatform}} | EPlayerListTab = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_PlayerListMenu.c;1|EPlayerListTab}} | EPlayerRole = {{Link|enfusion://ScriptEditor/scripts/Game/generated/EPlayerRole.c;7|EPlayerRole}} | EPlayMenuContentType = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/PlayMenu/SCR_PlayMenu.c;1|EPlayMenuContentType}} | EPrefabSpawnType = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/PrefabsSpawning/SCR_PrefabsSpawnerManager.c;1|EPrefabSpawnType}} | EPrettyFormatOptions = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Serialization/EPrettyFormatOptions.c;12|EPrettyFormatOptions}} | EPreviewEntityEditorOperation = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_PreviewEntityEditorUIComponent.c;2|EPreviewEntityEditorOperation}} | EPreviewEntityFlag = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Preview/EPreviewEntityFlag.c;1|EPreviewEntityFlag}} | EPreviewEntityShape = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Preview/EPreviewEntityMesh.c;1|EPreviewEntityShape}} | EProfileSkillID = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Backend/CareerBackend.c;272|EProfileSkillID}} | EqualToFloat = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Dialogue/EqualToFloat.c;12|EqualToFloat}} | EqualToInt = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Dialogue/EqualToInt.c;12|EqualToInt}} | EQueryEntitiesFlags = {{Link|enfusion://ScriptEditor/scripts/Core/generated/World/EQueryEntitiesFlags.c;12|EQueryEntitiesFlags}} | EQueryType = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AmbientSoundsComponent/SCR_AmbientSoundsComponent.c;1|EQueryType}} | EquipedLoadoutStorageComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/EquipedLoadoutStorageComponent.c;16|EquipedLoadoutStorageComponent}} | EquipedLoadoutStorageComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/EquipedLoadoutStorageComponent.c;12|EquipedLoadoutStorageComponentClass}} | EquipedWeaponStorageComponent = {{Link|enfusion://ScriptEditor/scripts/GameCode/Components/InventorySystem/EquipedWeaponStorageComponent.c;5|EquipedWeaponStorageComponent}} | EquipedWeaponStorageComponentClass = {{Link|enfusion://ScriptEditor/scripts/GameCode/Components/InventorySystem/EquipedWeaponStorageComponent.c;1|EquipedWeaponStorageComponentClass}} | EquipedWeaponStorageComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Serializers/EquipedWeaponStorageComponentSerializer.c;12|EquipedWeaponStorageComponentSerializer}} | EquipmentStorageComponent = {{Link|enfusion://ScriptEditor/scripts/GameCode/Components/InventorySystem/EquipmentStorageComponent.c;8|EquipmentStorageComponent}} | EquipmentStorageComponentClass = {{Link|enfusion://ScriptEditor/scripts/GameCode/Components/InventorySystem/EquipmentStorageComponent.c;1|EquipmentStorageComponentClass}} | EquipmentStorageSlot = {{Link|enfusion://ScriptEditor/scripts/Game/generated/EquipmentStorageSlot.c;7|EquipmentStorageSlot}} | ERadioCategory = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_RadioComponent.c;2|ERadioCategory}} | ERadioType = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_RadioComponent.c;9|ERadioType}} | ERCONPermissions = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/ERCONPermissions.c;7|ERCONPermissions}} | EResourceContainerOnEmptyBehavior = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/Container/SCR_ResourceContainer.c;26|EResourceContainerOnEmptyBehavior}} | EResourceContainerStorageType = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/Container/SCR_ResourceContainer.c;17|EResourceContainerStorageType}} | EResourceDebugVisualizationFlags = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/SCR_ResourceComponent.c;1|EResourceDebugVisualizationFlags}} | EResourceGeneratorID = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/Generator/SCR_ResourceGenerator.c;1|EResourceGeneratorID}} | EResourcePlayerInteractionType = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Sandbox/SCR_ResourcePlayerControllerInventoryComponent.c;1|EResourcePlayerInteractionType}} | EResourceReason = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/Consumer/SCR_ResourceConsumtionResponse.c;1|EResourceReason}} | EResourceRights = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/Container/SCR_ResourceContainer.c;8|EResourceRights}} | EResourceType = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/Container/SCR_ResourceContainer.c;1|EResourceType}} | ERespawnSelectionResult = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_RespawnComponent.c;19|ERespawnSelectionResult}} | ERestResult = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/ERestResult.c;13|ERestResult}} | ERestrictionZoneWarningType = {{Link|enfusion://ScriptEditor/scripts/Game/RestrictionZone/ERestrictionZoneWarningType.c;4|ERestrictionZoneWarningType}} | EResupplyUnavailableReason = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_InventoryStorageManagerComponent.c;23|EResupplyUnavailableReason}} | ERevisionAvailability = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/ERevisionAvailability.c;12|ERevisionAvailability}} | ERoleCallsign = {{Link|enfusion://ScriptEditor/scripts/Game/Callsign/RoleCallsigns/ERoleCallsign.c;4|ERoleCallsign}} | ERolePermission = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/ERolePermission.c;12|ERolePermission}} | ERplStateOverride = {{Link|enfusion://ScriptEditor/scripts/GameLib/RplSessionCallbacks.c;16|ERplStateOverride}} | ErrorDialogUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ErrorDialogUI.c;6|ErrorDialogUI}} | ESaveGameRequestFlags = {{Link|enfusion://ScriptEditor/scripts/Game/generated/SaveGame/ESaveGameRequestFlags.c;12|ESaveGameRequestFlags}} | ESaveGameType = {{Link|enfusion://ScriptEditor/scripts/Game/generated/SaveGame/ESaveGameType.c;12|ESaveGameType}} | EScaleWidgetMode = {{Link|enfusion://ScriptEditor/scripts/Core/generated/EScaleWidgetMode.c;7|EScaleWidgetMode}} | EScenarioSubMenuMode = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/ScenarioMenu/SCR_ContentBrowser_ScenarioSubMenu.c;1|EScenarioSubMenuMode}} | EScoringActionMode = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Scoring/SCR_ScoringSystemComponent.c;25|EScoringActionMode}} | EScriptedStateDeserializeEvent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Serializers/EScriptedStateDeserializeEvent.c;12|EScriptedStateDeserializeEvent}} | EScrollAnimationState = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_HorizontalScrollAnimationComponent.c;18|EScrollAnimationState}} | ESerializeResult = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Serializers/ESerializeResult.c;12|ESerializeResult}} | EServerBrowserRequestResult = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/ServerBrowserMenuCallbacks.c;6|EServerBrowserRequestResult}} | EServerCatalogueMode = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/EServerCatalogueMode.c;13|EServerCatalogueMode}} | EServerCatalogueOrderBy = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/EServerCatalogueOrderBy.c;13|EServerCatalogueOrderBy}} | EServerCataloguePlatformMatch = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/EServerCataloguePlatformMatch.c;13|EServerCataloguePlatformMatch}} | EServerCatalogueSearchFlags = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/EServerCatalogueSearchFlags.c;13|EServerCatalogueSearchFlags}} | EServerCatalogueVersionMatch = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/EServerCatalogueVersionMatch.c;13|EServerCatalogueVersionMatch}} | EServerCmdResultType = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/EServerCmdResultType.c;7|EServerCmdResultType}} | EServerType = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/EServerType.c;13|EServerType}} | EServiceStatus = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SCR_ServicesStatusDialogUI.c;1|EServiceStatus}} | ESetMaxHealthFlags = {{Link|enfusion://ScriptEditor/scripts/Game/generated/HitZone/ESetMaxHealthFlags.c;12|ESetMaxHealthFlags}} | ESettingManagerModuleType = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SettingsMenu/SCR_SettingsManager.c;2|ESettingManagerModuleType}} | EShowGUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_InfoDisplayExtended.c;4|EShowGUI}} | EShowHideInEditor = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_ShowHideInEditorComponent.c;209|EShowHideInEditor}} | ESkyMaterialParams = {{Link|enfusion://ScriptEditor/scripts/GameLib/entities/gameLibEntities.c;34|ESkyMaterialParams}} | ESlotFunction = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventorySlotUI.c;9|ESlotFunction}} | ESlotID = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/InventoryConstants.c;14|ESlotID}} | ESlotSize = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/InventoryConstants.c;1|ESlotSize}} | ESortOrder = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_SortHeader/SCR_SortElementComponent.c;1|ESortOrder}} | ESoundMapType = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AmbientSoundsComponent/SCR_RandomPositionalSounds.c;1|ESoundMapType}} | ESoundName = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AmbientSoundsComponent/SCR_SoundDef.c;1|ESoundName}} | ESpawnerVariantType = {{Link|enfusion://ScriptEditor/scripts/Game/EntityCatalog/EntityCatalogEntryData/SCR_EntityCatalogSpawnerData.c;358|ESpawnerVariantType}} | ESpawnMethod = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AmbientInsectsComponent/SCR_InsectGroup.c;1|ESpawnMethod}} | EStage = {{Link|enfusion://ScriptEditor/scripts/GameLib/tests/TestingFramework.c;114|EStage}} | EStateMenuItem = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryMenuUI.c;21|EStateMenuItem}} | EStateMenuStorage = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryMenuUI.c;14|EStateMenuStorage}} | EStatsPanelEval = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/StatsPanel/SCR_StatsPanelBase.c;11|EStatsPanelEval}} | EStatsPanelFPS = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/StatsPanel/SCR_StatsPanel_FPS.c;1|EStatsPanelFPS}} | EStatsPanelState = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/StatsPanel/SCR_StatsPanelBase.c;3|EStatsPanelState}} | EStoragePurpose = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/EStoragePurpose.c;12|EStoragePurpose}} | EStringMatchType = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/EStringMatchType.c;13|EStringMatchType}} | EStringTableActorGender = {{Link|enfusion://ScriptEditor/scripts/Game/Language/EStringTableActorGender.c;1|EStringTableActorGender}} | EStringTableLabels = {{Link|enfusion://ScriptEditor/scripts/Game/Language/EStringTableLabels.c;8|EStringTableLabels}} | EStringTableStatus = {{Link|enfusion://ScriptEditor/scripts/Game/Language/EStringTableStatus.c;4|EStringTableStatus}} | EStringTableTerminology = {{Link|enfusion://ScriptEditor/scripts/Game/Language/EStringTableTerminology.c;1|EStringTableTerminology}} | ESupportStationFactionUsage = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SupportStation/SCR_BaseSupportStationComponent.c;1416|ESupportStationFactionUsage}} | ESupportStationPriority = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SupportStation/ESupportStationPriority.c;2|ESupportStationPriority}} | ESupportStationReasonInvalid = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SupportStation/ESupportStationReasonInvalid.c;3|ESupportStationReasonInvalid}} | ESupportStationType = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SupportStation/ESupportStationType.c;2|ESupportStationType}} | ESystemLocation = {{Link|enfusion://ScriptEditor/scripts/GameLib/gameLib.c;10|ESystemLocation}} | ESystemPoint = {{Link|enfusion://ScriptEditor/scripts/GameLib/gameLib.c;7|ESystemPoint}} | ETagCategory = {{Link|enfusion://ScriptEditor/scripts/Game/Enums/ETagCategory.c;1|ETagCategory}} | ETagCategory#2535#1 = {{Link|enfusion://ScriptEditor/scripts/Game/generated/ETagCategory.c;7|ETagCategory#2535#1}} | ETargetCategory = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Perception/ETargetCategory.c;12|ETargetCategory}} | ETargetMode = {{Link|enfusion://ScriptEditor/scripts/Game/FiringRange/SCR_FiringRangeTarget.c;13|ETargetMode}} | ETargetState = {{Link|enfusion://ScriptEditor/scripts/Game/FiringRange/SCR_FiringRangeTarget.c;7|ETargetState}} | ETaskIconType = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/GameMode/SCR_TaskIconComponent.c;173|ETaskIconType}} | ETaskListActions = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/UI/SCR_TaskListActionButton.c;9|ETaskListActions}} | ETaskTextType = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_TextsTaskManagerComponent.c;118|ETaskTextType}} | ETerrainNoiseType = {{Link|enfusion://ScriptEditor/scripts/Core/generated/WorkbenchAPI/Terrain/ETerrainNoiseType.c;12|ETerrainNoiseType}} | ETerrainType = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AmbientSoundsComponent/SCR_TerrainDef.c;1|ETerrainType}} | ETestRaycaster = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/SCR_TestRaycaster.c;6|ETestRaycaster}} | ETimeFormatParam = {{Link|enfusion://ScriptEditor/scripts/Game/Global/Enums/ETimeFormatParam.c;4|ETimeFormatParam}} | ETrackIRLeanMode = {{Link|enfusion://ScriptEditor/scripts/Game/generated/ETrackIRLeanMode.c;7|ETrackIRLeanMode}} | ETransformMode = {{Link|enfusion://ScriptEditor/scripts/GameLib/gameLib.c;113|ETransformMode}} | ETreeSoundTypes = {{Link|enfusion://ScriptEditor/scripts/GameCode/Vegetation/ETreeSoundTypes.c;1|ETreeSoundTypes}} | ETurretContextID = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Turrets/ETurretContextID.c;12|ETurretContextID}} | ETurretReloadState = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Turrets/ETurretReloadState.c;12|ETurretReloadState}} | ETurretState = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_TurretAssemblyAction.c;1|ETurretState}} | ETurretWeaponInputState = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Turrets/ETurretWeaponInputState.c;12|ETurretWeaponInputState}} | EUnitAIState = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AIInfoComponent.c;29|EUnitAIState}} | EUnitRole = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AIInfoComponent.c;6|EUnitRole}} | EUnitState = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AIInfoComponent.c;19|EUnitState}} | EUserActionEvent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/UserAction/EUserActionEvent.c;12|EUserActionEvent}} | EUserActionInVehicleState = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_ScriptedUserAction.c;275|EUserActionInVehicleState}} | EUserInteraction = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Player/EUserInteraction.c;13|EUserInteraction}} | EVariableTestType = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Inventory/SCR_AIDecoHasMagazineCount.c;1|EVariableTestType}} | EVehicleDrivingAssistanceMode = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/EVehicleDrivingAssistanceMode.c;13|EVehicleDrivingAssistanceMode}} | EVehicleEngineStartFailedReason = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/EVehicleEngineStartFailedReason.c;13|EVehicleEngineStartFailedReason}} | EVehicleEvent = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_EffectModule.c;312|EVehicleEvent}} | EVehicleGearboxGear = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Vehicle/SCR_VehicleGearCondition.c;1|EVehicleGearboxGear}} | EVehicleHitZoneGroup = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Damage/SCR_VehicleDamageManagerComponent.c;1|EVehicleHitZoneGroup}} | EVehicleInfoColor = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/VehicleInfo/SCR_BaseVehicleInfo.c;16|EVehicleInfoColor}} | EVehicleInfoState = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/VehicleInfo/SCR_BaseVehicleInfo.c;5|EVehicleInfoState}} | EVehicleType = {{Link|enfusion://ScriptEditor/scripts/GameCode/Vehicle/Vehicle.c;3|EVehicleType}} | Event = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Events/Event.c;12|Event}} | EventAttribute = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/EventSystem/EventAttribute.c;23|EventAttribute}} | EventHandlerManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Events/EventHandlerManagerComponent.c;16|EventHandlerManagerComponent}} | EventHandlerManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Events/EventHandlerManagerComponent.c;12|EventHandlerManagerComponentClass}} | EventProvider = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/EventSystem/EventProvider.c;28|EventProvider}} | EventType = {{Link|enfusion://ScriptEditor/scripts/Core/proto/EnWidgets.c;7|EventType}} | EVideoQualityPreset = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SettingsMenu/SCR_SettingsManagerVideoModule.c;167|EVideoQualityPreset}} | EVolumeCategories = {{Link|enfusion://ScriptEditor/scripts/GameCode/Components/SCR_VolumeDataProviderComponent.c;5|EVolumeCategories}} | EVONMenuTable = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SelectionMenu/SCR_VONRadialDisplay.c;2|EVONMenuTable}} | EVONTransmitType = {{Link|enfusion://ScriptEditor/scripts/Game/VON/SCR_VONController.c;3|EVONTransmitType}} | EVotingOutcome = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Voting/EVotingOutcome.c;1|EVotingOutcome}} | EVotingType = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Voting/EVotingType.c;1|EVotingType}} | EWaterSurfaceType = {{Link|enfusion://ScriptEditor/scripts/Game/generated/EWaterSurfaceType.c;7|EWaterSurfaceType}} | EWeaponActionType = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_WeaponAction.c;1|EWeaponActionType}} | EWeaponAttachmentActionType = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_AttachementAction.c;1|EWeaponAttachmentActionType}} | EWeaponFeature = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/WeaponInfo/SCR_WeaponInfo.c;28|EWeaponFeature}} | EWeaponFiremodeType = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/EWeaponFiremodeType.c;12|EWeaponFiremodeType}} | EWeaponGroupFireMode = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapons/EWeaponGroupFireMode.c;12|EWeaponGroupFireMode}} | EWeaponObstructedState = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/EWeaponObstructedState.c;12|EWeaponObstructedState}} | EWeaponType = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/EWeaponType.c;12|EWeaponType}} | EWheelContactLiquidState = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/EWheelContactLiquidState.c;13|EWheelContactLiquidState}} | EWidgetAnchor = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_InfoDisplay.c;8|EWidgetAnchor}} | EWindCurve = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AmbientSoundsComponent/SCR_WindCurveDef.c;4|EWindCurve}} | EWindowMode = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SettingsMenu/SCR_VideoSettingsSubMenu.c;1|EWindowMode}} | EWorkshopItemAccessState = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/EWorkshopItemAccessState.c;15|EWorkshopItemAccessState}} | EWorkshopItemProblem = {{Link|enfusion://ScriptEditor/scripts/Game/Workshop/SCR_WorkshopItem.c;14|EWorkshopItemProblem}} | EWorkshopItemQuery = {{Link|enfusion://ScriptEditor/scripts/Game/Workshop/SCR_AddonManager.c;34|EWorkshopItemQuery}} | EWorkshopItemType = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/EWorkshopItemType.c;13|EWorkshopItemType}} | EWorkshopReportType = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/EWorkshopReportType.c;15|EWorkshopReportType}} | EWorkshopTabId = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/MainMenu/ContentBrowserUI.c;1|EWorkshopTabId}} | EWristwatchType = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_WristwatchComponent.c;40|EWristwatchType}} | ExcludeGenerateFlags = {{Link|enfusion://ScriptEditor/scripts/Game/generated/ExcludeGenerateFlags.c;7|ExcludeGenerateFlags}} | ExcludeSaveFlags = {{Link|enfusion://ScriptEditor/scripts/Game/generated/ExcludeSaveFlags.c;7|ExcludeSaveFlags}} | ExplosionDamageContainer = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Effects/ExplosionDamageContainer.c;12|ExplosionDamageContainer}} | ExporterAssetType = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/WorldExporterPlugin.c;91|ExporterAssetType}} | ExportFBXResource = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/ResourceInfo.c;971|ExportFBXResource}} | ExportMaterialResource = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/ResourceInfo.c;800|ExportMaterialResource}} | ExportTerrain = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/ExportTerrain.c;28|ExportTerrain}} | ExportTerrainRequest = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/ExportTerrain.c;1|ExportTerrainRequest}} | ExportTerrainResponse = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/ExportTerrain.c;17|ExportTerrainResponse}} | ExportTextureResource = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/ResourceInfo.c;1082|ExportTextureResource}} | ExportTextureResourceRequest = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/ResourceInfo.c;1070|ExportTextureResourceRequest}} | ExtBaseCompartmentSlot = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/ExtBaseCompartmentSlot.c;12|ExtBaseCompartmentSlot}} | ExtBaseInteractionHandlerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/UserAction/ExtBaseInteractionHandlerComponent.c;21|ExtBaseInteractionHandlerComponent}} | ExtBaseInteractionHandlerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/UserAction/ExtBaseInteractionHandlerComponent.c;12|ExtBaseInteractionHandlerComponentClass}} | ExtendedDamageManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/ExtendedDamageManagerComponent.c;12|ExtendedDamageManagerComponent}} | ExtendedDamageManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/HitZone/ExtendedDamageManagerComponentClass.c;12|ExtendedDamageManagerComponentClass}} | Faction = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Faction/Faction.c;12|Faction}} | FactionAffiliationComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/FactionAffiliationComponent.c;16|FactionAffiliationComponent}} | FactionAffiliationComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/FactionAffiliationComponent.c;12|FactionAffiliationComponentClass}} | FactionAffiliationComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/Character/SCR_CharacterFactionAffiliationComponentSerializer.c;1|FactionAffiliationComponentSerializer}} | FactionChatChannel = {{Link|enfusion://ScriptEditor/scripts/GameCode/Network/FactionChatChannel.c;1|FactionChatChannel}} | FactionHolder = {{Link|enfusion://ScriptEditor/scripts/Game/Groups/SCR_GroupsManagerComponent.c;1|FactionHolder}} | FactionIdentity = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Identity/FactionIdentity.c;12|FactionIdentity}} | FactionKey = {{Link|enfusion://ScriptEditor/scripts/GameCode/Faction/FactionKey.c;3|FactionKey}} | FactionManager = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Faction/FactionManager.c;16|FactionManager}} | FactionManagerClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Faction/FactionManager.c;12|FactionManagerClass}} | FadesCinematicTrack = {{Link|enfusion://ScriptEditor/scripts/Game/Cinematics/FadesCinematicTrack.c;1|FadesCinematicTrack}} | FallDamageInspectorSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/FallDamageInspectorSystem.c;12|FallDamageInspectorSystem}} | FallenTree = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/ForestGenerator/ForestGeneratorTrees.c;52|FallenTree}} | FBXImportRequest = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/ResourceInfo.c;956|FBXImportRequest}} | FBXItem = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/PrefabImporterBake.c;86|FBXItem}} | FBXReportToolMessage = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/ValidateFBXPlugin.c;249|FBXReportToolMessage}} | FBXReportToolRequest = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/ValidateFBXPlugin.c;228|FBXReportToolRequest}} | FBXReportToolResponse = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/ValidateFBXPlugin.c;238|FBXReportToolResponse}} | FeedbackData = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SCR_FeedbackDialogUI.c;2|FeedbackData}} | FileAttribute = {{Link|enfusion://ScriptEditor/scripts/Core/generated/System/FileAttribute.c;13|FileAttribute}} | FileHandle = {{Link|enfusion://ScriptEditor/scripts/Core/generated/System/FileHandle.c;68|FileHandle}} | FileIO = {{Link|enfusion://ScriptEditor/scripts/Core/generated/System/FileIO.c;12|FileIO}} | FileMode = {{Link|enfusion://ScriptEditor/scripts/Core/generated/System/FileMode.c;13|FileMode}} | FilePath = {{Link|enfusion://ScriptEditor/scripts/Core/generated/System/FilePath.c;12|FilePath}} | FileSerializer = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Serializer.c;103|FileSerializer}} | FilteredServerParams = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/ServerBrowserFiltering.c;7|FilteredServerParams}} | FilterMorphLerpFunc = {{Link|enfusion://ScriptEditor/scripts/Core/generated/WorkbenchAPI/Terrain/FilterMorphLerpFunc.c;16|FilterMorphLerpFunc}} | FilterMorphOperation = {{Link|enfusion://ScriptEditor/scripts/Core/generated/WorkbenchAPI/Terrain/FilterMorphOperation.c;15|FilterMorphOperation}} | FilterMorphShape = {{Link|enfusion://ScriptEditor/scripts/Core/generated/WorkbenchAPI/Terrain/FilterMorphShape.c;15|FilterMorphShape}} | FindFilesCallback = {{Link|enfusion://ScriptEditor/scripts/Core/proto/System.c;21|FindFilesCallback}} | FireDamageSystem = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/FireDamageSystem.c;1|FireDamageSystem}} | FixRayMissExtents = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/BakeMLOD.c;59|FixRayMissExtents}} | FixRayMissType = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/BakeMLOD.c;53|FixRayMissType}} | FlareMoveComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Projectile/FlareMoveComponent.c;12|FlareMoveComponent}} | FlareMoveComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Projectile/FlareMoveComponentClass.c;12|FlareMoveComponentClass}} | FlattenGrassParametersObject = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Base/FlattenGrassParametersObject.c;12|FlattenGrassParametersObject}} | FlattenGrassSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/FlattenGrassSystem.c;12|FlattenGrassSystem}} | FlightMode = {{Link|enfusion://ScriptEditor/scripts/Game/generated/FlightMode.c;7|FlightMode}} | float = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Types/float.c;12|float}} | FontTextureType = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/TextureImportTool.c;854|FontTextureType}} | ForceStartEngineParams = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/ForceStartEngineParams.c;15|ForceStartEngineParams}} | ForEachChild = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/ForEachChild.c;12|ForEachChild}} | ForestGeneratorBottomLevel = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/ForestGenerator/ForestGeneratorLevels.c;77|ForestGeneratorBottomLevel}} | ForestGeneratorCapsuleEndAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/ForestGenerator/ForestGeneratorObjects.c;32|ForestGeneratorCapsuleEndAttribute}} | ForestGeneratorCapsuleStartAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/ForestGenerator/ForestGeneratorObjects.c;27|ForestGeneratorCapsuleStartAttribute}} | ForestGeneratorCircleCluster = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/ForestGenerator/ForestGeneratorClusters.c;41|ForestGeneratorCircleCluster}} | ForestGeneratorCluster = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/ForestGenerator/ForestGeneratorClusters.c;2|ForestGeneratorCluster}} | ForestGeneratorDistaceAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/ForestGenerator/ForestGeneratorObjects.c;6|ForestGeneratorDistaceAttribute}} | ForestGeneratorEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/ForestGeneratorEntity.c;12|ForestGeneratorEntity}} | ForestGeneratorEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/ForestGeneratorEntity.c;1|ForestGeneratorEntityClass}} | ForestGeneratorGrid = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Generators/ForestGeneratorGrid.c;12|ForestGeneratorGrid}} | ForestGeneratorGroupIndexAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/ForestGenerator/ForestGeneratorObjects.c;19|ForestGeneratorGroupIndexAttribute}} | ForestGeneratorLevel = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/ForestGenerator/ForestGeneratorLevels.c;1|ForestGeneratorLevel}} | ForestGeneratorOutline = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/ForestGenerator/ForestGeneratorLevels.c;26|ForestGeneratorOutline}} | ForestGeneratorPointData = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/ForestGenerator/ForestGeneratorPointData.c;1|ForestGeneratorPointData}} | ForestGeneratorShapeImportData = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_ImportShapefileTool.c;673|ForestGeneratorShapeImportData}} | ForestGeneratorStripCluster = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/ForestGenerator/ForestGeneratorClusters.c;52|ForestGeneratorStripCluster}} | ForestGeneratorTopLevel = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/ForestGenerator/ForestGeneratorLevels.c;60|ForestGeneratorTopLevel}} | ForestGeneratorTree = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/ForestGenerator/ForestGeneratorTrees.c;1|ForestGeneratorTree}} | ForestGeneratorTreeBase = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Generators/ForestGeneratorTreeBase.c;12|ForestGeneratorTreeBase}} | ForestGeneratorTreeMiddle = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/ForestGenerator/ForestGeneratorTrees.c;20|ForestGeneratorTreeMiddle}} | ForestGeneratorTreeShort = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/ForestGenerator/ForestGeneratorTrees.c;10|ForestGeneratorTreeShort}} | ForestGeneratorTreeTall = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/ForestGenerator/ForestGeneratorTrees.c;34|ForestGeneratorTreeTall}} | FPS_Autotest = {{Link|enfusion://ScriptEditor/scripts/GameLib/entities/autotest/FPS_Autotest.c;6|FPS_Autotest}} | FPS_AutotestClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/entities/autotest/FPS_Autotest.c;1|FPS_AutotestClass}} | FrameSlot = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/FrameSlot.c;12|FrameSlot}} | FrameWidget = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/FrameWidget.c;15|FrameWidget}} | FreeLookCinematicTrackModifier = {{Link|enfusion://ScriptEditor/scripts/Game/Cinematics/FreeLookCinematicTrackModifier.c;1|FreeLookCinematicTrackModifier}} | Friend = {{Link|enfusion://ScriptEditor/scripts/Core/proto/EnScript.c;65|Friend}} | FrontSightGLZeroingGenerator = {{Link|enfusion://ScriptEditor/scripts/Game/generated/FrontSightGLZeroingGenerator.c;7|FrontSightGLZeroingGenerator}} | FuelConsumptionSystem = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/FuelConsumptionSystem.c;1|FuelConsumptionSystem}} | FuelManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/FuelManagerComponent.c;16|FuelManagerComponent}} | FuelManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/FuelManagerComponent.c;12|FuelManagerComponentClass}} | FuelSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/FuelSystem.c;12|FuelSystem}} | func = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;142|func}} | FuzeSlotInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Explosives/FuzeSlotInfo.c;2|FuzeSlotInfo}} | FxCinematicTrack = {{Link|enfusion://ScriptEditor/scripts/Game/Cinematics/FxCinematicTrack.c;1|FxCinematicTrack}} | GadgetAnimationComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Animation/GadgetAnimationComponent.c;16|GadgetAnimationComponent}} | GadgetAnimationComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Animation/GadgetAnimationComponent.c;12|GadgetAnimationComponentClass}} | GadgetGamepadEffectsManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Gamepad/GadgetGamepadEffectsManagerComponent.c;16|GadgetGamepadEffectsManagerComponent}} | GadgetGamepadEffectsManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Gamepad/GadgetGamepadEffectsManagerComponent.c;12|GadgetGamepadEffectsManagerComponentClass}} | GadgetManagersSystem = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/GadgetManagersSystem.c;1|GadgetManagersSystem}} | GadgetsSystem = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/GadgetsSystem.c;1|GadgetsSystem}} | Game = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Game.c;7|Game}} | GameAnimationUtils = {{Link|enfusion://ScriptEditor/scripts/Game/generated/GameAnimationUtils.c;7|GameAnimationUtils}} | GameBlocklist = {{Link|enfusion://ScriptEditor/scripts/Game/generated/GameBlocklist.c;7|GameBlocklist}} | GameComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/GameComponent.c;12|GameComponent}} | GameComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/GameComponentClass.c;7|GameComponentClass}} | GameConsoleWidget = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/UI/GameConsoleWidget.c;12|GameConsoleWidget}} | GameEntity = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Entities/GameEntity.c;16|GameEntity}} | GameEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Entities/GameEntity.c;12|GameEntityClass}} | GameEnvironmentProbeEntity = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Entities/GameEnvironmentProbeEntity.c;16|GameEnvironmentProbeEntity}} | GameEnvironmentProbeEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Entities/GameEnvironmentProbeEntity.c;12|GameEnvironmentProbeEntityClass}} | GameHierarchyComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/GameHierarchyComponent.c;16|GameHierarchyComponent}} | GameHierarchyComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/GameHierarchyComponent.c;12|GameHierarchyComponentClass}} | GameLibMaterial = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Core/GameLibMaterial.c;12|GameLibMaterial}} | GameLibMenusEnum = {{Link|enfusion://ScriptEditor/scripts/GameLib/menuManager.c;25|GameLibMenusEnum}} | GameLibWidgetType = {{Link|enfusion://ScriptEditor/scripts/GameLib/gameLibWidgets.c;6|GameLibWidgetType}} | GameMaterial = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Core/GameMaterial.c;12|GameMaterial}} | GameModeSetupConfig = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/GameModeSetup/GameModeSetupConfig.c;3|GameModeSetupConfig}} | GameModeSetupConfigEntry = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/GameModeSetup/GameModeSetupConfig.c;400|GameModeSetupConfigEntry}} | GamemodeStorage = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Storages/GamemodeStorage.c;12|GamemodeStorage}} | GameOverScreenInput = {{Link|enfusion://ScriptEditor/scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c;1|GameOverScreenInput}} | GamepadEffect = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Gamepad/GamepadEffect.c;12|GamepadEffect}} | GamepadEffectContext = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Gamepad/GamepadEffectContext.c;14|GamepadEffectContext}} | GamepadEffectsManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Gamepad/GamepadEffectsManagerComponent.c;16|GamepadEffectsManagerComponent}} | GamepadEffectsManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Gamepad/GamepadEffectsManagerComponent.c;12|GamepadEffectsManagerComponentClass}} | GamepadIOHandlerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Gamepad/GamepadIOHandlerComponent.c;16|GamepadIOHandlerComponent}} | GamepadIOHandlerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Gamepad/GamepadIOHandlerComponent.c;12|GamepadIOHandlerComponentClass}} | GamepadLightEffect = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Gamepad/GamepadLightEffect.c;12|GamepadLightEffect}} | GamepadRumbleEffect = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Gamepad/GamepadRumbleEffect.c;13|GamepadRumbleEffect}} | GamepadTrigger = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Input/GamepadTrigger.c;12|GamepadTrigger}} | GamepadTriggerEffect = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Input/GamepadTriggerEffect.c;12|GamepadTriggerEffect}} | GamepadVibrationEffect = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Gamepad/GamepadVibrationEffect.c;12|GamepadVibrationEffect}} | GameplayTrait = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Backend/CareerBackend.c;1|GameplayTrait}} | GameProject = {{Link|enfusion://ScriptEditor/scripts/Core/generated/System/GameProject.c;12|GameProject}} | GameRplSchedulerInsertionCtx = {{Link|enfusion://ScriptEditor/scripts/Game/Network/GameRplScheduler.c;1|GameRplSchedulerInsertionCtx}} | GameSessionStorage = {{Link|enfusion://ScriptEditor/scripts/Core/generated/System/GameSessionStorage.c;13|GameSessionStorage}} | GameSignalsManager = {{Link|enfusion://ScriptEditor/scripts/Game/generated/GameSignalsManager.c;7|GameSignalsManager}} | GameStateTransitions = {{Link|enfusion://ScriptEditor/scripts/Game/generated/GameStateTransitions/GameStateTransitions.c;12|GameStateTransitions}} | GameStatsApi = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Network/GameStatsApi.c;13|GameStatsApi}} | GameSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/GameSystem.c;15|GameSystem}} | GameWidgetType = {{Link|enfusion://ScriptEditor/scripts/GameCode/Core/GameWidgets.c;6|GameWidgetType}} | GameWorldEditor = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/GameWorldEditor.c;10|GameWorldEditor}} | GarbageSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/GarbageSystem.c;12|GarbageSystem}} | GarbageSystemConfig = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/GarbageSystemConfig.c;12|GarbageSystemConfig}} | GarbageSystemConfigComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/GarbageSystemConfigComponent.c;16|GarbageSystemConfigComponent}} | GarbageSystemConfigComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/GarbageSystemConfigComponent.c;12|GarbageSystemConfigComponentClass}} | GarbageSystemState = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Serializers/States/GarbageSystemState.c;12|GarbageSystemState}} | GarbageSystemStateSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Serializers/GarbageSystemStateSerializer.c;12|GarbageSystemStateSerializer}} | GeneralCinematicTrack = {{Link|enfusion://ScriptEditor/scripts/Game/Cinematics/GeneralCinematicTrack.c;1|GeneralCinematicTrack}} | GeneratedResources = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorkbenchAPI/GeneratedResources.c;14|GeneratedResources}} | GenerateFlowMaps = {{Link|enfusion://ScriptEditor/scripts/WorkbenchCommon/FlowmapTool.c;1|GenerateFlowMaps}} | GenerateFlowMapsWEPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchCommon/FlowmapTool.c;59|GenerateFlowMapsWEPlugin}} | GeneratorBaseEntity = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/GeneratorBaseEntity.c;16|GeneratorBaseEntity}} | GeneratorBaseEntityClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/GeneratorBaseEntity.c;12|GeneratorBaseEntityClass}} | GenericComponent = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Components/GenericComponent.c;12|GenericComponent}} | GenericComponentClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/GenericComponentClass.c;7|GenericComponentClass}} | GenericController = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/GenericController.c;16|GenericController}} | GenericControllerClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/GenericController.c;12|GenericControllerClass}} | GenericEntity = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/GenericEntity.c;15|GenericEntity}} | GenericEntityClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/entities/gameLibEntities.c;25|GenericEntityClass}} | GenericEntitySerializer = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Serializers/GenericEntitySerializer.c;12|GenericEntitySerializer}} | GenericGraphModel = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Graph/GenericGraphModel.c;12|GenericGraphModel}} | GenericJSONContainer = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/ResourceInfo.c;303|GenericJSONContainer}} | GenericListboxWidget = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/GenericListboxWidget.c;12|GenericListboxWidget}} | GenericResourceInfo = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/ResourceInfo.c;412|GenericResourceInfo}} | GenericTerrainEntity = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/GenericTerrainEntity.c;16|GenericTerrainEntity}} | GenericTerrainEntityClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/GenericTerrainEntity.c;12|GenericTerrainEntityClass}} | GenericWorldEntity = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/GenericWorldEntity.c;16|GenericWorldEntity}} | GenericWorldEntityClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/GenericWorldEntity.c;12|GenericWorldEntityClass}} | GenericWorldFogEntity = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/GenericWorldFogEntity.c;16|GenericWorldFogEntity}} | GenericWorldFogEntityClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/GenericWorldFogEntity.c;12|GenericWorldFogEntityClass}} | GenericWorldLightEntity = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/GenericWorldLightEntity.c;16|GenericWorldLightEntity}} | GenericWorldLightEntityClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/GenericWorldLightEntity.c;12|GenericWorldLightEntityClass}} | GenericWorldPPEffect = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/GenericWorldPPEffect.c;16|GenericWorldPPEffect}} | GenericWorldPPEffectClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/GenericWorldPPEffect.c;12|GenericWorldPPEffectClass}} | GenericWorldRainEntity = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/GenericWorldRainEntity.c;16|GenericWorldRainEntity}} | GenericWorldRainEntityClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/GenericWorldRainEntity.c;12|GenericWorldRainEntityClass}} | GenericWorldWindEntity = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/GenericWorldWindEntity.c;16|GenericWorldWindEntity}} | GenericWorldWindEntityClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/GenericWorldWindEntity.c;12|GenericWorldWindEntityClass}} | GeoAttribCollection = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorkbenchAPI/GeoShapes/GeoAttribCollection.c;21|GeoAttribCollection}} | GeoAttribType = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorkbenchAPI/GeoShapes/GeoAttribType.c;15|GeoAttribType}} | GeoMultiPoint = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorkbenchAPI/GeoShapes/GeoMultiPoint.c;15|GeoMultiPoint}} | GeoPoint = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorkbenchAPI/GeoShapes/GeoPoint.c;15|GeoPoint}} | GeoPolygon = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorkbenchAPI/GeoShapes/GeoPolygon.c;15|GeoPolygon}} | GeoPolyline = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorkbenchAPI/GeoShapes/GeoPolyline.c;15|GeoPolyline}} | GeoShape = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorkbenchAPI/GeoShapes/GeoShape.c;15|GeoShape}} | GeoShapeCollection = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorkbenchAPI/GeoShapes/GeoShapeCollection.c;18|GeoShapeCollection}} | GeoShapeLoader = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorkbenchAPI/GeoShapes/GeoShapeLoader.c;18|GeoShapeLoader}} | GeoShapeType = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorkbenchAPI/GeoShapes/GeoShapeType.c;15|GeoShapeType}} | GeoVertexCollection = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorkbenchAPI/GeoShapes/GeoVertexCollection.c;15|GeoVertexCollection}} | GetGameMaterials = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/ResourceInfo.c;730|GetGameMaterials}} | GetGameMaterialsResponse = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/ResourceInfo.c;719|GetGameMaterialsResponse}} | GetLayerInteraction = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/LayerPresets.c;92|GetLayerInteraction}} | GetLayerInteractionRequest = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/LayerPresets.c;72|GetLayerInteractionRequest}} | GetLayerInteractionResponse = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/LayerPresets.c;82|GetLayerInteractionResponse}} | GetLoadedProjects = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/AssetLibraryUtils.c;43|GetLoadedProjects}} | GetLoadedProjectsResponse = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/AssetLibraryUtils.c;1|GetLoadedProjectsResponse}} | GetPathToAssetsFromGuids = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/AssetLibraryUtils.c;279|GetPathToAssetsFromGuids}} | GetPathToAssetsFromGuidsRequest = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/AssetLibraryUtils.c;254|GetPathToAssetsFromGuidsRequest}} | GetPathToAssetsFromGuidsResponse = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/AssetLibraryUtils.c;264|GetPathToAssetsFromGuidsResponse}} | GetPortalMat = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/GetPortalMat.c;26|GetPortalMat}} | GetPortalMatRequest = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/GetPortalMat.c;1|GetPortalMatRequest}} | GetPortalMatResponse = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/GetPortalMat.c;16|GetPortalMatResponse}} | GetPrefabChildInfo = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/ResourceInfo.c;664|GetPrefabChildInfo}} | GetPrefabChildRequest = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/ResourceInfo.c;651|GetPrefabChildRequest}} | GetPrefabGUID = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/AssetLibraryUtils.c;224|GetPrefabGUID}} | GetPrefabGUIDRequest = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/AssetLibraryUtils.c;196|GetPrefabGUIDRequest}} | GetPrefabGUIDResponse = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/AssetLibraryUtils.c;206|GetPrefabGUIDResponse}} | GetRelativePath = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/EBTEmatUtils.c;56|GetRelativePath}} | GetRelativePathRequest = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/EBTEmatUtils.c;33|GetRelativePathRequest}} | GetRelativePathResponse = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/EBTEmatUtils.c;43|GetRelativePathResponse}} | GetResourceInfo = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/ResourceInfo.c;624|GetResourceInfo}} | GetResourceInfoRequest = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/ResourceInfo.c;612|GetResourceInfoRequest}} | GetRoomsIds = {{Link|enfusion://ScriptEditor/scripts/GameLib/online/ServerBrowserFiltering.c;5|GetRoomsIds}} | GetTextureRawDataCallback = {{Link|enfusion://ScriptEditor/scripts/Core/proto/System.c;57|GetTextureRawDataCallback}} | GetWorldCinematicTrack = {{Link|enfusion://ScriptEditor/scripts/Game/Cinematics/GetWorldCinematicTrack.c;1|GetWorldCinematicTrack}} | global_pointer = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;133|global_pointer}} | GlobalMCRMode = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/ResourceInfo.c;18|GlobalMCRMode}} | Graph = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Graph/Graph.c;16|Graph}} | GraphEdge = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Graph/GraphEdge.c;13|GraphEdge}} | GraphGraphicsItem = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Graph/GraphGraphicsItem.c;12|GraphGraphicsItem}} | GraphNode = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Graph/GraphNode.c;12|GraphNode}} | GraphNodeConnectionBase = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Graph/Connections/GraphNodeConnectionBase.c;12|GraphNodeConnectionBase}} | GraphNodeConnectionCurve = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Graph/Connections/GraphNodeConnectionCurve.c;12|GraphNodeConnectionCurve}} | GraphNodeConnectionLine = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Graph/Connections/GraphNodeConnectionLine.c;12|GraphNodeConnectionLine}} | GraphNodeId = {{Link|enfusion://ScriptEditor/scripts/GameCode/Core/Graph/GraphCommon.c;1|GraphNodeId}} | GraphNodePortBase = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Graph/Ports/GraphNodePortBase.c;12|GraphNodePortBase}} | GraphNodePortCircle = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Graph/Ports/GraphNodePortCircle.c;12|GraphNodePortCircle}} | GraphNodePortRect = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Graph/Ports/GraphNodePortRect.c;12|GraphNodePortRect}} | GraphNodeScene = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Graph/GraphNodeScene.c;12|GraphNodeScene}} | GraphNodeView = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Graph/GraphNodeView.c;12|GraphNodeView}} | GraphPortInfo = {{Link|enfusion://ScriptEditor/scripts/GameLib/graph/GraphPortInfo.c;1|GraphPortInfo}} | GraphWidget = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/UI/GraphWidget.c;12|GraphWidget}} | GrenadeMoveComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Projectile/GrenadeMoveComponent.c;12|GrenadeMoveComponent}} | GrenadeMoveComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Projectile/GrenadeMoveComponentClass.c;12|GrenadeMoveComponentClass}} | GrenadeSlotComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/GrenadeSlotComponent.c;16|GrenadeSlotComponent}} | GrenadeSlotComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/GrenadeSlotComponent.c;12|GrenadeSlotComponentClass}} | GrenadeUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/UI/WeaponUIInfo.c;18|GrenadeUIInfo}} | GridLayoutWidget = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/GridLayoutWidget.c;15|GridLayoutWidget}} | GridSlot = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/GridSlot.c;12|GridSlot}} | GridSpawnerObjectType = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/GridSpawnerEntity.c;8|GridSpawnerObjectType}} | GroupApplication = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/GroupApplication.c;13|GroupApplication}} | GroupCatalogue = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/GroupCatalogue.c;16|GroupCatalogue}} | GroupChatChannel = {{Link|enfusion://ScriptEditor/scripts/GameCode/Network/GroupChatChannel.c;1|GroupChatChannel}} | GroupData = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/GroupData.c;12|GroupData}} | GroupInfoDisplay = {{Link|enfusion://ScriptEditor/scripts/Game/generated/UI/HUD/GroupInfoDisplay.c;12|GroupInfoDisplay}} | GroupManifest = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/GroupManifest.c;13|GroupManifest}} | GroupMemberCatalogue = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/GroupMemberCatalogue.c;12|GroupMemberCatalogue}} | GroupMemberRole = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/GroupMemberRole.c;12|GroupMemberRole}} | GroupMembership = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/GroupMembership.c;12|GroupMembership}} | GroupSettingsDialogUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/GroupSettingsDialogUI.c;2|GroupSettingsDialogUI}} | GroupWeaponFiremode = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/WeaponInfo/SCR_WeaponInfo_MultiWeaponTurret.c;899|GroupWeaponFiremode}} | GroupWeaponFiremodeEntry = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/WeaponInfo/SCR_WeaponInfo_MultiWeaponTurret.c;927|GroupWeaponFiremodeEntry}} | GUIColors = {{Link|enfusion://ScriptEditor/scripts/Game/Global/Constants.c;110|GUIColors}} | handle64 = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;138|handle64}} | HandleAimingUpdateSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/HandleAimingUpdateSystem.c;12|HandleAimingUpdateSystem}} | HandleAnimatedColliderSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/HandleAnimatedColliderSystem.c;12|HandleAnimatedColliderSystem}} | HandleAnimationsInterpolateSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/HandleAnimationsInterpolateSystem.c;12|HandleAnimationsInterpolateSystem}} | HandleAnimationsKeyframeNwkSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/HandleAnimationsKeyframeNwkSystem.c;12|HandleAnimationsKeyframeNwkSystem}} | HandleAnimationsKeyframeSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/HandleAnimationsKeyframeSystem.c;12|HandleAnimationsKeyframeSystem}} | HandleAnimationsReplaySystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/HandleAnimationsReplaySystem.c;12|HandleAnimationsReplaySystem}} | HandleClothsPhysicUpdateSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/HandleClothsPhysicUpdateSystem.c;12|HandleClothsPhysicUpdateSystem}} | HandleClothsPositionUpdateSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/HandleClothsPositionUpdateSystem.c;12|HandleClothsPositionUpdateSystem}} | HandleControlsSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/HandleControlsSystem.c;12|HandleControlsSystem}} | HandleDamageSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/HandleDamageSystem.c;12|HandleDamageSystem}} | HandleFireRequestsSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/HandleFireRequestsSystem.c;12|HandleFireRequestsSystem}} | HandleItemAnimationsSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/HandleItemAnimationsSystem.c;12|HandleItemAnimationsSystem}} | HandlePlayerControllersUpdateSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/HandlePlayerControllersUpdateSystem.c;12|HandlePlayerControllersUpdateSystem}} | HandleRagdollSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/HandleRagdollSystem.c;12|HandleRagdollSystem}} | HandleUpdateVONControllersSystem = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/HandleUpdateVONControllersSystem.c;1|HandleUpdateVONControllersSystem}} | HeatmapData = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/SCR_FPS_Autotest.c;7|HeatmapData}} | HelicopterAutopilotHelperComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/HelicopterAutopilotHelperComponent.c;16|HelicopterAutopilotHelperComponent}} | HelicopterAutopilotHelperComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/HelicopterAutopilotHelperComponent.c;12|HelicopterAutopilotHelperComponentClass}} | HelicopterCinematicTrack = {{Link|enfusion://ScriptEditor/scripts/Game/Cinematics/HelicopterCinematicTrack.c;1|HelicopterCinematicTrack}} | HelicopterControllerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/HelicopterControllerComponent.c;16|HelicopterControllerComponent}} | HelicopterControllerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/HelicopterControllerComponent.c;12|HelicopterControllerComponentClass}} | HelicopterControllerComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Serializers/HelicopterControllerComponentSerializer.c;12|HelicopterControllerComponentSerializer}} | HidingCloth = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Base/HidingCloth.c;12|HidingCloth}} | HierarchicalParametricMaterialInstanceComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/HierarchicalParametricMaterialInstanceComponent.c;16|HierarchicalParametricMaterialInstanceComponent}} | HierarchicalParametricMaterialInstanceComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/HierarchicalParametricMaterialInstanceComponent.c;12|HierarchicalParametricMaterialInstanceComponentClass}} | HierarchicalPointInfo = {{Link|enfusion://ScriptEditor/scripts/Game/generated/HierarchicalPointInfo.c;7|HierarchicalPointInfo}} | HitEffectComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Effects/HitEffectComponent.c;16|HitEffectComponent}} | HitEffectComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Effects/HitEffectComponent.c;12|HitEffectComponentClass}} | HitEffectInfo = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Core/HitEffectInfo.c;12|HitEffectInfo}} | HitRegistrationSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/HitRegistrationSystem.c;12|HitRegistrationSystem}} | HitZone = {{Link|enfusion://ScriptEditor/scripts/Game/generated/HitZone/HitZone.c;12|HitZone}} | HitZoneContainerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/HitZoneContainerComponent.c;12|HitZoneContainerComponent}} | HitZoneContainerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/HitZone/HitZoneContainerComponentClass.c;12|HitZoneContainerComponentClass}} | HitZoneContainerComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Serializers/HitZoneContainerComponentSerializer.c;12|HitZoneContainerComponentSerializer}} | HolsteredItemAttributes = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/HolsteredItemAttributes.c;12|HolsteredItemAttributes}} | HorizontalFillOrigin = {{Link|enfusion://ScriptEditor/scripts/Core/proto/EnWidgets.c;57|HorizontalFillOrigin}} | HorizontalLayoutSlot = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/HorizontalLayoutSlot.c;12|HorizontalLayoutSlot}} | HorizontalLayoutWidget = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/HorizontalLayoutWidget.c;12|HorizontalLayoutWidget}} | HoverButtonComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Deprecated/HoverButtonComponent.c;5|HoverButtonComponent}} | HttpCode = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/HttpCode.c;18|HttpCode}} | HUDManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/UI/HUD/HUDManagerComponent.c;16|HUDManagerComponent}} | HUDManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/UI/HUD/HUDManagerComponent.c;12|HUDManagerComponentClass}} | HUDSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/HUDSystem.c;12|HUDSystem}} | Identity = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Identity/Identity.c;12|Identity}} | IdentityBodyMesh = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Identity/IdentityBodyMesh.c;12|IdentityBodyMesh}} | IEntity = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Entities/IEntity.c;12|IEntity}} | IEntityComponentSource = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Containers/IEntityComponentSource.c;12|IEntityComponentSource}} | IEntitySource = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Containers/IEntitySource.c;12|IEntitySource}} | IGraphModel = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Graph/IGraphModel.c;12|IGraphModel}} | ImageDrawCommand = {{Link|enfusion://ScriptEditor/scripts/Core/proto/EnWidgets.c;118|ImageDrawCommand}} | ImageMaskMode = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/ImageMaskMode.c;12|ImageMaskMode}} | ImageScale = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/ImageScale.c;12|ImageScale}} | ImageSetGeneratorArea = {{Link|enfusion://ScriptEditor/scripts/Workbench/SCR_ImageSetGenerator.c;162|ImageSetGeneratorArea}} | ImageWidget = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/ImageWidget.c;12|ImageWidget}} | InfoStatus = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/ResourceInfo.c;294|InfoStatus}} | InputBinding = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Input/InputBinding.c;23|InputBinding}} | InputButtonData = {{Link|enfusion://ScriptEditor/scripts/Game/generated/UI/Actions/InputButtonData.c;12|InputButtonData}} | InputButtonLayoutConfig = {{Link|enfusion://ScriptEditor/scripts/Game/generated/UI/Actions/InputButtonLayoutConfig.c;12|InputButtonLayoutConfig}} | InputButtonLayoutEntry = {{Link|enfusion://ScriptEditor/scripts/Game/generated/UI/Actions/InputButtonLayoutEntry.c;12|InputButtonLayoutEntry}} | InputButtonState = {{Link|enfusion://ScriptEditor/scripts/Game/generated/UI/Actions/InputButtonState.c;12|InputButtonState}} | InputButtonStyle = {{Link|enfusion://ScriptEditor/scripts/Game/generated/UI/Actions/InputButtonStyle.c;12|InputButtonStyle}} | InputManager = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Input/InputManager.c;12|InputManager}} | InputMappingKeyData = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/InputMappingKeyData.c;19|InputMappingKeyData}} | InsectFlyMovementComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/InsectFlyMovementComponent.c;16|InsectFlyMovementComponent}} | InsectFlyMovementComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/InsectFlyMovementComponent.c;12|InsectFlyMovementComponentClass}} | InstantDamageEffect = {{Link|enfusion://ScriptEditor/scripts/Game/generated/DamageEffects/InstantDamageEffect.c;12|InstantDamageEffect}} | Instigator = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Damage/Instigator.c;12|Instigator}} | InstigatorType = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Damage/InstigatorType.c;12|InstigatorType}} | int = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Types/int.c;12|int}} | InteractionBlockSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/InteractionBlockSystem.c;12|InteractionBlockSystem}} | InteractionHandlerComponent = {{Link|enfusion://ScriptEditor/scripts/GameCode/UserAction/InteractionHandlerComponent.c;10|InteractionHandlerComponent}} | InteractionHandlerComponentClass = {{Link|enfusion://ScriptEditor/scripts/GameCode/UserAction/InteractionHandlerComponent.c;1|InteractionHandlerComponentClass}} | InteractionSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/InteractionSystem.c;12|InteractionSystem}} | IntercomTransceiver = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Radio/IntercomTransceiver.c;12|IntercomTransceiver}} | InteriorRequestCallback = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Sound/InteriorRequestCallback.c;12|InteriorRequestCallback}} | InventoryItemComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/InventorySystem/InventoryItemComponent.c;12|InventoryItemComponent}} | InventoryItemComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/InventorySystem/InventoryItemComponentClass.c;12|InventoryItemComponentClass}} | InventoryMagazineComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/InventorySystem/InventoryMagazineComponent.c;12|InventoryMagazineComponent}} | InventoryMagazineComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/InventorySystem/InventoryMagazineComponentClass.c;12|InventoryMagazineComponentClass}} | InventoryOperationCallback = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/InventoryTask/InventoryOperationCallback.c;12|InventoryOperationCallback}} | InventorySearchPredicate = {{Link|enfusion://ScriptEditor/scripts/GameCode/Components/InventorySystem/InventoryTask/InventorySearchPredicate.c;1|InventorySearchPredicate}} | InventoryStorageManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/InventoryStorageManagerComponent.c;12|InventoryStorageManagerComponent}} | InventoryStorageManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventoryStorageManagerComponentClass.c;7|InventoryStorageManagerComponentClass}} | InventoryStorageSlot = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/InventoryStorageSlot.c;12|InventoryStorageSlot}} | InventoryStreamingSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/InventoryStreamingSystem.c;12|InventoryStreamingSystem}} | InventorySystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/InventorySystem.c;12|InventorySystem}} | IScoringAction = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Scoring/SCR_ScoringSystemComponent.c;5|IScoringAction}} | ItemActionAnimAttributes = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/ItemActionAnimAttributes.c;12|ItemActionAnimAttributes}} | ItemAnimationAttributes = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/ItemAnimationAttributes.c;12|ItemAnimationAttributes}} | ItemAttributeCollection = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/ItemAttributeCollection.c;12|ItemAttributeCollection}} | ItemMovementSwayAttributes = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/ItemMovementSwayAttributes.c;12|ItemMovementSwayAttributes}} | ItemOneHandAnimAttributes = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/ItemOneHandAnimAttributes.c;12|ItemOneHandAnimAttributes}} | ItemPhysicalAttributes = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/ItemPhysicalAttributes.c;12|ItemPhysicalAttributes}} | ItemPreviewManagerEntity = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/ItemPreviewManagerEntity.c;16|ItemPreviewManagerEntity}} | ItemPreviewManagerEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/ItemPreviewManagerEntity.c;12|ItemPreviewManagerEntityClass}} | ItemPreviewWidget = {{Link|enfusion://ScriptEditor/scripts/Game/generated/UI/ItemPreviewWidget.c;12|ItemPreviewWidget}} | ItemUseParameters = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/ItemUseParameters.c;15|ItemUseParameters}} | JsonApiStruct = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/JsonApiStruct.c;15|JsonApiStruct}} | JsonBundler = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Bundling/JsonBundler.c;12|JsonBundler}} | JsonLoadContainer = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Serialization/JsonLoadContainer.c;13|JsonLoadContainer}} | JsonSaveContainer = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Serialization/JsonSaveContainer.c;13|JsonSaveContainer}} | KeyCode = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Input/KeyCode.c;12|KeyCode}} | KickCauseCode = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/KickCauseCode.c;13|KickCauseCode}} | KickCauseCodeAPI = {{Link|enfusion://ScriptEditor/scripts/Game/Utilities/KickCauseCodeAPI.c;7|KickCauseCodeAPI}} | KickCauseGroup = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/KickCauseGroup.c;7|KickCauseGroup}} | KickCauseGroup2 = {{Link|enfusion://ScriptEditor/scripts/Game/generated/GameStateTransitions/KickCauseGroup2.c;13|KickCauseGroup2}} | KickCommand = {{Link|enfusion://ScriptEditor/scripts/Game/Network/ServerCommands/BanCommands.c;534|KickCommand}} | LadderComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Buildings/LadderComponent.c;12|LadderComponent}} | LadderComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Buildings/LadderComponentClass.c;12|LadderComponentClass}} | LadderExitPointInfo = {{Link|enfusion://ScriptEditor/scripts/Game/generated/LadderExitPointInfo.c;7|LadderExitPointInfo}} | LakeGeneratorEntity = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/LakeGeneratorEntity.c;16|LakeGeneratorEntity}} | LakeGeneratorEntityClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/LakeGeneratorEntity.c;12|LakeGeneratorEntityClass}} | LandingGearType = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/LandingGearType.c;12|LandingGearType}} | LayerPresets = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/LayerPresets.c;57|LayerPresets}} | LayerPresetsRequest = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/LayerPresets.c;1|LayerPresetsRequest}} | LayerPresetsResponse = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/LayerPresets.c;11|LayerPresetsResponse}} | LayoutHorizontalAlign = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/LayoutHorizontalAlign.c;12|LayoutHorizontalAlign}} | LayoutSizeMode = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/LayoutSizeMode.c;15|LayoutSizeMode}} | LayoutSlot = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/LayoutSlot.c;12|LayoutSlot}} | LayoutVerticalAlign = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/LayoutVerticalAlign.c;12|LayoutVerticalAlign}} | LayoutWidgetBase = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/LayoutWidgetBase.c;15|LayoutWidgetBase}} | LegacyCurve = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Utilities/LegacyCurve.c;12|LegacyCurve}} | LightCinematicTrack = {{Link|enfusion://ScriptEditor/scripts/Game/Cinematics/LightCinematicTrack.c;1|LightCinematicTrack}} | LightEntity = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/LightEntity.c;21|LightEntity}} | LightEntityClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/LightEntity.c;12|LightEntityClass}} | LightFlags = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Visual/LightFlags.c;12|LightFlags}} | LightHandle = {{Link|enfusion://ScriptEditor/scripts/Core/generated/World/LightHandle.c;12|LightHandle}} | LightLensFlareType = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Visual/LightLensFlareType.c;13|LightLensFlareType}} | LightManagersSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/LightManagersSystem.c;12|LightManagersSystem}} | LightType = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Visual/LightType.c;12|LightType}} | LightUserAction = {{Link|enfusion://ScriptEditor/scripts/GameCode/UserAction/LightUserAction.c;1|LightUserAction}} | LineDrawCommand = {{Link|enfusion://ScriptEditor/scripts/Core/proto/EnWidgets.c;89|LineDrawCommand}} | Link = {{Link|enfusion://ScriptEditor/scripts/Core/proto/proto.c;97|Link}} | LoadedProjects = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/LoadedProjects.c;22|LoadedProjects}} | LoadedProjectsRequest = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/LoadedProjects.c;1|LoadedProjectsRequest}} | LoadedProjectsResponse = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/LoadedProjects.c;11|LoadedProjectsResponse}} | LoadingAnim = {{Link|enfusion://ScriptEditor/scripts/GameLib/gameLib.c;153|LoadingAnim}} | LoadoutAreaType = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Loadout/LoadoutAreaType.c;12|LoadoutAreaType}} | LoadoutArmoredVestSlotArea = {{Link|enfusion://ScriptEditor/scripts/GameCode/Loadout/LoadoutArmoredVestArea.c;1|LoadoutArmoredVestSlotArea}} | LoadoutBackpackArea = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Loadout/LoadoutBackpackArea.c;12|LoadoutBackpackArea}} | LoadoutBinocularsArea = {{Link|enfusion://ScriptEditor/scripts/GameCode/Loadout/LoadoutBinocularsArea.c;1|LoadoutBinocularsArea}} | LoadoutBootsArea = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Loadout/LoadoutBootsArea.c;12|LoadoutBootsArea}} | LoadoutCoverArea = {{Link|enfusion://ScriptEditor/scripts/GameCode/Loadout/LoadoutTypes.c;4|LoadoutCoverArea}} | LoadoutCoverAreaClass = {{Link|enfusion://ScriptEditor/scripts/GameCode/Loadout/LoadoutTypes.c;2|LoadoutCoverAreaClass}} | LoadoutGooglesArea = {{Link|enfusion://ScriptEditor/scripts/GameCode/Loadout/LoadoutTypes.c;15|LoadoutGooglesArea}} | LoadoutGooglesAreaClass = {{Link|enfusion://ScriptEditor/scripts/GameCode/Loadout/LoadoutTypes.c;13|LoadoutGooglesAreaClass}} | LoadoutHandwearSlotArea = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Loadout/LoadoutHandwearSlotArea.c;12|LoadoutHandwearSlotArea}} | LoadoutHeadCoverArea = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Loadout/LoadoutHeadCoverArea.c;12|LoadoutHeadCoverArea}} | LoadoutIdentityItemArea = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_LoadoutIdentityItemArea.c;1|LoadoutIdentityItemArea}} | LoadoutJacketArea = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Loadout/LoadoutJacketArea.c;12|LoadoutJacketArea}} | LoadoutPantsArea = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Loadout/LoadoutPantsArea.c;12|LoadoutPantsArea}} | LoadoutSalineBagArea = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_ConsumableSalineBag.c;1|LoadoutSalineBagArea}} | LoadoutSlotInfo = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/LoadoutSlotInfo.c;12|LoadoutSlotInfo}} | LoadoutStat = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/Career/SCR_LoadoutStatistics.c;188|LoadoutStat}} | LoadoutStatSet = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/Career/SCR_LoadoutStatistics.c;175|LoadoutStatSet}} | LoadoutVestArea = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Loadout/LoadoutVestArea.c;12|LoadoutVestArea}} | LoadoutWatchArea = {{Link|enfusion://ScriptEditor/scripts/GameCode/Loadout/LoadoutWatchArea.c;12|LoadoutWatchArea}} | LocalChatChannel = {{Link|enfusion://ScriptEditor/scripts/GameCode/Network/LocalChatChannel.c;1|LocalChatChannel}} | LocalizationEditor = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorkbenchAPI/Modules/LocalizationEditor.c;14|LocalizationEditor}} | LocalizationEditorPlugin = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorkbenchAPI/Plugins/LocalizationEditorPlugin.c;14|LocalizationEditorPlugin}} | LocalizedString = {{Link|enfusion://ScriptEditor/scripts/Game/Language/LocalizedString.c;21|LocalizedString}} | LocalWeatherSituation = {{Link|enfusion://ScriptEditor/scripts/Game/generated/World/LocalWeatherSituation.c;12|LocalWeatherSituation}} | LocatePrefabsFromPath = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/AssetLibraryUtils.c;144|LocatePrefabsFromPath}} | LocatePrefabsFromPathRequest = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/AssetLibraryUtils.c;112|LocatePrefabsFromPathRequest}} | LocatePrefabsFromPathResponse = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/AssetLibraryUtils.c;126|LocatePrefabsFromPathResponse}} | LocateProject = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/AssetLibraryUtils.c;80|LocateProject}} | LocateProjectRequest = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/AssetLibraryUtils.c;53|LocateProjectRequest}} | LocateProjectResponse = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/AssetLibraryUtils.c;63|LocateProjectResponse}} | LocationMusic = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Music/LocationMusic.c;12|LocationMusic}} | LocParserManager = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/LocalizationEditor/LocParserManager.c;1|LocParserManager}} | LocParserRule = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/LocalizationEditor/LocParserRule.c;3|LocParserRule}} | LocParserRule_Custom = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/LocalizationEditor/LocParserRule_Custom.c;1|LocParserRule_Custom}} | LocParserRule_Custom_BaseParam = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/LocalizationEditor/LocParserRule_Custom.c;144|LocParserRule_Custom_BaseParam}} | LocParserRule_Custom_EnumParam = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/LocalizationEditor/LocParserRule_Custom.c;204|LocParserRule_Custom_EnumParam}} | LocParserRule_Custom_HintParam = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/LocalizationEditor/LocParserRule_Custom.c;265|LocParserRule_Custom_HintParam}} | LocParserRule_Custom_IndexParam = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/LocalizationEditor/LocParserRule_Custom.c;169|LocParserRule_Custom_IndexParam}} | LocParserRule_Custom_NotificationParam = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/LocalizationEditor/LocParserRule_Custom.c;250|LocParserRule_Custom_NotificationParam}} | LocParserRule_Custom_ResourceNameParam = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/LocalizationEditor/LocParserRule_Custom.c;236|LocParserRule_Custom_ResourceNameParam}} | LocParserRule_Custom_StringParam = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/LocalizationEditor/LocParserRule_Custom.c;179|LocParserRule_Custom_StringParam}} | LogitechLED = {{Link|enfusion://ScriptEditor/scripts/Game/Utilities/LogitechLED.c;2|LogitechLED}} | LogLevel = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Debug/LogLevel.c;13|LogLevel}} | LongRangeSoundComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/LongRangeSoundComponent.c;12|LongRangeSoundComponent}} | LongRangeSoundComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/LongRangeSoundComponentClass.c;12|LongRangeSoundComponentClass}} | LongRangeSoundSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/LongRangeSoundSystem.c;12|LongRangeSoundSystem}} | MagazineAnimationComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/MagazineAnimationComponent.c;12|MagazineAnimationComponent}} | MagazineAnimationComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/MagazineAnimationComponentClass.c;12|MagazineAnimationComponentClass}} | MagazineComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/MagazineComponent.c;12|MagazineComponent}} | MagazineComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/MagazineComponentClass.c;12|MagazineComponentClass}} | MagazineComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Serializers/MagazineComponentSerializer.c;12|MagazineComponentSerializer}} | MagazineConfig = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/MagazineConfig.c;12|MagazineConfig}} | MagazineUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/UI/MagazineUIInfo.c;3|MagazineUIInfo}} | MagazineWell_Cannon_M242_APDST = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;103|MagazineWell_Cannon_M242_APDST}} | MagazineWell_Cannon_M242_APDST_Class = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;100|MagazineWell_Cannon_M242_APDST_Class}} | MagazineWell_Cannon_M242_HEIT = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;95|MagazineWell_Cannon_M242_HEIT}} | MagazineWell_Cannon_M242_HEIT_Class = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;92|MagazineWell_Cannon_M242_HEIT_Class}} | MagazineWellAK545 = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;113|MagazineWellAK545}} | MagazineWellAK545Class = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;110|MagazineWellAK545Class}} | MagazineWellAK545Small = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;121|MagazineWellAK545Small}} | MagazineWellAK545SmallClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;118|MagazineWellAK545SmallClass}} | MagazineWellKPVT = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;169|MagazineWellKPVT}} | MagazineWellKPVTClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;166|MagazineWellKPVTClass}} | MagazineWellM14 = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;71|MagazineWellM14}} | MagazineWellM14Class = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;68|MagazineWellM14Class}} | MagazineWellM203 = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;55|MagazineWellM203}} | MagazineWellM203Class = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;52|MagazineWellM203Class}} | MagazineWellM240 = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;31|MagazineWellM240}} | MagazineWellM240Class = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;28|MagazineWellM240Class}} | MagazineWellM249 = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;47|MagazineWellM249}} | MagazineWellM249Class = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;44|MagazineWellM249Class}} | MagazineWellM2HB = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;79|MagazineWellM2HB}} | MagazineWellM2HBClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;76|MagazineWellM2HBClass}} | MagazineWellM60 = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;23|MagazineWellM60}} | MagazineWellM60Class = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;20|MagazineWellM60Class}} | MagazineWellM60D = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;39|MagazineWellM60D}} | MagazineWellM60DClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;36|MagazineWellM60DClass}} | MagazineWellM9Beretta = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;63|MagazineWellM9Beretta}} | MagazineWellM9BerettaClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;60|MagazineWellM9BerettaClass}} | MagazineWellMakarovPM = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;129|MagazineWellMakarovPM}} | MagazineWellMakarovPMClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;126|MagazineWellMakarovPMClass}} | MagazineWellMortar = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;185|MagazineWellMortar}} | MagazineWellMortar81mm = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;217|MagazineWellMortar81mm}} | MagazineWellMortar81mmClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;214|MagazineWellMortar81mmClass}} | MagazineWellMortar82mm = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;225|MagazineWellMortar82mm}} | MagazineWellMortar82mmClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;222|MagazineWellMortar82mmClass}} | MagazineWellMortarClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;182|MagazineWellMortarClass}} | MagazineWellNSV = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;177|MagazineWellNSV}} | MagazineWellNSVClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;174|MagazineWellNSVClass}} | MagazineWellPKM = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;137|MagazineWellPKM}} | MagazineWellPKMClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;134|MagazineWellPKMClass}} | MagazineWellPKMT = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;145|MagazineWellPKMT}} | MagazineWellPKMTClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;142|MagazineWellPKMTClass}} | MagazineWellRPG7 = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;153|MagazineWellRPG7}} | MagazineWellRPG7Class = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;150|MagazineWellRPG7Class}} | MagazineWellRU_GP = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;161|MagazineWellRU_GP}} | MagazineWellRU_GPClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;158|MagazineWellRU_GPClass}} | MagazineWellStanag556 = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;6|MagazineWellStanag556}} | MagazineWellStanag556Class = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;3|MagazineWellStanag556Class}} | MagazineWellStanag556Small = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;14|MagazineWellStanag556Small}} | MagazineWellStanag556SmallClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;11|MagazineWellStanag556SmallClass}} | MagazineWellSVD = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;193|MagazineWellSVD}} | MagazineWellSVDClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;190|MagazineWellSVDClass}} | MagazineWellUK59 = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;209|MagazineWellUK59}} | MagazineWellUK59Class = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;206|MagazineWellUK59Class}} | MagazineWellUS_UGL = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;87|MagazineWellUS_UGL}} | MagazineWellUS_UGLClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;84|MagazineWellUS_UGLClass}} | MagazineWellVZ58_762 = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;201|MagazineWellVZ58_762}} | MagazineWellVZ58_762Class = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/MagazineWell.c;198|MagazineWellVZ58_762Class}} | MainMenuUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/MainMenuUI.c;23|MainMenuUI}} | Managed = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;111|Managed}} | map = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;484|map}} | MapAreaProperties = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Map/MapAreaProperties.c;12|MapAreaProperties}} | MapBuildingProps = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Map/MapBuildingProps.c;12|MapBuildingProps}} | MapConfiguration = {{Link|enfusion://ScriptEditor/scripts/GameCode/Map/MapConfiguration.c;2|MapConfiguration}} | MapContourProps = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Map/MapContourProps.c;12|MapContourProps}} | MapDataExporter = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Map/MapDataExporter.c;12|MapDataExporter}} | MapDescriptorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Map/MapDescriptorComponent.c;12|MapDescriptorComponent}} | MapDescriptorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Buildings/MapDescriptorComponentClass.c;12|MapDescriptorComponentClass}} | MapDescriptorProps = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Map/MapDescriptorProps.c;12|MapDescriptorProps}} | MapDrawingProps = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Map/MapDrawingProps.c;12|MapDrawingProps}} | MapEntity = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Map/MapEntity.c;16|MapEntity}} | MapEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Map/MapEntity.c;12|MapEntityClass}} | MapGridProps = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Map/MapGridProps.c;12|MapGridProps}} | MapHillProps = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Map/MapHillProps.c;12|MapHillProps}} | MapItem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Map/MapItem.c;12|MapItem}} | MapIterator = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;468|MapIterator}} | MapLayer = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Map/MapLayer.c;12|MapLayer}} | MapLegendProps = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Map/MapLegendProps.c;12|MapLegendProps}} | MapLine = {{Link|enfusion://ScriptEditor/scripts/Game/Map/ComponentsUI/SCR_MapDrawingUI.c;2|MapLine}} | MapLink = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Map/MapLink.c;12|MapLink}} | MapLinkProps = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Map/MapLinkProps.c;12|MapLinkProps}} | MapPowerLineProps = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Map/MapPowerLineProps.c;12|MapPowerLineProps}} | MapRoadProps = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Map/MapRoadProps.c;12|MapRoadProps}} | MapSelectionProperties = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Map/MapSelectionProperties.c;12|MapSelectionProperties}} | MapWaterBodyProps = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Map/MapWaterBodyProps.c;12|MapWaterBodyProps}} | MapWidget = {{Link|enfusion://ScriptEditor/scripts/Game/generated/UI/MapWidget.c;12|MapWidget}} | Material = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Visual/Material.c;12|Material}} | MaterialCinematicTrack = {{Link|enfusion://ScriptEditor/scripts/Game/Cinematics/MaterialCinematicTrack.c;1|MaterialCinematicTrack}} | MaterialOverride = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/ResourceInfo.c;944|MaterialOverride}} | MaterialParamsComponent = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Components/MaterialParamsComponent.c;22|MaterialParamsComponent}} | MaterialParamsComponentClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Components/MaterialParamsComponent.c;12|MaterialParamsComponentClass}} | MaterialResourceInfo = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/ResourceInfo.c;364|MaterialResourceInfo}} | MaterialValidator = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/ValidateMaterialPlugin.c;330|MaterialValidator}} | MaterialValidatorRequest = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/ValidateMaterialPlugin.c;304|MaterialValidatorRequest}} | MaterialValidatorResponse = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/ValidateMaterialPlugin.c;314|MaterialValidatorResponse}} | MaterialValidatorUtils = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/ValidateMaterialPlugin.c;8|MaterialValidatorUtils}} | Math = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Math/Math.c;12|Math}} | Math2D = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Math/Math2D.c;12|Math2D}} | Math3D = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Math/Math3D.c;12|Math3D}} | MatParam = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/ResourceInfo.c;773|MatParam}} | MatUVTransformTemplate = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/ResourceInfo.c;758|MatUVTransformTemplate}} | Measurement = {{Link|enfusion://ScriptEditor/scripts/GameLib/entities/autotest/MotionComponent.c;8|Measurement}} | MeasurementFile = {{Link|enfusion://ScriptEditor/scripts/GameLib/entities/autotest/AutotestRegister.c;15|MeasurementFile}} | MeasurementType = {{Link|enfusion://ScriptEditor/scripts/GameLib/entities/autotest/AutotestRegister.c;4|MeasurementType}} | MeasureTool = {{Link|enfusion://ScriptEditor/scripts/WorkbenchCommon/MeasureTool.c;1|MeasureTool}} | MemoryStatsSnapshot = {{Link|enfusion://ScriptEditor/scripts/Core/proto/System.c;62|MemoryStatsSnapshot}} | MenuBase = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Menu/MenuBase.c;31|MenuBase}} | MenuBindAttribute = {{Link|enfusion://ScriptEditor/scripts/GameLib/menuManager.c;30|MenuBindAttribute}} | MenuItemCallback = {{Link|enfusion://ScriptEditor/scripts/GameLib/menuManager.c;1|MenuItemCallback}} | MenuManager = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Menu/MenuManager.c;12|MenuManager}} | MenuRootBase = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/MenuRootBase.c;10|MenuRootBase}} | MenuRootComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/MenuRootComponent.c;6|MenuRootComponent}} | MenuRootSubComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/MenuRootSubComponent.c;5|MenuRootSubComponent}} | MeshConfig = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Identity/MeshConfig.c;12|MeshConfig}} | MeshesVisibilitySwitchConfig = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Base/MeshesVisibilitySwitchConfig.c;12|MeshesVisibilitySwitchConfig}} | MeshObject = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Resources/MeshObject.c;33|MeshObject}} | MeshObjectFlags = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Visual/MeshObjectFlags.c;12|MeshObjectFlags}} | MeshObjectVolumeCalculator = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Utilities/MeshObjectVolumeCalculator.c;12|MeshObjectVolumeCalculator}} | MessageBox = {{Link|enfusion://ScriptEditor/scripts/GameLib/menuManager.c;40|MessageBox}} | MetabolismEventParams = {{Link|enfusion://ScriptEditor/scripts/Game/Character/SCR_CharacterStaminaComponent.c;15|MetabolismEventParams}} | MetaEddsColorSpaceConversion = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/TextureImportTool.c;14|MetaEddsColorSpaceConversion}} | MetaEddsConversion = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/TextureImportTool.c;1|MetaEddsConversion}} | MetaFile = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorkbenchAPI/MetaFile.c;14|MetaFile}} | MiddleForestGeneratorClusterObject = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/ForestGenerator/ForestGeneratorClusters.c;165|MiddleForestGeneratorClusterObject}} | MineManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/MineManagerComponent.c;16|MineManagerComponent}} | MineManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/MineManagerComponent.c;12|MineManagerComponentClass}} | MissileMoveComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Projectile/MissileMoveComponent.c;12|MissileMoveComponent}} | MissileMoveComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Projectile/MissileMoveComponentClass.c;12|MissileMoveComponentClass}} | MissionHeader = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Mission/MissionHeader.c;12|MissionHeader}} | MissionWorkshopItem = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/MissionWorkshopItem.c;12|MissionWorkshopItem}} | ModifierKey = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorkbenchAPI/ModifierKey.c;15|ModifierKey}} | ModuleGameSettings = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/ModuleGameSettings.c;54|ModuleGameSettings}} | MortarAnimationComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/MortarAnimationComponent.c;12|MortarAnimationComponent}} | MortarAnimationComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/MortarAnimationComponentClass.c;12|MortarAnimationComponentClass}} | MortarMuzzleComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/MortarMuzzleComponent.c;12|MortarMuzzleComponent}} | MortarMuzzleComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/MortarMuzzleComponentClass.c;12|MortarMuzzleComponentClass}} | MotionAutoTest = {{Link|enfusion://ScriptEditor/scripts/GameLib/entities/autotest/MotionComponent.c;111|MotionAutoTest}} | MotionAutoTestClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/entities/autotest/MotionComponent.c;3|MotionAutoTestClass}} | MotionZone = {{Link|enfusion://ScriptEditor/scripts/GameLib/entities/autotest/MotionComponent.c;60|MotionZone}} | MotionZoneClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/entities/autotest/MotionComponent.c;55|MotionZoneClass}} | MotionZonePoint = {{Link|enfusion://ScriptEditor/scripts/GameLib/entities/autotest/MotionComponent.c;44|MotionZonePoint}} | MotionZonePointClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/entities/autotest/MotionComponent.c;39|MotionZonePointClass}} | MotorExhaustEffectComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/MotorExhaustEffectComponent.c;16|MotorExhaustEffectComponent}} | MotorExhaustEffectComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/MotorExhaustEffectComponent.c;12|MotorExhaustEffectComponentClass}} | MotorExhaustSystem = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/MotorExhaustSystem.c;1|MotorExhaustSystem}} | MouseState = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Input/MouseState.c;12|MouseState}} | MultiBarrelMuzzleEffectComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Effects/MultiBarrelMuzzleEffectComponent.c;16|MultiBarrelMuzzleEffectComponent}} | MultiBarrelMuzzleEffectComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Effects/MultiBarrelMuzzleEffectComponent.c;12|MultiBarrelMuzzleEffectComponentClass}} | MultiFireWeaponManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/MultiFireWeaponManagerComponent.c;18|MultiFireWeaponManagerComponent}} | MultiFireWeaponManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/MultiFireWeaponManagerComponent.c;12|MultiFireWeaponManagerComponentClass}} | MultilineEditBoxWidget = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/MultilineEditBoxWidget.c;12|MultilineEditBoxWidget}} | MultiplayerDialogUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/MultiplayerDialogUI.c;2|MultiplayerDialogUI}} | MultipleStateButtonState = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_MultipleStatesButtonComponent.c;261|MultipleStateButtonState}} | MultiSlotConfiguration = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/MultiSlotConfiguration.c;12|MultiSlotConfiguration}} | Music = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Music/Music.c;12|Music}} | MusicCategory = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Music/MusicCategory.c;13|MusicCategory}} | MusicManager = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Entities/MusicManager.c;16|MusicManager}} | MusicManagerClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Entities/MusicManager.c;12|MusicManagerClass}} | MusicManagerSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Entities/MusicManagerSerializer.c;1|MusicManagerSerializer}} | MuzzleComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/MuzzleComponent.c;12|MuzzleComponent}} | MuzzleComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/MuzzleComponentClass.c;12|MuzzleComponentClass}} | MuzzleComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Serializers/MuzzleComponentSerializer.c;12|MuzzleComponentSerializer}} | MuzzleEffectComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Effects/MuzzleEffectComponent.c;16|MuzzleEffectComponent}} | MuzzleEffectComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Effects/MuzzleEffectComponent.c;12|MuzzleEffectComponentClass}} | MuzzleInMagComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/MuzzleInMagComponent.c;12|MuzzleInMagComponent}} | MuzzleInMagComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/MuzzleInMagComponentClass.c;12|MuzzleInMagComponentClass}} | MuzzleInMagComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Serializers/MuzzleInMagComponentSerializer.c;12|MuzzleInMagComponentSerializer}} | MuzzleUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/UI/MuzzleUIInfo.c;3|MuzzleUIInfo}} | NamingConvention = {{Link|enfusion://ScriptEditor/scripts/Core/attributes.c;272|NamingConvention}} | NativeComponent = {{Link|enfusion://ScriptEditor/scripts/Core/proto/EnEntity.c;12|NativeComponent}} | NavigationButtonEntry = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_NavigationBarUI.c;14|NavigationButtonEntry}} | NavmeshCustomLinkComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/NavmeshCustomLinkComponent.c;16|NavmeshCustomLinkComponent}} | NavmeshCustomLinkComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/NavmeshCustomLinkComponent.c;12|NavmeshCustomLinkComponentClass}} | NavmeshGeneratorMain = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorkbenchAPI/Modules/NavmeshGeneratorMain.c;14|NavmeshGeneratorMain}} | NavmeshSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/WorldSystems/NavmeshSystem.c;12|NavmeshSystem}} | NavmeshWorldComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/NavmeshWorldComponent.c;16|NavmeshWorldComponent}} | NavmeshWorldComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/NavmeshWorldComponent.c;12|NavmeshWorldComponentClass}} | NearbyEntitiesSystem = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorldSystems/NearbyEntitiesSystem.c;12|NearbyEntitiesSystem}} | NetApiHandler = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/generated/NetApi/NetApiHandler.c;29|NetApiHandler}} | NetScriptConnectionListener = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/NetScriptConnectionListener.c;7|NetScriptConnectionListener}} | NewsDialogUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/NewsDialog.c;2|NewsDialogUI}} | NewsFeedItem = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/NewsFeedItem.c;13|NewsFeedItem}} | Node = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/Node.c;12|Node}} | NodePortsContainer = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/NodePortsContainer.c;12|NodePortsContainer}} | NoiseCinematicTrackModifier = {{Link|enfusion://ScriptEditor/scripts/GameLib/cinematics/NoiseCinematicTrackModifier.c;1|NoiseCinematicTrackModifier}} | NonSerialized = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Serializer.c;113|NonSerialized}} | NotificationsSystem = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/NotificationsSystem.c;2|NotificationsSystem}} | NotificationTestGeneratorEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/NotificationTestGeneratorEntity.c;6|NotificationTestGeneratorEntity}} | NotificationTestGeneratorEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/NotificationTestGeneratorEntity.c;1|NotificationTestGeneratorEntityClass}} | NwkBufferedCarMovementComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/NwkBufferedCarMovementComponent.c;16|NwkBufferedCarMovementComponent}} | NwkBufferedCarMovementComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/NwkBufferedCarMovementComponent.c;12|NwkBufferedCarMovementComponentClass}} | NwkCarMovementComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/NwkCarMovementComponent.c;16|NwkCarMovementComponent}} | NwkCarMovementComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/NwkCarMovementComponent.c;12|NwkCarMovementComponentClass}} | NwkHeliMovementComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/NwkHeliMovementComponent.c;16|NwkHeliMovementComponent}} | NwkHeliMovementComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/NwkHeliMovementComponent.c;12|NwkHeliMovementComponentClass}} | NwkMovementComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/NwkMovementComponent.c;17|NwkMovementComponent}} | NwkMovementComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/NwkMovementComponent.c;12|NwkMovementComponentClass}} | NwkMovementConsumerSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/NwkMovementConsumerSystem.c;17|NwkMovementConsumerSystem}} | NwkMovementProducerSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/NwkMovementProducerSystem.c;17|NwkMovementProducerSystem}} | NwkPhysicsMovementComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/NwkPhysicsMovementComponent.c;16|NwkPhysicsMovementComponent}} | NwkPhysicsMovementComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/NwkPhysicsMovementComponent.c;12|NwkPhysicsMovementComponentClass}} | NwkSimpleMovementComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/NwkSimpleMovementComponent.c;16|NwkSimpleMovementComponent}} | NwkSimpleMovementComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/NwkSimpleMovementComponent.c;12|NwkSimpleMovementComponentClass}} | NwkTrackedMovementComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/NwkTrackedMovementComponent.c;16|NwkTrackedMovementComponent}} | NwkTrackedMovementComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/NwkTrackedMovementComponent.c;12|NwkTrackedMovementComponentClass}} | NwkVehicleMovementComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/NwkVehicleMovementComponent.c;16|NwkVehicleMovementComponent}} | NwkVehicleMovementComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/NwkVehicleMovementComponent.c;12|NwkVehicleMovementComponentClass}} | Obsolete = {{Link|enfusion://ScriptEditor/scripts/Core/proto/EnScript.c;21|Obsolete}} | ObsoleteSentenceDialogueData = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Dialogue/ObsoleteSentenceDialogueData.c;15|ObsoleteSentenceDialogueData}} | OnAllBasesInitializedInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignMilitaryBaseManager.c;16|OnAllBasesInitializedInvoker}} | OnAmbientVehicleSpawnedInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/SCR_AmbientVehicleSystem.c;5|OnAmbientVehicleSpawnedInvoker}} | OnArsenalItemRequestedInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Sandbox/SCR_ResourcePlayerControllerInventoryComponent.c;15|OnArsenalItemRequestedInvoker}} | OnBaseAttackEndInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Locations/SCR_CampaignMilitaryBaseComponent.c;28|OnBaseAttackEndInvoker}} | OnBaseBuiltInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignMilitaryBaseManager.c;20|OnBaseBuiltInvoker}} | OnBaseFactionChangedInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/SCR_MilitaryBaseSystem.c;11|OnBaseFactionChangedInvoker}} | OnBaseRegisteredInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/SCR_MilitaryBaseSystem.c;13|OnBaseRegisteredInvoker}} | OnBaseStateChangedInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Locations/SCR_CampaignMilitaryBaseComponent.c;20|OnBaseStateChangedInvoker}} | OnBaseUnregisteredInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/SCR_MilitaryBaseSystem.c;14|OnBaseUnregisteredInvoker}} | OnBeforePossessedInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Player/SCR_PlayerController.c;28|OnBeforePossessedInvoker}} | OnCanRespawnRequestInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/RequestHandling/Base/SCR_SpawnCallbacks.c;13|OnCanRespawnRequestInvoker}} | OnCanRespawnResponseInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/RequestHandling/Base/SCR_SpawnCallbacks.c;17|OnCanRespawnResponseInvoker}} | OnCompositionDestroyed_Invoker = {{Link|enfusion://ScriptEditor/scripts/Game/DeployableInventoryItems/Components/SCR_DeployableInventoryItemReplacementComponent.c;8|OnCompositionDestroyed_Invoker}} | OnCompsitionSlotManagerEntityChanged = {{Link|enfusion://ScriptEditor/scripts/Game/Compositions/SCR_CompositionSlotManagerComponent.c;3|OnCompsitionSlotManagerEntityChanged}} | OnControlledByPlayerInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Character/SCR_CharacterControllerComponent.c;14|OnControlledByPlayerInvoker}} | OnControlledEntityChangedPlayerControllerInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Player/SCR_PlayerController.c;8|OnControlledEntityChangedPlayerControllerInvoker}} | OnCoverageChangedInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/SCR_RadioCoverageSystem.c;3|OnCoverageChangedInvoker}} | OnDefenderGroupSpawnedInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Spawner/CatalogSpawner/SCR_DefenderSpawnerComponent.c;37|OnDefenderGroupSpawnedInvoker}} | OnDeployMenuCloseInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/Menu/SCR_PlayerDeployMenuHandlerComponent.c;7|OnDeployMenuCloseInvoker}} | OnDeployMenuOpenInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/Menu/SCR_PlayerDeployMenuHandlerComponent.c;3|OnDeployMenuOpenInvoker}} | OnDestroyedPlayerControllerInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Player/SCR_PlayerController.c;18|OnDestroyedPlayerControllerInvoker}} | OnEvent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/OnEvent.c;12|OnEvent}} | OnFactionChangedInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_FactionAffiliationComponent.c;7|OnFactionChangedInvoker}} | OnFactionCommanderChangedInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/Components/SCR_FactionCommanderHandlerComponent.c;3|OnFactionCommanderChangedInvoker}} | OnFactionScoreChangedInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Scoring/SCR_BaseScoringSystemComponent.c;15|OnFactionScoreChangedInvoker}} | OnHitAimModifier = {{Link|enfusion://ScriptEditor/scripts/GameCode/Weapon/OnHitAimModifier.c;5|OnHitAimModifier}} | OnItemUseBeganInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Character/SCR_CharacterControllerComponent.c;23|OnItemUseBeganInvoker}} | OnItemUseEndedInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Character/SCR_CharacterControllerComponent.c;28|OnItemUseEndedInvoker}} | OnItemUseFinishedInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Character/SCR_CharacterControllerComponent.c;33|OnItemUseFinishedInvoker}} | OnItemWeaponFiredInvoker = {{Link|enfusion://ScriptEditor/scripts/GameCode/Effects/SCR_MuzzleEffectComponent.c;7|OnItemWeaponFiredInvoker}} | OnLayoutChange = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/Handlers/HudManager/SCR_HUDManagerLayoutHandler.c;3|OnLayoutChange}} | OnLifeStateChanged = {{Link|enfusion://ScriptEditor/scripts/Game/Character/SCR_CharacterControllerComponent.c;17|OnLifeStateChanged}} | OnLifeStateChangedInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Character/SCR_CharacterControllerComponent.c;18|OnLifeStateChangedInvoker}} | OnlineBanListData = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/OnlineBanListData.c;13|OnlineBanListData}} | OnlineRecord_Item = {{Link|enfusion://ScriptEditor/scripts/GameCode/Online/Profile/ProfileCharacter.c;4|OnlineRecord_Item}} | OnlineRecord_Parent = {{Link|enfusion://ScriptEditor/scripts/GameCode/Online/Profile/ProfileCharacter.c;30|OnlineRecord_Parent}} | OnLoadoutFocusLostInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DeployMenu/SCR_LoadoutGallery.c;5|OnLoadoutFocusLostInvoker}} | OnLocalFactionCapturedBaseInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignMilitaryBaseManager.c;19|OnLocalFactionCapturedBaseInvoker}} | OnLocalPlayerEnteredBaseInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignMilitaryBaseManager.c;17|OnLocalPlayerEnteredBaseInvoker}} | OnLocalPlayerLeftBaseInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignMilitaryBaseManager.c;18|OnLocalPlayerLeftBaseInvoker}} | OnLogicPresenceChangedInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/SCR_MilitaryBaseSystem.c;12|OnLogicPresenceChangedInvoker}} | OnMeleePerformedInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Character/Melee/SCR_MeleeComponent.c;22|OnMeleePerformedInvoker}} | OnOwnershipChangedInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Player/SCR_PlayerController.c;13|OnOwnershipChangedInvoker}} | OnPlayerDeathWithParamInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Character/SCR_CharacterControllerComponent.c;9|OnPlayerDeathWithParamInvoker}} | OnPlayerEnterCompartment = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_CompartmentAccessComponent.c;3|OnPlayerEnterCompartment}} | OnPlayerEventInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Scoring/SCR_BaseScoringSystemComponent.c;7|OnPlayerEventInvoker}} | OnPlayerExitCompartment = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_CompartmentAccessComponent.c;7|OnPlayerExitCompartment}} | OnPlayerFactionChangedInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/Factions/SCR_PlayerFactionAffiliationComponent.c;16|OnPlayerFactionChangedInvoker}} | OnPlayerFactionRequestInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/Factions/SCR_PlayerFactionAffiliationComponent.c;8|OnPlayerFactionRequestInvoker}} | OnPlayerFactionResponseInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/Factions/SCR_PlayerFactionAffiliationComponent.c;12|OnPlayerFactionResponseInvoker}} | OnPlayerLoadoutRequestInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/Loadouts/SCR_PlayerLoadoutComponent.c;8|OnPlayerLoadoutRequestInvoker}} | OnPlayerLoadoutResponseInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/Loadouts/SCR_PlayerLoadoutComponent.c;12|OnPlayerLoadoutResponseInvoker}} | OnPlayerScoreChangedInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Scoring/SCR_BaseScoringSystemComponent.c;11|OnPlayerScoreChangedInvoker}} | OnPlayerXPChanged = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_PlayerXPHandlerComponent.c;7|OnPlayerXPChanged}} | OnPossessedInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Player/SCR_PlayerController.c;23|OnPossessedInvoker}} | OnPreloadFinishedInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_BaseGameMode.c;134|OnPreloadFinishedInvoker}} | OnRespawnReadyInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/RequestHandling/Base/SCR_SpawnCallbacks.c;21|OnRespawnReadyInvoker}} | OnRespawnRequestInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/RequestHandling/Base/SCR_SpawnCallbacks.c;3|OnRespawnRequestInvoker}} | OnRespawnResponseInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/RequestHandling/Base/SCR_SpawnCallbacks.c;7|OnRespawnResponseInvoker}} | OnRpl = {{Link|enfusion://ScriptEditor/scripts/Core/proto/EnNetwork.c;114|OnRpl}} | OnSignalChangedInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignMilitaryBaseManager.c;15|OnSignalChangedInvoker}} | OnSoundEventFinishedInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_CommunicationSoundComponent.c;58|OnSoundEventFinishedInvoker}} | OnSoundEventStartedInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_CommunicationSoundComponent.c;54|OnSoundEventStartedInvoker}} | OnSpawnPointAssignedInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Locations/SCR_CampaignMilitaryBaseComponent.c;16|OnSpawnPointAssignedInvoker}} | OnSpawnPointRplIdSetInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DeployMenu/SCR_DeployMenuBase.c;3|OnSpawnPointRplIdSetInvoker}} | OnSupplyLimitChangedDelegate = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Locations/SCR_CampaignMilitaryBaseComponent.c;23|OnSupplyLimitChangedDelegate}} | OnSupplyLimitChangedInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Locations/SCR_CampaignMilitaryBaseComponent.c;24|OnSupplyLimitChangedInvoker}} | OnTaskSolverStateChangedInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/TaskSolver/SCR_TaskSolverBase.c;3|OnTaskSolverStateChangedInvoker}} | OnTimerChangeInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Components/SCR_SeizingComponent.c;16|OnTimerChangeInvoker}} | OnTransportUnitChangedInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/SuppliesTransportSystem/SCR_SuppliesTransportSystem.c;3|OnTransportUnitChangedInvoker}} | OnTransportUnitVehicleChangedInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/SuppliesTransportSystem/SCR_TransportUnitComponent.c;8|OnTransportUnitVehicleChangedInvoker}} | OnTurretFireModeValuesChangedInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_FireModeManagerComponent.c;4|OnTurretFireModeValuesChangedInvoker}} | OpenXOB = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/OpenXOB.c;21|OpenXOB}} | OpenXOBRequest = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/OpenXOB.c;1|OpenXOBRequest}} | OpenXOBResponse = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/OpenXOB.c;11|OpenXOBResponse}} | OverlaySlot = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/OverlaySlot.c;12|OverlaySlot}} | OverlayWidget = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/OverlayWidget.c;15|OverlayWidget}} | OverrideMeshObjectMaterial = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/BakeMLOD.c;467|OverrideMeshObjectMaterial}} | OverrideMeshObjectMaterialRequest = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/BakeMLOD.c;394|OverrideMeshObjectMaterialRequest}} | OverrideMeshObjectMaterialResponse = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/BakeMLOD.c;410|OverrideMeshObjectMaterialResponse}} | PageParams = {{Link|enfusion://ScriptEditor/scripts/GameLib/online/WorkshopApi.c;4|PageParams}} | PanelSlot = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/PanelSlot.c;12|PanelSlot}} | PanelWidget = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/PanelWidget.c;12|PanelWidget}} | Parallel = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/Parallel.c;12|Parallel}} | ParamEnum = {{Link|enfusion://ScriptEditor/scripts/Core/attributes.c;2|ParamEnum}} | ParamEnumAddons = {{Link|enfusion://ScriptEditor/scripts/Game/Global/SCR_AddonTools.c;1|ParamEnumAddons}} | ParamEnumArray = {{Link|enfusion://ScriptEditor/scripts/Core/attributes.c;16|ParamEnumArray}} | ParamEnumSuperSampling = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/BakeMLOD.c;39|ParamEnumSuperSampling}} | ParamEnumTextureImportSize = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/BakeMLOD.c;22|ParamEnumTextureImportSize}} | ParamEnumTextureSize = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/BakeMLOD.c;7|ParamEnumTextureSize}} | ParametricMaterialInstanceComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/ParametricMaterialInstanceComponent.c;12|ParametricMaterialInstanceComponent}} | ParametricMaterialInstanceComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/ParametricMaterialInstanceComponentClass.c;12|ParametricMaterialInstanceComponentClass}} | ParseHandle = {{Link|enfusion://ScriptEditor/scripts/Core/generated/System/ParseHandle.c;12|ParseHandle}} | ParticleEditor = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorkbenchAPI/Modules/ParticleEditor.c;14|ParticleEditor}} | ParticleEffectEntity = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Particles/ParticleEffectEntity.c;16|ParticleEffectEntity}} | ParticleEffectEntityClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Particles/ParticleEffectEntity.c;12|ParticleEffectEntityClass}} | ParticleEffectEntitySpawnParams = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Particles/ParticleEffectEntitySpawnParams.c;12|ParticleEffectEntitySpawnParams}} | ParticleEffectInfo = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Core/ParticleEffectInfo.c;12|ParticleEffectInfo}} | ParticleEffectsSystem = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorldSystems/ParticleEffectsSystem.c;12|ParticleEffectsSystem}} | ParticleResourceRequest = {{Link|enfusion://ScriptEditor/scripts/GameCode/Core/PrefabList.c;36|ParticleResourceRequest}} | Particles = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Visual/Particles.c;21|Particles}} | PathVisualizer = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/PathVisualizer.c;16|PathVisualizer}} | PathVisualizerClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/PathVisualizer.c;12|PathVisualizerClass}} | PauseMenuUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SCR_PauseMenuUI.c;2|PauseMenuUI}} | PawnEntity = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/PawnEntity.c;12|PawnEntity}} | PawnEntityClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/PawnEntityClass.c;12|PawnEntityClass}} | PawnEntityController = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/PawnEntityController.c;7|PawnEntityController}} | PawnEntityControllerFlags = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/PawnEntityControllerFlags.c;7|PawnEntityControllerFlags}} | PawnEntitySystem = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/PawnEntitySystem.c;7|PawnEntitySystem}} | PawnMovementComponent = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Components/PawnMovementComponent.c;12|PawnMovementComponent}} | PawnMovementComponentClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Components/PawnMovementComponentClass.c;12|PawnMovementComponentClass}} | PawnRelatedEntity = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/PawnRelatedEntity.c;12|PawnRelatedEntity}} | PawnRelatedEntityClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/PawnRelatedEntityClass.c;12|PawnRelatedEntityClass}} | PeerConfig = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/PeerConfig.c;1|PeerConfig}} | PeerConfigViewTitle = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/PeerConfig.c;52|PeerConfigViewTitle}} | PeerPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/PeerTool.c;1|PeerPlugin}} | PerceivableComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Perception/PerceivableComponent.c;12|PerceivableComponent}} | PerceivableComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Perception/PerceivableComponentClass.c;12|PerceivableComponentClass}} | PerceivableSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/PerceivableSystem.c;12|PerceivableSystem}} | PerceptionComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/PerceptionComponent.c;16|PerceptionComponent}} | PerceptionComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/PerceptionComponent.c;12|PerceptionComponentClass}} | PerceptionComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Serializers/PerceptionComponentSerializer.c;12|PerceptionComponentSerializer}} | PerceptionManager = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Perception/PerceptionManager.c;16|PerceptionManager}} | PerceptionManagerClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Perception/PerceptionManager.c;12|PerceptionManagerClass}} | PerceptionSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/PerceptionSystem.c;12|PerceptionSystem}} | PermissionState = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Player/PermissionState.c;12|PermissionState}} | Persistence_TestWeatherRandomizerAction = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Testing/Persistence_TestWeatherRandomizerAction.c;1|Persistence_TestWeatherRandomizerAction}} | PersistenceBundle = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Config/PersistenceBundle.c;12|PersistenceBundle}} | PersistenceBundler = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Bundling/PersistenceBundler.c;12|PersistenceBundler}} | PersistenceCallback = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/PersistenceCallback.c;12|PersistenceCallback}} | PersistenceCollection = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Config/PersistenceCollection.c;12|PersistenceCollection}} | PersistenceConfig = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Config/PersistenceConfig.c;12|PersistenceConfig}} | PersistenceConfigRule = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Config/Entries/Rules/PersistenceConfigRule.c;12|PersistenceConfigRule}} | PersistenceDatabase = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Databases/PersistenceDatabase.c;12|PersistenceDatabase}} | PersistenceDeferredDeserializeTask = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/PersistenceDeferredDeserializeTask.c;12|PersistenceDeferredDeserializeTask}} | PersistenceIdUtils = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/PersistenceIdUtils.c;12|PersistenceIdUtils}} | PersistenceLoadRequest = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/PersistenceLoadRequest.c;12|PersistenceLoadRequest}} | PersistenceResultCallback = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/PersistenceResultCallback.c;12|PersistenceResultCallback}} | PersistenceSerializerBase = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Serializers/PersistenceSerializerBase.c;12|PersistenceSerializerBase}} | PersistenceSessionStorage = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Storages/PersistenceSessionStorage.c;12|PersistenceSessionStorage}} | PersistenceSpawnRequest = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/PersistenceSpawnRequest.c;12|PersistenceSpawnRequest}} | PersistenceStatusCallback = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/PersistenceStatusCallback.c;12|PersistenceStatusCallback}} | PersistenceStorageBase = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Storages/PersistenceStorageBase.c;12|PersistenceStorageBase}} | PersistenceSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/PersistenceSystem.c;12|PersistenceSystem}} | PersistenceSystemConfig = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Config/PersistenceSystemConfig.c;12|PersistenceSystemConfig}} | PersistenceWhenAvailableTask = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/PersistenceWhenAvailableTask.c;12|PersistenceWhenAvailableTask}} | PersistentDamageEffect = {{Link|enfusion://ScriptEditor/scripts/Game/generated/DamageEffects/PersistentDamageEffect.c;12|PersistentDamageEffect}} | PersistentEntityLinkItem = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/GameMode/Editor/SCR_EditorLinkComponentSerializer.c;1|PersistentEntityLinkItem}} | PersistentState = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Config/PersistentState.c;12|PersistentState}} | Physics = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Physics/Physics.c;21|Physics}} | Physics6DOFJoint = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Physics/Physics6DOFJoint.c;29|Physics6DOFJoint}} | Physics6DOFSpringJoint = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Physics/Physics6DOFSpringJoint.c;15|Physics6DOFSpringJoint}} | PhysicsBallSocketJoint = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Physics/PhysicsBallSocketJoint.c;15|PhysicsBallSocketJoint}} | PhysicsBlock = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Physics/PhysicsBlock.c;15|PhysicsBlock}} | PhysicsCinematicTrack = {{Link|enfusion://ScriptEditor/scripts/Game/Cinematics/PhysicsCinematicTrack.c;1|PhysicsCinematicTrack}} | PhysicsConeTwistJoint = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Physics/PhysicsConeTwistJoint.c;15|PhysicsConeTwistJoint}} | PhysicsFixedJoint = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Physics/PhysicsFixedJoint.c;15|PhysicsFixedJoint}} | PhysicsGeom = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Physics/PhysicsGeom.c;15|PhysicsGeom}} | PhysicsGeomDef = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Physics/PhysicsGeomDef.c;15|PhysicsGeomDef}} | PhysicsHingeJoint = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Physics/PhysicsHingeJoint.c;15|PhysicsHingeJoint}} | PhysicsJoint = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Physics/PhysicsJoint.c;27|PhysicsJoint}} | PhysicsMaterial = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Physics/PhysicsMaterial.c;15|PhysicsMaterial}} | PhysicsRagdoll = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Physics/PhysicsRagdoll.c;15|PhysicsRagdoll}} | PhysicsSliderJoint = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Physics/PhysicsSliderJoint.c;15|PhysicsSliderJoint}} | PhysicsUtils = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Physics/PhysicsUtils.c;12|PhysicsUtils}} | PhysicsWorld = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Physics/PhysicsWorld.c;15|PhysicsWorld}} | PickupAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/PickupAction.c;1|PickupAction}} | PilotCompartmentSlot = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/PilotCompartmentSlot.c;12|PilotCompartmentSlot}} | PixelRawData = {{Link|enfusion://ScriptEditor/scripts/Core/generated/System/PixelRawData.c;16|PixelRawData}} | PlatformConfig = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/TextureImportTool.c;44|PlatformConfig}} | PlatformKickReason = {{Link|enfusion://ScriptEditor/scripts/Game/generated/GameStateTransitions/PlatformKickReason.c;12|PlatformKickReason}} | PlatformKind = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/PlatformKind.c;7|PlatformKind}} | PlatformRequestCallback = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/PlatformRequestCallback.c;7|PlatformRequestCallback}} | PlatformService = {{Link|enfusion://ScriptEditor/scripts/GameLib/platform/PlatformService.c;1|PlatformService}} | PlayerCamera = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Camera/PlayerCamera.c;16|PlayerCamera}} | PlayerCameraClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Camera/PlayerCamera.c;12|PlayerCameraClass}} | PlayerController = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Player/PlayerController.c;16|PlayerController}} | PlayerControllerClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Player/PlayerController.c;12|PlayerControllerClass}} | PlayerId = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/PlayerId.c;7|PlayerId}} | PlayerManager = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Network/PlayerManager.c;12|PlayerManager}} | PlayerManagerKickReason = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Network/PlayerManagerKickReason.c;12|PlayerManagerKickReason}} | PlayerPersistenceConfigRule = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Config/Entries/Rules/PlayerPersistenceConfigRule.c;12|PlayerPersistenceConfigRule}} | PlayNextTimelineCinematicTrack = {{Link|enfusion://ScriptEditor/scripts/Game/Cinematics/PlayNextTimelineCinematicTrack.c;1|PlayNextTimelineCinematicTrack}} | PointChangedSituation = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/PointChangedSituation.c;12|PointChangedSituation}} | pointer = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;127|pointer}} | PointGridMap = {{Link|enfusion://ScriptEditor/scripts/Game/generated/GridMap/PointGridMap.c;16|PointGridMap}} | PointInfo = {{Link|enfusion://ScriptEditor/scripts/Game/generated/PointInfo.c;8|PointInfo}} | PolygonDrawCommand = {{Link|enfusion://ScriptEditor/scripts/Core/proto/EnWidgets.c;101|PolygonDrawCommand}} | PolylineShapeEntity = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/PolylineShapeEntity.c;16|PolylineShapeEntity}} | PolylineShapeEntityClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/PolylineShapeEntity.c;12|PolylineShapeEntityClass}} | PopupFeedItem = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/PopupFeedItem.c;13|PopupFeedItem}} | PostprocessCinematicTrack = {{Link|enfusion://ScriptEditor/scripts/Game/Cinematics/PostprocessCinematicTrack.c;1|PostprocessCinematicTrack}} | PostProcessEffectType = {{Link|enfusion://ScriptEditor/scripts/Core/proto/EnWorld.c;19|PostProcessEffectType}} | PowerlineEntity = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Entities/PowerlineEntity.c;19|PowerlineEntity}} | PowerlineEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Entities/PowerlineEntity.c;12|PowerlineEntityClass}} | PowerPoleEntity = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Entities/PowerPoleEntity.c;16|PowerPoleEntity}} | PowerPoleEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Entities/PowerPoleEntity.c;12|PowerPoleEntityClass}} | PrefabEditingPluginConfig = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/SCR_PrefabEditingPlugin.c;290|PrefabEditingPluginConfig}} | PrefabEditingPluginConfigFolder = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/SCR_PrefabEditingPlugin.c;330|PrefabEditingPluginConfigFolder}} | PrefabFilter = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Trigger/PrefabFilter.c;12|PrefabFilter}} | PrefabGeneratorEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/PrefabGeneratorEntity.c;7|PrefabGeneratorEntity}} | PrefabGeneratorEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/PrefabGeneratorEntity.c;1|PrefabGeneratorEntityClass}} | PrefabGeneratorPointData = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/PrefabGenerator/PrefabGeneratorPointData.c;1|PrefabGeneratorPointData}} | PrefabImporter = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/PrefabImporter.c;336|PrefabImporter}} | PrefabImporterBake = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/PrefabImporterBake.c;161|PrefabImporterBake}} | PrefabImporterRequest = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/PrefabImporter.c;1|PrefabImporterRequest}} | PrefabImporterResponse = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/PrefabImporter.c;14|PrefabImporterResponse}} | PrefabImportErrorResponse = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/PrefabImporterBake.c;103|PrefabImportErrorResponse}} | PrefabImporterUtils = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/PrefabImporter.c;56|PrefabImporterUtils}} | PrefabImportRequest = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/PrefabImporterBake.c;93|PrefabImportRequest}} | PrefabImportResponse = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/PrefabImporterBake.c;113|PrefabImportResponse}} | PrefabList = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Core/PrefabList.c;16|PrefabList}} | PrefabListClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Core/PrefabList.c;12|PrefabListClass}} | PrefabPersistenceConfigRule = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Config/Entries/Rules/PrefabPersistenceConfigRule.c;12|PrefabPersistenceConfigRule}} | PreloadEntry = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Trigger/PreloadEntry.c;12|PreloadEntry}} | PrettyJsonSaveContainer = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Serialization/PrettyJsonSaveContainer.c;13|PrettyJsonSaveContainer}} | PreviewAnimationComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/PreviewAnimationComponent.c;16|PreviewAnimationComponent}} | PreviewAnimationComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/PreviewAnimationComponent.c;12|PreviewAnimationComponentClass}} | PreviewRenderAttributes = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/PreviewRenderAttributes.c;12|PreviewRenderAttributes}} | PreviewWorldExample = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/PreviewWorld.c;5|PreviewWorldExample}} | PreviewWorldExampleClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/PreviewWorld.c;1|PreviewWorldExampleClass}} | PrimaryControllerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/PrimaryControllerComponent.c;16|PrimaryControllerComponent}} | PrimaryControllerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/PrimaryControllerComponent.c;12|PrimaryControllerComponentClass}} | PrivateMessageChannel = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Chat/PrivateMessageChannel.c;12|PrivateMessageChannel}} | PrivilegeCallback = {{Link|enfusion://ScriptEditor/scripts/Game/generated/PrivilegeCallback.c;7|PrivilegeCallback}} | ProbeVolume = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/ProbeVolume.c;16|ProbeVolume}} | ProbeVolumeClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/ProbeVolume.c;12|ProbeVolumeClass}} | ProcAnimComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/ProcAnimComponent.c;16|ProcAnimComponent}} | ProcAnimComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/ProcAnimComponent.c;12|ProcAnimComponentClass}} | ProcAnimEditor = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorkbenchAPI/Modules/ProcAnimEditor.c;14|ProcAnimEditor}} | ProcAnimSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/ProcAnimSystem.c;12|ProcAnimSystem}} | ProcessHandle = {{Link|enfusion://ScriptEditor/scripts/Core/proto/System.c;70|ProcessHandle}} | ProfanityFilterRequestCallback = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/ProfanityFilterRequestCallback.c;7|ProfanityFilterRequestCallback}} | ProfileData = {{Link|enfusion://ScriptEditor/scripts/Core/proto/proto.c;42|ProfileData}} | ProgressBarWidget = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/ProgressBarWidget.c;12|ProgressBarWidget}} | Projectile = {{Link|enfusion://ScriptEditor/scripts/Game/generated/EntityTypes/Projectile.c;12|Projectile}} | ProjectileClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/EntityTypes/ProjectileClass.c;12|ProjectileClass}} | ProjectileMoveComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Projectile/ProjectileMoveComponent.c;12|ProjectileMoveComponent}} | ProjectileMoveComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Projectile/ProjectileMoveComponentClass.c;12|ProjectileMoveComponentClass}} | ProjectileResourceRequest = {{Link|enfusion://ScriptEditor/scripts/GameCode/Core/PrefabList.c;24|ProjectileResourceRequest}} | ProjectileSimulationSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/ProjectileSimulationSystem.c;12|ProjectileSimulationSystem}} | ProjectileSoundComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/ProjectileSoundComponent.c;16|ProjectileSoundComponent}} | ProjectileSoundComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/ProjectileSoundComponent.c;12|ProjectileSoundComponentClass}} | ProximityTriggerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Projectile/Trigger/ProximityTriggerComponent.c;12|ProximityTriggerComponent}} | ProximityTriggerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Projectile/Trigger/ProximityTriggerComponentClass.c;12|ProximityTriggerComponentClass}} | PublicProfilesRequestCallback = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/PublicProfilesRequestCallback.c;7|PublicProfilesRequestCallback}} | QueryEntitiesCallback = {{Link|enfusion://ScriptEditor/scripts/Core/proto/EnWorld.c;6|QueryEntitiesCallback}} | QueryTargetDiag = {{Link|enfusion://ScriptEditor/scripts/Game/game.c;1444|QueryTargetDiag}} | RadialMenuSystem = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/RadialMenuSystem.c;1|RadialMenuSystem}} | RadioBroadcastComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/RadioBroadcastComponent.c;16|RadioBroadcastComponent}} | RadioBroadcastComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/RadioBroadcastComponent.c;12|RadioBroadcastComponentClass}} | RadioBroadcastManager = {{Link|enfusion://ScriptEditor/scripts/Game/generated/RadioBroadcast/RadioBroadcastManager.c;16|RadioBroadcastManager}} | RadioBroadcastManagerClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/RadioBroadcast/RadioBroadcastManager.c;12|RadioBroadcastManagerClass}} | RadioBroadcastSoundComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/RadioBroadcastSoundComponent.c;16|RadioBroadcastSoundComponent}} | RadioBroadcastSoundComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/RadioBroadcastSoundComponent.c;12|RadioBroadcastSoundComponentClass}} | RadioController = {{Link|enfusion://ScriptEditor/scripts/Game/generated/RadioController.c;7|RadioController}} | RadioManagerEntity = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Entities/RadioManagerEntity.c;16|RadioManagerEntity}} | RadioManagerEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Entities/RadioManagerEntity.c;12|RadioManagerEntityClass}} | RadioTransceiver = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Radio/RadioTransceiver.c;12|RadioTransceiver}} | RagdollTestEntity = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/RagdollTestEntity.c;16|RagdollTestEntity}} | RagdollTestEntityClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/RagdollTestEntity.c;12|RagdollTestEntityClass}} | RandomGenerator = {{Link|enfusion://ScriptEditor/scripts/Core/generated/System/RandomGenerator.c;12|RandomGenerator}} | RearSightZeroingGenerator = {{Link|enfusion://ScriptEditor/scripts/Game/generated/RearSightZeroingGenerator.c;7|RearSightZeroingGenerator}} | ReceiverAttribute = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/EventSystem/ReceiverAttribute.c;23|ReceiverAttribute}} | RecoilData = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapons/RecoilData.c;12|RecoilData}} | RecordInactivePhysEntitiesStateSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/RecordInactivePhysEntitiesStateSystem.c;12|RecordInactivePhysEntitiesStateSystem}} | RectangleCorner = {{Link|enfusion://ScriptEditor/scripts/Core/generated/RectangleCorner.c;8|RectangleCorner}} | RegionalActionsSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/UserActions/RegionalActionsSystem.c;12|RegionalActionsSystem}} | RegionalDestructionManager = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Entities/RegionalDestructionManager.c;16|RegionalDestructionManager}} | RegionalDestructionManagerClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Entities/RegionalDestructionManager.c;12|RegionalDestructionManagerClass}} | RegisteringComponentSlotInfo = {{Link|enfusion://ScriptEditor/scripts/Game/generated/RegisteringComponentSlotInfo.c;8|RegisteringComponentSlotInfo}} | RegisterPlaceableEntitiesPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/SCR_RegisterPlaceableEntitiesPlugin.c;2|RegisterPlaceableEntitiesPlugin}} | RegisterResource = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/ResourceInfo.c;1177|RegisterResource}} | RegisterResourceRequest = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/ResourceInfo.c;1157|RegisterResourceRequest}} | RegisterResourceResponse = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/ResourceInfo.c;1167|RegisterResourceResponse}} | Registrator = {{Link|enfusion://ScriptEditor/scripts/GameCode/Core/PrefabList.c;48|Registrator}} | RelayTransceiver = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Radio/RelayTransceiver.c;12|RelayTransceiver}} | RenderTargetWidget = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/RenderTargetWidget.c;12|RenderTargetWidget}} | RenderTargetWidgetBlendMode = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/RenderTargetWidgetBlendMode.c;12|RenderTargetWidgetBlendMode}} | RenderTargetWidgetFormat = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/RenderTargetWidgetFormat.c;12|RenderTargetWidgetFormat}} | Repeater = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/Repeater.c;12|Repeater}} | ReplicatedCamerasSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/ReplicatedCamerasSystem.c;12|ReplicatedCamerasSystem}} | ReplicatedParticleEffectEntity = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Particles/ReplicatedParticleEffectEntity.c;21|ReplicatedParticleEffectEntity}} | ReplicatedParticleEffectEntityClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Particles/ReplicatedParticleEffectEntity.c;12|ReplicatedParticleEffectEntityClass}} | Replication = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Replication/Replication.c;13|Replication}} | ReportDialogUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ReportDialogUI.c;1|ReportDialogUI}} | ResaveMetaPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchCommon/ResaveMetaTool.c;1|ResaveMetaPlugin}} | ResavePlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchCommon/ResaveTool.c;1|ResavePlugin}} | Resource = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Resources/Resource.c;24|Resource}} | ResourceDatabase = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Resources/ResourceDatabase.c;12|ResourceDatabase}} | ResourceExportCrawler = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/WorldExporterPlugin.c;114|ResourceExportCrawler}} | ResourceImportPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchCommon/ResourceImportTool.c;1|ResourceImportPlugin}} | ResourceInfo = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/ResourceInfo.c;437|ResourceInfo}} | ResourceManager = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorkbenchAPI/Modules/ResourceManager.c;14|ResourceManager}} | ResourceManagerPlugin = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorkbenchAPI/Plugins/ResourceManagerPlugin.c;14|ResourceManagerPlugin}} | ResourceName = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Types/ResourceName.c;12|ResourceName}} | ResourceProcessorPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchCommon/ResourceProcessorTool.c;1|ResourceProcessorPlugin}} | ResourceRequest = {{Link|enfusion://ScriptEditor/scripts/GameCode/Core/PrefabList.c;1|ResourceRequest}} | ResourceTestPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchCommon/ResourceTestTool.c;10|ResourceTestPlugin}} | RespawnComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/GameMode/RespawnComponent.c;21|RespawnComponent}} | RespawnComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/GameMode/RespawnComponent.c;12|RespawnComponentClass}} | RespawnSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/RespawnSystem.c;12|RespawnSystem}} | RespawnSystemComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/GameMode/RespawnSystemComponent.c;17|RespawnSystemComponent}} | RespawnSystemComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/GameMode/RespawnSystemComponent.c;12|RespawnSystemComponentClass}} | RestApi = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/RestApi.c;12|RestApi}} | RestCallback = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/RestCallback.c;71|RestCallback}} | RestCallbackFunc = {{Link|enfusion://ScriptEditor/scripts/GameLib/online/OnlineTypes.c;1|RestCallbackFunc}} | RestContext = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/RestContext.c;13|RestContext}} | RestoreInactivePhysEntitiesStateSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/RestoreInactivePhysEntitiesStateSystem.c;12|RestoreInactivePhysEntitiesStateSystem}} | Restrict = {{Link|enfusion://ScriptEditor/scripts/Core/proto/EnScript.c;99|Restrict}} | Revision = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/Revision.c;12|Revision}} | RichTextWidget = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/RichTextWidget.c;12|RichTextWidget}} | RingBufferGraphWidget = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/RingBufferGraphWidget.c;12|RingBufferGraphWidget}} | RiverEntity = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/RiverEntity.c;21|RiverEntity}} | RiverEntityClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/RiverEntity.c;12|RiverEntityClass}} | RiverPartEntity = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/RiverPartEntity.c;23|RiverPartEntity}} | RiverPartEntityClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/RiverPartEntity.c;12|RiverPartEntityClass}} | RoadEntity = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/RoadEntity.c;16|RoadEntity}} | RoadEntityClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/RoadEntity.c;12|RoadEntityClass}} | RoadGeneratorEntity = {{Link|enfusion://ScriptEditor/scripts/GameLib/entities/editor/RoadGeneratorEntity.c;8|RoadGeneratorEntity}} | RoadGeneratorEntityClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/entities/editor/RoadGeneratorEntity.c;2|RoadGeneratorEntityClass}} | RoadNetworkBridgeComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/RoadNetworkBridgeComponent.c;16|RoadNetworkBridgeComponent}} | RoadNetworkBridgeComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/RoadNetworkBridgeComponent.c;12|RoadNetworkBridgeComponentClass}} | RoadNetworkManager = {{Link|enfusion://ScriptEditor/scripts/Game/generated/RoadNetwork/RoadNetworkManager.c;12|RoadNetworkManager}} | RoadNetworkSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/RoadNetworkSystem.c;12|RoadNetworkSystem}} | RoadType = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Road/RoadType.c;15|RoadType}} | RocketEjectorMuzzleComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/RocketEjectorMuzzleComponent.c;12|RocketEjectorMuzzleComponent}} | RocketEjectorMuzzleComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/RocketEjectorMuzzleComponentClass.c;12|RocketEjectorMuzzleComponentClass}} | RocketEjectorMuzzleComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Serializers/RocketEjectorMuzzleComponentSerializer.c;12|RocketEjectorMuzzleComponentSerializer}} | RocketTraceEffectComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Effects/RocketTraceEffectComponent.c;16|RocketTraceEffectComponent}} | RocketTraceEffectComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Effects/RocketTraceEffectComponent.c;12|RocketTraceEffectComponentClass}} | Room = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/Room.c;12|Room}} | RoomFilterBase = {{Link|enfusion://ScriptEditor/scripts/GameLib/online/ServerBrowserFiltering.c;16|RoomFilterBase}} | RoomJoinData = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/ServerBrowserMenuCallbacks.c;34|RoomJoinData}} | RootNode = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/RootNode.c;12|RootNode}} | RotatingApertureZeroingGenerator = {{Link|enfusion://ScriptEditor/scripts/Game/generated/RotatingApertureZeroingGenerator.c;7|RotatingApertureZeroingGenerator}} | RotorState = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/RotorState.c;12|RotorState}} | RplBeforeExtracted = {{Link|enfusion://ScriptEditor/scripts/Core/proto/EnNetwork.c;122|RplBeforeExtracted}} | RplBeforeInjected = {{Link|enfusion://ScriptEditor/scripts/Core/proto/EnNetwork.c;118|RplBeforeInjected}} | RplChannel = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Replication/RplChannel.c;13|RplChannel}} | RplComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/RplComponent.c;17|RplComponent}} | RplComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/RplComponent.c;12|RplComponentClass}} | RplComponentDebugDrawSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/RplComponentDebugDrawSystem.c;12|RplComponentDebugDrawSystem}} | RplCondition = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Replication/RplCondition.c;13|RplCondition}} | RplConnectionStats = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Replication/RplConnectionStats.c;12|RplConnectionStats}} | RplError = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Replication/RplError.c;12|RplError}} | RplGroup = {{Link|enfusion://ScriptEditor/scripts/Core/proto/EnNetwork.c;42|RplGroup}} | RplId = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Replication/RplId.c;13|RplId}} | RplIdentity = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Replication/RplIdentity.c;13|RplIdentity}} | RplKickCauseGroup = {{Link|enfusion://ScriptEditor/scripts/Core/generated/RplKickCauseGroup.c;7|RplKickCauseGroup}} | RplMode = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/RplMode.c;8|RplMode}} | RplNode = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Replication/RplNode.c;12|RplNode}} | RplProp = {{Link|enfusion://ScriptEditor/scripts/Core/proto/EnNetwork.c;56|RplProp}} | RplRcver = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Replication/RplRcver.c;58|RplRcver}} | RplRole = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Replication/RplRole.c;13|RplRole}} | RplRpc = {{Link|enfusion://ScriptEditor/scripts/Core/proto/EnNetwork.c;88|RplRpc}} | RplSchedulerDebugController = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorldSystems/RplSchedulerDebugController.c;12|RplSchedulerDebugController}} | RplSchedulerDebugSystem = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorldSystems/RplSchedulerDebugSystem.c;12|RplSchedulerDebugSystem}} | RplSchedulerInsertionCtx = {{Link|enfusion://ScriptEditor/scripts/GameLib/components/gameLibComponents.c;29|RplSchedulerInsertionCtx}} | RplSession = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/RplSession.c;7|RplSession}} | RplSessionCallbacks = {{Link|enfusion://ScriptEditor/scripts/GameLib/RplSessionCallbacks.c;6|RplSessionCallbacks}} | RplSessionErrorHandler = {{Link|enfusion://ScriptEditor/scripts/Game/Network/RplSessionErrorHandler.c;2|RplSessionErrorHandler}} | RplStateOverride = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Replication/RplStateOverride.c;13|RplStateOverride}} | RplTestEntity = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/RplTestEntity.c;17|RplTestEntity}} | RplTestEntityClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/RplTestEntity.c;12|RplTestEntityClass}} | RplTestPropType = {{Link|enfusion://ScriptEditor/scripts/Game/Network/RplTestEntity.c;6|RplTestPropType}} | RTTextureSlot = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/RTTextureSlot.c;12|RTTextureSlot}} | RTTextureWidget = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/RTTextureWidget.c;12|RTTextureWidget}} | RunBT = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/RunBT.c;12|RunBT}} | RunOnce = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/RunOnce.c;12|RunOnce}} | RunOnEntity = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/RunOnEntity.c;12|RunOnEntity}} | SaveGame = {{Link|enfusion://ScriptEditor/scripts/Game/generated/SaveGame/SaveGame.c;12|SaveGame}} | SaveGameAddonVersion = {{Link|enfusion://ScriptEditor/scripts/Game/generated/SaveGame/SaveGameAddonVersion.c;12|SaveGameAddonVersion}} | SaveGameDatabase = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Databases/SaveGameDatabase.c;12|SaveGameDatabase}} | SaveGameManager = {{Link|enfusion://ScriptEditor/scripts/Game/generated/SaveGame/SaveGameManager.c;12|SaveGameManager}} | SaveGameOperationCb = {{Link|enfusion://ScriptEditor/scripts/Game/generated/SaveGame/SaveGameOperationCb.c;12|SaveGameOperationCb}} | ScaleWidget = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/ScaleWidget.c;12|ScaleWidget}} | ScenarioFrameworkActionCinematicTrack = {{Link|enfusion://ScriptEditor/scripts/Game/Cinematics/ScenarioFrameworkActionCinematicTrack.c;1|ScenarioFrameworkActionCinematicTrack}} | SCR_2DOpticsComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_2DOpticsComponent.c;12|SCR_2DOpticsComponent}} | SCR_2DOpticsComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_2DOpticsComponent.c;1|SCR_2DOpticsComponentClass}} | SCR_2DOpticsDisplay = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_2DOpticsDisplay.c;7|SCR_2DOpticsDisplay}} | SCR_2DPiPScopeZeroingGenerator = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Sights/ZeroingGenerators/SCR_2DPiPScopeZeroingGenerator.c;1|SCR_2DPiPScopeZeroingGenerator}} | SCR_2DPIPSightsComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Sights/SCR_2DPIPSightsComponent.c;15|SCR_2DPIPSightsComponent}} | SCR_2DPIPSightsComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Sights/SCR_2DPIPSightsComponent.c;1|SCR_2DPIPSightsComponentClass}} | SCR_2DSightsComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Sights/SCR_2DSightsComponent.c;7|SCR_2DSightsComponent}} | SCR_2DSightsComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Sights/SCR_2DSightsComponent.c;1|SCR_2DSightsComponentClass}} | SCR_AABB = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/Common/SCR_AABB.c;3|SCR_AABB}} | SCR_AccelerationManualCameraComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_AccelerationManualCameraComponent.c;4|SCR_AccelerationManualCameraComponent}} | SCR_AccessKeysEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_AccessKeysEditorComponent.c;13|SCR_AccessKeysEditorComponent}} | SCR_AccessKeysEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_AccessKeysEditorComponent.c;3|SCR_AccessKeysEditorComponentClass}} | SCR_AccountLockedDialogUi = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SCR_LoginProcessDialogUI.c;321|SCR_AccountLockedDialogUi}} | SCR_AccountWidgetComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/MainMenu/SCR_AccountWidgetComponent.c;1|SCR_AccountWidgetComponent}} | SCR_AchievementsHandler = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_AchievementsHandler.c;6|SCR_AchievementsHandler}} | SCR_AchievementsHandlerClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_AchievementsHandler.c;1|SCR_AchievementsHandlerClass}} | SCR_ActionBlockUIName = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_BlockUIInfo.c;107|SCR_ActionBlockUIName}} | SCR_ActionContextUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/UI/SCR_ActionContextUIInfo.c;1|SCR_ActionContextUIInfo}} | SCR_ActionFormatParam = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_FormatUIInfo.c;54|SCR_ActionFormatParam}} | SCR_ActionHintScriptedWidgetTooltip = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_ActionHintScriptedWidgetTooltip.c;1|SCR_ActionHintScriptedWidgetTooltip}} | SCR_ActionMenuElementComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Interactions/Display/SCR_ActionMenuElementComponent.c;2|SCR_ActionMenuElementComponent}} | SCR_ActionMenuElementWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/Interactions/Display/SCR_ActionMenuElementWidgets.c;3|SCR_ActionMenuElementWidgets}} | SCR_ActionMenuInputButtonComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Interactions/Display/SCR_InteractButtonComponent.c;1|SCR_ActionMenuInputButtonComponent}} | SCR_ActionMenuInteractionDisplay = {{Link|enfusion://ScriptEditor/scripts/Game/Interactions/Display/SCR_ActionMenuInteractionDisplay.c;1|SCR_ActionMenuInteractionDisplay}} | SCR_ActionMenuLayoutWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/Interactions/Display/SCR_ActionMenuLayoutWidgets.c;3|SCR_ActionMenuLayoutWidgets}} | SCR_ActionMenuSnackBarWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/Interactions/Display/SCR_ActionMenuSnackBarWidgets.c;3|SCR_ActionMenuSnackBarWidgets}} | SCR_ActionsRadialMenuEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_ActionsRadialMenuEditorComponent.c;10|SCR_ActionsRadialMenuEditorComponent}} | SCR_ActionsRadialMenuEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_ActionsRadialMenuEditorComponent.c;4|SCR_ActionsRadialMenuEditorComponentClass}} | SCR_ActionsToolbarEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Toolbar/SCR_ActionsToolbarEditorUIComponent.c;14|SCR_ActionsToolbarEditorUIComponent}} | SCR_ActionsToolbarItemEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Toolbar/SCR_ActionsToolbarEditorUIComponent.c;2|SCR_ActionsToolbarItemEditorUIComponent}} | SCR_ActionToolbarItemEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Toolbar/Items/SCR_ActionToolbarItemEditorUIComponent.c;1|SCR_ActionToolbarItemEditorUIComponent}} | SCR_ActionTooltipEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/SCR_ActionTooltipEditorUIComponent.c;3|SCR_ActionTooltipEditorUIComponent}} | SCR_ActionUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/UI/SCR_ActionUIInfo.c;1|SCR_ActionUIInfo}} | SCR_ActivateMineUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_ActivateMineUserAction.c;1|SCR_ActivateMineUserAction}} | SCR_ActiveTreeData = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/Tree/SCR_DestructibleTreeV2.c;44|SCR_ActiveTreeData}} | SCR_ActiveVoNActionCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Character/SCR_ActiveVoNActionCondition.c;2|SCR_ActiveVoNActionCondition}} | SCR_AdditionalDeployablePart = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_AdditionalDeployablePart.c;1|SCR_AdditionalDeployablePart}} | SCR_AdditionalGameModeSettingsComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Components/SCR_AdditionalGameModeSettingsComponent.c;21|SCR_AdditionalGameModeSettingsComponent}} | SCR_AdditionalGameModeSettingsComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Components/SCR_AdditionalGameModeSettingsComponent.c;1|SCR_AdditionalGameModeSettingsComponentClass}} | SCR_AdditionalGameModeSettingsComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/GameMode/SCR_AdditionalGameModeSettingsComponentSerializer.c;1|SCR_AdditionalGameModeSettingsComponentSerializer}} | SCR_AddonDetailsPanelComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/Common/SCR_AddonDetailsPanelComponent.c;7|SCR_AddonDetailsPanelComponent}} | SCR_AddonExportDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/AddonManager/AddonsTools/AddonsExport/SCR_AddonsExportDialog.c;1|SCR_AddonExportDialog}} | SCR_AddonInfoWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/DetailsMenu/SCR_AddonInfoWidgets.c;3|SCR_AddonInfoWidgets}} | SCR_AddonLineBaseComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/AddonManager/SCR_AddonLineBaseComponent.c;7|SCR_AddonLineBaseComponent}} | SCR_AddonLineBaseWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/AddonManager/AddonsTools/SCR_AddonLineBaseWidgets.c;3|SCR_AddonLineBaseWidgets}} | SCR_AddonLineDSConfigComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/ServerHosting/SCR_AddonLineDSConfigComponent.c;2|SCR_AddonLineDSConfigComponent}} | SCR_AddonLinePresetComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/AddonManager/AddonsTools/AddonsPresets/SCR_AddonLinePresetComponent.c;1|SCR_AddonLinePresetComponent}} | SCR_AddonLinePresetWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/AddonManager/AddonsTools/AddonsPresets/SCR_AddonLinePresetWidgets.c;4|SCR_AddonLinePresetWidgets}} | SCR_AddonLineValidateError = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ValidateRepair/SCR_AddonLineValidateRepairComponent.c;662|SCR_AddonLineValidateError}} | SCR_AddonLineValidateRepairComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ValidateRepair/SCR_AddonLineValidateRepairComponent.c;1|SCR_AddonLineValidateRepairComponent}} | SCR_AddonLineValidateState = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ValidateRepair/SCR_AddonLineValidateRepairComponent.c;684|SCR_AddonLineValidateState}} | SCR_AddonLineValidateStates = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ValidateRepair/SCR_AddonLineValidateRepairComponent.c;715|SCR_AddonLineValidateStates}} | SCR_AddonListDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/Common/Dialogs/SCR_AddonListDialog.c;3|SCR_AddonListDialog}} | SCR_AddonManager = {{Link|enfusion://ScriptEditor/scripts/Game/Workshop/SCR_AddonManager.c;79|SCR_AddonManager}} | SCR_AddonManagerClass = {{Link|enfusion://ScriptEditor/scripts/Game/Workshop/SCR_AddonManager.c;74|SCR_AddonManagerClass}} | SCR_AddonPatchSizeLoader = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DownloadManager/DownloadSequence/SCR_AddonPatchSizeLoader.c;9|SCR_AddonPatchSizeLoader}} | SCR_AddonsExportDialogWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/AddonManager/AddonsTools/AddonsExport/SCR_AddonsExportDialogWidgets.c;4|SCR_AddonsExportDialogWidgets}} | SCR_AddonsExportSubMenuComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/AddonManager/AddonsTools/AddonsExport/SCR_AddonsExportSubMenuComponent.c;12|SCR_AddonsExportSubMenuComponent}} | SCR_AddonsExportSubMenuWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/AddonManager/AddonsTools/AddonsExport/SCR_AddonsExportSubMenuWidgets.c;4|SCR_AddonsExportSubMenuWidgets}} | SCR_AddonsPresetsSubMenuComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/AddonManager/AddonsTools/AddonsPresets/SCR_AddonsPresetSubMenuComponent.c;7|SCR_AddonsPresetsSubMenuComponent}} | SCR_AddonsPresetSubMenuWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/AddonManager/AddonsTools/SCR_AddonsPresetSubMenuWidgets.c;4|SCR_AddonsPresetSubMenuWidgets}} | SCR_AddonsToolDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/AddonManager/AddonsTools/AddonsPresets/SCR_AddonsToolDialog.c;5|SCR_AddonsToolDialog}} | SCR_AddonTool = {{Link|enfusion://ScriptEditor/scripts/Game/Global/SCR_AddonTools.c;13|SCR_AddonTool}} | SCR_AddonUpdateConfirmationDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/Common/Dialogs/SCR_AddonUpdateConfirmationDialog.c;9|SCR_AddonUpdateConfirmationDialog}} | SCR_AddPrefabToSelectedEntitiesPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_AddPrefabToSelectedEntitiesPlugin.c;2|SCR_AddPrefabToSelectedEntitiesPlugin}} | SCR_AddTarget = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/FiringRange/SCR_AddTarget.c;3|SCR_AddTarget}} | SCR_AdjustCollimatorAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_AdjustCollimatorAction.c;1|SCR_AdjustCollimatorAction}} | SCR_AdjustCollimatorElevationAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_AdjustCollimatorElevationAction.c;1|SCR_AdjustCollimatorElevationAction}} | SCR_AdjustShellChargeRingsAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_AdjustShellChargeRingsAction.c;1|SCR_AdjustShellChargeRingsAction}} | SCR_AdjustShellTimeFuzeAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_AdjustShellTimeFuzeAction.c;1|SCR_AdjustShellTimeFuzeAction}} | SCR_AdjustSignalAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_AdjustSignalAction.c;1|SCR_AdjustSignalAction}} | SCR_AdjustSpeedManualCameraComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_AdjustSpeedManualCameraComponent.c;4|SCR_AdjustSpeedManualCameraComponent}} | SCR_AdjustTimedFuzeAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_AdjustTimedFuzeAction.c;1|SCR_AdjustTimedFuzeAction}} | SCR_AdminModeEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Modes/SCR_AdminModeEditorUIComponent.c;1|SCR_AdminModeEditorUIComponent}} | SCR_AdvancedActionRowComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SettingsMenu/SCR_AdvancedActionRowComponent.c;1|SCR_AdvancedActionRowComponent}} | SCR_AdvancedKeybindDialogUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SettingsMenu/SCR_AdvancedKeybindDialogUI.c;2|SCR_AdvancedKeybindDialogUI}} | SCR_AIActionBase = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIAction.c;11|SCR_AIActionBase}} | SCR_AIActionTask = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AIBehaviorTask.c;1|SCR_AIActionTask}} | SCR_AIActionUserInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AISmartActionComponent.c;7|SCR_AIActionUserInvoker}} | SCR_AIActivateAllBirds = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/SCR_AIActivateAllBirds.c;1|SCR_AIActivateAllBirds}} | SCR_AIActivityBase = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIActivity.c;11|SCR_AIActivityBase}} | SCR_AIActivityFeatureBase = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/ActivityFeatures/SCR_AIActivityFeatureBase.c;1|SCR_AIActivityFeatureBase}} | SCR_AIActivityIllumFlareFeature = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/ActivityFeatures/SCR_AIActivityIllumFlareFeature.c;1|SCR_AIActivityIllumFlareFeature}} | SCR_AIActivitySmokeCoverFeature = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/ActivityFeatures/SCR_AIActivitySmokeCoverFeature.c;87|SCR_AIActivitySmokeCoverFeature}} | SCR_AIActivitySmokeCoverFeatureAgent = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/ActivityFeatures/SCR_AIActivitySmokeCoverFeature.c;37|SCR_AIActivitySmokeCoverFeatureAgent}} | SCR_AIActivitySmokeCoverFeatureCluster = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/ActivityFeatures/SCR_AIActivitySmokeCoverFeature.c;9|SCR_AIActivitySmokeCoverFeatureCluster}} | SCR_AIActivitySmokeCoverFeatureProperties = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/ActivityFeatures/SCR_AIActivitySmokeCoverFeature.c;1|SCR_AIActivitySmokeCoverFeatureProperties}} | SCR_AIAgentDebugPanel = {{Link|enfusion://ScriptEditor/scripts/Game/AI/SCR_AIAgentDebugPanel.c;4|SCR_AIAgentDebugPanel}} | SCR_AIAllocateActionsForDefendActivity = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Groups/SCR_AIAllocateActionsForDefendActivity.c;1|SCR_AIAllocateActionsForDefendActivity}} | SCR_AIAllowLookAction = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AIAllowLookAction.c;1|SCR_AIAllowLookAction}} | SCR_AIAnimateActivity = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIAnimateActivity.c;1|SCR_AIAnimateActivity}} | SCR_AIAnimateBehavior = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIAnimateBehavior.c;1|SCR_AIAnimateBehavior}} | SCR_AIAnimation_Base = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIAnimation_Base.c;4|SCR_AIAnimation_Base}} | SCR_AIAnimation_Loitering = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIAnimation_Base.c;81|SCR_AIAnimation_Loitering}} | SCR_AIAnimation_OfficerMission_Table = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIAnimation_Base.c;116|SCR_AIAnimation_OfficerMission_Table}} | SCR_AIAnimation_OfficerMission_Walking = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIAnimation_Base.c;171|SCR_AIAnimation_OfficerMission_Walking}} | SCR_AIAnimation_Pushups = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIAnimation_Base.c;46|SCR_AIAnimation_Pushups}} | SCR_AIAnimation_Sitting = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIAnimation_Base.c;12|SCR_AIAnimation_Sitting}} | SCR_AIAnimationParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_AIAnimationWaypoint.c;6|SCR_AIAnimationParameters}} | SCR_AIAnimationScript = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_AIAnimationWaypoint.c;53|SCR_AIAnimationScript}} | SCR_AIAnimationWaypoint = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_AIAnimationWaypoint.c;148|SCR_AIAnimationWaypoint}} | SCR_AIAnimationWaypointClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_AIAnimationWaypoint.c;1|SCR_AIAnimationWaypointClass}} | SCR_AIAnimationWaypointParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_AIAnimationWaypoint.c;14|SCR_AIAnimationWaypointParameters}} | SCR_AIAnimationWaypointState = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_AIAnimationWaypoint.c;190|SCR_AIAnimationWaypointState}} | SCR_AIAttackBehavior = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIAttackBehavior.c;1|SCR_AIAttackBehavior}} | SCR_AIAttackClusterActivity = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/ClusterActivities/SCR_AIAttackClusterActivity.c;1|SCR_AIAttackClusterActivity}} | SCR_AIAvoidCharacterBehavior = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIAvoidCharacterBehavior.c;1|SCR_AIAvoidCharacterBehavior}} | SCR_AIBaseTargetToTargetInfo = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Utils/SCR_AIBaseTargetToTargetInfo.c;1|SCR_AIBaseTargetToTargetInfo}} | SCR_AIBaseUtilityComponent = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AIBaseUtilityComponent.c;9|SCR_AIBaseUtilityComponent}} | SCR_AIBaseUtilityComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AIBaseUtilityComponent.c;1|SCR_AIBaseUtilityComponentClass}} | SCR_AIBehaviorBase = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIBehavior.c;13|SCR_AIBehaviorBase}} | SCR_AIBoardingParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_BoardingWaypoint.c;5|SCR_AIBoardingParameters}} | SCR_AIBoardingWaypointParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_BoardingWaypoint.c;12|SCR_AIBoardingWaypointParameters}} | SCR_AICalculateCoverQueryProps_CombatMove = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AICalculateCoverQueryProps_CombatMove.c;1|SCR_AICalculateCoverQueryProps_CombatMove}} | SCR_AICalculateNextCombatMovePos = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AICalculateNextCombatMovePos.c;1|SCR_AICalculateNextCombatMovePos}} | SCR_AICallOnExecuteWaypointTree = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Waypoints/SCR_AICallOnExecuteWaypointTree.c;1|SCR_AICallOnExecuteWaypointTree}} | SCR_AIChangeCompartment = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Vehicles/SCR_AIChangeCompartment.c;1|SCR_AIChangeCompartment}} | SCR_AIChangeUnitState = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AIChangeUnitState.c;1|SCR_AIChangeUnitState}} | SCR_AICharacterLeanOnAbort = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AICharacterLeanOnAbort.c;1|SCR_AICharacterLeanOnAbort}} | SCR_AICharacterLightInteractionSetting = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Settings/SCR_AICharacterLightInteractionSetting.c;15|SCR_AICharacterLightInteractionSetting}} | SCR_AICharacterLightInteractionSettingBase = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Settings/SCR_AICharacterLightInteractionSetting.c;4|SCR_AICharacterLightInteractionSettingBase}} | SCR_AICharacterMovementSpeedSetting = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Settings/SCR_AICharacterMovementSpeedSetting.c;67|SCR_AICharacterMovementSpeedSetting}} | SCR_AICharacterMovementSpeedSetting_Range = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Settings/SCR_AICharacterMovementSpeedSetting.c;20|SCR_AICharacterMovementSpeedSetting_Range}} | SCR_AICharacterMovementSpeedSettingBase = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Settings/SCR_AICharacterMovementSpeedSetting.c;3|SCR_AICharacterMovementSpeedSettingBase}} | SCR_AICharacterSetMovementSpeed = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AICharacterSetMovementSpeed.c;3|SCR_AICharacterSetMovementSpeed}} | SCR_AICharacterSetting = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Settings/SCR_AICharacterSetting.c;3|SCR_AICharacterSetting}} | SCR_AICharacterSettingsComponent = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AICharacterSettingsComponent.c;8|SCR_AICharacterSettingsComponent}} | SCR_AICharacterSettingsComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AICharacterSettingsComponent.c;2|SCR_AICharacterSettingsComponentClass}} | SCR_AICharacterSettingWithCause = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Settings/SCR_AICharacterSetting.c;17|SCR_AICharacterSettingWithCause}} | SCR_AICharacterStanceSetting = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Settings/SCR_AICharacterStanceSetting.c;69|SCR_AICharacterStanceSetting}} | SCR_AICharacterStanceSetting_Range = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Settings/SCR_AICharacterStanceSetting.c;20|SCR_AICharacterStanceSetting_Range}} | SCR_AICharacterStanceSettingBase = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Settings/SCR_AICharacterStanceSetting.c;3|SCR_AICharacterStanceSettingBase}} | SCR_AICharacterStats = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AICharacterStats.c;1|SCR_AICharacterStats}} | SCR_AICheckEntityStance = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Utils/SCR_AICheckEntityStance.c;1|SCR_AICheckEntityStance}} | SCR_AICheckLowAmmo = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Weapons/SCR_AICheckLowAmmo.c;1|SCR_AICheckLowAmmo}} | SCR_AICinematicLookAt = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AICinematicLookAt.c;2|SCR_AICinematicLookAt}} | SCR_AIClearActionsForDefendActivity = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Groups/SCR_AIClearActionsForDefendActivity.c;1|SCR_AIClearActionsForDefendActivity}} | SCR_AIClustersCompositeAction = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/ClusterActivities/SCR_AIClustersCompositeAction.c;4|SCR_AIClustersCompositeAction}} | SCR_AICombatComponent = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AICombatComponent.c;17|SCR_AICombatComponent}} | SCR_AICombatComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AICombatComponent.c;1|SCR_AICombatComponentClass}} | SCR_AICombatComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/AI/SCR_AICombatComponentSerializer.c;1|SCR_AICombatComponentSerializer}} | SCR_AICombatMoveLogic_Attack = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AICombatMoveLogic_Attack.c;636|SCR_AICombatMoveLogic_Attack}} | SCR_AICombatMoveLogic_HideFromThreatSystem = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AICombatMoveLogic_HideFromThreatSystem.c;1|SCR_AICombatMoveLogic_HideFromThreatSystem}} | SCR_AICombatMoveLogic_HideFromUnknownFire = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AICombatMoveLogic_HideFromUnknownFire.c;1|SCR_AICombatMoveLogic_HideFromUnknownFire}} | SCR_AICombatMoveLogic_MoveFromGrenade = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AICombatMoveLogic_MoveFromGrenade.c;1|SCR_AICombatMoveLogic_MoveFromGrenade}} | SCR_AICombatMoveLogic_MoveFromIncomingVehicle = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AICombatMoveLogic_MoveFromIncomingVehicle.c;1|SCR_AICombatMoveLogic_MoveFromIncomingVehicle}} | SCR_AICombatMoveLogic_Suppressive = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AICombatMoveLogic_Attack.c;804|SCR_AICombatMoveLogic_Suppressive}} | SCR_AICombatMoveLogicBase = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AICombatMoveLogic_Attack.c;7|SCR_AICombatMoveLogicBase}} | SCR_AICombatMoveLogicVehicleGunner_Attack = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AICombatMoveLogic_MovingCommander.c;160|SCR_AICombatMoveLogicVehicleGunner_Attack}} | SCR_AICombatMoveLogicVehicleGunner_Suppressive = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AICombatMoveLogic_MovingCommander.c;553|SCR_AICombatMoveLogicVehicleGunner_Suppressive}} | SCR_AICombatMoveLogicVehicleGunnerBase = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AICombatMoveLogic_MovingCommander.c;6|SCR_AICombatMoveLogicVehicleGunnerBase}} | SCR_AICombatMoveRequest_ChangeStance = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AICombatMoveRequest.c;144|SCR_AICombatMoveRequest_ChangeStance}} | SCR_AICombatMoveRequest_ChangeStanceInCover = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AICombatMoveRequest.c;133|SCR_AICombatMoveRequest_ChangeStanceInCover}} | SCR_AICombatMoveRequest_Move = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AICombatMoveRequest.c;87|SCR_AICombatMoveRequest_Move}} | SCR_AICombatMoveRequest_Move_InvokeOnMovementStarted = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AICombatMoveRequest_Move_InvokeOnMovementStarted.c;1|SCR_AICombatMoveRequest_Move_InvokeOnMovementStarted}} | SCR_AICombatMoveRequest_Move_MovementEvent = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AICombatMoveRequest.c;84|SCR_AICombatMoveRequest_Move_MovementEvent}} | SCR_AICombatMoveRequest_OnCompleted = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AICombatMoveRequest.c;39|SCR_AICombatMoveRequest_OnCompleted}} | SCR_AICombatMoveRequest_OnFailed = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AICombatMoveRequest.c;42|SCR_AICombatMoveRequest_OnFailed}} | SCR_AICombatMoveRequest_Stop = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AICombatMoveRequest.c;123|SCR_AICombatMoveRequest_Stop}} | SCR_AICombatMoveRequestBase = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AICombatMoveRequest.c;45|SCR_AICombatMoveRequestBase}} | SCR_AICombatMoveState = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AICombatMoveState.c;18|SCR_AICombatMoveState}} | SCR_AICombatMoveUtils = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AICombatMoveUtils.c;5|SCR_AICombatMoveUtils}} | SCR_AICombatTargetGetterTask = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AICombatTargetGetterTask.c;2|SCR_AICombatTargetGetterTask}} | SCR_AICommsHandler = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Talk/SCR_AICommsHandler.c;19|SCR_AICommsHandler}} | SCR_AICompartmentHandling = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Utils/SCR_AIUtils.c;152|SCR_AICompartmentHandling}} | SCR_AICompleteAction = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AICompleteAction.c;1|SCR_AICompleteAction}} | SCR_AICompleteLookAction = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AICompleteLookAction.c;1|SCR_AICompleteLookAction}} | SCR_AICompleteWaypoint = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Waypoints/SCR_AICompleteWaypoint.c;1|SCR_AICompleteWaypoint}} | SCR_AICompositeActionParallel = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AICompositeActionParallel.c;1|SCR_AICompositeActionParallel}} | SCR_AIConfigComponent = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AIConfigComponent.c;6|SCR_AIConfigComponent}} | SCR_AIConfigComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AIConfigComponent.c;1|SCR_AIConfigComponentClass}} | SCR_AIConfigureArtilleryAmmo = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Weapons/SCR_AIConfigureArtilleryAmmo.c;1|SCR_AIConfigureArtilleryAmmo}} | SCR_AICoverLock = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Covers/SCR_AICoverLock.c;19|SCR_AICoverLock}} | SCR_AICreateBasicCoverQueryProps = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AICreateBasicCoverQueryProps.c;1|SCR_AICreateBasicCoverQueryProps}} | SCR_AICreateDefendBehaviorCoverQueryProps = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AICreateDefendBehaviorCoverQueryProps.c;1|SCR_AICreateDefendBehaviorCoverQueryProps}} | SCR_AICreateTargetInfo = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Utils/SCR_AICreateTargetInfo.c;1|SCR_AICreateTargetInfo}} | SCR_AIDamageHandling = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Utils/SCR_AIUtils.c;444|SCR_AIDamageHandling}} | SCR_AIDangerEvent_UnsafeArea = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Events/Danger/SCR_AIDangerEvent_UnsafeArea.c;1|SCR_AIDangerEvent_UnsafeArea}} | SCR_AIDangerReaction = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/Danger/SCR_AIDangerReaction.c;3|SCR_AIDangerReaction}} | SCR_AIDangerReaction_DamageTaken = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/Danger/SCR_AIDangerReaction_DamageTaken.c;1|SCR_AIDangerReaction_DamageTaken}} | SCR_AIDangerReaction_DoorMovement = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/Danger/SCR_AIDangerReaction_DoorMovement.c;1|SCR_AIDangerReaction_DoorMovement}} | SCR_AIDangerReaction_Explosion = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/Danger/SCR_AIDangerReaction_Explosion.c;1|SCR_AIDangerReaction_Explosion}} | SCR_AIDangerReaction_GrenadeLanding = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/Danger/SCR_AIDangerReaction_GrenadeLanding.c;1|SCR_AIDangerReaction_GrenadeLanding}} | SCR_AIDangerReaction_MeleeDamageTaken = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/Danger/SCR_AIDangerReaction_MeleeDamageTaken.c;1|SCR_AIDangerReaction_MeleeDamageTaken}} | SCR_AIDangerReaction_PhysicsContact = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/Danger/SCR_AIDangerReaction_PhysicsContact.c;1|SCR_AIDangerReaction_PhysicsContact}} | SCR_AIDangerReaction_ProjectileHit = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/Danger/SCR_AIDangerReaction_ProjectileHit.c;1|SCR_AIDangerReaction_ProjectileHit}} | SCR_AIDangerReaction_StartedBleeding = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/Danger/SCR_AIDangerReaction_StartedBleeding.c;1|SCR_AIDangerReaction_StartedBleeding}} | SCR_AIDangerReaction_UnsafeArea = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/Danger/SCR_AIDangerReaction_UnsafeArea.c;1|SCR_AIDangerReaction_UnsafeArea}} | SCR_AIDangerReaction_Vehicle = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/Danger/SCR_AIDangerReaction_Vehicle.c;1|SCR_AIDangerReaction_Vehicle}} | SCR_AIDangerReaction_VehicleHorn = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/Danger/SCR_AIDangerReaction_VehicleHorn.c;1|SCR_AIDangerReaction_VehicleHorn}} | SCR_AIDangerReaction_WeaponFired = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/Danger/SCR_AIDangerReaction_WeaponFired.c;1|SCR_AIDangerReaction_WeaponFired}} | SCR_AIDayNightTest = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/SCR_AIDayNightTest.c;1|SCR_AIDayNightTest}} | SCR_AIDebug = {{Link|enfusion://ScriptEditor/scripts/Game/AI/SCR_AIDebug.c;2|SCR_AIDebug}} | SCR_AIDebugCounter = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Debug/SCR_AIDebugCounter.c;2|SCR_AIDebugCounter}} | SCR_AIDebugInfoComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Debug/SCR_AIDebugInfoComponent.c;1|SCR_AIDebugInfoComponent}} | SCR_AIDebugMessage = {{Link|enfusion://ScriptEditor/scripts/Game/AI/SCR_AIDebugMessage.c;18|SCR_AIDebugMessage}} | SCR_AIDebugTask = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Debug/SCR_AIDebugTask.c;2|SCR_AIDebugTask}} | SCR_AIDebugVisualization = {{Link|enfusion://ScriptEditor/scripts/Game/AI/SCR_AIDebugVisualization.c;9|SCR_AIDebugVisualization}} | SCR_AIDebugVisualizationClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/SCR_AIDebugVisualization.c;1|SCR_AIDebugVisualizationClass}} | SCR_AIDecideActivity = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Groups/SCR_AIDecideActivity.c;1|SCR_AIDecideActivity}} | SCR_AIDecideBehavior = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AIDecideBehavior.c;1|SCR_AIDecideBehavior}} | SCR_AIDecoAreVehiclesBurning = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Vehicles/SCR_AIDecoAreVehiclesBurning.c;1|SCR_AIDecoAreVehiclesBurning}} | SCR_AIDecoBallisticPath = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Weapons/SCR_AIDecoBallisticPath.c;1|SCR_AIDecoBallisticPath}} | SCR_AIDecoBehaviorAllowsLooking = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AIDecoBehaviorAllowsLooking.c;1|SCR_AIDecoBehaviorAllowsLooking}} | SCR_AIDecoCombatEnemy = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AIDecoCombatEnemy.c;1|SCR_AIDecoCombatEnemy}} | SCR_AIDecoCombatMode = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AIDecoCombatMode.c;1|SCR_AIDecoCombatMode}} | SCR_AIDecoCombatMove_AimingAllowed = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AIDecoCombatMove_AimingAllowed.c;1|SCR_AIDecoCombatMove_AimingAllowed}} | SCR_AIDecoCombatMove_Moving = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AIDecoCombatMove_Moving.c;1|SCR_AIDecoCombatMove_Moving}} | SCR_AIDecoCurrentEnemy = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AIDecoCombatEnemy.c;29|SCR_AIDecoCurrentEnemy}} | SCR_AIDecoDistanceHysteresis = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Logical/SCR_AIDecoDistanceHysteresis.c;4|SCR_AIDecoDistanceHysteresis}} | SCR_AIDecoHasActionOfType = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AIDecoHasActionOfType.c;1|SCR_AIDecoHasActionOfType}} | SCR_AIDecoHasMagazineCount = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Inventory/SCR_AIDecoHasMagazineCount.c;9|SCR_AIDecoHasMagazineCount}} | SCR_AIDecoHasRole = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AIDecoHasRole.c;1|SCR_AIDecoHasRole}} | SCR_AIDecoHasWeaponOfType = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Inventory/SCR_AIDecoHasWeaponOfType.c;1|SCR_AIDecoHasWeaponOfType}} | SCR_AIDecoIsAboveThreatLevel = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AIDecoIsAboveThreatLevel.c;2|SCR_AIDecoIsAboveThreatLevel}} | SCR_AIDecoIsArrayEmpty = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Utils/SCR_AIDecoIsArrayEmpty.c;1|SCR_AIDecoIsArrayEmpty}} | SCR_AIDecoIsCompartmentTypeAllowed = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Vehicles/SCR_AIDecoIsCompartmentTypeAllowed.c;1|SCR_AIDecoIsCompartmentTypeAllowed}} | SCR_AIDecoIsEnemyWithinRadius = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Waypoints/SCR_AIDecoIsEnemyWithinRadius.c;1|SCR_AIDecoIsEnemyWithinRadius}} | SCR_AIDecoIsGroupInitializing = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Groups/SCR_AIDecoIsGroupInitializing.c;1|SCR_AIDecoIsGroupInitializing}} | SCR_AIDecoIsWithinRadius = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Waypoints/SCR_AIDecoIsWithinRadius.c;1|SCR_AIDecoIsWithinRadius}} | SCR_AIDecoLastSeenEnemy = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AIDecoCombatEnemy.c;47|SCR_AIDecoLastSeenEnemy}} | SCR_AIDecoMachinegunnerBipod = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AIDecoMachinegunnerBipod.c;1|SCR_AIDecoMachinegunnerBipod}} | SCR_AIDecoOnWaypointChanged = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Groups/SCR_AIDecoOnWaypointChanged.c;1|SCR_AIDecoOnWaypointChanged}} | SCR_AIDecoProfiler = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Debug/SCR_AIDecoProfiler.c;1|SCR_AIDecoProfiler}} | SCR_AIDecoSuppressiveFire = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AIDecoSuppressiveFire.c;2|SCR_AIDecoSuppressiveFire}} | SCR_AIDecoTargetWithinTurretAimingLimits = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Weapons/SCR_AIDecoTargetWithinTurretAimingLimits.c;1|SCR_AIDecoTargetWithinTurretAimingLimits}} | SCR_AIDecoTestActivityIsFollow = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AIDecoTestActivityIsFollow.c;1|SCR_AIDecoTestActivityIsFollow}} | SCR_AIDecoTestAreAllocatedCompartmentsOccupied = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Vehicles/SCR_AIDecoTestAreAllocatedCompartmentsOccupied.c;1|SCR_AIDecoTestAreAllocatedCompartmentsOccupied}} | SCR_AIDecoTestCanGroupDriveVehicle = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Vehicles/SCR_AIDecoTestCanGroupDriveVehicle.c;1|SCR_AIDecoTestCanGroupDriveVehicle}} | SCR_AIDecoTestCharacterWounded = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Utils/SCR_AIDecoTestCharacterWounded.c;4|SCR_AIDecoTestCharacterWounded}} | SCR_AIDecoTestDoorIsConditionWithSiblings = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AIDecoTestDoorIsOpen.c;20|SCR_AIDecoTestDoorIsConditionWithSiblings}} | SCR_AIDecoTestDoorIsOpen = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AIDecoTestDoorIsOpen.c;1|SCR_AIDecoTestDoorIsOpen}} | SCR_AIDecoTestDoorIsOpeningWithSiblings = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AIDecoTestDoorIsOpen.c;86|SCR_AIDecoTestDoorIsOpeningWithSiblings}} | SCR_AIDecoTestDoorIsOpenWithSiblings = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AIDecoTestDoorIsOpen.c;95|SCR_AIDecoTestDoorIsOpenWithSiblings}} | SCR_AIDecoTestDriverAliveInsideVehicle = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Vehicles/SCR_AIDecoTestIsDriverAliveInsideVehicle.c;1|SCR_AIDecoTestDriverAliveInsideVehicle}} | SCR_AIDecoTestHasMagazines = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Inventory/SCR_AIDecoTestHasMagazines.c;1|SCR_AIDecoTestHasMagazines}} | SCR_AIDecoTestIsAgentInGroup = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Groups/SCR_AIDecoTestIsAgentInGroup.c;1|SCR_AIDecoTestIsAgentInGroup}} | SCR_AIDecoTestIsAvailable = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AIDecoTestIsAvailable.c;1|SCR_AIDecoTestIsAvailable}} | SCR_AIDecoTestIsEnteringOrLeavingVehicle = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AIDecoTestIsEnteringOrLeavingVehicle.c;1|SCR_AIDecoTestIsEnteringOrLeavingVehicle}} | SCR_AIDecoTestIsEntityBurning = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Vehicles/SCR_AIDecoTestIsEntityBurning.c;1|SCR_AIDecoTestIsEntityBurning}} | SCR_AIDecoTestIsGroup = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Groups/SCR_AIDecoTestIsGroup.c;1|SCR_AIDecoTestIsGroup}} | SCR_AIDecoTestIsInTurret = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Vehicles/SCR_AIDecoTestIsInTurret.c;1|SCR_AIDecoTestIsInTurret}} | SCR_AIDecoTestIsInVehicle = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Vehicles/SCR_AIDecoTestIsInVehicle.c;1|SCR_AIDecoTestIsInVehicle}} | SCR_AIDecoTestIsInVehicleCondition = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Vehicles/SCR_AIDecoTestIsInVehicleCondition.c;1|SCR_AIDecoTestIsInVehicleCondition}} | SCR_AIDecoTestIsLeader = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AIDecoTestIsLeader.c;1|SCR_AIDecoTestIsLeader}} | SCR_AIDecoTestIsMovingTowardsMe = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Utils/SCR_AIDecoTestIsMovingTowardsMe.c;4|SCR_AIDecoTestIsMovingTowardsMe}} | SCR_AIDecoTestIsOutOfVehicle = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Vehicles/SCR_AIDecoTestIsOutOfVehicle.c;1|SCR_AIDecoTestIsOutOfVehicle}} | SCR_AIDecoTestIsOutVehicleCondition = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Vehicles/SCR_AIDecoTestIsOutVehicleCondition.c;1|SCR_AIDecoTestIsOutVehicleCondition}} | SCR_AIDecoTestIsReloading = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Weapons/SCR_AIDecoTestIsReloading.c;1|SCR_AIDecoTestIsReloading}} | SCR_AIDecoTestIsSlaveGroupOfEntity = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Groups/SCR_AIDecoTestIsSlaveGroupOfEntity.c;1|SCR_AIDecoTestIsSlaveGroupOfEntity}} | SCR_AIDecoTestIsWaypoint = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Groups/SCR_AIDecoTestIsWaypoint.c;1|SCR_AIDecoTestIsWaypoint}} | SCR_AIDecoTestVehicleIsMoving = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Vehicles/SCR_DecoTestVehicleIsMoving.c;1|SCR_AIDecoTestVehicleIsMoving}} | SCR_AIDecoTimeSinceTargetDetected = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AIDecoTimeSinceTargetDetected.c;2|SCR_AIDecoTimeSinceTargetDetected}} | SCR_AIDecoVectorDistance = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Logical/SCR_AIDecoVectorDistance.c;1|SCR_AIDecoVectorDistance}} | SCR_AIDecoWeaponUnobstructed = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Weapons/SCR_AIDecoWeaponUnobstructed.c;1|SCR_AIDecoWeaponUnobstructed}} | SCR_AIDefendActivity = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIDefendActivity.c;1|SCR_AIDefendActivity}} | SCR_AIDefendBehavior = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIDefendBehavior.c;1|SCR_AIDefendBehavior}} | SCR_AIDefendFromClusterActivity = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/ClusterActivities/SCR_AIDefendFromClusterActivity.c;1|SCR_AIDefendFromClusterActivity}} | SCR_AIDefendWaypointState = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_DefendWaypoint.c;91|SCR_AIDefendWaypointState}} | SCR_AIDeploySmokeCover = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Groups/SCR_AIDeploySmoke.c;1|SCR_AIDeploySmokeCover}} | SCR_AIDrawDebugSphere = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Debug/SCR_AIDrawDebugSphere.c;1|SCR_AIDrawDebugSphere}} | SCR_AIDrawDebugVector = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Debug/SCR_AIDrawDebugVector.c;1|SCR_AIDrawDebugVector}} | SCR_AIDropMagazines = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Inventory/SCR_AIDropMagazines.c;1|SCR_AIDropMagazines}} | SCR_AIDropWeapon = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Weapons/SCR_AIDropWeapon.c;2|SCR_AIDropWeapon}} | SCR_AIEndProcessCombatMoveRequest = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AIEndProcessCombatMoveRequest.c;5|SCR_AIEndProcessCombatMoveRequest}} | SCR_AIEntityWaypointParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_EntityWaypoint.c;5|SCR_AIEntityWaypointParameters}} | SCR_AIErrorMessages = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Utils/NodeError.c;30|SCR_AIErrorMessages}} | SCR_AIEvaluateExpectedWeapon = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Weapons/SCR_AIEvaluateExpectedWeapon.c;4|SCR_AIEvaluateExpectedWeapon}} | SCR_AIEvaluateSuppressionWeapon = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Weapons/SCR_AIEvaluateSuppressionWeapon.c;4|SCR_AIEvaluateSuppressionWeapon}} | SCR_AIFactionHandling = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Utils/SCR_AIUtils.c;615|SCR_AIFactionHandling}} | SCR_AIFailAction = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AIFailAction.c;1|SCR_AIFailAction}} | SCR_AIFindArsenalWithPrefab = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Inventory/SCR_AIFindArsenalWithPrefab.c;1|SCR_AIFindArsenalWithPrefab}} | SCR_AIFindAvailableVehicle = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Vehicles/SCR_AIFindAvailableVehicle.c;1|SCR_AIFindAvailableVehicle}} | SCR_AIFindCover = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Covers/SCR_AIFindCover.c;1|SCR_AIFindCover}} | SCR_AIFindFirePositionBehavior = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIFindFirePositionBehavior.c;5|SCR_AIFindFirePositionBehavior}} | SCR_AIFindItemInInventory = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Inventory/SCR_AIFindItemInInventory.c;1|SCR_AIFindItemInInventory}} | SCR_AIFindMedic = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Groups/SCR_AIFindMedic.c;1|SCR_AIFindMedic}} | SCR_AIFindResupplier = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Groups/SCR_AIFindResupplier.c;1|SCR_AIFindResupplier}} | SCR_AIFindSmartActions = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Groups/SCR_AIFindSmartActions.c;1|SCR_AIFindSmartActions}} | SCR_AIFindTagetToLookAt = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AIFindTargetToLookAt.c;1|SCR_AIFindTagetToLookAt}} | SCR_AIFindTurrets = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Groups/SCR_AIFindTurrets.c;1|SCR_AIFindTurrets}} | SCR_AIFireIllumFlareBehavior = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIFireIllumFlareBehavior.c;1|SCR_AIFireIllumFlareBehavior}} | SCR_AIFireIllumFlareBehaviorParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AIGetActionParameters.c;227|SCR_AIFireIllumFlareBehaviorParameters}} | SCR_AIFireteamsActivity = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIFireteamsActivity.c;6|SCR_AIFireteamsActivity}} | SCR_AIFireteamsClusterActivity = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/ClusterActivities/SCR_AIFireteamsClusterActivity.c;6|SCR_AIFireteamsClusterActivity}} | SCR_AIFollowActivity = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIFollowActivity.c;1|SCR_AIFollowActivity}} | SCR_AIFollowEntityPath = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AIFollowEntityPath.c;5|SCR_AIFollowEntityPath}} | SCR_AIFormationEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_AIFormationEditorAttribute.c;2|SCR_AIFormationEditorAttribute}} | SCR_AIGetActionParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AIGetActionParameters.c;22|SCR_AIGetActionParameters}} | SCR_AIGetActionPriorityLevel = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AIGetActionPriorityLevel.c;1|SCR_AIGetActionPriorityLevel}} | SCR_AIGetAimCompensation = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Aiming/SCR_AIGetAimCompensation.c;1|SCR_AIGetAimCompensation}} | SCR_AIGetAimDistanceCompensation = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Aiming/SCR_AIGetAimDistanceCompensation.c;1|SCR_AIGetAimDistanceCompensation}} | SCR_AIGetAimErrorOffset = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Aiming/SCR_AIGetAimErrorOffset.c;9|SCR_AIGetAimErrorOffset}} | SCR_AIGetAllowedLookRange = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Vehicles/SCR_AIGetAllowedLookRange.c;1|SCR_AIGetAllowedLookRange}} | SCR_AIGetAnimateBehaviorParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIAnimateBehavior.c;57|SCR_AIGetAnimateBehaviorParameters}} | SCR_AIGetAnimationScriptParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Waypoints/SCR_AIGetAnimationScriptParameters.c;1|SCR_AIGetAnimationScriptParameters}} | SCR_AIGetArtilleryAimDistanceCompensation = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Weapons/SCR_AIGetArtilleryAimDistanceCompensation.c;1|SCR_AIGetArtilleryAimDistanceCompensation}} | SCR_AIGetAttackBehaviorParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AIGetActionParameters.c;112|SCR_AIGetAttackBehaviorParameters}} | SCR_AIGetBaseTargetProperties = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Utils/SCR_AIGetBaseTargetProperties.c;1|SCR_AIGetBaseTargetProperties}} | SCR_AIGetCarAvoidPosition = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Vehicles/SCR_AIGetCarAvoidPosition.c;5|SCR_AIGetCarAvoidPosition}} | SCR_AIGetCombatComponentWeaponProperties = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Weapons/SCR_AIGetCombatComponentWeaponProperties.c;1|SCR_AIGetCombatComponentWeaponProperties}} | SCR_AIGetCombatMovementParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AIGetCombatMovementParameters.c;1|SCR_AIGetCombatMovementParameters}} | SCR_AIGetCombatMoveRequestParameters_ChangeStance = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AIGetCombatMoveRequestParameters.c;133|SCR_AIGetCombatMoveRequestParameters_ChangeStance}} | SCR_AIGetCombatMoveRequestParameters_ChangeStanceInCover = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AIGetCombatMoveRequestParameters.c;105|SCR_AIGetCombatMoveRequestParameters_ChangeStanceInCover}} | SCR_AIGetCombatMoveRequestParameters_Move = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AIGetCombatMoveRequestParameters.c;20|SCR_AIGetCombatMoveRequestParameters_Move}} | SCR_AIGetCombatMoveRequestParametersBase = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AIGetCombatMoveRequestParameters.c;1|SCR_AIGetCombatMoveRequestParametersBase}} | SCR_AIGetCombatMoveState = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AIGetCombatMoveState.c;1|SCR_AIGetCombatMoveState}} | SCR_AIGetCompartmentEntityInComposition = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Vehicles/SCR_AIGetCompartmentEntityInComposition.c;1|SCR_AIGetCompartmentEntityInComposition}} | SCR_AIGetCoverIdleDuration = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AIGetCoverIdleDuration.c;1|SCR_AIGetCoverIdleDuration}} | SCR_AIGetCoverParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Covers/SCR_AIGetCoverParameters.c;1|SCR_AIGetCoverParameters}} | SCR_AIGetCurrentEnemy = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AICombatTargetGetterTask.c;79|SCR_AIGetCurrentEnemy}} | SCR_AIGetDefendActivityParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AIGetActionParameters.c;96|SCR_AIGetDefendActivityParameters}} | SCR_AIGetDefendBehaviorParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AIGetActionParameters.c;104|SCR_AIGetDefendBehaviorParameters}} | SCR_AIGetDefendWaypointParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Waypoints/SCR_AIGetDefendWaypointParameters.c;1|SCR_AIGetDefendWaypointParameters}} | SCR_AIGetEmptyCompartment = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Vehicles/SCR_AIGetEmptyCompartment.c;1|SCR_AIGetEmptyCompartment}} | SCR_AIGetEntityPosition = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Utils/SCR_AIGetEntityPosition.c;2|SCR_AIGetEntityPosition}} | SCR_AIGetEntityWaypointParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Waypoints/SCR_AIGetEntityWaypointParameters.c;1|SCR_AIGetEntityWaypointParameters}} | SCR_AIGetFailedNavlinkEntity = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Vehicles/SCR_AIGetFailedNavlinkEntity.c;1|SCR_AIGetFailedNavlinkEntity}} | SCR_AIGetFindFirePositionNextPos = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIFindFirePositionBehavior.c;68|SCR_AIGetFindFirePositionNextPos}} | SCR_AIGetFirePositionBehaviorParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIFindFirePositionBehavior.c;136|SCR_AIGetFirePositionBehaviorParameters}} | SCR_AIGetFireTimes = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Aiming/SCR_AIGetFireTimes.c;8|SCR_AIGetFireTimes}} | SCR_AIGetFollowActivityParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AIGetActionParameters.c;88|SCR_AIGetFollowActivityParameters}} | SCR_AIGetGetInActivityParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AIGetActionParameters.c;60|SCR_AIGetGetInActivityParameters}} | SCR_AIGetGetInVehicleBehaviorParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AIGetActionParameters.c;44|SCR_AIGetGetInVehicleBehaviorParameters}} | SCR_AIGetGetOutActivityParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AIGetActionParameters.c;71|SCR_AIGetGetOutActivityParameters}} | SCR_AIGetHealActivityParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIHealActivity.c;129|SCR_AIGetHealActivityParameters}} | SCR_AIGetHealWaitBehaviorParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AIGetActionParameters.c;152|SCR_AIGetHealWaitBehaviorParameters}} | SCR_AIGetInActivity = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIGetInActivity.c;1|SCR_AIGetInActivity}} | SCR_AIGetInNearestWaypointParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Waypoints/SCR_AIGetInNearestWaypointParameters.c;1|SCR_AIGetInNearestWaypointParameters}} | SCR_AIGetInVehicle = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIVehicleBehavior.c;48|SCR_AIGetInVehicle}} | SCR_AIGetInvestigateBehaviorParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AIGetActionParameters.c;144|SCR_AIGetInvestigateBehaviorParameters}} | SCR_AIGetLastSeenEnemy = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AICombatTargetGetterTask.c;98|SCR_AIGetLastSeenEnemy}} | SCR_AIGetLookParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AIGetLookParameters.c;1|SCR_AIGetLookParameters}} | SCR_AIGetMagazineWell = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Weapons/SCR_AIGetMagazineWell.c;1|SCR_AIGetMagazineWell}} | SCR_AIGetMedicHealBehaviorParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AIGetActionParameters.c;160|SCR_AIGetMedicHealBehaviorParameters}} | SCR_AIGetMoveActivityParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AIGetActionParameters.c;79|SCR_AIGetMoveActivityParameters}} | SCR_AIGetMoveFromDangerBehaviorParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AIGetActionParameters.c;168|SCR_AIGetMoveFromDangerBehaviorParameters}} | SCR_AIGetMoveFromUnsafeAreaBehaviorParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AIGetActionParameters.c;176|SCR_AIGetMoveFromUnsafeAreaBehaviorParameters}} | SCR_AIGetMoveIndividuallyBehaviorParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AIGetActionParameters.c;184|SCR_AIGetMoveIndividuallyBehaviorParameters}} | SCR_AIGetMuzzleMagazineWell = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Weapons/SCR_AIGetMuzzleMagazineWell.c;1|SCR_AIGetMuzzleMagazineWell}} | SCR_AIGetMyGroup = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Groups/SCR_AIGetMyGroup.c;6|SCR_AIGetMyGroup}} | SCR_AIGetObserveUnknownFireBehaviorParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIObserveUnknownFireBehavior.c;172|SCR_AIGetObserveUnknownFireBehaviorParameters}} | SCR_AIGetOutActivity = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIGetOutActivity.c;1|SCR_AIGetOutActivity}} | SCR_AIGetOutVehicle = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIVehicleBehavior.c;105|SCR_AIGetOutVehicle}} | SCR_AIGetOutVehicleBehaviorParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AIGetActionParameters.c;52|SCR_AIGetOutVehicleBehaviorParameters}} | SCR_AIGetOverwatchMembers = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Groups/SCR_AIGetOverwatchMembers.c;1|SCR_AIGetOverwatchMembers}} | SCR_AIGetPerformActionActivityParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AIGetActionParameters.c;128|SCR_AIGetPerformActionActivityParameters}} | SCR_AIGetPerformActionBehaviorParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AIGetActionParameters.c;120|SCR_AIGetPerformActionBehaviorParameters}} | SCR_AIGetPickupInventoryItemsParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIPickupInventoryItemsBehavior.c;60|SCR_AIGetPickupInventoryItemsParameters}} | SCR_AIGetPilotMoveFromIncomingVehicleBehaviorParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIMoveFromDanger.c;266|SCR_AIGetPilotMoveFromIncomingVehicleBehaviorParameters}} | SCR_AIGetPosForward = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Utils/SCR_AIGetPosForward.c;1|SCR_AIGetPosForward}} | SCR_AIGetPosForwardToTarget = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Utils/SCR_AIGetPosForwardToTarget.c;1|SCR_AIGetPosForwardToTarget}} | SCR_AIGetPositionAndRotation = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Utils/SCR_AIGetPositionAndDirection.c;1|SCR_AIGetPositionAndRotation}} | SCR_AIGetProvideAmmoBehaviorParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIProvideAmmoBehavior.c;73|SCR_AIGetProvideAmmoBehaviorParameters}} | SCR_AIGetRandomLookPosition = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Utils/SCR_AIGetRandomLookPosition.c;1|SCR_AIGetRandomLookPosition}} | SCR_AIGetRandomPoint = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Utils/SCR_AIGetRandomPoint.c;1|SCR_AIGetRandomPoint}} | SCR_AIGetRandomPointInCircularSector = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Utils/SCR_AIGetRandomPointInCircularSector.c;1|SCR_AIGetRandomPointInCircularSector}} | SCR_AIGetRandomPointWithExclude = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Utils/SCR_AIGetRandomPointWithExclude.c;1|SCR_AIGetRandomPointWithExclude}} | SCR_AIGetResupplyActivityParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AIGetActionParameters.c;136|SCR_AIGetResupplyActivityParameters}} | SCR_AIGetRetreatFromTargetBehaviorParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIRetreatBehavior.c;87|SCR_AIGetRetreatFromTargetBehaviorParameters}} | SCR_AIGetRetreatWhileLookAtBehaviorParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AIGetActionParameters.c;211|SCR_AIGetRetreatWhileLookAtBehaviorParameters}} | SCR_AIGetSidePosition = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Utils/SCR_AIGetSidePosition.c;1|SCR_AIGetSidePosition}} | SCR_AIGetSmartActionComponent = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Waypoints/SCR_AIGetSmartActionComponent.c;1|SCR_AIGetSmartActionComponent}} | SCR_AIGetSmartActionSentinelParams = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AIGetSmartActionSentinelParams.c;1|SCR_AIGetSmartActionSentinelParams}} | SCR_AIGetSmartActionsState = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Waypoints/SCR_AIGetSmartActionsState.c;1|SCR_AIGetSmartActionsState}} | SCR_AIGetSplinePoint = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Debug/SCR_AIGetSplinePoint.c;1|SCR_AIGetSplinePoint}} | SCR_AIGetStanceFromThreat = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AIGetStanceFromThreat.c;1|SCR_AIGetStanceFromThreat}} | SCR_AIGetStaticArtilleryBehaviorParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIStaticArtilleryBehavior.c;137|SCR_AIGetStaticArtilleryBehaviorParameters}} | SCR_AIGetSuppressActivityParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AIGetActionParameters.c;242|SCR_AIGetSuppressActivityParameters}} | SCR_AIGetSuppressBehaviorParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AIGetActionParameters.c;234|SCR_AIGetSuppressBehaviorParameters}} | SCR_AIGetSuppressionPosition = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Aiming/SCR_AIGetSuppressionPosition.c;1|SCR_AIGetSuppressionPosition}} | SCR_AIGetSuppressionVolumeCenterPosition = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Utils/SCR_AIGetSuppressionVolumePosition.c;2|SCR_AIGetSuppressionVolumeCenterPosition}} | SCR_AIGetSuppressionVolumeLine = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Utils/SCR_AIGetSuppressionVolumePosition.c;41|SCR_AIGetSuppressionVolumeLine}} | SCR_AIGetTarget = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AIGetTarget.c;1|SCR_AIGetTarget}} | SCR_AIGetTargetInfoProperties = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Utils/SCR_AIGetTargetInfoProperties.c;1|SCR_AIGetTargetInfoProperties}} | SCR_AIGetTargetSuppressionVolume = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Utils/SCR_AIGetTargetSuppressionVolume.c;1|SCR_AIGetTargetSuppressionVolume}} | SCR_AIGetThrowGrenadeToBehaviorParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AIGetActionParameters.c;219|SCR_AIGetThrowGrenadeToBehaviorParameters}} | SCR_AIGetTimedWaypointParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Waypoints/SCR_AIGetTimedWaypointProperties.c;1|SCR_AIGetTimedWaypointParameters}} | SCR_AIGetUsableVehicle = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Vehicles/SCR_AIGetUsableVehicle.c;1|SCR_AIGetUsableVehicle}} | SCR_AIGetVehicleWaypointParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Waypoints/SCR_AIGetVehicleWaypointParameters.c;1|SCR_AIGetVehicleWaypointParameters}} | SCR_AIGetWaypointParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Waypoints/SCR_AIGetWaypointParameters.c;1|SCR_AIGetWaypointParameters}} | SCR_AIGetWeaponOfType = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Weapons/SCR_AIGetWeaponOfType.c;1|SCR_AIGetWeaponOfType}} | SCR_AIGoalReaction = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/SCR_AIGoalReaction.c;5|SCR_AIGoalReaction}} | SCR_AIGoalReaction_Animate = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/SCR_AIGoalReaction.c;595|SCR_AIGoalReaction_Animate}} | SCR_AIGoalReaction_ArtillerySupport = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/SCR_AIGoalReaction.c;625|SCR_AIGoalReaction_ArtillerySupport}} | SCR_AIGoalReaction_Attack = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/SCR_AIGoalReaction.c;24|SCR_AIGoalReaction_Attack}} | SCR_AIGoalReaction_AttackCluster = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/SCR_AIGoalReaction.c;38|SCR_AIGoalReaction_AttackCluster}} | SCR_AIGoalReaction_AttackClusterDone = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/SCR_AIGoalReaction.c;105|SCR_AIGoalReaction_AttackClusterDone}} | SCR_AIGoalReaction_Cancel = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/SCR_AIGoalReaction.c;489|SCR_AIGoalReaction_Cancel}} | SCR_AIGoalReaction_CoverCluster = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/SCR_AIGoalReaction.c;118|SCR_AIGoalReaction_CoverCluster}} | SCR_AIGoalReaction_Defend = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/SCR_AIGoalReaction.c;398|SCR_AIGoalReaction_Defend}} | SCR_AIGoalReaction_FireIllumFlareAt = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/SCR_AIGoalReaction.c;527|SCR_AIGoalReaction_FireIllumFlareAt}} | SCR_AIGoalReaction_Follow = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/SCR_AIGoalReaction.c;164|SCR_AIGoalReaction_Follow}} | SCR_AIGoalReaction_GetInVehicle = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/SCR_AIGoalReaction.c;211|SCR_AIGoalReaction_GetInVehicle}} | SCR_AIGoalReaction_GetOutVehicle = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/SCR_AIGoalReaction.c;280|SCR_AIGoalReaction_GetOutVehicle}} | SCR_AIGoalReaction_Heal = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/SCR_AIGoalReaction.c;332|SCR_AIGoalReaction_Heal}} | SCR_AIGoalReaction_HealWait = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/SCR_AIGoalReaction.c;383|SCR_AIGoalReaction_HealWait}} | SCR_AIGoalReaction_Investigate = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/SCR_AIGoalReaction.c;180|SCR_AIGoalReaction_Investigate}} | SCR_AIGoalReaction_Move = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/SCR_AIGoalReaction.c;134|SCR_AIGoalReaction_Move}} | SCR_AIGoalReaction_MoveInFormation = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/SCR_AIGoalReaction.c;198|SCR_AIGoalReaction_MoveInFormation}} | SCR_AIGoalReaction_OpenNavlinkDoor = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/SCR_AIGoalReaction.c;460|SCR_AIGoalReaction_OpenNavlinkDoor}} | SCR_AIGoalReaction_PerformAction = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/SCR_AIGoalReaction.c;430|SCR_AIGoalReaction_PerformAction}} | SCR_AIGoalReaction_PickupInventoryItems = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/SCR_AIGoalReaction.c;565|SCR_AIGoalReaction_PickupInventoryItems}} | SCR_AIGoalReaction_ProvideAmmo = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/SCR_AIGoalReaction.c;549|SCR_AIGoalReaction_ProvideAmmo}} | SCR_AIGoalReaction_SeekAndDestroy = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/SCR_AIGoalReaction.c;316|SCR_AIGoalReaction_SeekAndDestroy}} | SCR_AIGoalReaction_Suppress = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/SCR_AIGoalReaction.c;581|SCR_AIGoalReaction_Suppress}} | SCR_AIGoalReaction_ThrowGrenadeTo = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/SCR_AIGoalReaction.c;513|SCR_AIGoalReaction_ThrowGrenadeTo}} | SCR_AIGroup = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/SCR_AIGroup.c;74|SCR_AIGroup}} | SCR_AIGroup_DelayedSpawn = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/SCR_AIGroup.c;62|SCR_AIGroup_DelayedSpawn}} | SCR_AIGroupAutonomyCheck = {{Link|enfusion://ScriptEditor/scripts/Game/TaskSolver/GroupCondition/SCR_AIGroupAutonomyCheck.c;1|SCR_AIGroupAutonomyCheck}} | SCR_AIGroupCharactersMovementSpeedSetting = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Settings/SCR_AIGroupCharactersMovementSpeedSetting.c;17|SCR_AIGroupCharactersMovementSpeedSetting}} | SCR_AIGroupCharactersMovementSpeedSettingBase = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Settings/SCR_AIGroupCharactersMovementSpeedSetting.c;3|SCR_AIGroupCharactersMovementSpeedSettingBase}} | SCR_AIGroupClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/SCR_AIGroup.c;10|SCR_AIGroupClass}} | SCR_AIGroupCohesionComponent = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AIGroupCohesionComponent.c;6|SCR_AIGroupCohesionComponent}} | SCR_AIGroupCohesionComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AIGroupCohesionComponent.c;1|SCR_AIGroupCohesionComponentClass}} | SCR_AIGroupCombatModeAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_AIGroupCombatModeAttribute.c;1|SCR_AIGroupCombatModeAttribute}} | SCR_AIGroupCombatModeSetting = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Settings/SCR_AIGroupCombatModeSetting.c;24|SCR_AIGroupCombatModeSetting}} | SCR_AIGroupCombatModeSettingBase = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Settings/SCR_AIGroupCombatModeSetting.c;1|SCR_AIGroupCombatModeSettingBase}} | SCR_AIGroupConditionCheck = {{Link|enfusion://ScriptEditor/scripts/Game/TaskSolver/GroupCondition/SCR_AIGroupConditionCheck.c;1|SCR_AIGroupConditionCheck}} | SCR_AIGroupConditionManager = {{Link|enfusion://ScriptEditor/scripts/Game/TaskSolver/GroupCondition/SCR_AIGroupConditionManager.c;1|SCR_AIGroupConditionManager}} | SCR_AIGroupFactionEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_AIGroupFactionEditorAttribute.c;5|SCR_AIGroupFactionEditorAttribute}} | SCR_AIGroupFireteam = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_AIGroupFireteam.c;3|SCR_AIGroupFireteam}} | SCR_AIGroupFireteamLock = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_AIGroupFireteamLock.c;9|SCR_AIGroupFireteamLock}} | SCR_AIGroupFireteamManager = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_AIGroupFireteamManager.c;6|SCR_AIGroupFireteamManager}} | SCR_AIGroupFireteamVehicleBase = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_AIGroupFireteam.c;134|SCR_AIGroupFireteamVehicleBase}} | SCR_AIGroupFireteamVehicleCargo = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_AIGroupFireteam.c;159|SCR_AIGroupFireteamVehicleCargo}} | SCR_AIGroupFireteamVehicleCrew = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_AIGroupFireteam.c;153|SCR_AIGroupFireteamVehicleCrew}} | SCR_AIGroupFormationSetting = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Settings/SCR_AIGroupFormationSetting.c;15|SCR_AIGroupFormationSetting}} | SCR_AIGroupFormationSettingBase = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Settings/SCR_AIGroupFormationSetting.c;1|SCR_AIGroupFormationSettingBase}} | SCR_AIGroupInfoComponent = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AIGroupInfoComponent.c;15|SCR_AIGroupInfoComponent}} | SCR_AIGroupInfoComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AIGroupInfoComponent.c;1|SCR_AIGroupInfoComponentClass}} | SCR_AIGroupMovementComponent = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AIGroupMovementComponent.c;5|SCR_AIGroupMovementComponent}} | SCR_AIGroupMovementComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AIGroupMovementComponent.c;1|SCR_AIGroupMovementComponentClass}} | SCR_AIGroupPerception = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_AIGroupPerception.c;13|SCR_AIGroupPerception}} | SCR_AIGroupSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Entities/SCR_AIGroupSerializer.c;1|SCR_AIGroupSerializer}} | SCR_AIGroupSetMovementSpeed = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AIGroupSetMovementSpeed.c;3|SCR_AIGroupSetMovementSpeed}} | SCR_AIGroupSetting = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Settings/SCR_AIGroupSetting.c;3|SCR_AIGroupSetting}} | SCR_AIGroupSettingsComponent = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AIGroupSettingsComponent.c;19|SCR_AIGroupSettingsComponent}} | SCR_AIGroupSettingsComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AIGroupSettingsComponent.c;1|SCR_AIGroupSettingsComponentClass}} | SCR_AIGroupSettingWithCause = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Settings/SCR_AIGroupSetting.c;18|SCR_AIGroupSettingWithCause}} | SCR_AIGroupSubordinationCheck = {{Link|enfusion://ScriptEditor/scripts/Game/TaskSolver/GroupCondition/SCR_AIGroupSubordinationCheck.c;1|SCR_AIGroupSubordinationCheck}} | SCR_AIGroupTargetCluster = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_AIGroupTargetCluster.c;41|SCR_AIGroupTargetCluster}} | SCR_AIGroupTargetClusterProcessor = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_AIGroupTargetClusterProcessor.c;6|SCR_AIGroupTargetClusterProcessor}} | SCR_AIGroupUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_AIGroupUIInfo.c;1|SCR_AIGroupUIInfo}} | SCR_AIGroupUtilityComponent = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AIGroupUtilityComponent.c;17|SCR_AIGroupUtilityComponent}} | SCR_AIGroupUtilityComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AIGroupUtilityComponent.c;12|SCR_AIGroupUtilityComponentClass}} | SCR_AIGroupUtilityComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/AI/SCR_AIGroupUtilityComponentSerializer.c;1|SCR_AIGroupUtilityComponentSerializer}} | SCR_AIGroupVehicle = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_AIGroupVehicle.c;2|SCR_AIGroupVehicle}} | SCR_AIGroupVehicleManager = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_AIGroupVehicleManager.c;1|SCR_AIGroupVehicleManager}} | SCR_AIHealActivity = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIHealActivity.c;1|SCR_AIHealActivity}} | SCR_AIHealActivitySmokeCoverFeature = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/ActivityFeatures/SCR_AIActivitySmokeCoverFeature.c;333|SCR_AIHealActivitySmokeCoverFeature}} | SCR_AIHealBehavior = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIHealingBehavior.c;4|SCR_AIHealBehavior}} | SCR_AIHealWaitBehavior = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIHealWaitBehavior.c;5|SCR_AIHealWaitBehavior}} | SCR_AIIdleActivity = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIActivity.c;105|SCR_AIIdleActivity}} | SCR_AIIdleBehavior = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIBehavior.c;101|SCR_AIIdleBehavior}} | SCR_AIIdleBehavior_Driver = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIIdleBehavior_Driver.c;1|SCR_AIIdleBehavior_Driver}} | SCR_AIIdleReaction = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/SCR_AIReactionBase.c;41|SCR_AIIdleReaction}} | SCR_AIInfoBaseComponent = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AIInfoBaseComponent.c;7|SCR_AIInfoBaseComponent}} | SCR_AIInfoBaseComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AIInfoBaseComponent.c;1|SCR_AIInfoBaseComponentClass}} | SCR_AIInfoComponent = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AIInfoComponent.c;45|SCR_AIInfoComponent}} | SCR_AIInfoComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AIInfoComponent.c;1|SCR_AIInfoComponentClass}} | SCR_AIInfoReaction = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/SCR_AIInfoReaction.c;5|SCR_AIInfoReaction}} | SCR_AIInfoReaction_FoundCorpse = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/SCR_AIInfoReaction.c;87|SCR_AIInfoReaction_FoundCorpse}} | SCR_AIInfoReaction_NoAmmo = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/SCR_AIInfoReaction.c;26|SCR_AIInfoReaction_NoAmmo}} | SCR_AIInfoReaction_UnderFire = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/SCR_AIInfoReaction.c;40|SCR_AIInfoReaction_UnderFire}} | SCR_AIInfoReaction_Wounded = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/SCR_AIInfoReaction.c;46|SCR_AIInfoReaction_Wounded}} | SCR_AIInspectWeapon = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Weapons/SCR_AIInspectWeapon.c;1|SCR_AIInspectWeapon}} | SCR_AIInvestigateClusterActivity = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/ClusterActivities/SCR_AIInvestigateClusterActivity.c;1|SCR_AIInvestigateClusterActivity}} | SCR_AIIsFriendlyInAim = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AIIsFriendlyInAim.c;1|SCR_AIIsFriendlyInAim}} | SCR_AIIsTargetVisible = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AIIsTargetVisible.c;2|SCR_AIIsTargetVisible}} | SCR_AIIsValidAction = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/SCR_AIIsValidAction.c;1|SCR_AIIsValidAction}} | SCR_AILeaveStaticVehicles = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Vehicles/SCR_AILeaveStaticVehicles.c;1|SCR_AILeaveStaticVehicles}} | SCR_AILimitStance = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AILimitStance.c;1|SCR_AILimitStance}} | SCR_AILookAction = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AILookAction.c;1|SCR_AILookAction}} | SCR_AILookAtPosition = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AILookAtPosition.c;1|SCR_AILookAtPosition}} | SCR_AILookAtThreatSystemLogic = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AILookAtThreatSystemLogic.c;4|SCR_AILookAtThreatSystemLogic}} | SCR_AIMedicHealBehavior = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIMedicHealBehavior.c;3|SCR_AIMedicHealBehavior}} | SCR_AIMessage_ActionFailed = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AIMessage.c;245|SCR_AIMessage_ActionFailed}} | SCR_AIMessage_Animate = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AIMessage.c;727|SCR_AIMessage_Animate}} | SCR_AIMessage_ArtillerySupport = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AIMessage.c;750|SCR_AIMessage_ArtillerySupport}} | SCR_AIMessage_Attack = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AIMessage.c;284|SCR_AIMessage_Attack}} | SCR_AIMessage_AttackCluster = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AIMessage.c;310|SCR_AIMessage_AttackCluster}} | SCR_AIMessage_AttackClusterDone = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AIMessage.c;329|SCR_AIMessage_AttackClusterDone}} | SCR_AIMessage_Cancel = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AIMessage.c;268|SCR_AIMessage_Cancel}} | SCR_AIMessage_CoverCluster = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AIMessage.c;343|SCR_AIMessage_CoverCluster}} | SCR_AIMessage_Defend = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AIMessage.c;510|SCR_AIMessage_Defend}} | SCR_AIMessage_FireIllumFlareAt = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AIMessage.c;688|SCR_AIMessage_FireIllumFlareAt}} | SCR_AIMessage_Flee = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AIMessage.c;659|SCR_AIMessage_Flee}} | SCR_AIMessage_Follow = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AIMessage.c;395|SCR_AIMessage_Follow}} | SCR_AIMessage_FoundCorpse = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AIMessage.c;187|SCR_AIMessage_FoundCorpse}} | SCR_AIMessage_GetIn = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AIMessage.c;613|SCR_AIMessage_GetIn}} | SCR_AIMessage_GetOut = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AIMessage.c;639|SCR_AIMessage_GetOut}} | SCR_AIMessage_Heal = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AIMessage.c;464|SCR_AIMessage_Heal}} | SCR_AIMessage_HealFailed = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AIMessage.c;256|SCR_AIMessage_HealFailed}} | SCR_AIMessage_HealWait = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AIMessage.c;548|SCR_AIMessage_HealWait}} | SCR_AIMessage_Investigate = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AIMessage.c;416|SCR_AIMessage_Investigate}} | SCR_AIMessage_KeepFormation = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AIMessage.c;351|SCR_AIMessage_KeepFormation}} | SCR_AIMessage_Move = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AIMessage.c;359|SCR_AIMessage_Move}} | SCR_AIMessage_NoAmmo = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AIMessage.c;136|SCR_AIMessage_NoAmmo}} | SCR_AIMessage_OpenNavlinkDoor = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AIMessage.c;597|SCR_AIMessage_OpenNavlinkDoor}} | SCR_AIMessage_PerformAction = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AIMessage.c;564|SCR_AIMessage_PerformAction}} | SCR_AIMessage_PickupInventoryItems = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AIMessage.c;492|SCR_AIMessage_PickupInventoryItems}} | SCR_AIMessage_ProvideAmmo = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AIMessage.c;474|SCR_AIMessage_ProvideAmmo}} | SCR_AIMessage_Retreat = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AIMessage.c;540|SCR_AIMessage_Retreat}} | SCR_AIMessage_SeekAndDestroy = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AIMessage.c;456|SCR_AIMessage_SeekAndDestroy}} | SCR_AIMessage_SitRep = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AIMessage.c;235|SCR_AIMessage_SitRep}} | SCR_AIMessage_Suppress = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AIMessage.c;705|SCR_AIMessage_Suppress}} | SCR_AIMessage_Target = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AIMessage.c;113|SCR_AIMessage_Target}} | SCR_AIMessage_ThrowGrenadeTo = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AIMessage.c;667|SCR_AIMessage_ThrowGrenadeTo}} | SCR_AIMessage_UnderFire = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AIMessage.c;167|SCR_AIMessage_UnderFire}} | SCR_AIMessage_Vehicle = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AIMessage.c;607|SCR_AIMessage_Vehicle}} | SCR_AIMessage_Wounded = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AIMessage.c;207|SCR_AIMessage_Wounded}} | SCR_AIMessageBase = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AIMessage.c;49|SCR_AIMessageBase}} | SCR_AIMessageGoal = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AIMessage.c;74|SCR_AIMessageGoal}} | SCR_AIMessageHandling = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Utils/SCR_AIUtils.c;527|SCR_AIMessageHandling}} | SCR_AIMessageInfo = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AIMessage.c;100|SCR_AIMessageInfo}} | SCR_AIMessageSelectionMenuEntry = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SelectionMenu/Entries/SCR_AIMessageSelectionMenuEntry.c;1|SCR_AIMessageSelectionMenuEntry}} | SCR_AIMessageVisualization = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Debug/SCR_AIMessageVisualization.c;1|SCR_AIMessageVisualization}} | SCR_AIMoveActivity = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIMoveActivity.c;1|SCR_AIMoveActivity}} | SCR_AIMoveAndInvestigateBehavior = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIMoveBehavior.c;74|SCR_AIMoveAndInvestigateBehavior}} | SCR_AIMoveBehaviorBase = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIMoveBehavior.c;1|SCR_AIMoveBehaviorBase}} | SCR_AIMoveFromDangerBehavior = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIMoveFromDanger.c;4|SCR_AIMoveFromDangerBehavior}} | SCR_AIMoveFromGrenadeBehavior = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIMoveFromDanger.c;65|SCR_AIMoveFromGrenadeBehavior}} | SCR_AIMoveFromIncomingVehicleBehavior = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIMoveFromDanger.c;120|SCR_AIMoveFromIncomingVehicleBehavior}} | SCR_AIMoveFromUnsafeAreaBehavior = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIMoveFromDanger.c;52|SCR_AIMoveFromUnsafeAreaBehavior}} | SCR_AIMoveFromVehicleHornBehavior = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIMoveFromDanger.c;199|SCR_AIMoveFromVehicleHornBehavior}} | SCR_AIMoveIndividuallyBehavior = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIMoveBehavior.c;51|SCR_AIMoveIndividuallyBehavior}} | SCR_AIMoveInFormationBehavior = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIMoveBehavior.c;21|SCR_AIMoveInFormationBehavior}} | SCR_AIMovementDetector = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AIMovementDetector.c;8|SCR_AIMovementDetector}} | SCR_AiMovementSpeedEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_AIMovementSpeedEditorAttribute.c;1|SCR_AiMovementSpeedEditorAttribute}} | SCR_AimSensitivitySettings = {{Link|enfusion://ScriptEditor/scripts/Game/Global/SCR_ControllerSettings.c;1|SCR_AimSensitivitySettings}} | SCR_AINodePortsHelpers = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Utils/SCR_AIUtils.c;3|SCR_AINodePortsHelpers}} | SCR_AIObserveThreatSystemBehavior = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIObserveThreatSystemBehavior.c;2|SCR_AIObserveThreatSystemBehavior}} | SCR_AIObserveThreatSystemReaction = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/SCR_AIReactionBase.c;59|SCR_AIObserveThreatSystemReaction}} | SCR_AIObserveUnknownFireBehavior = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIObserveUnknownFireBehavior.c;8|SCR_AIObserveUnknownFireBehavior}} | SCR_AIOccupyDriversInUsedVehicles = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Vehicles/SCR_AIOccupyDriversInUsedVehicles.c;1|SCR_AIOccupyDriversInUsedVehicles}} | SCR_AIOccupyMovableVehicles = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Vehicles/SCR_AIOccupyMovableVehicles.c;1|SCR_AIOccupyMovableVehicles}} | SCR_AIOnCommsStateChangedInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Talk/SCR_AICommsHandler.c;9|SCR_AIOnCommsStateChangedInvoker}} | SCR_AIOnWaypointPropertiesChange = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Groups/SCR_AIOnWaypointPropertiesChange.c;1|SCR_AIOnWaypointPropertiesChange}} | SCR_AIOpenDoor = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AIOpenDoor.c;1|SCR_AIOpenDoor}} | SCR_AIOrder_AIState = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Orders/SCR_AIOrder.c;164|SCR_AIOrder_AIState}} | SCR_AIOrder_MovementType = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Orders/SCR_AIOrder.c;96|SCR_AIOrder_MovementType}} | SCR_AIOrder_ReturnToDefault = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Orders/SCR_AIOrder.c;122|SCR_AIOrder_ReturnToDefault}} | SCR_AIOrder_Stance = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Orders/SCR_AIOrder.c;36|SCR_AIOrder_Stance}} | SCR_AIOrder_Unit_State = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Orders/SCR_AIOrder.c;190|SCR_AIOrder_Unit_State}} | SCR_AIOrder_WeaponRaised = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Orders/SCR_AIOrder.c;69|SCR_AIOrder_WeaponRaised}} | SCR_AIOrder_WeaponType = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Orders/SCR_AIOrder.c;138|SCR_AIOrder_WeaponType}} | SCR_AIOrderBase = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Orders/SCR_AIOrder.c;14|SCR_AIOrderBase}} | SCR_AIPerformActionActivity = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIPerformActionActivity.c;1|SCR_AIPerformActionActivity}} | SCR_AIPerformActionBehavior = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIPerformActionBehavior.c;1|SCR_AIPerformActionBehavior}} | SCR_AIPerformSmartHealing = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AIPerformSmartHealing.c;1|SCR_AIPerformSmartHealing}} | SCR_AIPerformSmartUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AIPerformSmartuserAction.c;1|SCR_AIPerformSmartUserAction}} | SCR_AIPickMagazines = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Inventory/SCR_AIPickMagazines.c;1|SCR_AIPickMagazines}} | SCR_AIPickupInventoryItemsBehavior = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIPickupInventoryItemsBehavior.c;1|SCR_AIPickupInventoryItemsBehavior}} | SCR_AIPilotMoveFromIncomingVehicleBehavior = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIMoveFromDanger.c;210|SCR_AIPilotMoveFromIncomingVehicleBehavior}} | SCR_AIPlayAnimation = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Waypoints/SCR_AIPlayAnimation.c;1|SCR_AIPlayAnimation}} | SCR_AIPlayItemGesture = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AIPlayItemGesture.c;1|SCR_AIPlayItemGesture}} | SCR_AIPolar = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_AIGroupTargetCluster.c;1|SCR_AIPolar}} | SCR_AIPrintDebug = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Debug/SCR_AIPrintDebug.c;2|SCR_AIPrintDebug}} | SCR_AIProcessCombatMoveRequest = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AIProcessCombatMoveRequest.c;5|SCR_AIProcessCombatMoveRequest}} | SCR_AIProcessFailedMovementResult = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Groups/SCR_AIProcessFailedMovementResult.c;2|SCR_AIProcessFailedMovementResult}} | SCR_AIProcessOrder = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Orders/SCR_AIProcessOrder.c;1|SCR_AIProcessOrder}} | SCR_AIProvideAmmoBehavior = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIProvideAmmoBehavior.c;4|SCR_AIProvideAmmoBehavior}} | SCR_AIReactionBase = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/SCR_AIReactionBase.c;5|SCR_AIReactionBase}} | SCR_AIRemoveStuckVehicle = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Vehicles/SCR_AIRemoveStuckVehicle.c;1|SCR_AIRemoveStuckVehicle}} | SCR_AIRemoveVehicleFromGetInActivity = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Waypoints/SCR_AIRemoveVehicleFromGetInActivity.c;1|SCR_AIRemoveVehicleFromGetInActivity}} | SCR_AIRemoveVehicleFromGroup = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Waypoints/SCR_AIRemoveVehicleFromGroup.c;1|SCR_AIRemoveVehicleFromGroup}} | SCR_AIResetCombatMoveState = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AIResetCombatMoveState.c;1|SCR_AIResetCombatMoveState}} | SCR_AIResupplyActivity = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIResupplyActivity.c;1|SCR_AIResupplyActivity}} | SCR_AIRetreatFromTargetBehavior = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIRetreatBehavior.c;55|SCR_AIRetreatFromTargetBehavior}} | SCR_AIRetreatWhileLookAtBehavior = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIRetreatBehavior.c;1|SCR_AIRetreatWhileLookAtBehavior}} | SCR_AirstrikePrototype = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/SCR_AirstrikePrototype.c;7|SCR_AirstrikePrototype}} | SCR_AirstrikePrototypeClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/SCR_AirstrikePrototype.c;1|SCR_AirstrikePrototypeClass}} | SCR_AIScenarioFrameworkDummyPriorityAction = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIScenarioFrameworkPriorityAction.c;1|SCR_AIScenarioFrameworkDummyPriorityAction}} | SCR_AiScriptGenerator_Class = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_AiScriptGeneratorPlugin.c;914|SCR_AiScriptGenerator_Class}} | SCR_AiScriptGenerator_ClassGeneratorBase = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_AiScriptGeneratorPlugin.c;600|SCR_AiScriptGenerator_ClassGeneratorBase}} | SCR_AiScriptGenerator_OutputFormatBuffer = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_AiScriptGeneratorPlugin.c;569|SCR_AiScriptGenerator_OutputFormatBuffer}} | SCR_AiScriptGenerator_Parser = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_AiScriptGeneratorPlugin.c;126|SCR_AiScriptGenerator_Parser}} | SCR_AiScriptGenerator_SendGoalMessageGenerator = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_AiScriptGeneratorPlugin.c;815|SCR_AiScriptGenerator_SendGoalMessageGenerator}} | SCR_AiScriptGenerator_SendInfoMessageGenerator = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_AiScriptGeneratorPlugin.c;770|SCR_AiScriptGenerator_SendInfoMessageGenerator}} | SCR_AiScriptGenerator_SendOrderGenerator = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_AiScriptGeneratorPlugin.c;869|SCR_AiScriptGenerator_SendOrderGenerator}} | SCR_AiScriptGenerator_Variable = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_AiScriptGeneratorPlugin.c;937|SCR_AiScriptGenerator_Variable}} | SCR_AIScriptGeneratorConfig = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptGenerator/SCR_AIScriptGeneratorConfig.c;1|SCR_AIScriptGeneratorConfig}} | SCR_AiScriptGeneratorPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_AiScriptGeneratorPlugin.c;8|SCR_AiScriptGeneratorPlugin}} | SCR_AISearchAndDestroyActivity = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AISearchAndDestroyActivity.c;1|SCR_AISearchAndDestroyActivity}} | SCR_AISectorThreatFilter = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AISectorThreatFilter.c;94|SCR_AISectorThreatFilter}} | SCR_AISelectDoorOperatorAgent = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Vehicles/SCR_AISelectDoorOperatorAgent.c;1|SCR_AISelectDoorOperatorAgent}} | SCR_AISelectFireMode = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AiSelectFireMode.c;1|SCR_AISelectFireMode}} | SCR_AISemaphoreIn = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Semaphores/SCR_AISemaphoreIn.c;1|SCR_AISemaphoreIn}} | SCR_AISendGoalMessage = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AISendGoalMessage.c;2|SCR_AISendGoalMessage}} | SCR_AISendGoalMessage_Animate = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Generated/SendGoalMessage.c;1397|SCR_AISendGoalMessage_Animate}} | SCR_AISendGoalMessage_ArtillerySupport = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Generated/SendGoalMessage.c;1458|SCR_AISendGoalMessage_ArtillerySupport}} | SCR_AISendGoalMessage_Attack = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Generated/SendGoalMessage.c;55|SCR_AISendGoalMessage_Attack}} | SCR_AISendGoalMessage_AttackCluster = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Generated/SendGoalMessage.c;110|SCR_AISendGoalMessage_AttackCluster}} | SCR_AISendGoalMessage_AttackClusterDone = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Generated/SendGoalMessage.c;168|SCR_AISendGoalMessage_AttackClusterDone}} | SCR_AISendGoalMessage_Cancel = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Generated/SendGoalMessage.c;3|SCR_AISendGoalMessage_Cancel}} | SCR_AISendGoalMessage_Defend = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Generated/SendGoalMessage.c;750|SCR_AISendGoalMessage_Defend}} | SCR_AISendGoalMessage_FireIllumFlareAt = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Generated/SendGoalMessage.c;1281|SCR_AISendGoalMessage_FireIllumFlareAt}} | SCR_AISendGoalMessage_Flee = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Generated/SendGoalMessage.c;1168|SCR_AISendGoalMessage_Flee}} | SCR_AISendGoalMessage_Follow = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Generated/SendGoalMessage.c;344|SCR_AISendGoalMessage_Follow}} | SCR_AISendGoalMessage_GetIn = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Generated/SendGoalMessage.c;1041|SCR_AISendGoalMessage_GetIn}} | SCR_AISendGoalMessage_GetOut = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Generated/SendGoalMessage.c;1110|SCR_AISendGoalMessage_GetOut}} | SCR_AISendGoalMessage_Heal = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Generated/SendGoalMessage.c;579|SCR_AISendGoalMessage_Heal}} | SCR_AISendGoalMessage_HealWait = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Generated/SendGoalMessage.c;865|SCR_AISendGoalMessage_HealWait}} | SCR_AISendGoalMessage_Investigate = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Generated/SendGoalMessage.c;419|SCR_AISendGoalMessage_Investigate}} | SCR_AISendGoalMessage_KeepFormation = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Generated/SendGoalMessage.c;220|SCR_AISendGoalMessage_KeepFormation}} | SCR_AISendGoalMessage_Move = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Generated/SendGoalMessage.c;272|SCR_AISendGoalMessage_Move}} | SCR_AISendGoalMessage_OpenNavlinkDoor = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Generated/SendGoalMessage.c;986|SCR_AISendGoalMessage_OpenNavlinkDoor}} | SCR_AISendGoalMessage_PerformAction = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Generated/SendGoalMessage.c;920|SCR_AISendGoalMessage_PerformAction}} | SCR_AISendGoalMessage_PickupInventoryItems = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Generated/SendGoalMessage.c;692|SCR_AISendGoalMessage_PickupInventoryItems}} | SCR_AISendGoalMessage_ProvideAmmo = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Generated/SendGoalMessage.c;634|SCR_AISendGoalMessage_ProvideAmmo}} | SCR_AISendGoalMessage_Retreat = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Generated/SendGoalMessage.c;813|SCR_AISendGoalMessage_Retreat}} | SCR_AISendGoalMessage_SeekAndDestroy = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Generated/SendGoalMessage.c;507|SCR_AISendGoalMessage_SeekAndDestroy}} | SCR_AISendGoalMessage_Suppress = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Generated/SendGoalMessage.c;1336|SCR_AISendGoalMessage_Suppress}} | SCR_AISendGoalMessage_ThrowGrenadeTo = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Generated/SendGoalMessage.c;1220|SCR_AISendGoalMessage_ThrowGrenadeTo}} | SCR_AISendGoalMessageGenerated = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptGenerator/SCR_AISendGoalMessageGenerated.c;1|SCR_AISendGoalMessageGenerated}} | SCR_AISendInfoMessage = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AISendInfoMessage.c;2|SCR_AISendInfoMessage}} | SCR_AISendInfoMessage_FoundCorpse = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Generated/SendInfoMessage.c;93|SCR_AISendInfoMessage_FoundCorpse}} | SCR_AISendInfoMessage_HealFailed = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Generated/SendInfoMessage.c;180|SCR_AISendInfoMessage_HealFailed}} | SCR_AISendInfoMessage_NoAmmo = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Generated/SendInfoMessage.c;32|SCR_AISendInfoMessage_NoAmmo}} | SCR_AISendInfoMessage_SitRep = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Generated/SendInfoMessage.c;154|SCR_AISendInfoMessage_SitRep}} | SCR_AISendInfoMessage_Target = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Generated/SendInfoMessage.c;3|SCR_AISendInfoMessage_Target}} | SCR_AISendInfoMessage_UnderFire = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Generated/SendInfoMessage.c;64|SCR_AISendInfoMessage_UnderFire}} | SCR_AISendInfoMessage_Wounded = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Generated/SendInfoMessage.c;122|SCR_AISendInfoMessage_Wounded}} | SCR_AISendMessage_ActionFailed = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AISendInfoMessage.c;20|SCR_AISendMessage_ActionFailed}} | SCR_AISendMessage_HealFailed = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AISendInfoMessage.c;45|SCR_AISendMessage_HealFailed}} | SCR_AISendMessageBase = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AISendMessage.c;2|SCR_AISendMessageBase}} | SCR_AISendMessageDebugUI = {{Link|enfusion://ScriptEditor/scripts/Game/AI/SCR_AISendMessageDebugUI.c;10|SCR_AISendMessageDebugUI}} | SCR_AISendMessageDebugUIClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/SCR_AISendMessageDebugUI.c;1|SCR_AISendMessageDebugUIClass}} | SCR_AISendMessageGenerated = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptGenerator/SCR_AISendMessageGenerated.c;1|SCR_AISendMessageGenerated}} | SCR_AISendMessageGeneric = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AISendMessage.c;73|SCR_AISendMessageGeneric}} | SCR_AISendOrder = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Orders/SCR_AISendOrder.c;2|SCR_AISendOrder}} | SCR_AISendOrder_AIState = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Generated/SendOrder.c;185|SCR_AISendOrder_AIState}} | SCR_AISendOrder_MovementType = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Generated/SendOrder.c;81|SCR_AISendOrder_MovementType}} | SCR_AISendOrder_ReturnToDefault = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Generated/SendOrder.c;120|SCR_AISendOrder_ReturnToDefault}} | SCR_AISendOrder_Stance = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Generated/SendOrder.c;3|SCR_AISendOrder_Stance}} | SCR_AISendOrder_UnitState = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Generated/SendOrder.c;224|SCR_AISendOrder_UnitState}} | SCR_AISendOrder_WeaponRaised = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Generated/SendOrder.c;42|SCR_AISendOrder_WeaponRaised}} | SCR_AISendOrder_WeaponType = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Generated/SendOrder.c;146|SCR_AISendOrder_WeaponType}} | SCR_AISendOrderGenerated = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptGenerator/SCR_AISendOrderGenerated.c;1|SCR_AISendOrderGenerated}} | SCR_AISetActionParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AISetActionParameters.c;7|SCR_AISetActionParameters}} | SCR_AISetAIState = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AISetAIState.c;1|SCR_AISetAIState}} | SCR_AISetAttackBehaviorParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AISetActionParameters.c;47|SCR_AISetAttackBehaviorParameters}} | SCR_AISetBehaviorAllowLook = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AISetBehaviorAllowLook.c;1|SCR_AISetBehaviorAllowLook}} | SCR_AISetBehaviorInterruptable = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AISetBehaviorInterruptable.c;1|SCR_AISetBehaviorInterruptable}} | SCR_AISetBipod = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Weapons/SCR_AISetBipod.c;1|SCR_AISetBipod}} | SCR_AISetCarHandBrake = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Vehicles/SCR_AISetCarHandBrake.c;1|SCR_AISetCarHandBrake}} | SCR_AISetCombatMoveRequestFailReason = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AISetCombatMoveRequestState.c;36|SCR_AISetCombatMoveRequestFailReason}} | SCR_AISetCombatMoveRequestState = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AISetCombatMoveRequestState.c;1|SCR_AISetCombatMoveRequestState}} | SCR_AISetCombatMoveState = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AISetCombatMoveState.c;1|SCR_AISetCombatMoveState}} | SCR_AISetCompartmentAccessible = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Vehicles/SCR_AISetCompartmentAccessible.c;1|SCR_AISetCompartmentAccessible}} | SCR_AISetDefendActivityParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AISetActionParameters.c;40|SCR_AISetDefendActivityParameters}} | SCR_AISetDefendWaypointParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Waypoints/SCR_AISetDefendWaypointParameters.c;1|SCR_AISetDefendWaypointParameters}} | SCR_AISetGadgetRaisedMode = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AISetGadgetRaisedMode.c;1|SCR_AISetGadgetRaisedMode}} | SCR_AISetGetInActivityParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AISetActionParameters.c;33|SCR_AISetGetInActivityParameters}} | SCR_AISetGroupControlMode = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Groups/SCR_AISetGroupControlMode.c;1|SCR_AISetGroupControlMode}} | SCR_AISetGroupFormation = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Groups/SCR_AISetGroupFromation.c;1|SCR_AISetGroupFormation}} | SCR_AISetHealActivityParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIHealActivity.c;137|SCR_AISetHealActivityParameters}} | SCR_AISetInvestigateBehaviorParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIMoveBehavior.c;128|SCR_AISetInvestigateBehaviorParameters}} | SCR_AISetMoveActivityParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AISetActionParameters.c;26|SCR_AISetMoveActivityParameters}} | SCR_AISetObserveUnknownFireBehaviorParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIObserveUnknownFireBehavior.c;181|SCR_AISetObserveUnknownFireBehaviorParameters}} | SCR_AISetPosition = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Utils/SCR_AISetPosition.c;6|SCR_AISetPosition}} | SCR_AISetSmartActionReserved = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SetSmartActionReserved.c;1|SCR_AISetSmartActionReserved}} | SCR_AISetStance = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AISetStance.c;3|SCR_AISetStance}} | SCR_AISetStaticArtilleryBehaviorParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIStaticArtilleryBehavior.c;145|SCR_AISetStaticArtilleryBehaviorParameters}} | SCR_AISettingBase = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Settings/SCR_AISetting.c;88|SCR_AISettingBase}} | SCR_AISettingOriginPriorityTable = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Settings/SCR_AISetting.c;25|SCR_AISettingOriginPriorityTable}} | SCR_AISettingsBaseComponent = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AISettingsBaseComponent.c;23|SCR_AISettingsBaseComponent}} | SCR_AISettingsBaseComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AISettingsBaseComponent.c;2|SCR_AISettingsBaseComponentClass}} | SCR_AISettingsComponent = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AISettingsComponent.c;7|SCR_AISettingsComponent}} | SCR_AISettingsComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AISettingsComponent.c;1|SCR_AISettingsComponentClass}} | SCR_AISetVehicleLights = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Vehicles/SCR_AISetVehicleLights.c;1|SCR_AISetVehicleLights}} | SCR_AISetWeaponRaised = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AISetWeaponRaised.c;1|SCR_AISetWeaponRaised}} | SCR_AIShootStaticArtillery = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Weapons/SCR_AIShootStaticArtillery.c;1|SCR_AIShootStaticArtillery}} | SCR_AiSkillEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_AISkillEditorAttribute.c;1|SCR_AiSkillEditorAttribute}} | SCR_AISmartActionComponent = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AISmartActionComponent.c;9|SCR_AISmartActionComponent}} | SCR_AISmartActionComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AISmartActionComponent.c;1|SCR_AISmartActionComponentClass}} | SCR_AISmartActionHandling = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Utils/SCR_AIUtils.c;499|SCR_AISmartActionHandling}} | SCR_AISmartActionSentinelComponent = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AISmartActionSentinelComponent.c;12|SCR_AISmartActionSentinelComponent}} | SCR_AISmartActionSentinelComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AISmartActionSentinelComponent.c;1|SCR_AISmartActionSentinelComponentClass}} | SCR_AISmartActionSystem = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/SCR_AISmartActionSystem.c;1|SCR_AISmartActionSystem}} | SCR_AISoundHandling = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Talk/SCR_AISoundHandling.c;30|SCR_AISoundHandling}} | SCR_AISpawnerGroupFaction = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/AISpawnerGroupFaction.c;8|SCR_AISpawnerGroupFaction}} | SCR_AISpawnerGroupFactionClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/AISpawnerGroupFaction.c;2|SCR_AISpawnerGroupFactionClass}} | SCR_AISpawnMagazines = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Inventory/SCR_AISpawnMagazines.c;1|SCR_AISpawnMagazines}} | SCR_AiStanceEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_AIStanceEditorAttribute.c;1|SCR_AiStanceEditorAttribute}} | SCR_AIStanceHandling = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Utils/SCR_AIUtils.c;77|SCR_AIStanceHandling}} | SCR_AIStateTooltipDetail = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_AIStateTooltipDetail.c;1|SCR_AIStateTooltipDetail}} | SCR_AIStaticArtilleryActivity = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIStaticArtilleryActivity.c;1|SCR_AIStaticArtilleryActivity}} | SCR_AIStaticArtilleryBehavior = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIStaticArtilleryBehavior.c;8|SCR_AIStaticArtilleryBehavior}} | SCR_AIStaticArtilleryBehavior_OnArtilleryFired = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIStaticArtilleryBehavior.c;1|SCR_AIStaticArtilleryBehavior_OnArtilleryFired}} | SCR_AIStaticArtilleryBehavior_ShootingLogic = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIStaticArtilleryBehavior.c;156|SCR_AIStaticArtilleryBehavior_ShootingLogic}} | SCR_AIStaticArtilleryVehicleUsageComponent = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AIStaticArtilleryVehicleUsageComponent.c;37|SCR_AIStaticArtilleryVehicleUsageComponent}} | SCR_AIStaticArtilleryVehicleUsageComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AIStaticArtilleryVehicleUsageComponent.c;9|SCR_AIStaticArtilleryVehicleUsageComponentClass}} | SCR_AISuppressActivity = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AISuppressActivity.c;1|SCR_AISuppressActivity}} | SCR_AISuppressBehavior = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AISuppressBehavior.c;5|SCR_AISuppressBehavior}} | SCR_AISuppressGroupClusterBehavior = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AISuppressBehavior.c;56|SCR_AISuppressGroupClusterBehavior}} | SCR_AISuppressionObjectVolumeBox = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Utils/SCR_AISuppressionVolume.c;428|SCR_AISuppressionObjectVolumeBox}} | SCR_AISuppressionVolumeBase = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Utils/SCR_AISuppressionVolume.c;3|SCR_AISuppressionVolumeBase}} | SCR_AISuppressionVolumeBaseTargetBox = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Utils/SCR_AISuppressionVolume.c;466|SCR_AISuppressionVolumeBaseTargetBox}} | SCR_AISuppressionVolumeBox = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Utils/SCR_AISuppressionVolume.c;296|SCR_AISuppressionVolumeBox}} | SCR_AISuppressionVolumeClusterBox = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Utils/SCR_AISuppressionVolume.c;512|SCR_AISuppressionVolumeClusterBox}} | SCR_AISuppressionVolumeSphere = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Utils/SCR_AISuppressionVolume.c;374|SCR_AISuppressionVolumeSphere}} | SCR_AISuppressionVolumeWaypoint = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Utils/SCR_AISuppressionVolume.c;551|SCR_AISuppressionVolumeWaypoint}} | SCR_AISuspendAction = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Behavior/SCR_AISuspendAction.c;1|SCR_AISuspendAction}} | SCR_AISwitchMagazine = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Weapons/SCR_AISwitchMagazine.c;1|SCR_AISwitchMagazine}} | SCR_AISwitchMuzzle = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Weapons/SCR_AISwitchMuzzle.c;1|SCR_AISwitchMuzzle}} | SCR_AISwitchWeapon = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Weapons/SCR_AISwitchWeapon.c;37|SCR_AISwitchWeapon}} | SCR_AISwitchWeaponMovedCallback = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Weapons/SCR_AISwitchWeapon.c;1|SCR_AISwitchWeaponMovedCallback}} | SCR_AITakeGadgetInLeftHand = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AITakeGadgetInLeftHand.c;1|SCR_AITakeGadgetInLeftHand}} | SCR_AITakeItemFromArsenal = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Inventory/SCR_AITakeItemFromArsenal.c;19|SCR_AITakeItemFromArsenal}} | SCR_AITakeItemFromArsenal_InventoryCallback = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Inventory/SCR_AITakeItemFromArsenal.c;1|SCR_AITakeItemFromArsenal_InventoryCallback}} | SCR_AITalk = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Messages/SCR_AITalk.c;1|SCR_AITalk}} | SCR_AITalkRequest = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Talk/SCR_AITalkRequest.c;18|SCR_AITalkRequest}} | SCR_AITargetClusterState = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_AITargetClusterState.c;16|SCR_AITargetClusterState}} | SCR_AITargetInfo = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AITargetInfo.c;15|SCR_AITargetInfo}} | SCR_AITargetInfoPolar = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_AIGroupTargetCluster.c;31|SCR_AITargetInfoPolar}} | SCR_AITargetReaction_RetreatFromEnemy = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/SCR_AITargetReaction.c;33|SCR_AITargetReaction_RetreatFromEnemy}} | SCR_AITargetReaction_SelectedTargetChanged = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/SCR_AITargetReaction.c;57|SCR_AITargetReaction_SelectedTargetChanged}} | SCR_AITargetReaction_SelectedTargetChangedBase = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/SCR_AITargetReaction.c;11|SCR_AITargetReaction_SelectedTargetChangedBase}} | SCR_AITargetReaction_Unknown = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/SCR_AITargetReaction.c;22|SCR_AITargetReaction_Unknown}} | SCR_AITargetReactionBase = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/SCR_AITargetReaction.c;4|SCR_AITargetReactionBase}} | SCR_AITaskTimer = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Logical/SCR_AITaskTimer.c;1|SCR_AITaskTimer}} | SCR_AITaskTimerGate = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Logical/SCR_AITaskTimerGate.c;1|SCR_AITaskTimerGate}} | SCR_AIThreatSector = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AISectorThreatFilter.c;12|SCR_AIThreatSector}} | SCR_AIThreatStateChangedCallback = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AIThreatSystem.c;13|SCR_AIThreatStateChangedCallback}} | SCR_AIThreatStateChangedInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AIThreatSystem.c;15|SCR_AIThreatStateChangedInvoker}} | SCR_AIThreatSystem = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AIThreatSystem.c;17|SCR_AIThreatSystem}} | SCR_AIThrowGrenadeToBehavior = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIThrowGrenadeToBehavior.c;1|SCR_AIThrowGrenadeToBehavior}} | SCR_AITimedWaypointParameters = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_TimedWaypoint.c;5|SCR_AITimedWaypointParameters}} | SCR_AIToggleFlashlights = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Inventory/SCR_AIToggleFlashlights.c;1|SCR_AIToggleFlashlights}} | SCR_AIToggleFlashlightsOnAbort = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Inventory/SCR_AIToggleFlashlights.c;110|SCR_AIToggleFlashlightsOnAbort}} | SCR_AIToggleFlashlightsOnSimulate = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Inventory/SCR_AIToggleFlashlights.c;90|SCR_AIToggleFlashlightsOnSimulate}} | SCR_AIToggleMaxLOD = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AIToggleMaxLOD.c;1|SCR_AIToggleMaxLOD}} | SCR_AIUnEquipItems = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AIUnEquipItems.c;1|SCR_AIUnEquipItems}} | SCR_AIUpdateCombatMoveStateTimers = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AIUpdateCombatMoveStateTimers.c;1|SCR_AIUpdateCombatMoveStateTimers}} | SCR_AIUpdateExecutedAction = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/SCR_AIUpdateExecutedAction.c;2|SCR_AIUpdateExecutedAction}} | SCR_AIUpdateTargetAttackData = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AIUpdateTargetAttackData.c;1|SCR_AIUpdateTargetAttackData}} | SCR_AIUpdateTargetSuppressionData = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Soldier/SCR_AIUpdateTargetSuppressionData.c;1|SCR_AIUpdateTargetSuppressionData}} | SCR_AIUtilityComponent = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AIUtilityComponent.c;6|SCR_AIUtilityComponent}} | SCR_AIUtilityComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AIUtilityComponent.c;1|SCR_AIUtilityComponentClass}} | SCR_AIUtils = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Utils/SCR_AIUtils.c;666|SCR_AIUtils}} | SCR_AIVehicleBehavior = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIVehicleBehavior.c;9|SCR_AIVehicleBehavior}} | SCR_AIVehicleCombatActivity = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIVehicleCombatActivity.c;2|SCR_AIVehicleCombatActivity}} | SCR_AIVehicleUsability = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Utils/SCR_AIUtils.c;253|SCR_AIVehicleUsability}} | SCR_AIVehicleUsageComponent = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AIVehicleUsageComponent.c;29|SCR_AIVehicleUsageComponent}} | SCR_AIVehicleUsageComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AIVehicleUsageComponent.c;16|SCR_AIVehicleUsageComponentClass}} | SCR_AIVisualizeDebug = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Debug/SCR_AIVisualizeDebug.c;2|SCR_AIVisualizeDebug}} | SCR_AIWaitBehavior = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIBehavior.c;85|SCR_AIWaitBehavior}} | SCR_AIWaitCombatMoveRequest = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AIWaitCombatMoveRequest.c;1|SCR_AIWaitCombatMoveRequest}} | SCR_AIWaitForNewCombatComponentWeapon = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Weapons/SCR_AIWaitForNewCombatComponentWeapon.c;5|SCR_AIWaitForNewCombatComponentWeapon}} | SCR_AIWaitReaction = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Reaction/SCR_AIReactionBase.c;29|SCR_AIWaitReaction}} | SCR_AIWaypoint = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_AIWaypoint.c;5|SCR_AIWaypoint}} | SCR_AIWaypointArtillerySupport = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_AIWaypointArtillerySupport.c;5|SCR_AIWaypointArtillerySupport}} | SCR_AIWaypointArtillerySupportAmmoTypeAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_AIWaypointArtillerySupportAmmoTypeAttribute.c;1|SCR_AIWaypointArtillerySupportAmmoTypeAttribute}} | SCR_AIWaypointArtillerySupportClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_AIWaypointArtillerySupport.c;1|SCR_AIWaypointArtillerySupportClass}} | SCR_AIWaypointArtillerySupportSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Entities/SCR_AIWaypointArtillerySupportSerializer.c;1|SCR_AIWaypointArtillerySupportSerializer}} | SCR_AIWaypointArtillerySupportShotCountAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_AIWaypointArtillerySupportShotCountAttribute.c;1|SCR_AIWaypointArtillerySupportShotCountAttribute}} | SCR_AIWaypointArtillerySupportState = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_AIWaypointArtillerySupport.c;70|SCR_AIWaypointArtillerySupportState}} | SCR_AIWaypointClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_AIWaypoint.c;1|SCR_AIWaypointClass}} | SCR_AIWaypointState = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_AIWaypointState.c;6|SCR_AIWaypointState}} | SCR_AIWeaponHandling = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Utils/SCR_AIUtils.c;298|SCR_AIWeaponHandling}} | SCR_AIWeaponHandlingBase = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Weapons/SCR_AIWeaponHandlingBase.c;2|SCR_AIWeaponHandlingBase}} | SCR_AIWeaponTypeHandlingConfig = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Configs/SCR_AIWeaponTypeHandlingConfig.c;1|SCR_AIWeaponTypeHandlingConfig}} | SCR_AIWeaponTypeSelectionConfig = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Configs/SCR_AIWeaponTypeSelectionConfig.c;1|SCR_AIWeaponTypeSelectionConfig}} | SCR_AIWorld = {{Link|enfusion://ScriptEditor/scripts/Game/AI/SCR_AIWorld.c;23|SCR_AIWorld}} | SCR_AIWorldClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/SCR_AIWorld.c;7|SCR_AIWorldClass}} | SCR_AIWorldHandling = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Utils/SCR_AIUtils.c;599|SCR_AIWorldHandling}} | SCR_AllFilterSetsStorage = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/Common/SCR_FilterSet.c;295|SCR_AllFilterSetsStorage}} | SCR_AllowEntityRefundActionEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_AllowEntityRefundActionEditorAttribute.c;1|SCR_AllowEntityRefundActionEditorAttribute}} | SCR_AlternativeModel = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_AlternativeModel.c;1|SCR_AlternativeModel}} | SCR_AlternativeRequirementsDeployablePart = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_AlternativeRequirementsDeployablePart.c;1|SCR_AlternativeRequirementsDeployablePart}} | SCR_AmbientInsectsComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_AmbientInsectsComponent.c;18|SCR_AmbientInsectsComponent}} | SCR_AmbientInsectsComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_AmbientInsectsComponent.c;12|SCR_AmbientInsectsComponentClass}} | SCR_AmbientInsectsEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_AmbientInsectEffect.c;1|SCR_AmbientInsectsEffect}} | SCR_AmbientPatrolSpawnPointComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Locations/SCR_AmbientPatrolSpawnPointComponent.c;24|SCR_AmbientPatrolSpawnPointComponent}} | SCR_AmbientPatrolSpawnPointComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Locations/SCR_AmbientPatrolSpawnPointComponent.c;1|SCR_AmbientPatrolSpawnPointComponentClass}} | SCR_AmbientPatrolSpawnPointComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/GameMode/Conflict/SCR_AmbientPatrolSpawnPointComponentSerializer.c;1|SCR_AmbientPatrolSpawnPointComponentSerializer}} | SCR_AmbientPatrolSystem = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/SCR_AmbientPatrolSystem.c;2|SCR_AmbientPatrolSystem}} | SCR_AmbientRadioChatterComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_AmbientRadioChatterComponent.c;5|SCR_AmbientRadioChatterComponent}} | SCR_AmbientRadioChatterComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_AmbientRadioChatterComponent.c;1|SCR_AmbientRadioChatterComponentClass}} | SCR_AmbientSoundsComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AmbientSoundsComponent/SCR_AmbientSoundsComponent.c;17|SCR_AmbientSoundsComponent}} | SCR_AmbientSoundsComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AmbientSoundsComponent/SCR_AmbientSoundsComponent.c;12|SCR_AmbientSoundsComponentClass}} | SCR_AmbientSoundsEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AmbientSoundsComponent/SCR_AmbientSoundsEffect.c;1|SCR_AmbientSoundsEffect}} | SCR_AmbientSoundToggleEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_AmbientSoundToggleEditorAttribute.c;4|SCR_AmbientSoundToggleEditorAttribute}} | SCR_AmbientVehicleSpawnPointComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Locations/SCR_AmbientVehicleSpawnPointComponent.c;5|SCR_AmbientVehicleSpawnPointComponent}} | SCR_AmbientVehicleSpawnPointComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Locations/SCR_AmbientVehicleSpawnPointComponent.c;1|SCR_AmbientVehicleSpawnPointComponentClass}} | SCR_AmbientVehicleSpawnPointComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/GameMode/Conflict/SCR_AmbientVehicleSpawnPointComponentSerializer.c;1|SCR_AmbientVehicleSpawnPointComponentSerializer}} | SCR_AmbientVehicleSystem = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/SCR_AmbientVehicleSystem.c;7|SCR_AmbientVehicleSystem}} | SCR_AmmoTypeIcon = {{Link|enfusion://ScriptEditor/scripts/Game/UI/WeaponInfo/SCR_AmmoTypeIcon.c;1|SCR_AmmoTypeIcon}} | SCR_AmmoTypeInfoConfig = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_AmmoTypeInfoConfig.c;1|SCR_AmmoTypeInfoConfig}} | SCR_AmmoTypeInfoConfigEntry = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_AmmoTypeInfoConfig.c;42|SCR_AmmoTypeInfoConfigEntry}} | SCR_AnalogGauge = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/VehicleInfo/SCR_AnalogGauge.c;2|SCR_AnalogGauge}} | SCR_AnalogGauge360 = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/VehicleInfo/SCR_AnalogGauge360.c;2|SCR_AnalogGauge360}} | SCR_AnalogGauge360Small = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/VehicleInfo/SCR_AnalogGauge360Small.c;2|SCR_AnalogGauge360Small}} | SCR_AnalogGaugeMultiSignal = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/VehicleInfo/SCR_AnalogGaugeMultiSignal.c;3|SCR_AnalogGaugeMultiSignal}} | SCR_AnalogGaugeNonLinear = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/VehicleInfo/SCR_AnalogGaugeNonLinear.c;2|SCR_AnalogGaugeNonLinear}} | SCR_AnalogGaugeSmall = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/VehicleInfo/SCR_AnalogGaugeSmall.c;2|SCR_AnalogGaugeSmall}} | SCR_AnalogGaugeUni = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/VehicleInfo/SCR_AnalogGaugeUni.c;2|SCR_AnalogGaugeUni}} | SCR_AnalyticsApplication = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/ApplicationData/SCR_AnalyticsApplication.c;43|SCR_AnalyticsApplication}} | SCR_AnalyticsData = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/ApplicationData/SCR_AnalyticsApplicationData.c;14|SCR_AnalyticsData}} | SCR_AnalyticsDataCollectionAiGroupCostModule = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/AnalyticsDataCollectionModules/SCR_AnalyticsDataCollectionAiGroupCostModule.c;1|SCR_AnalyticsDataCollectionAiGroupCostModule}} | SCR_AnalyticsDataCollectionComponent = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/SCR_AnalyticsDataCollectionComponent.c;6|SCR_AnalyticsDataCollectionComponent}} | SCR_AnalyticsDataCollectionComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/SCR_AnalyticsDataCollectionComponent.c;1|SCR_AnalyticsDataCollectionComponentClass}} | SCR_AnalyticsDataCollectionCompositionCostModule = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/AnalyticsDataCollectionModules/SCR_AnalyticsDataCollectionCompositionCostModule.c;1|SCR_AnalyticsDataCollectionCompositionCostModule}} | SCR_AnalyticsDataCollectionHelper = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/SCR_AnalyticsDataCollectionHelper.c;1|SCR_AnalyticsDataCollectionHelper}} | SCR_AnalyticsDataCollectionLoadoutCostModule = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/AnalyticsDataCollectionModules/SCR_AnalyticsDataCollectionLoadoutCostModule.c;1|SCR_AnalyticsDataCollectionLoadoutCostModule}} | SCR_AnalyticsDataCollectionMilitaryBaseEventsModule = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/AnalyticsDataCollectionModules/SCR_AnalyticsDataCollectionMilitaryBaseEventsModule.c;1|SCR_AnalyticsDataCollectionMilitaryBaseEventsModule}} | SCR_AnalyticsDataCollectionModule = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/SCR_AnalyticsDataCollectionModule.c;1|SCR_AnalyticsDataCollectionModule}} | SCR_AnalyticsDataCollectionPlayerFactionModule = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/AnalyticsDataCollectionModules/SCR_AnalyticsDataCollectionPlayerFactionModule.c;1|SCR_AnalyticsDataCollectionPlayerFactionModule}} | SCR_AnalyticsDataCollectionPlayerGroupsModule = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/AnalyticsDataCollectionModules/SCR_AnalyticsDataCollectionPlayerGroupsModule.c;1|SCR_AnalyticsDataCollectionPlayerGroupsModule}} | SCR_AnalyticsDataCollectionPlayerKicksModule = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/AnalyticsDataCollectionModules/SCR_AnalyticsDataCollectionPlayerKicksModule.c;1|SCR_AnalyticsDataCollectionPlayerKicksModule}} | SCR_AnalyticsDataCollectionSupplyCostBaseModule = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/AnalyticsDataCollectionModules/SCR_AnalyticsDataCollectionSupplyCostBaseModule.c;1|SCR_AnalyticsDataCollectionSupplyCostBaseModule}} | SCR_AnalyticsDataCollectionTimeAndWeatherModule = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/AnalyticsDataCollectionModules/SCR_AnalyticsDataCollectionTimeAndWeatherModule.c;1|SCR_AnalyticsDataCollectionTimeAndWeatherModule}} | SCR_AnalyticsDataCollectionTransferSuppliesModule = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/AnalyticsDataCollectionModules/SCR_AnalyticsDataCollectionTransferSuppliesModule.c;20|SCR_AnalyticsDataCollectionTransferSuppliesModule}} | SCR_AnalyticsDataCollectionTutorialCompletionModule = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/AnalyticsDataCollectionModules/SCR_AnalyticsDataCollectionTutorialCompletionModule.c;1|SCR_AnalyticsDataCollectionTutorialCompletionModule}} | SCR_AnalyticsDataCollectionVehicleCostModule = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/AnalyticsDataCollectionModules/SCR_AnalyticsDataCollectionVehicleCostModule.c;1|SCR_AnalyticsDataCollectionVehicleCostModule}} | SCR_AnalyticsDataCollectionVoNDataModule = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/AnalyticsDataCollectionModules/SCR_AnalyticsDataCollectionVoNDataModule.c;1|SCR_AnalyticsDataCollectionVoNDataModule}} | SCR_AnalyticsDataCollectionXPEventsModule = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/AnalyticsDataCollectionModules/SCR_AnalyticsDataCollectionXPEventsModule.c;1|SCR_AnalyticsDataCollectionXPEventsModule}} | SCR_AnalyticsDelayedSend = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/ApplicationData/SCR_AnalyticsDelayedSend.c;10|SCR_AnalyticsDelayedSend}} | SCR_AnalyticsInteractions = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/ApplicationData/SCR_AnalyticsInteractions.c;3|SCR_AnalyticsInteractions}} | SCR_AnalyticsInventory = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/ApplicationData/SCR_AnalyticsInventory.c;1|SCR_AnalyticsInventory}} | SCR_AnalyticsPlayerSupplySpendingData = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/AnalyticsPlayerData/SCR_AnalyticsPlayerSupplySpendingData.c;1|SCR_AnalyticsPlayerSupplySpendingData}} | SCR_AnalyticsPlayerXPData = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/AnalyticsPlayerData/SCR_AnalyticsPlayerXPData.c;1|SCR_AnalyticsPlayerXPData}} | SCR_AnalyticsSettings = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/ApplicationData/SCR_AnalyticsSettings.c;1|SCR_AnalyticsSettings}} | SCR_AnalyticsTimer = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/ApplicationData/SCR_AnalyticsTimer.c;1|SCR_AnalyticsTimer}} | SCR_ANDCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Logic/SCR_ANDCondition.c;3|SCR_ANDCondition}} | SCR_AnimatedBeltComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/SCR_AnimatedBeltComponent.c;23|SCR_AnimatedBeltComponent}} | SCR_AnimatedBeltComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/SCR_AnimatedBeltComponent.c;1|SCR_AnimatedBeltComponentClass}} | SCR_AnimatedBeltSystem = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/SCR_AnimatedBeltSystem.c;5|SCR_AnimatedBeltSystem}} | SCR_AnimatedFallDamageEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/DamageEffects/CharacterDamageEffects/SCR_AnimatedFallDamageEffect.c;1|SCR_AnimatedFallDamageEffect}} | SCR_AntennaServicePointComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Components/SCR_AntennaServicePointComponent.c;5|SCR_AntennaServicePointComponent}} | SCR_AntennaServicePointComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Components/SCR_AntennaServicePointComponent.c;1|SCR_AntennaServicePointComponentClass}} | SCR_AntiPersonnelMineCollisionHandlerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_AntiPersonnelMineCollisionHandlerComponent.c;5|SCR_AntiPersonnelMineCollisionHandlerComponent}} | SCR_AntiPersonnelMineCollisionHandlerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_AntiPersonnelMineCollisionHandlerComponent.c;1|SCR_AntiPersonnelMineCollisionHandlerComponentClass}} | SCR_AnyInvalidSpawnPointRequestResultInfo = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SpawnPointRequestResult/SCR_AnyInvalidSpawnPointRequestResultInfo.c;2|SCR_AnyInvalidSpawnPointRequestResultInfo}} | SCR_ApplicableMedicalItemPredicate = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_InventoryStorageManagerComponent.c;73|SCR_ApplicableMedicalItemPredicate}} | SCR_AreaGeneratorBaseEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/SCR_AreaGeneratorBaseEntity.c;7|SCR_AreaGeneratorBaseEntity}} | SCR_AreaGeneratorBaseEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/SCR_AreaGeneratorBaseEntity.c;1|SCR_AreaGeneratorBaseEntityClass}} | SCR_AreaPropsConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapPropsConfig.c;461|SCR_AreaPropsConfig}} | SCR_AreaTypeProps = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapPropsConfig.c;493|SCR_AreaTypeProps}} | SCR_AreaViewTitle = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapPropsConfig.c;514|SCR_AreaViewTitle}} | SCR_ArmExplosiveChargeWithRemoteFuzeAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_ArmExplosiveChargeWithRemoteFuzeAction.c;1|SCR_ArmExplosiveChargeWithRemoteFuzeAction}} | SCR_ArmExplosiveChargeWithTimedFuzeAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_ArmExplosiveChargeWithTimedFuzeAction.c;1|SCR_ArmExplosiveChargeWithTimedFuzeAction}} | SCR_ArmorDamageManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Damage/SCR_ArmorDamageManagerComponent.c;5|SCR_ArmorDamageManagerComponent}} | SCR_ArmorDamageManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Damage/SCR_ArmorDamageManagerComponent.c;1|SCR_ArmorDamageManagerComponentClass}} | SCR_ArmoredClothItemData = {{Link|enfusion://ScriptEditor/scripts/GameCode/Components/InventorySystem/SCR_ArmoredClothItemData.c;1|SCR_ArmoredClothItemData}} | SCR_ArmorHitZone = {{Link|enfusion://ScriptEditor/scripts/Game/HitZone/SCR_ArmorHitZone.c;2|SCR_ArmorHitZone}} | SCR_ArmoryComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_ArmoryComponent.c;6|SCR_ArmoryComponent}} | SCR_ArmoryComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_ArmoryComponent.c;1|SCR_ArmoryComponentClass}} | SCR_ArrayHelper = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_ArrayHelper.c;1|SCR_ArrayHelper}} | SCR_ArrayHelperRefT = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_ArrayHelper.c;225|SCR_ArrayHelperRefT}} | SCR_ArrayHelperT = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_ArrayHelper.c;48|SCR_ArrayHelperT}} | SCR_ArsenalAlternativeCostData = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Arsenal/SCR_ArsenalItem.c;351|SCR_ArsenalAlternativeCostData}} | SCR_ArsenalAlternativeCostSellAmountData = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Arsenal/SCR_ArsenalItem.c;367|SCR_ArsenalAlternativeCostSellAmountData}} | SCR_ArsenalAmmunitionModeAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_ArsenalAmmunitionModeAttribute.c;1|SCR_ArsenalAmmunitionModeAttribute}} | SCR_ArsenalBaseEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_ArsenalBaseEditorAttribute.c;1|SCR_ArsenalBaseEditorAttribute}} | SCR_ArsenalComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Arsenal/SCR_ArsenalComponent.c;9|SCR_ArsenalComponent}} | SCR_ArsenalComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Arsenal/SCR_ArsenalComponent.c;1|SCR_ArsenalComponentClass}} | SCR_ArsenalComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/SCR_ArsenalComponentSerializer.c;1|SCR_ArsenalComponentSerializer}} | SCR_ArsenalDisplayComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Arsenal/SCR_ArsenalDisplayComponent.c;5|SCR_ArsenalDisplayComponent}} | SCR_ArsenalDisplayComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Arsenal/SCR_ArsenalDisplayComponent.c;1|SCR_ArsenalDisplayComponentClass}} | SCR_ArsenalEnabledTypesEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_ArsenalEnabledTypesEditorAttribute.c;1|SCR_ArsenalEnabledTypesEditorAttribute}} | SCR_ArsenalEquipmentEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_ArsenalEquipmentEditorAttribute.c;1|SCR_ArsenalEquipmentEditorAttribute}} | SCR_ArsenalFactionEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_ArsenalFactionEditorAttribute.c;2|SCR_ArsenalFactionEditorAttribute}} | SCR_ArsenalGameModeTypeEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_ArsenalGameModeTypeEditorAttribute.c;1|SCR_ArsenalGameModeTypeEditorAttribute}} | SCR_ArsenalGameModeUIData = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Loadout/SCR_ArsenalManagerComponent.c;1595|SCR_ArsenalGameModeUIData}} | SCR_ArsenalGameModeUIDataHolder = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Loadout/SCR_ArsenalManagerComponent.c;1547|SCR_ArsenalGameModeUIDataHolder}} | SCR_ArsenalInventorySlotUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_ArsenalInventorySlotUI.c;2|SCR_ArsenalInventorySlotUI}} | SCR_ArsenalInventoryStorageManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Arsenal/SCR_ArsenalInventoryStorageManagerComponent.c;5|SCR_ArsenalInventoryStorageManagerComponent}} | SCR_ArsenalInventoryStorageManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Arsenal/SCR_ArsenalInventoryStorageManagerComponent.c;1|SCR_ArsenalInventoryStorageManagerComponentClass}} | SCR_ArsenalItem = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Arsenal/SCR_ArsenalItem.c;1|SCR_ArsenalItem}} | SCR_ArsenalItemAlternativeRefundAmount = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Arsenal/SCR_ArsenalItemAlternativeRefundAmount.c;1|SCR_ArsenalItemAlternativeRefundAmount}} | SCR_ArsenalItemCountConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Arsenal/SCR_ArsenalItemCountConfig.c;1|SCR_ArsenalItemCountConfig}} | SCR_ArsenalItemDisplayData = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Arsenal/SCR_ArsenalItemDisplayData.c;1|SCR_ArsenalItemDisplayData}} | SCR_ArsenalItemListConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Arsenal/SCR_ArsenalItemListConfig.c;1|SCR_ArsenalItemListConfig}} | SCR_ArsenalItemRankHintUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_ArsenalItemRankHintUIInfo.c;1|SCR_ArsenalItemRankHintUIInfo}} | SCR_ArsenalItemStandalone = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Arsenal/SCR_ArsenalItemStandalone.c;2|SCR_ArsenalItemStandalone}} | SCR_ArsenalItemTypeUI = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Arsenal/SCR_ArsenalItemTypeUIConfig.c;33|SCR_ArsenalItemTypeUI}} | SCR_ArsenalItemTypeUIConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Arsenal/SCR_ArsenalItemTypeUIConfig.c;1|SCR_ArsenalItemTypeUIConfig}} | SCR_ArsenalManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Loadout/SCR_ArsenalManagerComponent.c;28|SCR_ArsenalManagerComponent}} | SCR_ArsenalManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Loadout/SCR_ArsenalManagerComponent.c;22|SCR_ArsenalManagerComponentClass}} | SCR_ArsenalManagerComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/GameMode/SCR_ArsenalManagerComponentSerializer.c;1|SCR_ArsenalManagerComponentSerializer}} | SCR_ArsenalOutfitEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_ArsenalOutfitEditorAttribute.c;1|SCR_ArsenalOutfitEditorAttribute}} | SCR_ArsenalPlayerLoadout = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Loadout/SCR_ArsenalManagerComponent.c;1|SCR_ArsenalPlayerLoadout}} | SCR_ArsenalRefundEffectComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/ArsenalRefundEffects/SCR_ArsenalRefundEffectComponent.c;126|SCR_ArsenalRefundEffectComponent}} | SCR_ArsenalRefundEffectComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/ArsenalRefundEffects/SCR_ArsenalRefundEffectComponent.c;1|SCR_ArsenalRefundEffectComponentClass}} | SCR_ArsenalSaveTypeAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_ArsenalSaveTypeAttribute.c;1|SCR_ArsenalSaveTypeAttribute}} | SCR_ArsenalSaveTypeAttributeDynamicDescription = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/DynamicDescriptions/SCR_ArsenalSaveTypeAttributeDynamicDescription.c;2|SCR_ArsenalSaveTypeAttributeDynamicDescription}} | SCR_ArsenalSaveTypeInfo = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Loadout/SCR_ArsenalSaveTypeInfoHolder.c;63|SCR_ArsenalSaveTypeInfo}} | SCR_ArsenalSaveTypeInfoHolder = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Loadout/SCR_ArsenalSaveTypeInfoHolder.c;1|SCR_ArsenalSaveTypeInfoHolder}} | SCR_ArsenalSaveTypeTooltipDetail = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_ArsenalSaveTypeTooltipDetail.c;1|SCR_ArsenalSaveTypeTooltipDetail}} | SCR_ArsenalSaveTypeUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_ArsenalSaveTypeUIInfo.c;1|SCR_ArsenalSaveTypeUIInfo}} | SCR_ArsenalWeaponRackEquipmentEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_ArsenalWeaponRackEquipmentEditorAttribute.c;1|SCR_ArsenalWeaponRackEquipmentEditorAttribute}} | SCR_ArsenalWeaponRackWeaponsEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_ArsenalWeaponRackWeaponsEditorAttribute.c;1|SCR_ArsenalWeaponRackWeaponsEditorAttribute}} | SCR_ArsenalWeaponsEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_ArsenalWeaponsEditorAttribute.c;1|SCR_ArsenalWeaponsEditorAttribute}} | SCR_ArtilleryWaypointCommandHandler = {{Link|enfusion://ScriptEditor/scripts/Game/Commanding/Commands/SCR_ArtilleryWaypointCommandHandler.c;1|SCR_ArtilleryWaypointCommandHandler}} | SCR_ArtilleryWaypointGroupCommand = {{Link|enfusion://ScriptEditor/scripts/Game/Commanding/Commands/SCR_ArtilleryWaypointGroupCommand.c;1|SCR_ArtilleryWaypointGroupCommand}} | SCR_AssetBrowserAccessEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_AssetBrowserAccessEditorUIComponent.c;3|SCR_AssetBrowserAccessEditorUIComponent}} | SCR_AssetBrowserContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_AssetBrowserContextAction.c;1|SCR_AssetBrowserContextAction}} | SCR_AssetCardFrontUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/AssetCardComponents/SCR_AssetCardFrontUIComponent.c;4|SCR_AssetCardFrontUIComponent}} | SCR_AssignedGroupLabelUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Tasks/SCR_AssignedGroupLabelUIComponent.c;1|SCR_AssignedGroupLabelUIComponent}} | SCR_AssignedGroupLabelWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Tasks/SCR_AssignedGroupLabelWidgets.c;3|SCR_AssignedGroupLabelWidgets}} | SCR_AssignedPlayerLabelUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Tasks/SCR_AssignedPlayerLabelUIComponent.c;1|SCR_AssignedPlayerLabelUIComponent}} | SCR_AssignedPlayerLabelWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Tasks/SCR_AssignedPlayerLabelWidgets.c;3|SCR_AssignedPlayerLabelWidgets}} | SCR_ATLManualCameraComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_ATLManualCameraComponent.c;9|SCR_ATLManualCameraComponent}} | SCR_AttachableTask = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_AttachableTask.c;6|SCR_AttachableTask}} | SCR_AttachableTaskClass = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_AttachableTask.c;1|SCR_AttachableTaskClass}} | SCR_AttachementAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_AttachementAction.c;9|SCR_AttachementAction}} | SCR_AttachEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_AttachManualCameraComponent.c;209|SCR_AttachEntity}} | SCR_AttachEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_AttachManualCameraComponent.c;205|SCR_AttachEntityClass}} | SCR_AttachItemFromInventoryAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_AttachItemFromInventoryAction.c;3|SCR_AttachItemFromInventoryAction}} | SCR_AttachManualCameraComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_AttachManualCameraComponent.c;4|SCR_AttachManualCameraComponent}} | SCR_AttachPylonSupportStationAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SupportStations/SCR_AttachPylonSupportStationAction.c;1|SCR_AttachPylonSupportStationAction}} | SCR_AttachToEntityToolbarAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ToolbarActions/SCR_AttachToEntityToolbarAction.c;2|SCR_AttachToEntityToolbarAction}} | SCR_AttachToParentContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/Placeholder/SCR_AttachToParentContextAction.c;1|SCR_AttachToParentContextAction}} | SCR_AttackTaskEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Campaign/SCR_AttackTaskEntity.c;5|SCR_AttackTaskEntity}} | SCR_AttackTaskEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Campaign/SCR_AttackTaskEntity.c;1|SCR_AttackTaskEntityClass}} | SCR_AttributeButtonUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Attributes/SCR_AttributeButtonUIComponent.c;1|SCR_AttributeButtonUIComponent}} | SCR_AttributeDescriptionUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Attributes/SCR_AttributeDescriptionUIComponent.c;3|SCR_AttributeDescriptionUIComponent}} | SCR_AttributesButtonEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_AttributesButtonEditorUIComponent.c;1|SCR_AttributesButtonEditorUIComponent}} | SCR_AttributesEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_AttributesEditorUIComponent.c;3|SCR_AttributesEditorUIComponent}} | SCR_AttributesHelper = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_AttributesHelper.c;1|SCR_AttributesHelper}} | SCR_AttributesManagerEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_AttributesManagerEditorComponent.c;54|SCR_AttributesManagerEditorComponent}} | SCR_AttributesManagerEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_AttributesManagerEditorComponent.c;1|SCR_AttributesManagerEditorComponentClass}} | SCR_AttributeTickboxUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Attributes/SCR_AttributeTickboxUIComponent.c;4|SCR_AttributeTickboxUIComponent}} | SCR_AudioHandleLoop = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AmbientSoundsComponent/SCR_AudioHandleLoop.c;1|SCR_AudioHandleLoop}} | SCR_AudioSettings = {{Link|enfusion://ScriptEditor/scripts/Game/Global/SCR_GameplaySettings.c;84|SCR_AudioSettings}} | SCR_AudioSettingsSubMenu = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SettingsMenu/SCR_AudioSettingsSubMenu.c;1|SCR_AudioSettingsSubMenu}} | SCR_AudioSource = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Sound/SCR_AudioSource.c;12|SCR_AudioSource}} | SCR_AudioSourceConfiguration = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Sound/SCR_AudioSourceConfiguration.c;10|SCR_AudioSourceConfiguration}} | SCR_AutocompletePlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_AutocompletePlugin.c;27|SCR_AutocompletePlugin}} | SCR_AutocompletePlugin_AttributeData = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_AutocompletePlugin.c;909|SCR_AutocompletePlugin_AttributeData}} | SCR_AutocompletePlugin_KeywordData = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_AutocompletePlugin.c;879|SCR_AutocompletePlugin_KeywordData}} | SCR_AutomatedWeatherEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_AutomatedWeatherEditorAttribute.c;2|SCR_AutomatedWeatherEditorAttribute}} | SCR_AutomaticScrollComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SettingsMenu/SCR_AutomaticScrollComponent.c;1|SCR_AutomaticScrollComponent}} | SCR_AutoSpawnerTool = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_AutoSpawnerTool.c;2|SCR_AutoSpawnerTool}} | SCR_AutoSpawnLogic = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/Logic/SCR_AutoSpawnLogic.c;5|SCR_AutoSpawnLogic}} | SCR_AutotestCaseBase = {{Link|enfusion://ScriptEditor/scripts/Game/Tests/TestFramework/SCR_AutotestCaseBase.c;5|SCR_AutotestCaseBase}} | SCR_AutotestCommonFixture = {{Link|enfusion://ScriptEditor/scripts/Game/Tests/TestFramework/SCR_AutotestCommonFixture.c;2|SCR_AutotestCommonFixture}} | SCR_AutotestGroup = {{Link|enfusion://ScriptEditor/scripts/Game/Tests/TestFramework/SCR_AutotestGroup.c;2|SCR_AutotestGroup}} | SCR_AutotestHarness = {{Link|enfusion://ScriptEditor/scripts/Game/Tests/TestFramework/SCR_AutotestHarness.c;23|SCR_AutotestHarness}} | SCR_AutotestHelper = {{Link|enfusion://ScriptEditor/scripts/Game/Tests/TestFramework/SCR_AutotestHelper.c;3|SCR_AutotestHelper}} | SCR_AutotestPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/Tests/SCR_AutotestPlugin.c;2|SCR_AutotestPlugin}} | SCR_AutotestPrinter = {{Link|enfusion://ScriptEditor/scripts/Game/Tests/TestFramework/SCR_AutotestPrinter.c;6|SCR_AutotestPrinter}} | SCR_AutotestReport = {{Link|enfusion://ScriptEditor/scripts/Game/Tests/TestFramework/SCR_AutotestReport.c;2|SCR_AutotestReport}} | SCR_AutotestResult = {{Link|enfusion://ScriptEditor/scripts/Game/Tests/TestFramework/SCR_AutotestResult.c;4|SCR_AutotestResult}} | SCR_AutotestRunnerCore = {{Link|enfusion://ScriptEditor/scripts/Game/Tests/TestFramework/SCR_AutotestRunnerCore.c;10|SCR_AutotestRunnerCore}} | SCR_AutotestSuiteBase = {{Link|enfusion://ScriptEditor/scripts/Game/Tests/TestFramework/SCR_AutotestSuiteBase.c;6|SCR_AutotestSuiteBase}} | SCR_AutotestTool = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/Tests/SCR_AutotestTool.c;2|SCR_AutotestTool}} | SCR_AutotuneStickyNotificationUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/Notification/SCR_AutotuneRadioStickyNotificationUIComponent.c;1|SCR_AutotuneStickyNotificationUIComponent}} | SCR_AvailableActionCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/SCR_AvailableActionsCondition.c;2|SCR_AvailableActionCondition}} | SCR_AvailableActionContext = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/SCR_AvailableActionsDisplay.c;145|SCR_AvailableActionContext}} | SCR_AvailableActionContextTitle = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/SCR_AvailableActionsDisplay.c;113|SCR_AvailableActionContextTitle}} | SCR_AvailableActionsConditionData = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/SCR_AvailableActionsConditionData.c;5|SCR_AvailableActionsConditionData}} | SCR_AvailableActionsDisplay = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/SCR_AvailableActionsDisplay.c;267|SCR_AvailableActionsDisplay}} | SCR_AvailableActionsGroupCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/SCR_AvailableActionsGroupCondition.c;3|SCR_AvailableActionsGroupCondition}} | SCR_AvailableActionsWidget = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/SCR_AvailableActionsDisplay.c;2|SCR_AvailableActionsWidget}} | SCR_BackBlastDamageEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/DamageEffects/DamageEffectSources/SCR_BackBlastDamageEffect.c;1|SCR_BackBlastDamageEffect}} | SCR_BackendCallbackRoomMods = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/SCR_RoomModsManager.c;3|SCR_BackendCallbackRoomMods}} | SCR_BackendCallbackWorkshopItem = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DownloadManager/DownloadSequence/SCR_AddonPatchSizeLoader.c;150|SCR_BackendCallbackWorkshopItem}} | SCR_BackendImageComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_BackendImageComponent.c;7|SCR_BackendImageComponent}} | SCR_BackendServiceDisplay = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_ServicesStatusHelper.c;492|SCR_BackendServiceDisplay}} | SCR_BackendServiceDisplayPresets = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_ServicesStatusHelper.c;473|SCR_BackendServiceDisplayPresets}} | SCR_BallisticData = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/Configs/SCR_BallisticData.c;1|SCR_BallisticData}} | SCR_BallisticTableComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_BallisticTableComponent.c;112|SCR_BallisticTableComponent}} | SCR_BallisticTableComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_BallisticTableComponent.c;1|SCR_BallisticTableComponentClass}} | SCR_BallisticTableDisplay = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/MortarInfo/SCR_BallisticTableDisplay.c;1|SCR_BallisticTableDisplay}} | SCR_BandageDamageEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/DamageEffects/CharacterDamageEffects/SCR_BandageDamageEffect.c;1|SCR_BandageDamageEffect}} | SCR_BandagePredicate = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_InventoryStorageManagerComponent.c;57|SCR_BandagePredicate}} | SCR_BandageUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_BandageUserAction.c;1|SCR_BandageUserAction}} | SCR_BannedAddonsDetectedDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/Common/Dialogs/SCR_BannedAddonsDetectedDialog.c;2|SCR_BannedAddonsDetectedDialog}} | SCR_BanSettings = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/PlayerData/SCR_PlayerDataConfigs.c;7|SCR_BanSettings}} | SCR_BanSettingsContainer = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/PlayerData/SCR_PlayerDataConfigs.c;61|SCR_BanSettingsContainer}} | SCR_BarbedWireCuttingDamageEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/DamageEffects/CharacterDamageEffects/SCR_BarbedWireCuttingDamageEffect.c;1|SCR_BarbedWireCuttingDamageEffect}} | SCR_BarrageEffectsModule = {{Link|enfusion://ScriptEditor/scripts/Game/Components/EffectModules/Modules/SCR_BarrageEffectModule.c;1|SCR_BarrageEffectsModule}} | SCR_BaseActionsEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_BaseActionsEditorComponent.c;152|SCR_BaseActionsEditorComponent}} | SCR_BaseActionsEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_BaseActionsEditorComponent.c;20|SCR_BaseActionsEditorComponentClass}} | SCR_BaseAIFactionCommander = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/AI/SCR_BaseAIFactionCommander.c;1|SCR_BaseAIFactionCommander}} | SCR_BaseAnalogGauge = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/VehicleInfo/SCR_BaseAnalogGauge.c;16|SCR_BaseAnalogGauge}} | SCR_BaseAnalogGaugeData = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/VehicleInfo/SCR_BaseAnalogGauge.c;1|SCR_BaseAnalogGaugeData}} | SCR_BaseAreaMeshComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AreaMesh/SCR_BaseAreaMeshComponent.c;6|SCR_BaseAreaMeshComponent}} | SCR_BaseAreaMeshComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AreaMesh/SCR_BaseAreaMeshComponent.c;1|SCR_BaseAreaMeshComponentClass}} | SCR_BaseArsenalRefundEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/ArsenalRefundEffects/SCR_BaseArsenalRefundEffect.c;1|SCR_BaseArsenalRefundEffect}} | SCR_BaseAttributeDynamicDescription = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/DynamicDescriptions/SCR_BaseAttributeDynamicDescription.c;4|SCR_BaseAttributeDynamicDescription}} | SCR_BaseAudioScriptedUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_BaseAudioScriptedUserAction.c;2|SCR_BaseAudioScriptedUserAction}} | SCR_BaseAudioSupportStationAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SupportStations/SCR_BaseAudioSupportStationAction.c;1|SCR_BaseAudioSupportStationAction}} | SCR_BaseBallisticConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/Configs/SCR_BaseBallisticConfig.c;1|SCR_BaseBallisticConfig}} | SCR_BaseBlastDamageEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/DamageEffects/DamageEffectSources/SCR_BaseBlastDamageEffect.c;1|SCR_BaseBlastDamageEffect}} | SCR_BaseBulletDamageEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/DamageEffects/DamageEffectSources/SCR_BaseBulletDamageEffect.c;1|SCR_BaseBulletDamageEffect}} | SCR_BaseButtonAttributeDynamicDescription = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/DynamicDescriptions/SCR_BaseButtonAttributeDynamicDescription.c;4|SCR_BaseButtonAttributeDynamicDescription}} | SCR_BaseCameraComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/SCR_BaseCameraComponent.c;7|SCR_BaseCameraComponent}} | SCR_BaseCameraComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/SCR_BaseCameraComponent.c;1|SCR_BaseCameraComponentClass}} | SCR_BaseCameraShakeProgress = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Shake/SCR_BaseCameraShakeProgress.c;4|SCR_BaseCameraShakeProgress}} | SCR_BaseCaptureMusic = {{Link|enfusion://ScriptEditor/scripts/Game/Music/SCR_BaseCaptureMusic.c;1|SCR_BaseCaptureMusic}} | SCR_BaseCommandAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/CommandActions/SCR_BaseCommandAction.c;1|SCR_BaseCommandAction}} | SCR_BaseCompartmentManagerComponent = {{Link|enfusion://ScriptEditor/scripts/GameCode/Vehicle/SCR_BaseCompartmentManagerComponent.c;5|SCR_BaseCompartmentManagerComponent}} | SCR_BaseCompartmentManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/GameCode/Vehicle/SCR_BaseCompartmentManagerComponent.c;1|SCR_BaseCompartmentManagerComponentClass}} | SCR_BaseContainerCustomEntityCatalogCatalog = {{Link|enfusion://ScriptEditor/scripts/Game/EntityCatalog/SCR_EntityCatalog.c;641|SCR_BaseContainerCustomEntityCatalogCatalog}} | SCR_BaseContainerCustomEntityCatalogMultiListEntry = {{Link|enfusion://ScriptEditor/scripts/Game/EntityCatalog/SCR_EntityCatalogMultiList.c;73|SCR_BaseContainerCustomEntityCatalogMultiListEntry}} | SCR_BaseContainerCustomInventoryCatalogEntry = {{Link|enfusion://ScriptEditor/scripts/Game/EntityCatalog/EntityCatalogEntry/SCR_EntityCatalogInventoryItem.c;65|SCR_BaseContainerCustomInventoryCatalogEntry}} | SCR_BaseContainerCustomTitleEnum = {{Link|enfusion://ScriptEditor/scripts/Game/Global/Attributes.c;322|SCR_BaseContainerCustomTitleEnum}} | SCR_BaseContainerCustomTitleField = {{Link|enfusion://ScriptEditor/scripts/Game/Global/Attributes.c;43|SCR_BaseContainerCustomTitleField}} | SCR_BaseContainerCustomTitleFields = {{Link|enfusion://ScriptEditor/scripts/Game/Global/Attributes.c;73|SCR_BaseContainerCustomTitleFields}} | SCR_BaseContainerCustomTitleFlags = {{Link|enfusion://ScriptEditor/scripts/Game/Global/Attributes.c;413|SCR_BaseContainerCustomTitleFlags}} | SCR_BaseContainerCustomTitleObject = {{Link|enfusion://ScriptEditor/scripts/Game/Global/Attributes.c;500|SCR_BaseContainerCustomTitleObject}} | SCR_BaseContainerCustomTitleResourceName = {{Link|enfusion://ScriptEditor/scripts/Game/Global/Attributes.c;460|SCR_BaseContainerCustomTitleResourceName}} | SCR_BaseContainerCustomTitleUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Global/Attributes.c;863|SCR_BaseContainerCustomTitleUIInfo}} | SCR_BaseContainerGroupNameConfigEntry = {{Link|enfusion://ScriptEditor/scripts/Game/GroupIdentity/SCR_GroupNameConfig.c;75|SCR_BaseContainerGroupNameConfigEntry}} | SCR_BaseContainerHintCondition = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Hints/HintConditions/SCR_BaseHintCondition.c;86|SCR_BaseContainerHintCondition}} | SCR_BaseContainerLocalizedTitleField = {{Link|enfusion://ScriptEditor/scripts/Game/Global/Attributes.c;138|SCR_BaseContainerLocalizedTitleField}} | SCR_BaseContainerLocalizedTitleFields = {{Link|enfusion://ScriptEditor/scripts/Game/Global/Attributes.c;170|SCR_BaseContainerLocalizedTitleFields}} | SCR_BaseContainerMilitaryLayout = {{Link|enfusion://ScriptEditor/scripts/Game/GroupIdentity/SCR_MilitarySymbolConfig.c;248|SCR_BaseContainerMilitaryLayout}} | SCR_BaseContainerMilitarySymbol = {{Link|enfusion://ScriptEditor/scripts/Game/GroupIdentity/SCR_MilitarySymbol.c;194|SCR_BaseContainerMilitarySymbol}} | SCR_BaseContainerResourceTitleField = {{Link|enfusion://ScriptEditor/scripts/Game/Global/Attributes.c;238|SCR_BaseContainerResourceTitleField}} | SCR_BaseContainerStaticTitleField = {{Link|enfusion://ScriptEditor/scripts/Game/Global/Attributes.c;10|SCR_BaseContainerStaticTitleField}} | SCR_BaseContainerTitleFieldWithValue = {{Link|enfusion://ScriptEditor/scripts/Game/Global/Attributes.c;276|SCR_BaseContainerTitleFieldWithValue}} | SCR_BaseContainerTools = {{Link|enfusion://ScriptEditor/scripts/Game/Global/SCR_BaseContainerTools.c;3|SCR_BaseContainerTools}} | SCR_BaseContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_BaseContextAction.c;1|SCR_BaseContextAction}} | SCR_BaseContextMenuEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_BaseContextMenuEditorUIComponent.c;2|SCR_BaseContextMenuEditorUIComponent}} | SCR_BaseDamageAreaShape = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/DamageAreas/Shapes/SCR_BaseDamageAreaShape.c;1|SCR_BaseDamageAreaShape}} | SCR_BaseDamageHealSupportStationAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SupportStations/SCR_BaseDamageHealSupportStationAction.c;2|SCR_BaseDamageHealSupportStationAction}} | SCR_BaseDamageHealSupportStationComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SupportStation/SCR_BaseDamageHealSupportStationComponent.c;60|SCR_BaseDamageHealSupportStationComponent}} | SCR_BaseDamageHealSupportStationComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SupportStation/SCR_BaseDamageHealSupportStationComponent.c;1|SCR_BaseDamageHealSupportStationComponentClass}} | SCR_BaseDebrisSmallEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/debris/BaseDebrisSmallEntity.c;12|SCR_BaseDebrisSmallEntity}} | SCR_BaseDebrisSmallEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/debris/BaseDebrisSmallEntity.c;3|SCR_BaseDebrisSmallEntityClass}} | SCR_BaseDeployableInventoryItemComponent = {{Link|enfusion://ScriptEditor/scripts/Game/DeployableInventoryItems/Components/SCR_BaseDeployableInventoryItemComponent.c;20|SCR_BaseDeployableInventoryItemComponent}} | SCR_BaseDeployableInventoryItemComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/DeployableInventoryItems/Components/SCR_BaseDeployableInventoryItemComponent.c;1|SCR_BaseDeployableInventoryItemComponentClass}} | SCR_BaseDeployableSpawnPointComponent = {{Link|enfusion://ScriptEditor/scripts/Game/DeployableInventoryItems/Components/SCR_BaseDeployableSpawnPointComponent.c;7|SCR_BaseDeployableSpawnPointComponent}} | SCR_BaseDeployableSpawnPointComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/DeployableInventoryItems/Components/SCR_BaseDeployableSpawnPointComponent.c;1|SCR_BaseDeployableSpawnPointComponentClass}} | SCR_BaseDestructionPhase = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_BaseDestructionPhase.c;1|SCR_BaseDestructionPhase}} | SCR_BaseDuplicatableEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_BaseDuplicatableEditorAttribute.c;4|SCR_BaseDuplicatableEditorAttribute}} | SCR_BaseEditableEntityFilter = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/EditableEntityFilters/SCR_BaseEditableEntityFilter.c;12|SCR_BaseEditableEntityFilter}} | SCR_BaseEditableEntityUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/EditableEntities/SCR_BaseEditableEntityUIComponent.c;8|SCR_BaseEditableEntityUIComponent}} | SCR_BaseEditorAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/SCR_BaseEditorAction.c;20|SCR_BaseEditorAction}} | SCR_BaseEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_BaseEditorAttribute.c;2|SCR_BaseEditorAttribute}} | SCR_BaseEditorAttributeCustomTitle = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_BaseEditorAttribute.c;875|SCR_BaseEditorAttributeCustomTitle}} | SCR_BaseEditorAttributeDefaultFloatValue = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_BaseEditorAttribute.c;857|SCR_BaseEditorAttributeDefaultFloatValue}} | SCR_BaseEditorAttributeEntry = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_BaseEditorAttribute.c;479|SCR_BaseEditorAttributeEntry}} | SCR_BaseEditorAttributeEntrySlider = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_BaseEditorAttribute.c;525|SCR_BaseEditorAttributeEntrySlider}} | SCR_BaseEditorAttributeEntryText = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_BaseEditorAttribute.c;483|SCR_BaseEditorAttributeEntryText}} | SCR_BaseEditorAttributeEntryTimeSlider = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_BaseEditorAttribute.c;604|SCR_BaseEditorAttributeEntryTimeSlider}} | SCR_BaseEditorAttributeEntryUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_BaseEditorAttribute.c;500|SCR_BaseEditorAttributeEntryUIInfo}} | SCR_BaseEditorAttributeFloatStringValues = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_BaseEditorAttribute.c;628|SCR_BaseEditorAttributeFloatStringValues}} | SCR_BaseEditorAttributeUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Attributes/SCR_BaseEditorAttributeUIComponent.c;3|SCR_BaseEditorAttributeUIComponent}} | SCR_BaseEditorAttributeVar = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/AttributeVariables/SCR_BaseEditorAttributeVar.c;1|SCR_BaseEditorAttributeVar}} | SCR_BaseEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_BaseEditorComponent.c;119|SCR_BaseEditorComponent}} | SCR_BaseEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_BaseEditorComponent.c;1|SCR_BaseEditorComponentClass}} | SCR_BaseEditorEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Effects/SCR_BaseEditorEffect.c;1|SCR_BaseEditorEffect}} | SCR_BaseEditorHintCondition = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Hints/HintConditions/SCR_BaseEditorHintCondition.c;1|SCR_BaseEditorHintCondition}} | SCR_BaseEditorServerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditorServer/SCR_BaseEditorServerComponent.c;5|SCR_BaseEditorServerComponent}} | SCR_BaseEditorServerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditorServer/SCR_BaseEditorServerComponent.c;1|SCR_BaseEditorServerComponentClass}} | SCR_BaseEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_BaseEditorUIComponent.c;3|SCR_BaseEditorUIComponent}} | SCR_BaseEffectManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_BaseEffectManagerComponent.c;11|SCR_BaseEffectManagerComponent}} | SCR_BaseEffectManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_BaseEffectManagerComponent.c;2|SCR_BaseEffectManagerComponentClass}} | SCR_BaseEffectParticleAction = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_EffectModule.c;209|SCR_BaseEffectParticleAction}} | SCR_BaseEffectParticleHelicopterEventAction = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_EffectModule.c;319|SCR_BaseEffectParticleHelicopterEventAction}} | SCR_BaseEffectParticleHelicopterRotorControlAction = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_EffectModule.c;389|SCR_BaseEffectParticleHelicopterRotorControlAction}} | SCR_BaseEffectParticleSignalAction = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_EffectModule.c;260|SCR_BaseEffectParticleSignalAction}} | SCR_BaseEffectsModulePositionData = {{Link|enfusion://ScriptEditor/scripts/Game/Components/EffectModules/ModulePositionData/SCR_BaseEffectModulePositionData.c;4|SCR_BaseEffectsModulePositionData}} | SCR_BaseEntitiesEditorUIEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/EditableEntityFilters/Effects/SCR_BaseEntitiesEditorUIEffect.c;1|SCR_BaseEntitiesEditorUIEffect}} | SCR_BaseEntitiesEditorUIEffectTitle = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/EditableEntityFilters/Effects/SCR_BaseEntitiesEditorUIEffect.c;23|SCR_BaseEntitiesEditorUIEffectTitle}} | SCR_BaseEntityCatalogData = {{Link|enfusion://ScriptEditor/scripts/Game/EntityCatalog/EntityCatalogEntryData/SCR_BaseEntityCatalogData.c;4|SCR_BaseEntityCatalogData}} | SCR_BaseEnumSpawnPointRequestResultInfo = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SpawnPointRequestResult/SCR_BaseEnumSpawnPointRequestResultInfo.c;1|SCR_BaseEnumSpawnPointRequestResultInfo}} | SCR_BaseFactionCheckUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_BaseFactionCheckUserAction.c;2|SCR_BaseFactionCheckUserAction}} | SCR_BaseFactionEditableAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_BaseFactionEditableAttribute.c;4|SCR_BaseFactionEditableAttribute}} | SCR_BaseFactionManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/FactionManager/SCR_BaseFactionManagerComponent.c;7|SCR_BaseFactionManagerComponent}} | SCR_BaseFactionManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/FactionManager/SCR_BaseFactionManagerComponent.c;1|SCR_BaseFactionManagerComponentClass}} | SCR_BaseFactionTriggerEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Triggers/SCR_BaseFactionTriggerEntity.c;6|SCR_BaseFactionTriggerEntity}} | SCR_BaseFactionTriggerEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Triggers/SCR_BaseFactionTriggerEntity.c;1|SCR_BaseFactionTriggerEntityClass}} | SCR_BaseFloatValueHolderEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_BaseFloatValueHolderEditorAttribute.c;2|SCR_BaseFloatValueHolderEditorAttribute}} | SCR_BaseFormatParam = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_FormatUIInfo.c;47|SCR_BaseFormatParam}} | SCR_BaseGameMode = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_BaseGameMode.c;138|SCR_BaseGameMode}} | SCR_BaseGameModeClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_BaseGameMode.c;12|SCR_BaseGameModeClass}} | SCR_BaseGameModeComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_BaseGameModeComponent.c;8|SCR_BaseGameModeComponent}} | SCR_BaseGameModeComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_BaseGameModeComponent.c;1|SCR_BaseGameModeComponentClass}} | SCR_BaseGameModeStateComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_BaseGameModeStateComponent.c;7|SCR_BaseGameModeStateComponent}} | SCR_BaseGameModeStateComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_BaseGameModeStateComponent.c;1|SCR_BaseGameModeStateComponentClass}} | SCR_BaseGameOverScreenInfo = {{Link|enfusion://ScriptEditor/scripts/Game/GameOverScreen/SCR_BaseGameOverScreenInfo.c;1|SCR_BaseGameOverScreenInfo}} | SCR_BaseGameOverScreenInfoEditor = {{Link|enfusion://ScriptEditor/scripts/Game/GameOverScreen/SCR_BaseGameOverScreenInfo.c;410|SCR_BaseGameOverScreenInfoEditor}} | SCR_BaseGameOverScreenInfoOptional = {{Link|enfusion://ScriptEditor/scripts/Game/GameOverScreen/SCR_BaseGameOverScreenInfo.c;379|SCR_BaseGameOverScreenInfoOptional}} | SCR_BaseGameOverTabUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/GameOverScreen/SCR_GameOverTabBaseUIComponent.c;1|SCR_BaseGameOverTabUIComponent}} | SCR_BaseGroup = {{Link|enfusion://ScriptEditor/scripts/Game/ItemSelection/SCR_BaseGroup.c;4|SCR_BaseGroup}} | SCR_BaseGroupCommand = {{Link|enfusion://ScriptEditor/scripts/Game/Commanding/Commands/SCR_BaseGroupCommand.c;2|SCR_BaseGroupCommand}} | SCR_BaseGroupCommandTitleField = {{Link|enfusion://ScriptEditor/scripts/Game/Commanding/SCR_PlayerCommandsConfig.c;154|SCR_BaseGroupCommandTitleField}} | SCR_BaseGroupEntry = {{Link|enfusion://ScriptEditor/scripts/Game/ItemSelection/SCR_BaseGroupEntry.c;3|SCR_BaseGroupEntry}} | SCR_BaseHeadingDisplay = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/MortarInfo/SCR_BaseHeadingDisplay.c;1|SCR_BaseHeadingDisplay}} | SCR_BaseHintCondition = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Hints/HintConditions/SCR_BaseHintCondition.c;1|SCR_BaseHintCondition}} | SCR_BaseHitZoneSelector = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/DamageAreas/SCR_BaseHitZoneSelector.c;1|SCR_BaseHitZoneSelector}} | SCR_BaseHUDComponent = {{Link|enfusion://ScriptEditor/scripts/GameCode/UI/HUD/SCR_BaseHUDComponent.c;5|SCR_BaseHUDComponent}} | SCR_BaseHUDComponentClass = {{Link|enfusion://ScriptEditor/scripts/GameCode/UI/HUD/SCR_BaseHUDComponent.c;1|SCR_BaseHUDComponentClass}} | SCR_BaseInteractionDisplay = {{Link|enfusion://ScriptEditor/scripts/Game/Interactions/Base/SCR_BaseInteractionDisplay.c;39|SCR_BaseInteractionDisplay}} | SCR_BaseInteractiveLightComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Lights/SCR_BaseInteractiveLightComponent.c;53|SCR_BaseInteractiveLightComponent}} | SCR_BaseInteractiveLightComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Lights/SCR_BaseInteractiveLightComponent.c;1|SCR_BaseInteractiveLightComponentClass}} | SCR_BaseInventoryItemComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_BaseInventoryItemComponent.c;5|SCR_BaseInventoryItemComponent}} | SCR_BaseInventoryItemComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_BaseInventoryItemComponent.c;1|SCR_BaseInventoryItemComponentClass}} | SCR_BaseInventoryStorageComponentSerializerSlot = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/Weapon/SCR_WeaponAttachmentsStorageComponentSerializer.c;1|SCR_BaseInventoryStorageComponentSerializerSlot}} | SCR_BaseItemHolderSupportStationAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SupportStations/SCR_BaseItemHolderSupportStationAction.c;1|SCR_BaseItemHolderSupportStationAction}} | SCR_BaseItemSupportStationComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SupportStation/SCR_BaseItemSupportStationComponent.c;6|SCR_BaseItemSupportStationComponent}} | SCR_BaseItemSupportStationComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SupportStation/SCR_BaseItemSupportStationComponent.c;1|SCR_BaseItemSupportStationComponentClass}} | SCR_BaseLightComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Lights/SCR_BaseLightComponent.c;6|SCR_BaseLightComponent}} | SCR_BaseLightComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Lights/SCR_BaseLightComponent.c;1|SCR_BaseLightComponentClass}} | SCR_BaseLightData = {{Link|enfusion://ScriptEditor/scripts/Game/Lights/SCR_BaseLightData.c;4|SCR_BaseLightData}} | SCR_BaseLinkedStorageLogic = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/LinkedStorages/SCR_BaseLinkedStorageLogic.c;1|SCR_BaseLinkedStorageLogic}} | SCR_BaseLoadingScreenComponent = {{Link|enfusion://ScriptEditor/scripts/GameLib/LoadingScreens/SCR_BaseLoadingScreenComponent.c;3|SCR_BaseLoadingScreenComponent}} | SCR_BaseLockComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_BaseLockComponent.c;6|SCR_BaseLockComponent}} | SCR_BaseLockComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_BaseLockComponent.c;1|SCR_BaseLockComponentClass}} | SCR_BaseManualCameraComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_BaseManualCameraComponent.c;4|SCR_BaseManualCameraComponent}} | SCR_BaseManualCameraComponentTitle = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_BaseManualCameraComponent.c;138|SCR_BaseManualCameraComponentTitle}} | SCR_BaseMineAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_BaseMineAction.c;1|SCR_BaseMineAction}} | SCR_BaseModeEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Modes/SCR_BaseModeEditorUIComponent.c;1|SCR_BaseModeEditorUIComponent}} | SCR_BaseMultiSelectPresetsEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_BaseMultiSelectPresetsEditorAttribute.c;3|SCR_BaseMultiSelectPresetsEditorAttribute}} | SCR_BaseNetworkedStat = {{Link|enfusion://ScriptEditor/scripts/Game/Network/NetworkedStats/Stats/SCR_BaseNetworkedStat.c;1|SCR_BaseNetworkedStat}} | SCR_BasePaginationUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_BasePaginationUIComponent.c;1|SCR_BasePaginationUIComponent}} | SCR_BasePlacingToolbarAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ToolbarActions/SCR_BasePlacingToolbarAction.c;1|SCR_BasePlacingToolbarAction}} | SCR_BasePlayerBudgetEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_BasePlayerBudgetEditorAttribute.c;4|SCR_BasePlayerBudgetEditorAttribute}} | SCR_BasePlayerBudgetEnableEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_BasePlayerBudgetEnableEditorAttribute.c;2|SCR_BasePlayerBudgetEnableEditorAttribute}} | SCR_BasePlayerLoadout = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Loadout/SCR_BasePlayerLoadout.c;1|SCR_BasePlayerLoadout}} | SCR_BasePrefabCategory = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/PrefabsSpawning/SCR_BasePrefabCategory.c;2|SCR_BasePrefabCategory}} | SCR_BasePrefabSpawner = {{Link|enfusion://ScriptEditor/scripts/GameCode/Base/SCR_BasePrefabSpawner.c;1|SCR_BasePrefabSpawner}} | SCR_BasePrefabSpawnerClass = {{Link|enfusion://ScriptEditor/scripts/GameCode/Base/SCR_BasePrefabSpawner.c;58|SCR_BasePrefabSpawnerClass}} | SCR_BasePresetsEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_BasePresetsEditorAttribute.c;4|SCR_BasePresetsEditorAttribute}} | SCR_BasePreviewConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Preview/SCR_BasePreviewConfig.c;1|SCR_BasePreviewConfig}} | SCR_BasePreviewEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Preview/SCR_BasePreviewEntity.c;9|SCR_BasePreviewEntity}} | SCR_BasePreviewEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Preview/SCR_BasePreviewEntity.c;1|SCR_BasePreviewEntityClass}} | SCR_BasePreviewEntry = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Preview/SCR_BasePreviewEntry.c;1|SCR_BasePreviewEntry}} | SCR_BaseRadialCommand = {{Link|enfusion://ScriptEditor/scripts/Game/Commanding/Commands/SCR_BaseRadialCommand.c;1|SCR_BaseRadialCommand}} | SCR_BaseReconMarkerEntry = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/Config/ReconMarker/SCR_BaseReconMarkerEntry.c;1|SCR_BaseReconMarkerEntry}} | SCR_BaseRequestedTaskData = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Campaign/SCR_BaseRequestedTaskData.c;1|SCR_BaseRequestedTaskData}} | SCR_BaseRequestedTaskEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Campaign/SCR_BaseRequestedTaskEntity.c;9|SCR_BaseRequestedTaskEntity}} | SCR_BaseRequestedTaskEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Campaign/SCR_BaseRequestedTaskEntity.c;5|SCR_BaseRequestedTaskEntityClass}} | SCR_BaseResourceTooltipDetail = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_BaseResourceTooltipDetail.c;1|SCR_BaseResourceTooltipDetail}} | SCR_BaseRespawnDiag = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/RequestHandling/Base/SCR_SpawnRequestComponent.c;652|SCR_BaseRespawnDiag}} | SCR_BaseResupplySupportStationAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SupportStations/SCR_ResupplySupportStationAction.c;2|SCR_BaseResupplySupportStationAction}} | SCR_BaseRocketPodsContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_BaseRocketPodsContextAction.c;1|SCR_BaseRocketPodsContextAction}} | SCR_BaseRoleCallsign = {{Link|enfusion://ScriptEditor/scripts/Game/Callsign/RoleCallsigns/SCR_BaseRoleCallsign.c;1|SCR_BaseRoleCallsign}} | SCR_BaseScoringSystemComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Scoring/SCR_BaseScoringSystemComponent.c;26|SCR_BaseScoringSystemComponent}} | SCR_BaseScoringSystemComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Scoring/SCR_BaseScoringSystemComponent.c;1|SCR_BaseScoringSystemComponentClass}} | SCR_BaseScreenEffect = {{Link|enfusion://ScriptEditor/scripts/Game/UI/ScreenEffects/SCR_BaseScreenEffect.c;1|SCR_BaseScreenEffect}} | SCR_BaseScreenShakeData = {{Link|enfusion://ScriptEditor/scripts/GameCode/Vehicle/BaseCompartmentSlot.c;476|SCR_BaseScreenShakeData}} | SCR_BaseSelectionMenu = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SelectionMenu/SCR_BaseSelectionMenu.c;3|SCR_BaseSelectionMenu}} | SCR_BaseSelectionMenuDisplay = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SelectionMenu/SCR_BaseSelectionMenuDisplay.c;2|SCR_BaseSelectionMenuDisplay}} | SCR_BaseSpawnable = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_BaseSpawnable.c;1|SCR_BaseSpawnable}} | SCR_BaseSpawnPointRequestResultInfo = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SpawnPointRequestResult/SCR_BaseSpawnPointRequestResultInfo.c;1|SCR_BaseSpawnPointRequestResultInfo}} | SCR_BaseSupplyItemHintUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_BaseSupplyItemHintUIInfo.c;1|SCR_BaseSupplyItemHintUIInfo}} | SCR_BaseSupportStationComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SupportStation/SCR_BaseSupportStationComponent.c;97|SCR_BaseSupportStationComponent}} | SCR_BaseSupportStationComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SupportStation/SCR_BaseSupportStationComponent.c;1|SCR_BaseSupportStationComponentClass}} | SCR_BaseSupportStationEnableEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_BaseSupportStationEnableEditorAttribute.c;1|SCR_BaseSupportStationEnableEditorAttribute}} | SCR_BaseTextureResource = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Texture/SCR_BaseTextureResource.c;1|SCR_BaseTextureResource}} | SCR_BaseToggleToolbarAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ToolbarActions/SCR_BaseToggleToolbarAction.c;2|SCR_BaseToggleToolbarAction}} | SCR_BaseToolbarEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Toolbar/SCR_BaseToolbarEditorUIComponent.c;5|SCR_BaseToolbarEditorUIComponent}} | SCR_BaseToolbarItemEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Toolbar/Items/SCR_BaseToolbarItemEditorUIComponent.c;1|SCR_BaseToolbarItemEditorUIComponent}} | SCR_BaseTooltipEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/SCR_BaseTooltipEditorUIComponent.c;3|SCR_BaseTooltipEditorUIComponent}} | SCR_BaseTooltipTargetEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Targets/SCR_BaseTooltipTargetEditorUIComponent.c;3|SCR_BaseTooltipTargetEditorUIComponent}} | SCR_BaseTriggerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Explosives/SCR_BaseTriggerComponent.c;6|SCR_BaseTriggerComponent}} | SCR_BaseTriggerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Explosives/SCR_BaseTriggerComponent.c;1|SCR_BaseTriggerComponentClass}} | SCR_BaseTriggerComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/Weapon/SCR_BaseTriggerComponentSerializer.c;1|SCR_BaseTriggerComponentSerializer}} | SCR_BaseTriggerEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Triggers/SCR_BaseTriggerEntity.c;7|SCR_BaseTriggerEntity}} | SCR_BaseTriggerEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Triggers/SCR_BaseTriggerEntity.c;1|SCR_BaseTriggerEntityClass}} | SCR_BaseTutorialCourseLogic = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Logic/SCR_BaseTutorialCourseLogic.c;1|SCR_BaseTutorialCourseLogic}} | SCR_BaseTutorialStage = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Logic/SCR_BaseTutorialStage.c;7|SCR_BaseTutorialStage}} | SCR_BaseTutorialStageClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Logic/SCR_BaseTutorialStage.c;1|SCR_BaseTutorialStageClass}} | SCR_BaseUseSupportStationAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SupportStations/SCR_BaseUseSupportStationAction.c;1|SCR_BaseUseSupportStationAction}} | SCR_BaseValueListEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_BaseValueListEditorAttribute.c;4|SCR_BaseValueListEditorAttribute}} | SCR_BaseVariableSightsFOVInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Sights/SightsFOVInfo/SCR_BaseVariableSightsFOVInfo.c;1|SCR_BaseVariableSightsFOVInfo}} | SCR_BaseVehicleInfo = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/VehicleInfo/SCR_BaseVehicleInfo.c;27|SCR_BaseVehicleInfo}} | SCR_BaseWaypointCommandHandler = {{Link|enfusion://ScriptEditor/scripts/Game/Commanding/Commands/SCR_BaseWaypointCommandHandler.c;1|SCR_BaseWaypointCommandHandler}} | SCR_BaseWeaponAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_BaseWeaponAction.c;1|SCR_BaseWeaponAction}} | SCR_BaseWeaponAzimuthDisplay = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/MortarInfo/SCR_BaseWeaponAzimuthDisplay.c;1|SCR_BaseWeaponAzimuthDisplay}} | SCR_BaseWeaponElevationDisplay = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/MortarInfo/SCR_BaseWeaponElevationDisplay.c;1|SCR_BaseWeaponElevationDisplay}} | SCR_BaseWeightedArsenalRefundEffectEntry = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/ArsenalRefundEffects/SCR_BaseWeightedArsenalRefundEffectEntry.c;2|SCR_BaseWeightedArsenalRefundEffectEntry}} | SCR_BasicCodeFormatterForcedPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_BasicCodeFormatterPlugin.c;2048|SCR_BasicCodeFormatterForcedPlugin}} | SCR_BasicCodeFormatterPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_BasicCodeFormatterPlugin.c;19|SCR_BasicCodeFormatterPlugin}} | SCR_BasicCodeFormatterPluginFileReport = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_BasicCodeFormatterPlugin.c;1951|SCR_BasicCodeFormatterPluginFileReport}} | SCR_BasicCodeFormatterSpellCheckConfig = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_BasicCodeFormatterSpellCheckConfig.c;2|SCR_BasicCodeFormatterSpellCheckConfig}} | SCR_BasicCodeFormatterSpellCheckConfig_ForbiddenWordEntry = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_BasicCodeFormatterSpellCheckConfig.c;9|SCR_BasicCodeFormatterSpellCheckConfig_ForbiddenWordEntry}} | SCR_BasicDisabledAttributeDynamicDescription = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/DynamicDescriptions/SCR_BasicDisabledAttributeDynamicDescription.c;2|SCR_BasicDisabledAttributeDynamicDescription}} | SCR_BatchedDamageEffects = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/DamageEffects/SCR_BatchedDamageEffects.c;1|SCR_BatchedDamageEffects}} | SCR_BatchedPoisonDamageEffects = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/DamageEffects/SCR_BatchedPoisonDamageEffects.c;1|SCR_BatchedPoisonDamageEffects}} | SCR_BatchPrefabsOperationsTool = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_BatchPrefabsOperationsTool.c;15|SCR_BatchPrefabsOperationsTool}} | SCR_BatchPrefabTemplates = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_BatchPrefabsOperationsTool.c;389|SCR_BatchPrefabTemplates}} | SCR_BatchPrefabTemplatesAttributes = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_BatchPrefabsOperationsTool.c;412|SCR_BatchPrefabTemplatesAttributes}} | SCR_BatchPrefabTemplatesData = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_BatchPrefabsOperationsTool.c;399|SCR_BatchPrefabTemplatesData}} | SCR_BatchPrefabTitle = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_BatchPrefabsOperationsTool.c;341|SCR_BatchPrefabTitle}} | SCR_BatteryHitZone = {{Link|enfusion://ScriptEditor/scripts/Game/HitZone/SCR_BatteryHitZone.c;1|SCR_BatteryHitZone}} | SCR_BayonetComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Melee/SCR_BayonetComponent.c;5|SCR_BayonetComponent}} | SCR_BayonetComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Melee/SCR_BayonetComponent.c;1|SCR_BayonetComponentClass}} | SCR_BayonetEffectComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_BayonetEffectComponent.c;5|SCR_BayonetEffectComponent}} | SCR_BayonetEffectComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_BayonetEffectComponent.c;1|SCR_BayonetEffectComponentClass}} | SCR_BellSoundComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_BellSoundComponent.c;16|SCR_BellSoundComponent}} | SCR_BellSoundComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_BellSoundComponent.c;11|SCR_BellSoundComponentClass}} | SCR_BIKIExportBasePlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/BIKI/SCR_BIKIExportBasePlugin.c;2|SCR_BIKIExportBasePlugin}} | SCR_BIKIExportPlugin_Result = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/BIKI/SCR_BIKIExportBasePlugin.c;36|SCR_BIKIExportPlugin_Result}} | SCR_BIKIFactionAssetsExportPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/BIKI/SCR_BIKIFactionAssetsExportPlugin.c;3|SCR_BIKIFactionAssetsExportPlugin}} | SCR_BIKIStringBuilder = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/BIKI/SCR_BIKIStringBuilder.c;1|SCR_BIKIStringBuilder}} | SCR_BinLoadContext = {{Link|enfusion://ScriptEditor/scripts/GameCode/Serialization/SCR_SerializationContextBin.c;50|SCR_BinLoadContext}} | SCR_BinocularsComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_BinocularsComponent.c;6|SCR_BinocularsComponent}} | SCR_BinocularsComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_BinocularsComponent.c;1|SCR_BinocularsComponentClass}} | SCR_BinSaveContext = {{Link|enfusion://ScriptEditor/scripts/GameCode/Serialization/SCR_SerializationContextBin.c;6|SCR_BinSaveContext}} | SCR_Bird = {{Link|enfusion://ScriptEditor/scripts/Game/AI/SCR_BirdAgent.c;5|SCR_Bird}} | SCR_BirdClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/SCR_BirdAgent.c;1|SCR_BirdClass}} | SCR_BitMaskArray = {{Link|enfusion://ScriptEditor/scripts/Game/Utilities/BitMaskArray.c;6|SCR_BitMaskArray}} | SCR_BlastedEntityEntry = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/SCR_BlastedEntityEntry.c;1|SCR_BlastedEntityEntry}} | SCR_BlastForceDamageEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/DamageEffects/DamageEffectSources/SCR_BlastForceDamageEffect.c;1|SCR_BlastForceDamageEffect}} | SCR_BleedCharacterContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_BleedCharacterContextAction.c;2|SCR_BleedCharacterContextAction}} | SCR_BleedingDamageEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/DamageEffects/CharacterDamageEffects/SCR_BleedingDamageEffect.c;1|SCR_BleedingDamageEffect}} | SCR_BleedingHitZoneParameters = {{Link|enfusion://ScriptEditor/scripts/Game/HitZone/SCR_CharacterHitZone.c;51|SCR_BleedingHitZoneParameters}} | SCR_BleedingScreenEffect = {{Link|enfusion://ScriptEditor/scripts/Game/UI/ScreenEffects/SCR_BleedingScreenEffect.c;1|SCR_BleedingScreenEffect}} | SCR_BlockedPlayerPresentDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/Dialogs/SCR_BlockedPlayerPresentDialog.c;1|SCR_BlockedPlayerPresentDialog}} | SCR_BlockedUsersDialogEntryUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SCR_BlockedUsersDialogEntryUIComponent.c;1|SCR_BlockedUsersDialogEntryUIComponent}} | SCR_BlockedUsersDialogUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SCR_BlockedUsersDialogUI.c;1|SCR_BlockedUsersDialogUI}} | SCR_BlockUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_BlockUIInfo.c;1|SCR_BlockUIInfo}} | SCR_BlockUnequipItemHintUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_BlockUnequipItemHintUIInfo.c;1|SCR_BlockUnequipItemHintUIInfo}} | SCR_BloodBoxColors = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_BloodTooltipDetailBlockEditorUIComponent.c;45|SCR_BloodBoxColors}} | SCR_BloodEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_BloodEditorAttribute.c;4|SCR_BloodEditorAttribute}} | SCR_BloodOnClothesSystem = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/SCR_BloodOnClothesSystem.c;5|SCR_BloodOnClothesSystem}} | SCR_BloodTooltipDetail = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_BloodTooltipDetail.c;1|SCR_BloodTooltipDetail}} | SCR_BloodTooltipDetailBlockEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_BloodTooltipDetailBlockEditorUIComponent.c;1|SCR_BloodTooltipDetailBlockEditorUIComponent}} | SCR_BloodTypeHolderConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Identity/Containers/SCR_BloodTypeHolderConfig.c;1|SCR_BloodTypeHolderConfig}} | SCR_BoardingEntityWaypoint = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_BoardingEntityWaypoint.c;6|SCR_BoardingEntityWaypoint}} | SCR_BoardingEntityWaypointClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_BoardingEntityWaypoint.c;1|SCR_BoardingEntityWaypointClass}} | SCR_BoardingTimedWaypoint = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_BoardingTimedWaypoint.c;6|SCR_BoardingTimedWaypoint}} | SCR_BoardingTimedWaypointClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_BoardingTimedWaypoint.c;1|SCR_BoardingTimedWaypointClass}} | SCR_BoardingWaypoint = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_BoardingWaypoint.c;47|SCR_BoardingWaypoint}} | SCR_BoardingWaypointClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_BoardingWaypoint.c;1|SCR_BoardingWaypointClass}} | SCR_BombardContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_BombardContextAction.c;1|SCR_BombardContextAction}} | SCR_BoneSpeedSignalData = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_BoneSpeedSignalData.c;1|SCR_BoneSpeedSignalData}} | SCR_BookmarkPlugin0 = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/SCR_BookmarkPlugin.c;105|SCR_BookmarkPlugin0}} | SCR_BookmarkPlugin1 = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/SCR_BookmarkPlugin.c;2|SCR_BookmarkPlugin1}} | SCR_BookmarkPlugin2 = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/SCR_BookmarkPlugin.c;81|SCR_BookmarkPlugin2}} | SCR_BookmarkPlugin3 = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/SCR_BookmarkPlugin.c;84|SCR_BookmarkPlugin3}} | SCR_BookmarkPlugin4 = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/SCR_BookmarkPlugin.c;87|SCR_BookmarkPlugin4}} | SCR_BookmarkPlugin5 = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/SCR_BookmarkPlugin.c;90|SCR_BookmarkPlugin5}} | SCR_BookmarkPlugin6 = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/SCR_BookmarkPlugin.c;93|SCR_BookmarkPlugin6}} | SCR_BookmarkPlugin7 = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/SCR_BookmarkPlugin.c;96|SCR_BookmarkPlugin7}} | SCR_BookmarkPlugin8 = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/SCR_BookmarkPlugin.c;99|SCR_BookmarkPlugin8}} | SCR_BookmarkPlugin9 = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/SCR_BookmarkPlugin.c;102|SCR_BookmarkPlugin9}} | SCR_BookmarkPluginPrompt = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/SCR_BookmarkPlugin.c;108|SCR_BookmarkPluginPrompt}} | SCR_BookmarkSettingsPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/SCR_BookmarkPlugin.c;143|SCR_BookmarkSettingsPlugin}} | SCR_BoolAttributeDynamicDescription = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/DynamicDescriptions/SCR_BoolAttributeDynamicDescription.c;4|SCR_BoolAttributeDynamicDescription}} | SCR_BoundsPosition = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/DamageAreas/Shapes/SCR_BoundsPosition.c;1|SCR_BoundsPosition}} | SCR_BreadCrumbsComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_BreadCrumbsComponent.c;1|SCR_BreadCrumbsComponent}} | SCR_BreadCrumbsElementComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_BreadCrumbElementComponent.c;7|SCR_BreadCrumbsElementComponent}} | SCR_BriefingMenuConfig = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_BriefingConfig.c;2|SCR_BriefingMenuConfig}} | SCR_BriefingVictoryCondition = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_RespawnBriefingComponent.c;350|SCR_BriefingVictoryCondition}} | SCR_BrowserLinkComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_BrowserLinkComponent.c;1|SCR_BrowserLinkComponent}} | SCR_BrowserListMenuEntryComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/Common/SCR_BrowserListMenuEntryComponent.c;8|SCR_BrowserListMenuEntryComponent}} | SCR_BrowserToolbarAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ToolbarActions/SCR_BrowserToolbarAction.c;1|SCR_BrowserToolbarAction}} | SCR_BTParam = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Utils/SCR_BTParam.c;21|SCR_BTParam}} | SCR_BTParamAssignable = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Utils/SCR_BTParam.c;94|SCR_BTParamAssignable}} | SCR_BTParamBase = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Utils/SCR_BTParam.c;7|SCR_BTParamBase}} | SCR_BTParamRef = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Utils/SCR_BTParam.c;56|SCR_BTParamRef}} | SCR_BudgetEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_BudgetEditorComponent.c;21|SCR_BudgetEditorComponent}} | SCR_BudgetEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_BudgetEditorComponent.c;1|SCR_BudgetEditorComponentClass}} | SCR_BudgetEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_BudgetEditorUIComponent.c;1|SCR_BudgetEditorUIComponent}} | SCR_BudgetProgressEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Toolbar/Building/SCR_BudgetProgressEditorUIComponent.c;1|SCR_BudgetProgressEditorUIComponent}} | SCR_BudgetUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Toolbar/Building/SCR_BudgetUIComponent.c;2|SCR_BudgetUIComponent}} | SCR_BudgetUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_BudgetUIInfo.c;1|SCR_BudgetUIInfo}} | SCR_BuilderNameTooltipDetail = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_BuilderNameTooltipDetail.c;2|SCR_BuilderNameTooltipDetail}} | SCR_BuildingCampaignMilitaryBaseTaskEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Campaign/SCR_BuildingCampaignMilitaryBaseTaskEntity.c;5|SCR_BuildingCampaignMilitaryBaseTaskEntity}} | SCR_BuildingCampaignMilitaryBaseTaskEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Campaign/SCR_BuildingCampaignMilitaryBaseTaskEntity.c;1|SCR_BuildingCampaignMilitaryBaseTaskEntityClass}} | SCR_BuildingConfigManagerEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/Building/SCR_BuildingConfigManagerEntity.c;7|SCR_BuildingConfigManagerEntity}} | SCR_BuildingConfigManagerEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/Building/SCR_BuildingConfigManagerEntity.c;2|SCR_BuildingConfigManagerEntityClass}} | SCR_BuildingDestructionCameraShakeProgress = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/Building/SCR_DestructibleBuildingComponent.c;166|SCR_BuildingDestructionCameraShakeProgress}} | SCR_BuildingDestructionConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/Building/SCR_BuildingDestructionConfig.c;1|SCR_BuildingDestructionConfig}} | SCR_BuildingDestructionData = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_BuildingDestructionManagerComponent.c;6|SCR_BuildingDestructionData}} | SCR_BuildingDestructionManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_BuildingDestructionManagerComponent.c;69|SCR_BuildingDestructionManagerComponent}} | SCR_BuildingDestructionManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_BuildingDestructionManagerComponent.c;1|SCR_BuildingDestructionManagerComponentClass}} | SCR_BuildingDestructionSetupTool = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_BuildingDestructionSetupTool.c;4|SCR_BuildingDestructionSetupTool}} | SCR_BuildingDestructionSetupToolConfig = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_BuildingDestructionSetupTool.c;602|SCR_BuildingDestructionSetupToolConfig}} | SCR_BuildingInteriorDeletinator = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_RegionalDestructionManager.c;204|SCR_BuildingInteriorDeletinator}} | SCR_BuildingLinkRegion = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/Building/SCR_BuildingLinkRegion.c;1|SCR_BuildingLinkRegion}} | SCR_BuildingPropsConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapPropsConfig.c;14|SCR_BuildingPropsConfig}} | SCR_BuildingRegion = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/Building/SCR_BuildingRegion.c;1|SCR_BuildingRegion}} | SCR_BuildingRegionEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/Building/SCR_BuildingRegionEntity.c;7|SCR_BuildingRegionEntity}} | SCR_BuildingRegionEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/Building/SCR_BuildingRegionEntity.c;1|SCR_BuildingRegionEntityClass}} | SCR_BuildingRegionSetup = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/Building/SCR_BuildingRegionSetup.c;1|SCR_BuildingRegionSetup}} | SCR_BuildingRegionSetupMulti = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/Building/SCR_BuildingRegionSetupMulti.c;1|SCR_BuildingRegionSetupMulti}} | SCR_BuildingResourceList = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/Building/SCR_BuildingResourceList.c;1|SCR_BuildingResourceList}} | SCR_BuildingSetup = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/Building/SCR_BuildingSetup.c;3|SCR_BuildingSetup}} | SCR_BuildingSoundComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_BuildingSoundComponent.c;86|SCR_BuildingSoundComponent}} | SCR_BuildingSoundComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_BuildingSoundComponent.c;7|SCR_BuildingSoundComponentClass}} | SCR_BuildingTaskCreator = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Campaign/Creators/SCR_BuildingTaskCreator.c;1|SCR_BuildingTaskCreator}} | SCR_BuildingTypeProps = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapPropsConfig.c;43|SCR_BuildingTypeProps}} | SCR_BuildingViewTitle = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapPropsConfig.c;67|SCR_BuildingViewTitle}} | SCR_BuildModeShowHideOnSupplyEnabledUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_BuildModeShowHideOnSupplyEnabledUIComponent.c;1|SCR_BuildModeShowHideOnSupplyEnabledUIComponent}} | SCR_BulletPointBlockUIName = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_BlockUIInfo.c;74|SCR_BulletPointBlockUIName}} | SCR_ButtonBaseComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/Button/SCR_ButtonBaseComponent.c;6|SCR_ButtonBaseComponent}} | SCR_ButtonBoxAttributeUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Attributes/SCR_ButtonBoxAttributeUIComponent.c;3|SCR_ButtonBoxAttributeUIComponent}} | SCR_ButtonBoxMultiSelectAttributeUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Attributes/SCR_ButtonBoxMultiSelectAttributeUIComponent.c;3|SCR_ButtonBoxMultiSelectAttributeUIComponent}} | SCR_ButtonCheckerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_CheckBox/SCR_ButtonCheckerComponent.c;2|SCR_ButtonCheckerComponent}} | SCR_ButtonCloseEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_ButtonCloseEditorUIComponent.c;1|SCR_ButtonCloseEditorUIComponent}} | SCR_ButtonComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_ButtonComponent.c;4|SCR_ButtonComponent}} | SCR_ButtonEffectBase = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/ButtonComponents/ModularButton/SCR_ButtonEffectBase.c;28|SCR_ButtonEffectBase}} | SCR_ButtonEffectColor = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/ButtonComponents/ModularButton/Effects/SCR_ButtonEffectColor.c;2|SCR_ButtonEffectColor}} | SCR_ButtonEffectImage = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/ButtonComponents/ModularButton/Effects/SCR_ButtonEffectImage.c;2|SCR_ButtonEffectImage}} | SCR_ButtonEffectImage_ImageOrImageSet = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/ButtonComponents/ModularButton/Effects/SCR_ButtonEffectImage.c;115|SCR_ButtonEffectImage_ImageOrImageSet}} | SCR_ButtonEffectOpacity = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/ButtonComponents/ModularButton/Effects/SCR_ButtonEffectOpacity.c;2|SCR_ButtonEffectOpacity}} | SCR_ButtonEffectPadding = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/ButtonComponents/ModularButton/Effects/SCR_ButtonEffectPadding.c;2|SCR_ButtonEffectPadding}} | SCR_ButtonEffectPosition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/ButtonComponents/ModularButton/Effects/SCR_ButtonEffectPosition.c;1|SCR_ButtonEffectPosition}} | SCR_ButtonEffectSize = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/ButtonComponents/ModularButton/Effects/SCR_ButtonEffectSize.c;1|SCR_ButtonEffectSize}} | SCR_ButtonEffectSlaveButton = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/ButtonComponents/ModularButton/Effects/SCR_ButtonEffectSlaveButton.c;2|SCR_ButtonEffectSlaveButton}} | SCR_ButtonEffectSound = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/ButtonComponents/ModularButton/Effects/SCR_ButtonEffectSound.c;2|SCR_ButtonEffectSound}} | SCR_ButtonEffectText = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/ButtonComponents/ModularButton/Effects/SCR_ButtonEffectText.c;2|SCR_ButtonEffectText}} | SCR_ButtonEffectTitleAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/ButtonComponents/ModularButton/SCR_ButtonEffectBase.c;232|SCR_ButtonEffectTitleAttribute}} | SCR_ButtonEffectVisibility = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/ButtonComponents/ModularButton/Effects/SCR_ButtonEffectVisibility.c;2|SCR_ButtonEffectVisibility}} | SCR_ButtonEffectWidgetBase = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/ButtonComponents/ModularButton/SCR_ButtonEffectBase.c;207|SCR_ButtonEffectWidgetBase}} | SCR_ButtonHintEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_ButtonHintEditorUIComponent.c;1|SCR_ButtonHintEditorUIComponent}} | SCR_ButtonImageComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/Button/SCR_ButtonImageComponent.c;2|SCR_ButtonImageComponent}} | SCR_ButtonLegendComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/CareerProfile/SCR_ButtonLegendComponent.c;2|SCR_ButtonLegendComponent}} | SCR_ButtonListViewComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_ListView/SCR_ButtonListComponent.c;6|SCR_ButtonListViewComponent}} | SCR_ButtonSpecializationProgressComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/CareerProfile/SCR_ButtonSpecializationProgressComponent.c;2|SCR_ButtonSpecializationProgressComponent}} | SCR_ButtonSplitComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_ButtonSplitComponent.c;5|SCR_ButtonSplitComponent}} | SCR_ButtonTextComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/Button/SCR_ButtonTextComponent.c;2|SCR_ButtonTextComponent}} | SCR_ButtonTexture = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonDeviceConfig.c;5|SCR_ButtonTexture}} | SCR_ByteFormat = {{Link|enfusion://ScriptEditor/scripts/Game/Utilities/SCR_ByteFormat.c;5|SCR_ByteFormat}} | SCR_CallsignBaseComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Callsign/SCR_CallsignBaseComponent.c;11|SCR_CallsignBaseComponent}} | SCR_CallsignBaseComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Callsign/SCR_CallsignBaseComponent.c;1|SCR_CallsignBaseComponentClass}} | SCR_CallsignBaseComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/SCR_CallsignBaseComponentSerializer.c;1|SCR_CallsignBaseComponentSerializer}} | SCR_CallsignCharacterComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Callsign/SCR_CallsignCharacterComponent.c;7|SCR_CallsignCharacterComponent}} | SCR_CallsignCharacterComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Callsign/SCR_CallsignCharacterComponent.c;1|SCR_CallsignCharacterComponentClass}} | SCR_CallsignCompanyData = {{Link|enfusion://ScriptEditor/scripts/Game/Callsign/SCR_CallsignCompanyData.c;4|SCR_CallsignCompanyData}} | SCR_CallsignGroupComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Callsign/SCR_CallsignGroupComponent.c;7|SCR_CallsignGroupComponent}} | SCR_CallsignGroupComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Callsign/SCR_CallsignGroupComponent.c;1|SCR_CallsignGroupComponentClass}} | SCR_CallsignInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Callsign/SCR_CallsignInfo.c;4|SCR_CallsignInfo}} | SCR_CallsignManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Callsign/SCR_CallsignManagerComponent.c;12|SCR_CallsignManagerComponent}} | SCR_CallsignManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Callsign/SCR_CallsignManagerComponent.c;2|SCR_CallsignManagerComponentClass}} | SCR_CallsignPlatoonData = {{Link|enfusion://ScriptEditor/scripts/Game/Callsign/SCR_CallsignPlatoonData.c;4|SCR_CallsignPlatoonData}} | SCR_CameraAttributesToolbarAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ToolbarActions/SCR_CameraAttributesToolbarAction.c;1|SCR_CameraAttributesToolbarAction}} | SCR_CameraBase = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/SCR_CameraBase.c;9|SCR_CameraBase}} | SCR_CameraBaseClass = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/SCR_CameraBase.c;1|SCR_CameraBaseClass}} | SCR_CameraCoordinates = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Misc/SCR_EditorCameraDefaultsComponent.c;139|SCR_CameraCoordinates}} | SCR_CameraDataEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_CameraDataEditorComponent.c;8|SCR_CameraDataEditorComponent}} | SCR_CameraDataEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_CameraDataEditorComponent.c;1|SCR_CameraDataEditorComponentClass}} | SCR_CameraEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_CameraEditorComponent.c;13|SCR_CameraEditorComponent}} | SCR_CameraEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_CameraEditorComponent.c;1|SCR_CameraEditorComponentClass}} | SCR_CameraFilterEditor = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_CameraFiltersEditorComponent.c;86|SCR_CameraFilterEditor}} | SCR_CameraFilterEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_CameraFilterEditorAttribute.c;4|SCR_CameraFilterEditorAttribute}} | SCR_CameraFilterEffectEditor = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_CameraFiltersEditorComponent.c;128|SCR_CameraFilterEffectEditor}} | SCR_CameraFiltersEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_CameraFiltersEditorComponent.c;28|SCR_CameraFiltersEditorComponent}} | SCR_CameraFiltersEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_CameraFiltersEditorComponent.c;1|SCR_CameraFiltersEditorComponentClass}} | SCR_CameraInfoEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_CameraInfoEditorUIComponent.c;1|SCR_CameraInfoEditorUIComponent}} | SCR_CameraLimitedEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_CameraLimitedEditorComponent.c;17|SCR_CameraLimitedEditorComponent}} | SCR_CameraLimitedEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_CameraLimitedEditorComponent.c;5|SCR_CameraLimitedEditorComponentClass}} | SCR_CameraManager = {{Link|enfusion://ScriptEditor/scripts/GameCode/Camera/SCR_CameraManager.c;5|SCR_CameraManager}} | SCR_CameraManagerClass = {{Link|enfusion://ScriptEditor/scripts/GameCode/Camera/SCR_CameraManager.c;1|SCR_CameraManagerClass}} | SCR_CameraParticleEditor = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_CameraParticlesEditorComponent.c;84|SCR_CameraParticleEditor}} | SCR_CameraParticleEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_CameraParticleEditorAttribute.c;4|SCR_CameraParticleEditorAttribute}} | SCR_CameraParticlesEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_CameraParticlesEditorComponent.c;28|SCR_CameraParticlesEditorComponent}} | SCR_CameraParticlesEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_CameraParticlesEditorComponent.c;1|SCR_CameraParticlesEditorComponentClass}} | SCR_CameraPostProcessEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/SCR_PostProcessCameraComponent.c;73|SCR_CameraPostProcessEffect}} | SCR_CameraShakeManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_CameraShakeManagerComponent.c;7|SCR_CameraShakeManagerComponent}} | SCR_CameraShakeManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_CameraShakeManagerComponent.c;1|SCR_CameraShakeManagerComponentClass}} | SCR_CampaignAIVehicleSpawnComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignAIVehicleSpawnComponent.c;6|SCR_CampaignAIVehicleSpawnComponent}} | SCR_CampaignAIVehicleSpawnComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignAIVehicleSpawnComponent.c;1|SCR_CampaignAIVehicleSpawnComponentClass}} | SCR_CampaignArmoryStorageComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignArmoryStorageComponent.c;5|SCR_CampaignArmoryStorageComponent}} | SCR_CampaignArmoryStorageComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignArmoryStorageComponent.c;1|SCR_CampaignArmoryStorageComponentClass}} | SCR_CampaignBuildingAreaMeshComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AreaMesh/SCR_CampaignBuildingAreaMeshComponent.c;6|SCR_CampaignBuildingAreaMeshComponent}} | SCR_CampaignBuildingAreaMeshComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AreaMesh/SCR_CampaignBuildingAreaMeshComponent.c;1|SCR_CampaignBuildingAreaMeshComponentClass}} | SCR_CampaignBuildingBudgetEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_CampaignBuildingBudgetEditorComponent.c;6|SCR_CampaignBuildingBudgetEditorComponent}} | SCR_CampaignBuildingBudgetEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_CampaignBuildingBudgetEditorComponent.c;1|SCR_CampaignBuildingBudgetEditorComponentClass}} | SCR_CampaignBuildingBudgetEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_CampaignBuildingBudgetEditorUIComponent.c;1|SCR_CampaignBuildingBudgetEditorUIComponent}} | SCR_CampaignBuildingBudgetToEvaluateData = {{Link|enfusion://ScriptEditor/scripts/Game/Building/SCR_CampaignBuildingBudgetToEvaluateData.c;2|SCR_CampaignBuildingBudgetToEvaluateData}} | SCR_CampaignBuildingBuildUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_CampaignBuildingBuildUserAction.c;2|SCR_CampaignBuildingBuildUserAction}} | SCR_CampaignBuildingCameraEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_CampaignBuildingCameraEditorComponent.c;8|SCR_CampaignBuildingCameraEditorComponent}} | SCR_CampaignBuildingCameraEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_CampaignBuildingCameraEditorComponent.c;1|SCR_CampaignBuildingCameraEditorComponentClass}} | SCR_CampaignBuildingCampaignBudgetToEvaluateData = {{Link|enfusion://ScriptEditor/scripts/Game/Building/SCR_CampaignBuildingCampaignBudgetToEvaluateData.c;1|SCR_CampaignBuildingCampaignBudgetToEvaluateData}} | SCR_CampaignBuildingCloseHintCondition = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Hints/HintConditions/SCR_CampaignBuildingCloseHintCondition.c;1|SCR_CampaignBuildingCloseHintCondition}} | SCR_CampaignBuildingComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignBuildingComponent.c;6|SCR_CampaignBuildingComponent}} | SCR_CampaignBuildingComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignBuildingComponent.c;1|SCR_CampaignBuildingComponentClass}} | SCR_CampaignBuildingCompositionComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Building/SCR_CampaignBuildingCompositionComponent.c;29|SCR_CampaignBuildingCompositionComponent}} | SCR_CampaignBuildingCompositionComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Building/SCR_CampaignBuildingCompositionComponent.c;1|SCR_CampaignBuildingCompositionComponentClass}} | SCR_CampaignBuildingCompositionComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/GameMode/Editor/SCR_CampaignBuildingCompositionComponentSerializer.c;1|SCR_CampaignBuildingCompositionComponentSerializer}} | SCR_CampaignBuildingCompositionOutline = {{Link|enfusion://ScriptEditor/scripts/Game/Building/SCR_CampaignBuildingCompositionOutlineRegistry.c;84|SCR_CampaignBuildingCompositionOutline}} | SCR_CampaignBuildingCompositionOutlineManager = {{Link|enfusion://ScriptEditor/scripts/Game/Building/SCR_CampaignBuildingCompositionOutlineRegistry.c;5|SCR_CampaignBuildingCompositionOutlineManager}} | SCR_CampaignBuildingCooldownBudgetToEvaluateData = {{Link|enfusion://ScriptEditor/scripts/Game/Building/SCR_CampaignBuildingCooldownBudgetToEvaluateData.c;1|SCR_CampaignBuildingCooldownBudgetToEvaluateData}} | SCR_CampaignBuildingCooldownWithRankBudgetToEvaluateData = {{Link|enfusion://ScriptEditor/scripts/Game/Building/SCR_CampaignBuildingCooldownWithRankBudgetToEvaluateData.c;1|SCR_CampaignBuildingCooldownWithRankBudgetToEvaluateData}} | SCR_CampaignBuildingDeleteSelectedContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_CampaignBuildingDeleteSelectedContextAction.c;2|SCR_CampaignBuildingDeleteSelectedContextAction}} | SCR_CampaignBuildingDisassemblyUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_CampaignBuildingDisassemblyUserAction.c;1|SCR_CampaignBuildingDisassemblyUserAction}} | SCR_CampaignBuildingEditableEntityFilter = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/EditableEntityFilters/SCR_CampaignBuildingEditableEntityFilter.c;2|SCR_CampaignBuildingEditableEntityFilter}} | SCR_CampaignBuildingEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_CampaignBuildingEditorComponent.c;9|SCR_CampaignBuildingEditorComponent}} | SCR_CampaignBuildingEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_CampaignBuildingEditorComponent.c;2|SCR_CampaignBuildingEditorComponentClass}} | SCR_CampaignBuildingGadgetToolComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Building/SCR_CampaignBuildingGadgetToolComponent.c;5|SCR_CampaignBuildingGadgetToolComponent}} | SCR_CampaignBuildingGadgetToolComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Building/SCR_CampaignBuildingGadgetToolComponent.c;1|SCR_CampaignBuildingGadgetToolComponentClass}} | SCR_CampaignBuildingLayoutComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Building/SCR_CampaignBuildingLayoutComponent.c;6|SCR_CampaignBuildingLayoutComponent}} | SCR_CampaignBuildingLayoutComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Building/SCR_CampaignBuildingLayoutComponent.c;1|SCR_CampaignBuildingLayoutComponentClass}} | SCR_CampaignBuildingLimitCylinderManualCameraComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_CampaignBuildingLimitCylinderManualCameraComponent.c;8|SCR_CampaignBuildingLimitCylinderManualCameraComponent}} | SCR_CampaignBuildingManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignBuildingManagerComponent.c;16|SCR_CampaignBuildingManagerComponent}} | SCR_CampaignBuildingManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignBuildingManagerComponent.c;9|SCR_CampaignBuildingManagerComponentClass}} | SCR_CampaignBuildingMaxValueBudgetToEvaluateData = {{Link|enfusion://ScriptEditor/scripts/Game/Building/SCR_CampaignBuildingMaxValueBudgetToEvaluateData.c;2|SCR_CampaignBuildingMaxValueBudgetToEvaluateData}} | SCR_CampaignBuildingNetworkComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Building/SCR_CampaignBuildingNetworkComponent.c;6|SCR_CampaignBuildingNetworkComponent}} | SCR_CampaignBuildingNetworkComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Building/SCR_CampaignBuildingNetworkComponent.c;1|SCR_CampaignBuildingNetworkComponentClass}} | SCR_CampaignBuildingNotMilitaryBaseHintCondition = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Hints/HintConditions/SCR_CampaignBuildingNotMilitaryBaseHintCondition.c;1|SCR_CampaignBuildingNotMilitaryBaseHintCondition}} | SCR_CampaignBuildingObstructionExceptionComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_CampaignBuildingObstructionExceptionComponent.c;6|SCR_CampaignBuildingObstructionExceptionComponent}} | SCR_CampaignBuildingObstructionExceptionComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_CampaignBuildingObstructionExceptionComponent.c;2|SCR_CampaignBuildingObstructionExceptionComponentClass}} | SCR_CampaignBuildingOpenedLabelHintCondition = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Hints/HintConditions/SCR_CampaignBuildingOpenedLabelHintCondition.c;1|SCR_CampaignBuildingOpenedLabelHintCondition}} | SCR_CampaignBuildingPlacingEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_CampaignBuildingPlacingEditorComponent.c;17|SCR_CampaignBuildingPlacingEditorComponent}} | SCR_CampaignBuildingPlacingEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_CampaignBuildingPlacingEditorComponent.c;1|SCR_CampaignBuildingPlacingEditorComponentClass}} | SCR_CampaignBuildingPlacingObstructionEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_CampaignBuildingPlacingObstructionEditorComponent.c;13|SCR_CampaignBuildingPlacingObstructionEditorComponent}} | SCR_CampaignBuildingPlacingObstructionEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_CampaignBuildingPlacingObstructionEditorComponent.c;1|SCR_CampaignBuildingPlacingObstructionEditorComponentClass}} | SCR_CampaignBuildingProviderComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Building/SCR_CampaignBuildingProviderComponent.c;6|SCR_CampaignBuildingProviderComponent}} | SCR_CampaignBuildingProviderComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Building/SCR_CampaignBuildingProviderComponent.c;1|SCR_CampaignBuildingProviderComponentClass}} | SCR_CampaignBuildingProviderComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/GameMode/Conflict/SCR_CampaignBuildingProviderComponentSerializer.c;1|SCR_CampaignBuildingProviderComponentSerializer}} | SCR_CampaignBuildingRankBudgetToEvaluateData = {{Link|enfusion://ScriptEditor/scripts/Game/Building/SCR_CampaignBuildingRankBudgetToEvaluateData.c;2|SCR_CampaignBuildingRankBudgetToEvaluateData}} | SCR_CampaignBuildingRefreshUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_CampaignBuildingRefreshUIComponent.c;1|SCR_CampaignBuildingRefreshUIComponent}} | SCR_CampaignBuildingScreenEffectUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_CampaignBuildingScreenEffectUIComponent.c;1|SCR_CampaignBuildingScreenEffectUIComponent}} | SCR_CampaignBuildingServicesEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_CampaignBuildingServicesEditorUIComponent.c;1|SCR_CampaignBuildingServicesEditorUIComponent}} | SCR_CampaignBuildingStartUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_CampaignBuildingStartUserAction.c;1|SCR_CampaignBuildingStartUserAction}} | SCR_CampaignBuildingSupplyEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_CampaignBuildingSupplyEditorUIComponent.c;1|SCR_CampaignBuildingSupplyEditorUIComponent}} | SCR_CampaignBuildingTransformingEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_CampaignBuildingTransformingEditorComponent.c;10|SCR_CampaignBuildingTransformingEditorComponent}} | SCR_CampaignBuildingTransformingEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_CampaignBuildingTransformingEditorComponent.c;1|SCR_CampaignBuildingTransformingEditorComponentClass}} | SCR_CampaignClientData = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignClientData.c;3|SCR_CampaignClientData}} | SCR_CampaignCustomBase = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Locations/SCR_CampaignMilitaryBaseComponent.c;2714|SCR_CampaignCustomBase}} | SCR_CampaignDeployMobileAssemblyUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_CampaignDeployMobileAssemblyUserAction.c;1|SCR_CampaignDeployMobileAssemblyUserAction}} | SCR_CampaignFaction = {{Link|enfusion://ScriptEditor/scripts/Game/Faction/SCR_CampaignFaction.c;1|SCR_CampaignFaction}} | SCR_CampaignFactionAvailableWeapons = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignFactionAvailableWeapons.c;2|SCR_CampaignFactionAvailableWeapons}} | SCR_CampaignFactionCommanderHandlerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/Components/SCR_CampaignFactionCommanderHandlerComponent.c;7|SCR_CampaignFactionCommanderHandlerComponent}} | SCR_CampaignFactionCommanderHandlerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/Components/SCR_CampaignFactionCommanderHandlerComponent.c;2|SCR_CampaignFactionCommanderHandlerComponentClass}} | SCR_CampaignFactionCommanderPlayerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/Components/SCR_CampaignFactionCommanderPlayerComponent.c;15|SCR_CampaignFactionCommanderPlayerComponent}} | SCR_CampaignFactionCommanderPlayerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/Components/SCR_CampaignFactionCommanderPlayerComponent.c;2|SCR_CampaignFactionCommanderPlayerComponentClass}} | SCR_CampaignFactionManager = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/FactionManager/SCR_CampaignFactionManager.c;49|SCR_CampaignFactionManager}} | SCR_CampaignFactionManagerClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/FactionManager/SCR_CampaignFactionManager.c;45|SCR_CampaignFactionManagerClass}} | SCR_CampaignFastTravelComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_CampaignFastTravelComponent.c;35|SCR_CampaignFastTravelComponent}} | SCR_CampaignFastTravelComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_CampaignFastTravelComponent.c;1|SCR_CampaignFastTravelComponentClass}} | SCR_CampaignFeedbackComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignFeedbackComponent.c;5|SCR_CampaignFeedbackComponent}} | SCR_CampaignFeedbackComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignFeedbackComponent.c;1|SCR_CampaignFeedbackComponentClass}} | SCR_CampaignHintEntry = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignHintStorage.c;22|SCR_CampaignHintEntry}} | SCR_CampaignHintStorage = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignHintStorage.c;2|SCR_CampaignHintStorage}} | SCR_CampaignInfoDisplay = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_CampaignInfoDisplay.c;2|SCR_CampaignInfoDisplay}} | SCR_CampaignLogisticMapUIBase = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Conflict/SCR_CampaignLogisticMapUIBase.c;1|SCR_CampaignLogisticMapUIBase}} | SCR_CampaignMapInfoDisplay = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_CampaignMapInfoDisplay.c;1|SCR_CampaignMapInfoDisplay}} | SCR_CampaignMapUIBase = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Conflict/SCR_CampaignMapUIBase.c;2|SCR_CampaignMapUIBase}} | SCR_CampaignMapUIElement = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Conflict/SCR_CampaignMapUIElement.c;2|SCR_CampaignMapUIElement}} | SCR_CampaignMapUIPlayerHighlight = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Conflict/SCR_CampaignMapUIPlayerHighlight.c;2|SCR_CampaignMapUIPlayerHighlight}} | SCR_CampaignMapUIService = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Conflict/SCR_CampaignMapUIService.c;2|SCR_CampaignMapUIService}} | SCR_CampaignMenuConfiguration = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/CampaignMenu/SCR_CampaignMenuConfiguration.c;1|SCR_CampaignMenuConfiguration}} | SCR_CampaignMenuUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/CampaignMenu/SCR_CampaignMenuUI.c;1|SCR_CampaignMenuUI}} | SCR_CampaignMHQLockComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_CampaignMHQLockComponent.c;5|SCR_CampaignMHQLockComponent}} | SCR_CampaignMHQLockComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_CampaignMHQLockComponent.c;1|SCR_CampaignMHQLockComponentClass}} | SCR_CampaignMilitaryBaseComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Locations/SCR_CampaignMilitaryBaseComponent.c;30|SCR_CampaignMilitaryBaseComponent}} | SCR_CampaignMilitaryBaseComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Locations/SCR_CampaignMilitaryBaseComponent.c;1|SCR_CampaignMilitaryBaseComponentClass}} | SCR_CampaignMilitaryBaseComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/GameMode/Conflict/SCR_CampaignMilitaryBaseComponentSerializer.c;1|SCR_CampaignMilitaryBaseComponentSerializer}} | SCR_CampaignMilitaryBaseManager = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignMilitaryBaseManager.c;24|SCR_CampaignMilitaryBaseManager}} | SCR_CampaignMilitaryBaseMapDescriptorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Locations/SCR_CampaignMilitaryBaseMapDescriptorComponent.c;5|SCR_CampaignMilitaryBaseMapDescriptorComponent}} | SCR_CampaignMilitaryBaseMapDescriptorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Locations/SCR_CampaignMilitaryBaseMapDescriptorComponent.c;1|SCR_CampaignMilitaryBaseMapDescriptorComponentClass}} | SCR_CampaignMilitaryBaseTaskData = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Campaign/SCR_CampaignMilitaryBaseTaskData.c;1|SCR_CampaignMilitaryBaseTaskData}} | SCR_CampaignMilitaryBaseTaskEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Campaign/SCR_CampaignMilitaryBaseTaskEntity.c;9|SCR_CampaignMilitaryBaseTaskEntity}} | SCR_CampaignMilitaryBaseTaskEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Campaign/SCR_CampaignMilitaryBaseTaskEntity.c;5|SCR_CampaignMilitaryBaseTaskEntityClass}} | SCR_CampaignMilitaryTaskSave = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/States/SCR_TaskSystemSerializer.c;413|SCR_CampaignMilitaryTaskSave}} | SCR_CampaignMobileAssemblyComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignMobileAssemblyComponent.c;15|SCR_CampaignMobileAssemblyComponent}} | SCR_CampaignMobileAssemblyComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignMobileAssemblyComponent.c;1|SCR_CampaignMobileAssemblyComponentClass}} | SCR_CampaignMobileAssemblyComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/Vehicle/SCR_CampaignMobileAssemblyComponentSerializer.c;1|SCR_CampaignMobileAssemblyComponentSerializer}} | SCR_CampaignMobileAssemblyStandaloneComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignMobileAssemblyStandaloneComponent.c;5|SCR_CampaignMobileAssemblyStandaloneComponent}} | SCR_CampaignMobileAssemblyStandaloneComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignMobileAssemblyStandaloneComponent.c;1|SCR_CampaignMobileAssemblyStandaloneComponentClass}} | SCR_CampaignNetworkComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignNetworkComponent.c;27|SCR_CampaignNetworkComponent}} | SCR_CampaignNetworkComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignNetworkComponent.c;2|SCR_CampaignNetworkComponentClass}} | SCR_CampaignOperationsMapUIBase = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Conflict/SCR_CampaignOperationsMapUIBase.c;1|SCR_CampaignOperationsMapUIBase}} | SCR_CampaignPackMobileAssemblyUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_CampaignPackMobileAssemblyUserAction.c;1|SCR_CampaignPackMobileAssemblyUserAction}} | SCR_CampaignRadioMsg = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Campaign/SCR_CampaignRadioMsg.c;2|SCR_CampaignRadioMsg}} | SCR_CampaignRadioMsgWhitelistConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Campaign/SCR_CampaignRadioMsgWhitelistConfig.c;1|SCR_CampaignRadioMsgWhitelistConfig}} | SCR_CampaignRadioRegisteringComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignRadioRegisteringComponent.c;5|SCR_CampaignRadioRegisteringComponent}} | SCR_CampaignRadioRegisteringComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignRadioRegisteringComponent.c;1|SCR_CampaignRadioRegisteringComponentClass}} | SCR_CampaignReconfigureHQRadioUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_CampaignReconfigureHQRadioUserAction.c;2|SCR_CampaignReconfigureHQRadioUserAction}} | SCR_CampaignReconfigureRelayUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_CampaignReconfigureRelayUserAction.c;2|SCR_CampaignReconfigureRelayUserAction}} | SCR_CampaignRelayAlternativeSpot = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Campaign/SCR_CampaignRelayAlternativeSpot.c;8|SCR_CampaignRelayAlternativeSpot}} | SCR_CampaignRelayAlternativeSpotClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Campaign/SCR_CampaignRelayAlternativeSpot.c;1|SCR_CampaignRelayAlternativeSpotClass}} | SCR_CampaignRepairEntityUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_CampaignRepairEntityUserAction.c;3|SCR_CampaignRepairEntityUserAction}} | SCR_CampaignSeizingComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Components/SCR_CampaignSeizingComponent.c;5|SCR_CampaignSeizingComponent}} | SCR_CampaignSeizingComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Components/SCR_CampaignSeizingComponent.c;1|SCR_CampaignSeizingComponentClass}} | SCR_CampaignServiceCompositionComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignServiceCompositionComponent.c;6|SCR_CampaignServiceCompositionComponent}} | SCR_CampaignServiceCompositionComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignServiceCompositionComponent.c;1|SCR_CampaignServiceCompositionComponentClass}} | SCR_CampaignServiceEntityComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignServiceEntityComponent.c;7|SCR_CampaignServiceEntityComponent}} | SCR_CampaignServiceEntityComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignServiceEntityComponent.c;2|SCR_CampaignServiceEntityComponentClass}} | SCR_CampaignSoundComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_CampaignSoundComponent.c;6|SCR_CampaignSoundComponent}} | SCR_CampaignSoundComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_CampaignSoundComponent.c;1|SCR_CampaignSoundComponentClass}} | SCR_CampaignSourceBaseComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Locations/SCR_CampaignSourceBaseComponent.c;5|SCR_CampaignSourceBaseComponent}} | SCR_CampaignSourceBaseComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Locations/SCR_CampaignSourceBaseComponent.c;1|SCR_CampaignSourceBaseComponentClass}} | SCR_CampaignSpawnPointGroup = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignSpawnPointGroup.c;7|SCR_CampaignSpawnPointGroup}} | SCR_CampaignSpawnPointGroupClass = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignSpawnPointGroup.c;1|SCR_CampaignSpawnPointGroupClass}} | SCR_CampaignSuppliesComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignSuppliesComponent.c;7|SCR_CampaignSuppliesComponent}} | SCR_CampaignSuppliesComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignSuppliesComponent.c;1|SCR_CampaignSuppliesComponentClass}} | SCR_CampaignSupplyRestrictedSpawnPoint = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignSupplyRestrictedSpawnPoint.c;6|SCR_CampaignSupplyRestrictedSpawnPoint}} | SCR_CampaignSupplyRestrictedSpawnPointClass = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignSupplyRestrictedSpawnPoint.c;1|SCR_CampaignSupplyRestrictedSpawnPointClass}} | SCR_CampaignTaskType = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Campaign/SCR_CampaignTaskType.c;2|SCR_CampaignTaskType}} | SCR_CampaignTileComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/CampaignMenu/SCR_CampaignTileComponent.c;1|SCR_CampaignTileComponent}} | SCR_CancelDownloadConfirmationDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/Common/Dialogs/SCR_CancelDownloadConfirmationDialog.c;2|SCR_CancelDownloadConfirmationDialog}} | SCR_CancelMyReportDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/Common/Dialogs/SCR_CancelMyReportDialog.c;2|SCR_CancelMyReportDialog}} | SCR_CanChangeTurretFireModeCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Weapon/SCR_CanChangeTurretFireModeCondition.c;1|SCR_CanChangeTurretFireModeCondition}} | SCR_CanCharacterLeaveLadderCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Character/SCR_CanCharacterLeaveLadderCondition.c;4|SCR_CanCharacterLeaveLadderCondition}} | SCR_CanItemBeInspectedCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Character/SCR_CanItemBeInspectedCondition.c;1|SCR_CanItemBeInspectedCondition}} | SCR_CanOperateVehicleDoorCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Vehicle/SCR_CanOperateVehicleDoorCondition.c;1|SCR_CanOperateVehicleDoorCondition}} | SCR_CanTurnOutCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Vehicle/SCR_CanTurnOutCondition.c;1|SCR_CanTurnOutCondition}} | SCR_CaptureAndHoldArea = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/CaptureAndHold/SCR_CaptureAndHoldArea.c;13|SCR_CaptureAndHoldArea}} | SCR_CaptureAndHoldAreaClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/CaptureAndHold/SCR_CaptureAndHoldArea.c;1|SCR_CaptureAndHoldAreaClass}} | SCR_CaptureAndHoldManager = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/CaptureAndHold/SCR_CaptureAndHoldManager.c;9|SCR_CaptureAndHoldManager}} | SCR_CaptureAndHoldManagerClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/CaptureAndHold/SCR_CaptureAndHoldManager.c;1|SCR_CaptureAndHoldManagerClass}} | SCR_CaptureAndHoldObjectiveDisplay = {{Link|enfusion://ScriptEditor/scripts/Game/UI/CaptureAndHold/SCR_CaptureAndHoldObjectiveDisplay.c;3|SCR_CaptureAndHoldObjectiveDisplay}} | SCR_CaptureAndHoldObjectiveDisplayObject = {{Link|enfusion://ScriptEditor/scripts/Game/UI/CaptureAndHold/SCR_CaptureAndHoldObjectiveDisplayObject.c;2|SCR_CaptureAndHoldObjectiveDisplayObject}} | SCR_CaptureAndHoldSpawnArea = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/CaptureAndHold/SCR_CaptureAndHoldSpawnArea.c;8|SCR_CaptureAndHoldSpawnArea}} | SCR_CaptureAndHoldSpawnAreaClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/CaptureAndHold/SCR_CaptureAndHoldSpawnArea.c;1|SCR_CaptureAndHoldSpawnAreaClass}} | SCR_CaptureAndHoldTeamScoreDisplay = {{Link|enfusion://ScriptEditor/scripts/Game/UI/CaptureAndHold/SCR_CaptureAndHoldTeamScoreDisplay.c;14|SCR_CaptureAndHoldTeamScoreDisplay}} | SCR_CaptureAndHoldTeamScoreDisplayObject = {{Link|enfusion://ScriptEditor/scripts/Game/UI/CaptureAndHold/SCR_CaptureAndHoldTeamScoreDisplayObject.c;2|SCR_CaptureAndHoldTeamScoreDisplayObject}} | SCR_CaptureArea = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Areas/SCR_CaptureArea.c;23|SCR_CaptureArea}} | SCR_CaptureAreaClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Areas/SCR_CaptureArea.c;1|SCR_CaptureAreaClass}} | SCR_CaptureBasesContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/Campaign/SCR_CaptureBasesContextAction.c;2|SCR_CaptureBasesContextAction}} | SCR_CapturePointAreaMeshComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AreaMesh/SCR_CapturePointAreaMeshComponent.c;6|SCR_CapturePointAreaMeshComponent}} | SCR_CapturePointAreaMeshComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AreaMesh/SCR_CapturePointAreaMeshComponent.c;1|SCR_CapturePointAreaMeshComponentClass}} | SCR_CarControllerComponent = {{Link|enfusion://ScriptEditor/scripts/GameCode/Vehicle/SCR_CarControllerComponent.c;9|SCR_CarControllerComponent}} | SCR_CarControllerComponent_B = {{Link|enfusion://ScriptEditor/scripts/GameCode/Vehicle/SCR_CarControllerComponent_B.c;9|SCR_CarControllerComponent_B}} | SCR_CarControllerComponent_BClass = {{Link|enfusion://ScriptEditor/scripts/GameCode/Vehicle/SCR_CarControllerComponent_B.c;1|SCR_CarControllerComponent_BClass}} | SCR_CarControllerComponentClass = {{Link|enfusion://ScriptEditor/scripts/GameCode/Vehicle/SCR_CarControllerComponent.c;1|SCR_CarControllerComponentClass}} | SCR_CareerEndScreenUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/GameOverScreen/CareerEndScreen/SCR_CareerEndScreenUI.c;2|SCR_CareerEndScreenUI}} | SCR_CareerProfileHUD = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/CareerProfile/SCR_CareerProfileHUD.c;2|SCR_CareerProfileHUD}} | SCR_CareerProfileMenuUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/CareerProfile/SCR_CareerProfileMenuUI.c;1|SCR_CareerProfileMenuUI}} | SCR_CareerProfileOverviewUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/CareerProfile/SCR_CareerProfileOverviewUI.c;2|SCR_CareerProfileOverviewUI}} | SCR_CareerSpecializationsUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/CareerProfile/SCR_CareerSpecializationsUI.c;2|SCR_CareerSpecializationsUI}} | SCR_CareerUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/CareerProfile/SCR_CareerUI.c;2|SCR_CareerUI}} | SCR_CatalogEntitySpawnerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Spawner/CatalogSpawner/SCR_CatalogEntitySpawnerComponent.c;63|SCR_CatalogEntitySpawnerComponent}} | SCR_CatalogEntitySpawnerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Spawner/CatalogSpawner/SCR_CatalogEntitySpawnerComponent.c;1|SCR_CatalogEntitySpawnerComponentClass}} | SCR_CatalogSpawnerUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_CatalogSpawnerUserAction.c;4|SCR_CatalogSpawnerUserAction}} | SCR_ChangeableComponentBase = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_ChangeableComponentBase.c;4|SCR_ChangeableComponentBase}} | SCR_ChangeBallisticPageAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_ChangeBallisticPageAction.c;1|SCR_ChangeBallisticPageAction}} | SCR_ChangeBallisticShellTypeAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_ChangeBallisticShellTypeAction.c;1|SCR_ChangeBallisticShellTypeAction}} | SCR_ChangeComparmentAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_ChangeComparmentAction.c;1|SCR_ChangeComparmentAction}} | SCR_ChangeFuzeTimerUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_ChangeFuzeTimerUserAction.c;1|SCR_ChangeFuzeTimerUserAction}} | SCR_CharacterAnimationComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_CharacterAnimationComponent.c;5|SCR_CharacterAnimationComponent}} | SCR_CharacterAnimationComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_CharacterAnimationComponent.c;1|SCR_CharacterAnimationComponentClass}} | SCR_CharacterAnimationEventCinematicTrack = {{Link|enfusion://ScriptEditor/scripts/Game/Cinematics/SCR_CharacterAnimationEventCinematicTrack.c;1|SCR_CharacterAnimationEventCinematicTrack}} | SCR_CharacterBleedingCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Character/SCR_CharacterBleedingCondition.c;1|SCR_CharacterBleedingCondition}} | SCR_CharacterBloodAttributeDynamicDescription = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/DynamicDescriptions/SCR_CharacterBloodAttributeDynamicDescription.c;4|SCR_CharacterBloodAttributeDynamicDescription}} | SCR_CharacterBloodHitZone = {{Link|enfusion://ScriptEditor/scripts/Game/HitZone/SCR_CharacterHitZone.c;429|SCR_CharacterBloodHitZone}} | SCR_CharacterBuoyancyComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_CharacterBuoyancyComponent.c;6|SCR_CharacterBuoyancyComponent}} | SCR_CharacterBuoyancyComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_CharacterBuoyancyComponent.c;1|SCR_CharacterBuoyancyComponentClass}} | SCR_CharacterCameraHandlerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Character/CharacterCameraHandlerComponent.c;6|SCR_CharacterCameraHandlerComponent}} | SCR_CharacterCameraHandlerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Character/CharacterCameraHandlerComponent.c;1|SCR_CharacterCameraHandlerComponentClass}} | SCR_CharacterCameraHandlerComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/Character/SCR_CharacterCameraHandlerComponentSerializer.c;1|SCR_CharacterCameraHandlerComponentSerializer}} | SCR_CharacterCanFireWeaponCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Character/SCR_CharacterCanFireWeaponCondition.c;2|SCR_CharacterCanFireWeaponCondition}} | SCR_CharacterCanGetOutCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Character/SCR_CharacterCanGetOutCondition.c;3|SCR_CharacterCanGetOutCondition}} | SCR_CharacterCommandFly = {{Link|enfusion://ScriptEditor/scripts/Game/Character/Examples/SCR_CharacterCommandFly.c;1|SCR_CharacterCommandFly}} | SCR_CharacterCommandHandlerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Character/SCR_CharacterCommandHandler.c;6|SCR_CharacterCommandHandlerComponent}} | SCR_CharacterCommandHandlerComponent_Tests = {{Link|enfusion://ScriptEditor/scripts/Game/Character/Examples/SCR_CharacterCommandHandler_Tests.c;6|SCR_CharacterCommandHandlerComponent_Tests}} | SCR_CharacterCommandHandlerComponent_TestsClass = {{Link|enfusion://ScriptEditor/scripts/Game/Character/Examples/SCR_CharacterCommandHandler_Tests.c;1|SCR_CharacterCommandHandlerComponent_TestsClass}} | SCR_CharacterCommandHandlerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Character/SCR_CharacterCommandHandler.c;1|SCR_CharacterCommandHandlerComponentClass}} | SCR_CharacterCommandLoiter = {{Link|enfusion://ScriptEditor/scripts/Game/Character/Commands/SCR_CharacterCommandLoiter.c;8|SCR_CharacterCommandLoiter}} | SCR_CharacterCommandSwim = {{Link|enfusion://ScriptEditor/scripts/Game/Character/Examples/SCR_CharacterCommandSwim.c;25|SCR_CharacterCommandSwim}} | SCR_CharacterCommandSwimST = {{Link|enfusion://ScriptEditor/scripts/Game/Character/Examples/SCR_CharacterCommandSwim.c;4|SCR_CharacterCommandSwimST}} | SCR_CharacterControllerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Character/SCR_CharacterControllerComponent.c;35|SCR_CharacterControllerComponent}} | SCR_CharacterControllerComponent_Test = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_CharacterControllerComponent_Test.c;6|SCR_CharacterControllerComponent_Test}} | SCR_CharacterControllerComponent_TestClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_CharacterControllerComponent_Test.c;1|SCR_CharacterControllerComponent_TestClass}} | SCR_CharacterControllerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Character/SCR_CharacterControllerComponent.c;1|SCR_CharacterControllerComponentClass}} | SCR_CharacterDamageManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Damage/SCR_CharacterDamageManagerComponent.c;18|SCR_CharacterDamageManagerComponent}} | SCR_CharacterDamageManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Damage/SCR_CharacterDamageManagerComponent.c;13|SCR_CharacterDamageManagerComponentClass}} | SCR_CharacterDamageManagerEvaluator = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/SCR_CharacterDamageManagerEvaluator.c;1|SCR_CharacterDamageManagerEvaluator}} | SCR_CharacterEditableEntityUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/EditableEntities/SCR_CharacterEditableEntityUIComponent.c;1|SCR_CharacterEditableEntityUIComponent}} | SCR_CharacterEntityWaypointGroupCommand = {{Link|enfusion://ScriptEditor/scripts/Game/Commanding/Commands/SCR_CharacterEntityWaypointGroupCommand.c;2|SCR_CharacterEntityWaypointGroupCommand}} | SCR_CharacterFactionAffiliationComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_CharacterFactionAffiliationComponent.c;6|SCR_CharacterFactionAffiliationComponent}} | SCR_CharacterFactionAffiliationComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_CharacterFactionAffiliationComponent.c;1|SCR_CharacterFactionAffiliationComponentClass}} | SCR_CharacterFocusModeCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Character/SCR_CharacterFocusModeCondition.c;3|SCR_CharacterFocusModeCondition}} | SCR_CharacterFreelookCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Character/SCR_CharacterFreelookCondition.c;2|SCR_CharacterFreelookCondition}} | SCR_CharacterHasConsumableItemEquippedCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Character/SCR_CharacterHasConsumableEquippedCondition.c;4|SCR_CharacterHasConsumableItemEquippedCondition}} | SCR_CharacterHasGadgetCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Character/SCR_CharacterHasGadgetCondition.c;4|SCR_CharacterHasGadgetCondition}} | SCR_CharacterHasGadgetInHandCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Character/SCR_CharacterHasGadgetInHandCondition.c;1|SCR_CharacterHasGadgetInHandCondition}} | SCR_CharacterHasItemInHandCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Character/SCR_CharacterHasItemInHandCondition.c;1|SCR_CharacterHasItemInHandCondition}} | SCR_CharacterHasLongRadioCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Character/SCR_CharacterHasLongRadioCondition.c;3|SCR_CharacterHasLongRadioCondition}} | SCR_CharacterHasWeaponCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Character/SCR_CharacterHasWeaponCondition.c;3|SCR_CharacterHasWeaponCondition}} | SCR_CharacterHeadHitZone = {{Link|enfusion://ScriptEditor/scripts/Game/HitZone/SCR_CharacterHitZone.c;520|SCR_CharacterHeadHitZone}} | SCR_CharacterHealthHitZone = {{Link|enfusion://ScriptEditor/scripts/Game/HitZone/SCR_CharacterHitZone.c;373|SCR_CharacterHealthHitZone}} | SCR_CharacterHelper = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_CharacterHelper.c;1|SCR_CharacterHelper}} | SCR_CharacterHitZone = {{Link|enfusion://ScriptEditor/scripts/Game/HitZone/SCR_CharacterHitZone.c;170|SCR_CharacterHitZone}} | SCR_CharacterHitZoneGroupName = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/SCR_HitZoneGroupNameHolder.c;58|SCR_CharacterHitZoneGroupName}} | SCR_CharacterHitZoneSelector = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/DamageAreas/SCR_CharacterHitZoneSelector.c;1|SCR_CharacterHitZoneSelector}} | SCR_CharacterIdentityBioGroupConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Identity/Containers/SCR_CharacterIdentityBioGroupConfig.c;1|SCR_CharacterIdentityBioGroupConfig}} | SCR_CharacterIdentityBloodType = {{Link|enfusion://ScriptEditor/scripts/Game/Identity/Containers/SCR_CharacterIdentityBloodType.c;1|SCR_CharacterIdentityBloodType}} | SCR_CharacterIdentityComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Identity/SCR_CharacterIdentityComponent.c;6|SCR_CharacterIdentityComponent}} | SCR_CharacterIdentityComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Identity/SCR_CharacterIdentityComponent.c;1|SCR_CharacterIdentityComponentClass}} | SCR_CharacterIdentityTooltipDetail = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_CharacterIdentityTooltipDetail.c;1|SCR_CharacterIdentityTooltipDetail}} | SCR_CharacterInventoryPreviewAttributes = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_CharacterInventoryPreviewAttributes.c;1|SCR_CharacterInventoryPreviewAttributes}} | SCR_CharacterInventoryStorageComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_CharacterInventoryStorageComponent.c;89|SCR_CharacterInventoryStorageComponent}} | SCR_CharacterInventoryStorageComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_CharacterInventoryStorageComponent.c;6|SCR_CharacterInventoryStorageComponentClass}} | SCR_CharacterIsFallingCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Character/SCR_CharacterIsFallingCondition.c;3|SCR_CharacterIsFallingCondition}} | SCR_CharacterIsGettingInCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Character/SCR_CharacterIsGettingInCondition.c;3|SCR_CharacterIsGettingInCondition}} | SCR_CharacterIsGettingOutCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Character/SCR_CharacterIsGettingOutCondition.c;3|SCR_CharacterIsGettingOutCondition}} | SCR_CharacterIsInVehicleCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Character/SCR_CharacterIsInVehicleCondition.c;3|SCR_CharacterIsInVehicleCondition}} | SCR_CharacterIsSwimmingCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Character/SCR_CharacterIsSwimmingCondition.c;3|SCR_CharacterIsSwimmingCondition}} | SCR_CharacterIsUsingItem = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Character/SCR_CharacterIsUsingItem.c;4|SCR_CharacterIsUsingItem}} | SCR_CharacterPerceivableComponent = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_CharacterPerceivableComponent.c;5|SCR_CharacterPerceivableComponent}} | SCR_CharacterPerceivableComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_CharacterPerceivableComponent.c;1|SCR_CharacterPerceivableComponentClass}} | SCR_CharacterQuickBarSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/Character/SCR_CharacterQuickBarSerializer.c;7|SCR_CharacterQuickBarSerializer}} | SCR_CharacterRadioCountCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Character/SCR_CharacterRadioCountCondition.c;6|SCR_CharacterRadioCountCondition}} | SCR_CharacterRank = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_CharacterRankComponent.c;236|SCR_CharacterRank}} | SCR_CharacterRankComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_CharacterRankComponent.c;6|SCR_CharacterRankComponent}} | SCR_CharacterRankComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_CharacterRankComponent.c;1|SCR_CharacterRankComponentClass}} | SCR_CharacterRegistrationComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_CharacterRegistrationComponent.c;6|SCR_CharacterRegistrationComponent}} | SCR_CharacterRegistrationComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_CharacterRegistrationComponent.c;1|SCR_CharacterRegistrationComponentClass}} | SCR_CharacterReloadingCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Character/SCR_CharacterReloadingCondition.c;2|SCR_CharacterReloadingCondition}} | SCR_CharacterResilienceHitZone = {{Link|enfusion://ScriptEditor/scripts/Game/HitZone/SCR_CharacterHitZone.c;379|SCR_CharacterResilienceHitZone}} | SCR_CharacterSoundComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_CharacterSoundComponent.c;13|SCR_CharacterSoundComponent}} | SCR_CharacterSoundComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_CharacterSoundComponent.c;1|SCR_CharacterSoundComponentClass}} | SCR_CharacterSprintingCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Character/SCR_CharacterSprintingCondition.c;1|SCR_CharacterSprintingCondition}} | SCR_CharacterStaminaComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Character/SCR_CharacterStaminaComponent.c;6|SCR_CharacterStaminaComponent}} | SCR_CharacterStaminaComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Character/SCR_CharacterStaminaComponent.c;1|SCR_CharacterStaminaComponentClass}} | SCR_CharacterStanceCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Character/SCR_CharacterStanceCondition.c;3|SCR_CharacterStanceCondition}} | SCR_CharacterTriggerEntity = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Entities/Triggers/SCR_CharacterTriggerEntity.c;6|SCR_CharacterTriggerEntity}} | SCR_CharacterTriggerEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Entities/Triggers/SCR_CharacterTriggerEntity.c;1|SCR_CharacterTriggerEntityClass}} | SCR_CharacterUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Characters/SCR_CharacterComponent.c;1|SCR_CharacterUIComponent}} | SCR_CharacterVicinityComponent = {{Link|enfusion://ScriptEditor/scripts/GameCode/Components/InventorySystem/SCR_CharacterVicinityComponent.c;6|SCR_CharacterVicinityComponent}} | SCR_CharacterVicinityComponentClass = {{Link|enfusion://ScriptEditor/scripts/GameCode/Components/InventorySystem/SCR_CharacterVicinityComponent.c;2|SCR_CharacterVicinityComponentClass}} | SCR_CharacterWeaponTypeCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Character/SCR_CharacterWeaponTypeCondition.c;3|SCR_CharacterWeaponTypeCondition}} | SCR_CharBleedingEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_CharBleedingEditorAttribute.c;1|SCR_CharBleedingEditorAttribute}} | SCR_CharRegenEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_CharRegenEditorAttribute.c;1|SCR_CharRegenEditorAttribute}} | SCR_CharUnconsciousnessEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_CharUnconsciousnessEditorAttribute.c;1|SCR_CharUnconsciousnessEditorAttribute}} | SCR_ChatChannel = {{Link|enfusion://ScriptEditor/scripts/Game/Chat/SCR_ChatChannel.c;2|SCR_ChatChannel}} | SCR_ChatComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Network/SCR_ChatComponent.c;5|SCR_ChatComponent}} | SCR_ChatComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Network/SCR_ChatComponent.c;1|SCR_ChatComponentClass}} | SCR_ChatHud = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Chat/SCR_ChatHud.c;7|SCR_ChatHud}} | SCR_ChatMessage = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Chat/SCR_ChatMessage.c;7|SCR_ChatMessage}} | SCR_ChatMessageGeneral = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Chat/SCR_ChatMessage.c;19|SCR_ChatMessageGeneral}} | SCR_ChatMessageLineComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Chat/SCR_ChatMessageLineComponent.c;1|SCR_ChatMessageLineComponent}} | SCR_ChatMessageLineWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Chat/SCR_ChatMessageLineWidgets.c;3|SCR_ChatMessageLineWidgets}} | SCR_ChatMessagePrivate = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Chat/SCR_ChatMessage.c;35|SCR_ChatMessagePrivate}} | SCR_ChatMessageRadioProtocol = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Chat/SCR_ChatMessage.c;46|SCR_ChatMessageRadioProtocol}} | SCR_ChatMessageStyle = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Chat/SCR_ChatMessageStyle.c;5|SCR_ChatMessageStyle}} | SCR_ChatPanel = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Chat/SCR_ChatPanel.c;6|SCR_ChatPanel}} | SCR_ChatPanelManager = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Chat/SCR_ChatPanelManager.c;11|SCR_ChatPanelManager}} | SCR_ChatPanelWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Chat/SCR_ChatPanelWidgets.c;4|SCR_ChatPanelWidgets}} | SCR_CheckboxComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_CheckBox/SCR_CheckboxComponent.c;3|SCR_CheckboxComponent}} | SCR_CheckboxEditorAttributeUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Attributes/SCR_CheckboxEditorAttributeUIComponent.c;3|SCR_CheckboxEditorAttributeUIComponent}} | SCR_CheckFuelAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SupportStations/SCR_CheckFuelAction.c;1|SCR_CheckFuelAction}} | SCR_CheckRuinModelsAndUsagePlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_CheckRuinModelsAndUsagePlugin.c;2|SCR_CheckRuinModelsAndUsagePlugin}} | SCR_ChildTaskInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_ExtendedTask.c;7|SCR_ChildTaskInvoker}} | SCR_ChimeraAIAgent = {{Link|enfusion://ScriptEditor/scripts/Game/AI/SCR_ChimeraAIAgent.c;5|SCR_ChimeraAIAgent}} | SCR_ChimeraAIAgentClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/SCR_ChimeraAIAgent.c;1|SCR_ChimeraAIAgentClass}} | SCR_ChimeraCharacter = {{Link|enfusion://ScriptEditor/scripts/GameCode/Character/SCR_ChimeraCharacter.c;5|SCR_ChimeraCharacter}} | SCR_ChimeraCharacterClass = {{Link|enfusion://ScriptEditor/scripts/GameCode/Character/SCR_ChimeraCharacter.c;1|SCR_ChimeraCharacterClass}} | SCR_ChooseAndSpawnOccupantsContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_ChooseAndSpawnOccupantsContextAction.c;1|SCR_ChooseAndSpawnOccupantsContextAction}} | SCR_CinematicTrackBase = {{Link|enfusion://ScriptEditor/scripts/Game/Cinematics/SCR_CinematicTrackBase.c;1|SCR_CinematicTrackBase}} | SCR_ClassRenamingParam = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_ClassRenamingPlugin.c;804|SCR_ClassRenamingParam}} | SCR_ClassRenamingPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_ClassRenamingPlugin.c;2|SCR_ClassRenamingPlugin}} | SCR_CleanSweepArea = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/CleanSweep/SCR_CleanSweepArea.c;6|SCR_CleanSweepArea}} | SCR_CleanSweepAreaClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/CleanSweep/SCR_CleanSweepArea.c;1|SCR_CleanSweepAreaClass}} | SCR_CleanSweepAreaSelectionButtonComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/CleanSweep/SCR_CleanSweepAreaSelectionButtonComponent.c;1|SCR_CleanSweepAreaSelectionButtonComponent}} | SCR_CleanSweepNetworkComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/CleanSweep/SCR_CleanSweepNetworkComponent.c;6|SCR_CleanSweepNetworkComponent}} | SCR_CleanSweepNetworkComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/CleanSweep/SCR_CleanSweepNetworkComponent.c;1|SCR_CleanSweepNetworkComponentClass}} | SCR_ClockHandComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_ClockHandComponent.c;7|SCR_ClockHandComponent}} | SCR_ClockHandComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_ClockHandComponent.c;2|SCR_ClockHandComponentClass}} | SCR_CloseVehicleDoorUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_CloseVehicleDoorUserAction.c;1|SCR_CloseVehicleDoorUserAction}} | SCR_ClothingLoadoutData = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Loadout/SCR_PlayerLoadoutData.c;9|SCR_ClothingLoadoutData}} | SCR_COKDeliveryAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_COKDeliveryAction.c;1|SCR_COKDeliveryAction}} | SCR_CollapseWidgetComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_CollapseWidgetComponent.c;9|SCR_CollapseWidgetComponent}} | SCR_CollimatorControllerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Sights/SCR_CollimatorControllerComponent.c;6|SCR_CollimatorControllerComponent}} | SCR_CollimatorControllerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Sights/SCR_CollimatorControllerComponent.c;1|SCR_CollimatorControllerComponentClass}} | SCR_CollimatorSightsComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Sights/SCR_CollimatorSightsComponent.c;15|SCR_CollimatorSightsComponent}} | SCR_CollimatorSightsComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Sights/SCR_CollimatorSightsComponent.c;1|SCR_CollimatorSightsComponentClass}} | SCR_CollisionDamageContainer = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Damage/SCR_CollisionDamageContainer.c;1|SCR_CollisionDamageContainer}} | SCR_CollisionDamageEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/DamageEffects/DamageEffectSources/SCR_CollisionDamageEffect.c;1|SCR_CollisionDamageEffect}} | SCR_ColorAHSV = {{Link|enfusion://ScriptEditor/scripts/Game/Utilities/SCR_ColorAHSV.c;1|SCR_ColorAHSV}} | SCR_ColorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_ColorComponent.c;45|SCR_ColorComponent}} | SCR_ColoredTextNotificationUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_ColoredTextNotificationUIInfo.c;1|SCR_ColoredTextNotificationUIInfo}} | SCR_ColorizationComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_ColorizationComponent.c;1|SCR_ColorizationComponent}} | SCR_ColorUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_ColorUIInfo.c;1|SCR_ColorUIInfo}} | SCR_CombinedDSConfig = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/ServerHosting/SCR_JsonApiStructHandler.c;97|SCR_CombinedDSConfig}} | SCR_CombiningInventoryItemHintUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_CombiningInventoryItemHintUIInfo.c;1|SCR_CombiningInventoryItemHintUIInfo}} | SCR_ComboBoxComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_ComboBox/SCR_ComboBoxComponent.c;1|SCR_ComboBoxComponent}} | SCR_ComboBoxIconComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_ComboBox/SCR_ComboBoxIconComponent.c;1|SCR_ComboBoxIconComponent}} | SCR_ComboModalHandler = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_ComboBox/SCR_ComboBoxComponent.c;601|SCR_ComboModalHandler}} | SCR_ComboRequiredDeployableParts = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_ComboRequiredDeployableParts.c;1|SCR_ComboRequiredDeployableParts}} | SCR_CommandActionsEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_CommandActionsEditorComponent.c;10|SCR_CommandActionsEditorComponent}} | SCR_CommandActionsEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_CommandActionsEditorComponent.c;1|SCR_CommandActionsEditorComponentClass}} | SCR_CommandActionsEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_CommandActionsEditorUIComponent.c;1|SCR_CommandActionsEditorUIComponent}} | SCR_CommanderAdditionalXPRewardInfo = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/SCR_CommanderAdditionalXPRewardInfo.c;1|SCR_CommanderAdditionalXPRewardInfo}} | SCR_CommanderGraphLinesData = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CommanderGraphLinesData.c;1|SCR_CommanderGraphLinesData}} | SCR_CommandingManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Commanding/SCR_CommandingManagerComponent.c;7|SCR_CommandingManagerComponent}} | SCR_CommandingManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Commanding/SCR_CommandingManagerComponent.c;1|SCR_CommandingManagerComponentClass}} | SCR_CommandingMenuEntry = {{Link|enfusion://ScriptEditor/scripts/Game/Commanding/SCR_CommandingMenuEntry.c;2|SCR_CommandingMenuEntry}} | SCR_CommandMenuOpenCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Command/SCR_CommandMenuOpenCondition.c;1|SCR_CommandMenuOpenCondition}} | SCR_CommandMenuSelectedCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Command/SCR_CommandMenuSelectedCondition.c;1|SCR_CommandMenuSelectedCondition}} | SCR_CommandModeEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Modes/SCR_CommandModeEditorUIComponent.c;1|SCR_CommandModeEditorUIComponent}} | SCR_CommandPostMapCampaignUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Conflict/SCR_CommandPostMapCampaignUI.c;1|SCR_CommandPostMapCampaignUI}} | SCR_CommandPostMapMenuUI = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_CommandPostMapMenuUI.c;3|SCR_CommandPostMapMenuUI}} | SCR_CommandToolbarEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Toolbar/SCR_CommandToolbarEditorUIComponent.c;3|SCR_CommandToolbarEditorUIComponent}} | SCR_CommentEditableEntityUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/EditableEntities/SCR_CommentEditableEntityUIComponent.c;1|SCR_CommentEditableEntityUIComponent}} | SCR_CommentPlacablePrefabDetail = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_CommentPlacablePrefabDetail.c;1|SCR_CommentPlacablePrefabDetail}} | SCR_CommonDialogs = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/CommonDialogs.c;5|SCR_CommonDialogs}} | SCR_CommonItemTypeSearchPredicate = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_InventoryStorageManagerComponent.c;130|SCR_CommonItemTypeSearchPredicate}} | SCR_CommunicationSoundComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_CommunicationSoundComponent.c;60|SCR_CommunicationSoundComponent}} | SCR_CommunicationSoundComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_CommunicationSoundComponent.c;1|SCR_CommunicationSoundComponentClass}} | SCR_CommunitySubMenu = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/MainMenu/SCR_CommunitySubMenu.c;1|SCR_CommunitySubMenu}} | SCR_CompareGroupRadioFreq = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SelectionMenu/SCR_VONRadialDisplay.c;10|SCR_CompareGroupRadioFreq}} | SCR_CompareLocalizeProperty = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ConfigurableWidgetEntries/SCR_CompareLocalizeProperty.c;3|SCR_CompareLocalizeProperty}} | SCR_CompareMissionAddonName = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/ScenarioMenu/SCR_ContentBrowser_ScenarioSubMenu.c;607|SCR_CompareMissionAddonName}} | SCR_CompareMissionFavourite = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/ScenarioMenu/SCR_ContentBrowser_ScenarioSubMenu.c;645|SCR_CompareMissionFavourite}} | SCR_CompareMissionName = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/ScenarioMenu/SCR_ContentBrowser_ScenarioSubMenu.c;582|SCR_CompareMissionName}} | SCR_CompareMissionPlayerCount = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/ScenarioMenu/SCR_ContentBrowser_ScenarioSubMenu.c;635|SCR_CompareMissionPlayerCount}} | SCR_CompareMissionTimeSinceLastPlay = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/ScenarioMenu/SCR_ContentBrowser_ScenarioSubMenu.c;655|SCR_CompareMissionTimeSinceLastPlay}} | SCR_Comparer = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Logic/SCR_Comparer.c;13|SCR_Comparer}} | SCR_ComparerOperator = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Logic/SCR_Comparer.c;2|SCR_ComparerOperator}} | SCR_CompareWorkshopItemName = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/MainMenu/SCR_ContentBrowser_AddonsSubMenu.c;1661|SCR_CompareWorkshopItemName}} | SCR_CompareWorkshopItemTargetSize = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/MainMenu/SCR_ContentBrowser_AddonsSubMenu.c;1706|SCR_CompareWorkshopItemTargetSize}} | SCR_CompareWorkshopItemTimeSinceFirstDownload = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/MainMenu/SCR_ContentBrowser_AddonsSubMenu.c;1690|SCR_CompareWorkshopItemTimeSinceFirstDownload}} | SCR_CompareWorkshopItemTimeSinceLastPlay = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/MainMenu/SCR_ContentBrowser_AddonsSubMenu.c;1675|SCR_CompareWorkshopItemTimeSinceLastPlay}} | SCR_CompartmentAccessComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_CompartmentAccessComponent.c;15|SCR_CompartmentAccessComponent}} | SCR_CompartmentAccessComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_CompartmentAccessComponent.c;9|SCR_CompartmentAccessComponentClass}} | SCR_CompartmentDoorInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_CompartmentDoorInfo.c;1|SCR_CompartmentDoorInfo}} | SCR_CompartmentUserAction = {{Link|enfusion://ScriptEditor/scripts/GameCode/UserAction/SCR_CompartmentUserAction.c;1|SCR_CompartmentUserAction}} | SCR_CompassComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_CompassComponent.c;66|SCR_CompassComponent}} | SCR_CompassComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_CompassComponent.c;10|SCR_CompassComponentClass}} | SCR_CompassUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_CompassUIComponent.c;5|SCR_CompassUIComponent}} | SCR_CompatibleAttachmentPredicate = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_InventoryStorageManagerComponent.c;157|SCR_CompatibleAttachmentPredicate}} | SCR_CompatibleSlotEditableEntityFilter = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/EditableEntityFilters/SCR_CompatibleSlotEditableEntityFilter.c;1|SCR_CompatibleSlotEditableEntityFilter}} | SCR_ComponentHelper = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_ComponentHelper.c;1|SCR_ComponentHelper}} | SCR_CompositionDetails = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/CompositionInfo/SCR_CompositionInfoHandlerComponent.c;256|SCR_CompositionDetails}} | SCR_CompositionInfoDisplay = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/CompositionInfo/SCR_CompositionInfoDisplay.c;1|SCR_CompositionInfoDisplay}} | SCR_CompositionInfoHandlerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/CompositionInfo/SCR_CompositionInfoHandlerComponent.c;8|SCR_CompositionInfoHandlerComponent}} | SCR_CompositionInfoHandlerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/CompositionInfo/SCR_CompositionInfoHandlerComponent.c;3|SCR_CompositionInfoHandlerComponentClass}} | SCR_CompositionInfoWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/CompositionInfo/SCR_CompositionInfoWidgets.c;3|SCR_CompositionInfoWidgets}} | SCR_CompositionSlotManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Compositions/SCR_CompositionSlotManagerComponent.c;10|SCR_CompositionSlotManagerComponent}} | SCR_CompositionSlotManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Compositions/SCR_CompositionSlotManagerComponent.c;5|SCR_CompositionSlotManagerComponentClass}} | SCR_CompositionValidationEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Compositions/SCR_CompositionValidationEntity.c;7|SCR_CompositionValidationEntity}} | SCR_CompositionValidationEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Compositions/SCR_CompositionValidationEntity.c;2|SCR_CompositionValidationEntityClass}} | SCR_ConcussionDamageEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/DamageEffects/DamageEffectSources/SCR_ConcussionDamageEffect.c;1|SCR_ConcussionDamageEffect}} | SCR_ConditionCheckUIEntry = {{Link|enfusion://ScriptEditor/scripts/Game/TaskSolver/SCR_ConditionCheckUIEntry.c;1|SCR_ConditionCheckUIEntry}} | SCR_ConfigHelper = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_ConfigHelper.c;1|SCR_ConfigHelper}} | SCR_ConfigHelperT = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_ConfigHelper.c;172|SCR_ConfigHelperT}} | SCR_ConfigListComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/ServerHosting/SCR_ConfigListComponent.c;5|SCR_ConfigListComponent}} | SCR_ConfigListEntries = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/ServerHosting/SCR_ConfigListEntries.c;1|SCR_ConfigListEntries}} | SCR_ConfigListEntry = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/ServerHosting/SCR_ConfigListEntries.c;49|SCR_ConfigListEntry}} | SCR_ConfigListEntryCustomTitle = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/ServerHosting/SCR_ConfigListEntries.c;80|SCR_ConfigListEntryCustomTitle}} | SCR_ConfigUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_ConfigUIComponent.c;1|SCR_ConfigUIComponent}} | SCR_ConfigurableDialogUi = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SCR_ConfigurableDialogUI.c;16|SCR_ConfigurableDialogUi}} | SCR_ConfigurableDialogUiButtonPreset = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SCR_ConfigurableDialogUI.c;735|SCR_ConfigurableDialogUiButtonPreset}} | SCR_ConfigurableDialogUiPreset = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SCR_ConfigurableDialogUI.c;762|SCR_ConfigurableDialogUiPreset}} | SCR_ConfigurableDialogUiPresets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SCR_ConfigurableDialogUI.c;802|SCR_ConfigurableDialogUiPresets}} | SCR_ConfigurableDialogUiProxy = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SCR_ConfigurableDialogUI.c;641|SCR_ConfigurableDialogUiProxy}} | SCR_ConfirmationDialogWorkbench = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/Editor/SCR_UpdateAllEditablePrefabsPlugin.c;120|SCR_ConfirmationDialogWorkbench}} | SCR_ConfirmBasesSignalsWidgetComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/Configurator/SCR_ConfirmBasesSignalsWidgetComponent.c;1|SCR_ConfirmBasesSignalsWidgetComponent}} | SCR_ConnectionStateButtonComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/MainMenu/SCR_ConnectionStateButtonComponent.c;3|SCR_ConnectionStateButtonComponent}} | SCR_ConnectionStateButtonComponent_StatusPreset = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/MainMenu/SCR_ConnectionStateButtonComponent.c;378|SCR_ConnectionStateButtonComponent_StatusPreset}} | SCR_ConnectionUICommon = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/Common/SCR_ConnectionUICommon.c;1|SCR_ConnectionUICommon}} | SCR_ConsumableBandage = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_ConsumableBandage.c;2|SCR_ConsumableBandage}} | SCR_ConsumableEffectBase = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_ConsumableEffectBase.c;26|SCR_ConsumableEffectBase}} | SCR_ConsumableEffectHealthItems = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_ConsumableEffectHealthItems.c;1|SCR_ConsumableEffectHealthItems}} | SCR_ConsumableItemComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_ConsumableItemComponent.c;7|SCR_ConsumableItemComponent}} | SCR_ConsumableItemComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_ConsumableItemComponent.c;1|SCR_ConsumableItemComponentClass}} | SCR_ConsumableMorphine = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_ConsumableMorphine.c;2|SCR_ConsumableMorphine}} | SCR_ConsumableSalineBag = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_ConsumableSalineBag.c;6|SCR_ConsumableSalineBag}} | SCR_ConsumableTourniquet = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_ConsumableTourniquet.c;2|SCR_ConsumableTourniquet}} | SCR_ConsumableType = {{Link|enfusion://ScriptEditor/scripts/Game/Survival/Consumable/SCR_ConsumableType.c;2|SCR_ConsumableType}} | SCR_ContainerActionTitle = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ContainerActionTitle.c;1|SCR_ContainerActionTitle}} | SCR_ContainerAIActionTitle = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/AIActions/SCR_ContainerAIActionTitle.c;1|SCR_ContainerAIActionTitle}} | SCR_ContainerBudgetManager = {{Link|enfusion://ScriptEditor/scripts/Game/Utilities/SCR_ContainerBudgetManager.c;5|SCR_ContainerBudgetManager}} | SCR_ContainerMedicalActionTitle = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/MedicalActions/SCR_ContainerMedicalActionTitle.c;1|SCR_ContainerMedicalActionTitle}} | SCR_ContentBrowser_AddonsFilteredSubMenu = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/MainMenu/SCR_ContentBrowser_AddonsFilteredSubMenu.c;1|SCR_ContentBrowser_AddonsFilteredSubMenu}} | SCR_ContentBrowser_AddonsSubMenu = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/MainMenu/SCR_ContentBrowser_AddonsSubMenu.c;14|SCR_ContentBrowser_AddonsSubMenu}} | SCR_ContentBrowser_AddonsSubMenuBaseWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/MainMenu/SCR_ContentBrowser_AddonsSubMenuBaseWidgets.c;4|SCR_ContentBrowser_AddonsSubMenuBaseWidgets}} | SCR_ContentBrowser_AddonsTooltipComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/MainMenu/SCR_ContentBrowser_AddonsTooltipComponent.c;4|SCR_ContentBrowser_AddonsTooltipComponent}} | SCR_ContentBrowser_GalleryDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/DetailsMenu/SCR_ContentBrowser_GalleryDialog.c;5|SCR_ContentBrowser_GalleryDialog}} | SCR_ContentBrowser_GalleryDialogWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/DetailsMenu/SCR_ContentBrowser_GalleryDialogWidgets.c;3|SCR_ContentBrowser_GalleryDialogWidgets}} | SCR_ContentBrowser_GalleryWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/DetailsMenu/SCR_ContentBrowser_GalleryWidgets.c;4|SCR_ContentBrowser_GalleryWidgets}} | SCR_ContentBrowser_GetAssetListParams = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/MainMenu/SCR_ContentBrowser_AddonsSubMenu.c;1641|SCR_ContentBrowser_GetAssetListParams}} | SCR_ContentBrowser_GMSaveLineComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/ScenarioMenu/SCR_ContentBrowser_GMSaveLineComponent.c;4|SCR_ContentBrowser_GMSaveLineComponent}} | SCR_ContentBrowser_GMSaveLineWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/ScenarioMenu/SCR_ContentBrowser_GMSaveLineWidgets.c;3|SCR_ContentBrowser_GMSaveLineWidgets}} | SCR_ContentBrowser_SavesSubMenu = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/MainMenu/SCR_ContentBrowser_SavesSubMenu.c;6|SCR_ContentBrowser_SavesSubMenu}} | SCR_ContentBrowser_ScenarioLineComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/ScenarioMenu/SCR_ContentBrowser_ScenarioLineComponent.c;4|SCR_ContentBrowser_ScenarioLineComponent}} | SCR_ContentBrowser_ScenarioLineWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/ScenarioMenu/SCR_ContentBrowser_ScenarioLineWidgets.c;3|SCR_ContentBrowser_ScenarioLineWidgets}} | SCR_ContentBrowser_ScenarioSubMenu = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/ScenarioMenu/SCR_ContentBrowser_ScenarioSubMenu.c;9|SCR_ContentBrowser_ScenarioSubMenu}} | SCR_ContentBrowser_ScenarioSubMenuBase = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/SCR_ContentBrowser_ScenarioSubMenuBase.c;11|SCR_ContentBrowser_ScenarioSubMenuBase}} | SCR_ContentBrowser_ScenarioSubMenuWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/ScenarioMenu/SCR_ContentBrowser_ScenarioSubMenuWidgets.c;4|SCR_ContentBrowser_ScenarioSubMenuWidgets}} | SCR_ContentBrowserActiveFilterEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_ContentBrowserActiveFilterEditorUIComponent.c;1|SCR_ContentBrowserActiveFilterEditorUIComponent}} | SCR_ContentBrowserActiveFiltersEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_ContentBrowserActiveFiltersEditorUIComponent.c;1|SCR_ContentBrowserActiveFiltersEditorUIComponent}} | SCR_ContentBrowserDetails_GalleryComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/DetailsMenu/SCR_ContentBrowserDetails_GalleryComponent.c;5|SCR_ContentBrowserDetails_GalleryComponent}} | SCR_ContentBrowserDetails_OverviewSubMenu = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/DetailsMenu/SCR_ContentBrowserDetails_OverviewSubMenu.c;5|SCR_ContentBrowserDetails_OverviewSubMenu}} | SCR_ContentBrowserDetails_OverviewSubMenuWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/DetailsMenu/SCR_ContentBrowserDetails_OverviewSubMenuWidgets.c;3|SCR_ContentBrowserDetails_OverviewSubMenuWidgets}} | SCR_ContentBrowserDetails_SaveOverviewSubMenu = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/DetailsMenu/SCR_ContentBrowserDetails_SaveOverviewSubMenu.c;1|SCR_ContentBrowserDetails_SaveOverviewSubMenu}} | SCR_ContentBrowserEditorCard = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_ContentBrowserEditorUIComponent.c;713|SCR_ContentBrowserEditorCard}} | SCR_ContentBrowserEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_ContentBrowserEditorComponent.c;16|SCR_ContentBrowserEditorComponent}} | SCR_ContentBrowserEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_ContentBrowserEditorComponent.c;1|SCR_ContentBrowserEditorComponentClass}} | SCR_ContentBrowserEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_ContentBrowserEditorUIComponent.c;4|SCR_ContentBrowserEditorUIComponent}} | SCR_ContentBrowserFiltersEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_ContentBrowserFiltersEditorUIComponent.c;5|SCR_ContentBrowserFiltersEditorUIComponent}} | SCR_ContentBrowserFilterTag = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/MainMenu/ContentBrowserFilters.c;7|SCR_ContentBrowserFilterTag}} | SCR_ContentBrowserSortingBar = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SCR_ContentBrowserSortingBarComponent.c;1|SCR_ContentBrowserSortingBar}} | SCR_ContentBrowserStateManagerEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_ContentBrowserStateManagerEditorUIComponent.c;1|SCR_ContentBrowserStateManagerEditorUIComponent}} | SCR_ContentBrowserTileComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/MainMenu/SCR_ContentBrowserTileComponent.c;5|SCR_ContentBrowserTileComponent}} | SCR_ContentDetailsPanelBase = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/Common/SCR_ContentDetailsPanelBase.c;1|SCR_ContentDetailsPanelBase}} | SCR_ContentDetailsPanelBaseWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/Common/SCR_ContentDetailsPanelBaseWidgets.c;3|SCR_ContentDetailsPanelBaseWidgets}} | SCR_ContentEntryComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/Deprecated/SCR_ContentEntryComponent.c;5|SCR_ContentEntryComponent}} | SCR_ContextActionsEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_ContextActionsEditorComponent.c;15|SCR_ContextActionsEditorComponent}} | SCR_ContextActionsEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_ContextActionsEditorComponent.c;1|SCR_ContextActionsEditorComponentClass}} | SCR_ContextBasicInteractionBlipWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/Interactions/Base/SCR_ContextBasicInteractionBlipWidgets.c;3|SCR_ContextBasicInteractionBlipWidgets}} | SCR_ContextGetIngroupCommand = {{Link|enfusion://ScriptEditor/scripts/Game/Commanding/Commands/SCR_ContextGetInGroupCommand.c;1|SCR_ContextGetIngroupCommand}} | SCR_ContextMenuActionsEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_ContextMenuActionsEditorUIComponent.c;1|SCR_ContextMenuActionsEditorUIComponent}} | SCR_ContextMenuButtonEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_ContextMenuButtonEditorUIComponent.c;1|SCR_ContextMenuButtonEditorUIComponent}} | SCR_ContinuousLoiterCommand = {{Link|enfusion://ScriptEditor/scripts/Game/Commanding/Commands/SCR_BaseContinuousEmoteCommand.c;1|SCR_ContinuousLoiterCommand}} | SCR_ContourPropsConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapPropsConfig.c;202|SCR_ContourPropsConfig}} | SCR_ControllerPreset = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SettingsMenu/SCR_ControllerPresetsConfig.c;16|SCR_ControllerPreset}} | SCR_ControllerPresetsConfig = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SettingsMenu/SCR_ControllerPresetsConfig.c;2|SCR_ControllerPresetsConfig}} | SCR_ControllerPresetsSettingsSubmenu = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SettingsMenu/SCR_ControllerPresetsSettingsSubMenu.c;1|SCR_ControllerPresetsSettingsSubmenu}} | SCR_ControllerSettings = {{Link|enfusion://ScriptEditor/scripts/Game/Global/SCR_ControllerSettings.c;127|SCR_ControllerSettings}} | SCR_ControlModeEditableEntityFilter = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/EditableEntityFilters/SCR_ControlModeEditableEntityFilter.c;1|SCR_ControlModeEditableEntityFilter}} | SCR_ControlPlayerCameraComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_ControlPlayerManualCameraComponent.c;4|SCR_ControlPlayerCameraComponent}} | SCR_ConvexPolygonDamageAreaShape = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/DamageAreas/Shapes/SCR_ConvexPolygonDamageAreaShape.c;1|SCR_ConvexPolygonDamageAreaShape}} | SCR_CooldownData = {{Link|enfusion://ScriptEditor/scripts/Game/Building/SCR_CampaignBuildingCooldownWithRankBudgetToEvaluateData.c;33|SCR_CooldownData}} | SCR_CoordsTool = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_CoordsTool.c;2|SCR_CoordsTool}} | SCR_CoordsTool_CoordsEntry = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_CoordsTool.c;259|SCR_CoordsTool_CoordsEntry}} | SCR_CopyAttributesContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/Placeholder/SCR_CopyAttributesContextAction.c;1|SCR_CopyAttributesContextAction}} | SCR_CopyClassAndMethodPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_CopyClassAndMethodPlugin.c;2|SCR_CopyClassAndMethodPlugin}} | SCR_CopyContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_CopyContextAction.c;1|SCR_CopyContextAction}} | SCR_CopyIngameTimestampContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/Placeholder/SCR_CopyIngameTimestampContextAction.c;1|SCR_CopyIngameTimestampContextAction}} | SCR_CopyPrefabNameContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/Placeholder/SCR_CopyPrefabNameContextAction.c;1|SCR_CopyPrefabNameContextAction}} | SCR_CopyServerTimestampContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/Placeholder/SCR_CopyServerTimestampContextAction.c;1|SCR_CopyServerTimestampContextAction}} | SCR_CopyWorldPositionContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/Placeholder/SCR_CopyWorldPositionContextAction.c;1|SCR_CopyWorldPositionContextAction}} | SCR_CoreMenuHeaderButtonComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/MainMenu/SCR_CoreMenuHeaderButtonComponent.c;2|SCR_CoreMenuHeaderButtonComponent}} | SCR_CoreMenuHeaderComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SCR_CoreMenuHeaderComponent.c;6|SCR_CoreMenuHeaderComponent}} | SCR_CountingTimerUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_CountingTimerUI.c;1|SCR_CountingTimerUI}} | SCR_CourseEndData = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/ApplicationData/SCR_AnalyticsApplicationData.c;78|SCR_CourseEndData}} | SCR_CoverageRadioComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_CoverageRadioComponent.c;6|SCR_CoverageRadioComponent}} | SCR_CoverageRadioComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_CoverageRadioComponent.c;1|SCR_CoverageRadioComponentClass}} | SCR_CreateAIExtraMoveParams = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_CreateAIExtraMoveParams.c;1|SCR_CreateAIExtraMoveParams}} | SCR_CreateAIExtraMoveParams_CombatMove = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_CreateAIExtraMoveParams_CombatMove.c;2|SCR_CreateAIExtraMoveParams_CombatMove}} | SCR_CreateEditablePrefabsPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/Editor/SCR_CreateEditablePrefabsPlugin.c;2|SCR_CreateEditablePrefabsPlugin}} | SCR_CreateEditablePrefabsPluginResourceManager = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/Editor/SCR_CreateEditablePrefabsPlugin.c;79|SCR_CreateEditablePrefabsPluginResourceManager}} | SCR_CreateLayerContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/Placeholder/SCR_CreateLayerContextAction.c;1|SCR_CreateLayerContextAction}} | SCR_CreateLayerWithSelectionContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_CreateLayerWithSelectionContextAction.c;1|SCR_CreateLayerWithSelectionContextAction}} | SCR_CreateNewGroupContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_CreateNewGroupContextAction.c;4|SCR_CreateNewGroupContextAction}} | SCR_CreateNewSaveDialog = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SaveLoad/UI/SCR_CreateNewSaveDialog.c;5|SCR_CreateNewSaveDialog}} | SCR_CreationDateTooltipDetail = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_CreationDateTooltipDetail.c;1|SCR_CreationDateTooltipDetail}} | SCR_Credits = {{Link|enfusion://ScriptEditor/scripts/Game/Credits/SCR_Credits.c;1|SCR_Credits}} | SCR_CreditsDepartmentHeader = {{Link|enfusion://ScriptEditor/scripts/Game/Credits/SCR_CreditsNameList.c;1|SCR_CreditsDepartmentHeader}} | SCR_CreditsHeader = {{Link|enfusion://ScriptEditor/scripts/Game/Credits/SCR_CreditsNameList.c;36|SCR_CreditsHeader}} | SCR_CreditsLicenses = {{Link|enfusion://ScriptEditor/scripts/Game/Credits/SCR_CreditsLicenses.c;1|SCR_CreditsLicenses}} | SCR_CreditsPersonName = {{Link|enfusion://ScriptEditor/scripts/Game/Credits/SCR_CreditsNameList.c;23|SCR_CreditsPersonName}} | SCR_CriticalExplosionDamageEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/DamageEffects/DamageEffectSources/SCR_CriticalExplosionDamageEffect.c;1|SCR_CriticalExplosionDamageEffect}} | SCR_Crosshair = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/Crosshair.c;2|SCR_Crosshair}} | SCR_CrosshairDebug = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/CrosshairDebug.c;1|SCR_CrosshairDebug}} | SCR_CurrentLayerEditableEntityFilter = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/EditableEntityFilters/SCR_CurrentLayerEditableEntityFilter.c;1|SCR_CurrentLayerEditableEntityFilter}} | SCR_CurrentTaskUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Tasks/SCR_CurrentTaskUIComponent.c;1|SCR_CurrentTaskUIComponent}} | SCR_CurrentTaskWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Tasks/SCR_CurrentTaskWidgets.c;3|SCR_CurrentTaskWidgets}} | SCR_CursorCustom = {{Link|enfusion://ScriptEditor/scripts/Game/UI/SCR_CursorCustom.c;3|SCR_CursorCustom}} | SCR_CursorEditor = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_CursorEditorUIComponent.c;615|SCR_CursorEditor}} | SCR_CursorEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_CursorEditorUIComponent.c;3|SCR_CursorEditorUIComponent}} | SCR_CursorStateTitle = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Modules/SCR_MapCursorModule.c;1456|SCR_CursorStateTitle}} | SCR_CursorVisualState = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Modules/SCR_MapCursorModule.c;1426|SCR_CursorVisualState}} | SCR_CustomAreaMeshComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AreaMesh/SCR_CustomAreaMeshComponent.c;6|SCR_CustomAreaMeshComponent}} | SCR_CustomAreaMeshComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AreaMesh/SCR_CustomAreaMeshComponent.c;1|SCR_CustomAreaMeshComponentClass}} | SCR_CustomArrayEditableEntityUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/EditableEntities/SCR_CustomArrayEditableEntityUIComponent.c;1|SCR_CustomArrayEditableEntityUIComponent}} | SCR_CustomDropdownEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_CustomDropdownEditorUIComponent.c;1|SCR_CustomDropdownEditorUIComponent}} | SCR_CustomEditableEntityUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/EditableEntities/SCR_CustomEditableEntityUIComponent.c;1|SCR_CustomEditableEntityUIComponent}} | SCR_CustomMaterialAnimatorEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/SCR_CustomMaterialAnimatorEntity.c;51|SCR_CustomMaterialAnimatorEntity}} | SCR_CustomMaterialAnimatorEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/SCR_CustomMaterialAnimatorEntity.c;47|SCR_CustomMaterialAnimatorEntityClass}} | SCR_CustomReconMarkerEntry = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/Config/ReconMarker/SCR_CustomReconMarkerEntry.c;1|SCR_CustomReconMarkerEntry}} | SCR_CustomReconMarkerEntryTitle = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/Config/ReconMarker/SCR_CustomReconMarkerEntry.c;108|SCR_CustomReconMarkerEntryTitle}} | SCR_CustomTooltipTargetEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Targets/SCR_CustomTooltipTargetEditorUIComponent.c;3|SCR_CustomTooltipTargetEditorUIComponent}} | SCR_CustomTriggerConditions = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Entities/Triggers/TriggerConditions/SCR_CustomTriggerConditions.c;2|SCR_CustomTriggerConditions}} | SCR_CustomTriggerConditionsAltitude = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Entities/Triggers/TriggerConditions/SCR_CustomTriggerConditionsAltitude.c;2|SCR_CustomTriggerConditionsAltitude}} | SCR_CustomTriggerConditionsCheckVehicleEngineRunning = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Entities/Triggers/TriggerConditions/SCR_CustomTriggerConditionsCheckVehicleEngineRunning.c;1|SCR_CustomTriggerConditionsCheckVehicleEngineRunning}} | SCR_CustomTriggerConditionsCheckVehicleForAI = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Entities/Triggers/TriggerConditions/SCR_CustomTriggerConditionsCheckVehicleForAI.c;2|SCR_CustomTriggerConditionsCheckVehicleForAI}} | SCR_CustomTriggerConditionsGeneric = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Entities/Triggers/TriggerConditions/SCR_CustomTriggerConditionsGeneric.c;1|SCR_CustomTriggerConditionsGeneric}} | SCR_CustomTriggerConditionsSpecificClassNameCount = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Entities/Triggers/TriggerConditions/SCR_CustomTriggerConditionsSpecificClassNameCount.c;1|SCR_CustomTriggerConditionsSpecificClassNameCount}} | SCR_CustomTriggerConditionsSpecificPrefabCount = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Entities/Triggers/TriggerConditions/SCR_CustomTriggerConditionsSpecificPrefabCount.c;1|SCR_CustomTriggerConditionsSpecificPrefabCount}} | SCR_CutContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_CutContextAction.c;1|SCR_CutContextAction}} | SCR_CycleContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/Placeholder/SCR_CycleContextAction.c;1|SCR_CycleContextAction}} | SCR_CycleWaypointEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Toolbar/SCR_CycleWaypointEditorUIComponent.c;1|SCR_CycleWaypointEditorUIComponent}} | SCR_DamageArea = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/DamageAreas/SCR_DamageArea.c;1|SCR_DamageArea}} | SCR_DamageAreaComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Damage/SCR_DamageAreaComponent.c;5|SCR_DamageAreaComponent}} | SCR_DamageAreaComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Damage/SCR_DamageAreaComponent.c;1|SCR_DamageAreaComponentClass}} | SCR_DamageAreaShapesPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_DamageAreaShapesPlugin.c;2|SCR_DamageAreaShapesPlugin}} | SCR_DamageBlurEffect = {{Link|enfusion://ScriptEditor/scripts/Game/UI/ScreenEffects/SCR_DamageBlurEffect.c;1|SCR_DamageBlurEffect}} | SCR_DamageContext = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/SCR_DamageContext.c;7|SCR_DamageContext}} | SCR_DamageDisabledTooltipDetail = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_DamageDisabledTooltipDetail.c;1|SCR_DamageDisabledTooltipDetail}} | SCR_DamageEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/DamageEffects/BaseDamageEffects/SCR_DamageEffect.c;6|SCR_DamageEffect}} | SCR_DamageIntensityEntry = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/SCR_DamageIntensityHolder.c;228|SCR_DamageIntensityEntry}} | SCR_DamageIntensityHolder = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/SCR_DamageIntensityHolder.c;13|SCR_DamageIntensityHolder}} | SCR_DamageManagerComponent = {{Link|enfusion://ScriptEditor/scripts/GameCode/Components/SCR_DamageManagerComponent.c;41|SCR_DamageManagerComponent}} | SCR_DamageManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/GameCode/Components/SCR_DamageManagerComponent.c;1|SCR_DamageManagerComponentClass}} | SCR_DamageManagerData = {{Link|enfusion://ScriptEditor/scripts/GameCode/Components/SCR_DamageManagerData.c;2|SCR_DamageManagerData}} | SCR_DamagePassRule = {{Link|enfusion://ScriptEditor/scripts/Game/HitZone/SCR_DamagePassRule.c;2|SCR_DamagePassRule}} | SCR_DamagePassRuleContainerTitle = {{Link|enfusion://ScriptEditor/scripts/Game/HitZone/SCR_DamagePassRule.c;28|SCR_DamagePassRuleContainerTitle}} | SCR_DamagePhaseData = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_DamagePhaseData.c;2|SCR_DamagePhaseData}} | SCR_DamagePhaseTitle = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_DamagePhaseTitle.c;1|SCR_DamagePhaseTitle}} | SCR_DamageRemapData = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_DamageRemapData.c;2|SCR_DamageRemapData}} | SCR_DamageRemapTitle = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_DamageRemapTile.c;1|SCR_DamageRemapTitle}} | SCR_DamageStateConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/SCR_DamageStateConfig.c;1|SCR_DamageStateConfig}} | SCR_DamageStateInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/SCR_DamageStateConfig.c;88|SCR_DamageStateInfo}} | SCR_DamageStateUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_DamageStateUIComponent.c;1|SCR_DamageStateUIComponent}} | SCR_DamageStateUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_DamageStateUIInfo.c;1|SCR_DamageStateUIInfo}} | SCR_DamageSufferingSystem = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/SCR_DamageSufferingSystem.c;1|SCR_DamageSufferingSystem}} | SCR_DataCollectorAchievementsModule = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/DataCollectorModules/SCR_DataCollectorAchievementsModule.c;1|SCR_DataCollectorAchievementsModule}} | SCR_DataCollectorBasicActionsModule = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/DataCollectorModules/SCR_DataCollectorBasicActionsModule.c;1|SCR_DataCollectorBasicActionsModule}} | SCR_DataCollectorCommunicationComponent = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/SCR_DataCollectorCommunicationComponent.c;6|SCR_DataCollectorCommunicationComponent}} | SCR_DataCollectorCommunicationComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/SCR_DataCollectorCommunicationComponent.c;1|SCR_DataCollectorCommunicationComponentClass}} | SCR_DataCollectorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/SCR_DataCollectorComponent.c;6|SCR_DataCollectorComponent}} | SCR_DataCollectorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/SCR_DataCollectorComponent.c;1|SCR_DataCollectorComponentClass}} | SCR_DataCollectorCrimesModule = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/DataCollectorModules/SCR_DataCollectorCrimesModule.c;1|SCR_DataCollectorCrimesModule}} | SCR_DataCollectorDiagComponent = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/SCR_DataCollectorDiagComponent.c;6|SCR_DataCollectorDiagComponent}} | SCR_DataCollectorDiagComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/SCR_DataCollectorDiagComponent.c;1|SCR_DataCollectorDiagComponentClass}} | SCR_DataCollectorDriverModule = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/DataCollectorModules/SCR_DataCollectorDriverModule.c;15|SCR_DataCollectorDriverModule}} | SCR_DataCollectorDriverModuleContext = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/DataCollectorModules/SCR_DataCollectorDriverModule.c;1|SCR_DataCollectorDriverModuleContext}} | SCR_DataCollectorHealingItemsModule = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/DataCollectorModules/SCR_DataCollectorHealingItemsModule.c;29|SCR_DataCollectorHealingItemsModule}} | SCR_DataCollectorModule = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/SCR_DataCollectorModule.c;1|SCR_DataCollectorModule}} | SCR_DataCollectorShootingModule = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/DataCollectorModules/SCR_DataCollectorShootingModule.c;1|SCR_DataCollectorShootingModule}} | SCR_DataCollectorStoreDataModule = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/DataCollectorModules/SCR_DataCollectorStoreDataModule.c;1|SCR_DataCollectorStoreDataModule}} | SCR_DataCollectorSupplyTruckDriverModule = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/DataCollectorModules/SCR_DataCollectorSupplyTruckDriverModule.c;1|SCR_DataCollectorSupplyTruckDriverModule}} | SCR_DataCollectorUI = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/SCR_DataCollectorUI.c;2|SCR_DataCollectorUI}} | SCR_DataToSpreadsheetElement = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/SCR_DataToSpreadsheet.c;461|SCR_DataToSpreadsheetElement}} | SCR_DataToSpreadsheetPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/SCR_DataToSpreadsheet.c;3|SCR_DataToSpreadsheetPlugin}} | SCR_DataToSpreadsheetTemplates = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/SCR_DataToSpreadsheet.c;482|SCR_DataToSpreadsheetTemplates}} | SCR_DataToSpreadsheetTemplatesAttribute = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/SCR_DataToSpreadsheet.c;530|SCR_DataToSpreadsheetTemplatesAttribute}} | SCR_DataToSpreadsheetTemplatesBase = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/SCR_DataToSpreadsheet.c;492|SCR_DataToSpreadsheetTemplatesBase}} | SCR_DataToSpreadsheetTemplatesComponent = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/SCR_DataToSpreadsheet.c;508|SCR_DataToSpreadsheetTemplatesComponent}} | SCR_DataToSpreadsheetTemplatesObject = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/SCR_DataToSpreadsheet.c;546|SCR_DataToSpreadsheetTemplatesObject}} | SCR_DataToSpreadsheetTemplatesObjectArray = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/SCR_DataToSpreadsheet.c;568|SCR_DataToSpreadsheetTemplatesObjectArray}} | SCR_DataToSpreadsheetTemplatesObjectIndex = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/SCR_DataToSpreadsheet.c;587|SCR_DataToSpreadsheetTemplatesObjectIndex}} | SCR_DateAttributeDynamicDescription = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/DynamicDescriptions/SCR_DateAttributeDynamicDescription.c;4|SCR_DateAttributeDynamicDescription}} | SCR_DateAttributeUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Attributes/SCR_DateAttributeUIComponent.c;4|SCR_DateAttributeUIComponent}} | SCR_DateEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_DateEditorAttribute.c;1|SCR_DateEditorAttribute}} | SCR_DateTimeHelper = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_DateTimeHelper.c;1|SCR_DateTimeHelper}} | SCR_DayDurationAttributeDynamicDescription = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/DynamicDescriptions/SCR_DayDurationAttributeDynamicDescription.c;4|SCR_DayDurationAttributeDynamicDescription}} | SCR_DayDurationEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_DayDurationEditorAttribute.c;4|SCR_DayDurationEditorAttribute}} | SCR_DaytimeCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/SCR_DaytimeCondition.c;1|SCR_DaytimeCondition}} | SCR_DayTimeCurveDef = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AmbientSoundsComponent/SCR_DayTimeCurveDef.c;15|SCR_DayTimeCurveDef}} | SCR_DayTimeCurveDefConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AmbientSoundsComponent/SCR_DayTimeCurveDefConfig.c;2|SCR_DayTimeCurveDefConfig}} | SCR_DaytimeEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_DaytimeEditorAttribute.c;4|SCR_DaytimeEditorAttribute}} | SCR_DayTimeInfoAuto = {{Link|enfusion://ScriptEditor/scripts/GameCode/World/TimeAndWeatherManagerEntity.c;988|SCR_DayTimeInfoAuto}} | SCR_DayTimeInfoBase = {{Link|enfusion://ScriptEditor/scripts/GameCode/World/TimeAndWeatherManagerEntity.c;905|SCR_DayTimeInfoBase}} | SCR_DayTimeInfoBetween = {{Link|enfusion://ScriptEditor/scripts/GameCode/World/TimeAndWeatherManagerEntity.c;1034|SCR_DayTimeInfoBetween}} | SCR_DayTimeInfoStatic = {{Link|enfusion://ScriptEditor/scripts/GameCode/World/TimeAndWeatherManagerEntity.c;972|SCR_DayTimeInfoStatic}} | SCR_DbgUI = {{Link|enfusion://ScriptEditor/scripts/Game/Global/SCR_DbgUI.c;1|SCR_DbgUI}} | SCR_DeathDateToolDetail = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_DeathDateToolDetail.c;1|SCR_DeathDateToolDetail}} | SCR_DeathGameOverManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Components/SCR_DeathGameOverManagerComponent.c;7|SCR_DeathGameOverManagerComponent}} | SCR_DeathGameOverManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Components/SCR_DeathGameOverManagerComponent.c;2|SCR_DeathGameOverManagerComponentClass}} | SCR_DeathMatchGameOverScreenInfo = {{Link|enfusion://ScriptEditor/scripts/Game/GameOverScreen/SCR_DeathMatchGameOverScreenInfo.c;1|SCR_DeathMatchGameOverScreenInfo}} | SCR_DeathMusic = {{Link|enfusion://ScriptEditor/scripts/Game/Music/SCR_DeathMusic.c;1|SCR_DeathMusic}} | SCR_DeathScreenEffect = {{Link|enfusion://ScriptEditor/scripts/Game/UI/ScreenEffects/SCR_DeathScreenEffect.c;1|SCR_DeathScreenEffect}} | SCR_DeathScreenUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/GameOverScreen/SCR_DeathScreenUIComponent.c;1|SCR_DeathScreenUIComponent}} | SCR_DebriefingScreenBigImageContent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_DebriefingScreenComponent.c;78|SCR_DebriefingScreenBigImageContent}} | SCR_DebriefingScreenComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_DebriefingScreenComponent.c;7|SCR_DebriefingScreenComponent}} | SCR_DebriefingScreenComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_DebriefingScreenComponent.c;1|SCR_DebriefingScreenComponentClass}} | SCR_DebriefingScreenFinishedObjectivesContent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_DebriefingScreenComponent.c;291|SCR_DebriefingScreenFinishedObjectivesContent}} | SCR_DebriefingScreenMenu = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DeployMenu/SCR_DebriefingScreenMenu.c;2|SCR_DebriefingScreenMenu}} | SCR_DebriefingScreenStatisticBaseClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_DebriefingScreenComponent.c;662|SCR_DebriefingScreenStatisticBaseClass}} | SCR_DebriefingScreenStatisticDeaths = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_DebriefingScreenComponent.c;703|SCR_DebriefingScreenStatisticDeaths}} | SCR_DebriefingScreenStatisticDistanceDriven = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_DebriefingScreenComponent.c;726|SCR_DebriefingScreenStatisticDistanceDriven}} | SCR_DebriefingScreenStatisticDistanceWalked = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_DebriefingScreenComponent.c;715|SCR_DebriefingScreenStatisticDistanceWalked}} | SCR_DebriefingScreenStatisticKills = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_DebriefingScreenComponent.c;692|SCR_DebriefingScreenStatisticKills}} | SCR_DebriefingScreenStatisticsContent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_DebriefingScreenComponent.c;568|SCR_DebriefingScreenStatisticsContent}} | SCR_DebriefingScreenStatisticShotsFired = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_DebriefingScreenComponent.c;681|SCR_DebriefingScreenStatisticShotsFired}} | SCR_DebriefingScreenSummaryContent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_DebriefingScreenComponent.c;117|SCR_DebriefingScreenSummaryContent}} | SCR_DebriefingScreenUnevenFourTiles = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_DebriefingScreenComponent.c;12|SCR_DebriefingScreenUnevenFourTiles}} | SCR_DebrisBuildingEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/debris/DebrisBuildingEntity.c;7|SCR_DebrisBuildingEntity}} | SCR_DebrisBuildingEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/debris/DebrisBuildingEntity.c;1|SCR_DebrisBuildingEntityClass}} | SCR_DebrisSmallEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/debris/DebrisSmallEntity.c;10|SCR_DebrisSmallEntity}} | SCR_DebrisSmallEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/debris/DebrisSmallEntity.c;1|SCR_DebrisSmallEntityClass}} | SCR_DebrisSpawnable = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_DebrisSpawnable.c;1|SCR_DebrisSpawnable}} | SCR_DebugCameraCore = {{Link|enfusion://ScriptEditor/scripts/Game/GameCore/SCR_DebugCameraCore.c;4|SCR_DebugCameraCore}} | SCR_DebugCameraEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/SCR_DebugCameraEntity.c;7|SCR_DebugCameraEntity}} | SCR_DebugCameraEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/SCR_DebugCameraEntity.c;1|SCR_DebugCameraEntityClass}} | SCR_DebugEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_DebugEditorComponent.c;13|SCR_DebugEditorComponent}} | SCR_DebugEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_DebugEditorComponent.c;3|SCR_DebugEditorComponentClass}} | SCR_DebugIdentityTooltipDetail = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_DebugIdentityTooltipDetail.c;1|SCR_DebugIdentityTooltipDetail}} | SCR_DebugLinePlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_DebugLinePlugin.c;2|SCR_DebugLinePlugin}} | SCR_DebugMenuID = {{Link|enfusion://ScriptEditor/scripts/Game/Utilities/DebugMenuID.c;3|SCR_DebugMenuID}} | SCR_DebugShapeHelperComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Helpers/SCR_DebugShapeHelperComponent.c;11|SCR_DebugShapeHelperComponent}} | SCR_DebugShapeHelperComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Helpers/SCR_DebugShapeHelperComponent.c;6|SCR_DebugShapeHelperComponentClass}} | SCR_DebugShapeManager = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/Common/SCR_DebugShapeManager.c;1|SCR_DebugShapeManager}} | SCR_DebugShootComponent = {{Link|enfusion://ScriptEditor/scripts/GameCode/Character/DebugRocketTraces.c;7|SCR_DebugShootComponent}} | SCR_DebugShootComponentClass = {{Link|enfusion://ScriptEditor/scripts/GameCode/Character/DebugRocketTraces.c;3|SCR_DebugShootComponentClass}} | SCR_DebugTooltipDetail = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_DebugTooltipDetail.c;1|SCR_DebugTooltipDetail}} | SCR_DedicatedServerPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_DedicatedServerPlugin.c;2|SCR_DedicatedServerPlugin}} | SCR_DefaultOccupantData = {{Link|enfusion://ScriptEditor/scripts/GameCode/Vehicle/BaseCompartmentSlot.c;456|SCR_DefaultOccupantData}} | SCR_DefaultScenarios = {{Link|enfusion://ScriptEditor/scripts/Game/Workshop/SCR_DefaultScenarios.c;1|SCR_DefaultScenarios}} | SCR_DefendContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_DefendContextAction.c;1|SCR_DefendContextAction}} | SCR_DefenderSpawnerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Spawner/CatalogSpawner/SCR_DefenderSpawnerComponent.c;40|SCR_DefenderSpawnerComponent}} | SCR_DefenderSpawnerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Spawner/CatalogSpawner/SCR_DefenderSpawnerComponent.c;1|SCR_DefenderSpawnerComponentClass}} | SCR_DefendWaypoint = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_DefendWaypoint.c;6|SCR_DefendWaypoint}} | SCR_DefendWaypointClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_DefendWaypoint.c;1|SCR_DefendWaypointClass}} | SCR_DefendWaypointPreset = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_DefendWaypointPreset.c;5|SCR_DefendWaypointPreset}} | SCR_DefendWaypointPresetClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_DefendWaypointPreset.c;1|SCR_DefendWaypointPresetClass}} | SCR_DelegateFactionManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/SCR_DelegateFactionManagerComponent.c;15|SCR_DelegateFactionManagerComponent}} | SCR_DelegateFactionManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/SCR_DelegateFactionManagerComponent.c;1|SCR_DelegateFactionManagerComponentClass}} | SCR_DeleteAddonDependentAddonsDetected = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/Common/Dialogs/SCR_AddonListDialog.c;135|SCR_DeleteAddonDependentAddonsDetected}} | SCR_DeleteAddonDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/Common/Dialogs/SCR_DeleteAddonDialog.c;3|SCR_DeleteAddonDialog}} | SCR_DeleteAddonsListDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/Common/Dialogs/SCR_DeleteAddonsListDialog.c;5|SCR_DeleteAddonsListDialog}} | SCR_DeleteContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/Placeholder/SCR_DeleteContextAction.c;1|SCR_DeleteContextAction}} | SCR_DeleteDestroyedToolbarAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ToolbarActions/SCR_DeleteDestroyedToolbarAction.c;1|SCR_DeleteDestroyedToolbarAction}} | SCR_DeleteSelectedContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_DeleteSelectedContextAction.c;2|SCR_DeleteSelectedContextAction}} | SCR_DeployableHintUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_DeployableHintUIInfo.c;1|SCR_DeployableHintUIInfo}} | SCR_DeployableInventoryItemEquipClothAction = {{Link|enfusion://ScriptEditor/scripts/Game/DeployableInventoryItems/Inventory/SCR_DeployableInventoryItemEquipClothAction.c;1|SCR_DeployableInventoryItemEquipClothAction}} | SCR_DeployableInventoryItemInventoryComponent = {{Link|enfusion://ScriptEditor/scripts/Game/DeployableInventoryItems/Inventory/SCR_DeployableInventoryItemInventoryComponent.c;6|SCR_DeployableInventoryItemInventoryComponent}} | SCR_DeployableInventoryItemInventoryComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/DeployableInventoryItems/Inventory/SCR_DeployableInventoryItemInventoryComponent.c;1|SCR_DeployableInventoryItemInventoryComponentClass}} | SCR_DeployableInventoryItemPickUpAction = {{Link|enfusion://ScriptEditor/scripts/Game/DeployableInventoryItems/Inventory/SCR_DeployableInventoryItemPickUpAction.c;1|SCR_DeployableInventoryItemPickUpAction}} | SCR_DeployableInventoryItemReplacementComponent = {{Link|enfusion://ScriptEditor/scripts/Game/DeployableInventoryItems/Components/SCR_DeployableInventoryItemReplacementComponent.c;11|SCR_DeployableInventoryItemReplacementComponent}} | SCR_DeployableInventoryItemReplacementComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/DeployableInventoryItems/Components/SCR_DeployableInventoryItemReplacementComponent.c;1|SCR_DeployableInventoryItemReplacementComponentClass}} | SCR_DeployableItemSearchPredicate = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_DeployableItemSearchPredicate.c;1|SCR_DeployableItemSearchPredicate}} | SCR_DeployableItemState = {{Link|enfusion://ScriptEditor/scripts/Game/DeployableInventoryItems/Components/SCR_BaseDeployableInventoryItemComponent.c;17|SCR_DeployableItemState}} | SCR_DeployablePlaceableItemComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_DeployablePlaceableItemComponent.c;6|SCR_DeployablePlaceableItemComponent}} | SCR_DeployablePlaceableItemComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_DeployablePlaceableItemComponent.c;1|SCR_DeployablePlaceableItemComponentClass}} | SCR_DeployableRadioTicketEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_DeployableRadioTicketAttribute.c;1|SCR_DeployableRadioTicketEditorAttribute}} | SCR_DeployableSpawnPoint = {{Link|enfusion://ScriptEditor/scripts/Game/DeployableInventoryItems/SCR_DeployableSpawnPoint.c;11|SCR_DeployableSpawnPoint}} | SCR_DeployableSpawnPoint_Invoker = {{Link|enfusion://ScriptEditor/scripts/Game/DeployableInventoryItems/SCR_DeployableSpawnPoint.c;8|SCR_DeployableSpawnPoint_Invoker}} | SCR_DeployableSpawnPointClass = {{Link|enfusion://ScriptEditor/scripts/Game/DeployableInventoryItems/SCR_DeployableSpawnPoint.c;1|SCR_DeployableSpawnPointClass}} | SCR_DeployableSpawnPointSystem = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/SCR_DeployableSpawnPointSystem.c;1|SCR_DeployableSpawnPointSystem}} | SCR_DeployableVariantContainer = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_DeployableVariantContainer.c;1|SCR_DeployableVariantContainer}} | SCR_DeployButton = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DeployMenu/SCR_DeployMenuBase.c;957|SCR_DeployButton}} | SCR_DeployButtonBase = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DeployMenu/SCR_DeployRequestUIBaseComponent.c;145|SCR_DeployButtonBase}} | SCR_DeployCollimatorAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_DeployCollimatorAction.c;1|SCR_DeployCollimatorAction}} | SCR_DeployInventoryItemAction = {{Link|enfusion://ScriptEditor/scripts/Game/DeployableInventoryItems/SCR_DeployInventoryItemAction.c;1|SCR_DeployInventoryItemAction}} | SCR_DeployInventoryItemBaseAction = {{Link|enfusion://ScriptEditor/scripts/Game/DeployableInventoryItems/SCR_DeployInventoryItemBaseAction.c;1|SCR_DeployInventoryItemBaseAction}} | SCR_DeployInventoryItemRestrictedAction = {{Link|enfusion://ScriptEditor/scripts/Game/DeployableInventoryItems/SCR_DeployInventoryItemRestrictedAction.c;1|SCR_DeployInventoryItemRestrictedAction}} | SCR_DeployMenuBase = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DeployMenu/SCR_DeployMenuBase.c;6|SCR_DeployMenuBase}} | SCR_DeployMenuBaseScreenComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_DeployMenuBaseScreenComponent.c;7|SCR_DeployMenuBaseScreenComponent}} | SCR_DeployMenuBaseScreenComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_DeployMenuBaseScreenComponent.c;1|SCR_DeployMenuBaseScreenComponentClass}} | SCR_DeployMenuBaseScreenLayout = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_DeployMenuBaseScreenComponent.c;42|SCR_DeployMenuBaseScreenLayout}} | SCR_DeployMenuHandler = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DeployMenu/SCR_DeployMenuHandler.c;6|SCR_DeployMenuHandler}} | SCR_DeployMenuMain = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DeployMenu/SCR_DeployMenuBase.c;107|SCR_DeployMenuMain}} | SCR_DeployMenuSettings = {{Link|enfusion://ScriptEditor/scripts/Game/Global/SCR_GameplaySettings.c;273|SCR_DeployMenuSettings}} | SCR_DeployMultiPartInventoryItemAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_DeployMultiPartInventoryItemAction.c;1|SCR_DeployMultiPartInventoryItemAction}} | SCR_DeployRequestUIBaseComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DeployMenu/SCR_DeployRequestUIBaseComponent.c;2|SCR_DeployRequestUIBaseComponent}} | SCR_DeploySmokeCoverWaypoint = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_DeploySmokeCoverWaypoint.c;5|SCR_DeploySmokeCoverWaypoint}} | SCR_DeploySmokeCoverWaypointClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_DeploySmokeCoverWaypoint.c;1|SCR_DeploySmokeCoverWaypointClass}} | SCR_DeploySmokeCoverWaypointState = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_DeploySmokeCoverWaypoint.c;46|SCR_DeploySmokeCoverWaypointState}} | SCR_DepthOfFieldEffect = {{Link|enfusion://ScriptEditor/scripts/Game/UI/ScreenEffects/SCR_DepthOfFieldEffect.c;8|SCR_DepthOfFieldEffect}} | SCR_DesaturationEffect = {{Link|enfusion://ScriptEditor/scripts/Game/UI/ScreenEffects/SCR_DesaturationEffect.c;1|SCR_DesaturationEffect}} | SCR_DescriptionTooltipDetail = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_DescriptionTooltipDetail.c;1|SCR_DescriptionTooltipDetail}} | SCR_DescriptorDefaultsBase = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapDescriptorDefaults.c;50|SCR_DescriptorDefaultsBase}} | SCR_DescriptorDefIcon = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapDescriptorDefaults.c;120|SCR_DescriptorDefIcon}} | SCR_DescriptorDefIconText = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapDescriptorDefaults.c;164|SCR_DescriptorDefIconText}} | SCR_DescriptorDefInvisible = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapDescriptorDefaults.c;105|SCR_DescriptorDefInvisible}} | SCR_DescriptorDefText = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapDescriptorDefaults.c;230|SCR_DescriptorDefText}} | SCR_DescriptorViewLayer = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapConfig.c;35|SCR_DescriptorViewLayer}} | SCR_DescriptorViewTitle = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapConfig.c;47|SCR_DescriptorViewTitle}} | SCR_DestroyedEditableEntityFilter = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/EditableEntityFilters/SCR_DestroyedEditableEntityFilter.c;1|SCR_DestroyedEditableEntityFilter}} | SCR_DestroyedTreePartsData = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/Tree/SCR_DestructibleTreeV2.c;35|SCR_DestroyedTreePartsData}} | SCR_DestroyedTreesData = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/Tree/DestroyedTreesData.c;1|SCR_DestroyedTreesData}} | SCR_DestructibleBuildingComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/Building/SCR_DestructibleBuildingComponent.c;525|SCR_DestructibleBuildingComponent}} | SCR_DestructibleBuildingComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/Building/SCR_DestructibleBuildingComponent.c;2|SCR_DestructibleBuildingComponentClass}} | SCR_DestructibleBuildingEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/Building/SCR_DestructibleBuildingEntity.c;47|SCR_DestructibleBuildingEntity}} | SCR_DestructibleBuildingEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/Building/SCR_DestructibleBuildingEntity.c;1|SCR_DestructibleBuildingEntityClass}} | SCR_DestructibleEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_DestructibleEntity.c;14|SCR_DestructibleEntity}} | SCR_DestructibleEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_DestructibleEntity.c;1|SCR_DestructibleEntityClass}} | SCR_DestructibleHitzone = {{Link|enfusion://ScriptEditor/scripts/Game/HitZone/SCR_DestructibleHitzone.c;4|SCR_DestructibleHitzone}} | SCR_DestructibleIdentificator = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_MPDestructionManager.c;9|SCR_DestructibleIdentificator}} | SCR_DestructiblePrefabFinderTool = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_DestructiblePrefabFinderTool.c;2|SCR_DestructiblePrefabFinderTool}} | SCR_DestructibleTreesSynchManager = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/Tree/SCR_DestructibleTreesSynchManager.c;6|SCR_DestructibleTreesSynchManager}} | SCR_DestructibleTreesSynchManagerClass = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/Tree/SCR_DestructibleTreesSynchManager.c;2|SCR_DestructibleTreesSynchManagerClass}} | SCR_DestructibleTreeV2 = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/Tree/SCR_DestructibleTreeV2.c;55|SCR_DestructibleTreeV2}} | SCR_DestructibleTreeV2Class = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/Tree/SCR_DestructibleTreeV2.c;1|SCR_DestructibleTreeV2Class}} | SCR_DestructionBaseData = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_DestructionBaseData.c;1|SCR_DestructionBaseData}} | SCR_DestructionBaseHandler = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_DestructionBaseHandler.c;6|SCR_DestructionBaseHandler}} | SCR_DestructionCommon = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_DestructionCommon.c;7|SCR_DestructionCommon}} | SCR_DestructionDamageManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_DestructionDamageManagerComponent.c;26|SCR_DestructionDamageManagerComponent}} | SCR_DestructionDamageManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_DestructionDamageManagerComponent.c;2|SCR_DestructionDamageManagerComponentClass}} | SCR_DestructionData = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_DestructionData.c;1|SCR_DestructionData}} | SCR_DestructionDiagComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_DestructionDiagComponent.c;6|SCR_DestructionDiagComponent}} | SCR_DestructionDiagComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_DestructionDiagComponent.c;1|SCR_DestructionDiagComponentClass}} | SCR_DestructionFractalComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_DestructionFractalComponent.c;34|SCR_DestructionFractalComponent}} | SCR_DestructionFractalComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_DestructionFractalComponent.c;8|SCR_DestructionFractalComponentClass}} | SCR_DestructionHeatmapEntry = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_DestructionHeatmapEntry.c;1|SCR_DestructionHeatmapEntry}} | SCR_DestructionHeatmapRegion = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_DestructionHeatmapRegion.c;1|SCR_DestructionHeatmapRegion}} | SCR_DestructionHitInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_HitInfo.c;13|SCR_DestructionHitInfo}} | SCR_DestructionIndicesAssignTool = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_DestructionIndicesAssignTool.c;2|SCR_DestructionIndicesAssignTool}} | SCR_DestructionInteriorBoundingBox = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_RegionalDestructionManager.c;158|SCR_DestructionInteriorBoundingBox}} | SCR_DestructionManager = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_DestructionManager.c;5|SCR_DestructionManager}} | SCR_DestructionManagerClass = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_DestructionManager.c;1|SCR_DestructionManagerClass}} | SCR_DestructionManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_DestructionManagerComponent.c;7|SCR_DestructionManagerComponent}} | SCR_DestructionManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_DestructionManagerComponent.c;2|SCR_DestructionManagerComponentClass}} | SCR_DestructionMultiPhaseComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_DestructionMultiPhaseComponent.c;20|SCR_DestructionMultiPhaseComponent}} | SCR_DestructionMultiPhaseComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_DestructionMultiPhaseComponent.c;1|SCR_DestructionMultiPhaseComponentClass}} | SCR_DestructionMultiPhaseData = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_DestructionMultiPhaseData.c;1|SCR_DestructionMultiPhaseData}} | SCR_DestructionSynchronizationComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_DestructionSynchronizationComponent.c;8|SCR_DestructionSynchronizationComponent}} | SCR_DestructionSynchronizationComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_DestructionSynchronizationComponent.c;3|SCR_DestructionSynchronizationComponentClass}} | SCR_DestructionTireComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_DestructionTireComponent.c;16|SCR_DestructionTireComponent}} | SCR_DestructionTireComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_DestructionTireComponent.c;10|SCR_DestructionTireComponentClass}} | SCR_DestructionTireInitialDamageDataComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_DestructionTireComponent.c;3|SCR_DestructionTireInitialDamageDataComponentClass}} | SCR_DestructionUtility = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_DestructionUtility.c;5|SCR_DestructionUtility}} | SCR_DetachContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/Placeholder/SCR_DetachContextAction.c;1|SCR_DetachContextAction}} | SCR_DetachMagazineUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/Inspection/SCR_DetachMagazineUserAction.c;1|SCR_DetachMagazineUserAction}} | SCR_DetonateChargesAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_DetonateChargesAction.c;1|SCR_DetonateChargesAction}} | SCR_DetonatorGadgetComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_DetonatorGadgetComponent.c;5|SCR_DetonatorGadgetComponent}} | SCR_DetonatorGadgetComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_DetonatorGadgetComponent.c;1|SCR_DetonatorGadgetComponentClass}} | SCR_DetonatorHasConnectedChargesCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Character/SCR_DetonatorHasConnectedChargesCondition.c;1|SCR_DetonatorHasConnectedChargesCondition}} | SCR_DeviceBlockUIName = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_BlockUIInfo.c;90|SCR_DeviceBlockUIName}} | SCR_DeviceSpecificComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_DeviceSpecificComponent.c;1|SCR_DeviceSpecificComponent}} | SCR_DialogDataComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/Dialogs/SCR_MenuDialogComponent.c;6|SCR_DialogDataComponent}} | SCR_DialogEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_DialogEditorUIComponent.c;3|SCR_DialogEditorUIComponent}} | SCR_DisabledEntitiesEditorUIEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/EditableEntityFilters/Effects/SCR_DisabledEntitiesEditorUIEffect.c;1|SCR_DisabledEntitiesEditorUIEffect}} | SCR_DisableDependentAddonsDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/Common/Dialogs/SCR_AddonListDialog.c;93|SCR_DisableDependentAddonsDialog}} | SCR_DisableSimulationContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/Placeholder/SCR_DisableSimulationContextAction.c;1|SCR_DisableSimulationContextAction}} | SCR_DisarmExplosiveChargeAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_DisarmExplosiveChargeAction.c;1|SCR_DisarmExplosiveChargeAction}} | SCR_DisarmMineAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_DisarmMineAction.c;1|SCR_DisarmMineAction}} | SCR_DisarmRocketPodsContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_DisarmRocketPodsContextAction.c;1|SCR_DisarmRocketPodsContextAction}} | SCR_DisconnectChargesAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_DisconnectChargesAction.c;1|SCR_DisconnectChargesAction}} | SCR_DisembarkContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_DisembarkContextAction.c;2|SCR_DisembarkContextAction}} | SCR_DismantleCampaignMilitaryBaseTaskEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Campaign/SCR_DismantleCampaignMilitaryBaseTaskEntity.c;5|SCR_DismantleCampaignMilitaryBaseTaskEntity}} | SCR_DismantleCampaignMilitaryBaseTaskEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Campaign/SCR_DismantleCampaignMilitaryBaseTaskEntity.c;1|SCR_DismantleCampaignMilitaryBaseTaskEntityClass}} | SCR_DismantleInventoryItemBaseAction = {{Link|enfusion://ScriptEditor/scripts/Game/DeployableInventoryItems/SCR_DismantleInventoryItemBaseAction.c;1|SCR_DismantleInventoryItemBaseAction}} | SCR_DoctorCompartmentSlot = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_DoctorCompartmentSlot.c;1|SCR_DoctorCompartmentSlot}} | SCR_DoorOpenerEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_doorOpener.c;19|SCR_DoorOpenerEntity}} | SCR_DoorOpenerEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_doorOpener.c;1|SCR_DoorOpenerEntityClass}} | SCR_DoorUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_DoorUserAction.c;3|SCR_DoorUserAction}} | SCR_DotDamageArea = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/DamageAreas/SCR_DoTDamageArea.c;1|SCR_DotDamageArea}} | SCR_DotDamageEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/DamageEffects/BaseDamageEffects/SCR_DotDamageEffect.c;6|SCR_DotDamageEffect}} | SCR_DoubleClickAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_DoubleClickAction.c;1|SCR_DoubleClickAction}} | SCR_DownloadConfirmationDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/Common/Dialogs/SCR_DownloadConfirmationDialog.c;3|SCR_DownloadConfirmationDialog}} | SCR_DownloadConfirmationDialogContentWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DownloadManager/SCR_DownloadConfirmationDialogContentWidgets.c;4|SCR_DownloadConfirmationDialogContentWidgets}} | SCR_DownloadConfirmationDialogWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DownloadManager/SCR_DownloadConfirmationDialogWidgets.c;4|SCR_DownloadConfirmationDialogWidgets}} | SCR_DownloadFailDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/Common/Dialogs/SCR_DownloadFailDialog.c;6|SCR_DownloadFailDialog}} | SCR_DownloadManager = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DownloadManager/SCR_DownloadManager.c;20|SCR_DownloadManager}} | SCR_DownloadManager_AddonDownloadLine = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DownloadManager/SCR_DownloadManager_AddonDownloadLine.c;8|SCR_DownloadManager_AddonDownloadLine}} | SCR_DownloadManager_AddonDownloadLineBaseWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DownloadManager/SCR_DownloadManager_AddonDownloadLineBaseWidgets.c;4|SCR_DownloadManager_AddonDownloadLineBaseWidgets}} | SCR_DownloadManager_CircleProgressIndicatorWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DownloadManager/SCR_DownloadManager_CircleProgressIndicatorWidgets.c;1|SCR_DownloadManager_CircleProgressIndicatorWidgets}} | SCR_DownloadManager_CircularIndicatorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DownloadManager/SCR_DownloadManager_CircularIndicatorComponent.c;5|SCR_DownloadManager_CircularIndicatorComponent}} | SCR_DownloadManager_Dialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DownloadManager/SCR_DownloadManager_Dialog.c;17|SCR_DownloadManager_Dialog}} | SCR_DownloadManager_Entry = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DownloadManager/SCR_DownloadManager.c;819|SCR_DownloadManager_Entry}} | SCR_DownloadManager_OpenDownloadManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DownloadManager/SCR_DownloadManager_OpenDownloadManagerComponent.c;4|SCR_DownloadManager_OpenDownloadManagerComponent}} | SCR_DownloadManager_PanelComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DownloadManager/SCR_DownloadManager_PanelComponent.c;7|SCR_DownloadManager_PanelComponent}} | SCR_DownloadManager_PanelWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DownloadManager/SCR_DownloadManager_PanelWidgets.c;4|SCR_DownloadManager_PanelWidgets}} | SCR_DownloadManager_ProgressIndicatorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DownloadManager/SCR_DownloadManager_ProgressIndicatorComponent.c;4|SCR_DownloadManager_ProgressIndicatorComponent}} | SCR_DownloadManager_ProgressIndicatorWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DownloadManager/SCR_DownloadManager_ProgressIndicatorWidgets.c;4|SCR_DownloadManager_ProgressIndicatorWidgets}} | SCR_DownloadManagerClass = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DownloadManager/SCR_DownloadManager.c;9|SCR_DownloadManagerClass}} | SCR_DownloadManagerDialogWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DownloadManager/WidgetsClasses/SCR_DownloadManagerDialogWidgets.c;4|SCR_DownloadManagerDialogWidgets}} | SCR_DownloadManagerEntry = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DownloadManager/SCR_DownloadManagerEntry.c;10|SCR_DownloadManagerEntry}} | SCR_DownloadManagerEntryWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DownloadManager/WidgetsClasses/SCR_DownloadManagerEntryWidgets.c;4|SCR_DownloadManagerEntryWidgets}} | SCR_DownloadManagerListCategory = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DownloadManager/SCR_DownloadManagerListComponent.c;350|SCR_DownloadManagerListCategory}} | SCR_DownloadManagerListComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DownloadManager/SCR_DownloadManagerListComponent.c;5|SCR_DownloadManagerListComponent}} | SCR_DownloadManagerTabActiveWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DownloadManager/WidgetsClasses/SCR_DownloadManagerTabActiveWidgets.c;4|SCR_DownloadManagerTabActiveWidgets}} | SCR_DownloadSequence = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DownloadManager/DownloadSequence/SCR_DownloadSequence.c;19|SCR_DownloadSequence}} | SCR_DoxygenFillerPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_DoxygenFillerPlugin.c;2|SCR_DoxygenFillerPlugin}} | SCR_DoxygenFillerPlugin_Method = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_DoxygenFillerPlugin.c;905|SCR_DoxygenFillerPlugin_Method}} | SCR_DoxygenFillerPlugin_MethodParameter = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_DoxygenFillerPlugin.c;917|SCR_DoxygenFillerPlugin_MethodParameter}} | SCR_DoxygenFillerPlugin_TestA = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_DoxygenFillerPluginExample.c;2|SCR_DoxygenFillerPlugin_TestA}} | SCR_DoxygenFillerPlugin_TestB = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_DoxygenFillerPluginExample.c;34|SCR_DoxygenFillerPlugin_TestB}} | SCR_DoxygenFillerPlugin_TestC = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_DoxygenFillerPluginExample.c;39|SCR_DoxygenFillerPlugin_TestC}} | SCR_DpsConditionBarBaseTooltipDetail = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_DpsConditionBarBaseTooltipDetail.c;1|SCR_DpsConditionBarBaseTooltipDetail}} | SCR_DrainFuelUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SupportStations/SCR_DrainFuelUserAction.c;2|SCR_DrainFuelUserAction}} | SCR_DrawingPropsConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapPropsConfig.c;529|SCR_DrawingPropsConfig}} | SCR_DriverTooltipDetail = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_DriverTooltipDetail.c;1|SCR_DriverTooltipDetail}} | SCR_DropdownEditorAttributeUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Attributes/SCR_DropdownEditorAttributeUIComponent.c;3|SCR_DropdownEditorAttributeUIComponent}} | SCR_DropdownWithParamAttributeUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Attributes/SCR_DropdownWithParamAttributeUIComponent.c;2|SCR_DropdownWithParamAttributeUIComponent}} | SCR_DrowningDamageEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/DamageEffects/CharacterDamageEffects/SCR_DrowningDamageEffect.c;1|SCR_DrowningDamageEffect}} | SCR_DrowningScreenEffect = {{Link|enfusion://ScriptEditor/scripts/Game/UI/ScreenEffects/SCR_DrowningScreenEffect.c;1|SCR_DrowningScreenEffect}} | SCR_DSConfig = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/ServerHosting/SCR_DSConfig.c;5|SCR_DSConfig}} | SCR_DSGameProperties = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/ServerHosting/SCR_DSConfig.c;171|SCR_DSGameProperties}} | SCR_DSJoinQueue = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/ServerHosting/SCR_DSConfig.c;226|SCR_DSJoinQueue}} | SCR_DSOperating = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/ServerHosting/SCR_DSConfig.c;214|SCR_DSOperating}} | SCR_DummyEditableEntityFilter = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/EditableEntityFilters/SCR_DummyEditableEntityFilter.c;1|SCR_DummyEditableEntityFilter}} | SCR_DummyTargetEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/SCR_DummyTargetEntity.c;9|SCR_DummyTargetEntity}} | SCR_DummyTargetEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/SCR_DummyTargetEntity.c;1|SCR_DummyTargetEntityClass}} | SCR_DuplicateContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_DuplicateContextAction.c;1|SCR_DuplicateContextAction}} | SCR_DynamicFooterComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SCR_DynamicFooterComponent.c;7|SCR_DynamicFooterComponent}} | SCR_DynamicIconComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/Common/SCR_DynamicIconComponent.c;5|SCR_DynamicIconComponent}} | SCR_DynamicSimulationEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_DynamicSimulationEditorComponent.c;11|SCR_DynamicSimulationEditorComponent}} | SCR_DynamicSimulationEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_DynamicSimulationEditorComponent.c;1|SCR_DynamicSimulationEditorComponentClass}} | SCR_EActionDisplayState = {{Link|enfusion://ScriptEditor/scripts/Game/Global/Constants.c;327|SCR_EActionDisplayState}} | SCR_EActionPrefixType = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SettingsMenu/SCR_KeyBindingMenuConfig.c;136|SCR_EActionPrefixType}} | SCR_EAddonLineErrorFlags = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/AddonManager/SCR_AddonLineBaseComponent.c;569|SCR_EAddonLineErrorFlags}} | SCR_EAddonPrimaryActionState = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/Common/SCR_WorkshopUiCommon.c;774|SCR_EAddonPrimaryActionState}} | SCR_EAddonValidateError = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ValidateRepair/SCR_AddonLineValidateRepairComponent.c;635|SCR_EAddonValidateError}} | SCR_EAddonValidateState = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ValidateRepair/SCR_AddonLineValidateRepairComponent.c;643|SCR_EAddonValidateState}} | SCR_EAIActivityCause = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIActivity.c;5|SCR_EAIActivityCause}} | SCR_EAIArtilleryAmmoType = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AIStaticArtilleryVehicleUsageComponent.c;1|SCR_EAIArtilleryAmmoType}} | SCR_EAIBehaviorCause = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_AIBehavior.c;1|SCR_EAIBehaviorCause}} | SCR_EAICombatMoveDirection = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AICombatMoveRequest.c;27|SCR_EAICombatMoveDirection}} | SCR_EAICombatMoveReason = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AICombatMoveRequest.c;10|SCR_EAICombatMoveReason}} | SCR_EAICombatMoveRequestFailReason = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AICombatMoveState.c;10|SCR_EAICombatMoveRequestFailReason}} | SCR_EAICombatMoveRequestState = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AICombatMoveState.c;1|SCR_EAICombatMoveRequestState}} | SCR_EAICombatMoveRequestType = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AICombatMoveRequest.c;1|SCR_EAICombatMoveRequestType}} | SCR_EAICombatMoveUnitType = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Movement/SCR_AICombatMoveRequest.c;21|SCR_EAICombatMoveUnitType}} | SCR_EAICommunicationState = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Talk/SCR_AICommsHandler.c;11|SCR_EAICommunicationState}} | SCR_EAIGroupFormation = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/SCR_AIGroup.c;2909|SCR_EAIGroupFormation}} | SCR_EAISettingFlags = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Settings/SCR_AISetting.c;13|SCR_EAISettingFlags}} | SCR_EAISettingOrigin = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Settings/SCR_AISetting.c;3|SCR_EAISettingOrigin}} | SCR_EAITalkRequestPreset = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Talk/SCR_AITalkRequest.c;9|SCR_EAITalkRequestPreset}} | SCR_EAITalkRequestState = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Talk/SCR_AITalkRequest.c;1|SCR_EAITalkRequestState}} | SCR_EAIThreatSectorFlags = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AISectorThreatFilter.c;1|SCR_EAIThreatSectorFlags}} | SCR_EAnalyticalItemSlotType = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/ApplicationData/SCR_AnalyticsApplication.c;2|SCR_EAnalyticalItemSlotType}} | SCR_EAnalyticsApplicationLoggingFlags = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/ApplicationData/SCR_AnalyticsApplication.c;22|SCR_EAnalyticsApplicationLoggingFlags}} | SCR_EAnalyticsCourseEndReason = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/ApplicationData/SCR_AnalyticsApplication.c;38|SCR_EAnalyticsCourseEndReason}} | SCR_EAnalyticsDataTable = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/ApplicationData/SCR_AnalyticsApplication.c;30|SCR_EAnalyticsDataTable}} | SCR_EAnalyticsDelayedState = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/ApplicationData/SCR_AnalyticsDelayedSend.c;2|SCR_EAnalyticsDelayedState}} | SCR_EAnalyticsWorkshopTab = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/ApplicationData/SCR_AnalyticsApplication.c;12|SCR_EAnalyticsWorkshopTab}} | SCR_EAnimationState = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Enums/SCR_EAnimationState.c;1|SCR_EAnimationState}} | SCR_EAnimationStateToCheck = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Enums/SCR_EAnimationStateToCheck.c;1|SCR_EAnimationStateToCheck}} | SCR_EArmorLevels = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Damage/SCR_EArmorLevels.c;3|SCR_EArmorLevels}} | SCR_EArsenalAttributeGroup = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Arsenal/SCR_EArsenalAttributeGroup.c;1|SCR_EArsenalAttributeGroup}} | SCR_EArsenalGameModeType = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Loadout/SCR_EArsenalGameModeType.c;1|SCR_EArsenalGameModeType}} | SCR_EArsenalItemMode = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Arsenal/SCR_EArsenalItemMode.c;1|SCR_EArsenalItemMode}} | SCR_EArsenalItemType = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Arsenal/SCR_EArsenalItemType.c;2|SCR_EArsenalItemType}} | SCR_EArsenalSaveType = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Arsenal/SCR_ArsenalComponent.c;611|SCR_EArsenalSaveType}} | SCR_EArsenalSupplyCostType = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Arsenal/SCR_ArsenalComponent.c;621|SCR_EArsenalSupplyCostType}} | SCR_EArsenalTypes = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Loadout/SCR_ArsenalManagerComponent.c;11|SCR_EArsenalTypes}} | SCR_Easing = {{Link|enfusion://ScriptEditor/scripts/Game/Utilities/SCR_Easing.c;2|SCR_Easing}} | SCR_EAutotuneReason = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/Notification/SCR_AutotuneRadioStickyNotificationUIComponent.c;201|SCR_EAutotuneReason}} | SCR_EBackendServicePlatforms = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_ServicesStatusHelper.c;509|SCR_EBackendServicePlatforms}} | SCR_EBanCreateArgs = {{Link|enfusion://ScriptEditor/scripts/Game/Network/ServerCommands/BanCommands.c;14|SCR_EBanCreateArgs}} | SCR_EBanListArgs = {{Link|enfusion://ScriptEditor/scripts/Game/Network/ServerCommands/BanCommands.c;34|SCR_EBanListArgs}} | SCR_EBanRemoveArgs = {{Link|enfusion://ScriptEditor/scripts/Game/Network/ServerCommands/BanCommands.c;25|SCR_EBanRemoveArgs}} | SCR_EBanSubcommandArg = {{Link|enfusion://ScriptEditor/scripts/Game/Network/ServerCommands/BanCommands.c;2|SCR_EBanSubcommandArg}} | SCR_EBatchPrefabOperationComponentFlag = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_BatchPrefabsOperationsTool.c;382|SCR_EBatchPrefabOperationComponentFlag}} | SCR_EBatchPrefabOperationFlag = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_BatchPrefabsOperationsTool.c;375|SCR_EBatchPrefabOperationFlag}} | SCR_EBloodType = {{Link|enfusion://ScriptEditor/scripts/Game/Identity/SCR_EBloodType.c;1|SCR_EBloodType}} | SCR_EBoxSide = {{Link|enfusion://ScriptEditor/scripts/Game/Enums/SCR_EBoxSide.c;2|SCR_EBoxSide}} | SCR_EBurningState = {{Link|enfusion://ScriptEditor/scripts/Game/HitZone/SCR_FlammableHitZone.c;3|SCR_EBurningState}} | SCR_EButtonSize = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonEnums.c;1|SCR_EButtonSize}} | SCR_ECampaignBaseType = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Locations/SCR_CampaignMilitaryBaseComponent.c;2769|SCR_ECampaignBaseType}} | SCR_ECampaignFaction = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/FactionManager/SCR_CampaignFactionManager.c;130|SCR_ECampaignFaction}} | SCR_ECampaignPopupPriority = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignFeedbackComponent.c;2236|SCR_ECampaignPopupPriority}} | SCR_ECampaignSeizingBaseType = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_SeizeXpRewardConfig.c;92|SCR_ECampaignSeizingBaseType}} | SCR_ECampaignSeizingMessagePrio = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignFeedbackComponent.c;2251|SCR_ECampaignSeizingMessagePrio}} | SCR_ECanCallEndGame = {{Link|enfusion://ScriptEditor/scripts/Game/Enums/SCR_ECanCallEndGame.c;1|SCR_ECanCallEndGame}} | SCR_ECannotAssignReasons = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_ECampaignTaskReasons.c;1|SCR_ECannotAssignReasons}} | SCR_ECareerSp = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/PlayerData/SCR_PlayerDataConfigs.c;389|SCR_ECareerSp}} | SCR_ECatalogFactionType = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/PlaceableEntities/SCR_PlaceableEntitiesRegistryFromCatalog.c;64|SCR_ECatalogFactionType}} | SCR_ECharacterControlType = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_ECharacterControlType.c;2|SCR_ECharacterControlType}} | SCR_ECharacterDeathStatusRelations = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_ECharacterDeathStatusRelations.c;3|SCR_ECharacterDeathStatusRelations}} | SCR_ECharacterDisguiseType = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_ECharacterDisguiseType.c;1|SCR_ECharacterDisguiseType}} | SCR_ECharacterDistanceMeasurementMethod = {{Link|enfusion://ScriptEditor/scripts/Game/Enums/SCR_ECharacterDistanceMeasurementMethod.c;1|SCR_ECharacterDistanceMeasurementMethod}} | SCR_ECharacterIdentityBioGroupType = {{Link|enfusion://ScriptEditor/scripts/Game/Identity/Containers/SCR_ECharacterIdentityBioGroupType.c;1|SCR_ECharacterIdentityBioGroupType}} | SCR_ECharacterRank = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_CharacterRankComponent.c;326|SCR_ECharacterRank}} | SCR_ECharacterTypeUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Characters/SCR_CharacterTypes.c;2|SCR_ECharacterTypeUI}} | SCR_ECombatOps_Everon_Tasks = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Enums/SCR_ECombatOps_Everon_Tasks.c;1|SCR_ECombatOps_Everon_Tasks}} | SCR_ECommandVisualizationDuration = {{Link|enfusion://ScriptEditor/scripts/Game/Commanding/SCR_PlayerControllerCommandingComponent.c;1029|SCR_ECommandVisualizationDuration}} | SCR_ECommStatus = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_ServicesStatusHelper.c;2|SCR_ECommStatus}} | SCR_ECommunicationSoundEventPriority = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_CommunicationSoundComponent.c;42|SCR_ECommunicationSoundEventPriority}} | SCR_ECompartmentDoorType = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_ECompartmentDoorType.c;1|SCR_ECompartmentDoorType}} | SCR_ECompassType = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_CompassComponent.c;3|SCR_ECompassType}} | SCR_EComponentFinderQueryFlags = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_EntityHelper.c;529|SCR_EComponentFinderQueryFlags}} | SCR_EConsumableFailReason = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_ConsumableEffectBase.c;14|SCR_EConsumableFailReason}} | SCR_EConsumableType = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_ConsumableEffectBase.c;2|SCR_EConsumableType}} | SCR_ECrimeNotification = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_KickHintComponent.c;43|SCR_ECrimeNotification}} | SCR_EDamageIntensityType = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/SCR_DamageIntensityHolder.c;2|SCR_EDamageIntensityType}} | SCR_EDamageSupportStationHealState = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SupportStation/SCR_BaseDamageHealSupportStationComponent.c;362|SCR_EDamageSupportStationHealState}} | SCR_EDataStats = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c;917|SCR_EDataStats}} | SCR_EDataToSpreadsheetDataType = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/SCR_DataToSpreadsheet.c;453|SCR_EDataToSpreadsheetDataType}} | SCR_EDefenderSpawnerState = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Spawner/CatalogSpawner/SCR_DefenderSpawnerComponent.c;866|SCR_EDefenderSpawnerState}} | SCR_EDestructionResponseIndex = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_EDestructionResponseIndex.c;1|SCR_EDestructionResponseIndex}} | SCR_EDestructionRotationEnum = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/Building/SCR_DestructibleBuildingComponent.c;157|SCR_EDestructionRotationEnum}} | SCR_EDisguisedKillingPunishment = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_PerceivedFactionManagerComponent.c;451|SCR_EDisguisedKillingPunishment}} | SCR_EditableAttachableEntityInteraction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Interactions/SCR_EditableAttachableEntityInteraction.c;1|SCR_EditableAttachableEntityInteraction}} | SCR_EditableCharacterComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntity/SCR_EditableCharacterComponent.c;18|SCR_EditableCharacterComponent}} | SCR_EditableCharacterComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntity/SCR_EditableCharacterComponent.c;1|SCR_EditableCharacterComponentClass}} | SCR_EditableCharacterInteraction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Interactions/SCR_EditableCharacterInteraction.c;1|SCR_EditableCharacterInteraction}} | SCR_EditableCommentComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntity/SCR_EditableCommentComponent.c;9|SCR_EditableCommentComponent}} | SCR_EditableCommentComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntity/SCR_EditableCommentComponent.c;1|SCR_EditableCommentComponentClass}} | SCR_EditableCommentUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_EditableCommentUIInfo.c;1|SCR_EditableCommentUIInfo}} | SCR_EditableDecalComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntity/SCR_EditableDecalComponent.c;18|SCR_EditableDecalComponent}} | SCR_EditableDecalComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntity/SCR_EditableDecalComponent.c;1|SCR_EditableDecalComponentClass}} | SCR_EditableDescriptorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntity/SCR_EditableDescriptorComponent.c;13|SCR_EditableDescriptorComponent}} | SCR_EditableDescriptorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntity/SCR_EditableDescriptorComponent.c;5|SCR_EditableDescriptorComponentClass}} | SCR_EditableDescriptorUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_EditableDescriptorUIInfo.c;1|SCR_EditableDescriptorUIInfo}} | SCR_EditableEffectsModuleComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntity/SCR_EditableEffectModuleComponent.c;12|SCR_EditableEffectsModuleComponent}} | SCR_EditableEffectsModuleComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntity/SCR_EditableEffectModuleComponent.c;1|SCR_EditableEffectsModuleComponentClass}} | SCR_EditableEntityAuthor = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c;2331|SCR_EditableEntityAuthor}} | SCR_EditableEntityBaseChildComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntityChild/SCR_EditableEntityBaseChildComponent.c;13|SCR_EditableEntityBaseChildComponent}} | SCR_EditableEntityBaseChildComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntityChild/SCR_EditableEntityBaseChildComponent.c;1|SCR_EditableEntityBaseChildComponentClass}} | SCR_EditableEntityBaseSlotUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/EditableEntityFilters/SCR_EditableEntityBaseSlotUIComponent.c;6|SCR_EditableEntityBaseSlotUIComponent}} | SCR_EditableEntityCache = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/EditableEntityCore/SCR_EditableEntityCache.c;1|SCR_EditableEntityCache}} | SCR_EditableEntityCampaignBuildingLabelSetting = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/EditableEntityCore/SCR_EditableEntityCampaignBuildingModeLabelSetting.c;1|SCR_EditableEntityCampaignBuildingLabelSetting}} | SCR_EditableEntityCampaignBuildingModeLabelData = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/EditableEntityCore/SCR_EditableEntityCampaignBuildingModeLabelSetting.c;14|SCR_EditableEntityCampaignBuildingModeLabelData}} | SCR_EditableEntityComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c;13|SCR_EditableEntityComponent}} | SCR_EditableEntityComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponentClass.c;1|SCR_EditableEntityComponentClass}} | SCR_EditableEntityComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/GameMode/Editor/SCR_EditableEntityComponentSerializer.c;1|SCR_EditableEntityComponentSerializer}} | SCR_EditableEntityCore = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Core/SCR_EditableEntityCore.c;18|SCR_EditableEntityCore}} | SCR_EditableEntityCoreBudgetSetting = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/EditableEntityCore/SCR_EditableEntityCoreBudgetSetting.c;1|SCR_EditableEntityCoreBudgetSetting}} | SCR_EditableEntityCoreData = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/States/SCR_EditableAuthorsSerializer.c;8|SCR_EditableEntityCoreData}} | SCR_EditableEntityCoreLabelGroupSetting = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/EditableEntityCore/SCR_EditableEntityCoreLabelGroupSetting.c;1|SCR_EditableEntityCoreLabelGroupSetting}} | SCR_EditableEntityCoreLabelSetting = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/EditableEntityCore/SCR_EditableEntityCoreLabelSetting.c;1|SCR_EditableEntityCoreLabelSetting}} | SCR_EditableEntityCoreLabelSettingExtended = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/EditableEntityCore/SCR_EditableEntityCoreLabelSettingExtended.c;1|SCR_EditableEntityCoreLabelSettingExtended}} | SCR_EditableEntityCoreSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/States/SCR_EditableAuthorsSerializer.c;12|SCR_EditableEntityCoreSerializer}} | SCR_EditableEntityCoreTypeInteraction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/EditableEntityCore/SCR_EditableEntityCoreTypeInteraction.c;1|SCR_EditableEntityCoreTypeInteraction}} | SCR_EditableEntityCoreTypeInteractionTitle = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/EditableEntityCore/SCR_EditableEntityCoreTypeInteraction.c;20|SCR_EditableEntityCoreTypeInteractionTitle}} | SCR_EditableEntityCoreTypeSetting = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/EditableEntityCore/SCR_EditableEntityCoreTypeSetting.c;1|SCR_EditableEntityCoreTypeSetting}} | SCR_EditableEntityCustomSlotUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/EditableEntityFilters/SCR_EditableEntityCustomSlotUIComponent.c;1|SCR_EditableEntityCustomSlotUIComponent}} | SCR_EditableEntityInteraction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Interactions/SCR_EditableEntityInteraction.c;1|SCR_EditableEntityInteraction}} | SCR_EditableEntityLinkUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/EditableEntities/SCR_EditableEntityLinkUIComponent.c;3|SCR_EditableEntityLinkUIComponent}} | SCR_EditableEntityMaintenancePlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/Editor/SCR_EditableEntityMaintenancePlugin.c;2|SCR_EditableEntityMaintenancePlugin}} | SCR_EditableEntityMaterialChildComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntityChild/SCR_EditableEntityMaterialChildComponent.c;9|SCR_EditableEntityMaterialChildComponent}} | SCR_EditableEntityMaterialChildComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntityChild/SCR_EditableEntityMaterialChildComponent.c;1|SCR_EditableEntityMaterialChildComponentClass}} | SCR_EditableEntitySceneSlotUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/EditableEntityFilters/SCR_EditableEntitySceneSlotUIComponent.c;1|SCR_EditableEntitySceneSlotUIComponent}} | SCR_EditableEntitySlotManagerUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/EditableEntityFilters/SCR_EditableEntitySlotManagerUIComponent.c;1|SCR_EditableEntitySlotManagerUIComponent}} | SCR_EditableEntityUIConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/EditableEntityUI/SCR_EntitiesEditorUIConfig.c;6|SCR_EditableEntityUIConfig}} | SCR_EditableEntityUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_EditableEntityUIInfo.c;1|SCR_EditableEntityUIInfo}} | SCR_EditableEntityUIInfoColored = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_EditableEntityUIInfoColored.c;1|SCR_EditableEntityUIInfoColored}} | SCR_EditableEntityUIRuleTracker = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/EditableEntityUI/SCR_EditableEntityUIRuleTracker.c;8|SCR_EditableEntityUIRuleTracker}} | SCR_EditableEntityUISlotSize = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/EditableEntityFilters/SCR_EntitiesEditorUIComponent.c;397|SCR_EditableEntityUISlotSize}} | SCR_EditableEntityVariant = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityVariantData.c;33|SCR_EditableEntityVariant}} | SCR_EditableEntityVariantData = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityVariantData.c;1|SCR_EditableEntityVariantData}} | SCR_EditableEntityVehicleCompartmentVisibilityChildComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntityChild/SCR_EditableEntityVehicleCompartmentVisibilityChildComponent.c;6|SCR_EditableEntityVehicleCompartmentVisibilityChildComponent}} | SCR_EditableEntityVehicleCompartmentVisibilityChildComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntityChild/SCR_EditableEntityVehicleCompartmentVisibilityChildComponent.c;1|SCR_EditableEntityVehicleCompartmentVisibilityChildComponentClass}} | SCR_EditableEntityVisibilityChildComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntityChild/SCR_EditableEntityVisibilityChildComponent.c;9|SCR_EditableEntityVisibilityChildComponent}} | SCR_EditableEntityVisibilityChildComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntityChild/SCR_EditableEntityVisibilityChildComponent.c;1|SCR_EditableEntityVisibilityChildComponentClass}} | SCR_EditableExplosiveChargeComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntity/SCR_EditableExplosiveChargeComponent.c;7|SCR_EditableExplosiveChargeComponent}} | SCR_EditableExplosiveChargeComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntity/SCR_EditableExplosiveChargeComponent.c;1|SCR_EditableExplosiveChargeComponentClass}} | SCR_EditableFactionComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntity/SCR_EditableFactionComponent.c;15|SCR_EditableFactionComponent}} | SCR_EditableFactionComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntity/SCR_EditableFactionComponent.c;1|SCR_EditableFactionComponentClass}} | SCR_EditableGroupComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntity/SCR_EditableGroupComponent.c;29|SCR_EditableGroupComponent}} | SCR_EditableGroupComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntity/SCR_EditableGroupComponent.c;1|SCR_EditableGroupComponentClass}} | SCR_EditableGroupInteraction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Interactions/SCR_EditableGroupInteraction.c;1|SCR_EditableGroupInteraction}} | SCR_EditableGroupUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_EditableGroupUIInfo.c;1|SCR_EditableGroupUIInfo}} | SCR_EditableLinkedContentBrowserUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_EditableLinkedContentBrowserUIInfo.c;1|SCR_EditableLinkedContentBrowserUIInfo}} | SCR_EditableMineComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntity/SCR_EditableMineComponent.c;9|SCR_EditableMineComponent}} | SCR_EditableMineComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntity/SCR_EditableMineComponent.c;1|SCR_EditableMineComponentClass}} | SCR_EditablePlayerDelegateComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntity/SCR_EditablePlayerDelegateComponent.c;10|SCR_EditablePlayerDelegateComponent}} | SCR_EditablePlayerDelegateComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntity/SCR_EditablePlayerDelegateComponent.c;1|SCR_EditablePlayerDelegateComponentClass}} | SCR_EditablePreviewComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntity/SCR_EditablePreviewComponent.c;9|SCR_EditablePreviewComponent}} | SCR_EditablePreviewComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntity/SCR_EditablePreviewComponent.c;1|SCR_EditablePreviewComponentClass}} | SCR_EditablePreviewEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Preview/SCR_EditablePreviewEntity.c;8|SCR_EditablePreviewEntity}} | SCR_EditablePreviewEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Preview/SCR_EditablePreviewEntity.c;1|SCR_EditablePreviewEntityClass}} | SCR_EditableSpawnPointComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntity/SCR_EditableSpawnPointComponent.c;9|SCR_EditableSpawnPointComponent}} | SCR_EditableSpawnPointComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntity/SCR_EditableSpawnPointComponent.c;1|SCR_EditableSpawnPointComponentClass}} | SCR_EditableSystemComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntity/SCR_EditableSystemComponent.c;9|SCR_EditableSystemComponent}} | SCR_EditableSystemComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntity/SCR_EditableSystemComponent.c;1|SCR_EditableSystemComponentClass}} | SCR_EditableTaskComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntity/SCR_EditableTaskComponent.c;19|SCR_EditableTaskComponent}} | SCR_EditableTaskComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntity/SCR_EditableTaskComponent.c;1|SCR_EditableTaskComponentClass}} | SCR_EditableVehicleComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntity/SCR_EditableVehicleComponent.c;9|SCR_EditableVehicleComponent}} | SCR_EditableVehicleComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntity/SCR_EditableVehicleComponent.c;1|SCR_EditableVehicleComponentClass}} | SCR_EditableVehicleUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_EditableVehicleUIInfo.c;1|SCR_EditableVehicleUIInfo}} | SCR_EditableWaypointComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntity/SCR_EditableWaypointComponent.c;9|SCR_EditableWaypointComponent}} | SCR_EditableWaypointComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntity/SCR_EditableWaypointComponent.c;1|SCR_EditableWaypointComponentClass}} | SCR_EditableWaypointInteraction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Interactions/SCE_EditableWaypointInteraction.c;1|SCR_EditableWaypointInteraction}} | SCR_EditableWorldEntityComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntity/SCR_EditableWorldEntityComponent.c;9|SCR_EditableWorldEntityComponent}} | SCR_EditableWorldEntityComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntity/SCR_EditableWorldEntityComponent.c;1|SCR_EditableWorldEntityComponentClass}} | SCR_EditAttributesEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_EditAttributesUIComponent.c;3|SCR_EditAttributesEditorUIComponent}} | SCR_EditBoxComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_EditBox/SCR_EditBoxComponent.c;8|SCR_EditBoxComponent}} | SCR_EditboxDialogUi = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/Dialogs/SCR_EditboxDialogUI.c;3|SCR_EditboxDialogUi}} | SCR_EditBoxSearchComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_EditBox/SCR_EditBoxSearchComponent.c;2|SCR_EditBoxSearchComponent}} | SCR_EditedEditableEntityFilter = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/EditableEntityFilters/SCR_EditedEditableEntityFilter.c;1|SCR_EditedEditableEntityFilter}} | SCR_EditedSaveUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/SCR_EditedSaveUIComponent.c;5|SCR_EditedSaveUIComponent}} | SCR_EditModeEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Modes/SCR_EditModeEditorUIComponent.c;1|SCR_EditModeEditorUIComponent}} | SCR_EditorActionData = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/SCR_BaseEditorAction.c;280|SCR_EditorActionData}} | SCR_EditorActionGroup = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_BaseActionsEditorComponent.c;1|SCR_EditorActionGroup}} | SCR_EditorActionList = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_BaseActionsEditorComponent.c;13|SCR_EditorActionList}} | SCR_EditorActionRadialEntry = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/RadialMenu/SCR_EditorActionRadialEntry.c;2|SCR_EditorActionRadialEntry}} | SCR_EditorActionSelectionMenuEntry = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/RadialMenu/SCR_EditorActionSelectionMenuEntry.c;9|SCR_EditorActionSelectionMenuEntry}} | SCR_EditorActionsManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Interactions/SCR_EditorActionsManagerComponent.c;6|SCR_EditorActionsManagerComponent}} | SCR_EditorActionsManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Interactions/SCR_EditorActionsManagerComponent.c;1|SCR_EditorActionsManagerComponentClass}} | SCR_EditorAttributeBaseValues = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_BaseValueListEditorAttribute.c;18|SCR_EditorAttributeBaseValues}} | SCR_EditorAttributeCategory = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Root/SCR_EditorAttributeCategory.c;1|SCR_EditorAttributeCategory}} | SCR_EditorAttributeEntryBool = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_BaseEditorAttribute.c;668|SCR_EditorAttributeEntryBool}} | SCR_EditorAttributeEntryInt = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_BaseEditorAttribute.c;745|SCR_EditorAttributeEntryInt}} | SCR_EditorAttributeEntryIntArray = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_BaseEditorAttribute.c;718|SCR_EditorAttributeEntryIntArray}} | SCR_EditorAttributeEntryOverride = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_BaseEditorAttribute.c;836|SCR_EditorAttributeEntryOverride}} | SCR_EditorAttributeEntryStringArray = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_BaseEditorAttribute.c;692|SCR_EditorAttributeEntryStringArray}} | SCR_EditorAttributeFloatStringValueHolder = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_BaseFloatValueHolderEditorAttribute.c;59|SCR_EditorAttributeFloatStringValueHolder}} | SCR_EditorAttributeHolderUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Attributes/SCR_EditorAttributeHolderUIComponent.c;1|SCR_EditorAttributeHolderUIComponent}} | SCR_EditorAttributeList = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Root/SCR_EditorAttributeConfig.c;1|SCR_EditorAttributeList}} | SCR_EditorAttributePresetEntry = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_BaseEditorAttribute.c;764|SCR_EditorAttributePresetEntry}} | SCR_EditorAttributePresetMultiSelectEntry = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_BaseEditorAttribute.c;808|SCR_EditorAttributePresetMultiSelectEntry}} | SCR_EditorAttributesHintCondition = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Hints/HintConditions/SCR_EditorAttributesHintCondition.c;1|SCR_EditorAttributesHintCondition}} | SCR_EditorAttributeUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_EditorAttributeUIInfo.c;2|SCR_EditorAttributeUIInfo}} | SCR_EditorBaseEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Entities/SCR_EditorBaseEntity.c;14|SCR_EditorBaseEntity}} | SCR_EditorBaseEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Entities/SCR_EditorBaseEntity.c;1|SCR_EditorBaseEntityClass}} | SCR_EditorBudgetHintCondition = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Hints/HintConditions/SCR_EditorBudgetHintCondition.c;1|SCR_EditorBudgetHintCondition}} | SCR_EditorButtonUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_EditorButtonUIComponent.c;1|SCR_EditorButtonUIComponent}} | SCR_EditorCameraDefaultsComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Misc/SCR_EditorCameraDefaultsComponent.c;12|SCR_EditorCameraDefaultsComponent}} | SCR_EditorCameraDefaultsComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Misc/SCR_EditorCameraDefaultsComponent.c;1|SCR_EditorCameraDefaultsComponentClass}} | SCR_EditorCanEnterLayerActionCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Editor/SCR_EditorCanEnterLayerActionCondition.c;3|SCR_EditorCanEnterLayerActionCondition}} | SCR_EditorContentBrowserActiveDisplayLabel = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Root/SCR_EditorContentBrowserDisplayConfig.c;331|SCR_EditorContentBrowserActiveDisplayLabel}} | SCR_EditorContentBrowserDisplayConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Root/SCR_EditorContentBrowserDisplayConfig.c;4|SCR_EditorContentBrowserDisplayConfig}} | SCR_EditorContentBrowserDisplayGroupLabel = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Root/SCR_EditorContentBrowserDisplayConfig.c;257|SCR_EditorContentBrowserDisplayGroupLabel}} | SCR_EditorContentBrowserDisplayLabel = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Root/SCR_EditorContentBrowserDisplayConfig.c;294|SCR_EditorContentBrowserDisplayLabel}} | SCR_EditorContentBrowserSaveStateData = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Root/SCR_EditorContentBrowserStateData.c;5|SCR_EditorContentBrowserSaveStateData}} | SCR_EditorContentBrowserSaveStateDataUI = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Root/SCR_EditorContentBrowserStateDataUI.c;2|SCR_EditorContentBrowserSaveStateDataUI}} | SCR_EditorContentBrowserSaveStateDataUIHQ = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Root/SCR_EditorContentBrowserStateDataUIHQ.c;2|SCR_EditorContentBrowserSaveStateDataUIHQ}} | SCR_EditorContextMenuHintCondition = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Hints/HintConditions/SCR_EditorContextMenuHintCondition.c;1|SCR_EditorContextMenuHintCondition}} | SCR_EditorCountOrMoreEntitiesSelectedActionCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Editor/SCR_EditorCountOrMoreEntitiesSelectedActionCondition.c;2|SCR_EditorCountOrMoreEntitiesSelectedActionCondition}} | SCR_EditorCursorManualCameraComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_EditorCursorManualCameraComponent.c;4|SCR_EditorCursorManualCameraComponent}} | SCR_EditorEntityToEntityHintCondition = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Hints/HintConditions/SCR_EditorEntityToEntityHintCondition.c;1|SCR_EditorEntityToEntityHintCondition}} | SCR_EditorFactionGameOverScreenInfo = {{Link|enfusion://ScriptEditor/scripts/Game/GameOverScreen/SCR_EditorFactionGameOverScreenInfo.c;1|SCR_EditorFactionGameOverScreenInfo}} | SCR_EditorFilterActionCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Editor/SCR_EditorFilterActionCondition.c;2|SCR_EditorFilterActionCondition}} | SCR_EditorFilterHintCondition = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Hints/HintConditions/SCR_EditorFilterHintCondition.c;1|SCR_EditorFilterHintCondition}} | SCR_EditorHasLastNotificationLocationActionCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Editor/SCR_EditorHasLastNotificationLocationActionCondition.c;2|SCR_EditorHasLastNotificationLocationActionCondition}} | SCR_EditorHoveredEntityIsSelectedActionCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Editor/SCR_EditorHoveredEntityIsSelectedActionCondition.c;3|SCR_EditorHoveredEntityIsSelectedActionCondition}} | SCR_EditorHoveredManualCameraComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_EditorHoveredManualCameraComponent.c;4|SCR_EditorHoveredManualCameraComponent}} | SCR_EditorImageGeneratorEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Entities/SCR_EditorImageGeneratorEntity.c;12|SCR_EditorImageGeneratorEntity}} | SCR_EditorImageGeneratorEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Entities/SCR_EditorImageGeneratorEntity.c;1|SCR_EditorImageGeneratorEntityClass}} | SCR_EditorImageGeneratorPrefab = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Entities/SCR_EditorImageGeneratorEntity.c;376|SCR_EditorImageGeneratorPrefab}} | SCR_EditorImagePositionCharacterPose = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Entities/SCR_EditorImagePositionCharacterPose.c;8|SCR_EditorImagePositionCharacterPose}} | SCR_EditorImagePositionEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Entities/SCR_EditorImagePositionEntity.c;12|SCR_EditorImagePositionEntity}} | SCR_EditorImagePositionEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Entities/SCR_EditorImagePositionEntity.c;1|SCR_EditorImagePositionEntityClass}} | SCR_EditorIsStateActionCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Editor/SCR_EditorIsStateActionCondition.c;2|SCR_EditorIsStateActionCondition}} | SCR_EditorLayerHintCondition = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Hints/HintConditions/SCR_EditorLayerHintCondition.c;1|SCR_EditorLayerHintCondition}} | SCR_EditorLessThenCountWaypointsActionCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Editor/SCR_EditorLessThenCountWaypointsActionCondition.c;2|SCR_EditorLessThenCountWaypointsActionCondition}} | SCR_EditorLinkComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Misc/SCR_EditorLinkComponent.c;17|SCR_EditorLinkComponent}} | SCR_EditorLinkComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Misc/SCR_EditorLinkComponent.c;1|SCR_EditorLinkComponentClass}} | SCR_EditorLinkComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/GameMode/Editor/SCR_EditorLinkComponentSerializer.c;7|SCR_EditorLinkComponentSerializer}} | SCR_EditorLinkEntry = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Misc/SCR_EditorLinkComponent.c;145|SCR_EditorLinkEntry}} | SCR_EditorManagerCore = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Core/SCR_EditorManagerCore.c;4|SCR_EditorManagerCore}} | SCR_EditorManagerDisconnectData = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Core/SCR_EditorManagerCore.c;578|SCR_EditorManagerDisconnectData}} | SCR_EditorManagerEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Entities/SCR_EditorManagerEntity.c;26|SCR_EditorManagerEntity}} | SCR_EditorManagerEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Entities/SCR_EditorManagerEntity.c;1|SCR_EditorManagerEntityClass}} | SCR_EditorMenuOverlay = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_MenuOverlaysEditorComponent.c;343|SCR_EditorMenuOverlay}} | SCR_EditorMenuOverlayLayer = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_MenuOverlaysEditorComponent.c;94|SCR_EditorMenuOverlayLayer}} | SCR_EditorMetaStruct = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Backend/SCR_EditorMetaStruct.c;6|SCR_EditorMetaStruct}} | SCR_EditorModeActiveActionCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Editor/SCR_EditorModeActiveActionCondition.c;2|SCR_EditorModeActiveActionCondition}} | SCR_EditorModeEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Entities/SCR_EditorModeEntity.c;22|SCR_EditorModeEntity}} | SCR_EditorModeEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Entities/SCR_EditorModeEntity.c;1|SCR_EditorModeEntityClass}} | SCR_EditorModeHintCondition = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Hints/HintConditions/SCR_EditorModeHintCondition.c;1|SCR_EditorModeHintCondition}} | SCR_EditorModePrefab = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Entities/SCR_EditorManagerEntity.c;2196|SCR_EditorModePrefab}} | SCR_EditorModeRadialEntry = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/RadialMenu/SCR_EditorModeRadialEntry.c;2|SCR_EditorModeRadialEntry}} | SCR_EditorModeUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_EditorModeUIInfo.c;1|SCR_EditorModeUIInfo}} | SCR_EditorNotificationEditorOnlyHintCondition = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Hints/HintConditions/SCR_EditorNotificationEditorOnlyHintCondition.c;1|SCR_EditorNotificationEditorOnlyHintCondition}} | SCR_EditorOpenedActionCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Editor/SCR_EditorOpenedActionCondition.c;2|SCR_EditorOpenedActionCondition}} | SCR_EditorOpenedHintCondition = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Hints/HintConditions/SCR_EditorOpenedHintCondition.c;1|SCR_EditorOpenedHintCondition}} | SCR_EditorPersistentData = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/SCR_EditorPersistentData.c;4|SCR_EditorPersistentData}} | SCR_EditorPingEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Entities/SCR_EditorPingEntity.c;13|SCR_EditorPingEntity}} | SCR_EditorPingEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Entities/SCR_EditorPingEntity.c;1|SCR_EditorPingEntityClass}} | SCR_EditorPingInfoDisplay = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/InfoDisplays/SCR_EditorPingInfoDisplay.c;9|SCR_EditorPingInfoDisplay}} | SCR_EditorPlaceCharacterAvailableActionCondition = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/AvailableActions/SCR_EditorPlaceCharacterAvailableActionCondition.c;1|SCR_EditorPlaceCharacterAvailableActionCondition}} | SCR_EditorPlacingHintCondition = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Hints/HintConditions/SCR_EditorPlacingHintCondition.c;1|SCR_EditorPlacingHintCondition}} | SCR_EditorPreviewParams = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Rpc/SCR_EditorPreviewParams.c;4|SCR_EditorPreviewParams}} | SCR_EditorRespawnBriefingComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_EditorRespawnBriefingComponent.c;6|SCR_EditorRespawnBriefingComponent}} | SCR_EditorRespawnBriefingComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_EditorRespawnBriefingComponent.c;1|SCR_EditorRespawnBriefingComponentClass}} | SCR_EditorRestrictionZoneEntity = {{Link|enfusion://ScriptEditor/scripts/Game/RestrictionZone/SCR_EditorRestrictionZoneEntity.c;5|SCR_EditorRestrictionZoneEntity}} | SCR_EditorRestrictionZoneEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/RestrictionZone/SCR_EditorRestrictionZoneEntity.c;1|SCR_EditorRestrictionZoneEntityClass}} | SCR_EditorSaveDialog = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SaveLoad/UI/SCR_EditSaveDialog.c;1|SCR_EditorSaveDialog}} | SCR_EditorSaveDialogWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Save/SCR_EditorSaveDialogWidgets.c;3|SCR_EditorSaveDialogWidgets}} | SCR_EditorSaveLoadUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Save/SCR_EditorSaveLoadUIComponent.c;1|SCR_EditorSaveLoadUIComponent}} | SCR_EditorServerEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Entities/SCR_EditorServerEntity.c;5|SCR_EditorServerEntity}} | SCR_EditorServerEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Entities/SCR_EditorServerEntity.c;1|SCR_EditorServerEntityClass}} | SCR_EditorSettings = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/SCR_EditorSettings.c;1|SCR_EditorSettings}} | SCR_EditorSettingsEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Entities/SCR_EditorSettingsEntity.c;12|SCR_EditorSettingsEntity}} | SCR_EditorSettingsEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Entities/SCR_EditorSettingsEntity.c;1|SCR_EditorSettingsEntityClass}} | SCR_EditorSettingsSubMenu = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SettingsMenu/SCR_EditorSettingsSubMenu.c;2|SCR_EditorSettingsSubMenu}} | SCR_EditorSnapManualCameraComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_EditorSnapManualCameraComponent.c;4|SCR_EditorSnapManualCameraComponent}} | SCR_EditorStateConditionUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_EditorStateConditionUIComponent.c;1|SCR_EditorStateConditionUIComponent}} | SCR_EditorTask = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Editor/SCR_EditorTask.c;6|SCR_EditorTask}} | SCR_EditorTaskClass = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Editor/SCR_EditorTask.c;1|SCR_EditorTaskClass}} | SCR_EditorToggleUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_EditorToggleUIComponent.c;3|SCR_EditorToggleUIComponent}} | SCR_EditorToggleUIManualCameraComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_EditorToggleUIManualCameraComponent.c;4|SCR_EditorToggleUIManualCameraComponent}} | SCR_EditorToolbarAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ToolbarActions/SCR_EditorToolbarAction.c;2|SCR_EditorToolbarAction}} | SCR_EditorTransformHintCondition = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Hints/HintConditions/SCR_EditorTransformHintCondition.c;1|SCR_EditorTransformHintCondition}} | SCR_EditorVONControllerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/VON/SCR_EditorVONControllerComponent.c;7|SCR_EditorVONControllerComponent}} | SCR_EditorVONControllerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/VON/SCR_EditorVONControllerComponent.c;1|SCR_EditorVONControllerComponentClass}} | SCR_EDownloadManagerTabs = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DownloadManager/SCR_DownloadManager_Dialog.c;10|SCR_EDownloadManagerTabs}} | SCR_EDynamicFooterButtonAlignment = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SCR_DynamicFooterComponent.c;328|SCR_EDynamicFooterButtonAlignment}} | SCR_EEditablePrefabResult = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/Editor/EditablePrefabsConfig.c;1105|SCR_EEditablePrefabResult}} | SCR_EEntityRequestStatus = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Spawner/CatalogSpawner/SCR_CatalogEntitySpawnerComponent.c;1428|SCR_EEntityRequestStatus}} | SCR_EEntitySpawnerSlotType = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Spawner/SCR_EntitySpawnerSlotComponent.c;464|SCR_EEntitySpawnerSlotType}} | SCR_EEvaluationType = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_ScenarioFrameworkRadioBaseUserAction.c;98|SCR_EEvaluationType}} | SCR_EFakeBaseServices = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Logic/SCR_EFakeBaseServices.c;1|SCR_EFakeBaseServices}} | SCR_EffectModule = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_EffectModule.c;3|SCR_EffectModule}} | SCR_EffectModuleHelicopterExhaust = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_EffectModule.c;178|SCR_EffectModuleHelicopterExhaust}} | SCR_EffectsModule = {{Link|enfusion://ScriptEditor/scripts/Game/Components/EffectModules/Modules/SCR_EffectModule.c;1|SCR_EffectsModule}} | SCR_EffectsModuleAreaMeshComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AreaMesh/SCR_EffectModuleAreaMeshComponent.c;5|SCR_EffectsModuleAreaMeshComponent}} | SCR_EffectsModuleAreaMeshComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AreaMesh/SCR_EffectModuleAreaMeshComponent.c;1|SCR_EffectsModuleAreaMeshComponentClass}} | SCR_EffectsModuleChildComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/EffectModules/SCR_EffectModuleChildComponent.c;5|SCR_EffectsModuleChildComponent}} | SCR_EffectsModuleChildComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/EffectModules/SCR_EffectModuleChildComponent.c;1|SCR_EffectsModuleChildComponentClass}} | SCR_EffectsModuleComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/EffectModules/SCR_EffectModuleComponent.c;10|SCR_EffectsModuleComponent}} | SCR_EffectsModuleComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/EffectModules/SCR_EffectModuleComponent.c;1|SCR_EffectsModuleComponentClass}} | SCR_EffectsModuleComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/GameMode/Editor/SCR_EffectsModuleComponentSerializer.c;1|SCR_EffectsModuleComponentSerializer}} | SCR_EffectsModuleHitEffectComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/EffectModules/SCR_EffectModuleHitEffectComponent.c;5|SCR_EffectsModuleHitEffectComponent}} | SCR_EffectsModuleHitEffectComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/EffectModules/SCR_EffectModuleHitEffectComponent.c;1|SCR_EffectsModuleHitEffectComponentClass}} | SCR_EffectsModuleParticleChildComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_EffectsModuleParticleChildComponent.c;6|SCR_EffectsModuleParticleChildComponent}} | SCR_EffectsModuleParticleChildComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_EffectsModuleParticleChildComponent.c;1|SCR_EffectsModuleParticleChildComponentClass}} | SCR_EffectsModulePositionData_OwnerPosition = {{Link|enfusion://ScriptEditor/scripts/Game/Components/EffectModules/ModulePositionData/SCR_EffectModulePositionData_OwnerPosition.c;4|SCR_EffectsModulePositionData_OwnerPosition}} | SCR_EffectsModulePositionData_Radius = {{Link|enfusion://ScriptEditor/scripts/Game/Components/EffectModules/ModulePositionData/SCR_EffectModulePositionData_Radius.c;4|SCR_EffectsModulePositionData_Radius}} | SCR_EffectsModulePositionData_Rectangle = {{Link|enfusion://ScriptEditor/scripts/Game/Components/EffectModules/ModulePositionData/SCR_EffectModulePositionData_Rectangle.c;4|SCR_EffectsModulePositionData_Rectangle}} | SCR_EFieldManual_ImageGalleryType = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_FieldManual_ImageGalleryComponent.c;1|SCR_EFieldManual_ImageGalleryType}} | SCR_EFireModeChange = {{Link|enfusion://ScriptEditor/scripts/Game/Enums/SCR_EFireModeChange.c;1|SCR_EFireModeChange}} | SCR_EFocusToggleMode = {{Link|enfusion://ScriptEditor/scripts/Game/Player/SCR_EFocusToggleMode.c;1|SCR_EFocusToggleMode}} | SCR_EForcedWoundedSubmesh = {{Link|enfusion://ScriptEditor/scripts/Game/HitZone/SCR_CharacterHitZone.c;42|SCR_EForcedWoundedSubmesh}} | SCR_EForestGeneratorClusterType = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/ForestGenerator/ForestGeneratorClusters.c;194|SCR_EForestGeneratorClusterType}} | SCR_EForestGeneratorLevelType = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/ForestGenerator/ForestGeneratorLevels.c;88|SCR_EForestGeneratorLevelType}} | SCR_EForestGeneratorOutlineType = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/ForestGenerator/ForestGeneratorLevels.c;95|SCR_EForestGeneratorOutlineType}} | SCR_EFractalDestructionForceModel = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_DestructionFractalComponent.c;1|SCR_EFractalDestructionForceModel}} | SCR_EFriendlyFireKillFeedType = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_NotificationSenderComponent.c;697|SCR_EFriendlyFireKillFeedType}} | SCR_EFuelNodeFlagQueryType = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Fuel/SCR_FuelManagerComponent.c;498|SCR_EFuelNodeFlagQueryType}} | SCR_EFuelNodeTypeFlag = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Fuel/SCR_FuelNode.c;24|SCR_EFuelNodeTypeFlag}} | SCR_EFuzeType = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Explosives/SCR_EFuzeType.c;2|SCR_EFuzeType}} | SCR_EGameModeSetupButton = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/GameModeSetup/SCR_GameModeSetupPlugin.c;541|SCR_EGameModeSetupButton}} | SCR_EGameModeSetupPage = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/GameModeSetup/SCR_GameModeSetupPlugin.c;528|SCR_EGameModeSetupPage}} | SCR_EGameModeState = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_EGameModeState.c;4|SCR_EGameModeState}} | SCR_EGenerateControlsSchemeType = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/SCR_GenerateControlsSchemePlugin.c;287|SCR_EGenerateControlsSchemeType}} | SCR_EGeoExportType = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_ExportGeoJSONTool.c;18|SCR_EGeoExportType}} | SCR_EGroupPrivacy = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SCR_EGroupPrivacy.c;2|SCR_EGroupPrivacy}} | SCR_EGroupRole = {{Link|enfusion://ScriptEditor/scripts/Game/Groups/SCR_EGroupRole.c;2|SCR_EGroupRole}} | SCR_EGroupTaskPopUpPriority = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Notifications/SCR_EGroupTaskPopUpPriority.c;2|SCR_EGroupTaskPopUpPriority}} | SCR_EGroupType = {{Link|enfusion://ScriptEditor/scripts/Game/EntityCatalog/EntityCatalogEntryData/SCR_EntityCatalogAmbientPatrolsData.c;25|SCR_EGroupType}} | SCR_EGyroAxisDirection = {{Link|enfusion://ScriptEditor/scripts/Game/Global/Enums/SCR_EGyroAxisDirection.c;1|SCR_EGyroAxisDirection}} | SCR_EHealingItemsModuleStats = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/DataCollectorModules/SCR_DataCollectorHealingItemsModule.c;205|SCR_EHealingItemsModuleStats}} | SCR_EHitZoneSelectionMode = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/DamageAreas/SCR_EHitZoneSelectionMode.c;1|SCR_EHitZoneSelectionMode}} | SCR_EHUDManagerResizeType = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_HUDSizeCalculator.c;1|SCR_EHUDManagerResizeType}} | SCR_EIconType = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Conflict/SCR_MapUIElement.c;1|SCR_EIconType}} | SCR_EIdentityCharacterControlType = {{Link|enfusion://ScriptEditor/scripts/Game/Identity/Containers/SCR_CharacterIdentityBioGroupConfig.c;378|SCR_EIdentityCharacterControlType}} | SCR_EIdentityGender = {{Link|enfusion://ScriptEditor/scripts/Game/Identity/SCR_EIdentityGender.c;1|SCR_EIdentityGender}} | SCR_EIdentityItemGenerationType = {{Link|enfusion://ScriptEditor/scripts/Game/Identity/SCR_IdentityManagerComponent.c;777|SCR_EIdentityItemGenerationType}} | SCR_EIdentityTooltipType = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_CharacterIdentityTooltipDetail.c;84|SCR_EIdentityTooltipType}} | SCR_EIdentityType = {{Link|enfusion://ScriptEditor/scripts/Game/Identity/SCR_EIdentityType.c;1|SCR_EIdentityType}} | SCR_EImpactSoundEvent = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_ImpactEffectComponent.c;8|SCR_EImpactSoundEvent}} | SCR_EImpactSoundType = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_ImpactEffectComponent.c;1|SCR_EImpactSoundType}} | SCR_EInputTypeCondition = {{Link|enfusion://ScriptEditor/scripts/Game/FieldManual/Models/Pieces/SCR_EInputTypeCondition.c;1|SCR_EInputTypeCondition}} | SCR_EInstrumentType = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_PlayInstrument.c;99|SCR_EInstrumentType}} | SCR_EInventoryHintInputDevice = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_InventoryItemHintUIInfo.c;1|SCR_EInventoryHintInputDevice}} | SCR_EJoinDownloadsConfirmationDialogType = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/SCR_ServerBrowserDialogManager.c;543|SCR_EJoinDownloadsConfirmationDialogType}} | SCR_EJoinFailUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowserMenuUI.c;2801|SCR_EJoinFailUI}} | SCR_EJournalEntryType = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DeployMenu/SCR_JournalConfig.c;1|SCR_EJournalEntryType}} | SCR_EKillFeedTypeChanged = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/NotificationDisplayData/SCR_NotificationOnKillfeedChanged.c;86|SCR_EKillFeedTypeChanged}} | SCR_EListMenuWidgetFocus = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SCR_MenuHelper.c;240|SCR_EListMenuWidgetFocus}} | SCR_ELoginFailReason = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SCR_LoginProcessDialogUI.c;372|SCR_ELoginFailReason}} | SCR_ELOSTraceMode = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Nametags/SCR_NameTagRulesetBase.c;681|SCR_ELOSTraceMode}} | SCR_EMapDataExportType = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_WorldDataExportTool.c;2|SCR_EMapDataExportType}} | SCR_EMapMarkerType = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/Config/SCR_MapMarkerConfig.c;5|SCR_EMapMarkerType}} | SCR_EMaterialSoundTypeBreak = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_DestructionUtility.c;335|SCR_EMaterialSoundTypeBreak}} | SCR_EMaterialSoundTypeDebris = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_DestructionUtility.c;309|SCR_EMaterialSoundTypeDebris}} | SCR_EMenuLoadingAdditionalDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/MainMenuHandling/SCR_MenuLoadingComponent.c;2|SCR_EMenuLoadingAdditionalDialog}} | SCR_EmissiveLightSurfaceSlot = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_EmissiveLightSurfaceSlot.c;1|SCR_EmissiveLightSurfaceSlot}} | SCR_EmitterParam = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_EffectModule.c;200|SCR_EmitterParam}} | SCR_EMobileAssemblyStatus = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignMobileAssemblyComponent.c;361|SCR_EMobileAssemblyStatus}} | SCR_EModDetailsMenuTabs = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/DetailsMenu/SCR_ModDetailsSuperMenuComponent.c;1|SCR_EModDetailsMenuTabs}} | SCR_EModPresetsDialogTabs = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/AddonManager/AddonsTools/AddonsToolsUI.c;7|SCR_EModPresetsDialogTabs}} | SCR_EmoteBaseCommand = {{Link|enfusion://ScriptEditor/scripts/Game/Commanding/Commands/SCR_EmoteBaseCommand.c;2|SCR_EmoteBaseCommand}} | SCR_EMouseButtons = {{Link|enfusion://ScriptEditor/scripts/Game/Global/Constants.c;335|SCR_EMouseButtons}} | SCR_EmptyPositionHelper = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_EmptyPositionHelper.c;3|SCR_EmptyPositionHelper}} | SCR_EnableArsenalAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_EnableArsenalAttribute.c;1|SCR_EnableArsenalAttribute}} | SCR_EnableDefendersAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_EnableDefendersAction.c;1|SCR_EnableDefendersAction}} | SCR_EnableDeployableSpawnPointsEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_EnableDeployableSpawnPointsEditorAttribute.c;1|SCR_EnableDeployableSpawnPointsEditorAttribute}} | SCR_EnableGlobalResourceTypeEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_EnableGlobalResourceTypeEditorAttribute.c;1|SCR_EnableGlobalResourceTypeEditorAttribute}} | SCR_EnableMilitarySupplyAllocationByRankEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_EnableMilitarySupplyAllocationByRankEditorAttribute.c;1|SCR_EnableMilitarySupplyAllocationByRankEditorAttribute}} | SCR_EnableSimulationContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/Placeholder/SCR_EnableSimulationContextAction.c;1|SCR_EnableSimulationContextAction}} | SCR_EnableSpawnPointEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_EnableSpawnPointEditorAttribute.c;4|SCR_EnableSpawnPointEditorAttribute}} | SCR_EnableTeamKillingPunishmentEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_EnableTeamKillingPunishmentEditorAttribute.c;1|SCR_EnableTeamKillingPunishmentEditorAttribute}} | SCR_ENametagControllerFilter = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Components/SCR_AdditionalGameModeSettingsComponent.c;15|SCR_ENametagControllerFilter}} | SCR_ENametagRelationFilter = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Components/SCR_AdditionalGameModeSettingsComponent.c;6|SCR_ENametagRelationFilter}} | SCR_EndGameToolbarAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ToolbarActions/SCR_EndGameToolbarAction.c;1|SCR_EndGameToolbarAction}} | SCR_ENearbyInteractionContextColors = {{Link|enfusion://ScriptEditor/scripts/Game/Interactions/Display/SCR_NearbyContextColorsComponentInteract.c;1|SCR_ENearbyInteractionContextColors}} | SCR_ENetworkedStatType = {{Link|enfusion://ScriptEditor/scripts/Game/Network/NetworkedStats/SCR_NetworkedStatTypes.c;1|SCR_ENetworkedStatType}} | SCR_EngineAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_EngineAction.c;1|SCR_EngineAction}} | SCR_EngineHitZone = {{Link|enfusion://ScriptEditor/scripts/Game/HitZone/SCR_EngineHitZone.c;1|SCR_EngineHitZone}} | SCR_EngineHitZoneInfo = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/VehicleInfo/SCR_EngineHitZoneInfo.c;1|SCR_EngineHitZoneInfo}} | SCR_EnterEnemyMilitaryBaseMusic = {{Link|enfusion://ScriptEditor/scripts/Game/Music/SCR_EnterEnemyMilitaryBaseMusic.c;1|SCR_EnterEnemyMilitaryBaseMusic}} | SCR_EntitiesEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/EditableEntityFilters/SCR_EntitiesEditorUIComponent.c;1|SCR_EntitiesEditorUIComponent}} | SCR_EntitiesEditorUIPrefab = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/EditableEntityUI/SCR_EntitiesEditorUIPrefab.c;1|SCR_EntitiesEditorUIPrefab}} | SCR_EntitiesEditorUIRule = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/EditableEntityUI/SCR_EditableEntityUIRule.c;7|SCR_EntitiesEditorUIRule}} | SCR_EntitiesManagerEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_EntitiesManagerEditorComponent.c;13|SCR_EntitiesManagerEditorComponent}} | SCR_EntitiesManagerEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_EntitiesManagerEditorComponent.c;1|SCR_EntitiesManagerEditorComponentClass}} | SCR_EntitiesToolbarEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Toolbar/SCR_EntitiesToolbarEditorUIComponent.c;4|SCR_EntitiesToolbarEditorUIComponent}} | SCR_EntityAttributeTitleType = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_AttributesEditorUIComponent.c;891|SCR_EntityAttributeTitleType}} | SCR_EntityBudgetValue = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/EditableEntityCore/SCR_EntityBudgetValue.c;1|SCR_EntityBudgetValue}} | SCR_EntityCatalog = {{Link|enfusion://ScriptEditor/scripts/Game/EntityCatalog/SCR_EntityCatalog.c;180|SCR_EntityCatalog}} | SCR_EntityCatalogAmbientPatrolData = {{Link|enfusion://ScriptEditor/scripts/Game/EntityCatalog/EntityCatalogEntryData/SCR_EntityCatalogAmbientPatrolsData.c;2|SCR_EntityCatalogAmbientPatrolData}} | SCR_EntityCatalogEditorData = {{Link|enfusion://ScriptEditor/scripts/Game/EntityCatalog/EntityCatalogEntryData/SCR_EntityCatalogEditorData.c;2|SCR_EntityCatalogEditorData}} | SCR_EntityCatalogEntry = {{Link|enfusion://ScriptEditor/scripts/Game/EntityCatalog/EntityCatalogEntry/SCR_EntityCatalogEntry.c;4|SCR_EntityCatalogEntry}} | SCR_EntityCatalogEntryCustomInfo = {{Link|enfusion://ScriptEditor/scripts/Game/EntityCatalog/EntityCatalogEntry/SCR_EntityCatalogEntryCustomInfo.c;4|SCR_EntityCatalogEntryCustomInfo}} | SCR_EntityCatalogEntryNonEditable = {{Link|enfusion://ScriptEditor/scripts/Game/EntityCatalog/EntityCatalogEntry/SCR_EntityCatalogEntryNonEditable.c;4|SCR_EntityCatalogEntryNonEditable}} | SCR_EntityCatalogIdentityItemData = {{Link|enfusion://ScriptEditor/scripts/Game/EntityCatalog/EntityCatalogEntryData/SCR_EntityCatalogIdentityItemData.c;1|SCR_EntityCatalogIdentityItemData}} | SCR_EntityCatalogInventoryItem = {{Link|enfusion://ScriptEditor/scripts/Game/EntityCatalog/EntityCatalogEntry/SCR_EntityCatalogInventoryItem.c;5|SCR_EntityCatalogInventoryItem}} | SCR_EntityCatalogLoadoutData = {{Link|enfusion://ScriptEditor/scripts/Game/EntityCatalog/EntityCatalogEntryData/SCR_EntityCatalogLoadoutData.c;5|SCR_EntityCatalogLoadoutData}} | SCR_EntityCatalogManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/EntityCatalog/SCR_EntityCatalogManagerComponent.c;7|SCR_EntityCatalogManagerComponent}} | SCR_EntityCatalogManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/EntityCatalog/SCR_EntityCatalogManagerComponent.c;2|SCR_EntityCatalogManagerComponentClass}} | SCR_EntityCatalogMultiList = {{Link|enfusion://ScriptEditor/scripts/Game/EntityCatalog/SCR_EntityCatalogMultiList.c;4|SCR_EntityCatalogMultiList}} | SCR_EntityCatalogMultiListEntry = {{Link|enfusion://ScriptEditor/scripts/Game/EntityCatalog/SCR_EntityCatalogMultiList.c;62|SCR_EntityCatalogMultiListEntry}} | SCR_EntityCatalogSpawnerData = {{Link|enfusion://ScriptEditor/scripts/Game/EntityCatalog/EntityCatalogEntryData/SCR_EntityCatalogSpawnerData.c;4|SCR_EntityCatalogSpawnerData}} | SCR_EntityCatalogSpawnerOverrideData = {{Link|enfusion://ScriptEditor/scripts/Game/EntityCatalog/EntityCatalogEntryData/SCR_EntityCatalogSpawnerOverrideData.c;1|SCR_EntityCatalogSpawnerOverrideData}} | SCR_EntityCatalogSupportStationResupplyData = {{Link|enfusion://ScriptEditor/scripts/Game/EntityCatalog/EntityCatalogEntryData/SCR_EntityCatalogSupportStationResupplyData.c;1|SCR_EntityCatalogSupportStationResupplyData}} | SCR_EntityConditionTooltipDetail = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_EntityConditionTooltipDetail.c;1|SCR_EntityConditionTooltipDetail}} | SCR_EntityEditorEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Effects/SCE_EntityEditorEffect.c;1|SCR_EntityEditorEffect}} | SCR_EntityEnableResourceEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_EntityEnableResourceEditorAttribute.c;1|SCR_EntityEnableResourceEditorAttribute}} | SCR_EntityFactionEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_EntityFactionEditorAttribute.c;5|SCR_EntityFactionEditorAttribute}} | SCR_EntityFlagsManagerPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_EntityFlagsManagerPlugin.c;4|SCR_EntityFlagsManagerPlugin}} | SCR_EntityHelper = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_EntityHelper.c;1|SCR_EntityHelper}} | SCR_EntityHelperT = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_EntityHelper.c;507|SCR_EntityHelperT}} | SCR_EntityLabelPointComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Spawner/SCR_EntityLabelPointComponent.c;23|SCR_EntityLabelPointComponent}} | SCR_EntityLabelPointComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Spawner/SCR_EntityLabelPointComponent.c;1|SCR_EntityLabelPointComponentClass}} | SCR_EntityReplacerTool = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_EntityReplacerTool.c;2|SCR_EntityReplacerTool}} | SCR_EntitySourceHelper = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/Helpers/SCR_EntitySourceHelper.c;1|SCR_EntitySourceHelper}} | SCR_EntitySpawnerCharacterSlotComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Spawner/SCR_EntitySpawnerCharacterSlotComponent.c;6|SCR_EntitySpawnerCharacterSlotComponent}} | SCR_EntitySpawnerCharacterSlotComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Spawner/SCR_EntitySpawnerCharacterSlotComponent.c;1|SCR_EntitySpawnerCharacterSlotComponentClass}} | SCR_EntitySpawnerPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_EntitySpawnerPlugin.c;2|SCR_EntitySpawnerPlugin}} | SCR_EntitySpawnerSlotComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Spawner/SCR_EntitySpawnerSlotComponent.c;67|SCR_EntitySpawnerSlotComponent}} | SCR_EntitySpawnerSlotComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Spawner/SCR_EntitySpawnerSlotComponent.c;1|SCR_EntitySpawnerSlotComponentClass}} | SCR_EntityToolbarItemEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Toolbar/Items/SCR_EntityToolbarItemEditorUIComponent.c;1|SCR_EntityToolbarItemEditorUIComponent}} | SCR_EntityToolbarStateOffset = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Toolbar/SCR_EntitiesToolbarEditorUIComponent.c;357|SCR_EntityToolbarStateOffset}} | SCR_EntityToolbarTypeList = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Toolbar/SCR_EntitiesToolbarEditorUIComponent.c;333|SCR_EntityToolbarTypeList}} | SCR_EntityTooltipConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Tooltip/SCR_EntityTooltipConfig.c;1|SCR_EntityTooltipConfig}} | SCR_EntityTooltipDetail = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_EntityTooltipDetail.c;1|SCR_EntityTooltipDetail}} | SCR_EntityTooltipDetailType = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/SCR_EntityTooltipEditorUIComponent.c;210|SCR_EntityTooltipDetailType}} | SCR_EntityTooltipEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/SCR_EntityTooltipEditorUIComponent.c;3|SCR_EntityTooltipEditorUIComponent}} | SCR_EntityTypesEditableEntityFilter = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/EditableEntityFilters/SCR_EntityTypesEditableEntityFilter.c;1|SCR_EntityTypesEditableEntityFilter}} | SCR_EntityWaypoint = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_EntityWaypoint.c;43|SCR_EntityWaypoint}} | SCR_EntityWaypointClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_EntityWaypoint.c;1|SCR_EntityWaypointClass}} | SCR_Enum = {{Link|enfusion://ScriptEditor/scripts/Game/Global/SCR_Enum.c;1|SCR_Enum}} | SCR_EOpticsAngleUnits = {{Link|enfusion://ScriptEditor/scripts/Game/Global/Enums/SCR_EOpticsAngleUnits.c;5|SCR_EOpticsAngleUnits}} | SCR_EPauseReason = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Components/EPauseReason.c;1|SCR_EPauseReason}} | SCR_EPerceivedFactionOutfitType = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_PerceivedFactionManagerComponent.c;444|SCR_EPerceivedFactionOutfitType}} | SCR_EPhysicsResponseIndex = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Damage/SCR_VehicleDamageManagerComponent.c;260|SCR_EPhysicsResponseIndex}} | SCR_EPIPZeroingType = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Sights/SCR_2DPIPSightsComponent.c;7|SCR_EPIPZeroingType}} | SCR_EPlacementType = {{Link|enfusion://ScriptEditor/scripts/Game/Enums/SCR_EPlacementType.c;1|SCR_EPlacementType}} | SCR_EPlatform = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/MainMenu/SCR_HideWidgetPlatformBased.c;1|SCR_EPlatform}} | SCR_EPlayerIdType = {{Link|enfusion://ScriptEditor/scripts/Game/Network/ServerCommands/BanCommands.c;42|SCR_EPlayerIdType}} | SCR_EPlayerListComboAction = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_PlayerListMenu.c;1854|SCR_EPlayerListComboAction}} | SCR_EPlayerListComboType = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_PlayerListMenu.c;1845|SCR_EPlayerListComboType}} | SCR_EPlayerTeleportedReason = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_PlayerTeleportedFeedbackComponent.c;50|SCR_EPlayerTeleportedReason}} | SCR_EPoleCableSlotConnectivity = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Power/SCR_PoleCableSlotGroup.c;21|SCR_EPoleCableSlotConnectivity}} | SCR_EPoleCableType = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Power/SCR_EPoleCableType.c;1|SCR_EPoleCableType}} | SCR_EPopupMsgFilter = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_PopupNotification.c;632|SCR_EPopupMsgFilter}} | SCR_EPreviewState = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_PreviewEntityEditorComponent.c;1138|SCR_EPreviewState}} | SCR_EProfileSuperMenuTabId = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/MainMenu/SCR_ProfileSuperMenu.c;1|SCR_EProfileSuperMenuTabId}} | SCR_EQRFGroupOrderType = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Configs/SCR_QRFWaypointConfig.c;2|SCR_EQRFGroupOrderType}} | SCR_EQRFGroupType = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Configs/SCR_QRFGroupConfig.c;1|SCR_EQRFGroupType}} | SCR_EQRFThresholdType = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionQRFDispacher.c;1|SCR_EQRFThresholdType}} | SCR_EQuickSlotSize = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/InventoryConstants.c;9|SCR_EQuickSlotSize}} | SCR_EquipClothAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_EquipClothAction.c;3|SCR_EquipClothAction}} | SCR_EquipDeployableItemAction = {{Link|enfusion://ScriptEditor/scripts/Game/DeployableInventoryItems/Inventory/SCR_EquipDeployableItemAction.c;1|SCR_EquipDeployableItemAction}} | SCR_EquipedLoadoutStorageComponent = {{Link|enfusion://ScriptEditor/scripts/GameCode/Components/InventorySystem/SCR_EquipedLoadoutStorageComponent.c;5|SCR_EquipedLoadoutStorageComponent}} | SCR_EquipedLoadoutStorageComponentClass = {{Link|enfusion://ScriptEditor/scripts/GameCode/Components/InventorySystem/SCR_EquipedLoadoutStorageComponent.c;1|SCR_EquipedLoadoutStorageComponentClass}} | SCR_EquipGadgetAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_EquipGadgetAction.c;3|SCR_EquipGadgetAction}} | SCR_EquipGearCB = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_CharacterInventoryStorageComponent.c;49|SCR_EquipGearCB}} | SCR_EquipItemAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_EquipItemAction.c;3|SCR_EquipItemAction}} | SCR_EquipmentStorageComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_EquipmentStorageComponent.c;6|SCR_EquipmentStorageComponent}} | SCR_EquipmentStorageComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_EquipmentStorageComponent.c;1|SCR_EquipmentStorageComponentClass}} | SCR_EquipmentStorageSlot = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_EquipmentStorageComponent.c;16|SCR_EquipmentStorageSlot}} | SCR_EquipNextGrenadeCB = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_CharacterInventoryStorageComponent.c;29|SCR_EquipNextGrenadeCB}} | SCR_EquipPickedWeapon = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_EquipWeaponAction.c;191|SCR_EquipPickedWeapon}} | SCR_EquipWeaponAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_EquipWeaponAction.c;3|SCR_EquipWeaponAction}} | SCR_EquipWeaponAttachment = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_EquipWeaponAttachment.c;3|SCR_EquipWeaponAttachment}} | SCR_EquipWeaponHolsterAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_EquipWeaponAction.c;217|SCR_EquipWeaponHolsterAction}} | SCR_ERadialMenuType = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SelectionMenu/RadialMenu/SCR_RadialMenu.c;1|SCR_ERadialMenuType}} | SCR_ERadioCoverageStatus = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/SCR_RadioCoverageSystem.c;291|SCR_ERadioCoverageStatus}} | SCR_ERadioMsg = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Campaign/SCR_CampaignRadioMsg.c;138|SCR_ERadioMsg}} | SCR_EReconnectState = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Components/SCR_ReconnectComponent.c;19|SCR_EReconnectState}} | SCR_EReportReason = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Player/SCR_EReportReason.c;13|SCR_EReportReason}} | SCR_EResolutionName = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_SystemHelper.c;23|SCR_EResolutionName}} | SCR_EResupplyTaskSolverErrorState = {{Link|enfusion://ScriptEditor/scripts/Game/TaskSolver/SCR_EResupplyTaskSolverErrorState.c;1|SCR_EResupplyTaskSolverErrorState}} | SCR_EResupplyTaskSolverState = {{Link|enfusion://ScriptEditor/scripts/Game/TaskSolver/SCR_EResupplyTaskSolverState.c;1|SCR_EResupplyTaskSolverState}} | SCR_ERevisionAvailability = {{Link|enfusion://ScriptEditor/scripts/Game/Workshop/SCR_AddonManager.c;1109|SCR_ERevisionAvailability}} | SCR_ERoleAvailableForCharacterType = {{Link|enfusion://ScriptEditor/scripts/Game/Callsign/RoleCallsigns/SCR_BaseRoleCallsign.c;98|SCR_ERoleAvailableForCharacterType}} | SCR_ERotorDamageState = {{Link|enfusion://ScriptEditor/scripts/Game/HitZone/SCR_RotorHitZone.c;3|SCR_ERotorDamageState}} | SCR_ErrorDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/Dialogs/SCR_ErrorDialog.c;2|SCR_ErrorDialog}} | SCR_ErrorDialogDataComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/Dialogs/SCR_MenuDialogComponent.c;16|SCR_ErrorDialogDataComponent}} | SCR_ErrorDialogMessageEntry = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/SCR_GameKickMessages.c;20|SCR_ErrorDialogMessageEntry}} | SCR_ErrorDialogMessageGroup = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/SCR_GameKickMessages.c;9|SCR_ErrorDialogMessageGroup}} | SCR_ErrorDialogMessages = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/SCR_GameKickMessages.c;1|SCR_ErrorDialogMessages}} | SCR_EScenarioFrameworkComparisonOperator = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Enums/SCR_EScenarioFrameworkComparisonOperator.c;1|SCR_EScenarioFrameworkComparisonOperator}} | SCR_EScenarioFrameworkItemGCState = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Tasks/SCR_ScenarioFrameworkTaskDeliver.c;25|SCR_EScenarioFrameworkItemGCState}} | SCR_EScenarioFrameworkLogicOperatorHelper = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Enums/SCR_EScenarioFrameworkLogicOperators.c;9|SCR_EScenarioFrameworkLogicOperatorHelper}} | SCR_EScenarioFrameworkLogicOperators = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Enums/SCR_EScenarioFrameworkLogicOperators.c;1|SCR_EScenarioFrameworkLogicOperators}} | SCR_EScenarioFrameworkMarkerCustom = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkSlotMarker.c;218|SCR_EScenarioFrameworkMarkerCustom}} | SCR_EScenarioFrameworkMarkerCustomColor = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkSlotMarker.c;312|SCR_EScenarioFrameworkMarkerCustomColor}} | SCR_EScenarioFrameworkSpawnChildrenType = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkLayerBase.c;11|SCR_EScenarioFrameworkSpawnChildrenType}} | SCR_EScenarioFrameworkTriggerActivation = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Enums/SCR_EScenarioFrameworkTriggerActivation.c;10|SCR_EScenarioFrameworkTriggerActivation}} | SCR_EScenarioIssues = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/Common/SCR_ScenarioUICommon.c;640|SCR_EScenarioIssues}} | SCR_EScriptTemplateType = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/Tests/SCR_ScriptTemplatePlugin.c;2|SCR_EScriptTemplateType}} | SCR_EScriptTemplateType#6221#2 = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_ScriptTemplatePlugin.c;136|SCR_EScriptTemplateType#6221#2}} | SCR_ESearchBoxState = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_EditBox/SCR_EditBoxSearchComponent.c;175|SCR_ESearchBoxState}} | SCR_ESearchXOBPluginLayerFilter = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/SCR_SearchXOBPlugin.c;11|SCR_ESearchXOBPluginLayerFilter}} | SCR_ESearchXOBPluginSearchType = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/SCR_SearchXOBPlugin.c;2|SCR_ESearchXOBPluginSearchType}} | SCR_ESecondaryExplosionScale = {{Link|enfusion://ScriptEditor/scripts/GameCode/Components/SCR_SecondaryExplosions.c;15|SCR_ESecondaryExplosionScale}} | SCR_ESecondaryExplosionType = {{Link|enfusion://ScriptEditor/scripts/GameCode/Components/SCR_SecondaryExplosions.c;4|SCR_ESecondaryExplosionType}} | SCR_ESelectionBrushToolLayer = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_SelectionBrushTool.c;629|SCR_ESelectionBrushToolLayer}} | SCR_ESelectionMenuFailReason = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SelectionMenu/SCR_SelectionMenu.c;898|SCR_ESelectionMenuFailReason}} | SCR_EServerBrowserTabs = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowserMenuUI.c;2810|SCR_EServerBrowserTabs}} | SCR_EServerEntryProperty = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/ServerBrowser/SCR_ServerBrowserEntryComponent.c;531|SCR_EServerEntryProperty}} | SCR_EServerHostingDialogTabs = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/ServerHosting/ServerHostingUI.c;1|SCR_EServerHostingDialogTabs}} | SCR_EServicePointStatus = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Components/SCR_ServicePointComponent.c;228|SCR_EServicePointStatus}} | SCR_EServicePointType = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Components/SCR_ServicePointComponent.c;214|SCR_EServicePointType}} | SCR_ESFTaskType = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Enums/SCR_ESFTaskType.c;1|SCR_ESFTaskType}} | SCR_EShootingModuleStats = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/DataCollectorModules/SCR_DataCollectorShootingModule.c;316|SCR_EShootingModuleStats}} | SCR_ESpawnLogicDisconnectBehaviour = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/Logic/SCR_SpawnLogic.c;1|SCR_ESpawnLogicDisconnectBehaviour}} | SCR_ESpawnPointBudgetType = {{Link|enfusion://ScriptEditor/scripts/Game/DeployableInventoryItems/Components/SCR_RestrictedDeployableSpawnPointComponent.c;1|SCR_ESpawnPointBudgetType}} | SCR_ESpawnResult = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/Utilities/SCR_ESpawnResult.c;8|SCR_ESpawnResult}} | SCR_ESpawnType = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_BuildingSoundComponent.c;1|SCR_ESpawnType}} | SCR_ESpecialization0Display = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/PlayerData/SCR_PlayerDataConfigs.c;397|SCR_ESpecialization0Display}} | SCR_ESpecialization1Display = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/PlayerData/SCR_PlayerDataConfigs.c;406|SCR_ESpecialization1Display}} | SCR_ESpecialization2Display = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/PlayerData/SCR_PlayerDataConfigs.c;414|SCR_ESpecialization2Display}} | SCR_EstablishBaseAIFactionCommander = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/AI/SCR_EstablishBaseAIFactionCommander.c;1|SCR_EstablishBaseAIFactionCommander}} | SCR_EstablishBaseMapCommandCursor = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/MapCommandCursors/SCR_EstablishBaseMapCommandCursor.c;1|SCR_EstablishBaseMapCommandCursor}} | SCR_EstablishBaseRequestedTaskEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Campaign/SCR_EstablishBaseRequestedTaskEntity.c;5|SCR_EstablishBaseRequestedTaskEntity}} | SCR_EstablishBaseRequestedTaskEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Campaign/SCR_EstablishBaseRequestedTaskEntity.c;1|SCR_EstablishBaseRequestedTaskEntityClass}} | SCR_EstablishBaseTaskEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Campaign/SCR_EstablishBaseTaskEntity.c;5|SCR_EstablishBaseTaskEntity}} | SCR_EstablishBaseTaskEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Campaign/SCR_EstablishBaseTaskEntity.c;1|SCR_EstablishBaseTaskEntityClass}} | SCR_EStringFormat = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_StringHelper.c;1312|SCR_EStringFormat}} | SCR_ESupplyRequestExecutionPriority = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Locations/SCR_ESupplyRequestExecutionPriority.c;1|SCR_ESupplyRequestExecutionPriority}} | SCR_ESupportStationResupplyType = {{Link|enfusion://ScriptEditor/scripts/Game/EntityCatalog/EntityCatalogEntryData/SCR_EntityCatalogSupportStationResupplyData.c;15|SCR_ESupportStationResupplyType}} | SCR_ESurfaceMonitoringBehaviour = {{Link|enfusion://ScriptEditor/scripts/Game/Enums/SCR_ESurfaceMonitoringBehaviour.c;1|SCR_ESurfaceMonitoringBehaviour}} | SCR_ETaskButtonActions = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_ETaskButtonActions.c;2|SCR_ETaskButtonActions}} | SCR_ETaskNotificationSettings = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Enums/SCR_ETaskNotificationSettings.c;2|SCR_ETaskNotificationSettings}} | SCR_ETaskOwnership = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_Task.c;13|SCR_ETaskOwnership}} | SCR_ETaskSolverState = {{Link|enfusion://ScriptEditor/scripts/Game/TaskSolver/SCR_ETaskSolverState.c;1|SCR_ETaskSolverState}} | SCR_ETaskState = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_Task.c;2|SCR_ETaskState}} | SCR_ETaskTabType = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Tasks/SCR_TaskListUIComponent.c;2|SCR_ETaskTabType}} | SCR_ETaskUIVisibility = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_Task.c;34|SCR_ETaskUIVisibility}} | SCR_ETaskVisibility = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_Task.c;23|SCR_ETaskVisibility}} | SCR_ETerrainEntityVariant = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_TerrainEntityVariantReplacementPlugin.c;843|SCR_ETerrainEntityVariant}} | SCR_ETooltipAlignmentHorizontal = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetTooltip.c;799|SCR_ETooltipAlignmentHorizontal}} | SCR_ETooltipAlignmentVertical = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetTooltip.c;841|SCR_ETooltipAlignmentVertical}} | SCR_ETooltipAnchor = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetTooltip.c;851|SCR_ETooltipAnchor}} | SCR_ETooltipOverflowHandling = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetTooltip.c;859|SCR_ETooltipOverflowHandling}} | SCR_ETooltipOverflowType = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetTooltip.c;866|SCR_ETooltipOverflowType}} | SCR_ETransportUnitState = {{Link|enfusion://ScriptEditor/scripts/Game/SuppliesTransportSystem/SCR_ETransportUnitState.c;1|SCR_ETransportUnitState}} | SCR_ETreeType = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/ForestGeneratorEntity.c;2522|SCR_ETreeType}} | SCR_ETutorialArlandStageMasters = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Logic/SCR_ETutorialArlandStageMasters.c;1|SCR_ETutorialArlandStageMasters}} | SCR_ETutorialArlandSupplyTruckWaypointMode = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Logic/SCR_ETutorialArlandSupplyTruckWaypointMode.c;1|SCR_ETutorialArlandSupplyTruckWaypointMode}} | SCR_ETutorialBreakType = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Logic/SCR_ETutorialBreakType.c;1|SCR_ETutorialBreakType}} | SCR_ETutorialCourses = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Logic/SCR_ETutorialCourses.c;1|SCR_ETutorialCourses}} | SCR_EUnassignReason = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_ECampaignTaskReasons.c;12|SCR_EUnassignReason}} | SCR_EUseContext = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_EUseContext.c;1|SCR_EUseContext}} | SCR_EVehicleControllerType = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Vehicle/SCR_VehicleControllerTypeCondition.c;2|SCR_EVehicleControllerType}} | SCR_EventHandlerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_EventHandlerComponent.c;8|SCR_EventHandlerComponent}} | SCR_EVoiceoverActor = {{Link|enfusion://ScriptEditor/scripts/Game/Voiceover/SCR_VoiceoverData.c;197|SCR_EVoiceoverActor}} | SCR_EVONAutoTuneFrequency = {{Link|enfusion://ScriptEditor/scripts/Game/VON/SCR_VONAutoTuneConfig.c;11|SCR_EVONAutoTuneFrequency}} | SCR_EVONAutoTuneRole = {{Link|enfusion://ScriptEditor/scripts/Game/VON/SCR_VONAutoTuneConfig.c;2|SCR_EVONAutoTuneRole}} | SCR_EWarCrimes = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/CareerProfile/SCR_WarCrimesPanelUI.c;150|SCR_EWarCrimes}} | SCR_EWeaponGroupFireMode = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/SCR_WeaponGroupFireMode.c;1|SCR_EWeaponGroupFireMode}} | SCR_EWeaponInfoIconState = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/WeaponInfo/SCR_WeaponInfo_MultiWeaponTurret.c;959|SCR_EWeaponInfoIconState}} | SCR_EWeatherStates = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Logic/SCR_EWeatherStates.c;1|SCR_EWeatherStates}} | SCR_EWheelDamageState = {{Link|enfusion://ScriptEditor/scripts/Game/HitZone/SCR_WheelHitZone.c;3|SCR_EWheelDamageState}} | SCR_EWorkshopTileErrorState = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/MainMenu/SCR_ContentBrowserTileComponent.c;712|SCR_EWorkshopTileErrorState}} | SCR_Example1Subject = {{Link|enfusion://ScriptEditor/scripts/Game/Tests/TestSuites/Example/SCR_TEST_Example1TestSuite.c;4|SCR_Example1Subject}} | SCR_ExitGameDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/CommonDialogs.c;82|SCR_ExitGameDialog}} | SCR_ExitGameWhileDownloadingDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/CommonDialogs.c;98|SCR_ExitGameWhileDownloadingDialog}} | SCR_EXPInfoWidget = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_XPInfoDisplay.c;283|SCR_EXPInfoWidget}} | SCR_ExplosionDamageEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/DamageEffects/DamageEffectSources/SCR_ExplosionDamageEffect.c;1|SCR_ExplosionDamageEffect}} | SCR_ExplosionGenerator = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/SCR_ExplosionGenerator.c;6|SCR_ExplosionGenerator}} | SCR_ExplosionGeneratorClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/SCR_ExplosionGenerator.c;1|SCR_ExplosionGeneratorClass}} | SCR_ExplosiveChargeAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_ExplosiveChargeAction.c;1|SCR_ExplosiveChargeAction}} | SCR_ExplosiveChargeComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_ExplosiveChargeComponent.c;10|SCR_ExplosiveChargeComponent}} | SCR_ExplosiveChargeComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_ExplosiveChargeComponent.c;1|SCR_ExplosiveChargeComponentClass}} | SCR_ExplosiveChargeDetail = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_ExplosiveChargeDetail.c;1|SCR_ExplosiveChargeDetail}} | SCR_ExplosiveChargeInventoryItemComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/Items/SCR_ExplosiveChargeInventoryItemComponent.c;6|SCR_ExplosiveChargeInventoryItemComponent}} | SCR_ExplosiveChargeInventoryItemComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/Items/SCR_ExplosiveChargeInventoryItemComponent.c;1|SCR_ExplosiveChargeInventoryItemComponentClass}} | SCR_ExplosiveFuzeArmingAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_ExplosiveFuzeArmingAttribute.c;2|SCR_ExplosiveFuzeArmingAttribute}} | SCR_ExplosiveFuzeTimerAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_ExplosiveFuzeTimerAttribute.c;2|SCR_ExplosiveFuzeTimerAttribute}} | SCR_ExplosiveTriggerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Explosives/SCR_ExplosiveTriggerComponent.c;5|SCR_ExplosiveTriggerComponent}} | SCR_ExplosiveTriggerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Explosives/SCR_ExplosiveTriggerComponent.c;1|SCR_ExplosiveTriggerComponentClass}} | SCR_ExportGeoJSONTool = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_ExportGeoJSONTool.c;330|SCR_ExportGeoJSONTool}} | SCR_EXPRewards = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_XPHandlerComponent.c;845|SCR_EXPRewards}} | SCR_ExtendedCharacterIdentity = {{Link|enfusion://ScriptEditor/scripts/Game/Identity/Containers/SCR_ExtendedCharacterIdentity.c;1|SCR_ExtendedCharacterIdentity}} | SCR_ExtendedCharacterIdentityComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Identity/SCR_ExtendedCharacterIdentityComponent.c;5|SCR_ExtendedCharacterIdentityComponent}} | SCR_ExtendedCharacterIdentityComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Identity/SCR_ExtendedCharacterIdentityComponent.c;1|SCR_ExtendedCharacterIdentityComponentClass}} | SCR_ExtendedDamageManagerComponent = {{Link|enfusion://ScriptEditor/scripts/GameCode/Components/SCR_ExtendedDamageManagerComponent.c;11|SCR_ExtendedDamageManagerComponent}} | SCR_ExtendedDamageManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/GameCode/Components/SCR_ExtendedDamageManagerComponent.c;7|SCR_ExtendedDamageManagerComponentClass}} | SCR_ExtendedIdentity = {{Link|enfusion://ScriptEditor/scripts/Game/Identity/Containers/SCR_ExtendedIdentity.c;1|SCR_ExtendedIdentity}} | SCR_ExtendedIdentityComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Identity/SCR_ExtendedIdentityComponent.c;5|SCR_ExtendedIdentityComponent}} | SCR_ExtendedIdentityComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Identity/SCR_ExtendedIdentityComponent.c;1|SCR_ExtendedIdentityComponentClass}} | SCR_ExtendedTask = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_ExtendedTask.c;9|SCR_ExtendedTask}} | SCR_ExtendedTaskClass = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_ExtendedTask.c;1|SCR_ExtendedTaskClass}} | SCR_ExtendedTaskData = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_ExtendedTaskData.c;1|SCR_ExtendedTaskData}} | SCR_ExtendedTaskSave = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/States/SCR_TaskSystemSerializer.c;486|SCR_ExtendedTaskSave}} | SCR_ExternalPaginationUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_ExternalPaginationUIComponent.c;1|SCR_ExternalPaginationUIComponent}} | SCR_Faction = {{Link|enfusion://ScriptEditor/scripts/Game/Faction/SCR_Faction.c;6|SCR_Faction}} | SCR_Faction_BIKI = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/BIKI/SCR_BIKIFactionAssetsExportPlugin.c;105|SCR_Faction_BIKI}} | SCR_FactionAffiliationComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_FactionAffiliationComponent.c;10|SCR_FactionAffiliationComponent}} | SCR_FactionAffiliationComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_FactionAffiliationComponent.c;1|SCR_FactionAffiliationComponentClass}} | SCR_FactionAliasComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/FactionManager/SCR_FactionAliasComponent.c;11|SCR_FactionAliasComponent}} | SCR_FactionAliasComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/FactionManager/SCR_FactionAliasComponent.c;6|SCR_FactionAliasComponentClass}} | SCR_FactionButton = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DeployMenu/SCR_FactionRequestUIComponent.c;267|SCR_FactionButton}} | SCR_FactionCallsignData = {{Link|enfusion://ScriptEditor/scripts/Game/Callsign/SCR_FactionCallsignData.c;2|SCR_FactionCallsignData}} | SCR_FactionCallsignInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Callsign/SCR_FactionCallsignInfo.c;4|SCR_FactionCallsignInfo}} | SCR_FactionColorDefaults = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapDescriptorDefaults.c;27|SCR_FactionColorDefaults}} | SCR_FactionCommanderBaseCancelRequestMenuHandler = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/MenuHandlers/SCR_FactionCommanderBaseCancelRequestMenuHandler.c;1|SCR_FactionCommanderBaseCancelRequestMenuHandler}} | SCR_FactionCommanderBaseLogicComponent = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/Components/SCR_FactionCommanderBaseLogicComponent.c;6|SCR_FactionCommanderBaseLogicComponent}} | SCR_FactionCommanderBaseLogicComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/Components/SCR_FactionCommanderBaseLogicComponent.c;1|SCR_FactionCommanderBaseLogicComponentClass}} | SCR_FactionCommanderBaseMenuHandler = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/MenuHandlers/SCR_FactionCommanderBaseMenuHandler.c;1|SCR_FactionCommanderBaseMenuHandler}} | SCR_FactionCommanderBaseRequestMenuHandler = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/MenuHandlers/SCR_FactionCommanderBaseRequestMenuHandler.c;1|SCR_FactionCommanderBaseRequestMenuHandler}} | SCR_FactionCommanderBaseTaskMenuHandler = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/MenuHandlers/SCR_FactionCommanderBaseTaskMenuHandler.c;1|SCR_FactionCommanderBaseTaskMenuHandler}} | SCR_FactionCommanderCancelConflictBaseMenuHandler = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/MenuHandlers/SCR_FactionCommanderCancelConflictBaseMenuHandler.c;1|SCR_FactionCommanderCancelConflictBaseMenuHandler}} | SCR_FactionCommanderCancelMenuHandler = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/MenuHandlers/SCR_FactionCommanderCancelMenuHandler.c;1|SCR_FactionCommanderCancelMenuHandler}} | SCR_FactionCommanderCommandConflictBaseMenuHandler = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/MenuHandlers/SCR_FactionCommanderCommandConflictBaseMenuHandler.c;1|SCR_FactionCommanderCommandConflictBaseMenuHandler}} | SCR_FactionCommanderCommandConflictMenuHandler = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/MenuHandlers/SCR_FactionCommanderCommandConflictMenuHandler.c;1|SCR_FactionCommanderCommandConflictMenuHandler}} | SCR_FactionCommanderConfirmMenuHandler = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/MenuHandlers/SCR_FactionCommanderConfirmMenuHandler.c;1|SCR_FactionCommanderConfirmMenuHandler}} | SCR_FactionCommanderConflictBaseMenuHandler = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/MenuHandlers/SCR_FactionCommanderConflictBaseMenuHandler.c;1|SCR_FactionCommanderConflictBaseMenuHandler}} | SCR_FactionCommanderDismantleCommandMenuHandler = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/MenuHandlers/SCR_FactionCommanderDismantleCommandMenuHandler.c;1|SCR_FactionCommanderDismantleCommandMenuHandler}} | SCR_FactionCommanderEstablishBaseMenuHandlerHelper = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/MenuHandlers/SCR_FactionCommanderEstablishBaseMenuHandlerHelper.c;1|SCR_FactionCommanderEstablishBaseMenuHandlerHelper}} | SCR_FactionCommanderEstablishBaseRequestCancelMenuHandler = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/MenuHandlers/SCR_FactionCommanderEstablishBaseRequestCancelMenuHandler.c;1|SCR_FactionCommanderEstablishBaseRequestCancelMenuHandler}} | SCR_FactionCommanderEstablishBaseRequestConfirmMenuHandler = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/MenuHandlers/SCR_FactionCommanderEstablishBaseRequestConfirmMenuHandler.c;1|SCR_FactionCommanderEstablishBaseRequestConfirmMenuHandler}} | SCR_FactionCommanderEstablishBaseRequestDenyMenuHandler = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/MenuHandlers/SCR_FactionCommanderEstablishBaseRequestDenyMenuHandler.c;1|SCR_FactionCommanderEstablishBaseRequestDenyMenuHandler}} | SCR_FactionCommanderEstablishBaseRequestMenuHandler = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/MenuHandlers/SCR_FactionCommanderEstablishBaseRequestMenuHandler.c;1|SCR_FactionCommanderEstablishBaseRequestMenuHandler}} | SCR_FactionCommanderEstablishCommandMenuHandler = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/MenuHandlers/SCR_FactionCommanderEstablishCommandMenuHandler.c;1|SCR_FactionCommanderEstablishCommandMenuHandler}} | SCR_FactionCommanderHandlerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/Components/SCR_FactionCommanderHandlerComponent.c;11|SCR_FactionCommanderHandlerComponent}} | SCR_FactionCommanderHandlerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/Components/SCR_FactionCommanderHandlerComponent.c;6|SCR_FactionCommanderHandlerComponentClass}} | SCR_FactionCommanderMainCommandMenuHandler = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/MenuHandlers/SCR_FactionCommanderMainCommandMenuHandler.c;1|SCR_FactionCommanderMainCommandMenuHandler}} | SCR_FactionCommanderMainRequestMenuHandler = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/MenuHandlers/SCR_FactionCommanderMainRequestMenuHandler.c;1|SCR_FactionCommanderMainRequestMenuHandler}} | SCR_FactionCommanderMenuConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapFactionCommanderRadialMenu.c;25|SCR_FactionCommanderMenuConfig}} | SCR_FactionCommanderMenuEntry = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/SCR_FactionCommanderMenuHierarchy.c;15|SCR_FactionCommanderMenuEntry}} | SCR_FactionCommanderMenuHierarchy = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/SCR_FactionCommanderMenuHierarchy.c;1|SCR_FactionCommanderMenuHierarchy}} | SCR_FactionCommanderOpenMapUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/UserActions/SCR_FactionCommanderOpenMapUserAction.c;1|SCR_FactionCommanderOpenMapUserAction}} | SCR_FactionCommanderPlayerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/Components/SCR_FactionCommanderPlayerComponent.c;51|SCR_FactionCommanderPlayerComponent}} | SCR_FactionCommanderPlayerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/Components/SCR_FactionCommanderPlayerComponent.c;2|SCR_FactionCommanderPlayerComponentClass}} | SCR_FactionCommanderSignupComponent = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/Components/SCR_FactionCommanderSignupComponent.c;7|SCR_FactionCommanderSignupComponent}} | SCR_FactionCommanderSignupComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/Components/SCR_FactionCommanderSignupComponent.c;2|SCR_FactionCommanderSignupComponentClass}} | SCR_FactionCommanderTaskRootMenuEntry = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/SCR_FactionCommanderMenuHierarchy.c;128|SCR_FactionCommanderTaskRootMenuEntry}} | SCR_FactionCommanderVolunteerUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/UserActions/SCR_FactionCommanderVolunteerUserAction.c;1|SCR_FactionCommanderVolunteerUserAction}} | SCR_FactionCommanderWithdrawUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/UserActions/SCR_FactionCommanderWithdrawUserAction.c;1|SCR_FactionCommanderWithdrawUserAction}} | SCR_FactionControlTriggerEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Triggers/SCR_FactionControlTriggerEntity.c;5|SCR_FactionControlTriggerEntity}} | SCR_FactionControlTriggerEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Triggers/SCR_FactionControlTriggerEntity.c;1|SCR_FactionControlTriggerEntityClass}} | SCR_FactionDominanceTriggerEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Triggers/SCR_FactionDominanceTriggerEntity.c;6|SCR_FactionDominanceTriggerEntity}} | SCR_FactionDominanceTriggerEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Triggers/SCR_FactionDominanceTriggerEntity.c;1|SCR_FactionDominanceTriggerEntityClass}} | SCR_FactionGameOverScreenInfo = {{Link|enfusion://ScriptEditor/scripts/Game/GameOverScreen/SCR_FactionGameOverScreenInfo.c;1|SCR_FactionGameOverScreenInfo}} | SCR_FactionGroupsTooltipDetail = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_FactionGroupsTooltipDetail.c;1|SCR_FactionGroupsTooltipDetail}} | SCR_FactionHintTooltipDetail = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_FactionHintTooltipDetail.c;1|SCR_FactionHintTooltipDetail}} | SCR_FactionHomeTerritory = {{Link|enfusion://ScriptEditor/scripts/Game/Identity/Containers/SCR_FactionHomeTerritoryConfig.c;93|SCR_FactionHomeTerritory}} | SCR_FactionHomeTerritoryConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Identity/Containers/SCR_FactionHomeTerritoryConfig.c;1|SCR_FactionHomeTerritoryConfig}} | SCR_FactionKillPunishmentTypes = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/NotificationDisplayData/SCR_NotificationPerceivedFactionKillPunishment.c;38|SCR_FactionKillPunishmentTypes}} | SCR_FactionLimit = {{Link|enfusion://ScriptEditor/scripts/Game/Mission/SCR_FactionLimit.c;1|SCR_FactionLimit}} | SCR_FactionLoadoutBaseEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_FactionLoadoutBaseEditorAttribute.c;1|SCR_FactionLoadoutBaseEditorAttribute}} | SCR_FactionLoadoutEquipmentEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_FactionLoadoutEquipmentEditorAttribute.c;1|SCR_FactionLoadoutEquipmentEditorAttribute}} | SCR_FactionLoadoutOutfitEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_FactionLoadoutOutfitEditorAttribute.c;1|SCR_FactionLoadoutOutfitEditorAttribute}} | SCR_FactionLoadoutWeaponsEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_FactionLoadoutWeaponsEditorAttribute.c;1|SCR_FactionLoadoutWeaponsEditorAttribute}} | SCR_FactionManager = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/FactionManager/SCR_FactionManager.c;9|SCR_FactionManager}} | SCR_FactionManagerClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/FactionManager/SCR_FactionManager.c;5|SCR_FactionManagerClass}} | SCR_FactionManagerSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Entities/SCR_FactionManagerSerializer.c;9|SCR_FactionManagerSerializer}} | SCR_FactionOutfitItemHintUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_FactionOutfitItemHintUIInfo.c;1|SCR_FactionOutfitItemHintUIInfo}} | SCR_FactionPlayerList = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DeployMenu/SCR_FactionPlayerList.c;57|SCR_FactionPlayerList}} | SCR_FactionPlayerLoadout = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Loadout/SCR_PlayerFactionLoadout.c;1|SCR_FactionPlayerLoadout}} | SCR_FactionPlayersTooltipDetail = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_FactionPlayersTooltipDetail.c;1|SCR_FactionPlayersTooltipDetail}} | SCR_FactionPlayerTriggerEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Triggers/SCR_FactionPlayerTriggerEntity.c;5|SCR_FactionPlayerTriggerEntity}} | SCR_FactionPlayerTriggerEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Triggers/SCR_FactionPlayerTriggerEntity.c;1|SCR_FactionPlayerTriggerEntityClass}} | SCR_FactionReconMarkerEntry = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/Config/ReconMarker/SCR_FactionReconMarkerEntry.c;1|SCR_FactionReconMarkerEntry}} | SCR_FactionRelationshipEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_FactionRelationshipEditorAttribute.c;1|SCR_FactionRelationshipEditorAttribute}} | SCR_FactionRequestUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DeployMenu/SCR_FactionRequestUIComponent.c;5|SCR_FactionRequestUIComponent}} | SCR_FactionsToolbarEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Toolbar/SCR_FactionsToolbarEditorUIComponent.c;3|SCR_FactionsToolbarEditorUIComponent}} | SCR_FactionsToolbarItemEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Toolbar/Items/SCR_FactionsToolbarItemEditorUIComponent.c;1|SCR_FactionsToolbarItemEditorUIComponent}} | SCR_FactionTasksAndSpawnPointsTooltipDetail = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_FactionTasksAndSpawnPointsTooltipDetail.c;1|SCR_FactionTasksAndSpawnPointsTooltipDetail}} | SCR_FactionTooltipDetail = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_FactionTooltipDetail.c;1|SCR_FactionTooltipDetail}} | SCR_FactionUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/UI/SCR_FactionUIInfo.c;3|SCR_FactionUIInfo}} | SCR_FactionVictoryGameOverScreenInfo = {{Link|enfusion://ScriptEditor/scripts/Game/GameOverScreen/SCR_FactionVictoryGameOverScreenInfo.c;1|SCR_FactionVictoryGameOverScreenInfo}} | SCR_FactionViewTitle = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapDescriptorDefaults.c;302|SCR_FactionViewTitle}} | SCR_FactionWarningManagerEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_FactionWarningManagerEditorComponent.c;9|SCR_FactionWarningManagerEditorComponent}} | SCR_FactionWarningManagerEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_FactionWarningManagerEditorComponent.c;1|SCR_FactionWarningManagerEditorComponentClass}} | SCR_FadeInOutAnimator = {{Link|enfusion://ScriptEditor/scripts/Game/UI/SCR_FadeInOutAnimator.c;8|SCR_FadeInOutAnimator}} | SCR_FadeInOutEffect = {{Link|enfusion://ScriptEditor/scripts/Game/UI/ScreenEffects/SCR_FadeInOutEffect.c;1|SCR_FadeInOutEffect}} | SCR_FadeUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/Animations/SCR_FadeUIComponent.c;1|SCR_FadeUIComponent}} | SCR_FailedModsDownloadDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/Common/Dialogs/SCR_WorkshopDialogs.c;18|SCR_FailedModsDownloadDialog}} | SCR_FallDamageEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/DamageEffects/CharacterDamageEffects/SCR_FallDamageEffect.c;1|SCR_FallDamageEffect}} | SCR_FastTravelAction = {{Link|enfusion://ScriptEditor/scripts/Game/CombatOps/SCR_FastTravelAction.c;1|SCR_FastTravelAction}} | SCR_FastTravelComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_FastTravelComponent.c;6|SCR_FastTravelComponent}} | SCR_FastTravelComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_FastTravelComponent.c;1|SCR_FastTravelComponentClass}} | SCR_FastTravelComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/PlayerController/SCR_FastTravelComponentSerializer.c;1|SCR_FastTravelComponentSerializer}} | SCR_FeedbackDialogContentWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SCR_FeedbackDialogContentWidgets.c;3|SCR_FeedbackDialogContentWidgets}} | SCR_FeedbackDialogPredefinedSentences = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SCR_FeedbackDialogPredefinedSentences.c;1|SCR_FeedbackDialogPredefinedSentences}} | SCR_FeedbackDialogUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SCR_FeedbackDialogUI.c;250|SCR_FeedbackDialogUI}} | SCR_FieldManual_ImageData = {{Link|enfusion://ScriptEditor/scripts/Game/FieldManual/Models/SCR_FieldManual_ImageData.c;1|SCR_FieldManual_ImageData}} | SCR_FieldManual_ImageGalleryComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_FieldManual_ImageGalleryComponent.c;9|SCR_FieldManual_ImageGalleryComponent}} | SCR_FieldManual_ImageGalleryLayoutInfo = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_FieldManual_ImageGalleryComponent.c;231|SCR_FieldManual_ImageGalleryLayoutInfo}} | SCR_FieldManual_StatisticsLineComponent = {{Link|enfusion://ScriptEditor/scripts/Game/FieldManual/Models/Config/Components/SCR_FieldManual_StatisticsLineComponent.c;1|SCR_FieldManual_StatisticsLineComponent}} | SCR_FieldManualConfigCategory = {{Link|enfusion://ScriptEditor/scripts/Game/FieldManual/Models/Config/SCR_FieldManualConfigCategory.c;1|SCR_FieldManualConfigCategory}} | SCR_FieldManualConfigEntry = {{Link|enfusion://ScriptEditor/scripts/Game/FieldManual/Models/Config/EntryTypes/SCR_FieldManualConfigEntry.c;1|SCR_FieldManualConfigEntry}} | SCR_FieldManualConfigEntry_Standard = {{Link|enfusion://ScriptEditor/scripts/Game/FieldManual/Models/Config/EntryTypes/SCR_FieldManualConfigEntry_Standard.c;1|SCR_FieldManualConfigEntry_Standard}} | SCR_FieldManualConfigEntry_Weapon = {{Link|enfusion://ScriptEditor/scripts/Game/FieldManual/Models/Config/EntryTypes/SCR_FieldManualConfigEntry_Weapon.c;1|SCR_FieldManualConfigEntry_Weapon}} | SCR_FieldManualConfigLoader = {{Link|enfusion://ScriptEditor/scripts/Game/FieldManual/SCR_FieldManualConfigLoader.c;1|SCR_FieldManualConfigLoader}} | SCR_FieldManualConfigRoot = {{Link|enfusion://ScriptEditor/scripts/Game/FieldManual/Models/Config/SCR_FieldManualConfigRoot.c;1|SCR_FieldManualConfigRoot}} | SCR_FieldManualEntryScriptedWidgetEventHandler = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/FieldManual/Events/SCR_FieldManualEntryScriptedWidgetEventHandler.c;1|SCR_FieldManualEntryScriptedWidgetEventHandler}} | SCR_FieldManualPiece = {{Link|enfusion://ScriptEditor/scripts/Game/FieldManual/Models/Pieces/SCR_FieldManualPiece.c;1|SCR_FieldManualPiece}} | SCR_FieldManualPiece_ConfigEntry = {{Link|enfusion://ScriptEditor/scripts/Game/FieldManual/Models/Pieces/SCR_FieldManualPiece_ConfigEntry.c;1|SCR_FieldManualPiece_ConfigEntry}} | SCR_FieldManualPiece_ConfigEntryList = {{Link|enfusion://ScriptEditor/scripts/Game/FieldManual/Models/Pieces/SCR_FieldManualPiece_ConfigEntryList.c;1|SCR_FieldManualPiece_ConfigEntryList}} | SCR_FieldManualPiece_Header = {{Link|enfusion://ScriptEditor/scripts/Game/FieldManual/Models/Pieces/SCR_FieldManualPiece_Header.c;1|SCR_FieldManualPiece_Header}} | SCR_FieldManualPiece_Image = {{Link|enfusion://ScriptEditor/scripts/Game/FieldManual/Models/Pieces/SCR_FieldManualPiece_Image.c;1|SCR_FieldManualPiece_Image}} | SCR_FieldManualPiece_ImageGallery = {{Link|enfusion://ScriptEditor/scripts/Game/FieldManual/Models/Pieces/SCR_FieldManualPiece_ImageGallery.c;1|SCR_FieldManualPiece_ImageGallery}} | SCR_FieldManualPiece_Keybind = {{Link|enfusion://ScriptEditor/scripts/Game/FieldManual/Models/Pieces/SCR_FieldManualPiece_Keybind.c;1|SCR_FieldManualPiece_Keybind}} | SCR_FieldManualPiece_KeybindList = {{Link|enfusion://ScriptEditor/scripts/Game/FieldManual/Models/Pieces/SCR_FieldManualPiece_KeybindList.c;1|SCR_FieldManualPiece_KeybindList}} | SCR_FieldManualPiece_LineBreak = {{Link|enfusion://ScriptEditor/scripts/Game/FieldManual/Models/Pieces/SCR_FieldManualPiece_LineBreak.c;1|SCR_FieldManualPiece_LineBreak}} | SCR_FieldManualPiece_Separator = {{Link|enfusion://ScriptEditor/scripts/Game/FieldManual/Models/Pieces/SCR_FieldManualPiece_Separator.c;1|SCR_FieldManualPiece_Separator}} | SCR_FieldManualPiece_Text = {{Link|enfusion://ScriptEditor/scripts/Game/FieldManual/Models/Pieces/SCR_FieldManualPiece_Text.c;1|SCR_FieldManualPiece_Text}} | SCR_FieldManualSubCategoryScriptedWidgetEventHandler = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/FieldManual/Events/SCR_FieldManualSubCategoryScriptedWidgetEventHandler.c;1|SCR_FieldManualSubCategoryScriptedWidgetEventHandler}} | SCR_FieldManualTimeSpentData = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/ApplicationData/SCR_AnalyticsApplicationData.c;112|SCR_FieldManualTimeSpentData}} | SCR_FieldManualUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/FieldManual/SCR_FieldManualUI.c;1|SCR_FieldManualUI}} | SCR_FieldManualUI_WeaponStatsHelper = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/FieldManual/SCR_FieldManualUI_WeaponStatsHelper.c;1|SCR_FieldManualUI_WeaponStatsHelper}} | SCR_FieldOfViewSettings = {{Link|enfusion://ScriptEditor/scripts/Game/Global/SCR_GameplaySettings.c;63|SCR_FieldOfViewSettings}} | SCR_FileInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_FileIOHelper.c;483|SCR_FileInfo}} | SCR_FileIOHelper = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_FileIOHelper.c;1|SCR_FileIOHelper}} | SCR_FillVehicleContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/Placeholder/SCR_FillVehicleContextAction.c;1|SCR_FillVehicleContextAction}} | SCR_FilterCategory = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/Common/SCR_FilterSet.c;66|SCR_FilterCategory}} | SCR_FilteredInventoryStorageComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_FilteredInventoryStorageComponent.c;55|SCR_FilteredInventoryStorageComponent}} | SCR_FilteredInventoryStorageComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_FilteredInventoryStorageComponent.c;1|SCR_FilteredInventoryStorageComponentClass}} | SCR_FilterEntry = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/Common/SCR_FilterSet.c;8|SCR_FilterEntry}} | SCR_FilterEntryRoom = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/ServerBrowserFiltering.c;550|SCR_FilterEntryRoom}} | SCR_FilterEntryRoomValue = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/ServerBrowserFiltering.c;591|SCR_FilterEntryRoomValue}} | SCR_FilterEntryTitle = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/Common/SCR_FilterSet.c;261|SCR_FilterEntryTitle}} | SCR_FilterPanelComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/FilterPanel/SCR_FilterPanelComponent.c;11|SCR_FilterPanelComponent}} | SCR_FilterPanelWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/FilterPanel/SCR_FilterPanelWidgets.c;4|SCR_FilterPanelWidgets}} | SCR_FilterSet = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/Common/SCR_FilterSet.c;195|SCR_FilterSet}} | SCR_FilterSetStorage = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/Common/SCR_FilterSet.c;276|SCR_FilterSetStorage}} | SCR_FindInContentBrowserContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_FindInContentBrowserContextAction.c;1|SCR_FindInContentBrowserContextAction}} | SCR_FindInWorkshopContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/Placeholder/SCR_FindInWorkshopContextAction.c;1|SCR_FindInWorkshopContextAction}} | SCR_FindResourcesPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/SCR_FindResourcesPlugin.c;2|SCR_FindResourcesPlugin}} | SCR_FireModeManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_FireModeManagerComponent.c;10|SCR_FireModeManagerComponent}} | SCR_FireModeManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_FireModeManagerComponent.c;6|SCR_FireModeManagerComponentClass}} | SCR_FireModeSwitchUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/Inspection/SCR_FireModeSwitchUserAction.c;1|SCR_FireModeSwitchUserAction}} | SCR_FireplaceComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_FireplaceComponent.c;25|SCR_FireplaceComponent}} | SCR_FireplaceComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_FireplaceComponent.c;1|SCR_FireplaceComponentClass}} | SCR_FireSupportRequestedTaskEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Campaign/SCR_FireSupportRequestedTaskEntity.c;5|SCR_FireSupportRequestedTaskEntity}} | SCR_FireSupportRequestedTaskEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Campaign/SCR_FireSupportRequestedTaskEntity.c;1|SCR_FireSupportRequestedTaskEntityClass}} | SCR_FiringRangeController = {{Link|enfusion://ScriptEditor/scripts/Game/FiringRange/SCR_FiringRangeController.c;9|SCR_FiringRangeController}} | SCR_FiringRangeControllerClass = {{Link|enfusion://ScriptEditor/scripts/Game/FiringRange/SCR_FiringRangeController.c;1|SCR_FiringRangeControllerClass}} | SCR_FiringRangeLineArea = {{Link|enfusion://ScriptEditor/scripts/Game/FiringRange/SCR_FiringRangeLineArea.c;7|SCR_FiringRangeLineArea}} | SCR_FiringRangeLineAreaClass = {{Link|enfusion://ScriptEditor/scripts/Game/FiringRange/SCR_FiringRangeLineArea.c;1|SCR_FiringRangeLineAreaClass}} | SCR_FiringRangeManager = {{Link|enfusion://ScriptEditor/scripts/Game/FiringRange/SCR_FiringRangeManager.c;7|SCR_FiringRangeManager}} | SCR_FiringRangeManagerClass = {{Link|enfusion://ScriptEditor/scripts/Game/FiringRange/SCR_FiringRangeManager.c;1|SCR_FiringRangeManagerClass}} | SCR_FiringRangeNetworkEntity = {{Link|enfusion://ScriptEditor/scripts/Game/FiringRange/SCR_FiringRangeNetworkEntity.c;7|SCR_FiringRangeNetworkEntity}} | SCR_FiringRangeNetworkEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/FiringRange/SCR_FiringRangeNetworkEntity.c;1|SCR_FiringRangeNetworkEntityClass}} | SCR_FiringRangeScoringComponent = {{Link|enfusion://ScriptEditor/scripts/Game/FiringRange/SCR_FiringRangeScoringComponent.c;6|SCR_FiringRangeScoringComponent}} | SCR_FiringRangeScoringComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/FiringRange/SCR_FiringRangeScoringComponent.c;1|SCR_FiringRangeScoringComponentClass}} | SCR_FiringRangeTarget = {{Link|enfusion://ScriptEditor/scripts/Game/FiringRange/SCR_FiringRangeTarget.c;19|SCR_FiringRangeTarget}} | SCR_FiringRangeTargetClass = {{Link|enfusion://ScriptEditor/scripts/Game/FiringRange/SCR_FiringRangeTarget.c;1|SCR_FiringRangeTargetClass}} | SCR_FixedFOVInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Sights/SightsFOVInfo/SCR_FixedFOVInfo.c;1|SCR_FixedFOVInfo}} | SCR_FlagComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_FlagComponent.c;36|SCR_FlagComponent}} | SCR_FlagComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_FlagComponent.c;1|SCR_FlagComponentClass}} | SCR_FlammableHitZone = {{Link|enfusion://ScriptEditor/scripts/Game/HitZone/SCR_FlammableHitZone.c;15|SCR_FlammableHitZone}} | SCR_FlareAnimationComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Flares/SCR_FlareAnimationComponent.c;6|SCR_FlareAnimationComponent}} | SCR_FlareAnimationComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Flares/SCR_FlareAnimationComponent.c;1|SCR_FlareAnimationComponentClass}} | SCR_FlareEffectComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_FlareEffectComponent.c;14|SCR_FlareEffectComponent}} | SCR_FlareEffectComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_FlareEffectComponent.c;1|SCR_FlareEffectComponentClass}} | SCR_FlashlightComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_FlashlightComponent.c;19|SCR_FlashlightComponent}} | SCR_FlashlightComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_FlashlightComponent.c;14|SCR_FlashlightComponentClass}} | SCR_FlashlightToolbarAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ToolbarActions/SCR_FlashlightToolbarAction.c;1|SCR_FlashlightToolbarAction}} | SCR_FloatersFinderPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_FloatersFinderPlugin.c;2|SCR_FloatersFinderPlugin}} | SCR_FloatersFixerPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_FloatersFixerPlugin.c;3|SCR_FloatersFixerPlugin}} | SCR_FlushToilet = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_FlushToilet.c;2|SCR_FlushToilet}} | SCR_FocusedEditableEntityFilter = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/EditableEntityFilters/SCR_FocusedEditableEntityFilter.c;1|SCR_FocusedEditableEntityFilter}} | SCR_FocusHereContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_FocusHereContextAction.c;1|SCR_FocusHereContextAction}} | SCR_FocusManualCameraComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_FocusManualCameraComponent.c;4|SCR_FocusManualCameraComponent}} | SCR_FollowGroupCommand = {{Link|enfusion://ScriptEditor/scripts/Game/Commanding/Commands/SCR_FollowGroupCommand.c;2|SCR_FollowGroupCommand}} | SCR_ForceAspectRatioComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_ForceAspectRatioComponent.c;6|SCR_ForceAspectRatioComponent}} | SCR_ForceImpulseCallback = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/Callbacks/SCR_ForceImpulseCallback.c;1|SCR_ForceImpulseCallback}} | SCR_ForestGeneratorLine = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/ForestGenerator/SCR_ForestGeneratorLine.c;1|SCR_ForestGeneratorLine}} | SCR_ForestGeneratorOutlinePositionChecker = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/ForestGenerator/SCR_ForestGeneratorOutlinePositionChecker.c;1|SCR_ForestGeneratorOutlinePositionChecker}} | SCR_ForestGeneratorPoint = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/ForestGenerator/SCR_ForestGeneratorPoint.c;1|SCR_ForestGeneratorPoint}} | SCR_ForestGeneratorRectangle = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/ForestGenerator/SCR_ForestGeneratorRectangle.c;1|SCR_ForestGeneratorRectangle}} | SCR_ForestGeneratorTreeBase = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/ForestGenerator/ForestGeneratorObjects.c;36|SCR_ForestGeneratorTreeBase}} | SCR_ForestGeneratorTreeLevel = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/ForestGenerator/ForestGeneratorLevels.c;53|SCR_ForestGeneratorTreeLevel}} | SCR_FormatedUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_FormatedUIInfo.c;1|SCR_FormatedUIInfo}} | SCR_FormatHelper = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_FormatHelper.c;1|SCR_FormatHelper}} | SCR_FormatUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_FormatUIInfo.c;1|SCR_FormatUIInfo}} | SCR_FPSDiagnosticPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_FPSDiagnosticPlugin.c;2|SCR_FPSDiagnosticPlugin}} | SCR_FPSNetworkedStat = {{Link|enfusion://ScriptEditor/scripts/Game/Network/NetworkedStats/Stats/SCR_ServerFPSNetworkedStat.c;1|SCR_FPSNetworkedStat}} | SCR_FractalVariation = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_DestructionFractalComponent.c;1025|SCR_FractalVariation}} | SCR_FractalVariationTitle = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_DestructionFractalComponent.c;1004|SCR_FractalVariationTitle}} | SCR_FragmentationDamageEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/DamageEffects/DamageEffectSources/SCR_FragmentationDamageEffect.c;1|SCR_FragmentationDamageEffect}} | SCR_FragmentDebris = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_DestructionFractalComponent.c;1166|SCR_FragmentDebris}} | SCR_FragmentEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_FragmentEntity.c;8|SCR_FragmentEntity}} | SCR_FragmentEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_FragmentEntity.c;2|SCR_FragmentEntityClass}} | SCR_FragmentHierarchy = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_DestructionFractalComponent.c;1237|SCR_FragmentHierarchy}} | SCR_FragmentHierarchyTitle = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_DestructionFractalComponent.c;1136|SCR_FragmentHierarchyTitle}} | SCR_FragmentLinkage = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_DestructionFractalComponent.c;1440|SCR_FragmentLinkage}} | SCR_FragmentLinkageTitle = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_DestructionFractalComponent.c;1146|SCR_FragmentLinkageTitle}} | SCR_FreeForAllFaction = {{Link|enfusion://ScriptEditor/scripts/Game/Faction/SCR_FreeForAllFaction.c;2|SCR_FreeForAllFaction}} | SCR_FreeRespawnDiag = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/RequestHandling/Implementation/FreeSpawn/SCR_FreeSpawnRequestComponent.c;91|SCR_FreeRespawnDiag}} | SCR_FreeRoamBuildingBaseTriggerEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_FreeRoamBuildingBaseTriggerEntity.c;5|SCR_FreeRoamBuildingBaseTriggerEntity}} | SCR_FreeRoamBuildingBaseTriggerEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_FreeRoamBuildingBaseTriggerEntity.c;1|SCR_FreeRoamBuildingBaseTriggerEntityClass}} | SCR_FreeRoamBuildingClientTriggerEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_FreeRoamBuildingClientTriggerEntity.c;6|SCR_FreeRoamBuildingClientTriggerEntity}} | SCR_FreeRoamBuildingClientTriggerEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_FreeRoamBuildingClientTriggerEntity.c;1|SCR_FreeRoamBuildingClientTriggerEntityClass}} | SCR_FreeSpawnData = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/RequestHandling/Implementation/FreeSpawn/SCR_FreeSpawnData.c;2|SCR_FreeSpawnData}} | SCR_FreeSpawnHandlerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/RequestHandling/Implementation/FreeSpawn/SCR_FreeSpawnHandlerComponent.c;6|SCR_FreeSpawnHandlerComponent}} | SCR_FreeSpawnHandlerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/RequestHandling/Implementation/FreeSpawn/SCR_FreeSpawnHandlerComponent.c;1|SCR_FreeSpawnHandlerComponentClass}} | SCR_FreeSpawnRequestComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/RequestHandling/Implementation/FreeSpawn/SCR_FreeSpawnRequestComponent.c;6|SCR_FreeSpawnRequestComponent}} | SCR_FreeSpawnRequestComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/RequestHandling/Implementation/FreeSpawn/SCR_FreeSpawnRequestComponent.c;1|SCR_FreeSpawnRequestComponentClass}} | SCR_FrequencyTooltipDetail = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_FrequencyTooltipDetail.c;1|SCR_FrequencyTooltipDetail}} | SCR_FriendlyEditableEntityFilter = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/EditableEntityFilters/SCR_FriendlyEditableEntityFilter.c;1|SCR_FriendlyEditableEntityFilter}} | SCR_FriendlyFireKillfeedTypeEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_FriendlyFireKillfeedTypeEditorAttribute.c;1|SCR_FriendlyFireKillfeedTypeEditorAttribute}} | SCR_FriendlyPlayerEditableEntityFilter = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/EditableEntityFilters/SCR_FriendlyPlayerEditableEntityFilter.c;1|SCR_FriendlyPlayerEditableEntityFilter}} | SCR_FuelConsumptionComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Fuel/SCR_FuelConsumptionComponent.c;14|SCR_FuelConsumptionComponent}} | SCR_FuelConsumptionComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Fuel/SCR_FuelConsumptionComponent.c;1|SCR_FuelConsumptionComponentClass}} | SCR_FuelEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_FuelEditorAttribute.c;4|SCR_FuelEditorAttribute}} | SCR_FuelEntityContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_FuelEntityContextAction.c;2|SCR_FuelEntityContextAction}} | SCR_FuelHitZone = {{Link|enfusion://ScriptEditor/scripts/Game/HitZone/SCR_FuelHitZone.c;1|SCR_FuelHitZone}} | SCR_FuelInventoryItemComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_FuelInventoryItemComponent.c;6|SCR_FuelInventoryItemComponent}} | SCR_FuelInventoryItemComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_FuelInventoryItemComponent.c;1|SCR_FuelInventoryItemComponentClass}} | SCR_FuelItemHintsUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_FuelItemHintsUIInfo.c;1|SCR_FuelItemHintsUIInfo}} | SCR_FuelManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Fuel/SCR_FuelManagerComponent.c;6|SCR_FuelManagerComponent}} | SCR_FuelManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Fuel/SCR_FuelManagerComponent.c;1|SCR_FuelManagerComponentClass}} | SCR_FuelManagerComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/Vehicle/SCR_FuelManagerComponentSerializer.c;7|SCR_FuelManagerComponentSerializer}} | SCR_FuelNode = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Fuel/SCR_FuelNode.c;33|SCR_FuelNode}} | SCR_FuelNozzle = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/SCR_FuelNozzle.c;6|SCR_FuelNozzle}} | SCR_FuelNozzleClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/SCR_FuelNozzle.c;1|SCR_FuelNozzleClass}} | SCR_FuelNozzleHolderComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Fuel/SCR_FuelNozzleHolderComponent.c;6|SCR_FuelNozzleHolderComponent}} | SCR_FuelNozzleHolderComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Fuel/SCR_FuelNozzleHolderComponent.c;1|SCR_FuelNozzleHolderComponentClass}} | SCR_FuelProviderEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_FuelProviderEditorAttribute.c;4|SCR_FuelProviderEditorAttribute}} | SCR_FuelSupportStationComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SupportStation/SCR_FuelSupportStationComponent.c;35|SCR_FuelSupportStationComponent}} | SCR_FuelSupportStationComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SupportStation/SCR_FuelSupportStationComponent.c;1|SCR_FuelSupportStationComponentClass}} | SCR_FuelTankInfo = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/VehicleInfo/SCR_FuelTankInfo.c;4|SCR_FuelTankInfo}} | SCR_FuelTooltipDetail = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_FuelTooltipDetail.c;1|SCR_FuelTooltipDetail}} | SCR_FullBioIdentityTooltipDetail = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_FullBioIdentityTooltipDetail.c;1|SCR_FullBioIdentityTooltipDetail}} | SCR_GadgetComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_GadgetComponent.c;54|SCR_GadgetComponent}} | SCR_GadgetComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_GadgetComponent.c;1|SCR_GadgetComponentClass}} | SCR_GadgetInvokersInitState = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_GadgetManagerComponent.c;2|SCR_GadgetInvokersInitState}} | SCR_GadgetManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_GadgetManagerComponent.c;139|SCR_GadgetManagerComponent}} | SCR_GadgetManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_GadgetManagerComponent.c;126|SCR_GadgetManagerComponentClass}} | SCR_GadgetManagerComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/Character/SCR_GadgetManagerComponentSerializer.c;1|SCR_GadgetManagerComponentSerializer}} | SCR_GadgetSelectionCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Character/SCR_GadgetSelectionCondition.c;1|SCR_GadgetSelectionCondition}} | SCR_GalleryComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/GalleryView/SCR_GalleryComponent.c;1|SCR_GalleryComponent}} | SCR_GameCoreBase = {{Link|enfusion://ScriptEditor/scripts/Game/GameCore/SCR_GameCoreBase.c;43|SCR_GameCoreBase}} | SCR_GameCoresManager = {{Link|enfusion://ScriptEditor/scripts/Game/GameCore/SCR_GameCoresManager.c;7|SCR_GameCoresManager}} | SCR_GameEndMusic = {{Link|enfusion://ScriptEditor/scripts/Game/Music/SCR_GameEndMusic.c;1|SCR_GameEndMusic}} | SCR_GameErrorMessage = {{Link|enfusion://ScriptEditor/scripts/Game/Utilities/SCR_GameErrorMessage.c;3|SCR_GameErrorMessage}} | SCR_GameGameModeStateComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_GameGameModeStateComponent.c;6|SCR_GameGameModeStateComponent}} | SCR_GameGameModeStateComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_GameGameModeStateComponent.c;1|SCR_GameGameModeStateComponentClass}} | SCR_GameLogHelper = {{Link|enfusion://ScriptEditor/scripts/Game/Utilities/SCR_GameLogHelper.c;1|SCR_GameLogHelper}} | SCR_GameMasterMetaData = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/States/SCR_GameMasterMetaSerializer.c;2|SCR_GameMasterMetaData}} | SCR_GameMasterMetaDataLoader = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/States/SCR_GameMasterMetaSerializer.c;52|SCR_GameMasterMetaDataLoader}} | SCR_GameMasterMetaDataSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/States/SCR_GameMasterMetaSerializer.c;6|SCR_GameMasterMetaDataSerializer}} | SCR_GameModeCampaign = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_GameModeCampaign.c;7|SCR_GameModeCampaign}} | SCR_GameModeCampaignClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_GameModeCampaign.c;2|SCR_GameModeCampaignClass}} | SCR_GameModeCampaignSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Entities/SCR_GameModeCampaignSerializer.c;1|SCR_GameModeCampaignSerializer}} | SCR_GameModeCleanSweep = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_GameModeCleanSweep.c;5|SCR_GameModeCleanSweep}} | SCR_GameModeCleanSweepClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_GameModeCleanSweep.c;1|SCR_GameModeCleanSweepClass}} | SCR_GameModeCombatOpsManager = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_GameModeCombatOpsManager.c;6|SCR_GameModeCombatOpsManager}} | SCR_GameModeCombatOpsManagerClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_GameModeCombatOpsManager.c;1|SCR_GameModeCombatOpsManagerClass}} | SCR_GameModeEditor = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_GameModeEditor.c;7|SCR_GameModeEditor}} | SCR_GameModeEditorClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_GameModeEditor.c;1|SCR_GameModeEditorClass}} | SCR_GameModeEndData = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_GameModeEndData.c;4|SCR_GameModeEndData}} | SCR_GameModeHealthSettings = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Misc/SCR_GameModeHealthSettings.c;5|SCR_GameModeHealthSettings}} | SCR_GameModeHealthSettingsClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Misc/SCR_GameModeHealthSettings.c;1|SCR_GameModeHealthSettingsClass}} | SCR_GameModeHealthSettingsSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/GameMode/SCR_GameModeHealthSettingsSerializer.c;1|SCR_GameModeHealthSettingsSerializer}} | SCR_GameModeHUDComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_GameModeHUDComponent.c;8|SCR_GameModeHUDComponent}} | SCR_GameModeHUDComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_GameModeHUDComponent.c;1|SCR_GameModeHUDComponentClass}} | SCR_GameModeLastStand = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_GameModeLastStand.c;7|SCR_GameModeLastStand}} | SCR_GameModeLastStandClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_GameModeLastStand.c;2|SCR_GameModeLastStandClass}} | SCR_GameModeSectorControl = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_GameModeSectorControl.c;9|SCR_GameModeSectorControl}} | SCR_GameModeSectorControlClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_GameModeSectorControl.c;2|SCR_GameModeSectorControlClass}} | SCR_GameModeSetupPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/GameModeSetup/SCR_GameModeSetupPlugin.c;2|SCR_GameModeSetupPlugin}} | SCR_GameModeSetupPluginError = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/GameModeSetup/SCR_GameModeSetupPlugin.c;510|SCR_GameModeSetupPluginError}} | SCR_GameModeSetupPluginGeneration = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/GameModeSetup/SCR_GameModeSetupPlugin.c;418|SCR_GameModeSetupPluginGeneration}} | SCR_GameModeSetupPluginGenerationResults = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/GameModeSetup/SCR_GameModeSetupPlugin.c;386|SCR_GameModeSetupPluginGenerationResults}} | SCR_GameModeSetupPluginMissionHeader = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/GameModeSetup/SCR_GameModeSetupPlugin.c;454|SCR_GameModeSetupPluginMissionHeader}} | SCR_GameModeSetupPluginOutro = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/GameModeSetup/SCR_GameModeSetupPlugin.c;490|SCR_GameModeSetupPluginOutro}} | SCR_GameModeSetupPluginResults = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/GameModeSetup/SCR_GameModeSetupPlugin.c;358|SCR_GameModeSetupPluginResults}} | SCR_GameModeSetupPluginValidation = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/GameModeSetup/SCR_GameModeSetupPlugin.c;322|SCR_GameModeSetupPluginValidation}} | SCR_GameModeSFManager = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/GameMode/SCR_GameModeSFManager.c;6|SCR_GameModeSFManager}} | SCR_GameModeSFManagerClass = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/GameMode/SCR_GameModeSFManager.c;1|SCR_GameModeSFManagerClass}} | SCR_GameOverFactionsEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_GameOverFactionsEditorAttribute.c;1|SCR_GameOverFactionsEditorAttribute}} | SCR_GameOverScreenCombatControlPatrolUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/GameOverScreen/SCR_GameOverScreenCombatControlPatrolUIComponent.c;1|SCR_GameOverScreenCombatControlPatrolUIComponent}} | SCR_GameOverScreenConfig = {{Link|enfusion://ScriptEditor/scripts/Game/GameOverScreen/SCR_GameOverScreenConfig.c;1|SCR_GameOverScreenConfig}} | SCR_GameOverScreenContentUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/GameOverScreen/SCR_GameOverScreenContentUIComponent.c;1|SCR_GameOverScreenContentUIComponent}} | SCR_GameOverScreenManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c;7|SCR_GameOverScreenManagerComponent}} | SCR_GameOverScreenManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c;2|SCR_GameOverScreenManagerComponentClass}} | SCR_GameOverScreenUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/GameOverScreen/SCR_GameOverScreenUIComponent.c;1|SCR_GameOverScreenUIComponent}} | SCR_GameOverScreenUIContentData = {{Link|enfusion://ScriptEditor/scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c;572|SCR_GameOverScreenUIContentData}} | SCR_GameOverTypeAttributeDynamicDescription = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/DynamicDescriptions/SCR_GameOverTypeAttributeDynamicDescription.c;4|SCR_GameOverTypeAttributeDynamicDescription}} | SCR_GameOverTypeAttributeUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Attributes/SCR_GameOverTypeAttributeUIComponent.c;1|SCR_GameOverTypeAttributeUIComponent}} | SCR_GameOverTypeEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_GameOverTypeEditorAttribute.c;1|SCR_GameOverTypeEditorAttribute}} | SCR_GamepadRemovalUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/Dialogs/SCR_GamepadRemovalUI.c;3|SCR_GamepadRemovalUI}} | SCR_GamepadScrollComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SCR_GamepadScroll.c;10|SCR_GamepadScrollComponent}} | SCR_GameplaySettings = {{Link|enfusion://ScriptEditor/scripts/Game/Global/SCR_GameplaySettings.c;9|SCR_GameplaySettings}} | SCR_GameplaySettingsSubMenu = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SettingsMenu/SCR_GameplaySettingsSubMenu.c;5|SCR_GameplaySettingsSubMenu}} | SCR_GameVersion = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/StatsPanel/SCR_GameVersion.c;1|SCR_GameVersion}} | SCR_GarbageSystem = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/SCR_GarbageSystem.c;2|SCR_GarbageSystem}} | SCR_GearboxHitZone = {{Link|enfusion://ScriptEditor/scripts/Game/HitZone/SCR_GearboxHitZone.c;1|SCR_GearboxHitZone}} | SCR_GearboxHitZoneInfo = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/VehicleInfo/SCR_GearboxHitZoneInfo.c;1|SCR_GearboxHitZoneInfo}} | SCR_GearShiftInfo = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/VehicleInfo/SCR_GearShiftInfo.c;4|SCR_GearShiftInfo}} | SCR_GenderSpecificIdentityBios = {{Link|enfusion://ScriptEditor/scripts/Game/Identity/Containers/SCR_CharacterIdentityBioGroupConfig.c;343|SCR_GenderSpecificIdentityBios}} | SCR_GeneralContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_GeneralContextAction.c;2|SCR_GeneralContextAction}} | SCR_GeneralHintStorage = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Hints/SCR_GeneralHintsConfig.c;1|SCR_GeneralHintStorage}} | SCR_GenerateControlsSchemeGamepadLabel = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/SCR_GenerateControlsSchemePlugin.c;294|SCR_GenerateControlsSchemeGamepadLabel}} | SCR_GenerateControlsSchemePlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/SCR_GenerateControlsSchemePlugin.c;2|SCR_GenerateControlsSchemePlugin}} | SCR_GenerateLayoutClassPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/SCR_GenerateLayoutClassPlugin.c;4|SCR_GenerateLayoutClassPlugin}} | SCR_GenerateWindowsPrefabsTool = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_GenerateWindowsPrefabsTool.c;12|SCR_GenerateWindowsPrefabsTool}} | SCR_GeneratorBaseEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/SCR_GeneratorBaseEntity.c;17|SCR_GeneratorBaseEntity}} | SCR_GeneratorBaseEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/SCR_GeneratorBaseEntity.c;1|SCR_GeneratorBaseEntityClass}} | SCR_GenericBoxEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/SCR_GenericBoxEntity.c;9|SCR_GenericBoxEntity}} | SCR_GenericBoxEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/SCR_GenericBoxEntity.c;1|SCR_GenericBoxEntityClass}} | SCR_GenericCameraShakeProgress = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Shake/SCR_GenericCameraShakeProgress.c;5|SCR_GenericCameraShakeProgress}} | SCR_GenericPreviewEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Preview/SCR_GenericPreviewEntity.c;8|SCR_GenericPreviewEntity}} | SCR_GenericPreviewEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Preview/SCR_GenericPreviewEntity.c;1|SCR_GenericPreviewEntityClass}} | SCR_GeoExporter = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_ExportGeoJSONTool.c;38|SCR_GeoExporter}} | SCR_GeoJSONExporter = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_ExportGeoJSONTool.c;258|SCR_GeoJSONExporter}} | SCR_GeoPointData = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_ExportGeoJSONTool.c;2|SCR_GeoPointData}} | SCR_GeoProperty = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_ExportGeoJSONTool.c;24|SCR_GeoProperty}} | SCR_GeoSVGExporter = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_ExportGeoJSONTool.c;120|SCR_GeoSVGExporter}} | SCR_GestureGroupCommand = {{Link|enfusion://ScriptEditor/scripts/Game/Commanding/Commands/SCR_GestureGroupCommand.c;2|SCR_GestureGroupCommand}} | SCR_GetInContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_GetInContextAction.c;1|SCR_GetInContextAction}} | SCR_GetINtoSelectedVehicleGroupCommand = {{Link|enfusion://ScriptEditor/scripts/Game/Commanding/Commands/SCR_GetIntoSelectedVehicleGroupCommand.c;2|SCR_GetINtoSelectedVehicleGroupCommand}} | SCR_GetInUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_GetInUserAction.c;1|SCR_GetInUserAction}} | SCR_GetLinkedStorageChildren = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/LinkedStorages/SCR_GetLinkedStorageChildren.c;2|SCR_GetLinkedStorageChildren}} | SCR_GetOutAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_GetOutUserAction.c;1|SCR_GetOutAction}} | SCR_GetOutContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_GetOutContextAction.c;1|SCR_GetOutContextAction}} | SCR_GetOutGroupCommand = {{Link|enfusion://ScriptEditor/scripts/Game/Commanding/Commands/SCR_GetOutGroupCommand.c;1|SCR_GetOutGroupCommand}} | SCR_GetRoomsIds = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowserMenuUI.c;2783|SCR_GetRoomsIds}} | SCR_Global = {{Link|enfusion://ScriptEditor/scripts/Game/Global/Functions.c;6|SCR_Global}} | SCR_GlobalAttributesToolbarAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ToolbarActions/SCR_GlobalAttributesToolbarAction.c;1|SCR_GlobalAttributesToolbarAction}} | SCR_GlobalCharBleedingEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_GlobalCharBleedingEditorAttribute.c;1|SCR_GlobalCharBleedingEditorAttribute}} | SCR_GlobalCharRegenEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_GlobalCharRegenEditorAttribute.c;1|SCR_GlobalCharRegenEditorAttribute}} | SCR_GlobalDeployableRadioSettingEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_GlobalDeployableRadioSettingEditorAttribute.c;1|SCR_GlobalDeployableRadioSettingEditorAttribute}} | SCR_GlobalFuelConsumptionScaleEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_GlobalFuelConsumptionScaleEditorAttribute.c;4|SCR_GlobalFuelConsumptionScaleEditorAttribute}} | SCR_GlobalUnconsciousnessEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_GlobalUnconsciousnessEditorAttribute.c;1|SCR_GlobalUnconsciousnessEditorAttribute}} | SCR_GlobalVariableTrack = {{Link|enfusion://ScriptEditor/scripts/Game/Cinematics/SCR_GlobalVariableCinematicTrack.c;1|SCR_GlobalVariableTrack}} | SCR_GMMenu = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/GMMenu/SCR_GMMenu.c;2|SCR_GMMenu}} | SCR_GMMenuConfiguration = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SCR_GMMenuConfiguration.c;1|SCR_GMMenuConfiguration}} | SCR_GMMenuTileComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/MainMenu/SCR_GMMenuTileComponent.c;1|SCR_GMMenuTileComponent}} | SCR_GMSaveDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/ScenarioMenu/SCR_GMSaveDialog.c;1|SCR_GMSaveDialog}} | SCR_GraphLinesData = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_GraphLinesData.c;2|SCR_GraphLinesData}} | SCR_GridPropsConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapPropsConfig.c;82|SCR_GridPropsConfig}} | SCR_GridSpawnerEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/GridSpawnerEntity.c;19|SCR_GridSpawnerEntity}} | SCR_GridSpawnerEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/GridSpawnerEntity.c;3|SCR_GridSpawnerEntityClass}} | SCR_GroupButton = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DeployMenu/SCR_GroupRequestUIComponent.c;550|SCR_GroupButton}} | SCR_GroupEditableEntityTextureUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/EditableEntities/SCR_GroupEditableEntityUIComponent.c;88|SCR_GroupEditableEntityTextureUIComponent}} | SCR_GroupEditableEntityUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/EditableEntities/SCR_GroupEditableEntityUIComponent.c;1|SCR_GroupEditableEntityUIComponent}} | SCR_GroupFlagImageComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Groups/SCR_GroupFlagImageComponent.c;1|SCR_GroupFlagImageComponent}} | SCR_GroupFlagSelectionMenu = {{Link|enfusion://ScriptEditor/scripts/Game/Groups/SCR_GroupFlagSelectionMenu.c;1|SCR_GroupFlagSelectionMenu}} | SCR_GroupHelperUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SCR_GroupHelperUI.c;1|SCR_GroupHelperUI}} | SCR_GroupIdentityComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GroupIdentity/SCR_GroupIdentityComponent.c;9|SCR_GroupIdentityComponent}} | SCR_GroupIdentityComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GroupIdentity/SCR_GroupIdentityComponent.c;4|SCR_GroupIdentityComponentClass}} | SCR_GroupIdentityCore = {{Link|enfusion://ScriptEditor/scripts/Game/GroupIdentity/SCR_GroupIdentityCore.c;1|SCR_GroupIdentityCore}} | SCR_GroupIdentityRule = {{Link|enfusion://ScriptEditor/scripts/Game/GroupIdentity/SCR_MilitarySymbolRuleSet.c;208|SCR_GroupIdentityRule}} | SCR_GroupIdentityRuleAmplifier = {{Link|enfusion://ScriptEditor/scripts/Game/GroupIdentity/SCR_MilitarySymbolRuleSet.c;374|SCR_GroupIdentityRuleAmplifier}} | SCR_GroupIdentityRuleAmplifierCount = {{Link|enfusion://ScriptEditor/scripts/Game/GroupIdentity/SCR_MilitarySymbolRuleSet.c;390|SCR_GroupIdentityRuleAmplifierCount}} | SCR_GroupIdentityRuleData = {{Link|enfusion://ScriptEditor/scripts/Game/GroupIdentity/SCR_MilitarySymbolRuleSet.c;77|SCR_GroupIdentityRuleData}} | SCR_GroupIdentityRuleDimension = {{Link|enfusion://ScriptEditor/scripts/Game/GroupIdentity/SCR_MilitarySymbolRuleSet.c;261|SCR_GroupIdentityRuleDimension}} | SCR_GroupIdentityRuleIcon = {{Link|enfusion://ScriptEditor/scripts/Game/GroupIdentity/SCR_MilitarySymbolRuleSet.c;280|SCR_GroupIdentityRuleIcon}} | SCR_GroupIdentityRuleIconLabel = {{Link|enfusion://ScriptEditor/scripts/Game/GroupIdentity/SCR_MilitarySymbolRuleSet.c;330|SCR_GroupIdentityRuleIconLabel}} | SCR_GroupIdentityRuleIconVehicle = {{Link|enfusion://ScriptEditor/scripts/Game/GroupIdentity/SCR_MilitarySymbolRuleSet.c;360|SCR_GroupIdentityRuleIconVehicle}} | SCR_GroupIdentityRuleIconWeapon = {{Link|enfusion://ScriptEditor/scripts/Game/GroupIdentity/SCR_MilitarySymbolRuleSet.c;296|SCR_GroupIdentityRuleIconWeapon}} | SCR_GroupIdentityRuleIdentity = {{Link|enfusion://ScriptEditor/scripts/Game/GroupIdentity/SCR_MilitarySymbolRuleSet.c;231|SCR_GroupIdentityRuleIdentity}} | SCR_GroupIdentityRuleIdentityFaction = {{Link|enfusion://ScriptEditor/scripts/Game/GroupIdentity/SCR_MilitarySymbolRuleSet.c;247|SCR_GroupIdentityRuleIdentityFaction}} | SCR_GroupInviteStickyNotificationUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/Notification/SCR_GroupInviteStickyNotificationUIComponent.c;1|SCR_GroupInviteStickyNotificationUIComponent}} | SCR_GroupLeaderVolunteerDialogUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SCR_GroupLeaderVolunteerDialogUI.c;1|SCR_GroupLeaderVolunteerDialogUI}} | SCR_GroupMenu = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_GroupMenu.c;1|SCR_GroupMenu}} | SCR_GroupNameConfig = {{Link|enfusion://ScriptEditor/scripts/Game/GroupIdentity/SCR_GroupNameConfig.c;1|SCR_GroupNameConfig}} | SCR_GroupNameConfigEntry = {{Link|enfusion://ScriptEditor/scripts/Game/GroupIdentity/SCR_GroupNameConfig.c;48|SCR_GroupNameConfigEntry}} | SCR_GroupOwnerTooltipDetail = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_GroupOwnerTooltipDetail.c;1|SCR_GroupOwnerTooltipDetail}} | SCR_GroupPlayerList = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DeployMenu/SCR_FactionPlayerList.c;239|SCR_GroupPlayerList}} | SCR_GroupPreset = {{Link|enfusion://ScriptEditor/scripts/Game/Groups/SCR_GroupPreset.c;1|SCR_GroupPreset}} | SCR_GroupRequestUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DeployMenu/SCR_GroupRequestUIComponent.c;3|SCR_GroupRequestUIComponent}} | SCR_GroupRolePresetConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Groups/SCR_GroupRolePresetConfig.c;1|SCR_GroupRolePresetConfig}} | SCR_GroupRoleRelevance = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Configs/SCR_GroupTaskRelevanceConfig.c;82|SCR_GroupRoleRelevance}} | SCR_GroupSizeTooltipDetail = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_GroupSizeTooltipDetail.c;1|SCR_GroupSizeTooltipDetail}} | SCR_GroupsManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Groups/SCR_GroupsManagerComponent.c;8|SCR_GroupsManagerComponent}} | SCR_GroupsManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Groups/SCR_GroupsManagerComponent.c;3|SCR_GroupsManagerComponentClass}} | SCR_GroupSubMenu = {{Link|enfusion://ScriptEditor/scripts/Game/Groups/SCR_GroupSubMenu.c;1|SCR_GroupSubMenu}} | SCR_GroupSubMenuBase = {{Link|enfusion://ScriptEditor/scripts/Game/Groups/SCR_GroupSubMenuBase.c;1|SCR_GroupSubMenuBase}} | SCR_GroupSubMenuPlayerlist = {{Link|enfusion://ScriptEditor/scripts/Game/Groups/SCR_GroupSubMenuPlayerlist.c;1|SCR_GroupSubMenuPlayerlist}} | SCR_GroupTaskManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_GroupTaskManagerComponent.c;14|SCR_GroupTaskManagerComponent}} | SCR_GroupTaskManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_GroupTaskManagerComponent.c;9|SCR_GroupTaskManagerComponentClass}} | SCR_GroupTaskRelevance = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Configs/SCR_GroupTaskRelevanceConfig.c;25|SCR_GroupTaskRelevance}} | SCR_GroupTaskRelevanceConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Configs/SCR_GroupTaskRelevanceConfig.c;1|SCR_GroupTaskRelevanceConfig}} | SCR_GroupTileButton = {{Link|enfusion://ScriptEditor/scripts/Game/Groups/SCR_GroupTileButton.c;107|SCR_GroupTileButton}} | SCR_GroupToolbarItemEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Toolbar/Items/SCR_GroupToolbarItemEditorUIComponent.c;1|SCR_GroupToolbarItemEditorUIComponent}} | SCR_GroupWeaponEntry = {{Link|enfusion://ScriptEditor/scripts/Game/ItemSelection/SCR_GroupWeaponEntry.c;4|SCR_GroupWeaponEntry}} | SCR_GunnersTooltipDetail = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_GunnersTooltipDetail.c;1|SCR_GunnersTooltipDetail}} | SCR_HandBrakeInfo = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/VehicleInfo/SCR_HandBrakeInfo.c;1|SCR_HandBrakeInfo}} | SCR_HandSlotPickUpItemAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_HandSlotPickUpItemAction.c;1|SCR_HandSlotPickUpItemAction}} | SCR_HandSlotStorageComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_HandSlotStorageComponent.c;6|SCR_HandSlotStorageComponent}} | SCR_HandSlotStorageComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_HandSlotStorageComponent.c;1|SCR_HandSlotStorageComponentClass}} | SCR_HandSlotStorageSlot = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_HandSlotStorageSlot.c;1|SCR_HandSlotStorageSlot}} | SCR_HasFactionEditableEntityFilter = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/EditableEntityFilters/SCR_HasFactionEditableEntityFilter.c;1|SCR_HasFactionEditableEntityFilter}} | SCR_HasMultipleMuzzles = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Weapon/SCR_HasMultipleMuzzles.c;2|SCR_HasMultipleMuzzles}} | SCR_HasMultipleWeaponsCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Weapon/SCR_HasMultipleWeaponsCondition.c;1|SCR_HasMultipleWeaponsCondition}} | SCR_HasWoundTypeCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Character/Health/SCR_HasWoundTypeCondition.c;1|SCR_HasWoundTypeCondition}} | SCR_HeaderNavigationWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/MainMenu/SCR_HeaderNavigationWidgets.c;3|SCR_HeaderNavigationWidgets}} | SCR_HeadgearInventoryItemComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/Items/SCR_HeadgearInventoryItemComponent.c;53|SCR_HeadgearInventoryItemComponent}} | SCR_HeadgearInventoryItemComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/Items/SCR_HeadgearInventoryItemComponent.c;1|SCR_HeadgearInventoryItemComponentClass}} | SCR_HeadgearPhysicsObserverAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_HeadgearPhysicsObserverAttribute.c;1|SCR_HeadgearPhysicsObserverAttribute}} | SCR_HeadTrackingSettings = {{Link|enfusion://ScriptEditor/scripts/Game/Global/SCR_ControllerSettings.c;53|SCR_HeadTrackingSettings}} | SCR_HealEntitiesContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_HealEntitiesContextAction.c;2|SCR_HealEntitiesContextAction}} | SCR_HealingUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_HealingUserAction.c;1|SCR_HealingUserAction}} | SCR_HealSupportStationAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SupportStations/SCR_HealSupportStationAction.c;1|SCR_HealSupportStationAction}} | SCR_HealSupportStationComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SupportStation/SCR_HealSupportStationComponent.c;21|SCR_HealSupportStationComponent}} | SCR_HealSupportStationComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SupportStation/SCR_HealSupportStationComponent.c;1|SCR_HealSupportStationComponentClass}} | SCR_HealthAndBurn = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/SCR_HealthAndBurn.c;1|SCR_HealthAndBurn}} | SCR_HealthCharacterEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_HealthCharacterEditorAttribute.c;2|SCR_HealthCharacterEditorAttribute}} | SCR_HealthEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_HealthEditorAttribute.c;4|SCR_HealthEditorAttribute}} | SCR_HealthOtherEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_HealthOtherEditorAttribute.c;2|SCR_HealthOtherEditorAttribute}} | SCR_HealthTooltipDetail = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_HealthTooltipDetail.c;1|SCR_HealthTooltipDetail}} | SCR_HealthVehicleEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_HealthVehicleEditorAttribute.c;3|SCR_HealthVehicleEditorAttribute}} | SCR_HeatMap_Autotest = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/SCR_FPS_Autotest.c;42|SCR_HeatMap_Autotest}} | SCR_HeatMap_AutotestClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/SCR_FPS_Autotest.c;2|SCR_HeatMap_AutotestClass}} | SCR_HeatmapHelper = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/Helpers/SCR_HeatmapHelper.c;1|SCR_HeatmapHelper}} | SCR_HeldItemAvailableActionContext = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/SCR_HeldItemAvailableActionContext.c;1|SCR_HeldItemAvailableActionContext}} | SCR_HelicopterAutohoverCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Vehicle/SCR_HelicopterAutohoverCondition.c;3|SCR_HelicopterAutohoverCondition}} | SCR_HelicopterCinematicFlyComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_HelicopterCinematicFlyComponent.c;6|SCR_HelicopterCinematicFlyComponent}} | SCR_HelicopterCinematicFlyComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_HelicopterCinematicFlyComponent.c;1|SCR_HelicopterCinematicFlyComponentClass}} | SCR_HelicopterCollimatorSightComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Sights/SCR_HelicopterCollimatorSightComponent.c;6|SCR_HelicopterCollimatorSightComponent}} | SCR_HelicopterCollimatorSightComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Sights/SCR_HelicopterCollimatorSightComponent.c;1|SCR_HelicopterCollimatorSightComponentClass}} | SCR_HelicopterControllerComponent = {{Link|enfusion://ScriptEditor/scripts/GameCode/Vehicle/SCR_HelicopterControllerComponent.c;9|SCR_HelicopterControllerComponent}} | SCR_HelicopterControllerComponentClass = {{Link|enfusion://ScriptEditor/scripts/GameCode/Vehicle/SCR_HelicopterControllerComponent.c;1|SCR_HelicopterControllerComponentClass}} | SCR_HelicopterDamageManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Damage/SCR_HelicopterDamageManagerComponent.c;5|SCR_HelicopterDamageManagerComponent}} | SCR_HelicopterDamageManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Damage/SCR_HelicopterDamageManagerComponent.c;1|SCR_HelicopterDamageManagerComponentClass}} | SCR_HelicopterEffectManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_BaseEffectManagerComponent.c;216|SCR_HelicopterEffectManagerComponent}} | SCR_HelicopterEffectManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_BaseEffectManagerComponent.c;210|SCR_HelicopterEffectManagerComponentClass}} | SCR_HelicopterEngineAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_HelicopterEngineAction.c;1|SCR_HelicopterEngineAction}} | SCR_HelicopterHoverAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_HelicopterHoverAction.c;1|SCR_HelicopterHoverAction}} | SCR_HelicopterSoundComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/VehicleSoundComponent/SCR_HelicopterSoundComponent.c;6|SCR_HelicopterSoundComponent}} | SCR_HelicopterSoundComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/VehicleSoundComponent/SCR_HelicopterSoundComponent.c;1|SCR_HelicopterSoundComponentClass}} | SCR_HelicopterWheelBrakesCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Vehicle/SCR_HelicopterWheelBrakesCondition.c;3|SCR_HelicopterWheelBrakesCondition}} | SCR_HideEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_HideEditorUIComponent.c;3|SCR_HideEditorUIComponent}} | SCR_HideHUDManualCameraComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_HideHUDManualCameraComponent.c;4|SCR_HideHUDManualCameraComponent}} | SCR_HideSelectionContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/Placeholder/SCR_HideSelectionContextAction.c;1|SCR_HideSelectionContextAction}} | SCR_HideWidgetPlatformBased = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/MainMenu/SCR_HideWidgetPlatformBased.c;16|SCR_HideWidgetPlatformBased}} | SCR_HighlightedEditableEntityFilter = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/EditableEntityFilters/SCR_HighlightedEditableEntityFilter.c;1|SCR_HighlightedEditableEntityFilter}} | SCR_HighlightedEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_HighlightedEditorComponent.c;11|SCR_HighlightedEditorComponent}} | SCR_HighlightedEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_HighlightedEditorComponent.c;1|SCR_HighlightedEditorComponentClass}} | SCR_HighlightedEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_HighlightedEditorUIComponent.c;3|SCR_HighlightedEditorUIComponent}} | SCR_HighlightVisual = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_HighlightedEditorUIComponent.c;154|SCR_HighlightVisual}} | SCR_HillPropsConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapPropsConfig.c;433|SCR_HillPropsConfig}} | SCR_HintConditionComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Hints/SCR_HintConditionComponent.c;24|SCR_HintConditionComponent}} | SCR_HintConditionComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Hints/SCR_HintConditionComponent.c;1|SCR_HintConditionComponentClass}} | SCR_HintConditionList = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Hints/SCR_HintConditionList.c;1|SCR_HintConditionList}} | SCR_HintEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_HintEditorComponent.c;16|SCR_HintEditorComponent}} | SCR_HintEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_HintEditorComponent.c;1|SCR_HintEditorComponentClass}} | SCR_HintEntry = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Hints/SCR_GeneralHintsConfig.c;20|SCR_HintEntry}} | SCR_HintInfoDisplay = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_HintInfoDisplay.c;2|SCR_HintInfoDisplay}} | SCR_HintManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Hints/SCR_HintManagerComponent.c;33|SCR_HintManagerComponent}} | SCR_HintManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Hints/SCR_HintManagerComponent.c;4|SCR_HintManagerComponentClass}} | SCR_HintSequenceComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Hints/SCR_HintSequenceComponent.c;15|SCR_HintSequenceComponent}} | SCR_HintSequenceComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Hints/SCR_HintSequenceComponent.c;1|SCR_HintSequenceComponentClass}} | SCR_HintSequenceList = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Hints/SCR_HintSequenceList.c;1|SCR_HintSequenceList}} | SCR_HintSequenceToolbarAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ToolbarActions/SCR_HintSequenceToolbarAction.c;1|SCR_HintSequenceToolbarAction}} | SCR_HintSettings = {{Link|enfusion://ScriptEditor/scripts/Game/Global/SCR_GameplaySettings.c;113|SCR_HintSettings}} | SCR_HintUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_HintUIComponent.c;1|SCR_HintUIComponent}} | SCR_HintUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_HintUIInfo.c;1|SCR_HintUIInfo}} | SCR_HitInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_HitInfo.c;2|SCR_HitInfo}} | SCR_HitZone = {{Link|enfusion://ScriptEditor/scripts/Game/HitZone/SCR_HitZone.c;1|SCR_HitZone}} | SCR_HitZoneGroupName = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/SCR_HitZoneGroupNameHolder.c;27|SCR_HitZoneGroupName}} | SCR_HitZoneGroupNameHolder = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/SCR_HitZoneGroupNameHolder.c;2|SCR_HitZoneGroupNameHolder}} | SCR_HitZoneInfo = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/VehicleInfo/SCR_HitZoneInfo.c;4|SCR_HitZoneInfo}} | SCR_HitZoneStateSignal = {{Link|enfusion://ScriptEditor/scripts/Game/HitZone/SCR_HitZoneStateSignal.c;1|SCR_HitZoneStateSignal}} | SCR_HitZoneStateSignalData = {{Link|enfusion://ScriptEditor/scripts/Game/HitZone/SCR_HitZoneStateSignalData.c;1|SCR_HitZoneStateSignalData}} | SCR_HoldableItemPredicate = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_InventoryStorageManagerComponent.c;38|SCR_HoldableItemPredicate}} | SCR_HoldCampaignMilitaryBaseTaskEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Campaign/SCR_HoldCampaignMilitaryBaseTaskEntity.c;5|SCR_HoldCampaignMilitaryBaseTaskEntity}} | SCR_HoldCampaignMilitaryBaseTaskEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Campaign/SCR_HoldCampaignMilitaryBaseTaskEntity.c;1|SCR_HoldCampaignMilitaryBaseTaskEntityClass}} | SCR_HorizontalAlignComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Compositions/SCR_HorizontalAlignComponent.c;6|SCR_HorizontalAlignComponent}} | SCR_HorizontalAlignComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Compositions/SCR_HorizontalAlignComponent.c;1|SCR_HorizontalAlignComponentClass}} | SCR_HorizontalScrollAnimationComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_HorizontalScrollAnimationComponent.c;33|SCR_HorizontalScrollAnimationComponent}} | SCR_HostButtonComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/ServerHosting/SCR_HostButtonComponent.c;6|SCR_HostButtonComponent}} | SCR_HostScenarioWhileDownloadingDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/CommonDialogs.c;156|SCR_HostScenarioWhileDownloadingDialog}} | SCR_HoveredEntityHasFlagsActionComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Editor/SCR_HoveredEntityHasFlagsActionComponent.c;1|SCR_HoveredEntityHasFlagsActionComponent}} | SCR_HoveredEntityIsLockedActionComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Editor/SCR_HoveredEntityIsLockedActionComponent.c;1|SCR_HoveredEntityIsLockedActionComponent}} | SCR_HoverEditableEntityFilter = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/EditableEntityFilters/SCR_HoverEditableEntityFilter.c;1|SCR_HoverEditableEntityFilter}} | SCR_HUDElement = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_HUDFreeSlot.c;1|SCR_HUDElement}} | SCR_HUDGroupUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_HUDGroupUIComponent.c;1|SCR_HUDGroupUIComponent}} | SCR_HUDLayer = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_HUDLayer.c;1|SCR_HUDLayer}} | SCR_HUDLayout = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_HUDLayout.c;1|SCR_HUDLayout}} | SCR_HUDManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_HUDManagerComponent.c;23|SCR_HUDManagerComponent}} | SCR_HUDManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_HUDManagerComponent.c;15|SCR_HUDManagerComponentClass}} | SCR_HUDManagerEditorVisibilityHandler = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/Handlers/HudManager/SCR_HUDManagerEditorVisibilityHandler.c;1|SCR_HUDManagerEditorVisibilityHandler}} | SCR_HUDManagerHandler = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/Handlers/HudManager/SCR_HUDManagerHandler.c;1|SCR_HUDManagerHandler}} | SCR_HUDManagerLayoutHandler = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/Handlers/HudManager/SCR_HUDManagerLayoutHandler.c;6|SCR_HUDManagerLayoutHandler}} | SCR_HUDMenuComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_HUDMenuComponent.c;1|SCR_HUDMenuComponent}} | SCR_HUDSizeCalculator = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_HUDSizeCalculator.c;7|SCR_HUDSizeCalculator}} | SCR_HUDSlotResizeInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_HUDSlotUIComponent.c;3|SCR_HUDSlotResizeInvoker}} | SCR_HUDSlotUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_HUDSlotUIComponent.c;5|SCR_HUDSlotUIComponent}} | SCR_HybridPhysicsComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/HybridPhysicsComponent.c;19|SCR_HybridPhysicsComponent}} | SCR_HybridPhysicsComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/HybridPhysicsComponent.c;1|SCR_HybridPhysicsComponentClass}} | SCR_HybridPhysicsInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Components/HybridPhysicsComponent.c;11|SCR_HybridPhysicsInfo}} | SCR_HZInfoEngineHeli = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/VehicleInfo/SCR_HZInfoEngineHeli.c;1|SCR_HZInfoEngineHeli}} | SCR_HZInfoGearboxHeli = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/VehicleInfo/SCR_HZInfoGearboxHeli.c;1|SCR_HZInfoGearboxHeli}} | SCR_HZInfoHeli = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/VehicleInfo/SCR_HZInfoHeli.c;1|SCR_HZInfoHeli}} | SCR_HZInfoRotorMain = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/VehicleInfo/SCR_HZInfoRotorMain.c;1|SCR_HZInfoRotorMain}} | SCR_HZInfoRotorRear = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/VehicleInfo/SCR_HZInfoRotorRear.c;1|SCR_HZInfoRotorRear}} | SCR_IdentityBio = {{Link|enfusion://ScriptEditor/scripts/Game/Identity/Bio/SCR_IdentityBio.c;1|SCR_IdentityBio}} | SCR_IdentityBioCharacterExtendedOverwrite = {{Link|enfusion://ScriptEditor/scripts/Game/Identity/Bio/SCR_IdentityBioCharacterExtendedOverwrite.c;1|SCR_IdentityBioCharacterExtendedOverwrite}} | SCR_IdentityBioExtendedOverwrite = {{Link|enfusion://ScriptEditor/scripts/Game/Identity/Bio/SCR_IdentityBioExtendedOverwrite.c;1|SCR_IdentityBioExtendedOverwrite}} | SCR_IdentityBioGroupConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Identity/Containers/SCR_IdentityBioGroupConfig.c;1|SCR_IdentityBioGroupConfig}} | SCR_IdentityBioTypeHolderConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Identity/Containers/SCR_IdentityBioTypeHolderConfig.c;1|SCR_IdentityBioTypeHolderConfig}} | SCR_IdentityDividerTooltipDetail = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_IdentityDividerTooltipDetail.c;1|SCR_IdentityDividerTooltipDetail}} | SCR_IdentityInventoryItemComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_IdentityInventoryItemComponent.c;6|SCR_IdentityInventoryItemComponent}} | SCR_IdentityInventoryItemComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_IdentityInventoryItemComponent.c;1|SCR_IdentityInventoryItemComponentClass}} | SCR_IdentityItemAttributeCollection = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_IdentityItemAttributeCollection.c;1|SCR_IdentityItemAttributeCollection}} | SCR_IdentityItemInventoryUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_IdentityItemInventoryUIInfo.c;1|SCR_IdentityItemInventoryUIInfo}} | SCR_IdentityItemLoadoutArea = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_IdentityItemLoadoutArea.c;1|SCR_IdentityItemLoadoutArea}} | SCR_IdentityItemStorageComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_IdentityItemStorageComponent.c;5|SCR_IdentityItemStorageComponent}} | SCR_IdentityItemStorageComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_IdentityItemStorageComponent.c;1|SCR_IdentityItemStorageComponentClass}} | SCR_IdentityManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Identity/SCR_IdentityManagerComponent.c;6|SCR_IdentityManagerComponent}} | SCR_IdentityManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Identity/SCR_IdentityManagerComponent.c;1|SCR_IdentityManagerComponentClass}} | SCR_ImageBlockUIName = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_BlockUIInfo.c;211|SCR_ImageBlockUIName}} | SCR_ImageFrameAnimationComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_ImageFrameAnimationComponent.c;7|SCR_ImageFrameAnimationComponent}} | SCR_ImageGalleryButtonComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_ImageGallery/SCR_ImageGalleryButtonComponent.c;2|SCR_ImageGalleryButtonComponent}} | SCR_ImageGalleryComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_ImageGallery/SCR_ImageGalleryComponent.c;2|SCR_ImageGalleryComponent}} | SCR_ImageHelper = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/Helpers/SCR_ImageHelper.c;2|SCR_ImageHelper}} | SCR_ImagePickerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ConfigurableWidgetEntries/SCR_ImagePickerComponent.c;14|SCR_ImagePickerComponent}} | SCR_ImageRadialProgressBarUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_ImageRadialProgressBarUIComponent.c;1|SCR_ImageRadialProgressBarUIComponent}} | SCR_ImageSetFormatParam = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_FormatUIInfo.c;82|SCR_ImageSetFormatParam}} | SCR_ImageSetGenerator = {{Link|enfusion://ScriptEditor/scripts/Workbench/SCR_ImageSetGenerator.c;1|SCR_ImageSetGenerator}} | SCR_ImageSetResource = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Texture/SCR_ImageSetResource.c;1|SCR_ImageSetResource}} | SCR_ImpactEffectComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_ImpactEffectComponent.c;28|SCR_ImpactEffectComponent}} | SCR_ImpactEffectComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_ImpactEffectComponent.c;16|SCR_ImpactEffectComponentClass}} | SCR_ImportShapefileTool = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_ImportShapefileTool.c;2|SCR_ImportShapefileTool}} | SCR_IncendiaryBulletDamageEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/DamageEffects/DamageEffectSources/SCR_IncendiaryBulletDamageEffect.c;1|SCR_IncendiaryBulletDamageEffect}} | SCR_IncendiaryDamageEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/DamageEffects/DamageEffectSources/SCR_IncendiaryDamageEffect.c;1|SCR_IncendiaryDamageEffect}} | SCR_IndestructibleEnvironmentalEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/SCR_IndestructibleEnvironmentalEntity.c;4|SCR_IndestructibleEnvironmentalEntity}} | SCR_IndestructibleEnvironmentalEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/SCR_IndestructibleEnvironmentalEntity.c;1|SCR_IndestructibleEnvironmentalEntityClass}} | SCR_InfoDisplay = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_InfoDisplay.c;21|SCR_InfoDisplay}} | SCR_InfoDisplayExtended = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_InfoDisplayExtended.c;16|SCR_InfoDisplayExtended}} | SCR_InfoDisplayHandler = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/Handlers/InfoDisplay/SCR_InfoDisplayHandler.c;1|SCR_InfoDisplayHandler}} | SCR_InfoDisplayInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_InfoDisplay.c;3|SCR_InfoDisplayInvoker}} | SCR_InfoDisplayLayerHandler = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/Handlers/InfoDisplay/SCR_InfoDisplayLayerHandler.c;1|SCR_InfoDisplayLayerHandler}} | SCR_InfoDisplaySlotHandler = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/Handlers/InfoDisplay/SCR_InfoDisplaySlotHandler.c;1|SCR_InfoDisplaySlotHandler}} | SCR_IngameClockUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_IngameClockUIComponent.c;2|SCR_IngameClockUIComponent}} | SCR_IngameDateUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_IngameDateUIComponent.c;1|SCR_IngameDateUIComponent}} | SCR_InitInputManualCameraComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_InitInputManualCameraComponent.c;4|SCR_InitInputManualCameraComponent}} | SCR_InitWeatherComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Misc/SCR_InitWeatherComponent.c;6|SCR_InitWeatherComponent}} | SCR_InitWeatherComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Misc/SCR_InitWeatherComponent.c;1|SCR_InitWeatherComponentClass}} | SCR_InputActionUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_InputActionUIInfo.c;1|SCR_InputActionUIInfo}} | SCR_InputButtonAlphaMaskAnimation = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/Animations/SCR_InputButtonAlphaMaskAnimation.c;1|SCR_InputButtonAlphaMaskAnimation}} | SCR_InputButtonAnimations = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/Animations/SCR_InputButtonAnimations.c;1|SCR_InputButtonAnimations}} | SCR_InputButtonColorAnimation = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/Animations/SCR_InputButtonColorAnimation.c;1|SCR_InputButtonColorAnimation}} | SCR_InputButtonComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c;1|SCR_InputButtonComponent}} | SCR_InputButtonData = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonDeviceConfig.c;1|SCR_InputButtonData}} | SCR_InputButtonDisplay = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonDisplay.c;1|SCR_InputButtonDisplay}} | SCR_InputButtonLayoutConfig = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonLayoutConfig.c;1|SCR_InputButtonLayoutConfig}} | SCR_InputButtonLayoutEntry = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonLayoutConfig.c;21|SCR_InputButtonLayoutEntry}} | SCR_InputButtonStyle = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonLayoutConfig.c;26|SCR_InputButtonStyle}} | SCR_InputHintCondition = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Hints/HintConditions/SCR_InputHintCondition.c;1|SCR_InputHintCondition}} | SCR_InputLayoutEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_InputLayoutEditorComponent.c;10|SCR_InputLayoutEditorComponent}} | SCR_InputLayoutEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_InputLayoutEditorComponent.c;1|SCR_InputLayoutEditorComponentClass}} | SCR_InsectDef = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AmbientInsectsComponent/SCR_InsectDef.c;1|SCR_InsectDef}} | SCR_InsectGroup = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AmbientInsectsComponent/SCR_InsectGroup.c;8|SCR_InsectGroup}} | SCR_InsectParticle = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_InsectParticle.c;1|SCR_InsectParticle}} | SCR_InsectSpawnDef = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AmbientInsectsComponent/SCR_InsectSpawnDef.c;1|SCR_InsectSpawnDef}} | SCR_InsectType = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AmbientInsectsComponent/SCR_InsectType.c;1|SCR_InsectType}} | SCR_InspectCasualtyUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_InspectCasualtyUserAction.c;1|SCR_InspectCasualtyUserAction}} | SCR_InspectCasualtyWidget = {{Link|enfusion://ScriptEditor/scripts/Game/UI/ScreenEffects/SCR_InspectCasualtyWidget.c;1|SCR_InspectCasualtyWidget}} | SCR_InspectionUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/Inspection/SCR_InspectionUserAction.c;1|SCR_InspectionUserAction}} | SCR_InstantActionTest = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ToolbarActions/SCR_InstantActionTest.c;2|SCR_InstantActionTest}} | SCR_InstantDamageEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/DamageEffects/BaseDamageEffects/SCR_InstantDamageEffect.c;6|SCR_InstantDamageEffect}} | SCR_InstantTriggerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Trigger/SCR_InstantTriggerComponent.c;16|SCR_InstantTriggerComponent}} | SCR_InstantTriggerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Trigger/SCR_InstantTriggerComponent.c;1|SCR_InstantTriggerComponentClass}} | SCR_InstigatorContextData = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/SCR_InstigatorContextData.c;1|SCR_InstigatorContextData}} | SCR_InteractableBoxComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/InteractableBoxComponent.c;6|SCR_InteractableBoxComponent}} | SCR_InteractableBoxComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/InteractableBoxComponent.c;1|SCR_InteractableBoxComponentClass}} | SCR_InteractionHandlerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Interactions/SCR_InteractionHandlerComponent.c;20|SCR_InteractionHandlerComponent}} | SCR_InteractionHandlerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Interactions/SCR_InteractionHandlerComponent.c;1|SCR_InteractionHandlerComponentClass}} | SCR_InterfaceSettings = {{Link|enfusion://ScriptEditor/scripts/Game/UI/SCR_InterfaceSettings.c;1|SCR_InterfaceSettings}} | SCR_InterfaceSettingsSubMenu = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SettingsMenu/SCR_InterfaceSettingsSubMenu.c;1|SCR_InterfaceSettingsSubMenu}} | SCR_InteriorBoundingBox = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/Building/SCR_DestructibleBuildingComponent.c;49|SCR_InteriorBoundingBox}} | SCR_InteriorRequestCallback = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Sound/SCR_InteriorRequestCallback.c;1|SCR_InteriorRequestCallback}} | SCR_IntroSplashScreen2Component = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/MainMenuHandling/SCR_IntroSplashScreen2Component.c;3|SCR_IntroSplashScreen2Component}} | SCR_IntroSplashScreenComponent = {{Link|enfusion://ScriptEditor/scripts/GameLib/LoadingScreens/SCR_IntroSplashScreenComponent.c;1|SCR_IntroSplashScreenComponent}} | SCR_IntroSplashScreenWidgets = {{Link|enfusion://ScriptEditor/scripts/GameLib/LoadingScreens/SCR_IntroSplashScreenWidgets.c;4|SCR_IntroSplashScreenWidgets}} | SCR_InvCallBack = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryMenuUI.c;64|SCR_InvCallBack}} | SCR_InvCallBackCheck = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionAddItemToInventory.c;98|SCR_InvCallBackCheck}} | SCR_InventoryAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_InventoryAction.c;3|SCR_InventoryAction}} | SCR_InventoryAmmoTypeIndicator = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryAmmoTypeIndicator.c;1|SCR_InventoryAmmoTypeIndicator}} | SCR_InventoryAttachmentPointUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryAttachmentStorageUI.c;110|SCR_InventoryAttachmentPointUI}} | SCR_InventoryAttachmentSlotUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryAttachmentStorageUI.c;147|SCR_InventoryAttachmentSlotUI}} | SCR_InventoryAttachmentStorageUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryAttachmentStorageUI.c;1|SCR_InventoryAttachmentStorageUI}} | SCR_InventoryAvailableCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Character/SCR_InventoryAvailableCondition.c;1|SCR_InventoryAvailableCondition}} | SCR_InventoryButton = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryButtonPageUI.c;13|SCR_InventoryButton}} | SCR_InventoryCharacterWidgetHelper = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryCharacterWidgetHelper.c;2|SCR_InventoryCharacterWidgetHelper}} | SCR_InventoryConfig = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryConfig.c;28|SCR_InventoryConfig}} | SCR_InventoryDamageInfoUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryDamageInfoUI.c;4|SCR_InventoryDamageInfoUI}} | SCR_InventoryDamageUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryDamageUIInfo.c;1|SCR_InventoryDamageUIInfo}} | SCR_InventoryData = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/ApplicationData/SCR_AnalyticsApplicationData.c;28|SCR_InventoryData}} | SCR_InventoryGearInspectionPointUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryGearInspectionSlotUI.c;1|SCR_InventoryGearInspectionPointUI}} | SCR_InventoryHintSettings = {{Link|enfusion://ScriptEditor/scripts/Game/Global/SCR_GameplaySettings.c;264|SCR_InventoryHintSettings}} | SCR_InventoryHitZonePointContainerUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryHitZonePointUI.c;2|SCR_InventoryHitZonePointContainerUI}} | SCR_InventoryHitZonePointUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryHitZonePointUI.c;356|SCR_InventoryHitZonePointUI}} | SCR_InventoryHitZoneSlotUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryHitZoneSlotUI.c;104|SCR_InventoryHitZoneSlotUI}} | SCR_InventoryHitZoneUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryHitZoneSlotUI.c;1|SCR_InventoryHitZoneUI}} | SCR_InventoryIdentityItemWidgetComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryIdentityItemWidgetComponent.c;1|SCR_InventoryIdentityItemWidgetComponent}} | SCR_InventoryInspectionUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryInspectionUI.c;1|SCR_InventoryInspectionUI}} | SCR_InventoryItemHintUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_InventoryItemHintUIInfo.c;8|SCR_InventoryItemHintUIInfo}} | SCR_InventoryItemInfoUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryItemInfoUI.c;1|SCR_InventoryItemInfoUI}} | SCR_InventoryMenuUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryMenuUI.c;275|SCR_InventoryMenuUI}} | SCR_InventoryNavigationButtonBack = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_InventoryNavigationButtonBack.c;4|SCR_InventoryNavigationButtonBack}} | SCR_InventoryOpenedStorageArsenalUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryOpenedStorageArsenalUI.c;1|SCR_InventoryOpenedStorageArsenalUI}} | SCR_InventoryOpenedStorageUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryOpenedStorageUI.c;1|SCR_InventoryOpenedStorageUI}} | SCR_InventoryProgressBar = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryProgressBar.c;1|SCR_InventoryProgressBar}} | SCR_InventorySlotGadgetUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventorySlotGadgetUI.c;1|SCR_InventorySlotGadgetUI}} | SCR_InventorySlotGearInspectionUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryGearInspectionSlotUI.c;272|SCR_InventorySlotGearInspectionUI}} | SCR_InventorySlotLBSUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventorySlotLBSUI.c;1|SCR_InventorySlotLBSUI}} | SCR_InventorySlotQuickSlotUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventorySlotQuickSlotUI.c;4|SCR_InventorySlotQuickSlotUI}} | SCR_InventorySlotStorageEmbeddedUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventorySlotStorageEmbeddedUI.c;5|SCR_InventorySlotStorageEmbeddedUI}} | SCR_InventorySlotStorageUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventorySlotStorageUI.c;5|SCR_InventorySlotStorageUI}} | SCR_InventorySlotUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventorySlotUI.c;25|SCR_InventorySlotUI}} | SCR_InventorySlotWeaponSlotsUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventorySlotWeaponSlotsUI.c;4|SCR_InventorySlotWeaponSlotsUI}} | SCR_InventorySlotWeaponUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventorySlotWeaponUI.c;6|SCR_InventorySlotWeaponUI}} | SCR_InventorySpinBoxComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventorySpinBoxComponent.c;1|SCR_InventorySpinBoxComponent}} | SCR_InventoryStorageBackpackUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryStorageBackpackUI.c;5|SCR_InventoryStorageBackpackUI}} | SCR_InventoryStorageBaseUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryStorageBaseUI.c;6|SCR_InventoryStorageBaseUI}} | SCR_InventoryStorageButton = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryStorageBaseUI.c;2014|SCR_InventoryStorageButton}} | SCR_InventoryStorageContainerUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryStorageContainerUI.c;1|SCR_InventoryStorageContainerUI}} | SCR_InventoryStorageGadgetsUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryStorageGadgetsUI.c;4|SCR_InventoryStorageGadgetsUI}} | SCR_InventoryStorageLBSUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryStorageLBSUI.c;5|SCR_InventoryStorageLBSUI}} | SCR_InventoryStorageLootUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryStorageLootUI.c;4|SCR_InventoryStorageLootUI}} | SCR_InventoryStorageManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_InventoryStorageManagerComponent.c;490|SCR_InventoryStorageManagerComponent}} | SCR_InventoryStorageManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_InventoryStorageManagerComponent.c;1|SCR_InventoryStorageManagerComponentClass}} | SCR_InventoryStorageQuickSlotsUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryStorageQuickSlotsUI.c;6|SCR_InventoryStorageQuickSlotsUI}} | SCR_InventoryStoragesListUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryStoragesListUI.c;1|SCR_InventoryStoragesListUI}} | SCR_InventoryStorageVestUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryStorageVestUI.c;4|SCR_InventoryStorageVestUI}} | SCR_InventoryStorageWeaponsUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryStorageWeaponsUI.c;4|SCR_InventoryStorageWeaponsUI}} | SCR_InventoryUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryUIInfo.c;1|SCR_InventoryUIInfo}} | SCR_InventoryVehicleVisibilityAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_InventoryVehicleVisibilityAttribute.c;1|SCR_InventoryVehicleVisibilityAttribute}} | SCR_InventoryWeaponSlotsUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryWeaponSlotsUI.c;1|SCR_InventoryWeaponSlotsUI}} | SCR_InvEquipAnyItemCB = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_CharacterInventoryStorageComponent.c;61|SCR_InvEquipAnyItemCB}} | SCR_InvEquipCB = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_CharacterInventoryStorageComponent.c;11|SCR_InvEquipCB}} | SCR_IsActionTriggeredCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/SCR_IsActionTriggeredCondition.c;2|SCR_IsActionTriggeredCondition}} | SCR_IsBallisticDataDisplayVisibleCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Weapon/SCR_IsBallisticDataDisplayVisibleCondition.c;1|SCR_IsBallisticDataDisplayVisibleCondition}} | SCR_IsCharacterADSCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Character/SCR_IsCharacterADSCondition.c;1|SCR_IsCharacterADSCondition}} | SCR_IsCharacterConsciousCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Character/Health/SCR_IsCharacterConsciousCondition.c;1|SCR_IsCharacterConsciousCondition}} | SCR_IsCharacterInControlCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Character/SCR_IsCharacterInControlCondition.c;4|SCR_IsCharacterInControlCondition}} | SCR_IsCharacterUsingLRRCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Character/SCR_IsCharacterUsingLRRCondition.c;3|SCR_IsCharacterUsingLRRCondition}} | SCR_IsCharacterUsingRadioCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Character/SCR_IsCharacterTransmitingCondition.c;3|SCR_IsCharacterUsingRadioCondition}} | SCR_IsContextEnabledCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/SCR_IsContextEnabledCondition.c;2|SCR_IsContextEnabledCondition}} | SCR_IsUsingMouseAndKeyboardCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/SCR_IsUsingMouseAndKeyboardCondition.c;1|SCR_IsUsingMouseAndKeyboardCondition}} | SCR_IsUsingVariableSightsCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Weapon/SCR_IsUsingVariableSights.c;2|SCR_IsUsingVariableSightsCondition}} | SCR_ItemAttributeCollection = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_ItemAttributeCollection.c;1|SCR_ItemAttributeCollection}} | SCR_ItemHintUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_ItemHintUIInfo.c;1|SCR_ItemHintUIInfo}} | SCR_ItemOfInterestAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/ItemInterestAttributes.c;1|SCR_ItemOfInterestAttribute}} | SCR_ItemOutfitFactionComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_ItemOutfitFactionComponent.c;135|SCR_ItemOutfitFactionComponent}} | SCR_ItemOutfitFactionComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_ItemOutfitFactionComponent.c;1|SCR_ItemOutfitFactionComponentClass}} | SCR_ItemPlacementActionsDisplay = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/SCR_ItemPlacementActionsDisplay.c;1|SCR_ItemPlacementActionsDisplay}} | SCR_ItemPlacementComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_ItemPlacementComponent.c;6|SCR_ItemPlacementComponent}} | SCR_ItemPlacementComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_ItemPlacementComponent.c;1|SCR_ItemPlacementComponentClass}} | SCR_ItemPlacementCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Character/SCR_ItemPlacementCondition.c;1|SCR_ItemPlacementCondition}} | SCR_ItemSelectionMenuEntry = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SelectionMenu/Entries/SCR_ItemSelectionMenuEntry.c;1|SCR_ItemSelectionMenuEntry}} | SCR_ItemSplitDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_ItemSplitDialog.c;1|SCR_ItemSplitDialog}} | SCR_ItemTypeSearchPredicate = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_InventoryStorageManagerComponent.c;107|SCR_ItemTypeSearchPredicate}} | SCR_JoinRequestEntry = {{Link|enfusion://ScriptEditor/scripts/Game/Groups/SCR_JoinRequestEntry.c;1|SCR_JoinRequestEntry}} | SCR_Joint6DOFEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/joints/SCR_Joint6DOFEntity.c;18|SCR_Joint6DOFEntity}} | SCR_Joint6DOFEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/joints/SCR_Joint6DOFEntity.c;1|SCR_Joint6DOFEntityClass}} | SCR_JointBaseEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/joints/SCR_JointBaseEntity.c;11|SCR_JointBaseEntity}} | SCR_JointBaseEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/joints/SCR_JointBaseEntity.c;1|SCR_JointBaseEntityClass}} | SCR_JointConeTwistEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/joints/SCR_JointConeTwistEntity.c;11|SCR_JointConeTwistEntity}} | SCR_JointConeTwistEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/joints/SCR_JointConeTwistEntity.c;1|SCR_JointConeTwistEntityClass}} | SCR_JointDummyHolderEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/joints/SCR_JointDummyHolderEntity.c;11|SCR_JointDummyHolderEntity}} | SCR_JointDummyHolderEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/joints/SCR_JointDummyHolderEntity.c;2|SCR_JointDummyHolderEntityClass}} | SCR_JointFixedEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/joints/SCR_JointFixedEntity.c;11|SCR_JointFixedEntity}} | SCR_JointFixedEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/joints/SCR_JointFixedEntity.c;1|SCR_JointFixedEntityClass}} | SCR_JointHingeEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/joints/SCR_JointHingeEntity.c;14|SCR_JointHingeEntity}} | SCR_JointHingeEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/joints/SCR_JointHingeEntity.c;1|SCR_JointHingeEntityClass}} | SCR_JointSliderEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/joints/SCR_JointSliderEntity.c;11|SCR_JointSliderEntity}} | SCR_JointSliderEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/joints/SCR_JointSliderEntity.c;1|SCR_JointSliderEntityClass}} | SCR_JournalButtonWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_JournalButtonWidgets.c;3|SCR_JournalButtonWidgets}} | SCR_JournalConfig = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DeployMenu/SCR_JournalConfig.c;44|SCR_JournalConfig}} | SCR_JournalEntry = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DeployMenu/SCR_JournalConfig.c;64|SCR_JournalEntry}} | SCR_JournalSetupConfig = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DeployMenu/SCR_JournalConfig.c;11|SCR_JournalSetupConfig}} | SCR_JournalWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/Map/ComponentsUI/SCR_JournalWidgets.c;3|SCR_JournalWidgets}} | SCR_JsonApiStruct = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SaveLoad/SCR_JsonApiStruct.c;4|SCR_JsonApiStruct}} | SCR_JsonApiStructHandler = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/ServerHosting/SCR_JsonApiStructHandler.c;8|SCR_JsonApiStructHandler}} | SCR_JsonLoadContext = {{Link|enfusion://ScriptEditor/scripts/GameCode/Serialization/SCR_SerializationContextJson.c;45|SCR_JsonLoadContext}} | SCR_JsonSaveContext = {{Link|enfusion://ScriptEditor/scripts/GameCode/Serialization/SCR_SerializationContextJson.c;6|SCR_JsonSaveContext}} | SCR_JumpOutAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_JumpOutUserAction.c;1|SCR_JumpOutAction}} | SCR_JunctionPowerPole = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Power/SCR_JunctionPowerPole.c;6|SCR_JunctionPowerPole}} | SCR_JunctionPowerPoleClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Power/SCR_JunctionPowerPole.c;1|SCR_JunctionPowerPoleClass}} | SCR_Key = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Semaphores/SCR_LockContextComponent.c;6|SCR_Key}} | SCR_KeybindActionDisplayComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SettingsMenu/SCR_KeybindActionDisplayComponent.c;6|SCR_KeybindActionDisplayComponent}} | SCR_KeybindActionDisplayData = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SettingsMenu/SCR_KeybindActionDisplayComponent.c;103|SCR_KeybindActionDisplayData}} | SCR_KeybindActionDisplayRowComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SettingsMenu/SCR_KeybindActionDisplayRowComponent.c;7|SCR_KeybindActionDisplayRowComponent}} | SCR_KeybindDialogBase = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SCR_KeybindDialogs.c;71|SCR_KeybindDialogBase}} | SCR_KeybindDialogs = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SCR_KeybindDialogs.c;1|SCR_KeybindDialogs}} | SCR_KeyBindingBind = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SettingsMenu/SCR_KeyBindingMenuConfig.c;116|SCR_KeyBindingBind}} | SCR_KeyBindingCategory = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SettingsMenu/SCR_KeyBindingMenuConfig.c;84|SCR_KeyBindingCategory}} | SCR_KeyBindingCombo = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SettingsMenu/SCR_KeyBindingMenuConfig.c;126|SCR_KeyBindingCombo}} | SCR_KeyBindingEntry = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SettingsMenu/SCR_KeyBindingMenuConfig.c;59|SCR_KeyBindingEntry}} | SCR_KeyBindingEntryTitleField = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SettingsMenu/SCR_KeyBindingMenuConfig.c;24|SCR_KeyBindingEntryTitleField}} | SCR_KeyBindingFilter = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SettingsMenu/SCR_KeyBindingMenuConfig.c;97|SCR_KeyBindingFilter}} | SCR_KeyBindingMenuConfig = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SettingsMenu/SCR_KeyBindingMenuConfig.c;8|SCR_KeyBindingMenuConfig}} | SCR_KeybindRowComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SettingsMenu/SCR_KeybindRowComponent.c;2|SCR_KeybindRowComponent}} | SCR_KeybindSetting = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SettingsMenu/SCR_KeybindSettingsSubMenu.c;1|SCR_KeybindSetting}} | SCR_KeyBlockEntry = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_BlockUIInfo.c;162|SCR_KeyBlockEntry}} | SCR_KeyBlockUIName = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_BlockUIInfo.c;123|SCR_KeyBlockUIName}} | SCR_KickDialogCutomTitle = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/Dialogs/SCR_KickDialogUiPreset.c;15|SCR_KickDialogCutomTitle}} | SCR_KickDialogs = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SCR_KickDialogs.c;1|SCR_KickDialogs}} | SCR_KickDialogUiPreset = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/Dialogs/SCR_KickDialogUiPreset.c;4|SCR_KickDialogUiPreset}} | SCR_KickHintComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_KickHintComponent.c;6|SCR_KickHintComponent}} | SCR_KickHintComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_KickHintComponent.c;1|SCR_KickHintComponentClass}} | SCR_KickPlayerContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_KickPlayerContextAction.c;1|SCR_KickPlayerContextAction}} | SCR_KillfeedReceiveTypeEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_KillfeedReceiveTypeEditorAttribute.c;1|SCR_KillfeedReceiveTypeEditorAttribute}} | SCR_KillfeedTypeEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_KillfeedTypeEditorAttribute.c;1|SCR_KillfeedTypeEditorAttribute}} | SCR_LabelComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_LabelComponent.c;1|SCR_LabelComponent}} | SCR_LabelDescriptionTooltipDetail = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_LabelDescriptionTooltipDetail.c;1|SCR_LabelDescriptionTooltipDetail}} | SCR_LadderDoorUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_DoorUserAction.c;41|SCR_LadderDoorUserAction}} | SCR_LadderUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_LadderUserAction.c;2|SCR_LadderUserAction}} | SCR_LampComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_LampComponent.c;25|SCR_LampComponent}} | SCR_LampComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_LampComponent.c;1|SCR_LampComponentClass}} | SCR_LargeDestructibleEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/Temporary/SCR_LargeDestructibleEntity.c;7|SCR_LargeDestructibleEntity}} | SCR_LargeDestructibleEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/Temporary/SCR_LargeDestructibleEntity.c;2|SCR_LargeDestructibleEntityClass}} | SCR_LastUsedInputDevice = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/SCR_LastUsedInputDevice.c;1|SCR_LastUsedInputDevice}} | SCR_LayerAutoEnterUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_LayerAutoEnterUIComponent.c;1|SCR_LayerAutoEnterUIComponent}} | SCR_LayerConfiguration = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapConfig.c;61|SCR_LayerConfiguration}} | SCR_LayerContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_LayerContextAction.c;1|SCR_LayerContextAction}} | SCR_LayerEditableEntityFilter = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/EditableEntityFilters/SCR_LayerEditableEntityFilter.c;1|SCR_LayerEditableEntityFilter}} | SCR_LayerEditableEntityUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/EditableEntities/SCR_LayerEditableEntityUIComponent.c;1|SCR_LayerEditableEntityUIComponent}} | SCR_LayersEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_LayersEditorManager.c;11|SCR_LayersEditorComponent}} | SCR_LayersEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_LayersEditorManager.c;1|SCR_LayersEditorComponentClass}} | SCR_LayersEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_LayersEditorUIComponent.c;4|SCR_LayersEditorUIComponent}} | SCR_LayoutTemplateComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_LayoutTemplateComponent.c;1|SCR_LayoutTemplateComponent}} | SCR_LeaderRoleCallsign = {{Link|enfusion://ScriptEditor/scripts/Game/Callsign/RoleCallsigns/SCR_LeaderRoleCallsign.c;1|SCR_LeaderRoleCallsign}} | SCR_LeaveModeToolbarAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ToolbarActions/SCR_LeaveModeToolbarAction.c;1|SCR_LeaveModeToolbarAction}} | SCR_LegendPropsConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapPropsConfig.c;132|SCR_LegendPropsConfig}} | SCR_LenseColor = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_FlashlightComponent.c;1|SCR_LenseColor}} | SCR_LensFlareEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_LensFlareEditorAttribute.c;4|SCR_LensFlareEditorAttribute}} | SCR_LensFlareManualCameraComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_LensFlareManualCameraComponent.c;4|SCR_LensFlareManualCameraComponent}} | SCR_LifetimeComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_LifetimeComponent.c;7|SCR_LifetimeComponent}} | SCR_LifetimeComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_LifetimeComponent.c;1|SCR_LifetimeComponentClass}} | SCR_LightFireplaceUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_LightFireplaceUserAction.c;3|SCR_LightFireplaceUserAction}} | SCR_LightHitZone = {{Link|enfusion://ScriptEditor/scripts/Game/HitZone/SCR_LightHitZone.c;2|SCR_LightHitZone}} | SCR_LightManagerInfo = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/VehicleInfo/SCR_LightManagerInfo.c;1|SCR_LightManagerInfo}} | SCR_LightManagerInfoEntry = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/VehicleInfo/SCR_LightManagerInfoMulti.c;1|SCR_LightManagerInfoEntry}} | SCR_LightManagerInfoMulti = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/VehicleInfo/SCR_LightManagerInfoMulti.c;17|SCR_LightManagerInfoMulti}} | SCR_LightManualCameraComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_LightManualCameraComponent.c;4|SCR_LightManualCameraComponent}} | SCR_LightningComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_LightningComponent.c;7|SCR_LightningComponent}} | SCR_LightningComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_LightningComponent.c;1|SCR_LightningComponentClass}} | SCR_LightningContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_LightningContextAction.c;1|SCR_LightningContextAction}} | SCR_LightsDashboardUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_LightsDashboardUserAction.c;1|SCR_LightsDashboardUserAction}} | SCR_LightsHazardUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_LightsHazardUserAction.c;1|SCR_LightsHazardUserAction}} | SCR_LightsHiBeamsUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_LightsHiBeamsUserAction.c;1|SCR_LightsHiBeamsUserAction}} | SCR_LightSlot = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_LightSlot.c;1|SCR_LightSlot}} | SCR_LightsPresenceUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_LightsPresenceUserAction.c;1|SCR_LightsPresenceUserAction}} | SCR_LightsSearchLightUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_LightsSearchLightUserAction.c;1|SCR_LightsSearchLightUserAction}} | SCR_LightsTurnLeftUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_LightsTurnLeftUserAction.c;1|SCR_LightsTurnLeftUserAction}} | SCR_LightsTurnRightUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_LightsTurnRightUserAction.c;1|SCR_LightsTurnRightUserAction}} | SCR_LimitBoxManualCameraComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_LimitBoxManualCameraComponent.c;4|SCR_LimitBoxManualCameraComponent}} | SCR_LimitCylinderManualCameraComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_LimitCylinderManualCameraComponent.c;4|SCR_LimitCylinderManualCameraComponent}} | SCR_LimitTextLength = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_LimitTextLength.c;2|SCR_LimitTextLength}} | SCR_LineGeneratorBaseEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/SCR_LineGeneratorBaseEntity.c;8|SCR_LineGeneratorBaseEntity}} | SCR_LineGeneratorBaseEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/SCR_LineGeneratorBaseEntity.c;1|SCR_LineGeneratorBaseEntityClass}} | SCR_LineTerrainShaperGeneratorBaseEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/SCR_LineTerrainShaperGeneratorBaseEntity.c;6|SCR_LineTerrainShaperGeneratorBaseEntity}} | SCR_LineTerrainShaperGeneratorBaseEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/SCR_LineTerrainShaperGeneratorBaseEntity.c;1|SCR_LineTerrainShaperGeneratorBaseEntityClass}} | SCR_LineTerrainShaperGeneratorEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/SCR_LineTerrainShaperGeneratorEntity.c;6|SCR_LineTerrainShaperGeneratorEntity}} | SCR_LineTerrainShaperGeneratorEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/SCR_LineTerrainShaperGeneratorEntity.c;1|SCR_LineTerrainShaperGeneratorEntityClass}} | SCR_LinkTooltipTargetEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Targets/SCR_LinkTooltipTargetEditorUIComponent.c;3|SCR_LinkTooltipTargetEditorUIComponent}} | SCR_ListAddonsSubMenuWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/AddonManager/SCR_ListAddonsSubMenuWidgets.c;3|SCR_ListAddonsSubMenuWidgets}} | SCR_ListBoxComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/ListBox/SCR_ListBoxComponent.c;4|SCR_ListBoxComponent}} | SCR_ListBoxElementComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/ListBox/SCR_ListBoxElementComponent.c;2|SCR_ListBoxElementComponent}} | SCR_ListEntryHelper = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/Common/SCR_ListEntryHelper.c;1|SCR_ListEntryHelper}} | SCR_ListMenuEntryComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/Common/SCR_ListMenuEntryComponent.c;5|SCR_ListMenuEntryComponent}} | SCR_ListTooltipComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/MainMenu/SCR_ListTooltipComponent.c;4|SCR_ListTooltipComponent}} | SCR_ListViewComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_ListView/SCR_ListViewComponent.c;6|SCR_ListViewComponent}} | SCR_LoadCasualtySupportStationComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SupportStation/SCR_LoadCasualtySupportStationComponent.c;6|SCR_LoadCasualtySupportStationComponent}} | SCR_LoadCasualtySupportStationComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SupportStation/SCR_LoadCasualtySupportStationComponent.c;1|SCR_LoadCasualtySupportStationComponentClass}} | SCR_LoadCasualtySupportStationUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_LoadCasualtySupportStationUserAction.c;1|SCR_LoadCasualtySupportStationUserAction}} | SCR_LoadingCircleComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_LoadingCircleComponent.c;7|SCR_LoadingCircleComponent}} | SCR_LoadingHintComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/LoadingScreen/SCR_LoadingHintComponent.c;2|SCR_LoadingHintComponent}} | SCR_LoadingHints = {{Link|enfusion://ScriptEditor/scripts/Game/Global/SCR_GameplaySettings.c;257|SCR_LoadingHints}} | SCR_LoadingOverlay = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_LoadingOverlay.c;49|SCR_LoadingOverlay}} | SCR_LoadingOverlayDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/Common/SCR_LoadingOverlayDialog.c;5|SCR_LoadingOverlayDialog}} | SCR_LoadingOverlayHelperComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_LoadingOverlay.c;16|SCR_LoadingOverlayHelperComponent}} | SCR_LoadingOverlayWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_LoadingOverlayWidgets.c;4|SCR_LoadingOverlayWidgets}} | SCR_LoadingScreenComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/LoadingScreen/SCR_LoadingScreenComponent.c;1|SCR_LoadingScreenComponent}} | SCR_LoadingScreenHints = {{Link|enfusion://ScriptEditor/scripts/Game/UI/LoadingScreen/LoadingScreenHints.c;1|SCR_LoadingScreenHints}} | SCR_LoadingSpinner = {{Link|enfusion://ScriptEditor/scripts/GameLib/LoadingScreens/SCR_LoadingSpinner.c;1|SCR_LoadingSpinner}} | SCR_LoadItemsAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_LoadItemsAction.c;1|SCR_LoadItemsAction}} | SCR_LoadoutArea = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryConfig.c;1|SCR_LoadoutArea}} | SCR_LoadoutBaseEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_LoadoutBaseEditorAttribute.c;2|SCR_LoadoutBaseEditorAttribute}} | SCR_LoadoutButton = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DeployMenu/SCR_LoadoutRequestUIComponent.c;726|SCR_LoadoutButton}} | SCR_LoadoutGallery = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DeployMenu/SCR_LoadoutGallery.c;7|SCR_LoadoutGallery}} | SCR_LoadoutHandSlotArea = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_LoadoutHandSlotArea.c;1|SCR_LoadoutHandSlotArea}} | SCR_LoadoutManager = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Loadout/SCR_LoadoutManager.c;6|SCR_LoadoutManager}} | SCR_LoadoutManagerClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Loadout/SCR_LoadoutManager.c;1|SCR_LoadoutManagerClass}} | SCR_LoadoutPreviewComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/GameMode/SCR_LoadoutPreviewComponent.c;1|SCR_LoadoutPreviewComponent}} | SCR_LoadoutRequestUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DeployMenu/SCR_LoadoutRequestUIComponent.c;14|SCR_LoadoutRequestUIComponent}} | SCR_LoadoutSaveBlackList = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Loadout/SCR_LoadoutSaveBlackListHolder.c;141|SCR_LoadoutSaveBlackList}} | SCR_LoadoutSaveBlackListHolder = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Loadout/SCR_LoadoutSaveBlackListHolder.c;1|SCR_LoadoutSaveBlackListHolder}} | SCR_LoadoutSaveBlackListItem = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Loadout/SCR_LoadoutSaveBlackListHolder.c;270|SCR_LoadoutSaveBlackListItem}} | SCR_LoadoutSaveBlackListItemType = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Loadout/SCR_LoadoutSaveBlackListHolder.c;257|SCR_LoadoutSaveBlackListItemType}} | SCR_LoadoutSavingBlackListAttributeDynamicDescription = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/DynamicDescriptions/SCR_LoadoutSavingBlackListAttributeDynamicDescription.c;4|SCR_LoadoutSavingBlackListAttributeDynamicDescription}} | SCR_LoadoutSavingBlackListEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_LoadoutSavingBlackListEditorAttribute.c;1|SCR_LoadoutSavingBlackListEditorAttribute}} | SCR_LoadoutSavingClearOnChangeEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_LoadoutSavingClearOnChangeEditorAttribute.c;4|SCR_LoadoutSavingClearOnChangeEditorAttribute}} | SCR_LoadoutStatisticsComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/Career/SCR_LoadoutStatistics.c;4|SCR_LoadoutStatisticsComponent}} | SCR_LoadoutSupplyCostMultiplierEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_LoadoutSupplyCostMultiplierEditorAttribute.c;1|SCR_LoadoutSupplyCostMultiplierEditorAttribute}} | SCR_LoadSessionToolbarAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ToolbarActions/SCR_LoadSessionToolbarAction.c;1|SCR_LoadSessionToolbarAction}} | SCR_LoadSuppliesWaypoint = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_LoadSuppliesWaypoint.c;5|SCR_LoadSuppliesWaypoint}} | SCR_LoadSuppliesWaypointClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_LoadSuppliesWaypoint.c;1|SCR_LoadSuppliesWaypointClass}} | SCR_LoadSuppliesWaypointState = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_LoadSuppliesWaypoint.c;31|SCR_LoadSuppliesWaypointState}} | SCR_LocalizationTools = {{Link|enfusion://ScriptEditor/scripts/Game/Global/SCR_LocalizationTools.c;1|SCR_LocalizationTools}} | SCR_LocalizedProperty = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ConfigurableWidgetEntries/SCR_WidgetListEntry.c;73|SCR_LocalizedProperty}} | SCR_LocalizedPropertyExtended = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ConfigurableWidgetEntries/SCR_WidgetListEntry.c;94|SCR_LocalizedPropertyExtended}} | SCR_LocalizedPropertyTitle = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ConfigurableWidgetEntries/SCR_WidgetListEntry.c;48|SCR_LocalizedPropertyTitle}} | SCR_LocalPerceivedFactionWidgetComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_LocalPerceivedFactionWidgetComponent.c;1|SCR_LocalPerceivedFactionWidgetComponent}} | SCR_LocalPlayerPenalty = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_LocalPlayerPenalty.c;6|SCR_LocalPlayerPenalty}} | SCR_LocalPlayerPenaltyClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_LocalPlayerPenalty.c;1|SCR_LocalPlayerPenaltyClass}} | SCR_LocalPlayerPenaltyData = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_LocalPlayerPenalty.c;246|SCR_LocalPlayerPenaltyData}} | SCR_LocationMusic = {{Link|enfusion://ScriptEditor/scripts/Game/Music/SCR_LocationMusic.c;1|SCR_LocationMusic}} | SCR_LocEditedTextPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/LocalizationEditor/SCR_LocEditedTextPlugin.c;2|SCR_LocEditedTextPlugin}} | SCR_LocExportPlugin = {{Link|enfusion://ScriptEditor/scripts/Workbench/SCR_LocalizationPlugins.c;57|SCR_LocExportPlugin}} | SCR_LockContextComponent = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Semaphores/SCR_LockContextComponent.c;13|SCR_LockContextComponent}} | SCR_LockContextComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/ScriptedNodes/Semaphores/SCR_LockContextComponent.c;1|SCR_LockContextComponentClass}} | SCR_LockLayerContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/Placeholder/SCR_LockLayerContextAction.c;1|SCR_LockLayerContextAction}} | SCR_LocLengthPlugin = {{Link|enfusion://ScriptEditor/scripts/Workbench/SCR_LocalizationPlugins.c;103|SCR_LocLengthPlugin}} | SCR_LocLinkImagePlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/LocalizationEditor/SCR_LocLinkPlugin.c;2|SCR_LocLinkImagePlugin}} | SCR_LocLinkImagePluginResult = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/LocalizationEditor/SCR_LocLinkPlugin.c;118|SCR_LocLinkImagePluginResult}} | SCR_LocModifiedPlugin = {{Link|enfusion://ScriptEditor/scripts/Workbench/SCR_LocalizationPlugins.c;2|SCR_LocModifiedPlugin}} | SCR_LocParserPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/LocalizationEditor/SCR_LocParserPlugin.c;2|SCR_LocParserPlugin}} | SCR_LocStatusPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/LocalizationEditor/SCR_LocStatusPlugin.c;2|SCR_LocStatusPlugin}} | SCR_Login2FADialogConsoleUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/Login2FADialogUI.c;179|SCR_Login2FADialogConsoleUI}} | SCR_Login2FADialogUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/Login2FADialogUI.c;2|SCR_Login2FADialogUI}} | SCR_LoginDialogConsoleUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/LoginDialogUI.c;133|SCR_LoginDialogConsoleUI}} | SCR_LoginDialogUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/LoginDialogUI.c;2|SCR_LoginDialogUI}} | SCR_LoginProcessDialogUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SCR_LoginProcessDialogUI.c;5|SCR_LoginProcessDialogUI}} | SCR_LogitechLEDManager = {{Link|enfusion://ScriptEditor/scripts/Game/Utilities/SCR_LogitechLedManager.c;1|SCR_LogitechLEDManager}} | SCR_LogoOverlayEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_LogoOverlayEditorAttribute.c;1|SCR_LogoOverlayEditorAttribute}} | SCR_LogoOverlayPositionEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_LogoOverlayPositionEditorAttribute.c;1|SCR_LogoOverlayPositionEditorAttribute}} | SCR_LoiterCustomAnimData = {{Link|enfusion://ScriptEditor/scripts/Game/Character/Commands/SCR_CharacterCommandLoiter.c;166|SCR_LoiterCustomAnimData}} | SCR_LoiterUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/AI/UserActions/SCR_LoiterUserAction.c;13|SCR_LoiterUserAction}} | SCR_LongRangeSoundSystem = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/SCR_LongRangeSoundSystem.c;1|SCR_LongRangeSoundSystem}} | SCR_LookAtGroupCommand = {{Link|enfusion://ScriptEditor/scripts/Game/Commanding/Commands/SCR_LookAtGroupCommand.c;2|SCR_LookAtGroupCommand}} | SCR_LoopedPositionalSounds = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AmbientSoundsComponent/SCR_LoopedPositionalSounds.c;2|SCR_LoopedPositionalSounds}} | SCR_LootAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_LootAction.c;1|SCR_LootAction}} | SCR_LootDeadBodyAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_LootDeadBodyAction.c;1|SCR_LootDeadBodyAction}} | SCR_MagazineIndicatorConfiguration = {{Link|enfusion://ScriptEditor/scripts/Game/UI/SCR_MagazineIndicatorConfiguration.c;3|SCR_MagazineIndicatorConfiguration}} | SCR_MagazinePredicate = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_InventoryStorageManagerComponent.c;216|SCR_MagazinePredicate}} | SCR_MailboxComponent = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_MailboxComponent.c;6|SCR_MailboxComponent}} | SCR_MailboxComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_MailboxComponent.c;1|SCR_MailboxComponentClass}} | SCR_MainMenuConfigEntry = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/MainMenuHandling/SCR_MainMenuConfiguration.c;17|SCR_MainMenuConfigEntry}} | SCR_MainMenuConfiguration = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/MainMenuHandling/SCR_MainMenuConfiguration.c;1|SCR_MainMenuConfiguration}} | SCR_MainMenuEntity = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ScriptedMainMenuEntity.c;11|SCR_MainMenuEntity}} | SCR_MainMenuEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ScriptedMainMenuEntity.c;5|SCR_MainMenuEntityClass}} | SCR_MainMenuNewsToast = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/MainMenu/SCR_MainMenuNewsToast.c;1|SCR_MainMenuNewsToast}} | SCR_MainMenuTile_MenuComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/MainMenu/SCR_MainMenuTile_MenuComponent.c;1|SCR_MainMenuTile_MenuComponent}} | SCR_MainMenuTileComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/MainMenu/SCR_MainMenuTileComponent.c;1|SCR_MainMenuTileComponent}} | SCR_ManagedDamageEffectsContainer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/DamageEffects/SCR_ManagedDamageEffectsContainer.c;1|SCR_ManagedDamageEffectsContainer}} | SCR_ManualCamera = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/SCR_ManualCamera.c;16|SCR_ManualCamera}} | SCR_ManualCameraAdjustSpeedHintCondition = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Hints/HintConditions/SCR_ManualCameraAdjustSpeedHintCondition.c;1|SCR_ManualCameraAdjustSpeedHintCondition}} | SCR_ManualCameraAttachHintCondition = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Hints/HintConditions/SCR_ManualCameraAttachHintCondition.c;1|SCR_ManualCameraAttachHintCondition}} | SCR_ManualCameraClass = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/SCR_ManualCamera.c;1|SCR_ManualCameraClass}} | SCR_ManualCameraComponentSave = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/SCR_ManualCameraSave.c;14|SCR_ManualCameraComponentSave}} | SCR_ManualCameraFocusHintCondition = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Hints/HintConditions/SCR_ManualCameraFocusHintCondition.c;1|SCR_ManualCameraFocusHintCondition}} | SCR_ManualCameraLightHintCondition = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Hints/HintConditions/SCR_ManualCameraLightHintCondition.c;1|SCR_ManualCameraLightHintCondition}} | SCR_ManualCameraNightModeHintCondition = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Hints/HintConditions/SCR_ManualCameraNightModeHintCondition.c;1|SCR_ManualCameraNightModeHintCondition}} | SCR_ManualCameraParam = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/SCR_ManualCameraParam.c;5|SCR_ManualCameraParam}} | SCR_ManualCameraSave = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/SCR_ManualCameraSave.c;1|SCR_ManualCameraSave}} | SCR_ManualCameraSettings = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/SCR_ManualCameraSettings.c;1|SCR_ManualCameraSettings}} | SCR_ManualCameraZoomHintCondition = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Hints/HintConditions/SCR_ManualCameraZoomHintCondition.c;1|SCR_ManualCameraZoomHintCondition}} | SCR_MANW_Banner = {{Link|enfusion://ScriptEditor/scripts/Game/UI/MANW2025/SCR_MANW_Banner.c;1|SCR_MANW_Banner}} | SCR_MANW_BannerButton = {{Link|enfusion://ScriptEditor/scripts/Game/UI/MANW2025/SCR_MANW_BannerButton.c;1|SCR_MANW_BannerButton}} | SCR_MANW_BannerDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/MANW2025/SCR_MANW_BannerDialog.c;1|SCR_MANW_BannerDialog}} | SCR_MANW_ContentBrowser_AddonsSubMenu = {{Link|enfusion://ScriptEditor/scripts/Game/UI/MANW2025/SCR_MANW_ContentBrowser_AddonsSubMenu.c;1|SCR_MANW_ContentBrowser_AddonsSubMenu}} | SCR_MANW_Dialogs = {{Link|enfusion://ScriptEditor/scripts/Game/UI/MANW2025/SCR_MANW_Dialogs.c;1|SCR_MANW_Dialogs}} | SCR_MANW_RankCategoryData = {{Link|enfusion://ScriptEditor/scripts/Game/UI/MANW2025/SCR_MANW_RankComponent.c;108|SCR_MANW_RankCategoryData}} | SCR_MANW_RankComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/MANW2025/SCR_MANW_RankComponent.c;1|SCR_MANW_RankComponent}} | SCR_MANW_RankIconData = {{Link|enfusion://ScriptEditor/scripts/Game/UI/MANW2025/SCR_MANW_RankComponent.c;118|SCR_MANW_RankIconData}} | SCR_MANW_RankLabelWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/MANW2025/SCR_MANW_RankLabelWidgets.c;3|SCR_MANW_RankLabelWidgets}} | SCR_MANW_RankTagCategoryData = {{Link|enfusion://ScriptEditor/scripts/Game/UI/MANW2025/SCR_MANW_RankComponent.c;128|SCR_MANW_RankTagCategoryData}} | SCR_MANW_RankTagRankData = {{Link|enfusion://ScriptEditor/scripts/Game/UI/MANW2025/SCR_MANW_RankComponent.c;138|SCR_MANW_RankTagRankData}} | SCR_MapCampaignBuildingUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Conflict/SCR_MapCampaignBuildingUI.c;1|SCR_MapCampaignBuildingUI}} | SCR_MapCampaignUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Conflict/SCR_MapCampaignUI.c;6|SCR_MapCampaignUI}} | SCR_MapCanActivateCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Map/SCR_MapCanActivateCondition.c;2|SCR_MapCanActivateCondition}} | SCR_MapCanDragCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Map/SCR_MapCanDragCondition.c;2|SCR_MapCanDragCondition}} | SCR_MapCanResetRotationCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Map/SCR_MapCanResetRotationCondition.c;1|SCR_MapCanResetRotationCondition}} | SCR_MapCanRotateCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Map/SCR_MapCanRotateCondition.c;2|SCR_MapCanRotateCondition}} | SCR_MapCommandCursor = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/MapCommandCursors/SCR_MapCommandCursor.c;1|SCR_MapCommandCursor}} | SCR_MapCommandPostUI = {{Link|enfusion://ScriptEditor/scripts/Game/Map/ComponentsUI/SCR_MapCommandPostUI.c;1|SCR_MapCommandPostUI}} | SCR_MapCompassUI = {{Link|enfusion://ScriptEditor/scripts/Game/Map/ComponentsUI/SCR_MapCompassUI.c;2|SCR_MapCompassUI}} | SCR_MapCompassUIDeploy = {{Link|enfusion://ScriptEditor/scripts/Game/Map/ComponentsUI/SCR_MapCompassUIDeploy.c;2|SCR_MapCompassUIDeploy}} | SCR_MapConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapConfig.c;3|SCR_MapConfig}} | SCR_MapConfigComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Components/SCR_MapConfigComponent.c;7|SCR_MapConfigComponent}} | SCR_MapConfigComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Components/SCR_MapConfigComponent.c;1|SCR_MapConfigComponentClass}} | SCR_MapConstants = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapConstants.c;2|SCR_MapConstants}} | SCR_MapCursorInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Modules/SCR_MapCursorModule.c;3|SCR_MapCursorInfo}} | SCR_MapCursorModule = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Modules/SCR_MapCursorModule.c;38|SCR_MapCursorModule}} | SCR_MapDebugUI = {{Link|enfusion://ScriptEditor/scripts/Game/Map/ComponentsUI/SCR_MapDebugUI.c;1|SCR_MapDebugUI}} | SCR_MapDescriptorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Components/SCR_MapDescriptorComponent.c;5|SCR_MapDescriptorComponent}} | SCR_MapDescriptorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Components/SCR_MapDescriptorComponent.c;1|SCR_MapDescriptorComponentClass}} | SCR_MapDescriptorDefaults = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapDescriptorDefaults.c;2|SCR_MapDescriptorDefaults}} | SCR_MapDescriptorManualCameraComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_MapDescriptorManualCameraComponent.c;4|SCR_MapDescriptorManualCameraComponent}} | SCR_MapDescriptorVisibilityBase = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapConfig.c;116|SCR_MapDescriptorVisibilityBase}} | SCR_MapDotCircleHandler = {{Link|enfusion://ScriptEditor/scripts/Game/UI/AirSupport/SCR_MapDotCircleHandler.c;1|SCR_MapDotCircleHandler}} | SCR_MapDrawingUI = {{Link|enfusion://ScriptEditor/scripts/Game/Map/ComponentsUI/SCR_MapDrawingUI.c;199|SCR_MapDrawingUI}} | SCR_MapEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_MapEditorComponent.c;9|SCR_MapEditorComponent}} | SCR_MapEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_MapEditorComponent.c;1|SCR_MapEditorComponentClass}} | SCR_MapEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_MapEditorUIComponent.c;1|SCR_MapEditorUIComponent}} | SCR_MapElementMoveComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Map/ComponentsUI/SCR_MapToolInteractionUI.c;5|SCR_MapElementMoveComponent}} | SCR_MapEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapEntity.c;19|SCR_MapEntity}} | SCR_MapEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapEntity.c;1|SCR_MapEntityClass}} | SCR_MapFactionCommanderRadialMenu = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapFactionCommanderRadialMenu.c;2|SCR_MapFactionCommanderRadialMenu}} | SCR_MapGadgetComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_MapGadgetComponent.c;7|SCR_MapGadgetComponent}} | SCR_MapGadgetComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_MapGadgetComponent.c;1|SCR_MapGadgetComponentClass}} | SCR_MapGridTooltipDetail = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_GridTooltipDetail.c;1|SCR_MapGridTooltipDetail}} | SCR_MapHelper = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_MapHelper.c;378|SCR_MapHelper}} | SCR_MapHelperT = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_MapHelper.c;4|SCR_MapHelperT}} | SCR_MapHintCondition = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Hints/HintConditions/SCR_MapHintCondition.c;1|SCR_MapHintCondition}} | SCR_MapJournalUI = {{Link|enfusion://ScriptEditor/scripts/Game/Map/ComponentsUI/SCR_MapJournalUI.c;2|SCR_MapJournalUI}} | SCR_MapJournalUIButton = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Tasks/SCR_MapJournalUIButton.c;1|SCR_MapJournalUIButton}} | SCR_MapLayersBase = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapConfig.c;107|SCR_MapLayersBase}} | SCR_MapLightConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Map/ComponentsUI/SCR_MapLightUI.c;9|SCR_MapLightConfig}} | SCR_MapLightMode = {{Link|enfusion://ScriptEditor/scripts/Game/Map/ComponentsUI/SCR_MapLightUI.c;16|SCR_MapLightMode}} | SCR_MapLightUI = {{Link|enfusion://ScriptEditor/scripts/Game/Map/ComponentsUI/SCR_MapLightUI.c;36|SCR_MapLightUI}} | SCR_MapLocationQuadHint = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/SCR_MapLocator.c;159|SCR_MapLocationQuadHint}} | SCR_MapLocator = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/SCR_MapLocator.c;5|SCR_MapLocator}} | SCR_MapLocatorClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/SCR_MapLocator.c;1|SCR_MapLocatorClass}} | SCR_MapLogisticUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Conflict/SCR_MapLogisticUI.c;1|SCR_MapLogisticUI}} | SCR_MapMarkerBase = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/Objects/SCR_MapMarkerBase.c;3|SCR_MapMarkerBase}} | SCR_MapMarkerConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/Config/SCR_MapMarkerConfig.c;20|SCR_MapMarkerConfig}} | SCR_MapMarkerDotCircle = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/Objects/SCR_MapMarkerDotCircle.c;5|SCR_MapMarkerDotCircle}} | SCR_MapMarkerDotCircleClass = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/Objects/SCR_MapMarkerDotCircle.c;1|SCR_MapMarkerDotCircleClass}} | SCR_MapMarkerDynamicWComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/SCR_MapMarkerDynamicWComponent.c;2|SCR_MapMarkerDynamicWComponent}} | SCR_MapMarkerEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/Objects/SCR_MapMarkerEntity.c;18|SCR_MapMarkerEntity}} | SCR_MapMarkerEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/Objects/SCR_MapMarkerEntity.c;2|SCR_MapMarkerEntityClass}} | SCR_MapMarkerEntryConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/Config/SCR_MapMarkerConfig.c;52|SCR_MapMarkerEntryConfig}} | SCR_MapMarkerEntryDotCircle = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/Config/SCR_MapMarkerEntryDotCircle.c;1|SCR_MapMarkerEntryDotCircle}} | SCR_MapMarkerEntryDynamic = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/Config/SCR_MapMarkerEntryDynamic.c;3|SCR_MapMarkerEntryDynamic}} | SCR_MapMarkerEntryDynamicExample = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/Config/SCR_MapMarkerEntryDynamicExample.c;4|SCR_MapMarkerEntryDynamicExample}} | SCR_MapMarkerEntryImageText = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/Config/SCR_MapMarkerEntryImageText.c;3|SCR_MapMarkerEntryImageText}} | SCR_MapMarkerEntryMilitary = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/Config/SCR_MapMarkerEntryMilitary.c;3|SCR_MapMarkerEntryMilitary}} | SCR_MapMarkerEntryPlaced = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/Config/SCR_MapMarkerEntryPlaced.c;3|SCR_MapMarkerEntryPlaced}} | SCR_MapMarkerEntryRecon = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/Config/ReconMarker/SCR_MapMarkerEntryRecon.c;2|SCR_MapMarkerEntryRecon}} | SCR_MapMarkerEntrySquadLeader = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/Config/SCR_MapMarkerEntrySquadLeader.c;3|SCR_MapMarkerEntrySquadLeader}} | SCR_MapMarkerEntrySquadMember = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/Config/SCR_MapMarkerEntrySquadMember.c;2|SCR_MapMarkerEntrySquadMember}} | SCR_MapMarkerFactionTitle = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/Config/SCR_MapMarkerEntryMilitary.c;321|SCR_MapMarkerFactionTitle}} | SCR_MapMarkerIconEntryTitle = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/Config/SCR_MapMarkerEntryPlaced.c;214|SCR_MapMarkerIconEntryTitle}} | SCR_MapMarkerManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/SCR_MapMarkerManagerComponent.c;8|SCR_MapMarkerManagerComponent}} | SCR_MapMarkerManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/SCR_MapMarkerManagerComponent.c;1|SCR_MapMarkerManagerComponentClass}} | SCR_MapMarkerManagerSystem = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/SCR_MapMarkerManagerSystem.c;2|SCR_MapMarkerManagerSystem}} | SCR_MapMarkerMenuCategory = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/SCR_MapMarkerMenuCategory.c;3|SCR_MapMarkerMenuCategory}} | SCR_MapMarkerMenuEntry = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/SCR_MapMarkerMenuEntry.c;3|SCR_MapMarkerMenuEntry}} | SCR_MapMarkerMilitaryDimensionTitle = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/Config/SCR_MapMarkerEntryMilitary.c;219|SCR_MapMarkerMilitaryDimensionTitle}} | SCR_MapMarkerMilitaryTypeTitle = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/Config/SCR_MapMarkerEntryMilitary.c;259|SCR_MapMarkerMilitaryTypeTitle}} | SCR_MapMarkerSimpleTitle = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/Config/SCR_MapMarkerEntryImageText.c;91|SCR_MapMarkerSimpleTitle}} | SCR_MapMarkerSquadLeader = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/Objects/SCR_MapMarkerSquadLeader.c;26|SCR_MapMarkerSquadLeader}} | SCR_MapMarkerSquadLeaderClass = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/Objects/SCR_MapMarkerSquadLeader.c;2|SCR_MapMarkerSquadLeaderClass}} | SCR_MapMarkerSquadLeaderComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/SCR_MapMarkerSquadLeaderComponent.c;1|SCR_MapMarkerSquadLeaderComponent}} | SCR_MapMarkerSquadMember = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/Objects/SCR_MapMarkerSquadMember.c;7|SCR_MapMarkerSquadMember}} | SCR_MapMarkerSquadMemberClass = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/Objects/SCR_MapMarkerSquadMember.c;1|SCR_MapMarkerSquadMemberClass}} | SCR_MapMarkerSquadMemberComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/SCR_MapMarkerSquadMemberComponent.c;1|SCR_MapMarkerSquadMemberComponent}} | SCR_MapMarkersUI = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/SCR_MapMarkersUI.c;6|SCR_MapMarkersUI}} | SCR_MapMarkerSyncComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/SCR_MapMarkerSyncComponent.c;8|SCR_MapMarkerSyncComponent}} | SCR_MapMarkerSyncComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/SCR_MapMarkerSyncComponent.c;1|SCR_MapMarkerSyncComponentClass}} | SCR_MapMarkerTitle = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/Config/SCR_MapMarkerEntryPlaced.c;199|SCR_MapMarkerTitle}} | SCR_MapMarkerWidgetComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/SCR_MapMarkerWidgetComponent.c;3|SCR_MapMarkerWidgetComponent}} | SCR_MapMenuCommandingEntry = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SelectionMenu/Entries/SCR_MapMenuCommandingEntry.c;2|SCR_MapMenuCommandingEntry}} | SCR_MapMenuUI = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapMenuUI.c;3|SCR_MapMenuUI}} | SCR_MapModuleBase = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Modules/SCR_MapModuleBase.c;3|SCR_MapModuleBase}} | SCR_MapPropsBase = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapConfig.c;98|SCR_MapPropsBase}} | SCR_MapPropsConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapPropsConfig.c;3|SCR_MapPropsConfig}} | SCR_MapRadialDisplay = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SelectionMenu/SCR_MapRadialDisplay.c;3|SCR_MapRadialDisplay}} | SCR_MapRadialUI = {{Link|enfusion://ScriptEditor/scripts/Game/Map/ComponentsUI/SCR_MapRadialUI.c;13|SCR_MapRadialUI}} | SCR_MapRTWBaseUI = {{Link|enfusion://ScriptEditor/scripts/Game/Map/ComponentsUI/SCR_MapRTWBaseUI.c;12|SCR_MapRTWBaseUI}} | SCR_MapRulerUI = {{Link|enfusion://ScriptEditor/scripts/Game/Map/ComponentsUI/SCR_MapRulerUI.c;1|SCR_MapRulerUI}} | SCR_MapSelectionModule = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Modules/SCR_MapSelectionModule.c;2|SCR_MapSelectionModule}} | SCR_MapSuppliesTransportSystemUI = {{Link|enfusion://ScriptEditor/scripts/Game/Map/ComponentsUI/SCR_MapSuppliesTransportSystemUI.c;1|SCR_MapSuppliesTransportSystemUI}} | SCR_MapTaskListUI = {{Link|enfusion://ScriptEditor/scripts/Game/Map/ComponentsUI/SCR_MapTaskListUI.c;1|SCR_MapTaskListUI}} | SCR_MapToolbarAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ToolbarActions/SCR_MapToolbarAction.c;1|SCR_MapToolbarAction}} | SCR_MapToolEntry = {{Link|enfusion://ScriptEditor/scripts/Game/Map/ComponentsUI/SCR_MapToolMenuUI.c;2|SCR_MapToolEntry}} | SCR_MapToolInteractionUI = {{Link|enfusion://ScriptEditor/scripts/Game/Map/ComponentsUI/SCR_MapToolInteractionUI.c;24|SCR_MapToolInteractionUI}} | SCR_MapToolMenuUI = {{Link|enfusion://ScriptEditor/scripts/Game/Map/ComponentsUI/SCR_MapToolMenuUI.c;194|SCR_MapToolMenuUI}} | SCR_MapUIBaseComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Map/ComponentsUI/SCR_MapUIBaseComponent.c;2|SCR_MapUIBaseComponent}} | SCR_MapUIElement = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Conflict/SCR_MapUIElement.c;12|SCR_MapUIElement}} | SCR_MapUIElementContainer = {{Link|enfusion://ScriptEditor/scripts/Game/Map/ComponentsUI/SCR_MapUIElementContainer.c;1|SCR_MapUIElementContainer}} | SCR_MapUISpawnPoint = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Conflict/SCR_MapUISpawnPoint.c;1|SCR_MapUISpawnPoint}} | SCR_MapWatchUI = {{Link|enfusion://ScriptEditor/scripts/Game/Map/ComponentsUI/SCR_MapWatchUI.c;1|SCR_MapWatchUI}} | SCR_MapWatchUIDeploy = {{Link|enfusion://ScriptEditor/scripts/Game/Map/ComponentsUI/SCR_MapWatchUIDeploy.c;2|SCR_MapWatchUIDeploy}} | SCR_MarkerColorEntry = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/Config/SCR_MapMarkerEntryPlaced.c;136|SCR_MarkerColorEntry}} | SCR_MarkerIconCategory = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/Config/SCR_MapMarkerEntryPlaced.c;162|SCR_MarkerIconCategory}} | SCR_MarkerIconEntry = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/Config/SCR_MapMarkerEntryPlaced.c;174|SCR_MarkerIconEntry}} | SCR_MarkerMilitaryDimension = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/Config/SCR_MapMarkerEntryMilitary.c;196|SCR_MarkerMilitaryDimension}} | SCR_MarkerMilitaryFactionEntry = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/Config/SCR_MapMarkerEntryMilitary.c;276|SCR_MarkerMilitaryFactionEntry}} | SCR_MarkerMilitaryType = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/Config/SCR_MapMarkerEntryMilitary.c;236|SCR_MarkerMilitaryType}} | SCR_MarkerSimpleConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/Config/SCR_MapMarkerEntryImageText.c;42|SCR_MarkerSimpleConfig}} | SCR_MarkShapesEditorOnlyPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_MarkShapesEditorOnlyPlugin.c;2|SCR_MarkShapesEditorOnlyPlugin}} | SCR_MassResponseIndexPair = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_DestructionIndicesAssignTool.c;1235|SCR_MassResponseIndexPair}} | SCR_Math = {{Link|enfusion://ScriptEditor/scripts/Game/Global/SCR_Math.c;1|SCR_Math}} | SCR_Math2D = {{Link|enfusion://ScriptEditor/scripts/Game/Global/SCR_Math2D.c;4|SCR_Math2D}} | SCR_Math3D = {{Link|enfusion://ScriptEditor/scripts/Game/Global/SCR_Math3D.c;2|SCR_Math3D}} | SCR_Matrix = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_Matrix.c;2|SCR_Matrix}} | SCR_MatrixRow = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_MatrixRow.c;2|SCR_MatrixRow}} | SCR_MedicalItemsCountCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Character/SCR_MedicalItemsCountCondition.c;3|SCR_MedicalItemsCountCondition}} | SCR_MeleeComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Character/Melee/SCR_MeleeComponent.c;24|SCR_MeleeComponent}} | SCR_MeleeComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Character/Melee/SCR_MeleeComponent.c;1|SCR_MeleeComponentClass}} | SCR_MeleeDamageEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/DamageEffects/DamageEffectSources/SCR_MeleeDamageEffect.c;1|SCR_MeleeDamageEffect}} | SCR_MeleeHitDataClass = {{Link|enfusion://ScriptEditor/scripts/Game/Character/Melee/SCR_MeleeComponent.c;6|SCR_MeleeHitDataClass}} | SCR_MeleeWeaponProperties = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Melee/SCR_MeleeWeaponProperties.c;7|SCR_MeleeWeaponProperties}} | SCR_MeleeWeaponPropertiesClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Melee/SCR_MeleeWeaponProperties.c;1|SCR_MeleeWeaponPropertiesClass}} | SCR_MemoryNetworkedStat = {{Link|enfusion://ScriptEditor/scripts/Game/Network/NetworkedStats/Stats/SCR_MemoryNetworkedStat.c;1|SCR_MemoryNetworkedStat}} | SCR_MenuActionPreset = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_MenuActionsComponent.c;220|SCR_MenuActionPreset}} | SCR_MenuActionsComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_MenuActionsComponent.c;9|SCR_MenuActionsComponent}} | SCR_MenuEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_MenuEditorComponent.c;8|SCR_MenuEditorComponent}} | SCR_MenuEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_MenuEditorComponent.c;1|SCR_MenuEditorComponentClass}} | SCR_MenuEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_MenuEditorUIComponent.c;1|SCR_MenuEditorUIComponent}} | SCR_MenuHelper = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SCR_MenuHelper.c;18|SCR_MenuHelper}} | SCR_MenuInteractedData = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/ApplicationData/SCR_AnalyticsApplicationData.c;123|SCR_MenuInteractedData}} | SCR_MenuLayoutEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_MenuLayoutEditorComponent.c;15|SCR_MenuLayoutEditorComponent}} | SCR_MenuLayoutEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_MenuLayoutEditorComponent.c;1|SCR_MenuLayoutEditorComponentClass}} | SCR_MenuLoadingComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/MainMenuHandling/SCR_MenuLoadingComponent.c;8|SCR_MenuLoadingComponent}} | SCR_MenuMainTileComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/MainMenu/SCR_MenuMainTileComponent.c;1|SCR_MenuMainTileComponent}} | SCR_MenuNavigationHeaderComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/MainMenu/SCR_MenuNavigationHeaderComponent.c;14|SCR_MenuNavigationHeaderComponent}} | SCR_MenuNavigationItem = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/MainMenu/SCR_MenuNavigationHeaderComponent.c;1|SCR_MenuNavigationItem}} | SCR_MenuNavigationItemComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/MainMenu/SCR_MenuNavigationItemComponent.c;1|SCR_MenuNavigationItemComponent}} | SCR_MenuOverlayEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_MenuOverlayEditorAttribute.c;1|SCR_MenuOverlayEditorAttribute}} | SCR_MenuOverlaysEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_MenuOverlaysEditorComponent.c;16|SCR_MenuOverlaysEditorComponent}} | SCR_MenuOverlaysEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_MenuOverlaysEditorComponent.c;1|SCR_MenuOverlaysEditorComponentClass}} | SCR_MenuSpawnLogic = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/Logic/SCR_MenuSpawnLogic.c;1|SCR_MenuSpawnLogic}} | SCR_MenuTileComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/MainMenu/SCR_MenuTileComponent.c;1|SCR_MenuTileComponent}} | SCR_MenuTimeSpentData = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/ApplicationData/SCR_AnalyticsApplicationData.c;101|SCR_MenuTimeSpentData}} | SCR_MenuToolsLib = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/MainMenuHandling/SCR_MenuToolsLib.c;5|SCR_MenuToolsLib}} | SCR_MessageDialogContent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/Dialogs/Contents/SCR_MessageDialogContent.c;4|SCR_MessageDialogContent}} | SCR_MilitaryBaseAreaMeshComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AreaMesh/SCR_MilitaryBaseAreaMeshComponent.c;6|SCR_MilitaryBaseAreaMeshComponent}} | SCR_MilitaryBaseAreaMeshComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AreaMesh/SCR_MilitaryBaseAreaMeshComponent.c;1|SCR_MilitaryBaseAreaMeshComponentClass}} | SCR_MilitaryBaseCallsign = {{Link|enfusion://ScriptEditor/scripts/Game/Faction/SCR_Faction.c;879|SCR_MilitaryBaseCallsign}} | SCR_MilitaryBaseComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Locations/SCR_MilitaryBaseComponent.c;18|SCR_MilitaryBaseComponent}} | SCR_MilitaryBaseComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Locations/SCR_MilitaryBaseComponent.c;5|SCR_MilitaryBaseComponentClass}} | SCR_MilitaryBaseLogicComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Components/SCR_MilitaryBaseLogicComponent.c;5|SCR_MilitaryBaseLogicComponent}} | SCR_MilitaryBaseLogicComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Components/SCR_MilitaryBaseLogicComponent.c;1|SCR_MilitaryBaseLogicComponentClass}} | SCR_MilitaryBaseMapDescriptorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Locations/SCR_MilitaryBaseMapDescriptorComponent.c;5|SCR_MilitaryBaseMapDescriptorComponent}} | SCR_MilitaryBaseMapDescriptorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Locations/SCR_MilitaryBaseMapDescriptorComponent.c;1|SCR_MilitaryBaseMapDescriptorComponentClass}} | SCR_MilitaryBaseSystem = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/SCR_MilitaryBaseSystem.c;17|SCR_MilitaryBaseSystem}} | SCR_MilitaryReconMarkerEntry = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Markers/Config/ReconMarker/SCR_MilitaryReconMarkerEntry.c;1|SCR_MilitaryReconMarkerEntry}} | SCR_MilitarySupplyAllocationConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_MilitarySupplyAllocationConfig.c;1|SCR_MilitarySupplyAllocationConfig}} | SCR_MilitarySupplyAllocationRankInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_MilitarySupplyAllocationConfig.c;51|SCR_MilitarySupplyAllocationRankInfo}} | SCR_MilitarySymbol = {{Link|enfusion://ScriptEditor/scripts/Game/GroupIdentity/SCR_MilitarySymbol.c;1|SCR_MilitarySymbol}} | SCR_MilitarySymbol_QuadAmplifier = {{Link|enfusion://ScriptEditor/scripts/Game/GroupIdentity/SCR_MilitarySymbolConfig.c;201|SCR_MilitarySymbol_QuadAmplifier}} | SCR_MilitarySymbol_QuadBase = {{Link|enfusion://ScriptEditor/scripts/Game/GroupIdentity/SCR_MilitarySymbolConfig.c;177|SCR_MilitarySymbol_QuadBase}} | SCR_MilitarySymbol_QuadIcon = {{Link|enfusion://ScriptEditor/scripts/Game/GroupIdentity/SCR_MilitarySymbolConfig.c;190|SCR_MilitarySymbol_QuadIcon}} | SCR_MilitarySymbol_TextureAmplifier = {{Link|enfusion://ScriptEditor/scripts/Game/GroupIdentity/SCR_MilitarySymbolConfig.c;236|SCR_MilitarySymbol_TextureAmplifier}} | SCR_MilitarySymbol_TextureBase = {{Link|enfusion://ScriptEditor/scripts/Game/GroupIdentity/SCR_MilitarySymbolConfig.c;212|SCR_MilitarySymbol_TextureBase}} | SCR_MilitarySymbol_TextureIcon = {{Link|enfusion://ScriptEditor/scripts/Game/GroupIdentity/SCR_MilitarySymbolConfig.c;225|SCR_MilitarySymbol_TextureIcon}} | SCR_MilitarySymbolArea = {{Link|enfusion://ScriptEditor/scripts/Game/GroupIdentity/SCR_MilitarySymbolConfig.c;54|SCR_MilitarySymbolArea}} | SCR_MilitarySymbolAreaConflict = {{Link|enfusion://ScriptEditor/scripts/Game/GroupIdentity/SCR_MilitarySymbolConfig.c;140|SCR_MilitarySymbolAreaConflict}} | SCR_MilitarySymbolAreaImageSet = {{Link|enfusion://ScriptEditor/scripts/Game/GroupIdentity/SCR_MilitarySymbolConfig.c;96|SCR_MilitarySymbolAreaImageSet}} | SCR_MilitarySymbolAreaTextures = {{Link|enfusion://ScriptEditor/scripts/Game/GroupIdentity/SCR_MilitarySymbolConfig.c;65|SCR_MilitarySymbolAreaTextures}} | SCR_MilitarySymbolConfig = {{Link|enfusion://ScriptEditor/scripts/Game/GroupIdentity/SCR_MilitarySymbolConfig.c;1|SCR_MilitarySymbolConfig}} | SCR_MilitarySymbolLayout = {{Link|enfusion://ScriptEditor/scripts/Game/GroupIdentity/SCR_MilitarySymbolConfig.c;20|SCR_MilitarySymbolLayout}} | SCR_MilitarySymbolRuleSet = {{Link|enfusion://ScriptEditor/scripts/Game/GroupIdentity/SCR_MilitarySymbolRuleSet.c;1|SCR_MilitarySymbolRuleSet}} | SCR_MilitarySymbolUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GroupIdentity/SCR_MilitarySymbolUIComponent.c;1|SCR_MilitarySymbolUIComponent}} | SCR_MinBaseDistanceConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_MinBaseDistanceConfig.c;1|SCR_MinBaseDistanceConfig}} | SCR_MinBaseDistanceInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_MinBaseDistanceConfig.c;22|SCR_MinBaseDistanceInfo}} | SCR_MineAddFlagAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_MineAddFlagAction.c;2|SCR_MineAddFlagAction}} | SCR_MineAnimationComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Mines/SCR_MineAnimationComponent.c;46|SCR_MineAnimationComponent}} | SCR_MineAnimationComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Mines/SCR_MineAnimationComponent.c;1|SCR_MineAnimationComponentClass}} | SCR_MineAwarenessComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Mines/SCR_MineAwarenessComponent.c;12|SCR_MineAwarenessComponent}} | SCR_MineAwarenessComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Mines/SCR_MineAwarenessComponent.c;1|SCR_MineAwarenessComponentClass}} | SCR_MineDamageManager = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Mines/SCR_MineDamageManager.c;6|SCR_MineDamageManager}} | SCR_MineDamageManagerClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Mines/SCR_MineDamageManager.c;1|SCR_MineDamageManagerClass}} | SCR_MineDetectionData = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Mines/SCR_MineAwarenessComponent.c;6|SCR_MineDetectionData}} | SCR_MineDistanceParticleEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Explosives/SCR_MineDistanceParticleEffect.c;1|SCR_MineDistanceParticleEffect}} | SCR_MineEquipHolsterAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_MineEquipWeaponAction.c;18|SCR_MineEquipHolsterAction}} | SCR_MineEquipWeaponAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_MineEquipWeaponAction.c;2|SCR_MineEquipWeaponAction}} | SCR_MineFlagComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Mines/SCR_MineFlagComponent.c;6|SCR_MineFlagComponent}} | SCR_MineFlagComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Mines/SCR_MineFlagComponent.c;1|SCR_MineFlagComponentClass}} | SCR_MineFlagPickUpAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_MineFlagPickUpAction.c;2|SCR_MineFlagPickUpAction}} | SCR_MineHitZone = {{Link|enfusion://ScriptEditor/scripts/Game/HitZone/SCR_MineHitZone.c;2|SCR_MineHitZone}} | SCR_MineInventoryItemComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/Items/SCR_MineInventoryItemComponent.c;6|SCR_MineInventoryItemComponent}} | SCR_MineInventoryItemComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/Items/SCR_MineInventoryItemComponent.c;1|SCR_MineInventoryItemComponentClass}} | SCR_MinePickUpItemAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_MinePickUpItemAction.c;2|SCR_MinePickUpItemAction}} | SCR_MineWeaponComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/SCR_MineWeaponComponent.c;6|SCR_MineWeaponComponent}} | SCR_MineWeaponComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/SCR_MineWeaponComponent.c;1|SCR_MineWeaponComponentClass}} | SCR_MineWeaponComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/Weapon/SCR_MineWeaponComponentSerializer.c;1|SCR_MineWeaponComponentSerializer}} | SCR_MirrorLinkStorageToParent = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/LinkedStorages/SCR_MirrorLinkStorageToParent.c;3|SCR_MirrorLinkStorageToParent}} | SCR_MissionHeader = {{Link|enfusion://ScriptEditor/scripts/Game/Mission/SCR_MissionHeader.c;1|SCR_MissionHeader}} | SCR_MissionHeaderCampaign = {{Link|enfusion://ScriptEditor/scripts/Game/Mission/SCR_MissionHeaderCampaign.c;1|SCR_MissionHeaderCampaign}} | SCR_MissionHeaderCombatOps = {{Link|enfusion://ScriptEditor/scripts/Game/Mission/SCR_MissionHeaderCombatOps.c;1|SCR_MissionHeaderCombatOps}} | SCR_MissionHeaderScenarioFramework = {{Link|enfusion://ScriptEditor/scripts/Game/Mission/SCR_MissionHeaderScenarioFramework.c;1|SCR_MissionHeaderScenarioFramework}} | SCR_MissionHeaderSequence = {{Link|enfusion://ScriptEditor/scripts/Game/Mission/SCR_MissionHeaderSequence.c;1|SCR_MissionHeaderSequence}} | SCR_MissionMetaData = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/MainMenuUI.c;1|SCR_MissionMetaData}} | SCR_ModdedScenarioComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_ModdedScenarioComponent.c;2|SCR_ModdedScenarioComponent}} | SCR_ModDetailsAdditionalInfoDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/Common/Dialogs/SCR_ModDetailsAdditionalInfoDialog.c;1|SCR_ModDetailsAdditionalInfoDialog}} | SCR_ModDetailsAdditionalInfoDialogContentWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/Common/Dialogs/SCR_ModDetailsAdditionalInfoDialogContentWidgets.c;3|SCR_ModDetailsAdditionalInfoDialogContentWidgets}} | SCR_ModDetailsSuperMenuComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/DetailsMenu/SCR_ModDetailsSuperMenuComponent.c;8|SCR_ModDetailsSuperMenuComponent}} | SCR_ModeInfoBarEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Toolbar/SCR_ModeInfoBarEditorUIComponent.c;1|SCR_ModeInfoBarEditorUIComponent}} | SCR_ModelAutotestCamera = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/ModelAutotestEntity.c;8|SCR_ModelAutotestCamera}} | SCR_ModelAutotestEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/ModelAutotestEntity.c;171|SCR_ModelAutotestEntity}} | SCR_ModelAutotestEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/ModelAutotestEntity.c;2|SCR_ModelAutotestEntityClass}} | SCR_ModEntryComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/Deprecated/SCR_ModEntryComponent.c;2|SCR_ModEntryComponent}} | SCR_ModeOverrideEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_ModesOverrideEditorAttribute.c;1|SCR_ModeOverrideEditorAttribute}} | SCR_ModesEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_ModesEditorAttribute.c;4|SCR_ModesEditorAttribute}} | SCR_ModesEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_ModesEditorUIComponent.c;3|SCR_ModesEditorUIComponent}} | SCR_ModHandlerLib = {{Link|enfusion://ScriptEditor/scripts/Game/Global/SCR_ModsHandlerLib.c;7|SCR_ModHandlerLib}} | SCR_ModReportDialogComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/Dialogs/SCR_ModReportDialogComponent.c;1|SCR_ModReportDialogComponent}} | SCR_ModularButtonComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/ButtonComponents/ModularButton/SCR_ModularButtonComponent.c;32|SCR_ModularButtonComponent}} | SCR_MoonPhaseInfo = {{Link|enfusion://ScriptEditor/scripts/GameCode/World/TimeAndWeatherManagerEntity.c;1127|SCR_MoonPhaseInfo}} | SCR_MoonPhaseUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_MoonPhaseUIInfo.c;1|SCR_MoonPhaseUIInfo}} | SCR_MorphineDamageEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/DamageEffects/CharacterDamageEffects/SCR_MorphineDamageEffect.c;1|SCR_MorphineDamageEffect}} | SCR_MorphineUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_MorphineUserAction.c;1|SCR_MorphineUserAction}} | SCR_MortarAdvancedAimingEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_MortarAdvancedAimingEditorAttribute.c;1|SCR_MortarAdvancedAimingEditorAttribute}} | SCR_MortarAzimuthDisplay = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/MortarInfo/SCR_MortarAzimuthDisplay.c;1|SCR_MortarAzimuthDisplay}} | SCR_MortarElevationDisplay = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/MortarInfo/SCR_MortarElevationDisplay.c;1|SCR_MortarElevationDisplay}} | SCR_MortarHasChargeConfigsCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Weapon/SCR_MortarHasChargeConfigsCondition.c;1|SCR_MortarHasChargeConfigsCondition}} | SCR_MortarHasMoreBallisticDataCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Weapon/SCR_MortarHasMoreBallisticDataCondition.c;1|SCR_MortarHasMoreBallisticDataCondition}} | SCR_MortarInfo = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/MortarInfo/SCR_MortarInfo.c;3|SCR_MortarInfo}} | SCR_MortarInfoWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/MortarInfo/SCR_MortarInfoWidgets.c;3|SCR_MortarInfoWidgets}} | SCR_MortarMuzzleComponent = {{Link|enfusion://ScriptEditor/scripts/GameCode/Components/SCR_MortarMuzzleComponent.c;5|SCR_MortarMuzzleComponent}} | SCR_MortarMuzzleComponentClass = {{Link|enfusion://ScriptEditor/scripts/GameCode/Components/SCR_MortarMuzzleComponent.c;1|SCR_MortarMuzzleComponentClass}} | SCR_MortarShellGadgetComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_MortarShellGadgetComponent.c;6|SCR_MortarShellGadgetComponent}} | SCR_MortarShellGadgetComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_MortarShellGadgetComponent.c;1|SCR_MortarShellGadgetComponentClass}} | SCR_MortarShootAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_MortarShootAction.c;1|SCR_MortarShootAction}} | SCR_MotionControlCalibrationProcessDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/Dialogs/SCR_MotionControlCalibrationPromptDialog.c;27|SCR_MotionControlCalibrationProcessDialog}} | SCR_MotionControlCalibrationPromptDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/Dialogs/SCR_MotionControlCalibrationPromptDialog.c;1|SCR_MotionControlCalibrationPromptDialog}} | SCR_MotorExhaustEffectGeneralComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_MotorExhaustEffectGeneralComponent.c;6|SCR_MotorExhaustEffectGeneralComponent}} | SCR_MotorExhaustEffectGeneralComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_MotorExhaustEffectGeneralComponent.c;1|SCR_MotorExhaustEffectGeneralComponentClass}} | SCR_MouseAreaEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_MouseAreaEditorUIComponent.c;3|SCR_MouseAreaEditorUIComponent}} | SCR_MouseMoveManualCameraComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_MouseMoveManualCameraComponent.c;4|SCR_MouseMoveManualCameraComponent}} | SCR_MoveData = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/SCR_MoveData.c;1|SCR_MoveData}} | SCR_MoveInFormationContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/Placeholder/SCR_MoveInFormationContextAction.c;1|SCR_MoveInFormationContextAction}} | SCR_MoveManualCameraComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_MoveManualCameraComponent.c;4|SCR_MoveManualCameraComponent}} | SCR_MovementInertiaManualCameraComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_MovementInertiaManualCameraComponent.c;4|SCR_MovementInertiaManualCameraComponent}} | SCR_MoveRelativeManualCameraComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_MoveRelativeManualCameraComponent.c;4|SCR_MoveRelativeManualCameraComponent}} | SCR_MoveTask = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_MoveTask.c;6|SCR_MoveTask}} | SCR_MoveTaskClass = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_MoveTask.c;1|SCR_MoveTaskClass}} | SCR_MoveToCursorManualCameraComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_MoveToCursorManualCameraComponent.c;4|SCR_MoveToCursorManualCameraComponent}} | SCR_MoveToFlightAltitudeContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/Placeholder/SCR_MoveToFlightAltitudeContextAction.c;1|SCR_MoveToFlightAltitudeContextAction}} | SCR_MoveToRootContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_MoveToRootContextAction.c;1|SCR_MoveToRootContextAction}} | SCR_MoveToSeatPositionContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/Placeholder/SCR_MoveToSeatPositionContextAction.c;1|SCR_MoveToSeatPositionContextAction}} | SCR_MovingSoundSourceEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/SCR_MovingSoundSourceManagerEntity.c;6|SCR_MovingSoundSourceEntity}} | SCR_MovingSoundSourceEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/SCR_MovingSoundSourceManagerEntity.c;1|SCR_MovingSoundSourceEntityClass}} | SCR_MPDestructionManager = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_MPDestructionManager.c;103|SCR_MPDestructionManager}} | SCR_MPDestructionManagerClass = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_MPDestructionManager.c;3|SCR_MPDestructionManagerClass}} | SCR_MultiExecuteListArsenalRefundEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/ArsenalRefundEffects/SCR_MultiExecuteListArsenalRefundEffect.c;2|SCR_MultiExecuteListArsenalRefundEffect}} | SCR_MultiOccupantVehcileTooltipDetail = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_MultiOccupantVehicleTooltipDetail.c;1|SCR_MultiOccupantVehcileTooltipDetail}} | SCR_MultiPartDeployableItemComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_MultiPartDeployableItemComponent.c;182|SCR_MultiPartDeployableItemComponent}} | SCR_MultiPartDeployableItemComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_MultiPartDeployableItemComponent.c;1|SCR_MultiPartDeployableItemComponentClass}} | SCR_MultiPhaseDestructionSoundlessPrefabSearchPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/SCR_MultiPhaseDestructionSoundlessPrefabSearchPlugin.c;2|SCR_MultiPhaseDestructionSoundlessPrefabSearchPlugin}} | SCR_MultiplayerMenuComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/SCR_MultiplayerMenuComponent.c;2|SCR_MultiplayerMenuComponent}} | SCR_MultipleStatesButtonComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_MultipleStatesButtonComponent.c;6|SCR_MultipleStatesButtonComponent}} | SCR_MultiTextTooltipUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/SCR_MultiTextTooltipUIComponent.c;1|SCR_MultiTextTooltipUIComponent}} | SCR_MultiWeaponTurretDataHolder = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/WeaponInfo/SCR_WeaponInfo_MultiWeaponTurret.c;966|SCR_MultiWeaponTurretDataHolder}} | SCR_MusicCinematicTrack = {{Link|enfusion://ScriptEditor/scripts/Game/Cinematics/SCR_MusicCinematicTrack.c;1|SCR_MusicCinematicTrack}} | SCR_MusicEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_MusicEditorComponent.c;5|SCR_MusicEditorComponent}} | SCR_MusicEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_MusicEditorComponent.c;1|SCR_MusicEditorComponentClass}} | SCR_MuzzleBlastDamageEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/DamageEffects/DamageEffectSources/SCR_MuzzleBlastDamageEffect.c;1|SCR_MuzzleBlastDamageEffect}} | SCR_MuzzleEffectComponent = {{Link|enfusion://ScriptEditor/scripts/GameCode/Effects/SCR_MuzzleEffectComponent.c;9|SCR_MuzzleEffectComponent}} | SCR_MuzzleEffectComponentClass = {{Link|enfusion://ScriptEditor/scripts/GameCode/Effects/SCR_MuzzleEffectComponent.c;1|SCR_MuzzleEffectComponentClass}} | SCR_MuzzleInMagComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Weapons/SCR_MuzzleInMagComponent.c;6|SCR_MuzzleInMagComponent}} | SCR_MuzzleInMagComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Weapons/SCR_MuzzleInMagComponent.c;1|SCR_MuzzleInMagComponentClass}} | SCR_MuzzleTypeCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Weapon/SCR_MuzzleTypeCondition.c;3|SCR_MuzzleTypeCondition}} | SCR_NameTagCollectorBase = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Nametags/SCR_NameTagCollectorBase.c;3|SCR_NameTagCollectorBase}} | SCR_NameTagCollectorGroup = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Nametags/SCR_NameTagCollectorGroup.c;3|SCR_NameTagCollectorGroup}} | SCR_NameTagConfig = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Nametags/SCR_NameTagConfig.c;3|SCR_NameTagConfig}} | SCR_NametagConfigComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Nametags/SCR_NametagConfigComponent.c;7|SCR_NametagConfigComponent}} | SCR_NametagConfigComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Nametags/SCR_NametagConfigComponent.c;1|SCR_NametagConfigComponentClass}} | SCR_NametagControllerFiltersEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_NametagControllerFiltersEditorAttribute.c;1|SCR_NametagControllerFiltersEditorAttribute}} | SCR_NameTagData = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Nametags/SCR_NameTagData.c;56|SCR_NameTagData}} | SCR_NameTagDisplay = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Nametags/SCR_NameTagDisplay.c;4|SCR_NameTagDisplay}} | SCR_NameTagElementTitle = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Nametags/NTZoneElements/SCR_NTElementBase.c;3|SCR_NameTagElementTitle}} | SCR_NametagRelationFiltersEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_NametagRelationFiltersEditorAttribute.c;1|SCR_NametagRelationFiltersEditorAttribute}} | SCR_NameTagRulesetBase = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Nametags/SCR_NameTagRulesetBase.c;3|SCR_NameTagRulesetBase}} | SCR_NameTagRulesetFriendlies = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Nametags/SCR_NameTagRulesetFriendlies.c;3|SCR_NameTagRulesetFriendlies}} | SCR_NameTagRulesetSingle = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Nametags/SCR_NameTagRulesetSingle.c;3|SCR_NameTagRulesetSingle}} | SCR_NameTagStateTitle = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Nametags/NTZoneElements/SCR_NTElementBase.c;117|SCR_NameTagStateTitle}} | SCR_NameTagZone = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Nametags/SCR_NameTagConfig.c;108|SCR_NameTagZone}} | SCR_NameTagZoneTitle = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Nametags/SCR_NameTagConfig.c;96|SCR_NameTagZoneTitle}} | SCR_NarrativeComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Logic/SCR_NarrativeComponent.c;5|SCR_NarrativeComponent}} | SCR_NarrativeComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Logic/SCR_NarrativeComponent.c;1|SCR_NarrativeComponentClass}} | SCR_NavigationBarConfig = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_NavigationBarUI.c;1|SCR_NavigationBarConfig}} | SCR_NavigationBarUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_NavigationBarUI.c;30|SCR_NavigationBarUI}} | SCR_NearbyContextCachingConfig = {{Link|enfusion://ScriptEditor/scripts/Game/UI/SCR_NearbyContextCachingConfig.c;1|SCR_NearbyContextCachingConfig}} | SCR_NearbyContextCachingData = {{Link|enfusion://ScriptEditor/scripts/Game/UI/SCR_NearbyContextCachingConfig.c;42|SCR_NearbyContextCachingData}} | SCR_NearbyContextColorsComponentInteract = {{Link|enfusion://ScriptEditor/scripts/Game/Interactions/Display/SCR_NearbyContextColorsComponentInteract.c;11|SCR_NearbyContextColorsComponentInteract}} | SCR_NearbyContextDisplay = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_NearbyContextDisplay.c;3|SCR_NearbyContextDisplay}} | SCR_NearbyContextDisplayMode = {{Link|enfusion://ScriptEditor/scripts/Game/Interactions/SCR_InteractionHandlerComponent.c;7|SCR_NearbyContextDisplayMode}} | SCR_NearbyContextTitle = {{Link|enfusion://ScriptEditor/scripts/Game/UI/SCR_NearbyContextCachingConfig.c;83|SCR_NearbyContextTitle}} | SCR_NearbyContextWidgetComponentBase = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_NearbyContextWidgetComponentBase.c;1|SCR_NearbyContextWidgetComponentBase}} | SCR_NearbyContextWidgetComponentInteract = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_NearbyContextWidgetComponentInteract.c;1|SCR_NearbyContextWidgetComponentInteract}} | SCR_NetworkedStatsComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Network/NetworkedStats/Components/SCR_NetworkedStatsComponent.c;22|SCR_NetworkedStatsComponent}} | SCR_NetworkedStatsComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Network/NetworkedStats/Components/SCR_NetworkedStatsComponent.c;5|SCR_NetworkedStatsComponentClass}} | SCR_NetworkedStatsTestComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Network/NetworkedStats/Components/SCR_NetworkedStatsTest.c;6|SCR_NetworkedStatsTestComponent}} | SCR_NetworkedStatsTestComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Network/NetworkedStats/Components/SCR_NetworkedStatsTest.c;1|SCR_NetworkedStatsTestComponentClass}} | SCR_NeutralizeEntityContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_NeutralizeEntityContextAction.c;2|SCR_NeutralizeEntityContextAction}} | SCR_NewGroupButton = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DeployMenu/SCR_GroupRequestUIComponent.c;798|SCR_NewGroupButton}} | SCR_NewScriptPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_NewScriptPlugin.c;2|SCR_NewScriptPlugin}} | SCR_NewScriptPlugin_AbsoluteUI = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_NewScriptPlugin.c;130|SCR_NewScriptPlugin_AbsoluteUI}} | SCR_NewScriptPlugin_RelativeUI = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_NewScriptPlugin.c;104|SCR_NewScriptPlugin_RelativeUI}} | SCR_NewsEntry = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/MainMenu/SCR_NewsSubMenu.c;1|SCR_NewsEntry}} | SCR_NewSessionDialog = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ToolbarActions/SCR_NewSessionToolbarAction.c;30|SCR_NewSessionDialog}} | SCR_NewSessionToolbarAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ToolbarActions/SCR_NewSessionToolbarAction.c;1|SCR_NewSessionToolbarAction}} | SCR_NewsSubMenu = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/MainMenu/SCR_NewsSubMenu.c;21|SCR_NewsSubMenu}} | SCR_NewsTileComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/MainMenu/SCR_NewsTileComponent.c;1|SCR_NewsTileComponent}} | SCR_NightModeEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_NightModeEditorAttribute.c;1|SCR_NightModeEditorAttribute}} | SCR_NightModeGameModeComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_NightModeGameModeComponent.c;6|SCR_NightModeGameModeComponent}} | SCR_NightModeGameModeComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_NightModeGameModeComponent.c;1|SCR_NightModeGameModeComponentClass}} | SCR_NightModeGameModeComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/GameMode/SCR_NightModeGameModeComponentSerializer.c;1|SCR_NightModeGameModeComponentSerializer}} | SCR_NoGameMasterStickyNotificationUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/Notification/SCR_NoGameMasterStickyNotificationUIComponent.c;1|SCR_NoGameMasterStickyNotificationUIComponent}} | SCR_NoiseFilterEffect = {{Link|enfusion://ScriptEditor/scripts/Game/UI/ScreenEffects/SCR_NoiseFilterEffect.c;1|SCR_NoiseFilterEffect}} | SCR_NoisyCameraShakeProgress = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Shake/SCR_NoisyCameraShakeProgress.c;4|SCR_NoisyCameraShakeProgress}} | SCR_NonArsenalItemCostCatalogData = {{Link|enfusion://ScriptEditor/scripts/Game/EntityCatalog/EntityCatalogEntryData/SCR_NonArsenalItemCostCatalogData.c;2|SCR_NonArsenalItemCostCatalogData}} | SCR_NonrefundableItemHintUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_NonrefundableItemHintUIInfo.c;1|SCR_NonrefundableItemHintUIInfo}} | SCR_NormalAlignedFloatersFinderPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_NormalAlignedFloatersFinderPlugin.c;2|SCR_NormalAlignedFloatersFinderPlugin}} | SCR_NotEnoughStorageDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/Common/Dialogs/SCR_WorkshopDialogs.c;111|SCR_NotEnoughStorageDialog}} | SCR_NotificationAproxDisplayContainer = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/NotificationDisplayData/SCR_NotificationAproxNumber.c;55|SCR_NotificationAproxDisplayContainer}} | SCR_NotificationAproxNumber = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/NotificationDisplayData/SCR_NotificationAproxNumber.c;6|SCR_NotificationAproxNumber}} | SCR_NotificationArsenalGameModeType = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/NotificationDisplayData/SCR_NotificationArsenalGameModeType.c;1|SCR_NotificationArsenalGameModeType}} | SCR_NotificationCharacterName = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/NotificationDisplayData/SCR_NotificationCharacterName.c;6|SCR_NotificationCharacterName}} | SCR_NotificationConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/NotificationDisplayData/SCR_NotificationConfig.c;1|SCR_NotificationConfig}} | SCR_NotificationData = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/SCR_NotificationData.c;6|SCR_NotificationData}} | SCR_NotificationDisplayColor = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/Notification/SCR_NotificationsLogUIComponent.c;569|SCR_NotificationDisplayColor}} | SCR_NotificationDisplayData = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/NotificationDisplayData/SCR_NotificationDisplayData.c;6|SCR_NotificationDisplayData}} | SCR_NotificationEditableEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/NotificationDisplayData/SCR_NotificationEditableEntity.c;6|SCR_NotificationEditableEntity}} | SCR_NotificationEditableEntityAndNumber = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/NotificationDisplayData/SCR_NotificationEditableEntityAndNumber.c;7|SCR_NotificationEditableEntityAndNumber}} | SCR_NotificationEditableEntityEditableEntityTarget = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/NotificationDisplayData/SCR_NotificationEditableEntityEditableEntityTarget.c;7|SCR_NotificationEditableEntityEditableEntityTarget}} | SCR_NotificationEditableEntityTargetPlayer = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/NotificationDisplayData/SCR_NotificationEditableEntityTargetPlayer.c;7|SCR_NotificationEditableEntityTargetPlayer}} | SCR_NotificationEntityCallsign = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/NotificationDisplayData/SCR_NotificationEntityCallsign.c;6|SCR_NotificationEntityCallsign}} | SCR_NotificationFaction = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/NotificationDisplayData/SCR_NotificationFaction.c;9|SCR_NotificationFaction}} | SCR_NotificationFriendlyFireKillfeedTypeName = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_NotificationSenderComponent.c;755|SCR_NotificationFriendlyFireKillfeedTypeName}} | SCR_NotificationGroupName = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/NotificationDisplayData/SCR_NotificationGroupName.c;6|SCR_NotificationGroupName}} | SCR_NotificationInventoryItemName = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/NotificationDisplayData/SCR_NotificationInventoryItemName.c;6|SCR_NotificationInventoryItemName}} | SCR_NotificationKillfeedreceiveTypeName = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_NotificationSenderComponent.c;730|SCR_NotificationKillfeedreceiveTypeName}} | SCR_NotificationKillfeedTypeName = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_NotificationSenderComponent.c;705|SCR_NotificationKillfeedTypeName}} | SCR_NotificationMessageUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/Notification/SCR_NotificationMessageUIComponent.c;1|SCR_NotificationMessageUIComponent}} | SCR_NotificationNumber = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/NotificationDisplayData/SCR_NotificationNumber.c;7|SCR_NotificationNumber}} | SCR_NotificationOnKillfeedChanged = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/NotificationDisplayData/SCR_NotificationOnKillfeedChanged.c;9|SCR_NotificationOnKillfeedChanged}} | SCR_NotificationPerceivedFactionKillPunishment = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/NotificationDisplayData/SCR_NotificationPerceivedFactionKillPunishment.c;1|SCR_NotificationPerceivedFactionKillPunishment}} | SCR_NotificationPlayer = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/NotificationDisplayData/SCR_NotificationPlayer.c;9|SCR_NotificationPlayer}} | SCR_NotificationPlayerAndAproxNumber = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/NotificationDisplayData/SCR_NotificationPlayerAndAproxNumber.c;6|SCR_NotificationPlayerAndAproxNumber}} | SCR_NotificationPlayerAndEntityCallsign = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/NotificationDisplayData/SCR_NotificationPlayerAndEntityCallsign.c;6|SCR_NotificationPlayerAndEntityCallsign}} | SCR_NotificationPlayerAndFaction = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/NotificationDisplayData/SCR_NotificationPlayerAndFaction.c;7|SCR_NotificationPlayerAndFaction}} | SCR_NotificationPlayerAndGroupName = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/NotificationDisplayData/SCR_NotificationPlayerAndGroupName.c;6|SCR_NotificationPlayerAndGroupName}} | SCR_NotificationPlayerAndLocation = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/NotificationDisplayData/SCR_NotificationPlayerAndLocation.c;7|SCR_NotificationPlayerAndLocation}} | SCR_NotificationPlayerAndNumber = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/NotificationDisplayData/SCR_NotificationPlayerAndNumber.c;8|SCR_NotificationPlayerAndNumber}} | SCR_NotificationPlayerBanned = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/NotificationDisplayData/SCR_NotificationPlayerBanned.c;6|SCR_NotificationPlayerBanned}} | SCR_NotificationPlayerBuildService = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/NotificationDisplayData/SCR_NotificationPlayerBuildService.c;6|SCR_NotificationPlayerBuildService}} | SCR_NotificationPlayerKicked = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/NotificationDisplayData/SCR_NotificationPlayerKicked.c;16|SCR_NotificationPlayerKicked}} | SCR_NotificationPlayerTargetEditableEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/NotificationDisplayData/SCR_NotificationPlayerTargetEditableEntity.c;7|SCR_NotificationPlayerTargetEditableEntity}} | SCR_NotificationPlayerTargetFaction = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/NotificationDisplayData/SCR_NotificationPlayerTargetFaction.c;7|SCR_NotificationPlayerTargetFaction}} | SCR_NotificationPlayerTargetPlayer = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/NotificationDisplayData/SCR_NotificationPlayerTargetPlayer.c;9|SCR_NotificationPlayerTargetPlayer}} | SCR_NotificationPlayerTargetTwoEditableEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/NotificationDisplayData/SCR_NotificationPlayerTargetTwoEditableEntity.c;7|SCR_NotificationPlayerTargetTwoEditableEntity}} | SCR_NotificationPlayerTargetTwoFactions = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/NotificationDisplayData/SCR_NotificationPlayerTargetTwoFactions.c;7|SCR_NotificationPlayerTargetTwoFactions}} | SCR_NotificationRank = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/NotificationDisplayData/SCR_NotificationRank.c;7|SCR_NotificationRank}} | SCR_NotificationsComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/SCR_NotificationsComponent.c;76|SCR_NotificationsComponent}} | SCR_NotificationsComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/SCR_NotificationsComponent.c;1|SCR_NotificationsComponentClass}} | SCR_NotificationSenderComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_NotificationSenderComponent.c;6|SCR_NotificationSenderComponent}} | SCR_NotificationSenderComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_NotificationSenderComponent.c;1|SCR_NotificationSenderComponentClass}} | SCR_NotificationSenderComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/GameMode/SCR_NotificationSenderComponentSerializer.c;1|SCR_NotificationSenderComponentSerializer}} | SCR_NotificationsLogComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/Notification/SCR_NotificationsLogUIComponent.c;6|SCR_NotificationsLogComponent}} | SCR_NotificationsLogDisplay = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_NotificationsLogDisplay.c;4|SCR_NotificationsLogDisplay}} | SCR_NotificationSupportStationHitZoneGroup = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/NotificationDisplayData/SCR_NotificationSupportStationHitZoneGroup.c;5|SCR_NotificationSupportStationHitZoneGroup}} | SCR_NotificationTaskCreationText = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/NotificationDisplayData/SCR_NotificationTaskCreationText.c;6|SCR_NotificationTaskCreationText}} | SCR_NotificationTaskName = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/NotificationDisplayData/SCR_NotificationTaskName.c;6|SCR_NotificationTaskName}} | SCR_NotificationTaskNameGroupName = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/NotificationDisplayData/SCR_NotificationTaskNameAndGroupName.c;6|SCR_NotificationTaskNameGroupName}} | SCR_NotificationTaskStateChanged = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/NotificationDisplayData/SCR_NotificationTaskStateChanged.c;1|SCR_NotificationTaskStateChanged}} | SCR_NotificationVoting = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/NotificationDisplayData/SCR_NotificationVoting.c;1|SCR_NotificationVoting}} | SCR_NotificationWeatherChanged = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/NotificationDisplayData/SCR_NotificationWeatherChanged.c;9|SCR_NotificationWeatherChanged}} | SCR_NotificationWindChanged = {{Link|enfusion://ScriptEditor/scripts/Game/Network/Notifications/NotificationDisplayData/SCR_NotificationWindChanged.c;9|SCR_NotificationWindChanged}} | SCR_Nozzle = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_Nozzle.c;1|SCR_Nozzle}} | SCR_NTElementBase = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Nametags/NTZoneElements/SCR_NTElementBase.c;17|SCR_NTElementBase}} | SCR_NTIconBase = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Nametags/NTZoneElements/SCR_NTIconBase.c;3|SCR_NTIconBase}} | SCR_NTIconPlatform = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Nametags/NTZoneElements/SCR_NTIconBase.c;100|SCR_NTIconPlatform}} | SCR_NTIconState = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Nametags/NTZoneElements/SCR_NTIconBase.c;67|SCR_NTIconState}} | SCR_NTName = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Nametags/NTZoneElements/SCR_NTTextBase.c;104|SCR_NTName}} | SCR_NTStateConfigBase = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Nametags/NTZoneElements/SCR_NTElementBase.c;132|SCR_NTStateConfigBase}} | SCR_NTStateIcon = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Nametags/NTZoneElements/SCR_NTElementBase.c;165|SCR_NTStateIcon}} | SCR_NTStateText = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Nametags/NTZoneElements/SCR_NTElementBase.c;150|SCR_NTStateText}} | SCR_NTTextBase = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Nametags/NTZoneElements/SCR_NTTextBase.c;3|SCR_NTTextBase}} | SCR_NTTextDebug = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Nametags/NTZoneElements/SCR_NTTextBase.c;140|SCR_NTTextDebug}} | SCR_ObjectBrushArrayConfig = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/ObjectBrush/SCR_ObjectBrushArrayConfig.c;2|SCR_ObjectBrushArrayConfig}} | SCR_ObjectBrushObjectBase = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/ObjectBrush/SCR_ObjectBrushArrayConfig.c;17|SCR_ObjectBrushObjectBase}} | SCR_ObjectBrushTool = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/ObjectBrush/SCR_ObjectBrushTool.c;2|SCR_ObjectBrushTool}} | SCR_ObjectImportPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_ObjectImportPlugin.c;1|SCR_ObjectImportPlugin}} | SCR_ObjectPositionalInsects = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_ObjectPositionalInsects.c;2|SCR_ObjectPositionalInsects}} | SCR_ObstacleDetector = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/Common/SCR_ObstacleDetector.c;7|SCR_ObstacleDetector}} | SCR_ObstacleDetectorSplineInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/Common/SCR_ObstacleDetector.c;497|SCR_ObstacleDetectorSplineInfo}} | SCR_OKCancelWorkbenchDialog = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/SCR_GenericWorkbenchDialogs.c;10|SCR_OKCancelWorkbenchDialog}} | SCR_OKWorkbenchDialog = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/SCR_GenericWorkbenchDialogs.c;1|SCR_OKWorkbenchDialog}} | SCR_OnFocusUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Deprecated/SCR_OnFocusUIComponent.c;5|SCR_OnFocusUIComponent}} | SCR_OnStatChangedInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Network/NetworkedStats/Components/SCR_NetworkedStatsComponent.c;3|SCR_OnStatChangedInvoker}} | SCR_OpacityEntitiesEditorUIEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/EditableEntityFilters/Effects/SCR_OpacityEntitiesEditorUIEffect.c;1|SCR_OpacityEntitiesEditorUIEffect}} | SCR_OpenAttributeWindowContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_OpenAttributeWindowContextAction.c;1|SCR_OpenAttributeWindowContextAction}} | SCR_OpenDeployableSpawnPointStorageAction = {{Link|enfusion://ScriptEditor/scripts/Game/DeployableInventoryItems/SCR_OpenDeployableSpawnPointStorageAction.c;1|SCR_OpenDeployableSpawnPointStorageAction}} | SCR_OpenStorageAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_OpenStorageAction.c;3|SCR_OpenStorageAction}} | SCR_OpenTurretStorageAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_OpenTurretStorageAction.c;1|SCR_OpenTurretStorageAction}} | SCR_OpenVehicleDoorUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_OpenVehicleDoorUserAction.c;1|SCR_OpenVehicleDoorUserAction}} | SCR_OpenVehicleStorageAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_OpenVehicleStorageAction.c;1|SCR_OpenVehicleStorageAction}} | SCR_OpenWorldToolbarAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ToolbarActions/SCR_OpenWorldToolbarAction.c;1|SCR_OpenWorldToolbarAction}} | SCR_OptimizedMuzzleEffectComponent = {{Link|enfusion://ScriptEditor/scripts/GameCode/Effects/SCR_OptimizedMuzzleEffectComponent.c;5|SCR_OptimizedMuzzleEffectComponent}} | SCR_OptimizedMuzzleEffectComponentClass = {{Link|enfusion://ScriptEditor/scripts/GameCode/Effects/SCR_OptimizedMuzzleEffectComponent.c;1|SCR_OptimizedMuzzleEffectComponentClass}} | SCR_OrbitingManualCameraComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_OrbitingManualCameraComponent.c;6|SCR_OrbitingManualCameraComponent}} | SCR_ORCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Logic/SCR_ORCondition.c;3|SCR_ORCondition}} | SCR_OrientToSeaNormalContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_OrientToSeaNormalContextAction.c;1|SCR_OrientToSeaNormalContextAction}} | SCR_OrientToTerrainContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_OrientToTerrainContextAction.c;1|SCR_OrientToTerrainContextAction}} | SCR_OutfitFactionData = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_ItemOutfitFactionComponent.c;6|SCR_OutfitFactionData}} | SCR_OutfitFactionDataHolder = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_ItemOutfitFactionComponent.c;50|SCR_OutfitFactionDataHolder}} | SCR_OverridableUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_OverridableUIInfo.c;3|SCR_OverridableUIInfo}} | SCR_OverrideCharacterMedicalEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_OverrideCharacterMedicalEditorAttribute.c;5|SCR_OverrideCharacterMedicalEditorAttribute}} | SCR_OverrideEditorAttributeUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Attributes/SCR_OverrideEditorAttributeUIComponent.c;2|SCR_OverrideEditorAttributeUIComponent}} | SCR_OverrideModesEditorAttributeUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Attributes/SCR_OverrideModesEditorAttributeUIComponent.c;3|SCR_OverrideModesEditorAttributeUIComponent}} | SCR_PagingButtonComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_PagingButton/SCR_PagingButtonComponent.c;2|SCR_PagingButtonComponent}} | SCR_ParallelShapeHelper = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/Common/SCR_ParallelShapeHelper.c;1|SCR_ParallelShapeHelper}} | SCR_ParallelShapeTool = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_ParallelShapeTool.c;2|SCR_ParallelShapeTool}} | SCR_ParallelShapeToolSettings = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_ParallelShapeTool.c;295|SCR_ParallelShapeToolSettings}} | SCR_ParamEnumArray = {{Link|enfusion://ScriptEditor/scripts/Game/Global/SCR_ParamEnumArray.c;1|SCR_ParamEnumArray}} | SCR_ParticleContactComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_ParticleContactComponent.c;35|SCR_ParticleContactComponent}} | SCR_ParticleContactComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_ParticleContactComponent.c;1|SCR_ParticleContactComponentClass}} | SCR_ParticleEditorEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Effects/SCR_ParticleEditorEffect.c;1|SCR_ParticleEditorEffect}} | SCR_ParticleHelper = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_ParticleHelper.c;1|SCR_ParticleHelper}} | SCR_ParticleSpawnable = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_ParticleSpawnable.c;1|SCR_ParticleSpawnable}} | SCR_PassagerTooltipDetail = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_PassagerTooltipDetail.c;1|SCR_PassagerTooltipDetail}} | SCR_PassiveHitZoneRegenDamageEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/DamageEffects/CharacterDamageEffects/SCR_PassiveHitZoneRegenDamageEffect.c;1|SCR_PassiveHitZoneRegenDamageEffect}} | SCR_PasswordDialogComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/SCR_PasswordDialogComponent.c;2|SCR_PasswordDialogComponent}} | SCR_PasteAttributesContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/Placeholder/SCR_PasteAttributesContextAction.c;1|SCR_PasteAttributesContextAction}} | SCR_PasteContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_PasteContextAction.c;1|SCR_PasteContextAction}} | SCR_PasteOnOriginalPositionContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/Placeholder/SCR_PasteOnOriginalPositionContextAction.c;1|SCR_PasteOnOriginalPositionContextAction}} | SCR_PatientCompartmentSlot = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_PatientCompartmentSlot.c;1|SCR_PatientCompartmentSlot}} | SCR_PatrolContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/Placeholder/SCR_PatrolContextAction.c;1|SCR_PatrolContextAction}} | SCR_PatrolGroupCommand = {{Link|enfusion://ScriptEditor/scripts/Game/Commanding/Commands/SCR_PatrolGroupCommand.c;2|SCR_PatrolGroupCommand}} | SCR_PauseGameTimeEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_PauseGameTimeEditorComponent.c;8|SCR_PauseGameTimeEditorComponent}} | SCR_PauseGameTimeEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_PauseGameTimeEditorComponent.c;1|SCR_PauseGameTimeEditorComponentClass}} | SCR_PauseGameTimeToolbarAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ToolbarActions/SCR_PauseGameTimeToolbarAction.c;1|SCR_PauseGameTimeToolbarAction}} | SCR_PerceivedFactionManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_PerceivedFactionManagerComponent.c;6|SCR_PerceivedFactionManagerComponent}} | SCR_PerceivedFactionManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_PerceivedFactionManagerComponent.c;1|SCR_PerceivedFactionManagerComponentClass}} | SCR_PerceivedFactionManagerComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/GameMode/SCR_PerceivedFactionManagerComponentSerializer.c;1|SCR_PerceivedFactionManagerComponentSerializer}} | SCR_PersistenceBinLoadContext = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/SCR_PersistenceSerializationContext.c;43|SCR_PersistenceBinLoadContext}} | SCR_PersistenceBinSaveContext = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/SCR_PersistenceSerializationContext.c;32|SCR_PersistenceBinSaveContext}} | SCR_PersistenceJsonLoadContext = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/SCR_PersistenceSerializationContext.c;22|SCR_PersistenceJsonLoadContext}} | SCR_PersistenceJsonSaveContext = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/SCR_PersistenceSerializationContext.c;2|SCR_PersistenceJsonSaveContext}} | SCR_PersistencePrettyJsonSaveContext = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/SCR_PersistenceSerializationContext.c;13|SCR_PersistencePrettyJsonSaveContext}} | SCR_PersistenceSystem = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/SCR_PersistenceSystem.c;10|SCR_PersistenceSystem}} | SCR_PersistentBarbedWireDamageEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/DamageEffects/CharacterDamageEffects/SCR_PersistentBarbedWireDamageEffect.c;1|SCR_PersistentBarbedWireDamageEffect}} | SCR_PersistentDamageEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/DamageEffects/BaseDamageEffects/SCR_PersistentDamageEffect.c;6|SCR_PersistentDamageEffect}} | SCR_PersistentEditableEntityAuthor = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/States/SCR_EditableAuthorsSerializer.c;1|SCR_PersistentEditableEntityAuthor}} | SCR_PersistentFaction = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Entities/SCR_FactionManagerSerializer.c;1|SCR_PersistentFaction}} | SCR_PersistentFactionDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DeployMenu/SCR_PersistentFactionDialog.c;1|SCR_PersistentFactionDialog}} | SCR_PersistentQuickSlotItem = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/Character/SCR_CharacterQuickBarSerializer.c;1|SCR_PersistentQuickSlotItem}} | SCR_PersistentResource = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/SCR_ResourceComponentSerializer.c;1|SCR_PersistentResource}} | SCR_PersistentThreatSector = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/AI/AIControlComponentSerializer.c;1|SCR_PersistentThreatSector}} | SCR_PhotoModeEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Modes/SCR_PhotoModeEditorUIComponent.c;1|SCR_PhotoModeEditorUIComponent}} | SCR_PhotoSaveModeEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Modes/SCR_PhotoSaveModeEditorUIComponent.c;1|SCR_PhotoSaveModeEditorUIComponent}} | SCR_PhysicalHitZonesRegenDamageEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/DamageEffects/CharacterDamageEffects/SCR_PhysicalHitZonesRegenDamageEffect.c;1|SCR_PhysicalHitZonesRegenDamageEffect}} | SCR_PhysicsHelper = {{Link|enfusion://ScriptEditor/scripts/Game/Global/SCR_PhysicsHelper.c;6|SCR_PhysicsHelper}} | SCR_PhysicsObserverAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_PhysicsObserverAttribute.c;1|SCR_PhysicsObserverAttribute}} | SCR_PhysicsObserverSystem = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/SCR_PhysicsObserverSystem.c;1|SCR_PhysicsObserverSystem}} | SCR_PickUpItemAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_PickUpItemAction.c;2|SCR_PickUpItemAction}} | SCR_PickUpLooseItemAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_PickUpLooseItemAction.c;1|SCR_PickUpLooseItemAction}} | SCR_PickupRequestedTaskEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Campaign/SCR_PickupRequestedTaskEntity.c;5|SCR_PickupRequestedTaskEntity}} | SCR_PickupRequestedTaskEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Campaign/SCR_PickupRequestedTaskEntity.c;1|SCR_PickupRequestedTaskEntityClass}} | SCR_PingContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_PingContextAction.c;1|SCR_PingContextAction}} | SCR_PingedEditableEntityFilter = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/EditableEntityFilters/SCR_PingedEditableEntityFilter.c;1|SCR_PingedEditableEntityFilter}} | SCR_PingEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_PingEditorComponent.c;70|SCR_PingEditorComponent}} | SCR_PingEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_PingEditorComponent.c;1|SCR_PingEditorComponentClass}} | SCR_PingEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_PingEditorUIComponent.c;3|SCR_PingEditorUIComponent}} | SCR_PingEffectsEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_PingEffectsEditorUIComponent.c;1|SCR_PingEffectsEditorUIComponent}} | SCR_PIPCamera = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_PIPCamera.c;6|SCR_PIPCamera}} | SCR_PIPCameraClass = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_PIPCamera.c;1|SCR_PIPCameraClass}} | SCR_PIPSightsComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Sights/SCR_PIPSightsComponent.c;7|SCR_PIPSightsComponent}} | SCR_PIPSightsComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Sights/SCR_PIPSightsComponent.c;1|SCR_PIPSightsComponentClass}} | SCR_PlaceableEntitiesMeta = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/PlaceableEntities/SCR_PlaceableEntitiesMeta.c;1|SCR_PlaceableEntitiesMeta}} | SCR_PlaceableEntitiesRegistry = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/PlaceableEntities/SCR_PlaceableEntitiesRegistry.c;1|SCR_PlaceableEntitiesRegistry}} | SCR_PlaceableEntitiesRegistryFromCatalog = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/PlaceableEntities/SCR_PlaceableEntitiesRegistryFromCatalog.c;1|SCR_PlaceableEntitiesRegistryFromCatalog}} | SCR_PlaceableEntitiesRegistryTitleField = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/PlaceableEntities/SCR_PlaceableEntitiesRegistry.c;85|SCR_PlaceableEntitiesRegistryTitleField}} | SCR_PlaceableInventoryItemComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/Items/SCR_PlaceableInventoryItemComponent.c;10|SCR_PlaceableInventoryItemComponent}} | SCR_PlaceableInventoryItemComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/Items/SCR_PlaceableInventoryItemComponent.c;1|SCR_PlaceableInventoryItemComponentClass}} | SCR_PlaceableItemComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_PlaceableItemComponent.c;91|SCR_PlaceableItemComponent}} | SCR_PlaceableItemComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_PlaceableItemComponent.c;1|SCR_PlaceableItemComponentClass}} | SCR_PlacedCommandInfoDisplay = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_PlacedCommandInfoDisplay.c;1|SCR_PlacedCommandInfoDisplay}} | SCR_PlaceEntityContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_PlaceEntityContextAction.c;1|SCR_PlaceEntityContextAction}} | SCR_PlacementCallback = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/Callbacks/SCR_PlacementCallback.c;2|SCR_PlacementCallback}} | SCR_PlacementInventoryOperationCallback = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/Callbacks/SCR_PlacementInventoryOperationCallback.c;5|SCR_PlacementInventoryOperationCallback}} | SCR_PlacingEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_PlacingEditorComponent.c;118|SCR_PlacingEditorComponent}} | SCR_PlacingEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_PlacingEditorComponent.c;1|SCR_PlacingEditorComponentClass}} | SCR_PlacingEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_PlacingEditorUIComponent.c;3|SCR_PlacingEditorUIComponent}} | SCR_PlacingFlagToolbarAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ToolbarActions/SCR_PlacingFlagToolbarAction.c;2|SCR_PlacingFlagToolbarAction}} | SCR_PlacingToolbarEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Toolbar/SCR_PlacingToolbarEditorUIComponent.c;3|SCR_PlacingToolbarEditorUIComponent}} | SCR_PlatformGridOverride = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/MainMenu/SCR_PlatformGridOverride.c;1|SCR_PlatformGridOverride}} | SCR_PlayableFactionEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_PlayableFactionEditorAttribute.c;1|SCR_PlayableFactionEditorAttribute}} | SCR_PlayableFactionKillingAttributeDynamicDescription = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/DynamicDescriptions/SCR_PlayableFactionKillingAttributeDynamicDescription.c;4|SCR_PlayableFactionKillingAttributeDynamicDescription}} | SCR_PlayableFactionsEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_PlayableFactionsEditorAttribute.c;2|SCR_PlayableFactionsEditorAttribute}} | SCR_PlayerAdminManager_OnActiveListedAdminsChanged = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Components/SCR_PlayerListedAdminManagerComponent.c;2|SCR_PlayerAdminManager_OnActiveListedAdminsChanged}} | SCR_PlayerAIAgent = {{Link|enfusion://ScriptEditor/scripts/Game/AI/SCR_PlayerAIAgent.c;5|SCR_PlayerAIAgent}} | SCR_PlayerAIAgentClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/SCR_PlayerAIAgent.c;1|SCR_PlayerAIAgentClass}} | SCR_PlayerArsenalLoadout = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Loadout/SCR_PlayerArsenalLoadout.c;1|SCR_PlayerArsenalLoadout}} | SCR_PlayerBudgetAIEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_PlayerBudgetAIEditorAttribute.c;4|SCR_PlayerBudgetAIEditorAttribute}} | SCR_PlayerBudgetAIEnableEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_PlayerBudgetAIEnableEditorAttribute.c;1|SCR_PlayerBudgetAIEnableEditorAttribute}} | SCR_PlayerBudgetPropEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_PlayerBudgetPropEditorAttribute.c;4|SCR_PlayerBudgetPropEditorAttribute}} | SCR_PlayerBudgetPropEnableEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_PlayerBudgetPropEnableEditorAttribute.c;1|SCR_PlayerBudgetPropEnableEditorAttribute}} | SCR_PlayerBudgetSystemEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_PlayerBudgetSystemEditorAttribute.c;4|SCR_PlayerBudgetSystemEditorAttribute}} | SCR_PlayerBudgetSystemEnableEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_PlayerBudgetSystemEnableEditorAttribute.c;1|SCR_PlayerBudgetSystemEnableEditorAttribute}} | SCR_PlayerBudgetVehicleEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_PlayerBudgetVehicleEditorAttribute.c;4|SCR_PlayerBudgetVehicleEditorAttribute}} | SCR_PlayerBudgetVehicleEnableEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_PlayerBudgetVehicleEnableEditorAttribute.c;1|SCR_PlayerBudgetVehicleEnableEditorAttribute}} | SCR_PlayerCallsignData = {{Link|enfusion://ScriptEditor/scripts/Game/Callsign/SCR_PlayerCallsignData.c;4|SCR_PlayerCallsignData}} | SCR_PlayerCommandingConfigActionPair = {{Link|enfusion://ScriptEditor/scripts/Game/Commanding/SCR_PlayerCommandsConfig.c;35|SCR_PlayerCommandingConfigActionPair}} | SCR_PlayerCommandingMenuActionsSetup = {{Link|enfusion://ScriptEditor/scripts/Game/Commanding/SCR_PlayerCommandsConfig.c;28|SCR_PlayerCommandingMenuActionsSetup}} | SCR_PlayerCommandingMenuBaseElement = {{Link|enfusion://ScriptEditor/scripts/Game/Commanding/SCR_PlayerCommandsConfig.c;92|SCR_PlayerCommandingMenuBaseElement}} | SCR_PlayerCommandingMenuCategoryElement = {{Link|enfusion://ScriptEditor/scripts/Game/Commanding/SCR_PlayerCommandsConfig.c;99|SCR_PlayerCommandingMenuCategoryElement}} | SCR_PlayerCommandingMenuCommand = {{Link|enfusion://ScriptEditor/scripts/Game/Commanding/SCR_PlayerCommandsConfig.c;58|SCR_PlayerCommandingMenuCommand}} | SCR_PlayerCommandingMenuConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Commanding/SCR_PlayerCommandsConfig.c;15|SCR_PlayerCommandingMenuConfig}} | SCR_PlayerCommandsConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Commanding/SCR_PlayerCommandsConfig.c;2|SCR_PlayerCommandsConfig}} | SCR_PlayerController = {{Link|enfusion://ScriptEditor/scripts/Game/Player/SCR_PlayerController.c;30|SCR_PlayerController}} | SCR_PlayerControllerClass = {{Link|enfusion://ScriptEditor/scripts/Game/Player/SCR_PlayerController.c;1|SCR_PlayerControllerClass}} | SCR_PlayerControllerCommandingComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Commanding/SCR_PlayerControllerCommandingComponent.c;6|SCR_PlayerControllerCommandingComponent}} | SCR_PlayerControllerCommandingComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Commanding/SCR_PlayerControllerCommandingComponent.c;1|SCR_PlayerControllerCommandingComponentClass}} | SCR_PlayerControllerGroupComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Groups/SCR_PlayerControllerGroupComponent.c;6|SCR_PlayerControllerGroupComponent}} | SCR_PlayerControllerGroupComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Groups/SCR_PlayerControllerGroupComponent.c;1|SCR_PlayerControllerGroupComponentClass}} | SCR_PlayerControllerSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Entities/SCR_PlayerControllerSerializer.c;1|SCR_PlayerControllerSerializer}} | SCR_PlayerData = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c;2|SCR_PlayerData}} | SCR_PlayerDataConfigs = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/PlayerData/SCR_PlayerDataConfigs.c;102|SCR_PlayerDataConfigs}} | SCR_PlayerDataEvent = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/PlayerData/SCR_PlayerDataEvent.c;2|SCR_PlayerDataEvent}} | SCR_PlayerDataSpecializationDisplay = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/PlayerData/SCR_PlayerDataSpecializationDisplay.c;2|SCR_PlayerDataSpecializationDisplay}} | SCR_PlayerDelegateEditableEntityFilter = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/EditableEntityFilters/SCR_PlayerDelegateEditableEntityFilter.c;1|SCR_PlayerDelegateEditableEntityFilter}} | SCR_PlayerDelegateEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_PlayerDelegateEditorComponent.c;9|SCR_PlayerDelegateEditorComponent}} | SCR_PlayerDelegateEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_PlayerDelegateEditorComponent.c;1|SCR_PlayerDelegateEditorComponentClass}} | SCR_PlayerDeployMenuHandlerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/Menu/SCR_PlayerDeployMenuHandlerComponent.c;14|SCR_PlayerDeployMenuHandlerComponent}} | SCR_PlayerDeployMenuHandlerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/Menu/SCR_PlayerDeployMenuHandlerComponent.c;9|SCR_PlayerDeployMenuHandlerComponentClass}} | SCR_PlayerEditableEntityFilter = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/EditableEntityFilters/SCR_PlayerEditableEntityFilter.c;1|SCR_PlayerEditableEntityFilter}} | SCR_PlayerEditableEntityUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/EditableEntities/SCR_PlayerEditableEntityUIComponent.c;3|SCR_PlayerEditableEntityUIComponent}} | SCR_PlayerFactionAffiliationComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/Factions/SCR_PlayerFactionAffiliationComponent.c;20|SCR_PlayerFactionAffiliationComponent}} | SCR_PlayerFactionAffiliationComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/Factions/SCR_PlayerFactionAffiliationComponent.c;1|SCR_PlayerFactionAffiliationComponentClass}} | SCR_PlayerFactionAffiliationComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/PlayerController/SCR_PlayerFactionAffiliationComponentSerializer.c;1|SCR_PlayerFactionAffiliationComponentSerializer}} | SCR_PlayerFactionInfo = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/FactionManager/SCR_PlayerFactionInfo.c;1|SCR_PlayerFactionInfo}} | SCR_PlayerHubAreaTriggerEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Entities/SCR_PlayerHubAreaTriggerEnity.c;7|SCR_PlayerHubAreaTriggerEntity}} | SCR_PlayerHubAreaTriggerEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Entities/SCR_PlayerHubAreaTriggerEnity.c;1|SCR_PlayerHubAreaTriggerEntityClass}} | SCR_PlayerHubWarningEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_PlayerHubWarningEditorUIComponent.c;1|SCR_PlayerHubWarningEditorUIComponent}} | SCR_PlayerIdentityUtils = {{Link|enfusion://ScriptEditor/scripts/Game/Utilities/SCR_PlayerIdentityUtils.c;1|SCR_PlayerIdentityUtils}} | SCR_PlayerLeaderRoleCallsign = {{Link|enfusion://ScriptEditor/scripts/Game/Callsign/RoleCallsigns/SCR_PlayerLeaderRoleCallsign.c;2|SCR_PlayerLeaderRoleCallsign}} | SCR_PlayerList = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DeployMenu/SCR_FactionPlayerList.c;1|SCR_PlayerList}} | SCR_PlayerListButtonNotificationUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_PlayerListButtonNotificationUIComponent.c;1|SCR_PlayerListButtonNotificationUIComponent}} | SCR_PlayerListComboEntryData = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_PlayerListMenu.c;1815|SCR_PlayerListComboEntryData}} | SCR_PlayerListedAdminManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Components/SCR_PlayerListedAdminManagerComponent.c;9|SCR_PlayerListedAdminManagerComponent}} | SCR_PlayerListedAdminManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Components/SCR_PlayerListedAdminManagerComponent.c;4|SCR_PlayerListedAdminManagerComponentClass}} | SCR_PlayerListEntry = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_PlayerListMenu.c;7|SCR_PlayerListEntry}} | SCR_PlayerListMenu = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_PlayerListMenu.c;32|SCR_PlayerListMenu}} | SCR_PlayerLoadout = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Loadout/SCR_PlayerLoadout.c;1|SCR_PlayerLoadout}} | SCR_PlayerLoadoutComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/Loadouts/SCR_PlayerLoadoutComponent.c;16|SCR_PlayerLoadoutComponent}} | SCR_PlayerLoadoutComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/Loadouts/SCR_PlayerLoadoutComponent.c;1|SCR_PlayerLoadoutComponentClass}} | SCR_PlayerLoadoutComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/PlayerController/SCR_PlayerLoadoutComponentSerializer.c;1|SCR_PlayerLoadoutComponentSerializer}} | SCR_PlayerLoadoutData = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Loadout/SCR_PlayerLoadoutData.c;15|SCR_PlayerLoadoutData}} | SCR_PlayerLoadoutInfo = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Loadout/SCR_PlayerLoadoutInfo.c;1|SCR_PlayerLoadoutInfo}} | SCR_PlayerManagerKickReason = {{Link|enfusion://ScriptEditor/scripts/GameCode/Online/SCR_PlayerManagerKickReason.c;2|SCR_PlayerManagerKickReason}} | SCR_PlayerModesEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_PlayerModesEditorAttribute.c;1|SCR_PlayerModesEditorAttribute}} | SCR_PlayerName = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DeployMenu/SCR_FactionPlayerList.c;295|SCR_PlayerName}} | SCR_PlayerNamesFilterCache = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Tools/SCR_PlayerNamesFilterCache.c;2|SCR_PlayerNamesFilterCache}} | SCR_PlayerProfile = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_PlayerProfile.c;2|SCR_PlayerProfile}} | SCR_PlayerProfileDialogUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SCR_PlayerProfileDialogUI.c;2|SCR_PlayerProfileDialogUI}} | SCR_PlayerProfileManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c;6|SCR_PlayerProfileManagerComponent}} | SCR_PlayerProfileManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c;1|SCR_PlayerProfileManagerComponentClass}} | SCR_PlayerRadioSpawnPoint = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_PlayerRadioSpawnPoint.c;6|SCR_PlayerRadioSpawnPoint}} | SCR_PlayerRadioSpawnPointCampaign = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_PlayerRadioSpawnPointCampaign.c;6|SCR_PlayerRadioSpawnPointCampaign}} | SCR_PlayerRadioSpawnPointCampaignClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_PlayerRadioSpawnPointCampaign.c;1|SCR_PlayerRadioSpawnPointCampaignClass}} | SCR_PlayerRadioSpawnPointClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_PlayerRadioSpawnPoint.c;1|SCR_PlayerRadioSpawnPointClass}} | SCR_PlayerRestrictionZoneData = {{Link|enfusion://ScriptEditor/scripts/Game/RestrictionZone/SCR_PlayersRestrictionZoneManagerComponent.c;451|SCR_PlayerRestrictionZoneData}} | SCR_PlayerRestrictionZoneWarningComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_PlayerRestrictionZoneWarningComponent.c;6|SCR_PlayerRestrictionZoneWarningComponent}} | SCR_PlayerRestrictionZoneWarningComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_PlayerRestrictionZoneWarningComponent.c;1|SCR_PlayerRestrictionZoneWarningComponentClass}} | SCR_PlayerScoreInfoFiringRange = {{Link|enfusion://ScriptEditor/scripts/Game/FiringRange/SCR_PlayerScoreInfoFiringRange.c;3|SCR_PlayerScoreInfoFiringRange}} | SCR_PlayersListEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_PlayersListEditorUIComponent.c;3|SCR_PlayersListEditorUIComponent}} | SCR_PlayersListEntryEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_PlayersListEntryEditorUIComponent.c;1|SCR_PlayersListEntryEditorUIComponent}} | SCR_PlayersManagerEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_PlayersManagerEditorComponent.c;9|SCR_PlayersManagerEditorComponent}} | SCR_PlayersManagerEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_PlayersManagerEditorComponent.c;1|SCR_PlayersManagerEditorComponentClass}} | SCR_PlayerSpawnPoint = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_PlayerSpawnPoint.c;6|SCR_PlayerSpawnPoint}} | SCR_PlayerSpawnPointClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_PlayerSpawnPoint.c;1|SCR_PlayerSpawnPointClass}} | SCR_PlayerSpawnPointManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_PlayerSpawnPointManagerComponent.c;10|SCR_PlayerSpawnPointManagerComponent}} | SCR_PlayerSpawnPointManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_PlayerSpawnPointManagerComponent.c;1|SCR_PlayerSpawnPointManagerComponentClass}} | SCR_PlayerSpawnPointManagerComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/GameMode/SCR_PlayerSpawnPointManagerComponentSerializer.c;1|SCR_PlayerSpawnPointManagerComponentSerializer}} | SCR_PlayersPresentTriggerEntity = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Entities/Triggers/SCR_PlayersPresentTriggerEntity.c;14|SCR_PlayersPresentTriggerEntity}} | SCR_PlayersPresentTriggerEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Entities/Triggers/SCR_PlayersPresentTriggerEntity.c;1|SCR_PlayersPresentTriggerEntityClass}} | SCR_PlayersRestrictionZoneManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/RestrictionZone/SCR_PlayersRestrictionZoneManagerComponent.c;6|SCR_PlayersRestrictionZoneManagerComponent}} | SCR_PlayersRestrictionZoneManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/RestrictionZone/SCR_PlayersRestrictionZoneManagerComponent.c;1|SCR_PlayersRestrictionZoneManagerComponentClass}} | SCR_PlayerSupplyAllocationComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_PlayerSupplyAllocationComponent.c;5|SCR_PlayerSupplyAllocationComponent}} | SCR_PlayerSupplyAllocationComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_PlayerSupplyAllocationComponent.c;1|SCR_PlayerSupplyAllocationComponentClass}} | SCR_PlayerSupplyAllocationComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/PlayerController/SCR_PlayerSupplyAllocationComponentSerializer.c;1|SCR_PlayerSupplyAllocationComponentSerializer}} | SCR_PlayerSupplyAllocationUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DeployMenu/SCR_PlayerSupplyAllocationUI.c;3|SCR_PlayerSupplyAllocationUI}} | SCR_PlayerTeleportedFeedbackComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_PlayerTeleportedFeedbackComponent.c;6|SCR_PlayerTeleportedFeedbackComponent}} | SCR_PlayerTeleportedFeedbackComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_PlayerTeleportedFeedbackComponent.c;1|SCR_PlayerTeleportedFeedbackComponentClass}} | SCR_PlayerTeleportFeedbackUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_PlayerTeleportFeedbackUIComponent.c;1|SCR_PlayerTeleportFeedbackUIComponent}} | SCR_PlayerTileButtonComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Groups/SCR_GroupTileButton.c;1|SCR_PlayerTileButtonComponent}} | SCR_PlayerToolbarItemEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Toolbar/Items/SCR_PlayerToolbarItemEditorUIComponent.c;1|SCR_PlayerToolbarItemEditorUIComponent}} | SCR_PlayerUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_PlayerUIInfo.c;1|SCR_PlayerUIInfo}} | SCR_PlayerXPHandlerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_PlayerXPHandlerComponent.c;11|SCR_PlayerXPHandlerComponent}} | SCR_PlayerXPHandlerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_PlayerXPHandlerComponent.c;1|SCR_PlayerXPHandlerComponentClass}} | SCR_PlayerXPHandlerComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/PlayerController/SCR_PlayerXPHandlerComponentSerializer.c;1|SCR_PlayerXPHandlerComponentSerializer}} | SCR_PlayInstrument = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_PlayInstrument.c;2|SCR_PlayInstrument}} | SCR_PlayMenu = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/PlayMenu/SCR_PlayMenu.c;20|SCR_PlayMenu}} | SCR_PlayMenuComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/PlayMenu/SCR_PlayMenuComponent.c;1|SCR_PlayMenuComponent}} | SCR_PlayMenuConfiguration = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SCR_PlayMenuConfiguration.c;1|SCR_PlayMenuConfiguration}} | SCR_PlayMenuEntry = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/PlayMenu/SCR_PlayMenu.c;8|SCR_PlayMenuEntry}} | SCR_PlayMenuTileComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/MainMenu/SCR_PlayMenuTileComponent.c;1|SCR_PlayMenuTileComponent}} | SCR_PoisonDamageEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/DamageEffects/CharacterDamageEffects/SCR_PoisonDamageEffect.c;1|SCR_PoisonDamageEffect}} | SCR_PoisonScreenEffect = {{Link|enfusion://ScriptEditor/scripts/Game/UI/ScreenEffects/SCR_PoisonScreenEffect.c;3|SCR_PoisonScreenEffect}} | SCR_PoleCable = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/CablePoleGenerator/SCR_PoleCable.c;1|SCR_PoleCable}} | SCR_PoleCableSlot = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Power/SCR_PoleCableSlot.c;1|SCR_PoleCableSlot}} | SCR_PoleCableSlotGroup = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Power/SCR_PoleCableSlotGroup.c;1|SCR_PoleCableSlotGroup}} | SCR_PooledListComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_ListView/SCR_PooledListComponent.c;10|SCR_PooledListComponent}} | SCR_PooledServerListComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/ServerBrowser/SCR_PooledListServerComponent.c;2|SCR_PooledServerListComponent}} | SCR_PopupMessage = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_PopupNotification.c;2|SCR_PopupMessage}} | SCR_PopUpNotification = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_PopupNotification.c;24|SCR_PopUpNotification}} | SCR_PopUpNotificationClass = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_PopupNotification.c;18|SCR_PopUpNotificationClass}} | SCR_Position = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_Position.c;6|SCR_Position}} | SCR_PositionalAmbientLeafParticles = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_PositionalInsectType.c;290|SCR_PositionalAmbientLeafParticles}} | SCR_PositionalGenericInsect = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_PositionalInsectType.c;356|SCR_PositionalGenericInsect}} | SCR_PositionalInsectType = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_PositionalInsectType.c;2|SCR_PositionalInsectType}} | SCR_PositionalLightSourceInsect = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_PositionalInsectType.c;171|SCR_PositionalLightSourceInsect}} | SCR_PositionClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_Position.c;1|SCR_PositionClass}} | SCR_PositionEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_PositionEditorAttribute.c;1|SCR_PositionEditorAttribute}} | SCR_PositionEditorAttributeUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Attributes/SCR_PositionEditorAttributeUIComponent.c;1|SCR_PositionEditorAttributeUIComponent}} | SCR_PositionSoundGroup = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AmbientSoundsComponent/SCR_SoundGroup.c;98|SCR_PositionSoundGroup}} | SCR_PossessingManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Components/SCR_PossessingManagerComponent.c;10|SCR_PossessingManagerComponent}} | SCR_PossessingManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Components/SCR_PossessingManagerComponent.c;5|SCR_PossessingManagerComponentClass}} | SCR_PossessRespawnDiag = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/RequestHandling/Implementation/PossessSpawn/SCR_PossessSpawnRequestComponent.c;91|SCR_PossessRespawnDiag}} | SCR_PossessSpawnData = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/RequestHandling/Implementation/PossessSpawn/SCR_PossessSpawnData.c;2|SCR_PossessSpawnData}} | SCR_PossessSpawnHandlerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/RequestHandling/Implementation/PossessSpawn/SCR_PossessSpawnHandlerComponent.c;6|SCR_PossessSpawnHandlerComponent}} | SCR_PossessSpawnHandlerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/RequestHandling/Implementation/PossessSpawn/SCR_PossessSpawnHandlerComponent.c;1|SCR_PossessSpawnHandlerComponentClass}} | SCR_PossessSpawnRequestComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/RequestHandling/Implementation/PossessSpawn/SCR_PossessSpawnRequestComponent.c;6|SCR_PossessSpawnRequestComponent}} | SCR_PossessSpawnRequestComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/RequestHandling/Implementation/PossessSpawn/SCR_PossessSpawnRequestComponent.c;1|SCR_PossessSpawnRequestComponentClass}} | SCR_PostGameGameModeStateComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_PostGameGameModeStateComponent.c;7|SCR_PostGameGameModeStateComponent}} | SCR_PostGameGameModeStateComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_PostGameGameModeStateComponent.c;1|SCR_PostGameGameModeStateComponentClass}} | SCR_PostProcessCameraComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/SCR_PostProcessCameraComponent.c;7|SCR_PostProcessCameraComponent}} | SCR_PostProcessCameraComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/SCR_PostProcessCameraComponent.c;1|SCR_PostProcessCameraComponentClass}} | SCR_PowerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_PowerComponent.c;6|SCR_PowerComponent}} | SCR_PowerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_PowerComponent.c;1|SCR_PowerComponentClass}} | SCR_PowerlineGeneratorEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/SCR_PowerlineGeneratorEntity.c;15|SCR_PowerlineGeneratorEntity}} | SCR_PowerlineGeneratorEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/SCR_PowerlineGeneratorEntity.c;1|SCR_PowerlineGeneratorEntityClass}} | SCR_PowerlineGeneratorJunctionData = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/CablePoleGenerator/SCR_PowerlineGeneratorJunctionData.c;1|SCR_PowerlineGeneratorJunctionData}} | SCR_PowerlineGeneratorPointData = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/CablePoleGenerator/SCR_PowerlineGeneratorPointData.c;1|SCR_PowerlineGeneratorPointData}} | SCR_PowerLineJointEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Power/SCR_PowerLineJointEntity.c;6|SCR_PowerLineJointEntity}} | SCR_PowerLineJointEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Power/SCR_PowerLineJointEntity.c;1|SCR_PowerLineJointEntityClass}} | SCR_PowerlinePropsConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapPropsConfig.c;340|SCR_PowerlinePropsConfig}} | SCR_PowerlineTypeProps = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapPropsConfig.c;372|SCR_PowerlineTypeProps}} | SCR_PowerlineViewTitle = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapPropsConfig.c;402|SCR_PowerlineViewTitle}} | SCR_PowerPole = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Power/SCR_PowerPole.c;12|SCR_PowerPole}} | SCR_PowerPoleClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Power/SCR_PowerPole.c;1|SCR_PowerPoleClass}} | SCR_PowerPoleSlot = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Power/SCR_PowerPoleSlot.c;8|SCR_PowerPoleSlot}} | SCR_PowerPoleSlotBase = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Power/SCR_PowerPoleSlot.c;1|SCR_PowerPoleSlotBase}} | SCR_PowerPoleSlotSingle = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Power/SCR_PowerPoleSlot.c;15|SCR_PowerPoleSlotSingle}} | SCR_PrefabBoneSnappingTool = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_PrefabBoneSnappingTool.c;2|SCR_PrefabBoneSnappingTool}} | SCR_PrefabCategory = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/PrefabsSpawning/SCR_PrefabCategory.c;2|SCR_PrefabCategory}} | SCR_PrefabDataPredicate = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_InventoryStorageManagerComponent.c;256|SCR_PrefabDataPredicate}} | SCR_PrefabDeleterEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_PrefabDeleter.c;7|SCR_PrefabDeleterEntity}} | SCR_PrefabDeleterEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_PrefabDeleter.c;1|SCR_PrefabDeleterEntityClass}} | SCR_PrefabEditingPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/SCR_PrefabEditingPlugin.c;2|SCR_PrefabEditingPlugin}} | SCR_PrefabEditingPluginBase = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/SCR_PrefabEditingPluginBase.c;2|SCR_PrefabEditingPluginBase}} | SCR_PrefabEditingPluginResourceManager = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/SCR_PrefabEditingPlugin.c;280|SCR_PrefabEditingPluginResourceManager}} | SCR_PrefabGeneratorAssetPoint = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/PrefabGenerator/SCR_PrefabGeneratorAssetPoint.c;1|SCR_PrefabGeneratorAssetPoint}} | SCR_PrefabGeneratorPointMeta = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/PrefabGenerator/SCR_PrefabGeneratorPointMeta.c;1|SCR_PrefabGeneratorPointMeta}} | SCR_PrefabHelper = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/Helpers/SCR_PrefabHelper.c;3|SCR_PrefabHelper}} | SCR_PrefabHelper_Structure = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/Helpers/SCR_PrefabHelper.c;795|SCR_PrefabHelper_Structure}} | SCR_PrefabHelper_StructureDirectory = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/Helpers/SCR_PrefabHelper.c;805|SCR_PrefabHelper_StructureDirectory}} | SCR_PrefabHelper_StructureFile = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/Helpers/SCR_PrefabHelper.c;818|SCR_PrefabHelper_StructureFile}} | SCR_PrefabManagementTool = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_PrefabManagementTool.c;2|SCR_PrefabManagementTool}} | SCR_PrefabNamePredicate = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_InventoryStorageManagerComponent.c;243|SCR_PrefabNamePredicate}} | SCR_PrefabPreviewEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Preview/SCR_PrefabPreviewEntity.c;8|SCR_PrefabPreviewEntity}} | SCR_PrefabPreviewEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Preview/SCR_PrefabPreviewEntity.c;1|SCR_PrefabPreviewEntityClass}} | SCR_PrefabsCacheEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_PrefabsCacheEditorComponent.c;13|SCR_PrefabsCacheEditorComponent}} | SCR_PrefabsCacheEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_PrefabsCacheEditorComponent.c;1|SCR_PrefabsCacheEditorComponentClass}} | SCR_PrefabsCategory = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/PrefabsSpawning/SCR_PrefabsCategory.c;2|SCR_PrefabsCategory}} | SCR_PrefabSpawnable = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_PrefabSpawnable.c;1|SCR_PrefabSpawnable}} | SCR_PrefabSpawnCallback = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/Callbacks/SCR_PrefabSpawnCallback.c;1|SCR_PrefabSpawnCallback}} | SCR_PrefabSpawnPoint = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/PrefabsSpawning/SCR_PrefabSpawnPoint.c;7|SCR_PrefabSpawnPoint}} | SCR_PrefabSpawnPointClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/PrefabsSpawning/SCR_PrefabSpawnPoint.c;1|SCR_PrefabSpawnPointClass}} | SCR_PrefabsSpawner = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/PrefabsSpawning/SCR_PrefabsSpawner.c;2|SCR_PrefabsSpawner}} | SCR_PrefabsSpawnerManager = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/PrefabsSpawning/SCR_PrefabsSpawnerManager.c;15|SCR_PrefabsSpawnerManager}} | SCR_PrefabsSpawnerManagerClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/PrefabsSpawning/SCR_PrefabsSpawnerManager.c;10|SCR_PrefabsSpawnerManagerClass}} | SCR_PrefabStructureCreationPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_PrefabStructureCreationPlugin.c;2|SCR_PrefabStructureCreationPlugin}} | SCR_PrefabStructureFillingPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_PrefabStructureFillingPlugin.c;2|SCR_PrefabStructureFillingPlugin}} | SCR_PrefabStructureFillingPlugin_Car = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/PrefabStructureFilling/SCR_PrefabStructureFillingPlugin_Car.c;1|SCR_PrefabStructureFillingPlugin_Car}} | SCR_PrefabStructureFillingPlugin_TypeBase = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_PrefabStructureFillingPlugin.c;133|SCR_PrefabStructureFillingPlugin_TypeBase}} | SCR_PrefabStructureFillingPlugin_TypeSelection = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_PrefabStructureFillingPlugin.c;57|SCR_PrefabStructureFillingPlugin_TypeSelection}} | SCR_PrefabTemplateClassCheckPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/SCR_PrefabTemplateClassCheckPlugin.c;2|SCR_PrefabTemplateClassCheckPlugin}} | SCR_PrefabValidatorPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/SCR_PrefabValidatorPlugin.c;2|SCR_PrefabValidatorPlugin}} | SCR_PreGameGameModeStateComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_PreGameGameModeStateComponent.c;7|SCR_PreGameGameModeStateComponent}} | SCR_PreGameGameModeStateComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_PreGameGameModeStateComponent.c;1|SCR_PreGameGameModeStateComponentClass}} | SCR_PreloadScreenComponent = {{Link|enfusion://ScriptEditor/scripts/GameLib/LoadingScreens/SCR_PreloadScreenComponent.c;1|SCR_PreloadScreenComponent}} | SCR_PressureTriggerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Explosives/SCR_PressureTriggerComponent.c;6|SCR_PressureTriggerComponent}} | SCR_PressureTriggerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Explosives/SCR_PressureTriggerComponent.c;1|SCR_PressureTriggerComponentClass}} | SCR_PreviewEditableEntityFilter = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/EditableEntityFilters/SCR_PreviewEditableEntityFilter.c;1|SCR_PreviewEditableEntityFilter}} | SCR_PreviewEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_PreviewEntity.c;8|SCR_PreviewEntity}} | SCR_PreviewEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_PreviewEntity.c;2|SCR_PreviewEntityClass}} | SCR_PreviewEntityComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Preview/SCR_PreviewEntityComponent.c;55|SCR_PreviewEntityComponent}} | SCR_PreviewEntityComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Preview/SCR_PreviewEntityComponent.c;1|SCR_PreviewEntityComponentClass}} | SCR_PreviewEntityEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_PreviewEntityEditorComponent.c;12|SCR_PreviewEntityEditorComponent}} | SCR_PreviewEntityEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_PreviewEntityEditorComponent.c;1|SCR_PreviewEntityEditorComponentClass}} | SCR_PreviewEntityEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_PreviewEntityEditorUIComponent.c;11|SCR_PreviewEntityEditorUIComponent}} | SCR_PreviewRichText = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Tools/SCR_PreviewRichText.c;1|SCR_PreviewRichText}} | SCR_PrivacyPolicy = {{Link|enfusion://ScriptEditor/scripts/Game/UI/SCR_PrivacyPolicy.c;1|SCR_PrivacyPolicy}} | SCR_ProfaneFilter = {{Link|enfusion://ScriptEditor/scripts/Game/Utilities/SCR_ProfaneFilter.c;2|SCR_ProfaneFilter}} | SCR_ProfanityFilterRequestCallback = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Chat/SCR_ChatPanelManager.c;395|SCR_ProfanityFilterRequestCallback}} | SCR_ProfileSuperMenu = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/MainMenu/SCR_ProfileSuperMenu.c;7|SCR_ProfileSuperMenu}} | SCR_ProgressBarColorsEntry = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_ProgressBarColorsUIComponent.c;39|SCR_ProgressBarColorsEntry}} | SCR_ProgressBarColorsUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_ProgressBarColorsUIComponent.c;4|SCR_ProgressBarColorsUIComponent}} | SCR_ProgressBarWithInactiveColor = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/CareerProfile/SCR_WLibProgressBarWithInactiveColor.c;2|SCR_ProgressBarWithInactiveColor}} | SCR_ProgressBarWithSegments = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/CareerProfile/SCR_ProgressBarWithSegments.c;2|SCR_ProgressBarWithSegments}} | SCR_ProgressDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SCR_ProgressDialog.c;2|SCR_ProgressDialog}} | SCR_PSNActivityComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Misc/SCR_PSNActivityComponent.c;5|SCR_PSNActivityComponent}} | SCR_PSNActivityComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Misc/SCR_PSNActivityComponent.c;1|SCR_PSNActivityComponentClass}} | SCR_PublishSaveDialog = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SaveLoad/UI/SCR_PublishSaveDialog.c;1|SCR_PublishSaveDialog}} | SCR_PulsateUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/Animations/SCR_PulsateUIComponent.c;1|SCR_PulsateUIComponent}} | SCR_PunishKillingWhenDesguisedEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_PunishKillingWhenDesguisedEditorAttribute.c;1|SCR_PunishKillingWhenDesguisedEditorAttribute}} | SCR_PushVehicleAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_PushVehicleAction.c;1|SCR_PushVehicleAction}} | SCR_QRFGroupConfig = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Configs/SCR_QRFGroupConfig.c;9|SCR_QRFGroupConfig}} | SCR_QRFSpawnSafeZone = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Configs/SCR_QRFSpawnSafeZone.c;1|SCR_QRFSpawnSafeZone}} | SCR_QRFTypeMaxDistance = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Configs/SCR_QRFTypeMaxDistance.c;1|SCR_QRFTypeMaxDistance}} | SCR_QRFVehicleSpawnConfig = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Configs/SCR_QRFVehicleSpawnConfig.c;1|SCR_QRFVehicleSpawnConfig}} | SCR_QRFWaypointConfig = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Configs/SCR_QRFWaypointConfig.c;7|SCR_QRFWaypointConfig}} | SCR_QuickPlacingEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_QuickPlacingEditorUIComponent.c;3|SCR_QuickPlacingEditorUIComponent}} | SCR_QuickslotBaseContainer = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_QuickslotBaseContainer.c;3|SCR_QuickslotBaseContainer}} | SCR_QuickslotCommandContainer = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_QuickslotBaseContainer.c;77|SCR_QuickslotCommandContainer}} | SCR_QuickslotEntityContainer = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_QuickslotBaseContainer.c;21|SCR_QuickslotEntityContainer}} | SCR_QuickSlotRefreshCB = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/WeaponSwitching/SCR_WeaponSwitchingBaseUI.c;347|SCR_QuickSlotRefreshCB}} | SCR_RadialMenu = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SelectionMenu/RadialMenu/SCR_RadialMenu.c;17|SCR_RadialMenu}} | SCR_RadialMenuActiveActionCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/SCR_RadialMenuActiveActionCondition.c;2|SCR_RadialMenuActiveActionCondition}} | SCR_RadialMenuController = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SelectionMenu/RadialMenu/SCR_RadialMenuController.c;7|SCR_RadialMenuController}} | SCR_RadialMenuControllerInputs = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SelectionMenu/RadialMenu/SCR_RadialMenu.c;818|SCR_RadialMenuControllerInputs}} | SCR_RadialMenuDisplay = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SelectionMenu/RadialMenu/SCR_RadialMenuDisplay.c;6|SCR_RadialMenuDisplay}} | SCR_RadialMenuGameModeComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SelectionMenu/RadialMenu/SCR_RadialMenuGameModeComponent.c;6|SCR_RadialMenuGameModeComponent}} | SCR_RadialMenuGameModeComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SelectionMenu/RadialMenu/SCR_RadialMenuGameModeComponent.c;1|SCR_RadialMenuGameModeComponentClass}} | SCR_RadialMenuIcons = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SelectionMenu/SCR_BaseSelectionMenuDisplay.c;26|SCR_RadialMenuIcons}} | SCR_RadialMenuInputs = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SelectionMenu/RadialMenu/SCR_RadialMenu.c;757|SCR_RadialMenuInputs}} | SCR_RadialMenuItemsComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SelectionMenu/RadialMenu/SCR_RadialMenuItemsComponent.c;6|SCR_RadialMenuItemsComponent}} | SCR_RadialMenuItemsComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SelectionMenu/RadialMenu/SCR_RadialMenuItemsComponent.c;1|SCR_RadialMenuItemsComponentClass}} | SCR_RadialMenuNumberHintComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SelectionMenu/RadialMenu/SCR_RadialMenuNumberHintComponent.c;6|SCR_RadialMenuNumberHintComponent}} | SCR_RadialMenuPair = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SelectionMenu/SCR_RadialMenuPair.c;170|SCR_RadialMenuPair}} | SCR_RadialMenuSegmentComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SelectionMenu/RadialMenu/SCR_RadialMenuSegmentComponent.c;4|SCR_RadialMenuSegmentComponent}} | SCR_RadialMenuTypeActiveActionCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/SCR_RadialMenuTypeActiveActionCondition.c;2|SCR_RadialMenuTypeActiveActionCondition}} | SCR_RadialMenuWidgetPairList = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SelectionMenu/SCR_RadialMenuPair.c;6|SCR_RadialMenuWidgetPairList}} | SCR_RadialProgressBarUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_RadialProgressBarUIComponent.c;1|SCR_RadialProgressBarUIComponent}} | SCR_RadioBaseUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_RadioBaseUserAction.c;1|SCR_RadioBaseUserAction}} | SCR_RadioComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_RadioComponent.c;40|SCR_RadioComponent}} | SCR_RadioComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_RadioComponent.c;35|SCR_RadioComponentClass}} | SCR_RadioCoverageMapDescriptorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Locations/SCR_RadioCoverageMapDescriptorComponent.c;13|SCR_RadioCoverageMapDescriptorComponent}} | SCR_RadioCoverageMapDescriptorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Locations/SCR_RadioCoverageMapDescriptorComponent.c;1|SCR_RadioCoverageMapDescriptorComponentClass}} | SCR_RadioCoverageSystem = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/SCR_RadioCoverageSystem.c;5|SCR_RadioCoverageSystem}} | SCR_RadioOperatorRoleCallsign = {{Link|enfusion://ScriptEditor/scripts/Game/Callsign/RoleCallsigns/SCR_RadioOperatorRoleCallsign.c;1|SCR_RadioOperatorRoleCallsign}} | SCR_RadioProcAnimCtx = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_RadioComponent.c;25|SCR_RadioProcAnimCtx}} | SCR_RadioToggleUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/Inspection/SCR_RadioToggleUserAction.c;1|SCR_RadioToggleUserAction}} | SCR_RadioTuningUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/Inspection/SCR_RadioTuningUserAction.c;1|SCR_RadioTuningUserAction}} | SCR_RadioVehicleSpawnPoint = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_RadioVehicleSpawnPointComponent.c;6|SCR_RadioVehicleSpawnPoint}} | SCR_RadioVehicleSpawnPointClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_RadioVehicleSpawnPointComponent.c;1|SCR_RadioVehicleSpawnPointClass}} | SCR_RagdollFallDamageEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/DamageEffects/CharacterDamageEffects/SCR_RagdollFallDamageEffect.c;1|SCR_RagdollFallDamageEffect}} | SCR_RandomisationEditorData = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/Common/SCR_RandomisationEditorData.c;2|SCR_RandomisationEditorData}} | SCR_RandomMessageGameOverScreenInfo = {{Link|enfusion://ScriptEditor/scripts/Game/GameOverScreen/SCR_RandomMessageGameOverScreenInfo.c;1|SCR_RandomMessageGameOverScreenInfo}} | SCR_RandomParticleSpawnable = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_RandomParticleSpawnable.c;13|SCR_RandomParticleSpawnable}} | SCR_RandomPositionalInsects = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_RandomPositionalInsects.c;2|SCR_RandomPositionalInsects}} | SCR_RandomPositionalInsectsDef = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_RandomPositionalInsectsDef.c;1|SCR_RandomPositionalInsectsDef}} | SCR_RandomPositionalSounds = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AmbientSoundsComponent/SCR_RandomPositionalSounds.c;15|SCR_RandomPositionalSounds}} | SCR_RandomPositionalSoundsDef = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AmbientSoundsComponent/SCR_RandomPositionalSoundsDef.c;1|SCR_RandomPositionalSoundsDef}} | SCR_RankID = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_CharacterRankComponent.c;290|SCR_RankID}} | SCR_RankIDCampaign = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/FactionManager/SCR_CampaignFactionManager.c;1|SCR_RankIDCampaign}} | SCR_Ray = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/Common/SCR_Ray.c;1|SCR_Ray}} | SCR_RearmRequestedTaskEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Campaign/SCR_RearmRequestedTaskEntity.c;5|SCR_RearmRequestedTaskEntity}} | SCR_RearmRequestedTaskEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Campaign/SCR_RearmRequestedTaskEntity.c;1|SCR_RearmRequestedTaskEntityClass}} | SCR_RearmRocketPodsContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_RearmRocketPodsContextAction.c;1|SCR_RearmRocketPodsContextAction}} | SCR_RecentGames = {{Link|enfusion://ScriptEditor/scripts/Game/Global/SCR_GameplaySettings.c;233|SCR_RecentGames}} | SCR_RecoilCameraShakeParams = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Shake/SCR_RecoilCameraShakeParams.c;4|SCR_RecoilCameraShakeParams}} | SCR_RecoilCameraShakeProgress = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Shake/SCR_RecoilCameraShakeProgress.c;4|SCR_RecoilCameraShakeProgress}} | SCR_RecoilForceAimModifier = {{Link|enfusion://ScriptEditor/scripts/GameCode/Weapon/SCR_RecoilForceAimModifier.c;2|SCR_RecoilForceAimModifier}} | SCR_ReconnectComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Components/SCR_ReconnectComponent.c;41|SCR_ReconnectComponent}} | SCR_ReconnectComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Components/SCR_ReconnectComponent.c;26|SCR_ReconnectComponentClass}} | SCR_ReconnectData = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Components/SCR_ReconnectComponent.c;2|SCR_ReconnectData}} | SCR_ReconnectSynchronizationComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_ReconnectSynchronizationComponent.c;7|SCR_ReconnectSynchronizationComponent}} | SCR_ReconnectSynchronizationComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_ReconnectSynchronizationComponent.c;1|SCR_ReconnectSynchronizationComponentClass}} | SCR_ReconTaskEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Campaign/SCR_ReconTaskEntity.c;5|SCR_ReconTaskEntity}} | SCR_ReconTaskEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Campaign/SCR_ReconTaskEntity.c;1|SCR_ReconTaskEntityClass}} | SCR_RecruitAIGroupCommand = {{Link|enfusion://ScriptEditor/scripts/Game/Commanding/Commands/SCR_RecruitAIGroupCommand.c;2|SCR_RecruitAIGroupCommand}} | SCR_Rect2D = {{Link|enfusion://ScriptEditor/scripts/Game/Global/SCR_Rect2D.c;5|SCR_Rect2D}} | SCR_RefillMagazineContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_RefillMagazineContextAction.c;1|SCR_RefillMagazineContextAction}} | SCR_ReforgerEngineSettingsPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/UserSettings/SCR_ReforgerEngineSettingsPlugin.c;2|SCR_ReforgerEngineSettingsPlugin}} | SCR_ReforgerGameSettingsPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/UserSettings/SCR_ReforgerGameSettingsPlugin.c;2|SCR_ReforgerGameSettingsPlugin}} | SCR_RefPreviewEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Preview/SCR_RefPreviewEntity.c;9|SCR_RefPreviewEntity}} | SCR_RefPreviewEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/Preview/SCR_RefPreviewEntity.c;3|SCR_RefPreviewEntityClass}} | SCR_RefuelAtSupportStationAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SupportStations/SCR_RefuelAtSupportStationAction.c;1|SCR_RefuelAtSupportStationAction}} | SCR_RefuelContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/Placeholder/SCR_RefuelContextAction.c;1|SCR_RefuelContextAction}} | SCR_RefundPylonSupportStationAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SupportStations/SCR_RefundPylonSupportStationAction.c;1|SCR_RefundPylonSupportStationAction}} | SCR_RefundVehicleAmmoSupportStationAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SupportStations/SCR_RefundVehicleAmmoSupportStationAction.c;1|SCR_RefundVehicleAmmoSupportStationAction}} | SCR_RegeneratingHitZone = {{Link|enfusion://ScriptEditor/scripts/Game/HitZone/SCR_CharacterHitZone.c;66|SCR_RegeneratingHitZone}} | SCR_RegenerationScreenEffect = {{Link|enfusion://ScriptEditor/scripts/Game/UI/ScreenEffects/SCR_RegenerationScreenEffect.c;1|SCR_RegenerationScreenEffect}} | SCR_RegionalDestructionManager = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_RegionalDestructionManager.c;5|SCR_RegionalDestructionManager}} | SCR_RegionalDestructionManagerClass = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_RegionalDestructionManager.c;1|SCR_RegionalDestructionManagerClass}} | SCR_RegionIntersectDebrisEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/Building/SCR_RegionIntersectDebrisEntity.c;7|SCR_RegionIntersectDebrisEntity}} | SCR_RegionIntersectDebrisEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/Building/SCR_RegionIntersectDebrisEntity.c;1|SCR_RegionIntersectDebrisEntityClass}} | SCR_ReinforceRequestedTaskEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Campaign/SCR_ReinforceRequestedTaskEntity.c;5|SCR_ReinforceRequestedTaskEntity}} | SCR_ReinforceRequestedTaskEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Campaign/SCR_ReinforceRequestedTaskEntity.c;1|SCR_ReinforceRequestedTaskEntityClass}} | SCR_RejoinDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/Dialogs/SCR_RejoinDialog.c;2|SCR_RejoinDialog}} | SCR_RemoteDetonatorAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_DetonatorAction.c;1|SCR_RemoteDetonatorAction}} | SCR_RemoveAIGroupCommand = {{Link|enfusion://ScriptEditor/scripts/Game/Commanding/Commands/SCR_RemoveAIGroupCommand.c;2|SCR_RemoveAIGroupCommand}} | SCR_RemoveBleedCharacterContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/SCR_RemoveBleedCharacterContextAction.c;2|SCR_RemoveBleedCharacterContextAction}} | SCR_RemoveCasualtyUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_RemoveCasualtyUserAction.c;1|SCR_RemoveCasualtyUserAction}} | SCR_RemoveEquippedWeapon = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_EquipWeaponAction.c;204|SCR_RemoveEquippedWeapon}} | SCR_RemoveTarget = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/FiringRange/SCR_RemoveTarget.c;3|SCR_RemoveTarget}} | SCR_RemoveWeaponContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_RemoveWeaponsContextAction.c;2|SCR_RemoveWeaponContextAction}} | SCR_RenderedEditableEntityFilter = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/EditableEntityFilters/SCR_RenderedEditableEntityFilter.c;1|SCR_RenderedEditableEntityFilter}} | SCR_RepairAtSupportStationAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SupportStations/SCR_RepairAtSupportStationAction.c;1|SCR_RepairAtSupportStationAction}} | SCR_RepairConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/SCR_RepairConfig.c;1|SCR_RepairConfig}} | SCR_RepairRequestedTaskEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Campaign/SCR_RepairRequestedTaskEntity.c;5|SCR_RepairRequestedTaskEntity}} | SCR_RepairRequestedTaskEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Campaign/SCR_RepairRequestedTaskEntity.c;1|SCR_RepairRequestedTaskEntityClass}} | SCR_RepairSupportStationComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SupportStation/SCR_RepairSupportStationComponent.c;46|SCR_RepairSupportStationComponent}} | SCR_RepairSupportStationComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SupportStation/SCR_RepairSupportStationComponent.c;1|SCR_RepairSupportStationComponentClass}} | SCR_ReplaceWheelUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_ReplaceWheelUserAction.c;1|SCR_ReplaceWheelUserAction}} | SCR_ReplaceWithContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/Placeholder/SCR_ReplaceWithContextAction.c;1|SCR_ReplaceWithContextAction}} | SCR_ReplicatedParticleEffectEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Particles/SCR_ReplicatedParticleEffectEntity.c;6|SCR_ReplicatedParticleEffectEntity}} | SCR_ReplicatedParticleEffectEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Particles/SCR_ReplicatedParticleEffectEntity.c;1|SCR_ReplicatedParticleEffectEntityClass}} | SCR_ReportedAddonsDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/Common/Dialogs/SCR_ReportedAddonsDialog.c;3|SCR_ReportedAddonsDialog}} | SCR_ReportPlayerDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/Dialogs/SCR_ReportPlayerDialog.c;1|SCR_ReportPlayerDialog}} | SCR_ReportReasonComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/Dialogs/SCR_ReportPlayerDialog.c;139|SCR_ReportReasonComponent}} | SCR_RequestedTaskNotificationComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Notifications/SCR_RequestedTaskNotificationComponent.c;41|SCR_RequestedTaskNotificationComponent}} | SCR_RequestedTaskNotificationComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Notifications/SCR_RequestedTaskNotificationComponent.c;1|SCR_RequestedTaskNotificationComponentClass}} | SCR_RequestedTaskUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/UI/SCR_RequestedTaskUIInfo.c;1|SCR_RequestedTaskUIInfo}} | SCR_RequestToJoinSubmenu = {{Link|enfusion://ScriptEditor/scripts/Game/Groups/SCR_RequestToJoinSubMenu.c;1|SCR_RequestToJoinSubmenu}} | SCR_RequiredDeployablePart = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_RequiredDeployablePart.c;1|SCR_RequiredDeployablePart}} | SCR_ResetEditorComponentsToolbarAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ToolbarActions/SCR_ResetEditorComponentsToolbarAction.c;1|SCR_ResetEditorComponentsToolbarAction}} | SCR_ResourceActor = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/Consumer/SCR_ResourceConsumer.c;1|SCR_ResourceActor}} | SCR_ResourceActorLinkComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/Link/SCR_ResourceActorLinkComponent.c;6|SCR_ResourceActorLinkComponent}} | SCR_ResourceActorLinkComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/Link/SCR_ResourceActorLinkComponent.c;1|SCR_ResourceActorLinkComponentClass}} | SCR_ResourceAvailableTooltipDetail = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_ResourceAvailableTooltipDetail.c;1|SCR_ResourceAvailableTooltipDetail}} | SCR_ResourceComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/SCR_ResourceComponent.c;43|SCR_ResourceComponent}} | SCR_ResourceComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/SCR_ResourceComponent.c;15|SCR_ResourceComponentClass}} | SCR_ResourceComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/SCR_ResourceComponentSerializer.c;7|SCR_ResourceComponentSerializer}} | SCR_ResourceConsumer = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/Consumer/SCR_ResourceConsumer.c;528|SCR_ResourceConsumer}} | SCR_ResourceConsumerContainerQueue = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/ContainerQueue/Consumer/SCR_ResourceConsumerContainerQueue.c;1|SCR_ResourceConsumerContainerQueue}} | SCR_ResourceConsumerContainerStorageQueue = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/ContainerQueue/Storage/Queue/Consumer/SCR_ResourceConsumerContainerStorageQueue.c;1|SCR_ResourceConsumerContainerStorageQueue}} | SCR_ResourceConsumerContainerStorageQueueExtended = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/ContainerQueue/Storage/Queue/Consumer/SCR_ResourceConsumerContainerStorageQueueExtended.c;1|SCR_ResourceConsumerContainerStorageQueueExtended}} | SCR_ResourceConsumerMilitaryBase = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Components/Resources/Consumer/SCR_ResourceConsumerMilitaryBase.c;1|SCR_ResourceConsumerMilitaryBase}} | SCR_ResourceConsumerServicePoint = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Components/Resources/Consumer/SCR_ResourceConsumerServicePoint.c;1|SCR_ResourceConsumerServicePoint}} | SCR_ResourceConsumerStoragePolicy = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/ContainerQueue/Storage/Policy/Consumer/SCR_ResourceConsumerStoragePolicy.c;1|SCR_ResourceConsumerStoragePolicy}} | SCR_ResourceConsumerStoragePolicyGeneric = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/ContainerQueue/Storage/Policy/Consumer/SCR_ResourceConsumerStoragePolicyGeneric.c;1|SCR_ResourceConsumerStoragePolicyGeneric}} | SCR_ResourceConsumtionResponse = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/Consumer/SCR_ResourceConsumtionResponse.c;9|SCR_ResourceConsumtionResponse}} | SCR_ResourceContainer = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/Container/SCR_ResourceContainer.c;33|SCR_ResourceContainer}} | SCR_ResourceContainerItemData = {{Link|enfusion://ScriptEditor/scripts/Game/EntityCatalog/EntityCatalogEntryData/SCR_ResourceContainerItemData.c;1|SCR_ResourceContainerItemData}} | SCR_ResourceContainerQueue = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/ContainerQueue/SCR_ResourceContainerQueue.c;602|SCR_ResourceContainerQueue}} | SCR_ResourceContainerQueueBase = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/ContainerQueue/SCR_ResourceContainerQueue.c;1|SCR_ResourceContainerQueueBase}} | SCR_ResourceContainerStorageQueue = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/ContainerQueue/Storage/Queue/SCR_ResourceContainerStorageQueue.c;1|SCR_ResourceContainerStorageQueue}} | SCR_ResourceContainerStoreAction = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/UserActions/SCR_ResourceContainerStoreAction.c;2|SCR_ResourceContainerStoreAction}} | SCR_ResourceContainerVehicleLoadAction = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/UserActions/SCR_ResourceContainerVehicleLoadAction.c;1|SCR_ResourceContainerVehicleLoadAction}} | SCR_ResourceContainerVehicleUnloadAction = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/UserActions/SCR_ResourceContainerVehicleUnloadAction.c;1|SCR_ResourceContainerVehicleUnloadAction}} | SCR_ResourceContainerVirtual = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/Container/SCR_ResourceContainerVirtual.c;1|SCR_ResourceContainerVirtual}} | SCR_ResourceEncapsulator = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/Encapsulator/SCR_ResourceEncapsulator.c;1|SCR_ResourceEncapsulator}} | SCR_ResourceEncapsulatorActionBase = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/ContainerQueue/Encapsulator/Actions/SCR_ResourceEncapsulatorActionBase.c;12|SCR_ResourceEncapsulatorActionBase}} | SCR_ResourceEncapsulatorActionChangeDecay = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/ContainerQueue/Encapsulator/Actions/SCR_ResourceEncapsulatorActionBase.c;142|SCR_ResourceEncapsulatorActionChangeDecay}} | SCR_ResourceEncapsulatorActionChangeGain = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/ContainerQueue/Encapsulator/Actions/SCR_ResourceEncapsulatorActionBase.c;184|SCR_ResourceEncapsulatorActionChangeGain}} | SCR_ResourceEncapsulatorActionChangeOnEmptyBehavior = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/ContainerQueue/Encapsulator/Actions/SCR_ResourceEncapsulatorActionBase.c;169|SCR_ResourceEncapsulatorActionChangeOnEmptyBehavior}} | SCR_ResourceEncapsulatorActionChangeResourceValue = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/ContainerQueue/Encapsulator/Actions/SCR_ResourceEncapsulatorActionBase.c;21|SCR_ResourceEncapsulatorActionChangeResourceValue}} | SCR_ResourceEncapsulatorActionChangeRights = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/ContainerQueue/Encapsulator/Actions/SCR_ResourceEncapsulatorActionBase.c;127|SCR_ResourceEncapsulatorActionChangeRights}} | SCR_ResourceEncapsulatorActionDisableInventoryStorage = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/ContainerQueue/Encapsulator/Actions/SCR_ResourceEncapsulatorActionBase.c;104|SCR_ResourceEncapsulatorActionDisableInventoryStorage}} | SCR_ResourceEncapsulatorActionDisableUserActions = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/ContainerQueue/Encapsulator/Actions/SCR_ResourceEncapsulatorActionBase.c;82|SCR_ResourceEncapsulatorActionDisableUserActions}} | SCR_ResourceEncapsulatorActionTypeTitle = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/ContainerQueue/Encapsulator/Actions/SCR_ResourceEncapsulatorActionBase.c;1|SCR_ResourceEncapsulatorActionTypeTitle}} | SCR_ResourceEncapsulatorAssimilated = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/Encapsulator/SCR_ResourceEncapsulator.c;291|SCR_ResourceEncapsulatorAssimilated}} | SCR_ResourceEncapsulatorContainerQueue = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/ContainerQueue/Encapsulator/SCR_ResourceEncapsulatorContainerQueue.c;1|SCR_ResourceEncapsulatorContainerQueue}} | SCR_ResourceEncapsulatorContainerStorageQueue = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/ContainerQueue/Storage/Queue/Encapsulator/SCR_ResourceConsumerContainerStorageQueue.c;1|SCR_ResourceEncapsulatorContainerStorageQueue}} | SCR_ResourceEncapsulatorContainerStorageQueueExtended = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/ContainerQueue/Storage/Queue/Encapsulator/SCR_ResourceConsumerContainerStorageQueueExtended.c;1|SCR_ResourceEncapsulatorContainerStorageQueueExtended}} | SCR_ResourceEncapsulatorDelegated = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/Encapsulator/SCR_ResourceEncapsulator.c;296|SCR_ResourceEncapsulatorDelegated}} | SCR_ResourceEncapsulatorStoragePolicy = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/ContainerQueue/Storage/Policy/Encapsulator/SCR_ResourceConsumerStoragePolicy.c;1|SCR_ResourceEncapsulatorStoragePolicy}} | SCR_ResourceEncapsulatorStoragePolicyGeneric = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/ContainerQueue/Storage/Policy/Encapsulator/SCR_ResourceConsumerStoragePolicyGeneric.c;1|SCR_ResourceEncapsulatorStoragePolicyGeneric}} | SCR_ResourceEntityRefundAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_ResourceEntityRefundAction.c;1|SCR_ResourceEntityRefundAction}} | SCR_ResourceGenerationResponse = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/Generator/SCR_ResourceGenerator.c;13|SCR_ResourceGenerationResponse}} | SCR_ResourceGenerator = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/Generator/SCR_ResourceGenerator.c;78|SCR_ResourceGenerator}} | SCR_ResourceGeneratorActionBase = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/Generator/Actions/SCR_ResourceGeneratorActionBase.c;1|SCR_ResourceGeneratorActionBase}} | SCR_ResourceGeneratorActionDropContainers = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/Generator/Actions/SCR_ResourceGeneratorActionDropContainers.c;1|SCR_ResourceGeneratorActionDropContainers}} | SCR_ResourceGeneratorActionStore = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/Generator/Actions/SCR_ResourceGeneratorActionStore.c;1|SCR_ResourceGeneratorActionStore}} | SCR_ResourceGeneratorContainerQueue = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/ContainerQueue/Generator/SCR_ResourceGeneratorContainerQueue.c;1|SCR_ResourceGeneratorContainerQueue}} | SCR_ResourceGeneratorContainerStorageQueue = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/ContainerQueue/Storage/Queue/Generator/SCR_ResourceGeneratorContainerStorageQueue.c;1|SCR_ResourceGeneratorContainerStorageQueue}} | SCR_ResourceGeneratorContainerStorageQueueExtended = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/ContainerQueue/Storage/Queue/Generator/SCR_ResourceGeneratorContainerStorageQueueExtended.c;1|SCR_ResourceGeneratorContainerStorageQueueExtended}} | SCR_ResourceGeneratorMilitaryBase = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Components/Resources/Generator/SCR_ResourceGeneratorMilitaryBase.c;1|SCR_ResourceGeneratorMilitaryBase}} | SCR_ResourceGeneratorServicePoint = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Components/Resources/Generator/SCR_ResourceGeneratorServicePoint.c;1|SCR_ResourceGeneratorServicePoint}} | SCR_ResourceGeneratorStoragePolicy = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/ContainerQueue/Storage/Policy/Generator/SCR_ResourceGeneratorStoragePolicy.c;1|SCR_ResourceGeneratorStoragePolicy}} | SCR_ResourceGeneratorStoragePolicyGeneric = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/ContainerQueue/Storage/Policy/Generator/SCR_ResourceGeneratorStoragePolicyGeneric.c;1|SCR_ResourceGeneratorStoragePolicyGeneric}} | SCR_ResourceGrid = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/SCR_ResourceGrid.c;1|SCR_ResourceGrid}} | SCR_ResourceInteractor = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/Consumer/SCR_ResourceConsumer.c;151|SCR_ResourceInteractor}} | SCR_ResourceNamePredicate = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_InventoryStorageManagerComponent.c;268|SCR_ResourceNamePredicate}} | SCR_ResourceNameUtils = {{Link|enfusion://ScriptEditor/scripts/Game/Utilities/SCR_ResourceNameUtils.c;1|SCR_ResourceNameUtils}} | SCR_ResourcePlayerControllerInventoryComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Sandbox/SCR_ResourcePlayerControllerInventoryComponent.c;24|SCR_ResourcePlayerControllerInventoryComponent}} | SCR_ResourcePlayerControllerInventoryComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Sandbox/SCR_ResourcePlayerControllerInventoryComponent.c;17|SCR_ResourcePlayerControllerInventoryComponentClass}} | SCR_ResourceStorageOpenAction = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/UserActions/SCR_ResourceStorageOpenAction.c;1|SCR_ResourceStorageOpenAction}} | SCR_ResourceStoragePolicyBase = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/ContainerQueue/Storage/Policy/SCR_ResourceStoragePolicyBase.c;22|SCR_ResourceStoragePolicyBase}} | SCR_ResourceStorageTooltipDetail = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_ResourceStorageTooltipDetail.c;1|SCR_ResourceStorageTooltipDetail}} | SCR_ResourceStorageTypeTitle = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/ContainerQueue/Storage/Policy/SCR_ResourceStoragePolicyBase.c;1|SCR_ResourceStorageTypeTitle}} | SCR_ResourceStoredContainerStoragePartialHelper = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/Container/SCR_ResourceStoredContainerStoragePartialHelper.c;1|SCR_ResourceStoredContainerStoragePartialHelper}} | SCR_ResourceSystem = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/SCR_ResourceSystem.c;1|SCR_ResourceSystem}} | SCR_ResourceSystemHelper = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/Helpers/SCR_ResourceSystemHelper.c;1|SCR_ResourceSystemHelper}} | SCR_ResourceSystemSubscriptionHandle = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/Subscription/Handler/SCR_ResourceSystemSubscriptionHandle.c;1|SCR_ResourceSystemSubscriptionHandle}} | SCR_ResourceSystemSubscriptionHandleBase = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/Subscription/Handler/SCR_ResourceSystemSubscriptionHandleBase.c;1|SCR_ResourceSystemSubscriptionHandleBase}} | SCR_ResourceSystemSubscriptionListing = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/Subscription/Listing/SCR_ResourceSystemSubscriptionListing.c;1|SCR_ResourceSystemSubscriptionListing}} | SCR_ResourceSystemSubscriptionManager = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/Subscription/SCR_ResourceSystemSubscriptionManager.c;1|SCR_ResourceSystemSubscriptionManager}} | SCR_RespawnBriefingComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_RespawnBriefingComponent.c;6|SCR_RespawnBriefingComponent}} | SCR_RespawnBriefingComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_RespawnBriefingComponent.c;1|SCR_RespawnBriefingComponentClass}} | SCR_RespawnComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_RespawnComponent.c;29|SCR_RespawnComponent}} | SCR_RespawnComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_RespawnComponent.c;1|SCR_RespawnComponentClass}} | SCR_RespawnDiag = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/RequestHandling/Base/SCR_SpawnRequestComponent.c;661|SCR_RespawnDiag}} | SCR_RespawnEnabledEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_RespawnEnabledEditorAttribute.c;5|SCR_RespawnEnabledEditorAttribute}} | SCR_RespawnMenuWidgetHandler = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_RespawnMenuWidgetComponent.c;2|SCR_RespawnMenuWidgetHandler}} | SCR_RespawnMusic = {{Link|enfusion://ScriptEditor/scripts/Game/Music/SCR_RespawnMusic.c;1|SCR_RespawnMusic}} | SCR_RespawnSystemComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_RespawnSystemComponent.c;7|SCR_RespawnSystemComponent}} | SCR_RespawnSystemComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_RespawnSystemComponent.c;1|SCR_RespawnSystemComponentClass}} | SCR_RespawnSystemComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/GameMode/SCR_RespawnSystemComponentSerializer.c;1|SCR_RespawnSystemComponentSerializer}} | SCR_RespawnTicketsEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_RespawnTicketsEditorAttribute.c;1|SCR_RespawnTicketsEditorAttribute}} | SCR_RespawnTimeEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_RespawnTimeEditorAttribute.c;5|SCR_RespawnTimeEditorAttribute}} | SCR_RespawnTimer = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_RespawnTimer.c;1|SCR_RespawnTimer}} | SCR_RespawnTimerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_RespawnTimerComponent.c;9|SCR_RespawnTimerComponent}} | SCR_RespawnTimerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_RespawnTimerComponent.c;1|SCR_RespawnTimerComponentClass}} | SCR_RestoreEditorModesComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Components/SCR_RestoreEditorModesComponent.c;6|SCR_RestoreEditorModesComponent}} | SCR_RestoreEditorModesComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Components/SCR_RestoreEditorModesComponent.c;1|SCR_RestoreEditorModesComponentClass}} | SCR_RestrictedDeployableSpawnPoint = {{Link|enfusion://ScriptEditor/scripts/Game/DeployableInventoryItems/SCR_RestrictedDeployableSpawnPoint.c;8|SCR_RestrictedDeployableSpawnPoint}} | SCR_RestrictedDeployableSpawnPointClass = {{Link|enfusion://ScriptEditor/scripts/Game/DeployableInventoryItems/SCR_RestrictedDeployableSpawnPoint.c;1|SCR_RestrictedDeployableSpawnPointClass}} | SCR_RestrictedDeployableSpawnPointComponent = {{Link|enfusion://ScriptEditor/scripts/Game/DeployableInventoryItems/Components/SCR_RestrictedDeployableSpawnPointComponent.c;15|SCR_RestrictedDeployableSpawnPointComponent}} | SCR_RestrictedDeployableSpawnPointComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/DeployableInventoryItems/Components/SCR_RestrictedDeployableSpawnPointComponent.c;8|SCR_RestrictedDeployableSpawnPointComponentClass}} | SCR_RestrictedDeployableSpawnPointComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/Equipment/SCR_RestrictedDeployableSpawnPointComponentSerializer.c;1|SCR_RestrictedDeployableSpawnPointComponentSerializer}} | SCR_RestrictionZoneWarningHUDComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_RestrictionZoneWarningHUDComponent.c;1|SCR_RestrictionZoneWarningHUDComponent}} | SCR_RestrictionZoneWarningInfo = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_RestrictionZoneWarningHUDComponent.c;171|SCR_RestrictionZoneWarningInfo}} | SCR_ResupplyCampaignMilitaryBaseTaskEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Campaign/SCR_ResupplyCampaignMilitaryBaseTaskEntity.c;5|SCR_ResupplyCampaignMilitaryBaseTaskEntity}} | SCR_ResupplyCampaignMilitaryBaseTaskEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Campaign/SCR_ResupplyCampaignMilitaryBaseTaskEntity.c;1|SCR_ResupplyCampaignMilitaryBaseTaskEntityClass}} | SCR_ResupplyCatalogItemSupportStationData = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SupportStations/SCR_BaseItemHolderSupportStationAction.c;149|SCR_ResupplyCatalogItemSupportStationData}} | SCR_ResupplyContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_ResupplyContextAction.c;1|SCR_ResupplyContextAction}} | SCR_ResupplyHeldWeaponSupportStationData = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SupportStations/SCR_BaseItemHolderSupportStationAction.c;304|SCR_ResupplyHeldWeaponSupportStationData}} | SCR_ResupplyItemSupportStationData = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SupportStations/SCR_BaseItemHolderSupportStationAction.c;128|SCR_ResupplyItemSupportStationData}} | SCR_ResupplyMagazinesCallback = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_InventoryStorageManagerComponent.c;415|SCR_ResupplyMagazinesCallback}} | SCR_ResupplyMedicalGadgetSupportStationComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SupportStation/SCR_ResupplyMedicalGadgetSupportStationComponent.c;6|SCR_ResupplyMedicalGadgetSupportStationComponent}} | SCR_ResupplyMedicalGadgetSupportStationComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SupportStation/SCR_ResupplyMedicalGadgetSupportStationComponent.c;1|SCR_ResupplyMedicalGadgetSupportStationComponentClass}} | SCR_ResupplyOtherSupportStationAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SupportStations/SCR_ResupplyOtherSupportStationAction.c;1|SCR_ResupplyOtherSupportStationAction}} | SCR_ResupplyRocketPodSupportStationAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SupportStations/SCR_ResupplyRocketPodSupportStationAction.c;1|SCR_ResupplyRocketPodSupportStationAction}} | SCR_ResupplySelfSupportStationAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SupportStations/SCR_ResupplySelfSupportStationAction.c;1|SCR_ResupplySelfSupportStationAction}} | SCR_ResupplySupportStationComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SupportStation/SCR_ResupplySupportStationComponent.c;6|SCR_ResupplySupportStationComponent}} | SCR_ResupplySupportStationComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SupportStation/SCR_ResupplySupportStationComponent.c;1|SCR_ResupplySupportStationComponentClass}} | SCR_ResupplySupportStationData = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SupportStations/SCR_BaseItemHolderSupportStationAction.c;92|SCR_ResupplySupportStationData}} | SCR_ResupplyTaskCreator = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Campaign/Creators/SCR_ResupplyTaskCreator.c;1|SCR_ResupplyTaskCreator}} | SCR_ResupplyTaskSolver = {{Link|enfusion://ScriptEditor/scripts/Game/TaskSolver/SCR_ResupplyTaskSolver.c;1|SCR_ResupplyTaskSolver}} | SCR_ResupplyTaskSolverContext = {{Link|enfusion://ScriptEditor/scripts/Game/TaskSolver/SCR_ResupplyTaskSolverContext.c;1|SCR_ResupplyTaskSolverContext}} | SCR_ResupplyTaskSolverEntry = {{Link|enfusion://ScriptEditor/scripts/Game/TaskSolver/SCR_ResupplyTaskSolverEntry.c;1|SCR_ResupplyTaskSolverEntry}} | SCR_ResupplyTurretBeltSupportStationAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SupportStations/SCR_ResupplyTurretBeltSupportStationAction.c;1|SCR_ResupplyTurretBeltSupportStationAction}} | SCR_ResupplyVehicleWeaponSupportStationAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SupportStations/SCR_ResupplyVehicleWeaponSupportStationAction.c;1|SCR_ResupplyVehicleWeaponSupportStationAction}} | SCR_ReticleColor = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Sights/SCR_CollimatorSightsComponent.c;6|SCR_ReticleColor}} | SCR_RewindComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_RewindComponent.c;6|SCR_RewindComponent}} | SCR_RewindComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_RewindComponent.c;1|SCR_RewindComponentClass}} | SCR_RewindDialog = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SCR_RewindComponent.c;182|SCR_RewindDialog}} | SCR_RewindToolbarAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ToolbarActions/SCR_RewindToolbarAction.c;1|SCR_RewindToolbarAction}} | SCR_RichTextTags = {{Link|enfusion://ScriptEditor/scripts/Game/Global/SCR_RichTextTags.c;5|SCR_RichTextTags}} | SCR_RippleFireIntervalAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_RippleFireIntervalAction.c;1|SCR_RippleFireIntervalAction}} | SCR_RippleFireQuantityAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_RippleFireQuantityAction.c;1|SCR_RippleFireQuantityAction}} | SCR_RoadPropsConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapPropsConfig.c;246|SCR_RoadPropsConfig}} | SCR_RoadTypeProps = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapPropsConfig.c;286|SCR_RoadTypeProps}} | SCR_RoadViewTitle = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapPropsConfig.c;325|SCR_RoadViewTitle}} | SCR_RocketEjectorMuzzleComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Weapons/SCR_RocketEjectorMuzzleComponent.c;6|SCR_RocketEjectorMuzzleComponent}} | SCR_RocketEjectorMuzzleComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Weapons/SCR_RocketEjectorMuzzleComponent.c;1|SCR_RocketEjectorMuzzleComponentClass}} | SCR_RoleSelectionMenu = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DeployMenu/SCR_RoleSelectionMenu.c;2|SCR_RoleSelectionMenu}} | SCR_RoomCallback = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/ServerBrowserMenuCallbacks.c;15|SCR_RoomCallback}} | SCR_RoomModsManager = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/SCR_RoomModsManager.c;27|SCR_RoomModsManager}} | SCR_RoomPasswordVerification = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/SCR_RoomPasswordVerification.c;6|SCR_RoomPasswordVerification}} | SCR_RotateManualCameraComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_RotateManualCameraComponent.c;4|SCR_RotateManualCameraComponent}} | SCR_RotateModifierManualCameraComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_RotateModifierManualCameraComponent.c;4|SCR_RotateModifierManualCameraComponent}} | SCR_RotateRollManualCameraComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_RotateRollManualCameraComponent.c;4|SCR_RotateRollManualCameraComponent}} | SCR_RotationEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_RotationEditorAttribute.c;1|SCR_RotationEditorAttribute}} | SCR_RotationInertiaManualCameraComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_RotationInteriaManualCameraComponent.c;6|SCR_RotationInertiaManualCameraComponent}} | SCR_RotorDamageManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Damage/SCR_RotorDamageManagerComponent.c;5|SCR_RotorDamageManagerComponent}} | SCR_RotorDamageManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Damage/SCR_RotorDamageManagerComponent.c;1|SCR_RotorDamageManagerComponentClass}} | SCR_RotorHitZone = {{Link|enfusion://ScriptEditor/scripts/Game/HitZone/SCR_RotorHitZone.c;11|SCR_RotorHitZone}} | SCR_RowTooltipEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/SCR_RowTooltipEditorUIComponent.c;1|SCR_RowTooltipEditorUIComponent}} | SCR_RplTestComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Network/RplTestComponent.c;6|SCR_RplTestComponent}} | SCR_RplTestComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Network/RplTestComponent.c;1|SCR_RplTestComponentClass}} | SCR_RplTestComponentWrong = {{Link|enfusion://ScriptEditor/scripts/Game/Network/RplTestComponentWrong.c;6|SCR_RplTestComponentWrong}} | SCR_RplTestComponentWrongClass = {{Link|enfusion://ScriptEditor/scripts/Game/Network/RplTestComponentWrong.c;1|SCR_RplTestComponentWrongClass}} | SCR_RplTestEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Network/RplTestEntity.c;64|SCR_RplTestEntity}} | SCR_RplTestEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Network/RplTestEntity.c;1|SCR_RplTestEntityClass}} | SCR_RuinPrefabAssignerPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_RuinPrefabAssignerPlugin.c;2|SCR_RuinPrefabAssignerPlugin}} | SCR_RuinPrefabCreatorPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_RuinPrefabCreatorPlugin.c;2|SCR_RuinPrefabCreatorPlugin}} | SCR_SalineBagStorageSlot = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_SalineBagStorageSlot.c;1|SCR_SalineBagStorageSlot}} | SCR_SalineBagUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_SalineBagUserAction.c;1|SCR_SalineBagUserAction}} | SCR_SalineDamageEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/DamageEffects/CharacterDamageEffects/SCR_SalineDamageEffect.c;1|SCR_SalineDamageEffect}} | SCR_SalineMovedCallback = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_SalineStorageComponent.c;5|SCR_SalineMovedCallback}} | SCR_SalinePredicate = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_InventoryStorageManagerComponent.c;196|SCR_SalinePredicate}} | SCR_SalineStorageComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_SalineStorageComponent.c;29|SCR_SalineStorageComponent}} | SCR_SalineStorageComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_SalineStorageComponent.c;1|SCR_SalineStorageComponentClass}} | SCR_SalvageVehicleSlotInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_SalvageVehicleSlotInfo.c;1|SCR_SalvageVehicleSlotInfo}} | SCR_Save_EntryWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Save/SCR_Save_EntryWidgets.c;3|SCR_Save_EntryWidgets}} | SCR_SaveArsenalLoadout = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_SaveArsenalLoadoutAction.c;2|SCR_SaveArsenalLoadout}} | SCR_SaveDialogUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Save/SCR_SaveDialogUIComponent.c;5|SCR_SaveDialogUIComponent}} | SCR_SaveEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Save/SCR_SaveEditorUIComponent.c;1|SCR_SaveEditorUIComponent}} | SCR_SaveImageGalleryPickerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ConfigurableWidgetEntries/SCR_SaveImageGalleryPickerComponent.c;1|SCR_SaveImageGalleryPickerComponent}} | SCR_SaveLoadEntryComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Save/SCR_SaveLoadEntryComponent.c;5|SCR_SaveLoadEntryComponent}} | SCR_SaveManualCameraComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_SaveManualCameraComponent.c;4|SCR_SaveManualCameraComponent}} | SCR_SaveSessionToolbarAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ToolbarActions/SCR_SaveSessionToolbarAction.c;1|SCR_SaveSessionToolbarAction}} | SCR_SaveWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Save/SCR_SaveWidgets.c;3|SCR_SaveWidgets}} | SCR_SaveWorkshopManagerUI = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/SaveLoad/UI/SCR_SaveWorkshopManagerUI.c;5|SCR_SaveWorkshopManagerUI}} | SCR_ScenarioBackendImageComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_BackendImageComponent.c;401|SCR_ScenarioBackendImageComponent}} | SCR_ScenarioConfirmationDialogUi = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/ScenarioMenu/SCR_ScenarioDialogs.c;26|SCR_ScenarioConfirmationDialogUi}} | SCR_ScenarioDetailsPanelComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/Common/SCR_ScenarioDetailsPanelComponent.c;6|SCR_ScenarioDetailsPanelComponent}} | SCR_ScenarioDialogs = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/ScenarioMenu/SCR_ScenarioDialogs.c;5|SCR_ScenarioDialogs}} | SCR_ScenarioFrameworEntitykDamageStateCondition = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Conditions/SCR_ScenarioFrameworkEntityDamageState.c;1|SCR_ScenarioFrameworEntitykDamageStateCondition}} | SCR_ScenarioFrameworkActionAddItemToInventory = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionAddItemToInventory.c;1|SCR_ScenarioFrameworkActionAddItemToInventory}} | SCR_ScenarioFrameworkActionAddNotoriety = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionAddNotoriety.c;1|SCR_ScenarioFrameworkActionAddNotoriety}} | SCR_ScenarioFrameworkActionAddScoreToCAHFaction = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionAddScoreToCAHFaction.c;1|SCR_ScenarioFrameworkActionAddScoreToCAHFaction}} | SCR_ScenarioFrameworkActionAddTaskProgress = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionAddTaskProgress.c;1|SCR_ScenarioFrameworkActionAddTaskProgress}} | SCR_ScenarioFrameworkActionAI = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/AIActions/SCR_ScenarioFrameworkActionAI.c;1|SCR_ScenarioFrameworkActionAI}} | SCR_ScenarioFrameworkActionAppendBriefingEntryText = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionAppendBriefingEntryText.c;1|SCR_ScenarioFrameworkActionAppendBriefingEntryText}} | SCR_ScenarioFrameworkActionAppendBriefingEntryTextBasedOnTask = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionAppendBriefingEntryTextBasedOnTask.c;1|SCR_ScenarioFrameworkActionAppendBriefingEntryTextBasedOnTask}} | SCR_ScenarioFrameworkActionAssignTask = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionAssignTask.c;1|SCR_ScenarioFrameworkActionAssignTask}} | SCR_ScenarioFrameworkActionAttachToSlotManager = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionAttachToSlotManager.c;1|SCR_ScenarioFrameworkActionAttachToSlotManager}} | SCR_ScenarioFrameworkActionAudioSystemPauseResume = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionAudioSystemPauseResume.c;1|SCR_ScenarioFrameworkActionAudioSystemPauseResume}} | SCR_ScenarioFrameworkActionAudioSystemSetMasterVolume = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionAudioSystemSetMasterVolume.c;1|SCR_ScenarioFrameworkActionAudioSystemSetMasterVolume}} | SCR_ScenarioFrameworkActionBase = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionBase.c;1|SCR_ScenarioFrameworkActionBase}} | SCR_ScenarioFrameworkActionBasedOnConditions = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionBasedOnConditions.c;1|SCR_ScenarioFrameworkActionBasedOnConditions}} | SCR_ScenarioFrameworkActionCallAnimationCommand = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionCallAnimationCommand.c;1|SCR_ScenarioFrameworkActionCallAnimationCommand}} | SCR_ScenarioFrameworkActionChangeAllTaskState = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionChangeAllTaskState.c;1|SCR_ScenarioFrameworkActionChangeAllTaskState}} | SCR_ScenarioFrameworkActionChangeLayerActivationType = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionChangeLayerActivationType.c;1|SCR_ScenarioFrameworkActionChangeLayerActivationType}} | SCR_ScenarioFrameworkActionChangeLayerTerminationStatus = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionChangeLayerTerminationStatus.c;1|SCR_ScenarioFrameworkActionChangeLayerTerminationStatus}} | SCR_ScenarioFrameworkActionChangeTaskIcon = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionChangeTaskIcon.c;1|SCR_ScenarioFrameworkActionChangeTaskIcon}} | SCR_ScenarioFrameworkActionChangeTaskOwnership = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionChangeTaskOwnership.c;1|SCR_ScenarioFrameworkActionChangeTaskOwnership}} | SCR_ScenarioFrameworkActionChangeTaskState = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionChangeTaskState.c;1|SCR_ScenarioFrameworkActionChangeTaskState}} | SCR_ScenarioFrameworkActionChangeTaskTaskUIVisibility = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionChangeTaskTaskUIVisibility.c;1|SCR_ScenarioFrameworkActionChangeTaskTaskUIVisibility}} | SCR_ScenarioFrameworkActionChangeTaskTaskVisibility = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionChangeTaskTaskVisibility.c;1|SCR_ScenarioFrameworkActionChangeTaskTaskVisibility}} | SCR_ScenarioFrameworkActionChangeTaskTitleOrDescription = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionChangeTaskTitleOrDescription.c;1|SCR_ScenarioFrameworkActionChangeTaskTitleOrDescription}} | SCR_ScenarioFrameworkActionChangeTime = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionChangeTime.c;1|SCR_ScenarioFrameworkActionChangeTime}} | SCR_ScenarioFrameworkActionChangeTriggerActivationPresence = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionChangeTriggerActivationPresence.c;1|SCR_ScenarioFrameworkActionChangeTriggerActivationPresence}} | SCR_ScenarioFrameworkActionChangeUserActionVisibility = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionChangeUserActionVisibility.c;1|SCR_ScenarioFrameworkActionChangeUserActionVisibility}} | SCR_ScenarioFrameworkActionChangeWeather = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionChangeWeather.c;1|SCR_ScenarioFrameworkActionChangeWeather}} | SCR_ScenarioFrameworkActionCOKLocationSelector = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionCOKLocationSelector.c;1|SCR_ScenarioFrameworkActionCOKLocationSelector}} | SCR_ScenarioFrameworkActionCompareCounterAndExecute = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionCompareCounterAndExecute.c;1|SCR_ScenarioFrameworkActionCompareCounterAndExecute}} | SCR_ScenarioFrameworkActionCountInventoryItemsAndExecuteAction = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionCountInventoryItemsAndExecuteAction.c;1|SCR_ScenarioFrameworkActionCountInventoryItemsAndExecuteAction}} | SCR_ScenarioFrameworkActionDamageWheel = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionDamageWheel.c;1|SCR_ScenarioFrameworkActionDamageWheel}} | SCR_ScenarioFrameworkActionDecreaseLogicCounter = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionDecreaseLogicCounter.c;1|SCR_ScenarioFrameworkActionDecreaseLogicCounter}} | SCR_ScenarioFrameworkActionDeleteEntity = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionDeleteEntity.c;1|SCR_ScenarioFrameworkActionDeleteEntity}} | SCR_ScenarioFrameworkActionDeleteMarker = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionDeleteMarker.c;1|SCR_ScenarioFrameworkActionDeleteMarker}} | SCR_ScenarioFrameworkActionDestruction = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/DamageActions/SCR_ScenarioFrameworkActionDestruction.c;1|SCR_ScenarioFrameworkActionDestruction}} | SCR_ScenarioFrameworkActionEnableDamageHandling = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/DamageActions/SCR_ScenarioFrameworkActionEnableDamageHandling.c;1|SCR_ScenarioFrameworkActionEnableDamageHandling}} | SCR_ScenarioFrameworkActionEndMission = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionEndMission.c;1|SCR_ScenarioFrameworkActionEndMission}} | SCR_ScenarioFrameworkActionEventOnProjectileShot = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionEventOnProjectileShot.c;1|SCR_ScenarioFrameworkActionEventOnProjectileShot}} | SCR_ScenarioFrameworkActionExecuteFunction = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionExecuteFunction.c;2|SCR_ScenarioFrameworkActionExecuteFunction}} | SCR_ScenarioFrameworkActionFailTaskIfVehiclesInTriggerDestroyed = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionFailTaskIfVehiclesInTriggerDestroyed.c;1|SCR_ScenarioFrameworkActionFailTaskIfVehiclesInTriggerDestroyed}} | SCR_ScenarioFrameworkActionFeedParamToTaskDescription = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionFeedParamToTaskDescription.c;1|SCR_ScenarioFrameworkActionFeedParamToTaskDescription}} | SCR_ScenarioFrameworkActionHideHint = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionHideHint.c;1|SCR_ScenarioFrameworkActionHideHint}} | SCR_ScenarioFrameworkActionIncrementCounter = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionIncrementCounter.c;1|SCR_ScenarioFrameworkActionIncrementCounter}} | SCR_ScenarioFrameworkActionInputBase = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/ActionInputs/SCR_ScenarioFrameworkActionInputBase.c;1|SCR_ScenarioFrameworkActionInputBase}} | SCR_ScenarioFrameworkActionInputCheckEntitiesInAreaTrigger = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/ActionInputs/SCR_ScenarioFrameworkActionInputCheckEntitiesInAreaTrigger.c;1|SCR_ScenarioFrameworkActionInputCheckEntitiesInAreaTrigger}} | SCR_ScenarioFrameworkActionInputCheckEntitiesInTrigger = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/ActionInputs/SCR_ScenarioFrameworkActionInputCheckEntitiesInTrigger.c;1|SCR_ScenarioFrameworkActionInputCheckEntitiesInTrigger}} | SCR_ScenarioFrameworkActionInputOnTaskEventIncreaseCounter = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/ActionInputs/SCR_ScenarioFrameworkActionInputOnTaskEventIncreaseCounter.c;1|SCR_ScenarioFrameworkActionInputOnTaskEventIncreaseCounter}} | SCR_ScenarioFrameworkActionIntroVoicelineBasedOnTasks = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionIntroVoicelineBasedOnTasks.c;1|SCR_ScenarioFrameworkActionIntroVoicelineBasedOnTasks}} | SCR_ScenarioFrameworkActionItemSafeguard = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionItemSafeguard.c;1|SCR_ScenarioFrameworkActionItemSafeguard}} | SCR_ScenarioFrameworkActionKillEntity = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionKillEntity.c;1|SCR_ScenarioFrameworkActionKillEntity}} | SCR_ScenarioFrameworkActionLimiter = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionLimiter.c;1|SCR_ScenarioFrameworkActionLimiter}} | SCR_ScenarioFrameworkActionLimiterSave = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/States/SCR_ScenarioFrameworkSystemSerializer.c;1363|SCR_ScenarioFrameworkActionLimiterSave}} | SCR_ScenarioFrameworkActionLockOrUnlockAllTargetVehiclesInTrigger = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionLockOrUnlockAllTargetVehiclesInTrigger.c;2|SCR_ScenarioFrameworkActionLockOrUnlockAllTargetVehiclesInTrigger}} | SCR_ScenarioFrameworkActionLockOrUnlockVehicle = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionLockOrUnlockVehicle.c;2|SCR_ScenarioFrameworkActionLockOrUnlockVehicle}} | SCR_ScenarioFrameworkActionLoopOverNotRandomlySelectedLayers = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionLoopOverNotRandomlySelectedLayers.c;1|SCR_ScenarioFrameworkActionLoopOverNotRandomlySelectedLayers}} | SCR_ScenarioFrameworkActionMapPanZoom = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionMapPanZoom.c;1|SCR_ScenarioFrameworkActionMapPanZoom}} | SCR_ScenarioFrameworkActionMedical = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/MedicalActions/SCR_ScenarioFrameworkActionMedical.c;1|SCR_ScenarioFrameworkActionMedical}} | SCR_ScenarioFrameworkActionMoveIntoCompartment = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionMoveIntoCompartment.c;1|SCR_ScenarioFrameworkActionMoveIntoCompartment}} | SCR_ScenarioFrameworkActionMoveIntoInventory = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionMoveIntoInventory.c;1|SCR_ScenarioFrameworkActionMoveIntoInventory}} | SCR_ScenarioFrameworkActionOnAllChildrenSpawned = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionOnAllChildrenSpawned.c;1|SCR_ScenarioFrameworkActionOnAllChildrenSpawned}} | SCR_ScenarioFrameworkActionOnAnimationEvent = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkOnAnimationEvent.c;1|SCR_ScenarioFrameworkActionOnAnimationEvent}} | SCR_ScenarioFrameworkActionOnCharacterEnteredOrLeftCompartment = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionOnCharacterEnteredOrLeftCompartment.c;1|SCR_ScenarioFrameworkActionOnCharacterEnteredOrLeftCompartment}} | SCR_ScenarioFrameworkActionOnCinematicFinished = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionOnCinematicFinished.c;1|SCR_ScenarioFrameworkActionOnCinematicFinished}} | SCR_ScenarioFrameworkActionOnCompartmentEnteredOrLeft = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionOnCompartmentEnteredOrLeft.c;1|SCR_ScenarioFrameworkActionOnCompartmentEnteredOrLeft}} | SCR_ScenarioFrameworkActionOnDamage = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/DamageActions/SCR_ScenarioFrameworkActionOnDamage.c;1|SCR_ScenarioFrameworkActionOnDamage}} | SCR_ScenarioFrameworkActionOnDamageStateChanged = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/DamageActions/SCR_ScenarioFrameworkActionOnDamageStateChanged.c;1|SCR_ScenarioFrameworkActionOnDamageStateChanged}} | SCR_ScenarioFrameworkActionOnEngineStartedOrStop = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionOnEngineStartedOrStop.c;1|SCR_ScenarioFrameworkActionOnEngineStartedOrStop}} | SCR_ScenarioFrameworkActionOnGroupAgentEntities = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionOnGroupAgentEntities.c;1|SCR_ScenarioFrameworkActionOnGroupAgentEntities}} | SCR_ScenarioFrameworkActionOnResourceChanged = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/ResourceComponentActions/SCR_ScenarioFrameworkActionOnResourceChanged.c;1|SCR_ScenarioFrameworkActionOnResourceChanged}} | SCR_ScenarioFrameworkActionOnResourceConsumerChange = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/ResourceComponentActions/SCR_ScenarioFrameworkActionOnResourceConsumerChange.c;1|SCR_ScenarioFrameworkActionOnResourceConsumerChange}} | SCR_ScenarioFrameworkActionOnUserActionEvent = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionOnUserActionEvent.c;1|SCR_ScenarioFrameworkActionOnUserActionEvent}} | SCR_ScenarioFrameworkActionOnUserActionEventSave = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/States/SCR_ScenarioFrameworkSystemSerializer.c;1421|SCR_ScenarioFrameworkActionOnUserActionEventSave}} | SCR_ScenarioFrameworkActionPlayCinematic = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionPlayCinematic.c;1|SCR_ScenarioFrameworkActionPlayCinematic}} | SCR_ScenarioFrameworkActionPlayCommunicationSoundOnEntity = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionPlayCommunicationSoundOnEntity.c;1|SCR_ScenarioFrameworkActionPlayCommunicationSoundOnEntity}} | SCR_ScenarioFrameworkActionPlayMusic = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionPlayMusic.c;1|SCR_ScenarioFrameworkActionPlayMusic}} | SCR_ScenarioFrameworkActionPlaySound = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionPlaySound.c;1|SCR_ScenarioFrameworkActionPlaySound}} | SCR_ScenarioFrameworkActionPlaySoundOnEntity = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionPlaySoundOnEntity.c;1|SCR_ScenarioFrameworkActionPlaySoundOnEntity}} | SCR_ScenarioFrameworkActionPrepareAreaFromDynamicDespawn = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionPrepareAreaFromDynamicDespawn.c;1|SCR_ScenarioFrameworkActionPrepareAreaFromDynamicDespawn}} | SCR_ScenarioFrameworkActionPrepareLayerFromDynamicDespawn = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionPrepareLayerFromDynamicDespawn.c;1|SCR_ScenarioFrameworkActionPrepareLayerFromDynamicDespawn}} | SCR_ScenarioFrameworkActionProcessVoicelineEnumAndString = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionProcessVoicelineEnumAndString.c;1|SCR_ScenarioFrameworkActionProcessVoicelineEnumAndString}} | SCR_ScenarioFrameworkActionQRFDispacher = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionQRFDispacher.c;8|SCR_ScenarioFrameworkActionQRFDispacher}} | SCR_ScenarioFrameworkActionRandomAction = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionRandomAction.c;1|SCR_ScenarioFrameworkActionRandomAction}} | SCR_ScenarioFrameworkActionRemoveAreaFromDynamicDespawn = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionRemoveAreaFromDynamicDespawn.c;1|SCR_ScenarioFrameworkActionRemoveAreaFromDynamicDespawn}} | SCR_ScenarioFrameworkActionRemoveItemFromInventory = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionRemoveItemFromInventory.c;1|SCR_ScenarioFrameworkActionRemoveItemFromInventory}} | SCR_ScenarioFrameworkActionRemoveLayerFromDynamicDespawn = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionRemoveLayerFromDynamicDespawn.c;1|SCR_ScenarioFrameworkActionRemoveLayerFromDynamicDespawn}} | SCR_ScenarioFrameworkActionRemoveTaskProgress = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionRemoveTaskProgress.c;1|SCR_ScenarioFrameworkActionRemoveTaskProgress}} | SCR_ScenarioFrameworkActionResetCounter = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionResetCounter.c;1|SCR_ScenarioFrameworkActionResetCounter}} | SCR_ScenarioFrameworkActionRestoreLayerToDefault = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionRestoreLayerToDefault.c;1|SCR_ScenarioFrameworkActionRestoreLayerToDefault}} | SCR_ScenarioFrameworkActionSave = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/States/SCR_ScenarioFrameworkSystemSerializer.c;1152|SCR_ScenarioFrameworkActionSave}} | SCR_ScenarioFrameworkActionSetBriefingEntryText = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionSetBriefingEntryText.c;1|SCR_ScenarioFrameworkActionSetBriefingEntryText}} | SCR_ScenarioFrameworkActionSetBriefingEntryTextBasedOnGeneratedTasks = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionSetBriefingEntryTextBasedOnGeneratedTasks.c;1|SCR_ScenarioFrameworkActionSetBriefingEntryTextBasedOnGeneratedTasks}} | SCR_ScenarioFrameworkActionSetCharacterStance = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionSetCharacterStance.c;1|SCR_ScenarioFrameworkActionSetCharacterStance}} | SCR_ScenarioFrameworkActionSetCharacterUnconscious = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionSetCharacterUnconscious.c;1|SCR_ScenarioFrameworkActionSetCharacterUnconscious}} | SCR_ScenarioFrameworkActionSetEntityFaction = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionSetEntityFaction.c;1|SCR_ScenarioFrameworkActionSetEntityFaction}} | SCR_ScenarioFrameworkActionSetEntityName = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionSetEntityName.c;1|SCR_ScenarioFrameworkActionSetEntityName}} | SCR_ScenarioFrameworkActionSetEntityPosition = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionSetEntityPosition.c;1|SCR_ScenarioFrameworkActionSetEntityPosition}} | SCR_ScenarioFrameworkActionSetEntityScale = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionSetEntityScale.c;1|SCR_ScenarioFrameworkActionSetEntityScale}} | SCR_ScenarioFrameworkActionSetEntityTransformation = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionSetEntityTransformation.c;1|SCR_ScenarioFrameworkActionSetEntityTransformation}} | SCR_ScenarioFrameworkActionSetExecutionEntryTextBasedOnGeneratedTasks = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionSetExecutionEntryTextBasedOnGeneratedTasks.c;1|SCR_ScenarioFrameworkActionSetExecutionEntryTextBasedOnGeneratedTasks}} | SCR_ScenarioFrameworkActionSetFactionToCAHArea = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionSetFactionToCAHArea.c;1|SCR_ScenarioFrameworkActionSetFactionToCAHArea}} | SCR_ScenarioFrameworkActionSetFuelConsumption = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionSetFuelConsumption.c;1|SCR_ScenarioFrameworkActionSetFuelConsumption}} | SCR_ScenarioFrameworkActionSetFuelPercentage = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionSetFuelPercentage.c;1|SCR_ScenarioFrameworkActionSetFuelPercentage}} | SCR_ScenarioFrameworkActionSetGrenadeLive = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionSetGrenadeLive.c;1|SCR_ScenarioFrameworkActionSetGrenadeLive}} | SCR_ScenarioFrameworkActionSetMissionEndScreen = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionSetMissionEndScreen.c;1|SCR_ScenarioFrameworkActionSetMissionEndScreen}} | SCR_ScenarioFrameworkActionSetParentTask = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionSetParentTask.c;1|SCR_ScenarioFrameworkActionSetParentTask}} | SCR_ScenarioFrameworkActionSetResourceTypeEnabled = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/ResourceComponentActions/SCR_ScenarioFrameworkActionSetResourceTypeEnabled.c;1|SCR_ScenarioFrameworkActionSetResourceTypeEnabled}} | SCR_ScenarioFrameworkActionSetSupplyPercentage = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionSetSupplyPercentage.c;1|SCR_ScenarioFrameworkActionSetSupplyPercentage}} | SCR_ScenarioFrameworkActionSetTaskProgress = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionSetTaskProgress.c;1|SCR_ScenarioFrameworkActionSetTaskProgress}} | SCR_ScenarioFrameworkActionSetVehicleCruiseSpeed = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionSetVehicleCruiseSpeed.c;1|SCR_ScenarioFrameworkActionSetVehicleCruiseSpeed}} | SCR_ScenarioFrameworkActionSetWoundState = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionSetWoundState.c;1|SCR_ScenarioFrameworkActionSetWoundState}} | SCR_ScenarioFrameworkActionShowHint = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionShowHint.c;1|SCR_ScenarioFrameworkActionShowHint}} | SCR_ScenarioFrameworkActionShowItemSlotHint = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionShowItemSlotHint.c;1|SCR_ScenarioFrameworkActionShowItemSlotHint}} | SCR_ScenarioFrameworkActionShowLayout = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionShowLayout.c;1|SCR_ScenarioFrameworkActionShowLayout}} | SCR_ScenarioFrameworkActionShowPopupNotification = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionShowPopupNotification.c;1|SCR_ScenarioFrameworkActionShowPopupNotification}} | SCR_ScenarioFrameworkActionShowWidget = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionShowWidget.c;1|SCR_ScenarioFrameworkActionShowWidget}} | SCR_ScenarioFrameworkActionSpawnClosestObjectFromList = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionSpawnClosestObjectFromList.c;1|SCR_ScenarioFrameworkActionSpawnClosestObjectFromList}} | SCR_ScenarioFrameworkActionSpawnObjectBasedOnDistance = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionSpawnObjectBasedOnDistance.c;1|SCR_ScenarioFrameworkActionSpawnObjectBasedOnDistance}} | SCR_ScenarioFrameworkActionSpawnObjects = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionSpawnObjects.c;1|SCR_ScenarioFrameworkActionSpawnObjects}} | SCR_ScenarioFrameworkActionSpawnObjectsFromVariable = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionSpawnObjectsFromVariable.c;1|SCR_ScenarioFrameworkActionSpawnObjectsFromVariable}} | SCR_ScenarioFrameworkActionStartAnimation = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionStartAnimation.c;1|SCR_ScenarioFrameworkActionStartAnimation}} | SCR_ScenarioFrameworkActionStartSimpleAnimation = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionStartSimpleAnimation.c;1|SCR_ScenarioFrameworkActionStartSimpleAnimation}} | SCR_ScenarioFrameworkActionStopAnimation = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionStopAnimation.c;1|SCR_ScenarioFrameworkActionStopAnimation}} | SCR_ScenarioFrameworkActionToggleEngine = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionToggleEngine.c;1|SCR_ScenarioFrameworkActionToggleEngine}} | SCR_ScenarioFrameworkActionToggleLights = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionToggleLights.c;1|SCR_ScenarioFrameworkActionToggleLights}} | SCR_ScenarioFrameworkActionUnlockAchievement = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionUnlockAchievement.c;1|SCR_ScenarioFrameworkActionUnlockAchievement}} | SCR_ScenarioFrameworkActionVehicle = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/VehicleActions/SCR_ScenarioFrameworkActionVehicle.c;1|SCR_ScenarioFrameworkActionVehicle}} | SCR_ScenarioFrameworkActionVoiceOverPlayLine = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionVoiceOverPlayLine.c;1|SCR_ScenarioFrameworkActionVoiceOverPlayLine}} | SCR_ScenarioFrameworkActionVoiceOverPlaySequence = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionVoiceOverPlaySequence.c;1|SCR_ScenarioFrameworkActionVoiceOverPlaySequence}} | SCR_ScenarioFrameworkActionWaitAndExecute = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionWaitAndExecute.c;1|SCR_ScenarioFrameworkActionWaitAndExecute}} | SCR_ScenarioFrameworkActionWaitAndExecuteSave = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/States/SCR_ScenarioFrameworkSystemSerializer.c;1270|SCR_ScenarioFrameworkActionWaitAndExecuteSave}} | SCR_ScenarioFrameworkActivationConditionBase = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Conditions/SCR_ScenarioFrameworkActivationConditionBase.c;1|SCR_ScenarioFrameworkActivationConditionBase}} | SCR_ScenarioFrameworkADSCondition = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Conditions/SCR_ScenarioFrameworkADSCondition.c;1|SCR_ScenarioFrameworkADSCondition}} | SCR_ScenarioFrameworkAIAction = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/AIActions/SCR_ScenarioFrameworkAIAction.c;1|SCR_ScenarioFrameworkAIAction}} | SCR_ScenarioFrameworkAIActionChangeAttachedAI = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/AIActions/SCR_ScenarioFrameworkAIActionChangeAttachedAI.c;1|SCR_ScenarioFrameworkAIActionChangeAttachedAI}} | SCR_ScenarioFrameworkAIActionDisableLOD = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/AIActions/SCR_ScenarioFrameworkAIActionDisableLOD.c;1|SCR_ScenarioFrameworkAIActionDisableLOD}} | SCR_ScenarioFrameworkAIActionEnableAI = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/AIActions/SCR_ScenarioFrameworkAIActionEnableAI.c;1|SCR_ScenarioFrameworkAIActionEnableAI}} | SCR_ScenarioFrameworkAIActionJoinGroup = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/AIActions/SCR_ScenarioFrameworkAIActionJoinGroup.c;1|SCR_ScenarioFrameworkAIActionJoinGroup}} | SCR_ScenarioFrameworkAIActionMoveAIIntoVehicle = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/AIActions/SCR_ScenarioFrameworkAIActionMoveAIIntoVehicle.c;1|SCR_ScenarioFrameworkAIActionMoveAIIntoVehicle}} | SCR_ScenarioFrameworkAIActionOnAgentCountChanged = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/AIActions/SCR_ScenarioFrameworkAIActionOnAgentCountChanged.c;1|SCR_ScenarioFrameworkAIActionOnAgentCountChanged}} | SCR_ScenarioFrameworkAIActionOnAnimationWaypointStarted = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/AIActions/SCR_ScenarioFrameworkAIActionOnAnimationWaypointStarted.c;1|SCR_ScenarioFrameworkAIActionOnAnimationWaypointStarted}} | SCR_ScenarioFrameworkAIActionOnThreatStateChanged = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/AIActions/SCR_ScenarioFrameworkAIActionOnThreatStateChanged.c;1|SCR_ScenarioFrameworkAIActionOnThreatStateChanged}} | SCR_ScenarioFrameworkAIActionOnWaypointCompleted = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/AIActions/SCR_ScenarioFrameworkAIActionOnWaypointCompleted.c;1|SCR_ScenarioFrameworkAIActionOnWaypointCompleted}} | SCR_ScenarioFrameworkAIActionSetCombatType = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/AIActions/SCR_ScenarioFrameworkAIActionSetCombatType.c;2|SCR_ScenarioFrameworkAIActionSetCombatType}} | SCR_ScenarioFrameworkAIActionSetFormation = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/AIActions/SCR_ScenarioFrameworkAIActionSetFormation.c;1|SCR_ScenarioFrameworkAIActionSetFormation}} | SCR_ScenarioFrameworkAIActionSetGroupCombatMode = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/AIActions/SCR_ScenarioFrameworkAIActionSetGroupCombatMode.c;1|SCR_ScenarioFrameworkAIActionSetGroupCombatMode}} | SCR_ScenarioFrameworkAIActionSetHoldFire = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/AIActions/SCR_ScenarioFrameworkAIActionSetHoldFire.c;2|SCR_ScenarioFrameworkAIActionSetHoldFire}} | SCR_ScenarioFrameworkAIActionSetMaxAutonomousDistance = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/AIActions/SCR_ScenarioFrameworkAIActionSetMaxAutonomousDistance.c;1|SCR_ScenarioFrameworkAIActionSetMaxAutonomousDistance}} | SCR_ScenarioFrameworkAIActionSetPerceptionFactor = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/AIActions/SCR_ScenarioFrameworkAIActionSetPerceptionFactor.c;1|SCR_ScenarioFrameworkAIActionSetPerceptionFactor}} | SCR_ScenarioFrameworkAIActionSetRadioFrequency = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkAIActionSetRadioFrequency.c;2|SCR_ScenarioFrameworkAIActionSetRadioFrequency}} | SCR_ScenarioFrameworkAIActionSetSkill = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/AIActions/SCR_ScenarioFrameworkAIActionSetSkill.c;1|SCR_ScenarioFrameworkAIActionSetSkill}} | SCR_ScenarioFrameworkAIActionShootFlare = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/AIActions/SCR_ScenarioFrameworkAIActionShootFlare.c;1|SCR_ScenarioFrameworkAIActionShootFlare}} | SCR_ScenarioFrameworkAIActionSplitGroup = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/AIActions/SCR_ScenarioFrameworkAIActionSplitGroup.c;1|SCR_ScenarioFrameworkAIActionSplitGroup}} | SCR_ScenarioFrameworkAIActionToggleLights = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/AIActions/SCR_ScenarioFrameworkAIActionToggleLights.c;1|SCR_ScenarioFrameworkAIActionToggleLights}} | SCR_ScenarioFrameworkAIAddDummyPriorityAction = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/AIActions/SCR_ScenarioFrameworkAIAddDummyPriorityAction.c;1|SCR_ScenarioFrameworkAIAddDummyPriorityAction}} | SCR_ScenarioFrameworkAIAddSetting = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/AIActions/SCR_ScenarioFrameworkAIAddSetting.c;1|SCR_ScenarioFrameworkAIAddSetting}} | SCR_ScenarioFrameworkAIAddWaypoint = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/AIActions/SCR_ScenarioFrameworkAIAddWaypoint.c;1|SCR_ScenarioFrameworkAIAddWaypoint}} | SCR_ScenarioFrameworkAIFailDummyPriorityAction = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/AIActions/SCR_ScenarioFrameworkAIFailDummyPriorityAction.c;1|SCR_ScenarioFrameworkAIFailDummyPriorityAction}} | SCR_ScenarioFrameworkAIThreatStateCondition = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/AIActions/SCR_ScenarioFrameworkAIThreatStateCondition.c;1|SCR_ScenarioFrameworkAIThreatStateCondition}} | SCR_ScenarioFrameworkArea = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkArea.c;24|SCR_ScenarioFrameworkArea}} | SCR_ScenarioFrameworkAreaClass = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkArea.c;1|SCR_ScenarioFrameworkAreaClass}} | SCR_ScenarioFrameworkAreaSave = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/States/SCR_ScenarioFrameworkSystemSerializer.c;345|SCR_ScenarioFrameworkAreaSave}} | SCR_ScenarioFrameworkCallQueueSystem = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/SCR_ScenarioFrameworkCallQueueSystem.c;1|SCR_ScenarioFrameworkCallQueueSystem}} | SCR_ScenarioFrameworkCharacterInVehicleCondition = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Conditions/SCR_ScenarioFrameworkCharacterInVehicleCondition.c;1|SCR_ScenarioFrameworkCharacterInVehicleCondition}} | SCR_ScenarioFrameworkCheckEntityType = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Conditions/SCR_ScenarioFrameworkCheckEntityType.c;1|SCR_ScenarioFrameworkCheckEntityType}} | SCR_ScenarioFrameworkCinematicEntityComponent = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/SCR_ScenarioFrameworkCinematicEntityComponent.c;6|SCR_ScenarioFrameworkCinematicEntityComponent}} | SCR_ScenarioFrameworkCinematicEntityComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/SCR_ScenarioFrameworkCinematicEntityComponent.c;1|SCR_ScenarioFrameworkCinematicEntityComponentClass}} | SCR_ScenarioFrameworkConversionPlugin_Phase1 = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/Update/1.0.0-1.1.0/SCR_ScenarioFrameworkUpdatePlugin.c;7|SCR_ScenarioFrameworkConversionPlugin_Phase1}} | SCR_ScenarioFrameworkConversionPlugin_Phase2 = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/Update/1.0.0-1.1.0/SCR_ScenarioFrameworkUpdatePlugin.c;666|SCR_ScenarioFrameworkConversionPlugin_Phase2}} | SCR_ScenarioFrameworkConversionPlugin_Rune = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/Update/1.0.0-1.1.0/SCR_ScenarioFrameworkUpdatePlugin.c;752|SCR_ScenarioFrameworkConversionPlugin_Rune}} | SCR_ScenarioFrameworkCreateVariable = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkCreateVariable.c;1|SCR_ScenarioFrameworkCreateVariable}} | SCR_ScenarioFrameworkDamageContextConditionBase = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/DamageActions/DamageInstigatorConditions/SCR_ScenarioFrameworkDamageContextConditionBase.c;1|SCR_ScenarioFrameworkDamageContextConditionBase}} | SCR_ScenarioFrameworkDamageContextConditionCollider = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/DamageActions/DamageInstigatorConditions/SCR_ScenarioFrameworkDamageContextConditionCollider.c;1|SCR_ScenarioFrameworkDamageContextConditionCollider}} | SCR_ScenarioFrameworkDamageContextConditionDamageType = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/DamageActions/DamageInstigatorConditions/SCR_ScenarioFrameworkDamageContextConditionDamageType.c;1|SCR_ScenarioFrameworkDamageContextConditionDamageType}} | SCR_ScenarioFrameworkDamageContextConditionHitZone = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/DamageActions/DamageInstigatorConditions/SCR_ScenarioFrameworkDamageContextConditionHitZone.c;1|SCR_ScenarioFrameworkDamageContextConditionHitZone}} | SCR_ScenarioFrameworkDamageContextConditionInsigatorEntity = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/DamageActions/DamageInstigatorConditions/SCR_ScenarioFrameworkDamageContextConditionInsigatorEntity.c;1|SCR_ScenarioFrameworkDamageContextConditionInsigatorEntity}} | SCR_ScenarioFrameworkDamageContextConditionProjectilePrefab = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/DamageActions/DamageInstigatorConditions/SCR_ScenarioFrameworkDamageContextConditionProjectilePrefab.c;1|SCR_ScenarioFrameworkDamageContextConditionProjectilePrefab}} | SCR_ScenarioFrameworkDamageContextConditionValue = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/DamageActions/DamageInstigatorConditions/SCR_ScenarioFrameworkDamageContextConditionValue.c;1|SCR_ScenarioFrameworkDamageContextConditionValue}} | SCR_ScenarioFrameworkDamageContextEnumType = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/DamageActions/DamageInstigatorConditions/Enums/SCR_ScenarioFrameworkDamageContextEnumType.c;1|SCR_ScenarioFrameworkDamageContextEnumType}} | SCR_ScenarioFrameworkDamageContextHitZoneGroupBase = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/DamageActions/DamageInstigatorConditions/Enums/SCR_ScenarioFrameworkDamageContextHitZoneGroupBase.c;1|SCR_ScenarioFrameworkDamageContextHitZoneGroupBase}} | SCR_ScenarioFrameworkDamageContextHitZoneGroupCharacter = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/DamageActions/DamageInstigatorConditions/Enums/SCR_ScenarioFrameworkDamageContextHitZoneGroupCharacter.c;1|SCR_ScenarioFrameworkDamageContextHitZoneGroupCharacter}} | SCR_ScenarioFrameworkDamageContextHitZoneGroupVehicle = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/DamageActions/DamageInstigatorConditions/Enums/SCR_ScenarioFrameworkDamageContextHitZoneGroupVehicle.c;1|SCR_ScenarioFrameworkDamageContextHitZoneGroupVehicle}} | SCR_ScenarioFrameworkDayTimeCondition = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Conditions/SCR_ScenarioFrameworkDayTimeCondition.c;1|SCR_ScenarioFrameworkDayTimeCondition}} | SCR_ScenarioFrameworkDayTimeHourCondition = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Conditions/SCR_ScenarioFrameworkDayTimeHourCondition.c;1|SCR_ScenarioFrameworkDayTimeHourCondition}} | SCR_ScenarioFrameworkDebug = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/SCR_ScenarioFrameworkDebug.c;1|SCR_ScenarioFrameworkDebug}} | SCR_ScenarioFrameworkDebugAction = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/SCR_ScenarioFrameworkDebugAction.c;1|SCR_ScenarioFrameworkDebugAction}} | SCR_ScenarioFrameworkDebugArea = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/SCR_ScenarioFrameworkDebugArea.c;1|SCR_ScenarioFrameworkDebugArea}} | SCR_ScenarioFrameworkEActivationType = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Enums/SCR_ScenarioFrameworkEActivationType.c;1|SCR_ScenarioFrameworkEActivationType}} | SCR_ScenarioFrameworkEntityDistanceCondition = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Conditions/SCR_ScenarioFrameworkEntityDistanceCondition.c;1|SCR_ScenarioFrameworkEntityDistanceCondition}} | SCR_ScenarioFrameworkExistCondition = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Conditions/SCR_ScenarioFrameworkExistCondition.c;1|SCR_ScenarioFrameworkExistCondition}} | SCR_ScenarioFrameworkFactionAliasConfig = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Configs/SCR_ScenarioFrameworkFactionAliasConfig.c;1|SCR_ScenarioFrameworkFactionAliasConfig}} | SCR_ScenarioFrameworkFactionSwitchedObject = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Configs/SCR_ScenarioFrameworkFactionSwitchedObject.c;1|SCR_ScenarioFrameworkFactionSwitchedObject}} | SCR_ScenarioFrameworkGet = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/ActionGetters/SCR_ScenarioFrameworkGet.c;1|SCR_ScenarioFrameworkGet}} | SCR_ScenarioFrameworkGetArea = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/ActionGetters/SCR_ScenarioFrameworkGetArea.c;1|SCR_ScenarioFrameworkGetArea}} | SCR_ScenarioFrameworkGetAreaTrigger = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/ActionGetters/SCR_ScenarioFrameworkGetAreaTrigger.c;1|SCR_ScenarioFrameworkGetAreaTrigger}} | SCR_ScenarioFrameworkGetArrayOfAIsFromArea = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/ActionGetters/SCR_ScenarioFrameworkGetArrayOfAIsFromArea.c;1|SCR_ScenarioFrameworkGetArrayOfAIsFromArea}} | SCR_ScenarioFrameworkGetArrayOfEntities = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/ActionGetters/SCR_ScenarioFrameworkGetArrayOfEntities.c;1|SCR_ScenarioFrameworkGetArrayOfEntities}} | SCR_ScenarioFrameworkGetArrayOfLayerBases = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/ActionGetters/SCR_ScenarioFrameworkGetArrayOfLayerBases.c;1|SCR_ScenarioFrameworkGetArrayOfLayerBases}} | SCR_ScenarioFrameworkGetArrayOfMatchingPrefabsInHiearchy = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/ActionGetters/SCR_ScenarioFrameworkGetArrayOfMatchingPrefabsInHiearchy.c;1|SCR_ScenarioFrameworkGetArrayOfMatchingPrefabsInHiearchy}} | SCR_ScenarioFrameworkGetArrayOfPlayers = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/ActionGetters/SCR_ScenarioFrameworkGetArrayOfPlayers.c;1|SCR_ScenarioFrameworkGetArrayOfPlayers}} | SCR_ScenarioFrameworkGetChildEntityByClassName = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/ActionGetters/SCR_ScenarioFrameworkGetChildEntityByClassName.c;1|SCR_ScenarioFrameworkGetChildEntityByClassName}} | SCR_ScenarioFrameworkGetChildEntityByPrefabName = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/ActionGetters/SCR_ScenarioFrameworkGetChildEntityByPrefabName.c;1|SCR_ScenarioFrameworkGetChildEntityByPrefabName}} | SCR_ScenarioFrameworkGetChildEntityByXOB = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/ActionGetters/SCR_ScenarioFrameworkGetChildEntityByXOB.c;1|SCR_ScenarioFrameworkGetChildEntityByXOB}} | SCR_ScenarioFrameworkGetClosestAIEntity = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/ActionGetters/SCR_ScenarioFrameworkGetClosestAIEntity.c;1|SCR_ScenarioFrameworkGetClosestAIEntity}} | SCR_ScenarioFrameworkGetClosestPlayerEntity = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/ActionGetters/SCR_ScenarioFrameworkGetClosestPlayerEntity.c;1|SCR_ScenarioFrameworkGetClosestPlayerEntity}} | SCR_ScenarioFrameworkGetCountEntitiesInTrigger = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/ActionGetters/SCR_ScenarioFrameworkGetCountEntitiesInTrigger.c;1|SCR_ScenarioFrameworkGetCountEntitiesInTrigger}} | SCR_ScenarioFrameworkGetEntityByName = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/ActionGetters/SCR_ScenarioFrameworkGetEntityByName.c;1|SCR_ScenarioFrameworkGetEntityByName}} | SCR_ScenarioFrameworkGetEntityByNameFromVariable = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/ActionGetters/SCR_ScenarioFrameworkGetEntityByNameFromVariable.c;1|SCR_ScenarioFrameworkGetEntityByNameFromVariable}} | SCR_ScenarioFrameworkGetEntityFromSlotManager = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/ActionGetters/SCR_ScenarioFrameworkGetEntityFromSlotManager.c;1|SCR_ScenarioFrameworkGetEntityFromSlotManager}} | SCR_ScenarioFrameworkGetLastFinishedTaskEnity = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/ActionGetters/SCR_ScenarioFrameworkGetLastFinishedTaskEnity.c;1|SCR_ScenarioFrameworkGetLastFinishedTaskEnity}} | SCR_ScenarioFrameworkGetLastFinishedTaskLayer = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/ActionGetters/SCR_ScenarioFrameworkGetLastFinishedTaskLayer.c;1|SCR_ScenarioFrameworkGetLastFinishedTaskLayer}} | SCR_ScenarioFrameworkGetLayerBase = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/ActionGetters/SCR_ScenarioFrameworkGetLayerBase.c;1|SCR_ScenarioFrameworkGetLayerBase}} | SCR_ScenarioFrameworkGetLayerBaseFromVariable = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/ActionGetters/SCR_ScenarioFrameworkGetLayerBaseFromVariable.c;1|SCR_ScenarioFrameworkGetLayerBaseFromVariable}} | SCR_ScenarioFrameworkGetLayerTask = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/ActionGetters/SCR_ScenarioFrameworkGetLayerTask.c;1|SCR_ScenarioFrameworkGetLayerTask}} | SCR_ScenarioFrameworkGetListEntitiesInTrigger = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/ActionGetters/SCR_ScenarioFrameworkGetListEntitiesInTrigger.c;1|SCR_ScenarioFrameworkGetListEntitiesInTrigger}} | SCR_ScenarioFrameworkGetNearestEntity = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/ActionGetters/SCR_ScenarioFrameworkGetNearestEntity.c;1|SCR_ScenarioFrameworkGetNearestEntity}} | SCR_ScenarioFrameworkGetPlayerEntity = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/ActionGetters/SCR_ScenarioFrameworkGetPlayerEntity.c;1|SCR_ScenarioFrameworkGetPlayerEntity}} | SCR_ScenarioFrameworkGetPlayerGroup = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/ActionGetters/SCR_ScenarioFrameworkGetPlayerGroup.c;1|SCR_ScenarioFrameworkGetPlayerGroup}} | SCR_ScenarioFrameworkGetRandomLayerBase = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/ActionGetters/SCR_ScenarioFrameworkGetRandomLayerBase.c;1|SCR_ScenarioFrameworkGetRandomLayerBase}} | SCR_ScenarioFrameworkGetSpawnedEntity = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/ActionGetters/SCR_ScenarioFrameworkGetSpawnedEntity.c;1|SCR_ScenarioFrameworkGetSpawnedEntity}} | SCR_ScenarioFrameworkGetSpawnedEntityFromVariable = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/ActionGetters/SCR_ScenarioFrameworkGetSpawnedEntityFromVariable.c;1|SCR_ScenarioFrameworkGetSpawnedEntityFromVariable}} | SCR_ScenarioFrameworkGetTask = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/ActionGetters/SCR_ScenarioFrameworkGetTask.c;1|SCR_ScenarioFrameworkGetTask}} | SCR_ScenarioFrameworkGetTopParentEntity = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/ActionGetters/SCR_ScenarioFrameworkGetTopParentEntity.c;1|SCR_ScenarioFrameworkGetTopParentEntity}} | SCR_ScenarioFrameworkGetVariableValue = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkGetVariableValue.c;1|SCR_ScenarioFrameworkGetVariableValue}} | SCR_ScenarioFrameworkGetVoiceOverActorEntity = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/ActionGetters/SCR_ScenarioFrameworkGetVoiceOverActorEntity.c;1|SCR_ScenarioFrameworkGetVoiceOverActorEntity}} | SCR_ScenarioFrameworkIsInitialized = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Conditions/SCR_ScenarioFrameworkIsInitialized.c;1|SCR_ScenarioFrameworkIsInitialized}} | SCR_ScenarioFrameworkItemInStorageCondition = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Conditions/SCR_ScenarioFrameworkItemInStorageCondition.c;1|SCR_ScenarioFrameworkItemInStorageCondition}} | SCR_ScenarioFrameworkLayerBase = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkLayerBase.c;19|SCR_ScenarioFrameworkLayerBase}} | SCR_ScenarioFrameworkLayerBaseClass = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkLayerBase.c;1|SCR_ScenarioFrameworkLayerBaseClass}} | SCR_ScenarioFrameworkLayerSave = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/States/SCR_ScenarioFrameworkSystemSerializer.c;128|SCR_ScenarioFrameworkLayerSave}} | SCR_ScenarioFrameworkLayerTask = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkLayerTask.c;6|SCR_ScenarioFrameworkLayerTask}} | SCR_ScenarioFrameworkLayerTaskClass = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkLayerTask.c;1|SCR_ScenarioFrameworkLayerTaskClass}} | SCR_ScenarioFrameworkLayerTaskClearArea = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkLayerTaskClearArea.c;6|SCR_ScenarioFrameworkLayerTaskClearArea}} | SCR_ScenarioFrameworkLayerTaskClearAreaClass = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkLayerTaskClearArea.c;1|SCR_ScenarioFrameworkLayerTaskClearAreaClass}} | SCR_ScenarioFrameworkLayerTaskDefend = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkLayerTaskDefend.c;6|SCR_ScenarioFrameworkLayerTaskDefend}} | SCR_ScenarioFrameworkLayerTaskDefendClass = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkLayerTaskDefend.c;1|SCR_ScenarioFrameworkLayerTaskDefendClass}} | SCR_ScenarioFrameworkLayerTaskDefendSave = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/States/SCR_ScenarioFrameworkSystemSerializer.c;575|SCR_ScenarioFrameworkLayerTaskDefendSave}} | SCR_ScenarioFrameworkLayerTaskDeliver = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkLayerTaskDeliver.c;6|SCR_ScenarioFrameworkLayerTaskDeliver}} | SCR_ScenarioFrameworkLayerTaskDeliverClass = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkLayerTaskDeliver.c;1|SCR_ScenarioFrameworkLayerTaskDeliverClass}} | SCR_ScenarioFrameworkLayerTaskDestroy = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkLayerTaskDestroy.c;6|SCR_ScenarioFrameworkLayerTaskDestroy}} | SCR_ScenarioFrameworkLayerTaskDestroyClass = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkLayerTaskDestroy.c;1|SCR_ScenarioFrameworkLayerTaskDestroyClass}} | SCR_ScenarioFrameworkLayerTaskKill = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkLayerTaskKill.c;6|SCR_ScenarioFrameworkLayerTaskKill}} | SCR_ScenarioFrameworkLayerTaskKillClass = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkLayerTaskKill.c;1|SCR_ScenarioFrameworkLayerTaskKillClass}} | SCR_ScenarioFrameworkLayerTaskMove = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkLayerTaskMove.c;6|SCR_ScenarioFrameworkLayerTaskMove}} | SCR_ScenarioFrameworkLayerTaskMoveClass = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkLayerTaskMove.c;1|SCR_ScenarioFrameworkLayerTaskMoveClass}} | SCR_ScenarioFrameworkLayerTaskSave = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/States/SCR_ScenarioFrameworkSystemSerializer.c;454|SCR_ScenarioFrameworkLayerTaskSave}} | SCR_ScenarioFrameworkLogic = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkLogic.c;34|SCR_ScenarioFrameworkLogic}} | SCR_ScenarioFrameworkLogicClass = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkLogic.c;30|SCR_ScenarioFrameworkLogicClass}} | SCR_ScenarioFrameworkLogicCounter = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkLogic.c;116|SCR_ScenarioFrameworkLogicCounter}} | SCR_ScenarioFrameworkLogicCounterClass = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkLogic.c;112|SCR_ScenarioFrameworkLogicCounterClass}} | SCR_ScenarioFrameworkLogicCounterSave = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/States/SCR_ScenarioFrameworkSystemSerializer.c;1104|SCR_ScenarioFrameworkLogicCounterSave}} | SCR_ScenarioFrameworkLogicDistance = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkLogicDistance.c;5|SCR_ScenarioFrameworkLogicDistance}} | SCR_ScenarioFrameworkLogicDistanceClass = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkLogicDistance.c;1|SCR_ScenarioFrameworkLogicDistanceClass}} | SCR_ScenarioFrameworkLogicInput = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkLogic.c;1|SCR_ScenarioFrameworkLogicInput}} | SCR_ScenarioFrameworkLogicOR = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkLogic.c;230|SCR_ScenarioFrameworkLogicOR}} | SCR_ScenarioFrameworkLogicORClass = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkLogic.c;226|SCR_ScenarioFrameworkLogicORClass}} | SCR_ScenarioFrameworkLogicSave = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/States/SCR_ScenarioFrameworkSystemSerializer.c;1044|SCR_ScenarioFrameworkLogicSave}} | SCR_ScenarioFrameworkLogicSwitch = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkLogic.c;251|SCR_ScenarioFrameworkLogicSwitch}} | SCR_ScenarioFrameworkLogicSwitchClass = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkLogic.c;247|SCR_ScenarioFrameworkLogicSwitchClass}} | SCR_ScenarioFrameworkMarkerCustom = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkSlotMarker.c;173|SCR_ScenarioFrameworkMarkerCustom}} | SCR_ScenarioFrameworkMarkerDotCircle = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkSlotMarker.c;202|SCR_ScenarioFrameworkMarkerDotCircle}} | SCR_ScenarioFrameworkMarkerMilitary = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkSlotMarker.c;186|SCR_ScenarioFrameworkMarkerMilitary}} | SCR_ScenarioFrameworkMarkerType = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkSlotMarker.c;166|SCR_ScenarioFrameworkMarkerType}} | SCR_ScenarioFrameworkMedicalAction = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/MedicalActions/SCR_ScenarioFrameworkMedicalAction.c;1|SCR_ScenarioFrameworkMedicalAction}} | SCR_ScenarioFrameworkMedicalActionAddFallDamage = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/MedicalActions/SCR_ScenarioFrameworkMedicalActionAddFallDamage.c;1|SCR_ScenarioFrameworkMedicalActionAddFallDamage}} | SCR_ScenarioFrameworkMedicalActionAddParticularBleeding = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/MedicalActions/SCR_ScenarioFrameworkMedicalActionAddParticularBleeding.c;1|SCR_ScenarioFrameworkMedicalActionAddParticularBleeding}} | SCR_ScenarioFrameworkMedicalActionAddRandomBleeding = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/MedicalActions/SCR_ScenarioFrameworkMedicalActionAddRandomBleeding.c;1|SCR_ScenarioFrameworkMedicalActionAddRandomBleeding}} | SCR_ScenarioFrameworkMedicalActionEnableDamageHandling = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/MedicalActions/SCR_ScenarioFrameworkMedicalActionEnableDamageHandling.c;1|SCR_ScenarioFrameworkMedicalActionEnableDamageHandling}} | SCR_ScenarioFrameworkMedicalActionRemoveAllBleedings = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/MedicalActions/SCR_ScenarioFrameworkMedicalActionRemoveAllBleedings.c;1|SCR_ScenarioFrameworkMedicalActionRemoveAllBleedings}} | SCR_ScenarioFrameworkMedicalActionRemoveGroupBleeding = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/MedicalActions/SCR_ScenarioFrameworkMedicalActionRemoveGroupBleeding.c;1|SCR_ScenarioFrameworkMedicalActionRemoveGroupBleeding}} | SCR_ScenarioFrameworkMedicalActionSetBleedingRate = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/MedicalActions/SCR_ScenarioFrameworkMedicalActionSetBleedingRate.c;1|SCR_ScenarioFrameworkMedicalActionSetBleedingRate}} | SCR_ScenarioFrameworkMedicalActionSetBlood = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/MedicalActions/SCR_ScenarioFrameworkMedicalActionSetBlood.c;1|SCR_ScenarioFrameworkMedicalActionSetBlood}} | SCR_ScenarioFrameworkMedicalActionSetPermitUnconsciousness = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/MedicalActions/SCR_ScenarioFrameworkMedicalActionSetPermitUnconsciousness.c;1|SCR_ScenarioFrameworkMedicalActionSetPermitUnconsciousness}} | SCR_ScenarioFrameworkMedicalActionSetRegenerationRate = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/MedicalActions/SCR_ScenarioFrameworkMedicalActionSetRegenerationRate.c;1|SCR_ScenarioFrameworkMedicalActionSetRegenerationRate}} | SCR_ScenarioFrameworkMedicalActionSetResilience = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/MedicalActions/SCR_ScenarioFrameworkMedicalActionSetResilience.c;1|SCR_ScenarioFrameworkMedicalActionSetResilience}} | SCR_ScenarioFrameworkMedicalActionSetSalineBaggedGroup = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/MedicalActions/SCR_ScenarioFrameworkMedicalActionSetSalineBaggedGroup.c;1|SCR_ScenarioFrameworkMedicalActionSetSalineBaggedGroup}} | SCR_ScenarioFrameworkMedicalActionSetTourniquettedGroup = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/MedicalActions/SCR_ScenarioFrameworkMedicalActionSetTourniquettedGroup.c;1|SCR_ScenarioFrameworkMedicalActionSetTourniquettedGroup}} | SCR_ScenarioFrameworkMedicalCondition = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Conditions/MedicalConditions/SCR_ScenarioFrameworkMedicalCondition.c;1|SCR_ScenarioFrameworkMedicalCondition}} | SCR_ScenarioFrameworkMedicalConditionBase = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Conditions/MedicalConditions/SCR_ScenarioFrameworkMedicalConditionBase.c;1|SCR_ScenarioFrameworkMedicalConditionBase}} | SCR_ScenarioFrameworkMedicalConditionBleeding = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Conditions/MedicalConditions/SCR_ScenarioFrameworkMedicalConditionBleeding.c;1|SCR_ScenarioFrameworkMedicalConditionBleeding}} | SCR_ScenarioFrameworkMedicalConditionHealth = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Conditions/MedicalConditions/SCR_ScenarioFrameworkMedicalConditionHealth.c;1|SCR_ScenarioFrameworkMedicalConditionHealth}} | SCR_ScenarioFrameworkMedicalConditionTourniquet = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Conditions/MedicalConditions/SCR_ScenarioFrameworkMedicalConditionTourniquet.c;1|SCR_ScenarioFrameworkMedicalConditionTourniquet}} | SCR_ScenarioFrameworkNotorietyComponent = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkNotorietyComponent.c;5|SCR_ScenarioFrameworkNotorietyComponent}} | SCR_ScenarioFrameworkNotorietyComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkNotorietyComponent.c;1|SCR_ScenarioFrameworkNotorietyComponentClass}} | SCR_ScenarioFrameworkNotorietyCondition = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Conditions/SCR_ScenarioFrameworkNotorietyCondition.c;1|SCR_ScenarioFrameworkNotorietyCondition}} | SCR_ScenarioFrameworkNotorietyLevel = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkNotorietyLevel.c;1|SCR_ScenarioFrameworkNotorietyLevel}} | SCR_ScenarioFrameworkOnProjectileShotConditionBase = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Conditions/ProjectileConditions/SCR_ScenarioFrameworkOnProjectileShotConditionBase.c;1|SCR_ScenarioFrameworkOnProjectileShotConditionBase}} | SCR_ScenarioFrameworkOnProjectileShotConditionIsSuppressed = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Conditions/ProjectileConditions/SCR_ScenarioFrameworkOnProjectileShotConditionIsSuppressed.c;1|SCR_ScenarioFrameworkOnProjectileShotConditionIsSuppressed}} | SCR_ScenarioFrameworkOnProjectileShotConditionPlayerId = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Conditions/ProjectileConditions/SCR_ScenarioFrameworkOnProjectileShotConditionPlayerId.c;1|SCR_ScenarioFrameworkOnProjectileShotConditionPlayerId}} | SCR_ScenarioFrameworkOnProjectileShotConditionProjectilePrefab = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Conditions/ProjectileConditions/SCR_ScenarioFrameworkOnProjectileShotConditionProjectilePrefab.c;1|SCR_ScenarioFrameworkOnProjectileShotConditionProjectilePrefab}} | SCR_ScenarioFrameworkOnProjectileShotConditionWeaponEntity = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Conditions/ProjectileConditions/SCR_ScenarioFrameworkOnProjectileShotConditionWeaponEntity.c;1|SCR_ScenarioFrameworkOnProjectileShotConditionWeaponEntity}} | SCR_ScenarioFrameworkOnProjectileShotConditionWeaponPrefab = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Conditions/ProjectileConditions/SCR_ScenarioFrameworkOnProjectileShotConditionWeaponPrefab.c;1|SCR_ScenarioFrameworkOnProjectileShotConditionWeaponPrefab}} | SCR_ScenarioFrameworkOnProjectileShotConditionWeaponType = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Conditions/ProjectileConditions/SCR_ScenarioFrameworkOnProjectileShotConditionWeaponType.c;1|SCR_ScenarioFrameworkOnProjectileShotConditionWeaponType}} | SCR_ScenarioFrameworkOnWeaponAmmoCountChangedAction = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkOnWeaponAmmoCountChangedAction.c;1|SCR_ScenarioFrameworkOnWeaponAmmoCountChangedAction}} | SCR_ScenarioFrameworkParam = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/ActionGetters/SCR_ScenarioFrameworkParam.c;1|SCR_ScenarioFrameworkParam}} | SCR_ScenarioFrameworkParamBase = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/ActionGetters/SCR_ScenarioFrameworkParamBase.c;1|SCR_ScenarioFrameworkParamBase}} | SCR_ScenarioFrameworkParentCondition = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Conditions/SCR_ScenarioFrameworkParentCondition.c;1|SCR_ScenarioFrameworkParentCondition}} | SCR_ScenarioFrameworkPlugin = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Plugins/SCR_ScenarioFrameworkPlugin.c;1|SCR_ScenarioFrameworkPlugin}} | SCR_ScenarioFrameworkPluginOnDestroyEvent = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Plugins/SCR_ScenarioFrameworkPluginOnDestroyEvent.c;1|SCR_ScenarioFrameworkPluginOnDestroyEvent}} | SCR_ScenarioFrameworkPluginOnDestroyEventSave = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/States/SCR_ScenarioFrameworkSystemSerializer.c;1812|SCR_ScenarioFrameworkPluginOnDestroyEventSave}} | SCR_ScenarioFrameworkPluginOnInventoryChange = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Plugins/SCR_ScenarioFrameworkPluginOnInventoryChange.c;1|SCR_ScenarioFrameworkPluginOnInventoryChange}} | SCR_ScenarioFrameworkPluginOnInventoryChangeSave = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/States/SCR_ScenarioFrameworkSystemSerializer.c;1741|SCR_ScenarioFrameworkPluginOnInventoryChangeSave}} | SCR_ScenarioFrameworkPluginSave = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/States/SCR_ScenarioFrameworkSystemSerializer.c;1534|SCR_ScenarioFrameworkPluginSave}} | SCR_ScenarioFrameworkPluginSpawnPoint = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Plugins/SCR_ScenarioFrameworkPluginSpawnPoint.c;1|SCR_ScenarioFrameworkPluginSpawnPoint}} | SCR_ScenarioFrameworkPluginSpawnPointSave = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/States/SCR_ScenarioFrameworkSystemSerializer.c;1683|SCR_ScenarioFrameworkPluginSpawnPointSave}} | SCR_ScenarioFrameworkPluginTrigger = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Plugins/SCR_ScenarioFrameworkPluginTrigger.c;1|SCR_ScenarioFrameworkPluginTrigger}} | SCR_ScenarioFrameworkPluginTriggerSave = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/States/SCR_ScenarioFrameworkSystemSerializer.c;1601|SCR_ScenarioFrameworkPluginTriggerSave}} | SCR_ScenarioFrameworkPrefabFilter = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/SCR_ScenarioFrameworkPrefabFilter.c;1|SCR_ScenarioFrameworkPrefabFilter}} | SCR_ScenarioFrameworkPrefabFilterCount = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/SCR_ScenarioFrameworkPrefabFilter.c;21|SCR_ScenarioFrameworkPrefabFilterCount}} | SCR_ScenarioFrameworkPrefabFilterCountNoInheritance = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/SCR_ScenarioFrameworkPrefabFilter.c;11|SCR_ScenarioFrameworkPrefabFilterCountNoInheritance}} | SCR_ScenarioFrameworkQRFSlotAI = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkQRFSlotAI.c;6|SCR_ScenarioFrameworkQRFSlotAI}} | SCR_ScenarioFrameworkQRFSlotAIClass = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkQRFSlotAI.c;1|SCR_ScenarioFrameworkQRFSlotAIClass}} | SCR_ScenarioFrameworkRadioBaseUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_ScenarioFrameworkRadioBaseUserAction.c;1|SCR_ScenarioFrameworkRadioBaseUserAction}} | SCR_ScenarioFrameworkResourceComponentAction = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkResourceComponentAction.c;1|SCR_ScenarioFrameworkResourceComponentAction}} | SCR_ScenarioFrameworkResourceComponentActionBase = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/ResourceComponentActions/SCR_ScenarioFrameworkResourceComponentActionBase.c;1|SCR_ScenarioFrameworkResourceComponentActionBase}} | SCR_ScenarioFrameworkResourceComponentActionTransfer = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/ResourceComponentActions/SCR_ScenarioFrameworkResourceComponentActionTransfer.c;1|SCR_ScenarioFrameworkResourceComponentActionTransfer}} | SCR_ScenarioFrameworkResourceCondition = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Conditions/ResourceConditions/SCR_ScenarioFrameworkResourceCondition.c;1|SCR_ScenarioFrameworkResourceCondition}} | SCR_ScenarioFrameworkResourceConditionBase = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Conditions/ResourceConditions/SCR_ScenarioFrameworkResourceConditionBase.c;1|SCR_ScenarioFrameworkResourceConditionBase}} | SCR_ScenarioFrameworkResourceConditionValue = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Conditions/ResourceConditions/SCR_ScenarioFrameworkResourceConditionValue.c;1|SCR_ScenarioFrameworkResourceConditionValue}} | SCR_ScenarioFrameworkSetSignal = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkActionSetSignal.c;1|SCR_ScenarioFrameworkSetSignal}} | SCR_ScenarioFrameworkSetSlotEntity = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkSetSlotEntity.c;1|SCR_ScenarioFrameworkSetSlotEntity}} | SCR_ScenarioFrameworkSetVariable = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/SCR_ScenarioFrameworkSetVariable.c;1|SCR_ScenarioFrameworkSetVariable}} | SCR_ScenarioFrameworkSlotAI = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkSlotAI.c;11|SCR_ScenarioFrameworkSlotAI}} | SCR_ScenarioFrameworkSlotAIClass = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkSlotAI.c;1|SCR_ScenarioFrameworkSlotAIClass}} | SCR_ScenarioFrameworkSlotAISave = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/States/SCR_ScenarioFrameworkSystemSerializer.c;747|SCR_ScenarioFrameworkSlotAISave}} | SCR_ScenarioFrameworkSlotBase = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkSlotBase.c;6|SCR_ScenarioFrameworkSlotBase}} | SCR_ScenarioFrameworkSlotBaseClass = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkSlotBase.c;1|SCR_ScenarioFrameworkSlotBaseClass}} | SCR_ScenarioFrameworkSlotClearArea = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkSlotClearArea.c;6|SCR_ScenarioFrameworkSlotClearArea}} | SCR_ScenarioFrameworkSlotClearAreaClass = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkSlotClearArea.c;1|SCR_ScenarioFrameworkSlotClearAreaClass}} | SCR_ScenarioFrameworkSlotDefend = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkSlotDefend.c;6|SCR_ScenarioFrameworkSlotDefend}} | SCR_ScenarioFrameworkSlotDefendClass = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkSlotDefend.c;1|SCR_ScenarioFrameworkSlotDefendClass}} | SCR_ScenarioFrameworkSlotDelivery = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkSlotDelivery.c;6|SCR_ScenarioFrameworkSlotDelivery}} | SCR_ScenarioFrameworkSlotDeliveryClass = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkSlotDelivery.c;1|SCR_ScenarioFrameworkSlotDeliveryClass}} | SCR_ScenarioFrameworkSlotDestroy = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkSlotDestroy.c;6|SCR_ScenarioFrameworkSlotDestroy}} | SCR_ScenarioFrameworkSlotDestroyClass = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkSlotDestroy.c;1|SCR_ScenarioFrameworkSlotDestroyClass}} | SCR_ScenarioFrameworkSlotExtraction = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkSlotExtraction.c;6|SCR_ScenarioFrameworkSlotExtraction}} | SCR_ScenarioFrameworkSlotExtractionClass = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkSlotExtraction.c;1|SCR_ScenarioFrameworkSlotExtractionClass}} | SCR_ScenarioFrameworkSlotKill = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkSlotKill.c;6|SCR_ScenarioFrameworkSlotKill}} | SCR_ScenarioFrameworkSlotKillClass = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkSlotKill.c;1|SCR_ScenarioFrameworkSlotKillClass}} | SCR_ScenarioFrameworkSlotMarker = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkSlotMarker.c;6|SCR_ScenarioFrameworkSlotMarker}} | SCR_ScenarioFrameworkSlotMarkerClass = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkSlotMarker.c;1|SCR_ScenarioFrameworkSlotMarkerClass}} | SCR_ScenarioFrameworkSlotPick = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkSlotPick.c;6|SCR_ScenarioFrameworkSlotPick}} | SCR_ScenarioFrameworkSlotPickClass = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkSlotPick.c;1|SCR_ScenarioFrameworkSlotPickClass}} | SCR_ScenarioFrameworkSlotSave = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/States/SCR_ScenarioFrameworkSystemSerializer.c;627|SCR_ScenarioFrameworkSlotSave}} | SCR_ScenarioFrameworkSlotTask = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkSlotTask.c;6|SCR_ScenarioFrameworkSlotTask}} | SCR_ScenarioFrameworkSlotTaskAI = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkSlotTaskAI.c;6|SCR_ScenarioFrameworkSlotTaskAI}} | SCR_ScenarioFrameworkSlotTaskAIClass = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkSlotTaskAI.c;1|SCR_ScenarioFrameworkSlotTaskAIClass}} | SCR_ScenarioFrameworkSlotTaskAISave = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/States/SCR_ScenarioFrameworkSystemSerializer.c;921|SCR_ScenarioFrameworkSlotTaskAISave}} | SCR_ScenarioFrameworkSlotTaskClass = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkSlotTask.c;1|SCR_ScenarioFrameworkSlotTaskClass}} | SCR_ScenarioFrameworkSlotTaskSave = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/States/SCR_ScenarioFrameworkSystemSerializer.c;817|SCR_ScenarioFrameworkSlotTaskSave}} | SCR_ScenarioFrameworkSlotTrigger = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkSlotTrigger.c;6|SCR_ScenarioFrameworkSlotTrigger}} | SCR_ScenarioFrameworkSlotTriggerClass = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkSlotTrigger.c;1|SCR_ScenarioFrameworkSlotTriggerClass}} | SCR_ScenarioFrameworkSlotTriggerSave = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/States/SCR_ScenarioFrameworkSystemSerializer.c;991|SCR_ScenarioFrameworkSlotTriggerSave}} | SCR_ScenarioFrameworkSlotWaypoint = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkSlotWaypoint.c;8|SCR_ScenarioFrameworkSlotWaypoint}} | SCR_ScenarioFrameworkSlotWaypointClass = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkSlotWaypoint.c;1|SCR_ScenarioFrameworkSlotWaypointClass}} | SCR_ScenarioFrameworkStanceCondition = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Conditions/SCR_ScenarioFrameworkStanceCondition.c;1|SCR_ScenarioFrameworkStanceCondition}} | SCR_ScenarioFrameworkSystem = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/SCR_ScenarioFrameworkSystem.c;1|SCR_ScenarioFrameworkSystem}} | SCR_ScenarioFrameworkSystemData = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/States/SCR_ScenarioFrameworkSystemSerializer.c;2|SCR_ScenarioFrameworkSystemData}} | SCR_ScenarioFrameworkSystemSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/States/SCR_ScenarioFrameworkSystemSerializer.c;6|SCR_ScenarioFrameworkSystemSerializer}} | SCR_ScenarioFrameworkTask = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Tasks/SCR_ScenarioFrameworkTask.c;5|SCR_ScenarioFrameworkTask}} | SCR_ScenarioFrameworkTaskArea = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Tasks/SCR_ScenarioFrameworkTaskArea.c;5|SCR_ScenarioFrameworkTaskArea}} | SCR_ScenarioFrameworkTaskAreaClass = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Tasks/SCR_ScenarioFrameworkTaskArea.c;1|SCR_ScenarioFrameworkTaskAreaClass}} | SCR_ScenarioFrameworkTaskClass = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Tasks/SCR_ScenarioFrameworkTask.c;1|SCR_ScenarioFrameworkTaskClass}} | SCR_ScenarioFrameworkTaskClearArea = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Tasks/SCR_ScenarioFrameworkTaskClearArea.c;6|SCR_ScenarioFrameworkTaskClearArea}} | SCR_ScenarioFrameworkTaskClearAreaClass = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Tasks/SCR_ScenarioFrameworkTaskClearArea.c;1|SCR_ScenarioFrameworkTaskClearAreaClass}} | SCR_ScenarioFrameworkTaskData = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Tasks/SCR_ScenarioFrameworkTaskData.c;1|SCR_ScenarioFrameworkTaskData}} | SCR_ScenarioFrameworkTaskDefendAttackingFaction = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkLayerTaskDefend.c;596|SCR_ScenarioFrameworkTaskDefendAttackingFaction}} | SCR_ScenarioFrameworkTaskDefendAttackingFactionTitle = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkLayerTaskDefend.c;575|SCR_ScenarioFrameworkTaskDefendAttackingFactionTitle}} | SCR_ScenarioFrameworkTaskDefendDefendingFaction = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkLayerTaskDefend.c;590|SCR_ScenarioFrameworkTaskDefendDefendingFaction}} | SCR_ScenarioFrameworkTaskDefendDefendingFactionTitle = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkLayerTaskDefend.c;560|SCR_ScenarioFrameworkTaskDefendDefendingFactionTitle}} | SCR_ScenarioFrameworkTaskDefendFactionSettings = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkLayerTaskDefend.c;524|SCR_ScenarioFrameworkTaskDefendFactionSettings}} | SCR_ScenarioFrameworkTaskExtract = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Tasks/SCR_ScenarioFrameworkTaskExtract.c;5|SCR_ScenarioFrameworkTaskExtract}} | SCR_ScenarioFrameworkTaskExtractClass = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Tasks/SCR_ScenarioFrameworkTaskExtract.c;1|SCR_ScenarioFrameworkTaskExtractClass}} | SCR_ScenarioFrameworkTaskSave = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/States/SCR_TaskSystemSerializer.c;575|SCR_ScenarioFrameworkTaskSave}} | SCR_ScenarioFrameworkTaskStatusCondition = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Conditions/SCR_ScenarioFrameworkTaskStatusCondition.c;1|SCR_ScenarioFrameworkTaskStatusCondition}} | SCR_ScenarioFrameworkTaskType = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkArea.c;7|SCR_ScenarioFrameworkTaskType}} | SCR_ScenarioFrameworkTimeSpecificCondition = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Conditions/SCR_ScenarioFrameworkTimeSpecificCondition.c;1|SCR_ScenarioFrameworkTimeSpecificCondition}} | SCR_ScenarioFrameworkTriggerCountdownDisplay = {{Link|enfusion://ScriptEditor/scripts/Game/UI/ScenarioFramework/SCR_ScenarioFrameworkTriggerCountdownDisplay.c;2|SCR_ScenarioFrameworkTriggerCountdownDisplay}} | SCR_ScenarioFrameworkTriggerEntity = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Entities/Triggers/SCR_ScenarioFrameworkTriggerEntity.c;9|SCR_ScenarioFrameworkTriggerEntity}} | SCR_ScenarioFrameworkTriggerEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Entities/Triggers/SCR_ScenarioFrameworkTriggerEntity.c;1|SCR_ScenarioFrameworkTriggerEntityClass}} | SCR_ScenarioFrameworkTriggerEntitySerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Entities/SCR_ScenarioFrameworkTriggerEntitySerializer.c;1|SCR_ScenarioFrameworkTriggerEntitySerializer}} | SCR_ScenarioFrameworkTriggerNetworkComponent = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkTriggerNetworkComponent.c;5|SCR_ScenarioFrameworkTriggerNetworkComponent}} | SCR_ScenarioFrameworkTriggerNetworkComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkTriggerNetworkComponent.c;1|SCR_ScenarioFrameworkTriggerNetworkComponentClass}} | SCR_ScenarioFrameworkUserActionConditionData = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkUserActionConditionData.c;1|SCR_ScenarioFrameworkUserActionConditionData}} | SCR_ScenarioFrameworkVariableValueCondition = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Conditions/SCR_ScenarioFrameworkVariableValueCondition.c;1|SCR_ScenarioFrameworkVariableValueCondition}} | SCR_ScenarioFrameworkVehicleActionBase = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/VehicleActions/SCR_ScenarioFrameworkVehicleActionBase.c;1|SCR_ScenarioFrameworkVehicleActionBase}} | SCR_ScenarioFrameworkVehicleActionDamageHitZoneByName = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/VehicleActions/SCR_ScenarioFrameworkVehicleActionDamageHitZoneByName.c;1|SCR_ScenarioFrameworkVehicleActionDamageHitZoneByName}} | SCR_ScenarioFrameworkVehicleActionDamageHitZonesByGroup = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/VehicleActions/SCR_ScenarioFrameworkVehicleActionDamageHitZonesByGroup.c;1|SCR_ScenarioFrameworkVehicleActionDamageHitZonesByGroup}} | SCR_ScenarioFrameworkVehicleActionResourceUnloadAction = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/VehicleActions/SCR_ScenarioFrameworkVehicleActionResourceUnloadAction.c;1|SCR_ScenarioFrameworkVehicleActionResourceUnloadAction}} | SCR_ScenarioFrameworkVehicleActionSetHandbrake = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Actions/VehicleActions/SCR_ScenarioFrameworkVehicleActionSetHandbrake.c;1|SCR_ScenarioFrameworkVehicleActionSetHandbrake}} | SCR_ScenarioFrameworkWaypoint = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Waypoints/SCR_ScenarioFrameworkWaypoint.c;1|SCR_ScenarioFrameworkWaypoint}} | SCR_ScenarioFrameworkWaypointAnimation = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Waypoints/SCR_ScenarioFrameworkWaypointAnimation.c;2|SCR_ScenarioFrameworkWaypointAnimation}} | SCR_ScenarioFrameworkWaypointArtillerySupport = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Waypoints/SCR_ScenarioFrameworkWaypointArtillerySupport.c;2|SCR_ScenarioFrameworkWaypointArtillerySupport}} | SCR_ScenarioFrameworkWaypointAttack = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Waypoints/SCR_ScenarioFrameworkWaypointAttack.c;2|SCR_ScenarioFrameworkWaypointAttack}} | SCR_ScenarioFrameworkWaypointBoarding = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Waypoints/SCR_ScenarioFrameworkWaypoint.c;239|SCR_ScenarioFrameworkWaypointBoarding}} | SCR_ScenarioFrameworkWaypointBoardingEntity = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Waypoints/SCR_ScenarioFrameworkWaypoint.c;295|SCR_ScenarioFrameworkWaypointBoardingEntity}} | SCR_ScenarioFrameworkWaypointBoardingTimed = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Waypoints/SCR_ScenarioFrameworkWaypoint.c;315|SCR_ScenarioFrameworkWaypointBoardingTimed}} | SCR_ScenarioFrameworkWaypointCaptureRelay = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Waypoints/SCR_ScenarioFrameworkWaypointCaptureRelay.c;2|SCR_ScenarioFrameworkWaypointCaptureRelay}} | SCR_ScenarioFrameworkWaypointCycle = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Waypoints/SCR_ScenarioFrameworkWaypointCycle.c;2|SCR_ScenarioFrameworkWaypointCycle}} | SCR_ScenarioFrameworkWaypointDefend = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Waypoints/SCR_ScenarioFrameworkWaypointDefend.c;2|SCR_ScenarioFrameworkWaypointDefend}} | SCR_ScenarioFrameworkWaypointDefendCP = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Waypoints/SCR_ScenarioFrameworkWaypointDefendCP.c;2|SCR_ScenarioFrameworkWaypointDefendCP}} | SCR_ScenarioFrameworkWaypointDefendHierarchy = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Waypoints/SCR_ScenarioFrameworkWaypointDefendHierarchy.c;2|SCR_ScenarioFrameworkWaypointDefendHierarchy}} | SCR_ScenarioFrameworkWaypointDefendLarge = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Waypoints/SCR_ScenarioFrameworkWaypointDefendLarge.c;2|SCR_ScenarioFrameworkWaypointDefendLarge}} | SCR_ScenarioFrameworkWaypointDefendLargeCO = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Waypoints/SCR_ScenarioFrameworkWaypointDefendLargeCO.c;2|SCR_ScenarioFrameworkWaypointDefendLargeCO}} | SCR_ScenarioFrameworkWaypointDeploySmokeCover = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Waypoints/SCR_ScenarioFrameworkWaypointDeploySmokeCover.c;2|SCR_ScenarioFrameworkWaypointDeploySmokeCover}} | SCR_ScenarioFrameworkWaypointEntity = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Waypoints/SCR_ScenarioFrameworkWaypoint.c;145|SCR_ScenarioFrameworkWaypointEntity}} | SCR_ScenarioFrameworkWaypointFollow = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Waypoints/SCR_ScenarioFrameworkWaypointFollow.c;2|SCR_ScenarioFrameworkWaypointFollow}} | SCR_ScenarioFrameworkWaypointForcedMove = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Waypoints/SCR_ScenarioFrameworkWaypointForcedMove.c;2|SCR_ScenarioFrameworkWaypointForcedMove}} | SCR_ScenarioFrameworkWaypointGetIn = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Waypoints/SCR_ScenarioFrameworkWaypointGetIn.c;2|SCR_ScenarioFrameworkWaypointGetIn}} | SCR_ScenarioFrameworkWaypointGetInNearest = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Waypoints/SCR_ScenarioFrameworkWaypointGetInNearest.c;2|SCR_ScenarioFrameworkWaypointGetInNearest}} | SCR_ScenarioFrameworkWaypointGetOut = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Waypoints/SCR_ScenarioFrameworkWaypointGetOut.c;2|SCR_ScenarioFrameworkWaypointGetOut}} | SCR_ScenarioFrameworkWaypointHeal = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Waypoints/SCR_ScenarioFrameworkWaypointHeal.c;2|SCR_ScenarioFrameworkWaypointHeal}} | SCR_ScenarioFrameworkWaypointLoiterCO = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Waypoints/SCR_ScenarioFrameworkWaypointLoiterCO.c;2|SCR_ScenarioFrameworkWaypointLoiterCO}} | SCR_ScenarioFrameworkWaypointMove = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Waypoints/SCR_ScenarioFrameworkWaypointMove.c;2|SCR_ScenarioFrameworkWaypointMove}} | SCR_ScenarioFrameworkWaypointObservationPost = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Waypoints/SCR_ScenarioFrameworkWaypointObservationPost.c;2|SCR_ScenarioFrameworkWaypointObservationPost}} | SCR_ScenarioFrameworkWaypointOpenGate = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Waypoints/SCR_ScenarioFrameworkWaypointOpenGate.c;2|SCR_ScenarioFrameworkWaypointOpenGate}} | SCR_ScenarioFrameworkWaypointPatrol = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Waypoints/SCR_ScenarioFrameworkWaypointPatrol.c;2|SCR_ScenarioFrameworkWaypointPatrol}} | SCR_ScenarioFrameworkWaypointPatrolHierarchy = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Waypoints/SCR_ScenarioFrameworkWaypointPatrolHierarchy.c;2|SCR_ScenarioFrameworkWaypointPatrolHierarchy}} | SCR_ScenarioFrameworkWaypointScout = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Waypoints/SCR_ScenarioFrameworkWaypointScout.c;2|SCR_ScenarioFrameworkWaypointScout}} | SCR_ScenarioFrameworkWaypointScripted = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Waypoints/SCR_ScenarioFrameworkWaypoint.c;66|SCR_ScenarioFrameworkWaypointScripted}} | SCR_ScenarioFrameworkWaypointSearchAndDestroy = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Waypoints/SCR_ScenarioFrameworkWaypointSearchAndDestroy.c;2|SCR_ScenarioFrameworkWaypointSearchAndDestroy}} | SCR_ScenarioFrameworkWaypointSet = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkWaypointSet.c;2|SCR_ScenarioFrameworkWaypointSet}} | SCR_ScenarioFrameworkWaypointSmartAction = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Waypoints/SCR_ScenarioFrameworkWaypoint.c;111|SCR_ScenarioFrameworkWaypointSmartAction}} | SCR_ScenarioFrameworkWaypointSuppress = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Waypoints/SCR_ScenarioFrameworkWaypointSuppress.c;2|SCR_ScenarioFrameworkWaypointSuppress}} | SCR_ScenarioFrameworkWaypointTimed = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Waypoints/SCR_ScenarioFrameworkWaypoint.c;165|SCR_ScenarioFrameworkWaypointTimed}} | SCR_ScenarioFrameworkWaypointTimedDefend = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Waypoints/SCR_ScenarioFrameworkWaypoint.c;195|SCR_ScenarioFrameworkWaypointTimedDefend}} | SCR_ScenarioFrameworkWaypointUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Waypoints/SCR_ScenarioFrameworkWaypointUserAction.c;2|SCR_ScenarioFrameworkWaypointUserAction}} | SCR_ScenarioFrameworkWaypointWait = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Waypoints/SCR_ScenarioFrameworkWaypointWait.c;2|SCR_ScenarioFrameworkWaypointWait}} | SCR_ScenarioFrameworkWeaponAmmoCondition = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Conditions/SCR_ScenarioFrameworkWeaponAmmoCondition.c;1|SCR_ScenarioFrameworkWeaponAmmoCondition}} | SCR_ScenarioFrameworkWeatherCondition = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Conditions/SCR_ScenarioFrameworkWeatherCondition.c;1|SCR_ScenarioFrameworkWeatherCondition}} | SCR_ScenarioInfoUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/ScenarioInfoHUD/SCR_ScenarioInfoUI.c;1|SCR_ScenarioInfoUI}} | SCR_ScenarioLoadingScreenWidgets = {{Link|enfusion://ScriptEditor/scripts/GameLib/LoadingScreens/SCR_ScenarioLoadingScreenWidgets.c;4|SCR_ScenarioLoadingScreenWidgets}} | SCR_ScenarioMenu = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/ScenarioMenu/SCR_ScenarioMenu.c;4|SCR_ScenarioMenu}} | SCR_ScenarioMenuLoadContext = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/SCR_ContentBrowser_ScenarioSubMenuBase.c;5|SCR_ScenarioMenuLoadContext}} | SCR_ScenarioPanelEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_ScenarioPanelEditorUIComponent.c;1|SCR_ScenarioPanelEditorUIComponent}} | SCR_ScenarioRestartComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_ScenarioRestartComponent.c;1|SCR_ScenarioRestartComponent}} | SCR_ScenarioSequenceProgress = {{Link|enfusion://ScriptEditor/scripts/Game/Mission/SCR_ScenarioSequenceProgress.c;1|SCR_ScenarioSequenceProgress}} | SCR_ScenarioSources = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/ServerHosting/SCR_ServerConfigListComponent.c;542|SCR_ScenarioSources}} | SCR_ScenarioUICommon = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/Common/SCR_ScenarioUICommon.c;4|SCR_ScenarioUICommon}} | SCR_ScoreInfo = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Scoring/SCR_ScoreInfo.c;6|SCR_ScoreInfo}} | SCR_ScoringSystemComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Scoring/SCR_ScoringSystemComponent.c;87|SCR_ScoringSystemComponent}} | SCR_ScoringSystemComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Scoring/SCR_ScoringSystemComponent.c;1|SCR_ScoringSystemComponentClass}} | SCR_SCR_ResourcePlayerControllerInventoryComponentSubscriptionHandle = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Sandbox/SCR_ResourcePlayerControllerInventoryComponent.c;22|SCR_SCR_ResourcePlayerControllerInventoryComponentSubscriptionHandle}} | SCR_ScreenEffectsManager = {{Link|enfusion://ScriptEditor/scripts/Game/UI/ScreenEffectsManager.c;1|SCR_ScreenEffectsManager}} | SCR_ScriptedCharacterInputContext = {{Link|enfusion://ScriptEditor/scripts/Game/Character/SCR_ScriptedCharacterInputContext.c;1|SCR_ScriptedCharacterInputContext}} | SCR_ScriptedCommandsStaticTable = {{Link|enfusion://ScriptEditor/scripts/Game/Character/Commands/SCR_ScriptedCommandsStaticTable.c;1|SCR_ScriptedCommandsStaticTable}} | SCR_ScriptedSignalUserActionDecrease = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_ScriptedSignalUserActionDecrease.c;3|SCR_ScriptedSignalUserActionDecrease}} | SCR_ScriptedSignalUserActionIncrease = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_ScriptedSignalUserActionIncrease.c;3|SCR_ScriptedSignalUserActionIncrease}} | SCR_ScriptedUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_ScriptedUserAction.c;5|SCR_ScriptedUserAction}} | SCR_ScriptedWidgetComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c;7|SCR_ScriptedWidgetComponent}} | SCR_ScriptedWidgetTooltip = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetTooltip.c;15|SCR_ScriptedWidgetTooltip}} | SCR_ScriptedWidgetTooltipContentBase = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetTooltipContentBase.c;1|SCR_ScriptedWidgetTooltipContentBase}} | SCR_ScriptedWidgetTooltipPreset = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetTooltip.c;418|SCR_ScriptedWidgetTooltipPreset}} | SCR_ScriptedWidgetTooltipPresets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetTooltip.c;527|SCR_ScriptedWidgetTooltipPresets}} | SCR_ScriptPlatformRequestCallback = {{Link|enfusion://ScriptEditor/scripts/Game/Network/SCR_OnlineServiceWorkshop.c;2|SCR_ScriptPlatformRequestCallback}} | SCR_ScriptProfanityFilterRequestCallback = {{Link|enfusion://ScriptEditor/scripts/GameLib/platform/SCR_ScriptProfanityFilterRequestCallback.c;2|SCR_ScriptProfanityFilterRequestCallback}} | SCR_ScriptTemplateConfig = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_ScriptTemplatePlugin.c;113|SCR_ScriptTemplateConfig}} | SCR_ScriptTemplateConfigEntry = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_ScriptTemplatePlugin.c;120|SCR_ScriptTemplateConfigEntry}} | SCR_ScriptTemplatePlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_ScriptTemplatePlugin.c;2|SCR_ScriptTemplatePlugin}} | SCR_ScrollBarComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_ScrollBar/SCR_ScrollBarComponent.c;5|SCR_ScrollBarComponent}} | SCR_ScrollBarHandleComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_ScrollBar/SCR_ScrollBarHandleComponent.c;3|SCR_ScrollBarHandleComponent}} | SCR_SearchAndDestroyWaypoint = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_SearchAndDestroyWaypoint.c;6|SCR_SearchAndDestroyWaypoint}} | SCR_SearchAndDestroyWaypointClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_SearchAndDestroyWaypoint.c;1|SCR_SearchAndDestroyWaypointClass}} | SCR_SearchXOBFunctor = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/SCR_SearchXOBPlugin.c;19|SCR_SearchXOBFunctor}} | SCR_SearchXOBInvalidMaskFunctor = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/SCR_SearchXOBPlugin.c;122|SCR_SearchXOBInvalidMaskFunctor}} | SCR_SearchXOBLayerMaskFunctor = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/SCR_SearchXOBPlugin.c;154|SCR_SearchXOBLayerMaskFunctor}} | SCR_SearchXOBListAllFunctor = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/SCR_SearchXOBPlugin.c;75|SCR_SearchXOBListAllFunctor}} | SCR_SearchXOBLoadAllFunctor = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/SCR_SearchXOBPlugin.c;97|SCR_SearchXOBLoadAllFunctor}} | SCR_SecondaryExplosion = {{Link|enfusion://ScriptEditor/scripts/GameCode/Components/SCR_SecondaryExplosions.c;212|SCR_SecondaryExplosion}} | SCR_SecondaryExplosionContainerTitle = {{Link|enfusion://ScriptEditor/scripts/GameCode/Components/SCR_SecondaryExplosions.c;228|SCR_SecondaryExplosionContainerTitle}} | SCR_SecondaryExplosions = {{Link|enfusion://ScriptEditor/scripts/GameCode/Components/SCR_SecondaryExplosions.c;25|SCR_SecondaryExplosions}} | SCR_SecondaryExplosionType = {{Link|enfusion://ScriptEditor/scripts/GameCode/Components/SCR_SecondaryExplosions.c;98|SCR_SecondaryExplosionType}} | SCR_SecondaryExplosionTypeContainerTitle = {{Link|enfusion://ScriptEditor/scripts/GameCode/Components/SCR_SecondaryExplosions.c;198|SCR_SecondaryExplosionTypeContainerTitle}} | SCR_SectorPrefabSpawnPoint = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/SectorSpawn/SCR_SectorPrefabSpawnPoint.c;6|SCR_SectorPrefabSpawnPoint}} | SCR_SectorPrefabSpawnPointClass = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/SectorSpawn/SCR_SectorPrefabSpawnPoint.c;1|SCR_SectorPrefabSpawnPointClass}} | SCR_SectorSpawn = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/SectorSpawn/SCR_SectorSpawn.c;7|SCR_SectorSpawn}} | SCR_SectorSpawnClass = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/SectorSpawn/SCR_SectorSpawn.c;1|SCR_SectorSpawnClass}} | SCR_SeizeCampaignMilitaryBaseTaskEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Campaign/SCR_SeizeCampaignMilitaryBaseTask.c;5|SCR_SeizeCampaignMilitaryBaseTaskEntity}} | SCR_SeizeCampaignMilitaryBaseTaskEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Campaign/SCR_SeizeCampaignMilitaryBaseTask.c;1|SCR_SeizeCampaignMilitaryBaseTaskEntityClass}} | SCR_SeizeCompletionXpRewardInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_SeizeXpRewardConfig.c;48|SCR_SeizeCompletionXpRewardInfo}} | SCR_SeizeProgressionXpRewardInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_SeizeXpRewardConfig.c;70|SCR_SeizeProgressionXpRewardInfo}} | SCR_SeizeXpRewardConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_SeizeXpRewardConfig.c;1|SCR_SeizeXpRewardConfig}} | SCR_SeizingComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Components/SCR_SeizingComponent.c;18|SCR_SeizingComponent}} | SCR_SeizingComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Components/SCR_SeizingComponent.c;1|SCR_SeizingComponentClass}} | SCR_SelectableButtonComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_SelectableButtonComponent.c;5|SCR_SelectableButtonComponent}} | SCR_SelectableTileButtonComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_SelectableTileButtonComponent.c;2|SCR_SelectableTileButtonComponent}} | SCR_SelectContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_SelectContextAction.c;1|SCR_SelectContextAction}} | SCR_SelectCrewContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/Placeholder/SCR_SelectCrewContextAction.c;1|SCR_SelectCrewContextAction}} | SCR_SelectedEditableEntityFilter = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/EditableEntityFilters/SCR_SelectedEditableEntityFilter.c;1|SCR_SelectedEditableEntityFilter}} | SCR_SelectedEntitiesContainsTypeActionComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Editor/SCR_SelectedEntitiesContainsTypeActionComponent.c;2|SCR_SelectedEntitiesContainsTypeActionComponent}} | SCR_SelectedEntitiesContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_SelectedEntitiesContextAction.c;2|SCR_SelectedEntitiesContextAction}} | SCR_SelectionBrushConfig = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_SelectionBrushTool.c;622|SCR_SelectionBrushConfig}} | SCR_SelectionBrushTool = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_SelectionBrushTool.c;2|SCR_SelectionBrushTool}} | SCR_SelectionEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_SelectionEditorUIComponent.c;3|SCR_SelectionEditorUIComponent}} | SCR_SelectionHintComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/GalleryView/SCR_SelectionHintComponent.c;2|SCR_SelectionHintComponent}} | SCR_SelectionMenu = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SelectionMenu/SCR_SelectionMenu.c;5|SCR_SelectionMenu}} | SCR_SelectionMenuCategoryEntry = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SelectionMenu/SCR_SelectionMenuCategory.c;5|SCR_SelectionMenuCategoryEntry}} | SCR_SelectionMenuControllerInputs = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SelectionMenu/SCR_SelectionMenu.c;811|SCR_SelectionMenuControllerInputs}} | SCR_SelectionMenuData = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SelectionMenu/SCR_SelectionMenu.c;862|SCR_SelectionMenuData}} | SCR_SelectionMenuDisplay = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SelectionMenu/SCR_SelectionMenuDisplay.c;6|SCR_SelectionMenuDisplay}} | SCR_SelectionMenuEntry = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SelectionMenu/SCR_SelectionMenuEntry.c;6|SCR_SelectionMenuEntry}} | SCR_SelectionMenuEntryCommand = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SelectionMenu/Entries/SCR_SelectionMenuEntryCommand.c;1|SCR_SelectionMenuEntryCommand}} | SCR_SelectionMenuEntryCommandComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SelectionMenu/Entries/SCR_SelectionMenuEntryCommandComponent.c;1|SCR_SelectionMenuEntryCommandComponent}} | SCR_SelectionMenuEntryComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SelectionMenu/SCR_SelectionMenuEntryComponent.c;6|SCR_SelectionMenuEntryComponent}} | SCR_SelectionMenuEntryIconComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SelectionMenu/Entries/SCR_SelectionMenuEntryIconComponent.c;2|SCR_SelectionMenuEntryIconComponent}} | SCR_SelectionMenuEntryPreviewComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SelectionMenu/Entries/SCR_SelectionMenuEntryPreviewComponent.c;6|SCR_SelectionMenuEntryPreviewComponent}} | SCR_SelectionMenuInputs = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SelectionMenu/SCR_SelectionMenu.c;788|SCR_SelectionMenuInputs}} | SCR_SelectionMenuPreviewAttributes = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SelectionMenu/SCR_SelectionMenu.c;885|SCR_SelectionMenuPreviewAttributes}} | SCR_SelectionWidgetComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_SelectionWidgetComponent.c;1|SCR_SelectionWidgetComponent}} | SCR_SelectOccupantContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/Placeholder/SCR_SelectOccupantContextAction.c;1|SCR_SelectOccupantContextAction}} | SCR_SelectOccupantsContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_SelectOccupantsContextAction.c;1|SCR_SelectOccupantsContextAction}} | SCR_SelectPassengersContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/Placeholder/SCR_SelectPassengersContextAction.c;1|SCR_SelectPassengersContextAction}} | SCR_SequenceDef = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AmbientSoundsComponent/SCR_SequenceDef.c;1|SCR_SequenceDef}} | SCR_SequenceHintCondition = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Hints/HintConditions/SCR_SequenceHintCondition.c;1|SCR_SequenceHintCondition}} | SCR_SerializedFuelNode = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/Vehicle/SCR_FuelManagerComponentSerializer.c;1|SCR_SerializedFuelNode}} | SCR_ServerBrowserDialogManager = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/SCR_ServerBrowserDialogManager.c;7|SCR_ServerBrowserDialogManager}} | SCR_ServerBrowserEntryComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/ServerBrowser/SCR_ServerBrowserEntryComponent.c;2|SCR_ServerBrowserEntryComponent}} | SCR_ServerConfigAdvancedComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/ServerHosting/SCR_ServerConfigAdvancedComponent.c;1|SCR_ServerConfigAdvancedComponent}} | SCR_ServerConfigListComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/ServerHosting/SCR_ServerConfigListComponent.c;5|SCR_ServerConfigListComponent}} | SCR_ServerConfigSaveDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/ServerHosting/SCR_ServerConfigSaveDialogComponent.c;1|SCR_ServerConfigSaveDialog}} | SCR_ServerDetailEntryComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/SCR_ServerDetailEntry.c;5|SCR_ServerDetailEntryComponent}} | SCR_ServerDetailsDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/ServerDetails/SCR_ServerDetailsDialog.c;7|SCR_ServerDetailsDialog}} | SCR_ServerFilterBarComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/SCR_ServerFilterBarComponent.c;2|SCR_ServerFilterBarComponent}} | SCR_ServerFullDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/ServerDetails/SCR_ServerFullDialog.c;9|SCR_ServerFullDialog}} | SCR_ServerFullDialogContentWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/ServerDetails/SCR_ServerFullDialogContentWidgets.c;3|SCR_ServerFullDialogContentWidgets}} | SCR_ServerHostingDialogs = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/ServerHosting/SCR_ServerHostingDialogs.c;1|SCR_ServerHostingDialogs}} | SCR_ServerHostingModSubMenu = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/ServerHosting/SCR_ServerHostingModSubMenu.c;5|SCR_ServerHostingModSubMenu}} | SCR_ServerHostingModsWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/ServerHosting/WidgetClasses/SCR_ServerHostingModsWidgets.c;3|SCR_ServerHostingModsWidgets}} | SCR_ServerHostingSettingsSubMenu = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/ServerHosting/SCR_ServerHostingSettingsSubMenu.c;4|SCR_ServerHostingSettingsSubMenu}} | SCR_ServerInfoEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_ServerInfoEditorComponent.c;5|SCR_ServerInfoEditorComponent}} | SCR_ServerInfoEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_ServerInfoEditorComponent.c;1|SCR_ServerInfoEditorComponentClass}} | SCR_ServerInfoUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_ServerInfoUIComponent.c;1|SCR_ServerInfoUIComponent}} | SCR_ServerJoinDownloadsConfirmationDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/Common/Dialogs/SCR_ServerJoinDownloadsConfirmationDialog.c;2|SCR_ServerJoinDownloadsConfirmationDialog}} | SCR_ServerRestartTimerUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/GameOverScreen/SCR_ServerRestartTimerUIComponent.c;1|SCR_ServerRestartTimerUIComponent}} | SCR_ServerScenarioDetailsPanelComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/SCR_ServerScenarioDetailsPanelComponent.c;6|SCR_ServerScenarioDetailsPanelComponent}} | SCR_ServerSortingComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/SCR_ServerSortingComponent.c;2|SCR_ServerSortingComponent}} | SCR_ServicePointComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Components/SCR_ServicePointComponent.c;5|SCR_ServicePointComponent}} | SCR_ServicePointComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Components/SCR_ServicePointComponent.c;1|SCR_ServicePointComponentClass}} | SCR_ServicePointDelegateComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Components/SCR_ServicePointDelegateComponent.c;6|SCR_ServicePointDelegateComponent}} | SCR_ServicePointDelegateComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Components/SCR_ServicePointDelegateComponent.c;1|SCR_ServicePointDelegateComponentClass}} | SCR_ServicePointMapDescriptorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_ServicePointMapDescriptorComponent.c;5|SCR_ServicePointMapDescriptorComponent}} | SCR_ServicePointMapDescriptorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_ServicePointMapDescriptorComponent.c;1|SCR_ServicePointMapDescriptorComponentClass}} | SCR_ServicesStatusDialogComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_ServicesStatusDialogComponent.c;1|SCR_ServicesStatusDialogComponent}} | SCR_ServicesStatusDialogComponent_Status = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_ServicesStatusDialogComponent.c;478|SCR_ServicesStatusDialogComponent_Status}} | SCR_ServicesStatusDialogLineComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_ServicesStatusDialogComponent.c;500|SCR_ServicesStatusDialogLineComponent}} | SCR_ServicesStatusDialogUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SCR_ServicesStatusDialogUI.c;8|SCR_ServicesStatusDialogUI}} | SCR_ServicesStatusHelper = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_ServicesStatusHelper.c;15|SCR_ServicesStatusHelper}} | SCR_SessionData = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/SessionData/SCR_SessionData.c;1|SCR_SessionData}} | SCR_SessionDataEvent = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/SessionData/SCR_SessionDataEvent.c;1|SCR_SessionDataEvent}} | SCR_SessionDurationUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_SessionDurationUIComponent.c;4|SCR_SessionDurationUIComponent}} | SCR_SessionInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_SessionInfo.c;1|SCR_SessionInfo}} | SCR_SetAsLeaderContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/Placeholder/SCR_SetAsLeaderContextAction.c;1|SCR_SetAsLeaderContextAction}} | SCR_SetCombatModeGroupCommand = {{Link|enfusion://ScriptEditor/scripts/Game/Commanding/Commands/SCR_SetCombatModeGroupCommand.c;2|SCR_SetCombatModeGroupCommand}} | SCR_SetEnableDamageCharacterEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_SetEnableDamageCharacterEditorAttribute.c;1|SCR_SetEnableDamageCharacterEditorAttribute}} | SCR_SetEnableDamageEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_SetEnableDamageEditorAttribute.c;1|SCR_SetEnableDamageEditorAttribute}} | SCR_SetEnableDamageOtherEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_SetEnableDamageOtherEditorAttribute.c;1|SCR_SetEnableDamageOtherEditorAttribute}} | SCR_SetEnableDamageVehicleEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_SetEnableDamageEditorVehicleAttribute.c;1|SCR_SetEnableDamageVehicleEditorAttribute}} | SCR_SetFireVehicleContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_SetFireVehicleContextAction.c;2|SCR_SetFireVehicleContextAction}} | SCR_SetLinkedStorageToParent = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/LinkedStorages/SCR_SetLinkedStorageToParent.c;2|SCR_SetLinkedStorageToParent}} | SCR_SetModeColorEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_SetModeColorEditorUIComponent.c;1|SCR_SetModeColorEditorUIComponent}} | SCR_SetModeColorSelectedButtonEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_SetModeColorSelectedButtonEditorUIComponent.c;1|SCR_SetModeColorSelectedButtonEditorUIComponent}} | SCR_SetPerceivedCharacterFactionEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_SetPerceivedCharacterFactionEditorAttribute.c;1|SCR_SetPerceivedCharacterFactionEditorAttribute}} | SCR_SetRallyPointCommand = {{Link|enfusion://ScriptEditor/scripts/Game/Commanding/Commands/SCR_SetRallyPointCommand.c;1|SCR_SetRallyPointCommand}} | SCR_SetSpeedManualCameraComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_SetSpeedManualCameraComponent.c;4|SCR_SetSpeedManualCameraComponent}} | SCR_SetSuppliesBaseEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_SetSuppliesBaseEditorAttribute.c;1|SCR_SetSuppliesBaseEditorAttribute}} | SCR_SetSuppliesVehicleEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_SetSuppliesVehicleEditorAttribute.c;1|SCR_SetSuppliesVehicleEditorAttribute}} | SCR_SetTargetDistanceDownUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/FiringRange/SCR_SetTargetDistanceDownUserAction.c;2|SCR_SetTargetDistanceDownUserAction}} | SCR_SetTargetDistanceUpUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/FiringRange/SCR_SetTargetDistanceUpUserAction.c;2|SCR_SetTargetDistanceUpUserAction}} | SCR_SetTargetsModeUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/FiringRange/SCR_SetTargetsModeUserAction.c;2|SCR_SetTargetsModeUserAction}} | SCR_SetTaskCompletionAutomaticEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_SetTaskCompletionAutomaticEditorAttribute.c;2|SCR_SetTaskCompletionAutomaticEditorAttribute}} | SCR_SettingBindingEngine = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SettingsMenu/SCR_SettingBindingEngine.c;1|SCR_SettingBindingEngine}} | SCR_SettingBindingGameplay = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SettingsMenu/SCR_SettingBindingGameplay.c;1|SCR_SettingBindingGameplay}} | SCR_SettingsBindingBase = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SettingsMenu/SCR_SettingsBindingBase.c;1|SCR_SettingsBindingBase}} | SCR_SettingsManager = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SettingsMenu/SCR_SettingsManager.c;10|SCR_SettingsManager}} | SCR_SettingsManagerKeybindModule = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SettingsMenu/SCR_SettingsManagerKeybindModule.c;2|SCR_SettingsManagerKeybindModule}} | SCR_SettingsManagerModuleBase = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SettingsMenu/SCR_SettingsManager.c;48|SCR_SettingsManagerModuleBase}} | SCR_SettingsManagerVideoModule = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SettingsMenu/SCR_SettingsManagerVideoModule.c;1|SCR_SettingsManagerVideoModule}} | SCR_SettingsManualCameraComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_SettingsManualCameraComponent.c;4|SCR_SettingsManualCameraComponent}} | SCR_SettingSpinBoxUserData = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SettingsMenu/SCR_SettingSpinBoxUserData.c;1|SCR_SettingSpinBoxUserData}} | SCR_SettingsSubMenuBase = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SettingsMenu/SCR_SettingsSubMenuBase.c;1|SCR_SettingsSubMenuBase}} | SCR_SettingsSuperMenu = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SubMenu/SCR_SettingsSuperMenu.c;2|SCR_SettingsSuperMenu}} | SCR_SettingsTimeSpentData = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/ApplicationData/SCR_AnalyticsApplicationData.c;90|SCR_SettingsTimeSpentData}} | SCR_Shape = {{Link|enfusion://ScriptEditor/scripts/Game/Global/SCR_Shape.c;1|SCR_Shape}} | SCR_ShapeAnalyser = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/Common/SCR_ShapeAnalyser.c;3|SCR_ShapeAnalyser}} | SCR_ShapeAnalyserEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/SCR_ShapeAnalyserEntity.c;6|SCR_ShapeAnalyserEntity}} | SCR_ShapeAnalyserEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/SCR_ShapeAnalyserEntity.c;1|SCR_ShapeAnalyserEntityClass}} | SCR_ShapeAreaTool = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_ShapeAreaTool.c;2|SCR_ShapeAreaTool}} | SCR_ShapeBrushTool = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_ShapeBrushTool.c;2|SCR_ShapeBrushTool}} | SCR_ShapeDistanceRuler = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/Common/SCR_ShapeDistanceRuler.c;1|SCR_ShapeDistanceRuler}} | SCR_ShapeNextPointHelper = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/Common/SCR_ShapeNextPointHelper.c;11|SCR_ShapeNextPointHelper}} | SCR_ShedulePreloadEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/SCR_ShedulePreloadEntity.c;6|SCR_ShedulePreloadEntity}} | SCR_ShedulePreloadEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/SCR_ShedulePreloadEntity.c;1|SCR_ShedulePreloadEntityClass}} | SCR_ShellConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Character/SCR_ShellConfig.c;1|SCR_ShellConfig}} | SCR_ShellSoundComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_ShellSoundComponent.c;7|SCR_ShellSoundComponent}} | SCR_ShellSoundComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_ShellSoundComponent.c;1|SCR_ShellSoundComponentClass}} | SCR_ShowDeployableSpawnPointInfo = {{Link|enfusion://ScriptEditor/scripts/Game/DeployableInventoryItems/SCR_ShowDeployableSpawnPointInfo.c;1|SCR_ShowDeployableSpawnPointInfo}} | SCR_ShowHideInEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_ShowHideInEditorComponent.c;9|SCR_ShowHideInEditorComponent}} | SCR_ShowHideInEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_ShowHideInEditorComponent.c;4|SCR_ShowHideInEditorComponentClass}} | SCR_ShowHideInEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_ShowHideInEditorUIComponent.c;1|SCR_ShowHideInEditorUIComponent}} | SCR_ShowSelectionContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/Placeholder/SCR_ShowSelectionContextAction.c;1|SCR_ShowSelectionContextAction}} | SCR_SHPPrefabData = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_ImportShapefileTool.c;663|SCR_SHPPrefabData}} | SCR_SHPPrefabDataList = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_ImportShapefileTool.c;656|SCR_SHPPrefabDataList}} | SCR_SightsHasIlluminationCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Weapon/SCR_SightsHasIlluminationCondition.c;2|SCR_SightsHasIlluminationCondition}} | SCR_SightsZoomFOVInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Sights/SightsFOVInfo/SCR_SightsZoomFOVInfo.c;6|SCR_SightsZoomFOVInfo}} | SCR_SignalCinematicTrack = {{Link|enfusion://ScriptEditor/scripts/Game/Cinematics/SCR_SignalCinematicTrack.c;1|SCR_SignalCinematicTrack}} | SCR_SignalDebugComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_SignalsDebugComponent.c;6|SCR_SignalDebugComponent}} | SCR_SignalDebugComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_SignalsDebugComponent.c;1|SCR_SignalDebugComponentClass}} | SCR_SimpleEntryComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_SimpleEntryComponent.c;6|SCR_SimpleEntryComponent}} | SCR_SimpleEntryListDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/Common/Dialogs/SCR_SimpleEntryListDialog.c;7|SCR_SimpleEntryListDialog}} | SCR_SimpleKeybindDialogUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SettingsMenu/SCR_SimpleKeybindDialogUI.c;2|SCR_SimpleKeybindDialogUI}} | SCR_SimpleMessageComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/Common/SCR_SimpleMessageComponent.c;1|SCR_SimpleMessageComponent}} | SCR_SimpleMessagePreset = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/Common/SCR_SimpleMessageComponent.c;159|SCR_SimpleMessagePreset}} | SCR_SimpleMessagePresets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/Common/SCR_SimpleMessageComponent.c;169|SCR_SimpleMessagePresets}} | SCR_SimpleMessageUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_SimpleMessageUIInfo.c;1|SCR_SimpleMessageUIInfo}} | SCR_SimpleTagBlockUIName = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_BlockUIInfo.c;178|SCR_SimpleTagBlockUIName}} | SCR_SimpleWarningComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/Common/SCR_SimpleWarningComponent.c;2|SCR_SimpleWarningComponent}} | SCR_SimpleWarningOverlayComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/Common/SCR_SimpleWarningOverlayComponent.c;6|SCR_SimpleWarningOverlayComponent}} | SCR_SimulateAndShowToggle = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_SimulateAndShowToggle.c;2|SCR_SimulateAndShowToggle}} | SCR_SingleMagazineWidgetComponent_Base = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/WeaponInfo/SCR_SingleMagazineWidgetComponent_Base.c;1|SCR_SingleMagazineWidgetComponent_Base}} | SCR_SingleMagazineWidgetComponent_RocketPod = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/WeaponInfo/SCR_SingleMagazineWidgetComponent_RocketPod.c;1|SCR_SingleMagazineWidgetComponent_RocketPod}} | SCR_SiteSlotEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Compositions/SCR_SiteSlotEntity.c;26|SCR_SiteSlotEntity}} | SCR_SiteSlotEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Compositions/SCR_SiteSlotEntity.c;3|SCR_SiteSlotEntityClass}} | SCR_SliderBloodAttributeComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Attributes/SCR_SliderBloodAttributeComponent.c;1|SCR_SliderBloodAttributeComponent}} | SCR_SliderComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_Slider/SCR_SliderComponent.c;2|SCR_SliderComponent}} | SCR_SliderEditorAttributeUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Attributes/SCR_SliderEditorAttributeUIComponent.c;3|SCR_SliderEditorAttributeUIComponent}} | SCR_SlotCompositionComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Compositions/SCR_SlotCompositionComponent.c;44|SCR_SlotCompositionComponent}} | SCR_SlotCompositionComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Compositions/SCR_SlotCompositionComponent.c;1|SCR_SlotCompositionComponentClass}} | SCR_SlotCompositionHelperEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Compositions/SCR_SlotCompositionComponent.c;278|SCR_SlotCompositionHelperEntity}} | SCR_SlotCompositionHelperEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Compositions/SCR_SlotCompositionComponent.c;277|SCR_SlotCompositionHelperEntityClass}} | SCR_SlotDisablerEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_SlotDisabler.c;6|SCR_SlotDisablerEntity}} | SCR_SlotDisablerEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_SlotDisabler.c;1|SCR_SlotDisablerEntityClass}} | SCR_SlotLabelsComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_SlotLabelsComponent.c;1|SCR_SlotLabelsComponent}} | SCR_SlotLabelsComponent2 = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_SlotLabelsComponent2.c;1|SCR_SlotLabelsComponent2}} | SCR_SlotResizeCallback = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_HUDSlotUIComponent.c;2|SCR_SlotResizeCallback}} | SCR_SlotServiceComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Spawner/CatalogSpawner/SCR_SlotService.c;15|SCR_SlotServiceComponent}} | SCR_SlotServiceComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Spawner/CatalogSpawner/SCR_SlotService.c;1|SCR_SlotServiceComponentClass}} | SCR_SlotUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_SlotUIComponent.c;6|SCR_SlotUIComponent}} | SCR_SmallDestructibleEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/Temporary/SCR_SmallDestructibleEntity.c;7|SCR_SmallDestructibleEntity}} | SCR_SmallDestructibleEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/Temporary/SCR_SmallDestructibleEntity.c;2|SCR_SmallDestructibleEntityClass}} | SCR_SmartActionWaypoint = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_SmartActionWaypoint.c;4|SCR_SmartActionWaypoint}} | SCR_SmartActionWaypointClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Behavior/SCR_SmartActionWaypoint.c;1|SCR_SmartActionWaypointClass}} | SCR_SnackBarController = {{Link|enfusion://ScriptEditor/scripts/Game/Interactions/SCR_SnackBarController.c;1|SCR_SnackBarController}} | SCR_SnapAndOrientToTerrainPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_SnapAndOrientToTerrainPlugin.c;2|SCR_SnapAndOrientToTerrainPlugin}} | SCR_SnapToTerrainContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_SnapToTerrainContextAction.c;1|SCR_SnapToTerrainContextAction}} | SCR_SnapToTerrainToolbarAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ToolbarActions/SCR_SnapToTerrainToolbarAction.c;2|SCR_SnapToTerrainToolbarAction}} | SCR_SnapYPositionEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_SnapYPositionEditorAttribute.c;4|SCR_SnapYPositionEditorAttribute}} | SCR_SortableItem = {{Link|enfusion://ScriptEditor/scripts/Game/Utilities/SCR_SortableItem.c;1|SCR_SortableItem}} | SCR_SortCompare = {{Link|enfusion://ScriptEditor/scripts/Game/Global/Sorting.c;15|SCR_SortCompare}} | SCR_SortedArray = {{Link|enfusion://ScriptEditor/scripts/Game/Global/SCR_SortedArray.c;1|SCR_SortedArray}} | SCR_SortElementComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_SortHeader/SCR_SortElementComponent.c;19|SCR_SortElementComponent}} | SCR_SortHeaderComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_SortHeader/SCR_SortHeaderComponent.c;7|SCR_SortHeaderComponent}} | SCR_Sorting = {{Link|enfusion://ScriptEditor/scripts/Game/Global/Sorting.c;27|SCR_Sorting}} | SCR_SoundBellTime = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_BellSoundComponent.c;1|SCR_SoundBellTime}} | SCR_SoundCinematicTrack = {{Link|enfusion://ScriptEditor/scripts/Game/Cinematics/SCR_SoundCinematicTrack.c;1|SCR_SoundCinematicTrack}} | SCR_SoundComponentCinematicTrack = {{Link|enfusion://ScriptEditor/scripts/Game/Cinematics/SCR_SoundComponentCinematicTrack.c;1|SCR_SoundComponentCinematicTrack}} | SCR_SoundDataComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_SoundDataComponent.c;8|SCR_SoundDataComponent}} | SCR_SoundDataComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_SoundDataComponent.c;1|SCR_SoundDataComponentClass}} | SCR_SoundDef = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AmbientSoundsComponent/SCR_SoundDef.c;312|SCR_SoundDef}} | SCR_SoundEditorEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Effects/SCR_SoundEditorEffect.c;1|SCR_SoundEditorEffect}} | SCR_SoundEvent = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_SoundEvent.c;1|SCR_SoundEvent}} | SCR_SoundEventComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_SoundEventComponent.c;1|SCR_SoundEventComponent}} | SCR_SoundGroup = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AmbientSoundsComponent/SCR_SoundGroup.c;2|SCR_SoundGroup}} | SCR_SoundHandle = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AmbientSoundsComponent/SCR_SoundHandle.c;1|SCR_SoundHandle}} | SCR_SoundManagerModule = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Sound/SCR_SoundManagerModule.c;11|SCR_SoundManagerModule}} | SCR_SoundMapSoundGroup = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AmbientSoundsComponent/SCR_SoundGroup.c;183|SCR_SoundMapSoundGroup}} | SCR_SoundType = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AmbientSoundsComponent/SCR_SoundType.c;1|SCR_SoundType}} | SCR_SourceBaseAudioComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Locations/SCR_SourceBaseAudioComponent.c;5|SCR_SourceBaseAudioComponent}} | SCR_SourceBaseAudioComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Locations/SCR_SourceBaseAudioComponent.c;1|SCR_SourceBaseAudioComponentClass}} | SCR_SpareTireComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_SpareTireComponent.c;4|SCR_SpareTireComponent}} | SCR_SpareTireComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_SpareTireComponent.c;1|SCR_SpareTireComponentClass}} | SCR_Spawnable_FragmentDebrisTitle = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_DestructionFractalComponent.c;1126|SCR_Spawnable_FragmentDebrisTitle}} | SCR_Spawnable_ParticleTitle = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_BaseSpawnable.c;134|SCR_Spawnable_ParticleTitle}} | SCR_Spawnable_PrefabTitle = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_BaseSpawnable.c;125|SCR_Spawnable_PrefabTitle}} | SCR_Spawnable_RandomParticleTitle = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_RandomParticleSpawnable.c;2|SCR_Spawnable_RandomParticleTitle}} | SCR_Spawnable_SmallDebrisTitle = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_BaseSpawnable.c;116|SCR_Spawnable_SmallDebrisTitle}} | SCR_SpawnArea = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Areas/SCR_SpawnArea.c;23|SCR_SpawnArea}} | SCR_SpawnAreaClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Areas/SCR_SpawnArea.c;1|SCR_SpawnAreaClass}} | SCR_SpawnAtPlayersEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_SpawnAtPlayersAttribute.c;5|SCR_SpawnAtPlayersEditorAttribute}} | SCR_SpawnAtRadioVehicleAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_SpawnAtRadioVehicleAttribute.c;1|SCR_SpawnAtRadioVehicleAttribute}} | SCR_SpawnCrewContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_SpawnCrewContextAction.c;1|SCR_SpawnCrewContextAction}} | SCR_SpawnData = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/RequestHandling/Base/SCR_SpawnData.c;9|SCR_SpawnData}} | SCR_SpawnDef = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AmbientSoundsComponent/SCR_SpawnDef.c;9|SCR_SpawnDef}} | SCR_SpawnerAIGroupManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Spawner/CatalogSpawner/SCR_SpawnerAIGroupManager.c;5|SCR_SpawnerAIGroupManagerComponent}} | SCR_SpawnerAIGroupManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Spawner/CatalogSpawner/SCR_SpawnerAIGroupManager.c;1|SCR_SpawnerAIGroupManagerComponentClass}} | SCR_SpawnerAIRequest = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Spawner/CatalogSpawner/SCR_SpawnerAIGroupManager.c;122|SCR_SpawnerAIRequest}} | SCR_SpawnerRequestComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Spawner/CatalogSpawner/SCR_SpawnerRequestComponent.c;6|SCR_SpawnerRequestComponent}} | SCR_SpawnerRequestComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Spawner/CatalogSpawner/SCR_SpawnerRequestComponent.c;1|SCR_SpawnerRequestComponentClass}} | SCR_SpawnerSlotManager = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Spawner/SCR_SlotManagerComponent.c;7|SCR_SpawnerSlotManager}} | SCR_SpawnerSlotManagerClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Spawner/SCR_SlotManagerComponent.c;1|SCR_SpawnerSlotManagerClass}} | SCR_SpawnerVariantData = {{Link|enfusion://ScriptEditor/scripts/Game/EntityCatalog/EntityCatalogEntryData/SCR_EntityCatalogSpawnerData.c;325|SCR_SpawnerVariantData}} | SCR_SpawnHandlerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/RequestHandling/Base/SCR_SpawnHandlerComponent.c;13|SCR_SpawnHandlerComponent}} | SCR_SpawnHandlerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/RequestHandling/Base/SCR_SpawnHandlerComponent.c;1|SCR_SpawnHandlerComponentClass}} | SCR_SpawnLockComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/Utilities/SCR_SpawnLockComponent.c;12|SCR_SpawnLockComponent}} | SCR_SpawnLockComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/Utilities/SCR_SpawnLockComponent.c;1|SCR_SpawnLockComponentClass}} | SCR_SpawnLogic = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/Logic/SCR_SpawnLogic.c;17|SCR_SpawnLogic}} | SCR_SpawnMusic = {{Link|enfusion://ScriptEditor/scripts/Game/Music/SCR_SpawnMusic.c;1|SCR_SpawnMusic}} | SCR_SpawnOccupantsContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_SpawnOccupantsContextAction.c;2|SCR_SpawnOccupantsContextAction}} | SCR_SpawnPassengersContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/Placeholder/SCR_SpawnPassengersContextAction.c;1|SCR_SpawnPassengersContextAction}} | SCR_SpawnPoint = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_SpawnPoint.c;27|SCR_SpawnPoint}} | SCR_SpawnPointAreaMeshComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AreaMesh/SCR_SpawnPointAreaMeshComponent.c;6|SCR_SpawnPointAreaMeshComponent}} | SCR_SpawnPointAreaMeshComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AreaMesh/SCR_SpawnPointAreaMeshComponent.c;1|SCR_SpawnPointAreaMeshComponentClass}} | SCR_SpawnPointBaseCommandAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/CommandActions/SCR_SpawnPointCommandAction.c;1|SCR_SpawnPointBaseCommandAction}} | SCR_SpawnPointBudgetInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_PlayerSpawnPointManagerComponent.c;8|SCR_SpawnPointBudgetInvoker}} | SCR_SpawnPointClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_SpawnPoint.c;1|SCR_SpawnPointClass}} | SCR_SpawnPointFinalizeSpawn_Invoker = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_SpawnPoint.c;19|SCR_SpawnPointFinalizeSpawn_Invoker}} | SCR_SpawnPointNameChanged_Invoker = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_SpawnPoint.c;23|SCR_SpawnPointNameChanged_Invoker}} | SCR_SpawnPointRequestResultInfoConfig = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SpawnPointRequestResult/SCR_SpawnPointRequestResultInfoConfig.c;1|SCR_SpawnPointRequestResultInfoConfig}} | SCR_SpawnPointRequestUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DeployMenu/SCR_SpawnPointRequestUIComponent.c;1|SCR_SpawnPointRequestUIComponent}} | SCR_SpawnPointRespawnDiag = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/RequestHandling/Implementation/SpawnPointSpawn/SCR_SpawnPointSpawnRequestComponent.c;94|SCR_SpawnPointRespawnDiag}} | SCR_SpawnPointRespawnRequestComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/RequestHandling/Implementation/SpawnPointSpawn/SCR_SpawnPointSpawnRequestComponent.c;6|SCR_SpawnPointRespawnRequestComponent}} | SCR_SpawnPointRespawnRequestComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/RequestHandling/Implementation/SpawnPointSpawn/SCR_SpawnPointSpawnRequestComponent.c;1|SCR_SpawnPointRespawnRequestComponentClass}} | SCR_SpawnPointSpawnData = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/RequestHandling/Implementation/SpawnPointSpawn/SCR_SpawnPointSpawnData.c;2|SCR_SpawnPointSpawnData}} | SCR_SpawnPointSpawnHandlerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/RequestHandling/Implementation/SpawnPointSpawn/SCR_SpawnPointSpawnHandlerComponent.c;6|SCR_SpawnPointSpawnHandlerComponent}} | SCR_SpawnPointSpawnHandlerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/RequestHandling/Implementation/SpawnPointSpawn/SCR_SpawnPointSpawnHandlerComponent.c;1|SCR_SpawnPointSpawnHandlerComponentClass}} | SCR_SpawnPointSpinBox = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DeployMenu/SCR_SpawnPointSpinBox.c;1|SCR_SpawnPointSpinBox}} | SCR_SpawnPositionComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_SpawnPositionComponent.c;24|SCR_SpawnPositionComponent}} | SCR_SpawnPositionComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_SpawnPositionComponent.c;1|SCR_SpawnPositionComponentClass}} | SCR_SpawnPositionComponentManager = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_SpawnPositionComponentManager.c;6|SCR_SpawnPositionComponentManager}} | SCR_SpawnPositionComponentManagerClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_SpawnPositionComponentManager.c;1|SCR_SpawnPositionComponentManagerClass}} | SCR_SpawnPreload = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DeployMenu/SCR_SpawnPreload.c;1|SCR_SpawnPreload}} | SCR_SpawnProtectionComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_SpawnProtectionComponent.c;6|SCR_SpawnProtectionComponent}} | SCR_SpawnProtectionComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_SpawnProtectionComponent.c;1|SCR_SpawnProtectionComponentClass}} | SCR_SpawnRequestComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/RequestHandling/Base/SCR_SpawnRequestComponent.c;20|SCR_SpawnRequestComponent}} | SCR_SpawnRequestComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/RequestHandling/Base/SCR_SpawnRequestComponent.c;1|SCR_SpawnRequestComponentClass}} | SCR_SpecialCollisionDamageEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/DamageEffects/DamageEffectSources/SCR_SpecialCollisionDamageEffect.c;1|SCR_SpecialCollisionDamageEffect}} | SCR_SpecialCollisionHandlerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_SpecialCollisionHandlerComponent.c;5|SCR_SpecialCollisionHandlerComponent}} | SCR_SpecialCollisionHandlerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_SpecialCollisionHandlerComponent.c;1|SCR_SpecialCollisionHandlerComponentClass}} | SCR_SpectateModeEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Modes/SCR_SpectateModeEditorUIComponent.c;1|SCR_SpectateModeEditorUIComponent}} | SCR_SpectateTargetComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SpectateTargetComponent.c;6|SCR_SpectateTargetComponent}} | SCR_SpectateTargetComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SpectateTargetComponent.c;1|SCR_SpectateTargetComponentClass}} | SCR_SpeedBoostManualCameraComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_SpeedBoostManualCameraComponent.c;4|SCR_SpeedBoostManualCameraComponent}} | SCR_SpeedBoostUpManualCameraComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_SpeedBoostUpManualCameraComponent.c;2|SCR_SpeedBoostUpManualCameraComponent}} | SCR_SpeedByHeightManualCameraComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_SpeedByHeightManualCameraComponent.c;6|SCR_SpeedByHeightManualCameraComponent}} | SCR_SpherePointGenerator = {{Link|enfusion://ScriptEditor/scripts/Game/Utilities/SCR_SpherePointGenerator.c;1|SCR_SpherePointGenerator}} | SCR_SpherePointGeneratorPreviewComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Helpers/SCR_SpherePointGeneratorPreviewComponent.c;6|SCR_SpherePointGeneratorPreviewComponent}} | SCR_SpherePointGeneratorPreviewComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Helpers/SCR_SpherePointGeneratorPreviewComponent.c;1|SCR_SpherePointGeneratorPreviewComponentClass}} | SCR_SpiderNet = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/CareerProfile/SCR_SpiderNet.c;2|SCR_SpiderNet}} | SCR_SpinBoxComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_Slider/SCR_SpinBoxComponent.c;1|SCR_SpinBoxComponent}} | SCR_SpinboxEditorAttributeUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Attributes/SCR_SpinboxEditorAttributeUIComponent.c;3|SCR_SpinboxEditorAttributeUIComponent}} | SCR_SpinBoxPagingComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_Slider/SCR_SpinBoxPaging.c;2|SCR_SpinBoxPagingComponent}} | SCR_SpinningWidgetAnimation = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_SpinningWidgetComponent.c;66|SCR_SpinningWidgetAnimation}} | SCR_SpinningWidgetAnimationAbstract = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_SpinningWidgetComponent.c;59|SCR_SpinningWidgetAnimationAbstract}} | SCR_SpinningWidgetComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_SpinningWidgetComponent.c;6|SCR_SpinningWidgetComponent}} | SCR_SplitNotificationMessageUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/Notification/SCR_SplitNotificationMessageUIComponent.c;1|SCR_SplitNotificationMessageUIComponent}} | SCR_SplitNotificationUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_SplitNotificationUIInfo.c;1|SCR_SplitNotificationUIInfo}} | SCR_SquadRoleComboBoxElement = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/CreateGroupDialog/SCR_SquadRoleComboBoxElement.c;1|SCR_SquadRoleComboBoxElement}} | SCR_Stack = {{Link|enfusion://ScriptEditor/scripts/Game/Utilities/SCR_Stack.c;5|SCR_Stack}} | SCR_StaminaBlurEffect = {{Link|enfusion://ScriptEditor/scripts/Game/UI/ScreenEffects/SCR_StaminaBlurEffect.c;1|SCR_StaminaBlurEffect}} | SCR_StartScenarioWhileDownloadingDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/CommonDialogs.c;122|SCR_StartScenarioWhileDownloadingDialog}} | SCR_StatesEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_StatesEditorComponent.c;9|SCR_StatesEditorComponent}} | SCR_StatesEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_StatesEditorComponent.c;1|SCR_StatesEditorComponentClass}} | SCR_StatsPanel_FPS = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/StatsPanel/SCR_StatsPanel_FPS.c;7|SCR_StatsPanel_FPS}} | SCR_StatsPanel_Latency = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/StatsPanel/SCR_StatsPanel_Latency.c;1|SCR_StatsPanel_Latency}} | SCR_StatsPanel_PacketLoss = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/StatsPanel/SCR_StatsPanel_PacketLoss.c;1|SCR_StatsPanel_PacketLoss}} | SCR_StatsPanel_ServerName = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/StatsPanel/SCR_StatsPanel_ServerName.c;1|SCR_StatsPanel_ServerName}} | SCR_StatsPanelBase = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/StatsPanel/SCR_StatsPanelBase.c;18|SCR_StatsPanelBase}} | SCR_StatsPanelWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/StatsPanel/SCR_StatsPanelWidgets.c;4|SCR_StatsPanelWidgets}} | SCR_StickyNotificationUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/Notification/SCR_StickyNotificationUIComponent.c;1|SCR_StickyNotificationUIComponent}} | SCR_StopMovementGroupCommand = {{Link|enfusion://ScriptEditor/scripts/Game/Commanding/Commands/SCR_StopMovementGroupCommand.c;2|SCR_StopMovementGroupCommand}} | SCR_StressTestGroupActivation = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/PrefabsSpawning/SCR_StressTestGroupActivation.c;5|SCR_StressTestGroupActivation}} | SCR_StressTestGroupActivationClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/PrefabsSpawning/SCR_StressTestGroupActivation.c;1|SCR_StressTestGroupActivationClass}} | SCR_StringArray = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/Types/SCR_StringArray.c;3|SCR_StringArray}} | SCR_StringHelper = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_StringHelper.c;1|SCR_StringHelper}} | SCR_SubBlockUIName = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_BlockUIInfo.c;63|SCR_SubBlockUIName}} | SCR_SubMenuBase = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SubMenu/SCR_SubMenuBase.c;6|SCR_SubMenuBase}} | SCR_SuperMenuBase = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SubMenu/SCR_SuperMenuBase.c;6|SCR_SuperMenuBase}} | SCR_SuperMenuComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SubMenu/SCR_SuperMenuComponent.c;10|SCR_SuperMenuComponent}} | SCR_SuppliesBaseTooltipDetail = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_SuppliesBaseTooltipDetail.c;1|SCR_SuppliesBaseTooltipDetail}} | SCR_SuppliesTransferWaypoint = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_SuppliesTransferWaypoint.c;6|SCR_SuppliesTransferWaypoint}} | SCR_SuppliesTransferWaypointClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_SuppliesTransferWaypoint.c;1|SCR_SuppliesTransferWaypointClass}} | SCR_SuppliesTransferWaypointState = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_SuppliesTransferWaypoint.c;46|SCR_SuppliesTransferWaypointState}} | SCR_SuppliesTransportSystem = {{Link|enfusion://ScriptEditor/scripts/Game/SuppliesTransportSystem/SCR_SuppliesTransportSystem.c;5|SCR_SuppliesTransportSystem}} | SCR_SuppliesTransportSystemUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Conflict/SCR_SuppliesTransportSystemUI.c;1|SCR_SuppliesTransportSystemUI}} | SCR_SupplyAvailableItemHintUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_SupplyAvailableItemHintUIInfo.c;1|SCR_SupplyAvailableItemHintUIInfo}} | SCR_SupplyBasesContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/Campaign/SCR_SupplyBasesContextAction.c;2|SCR_SupplyBasesContextAction}} | SCR_SupplyCapacityTooltipDetail = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_SupplyCapacityTooltipDetail.c;1|SCR_SupplyCapacityTooltipDetail}} | SCR_SupplyContainerDecayAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_SupplyContainerDecayAttribute.c;1|SCR_SupplyContainerDecayAttribute}} | SCR_SupplyContainerValueAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_SupplyContainerValueAttribute.c;1|SCR_SupplyContainerValueAttribute}} | SCR_SupplyCostItemHintUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_SupplyCostItemHintUIInfo.c;1|SCR_SupplyCostItemHintUIInfo}} | SCR_SupplyEffectBase = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/Supplies/Effects/SCR_SupplyEffectConfig.c;17|SCR_SupplyEffectBase}} | SCR_SupplyEffectsConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/Supplies/Effects/SCR_SupplyEffectConfig.c;1|SCR_SupplyEffectsConfig}} | SCR_SupplyInventorySlotUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_SupplyInventorySlotUI.c;2|SCR_SupplyInventorySlotUI}} | SCR_SupplyMoveItemHintUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_SupplyMoveItemHintUIInfo.c;1|SCR_SupplyMoveItemHintUIInfo}} | SCR_SupplyRefundItemHintUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_SupplyRefundItemHintUIInfo.c;1|SCR_SupplyRefundItemHintUIInfo}} | SCR_SupplyRefundTooltipDetail = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_SupplyRefundTooltipDetail.c;2|SCR_SupplyRefundTooltipDetail}} | SCR_SupplyStoredItemHintUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_SupplyStoredItemHintUIInfo.c;1|SCR_SupplyStoredItemHintUIInfo}} | SCR_SupplySystem = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/SCR_SupplySystem.c;1|SCR_SupplySystem}} | SCR_SupplyVehicleAudioEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Sandbox/Resources/Supplies/Effects/SCR_SupplyVehicleAudioEffect.c;1|SCR_SupplyVehicleAudioEffect}} | SCR_SupportStationAreaMeshComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AreaMesh/SCR_SupportStationAreaMeshComponent.c;6|SCR_SupportStationAreaMeshComponent}} | SCR_SupportStationAreaMeshComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AreaMesh/SCR_SupportStationAreaMeshComponent.c;1|SCR_SupportStationAreaMeshComponentClass}} | SCR_SupportStationEnableFuelEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_SupportStationEnableFuelEditorAttribute.c;1|SCR_SupportStationEnableFuelEditorAttribute}} | SCR_SupportStationEnableHealEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_SupportStationEnableHealEditorAttribute.c;1|SCR_SupportStationEnableHealEditorAttribute}} | SCR_SupportStationEnableRepairEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_SupportStationEnableRepairEditorAttribute.c;1|SCR_SupportStationEnableRepairEditorAttribute}} | SCR_SupportStationEnableResupplyEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_SupportStationEnableResupplyEditorAttribute.c;1|SCR_SupportStationEnableResupplyEditorAttribute}} | SCR_SupportStationGadgetComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_SupportStationGadgetComponent.c;6|SCR_SupportStationGadgetComponent}} | SCR_SupportStationGadgetComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_SupportStationGadgetComponent.c;1|SCR_SupportStationGadgetComponentClass}} | SCR_SupportStationManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SupportStation/SCR_SupportStationManagerComponent.c;10|SCR_SupportStationManagerComponent}} | SCR_SupportStationManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SupportStation/SCR_SupportStationManagerComponent.c;1|SCR_SupportStationManagerComponentClass}} | SCR_SuppressContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/Placeholder/SCR_SuppressContextAction.c;1|SCR_SuppressContextAction}} | SCR_SuppressWaypoint = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_SuppressWaypoint.c;5|SCR_SuppressWaypoint}} | SCR_SuppressWaypointClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_SuppressWaypoint.c;1|SCR_SuppressWaypointClass}} | SCR_SuppressWaypointState = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_SuppressWaypoint.c;28|SCR_SuppressWaypointState}} | SCR_SwitchCameraToContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_SwitchCameraToContextAction.c;1|SCR_SwitchCameraToContextAction}} | SCR_SwitchFlashlightLensAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_SwitchFlashlightLensAction.c;1|SCR_SwitchFlashlightLensAction}} | SCR_SwitchLightUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_SwitchLightUserAction.c;3|SCR_SwitchLightUserAction}} | SCR_SwitchSeatAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_SwitchSeatUserAction.c;1|SCR_SwitchSeatAction}} | SCR_SwitchToPlayerContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_SwitchToPlayerContextAction.c;1|SCR_SwitchToPlayerContextAction}} | SCR_SystemClockUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_SystemClockUIComponent.c;7|SCR_SystemClockUIComponent}} | SCR_SystemHelper = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_SystemHelper.c;1|SCR_SystemHelper}} | SCR_TabDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/Dialogs/SCR_TabDialog.c;9|SCR_TabDialog}} | SCR_TabViewComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_TabView/SCR_TabViewComponent.c;13|SCR_TabViewComponent}} | SCR_TabViewContent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_TabView/SCR_TabViewComponent.c;989|SCR_TabViewContent}} | SCR_TakeControlContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_TakeControlContextAction.c;1|SCR_TakeControlContextAction}} | SCR_TakeScreenshotDebugToolbarAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ToolbarActions/SCR_TakeScreenshotDebugToolbarAction.c;1|SCR_TakeScreenshotDebugToolbarAction}} | SCR_Task = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_Task.c;78|SCR_Task}} | SCR_TaskAssignButton = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/UI/SCR_TaskAssignButton.c;1|SCR_TaskAssignButton}} | SCR_TaskAssignedInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_TaskManagerUIComponent.c;8|SCR_TaskAssignedInvoker}} | SCR_TaskAssignGroupListEntryUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Tasks/SCR_TaskAssignGroupListEntryUIComponent.c;1|SCR_TaskAssignGroupListEntryUIComponent}} | SCR_TaskAssignGroupListEntryWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Tasks/SCR_TaskAssignGroupListEntryWidgets.c;3|SCR_TaskAssignGroupListEntryWidgets}} | SCR_TaskAssignGroupListUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Tasks/SCR_TaskAssignGroupListUIComponent.c;1|SCR_TaskAssignGroupListUIComponent}} | SCR_TaskAssignGroupListWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Tasks/SCR_TaskAssignGroupListWidgets.c;3|SCR_TaskAssignGroupListWidgets}} | SCR_TaskBackgroundUpdatedInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_TaskManagerUIComponent.c;24|SCR_TaskBackgroundUpdatedInvoker}} | SCR_TaskBaseCommandAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/CommandActions/SCR_TaskBaseCommandAction.c;1|SCR_TaskBaseCommandAction}} | SCR_TaskClass = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_Task.c;74|SCR_TaskClass}} | SCR_TaskColorsUpdatedInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_TaskManagerUIComponent.c;20|SCR_TaskColorsUpdatedInvoker}} | SCR_TaskCompleteDescriptionTooltipDetail = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_TaskCompleteDescriptionTooltipDetail.c;1|SCR_TaskCompleteDescriptionTooltipDetail}} | SCR_TaskContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_TaskContextAction.c;1|SCR_TaskContextAction}} | SCR_TaskCreator = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Creators/SCR_TaskCreator.c;1|SCR_TaskCreator}} | SCR_TaskCreatorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Creators/SCR_TaskCreatorComponent.c;6|SCR_TaskCreatorComponent}} | SCR_TaskCreatorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Creators/SCR_TaskCreatorComponent.c;1|SCR_TaskCreatorComponentClass}} | SCR_TaskData = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_TaskData.c;1|SCR_TaskData}} | SCR_TaskDefend = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Tasks/SCR_ScenarioFrameworkTaskDefend.c;5|SCR_TaskDefend}} | SCR_TaskDefendClass = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Tasks/SCR_ScenarioFrameworkTaskDefend.c;1|SCR_TaskDefendClass}} | SCR_TaskDeliver = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Tasks/SCR_ScenarioFrameworkTaskDeliver.c;32|SCR_TaskDeliver}} | SCR_TaskDeliverClass = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Tasks/SCR_ScenarioFrameworkTaskDeliver.c;1|SCR_TaskDeliverClass}} | SCR_TaskDestroyObject = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Tasks/SCR_ScenarioFrameworkTaskDestroyObject.c;5|SCR_TaskDestroyObject}} | SCR_TaskDestroyObjectClass = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Tasks/SCR_ScenarioFrameworkTaskDestroyObject.c;1|SCR_TaskDestroyObjectClass}} | SCR_TaskDetailDialog = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/UI/SCR_TaskDetailDialog.c;2|SCR_TaskDetailDialog}} | SCR_TaskExecutor = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Executors/SCR_TaskExecutor.c;1|SCR_TaskExecutor}} | SCR_TaskExecutorEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Executors/SCR_TaskExecutorEntity.c;1|SCR_TaskExecutorEntity}} | SCR_TaskExecutorGroup = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Executors/SCR_TaskExecutorGroup.c;1|SCR_TaskExecutorGroup}} | SCR_TaskExecutorInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_Task.c;60|SCR_TaskExecutorInvoker}} | SCR_TaskExecutorPlayer = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Executors/SCR_TaskExecutorPlayer.c;1|SCR_TaskExecutorPlayer}} | SCR_TaskExecutorRequesterInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_Task.c;64|SCR_TaskExecutorRequesterInvoker}} | SCR_TaskFactionInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_Task.c;68|SCR_TaskFactionInvoker}} | SCR_TaskGroupInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_Task.c;72|SCR_TaskGroupInvoker}} | SCR_TaskHoveredInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_TaskManagerUIComponent.c;16|SCR_TaskHoveredInvoker}} | SCR_TaskIconComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/GameMode/SCR_TaskIconComponent.c;1|SCR_TaskIconComponent}} | SCR_TaskInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_TaskSystem.c;3|SCR_TaskInvoker}} | SCR_TaskKill = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Tasks/SCR_ScenarioFrameworkTaskKill.c;5|SCR_TaskKill}} | SCR_TaskKillClass = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Tasks/SCR_ScenarioFrameworkTaskKill.c;1|SCR_TaskKillClass}} | SCR_TaskListActionButton = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/UI/SCR_TaskListActionButton.c;2|SCR_TaskListActionButton}} | SCR_TaskListDisplay = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_TaskListDisplay.c;1|SCR_TaskListDisplay}} | SCR_TaskListEntryDescriptionUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Tasks/SCR_TaskListEntryDescriptionUIComponent.c;1|SCR_TaskListEntryDescriptionUIComponent}} | SCR_TaskListEntryDescriptionWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Tasks/SCR_TaskListEntryDescriptionWidgets.c;3|SCR_TaskListEntryDescriptionWidgets}} | SCR_TaskListEntryHandler = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/UI/SCR_TaskListEntryHandler.c;1|SCR_TaskListEntryHandler}} | SCR_TaskListEntryUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Tasks/SCR_TaskListEntryUIComponent.c;9|SCR_TaskListEntryUIComponent}} | SCR_TaskListEntryWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Tasks/SCR_TaskListEntryWidgets.c;3|SCR_TaskListEntryWidgets}} | SCR_TaskListFocusComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/UI/SCR_TaskListFocus.c;1|SCR_TaskListFocusComponent}} | SCR_TaskListFocusUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Tasks/SCR_TaskListFocusUIComponent.c;1|SCR_TaskListFocusUIComponent}} | SCR_TaskListTabEntryUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Tasks/SCR_TaskListTabEntryUIComponent.c;1|SCR_TaskListTabEntryUIComponent}} | SCR_TaskListTabEntryWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Tasks/SCR_TaskListTabEntryWidgets.c;3|SCR_TaskListTabEntryWidgets}} | SCR_TaskListUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Tasks/SCR_TaskListUIComponent.c;30|SCR_TaskListUIComponent}} | SCR_TaskListWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Tasks/SCR_TaskListWidgets.c;3|SCR_TaskListWidgets}} | SCR_TaskManagerUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_TaskManagerUIComponent.c;26|SCR_TaskManagerUIComponent}} | SCR_TaskManagerUIComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_TaskManagerUIComponent.c;1|SCR_TaskManagerUIComponentClass}} | SCR_TaskMapUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Tasks/SCR_TaskMapUIComponent.c;1|SCR_TaskMapUIComponent}} | SCR_TaskMapWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Tasks/SCR_TaskMapWidgets.c;3|SCR_TaskMapWidgets}} | SCR_TaskMilitaryBaseCallsignInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Campaign/SCR_CampaignMilitaryBaseTaskEntity.c;3|SCR_TaskMilitaryBaseCallsignInvoker}} | SCR_TaskNotificationComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Notifications/SCR_TaskNotificationComponent.c;113|SCR_TaskNotificationComponent}} | SCR_TaskNotificationComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Notifications/SCR_TaskNotificationComponent.c;1|SCR_TaskNotificationComponentClass}} | SCR_TaskNotificationData = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Notifications/SCR_TaskNotificationComponent.c;472|SCR_TaskNotificationData}} | SCR_TaskNotificationManagerEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_TaskNotificationManagerEntity.c;5|SCR_TaskNotificationManagerEntity}} | SCR_TaskNotificationManagerEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_TaskNotificationManagerEntity.c;1|SCR_TaskNotificationManagerEntityClass}} | SCR_TaskOverlayButton = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/UI/SCR_TaskOverlayButton.c;1|SCR_TaskOverlayButton}} | SCR_TaskOwnershipEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_TaskOwnershipEditorAttribute.c;1|SCR_TaskOwnershipEditorAttribute}} | SCR_TaskOwnershipInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_Task.c;48|SCR_TaskOwnershipInvoker}} | SCR_TaskRequesterIdInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Campaign/SCR_BaseRequestedTaskEntity.c;3|SCR_TaskRequesterIdInvoker}} | SCR_TaskSave = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/States/SCR_TaskSystemSerializer.c;67|SCR_TaskSave}} | SCR_TaskSelectButton = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/UI/SCR_TaskSelectButton.c;1|SCR_TaskSelectButton}} | SCR_TaskSelectedInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_TaskManagerUIComponent.c;12|SCR_TaskSelectedInvoker}} | SCR_TaskSolverBase = {{Link|enfusion://ScriptEditor/scripts/Game/TaskSolver/SCR_TaskSolverBase.c;5|SCR_TaskSolverBase}} | SCR_TaskSolverConfig = {{Link|enfusion://ScriptEditor/scripts/Game/TaskSolver/SCR_TaskSolverConfig.c;1|SCR_TaskSolverConfig}} | SCR_TaskSolverContext = {{Link|enfusion://ScriptEditor/scripts/Game/TaskSolver/SCR_TaskSolverContext.c;1|SCR_TaskSolverContext}} | SCR_TaskSolverEntry = {{Link|enfusion://ScriptEditor/scripts/Game/TaskSolver/SCR_TaskSolverEntry.c;1|SCR_TaskSolverEntry}} | SCR_TaskSolverManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/TaskSolver/SCR_TaskSolverManagerComponent.c;6|SCR_TaskSolverManagerComponent}} | SCR_TaskSolverManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/TaskSolver/SCR_TaskSolverManagerComponent.c;1|SCR_TaskSolverManagerComponentClass}} | SCR_TasksTabConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Configs/SCR_TasksTabConfig.c;1|SCR_TasksTabConfig}} | SCR_TaskState = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_TaskState.c;3|SCR_TaskState}} | SCR_TaskStateContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_TaskStateContextAction.c;1|SCR_TaskStateContextAction}} | SCR_TaskStateEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_TaskStateEditorAttribute.c;1|SCR_TaskStateEditorAttribute}} | SCR_TaskStateHelper = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_TaskState.c;13|SCR_TaskStateHelper}} | SCR_TaskStateInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_Task.c;44|SCR_TaskStateInvoker}} | SCR_TaskSystem = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_TaskSystem.c;5|SCR_TaskSystem}} | SCR_TaskSystemData = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/States/SCR_TaskSystemSerializer.c;2|SCR_TaskSystemData}} | SCR_TaskSystemNetworkComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_TaskSystemNetworkComponent.c;5|SCR_TaskSystemNetworkComponent}} | SCR_TaskSystemNetworkComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_TaskSystemNetworkComponent.c;1|SCR_TaskSystemNetworkComponentClass}} | SCR_TaskSystemSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/States/SCR_TaskSystemSerializer.c;6|SCR_TaskSystemSerializer}} | SCR_TaskTabStates = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Tasks/SCR_TaskListUIComponent.c;8|SCR_TaskTabStates}} | SCR_TaskTextAttackEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_TaskTextAttackEditorAttribute.c;1|SCR_TaskTextAttackEditorAttribute}} | SCR_TaskTextBaseEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_TaskTextBaseEditorAttribute.c;1|SCR_TaskTextBaseEditorAttribute}} | SCR_TaskTextCustomEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_TaskTextCustomEditorAttribute.c;1|SCR_TaskTextCustomEditorAttribute}} | SCR_TaskTextDefendEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_TaskTextDefendEditorAttribute.c;1|SCR_TaskTextDefendEditorAttribute}} | SCR_TaskTextEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_TaskTextEditorAttribute.c;1|SCR_TaskTextEditorAttribute}} | SCR_TaskTextMoveEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_TaskTextMoveEditorAttribute.c;1|SCR_TaskTextMoveEditorAttribute}} | SCR_TaskToolbarEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Toolbar/SCR_TaskToolbarEditorUIComponent.c;3|SCR_TaskToolbarEditorUIComponent}} | SCR_TaskUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_TaskUIComponent.c;5|SCR_TaskUIComponent}} | SCR_TaskUIComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_TaskUIComponent.c;1|SCR_TaskUIComponentClass}} | SCR_TaskUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/UI/SCR_TaskUIInfo.c;1|SCR_TaskUIInfo}} | SCR_TaskUIVisibilityEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_TaskUIVisibilityEditorAttribute.c;1|SCR_TaskUIVisibilityEditorAttribute}} | SCR_TaskUIVisibilityInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_Task.c;56|SCR_TaskUIVisibilityInvoker}} | SCR_TaskVisibilityEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_TaskVisibilityEditorAttribute.c;1|SCR_TaskVisibilityEditorAttribute}} | SCR_TaskVisibilityInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_Task.c;52|SCR_TaskVisibilityInvoker}} | SCR_TaskVisualsChangedInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Tasks/SCR_TaskListEntryUIComponent.c;7|SCR_TaskVisualsChangedInvoker}} | SCR_TaskWidgetSelectedInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Tasks/SCR_TaskListEntryUIComponent.c;3|SCR_TaskWidgetSelectedInvoker}} | SCR_TeleportCameraContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_TeleportCameraContextAction.c;2|SCR_TeleportCameraContextAction}} | SCR_TeleportCameraToPlayerContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_TeleportCameraToPlayerContextAction.c;1|SCR_TeleportCameraToPlayerContextAction}} | SCR_TeleportPlayerHereContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_TeleportPlayerHereContextAction.c;1|SCR_TeleportPlayerHereContextAction}} | SCR_TeleportPlayerManualCameraComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_TeleportPlayerManualCameraComponent.c;4|SCR_TeleportPlayerManualCameraComponent}} | SCR_TeleportToCursorManualCameraComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_TeleportToCursorManualCameraComponent.c;4|SCR_TeleportToCursorManualCameraComponent}} | SCR_TerrainCollisionManualCameraComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_TerrainCollisionManualCameraComponent.c;4|SCR_TerrainCollisionManualCameraComponent}} | SCR_TerrainDef = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AmbientSoundsComponent/SCR_TerrainDef.c;14|SCR_TerrainDef}} | SCR_TerrainDefConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AmbientSoundsComponent/SCR_TerrainDefConfig.c;2|SCR_TerrainDefConfig}} | SCR_TerrainEntityVariantConfig = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_TerrainEntityVariantReplacementPlugin.c;815|SCR_TerrainEntityVariantConfig}} | SCR_TerrainEntityVariantConfigEntry = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_TerrainEntityVariantReplacementPlugin.c;822|SCR_TerrainEntityVariantConfigEntry}} | SCR_TerrainEntityVariantConfigValue = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_TerrainEntityVariantReplacementPlugin.c;832|SCR_TerrainEntityVariantConfigValue}} | SCR_TerrainEntityVariantReplacementPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_TerrainEntityVariantReplacementPlugin.c;14|SCR_TerrainEntityVariantReplacementPlugin}} | SCR_TerrainHelper = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_TerrainHelper.c;1|SCR_TerrainHelper}} | SCR_TerrainMeshEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/SCR_TerrainMeshEntity.c;9|SCR_TerrainMeshEntity}} | SCR_TerrainMeshEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/SCR_TerrainMeshEntity.c;1|SCR_TerrainMeshEntityClass}} | SCR_TerrainSoundGroup = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AmbientSoundsComponent/SCR_SoundGroup.c;123|SCR_TerrainSoundGroup}} | SCR_TerritoryIdentityNameOverride = {{Link|enfusion://ScriptEditor/scripts/Game/Identity/Containers/SCR_FactionHomeTerritoryConfig.c;139|SCR_TerritoryIdentityNameOverride}} | SCR_TerritoryIdentityOverride = {{Link|enfusion://ScriptEditor/scripts/Game/Identity/Containers/SCR_FactionHomeTerritoryConfig.c;109|SCR_TerritoryIdentityOverride}} | SCR_TerritoryIdentityVisualOverride = {{Link|enfusion://ScriptEditor/scripts/Game/Identity/Containers/SCR_FactionHomeTerritoryConfig.c;125|SCR_TerritoryIdentityVisualOverride}} | SCR_TEST_Example1Subject_Counter_CountsToFive = {{Link|enfusion://ScriptEditor/scripts/Game/Tests/TestSuites/Example/SCR_TEST_Example1TestSuite.c;22|SCR_TEST_Example1Subject_Counter_CountsToFive}} | SCR_TEST_Example1Subject_GetFive_ReturnsFive = {{Link|enfusion://ScriptEditor/scripts/Game/Tests/TestSuites/Example/SCR_TEST_Example1TestSuite.c;60|SCR_TEST_Example1Subject_GetFive_ReturnsFive}} | SCR_TEST_Example1Subject_NoResultExample = {{Link|enfusion://ScriptEditor/scripts/Game/Tests/TestSuites/Example/SCR_TEST_Example1TestSuite.c;99|SCR_TEST_Example1Subject_NoResultExample}} | SCR_TEST_Example1Subject_TimeoutExample = {{Link|enfusion://ScriptEditor/scripts/Game/Tests/TestSuites/Example/SCR_TEST_Example1TestSuite.c;88|SCR_TEST_Example1Subject_TimeoutExample}} | SCR_TEST_Example1SubjectSuite = {{Link|enfusion://ScriptEditor/scripts/Game/Tests/TestSuites/Example/SCR_TEST_Example1TestSuite.c;14|SCR_TEST_Example1SubjectSuite}} | SCR_TestEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_TestEditorAttribute.c;2|SCR_TestEditorAttribute}} | SCR_TestEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_TestEditorComponent.c;11|SCR_TestEditorComponent}} | SCR_TestEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_TestEditorComponent.c;1|SCR_TestEditorComponentClass}} | SCR_TestRaycaster = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/SCR_TestRaycaster.c;13|SCR_TestRaycaster}} | SCR_TestRaycasterClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/SCR_TestRaycaster.c;1|SCR_TestRaycasterClass}} | SCR_TestScriptedRadioMsgUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_TestScriptedRadioMsgUserAction.c;1|SCR_TestScriptedRadioMsgUserAction}} | SCR_TEVR_Data = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_TerrainEntityVariantReplacementPlugin.c;802|SCR_TEVR_Data}} | SCR_TextAndWarningTooltipDetail = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_TextAndWarningTooltipDetail.c;1|SCR_TextAndWarningTooltipDetail}} | SCR_TextsTaskManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_TextsTaskManagerComponent.c;45|SCR_TextsTaskManagerComponent}} | SCR_TextsTaskManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_TextsTaskManagerComponent.c;1|SCR_TextsTaskManagerComponentClass}} | SCR_TextsTaskManagerEntry = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_TextsTaskManagerComponent.c;108|SCR_TextsTaskManagerEntry}} | SCR_TextureResource = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Texture/SCR_TextureResource.c;1|SCR_TextureResource}} | SCR_TileBaseComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/MainMenu/SCR_TileBaseComponent.c;1|SCR_TileBaseComponent}} | SCR_TimeAdvancementEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_TimeAdvancementEditorAttribute.c;6|SCR_TimeAdvancementEditorAttribute}} | SCR_TimeAndWeatherHandlerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Environment/SCR_TimeAndWeatherHandlerComponent.c;5|SCR_TimeAndWeatherHandlerComponent}} | SCR_TimeAndWeatherHandlerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Environment/SCR_TimeAndWeatherHandlerComponent.c;1|SCR_TimeAndWeatherHandlerComponentClass}} | SCR_TimeAndWeatherState = {{Link|enfusion://ScriptEditor/scripts/Game/TimeAndWeather/SCR_TimeAndWeatherState.c;1|SCR_TimeAndWeatherState}} | SCR_TimedDebris = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/Building/SCR_DestructibleBuildingComponent.c;215|SCR_TimedDebris}} | SCR_TimedEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/Building/SCR_DestructibleBuildingComponent.c;319|SCR_TimedEffect}} | SCR_TimedParticle = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/Building/SCR_DestructibleBuildingComponent.c;451|SCR_TimedParticle}} | SCR_TimedPrefab = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/Building/SCR_DestructibleBuildingComponent.c;395|SCR_TimedPrefab}} | SCR_TimedSound = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/Building/SCR_DestructibleBuildingComponent.c;353|SCR_TimedSound}} | SCR_TimedSpawnPointComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_TimedSpawnPointComponent.c;6|SCR_TimedSpawnPointComponent}} | SCR_TimedSpawnPointComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_TimedSpawnPointComponent.c;1|SCR_TimedSpawnPointComponentClass}} | SCR_TimedWaypoint = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_TimedWaypoint.c;24|SCR_TimedWaypoint}} | SCR_TimedWaypointClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_TimedWaypoint.c;1|SCR_TimedWaypointClass}} | SCR_TimeMeasurementHelper = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/Common/SCR_TimeMeasurementHelper.c;25|SCR_TimeMeasurementHelper}} | SCR_TimeMeasurementHelper_Info = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/Common/SCR_TimeMeasurementHelper.c;104|SCR_TimeMeasurementHelper_Info}} | SCR_TimePresetsAttributeUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Attributes/SCR_TimePresetsAttributeUIComponent.c;1|SCR_TimePresetsAttributeUIComponent}} | SCR_TimePresetsEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_TimePresetsEditorAttribute.c;4|SCR_TimePresetsEditorAttribute}} | SCR_TimeSpentData = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/ApplicationData/SCR_AnalyticsApplicationData.c;67|SCR_TimeSpentData}} | SCR_TipBlockUIName = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_BlockUIInfo.c;82|SCR_TipBlockUIName}} | SCR_TireReplacementManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_TireReplacementManagerComponent.c;6|SCR_TireReplacementManagerComponent}} | SCR_TireReplacementManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/SCR_TireReplacementManagerComponent.c;1|SCR_TireReplacementManagerComponentClass}} | SCR_ToggleDamageEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_ToggleDamageEditorAttribute.c;2|SCR_ToggleDamageEditorAttribute}} | SCR_ToggleDeployableSpawnPointLoadoutAction = {{Link|enfusion://ScriptEditor/scripts/Game/DeployableInventoryItems/SCR_ToggleDeployableSpawnPointLoadoutAction.c;1|SCR_ToggleDeployableSpawnPointLoadoutAction}} | SCR_ToggleHandbrakeAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_ToggleHandbrakeAction.c;1|SCR_ToggleHandbrakeAction}} | SCR_ToggleInterfaceToolbarAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ToolbarActions/SCR_ToggleInterfaceToolbarAction.c;1|SCR_ToggleInterfaceToolbarAction}} | SCR_ToggleLocalEditorNightModeToolbarAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ToolbarActions/SCR_ToggleLocalEditorNightModeToolbarAction.c;1|SCR_ToggleLocalEditorNightModeToolbarAction}} | SCR_ToggleSafetyUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/Inspection/SCR_ToggleSafetyUserAction.c;1|SCR_ToggleSafetyUserAction}} | SCR_ToggleUIManualCameraComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_ToggleUIManualCameraComponent.c;4|SCR_ToggleUIManualCameraComponent}} | SCR_ToolbarActionsEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_ToolbarActionsEditorComponent.c;6|SCR_ToolbarActionsEditorComponent}} | SCR_ToolbarActionsEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_ToolbarActionsEditorComponent.c;1|SCR_ToolbarActionsEditorComponentClass}} | SCR_ToolbarContextBrowserBuildingUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Toolbar/SCR_ToolbarContextBrowserBuildingUIComponent.c;2|SCR_ToolbarContextBrowserBuildingUIComponent}} | SCR_ToolbarContextBrowserEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Toolbar/SCR_ToolbarContextBrowserEditorUIComponent.c;1|SCR_ToolbarContextBrowserEditorUIComponent}} | SCR_ToolbarItemNotificationEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Toolbar/Items/ItemNotifications/SCR_ToolbarItemNotificationEditorUIComponent.c;1|SCR_ToolbarItemNotificationEditorUIComponent}} | SCR_ToolboxComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_Toolbox/SCR_ToolboxComponent.c;2|SCR_ToolboxComponent}} | SCR_ToolboxMultilineComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_Toolbox/SCR_ToolboxMultilineComponent.c;1|SCR_ToolboxMultilineComponent}} | SCR_ToolMenuButtonComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Map/Components/SCR_ToolMenuButtonComponent.c;1|SCR_ToolMenuButtonComponent}} | SCR_TooltipAreaEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/SCR_TooltipAreaEditorUIComponent.c;3|SCR_TooltipAreaEditorUIComponent}} | SCR_TooltipEditorEntry = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/SCR_TooltipManagerEditorUIComponent.c;373|SCR_TooltipEditorEntry}} | SCR_TooltipManagerEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/SCR_TooltipManagerEditorUIComponent.c;3|SCR_TooltipManagerEditorUIComponent}} | SCR_TooltipPositionPreset = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetTooltip.c;548|SCR_TooltipPositionPreset}} | SCR_TourniquetDamageEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/DamageEffects/CharacterDamageEffects/SCR_TourniquetDamageEffect.c;1|SCR_TourniquetDamageEffect}} | SCR_TourniquetMovedCallback = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_TourniquetStorageComponent.c;5|SCR_TourniquetMovedCallback}} | SCR_TourniquetStorageComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_TourniquetStorageComponent.c;51|SCR_TourniquetStorageComponent}} | SCR_TourniquetStorageComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_TourniquetStorageComponent.c;1|SCR_TourniquetStorageComponentClass}} | SCR_TourniquetStorageSlot = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_TourniquetStorageSlot.c;1|SCR_TourniquetStorageSlot}} | SCR_TourniquetUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_TourniquetUserAction.c;1|SCR_TourniquetUserAction}} | SCR_TrackedControllerComponent = {{Link|enfusion://ScriptEditor/scripts/GameCode/Vehicle/SCR_TrackedControllerComponent.c;9|SCR_TrackedControllerComponent}} | SCR_TrackedControllerComponentClass = {{Link|enfusion://ScriptEditor/scripts/GameCode/Vehicle/SCR_TrackedControllerComponent.c;1|SCR_TrackedControllerComponentClass}} | SCR_TrackGeneratorEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/SCR_TrackGeneratorEntity.c;6|SCR_TrackGeneratorEntity}} | SCR_TrackGeneratorEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/SCR_TrackGeneratorEntity.c;1|SCR_TrackGeneratorEntityClass}} | SCR_TracyPlugin = {{Link|enfusion://ScriptEditor/scripts/Workbench/SCR_TracyPlugin.c;1|SCR_TracyPlugin}} | SCR_TransferSuppliesInteraction = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/AnalyticsDataCollectionModules/SCR_AnalyticsDataCollectionTransferSuppliesModule.c;1|SCR_TransferSuppliesInteraction}} | SCR_TransformingEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_TransformingEditorComponent.c;33|SCR_TransformingEditorComponent}} | SCR_TransformingEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_TransformingEditorComponent.c;1|SCR_TransformingEditorComponentClass}} | SCR_TransformingEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_TransformingEditorUIComponent.c;3|SCR_TransformingEditorUIComponent}} | SCR_TransportContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/Placeholder/SCR_TransportContextAction.c;1|SCR_TransportContextAction}} | SCR_TransportUnitComponent = {{Link|enfusion://ScriptEditor/scripts/Game/SuppliesTransportSystem/SCR_TransportUnitComponent.c;10|SCR_TransportUnitComponent}} | SCR_TransportUnitComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/SuppliesTransportSystem/SCR_TransportUnitComponent.c;1|SCR_TransportUnitComponentClass}} | SCR_TransportUnitHelpTaskEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_TransportUnitHelpTaskEntity.c;5|SCR_TransportUnitHelpTaskEntity}} | SCR_TransportUnitHelpTaskEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_TransportUnitHelpTaskEntity.c;1|SCR_TransportUnitHelpTaskEntityClass}} | SCR_TransportUnitUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Conflict/SCR_TransportUnitUI.c;1|SCR_TransportUnitUI}} | SCR_TransportWaypoint = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_TransportWaypoint.c;5|SCR_TransportWaypoint}} | SCR_TransportWaypointClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_TransportWaypoint.c;1|SCR_TransportWaypointClass}} | SCR_TreeDebrisSmallEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/debris/TreeDebrisSmallEntity.c;6|SCR_TreeDebrisSmallEntity}} | SCR_TreeDebrisSmallEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/debris/TreeDebrisSmallEntity.c;1|SCR_TreeDebrisSmallEntityClass}} | SCR_TreeHitZoneV2 = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/Tree/SCR_TreeHitZoneV2.c;3|SCR_TreeHitZoneV2}} | SCR_TreePartHierarchyV2 = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/Tree/SCR_TreePartHierarchyV2.c;2|SCR_TreePartHierarchyV2}} | SCR_TreePartSynchronizationData = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/Tree/TreePartSynchronizationData.c;1|SCR_TreePartSynchronizationData}} | SCR_TreePartV2 = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/Tree/SCR_TreePartV2.c;8|SCR_TreePartV2}} | SCR_TreePartV2Class = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/Tree/SCR_TreePartV2.c;1|SCR_TreePartV2Class}} | SCR_TreeSoundGroup = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AmbientSoundsComponent/SCR_SoundGroup.c;43|SCR_TreeSoundGroup}} | SCR_TreeTraceInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Destruction/Tree/SCR_DestructibleTreeV2.c;26|SCR_TreeTraceInfo}} | SCR_TriggerAreaMeshComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AreaMesh/SCR_TriggerAreaMeshComponent.c;6|SCR_TriggerAreaMeshComponent}} | SCR_TriggerAreaMeshComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AreaMesh/SCR_TriggerAreaMeshComponent.c;1|SCR_TriggerAreaMeshComponentClass}} | SCR_TriggerSoundComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_TriggerSoundComponent.c;6|SCR_TriggerSoundComponent}} | SCR_TriggerSoundComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_TriggerSoundComponent.c;1|SCR_TriggerSoundComponentClass}} | SCR_TriggerTask = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Editor/SCR_TriggerTask.c;6|SCR_TriggerTask}} | SCR_TriggerTaskClass = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/Editor/SCR_TriggerTask.c;1|SCR_TriggerTaskClass}} | SCR_TurnOnAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_TurnOnAction.c;1|SCR_TurnOnAction}} | SCR_TurretAssemblyAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_TurretAssemblyAction.c;9|SCR_TurretAssemblyAction}} | SCR_TurretControllerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_TurretControllerComponent.c;6|SCR_TurretControllerComponent}} | SCR_TurretControllerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_TurretControllerComponent.c;1|SCR_TurretControllerComponentClass}} | SCR_TurretGetInUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_TurretGetInUserAction.c;1|SCR_TurretGetInUserAction}} | SCR_TurretInventoryStorageManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_TurretInventoryStorageManagerComponent.c;6|SCR_TurretInventoryStorageManagerComponent}} | SCR_TurretInventoryStorageManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_TurretInventoryStorageManagerComponent.c;1|SCR_TurretInventoryStorageManagerComponentClass}} | SCR_TurretPickUpItemAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_TurretPickUpItemAction.c;1|SCR_TurretPickUpItemAction}} | SCR_Tutorial_CombatEngineering_BoardVehicle = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/CombatEngineeringCourse/SCR_Tutorial_CombatEngineering_BoardVehicle.c;7|SCR_Tutorial_CombatEngineering_BoardVehicle}} | SCR_Tutorial_CombatEngineering_BoardVehicleClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/CombatEngineeringCourse/SCR_Tutorial_CombatEngineering_BoardVehicle.c;1|SCR_Tutorial_CombatEngineering_BoardVehicleClass}} | SCR_Tutorial_CombatEngineering_END = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/CombatEngineeringCourse/SCR_Tutorial_CombatEngineering_END.c;7|SCR_Tutorial_CombatEngineering_END}} | SCR_Tutorial_CombatEngineering_ENDClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/CombatEngineeringCourse/SCR_Tutorial_CombatEngineering_END.c;1|SCR_Tutorial_CombatEngineering_ENDClass}} | SCR_Tutorial_CombatEngineering_EnterBuilding_1 = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/CombatEngineeringCourse/SCR_Tutorial_CombatEngineering_EnterBuilding_1.c;6|SCR_Tutorial_CombatEngineering_EnterBuilding_1}} | SCR_Tutorial_CombatEngineering_EnterBuilding_1Class = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/CombatEngineeringCourse/SCR_Tutorial_CombatEngineering_EnterBuilding_1.c;1|SCR_Tutorial_CombatEngineering_EnterBuilding_1Class}} | SCR_Tutorial_CombatEngineering_EnterBuilding_2 = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/CombatEngineeringCourse/SCR_Tutorial_CombatEngineering_EnterBuilding_2.c;6|SCR_Tutorial_CombatEngineering_EnterBuilding_2}} | SCR_Tutorial_CombatEngineering_EnterBuilding_2Class = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/CombatEngineeringCourse/SCR_Tutorial_CombatEngineering_EnterBuilding_2.c;1|SCR_Tutorial_CombatEngineering_EnterBuilding_2Class}} | SCR_Tutorial_CombatEngineering_EquipEntrenchingTool = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/CombatEngineeringCourse/SCR_Tutorial_CombatEngineering_EquipEntrenchingTool.c;7|SCR_Tutorial_CombatEngineering_EquipEntrenchingTool}} | SCR_Tutorial_CombatEngineering_EquipEntrenchingToolClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/CombatEngineeringCourse/SCR_Tutorial_CombatEngineering_EquipEntrenchingTool.c;1|SCR_Tutorial_CombatEngineering_EquipEntrenchingToolClass}} | SCR_Tutorial_CombatEngineering_ExitBuilding_1 = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/CombatEngineeringCourse/SCR_Tutorial_CombatEngineering_ExitBuilding_1.c;6|SCR_Tutorial_CombatEngineering_ExitBuilding_1}} | SCR_Tutorial_CombatEngineering_ExitBuilding_1Class = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/CombatEngineeringCourse/SCR_Tutorial_CombatEngineering_ExitBuilding_1.c;1|SCR_Tutorial_CombatEngineering_ExitBuilding_1Class}} | SCR_Tutorial_CombatEngineering_ExitBuilding_2 = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/CombatEngineeringCourse/SCR_Tutorial_CombatEngineering_ExitBuilding_2.c;6|SCR_Tutorial_CombatEngineering_ExitBuilding_2}} | SCR_Tutorial_CombatEngineering_ExitBuilding_2Class = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/CombatEngineeringCourse/SCR_Tutorial_CombatEngineering_ExitBuilding_2.c;1|SCR_Tutorial_CombatEngineering_ExitBuilding_2Class}} | SCR_Tutorial_CombatEngineering_FinishConstruction1 = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/CombatEngineeringCourse/SCR_Tutorial_CombatEngineering_FinishConstruction1.c;7|SCR_Tutorial_CombatEngineering_FinishConstruction1}} | SCR_Tutorial_CombatEngineering_FinishConstruction1Class = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/CombatEngineeringCourse/SCR_Tutorial_CombatEngineering_FinishConstruction1.c;1|SCR_Tutorial_CombatEngineering_FinishConstruction1Class}} | SCR_Tutorial_CombatEngineering_LoadSupplies_1 = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/CombatEngineeringCourse/SCR_Tutorial_CombatEngineering_LoadSupplies_1.c;7|SCR_Tutorial_CombatEngineering_LoadSupplies_1}} | SCR_Tutorial_CombatEngineering_LoadSupplies_1Class = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/CombatEngineeringCourse/SCR_Tutorial_CombatEngineering_LoadSupplies_1.c;1|SCR_Tutorial_CombatEngineering_LoadSupplies_1Class}} | SCR_Tutorial_CombatEngineering_LoadSupplies_2 = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/CombatEngineeringCourse/SCR_Tutorial_CombatEngineering_LoadSupplies_2.c;7|SCR_Tutorial_CombatEngineering_LoadSupplies_2}} | SCR_Tutorial_CombatEngineering_LoadSupplies_2Class = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/CombatEngineeringCourse/SCR_Tutorial_CombatEngineering_LoadSupplies_2.c;1|SCR_Tutorial_CombatEngineering_LoadSupplies_2Class}} | SCR_Tutorial_CombatEngineering_Move_1 = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/CombatEngineeringCourse/SCR_Tutorial_CombatEngineering_Move_1.c;7|SCR_Tutorial_CombatEngineering_Move_1}} | SCR_Tutorial_CombatEngineering_Move_1Class = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/CombatEngineeringCourse/SCR_Tutorial_CombatEngineering_Move_1.c;1|SCR_Tutorial_CombatEngineering_Move_1Class}} | SCR_Tutorial_CombatEngineering_Move_2 = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/CombatEngineeringCourse/SCR_Tutorial_CombatEngineering_Move_2.c;7|SCR_Tutorial_CombatEngineering_Move_2}} | SCR_Tutorial_CombatEngineering_Move_2Class = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/CombatEngineeringCourse/SCR_Tutorial_CombatEngineering_Move_2.c;1|SCR_Tutorial_CombatEngineering_Move_2Class}} | SCR_Tutorial_CombatEngineering_Move_3 = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/CombatEngineeringCourse/SCR_Tutorial_CombatEngineering_Move_3.c;7|SCR_Tutorial_CombatEngineering_Move_3}} | SCR_Tutorial_CombatEngineering_Move_3Class = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/CombatEngineeringCourse/SCR_Tutorial_CombatEngineering_Move_3.c;1|SCR_Tutorial_CombatEngineering_Move_3Class}} | SCR_Tutorial_CombatEngineering_Move_4 = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/CombatEngineeringCourse/SCR_Tutorial_CombatEngineering_Move_4.c;7|SCR_Tutorial_CombatEngineering_Move_4}} | SCR_Tutorial_CombatEngineering_Move_4Class = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/CombatEngineeringCourse/SCR_Tutorial_CombatEngineering_Move_4.c;1|SCR_Tutorial_CombatEngineering_Move_4Class}} | SCR_Tutorial_CombatEngineering_Move_5 = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/CombatEngineeringCourse/SCR_Tutorial_CombatEngineering_Move_5.c;7|SCR_Tutorial_CombatEngineering_Move_5}} | SCR_Tutorial_CombatEngineering_Move_5Class = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/CombatEngineeringCourse/SCR_Tutorial_CombatEngineering_Move_5.c;1|SCR_Tutorial_CombatEngineering_Move_5Class}} | SCR_Tutorial_CombatEngineering_SelectPrefab_1 = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/CombatEngineeringCourse/SCR_Tutorial_CombatEngineering_SelectPrefab_1.c;6|SCR_Tutorial_CombatEngineering_SelectPrefab_1}} | SCR_Tutorial_CombatEngineering_SelectPrefab_1Class = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/CombatEngineeringCourse/SCR_Tutorial_CombatEngineering_SelectPrefab_1.c;1|SCR_Tutorial_CombatEngineering_SelectPrefab_1Class}} | SCR_Tutorial_CombatEngineering_SpawnEntity_1 = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/CombatEngineeringCourse/SCR_Tutorial_CombatEngineering_SpawnEntity_1.c;6|SCR_Tutorial_CombatEngineering_SpawnEntity_1}} | SCR_Tutorial_CombatEngineering_SpawnEntity_1Class = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/CombatEngineeringCourse/SCR_Tutorial_CombatEngineering_SpawnEntity_1.c;1|SCR_Tutorial_CombatEngineering_SpawnEntity_1Class}} | SCR_Tutorial_CombatEngineering_SpawnEntity_2 = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/CombatEngineeringCourse/SCR_Tutorial_CombatEngineering_SpawnEntity_2.c;6|SCR_Tutorial_CombatEngineering_SpawnEntity_2}} | SCR_Tutorial_CombatEngineering_SpawnEntity_2Class = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/CombatEngineeringCourse/SCR_Tutorial_CombatEngineering_SpawnEntity_2.c;1|SCR_Tutorial_CombatEngineering_SpawnEntity_2Class}} | SCR_Tutorial_CombatEngineering_START = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/CombatEngineeringCourse/SCR_Tutorial_CombatEngineering_START.c;7|SCR_Tutorial_CombatEngineering_START}} | SCR_Tutorial_CombatEngineering_STARTClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/CombatEngineeringCourse/SCR_Tutorial_CombatEngineering_START.c;1|SCR_Tutorial_CombatEngineering_STARTClass}} | SCR_Tutorial_CombatEngineering_StopAndGetOut = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/CombatEngineeringCourse/SCR_Tutorial_CombatEngineering_StopAndGetOut.c;7|SCR_Tutorial_CombatEngineering_StopAndGetOut}} | SCR_Tutorial_CombatEngineering_StopAndGetOutClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/CombatEngineeringCourse/SCR_Tutorial_CombatEngineering_StopAndGetOut.c;1|SCR_Tutorial_CombatEngineering_StopAndGetOutClass}} | SCR_Tutorial_Driving_DRIVEROAD = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/DrivingSimple/SCR_Tutorial_Driving_DRIVEROAD.c;7|SCR_Tutorial_Driving_DRIVEROAD}} | SCR_Tutorial_Driving_DRIVEROAD10 = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/DrivingSimple/SCR_Tutorial_Driving_DRIVEROAD10.c;7|SCR_Tutorial_Driving_DRIVEROAD10}} | SCR_Tutorial_Driving_DRIVEROAD10Class = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/DrivingSimple/SCR_Tutorial_Driving_DRIVEROAD10.c;1|SCR_Tutorial_Driving_DRIVEROAD10Class}} | SCR_Tutorial_Driving_DRIVEROAD11 = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/DrivingSimple/SCR_Tutorial_Driving_DRIVEROAD11.c;7|SCR_Tutorial_Driving_DRIVEROAD11}} | SCR_Tutorial_Driving_DRIVEROAD11Class = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/DrivingSimple/SCR_Tutorial_Driving_DRIVEROAD11.c;1|SCR_Tutorial_Driving_DRIVEROAD11Class}} | SCR_Tutorial_Driving_DRIVEROAD2 = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/DrivingSimple/SCR_Tutorial_Driving_DRIVEROAD2.c;7|SCR_Tutorial_Driving_DRIVEROAD2}} | SCR_Tutorial_Driving_DRIVEROAD2Class = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/DrivingSimple/SCR_Tutorial_Driving_DRIVEROAD2.c;1|SCR_Tutorial_Driving_DRIVEROAD2Class}} | SCR_Tutorial_Driving_DRIVEROAD3 = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/DrivingSimple/SCR_Tutorial_Driving_DRIVEROAD3.c;7|SCR_Tutorial_Driving_DRIVEROAD3}} | SCR_Tutorial_Driving_DRIVEROAD3Class = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/DrivingSimple/SCR_Tutorial_Driving_DRIVEROAD3.c;1|SCR_Tutorial_Driving_DRIVEROAD3Class}} | SCR_Tutorial_Driving_DRIVEROAD4 = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/DrivingSimple/SCR_Tutorial_Driving_DRIVEROAD4.c;7|SCR_Tutorial_Driving_DRIVEROAD4}} | SCR_Tutorial_Driving_DRIVEROAD4Class = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/DrivingSimple/SCR_Tutorial_Driving_DRIVEROAD4.c;1|SCR_Tutorial_Driving_DRIVEROAD4Class}} | SCR_Tutorial_Driving_DRIVEROAD5 = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/DrivingSimple/SCR_Tutorial_Driving_DRIVEROAD5.c;7|SCR_Tutorial_Driving_DRIVEROAD5}} | SCR_Tutorial_Driving_DRIVEROAD5Class = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/DrivingSimple/SCR_Tutorial_Driving_DRIVEROAD5.c;1|SCR_Tutorial_Driving_DRIVEROAD5Class}} | SCR_Tutorial_Driving_DRIVEROAD6 = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/DrivingSimple/SCR_Tutorial_Driving_DRIVEROAD6.c;7|SCR_Tutorial_Driving_DRIVEROAD6}} | SCR_Tutorial_Driving_DRIVEROAD6Class = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/DrivingSimple/SCR_Tutorial_Driving_DRIVEROAD6.c;1|SCR_Tutorial_Driving_DRIVEROAD6Class}} | SCR_Tutorial_Driving_DRIVEROAD7 = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/DrivingSimple/SCR_Tutorial_Driving_DRIVEROAD7.c;7|SCR_Tutorial_Driving_DRIVEROAD7}} | SCR_Tutorial_Driving_DRIVEROAD7Class = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/DrivingSimple/SCR_Tutorial_Driving_DRIVEROAD7.c;1|SCR_Tutorial_Driving_DRIVEROAD7Class}} | SCR_Tutorial_Driving_DRIVEROAD8 = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/DrivingSimple/SCR_Tutorial_Driving_DRIVEROAD8.c;7|SCR_Tutorial_Driving_DRIVEROAD8}} | SCR_Tutorial_Driving_DRIVEROAD8Class = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/DrivingSimple/SCR_Tutorial_Driving_DRIVEROAD8.c;1|SCR_Tutorial_Driving_DRIVEROAD8Class}} | SCR_Tutorial_Driving_DRIVEROAD9 = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/DrivingSimple/SCR_Tutorial_Driving_DRIVEROAD9.c;7|SCR_Tutorial_Driving_DRIVEROAD9}} | SCR_Tutorial_Driving_DRIVEROAD9Class = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/DrivingSimple/SCR_Tutorial_Driving_DRIVEROAD9.c;1|SCR_Tutorial_Driving_DRIVEROAD9Class}} | SCR_Tutorial_Driving_DRIVEROADClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/DrivingSimple/SCR_Tutorial_Driving_DRIVEROAD.c;1|SCR_Tutorial_Driving_DRIVEROADClass}} | SCR_Tutorial_Driving_END = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/DrivingSimple/SCR_Tutorial_Driving_END.c;7|SCR_Tutorial_Driving_END}} | SCR_Tutorial_Driving_ENDClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/DrivingSimple/SCR_Tutorial_Driving_END.c;1|SCR_Tutorial_Driving_ENDClass}} | SCR_Tutorial_Driving_GETIN = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/DrivingSimple/SCR_Tutorial_Driving_GETIN.c;7|SCR_Tutorial_Driving_GETIN}} | SCR_Tutorial_Driving_GETINClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/DrivingSimple/SCR_Tutorial_Driving_GETIN.c;1|SCR_Tutorial_Driving_GETINClass}} | SCR_Tutorial_Driving_GETOUT = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/DrivingSimple/SCR_Tutorial_Driving_GETOUT.c;7|SCR_Tutorial_Driving_GETOUT}} | SCR_Tutorial_Driving_GETOUTClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/DrivingSimple/SCR_Tutorial_Driving_GETOUT.c;1|SCR_Tutorial_Driving_GETOUTClass}} | SCR_Tutorial_Driving_START = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/DrivingSimple/SCR_Tutorial_Driving_START.c;7|SCR_Tutorial_Driving_START}} | SCR_Tutorial_Driving_STARTClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/DrivingSimple/SCR_Tutorial_Driving_START.c;1|SCR_Tutorial_Driving_STARTClass}} | SCR_Tutorial_Driving_STARTENGINE = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/DrivingSimple/SCR_Tutorial_Driving_STARTENGINE.c;7|SCR_Tutorial_Driving_STARTENGINE}} | SCR_Tutorial_Driving_STARTENGINEClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/DrivingSimple/SCR_Tutorial_Driving_STARTENGINE.c;1|SCR_Tutorial_Driving_STARTENGINEClass}} | SCR_Tutorial_Heli_AUTOHOVER_OFF = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_Tutorial_Heli_AUTOHOVER_OFF.c;7|SCR_Tutorial_Heli_AUTOHOVER_OFF}} | SCR_Tutorial_Heli_AUTOHOVER_OFFClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_Tutorial_Heli_AUTOHOVER_OFF.c;1|SCR_Tutorial_Heli_AUTOHOVER_OFFClass}} | SCR_Tutorial_Heli_AUTOHOVER_ON = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_Tutorial_Heli_AUTOHOVER_ON.c;7|SCR_Tutorial_Heli_AUTOHOVER_ON}} | SCR_Tutorial_Heli_AUTOHOVER_ONClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_Tutorial_Heli_AUTOHOVER_ON.c;1|SCR_Tutorial_Heli_AUTOHOVER_ONClass}} | SCR_Tutorial_Heli_COLLECTIVE_RAISE = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_Tutorial_Heli_COLLECTIVE_RAISE.c;7|SCR_Tutorial_Heli_COLLECTIVE_RAISE}} | SCR_Tutorial_Heli_COLLECTIVE_RAISEClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_Tutorial_Heli_COLLECTIVE_RAISE.c;1|SCR_Tutorial_Heli_COLLECTIVE_RAISEClass}} | SCR_Tutorial_Heli_CYCLIC_ANTITORQUE_LEFT = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_Tutorial_Heli_CYCLIC_ANTITORQUE_LEFT.c;7|SCR_Tutorial_Heli_CYCLIC_ANTITORQUE_LEFT}} | SCR_Tutorial_Heli_CYCLIC_ANTITORQUE_LEFTClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_Tutorial_Heli_CYCLIC_ANTITORQUE_LEFT.c;1|SCR_Tutorial_Heli_CYCLIC_ANTITORQUE_LEFTClass}} | SCR_Tutorial_Heli_CYCLIC_ANTITORQUE_RIGHT = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_Tutorial_Heli_CYCLIC_ANTITORQUE_RIGHT.c;7|SCR_Tutorial_Heli_CYCLIC_ANTITORQUE_RIGHT}} | SCR_Tutorial_Heli_CYCLIC_ANTITORQUE_RIGHTClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_Tutorial_Heli_CYCLIC_ANTITORQUE_RIGHT.c;1|SCR_Tutorial_Heli_CYCLIC_ANTITORQUE_RIGHTClass}} | SCR_Tutorial_Heli_CYCLIC_BACKWARD = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_Tutorial_Heli_CYCLIC_BACKWARD.c;7|SCR_Tutorial_Heli_CYCLIC_BACKWARD}} | SCR_Tutorial_Heli_CYCLIC_BACKWARDClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_Tutorial_Heli_CYCLIC_BACKWARD.c;1|SCR_Tutorial_Heli_CYCLIC_BACKWARDClass}} | SCR_Tutorial_Heli_CYCLIC_FORWARD = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_Tutorial_Heli_CYCLIC_FORWARD.c;7|SCR_Tutorial_Heli_CYCLIC_FORWARD}} | SCR_Tutorial_Heli_CYCLIC_FORWARDClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_Tutorial_Heli_CYCLIC_FORWARD.c;1|SCR_Tutorial_Heli_CYCLIC_FORWARDClass}} | SCR_Tutorial_Heli_CYCLIC_LEFT = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_Tutorial_Heli_CYCLIC_LEFT.c;7|SCR_Tutorial_Heli_CYCLIC_LEFT}} | SCR_Tutorial_Heli_CYCLIC_LEFTClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_Tutorial_Heli_CYCLIC_LEFT.c;1|SCR_Tutorial_Heli_CYCLIC_LEFTClass}} | SCR_Tutorial_Heli_CYCLIC_RIGHT = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_Tutorial_Heli_CYCLIC_RIGHT.c;7|SCR_Tutorial_Heli_CYCLIC_RIGHT}} | SCR_Tutorial_Heli_CYCLIC_RIGHTClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_Tutorial_Heli_CYCLIC_RIGHT.c;1|SCR_Tutorial_Heli_CYCLIC_RIGHTClass}} | SCR_Tutorial_Heli_DANGER_ALTITUDE = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_Tutorial_Heli_DANGER_ALTITUDE.c;7|SCR_Tutorial_Heli_DANGER_ALTITUDE}} | SCR_Tutorial_Heli_DANGER_ALTITUDEClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_Tutorial_Heli_DANGER_ALTITUDE.c;1|SCR_Tutorial_Heli_DANGER_ALTITUDEClass}} | SCR_Tutorial_Heli_DANGER_ANGLE = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_Tutorial_Heli_DANGER_ANGLE.c;7|SCR_Tutorial_Heli_DANGER_ANGLE}} | SCR_Tutorial_Heli_DANGER_ANGLEClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_Tutorial_Heli_DANGER_ANGLE.c;1|SCR_Tutorial_Heli_DANGER_ANGLEClass}} | SCR_Tutorial_Heli_END = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_Tutorial_Heli_END.c;7|SCR_Tutorial_Heli_END}} | SCR_Tutorial_Heli_ENDClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_Tutorial_Heli_END.c;1|SCR_Tutorial_Heli_ENDClass}} | SCR_Tutorial_Heli_FLIGHT_01 = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_Tutorial_Heli_FLIGHT_01.c;7|SCR_Tutorial_Heli_FLIGHT_01}} | SCR_Tutorial_Heli_FLIGHT_01Class = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_Tutorial_Heli_FLIGHT_01.c;1|SCR_Tutorial_Heli_FLIGHT_01Class}} | SCR_Tutorial_Heli_FLIGHT_02 = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_Tutorial_Heli_FLIGHT_02.c;7|SCR_Tutorial_Heli_FLIGHT_02}} | SCR_Tutorial_Heli_FLIGHT_02Class = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_Tutorial_Heli_FLIGHT_02.c;1|SCR_Tutorial_Heli_FLIGHT_02Class}} | SCR_Tutorial_Heli_FLIGHT_03 = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_Tutorial_Heli_FLIGHT_03.c;7|SCR_Tutorial_Heli_FLIGHT_03}} | SCR_Tutorial_Heli_FLIGHT_03Class = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_Tutorial_Heli_FLIGHT_03.c;1|SCR_Tutorial_Heli_FLIGHT_03Class}} | SCR_Tutorial_Heli_GETIN = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_Tutorial_Heli_GETIN.c;7|SCR_Tutorial_Heli_GETIN}} | SCR_Tutorial_Heli_GETINClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_Tutorial_Heli_GETIN.c;1|SCR_Tutorial_Heli_GETINClass}} | SCR_Tutorial_Heli_GETOUT = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_Tutorial_Heli_GETOUT.c;7|SCR_Tutorial_Heli_GETOUT}} | SCR_Tutorial_Heli_GETOUTClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_Tutorial_Heli_GETOUT.c;1|SCR_Tutorial_Heli_GETOUTClass}} | SCR_Tutorial_Heli_LANDING = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_Tutorial_Heli_LANDING.c;7|SCR_Tutorial_Heli_LANDING}} | SCR_Tutorial_Heli_LANDINGClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_Tutorial_Heli_LANDING.c;1|SCR_Tutorial_Heli_LANDINGClass}} | SCR_Tutorial_Heli_RPM_WAIT = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_Tutorial_Heli_RPM_WAIT.c;7|SCR_Tutorial_Heli_RPM_WAIT}} | SCR_Tutorial_Heli_RPM_WAITClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_Tutorial_Heli_RPM_WAIT.c;1|SCR_Tutorial_Heli_RPM_WAITClass}} | SCR_Tutorial_Heli_START = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_Tutorial_Heli_START.c;7|SCR_Tutorial_Heli_START}} | SCR_Tutorial_Heli_START_ENGINE = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_Tutorial_Heli_START_ENGINE.c;7|SCR_Tutorial_Heli_START_ENGINE}} | SCR_Tutorial_Heli_START_ENGINEClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_Tutorial_Heli_START_ENGINE.c;1|SCR_Tutorial_Heli_START_ENGINEClass}} | SCR_Tutorial_Heli_STARTClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_Tutorial_Heli_START.c;1|SCR_Tutorial_Heli_STARTClass}} | SCR_Tutorial_Heli_STOP_ENGINE = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_Tutorial_Heli_STOP_ENGINE.c;7|SCR_Tutorial_Heli_STOP_ENGINE}} | SCR_Tutorial_Heli_STOP_ENGINEClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_Tutorial_Heli_STOP_ENGINE.c;1|SCR_Tutorial_Heli_STOP_ENGINEClass}} | SCR_Tutorial_Intro_GearUp = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/INTRO/SCR_Tutorial_Intro_GearUp.c;7|SCR_Tutorial_Intro_GearUp}} | SCR_Tutorial_Intro_GearUpClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/INTRO/SCR_Tutorial_Intro_GearUp.c;1|SCR_Tutorial_Intro_GearUpClass}} | SCR_Tutorial_Intro_ListenToCaptain = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/INTRO/SCR_Tutorial_Intro_ListenToCaptain.c;7|SCR_Tutorial_Intro_ListenToCaptain}} | SCR_Tutorial_Intro_ListenToCaptainClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/INTRO/SCR_Tutorial_Intro_ListenToCaptain.c;1|SCR_Tutorial_Intro_ListenToCaptainClass}} | SCR_Tutorial_Intro_Move = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/INTRO/SCR_Tutorial_Intro_Move.c;7|SCR_Tutorial_Intro_Move}} | SCR_Tutorial_Intro_MoveClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/INTRO/SCR_Tutorial_Intro_Move.c;1|SCR_Tutorial_Intro_MoveClass}} | SCR_Tutorial_Intro_WakeUp = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/INTRO/SCR_Tutorial_Intro_WakeUp.c;7|SCR_Tutorial_Intro_WakeUp}} | SCR_Tutorial_Intro_WakeUpClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/INTRO/SCR_Tutorial_Intro_WakeUp.c;1|SCR_Tutorial_Intro_WakeUpClass}} | SCR_Tutorial_LRS_ADS = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingLongRange/SCR_Tutorial_LRS_ADS.c;6|SCR_Tutorial_LRS_ADS}} | SCR_Tutorial_LRS_ADSClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingLongRange/SCR_Tutorial_LRS_ADS.c;1|SCR_Tutorial_LRS_ADSClass}} | SCR_Tutorial_LRS_Attach_Optic = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingLongRange/SCR_Tutorial_LRS_Attach_Optic.c;7|SCR_Tutorial_LRS_Attach_Optic}} | SCR_Tutorial_LRS_Attach_OpticClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingLongRange/SCR_Tutorial_LRS_Attach_Optic.c;1|SCR_Tutorial_LRS_Attach_OpticClass}} | SCR_Tutorial_LRS_Prone = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingLongRange/SCR_Tutorial_LRS_Prone.c;6|SCR_Tutorial_LRS_Prone}} | SCR_Tutorial_LRS_ProneClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingLongRange/SCR_Tutorial_LRS_Prone.c;1|SCR_Tutorial_LRS_ProneClass}} | SCR_Tutorial_LRS_Take_Weapon = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingLongRange/SCR_Tutorial_LRS_Take_Weapon.c;7|SCR_Tutorial_LRS_Take_Weapon}} | SCR_Tutorial_LRS_Take_WeaponClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingLongRange/SCR_Tutorial_LRS_Take_Weapon.c;1|SCR_Tutorial_LRS_Take_WeaponClass}} | SCR_Tutorial_LRS_Targets_Beach = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingLongRange/SCR_Tutorial_LRS_Targets_Beach.c;7|SCR_Tutorial_LRS_Targets_Beach}} | SCR_Tutorial_LRS_Targets_BeachClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingLongRange/SCR_Tutorial_LRS_Targets_Beach.c;1|SCR_Tutorial_LRS_Targets_BeachClass}} | SCR_Tutorial_LRS_Targets_Cliff = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingLongRange/SCR_Tutorial_LRS_Targets_Cliff.c;7|SCR_Tutorial_LRS_Targets_Cliff}} | SCR_Tutorial_LRS_Targets_CliffClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingLongRange/SCR_Tutorial_LRS_Targets_Cliff.c;1|SCR_Tutorial_LRS_Targets_CliffClass}} | SCR_Tutorial_LRS_Targets_Last = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingLongRange/SCR_Tutorial_LRS_Targets_Last.c;7|SCR_Tutorial_LRS_Targets_Last}} | SCR_Tutorial_LRS_Targets_LastClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingLongRange/SCR_Tutorial_LRS_Targets_Last.c;1|SCR_Tutorial_LRS_Targets_LastClass}} | SCR_Tutorial_Navigation_AIRBASE = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Navigation/SCR_Tutorial_Navigation_AIRBASE.c;7|SCR_Tutorial_Navigation_AIRBASE}} | SCR_Tutorial_Navigation_AIRBASEClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Navigation/SCR_Tutorial_Navigation_AIRBASE.c;1|SCR_Tutorial_Navigation_AIRBASEClass}} | SCR_Tutorial_Navigation_CLOSEMAP = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Navigation/SCR_Tutorial_Navigation_CLOSEMAP.c;7|SCR_Tutorial_Navigation_CLOSEMAP}} | SCR_Tutorial_Navigation_CLOSEMAPClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Navigation/SCR_Tutorial_Navigation_CLOSEMAP.c;1|SCR_Tutorial_Navigation_CLOSEMAPClass}} | SCR_Tutorial_Navigation_COMPASS = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Navigation/SCR_Tutorial_Navigation_COMPASS.c;7|SCR_Tutorial_Navigation_COMPASS}} | SCR_Tutorial_Navigation_COMPASSClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Navigation/SCR_Tutorial_Navigation_COMPASS.c;1|SCR_Tutorial_Navigation_COMPASSClass}} | SCR_Tutorial_Navigation_DRIVE = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Navigation/SCR_Tutorial_Navigation_DRIVE.c;7|SCR_Tutorial_Navigation_DRIVE}} | SCR_Tutorial_Navigation_DRIVEClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Navigation/SCR_Tutorial_Navigation_DRIVE.c;1|SCR_Tutorial_Navigation_DRIVEClass}} | SCR_Tutorial_Navigation_END = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Navigation/SCR_Tutorial_Navigation_END.c;7|SCR_Tutorial_Navigation_END}} | SCR_Tutorial_Navigation_ENDClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Navigation/SCR_Tutorial_Navigation_END.c;1|SCR_Tutorial_Navigation_ENDClass}} | SCR_Tutorial_Navigation_ISLAND = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Navigation/SCR_Tutorial_Navigation_ISLAND.c;7|SCR_Tutorial_Navigation_ISLAND}} | SCR_Tutorial_Navigation_ISLANDClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Navigation/SCR_Tutorial_Navigation_ISLAND.c;1|SCR_Tutorial_Navigation_ISLANDClass}} | SCR_Tutorial_Navigation_LIGHTHOUSE = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Navigation/SCR_Tutorial_Navigation_LIGHTHOUSE.c;7|SCR_Tutorial_Navigation_LIGHTHOUSE}} | SCR_Tutorial_Navigation_LIGHTHOUSEClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Navigation/SCR_Tutorial_Navigation_LIGHTHOUSE.c;1|SCR_Tutorial_Navigation_LIGHTHOUSEClass}} | SCR_Tutorial_Navigation_LOCATION = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Navigation/SCR_Tutorial_Navigation_LOCATION.c;7|SCR_Tutorial_Navigation_LOCATION}} | SCR_Tutorial_Navigation_LOCATIONClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Navigation/SCR_Tutorial_Navigation_LOCATION.c;1|SCR_Tutorial_Navigation_LOCATIONClass}} | SCR_Tutorial_Navigation_MAP_COMPASS_INTRODUCTION = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Navigation/SCR_Tutorial_Navigation_MAP_COMPASS_INTRODUCTION.c;7|SCR_Tutorial_Navigation_MAP_COMPASS_INTRODUCTION}} | SCR_Tutorial_Navigation_MAP_COMPASS_INTRODUCTIONClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Navigation/SCR_Tutorial_Navigation_MAP_COMPASS_INTRODUCTION.c;1|SCR_Tutorial_Navigation_MAP_COMPASS_INTRODUCTIONClass}} | SCR_Tutorial_Navigation_MAP_COMPASS_SELECT = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Navigation/SCR_Tutorial_Navigation_MAP_COMPASS_SELECT.c;7|SCR_Tutorial_Navigation_MAP_COMPASS_SELECT}} | SCR_Tutorial_Navigation_MAP_COMPASS_SELECTClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Navigation/SCR_Tutorial_Navigation_MAP_COMPASS_SELECT.c;1|SCR_Tutorial_Navigation_MAP_COMPASS_SELECTClass}} | SCR_Tutorial_Navigation_MAP_INTROCTUCTION = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Navigation/SCR_Tutorial_Navigation_MAP_INTROCTUCTION.c;7|SCR_Tutorial_Navigation_MAP_INTROCTUCTION}} | SCR_Tutorial_Navigation_MAP_INTROCTUCTIONClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Navigation/SCR_Tutorial_Navigation_MAP_INTROCTUCTION.c;1|SCR_Tutorial_Navigation_MAP_INTROCTUCTIONClass}} | SCR_Tutorial_Navigation_MAPOPEN = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Navigation/SCR_Tutorial_Navigation_MAPOPEN.c;7|SCR_Tutorial_Navigation_MAPOPEN}} | SCR_Tutorial_Navigation_MAPOPENAGAIN = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Navigation/SCR_Tutorial_Navigation_MAPOPENAGAIN.c;7|SCR_Tutorial_Navigation_MAPOPENAGAIN}} | SCR_Tutorial_Navigation_MAPOPENAGAINClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Navigation/SCR_Tutorial_Navigation_MAPOPENAGAIN.c;1|SCR_Tutorial_Navigation_MAPOPENAGAINClass}} | SCR_Tutorial_Navigation_MAPOPENClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Navigation/SCR_Tutorial_Navigation_MAPOPEN.c;1|SCR_Tutorial_Navigation_MAPOPENClass}} | SCR_Tutorial_Navigation_MAPTOOLS = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Navigation/SCR_Tutorial_Navigation_MAPTOOLS.c;7|SCR_Tutorial_Navigation_MAPTOOLS}} | SCR_Tutorial_Navigation_MAPTOOLSClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Navigation/SCR_Tutorial_Navigation_MAPTOOLS.c;1|SCR_Tutorial_Navigation_MAPTOOLSClass}} | SCR_Tutorial_Navigation_MOVE = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Navigation/SCR_Tutorial_Navigation_MOVE.c;7|SCR_Tutorial_Navigation_MOVE}} | SCR_Tutorial_Navigation_MOVEClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Navigation/SCR_Tutorial_Navigation_MOVE.c;1|SCR_Tutorial_Navigation_MOVEClass}} | SCR_Tutorial_Navigation_NORTH = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Navigation/SCR_Tutorial_Navigation_NORTH.c;7|SCR_Tutorial_Navigation_NORTH}} | SCR_Tutorial_Navigation_NORTHClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Navigation/SCR_Tutorial_Navigation_NORTH.c;1|SCR_Tutorial_Navigation_NORTHClass}} | SCR_Tutorial_Navigation_PROTRACTOR = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Navigation/SCR_Tutorial_Navigation_PROTRACTOR.c;7|SCR_Tutorial_Navigation_PROTRACTOR}} | SCR_Tutorial_Navigation_PROTRACTORClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Navigation/SCR_Tutorial_Navigation_PROTRACTOR.c;1|SCR_Tutorial_Navigation_PROTRACTORClass}} | SCR_Tutorial_Navigation_START = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Navigation/SCR_Tutorial_Navigation_START.c;7|SCR_Tutorial_Navigation_START}} | SCR_Tutorial_Navigation_STARTClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Navigation/SCR_Tutorial_Navigation_START.c;1|SCR_Tutorial_Navigation_STARTClass}} | SCR_Tutorial_Navigation_VEHICLE = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Navigation/SCR_Tutorial_Navigation_VEHICLE.c;7|SCR_Tutorial_Navigation_VEHICLE}} | SCR_Tutorial_Navigation_VEHICLEClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Navigation/SCR_Tutorial_Navigation_VEHICLE.c;1|SCR_Tutorial_Navigation_VEHICLEClass}} | SCR_Tutorial_Obstacle_COUNTDOWN = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Movement/SCR_Tutorial_Obstace_COUNTDOWN.c;7|SCR_Tutorial_Obstacle_COUNTDOWN}} | SCR_Tutorial_Obstacle_COUNTDOWNClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Movement/SCR_Tutorial_Obstace_COUNTDOWN.c;1|SCR_Tutorial_Obstacle_COUNTDOWNClass}} | SCR_Tutorial_Obstacle_CRAWL = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Movement/SCR_Tutorial_Obstace_CRAWL.c;7|SCR_Tutorial_Obstacle_CRAWL}} | SCR_Tutorial_Obstacle_CRAWLClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Movement/SCR_Tutorial_Obstace_CRAWL.c;1|SCR_Tutorial_Obstacle_CRAWLClass}} | SCR_Tutorial_Obstacle_END = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Movement/SCR_Tutorial_Obstace_END.c;7|SCR_Tutorial_Obstacle_END}} | SCR_Tutorial_Obstacle_ENDClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Movement/SCR_Tutorial_Obstace_END.c;1|SCR_Tutorial_Obstacle_ENDClass}} | SCR_Tutorial_Obstacle_FLAG = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Movement/SCR_Tutorial_Obstace_FLAG.c;7|SCR_Tutorial_Obstacle_FLAG}} | SCR_Tutorial_Obstacle_FLAGClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Movement/SCR_Tutorial_Obstace_FLAG.c;1|SCR_Tutorial_Obstacle_FLAGClass}} | SCR_Tutorial_Obstacle_LADDERDOWN = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Movement/SCR_Tutorial_Obstace_LADDERDOWN.c;7|SCR_Tutorial_Obstacle_LADDERDOWN}} | SCR_Tutorial_Obstacle_LADDERDOWNClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Movement/SCR_Tutorial_Obstace_LADDERDOWN.c;1|SCR_Tutorial_Obstacle_LADDERDOWNClass}} | SCR_Tutorial_Obstacle_LADDEROFF = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Movement/SCR_Tutorial_Obstace_LADDEROFF.c;7|SCR_Tutorial_Obstacle_LADDEROFF}} | SCR_Tutorial_Obstacle_LADDEROFFClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Movement/SCR_Tutorial_Obstace_LADDEROFF.c;1|SCR_Tutorial_Obstacle_LADDEROFFClass}} | SCR_Tutorial_Obstacle_LADDERUP = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Movement/SCR_Tutorial_Obstace_LADDERUP.c;7|SCR_Tutorial_Obstacle_LADDERUP}} | SCR_Tutorial_Obstacle_LADDERUPClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Movement/SCR_Tutorial_Obstace_LADDERUP.c;1|SCR_Tutorial_Obstacle_LADDERUPClass}} | SCR_Tutorial_Obstacle_OVERPASS = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Movement/SCR_Tutorial_Obstace_OVERPASS.c;7|SCR_Tutorial_Obstacle_OVERPASS}} | SCR_Tutorial_Obstacle_OVERPASSClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Movement/SCR_Tutorial_Obstace_OVERPASS.c;1|SCR_Tutorial_Obstacle_OVERPASSClass}} | SCR_Tutorial_Obstacle_PLATFORM = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Movement/SCR_Tutorial_Obstace_PLATFORM.c;7|SCR_Tutorial_Obstacle_PLATFORM}} | SCR_Tutorial_Obstacle_PLATFORMClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Movement/SCR_Tutorial_Obstace_PLATFORM.c;1|SCR_Tutorial_Obstacle_PLATFORMClass}} | SCR_Tutorial_Obstacle_START = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Movement/SCR_Tutorial_Obstace_START.c;7|SCR_Tutorial_Obstacle_START}} | SCR_Tutorial_Obstacle_STARTClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Movement/SCR_Tutorial_Obstace_START.c;1|SCR_Tutorial_Obstacle_STARTClass}} | SCR_Tutorial_Obstacle_TIME = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Movement/SCR_Tutorial_Obstace_TIME.c;7|SCR_Tutorial_Obstacle_TIME}} | SCR_Tutorial_Obstacle_TIMEClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Movement/SCR_Tutorial_Obstace_TIME.c;1|SCR_Tutorial_Obstacle_TIMEClass}} | SCR_Tutorial_Obstacle_VAULTHIGH = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Movement/SCR_Tutorial_Obstace_VAULTHIGH.c;7|SCR_Tutorial_Obstacle_VAULTHIGH}} | SCR_Tutorial_Obstacle_VAULTHIGHClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Movement/SCR_Tutorial_Obstace_VAULTHIGH.c;1|SCR_Tutorial_Obstacle_VAULTHIGHClass}} | SCR_Tutorial_Obstacle_VAULTLOW = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Movement/SCR_Tutorial_Obstace_VAULTLOW.c;7|SCR_Tutorial_Obstacle_VAULTLOW}} | SCR_Tutorial_Obstacle_VAULTLOWClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Movement/SCR_Tutorial_Obstace_VAULTLOW.c;1|SCR_Tutorial_Obstacle_VAULTLOWClass}} | SCR_Tutorial_Obstacle_WALLONE = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Movement/SCR_Tutorial_Obstace_WALLONE.c;7|SCR_Tutorial_Obstacle_WALLONE}} | SCR_Tutorial_Obstacle_WALLONEClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Movement/SCR_Tutorial_Obstace_WALLONE.c;1|SCR_Tutorial_Obstacle_WALLONEClass}} | SCR_Tutorial_Obstacle_WALLTWO = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Movement/SCR_Tutorial_Obstace_WALLTWO.c;7|SCR_Tutorial_Obstacle_WALLTWO}} | SCR_Tutorial_Obstacle_WALLTWOClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Movement/SCR_Tutorial_Obstace_WALLTWO.c;1|SCR_Tutorial_Obstacle_WALLTWOClass}} | SCR_Tutorial_Obstacle_WINDOW = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Movement/SCR_Tutorial_Obstace_WINDOW.c;7|SCR_Tutorial_Obstacle_WINDOW}} | SCR_Tutorial_Obstacle_WINDOWClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Movement/SCR_Tutorial_Obstace_WINDOW.c;1|SCR_Tutorial_Obstacle_WINDOWClass}} | SCR_Tutorial_Obstacle_ZIGZAG = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Movement/SCR_Tutorial_Obstace_ZIGZAG.c;7|SCR_Tutorial_Obstacle_ZIGZAG}} | SCR_Tutorial_Obstacle_ZIGZAGClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Movement/SCR_Tutorial_Obstace_ZIGZAG.c;1|SCR_Tutorial_Obstacle_ZIGZAGClass}} | SCR_Tutorial_Obstacle_ZIGZAGEND = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Movement/SCR_Tutorial_Obstace_ZIGZAGEND.c;7|SCR_Tutorial_Obstacle_ZIGZAGEND}} | SCR_Tutorial_Obstacle_ZIGZAGENDClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Movement/SCR_Tutorial_Obstace_ZIGZAGEND.c;1|SCR_Tutorial_Obstacle_ZIGZAGENDClass}} | SCR_Tutorial_Obstacle_ZIGZAGSTART = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Movement/SCR_Tutorial_Obstace_ZIGZAGSTART.c;7|SCR_Tutorial_Obstacle_ZIGZAGSTART}} | SCR_Tutorial_Obstacle_ZIGZAGSTARTClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Movement/SCR_Tutorial_Obstace_ZIGZAGSTART.c;1|SCR_Tutorial_Obstacle_ZIGZAGSTARTClass}} | SCR_Tutorial_Outro_Return = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/OUTRO/SCR_Tutorial_Outro_Return.c;7|SCR_Tutorial_Outro_Return}} | SCR_Tutorial_Outro_ReturnClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/OUTRO/SCR_Tutorial_Outro_Return.c;1|SCR_Tutorial_Outro_ReturnClass}} | SCR_Tutorial_Seizing_CaptureBase = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Conflict/SCR_Tutorial_Seizing_CaptureBase.c;7|SCR_Tutorial_Seizing_CaptureBase}} | SCR_Tutorial_Seizing_CaptureBaseClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Conflict/SCR_Tutorial_Seizing_CaptureBase.c;1|SCR_Tutorial_Seizing_CaptureBaseClass}} | SCR_Tutorial_Seizing_Construct_Antenna = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Conflict/SCR_Tutorial_Seizing_Construct_Antenna.c;7|SCR_Tutorial_Seizing_Construct_Antenna}} | SCR_Tutorial_Seizing_Construct_AntennaClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Conflict/SCR_Tutorial_Seizing_Construct_Antenna.c;1|SCR_Tutorial_Seizing_Construct_AntennaClass}} | SCR_Tutorial_Seizing_DisassembleBunker = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Conflict/SCR_Tutorial_Seizing_DisassembleBunker.c;7|SCR_Tutorial_Seizing_DisassembleBunker}} | SCR_Tutorial_Seizing_DisassembleBunkerClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Conflict/SCR_Tutorial_Seizing_DisassembleBunker.c;1|SCR_Tutorial_Seizing_DisassembleBunkerClass}} | SCR_Tutorial_Seizing_ENABLE_RADIO = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Conflict/SCR_Tutorial_Seizing_ENABLE_RADIO.c;7|SCR_Tutorial_Seizing_ENABLE_RADIO}} | SCR_Tutorial_Seizing_ENABLE_RADIOClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Conflict/SCR_Tutorial_Seizing_ENABLE_RADIO.c;1|SCR_Tutorial_Seizing_ENABLE_RADIOClass}} | SCR_Tutorial_Seizing_END = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Conflict/SCR_Tutorial_Seizing_END.c;7|SCR_Tutorial_Seizing_END}} | SCR_Tutorial_Seizing_ENDClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Conflict/SCR_Tutorial_Seizing_END.c;1|SCR_Tutorial_Seizing_ENDClass}} | SCR_Tutorial_Seizing_Enter_Building = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Conflict/SCR_Tutorial_Seizing_Enter_Building.c;6|SCR_Tutorial_Seizing_Enter_Building}} | SCR_Tutorial_Seizing_Enter_BuildingClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Conflict/SCR_Tutorial_Seizing_Enter_Building.c;1|SCR_Tutorial_Seizing_Enter_BuildingClass}} | SCR_Tutorial_Seizing_Equip_EntrenchingTool = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Conflict/SCR_Tutorial_Seizing_Equip_EntrenchingTool.c;7|SCR_Tutorial_Seizing_Equip_EntrenchingTool}} | SCR_Tutorial_Seizing_Equip_EntrenchingToolClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Conflict/SCR_Tutorial_Seizing_Equip_EntrenchingTool.c;1|SCR_Tutorial_Seizing_Equip_EntrenchingToolClass}} | SCR_Tutorial_Seizing_Exit_Building = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Conflict/SCR_Tutorial_Seizing_Exit_Building.c;6|SCR_Tutorial_Seizing_Exit_Building}} | SCR_Tutorial_Seizing_Exit_BuildingClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Conflict/SCR_Tutorial_Seizing_Exit_Building.c;1|SCR_Tutorial_Seizing_Exit_BuildingClass}} | SCR_Tutorial_Seizing_MhqDeploy = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Conflict/SCR_Tutorial_Seizing_MhqDeploy.c;7|SCR_Tutorial_Seizing_MhqDeploy}} | SCR_Tutorial_Seizing_MhqDeployClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Conflict/SCR_Tutorial_Seizing_MhqDeploy.c;1|SCR_Tutorial_Seizing_MhqDeployClass}} | SCR_Tutorial_Seizing_Move = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Conflict/SCR_Tutorial_Seizing_Move.c;7|SCR_Tutorial_Seizing_Move}} | SCR_Tutorial_Seizing_MoveClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Conflict/SCR_Tutorial_Seizing_Move.c;1|SCR_Tutorial_Seizing_MoveClass}} | SCR_Tutorial_Seizing_Place_Antenna = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Conflict/SCR_Tutorial_Seizing_Place_Antenna.c;6|SCR_Tutorial_Seizing_Place_Antenna}} | SCR_Tutorial_Seizing_Place_AntennaClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Conflict/SCR_Tutorial_Seizing_Place_Antenna.c;1|SCR_Tutorial_Seizing_Place_AntennaClass}} | SCR_Tutorial_Seizing_RECEIVE_TRANSMITTION = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Conflict/SCR_Tutorial_Seizing_RECEIVE_TRANSMITTION.c;7|SCR_Tutorial_Seizing_RECEIVE_TRANSMITTION}} | SCR_Tutorial_Seizing_RECEIVE_TRANSMITTIONClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Conflict/SCR_Tutorial_Seizing_RECEIVE_TRANSMITTION.c;1|SCR_Tutorial_Seizing_RECEIVE_TRANSMITTIONClass}} | SCR_Tutorial_Seizing_Select_Antenna = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Conflict/SCR_Tutorial_Seizing_Select_Antenna.c;6|SCR_Tutorial_Seizing_Select_Antenna}} | SCR_Tutorial_Seizing_Select_AntennaClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Conflict/SCR_Tutorial_Seizing_Select_Antenna.c;1|SCR_Tutorial_Seizing_Select_AntennaClass}} | SCR_Tutorial_Seizing_SET_FREQUENCY = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Conflict/SCR_Tutorial_Seizing_SET_FREQUENCY.c;7|SCR_Tutorial_Seizing_SET_FREQUENCY}} | SCR_Tutorial_Seizing_SET_FREQUENCYClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Conflict/SCR_Tutorial_Seizing_SET_FREQUENCY.c;1|SCR_Tutorial_Seizing_SET_FREQUENCYClass}} | SCR_Tutorial_Seizing_ShootTargets = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Conflict/SCR_Tutorial_Seizing_ShootTargets.c;7|SCR_Tutorial_Seizing_ShootTargets}} | SCR_Tutorial_Seizing_ShootTargetsClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Conflict/SCR_Tutorial_Seizing_ShootTargets.c;1|SCR_Tutorial_Seizing_ShootTargetsClass}} | SCR_Tutorial_Seizing_START = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Conflict/SCR_Tutorial_Seizing_START.c;7|SCR_Tutorial_Seizing_START}} | SCR_Tutorial_Seizing_STARTClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Conflict/SCR_Tutorial_Seizing_START.c;1|SCR_Tutorial_Seizing_STARTClass}} | SCR_Tutorial_Seizing_WEAPON = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Conflict/SCR_Tutorial_Seizing_WEAPON.c;7|SCR_Tutorial_Seizing_WEAPON}} | SCR_Tutorial_Seizing_WEAPONClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Conflict/SCR_Tutorial_Seizing_WEAPON.c;1|SCR_Tutorial_Seizing_WEAPONClass}} | SCR_Tutorial_ShootingRange_CLOSE_INVENTORY = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingRange/SCR_Tutorial_ShootingRange_CLOSE_INVENTORY.c;7|SCR_Tutorial_ShootingRange_CLOSE_INVENTORY}} | SCR_Tutorial_ShootingRange_CLOSE_INVENTORYClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingRange/SCR_Tutorial_ShootingRange_CLOSE_INVENTORY.c;1|SCR_Tutorial_ShootingRange_CLOSE_INVENTORYClass}} | SCR_Tutorial_ShootingRange_EQUIP_WEAPON = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingRange/SCR_Tutorial_ShootingRange_EQUIP_WEAPON.c;7|SCR_Tutorial_ShootingRange_EQUIP_WEAPON}} | SCR_Tutorial_ShootingRange_EQUIP_WEAPONClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingRange/SCR_Tutorial_ShootingRange_EQUIP_WEAPON.c;1|SCR_Tutorial_ShootingRange_EQUIP_WEAPONClass}} | SCR_Tutorial_ShootingRange_FIRINGPOS_ONE = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingRange/SCR_Tutorial_ShootingRange_FIRINGPOS_ONE.c;7|SCR_Tutorial_ShootingRange_FIRINGPOS_ONE}} | SCR_Tutorial_ShootingRange_FIRINGPOS_ONEClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingRange/SCR_Tutorial_ShootingRange_FIRINGPOS_ONE.c;1|SCR_Tutorial_ShootingRange_FIRINGPOS_ONEClass}} | SCR_Tutorial_ShootingRange_FIRINGPOS_TWO = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingRange/SCR_Tutorial_ShootingRange_FIRINGPOS_TWO.c;7|SCR_Tutorial_ShootingRange_FIRINGPOS_TWO}} | SCR_Tutorial_ShootingRange_FIRINGPOS_TWOClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingRange/SCR_Tutorial_ShootingRange_FIRINGPOS_TWO.c;1|SCR_Tutorial_ShootingRange_FIRINGPOS_TWOClass}} | SCR_Tutorial_ShootingRange_GETIN_STATIC = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingRange/SCR_Tutorial_ShootingRange_GETIN_STATIC.c;7|SCR_Tutorial_ShootingRange_GETIN_STATIC}} | SCR_Tutorial_ShootingRange_GETIN_STATICClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingRange/SCR_Tutorial_ShootingRange_GETIN_STATIC.c;1|SCR_Tutorial_ShootingRange_GETIN_STATICClass}} | SCR_Tutorial_ShootingRange_GETOUT_STATIC = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingRange/SCR_Tutorial_ShootingRange_GETOUT_STATIC.c;7|SCR_Tutorial_ShootingRange_GETOUT_STATIC}} | SCR_Tutorial_ShootingRange_GETOUT_STATICClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingRange/SCR_Tutorial_ShootingRange_GETOUT_STATIC.c;1|SCR_Tutorial_ShootingRange_GETOUT_STATICClass}} | SCR_Tutorial_ShootingRange_MG_PICK = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingRange/SCR_Tutorial_ShootingRange_MG_PICK.c;7|SCR_Tutorial_ShootingRange_MG_PICK}} | SCR_Tutorial_ShootingRange_MG_PICKClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingRange/SCR_Tutorial_ShootingRange_MG_PICK.c;1|SCR_Tutorial_ShootingRange_MG_PICKClass}} | SCR_Tutorial_ShootingRange_OPEN_BOX = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingRange/SCR_Tutorial_ShootingRange_OPEN_BOX.c;7|SCR_Tutorial_ShootingRange_OPEN_BOX}} | SCR_Tutorial_ShootingRange_OPEN_BOXClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingRange/SCR_Tutorial_ShootingRange_OPEN_BOX.c;1|SCR_Tutorial_ShootingRange_OPEN_BOXClass}} | SCR_Tutorial_ShootingRange_PICKUP_WEAPON = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingRange/SCR_Tutorial_ShootingRange_PICKUP_WEAPON.c;7|SCR_Tutorial_ShootingRange_PICKUP_WEAPON}} | SCR_Tutorial_ShootingRange_PICKUP_WEAPONClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingRange/SCR_Tutorial_ShootingRange_PICKUP_WEAPON.c;1|SCR_Tutorial_ShootingRange_PICKUP_WEAPONClass}} | SCR_Tutorial_ShootingRange_RELOAD = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingRange/SCR_Tutorial_ShootingRange_RELOAD.c;7|SCR_Tutorial_ShootingRange_RELOAD}} | SCR_Tutorial_ShootingRange_RELOADClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingRange/SCR_Tutorial_ShootingRange_RELOAD.c;1|SCR_Tutorial_ShootingRange_RELOADClass}} | SCR_Tutorial_ShootingRange_SHOOT = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingRange/SCR_Tutorial_ShootingRange_SHOOT.c;7|SCR_Tutorial_ShootingRange_SHOOT}} | SCR_Tutorial_ShootingRange_SHOOT_BIPOD = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingRange/SCR_Tutorial_ShootingRange_SHOOT_BIPOD.c;7|SCR_Tutorial_ShootingRange_SHOOT_BIPOD}} | SCR_Tutorial_ShootingRange_SHOOT_BIPODClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingRange/SCR_Tutorial_ShootingRange_SHOOT_BIPOD.c;1|SCR_Tutorial_ShootingRange_SHOOT_BIPODClass}} | SCR_Tutorial_ShootingRange_SHOOT_CROUCHED = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingRange/SCR_Tutorial_ShootingRange_SHOOT_CROUCHED.c;7|SCR_Tutorial_ShootingRange_SHOOT_CROUCHED}} | SCR_Tutorial_ShootingRange_SHOOT_CROUCHEDClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingRange/SCR_Tutorial_ShootingRange_SHOOT_CROUCHED.c;1|SCR_Tutorial_ShootingRange_SHOOT_CROUCHEDClass}} | SCR_Tutorial_ShootingRange_SHOOT_LEAN = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingRange/SCR_Tutorial_ShootingRange_SHOOT_LEAN.c;7|SCR_Tutorial_ShootingRange_SHOOT_LEAN}} | SCR_Tutorial_ShootingRange_SHOOT_LEANClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingRange/SCR_Tutorial_ShootingRange_SHOOT_LEAN.c;1|SCR_Tutorial_ShootingRange_SHOOT_LEANClass}} | SCR_Tutorial_ShootingRange_SHOOT_PRONE = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingRange/SCR_Tutorial_ShootingRange_SHOOT_PRONE.c;7|SCR_Tutorial_ShootingRange_SHOOT_PRONE}} | SCR_Tutorial_ShootingRange_SHOOT_PRONEClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingRange/SCR_Tutorial_ShootingRange_SHOOT_PRONE.c;1|SCR_Tutorial_ShootingRange_SHOOT_PRONEClass}} | SCR_Tutorial_ShootingRange_SHOOT_REST = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingRange/SCR_Tutorial_ShootingRange_SHOOT_REST.c;7|SCR_Tutorial_ShootingRange_SHOOT_REST}} | SCR_Tutorial_ShootingRange_SHOOT_RESTClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingRange/SCR_Tutorial_ShootingRange_SHOOT_REST.c;1|SCR_Tutorial_ShootingRange_SHOOT_RESTClass}} | SCR_Tutorial_ShootingRange_SHOOT_STATIC = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingRange/SCR_Tutorial_ShootingRange_SHOOT_STATIC.c;7|SCR_Tutorial_ShootingRange_SHOOT_STATIC}} | SCR_Tutorial_ShootingRange_SHOOT_STATICClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingRange/SCR_Tutorial_ShootingRange_SHOOT_STATIC.c;1|SCR_Tutorial_ShootingRange_SHOOT_STATICClass}} | SCR_Tutorial_ShootingRange_SHOOTClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingRange/SCR_Tutorial_ShootingRange_SHOOT.c;1|SCR_Tutorial_ShootingRange_SHOOTClass}} | SCR_Tutorial_ShootingRange_TAKE_MAGAZINE_GAMEPAD = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingRange/SCR_Tutorial_ShootingRange_TAKE_MAGAZINE_GAMEPAD.c;7|SCR_Tutorial_ShootingRange_TAKE_MAGAZINE_GAMEPAD}} | SCR_Tutorial_ShootingRange_TAKE_MAGAZINE_GAMEPADClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingRange/SCR_Tutorial_ShootingRange_TAKE_MAGAZINE_GAMEPAD.c;1|SCR_Tutorial_ShootingRange_TAKE_MAGAZINE_GAMEPADClass}} | SCR_Tutorial_ShootingRange_TAKE_MAGAZINE_KMB = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingRange/SCR_Tutorial_ShootingRange_TAKE_MAGAZINE_KMB.c;7|SCR_Tutorial_ShootingRange_TAKE_MAGAZINE_KMB}} | SCR_Tutorial_ShootingRange_TAKE_MAGAZINE_KMBClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingRange/SCR_Tutorial_ShootingRange_TAKE_MAGAZINE_KMB.c;1|SCR_Tutorial_ShootingRange_TAKE_MAGAZINE_KMBClass}} | SCR_Tutorial_SquadLeadership_CloseRequesting = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Commanding/SCR_Tutorial_SquadLeadership_CloseRequesting.c;6|SCR_Tutorial_SquadLeadership_CloseRequesting}} | SCR_Tutorial_SquadLeadership_CloseRequestingClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Commanding/SCR_Tutorial_SquadLeadership_CloseRequesting.c;1|SCR_Tutorial_SquadLeadership_CloseRequestingClass}} | SCR_Tutorial_SquadLeadership_END = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Commanding/SCR_Tutorial_SquadLeadership_END.c;7|SCR_Tutorial_SquadLeadership_END}} | SCR_Tutorial_SquadLeadership_ENDClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Commanding/SCR_Tutorial_SquadLeadership_END.c;1|SCR_Tutorial_SquadLeadership_ENDClass}} | SCR_Tutorial_SquadLeadership_FollowingOrderWait = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Commanding/SCR_Tutorial_SquadLeadership_FollowingOrderWait.c;7|SCR_Tutorial_SquadLeadership_FollowingOrderWait}} | SCR_Tutorial_SquadLeadership_FollowingOrderWaitClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Commanding/SCR_Tutorial_SquadLeadership_FollowingOrderWait.c;1|SCR_Tutorial_SquadLeadership_FollowingOrderWaitClass}} | SCR_Tutorial_SquadLeadership_GETIN = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Commanding/SCR_Tutorial_SquadLeadership_GETIN.c;7|SCR_Tutorial_SquadLeadership_GETIN}} | SCR_Tutorial_SquadLeadership_GETINClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Commanding/SCR_Tutorial_SquadLeadership_GETIN.c;1|SCR_Tutorial_SquadLeadership_GETINClass}} | SCR_Tutorial_SquadLeadership_GETOUT = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Commanding/SCR_Tutorial_SquadLeadership_GETOUT.c;7|SCR_Tutorial_SquadLeadership_GETOUT}} | SCR_Tutorial_SquadLeadership_GETOUTClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Commanding/SCR_Tutorial_SquadLeadership_GETOUT.c;1|SCR_Tutorial_SquadLeadership_GETOUTClass}} | SCR_Tutorial_SquadLeadership_OPEN_MAP = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Commanding/SCR_Tutorial_SquadLeadership_OPEN_MAP.c;7|SCR_Tutorial_SquadLeadership_OPEN_MAP}} | SCR_Tutorial_SquadLeadership_OPEN_MAPClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Commanding/SCR_Tutorial_SquadLeadership_OPEN_MAP.c;1|SCR_Tutorial_SquadLeadership_OPEN_MAPClass}} | SCR_Tutorial_SquadLeadership_OpenRequesting = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Commanding/SCR_Tutorial_SquadLeadership_OpenRequesting.c;6|SCR_Tutorial_SquadLeadership_OpenRequesting}} | SCR_Tutorial_SquadLeadership_OpenRequestingClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Commanding/SCR_Tutorial_SquadLeadership_OpenRequesting.c;1|SCR_Tutorial_SquadLeadership_OpenRequestingClass}} | SCR_Tutorial_SquadLeadership_ORDER_DEFEND = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Commanding/SCR_Tutorial_SquadLeadership_ORDER_DEFEND.c;7|SCR_Tutorial_SquadLeadership_ORDER_DEFEND}} | SCR_Tutorial_SquadLeadership_ORDER_DEFENDClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Commanding/SCR_Tutorial_SquadLeadership_ORDER_DEFEND.c;1|SCR_Tutorial_SquadLeadership_ORDER_DEFENDClass}} | SCR_Tutorial_SquadLeadership_ORDER_FOLLOW = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Commanding/SCR_Tutorial_SquadLeadership_ORDER_FOLLOW.c;7|SCR_Tutorial_SquadLeadership_ORDER_FOLLOW}} | SCR_Tutorial_SquadLeadership_ORDER_FOLLOWClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Commanding/SCR_Tutorial_SquadLeadership_ORDER_FOLLOW.c;1|SCR_Tutorial_SquadLeadership_ORDER_FOLLOWClass}} | SCR_Tutorial_SquadLeadership_ORDER_GETIN_CAR = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Commanding/SCR_Tutorial_SquadLeadership_ORDER_GETIN_CAR.c;7|SCR_Tutorial_SquadLeadership_ORDER_GETIN_CAR}} | SCR_Tutorial_SquadLeadership_ORDER_GETIN_CARClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Commanding/SCR_Tutorial_SquadLeadership_ORDER_GETIN_CAR.c;1|SCR_Tutorial_SquadLeadership_ORDER_GETIN_CARClass}} | SCR_Tutorial_SquadLeadership_ORDER_GETIN_TURRET = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Commanding/SCR_Tutorial_SquadLeadership_ORDER_GETIN_TURRET.c;7|SCR_Tutorial_SquadLeadership_ORDER_GETIN_TURRET}} | SCR_Tutorial_SquadLeadership_ORDER_GETIN_TURRETClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Commanding/SCR_Tutorial_SquadLeadership_ORDER_GETIN_TURRET.c;1|SCR_Tutorial_SquadLeadership_ORDER_GETIN_TURRETClass}} | SCR_Tutorial_SquadLeadership_ORDER_GETOUT = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Commanding/SCR_Tutorial_SquadLeadership_ORDER_GETOUT.c;7|SCR_Tutorial_SquadLeadership_ORDER_GETOUT}} | SCR_Tutorial_SquadLeadership_ORDER_GETOUTClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Commanding/SCR_Tutorial_SquadLeadership_ORDER_GETOUT.c;1|SCR_Tutorial_SquadLeadership_ORDER_GETOUTClass}} | SCR_Tutorial_SquadLeadership_ORDER_MOVE = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Commanding/SCR_Tutorial_SquadLeadership_ORDER_MOVE.c;7|SCR_Tutorial_SquadLeadership_ORDER_MOVE}} | SCR_Tutorial_SquadLeadership_ORDER_MOVE_2 = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Commanding/SCR_Tutorial_SquadLeadership_ORDER_MOVE_2.c;7|SCR_Tutorial_SquadLeadership_ORDER_MOVE_2}} | SCR_Tutorial_SquadLeadership_ORDER_MOVE_2Class = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Commanding/SCR_Tutorial_SquadLeadership_ORDER_MOVE_2.c;1|SCR_Tutorial_SquadLeadership_ORDER_MOVE_2Class}} | SCR_Tutorial_SquadLeadership_ORDER_MOVEClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Commanding/SCR_Tutorial_SquadLeadership_ORDER_MOVE.c;1|SCR_Tutorial_SquadLeadership_ORDER_MOVEClass}} | SCR_Tutorial_SquadLeadership_ORDER_STOP = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Commanding/SCR_Tutorial_SquadLeadership_ORDER_STOP.c;7|SCR_Tutorial_SquadLeadership_ORDER_STOP}} | SCR_Tutorial_SquadLeadership_ORDER_STOPClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Commanding/SCR_Tutorial_SquadLeadership_ORDER_STOP.c;1|SCR_Tutorial_SquadLeadership_ORDER_STOPClass}} | SCR_Tutorial_SquadLeadership_ORDER_SUPPRESS = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Commanding/SCR_Tutorial_SquadLeadership_ORDER_SUPPRESS.c;7|SCR_Tutorial_SquadLeadership_ORDER_SUPPRESS}} | SCR_Tutorial_SquadLeadership_ORDER_SUPPRESSClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Commanding/SCR_Tutorial_SquadLeadership_ORDER_SUPPRESS.c;1|SCR_Tutorial_SquadLeadership_ORDER_SUPPRESSClass}} | SCR_Tutorial_SquadLeadership_RECRUITING = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Commanding/SCR_Tutorial_SquadLeadership_RECRUITING.c;7|SCR_Tutorial_SquadLeadership_RECRUITING}} | SCR_Tutorial_SquadLeadership_RECRUITINGClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Commanding/SCR_Tutorial_SquadLeadership_RECRUITING.c;1|SCR_Tutorial_SquadLeadership_RECRUITINGClass}} | SCR_Tutorial_SquadLeadership_RequestGroup = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Commanding/SCR_Tutorial_SquadLeadership_RequestGroup.c;6|SCR_Tutorial_SquadLeadership_RequestGroup}} | SCR_Tutorial_SquadLeadership_RequestGroupClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Commanding/SCR_Tutorial_SquadLeadership_RequestGroup.c;1|SCR_Tutorial_SquadLeadership_RequestGroupClass}} | SCR_Tutorial_SquadLeadership_SelectGroup = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Commanding/SCR_Tutorial_SquadLeadership_SelectGroup.c;6|SCR_Tutorial_SquadLeadership_SelectGroup}} | SCR_Tutorial_SquadLeadership_SelectGroupClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Commanding/SCR_Tutorial_SquadLeadership_SelectGroup.c;1|SCR_Tutorial_SquadLeadership_SelectGroupClass}} | SCR_Tutorial_SquadLeadership_START = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Commanding/SCR_Tutorial_SquadLeadership_START.c;7|SCR_Tutorial_SquadLeadership_START}} | SCR_Tutorial_SquadLeadership_STARTClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Commanding/SCR_Tutorial_SquadLeadership_START.c;1|SCR_Tutorial_SquadLeadership_STARTClass}} | SCR_Tutorial_SW_ARM_CHARGES = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_ARM_CHARGES.c;7|SCR_Tutorial_SW_ARM_CHARGES}} | SCR_Tutorial_SW_ARM_CHARGESClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_ARM_CHARGES.c;1|SCR_Tutorial_SW_ARM_CHARGESClass}} | SCR_Tutorial_SW_DETONATE_CHARGES = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_DETONATE_CHARGES.c;7|SCR_Tutorial_SW_DETONATE_CHARGES}} | SCR_Tutorial_SW_DETONATE_CHARGESClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_DETONATE_CHARGES.c;1|SCR_Tutorial_SW_DETONATE_CHARGESClass}} | SCR_Tutorial_SW_DROP_M72 = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_DROP_M72.c;7|SCR_Tutorial_SW_DROP_M72}} | SCR_Tutorial_SW_DROP_M72Class = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_DROP_M72.c;1|SCR_Tutorial_SW_DROP_M72Class}} | SCR_Tutorial_SW_ENDING = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_ENDING.c;6|SCR_Tutorial_SW_ENDING}} | SCR_Tutorial_SW_ENDINGClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_ENDING.c;1|SCR_Tutorial_SW_ENDINGClass}} | SCR_Tutorial_SW_EQUIP_CHARGES = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_EQUIP_CHARGES.c;7|SCR_Tutorial_SW_EQUIP_CHARGES}} | SCR_Tutorial_SW_EQUIP_CHARGESClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_EQUIP_CHARGES.c;1|SCR_Tutorial_SW_EQUIP_CHARGESClass}} | SCR_Tutorial_SW_EQUIP_DETONATOR = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_EQUIP_DETONATOR.c;7|SCR_Tutorial_SW_EQUIP_DETONATOR}} | SCR_Tutorial_SW_EQUIP_DETONATORClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_EQUIP_DETONATOR.c;1|SCR_Tutorial_SW_EQUIP_DETONATORClass}} | SCR_Tutorial_SW_GL_FIRE = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_GL_FIRE.c;7|SCR_Tutorial_SW_GL_FIRE}} | SCR_Tutorial_SW_GL_FIREClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_GL_FIRE.c;1|SCR_Tutorial_SW_GL_FIREClass}} | SCR_Tutorial_SW_GL_LOAD = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_GL_LOAD.c;7|SCR_Tutorial_SW_GL_LOAD}} | SCR_Tutorial_SW_GL_LOADClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_GL_LOAD.c;1|SCR_Tutorial_SW_GL_LOADClass}} | SCR_Tutorial_SW_M72_FIRE = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_M72_FIRE.c;7|SCR_Tutorial_SW_M72_FIRE}} | SCR_Tutorial_SW_M72_FIREClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_M72_FIRE.c;1|SCR_Tutorial_SW_M72_FIREClass}} | SCR_Tutorial_SW_MOVE_BACK = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_MOVE_BACK.c;7|SCR_Tutorial_SW_MOVE_BACK}} | SCR_Tutorial_SW_MOVE_BACKClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_MOVE_BACK.c;1|SCR_Tutorial_SW_MOVE_BACKClass}} | SCR_Tutorial_SW_MOVE_TO_OBSTACLE = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_MOVE_TO_OBSTACLE.c;7|SCR_Tutorial_SW_MOVE_TO_OBSTACLE}} | SCR_Tutorial_SW_MOVE_TO_OBSTACLEClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_MOVE_TO_OBSTACLE.c;1|SCR_Tutorial_SW_MOVE_TO_OBSTACLEClass}} | SCR_Tutorial_SW_MOVE_TO_SAFETY = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_MOVE_TO_SAFETY.c;7|SCR_Tutorial_SW_MOVE_TO_SAFETY}} | SCR_Tutorial_SW_MOVE_TO_SAFETYClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_MOVE_TO_SAFETY.c;1|SCR_Tutorial_SW_MOVE_TO_SAFETYClass}} | SCR_Tutorial_SW_PICKUP_CARBINE = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_PICKUP_CARBINE.c;7|SCR_Tutorial_SW_PICKUP_CARBINE}} | SCR_Tutorial_SW_PICKUP_CARBINEClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_PICKUP_CARBINE.c;1|SCR_Tutorial_SW_PICKUP_CARBINEClass}} | SCR_Tutorial_SW_PICKUP_CHARGES = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_PICKUP_CHARGES.c;7|SCR_Tutorial_SW_PICKUP_CHARGES}} | SCR_Tutorial_SW_PICKUP_CHARGESClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_PICKUP_CHARGES.c;1|SCR_Tutorial_SW_PICKUP_CHARGESClass}} | SCR_Tutorial_SW_PICKUP_GRENADE = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_PICKUP_GRENADE.c;7|SCR_Tutorial_SW_PICKUP_GRENADE}} | SCR_Tutorial_SW_PICKUP_GRENADEClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_PICKUP_GRENADE.c;1|SCR_Tutorial_SW_PICKUP_GRENADEClass}} | SCR_Tutorial_SW_PICKUP_M72 = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_PICKUP_M72.c;7|SCR_Tutorial_SW_PICKUP_M72}} | SCR_Tutorial_SW_PICKUP_M72_ARSENAL = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_PICKUP_M72_ARSENAL.c;7|SCR_Tutorial_SW_PICKUP_M72_ARSENAL}} | SCR_Tutorial_SW_PICKUP_M72_ARSENALClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_PICKUP_M72_ARSENAL.c;1|SCR_Tutorial_SW_PICKUP_M72_ARSENALClass}} | SCR_Tutorial_SW_PICKUP_M72Class = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_PICKUP_M72.c;1|SCR_Tutorial_SW_PICKUP_M72Class}} | SCR_Tutorial_SW_PICKUP_RPG = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_PICKUP_RPG.c;7|SCR_Tutorial_SW_PICKUP_RPG}} | SCR_Tutorial_SW_PICKUP_RPG_ROUNDS = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_PICKUP_RPG_ROUNDS.c;7|SCR_Tutorial_SW_PICKUP_RPG_ROUNDS}} | SCR_Tutorial_SW_PICKUP_RPG_ROUNDSClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_PICKUP_RPG_ROUNDS.c;1|SCR_Tutorial_SW_PICKUP_RPG_ROUNDSClass}} | SCR_Tutorial_SW_PICKUP_RPGClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_PICKUP_RPG.c;1|SCR_Tutorial_SW_PICKUP_RPGClass}} | SCR_Tutorial_SW_PLACE_CHARGES = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_PLACE_CHARGES.c;7|SCR_Tutorial_SW_PLACE_CHARGES}} | SCR_Tutorial_SW_PLACE_CHARGESClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_PLACE_CHARGES.c;1|SCR_Tutorial_SW_PLACE_CHARGESClass}} | SCR_Tutorial_SW_RPG_DESTROY_BTR = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_RPG_DESTROY_BTR.c;7|SCR_Tutorial_SW_RPG_DESTROY_BTR}} | SCR_Tutorial_SW_RPG_DESTROY_BTRClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_RPG_DESTROY_BTR.c;1|SCR_Tutorial_SW_RPG_DESTROY_BTRClass}} | SCR_Tutorial_SW_RPG_DISPOSE = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_RPG_DISPOSE.c;6|SCR_Tutorial_SW_RPG_DISPOSE}} | SCR_Tutorial_SW_RPG_DISPOSEClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_RPG_DISPOSE.c;1|SCR_Tutorial_SW_RPG_DISPOSEClass}} | SCR_Tutorial_SW_RPG_FIRE = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_RPG_FIRE.c;7|SCR_Tutorial_SW_RPG_FIRE}} | SCR_Tutorial_SW_RPG_FIRE_2 = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_RPG_FIRE_2.c;7|SCR_Tutorial_SW_RPG_FIRE_2}} | SCR_Tutorial_SW_RPG_FIRE_2Class = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_RPG_FIRE_2.c;1|SCR_Tutorial_SW_RPG_FIRE_2Class}} | SCR_Tutorial_SW_RPG_FIREClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_RPG_FIRE.c;1|SCR_Tutorial_SW_RPG_FIREClass}} | SCR_Tutorial_SW_RPG_RELOAD = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_RPG_RELOAD.c;7|SCR_Tutorial_SW_RPG_RELOAD}} | SCR_Tutorial_SW_RPG_RELOADClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_RPG_RELOAD.c;1|SCR_Tutorial_SW_RPG_RELOADClass}} | SCR_Tutorial_SW_START = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_START.c;7|SCR_Tutorial_SW_START}} | SCR_Tutorial_SW_STARTClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_START.c;1|SCR_Tutorial_SW_STARTClass}} | SCR_Tutorial_SW_SWITCH_FIREMODE = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_SWITCH_FIREMODE.c;7|SCR_Tutorial_SW_SWITCH_FIREMODE}} | SCR_Tutorial_SW_SWITCH_FIREMODEClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_SWITCH_FIREMODE.c;1|SCR_Tutorial_SW_SWITCH_FIREMODEClass}} | SCR_Tutorial_SW_THROW_GRENADE = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_THROW_GRENADE.c;6|SCR_Tutorial_SW_THROW_GRENADE}} | SCR_Tutorial_SW_THROW_GRENADEClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_Tutorial_SW_THROW_GRENADE.c;1|SCR_Tutorial_SW_THROW_GRENADEClass}} | SCR_Tutorial_VehicleMaintenance_CANONGROUND = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/VehicleMaintenance/SCR_Tutorial_VehicleMaintenance_CANONGROUND.c;7|SCR_Tutorial_VehicleMaintenance_CANONGROUND}} | SCR_Tutorial_VehicleMaintenance_CANONGROUNDClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/VehicleMaintenance/SCR_Tutorial_VehicleMaintenance_CANONGROUND.c;1|SCR_Tutorial_VehicleMaintenance_CANONGROUNDClass}} | SCR_Tutorial_VehicleMaintenance_CANPICKUP = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/VehicleMaintenance/SCR_Tutorial_VehicleMaintenance_CANPICKUP.c;7|SCR_Tutorial_VehicleMaintenance_CANPICKUP}} | SCR_Tutorial_VehicleMaintenance_CANPICKUPClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/VehicleMaintenance/SCR_Tutorial_VehicleMaintenance_CANPICKUP.c;1|SCR_Tutorial_VehicleMaintenance_CANPICKUPClass}} | SCR_Tutorial_VehicleMaintenance_CANREFIL = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/VehicleMaintenance/SCR_Tutorial_VehicleMaintenance_CANREFIL.c;7|SCR_Tutorial_VehicleMaintenance_CANREFIL}} | SCR_Tutorial_VehicleMaintenance_CANREFILClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/VehicleMaintenance/SCR_Tutorial_VehicleMaintenance_CANREFIL.c;1|SCR_Tutorial_VehicleMaintenance_CANREFILClass}} | SCR_Tutorial_VehicleMaintenance_CLOSE_INVENTORY = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/VehicleMaintenance/SCR_Tutorial_VehicleMaintenance_CLOSE_INVENTORY.c;7|SCR_Tutorial_VehicleMaintenance_CLOSE_INVENTORY}} | SCR_Tutorial_VehicleMaintenance_CLOSE_INVENTORYClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/VehicleMaintenance/SCR_Tutorial_VehicleMaintenance_CLOSE_INVENTORY.c;1|SCR_Tutorial_VehicleMaintenance_CLOSE_INVENTORYClass}} | SCR_Tutorial_VehicleMaintenance_END = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/VehicleMaintenance/SCR_Tutorial_VehicleMaintenance_END.c;7|SCR_Tutorial_VehicleMaintenance_END}} | SCR_Tutorial_VehicleMaintenance_ENDClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/VehicleMaintenance/SCR_Tutorial_VehicleMaintenance_END.c;1|SCR_Tutorial_VehicleMaintenance_ENDClass}} | SCR_Tutorial_VehicleMaintenance_ENGINE = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/VehicleMaintenance/SCR_Tutorial_VehicleMaintenance_ENGINE.c;7|SCR_Tutorial_VehicleMaintenance_ENGINE}} | SCR_Tutorial_VehicleMaintenance_ENGINEClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/VehicleMaintenance/SCR_Tutorial_VehicleMaintenance_ENGINE.c;1|SCR_Tutorial_VehicleMaintenance_ENGINEClass}} | SCR_Tutorial_VehicleMaintenance_ENGINEFULL = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/VehicleMaintenance/SCR_Tutorial_VehicleMaintenance_ENGINEFULL.c;7|SCR_Tutorial_VehicleMaintenance_ENGINEFULL}} | SCR_Tutorial_VehicleMaintenance_ENGINEFULLClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/VehicleMaintenance/SCR_Tutorial_VehicleMaintenance_ENGINEFULL.c;1|SCR_Tutorial_VehicleMaintenance_ENGINEFULLClass}} | SCR_Tutorial_VehicleMaintenance_FUELTANK = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/VehicleMaintenance/SCR_Tutorial_VehicleMaintenance_FUELTANK.c;7|SCR_Tutorial_VehicleMaintenance_FUELTANK}} | SCR_Tutorial_VehicleMaintenance_FUELTANKClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/VehicleMaintenance/SCR_Tutorial_VehicleMaintenance_FUELTANK.c;1|SCR_Tutorial_VehicleMaintenance_FUELTANKClass}} | SCR_Tutorial_VehicleMaintenance_FUELTANKFULL = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/VehicleMaintenance/SCR_Tutorial_VehicleMaintenance_FUELTANKFULL.c;7|SCR_Tutorial_VehicleMaintenance_FUELTANKFULL}} | SCR_Tutorial_VehicleMaintenance_FUELTANKFULLClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/VehicleMaintenance/SCR_Tutorial_VehicleMaintenance_FUELTANKFULL.c;1|SCR_Tutorial_VehicleMaintenance_FUELTANKFULLClass}} | SCR_Tutorial_VehicleMaintenance_GETIN = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/VehicleMaintenance/SCR_Tutorial_VehicleMaintenance_GETIN.c;7|SCR_Tutorial_VehicleMaintenance_GETIN}} | SCR_Tutorial_VehicleMaintenance_GETINClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/VehicleMaintenance/SCR_Tutorial_VehicleMaintenance_GETIN.c;1|SCR_Tutorial_VehicleMaintenance_GETINClass}} | SCR_Tutorial_VehicleMaintenance_GETOUT = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/VehicleMaintenance/SCR_Tutorial_VehicleMaintenance_GETOUT.c;7|SCR_Tutorial_VehicleMaintenance_GETOUT}} | SCR_Tutorial_VehicleMaintenance_GETOUTClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/VehicleMaintenance/SCR_Tutorial_VehicleMaintenance_GETOUT.c;1|SCR_Tutorial_VehicleMaintenance_GETOUTClass}} | SCR_Tutorial_VehicleMaintenance_OPEN_STORAGE = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/VehicleMaintenance/SCR_Tutorial_VehicleMaintenance_OPEN_STORAGE.c;7|SCR_Tutorial_VehicleMaintenance_OPEN_STORAGE}} | SCR_Tutorial_VehicleMaintenance_OPEN_STORAGEClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/VehicleMaintenance/SCR_Tutorial_VehicleMaintenance_OPEN_STORAGE.c;1|SCR_Tutorial_VehicleMaintenance_OPEN_STORAGEClass}} | SCR_Tutorial_VehicleMaintenance_PICKUPTOOLS = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/VehicleMaintenance/SCR_Tutorial_VehicleMaintenance_PICKUPTOOLS.c;7|SCR_Tutorial_VehicleMaintenance_PICKUPTOOLS}} | SCR_Tutorial_VehicleMaintenance_PICKUPTOOLSClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/VehicleMaintenance/SCR_Tutorial_VehicleMaintenance_PICKUPTOOLS.c;1|SCR_Tutorial_VehicleMaintenance_PICKUPTOOLSClass}} | SCR_Tutorial_VehicleMaintenance_REFUEL = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/VehicleMaintenance/SCR_Tutorial_VehicleMaintenance_REFUEL.c;7|SCR_Tutorial_VehicleMaintenance_REFUEL}} | SCR_Tutorial_VehicleMaintenance_REFUELClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/VehicleMaintenance/SCR_Tutorial_VehicleMaintenance_REFUEL.c;1|SCR_Tutorial_VehicleMaintenance_REFUELClass}} | SCR_Tutorial_VehicleMaintenance_REFUELFULL = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/VehicleMaintenance/SCR_Tutorial_VehicleMaintenance_REFUELFULL.c;7|SCR_Tutorial_VehicleMaintenance_REFUELFULL}} | SCR_Tutorial_VehicleMaintenance_REFUELFULLClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/VehicleMaintenance/SCR_Tutorial_VehicleMaintenance_REFUELFULL.c;1|SCR_Tutorial_VehicleMaintenance_REFUELFULLClass}} | SCR_Tutorial_VehicleMaintenance_START = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/VehicleMaintenance/SCR_Tutorial_VehicleMaintenance_START.c;7|SCR_Tutorial_VehicleMaintenance_START}} | SCR_Tutorial_VehicleMaintenance_STARTClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/VehicleMaintenance/SCR_Tutorial_VehicleMaintenance_START.c;1|SCR_Tutorial_VehicleMaintenance_STARTClass}} | SCR_Tutorial_VehicleMaintenance_SUPPLIESBAG = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/VehicleMaintenance/SCR_Tutorial_VehicleMaintenance_SUPPLIESBAG.c;7|SCR_Tutorial_VehicleMaintenance_SUPPLIESBAG}} | SCR_Tutorial_VehicleMaintenance_SUPPLIESBAGClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/VehicleMaintenance/SCR_Tutorial_VehicleMaintenance_SUPPLIESBAG.c;1|SCR_Tutorial_VehicleMaintenance_SUPPLIESBAGClass}} | SCR_Tutorial_VehicleMaintenance_SUPPLY_TRANSFER_GAMEPAD = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/VehicleMaintenance/SCR_Tutorial_VehicleMaintenance_SUPPLY_TRANSFER_GAMEPAD.c;7|SCR_Tutorial_VehicleMaintenance_SUPPLY_TRANSFER_GAMEPAD}} | SCR_Tutorial_VehicleMaintenance_SUPPLY_TRANSFER_GAMEPADClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/VehicleMaintenance/SCR_Tutorial_VehicleMaintenance_SUPPLY_TRANSFER_GAMEPAD.c;1|SCR_Tutorial_VehicleMaintenance_SUPPLY_TRANSFER_GAMEPADClass}} | SCR_Tutorial_VehicleMaintenance_SUPPLY_TRANSFER_KMB = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/VehicleMaintenance/SCR_Tutorial_VehicleMaintenance_SUPPLY_TRANSFER_KMB.c;7|SCR_Tutorial_VehicleMaintenance_SUPPLY_TRANSFER_KMB}} | SCR_Tutorial_VehicleMaintenance_SUPPLY_TRANSFER_KMBClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/VehicleMaintenance/SCR_Tutorial_VehicleMaintenance_SUPPLY_TRANSFER_KMB.c;1|SCR_Tutorial_VehicleMaintenance_SUPPLY_TRANSFER_KMBClass}} | SCR_Tutorial_VehicleMaintenance_VEHTURN = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/VehicleMaintenance/SCR_Tutorial_VehicleMaintenance_VEHTURN.c;7|SCR_Tutorial_VehicleMaintenance_VEHTURN}} | SCR_Tutorial_VehicleMaintenance_VEHTURNClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/VehicleMaintenance/SCR_Tutorial_VehicleMaintenance_VEHTURN.c;1|SCR_Tutorial_VehicleMaintenance_VEHTURNClass}} | SCR_TutorialBuildingStartUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_TutorialBuildingStartUserAction.c;2|SCR_TutorialBuildingStartUserAction}} | SCR_TutorialCourse = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Logic/SCR_TutorialCourse.c;1|SCR_TutorialCourse}} | SCR_TutorialCoursePrefabInfo = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Logic/SCR_TutorialCourseEntityInfo.c;1|SCR_TutorialCoursePrefabInfo}} | SCR_TutorialCoursesConfig = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Logic/SCR_TutorialCoursesConfig.c;1|SCR_TutorialCoursesConfig}} | SCR_TutorialCourseSelectionUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_TutorialCourseSelectionUserAction.c;1|SCR_TutorialCourseSelectionUserAction}} | SCR_TutorialDeployMobileAssembly = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_TutorialDeployMobileAssembly.c;1|SCR_TutorialDeployMobileAssembly}} | SCR_TutorialFakeBaseComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Logic/SCR_TutorialFakeBaseComponent.c;5|SCR_TutorialFakeBaseComponent}} | SCR_TutorialFakeBaseComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Logic/SCR_TutorialFakeBaseComponent.c;1|SCR_TutorialFakeBaseComponentClass}} | SCR_TutorialFastTravelMapElement = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Tutorial/SCR_TutorialFastTravelMap.c;1|SCR_TutorialFastTravelMapElement}} | SCR_TutorialFastTravelMapMenuUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Tutorial/SCR_TutorialFastTravelMapMenuUI.c;4|SCR_TutorialFastTravelMapMenuUI}} | SCR_TutorialFastTravelSpinBox = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Tutorial/SCR_TutorialFastTravelSpinBox.c;1|SCR_TutorialFastTravelSpinBox}} | SCR_TutorialGamemodeComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Logic/SCR_TutorialGamemodeComponent.c;5|SCR_TutorialGamemodeComponent}} | SCR_TutorialGamemodeComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Logic/SCR_TutorialGamemodeComponent.c;1|SCR_TutorialGamemodeComponentClass}} | SCR_TutorialGamemodeComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/GameMode/Tutorial/SCR_TutorialGamemodeComponentSerializer.c;1|SCR_TutorialGamemodeComponentSerializer}} | SCR_TutorialInstructorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Logic/SCR_TutorialInstructorComponent.c;5|SCR_TutorialInstructorComponent}} | SCR_TutorialInstructorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Logic/SCR_TutorialInstructorComponent.c;1|SCR_TutorialInstructorComponentClass}} | SCR_TutorialInventoryItemSearchPredicate = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Logic/SCR_TutorialInventoryItemSearchPredicate.c;1|SCR_TutorialInventoryItemSearchPredicate}} | SCR_TutorialInventoryPrefabSearchPredicate = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Logic/SCR_TutorialInventoryPrefabSearchPredicate.c;1|SCR_TutorialInventoryPrefabSearchPredicate}} | SCR_TutorialInventorySearchPredicate = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Logic/SCR_TutorialInventorySearchPredicate.c;1|SCR_TutorialInventorySearchPredicate}} | SCR_TutorialLogic_CombatEngineering = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/CombatEngineeringCourse/SCR_TutorialLogic_CombatEngineering.c;1|SCR_TutorialLogic_CombatEngineering}} | SCR_TutorialLogic_Driving = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/DrivingSimple/SCR_TutorialLogic_Driving.c;1|SCR_TutorialLogic_Driving}} | SCR_TutorialLogic_FreeRoam = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Hub/SCR_TutorialLogic_FreeRoam.c;1|SCR_TutorialLogic_FreeRoam}} | SCR_TutorialLogic_Heli = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Helicopters/SCR_TutorialLogic_Heli.c;1|SCR_TutorialLogic_Heli}} | SCR_TutorialLogic_LRS = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingLongRange/SCR_TutorialLogic_LRS.c;1|SCR_TutorialLogic_LRS}} | SCR_TutorialLogic_Medical = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Medical/SCR_TutorialLogic_Medical.c;1|SCR_TutorialLogic_Medical}} | SCR_TutorialLogic_Mortars = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Mortars/SCR_TutorialLogic_Mortars.c;1|SCR_TutorialLogic_Mortars}} | SCR_TutorialLogic_Navigation = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Navigation/SCR_TutorialLogic_Navigation.c;1|SCR_TutorialLogic_Navigation}} | SCR_TutorialLogic_Obstacle = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Movement/SCR_TutorialLogic_Obstacle.c;1|SCR_TutorialLogic_Obstacle}} | SCR_TutorialLogic_SeizingCourse = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Conflict/SCR_TutorialLogic_SeizingCourse.c;1|SCR_TutorialLogic_SeizingCourse}} | SCR_TutorialLogic_ShootingRange = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/ShootingRange/SCR_TutorialLogic_ShootingRange.c;1|SCR_TutorialLogic_ShootingRange}} | SCR_TutorialLogic_SquadLeadership = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Commanding/SCR_TutorialLogic_Commanding.c;1|SCR_TutorialLogic_SquadLeadership}} | SCR_TutorialLogic_SW = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/SpecialWeapons/SCR_TutorialLogic_SW.c;1|SCR_TutorialLogic_SW}} | SCR_TutorialLogic_VehicleMaintenance = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/VehicleMaintenance/SCR_TutorialLogic_VehicleMaintenence.c;1|SCR_TutorialLogic_VehicleMaintenance}} | SCR_TutorialMapUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Tutorial/SCR_TutorialMapUI.c;2|SCR_TutorialMapUI}} | SCR_TutorialMapUIBase = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Tutorial/SCR_TutorialMapUIBase.c;1|SCR_TutorialMapUIBase}} | SCR_TutorialOpenFastTravelInterface = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_TutorialOpenFastTravelInterface.c;1|SCR_TutorialOpenFastTravelInterface}} | SCR_TutorialReturnToMenuAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_TutorialReturnToMenuAction.c;1|SCR_TutorialReturnToMenuAction}} | SCR_TutorialSeizingComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Componenets/SCR_TutorialSeizingComponent.c;5|SCR_TutorialSeizingComponent}} | SCR_TutorialSeizingComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Componenets/SCR_TutorialSeizingComponent.c;1|SCR_TutorialSeizingComponentClass}} | SCR_TutorialSpawnLogic = {{Link|enfusion://ScriptEditor/scripts/Game/Respawn/Logic/SCR_TutorialSpawnLogic.c;1|SCR_TutorialSpawnLogic}} | SCR_TutorialStageHub = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Hub/SCR_TutorialStageHub.c;7|SCR_TutorialStageHub}} | SCR_TutorialStageHubClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Hub/SCR_TutorialStageHub.c;1|SCR_TutorialStageHubClass}} | SCR_TutorialStageInfo = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Logic/SCR_TutorialStageInfo.c;1|SCR_TutorialStageInfo}} | SCR_TutorialStageMedical_BANDAGE_CHEST = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Medical/SCR_TutorialStageMedical_BANDAGE_CHEST.c;7|SCR_TutorialStageMedical_BANDAGE_CHEST}} | SCR_TutorialStageMedical_BANDAGE_CHESTClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Medical/SCR_TutorialStageMedical_BANDAGE_CHEST.c;1|SCR_TutorialStageMedical_BANDAGE_CHESTClass}} | SCR_TutorialStageMedical_BANDAGE_EQUIP = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Medical/SCR_TutorialStageMedical_BANDAGE_EQUIP.c;7|SCR_TutorialStageMedical_BANDAGE_EQUIP}} | SCR_TutorialStageMedical_BANDAGE_EQUIPClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Medical/SCR_TutorialStageMedical_BANDAGE_EQUIP.c;1|SCR_TutorialStageMedical_BANDAGE_EQUIPClass}} | SCR_TutorialStageMedical_BANDAGE_LEG = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Medical/SCR_TutorialStageMedical_BANDAGE_LEG.c;7|SCR_TutorialStageMedical_BANDAGE_LEG}} | SCR_TutorialStageMedical_BANDAGE_LEGClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Medical/SCR_TutorialStageMedical_BANDAGE_LEG.c;1|SCR_TutorialStageMedical_BANDAGE_LEGClass}} | SCR_TutorialStageMedical_CHECK = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Medical/SCR_TutorialStageMedical_CHECK.c;7|SCR_TutorialStageMedical_CHECK}} | SCR_TutorialStageMedical_CHECK_EXPLAIN = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Medical/SCR_TutorialStageMedical_CHECK_EXPLAIN.c;7|SCR_TutorialStageMedical_CHECK_EXPLAIN}} | SCR_TutorialStageMedical_CHECK_EXPLAINClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Medical/SCR_TutorialStageMedical_CHECK_EXPLAIN.c;1|SCR_TutorialStageMedical_CHECK_EXPLAINClass}} | SCR_TutorialStageMedical_CHECKClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Medical/SCR_TutorialStageMedical_CHECK.c;1|SCR_TutorialStageMedical_CHECKClass}} | SCR_TutorialStageMedical_END = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Medical/SCR_TutorialStageMedical_END.c;7|SCR_TutorialStageMedical_END}} | SCR_TutorialStageMedical_ENDClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Medical/SCR_TutorialStageMedical_END.c;1|SCR_TutorialStageMedical_ENDClass}} | SCR_TutorialStageMedical_MORPHINE_APPLY = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Medical/SCR_TutorialStageMedical_MORPHINE_APPLY.c;7|SCR_TutorialStageMedical_MORPHINE_APPLY}} | SCR_TutorialStageMedical_MORPHINE_APPLYClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Medical/SCR_TutorialStageMedical_MORPHINE_APPLY.c;1|SCR_TutorialStageMedical_MORPHINE_APPLYClass}} | SCR_TutorialStageMedical_MORPHINE_EQUIP = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Medical/SCR_TutorialStageMedical_MORPHINE_EQUIP.c;7|SCR_TutorialStageMedical_MORPHINE_EQUIP}} | SCR_TutorialStageMedical_MORPHINE_EQUIPClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Medical/SCR_TutorialStageMedical_MORPHINE_EQUIP.c;1|SCR_TutorialStageMedical_MORPHINE_EQUIPClass}} | SCR_TutorialStageMedical_PickupBandage = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Medical/SCR_TutorialStageMedical_PickupBandage.c;7|SCR_TutorialStageMedical_PickupBandage}} | SCR_TutorialStageMedical_PickupBandageClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Medical/SCR_TutorialStageMedical_PickupBandage.c;1|SCR_TutorialStageMedical_PickupBandageClass}} | SCR_TutorialStageMedical_PickupMorphine = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Medical/SCR_TutorialStageMedical_PickupMorphine.c;7|SCR_TutorialStageMedical_PickupMorphine}} | SCR_TutorialStageMedical_PickupMorphineClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Medical/SCR_TutorialStageMedical_PickupMorphine.c;1|SCR_TutorialStageMedical_PickupMorphineClass}} | SCR_TutorialStageMedical_PickupSaline = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Medical/SCR_TutorialStageMedical_PickupSaline.c;7|SCR_TutorialStageMedical_PickupSaline}} | SCR_TutorialStageMedical_PickupSalineClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Medical/SCR_TutorialStageMedical_PickupSaline.c;1|SCR_TutorialStageMedical_PickupSalineClass}} | SCR_TutorialStageMedical_PickupTourniquet = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Medical/SCR_TutorialStageMedical_PickupTourniquet.c;7|SCR_TutorialStageMedical_PickupTourniquet}} | SCR_TutorialStageMedical_PickupTourniquetClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Medical/SCR_TutorialStageMedical_PickupTourniquet.c;1|SCR_TutorialStageMedical_PickupTourniquetClass}} | SCR_TutorialStageMedical_PULLOUT = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Medical/SCR_TutorialStageMedical_PULLOUT.c;7|SCR_TutorialStageMedical_PULLOUT}} | SCR_TutorialStageMedical_PULLOUTClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Medical/SCR_TutorialStageMedical_PULLOUT.c;1|SCR_TutorialStageMedical_PULLOUTClass}} | SCR_TutorialStageMedical_SALINE_APPLY = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Medical/SCR_TutorialStageMedical_SALINE_APPLY.c;7|SCR_TutorialStageMedical_SALINE_APPLY}} | SCR_TutorialStageMedical_SALINE_APPLYClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Medical/SCR_TutorialStageMedical_SALINE_APPLY.c;1|SCR_TutorialStageMedical_SALINE_APPLYClass}} | SCR_TutorialStageMedical_SALINE_EQUIP = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Medical/SCR_TutorialStageMedical_SALINE_EQUIP.c;7|SCR_TutorialStageMedical_SALINE_EQUIP}} | SCR_TutorialStageMedical_SALINE_EQUIPClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Medical/SCR_TutorialStageMedical_SALINE_EQUIP.c;1|SCR_TutorialStageMedical_SALINE_EQUIPClass}} | SCR_TutorialStageMedical_START = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Medical/SCR_TutorialStageMedical_START.c;7|SCR_TutorialStageMedical_START}} | SCR_TutorialStageMedical_STARTClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Medical/SCR_TutorialStageMedical_START.c;1|SCR_TutorialStageMedical_STARTClass}} | SCR_TutorialStageMedical_TOURNIQUET_APPLY = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Medical/SCR_TutorialStageMedical_TOURNIQUET_APPLY.c;7|SCR_TutorialStageMedical_TOURNIQUET_APPLY}} | SCR_TutorialStageMedical_TOURNIQUET_APPLYClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Medical/SCR_TutorialStageMedical_TOURNIQUET_APPLY.c;1|SCR_TutorialStageMedical_TOURNIQUET_APPLYClass}} | SCR_TutorialStageMedical_TOURNIQUET_EQUIP = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Medical/SCR_TutorialStageMedical_TOURNIQUET_EQUIP.c;7|SCR_TutorialStageMedical_TOURNIQUET_EQUIP}} | SCR_TutorialStageMedical_TOURNIQUET_EQUIPClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Medical/SCR_TutorialStageMedical_TOURNIQUET_EQUIP.c;1|SCR_TutorialStageMedical_TOURNIQUET_EQUIPClass}} | SCR_TutorialStageMortars_ChangeAmmoType = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Mortars/SCR_TutorialStageMortars_ChangeAmmoType.c;7|SCR_TutorialStageMortars_ChangeAmmoType}} | SCR_TutorialStageMortars_ChangeAmmoTypeClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Mortars/SCR_TutorialStageMortars_ChangeAmmoType.c;1|SCR_TutorialStageMortars_ChangeAmmoTypeClass}} | SCR_TutorialStageMortars_EquipShell = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Mortars/SCR_TutorialStageMortars_EquipShell.c;7|SCR_TutorialStageMortars_EquipShell}} | SCR_TutorialStageMortars_EquipShellClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Mortars/SCR_TutorialStageMortars_EquipShell.c;1|SCR_TutorialStageMortars_EquipShellClass}} | SCR_TutorialStageMortars_Final = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Mortars/SCR_TutorialStageMortars_Final.c;7|SCR_TutorialStageMortars_Final}} | SCR_TutorialStageMortars_FinalClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Mortars/SCR_TutorialStageMortars_Final.c;1|SCR_TutorialStageMortars_FinalClass}} | SCR_TutorialStageMortars_FireShell = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Mortars/SCR_TutorialStageMortars_FireShell.c;7|SCR_TutorialStageMortars_FireShell}} | SCR_TutorialStageMortars_FireShellClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Mortars/SCR_TutorialStageMortars_FireShell.c;1|SCR_TutorialStageMortars_FireShellClass}} | SCR_TutorialStageMortars_GetInMortar = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Mortars/SCR_TutorialStageMortars_GetInMortar.c;7|SCR_TutorialStageMortars_GetInMortar}} | SCR_TutorialStageMortars_GetInMortarClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Mortars/SCR_TutorialStageMortars_GetInMortar.c;1|SCR_TutorialStageMortars_GetInMortarClass}} | SCR_TutorialStageMortars_GetOutMortar = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Mortars/SCR_TutorialStageMortars_GetOutMortar.c;7|SCR_TutorialStageMortars_GetOutMortar}} | SCR_TutorialStageMortars_GetOutMortarClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Mortars/SCR_TutorialStageMortars_GetOutMortar.c;1|SCR_TutorialStageMortars_GetOutMortarClass}} | SCR_TutorialStageMortars_SecondTarget = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Mortars/SCR_TutorialStageMortars_SecondTarget.c;7|SCR_TutorialStageMortars_SecondTarget}} | SCR_TutorialStageMortars_SecondTargetClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Mortars/SCR_TutorialStageMortars_SecondTarget.c;1|SCR_TutorialStageMortars_SecondTargetClass}} | SCR_TutorialStageMortars_SettingAzimuth = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Mortars/SCR_TutorialStageMortars_SettingAzimuth.c;7|SCR_TutorialStageMortars_SettingAzimuth}} | SCR_TutorialStageMortars_SettingAzimuthClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Mortars/SCR_TutorialStageMortars_SettingAzimuth.c;1|SCR_TutorialStageMortars_SettingAzimuthClass}} | SCR_TutorialStageMortars_SettingRange = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Mortars/SCR_TutorialStageMortars_SettingRange.c;7|SCR_TutorialStageMortars_SettingRange}} | SCR_TutorialStageMortars_SettingRangeClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Mortars/SCR_TutorialStageMortars_SettingRange.c;1|SCR_TutorialStageMortars_SettingRangeClass}} | SCR_TutorialStageMortars_ShellTravelling = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Mortars/SCR_TutorialStageMortars_ShellTravelling.c;7|SCR_TutorialStageMortars_ShellTravelling}} | SCR_TutorialStageMortars_ShellTravellingClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Mortars/SCR_TutorialStageMortars_ShellTravelling.c;1|SCR_TutorialStageMortars_ShellTravellingClass}} | SCR_TutorialStageMortars_Sights = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Mortars/SCR_TutorialStageMortars_Sights.c;7|SCR_TutorialStageMortars_Sights}} | SCR_TutorialStageMortars_SightsClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Tutorial/Stages/Mortars/SCR_TutorialStageMortars_Sights.c;1|SCR_TutorialStageMortars_SightsClass}} | SCR_TutorialTaskMapUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Tasks/SCR_TutorialTaskMapUIComponent.c;1|SCR_TutorialTaskMapUIComponent}} | SCR_UICore = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Sounds/SCR_UICore.c;2|SCR_UICore}} | SCR_UIDescription = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_UIDescription.c;4|SCR_UIDescription}} | SCR_UIEditorEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Effects/SCR_UIEditorEffect.c;1|SCR_UIEditorEffect}} | SCR_UIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_UIInfo.c;6|SCR_UIInfo}} | SCR_UIInfoSpawnRequestResult = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_UIInfoSpawnRequestResult.c;1|SCR_UIInfoSpawnRequestResult}} | SCR_UIManualCameraComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_UIManualCameraComponent.c;4|SCR_UIManualCameraComponent}} | SCR_UIName = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_UIName.c;4|SCR_UIName}} | SCR_UINotificationInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_NotificationUIInfo.c;2|SCR_UINotificationInfo}} | SCR_UISoundEntity = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Sounds/SCR_UISoundEntity.c;7|SCR_UISoundEntity}} | SCR_UISoundEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Sounds/SCR_UISoundEntity.c;1|SCR_UISoundEntityClass}} | SCR_UIStyle = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_ColorComponent.c;8|SCR_UIStyle}} | SCR_UITaskManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_UITaskManagerComponent.c;6|SCR_UITaskManagerComponent}} | SCR_UITaskManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_UITaskManagerComponent.c;1|SCR_UITaskManagerComponentClass}} | SCR_UnconsciousScreenEffect = {{Link|enfusion://ScriptEditor/scripts/Game/UI/ScreenEffects/SCR_UnconsciousScreenEffect.c;1|SCR_UnconsciousScreenEffect}} | SCR_UnflipVehicleAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_UnflipVehicleAction.c;1|SCR_UnflipVehicleAction}} | SCR_UniquePlayerIdentityBioGroupConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Identity/Containers/SCR_UniquePlayerIdentityBioGroupConfig.c;4|SCR_UniquePlayerIdentityBioGroupConfig}} | SCR_UnitDisplayComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/UnitDisplayComponent.c;6|SCR_UnitDisplayComponent}} | SCR_UnitDisplayComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/UnitDisplayComponent.c;1|SCR_UnitDisplayComponentClass}} | SCR_UnitDisplayManager = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/UnitDisplayManager.c;40|SCR_UnitDisplayManager}} | SCR_UnitDisplayManagerClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/UnitDisplayManager.c;1|SCR_UnitDisplayManagerClass}} | SCR_UnitDisplaySettings = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/UnitDisplayManager.c;7|SCR_UnitDisplaySettings}} | SCR_UniversalInventoryStorageComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_UniversalInventoryStorageComponent.c;8|SCR_UniversalInventoryStorageComponent}} | SCR_UniversalInventoryStorageComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_UniversalInventoryStorageComponent.c;1|SCR_UniversalInventoryStorageComponentClass}} | SCR_UnlimitedDisclaimerEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Common/SCR_UnlimitedDisclaimerEditorUIComponent.c;1|SCR_UnlimitedDisclaimerEditorUIComponent}} | SCR_UnloadContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/Placeholder/SCR_UnloadContextAction.c;1|SCR_UnloadContextAction}} | SCR_UnloadSuppliesWaypoint = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_UnloadSuppliesWaypoint.c;5|SCR_UnloadSuppliesWaypoint}} | SCR_UnloadSuppliesWaypointClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_UnloadSuppliesWaypoint.c;1|SCR_UnloadSuppliesWaypointClass}} | SCR_UnloadSuppliesWaypointState = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_UnloadSuppliesWaypoint.c;14|SCR_UnloadSuppliesWaypointState}} | SCR_UnlockedEditableEntityFilter = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/EditableEntityFilters/SCR_UnlockedEditableEntityFilter.c;1|SCR_UnlockedEditableEntityFilter}} | SCR_UnlockLayerContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/Placeholder/SCR_UnlockLayerContextAction.c;1|SCR_UnlockLayerContextAction}} | SCR_UpdateAllEditablePrefabsPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/Editor/SCR_UpdateAllEditablePrefabsPlugin.c;2|SCR_UpdateAllEditablePrefabsPlugin}} | SCR_UserActionWithOccupancy = {{Link|enfusion://ScriptEditor/scripts/Game/AI/UserActions/SCR_UserActionWithOccupancy.c;1|SCR_UserActionWithOccupancy}} | SCR_UserContextAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/ContextActions/SCR_UserContextAction.c;1|SCR_UserContextAction}} | SCR_ValidateBehaviorTreesPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/SCR_ValidateBehaviorTreesPlugin.c;2|SCR_ValidateBehaviorTreesPlugin}} | SCR_ValidateRepair_Dialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ValidateRepair/SCR_ValidateRepair_Dialog.c;1|SCR_ValidateRepair_Dialog}} | SCR_ValidateRepairLineWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ValidateRepair/SCR_ValidateRepairLineWidgets.c;2|SCR_ValidateRepairLineWidgets}} | SCR_ValidTypeBaseEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_ValidTypeBaseEditorAttribute.c;2|SCR_ValidTypeBaseEditorAttribute}} | SCR_ValidTypeBaseValueListEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_ValidTypeBaseValueListEditorAttribute.c;1|SCR_ValidTypeBaseValueListEditorAttribute}} | SCR_ValuableIntelArsenalRefundEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/ArsenalRefundEffects/SCR_ValuableIntelArsenalRefundEffect.c;1|SCR_ValuableIntelArsenalRefundEffect}} | SCR_ValuableIntelItemHintUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_ValuableIntelItemHintUIInfo.c;1|SCR_ValuableIntelItemHintUIInfo}} | SCR_ValuableIntelXPEffectEntry = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/ArsenalRefundEffects/SCR_ValuableIntelArsenalRefundEffect.c;17|SCR_ValuableIntelXPEffectEntry}} | SCR_ValueAttributeDynamicDescription = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/DynamicDescriptions/SCR_ValueAttributeDynamicDescription.c;4|SCR_ValueAttributeDynamicDescription}} | SCR_VariableSightsFOVInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/Sights/SightsFOVInfo/SCR_VariableSightsFOVInfo.c;1|SCR_VariableSightsFOVInfo}} | SCR_VCSBlamePlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_VCSPlugins.c;361|SCR_VCSBlamePlugin}} | SCR_VCSBlameResourceManagerPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_VCSPlugins.c;331|SCR_VCSBlameResourceManagerPlugin}} | SCR_VCSCommitPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_VCSPlugins.c;371|SCR_VCSCommitPlugin}} | SCR_VCSCommitResourceManagerPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_VCSPlugins.c;341|SCR_VCSCommitResourceManagerPlugin}} | SCR_VCSDiffPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_VCSPlugins.c;351|SCR_VCSDiffPlugin}} | SCR_VCSDiffResourceManagerPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_VCSPlugins.c;321|SCR_VCSDiffResourceManagerPlugin}} | SCR_VCSLogResourceManagerPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_VCSPlugins.c;311|SCR_VCSLogResourceManagerPlugin}} | SCR_VCSLogScriptEditorPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_VCSPlugins.c;301|SCR_VCSLogScriptEditorPlugin}} | SCR_VCSResourceManagerRootPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_VCSPlugins.c;256|SCR_VCSResourceManagerRootPlugin}} | SCR_VCSRootPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_VCSPlugins.c;91|SCR_VCSRootPlugin}} | SCR_VCSScriptEditorRootPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_VCSPlugins.c;225|SCR_VCSScriptEditorRootPlugin}} | SCR_VCSSettingsPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_VCSPlugins.c;2|SCR_VCSSettingsPlugin}} | SCR_VectorSliderEditorAttributeUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Attributes/SCR_VectorSliderEditorAttributeUIComponent.c;3|SCR_VectorSliderEditorAttributeUIComponent}} | SCR_VegetationSoundGroup = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AmbientSoundsComponent/SCR_SoundGroup.c;247|SCR_VegetationSoundGroup}} | SCR_VehicleAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_VehicleAction.c;1|SCR_VehicleAction}} | SCR_VehicleActionBase = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_VehicleActionBase.c;1|SCR_VehicleActionBase}} | SCR_VehicleAltitudeAGLCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Vehicle/SCR_VehicleAltitudeAGLCondition.c;3|SCR_VehicleAltitudeAGLCondition}} | SCR_VehicleBrakeCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Vehicle/SCR_VehicleBrakeCondition.c;3|SCR_VehicleBrakeCondition}} | SCR_VehicleBuoyancyComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_VehicleBuoyancyComponent.c;6|SCR_VehicleBuoyancyComponent}} | SCR_VehicleBuoyancyComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_VehicleBuoyancyComponent.c;1|SCR_VehicleBuoyancyComponentClass}} | SCR_VehicleCameraAimpoint = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_VehicleCameraAimpoint.c;9|SCR_VehicleCameraAimpoint}} | SCR_VehicleCameraAlignment = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_VehicleCameraAlignment.c;9|SCR_VehicleCameraAlignment}} | SCR_VehicleCameraDataComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_VehicleCameraDataComponent.c;7|SCR_VehicleCameraDataComponent}} | SCR_VehicleCameraDataComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_VehicleCameraDataComponent.c;1|SCR_VehicleCameraDataComponentClass}} | SCR_VehicleChatChannel = {{Link|enfusion://ScriptEditor/scripts/Game/Chat/SCR_VehicleChatChannel.c;1|SCR_VehicleChatChannel}} | SCR_VehicleClutchCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Vehicle/SCR_VehicleClutchCondition.c;3|SCR_VehicleClutchCondition}} | SCR_VehicleConditionCheck = {{Link|enfusion://ScriptEditor/scripts/Game/TaskSolver/VehicleCondition/SCR_VehicleConditionCheck.c;1|SCR_VehicleConditionCheck}} | SCR_VehicleConditionManager = {{Link|enfusion://ScriptEditor/scripts/Game/TaskSolver/VehicleCondition/SCR_VehicleConditionManager.c;1|SCR_VehicleConditionManager}} | SCR_VehicleControllerTypeCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Vehicle/SCR_VehicleControllerTypeCondition.c;11|SCR_VehicleControllerTypeCondition}} | SCR_VehicleDamageManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Damage/SCR_VehicleDamageManagerComponent.c;276|SCR_VehicleDamageManagerComponent}} | SCR_VehicleDamageManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Damage/SCR_VehicleDamageManagerComponent.c;25|SCR_VehicleDamageManagerComponentClass}} | SCR_VehicleDamageStateCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Vehicle/SCR_VehicleDamageStateCondition.c;3|SCR_VehicleDamageStateCondition}} | SCR_VehicleDebug = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_VehicleDebug.c;6|SCR_VehicleDebug}} | SCR_VehicleDebugClass = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_VehicleDebug.c;1|SCR_VehicleDebugClass}} | SCR_VehicleDrivingAssistanceCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Vehicle/SCR_VehicleDrivingAssistanceCondition.c;3|SCR_VehicleDrivingAssistanceCondition}} | SCR_VehicleDust = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_VehicleDustComponent.c;8|SCR_VehicleDust}} | SCR_VehicleDustClass = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_VehicleDustComponent.c;3|SCR_VehicleDustClass}} | SCR_VehicleDustPerWheel = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_VehicleDustPerWheelComponent.c;43|SCR_VehicleDustPerWheel}} | SCR_VehicleDustPerWheelClass = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_VehicleDustPerWheelComponent.c;3|SCR_VehicleDustPerWheelClass}} | SCR_VehicleEditableEntityUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/EditableEntities/SCR_VehicleEditableEntityUIComponent.c;1|SCR_VehicleEditableEntityUIComponent}} | SCR_VehicleEngineOnCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Vehicle/SCR_VehicleEngineOnCondition.c;3|SCR_VehicleEngineOnCondition}} | SCR_VehicleFactionAffiliationComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_VehicleFactionAffiliationComponent.c;6|SCR_VehicleFactionAffiliationComponent}} | SCR_VehicleFactionAffiliationComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_VehicleFactionAffiliationComponent.c;1|SCR_VehicleFactionAffiliationComponentClass}} | SCR_VehicleFireDamageEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/DamageEffects/DamageEffectSources/SCR_VehicleFireDamageEffect.c;1|SCR_VehicleFireDamageEffect}} | SCR_VehicleFuelCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Vehicle/SCR_VehicleFuelCondition.c;3|SCR_VehicleFuelCondition}} | SCR_VehicleGearCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Vehicle/SCR_VehicleGearCondition.c;11|SCR_VehicleGearCondition}} | SCR_VehicleGearShiftWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/VehicleInfo/SCR_VehicleGearShiftWidgets.c;4|SCR_VehicleGearShiftWidgets}} | SCR_VehicleHasAnyGroundContactCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Vehicle/SCR_VehicleHasAnyGroundContactCondition.c;3|SCR_VehicleHasAnyGroundContactCondition}} | SCR_VehicleHitZone = {{Link|enfusion://ScriptEditor/scripts/Game/HitZone/SCR_VehicleHitZone.c;1|SCR_VehicleHitZone}} | SCR_VehicleHitZoneGroupName = {{Link|enfusion://ScriptEditor/scripts/Game/Damage/SCR_HitZoneGroupNameHolder.c;44|SCR_VehicleHitZoneGroupName}} | SCR_VehicleInventoryStorageManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_VehicleInventoryStorageManagerComponent.c;6|SCR_VehicleInventoryStorageManagerComponent}} | SCR_VehicleInventoryStorageManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_VehicleInventoryStorageManagerComponent.c;1|SCR_VehicleInventoryStorageManagerComponentClass}} | SCR_VehicleLightsCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Vehicle/SCR_VehicleLightsCondition.c;3|SCR_VehicleLightsCondition}} | SCR_VehicleLockControlsAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_VehicleLockControlsAction.c;1|SCR_VehicleLockControlsAction}} | SCR_VehicleOperabilityCheck = {{Link|enfusion://ScriptEditor/scripts/Game/TaskSolver/VehicleCondition/SCR_VehicleOperabilityCheck.c;1|SCR_VehicleOperabilityCheck}} | SCR_VehiclePerceivableComponent = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_VehiclePerceivableComponent.c;5|SCR_VehiclePerceivableComponent}} | SCR_VehiclePerceivableComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_VehiclePerceivableComponent.c;1|SCR_VehiclePerceivableComponentClass}} | SCR_VehiclePersistentBrakeEngagedCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Vehicle/SCR_VehiclePersistentBrakeEngagedCondition.c;3|SCR_VehiclePersistentBrakeEngagedCondition}} | SCR_VehiclePilotVacancyCheck = {{Link|enfusion://ScriptEditor/scripts/Game/TaskSolver/VehicleCondition/SCR_VehiclePilotVacancyCheck.c;1|SCR_VehiclePilotVacancyCheck}} | SCR_VehicleSalvageEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_VehicleSalvageEditorAttribute.c;1|SCR_VehicleSalvageEditorAttribute}} | SCR_VehicleSalvageSupportStationComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SupportStation/SCR_VehicleSalvageSupportStationComponent.c;6|SCR_VehicleSalvageSupportStationComponent}} | SCR_VehicleSalvageSupportStationComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SupportStation/SCR_VehicleSalvageSupportStationComponent.c;1|SCR_VehicleSalvageSupportStationComponentClass}} | SCR_VehicleSalvageSupportStationUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SupportStations/SCR_VehicleSalvageSupportStationUserAction.c;1|SCR_VehicleSalvageSupportStationUserAction}} | SCR_VehicleSoundComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/VehicleSoundComponent/SCR_VehicleSoundComponent.c;8|SCR_VehicleSoundComponent}} | SCR_VehicleSoundComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/VehicleSoundComponent/SCR_VehicleSoundComponent.c;1|SCR_VehicleSoundComponentClass}} | SCR_VehicleSpawn = {{Link|enfusion://ScriptEditor/scripts/GameCode/Base/SCR_VehicleSpawn.c;1|SCR_VehicleSpawn}} | SCR_VehicleSpawnClass = {{Link|enfusion://ScriptEditor/scripts/GameCode/Base/SCR_VehicleSpawn.c;49|SCR_VehicleSpawnClass}} | SCR_VehicleSpawner = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_VehicleSpawner.c;6|SCR_VehicleSpawner}} | SCR_VehicleSpawnerClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_VehicleSpawner.c;1|SCR_VehicleSpawnerClass}} | SCR_VehicleSpawnProtectionComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_VehicleSpawnProtectionComponent.c;6|SCR_VehicleSpawnProtectionComponent}} | SCR_VehicleSpawnProtectionComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_VehicleSpawnProtectionComponent.c;1|SCR_VehicleSpawnProtectionComponentClass}} | SCR_VehicleSpeedCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Vehicle/SCR_VehicleSpeedCondition.c;3|SCR_VehicleSpeedCondition}} | SCR_VehicleTagData = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Nametags/SCR_VehicleTagData.c;2|SCR_VehicleTagData}} | SCR_VehicleTakeControlsAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_VehicleTakeControlsAction.c;1|SCR_VehicleTakeControlsAction}} | SCR_VehicleThrottleCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Vehicle/SCR_VehicleThrottleCondition.c;3|SCR_VehicleThrottleCondition}} | SCR_VehicleTrackDecal = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_VehicleTrackDecalComponent.c;47|SCR_VehicleTrackDecal}} | SCR_VehicleTrackDecalClass = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_VehicleTrackDecalComponent.c;42|SCR_VehicleTrackDecalClass}} | SCR_VehicleTurboCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Vehicle/SCR_VehicleTurboCondition.c;1|SCR_VehicleTurboCondition}} | SCR_VehicleTurretAzimuthDisplay = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/MortarInfo/SCR_VehicleTurretAzimuthDisplay.c;2|SCR_VehicleTurretAzimuthDisplay}} | SCR_VehicleTurretElevationDisplay = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/MortarInfo/SCR_VehicleTurretElevationDisplay.c;2|SCR_VehicleTurretElevationDisplay}} | SCR_VehicleWeaponActionBase = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_VehicleWeaponActionBase.c;2|SCR_VehicleWeaponActionBase}} | SCR_VehicleWeaponAmmoCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Vehicle/SCR_VehicleWeaponAmmoCondition.c;3|SCR_VehicleWeaponAmmoCondition}} | SCR_VehicleWeaponFireModeSwitchAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_VehicleWeaponFireModeSwitchAction.c;2|SCR_VehicleWeaponFireModeSwitchAction}} | SCR_VehicleWeaponGroupSelectAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_VehicleWeaponGroupSelectAction.c;1|SCR_VehicleWeaponGroupSelectAction}} | SCR_VehicleWeaponSupportStationComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SupportStation/SCR_VehicleWeaponSupportStationComponent.c;6|SCR_VehicleWeaponSupportStationComponent}} | SCR_VehicleWeaponSupportStationComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SupportStation/SCR_VehicleWeaponSupportStationComponent.c;1|SCR_VehicleWeaponSupportStationComponentClass}} | SCR_VerifyItemsPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_VerifyItems.c;2|SCR_VerifyItemsPlugin}} | SCR_VerifySlotEntitiesPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_VerifySlotEntitiesPlugin.c;2|SCR_VerifySlotEntitiesPlugin}} | SCR_VersionMismatchTooltipComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/Common/SCR_VersionMismatchTooltipComponent.c;4|SCR_VersionMismatchTooltipComponent}} | SCR_VideoSettings = {{Link|enfusion://ScriptEditor/scripts/Game/Global/SCR_GameplaySettings.c;96|SCR_VideoSettings}} | SCR_VideoSettingsConsoleSubMenu = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SettingsMenu/SCR_VideoSettingsConsoleSubMenu.c;1|SCR_VideoSettingsConsoleSubMenu}} | SCR_VideoSettingsSubMenu = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SettingsMenu/SCR_VideoSettingsSubMenu.c;22|SCR_VideoSettingsSubMenu}} | SCR_ViewLinkManualCameraComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_ViewLinkManualCameraComponent.c;4|SCR_ViewLinkManualCameraComponent}} | SCR_ViewProfileButtonComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/ButtonComponents/SCR_ViewProfileButtonComponent.c;2|SCR_ViewProfileButtonComponent}} | SCR_VInfoAutoHover = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/VehicleInfo/SCR_VInfoAutoHover.c;1|SCR_VInfoAutoHover}} | SCR_VInfoLandingLights = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/VehicleInfo/SCR_VInfoLandingLights.c;1|SCR_VInfoLandingLights}} | SCR_VInfoParkingBrakeHeli = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/VehicleInfo/SCR_VInfoParkingBrakeHeli.c;1|SCR_VInfoParkingBrakeHeli}} | SCR_VirtualAreaEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Entities/SCR_VirtualAreaEntity.c;6|SCR_VirtualAreaEntity}} | SCR_VirtualAreaEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Entities/SCR_VirtualAreaEntity.c;1|SCR_VirtualAreaEntityClass}} | SCR_VisibleEditableEntityFilter = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/EditableEntityFilters/SCR_VisibleEditableEntityFilter.c;1|SCR_VisibleEditableEntityFilter}} | SCR_VisibleInventoryItemComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_VisibleInventoryItemComponent.c;6|SCR_VisibleInventoryItemComponent}} | SCR_VisibleInventoryItemComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_VisibleInventoryItemComponent.c;1|SCR_VisibleInventoryItemComponentClass}} | SCR_VisualisedBallisticConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/Configs/SCR_VisualisedBallisticConfig.c;1|SCR_VisualisedBallisticConfig}} | SCR_VoiceoverData = {{Link|enfusion://ScriptEditor/scripts/Game/Voiceover/SCR_VoiceoverData.c;2|SCR_VoiceoverData}} | SCR_VoiceoverLine = {{Link|enfusion://ScriptEditor/scripts/Game/Voiceover/SCR_VoiceoverData.c;98|SCR_VoiceoverLine}} | SCR_VoiceoverLineStandalone = {{Link|enfusion://ScriptEditor/scripts/Game/Voiceover/SCR_VoiceoverData.c;184|SCR_VoiceoverLineStandalone}} | SCR_VoiceoverSequence = {{Link|enfusion://ScriptEditor/scripts/Game/Voiceover/SCR_VoiceoverData.c;69|SCR_VoiceoverSequence}} | SCR_VoiceoverSubtitles = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_VoiceoverSubtitles.c;2|SCR_VoiceoverSubtitles}} | SCR_VoiceoverSystem = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/SCR_VoiceoverSystem.c;2|SCR_VoiceoverSystem}} | SCR_VoiceoverSystemData = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/States/SCR_VoiceoverSystemSerializer.c;1|SCR_VoiceoverSystemData}} | SCR_VoiceoverSystemSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/States/SCR_VoiceoverSystemSerializer.c;5|SCR_VoiceoverSystemSerializer}} | SCR_VoiceoverSystemSerializerContext = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/States/SCR_VoiceoverSystemSerializer.c;166|SCR_VoiceoverSystemSerializerContext}} | SCR_VoiceoverSystemSnapshot = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/SCR_VoiceoverSystem.c;817|SCR_VoiceoverSystemSnapshot}} | SCR_VolumeDataProviderComponent = {{Link|enfusion://ScriptEditor/scripts/GameCode/Components/SCR_VolumeDataProviderComponent.c;11|SCR_VolumeDataProviderComponent}} | SCR_VolumeDataProviderComponentClass = {{Link|enfusion://ScriptEditor/scripts/GameCode/Components/SCR_VolumeDataProviderComponent.c;1|SCR_VolumeDataProviderComponentClass}} | SCR_VONAutoTune = {{Link|enfusion://ScriptEditor/scripts/Game/VON/SCR_VONAutoTune.c;1|SCR_VONAutoTune}} | SCR_VONAutoTuneChannelConfig = {{Link|enfusion://ScriptEditor/scripts/Game/VON/SCR_VONAutoTuneConfig.c;51|SCR_VONAutoTuneChannelConfig}} | SCR_VONAutoTuneConfig = {{Link|enfusion://ScriptEditor/scripts/Game/VON/SCR_VONAutoTuneConfig.c;21|SCR_VONAutoTuneConfig}} | SCR_VONAutoTuneIdentityConfig = {{Link|enfusion://ScriptEditor/scripts/Game/VON/SCR_VONAutoTuneConfig.c;28|SCR_VONAutoTuneIdentityConfig}} | SCR_VONAutoTuneRoleConfig = {{Link|enfusion://ScriptEditor/scripts/Game/VON/SCR_VONAutoTuneConfig.c;41|SCR_VONAutoTuneRoleConfig}} | SCR_VoNComponent = {{Link|enfusion://ScriptEditor/scripts/GameCode/Network/SCR_VoNComponent.c;6|SCR_VoNComponent}} | SCR_VoNComponentClass = {{Link|enfusion://ScriptEditor/scripts/GameCode/Network/SCR_VoNComponent.c;2|SCR_VoNComponentClass}} | SCR_VONController = {{Link|enfusion://ScriptEditor/scripts/Game/VON/SCR_VONController.c;25|SCR_VONController}} | SCR_VONControllerClass = {{Link|enfusion://ScriptEditor/scripts/Game/VON/SCR_VONController.c;20|SCR_VONControllerClass}} | SCR_VonDisplay = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_VonDisplay.c;52|SCR_VonDisplay}} | SCR_VONEntry = {{Link|enfusion://ScriptEditor/scripts/Game/VON/SCR_VONEntry.c;3|SCR_VONEntry}} | SCR_VONEntryComponent = {{Link|enfusion://ScriptEditor/scripts/Game/VON/SCR_VONEntryComponent.c;3|SCR_VONEntryComponent}} | SCR_VONEntryRadio = {{Link|enfusion://ScriptEditor/scripts/Game/VON/SCR_VONEntryRadio.c;3|SCR_VONEntryRadio}} | SCR_VONMenu = {{Link|enfusion://ScriptEditor/scripts/Game/VON/SCR_VONMenu.c;2|SCR_VONMenu}} | SCR_VONMenuActiveActionCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/SCR_VONMenuActiveActionCondition.c;2|SCR_VONMenuActiveActionCondition}} | SCR_VoNOverlay_ElementWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_VoNOverlay_ElementWidgets.c;3|SCR_VoNOverlay_ElementWidgets}} | SCR_VONPreviewAttributes = {{Link|enfusion://ScriptEditor/scripts/Game/VON/SCR_VONPreviewAttributes.c;3|SCR_VONPreviewAttributes}} | SCR_VONRadialDisplay = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SelectionMenu/SCR_VONRadialDisplay.c;20|SCR_VONRadialDisplay}} | SCR_VoteGameMasterCondition = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Hints/HintConditions/SCR_VoteHintCondition.c;1|SCR_VoteGameMasterCondition}} | SCR_VoterComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Voting/SCR_VoterComponent.c;6|SCR_VoterComponent}} | SCR_VoterComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Voting/SCR_VoterComponent.c;1|SCR_VoterComponentClass}} | SCR_VotingAdmin = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Voting/SCR_VotingAdmin.c;1|SCR_VotingAdmin}} | SCR_VotingAutoKick = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Voting/SCR_VotingAutoKick.c;2|SCR_VotingAutoKick}} | SCR_VotingBase = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Voting/SCR_VotingBase.c;4|SCR_VotingBase}} | SCR_VotingEditorIn = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Voting/SCR_VotingEditor.c;1|SCR_VotingEditorIn}} | SCR_VotingEditorOut = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Voting/SCR_VotingEditor.c;84|SCR_VotingEditorOut}} | SCR_VotingEditorWithdraw = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Voting/SCR_VotingEditor.c;144|SCR_VotingEditorWithdraw}} | SCR_VotingElection = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Voting/SCR_VotingBase.c;592|SCR_VotingElection}} | SCR_VotingFactionCommander = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/SCR_VotingFactionCommander.c;1|SCR_VotingFactionCommander}} | SCR_VotingFactionCommanderWithdraw = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/SCR_VotingFactionCommander.c;150|SCR_VotingFactionCommanderWithdraw}} | SCR_VotingGroupLeader = {{Link|enfusion://ScriptEditor/scripts/Game/FactionCommander/SCR_VotingGroupLeader.c;1|SCR_VotingGroupLeader}} | SCR_VotingKick = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Voting/SCR_VotingKick.c;1|SCR_VotingKick}} | SCR_VotingManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Voting/SCR_VotingManagerComponent.c;22|SCR_VotingManagerComponent}} | SCR_VotingManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Voting/SCR_VotingManagerComponent.c;17|SCR_VotingManagerComponentClass}} | SCR_VotingReferendum = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Voting/SCR_VotingBase.c;451|SCR_VotingReferendum}} | SCR_VotingResultData = {{Link|enfusion://ScriptEditor/scripts/Game/DataCollection/ApplicationData/SCR_AnalyticsApplicationData.c;56|SCR_VotingResultData}} | SCR_VotingStickyNotificationUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/Notification/SCR_VotingStickyNotificationUIComponent.c;1|SCR_VotingStickyNotificationUIComponent}} | SCR_VotingUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/SCR_VotingUIInfo.c;1|SCR_VotingUIInfo}} | SCR_WallGroup = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/WallGenerator/SCR_WallGroup.c;5|SCR_WallGroup}} | SCR_WallGroupContainer = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/WallGenerator/SCR_WallGroupContainer.c;3|SCR_WallGroupContainer}} | SCR_WallPair = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/WallGenerator/SCR_WallPair.c;1|SCR_WallPair}} | SCR_WarCrimesPanelUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/CareerProfile/SCR_WarCrimesPanelUI.c;2|SCR_WarCrimesPanelUI}} | SCR_WaterBodyPropsConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Map/SCR_MapPropsConfig.c;417|SCR_WaterBodyPropsConfig}} | SCR_WatermarkComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_WatermarkComponent.c;1|SCR_WatermarkComponent}} | SCR_WaveRespawnTimerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_WaveRespawnTimerComponent.c;10|SCR_WaveRespawnTimerComponent}} | SCR_WaveRespawnTimerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_WaveRespawnTimerComponent.c;1|SCR_WaveRespawnTimerComponentClass}} | SCR_Waypoint = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Waypoint/SCR_Waypoint.c;2|SCR_Waypoint}} | SCR_WaypointAreaMeshComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AreaMesh/SCR_WaypointAreaMeshComponent.c;6|SCR_WaypointAreaMeshComponent}} | SCR_WaypointAreaMeshComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AreaMesh/SCR_WaypointAreaMeshComponent.c;1|SCR_WaypointAreaMeshComponentClass}} | SCR_WaypointBaseCommandAction = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Actions/CommandActions/SCR_WaypointBaseCommandAction.c;1|SCR_WaypointBaseCommandAction}} | SCR_WaypointDisplay = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Waypoint/SCR_WaypointDisplay.c;4|SCR_WaypointDisplay}} | SCR_WaypointGroupCommand = {{Link|enfusion://ScriptEditor/scripts/Game/Commanding/Commands/SCR_WaypointGroupCommand.c;2|SCR_WaypointGroupCommand}} | SCR_WaypointIndexTooltipDetail = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_WaypointIndexTooltipDetail.c;1|SCR_WaypointIndexTooltipDetail}} | SCR_WaypointLinesEditorUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/EditableEntityFilters/SCR_WaypointLinesEditorUIComponent.c;3|SCR_WaypointLinesEditorUIComponent}} | SCR_WaypointPrefabLocation = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/SCR_AIGroup.c;2918|SCR_WaypointPrefabLocation}} | SCR_WaypointSet = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkWaypointSet.c;17|SCR_WaypointSet}} | SCR_WBAfterWorldUpdateTest = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Debug/SCR_WBAfterWorldUpdateTest.c;6|SCR_WBAfterWorldUpdateTest}} | SCR_WBAfterWorldUpdateTestClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Debug/SCR_WBAfterWorldUpdateTest.c;1|SCR_WBAfterWorldUpdateTestClass}} | SCR_WeaponAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_WeaponAction.c;6|SCR_WeaponAction}} | SCR_WeaponAmmoCountCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Weapon/SCR_WeaponAmmoCountCondition.c;3|SCR_WeaponAmmoCountCondition}} | SCR_WeaponAttachmentAttributes = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_WeaponAttachmentAttributes.c;1|SCR_WeaponAttachmentAttributes}} | SCR_WeaponAttachmentBayonetAttributes = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_WeaponAttachmentBayonetAttributes.c;1|SCR_WeaponAttachmentBayonetAttributes}} | SCR_WeaponAttachmentObstructionAttributes = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_WeaponAttachmentObstructionAttributes.c;1|SCR_WeaponAttachmentObstructionAttributes}} | SCR_WeaponAttachmentsStorageComponent = {{Link|enfusion://ScriptEditor/scripts/GameCode/Components/InventorySystem/WeaponAttachmentsStorageComponent.c;5|SCR_WeaponAttachmentsStorageComponent}} | SCR_WeaponAttachmentsStorageComponentClass = {{Link|enfusion://ScriptEditor/scripts/GameCode/Components/InventorySystem/WeaponAttachmentsStorageComponent.c;1|SCR_WeaponAttachmentsStorageComponentClass}} | SCR_WeaponAttachmentsStorageComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Components/Weapon/SCR_WeaponAttachmentsStorageComponentSerializer.c;25|SCR_WeaponAttachmentsStorageComponentSerializer}} | SCR_WeaponAttachmentSuppressorAttributes = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/SCR_WeaponAttachmentSuppressorAttributes.c;1|SCR_WeaponAttachmentSuppressorAttributes}} | SCR_WeaponBipodCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Weapon/SCR_WeaponBipodCondition.c;3|SCR_WeaponBipodCondition}} | SCR_WeaponBlastComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/SCR_WeaponBlastComponent.c;23|SCR_WeaponBlastComponent}} | SCR_WeaponBlastComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/SCR_WeaponBlastComponent.c;1|SCR_WeaponBlastComponentClass}} | SCR_WeaponBlastEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/SCR_WeaponBlastEffect.c;1|SCR_WeaponBlastEffect}} | SCR_WeaponChangeSwitchOpticsCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Weapon/SCR_WeaponChangeSwitchOpticsCondition.c;1|SCR_WeaponChangeSwitchOpticsCondition}} | SCR_WeaponComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Flares/SCR_WeaponComponent.c;9|SCR_WeaponComponent}} | SCR_WeaponComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Flares/SCR_WeaponComponent.c;1|SCR_WeaponComponentClass}} | SCR_WeaponDeployablePart = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_WeaponDeployablePart.c;1|SCR_WeaponDeployablePart}} | SCR_WeaponFiremodeCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Weapon/SCR_WeaponFireModeCondition.c;2|SCR_WeaponFiremodeCondition}} | SCR_WeaponFiremodeCountCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Weapon/SCR_WeaponFiremodeCountCondition.c;3|SCR_WeaponFiremodeCountCondition}} | SCR_WeaponGroup = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Weapons/SCR_WeaponsGroup.c;1|SCR_WeaponGroup}} | SCR_WeaponHasMagazineCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Weapon/SCR_WeaponHasMagazineCondition.c;3|SCR_WeaponHasMagazineCondition}} | SCR_WeaponInfo = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/WeaponInfo/SCR_WeaponInfo.c;45|SCR_WeaponInfo}} | SCR_WeaponInfo_MultiWeaponTurret = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/WeaponInfo/SCR_WeaponInfo_MultiWeaponTurret.c;1|SCR_WeaponInfo_MultiWeaponTurret}} | SCR_WeaponInfo_MultiWeaponTurretWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/WeaponInfo/SCR_WeaponInfo_MultiWeaponTurretWidgets.c;3|SCR_WeaponInfo_MultiWeaponTurretWidgets}} | SCR_WeaponInfoVehicle = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/WeaponInfo/SCR_WeaponInfoVehicle.c;1|SCR_WeaponInfoVehicle}} | SCR_WeaponInfoWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/WeaponInfo/SCR_WeaponInfoWidgets.c;3|SCR_WeaponInfoWidgets}} | SCR_WeaponIsRaisedCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Weapon/SCR_WeaponIsRaisedCondition.c;2|SCR_WeaponIsRaisedCondition}} | SCR_WeaponLib = {{Link|enfusion://ScriptEditor/scripts/Game/Global/WeaponLib.c;6|SCR_WeaponLib}} | SCR_WeaponLoadAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/SCR_WeaponLoadAction.c;1|SCR_WeaponLoadAction}} | SCR_WeaponLoadoutData = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Loadout/SCR_PlayerLoadoutData.c;1|SCR_WeaponLoadoutData}} | SCR_WeaponMagazineCountCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Weapon/SCR_WeaponMagazineCountCondition.c;3|SCR_WeaponMagazineCountCondition}} | SCR_WeaponManipulationCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Weapon/SCR_WeaponManipulation.c;1|SCR_WeaponManipulationCondition}} | SCR_WeaponMuzzleChamberedCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Weapon/SCR_WeaponMuzzleChamberedCondition.c;2|SCR_WeaponMuzzleChamberedCondition}} | SCR_WeaponQuickSlotAvailableCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Character/SCR_WeaponQuickSlotAvailableCondition.c;1|SCR_WeaponQuickSlotAvailableCondition}} | SCR_WeaponRackEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_WeaponRackEntity.c;7|SCR_WeaponRackEntity}} | SCR_WeaponRackEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_WeaponRackEntity.c;1|SCR_WeaponRackEntityClass}} | SCR_WeaponRackSlotEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_WeaponRackSlotEntity.c;7|SCR_WeaponRackSlotEntity}} | SCR_WeaponRackSlotEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_WeaponRackSlotEntity.c;1|SCR_WeaponRackSlotEntityClass}} | SCR_WeaponRackSlotInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_WeaponRackSlotInfo.c;1|SCR_WeaponRackSlotInfo}} | SCR_WeaponSelectionMenu = {{Link|enfusion://ScriptEditor/scripts/Game/UI/WeaponSelectionMenu.c;4|SCR_WeaponSelectionMenu}} | SCR_WeaponSightHasZeroingCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Weapon/SCR_WeaponSightsHasZeroing.c;2|SCR_WeaponSightHasZeroingCondition}} | SCR_WeaponState = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/WeaponInfo/SCR_WeaponState.c;2|SCR_WeaponState}} | SCR_WeaponStatsManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/SCR_WeaponStatsManagerComponent.c;5|SCR_WeaponStatsManagerComponent}} | SCR_WeaponStatsManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/SCR_WeaponStatsManagerComponent.c;1|SCR_WeaponStatsManagerComponentClass}} | SCR_WeaponsTooltipDetail = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Tooltips/Tooltips/Details/SCR_WeaponsTooltipDetail.c;1|SCR_WeaponsTooltipDetail}} | SCR_WeaponSwitchAvailableCondition = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/AvailableActions/Conditions/Game/Character/SCR_WeaponSwitchAvailableCondition.c;1|SCR_WeaponSwitchAvailableCondition}} | SCR_WeaponSwitchingBaseUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/WeaponSwitching/SCR_WeaponSwitchingBaseUI.c;1|SCR_WeaponSwitchingBaseUI}} | SCR_WeaponSwitchingHints = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/WeaponSwitching/SCR_WeaponSwitchingHints.c;3|SCR_WeaponSwitchingHints}} | SCR_WeatherForecastUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_WeatherForecastUIComponent.c;1|SCR_WeatherForecastUIComponent}} | SCR_WeatherInstantEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_WeatherInstantEditorAttribute.c;4|SCR_WeatherInstantEditorAttribute}} | SCR_WeatherInstantTransitionTimeEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_WeatherInstantTransitionTimeEditorAttribute.c;6|SCR_WeatherInstantTransitionTimeEditorAttribute}} | SCR_WeatherState = {{Link|enfusion://ScriptEditor/scripts/Game/TimeAndWeather/SCR_WeatherState.c;1|SCR_WeatherState}} | SCR_WeatherUseAdvancedEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_WeatherUseAdvancedEditorAttribute.c;2|SCR_WeatherUseAdvancedEditorAttribute}} | SCR_WeightedArray = {{Link|enfusion://ScriptEditor/scripts/Game/Global/SCR_WeightedArray.c;1|SCR_WeightedArray}} | SCR_WeightedListArsenalRefundEffect = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/ArsenalRefundEffects/SCR_WeightedListArsenalRefundEffect.c;2|SCR_WeightedListArsenalRefundEffect}} | SCR_WelcomeScreenBaseContent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_WelcomeScreenComponent.c;67|SCR_WelcomeScreenBaseContent}} | SCR_WelcomeScreenComponent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_WelcomeScreenComponent.c;7|SCR_WelcomeScreenComponent}} | SCR_WelcomeScreenComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_WelcomeScreenComponent.c;1|SCR_WelcomeScreenComponentClass}} | SCR_WelcomeScreenDynamicObjectivesContent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_WelcomeScreenComponent.c;264|SCR_WelcomeScreenDynamicObjectivesContent}} | SCR_WelcomeScreenDynamicTaskFaction = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_WelcomeScreenComponent.c;637|SCR_WelcomeScreenDynamicTaskFaction}} | SCR_WelcomeScreenFactionContent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_WelcomeScreenComponent.c;973|SCR_WelcomeScreenFactionContent}} | SCR_WelcomeScreenFocusWidgetComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_WelcomeScreenFocusWidgetComponent.c;3|SCR_WelcomeScreenFocusWidgetComponent}} | SCR_WelcomeScreenIntroduction = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_WelcomeScreenComponent.c;938|SCR_WelcomeScreenIntroduction}} | SCR_WelcomeScreenIntroductionContent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_WelcomeScreenComponent.c;679|SCR_WelcomeScreenIntroductionContent}} | SCR_WelcomeScreenMenu = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/DeployMenu/SCR_WelcomeScreenMenu.c;3|SCR_WelcomeScreenMenu}} | SCR_WelcomeScreenMissionObjectives = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_WelcomeScreenComponent.c;227|SCR_WelcomeScreenMissionObjectives}} | SCR_WelcomeScreenMissionObjectivesContent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_WelcomeScreenComponent.c;107|SCR_WelcomeScreenMissionObjectivesContent}} | SCR_WelcomeScreenThreeHorizontalColumns = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_WelcomeScreenComponent.c;12|SCR_WelcomeScreenThreeHorizontalColumns}} | SCR_WheeledDamageManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Damage/SCR_WheeledDamageManagerComponent.c;5|SCR_WheeledDamageManagerComponent}} | SCR_WheeledDamageManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Damage/SCR_WheeledDamageManagerComponent.c;1|SCR_WheeledDamageManagerComponentClass}} | SCR_WheelHitZone = {{Link|enfusion://ScriptEditor/scripts/Game/HitZone/SCR_WheelHitZone.c;9|SCR_WheelHitZone}} | SCR_WheelHitZoneInfo = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/VehicleInfo/SCR_WheelHitZoneInfo.c;1|SCR_WheelHitZoneInfo}} | SCR_WheelSlotComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_WheelSlotComponent.c;7|SCR_WheelSlotComponent}} | SCR_WheelSlotComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_WheelSlotComponent.c;3|SCR_WheelSlotComponentClass}} | SCR_WheelSlotInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_WheelSlotInfo.c;1|SCR_WheelSlotInfo}} | SCR_WidgetEditFormat = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ConfigurableWidgetEntries/SCR_WidgetEditFormat.c;6|SCR_WidgetEditFormat}} | SCR_WidgetEditFormatIP = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ConfigurableWidgetEntries/SCR_WidgetEditFormat.c;123|SCR_WidgetEditFormatIP}} | SCR_WidgetEditFormatName = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ConfigurableWidgetEntries/SCR_WidgetEditFormat.c;276|SCR_WidgetEditFormatName}} | SCR_WidgetEditFormatNumberRange = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ConfigurableWidgetEntries/SCR_WidgetEditFormat.c;79|SCR_WidgetEditFormatNumberRange}} | SCR_WidgetEditFormatRange = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ConfigurableWidgetEntries/SCR_WidgetEditFormat.c;37|SCR_WidgetEditFormatRange}} | SCR_WidgetExportRule = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_WidgetExportRule.c;5|SCR_WidgetExportRule}} | SCR_WidgetExportRuleRoot = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_WidgetExportRule.c;82|SCR_WidgetExportRuleRoot}} | SCR_WidgetHelper = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_WidgetHelper.c;1|SCR_WidgetHelper}} | SCR_WidgetHighlightUIComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_WidgetHighlightUIComponent.c;1|SCR_WidgetHighlightUIComponent}} | SCR_WidgetHintComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_EditBox/SCR_WidgetHintComponent.c;6|SCR_WidgetHintComponent}} | SCR_WidgetListEntry = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ConfigurableWidgetEntries/SCR_WidgetListEntry.c;114|SCR_WidgetListEntry}} | SCR_WidgetListEntryBoolSpinBox = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ConfigurableWidgetEntries/SCR_WidgetListEntry.c;934|SCR_WidgetListEntryBoolSpinBox}} | SCR_WidgetListEntryCheckBox = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ConfigurableWidgetEntries/SCR_WidgetListEntry.c;712|SCR_WidgetListEntryCheckBox}} | SCR_WidgetListEntryCheckList = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ConfigurableWidgetEntries/SCR_WidgetListEntryCheckList.c;1|SCR_WidgetListEntryCheckList}} | SCR_WidgetListEntryCustomTitle = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ConfigurableWidgetEntries/SCR_WidgetListEntry.c;11|SCR_WidgetListEntryCustomTitle}} | SCR_WidgetListEntryEditBox = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ConfigurableWidgetEntries/SCR_WidgetListEntry.c;411|SCR_WidgetListEntryEditBox}} | SCR_WidgetListEntryEditBoxIP = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ConfigurableWidgetEntries/SCR_WidgetListEntry.c;682|SCR_WidgetListEntryEditBoxIP}} | SCR_WidgetListEntryGroup = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ConfigurableWidgetEntries/SCR_WidgetListEntry.c;314|SCR_WidgetListEntryGroup}} | SCR_WidgetListEntryLabel = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ConfigurableWidgetEntries/SCR_WidgetListEntry.c;377|SCR_WidgetListEntryLabel}} | SCR_WidgetListEntryMessage = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ConfigurableWidgetEntries/SCR_WidgetListEntry.c;334|SCR_WidgetListEntryMessage}} | SCR_WidgetListEntryPublishImages = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ConfigurableWidgetEntries/SCR_WidgetListEntryPublishImages.c;7|SCR_WidgetListEntryPublishImages}} | SCR_WidgetListEntryResourcePicker = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ConfigurableWidgetEntries/SCR_WidgetListEntryResourcePicker.c;1|SCR_WidgetListEntryResourcePicker}} | SCR_WidgetListEntrySelection = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ConfigurableWidgetEntries/SCR_WidgetListEntry.c;778|SCR_WidgetListEntrySelection}} | SCR_WidgetListEntrySelectionList = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ConfigurableWidgetEntries/SCR_WidgetListEntrySelectionList.c;4|SCR_WidgetListEntrySelectionList}} | SCR_WidgetListEntrySlider = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ConfigurableWidgetEntries/SCR_WidgetListEntry.c;997|SCR_WidgetListEntrySlider}} | SCR_WidgetListEntrySpinBox = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ConfigurableWidgetEntries/SCR_WidgetListEntry.c;899|SCR_WidgetListEntrySpinBox}} | SCR_WidgetTools = {{Link|enfusion://ScriptEditor/scripts/Game/Global/SCR_WidgetTools.c;1|SCR_WidgetTools}} | SCR_WindAutomaticEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_WindAutomaticEditorAttribute.c;2|SCR_WindAutomaticEditorAttribute}} | SCR_WindCurveDef = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AmbientSoundsComponent/SCR_WindCurveDef.c;11|SCR_WindCurveDef}} | SCR_WindCurveDefConfig = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AmbientSoundsComponent/SCR_WindCurveDefConfig.c;2|SCR_WindCurveDefConfig}} | SCR_WindDirectionEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_WindDirectionEditorAttribute.c;4|SCR_WindDirectionEditorAttribute}} | SCR_WindDirectionInfo = {{Link|enfusion://ScriptEditor/scripts/GameCode/World/TimeAndWeatherManagerEntity.c;1103|SCR_WindDirectionInfo}} | SCR_WindOverrideEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_WindOverrideEditorAttribute.c;5|SCR_WindOverrideEditorAttribute}} | SCR_WindowHitZone = {{Link|enfusion://ScriptEditor/scripts/Game/HitZone/SCR_WindowHitZone.c;1|SCR_WindowHitZone}} | SCR_WindSpeedEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_WindSpeedEditorAttribute.c;2|SCR_WindSpeedEditorAttribute}} | SCR_WLibComponentBase = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_WLibComponentBase.c;8|SCR_WLibComponentBase}} | SCR_WLibItemData = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_WLibItemData.c;9|SCR_WLibItemData}} | SCR_WLibProgressBarComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_WLibProgressBar.c;6|SCR_WLibProgressBarComponent}} | SCR_WorkbenchHelper = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/Helpers/SCR_WorkbenchHelper.c;1|SCR_WorkbenchHelper}} | SCR_WorkshopAddonBarComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/AddonManager/SCR_WorkshopAddonBarComponent.c;1|SCR_WorkshopAddonBarComponent}} | SCR_WorkshopAddonBarWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/AddonManager/SCR_WorkshopAddonBarWidgets.c;1|SCR_WorkshopAddonBarWidgets}} | SCR_WorkshopAddonLineComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/AddonManager/SCR_WorkshopAddonLineComponent.c;5|SCR_WorkshopAddonLineComponent}} | SCR_WorkshopAddonManagerDialogs = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/AddonManager/AddonManagerDialogs.c;4|SCR_WorkshopAddonManagerDialogs}} | SCR_WorkshopAddonManagerPresetStorage = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/AddonManager/SCR_WorkshopAddonManagerStorage.c;110|SCR_WorkshopAddonManagerPresetStorage}} | SCR_WorkshopAddonPreset = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/AddonManager/SCR_WorkshopAddonManagerStorage.c;45|SCR_WorkshopAddonPreset}} | SCR_WorkshopAddonPresetAddonMeta = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/AddonManager/SCR_WorkshopAddonManagerStorage.c;2|SCR_WorkshopAddonPresetAddonMeta}} | SCR_WorkshopAddonPresetListItemData = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/AddonManager/SCR_WorkshopAddonPresetListItemData.c;2|SCR_WorkshopAddonPresetListItemData}} | SCR_WorkshopDialogCopyToClipboard = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/AddonManager/AddonManagerDialogs.c;11|SCR_WorkshopDialogCopyToClipboard}} | SCR_WorkshopDialogs = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/Common/Dialogs/SCR_WorkshopDialogs.c;6|SCR_WorkshopDialogs}} | SCR_WorkshopDownloadSequence = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/Common/SCR_WorkshopDownloadSequence.c;12|SCR_WorkshopDownloadSequence}} | SCR_WorkshopErrorDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/AddonManager/AddonManagerDialogs.c;30|SCR_WorkshopErrorDialog}} | SCR_WorkshopErrorPresetLoadDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/AddonManager/AddonManagerDialogs.c;70|SCR_WorkshopErrorPresetLoadDialog}} | SCR_WorkshopItem = {{Link|enfusion://ScriptEditor/scripts/Game/Workshop/SCR_WorkshopItem.c;27|SCR_WorkshopItem}} | SCR_WorkshopItemAction = {{Link|enfusion://ScriptEditor/scripts/Game/Workshop/SCR_WorkshopItemAction.c;16|SCR_WorkshopItemAction}} | SCR_WorkshopItemActionAddAuthorBlock = {{Link|enfusion://ScriptEditor/scripts/Game/Workshop/WorkshopItemActions.c;209|SCR_WorkshopItemActionAddAuthorBlock}} | SCR_WorkshopItemActionCancelReport = {{Link|enfusion://ScriptEditor/scripts/Game/Workshop/WorkshopItemActions.c;198|SCR_WorkshopItemActionCancelReport}} | SCR_WorkshopItemActionComposite = {{Link|enfusion://ScriptEditor/scripts/Game/Workshop/SCR_WorkshopItemAction.c;420|SCR_WorkshopItemActionComposite}} | SCR_WorkshopItemActionDownload = {{Link|enfusion://ScriptEditor/scripts/Game/Workshop/Actions/SCR_WorkshopItemActionDownload.c;9|SCR_WorkshopItemActionDownload}} | SCR_WorkshopItemActionDownloadDependenciesLatest = {{Link|enfusion://ScriptEditor/scripts/Game/Workshop/WorkshopItemActions.c;7|SCR_WorkshopItemActionDownloadDependenciesLatest}} | SCR_WorkshopItemActionRemoveAuthorBlock = {{Link|enfusion://ScriptEditor/scripts/Game/Workshop/WorkshopItemActions.c;219|SCR_WorkshopItemActionRemoveAuthorBlock}} | SCR_WorkshopItemActionReport = {{Link|enfusion://ScriptEditor/scripts/Game/Workshop/WorkshopItemActions.c;174|SCR_WorkshopItemActionReport}} | SCR_WorkshopItemActionReportBase = {{Link|enfusion://ScriptEditor/scripts/Game/Workshop/WorkshopItemActions.c;126|SCR_WorkshopItemActionReportBase}} | SCR_WorkshopItemBackendImageComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_BackendImageComponent.c;369|SCR_WorkshopItemBackendImageComponent}} | SCR_WorkshopItemCallback_AskDetails = {{Link|enfusion://ScriptEditor/scripts/Game/Network/SCR_OnlineServiceWorkshop.c;20|SCR_WorkshopItemCallback_AskDetails}} | SCR_WorkshopItemCallback_DownloadImage = {{Link|enfusion://ScriptEditor/scripts/Game/Network/SCR_OnlineServiceWorkshop.c;33|SCR_WorkshopItemCallback_DownloadImage}} | SCR_WorkshopListAddonsSubmenu = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/AddonManager/SCR_WorkshopListAddonsSubmenu.c;1|SCR_WorkshopListAddonsSubmenu}} | SCR_WorkshopPresetConfirmDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/AddonManager/AddonManagerDialogs.c;42|SCR_WorkshopPresetConfirmDialog}} | SCR_WorkshopSettings = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/Common/SCR_WorkshopSettings.c;5|SCR_WorkshopSettings}} | SCR_WorkshopTileWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/MainMenu/SCR_WorkshopTileWidgets.c;3|SCR_WorkshopTileWidgets}} | SCR_WorkshopUiCommon = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/Common/SCR_WorkshopUiCommon.c;5|SCR_WorkshopUiCommon}} | SCR_WorldEditorToolHelper = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/Helpers/SCR_WorldEditorToolHelper.c;2|SCR_WorldEditorToolHelper}} | SCR_WorldEntitiesStatisticsPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_WorldEntitiesStatisticsPlugin.c;2|SCR_WorldEntitiesStatisticsPlugin}} | SCR_WorldEntitiesStatisticsPlugin_Item = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_WorldEntitiesStatisticsPlugin.c;791|SCR_WorldEntitiesStatisticsPlugin_Item}} | SCR_WorldEntitiesStatisticsPlugin_Report = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_WorldEntitiesStatisticsPlugin.c;764|SCR_WorldEntitiesStatisticsPlugin_Report}} | SCR_WorldEntitiesStatisticsPlugin_Report_World = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_WorldEntitiesStatisticsPlugin.c;756|SCR_WorldEntitiesStatisticsPlugin_Report_World}} | SCR_WorldEntityDelegateEditorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_WorldEntityDelegateEditorComponent.c;13|SCR_WorldEntityDelegateEditorComponent}} | SCR_WorldEntityDelegateEditorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_WorldEntityDelegateEditorComponent.c;1|SCR_WorldEntityDelegateEditorComponentClass}} | SCR_WorldFilesHelper = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/Helpers/SCR_WorldFilesHelper.c;2|SCR_WorldFilesHelper}} | SCR_WorldMapExportTool = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_WorldDataExportTool.c;14|SCR_WorldMapExportTool}} | SCR_WorldSetupPlugin_Entities = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/WorldSetup/SCR_WorldSetupPlugin_Entities.c;2|SCR_WorldSetupPlugin_Entities}} | SCR_WorldSetupPlugin_GenericWorldEntity = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/WorldSetup/SCR_WorldSetupPlugin_GenericWorldEntity.c;4|SCR_WorldSetupPlugin_GenericWorldEntity}} | SCR_WorldSetupPluginBasePlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/WorldSetup/SCR_WorldSetupPluginBase.c;2|SCR_WorldSetupPluginBasePlugin}} | SCR_WorldSetupPluginConfig = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/WorldSetup/SCR_WorldSetupPluginConfig.c;2|SCR_WorldSetupPluginConfig}} | SCR_WorldSetupPluginConfig_Entity = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/WorldSetup/SCR_WorldSetupPluginConfig.c;9|SCR_WorldSetupPluginConfig_Entity}} | SCR_WorldSetupPluginConfig_EntitySourceKeyValue = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/WorldSetup/SCR_WorldSetupPluginConfig.c;31|SCR_WorldSetupPluginConfig_EntitySourceKeyValue}} | SCR_WorldTools = {{Link|enfusion://ScriptEditor/scripts/Game/Global/SCR_WorldTools.c;1|SCR_WorldTools}} | SCR_WorldWindowDataDropPlugin = {{Link|enfusion://ScriptEditor/scripts/Workbench/WorldEditor/SCR_WorldWindowDataDropPlugin.c;2|SCR_WorldWindowDataDropPlugin}} | SCR_WrapEntitiesPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_WrapEntitiesPlugin.c;2|SCR_WrapEntitiesPlugin}} | SCR_WristwatchComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_WristwatchComponent.c;47|SCR_WristwatchComponent}} | SCR_WristwatchComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Gadgets/SCR_WristwatchComponent.c;2|SCR_WristwatchComponentClass}} | SCR_XPHandlerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_XPHandlerComponent.c;5|SCR_XPHandlerComponent}} | SCR_XPHandlerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_XPHandlerComponent.c;1|SCR_XPHandlerComponentClass}} | SCR_XPInfoDisplay = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_XPInfoDisplay.c;2|SCR_XPInfoDisplay}} | SCR_XPInfoDisplayInventory = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_XPInfoDisplayInventory.c;1|SCR_XPInfoDisplayInventory}} | SCR_XPInfoWidgetData = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_XPInfoDisplay.c;289|SCR_XPInfoWidgetData}} | SCR_XPRewardInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignXPRewardList.c;3|SCR_XPRewardInfo}} | SCR_XPRewardList = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignXPRewardList.c;53|SCR_XPRewardList}} | SCR_ZoneRestrictionAreaMeshComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AreaMesh/SCR_ZoneRestrictionAreaMeshComponent.c;6|SCR_ZoneRestrictionAreaMeshComponent}} | SCR_ZoneRestrictionAreaMeshComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Components/AreaMesh/SCR_ZoneRestrictionAreaMeshComponent.c;1|SCR_ZoneRestrictionAreaMeshComponentClass}} | SCR_ZoomManualCameraComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Camera/Components/SCR_ZoomManualCameraComponent.c;4|SCR_ZoomManualCameraComponent}} | Screenshot_Autotest = {{Link|enfusion://ScriptEditor/scripts/GameLib/entities/autotest/Screenshot_Autotest.c;26|Screenshot_Autotest}} | Screenshot_AutotestClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/entities/autotest/Screenshot_Autotest.c;6|Screenshot_AutotestClass}} | Screenshot_Waypoint = {{Link|enfusion://ScriptEditor/scripts/GameLib/entities/autotest/Screenshot_Autotest.c;424|Screenshot_Waypoint}} | Screenshot_WaypointClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/entities/autotest/Screenshot_Autotest.c;11|Screenshot_WaypointClass}} | ScreenshotRawDataCallback = {{Link|enfusion://ScriptEditor/scripts/Core/proto/System.c;45|ScreenshotRawDataCallback}} | ScreenshotTextureCallback = {{Link|enfusion://ScriptEditor/scripts/Core/proto/System.c;51|ScreenshotTextureCallback}} | ScreenshotTextureData = {{Link|enfusion://ScriptEditor/scripts/Core/generated/System/ScreenshotTextureData.c;15|ScreenshotTextureData}} | ScriptAndConfig = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;122|ScriptAndConfig}} | ScriptBitReader = {{Link|enfusion://ScriptEditor/scripts/Core/proto/EnNetwork.c;198|ScriptBitReader}} | ScriptBitSerializer = {{Link|enfusion://ScriptEditor/scripts/Core/proto/EnNetwork.c;238|ScriptBitSerializer}} | ScriptBitWriter = {{Link|enfusion://ScriptEditor/scripts/Core/proto/EnNetwork.c;126|ScriptBitWriter}} | ScriptCallQueue = {{Link|enfusion://ScriptEditor/scripts/GameLib/tools.c;52|ScriptCallQueue}} | ScriptCamera = {{Link|enfusion://ScriptEditor/scripts/GameLib/entities/ScriptCamera.c;7|ScriptCamera}} | ScriptCameraClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/entities/ScriptCamera.c;1|ScriptCameraClass}} | ScriptCharacterCommandMoveSettings = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Character/ScriptCharacterCommandMoveSettings.c;12|ScriptCharacterCommandMoveSettings}} | ScriptComponent = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Components/ScriptComponent.c;23|ScriptComponent}} | ScriptComponentClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/ScriptComponentClass.c;7|ScriptComponentClass}} | ScriptCtx = {{Link|enfusion://ScriptEditor/scripts/Core/proto/EnNetwork.c;35|ScriptCtx}} | ScriptedBaseInventoryStorageComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/ScriptedBaseInventoryStorageComponent.c;5|ScriptedBaseInventoryStorageComponent}} | ScriptedBaseInventoryStorageComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/ScriptedBaseInventoryStorageComponent.c;1|ScriptedBaseInventoryStorageComponentClass}} | ScriptedBaseZeroingGenerator = {{Link|enfusion://ScriptEditor/scripts/Game/generated/ScriptedBaseZeroingGenerator.c;7|ScriptedBaseZeroingGenerator}} | ScriptedCameraBase = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Camera/ScriptedCameraBase.c;16|ScriptedCameraBase}} | ScriptedCameraBaseClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Camera/ScriptedCameraBase.c;12|ScriptedCameraBaseClass}} | ScriptedCameraItem = {{Link|enfusion://ScriptEditor/scripts/GameCode/Camera/ScriptedCameraSet.c;4|ScriptedCameraItem}} | ScriptedCameraItemResult = {{Link|enfusion://ScriptEditor/scripts/GameCode/Camera/ScriptedCameraSet.c;119|ScriptedCameraItemResult}} | ScriptedCameraSet = {{Link|enfusion://ScriptEditor/scripts/GameCode/Camera/ScriptedCameraSet.c;69|ScriptedCameraSet}} | ScriptedChatEntity = {{Link|enfusion://ScriptEditor/scripts/Game/UI/ScriptedChatEntity.c;9|ScriptedChatEntity}} | ScriptedChatEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/UI/ScriptedChatEntity.c;5|ScriptedChatEntityClass}} | ScriptedCommand = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Base/ScriptedCommand.c;12|ScriptedCommand}} | ScriptedComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Serializers/ScriptedComponentSerializer.c;12|ScriptedComponentSerializer}} | ScriptedEntitySerializer = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Serializers/ScriptedEntitySerializer.c;12|ScriptedEntitySerializer}} | ScriptedFaction = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Faction/ScriptedFaction.c;12|ScriptedFaction}} | ScriptedGameTriggerEntity = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Trigger/ScriptedGameTriggerEntity.c;16|ScriptedGameTriggerEntity}} | ScriptedGameTriggerEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Trigger/ScriptedGameTriggerEntity.c;12|ScriptedGameTriggerEntityClass}} | ScriptedInventoryOperationCallback = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/InventoryTask/ScriptedInventoryOperationCallback.c;12|ScriptedInventoryOperationCallback}} | ScriptedInventoryStorageManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/ScriptedInventoryStorageManagerComponent.c;5|ScriptedInventoryStorageManagerComponent}} | ScriptedInventoryStorageManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/ScriptedInventoryStorageManagerComponent.c;1|ScriptedInventoryStorageManagerComponentClass}} | ScriptedInventoryTask = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/InventoryTask/ScriptedInventoryTask.c;12|ScriptedInventoryTask}} | ScriptEditor = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorkbenchAPI/Modules/ScriptEditor.c;14|ScriptEditor}} | ScriptedMusic = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Music/ScriptedMusic.c;12|ScriptedMusic}} | ScriptedPerceptionComponent = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Tutorial/ScriptedPerceptionComponent.c;6|ScriptedPerceptionComponent}} | ScriptedPerceptionComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Tutorial/ScriptedPerceptionComponent.c;2|ScriptedPerceptionComponentClass}} | ScriptedRadioComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/ScriptedRadioComponent.c;16|ScriptedRadioComponent}} | ScriptedRadioComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/ScriptedRadioComponent.c;12|ScriptedRadioComponentClass}} | ScriptedRadioMessage = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Radio/ScriptedRadioMessage.c;12|ScriptedRadioMessage}} | ScriptedSelectionMenu = {{Link|enfusion://ScriptEditor/scripts/Game/generated/UI/HUD/SelectionMenu/ScriptedSelectionMenu.c;12|ScriptedSelectionMenu}} | ScriptedSelectionMenuEntry = {{Link|enfusion://ScriptEditor/scripts/GameCode/UI/HUD/SelectionMenu/ScriptedSelectionMenuEntry.c;1|ScriptedSelectionMenuEntry}} | ScriptedSerializationLoadContainer = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Serialization/ScriptedSerializationLoadContainer.c;13|ScriptedSerializationLoadContainer}} | ScriptedSerializationSaveContainer = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Serialization/ScriptedSerializationSaveContainer.c;13|ScriptedSerializationSaveContainer}} | ScriptedSightsComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/ScriptedSightsComponent.c;16|ScriptedSightsComponent}} | ScriptedSightsComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/ScriptedSightsComponent.c;12|ScriptedSightsComponentClass}} | ScriptedSightsFOVInfo = {{Link|enfusion://ScriptEditor/scripts/Game/generated/ScriptedSightsFOVInfo.c;7|ScriptedSightsFOVInfo}} | ScriptedSignalUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/generated/UserAction/ScriptedSignalUserAction.c;13|ScriptedSignalUserAction}} | ScriptedStatePersistenceConfig = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Config/ScriptedStatePersistenceConfig.c;12|ScriptedStatePersistenceConfig}} | ScriptedStateSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Serializers/ScriptedStateSerializer.c;12|ScriptedStateSerializer}} | ScriptedUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/generated/UserAction/ScriptedUserAction.c;12|ScriptedUserAction}} | ScriptedWeaponAimModifier = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/ScriptedWeaponAimModifier.c;12|ScriptedWeaponAimModifier}} | ScriptedWidgetComponent = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/ScriptedWidgetComponent.c;12|ScriptedWidgetComponent}} | ScriptedWidgetEventHandler = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/ScriptedWidgetEventHandler.c;18|ScriptedWidgetEventHandler}} | ScriptedWidgetTooltip = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/ScriptedWidgetTooltip.c;10|ScriptedWidgetTooltip}} | ScriptGameComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/ScriptGameComponent.c;16|ScriptGameComponent}} | ScriptGameComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/ScriptGameComponent.c;12|ScriptGameComponentClass}} | ScriptInvoker = {{Link|enfusion://ScriptEditor/scripts/GameLib/tools.c;131|ScriptInvoker}} | ScriptInvoker_AIGroupOnEmpty = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/SCR_AIGroup.c;72|ScriptInvoker_AIGroupOnEmpty}} | ScriptInvoker_AIWorldControlModeChanged = {{Link|enfusion://ScriptEditor/scripts/Game/AI/SCR_AIWorld.c;3|ScriptInvoker_AIWorldControlModeChanged}} | ScriptInvoker_AuthorRequestedFinishedEvent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Core/SCR_EditableEntityCore.c;11|ScriptInvoker_AuthorRequestedFinishedEvent}} | ScriptInvoker_BrowserBudgetPreviewRefreshEvent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_ContentBrowserEditorComponent.c;9|ScriptInvoker_BrowserBudgetPreviewRefreshEvent}} | ScriptInvoker_EditableDescriptorLocationChange = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/EditableEntity/SCR_EditableDescriptorComponent.c;3|ScriptInvoker_EditableDescriptorLocationChange}} | ScriptInvoker_EntityBudgetMaxReachedEvent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_BudgetEditorComponent.c;16|ScriptInvoker_EntityBudgetMaxReachedEvent}} | ScriptInvoker_EntityBudgetMaxUpdatedEvent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_BudgetEditorComponent.c;8|ScriptInvoker_EntityBudgetMaxUpdatedEvent}} | ScriptInvoker_EntityBudgetUpdatedEvent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Components/Editor/SCR_BudgetEditorComponent.c;12|ScriptInvoker_EntityBudgetUpdatedEvent}} | ScriptInvoker_EntityCoreBudgetUpdatedEvent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Core/SCR_EditableEntityCore.c;3|ScriptInvoker_EntityCoreBudgetUpdatedEvent}} | ScriptInvoker_EntityCoreBudgetUpdatedPerEntityEvent = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Core/SCR_EditableEntityCore.c;7|ScriptInvoker_EntityCoreBudgetUpdatedPerEntityEvent}} | ScriptInvoker_FactionPlayableChanged = {{Link|enfusion://ScriptEditor/scripts/Game/Faction/SCR_Faction.c;3|ScriptInvoker_FactionPlayableChanged}} | ScriptInvoker_GameplaySettingsSubMenuChanged = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SettingsMenu/SCR_GameplaySettingsSubMenu.c;3|ScriptInvoker_GameplaySettingsSubMenuChanged}} | ScriptInvoker_GroupMoveFailed = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Components/SCR_AIGroupUtilityComponent.c;3|ScriptInvoker_GroupMoveFailed}} | ScriptInvoker_VotingManagerEnd = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Voting/SCR_VotingManagerComponent.c;7|ScriptInvoker_VotingManagerEnd}} | ScriptInvoker_VotingManagerPlayer = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Voting/SCR_VotingManagerComponent.c;11|ScriptInvoker_VotingManagerPlayer}} | ScriptInvoker_VotingManagerStart = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Voting/SCR_VotingManagerComponent.c;3|ScriptInvoker_VotingManagerStart}} | ScriptInvoker_VotingManagerVoteCountChanged = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Voting/SCR_VotingManagerComponent.c;15|ScriptInvoker_VotingManagerVoteCountChanged}} | ScriptInvokerAction = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/SCR_MenuActionsComponent.c;6|ScriptInvokerAction}} | ScriptInvokerActiveWidgetInteraction = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SCR_MenuHelper.c;7|ScriptInvokerActiveWidgetInteraction}} | ScriptInvokerActiveWidgetInteractionFunc = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Sandbox/SCR_ResourcePlayerControllerInventoryComponent.c;10|ScriptInvokerActiveWidgetInteractionFunc}} | ScriptInvokerArsenalUpdated = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Arsenal/SCR_ArsenalComponent.c;7|ScriptInvokerArsenalUpdated}} | ScriptInvokerBase = {{Link|enfusion://ScriptEditor/scripts/GameLib/tools.c;117|ScriptInvokerBase}} | ScriptInvokerBaseWorld = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_ScriptInvokerHelper.c;116|ScriptInvokerBaseWorld}} | ScriptInvokerBool = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_ScriptInvokerHelper.c;41|ScriptInvokerBool}} | ScriptInvokerBool2 = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_ScriptInvokerHelper.c;42|ScriptInvokerBool2}} | ScriptInvokerBool3 = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_ScriptInvokerHelper.c;43|ScriptInvokerBool3}} | ScriptInvokerBool4 = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_ScriptInvokerHelper.c;44|ScriptInvokerBool4}} | ScriptInvokerBool5 = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_ScriptInvokerHelper.c;45|ScriptInvokerBool5}} | ScriptInvokerBrowserListMenuEntry = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ContentBrowser/Common/SCR_BrowserListMenuEntryComponent.c;6|ScriptInvokerBrowserListMenuEntry}} | ScriptInvokerButton = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/UI/Components/Save/SCR_SaveLoadEntryComponent.c;3|ScriptInvokerButton}} | ScriptInvokerCommStatus = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_ServicesStatusHelper.c;12|ScriptInvokerCommStatus}} | ScriptInvokerCompositionUnregistered = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignBuildingManagerComponent.c;7|ScriptInvokerCompositionUnregistered}} | ScriptInvokerConfigurableDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SCR_ConfigurableDialogUI.c;11|ScriptInvokerConfigurableDialog}} | ScriptInvokerDialog = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SCR_MenuHelper.c;11|ScriptInvokerDialog}} | ScriptInvokerEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_ScriptInvokerHelper.c;92|ScriptInvokerEntity}} | ScriptInvokerEntity2 = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_ScriptInvokerHelper.c;93|ScriptInvokerEntity2}} | ScriptInvokerEntityAndStorage = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_ScriptInvokerHelper.c;126|ScriptInvokerEntityAndStorage}} | ScriptInvokerEntitySpawnedByProvider = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignBuildingManagerComponent.c;3|ScriptInvokerEntitySpawnedByProvider}} | ScriptInvokerFaction = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_ScriptInvokerHelper.c;131|ScriptInvokerFaction}} | ScriptInvokerFilter = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/FilterPanel/SCR_FilterPanelComponent.c;3|ScriptInvokerFilter}} | ScriptInvokerFloat = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_ScriptInvokerHelper.c;58|ScriptInvokerFloat}} | ScriptInvokerFloat2 = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_ScriptInvokerHelper.c;59|ScriptInvokerFloat2}} | ScriptInvokerFloat3 = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_ScriptInvokerHelper.c;60|ScriptInvokerFloat3}} | ScriptInvokerFloat4 = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_ScriptInvokerHelper.c;61|ScriptInvokerFloat4}} | ScriptInvokerFloat5 = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_ScriptInvokerHelper.c;62|ScriptInvokerFloat5}} | ScriptInvokerFuzeChanged = {{Link|enfusion://ScriptEditor/scripts/Game/Components/SCR_ExplosiveChargeComponent.c;8|ScriptInvokerFuzeChanged}} | ScriptInvokerGroupRole = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/SCR_AIGroup.c;8|ScriptInvokerGroupRole}} | ScriptInvokerGroupTaskSet = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_GroupTaskManagerComponent.c;3|ScriptInvokerGroupTaskSet}} | ScriptInvokerImagePickerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ConfigurableWidgetEntries/SCR_ImagePickerComponent.c;3|ScriptInvokerImagePickerComponent}} | ScriptInvokerInt = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_ScriptInvokerHelper.c;24|ScriptInvokerInt}} | ScriptInvokerInt2 = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_ScriptInvokerHelper.c;25|ScriptInvokerInt2}} | ScriptInvokerInt3 = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_ScriptInvokerHelper.c;26|ScriptInvokerInt3}} | ScriptInvokerInt4 = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_ScriptInvokerHelper.c;27|ScriptInvokerInt4}} | ScriptInvokerInt5 = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_ScriptInvokerHelper.c;28|ScriptInvokerInt5}} | ScriptInvokerInventorySlotHover = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Inventory/SCR_InventoryMenuUI.c;273|ScriptInvokerInventorySlotHover}} | ScriptInvokerItemPlaced = {{Link|enfusion://ScriptEditor/scripts/Game/Inventory/Items/SCR_PlaceableInventoryItemComponent.c;8|ScriptInvokerItemPlaced}} | ScriptInvokerMenu = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/SCR_MenuHelper.c;15|ScriptInvokerMenu}} | ScriptInvokerMenuEntryPerformed = {{Link|enfusion://ScriptEditor/scripts/Game/Map/ComponentsUI/SCR_MapRadialUI.c;9|ScriptInvokerMenuEntryPerformed}} | ScriptInvokerMenuEntrySelected = {{Link|enfusion://ScriptEditor/scripts/Game/Map/ComponentsUI/SCR_MapRadialUI.c;4|ScriptInvokerMenuEntrySelected}} | ScriptInvokerMissionWorkshopItem = {{Link|enfusion://ScriptEditor/scripts/Game/Workshop/SCR_WorkshopItem.c;11|ScriptInvokerMissionWorkshopItem}} | ScriptInvokerOnPossessedProxy = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Components/SCR_PossessingManagerComponent.c;3|ScriptInvokerOnPossessedProxy}} | ScriptInvokerRequestedGroupTaskSet = {{Link|enfusion://ScriptEditor/scripts/Game/Tasks/SCR_GroupTaskManagerComponent.c;7|ScriptInvokerRequestedGroupTaskSet}} | ScriptInvokerResourceOnPlayerInteraction = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Sandbox/SCR_ResourcePlayerControllerInventoryComponent.c;11|ScriptInvokerResourceOnPlayerInteraction}} | ScriptInvokerRoom = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowserMenuUI.c;8|ScriptInvokerRoom}} | ScriptInvokerRplId = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_ScriptInvokerHelper.c;121|ScriptInvokerRplId}} | ScriptInvokerScenarioFrameworkLayer = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkLayerBase.c;9|ScriptInvokerScenarioFrameworkLayer}} | ScriptInvokerScenarioFrameworkSlotAI = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Components/SCR_ScenarioFrameworkSlotAI.c;9|ScriptInvokerScenarioFrameworkSlotAI}} | ScriptInvokerScriptedWidgetComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c;4|ScriptInvokerScriptedWidgetComponent}} | ScriptInvokerSCRScriptedWidgetComponent = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_ScriptInvokerHelper.c;111|ScriptInvokerSCRScriptedWidgetComponent}} | ScriptInvokerSelectionMenuEntry = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SelectionMenu/RadialMenu/SCR_RadialMenu.c;9|ScriptInvokerSelectionMenuEntry}} | ScriptInvokerServiceUnregistered = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Locations/SCR_MilitaryBaseComponent.c;3|ScriptInvokerServiceUnregistered}} | ScriptInvokerString = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_ScriptInvokerHelper.c;75|ScriptInvokerString}} | ScriptInvokerString2 = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_ScriptInvokerHelper.c;76|ScriptInvokerString2}} | ScriptInvokerString3 = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_ScriptInvokerHelper.c;77|ScriptInvokerString3}} | ScriptInvokerString4 = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_ScriptInvokerHelper.c;78|ScriptInvokerString4}} | ScriptInvokerString5 = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_ScriptInvokerHelper.c;79|ScriptInvokerString5}} | ScriptInvokerTabView = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_TabView/SCR_TabViewComponent.c;3|ScriptInvokerTabView}} | ScriptInvokerTabViewContentIndex = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_TabView/SCR_TabViewComponent.c;11|ScriptInvokerTabViewContentIndex}} | ScriptInvokerTabViewIndex = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_TabView/SCR_TabViewComponent.c;7|ScriptInvokerTabViewIndex}} | ScriptInvokerTooltip = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetTooltip.c;12|ScriptInvokerTooltip}} | ScriptInvokerTransferSupplies = {{Link|enfusion://ScriptEditor/scripts/Game/Campaign/SCR_CampaignNetworkComponent.c;24|ScriptInvokerTransferSupplies}} | ScriptInvokerVector = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_ScriptInvokerHelper.c;101|ScriptInvokerVector}} | ScriptInvokerVoid = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_ScriptInvokerHelper.c;9|ScriptInvokerVoid}} | ScriptInvokerWeaponState = {{Link|enfusion://ScriptEditor/scripts/Game/Components/Flares/SCR_WeaponComponent.c;7|ScriptInvokerWeaponState}} | ScriptInvokerWidget = {{Link|enfusion://ScriptEditor/scripts/Game/Helpers/SCR_ScriptInvokerHelper.c;106|ScriptInvokerWidget}} | ScriptInvokerWorkshopItem = {{Link|enfusion://ScriptEditor/scripts/Game/Workshop/SCR_AddonManager.c;72|ScriptInvokerWorkshopItem}} | ScriptMenuPresetEnum = {{Link|enfusion://ScriptEditor/scripts/GameLib/menuManager.c;20|ScriptMenuPresetEnum}} | ScriptModel = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/ScriptModel.c;7|ScriptModel}} | ScriptModelClass = {{Link|enfusion://ScriptEditor/scripts/Game/Entities/ScriptModel.c;1|ScriptModelClass}} | ScriptModule = {{Link|enfusion://ScriptEditor/scripts/Core/generated/System/ScriptModule.c;33|ScriptModule}} | ScriptPlatformRequestCallback = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/ScriptPlatformRequestCallback.c;7|ScriptPlatformRequestCallback}} | ScriptProfanityFilterRequestCallback = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/ScriptProfanityFilterRequestCallback.c;7|ScriptProfanityFilterRequestCallback}} | ScriptStringTableItem = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/ScriptStringTableItem.c;8|ScriptStringTableItem}} | ScriptWorldClock = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/ScriptWorldClock.c;7|ScriptWorldClock}} | ScrollLayoutSlot = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/ScrollLayoutSlot.c;12|ScrollLayoutSlot}} | ScrollLayoutWidget = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/ScrollLayoutWidget.c;15|ScrollLayoutWidget}} | ScrServerCmdResult = {{Link|enfusion://ScriptEditor/scripts/Game/generated/ScrServerCmdResult.c;7|ScrServerCmdResult}} | ScrServerCommand = {{Link|enfusion://ScriptEditor/scripts/Game/generated/ScrServerCommand.c;7|ScrServerCommand}} | SearchResourcesCallback = {{Link|enfusion://ScriptEditor/scripts/Core/proto/System.c;18|SearchResourcesCallback}} | SearchResourcesFilter = {{Link|enfusion://ScriptEditor/scripts/Core/proto/System.c;8|SearchResourcesFilter}} | SearchXOBPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ResourceManager/SCR_SearchXOBPlugin.c;197|SearchXOBPlugin}} | Selector = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/Selector.c;12|Selector}} | SendToBlenderPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/SendToBlender.c;1|SendToBlenderPlugin}} | SentenceDialogueData = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Dialogue/SentenceDialogueData.c;12|SentenceDialogueData}} | Sequence = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/Sequence.c;12|Sequence}} | Serializer = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Serializer.c;58|Serializer}} | SerializerDefaultSpawnData = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Serializers/SerializerDefaultSpawnData.c;12|SerializerDefaultSpawnData}} | SerializerInventoryStorageManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/SerializerInventoryStorageManagerComponent.c;16|SerializerInventoryStorageManagerComponent}} | SerializerInventoryStorageManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/SerializerInventoryStorageManagerComponent.c;12|SerializerInventoryStorageManagerComponentClass}} | ServerBrowserEntryProperty = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/ServerBrowser/SCR_ServerBrowserEntryComponent.c;515|ServerBrowserEntryProperty}} | ServerBrowserMenuUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowserMenuUI.c;10|ServerBrowserMenuUI}} | ServerBrowserMenuWidgets = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/ServerBrowserMenuWidgets.c;5|ServerBrowserMenuWidgets}} | ServerCatalogueApi = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/ServerCatalogueApi.c;31|ServerCatalogueApi}} | ServerCatalogueFilters = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/ServerCatalogueFilters.c;13|ServerCatalogueFilters}} | ServerChatChannel = {{Link|enfusion://ScriptEditor/scripts/GameCode/Network/ServerChatChannel.c;2|ServerChatChannel}} | ServerConfigApi = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/ServerConfigApi.c;12|ServerConfigApi}} | ServerConfigMeta = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/ServerConfigMeta.c;12|ServerConfigMeta}} | ServerFilterEntry = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/SCR_ServerFilterBarComponent.c;319|ServerFilterEntry}} | ServerFilterGroup = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/SCR_ServerFilterBarComponent.c;163|ServerFilterGroup}} | ServerHostingUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/ServerBrowser/ServerHosting/ServerHostingUI.c;8|ServerHostingUI}} | ServerInfo = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/ServerInfo.c;19|ServerInfo}} | ServiceStatusItem = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/ServiceStatusItem.c;13|ServiceStatusItem}} | SessionStorage = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/SessionStorage.c;13|SessionStorage}} | set = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;395|set}} | SetAIBaseBudgetEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_SetAIBaseBudgetEditorAtribute.c;1|SetAIBaseBudgetEditorAttribute}} | SetBuildingProgressEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_SetBuildingProgressEditorAttribute.c;1|SetBuildingProgressEditorAttribute}} | SetPropBaseBudgetEditorAttribute = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/Attributes/SCR_SetPropBaseBudgetEditorAttribute.c;1|SetPropBaseBudgetEditorAttribute}} | Shape = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Debug/Shape.c;13|Shape}} | ShapeEntity = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/ShapeEntity.c;16|ShapeEntity}} | ShapeEntityClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/ShapeEntity.c;12|ShapeEntityClass}} | ShapeFlags = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Debug/ShapeFlags.c;12|ShapeFlags}} | ShapePointDataScriptBase = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/ShapePointDataScriptBase.c;7|ShapePointDataScriptBase}} | ShapeType = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Debug/ShapeType.c;12|ShapeType}} | ShapeUtils = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Debug/ShapeUtils.c;12|ShapeUtils}} | SharedItem = {{Link|enfusion://ScriptEditor/scripts/Core/proto/EnWorld.c;47|SharedItem}} | SharedItemRef = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Types/SharedItemRef.c;12|SharedItemRef}} | ShellMoveComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Projectile/ShellMoveComponent.c;12|ShellMoveComponent}} | ShellMoveComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Projectile/ShellMoveComponentClass.c;12|ShellMoveComponentClass}} | SightRangeInfo = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/SightRangeInfo.c;12|SightRangeInfo}} | SightsComponent = {{Link|enfusion://ScriptEditor/scripts/GameCode/Weapon/SightsComponent.c;17|SightsComponent}} | SightsComponentClass = {{Link|enfusion://ScriptEditor/scripts/GameCode/Weapon/SightsComponent.c;8|SightsComponentClass}} | SightsFOVInfo = {{Link|enfusion://ScriptEditor/scripts/Game/generated/SightsFOVInfo.c;11|SightsFOVInfo}} | SignalCompressionFunc = {{Link|enfusion://ScriptEditor/scripts/Game/generated/SignalCompressionFunc.c;7|SignalCompressionFunc}} | SignalInput = {{Link|enfusion://ScriptEditor/scripts/GameLib/components/gameLibComponents.c;10|SignalInput}} | SignalsComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/SignalsComponent.c;16|SignalsComponent}} | SignalsComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/SignalsComponent.c;12|SignalsComponentClass}} | SignalsManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/SignalsManagerComponent.c;16|SignalsManagerComponent}} | SignalsManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/SignalsManagerComponent.c;12|SignalsManagerComponentClass}} | SignalsManagersSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/SignalsManagersSystem.c;12|SignalsManagersSystem}} | SimpleButtonComponent = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Deprecated/SimpleButtonComponent.c;9|SimpleButtonComponent}} | SimpleListboxWidget = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/SimpleListboxWidget.c;13|SimpleListboxWidget}} | SimplePawnControllerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/SimplePawnControllerComponent.c;16|SimplePawnControllerComponent}} | SimplePawnControllerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/SimplePawnControllerComponent.c;12|SimplePawnControllerComponentClass}} | SimplePreload = {{Link|enfusion://ScriptEditor/scripts/Game/UI/SimplePreload.c;1|SimplePreload}} | SimpleSignalComponent = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Components/SimpleSignalComponent.c;13|SimpleSignalComponent}} | SimpleSignalComponentClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Components/SimpleSignalComponentClass.c;13|SimpleSignalComponentClass}} | SimpleSoundComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/SimpleSoundComponent.c;16|SimpleSoundComponent}} | SimpleSoundComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/SimpleSoundComponent.c;12|SimpleSoundComponentClass}} | SimpleTimeSignal = {{Link|enfusion://ScriptEditor/scripts/GameLib/entities/autotest/AutotestGrid.c;8|SimpleTimeSignal}} | SimulationState = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Physics/SimulationState.c;18|SimulationState}} | SingleInputPortContainer = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/SingleInputPortContainer.c;12|SingleInputPortContainer}} | SingleOutputPortContainer = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/SingleOutputPortContainer.c;12|SingleOutputPortContainer}} | SizeLayoutSlot = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/SizeLayoutSlot.c;12|SizeLayoutSlot}} | SizeLayoutWidget = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/SizeLayoutWidget.c;15|SizeLayoutWidget}} | SkipCinematicTrack = {{Link|enfusion://ScriptEditor/scripts/Game/Cinematics/SkipCinematicTrack.c;1|SkipCinematicTrack}} | SliderWidget = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/SliderWidget.c;12|SliderWidget}} | SlidingDoorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/SlidingDoorComponent.c;12|SlidingDoorComponent}} | SlidingDoorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/SlidingDoorComponentClass.c;12|SlidingDoorComponentClass}} | SlotBoneAnimationCinematicTrack = {{Link|enfusion://ScriptEditor/scripts/Game/Cinematics/BoneAnimationCinematicTrack.c;1|SlotBoneAnimationCinematicTrack}} | SlotBoneMappingObject = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Buildings/SlotBoneMappingObject.c;12|SlotBoneMappingObject}} | SlotManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/SlotManagerComponent.c;16|SlotManagerComponent}} | SlotManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/SlotManagerComponent.c;12|SlotManagerComponentClass}} | SlotManagerComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Serializers/SlotManagerComponentSerializer.c;12|SlotManagerComponentSerializer}} | SmallForestGeneratorClusterObject = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/ForestGenerator/ForestGeneratorClusters.c;140|SmallForestGeneratorClusterObject}} | SmartPanelWidget = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/UI/SmartPanelWidget.c;12|SmartPanelWidget}} | SndBaseModule = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Sound/SndBaseModule.c;15|SndBaseModule}} | SndComponent = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Components/SndComponent.c;12|SndComponent}} | SndComponentCallbacks = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Sound/SndComponentCallbacks.c;12|SndComponentCallbacks}} | SndComponentClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Components/SndComponentClass.c;12|SndComponentClass}} | SndSystem = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Sound/SndSystem.c;12|SndSystem}} | SndWorld = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Sound/SndWorld.c;16|SndWorld}} | SndWorldClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Sound/SndWorld.c;12|SndWorldClass}} | SocialComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Player/SocialComponent.c;21|SocialComponent}} | SocialComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Player/SocialComponent.c;12|SocialComponentClass}} | SocialIdentity = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Identity/SocialIdentity.c;12|SocialIdentity}} | SocketWidget = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/SocketWidget.c;12|SocketWidget}} | SortAttribute = {{Link|enfusion://ScriptEditor/scripts/Core/attributes.c;527|SortAttribute}} | SoundComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/SoundComponent.c;16|SoundComponent}} | SoundComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/SoundComponent.c;12|SoundComponentClass}} | SoundIdentity = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Identity/SoundIdentity.c;12|SoundIdentity}} | SoundInfo = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Core/SoundInfo.c;12|SoundInfo}} | SoundManagerModule = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Sound/SoundManagerModule.c;12|SoundManagerModule}} | SoundOutputStateComponent = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Components/SoundOutputStateComponent.c;16|SoundOutputStateComponent}} | SoundOutputStateComponentClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Components/SoundOutputStateComponent.c;12|SoundOutputStateComponentClass}} | SoundWorld = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Entities/SoundWorld.c;16|SoundWorld}} | SoundWorldClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Entities/SoundWorld.c;12|SoundWorldClass}} | SpawnAreaAlertEvent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Areas/SCR_SpawnArea.c;14|SpawnAreaAlertEvent}} | SpawnAreaEvent = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Areas/SCR_SpawnArea.c;9|SpawnAreaEvent}} | SpawnDecalEffect = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Effects/SpawnDecalEffect.c;12|SpawnDecalEffect}} | SpawnDistanceParticleEffect = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Effects/SpawnDistanceParticleEffect.c;12|SpawnDistanceParticleEffect}} | SpawnParticleEffect = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Effects/SpawnParticleEffect.c;12|SpawnParticleEffect}} | SpawnPointInvoker = {{Link|enfusion://ScriptEditor/scripts/Game/GameMode/Respawn/SCR_SpawnPoint.c;15|SpawnPointInvoker}} | SpinDirection = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/SpinDirection.c;12|SpinDirection}} | SplashScreen = {{Link|enfusion://ScriptEditor/scripts/GameLib/LoadingScreens/SplashScreen.c;4|SplashScreen}} | SplineShapeEntity = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/SplineShapeEntity.c;16|SplineShapeEntity}} | SplineShapeEntityClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/SplineShapeEntity.c;12|SplineShapeEntityClass}} | SplineTerrainGeneratorEntityBase = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/SplineTerrainGeneratorEntityBase.c;16|SplineTerrainGeneratorEntityBase}} | SplineTerrainGeneratorEntityBaseClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/SplineTerrainGeneratorEntityBase.c;12|SplineTerrainGeneratorEntityBaseClass}} | SSnapSerializer = {{Link|enfusion://ScriptEditor/scripts/Core/proto/EnNetwork.c;380|SSnapSerializer}} | SSnapSerializerBase = {{Link|enfusion://ScriptEditor/scripts/Core/proto/EnNetwork.c;268|SSnapSerializerBase}} | SSnapshot = {{Link|enfusion://ScriptEditor/scripts/Core/proto/EnNetwork.c;374|SSnapshot}} | StaminaEventParams = {{Link|enfusion://ScriptEditor/scripts/Game/Character/SCR_CharacterStaminaComponent.c;10|StaminaEventParams}} | StaminaSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/StaminaSystem.c;12|StaminaSystem}} | StanceIndicator = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/StanceIndicator.c;1|StanceIndicator}} | StartBakeDialog = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/BakeMLOD.c;217|StartBakeDialog}} | StartBakeDialogET = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/BakeMLOD.c;291|StartBakeDialogET}} | StartBakeDialogXOB = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/BakeMLOD.c;271|StartBakeDialogXOB}} | StateBackendCallback = {{Link|enfusion://ScriptEditor/scripts/Game/Network/ServerCommands/UploadSaveCommand.c;9|StateBackendCallback}} | StaticArray = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Types/StaticArray.c;12|StaticArray}} | StaticModelEntity = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/StaticModelEntity.c;16|StaticModelEntity}} | StaticModelEntityClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/StaticModelEntity.c;12|StaticModelEntityClass}} | StaticSoundComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/StaticSoundComponent.c;12|StaticSoundComponent}} | StaticSoundComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/StaticSoundComponentClass.c;12|StaticSoundComponentClass}} | Step = {{Link|enfusion://ScriptEditor/scripts/GameLib/tests/TestingFramework.c;123|Step}} | StreetLampComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/StreetLampComponent.c;16|StreetLampComponent}} | StreetLampComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/StreetLampComponent.c;12|StreetLampComponentClass}} | string = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Types/string.c;12|string}} | SubDistanceParticleEffect = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Projectile/SubDistanceParticleEffect.c;12|SubDistanceParticleEffect}} | SuppressorComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/SuppressorComponent.c;16|SuppressorComponent}} | SuppressorComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/SuppressorComponent.c;12|SuppressorComponentClass}} | SurfaceProperties = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Physics/SurfaceProperties.c;15|SurfaceProperties}} | SwayWeaponAimModifier = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/SwayWeaponAimModifier.c;12|SwayWeaponAimModifier}} | Switch = {{Link|enfusion://ScriptEditor/scripts/Game/generated/AI/Switch.c;12|Switch}} | System = {{Link|enfusion://ScriptEditor/scripts/Core/generated/System/System.c;12|System}} | SystemChatChannel = {{Link|enfusion://ScriptEditor/scripts/GameCode/Network/SystemChatChannel.c;1|SystemChatChannel}} | TA_EActivationPresence = {{Link|enfusion://ScriptEditor/scripts/Game/ScenarioFramework/Enums/SCR_EScenarioFrameworkTriggerActivation.c;2|TA_EActivationPresence}} | TagSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/TagSystem.c;12|TagSystem}} | TAIFireteamArray = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_AIGroupFireteamManager.c;4|TAIFireteamArray}} | TAnimGraphCommand = {{Link|enfusion://ScriptEditor/scripts/GameCode/Base/ECommandIDs.c;1|TAnimGraphCommand}} | TAnimGraphEvent = {{Link|enfusion://ScriptEditor/scripts/GameCode/Base/ECommandIDs.c;4|TAnimGraphEvent}} | TAnimGraphPrediction = {{Link|enfusion://ScriptEditor/scripts/GameCode/Base/ECommandIDs.c;5|TAnimGraphPrediction}} | TAnimGraphTag = {{Link|enfusion://ScriptEditor/scripts/GameCode/Base/ECommandIDs.c;3|TAnimGraphTag}} | TAnimGraphVariable = {{Link|enfusion://ScriptEditor/scripts/GameCode/Base/ECommandIDs.c;2|TAnimGraphVariable}} | TBoolArray = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;387|TBoolArray}} | TClassArray = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;388|TClassArray}} | TClassClassMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;616|TClassClassMap}} | TClassFloatMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;613|TClassFloatMap}} | TClassIntMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;614|TClassIntMap}} | TClassManagedMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;617|TClassManagedMap}} | TClassManagedRefMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;618|TClassManagedRefMap}} | TClassPointerMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;619|TClassPointerMap}} | TClassSet = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;463|TClassSet}} | TClassStringMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;615|TClassStringMap}} | TClassVectorMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;620|TClassVectorMap}} | TerrainExportTool = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/TerrainToBlender.c;21|TerrainExportTool}} | TerrainImportPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchCommon/TerrainImportTool.c;1|TerrainImportPlugin}} | TerrainTile = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/TerrainToBlender.c;3|TerrainTile}} | TerrainToolDesc = {{Link|enfusion://ScriptEditor/scripts/Core/generated/WorkbenchAPI/Terrain/TerrainToolDesc.c;12|TerrainToolDesc}} | TerrainToolDesc_HeightAdd = {{Link|enfusion://ScriptEditor/scripts/Core/generated/WorkbenchAPI/Terrain/TerrainToolDesc_HeightAdd.c;12|TerrainToolDesc_HeightAdd}} | TerrainToolDesc_HeightExact = {{Link|enfusion://ScriptEditor/scripts/Core/generated/WorkbenchAPI/Terrain/TerrainToolDesc_HeightExact.c;12|TerrainToolDesc_HeightExact}} | TerrainToolDesc_HeightNoise = {{Link|enfusion://ScriptEditor/scripts/Core/generated/WorkbenchAPI/Terrain/TerrainToolDesc_HeightNoise.c;12|TerrainToolDesc_HeightNoise}} | TerrainToolDesc_HeightSmooth = {{Link|enfusion://ScriptEditor/scripts/Core/generated/WorkbenchAPI/Terrain/TerrainToolDesc_HeightSmooth.c;12|TerrainToolDesc_HeightSmooth}} | TerrainToolDesc_HeightUser = {{Link|enfusion://ScriptEditor/scripts/Core/generated/WorkbenchAPI/Terrain/TerrainToolDesc_HeightUser.c;12|TerrainToolDesc_HeightUser}} | TerrainToolDesc_LayerAdd = {{Link|enfusion://ScriptEditor/scripts/Core/generated/WorkbenchAPI/Terrain/TerrainToolDesc_LayerAdd.c;12|TerrainToolDesc_LayerAdd}} | TerrainToolType = {{Link|enfusion://ScriptEditor/scripts/Core/generated/WorkbenchAPI/Terrain/TerrainToolType.c;12|TerrainToolType}} | Test = {{Link|enfusion://ScriptEditor/scripts/GameLib/tests/TestingFramework.c;96|Test}} | TestAimModifier = {{Link|enfusion://ScriptEditor/scripts/Game/Weapon/TestAimModifier.c;1|TestAimModifier}} | TestBase = {{Link|enfusion://ScriptEditor/scripts/GameLib/tests/TestingFramework.c;177|TestBase}} | TestDragUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/TestDragUserAction.c;2|TestDragUserAction}} | TestHarness = {{Link|enfusion://ScriptEditor/scripts/GameLib/tests/TestingFramework.c;135|TestHarness}} | TestPushUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/TestPushUserAction.c;2|TestPushUserAction}} | TestResultBase = {{Link|enfusion://ScriptEditor/scripts/GameLib/tests/TestingFramework.c;197|TestResultBase}} | TestResultTimeout = {{Link|enfusion://ScriptEditor/scripts/GameLib/tests/TestingFramework.c;212|TestResultTimeout}} | TestScriptSensor = {{Link|enfusion://ScriptEditor/scripts/Game/Perception/TestScriptSensor.c;1|TestScriptSensor}} | TestSuite = {{Link|enfusion://ScriptEditor/scripts/GameLib/tests/TestingFramework.c;158|TestSuite}} | TextDialogueData = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Dialogue/TextDialogueData.c;12|TextDialogueData}} | TextDrawCommand = {{Link|enfusion://ScriptEditor/scripts/Core/proto/EnWidgets.c;78|TextDrawCommand}} | TextListboxWidget = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/TextListboxWidget.c;12|TextListboxWidget}} | TexTools = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorkbenchAPI/TexTools.c;14|TexTools}} | TextureCheckResult = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/TextureImportTool.c;37|TextureCheckResult}} | TextureImportPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/TextureImportTool.c;888|TextureImportPlugin}} | TextureIssueOp = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/TextureImportTool.c;29|TextureIssueOp}} | TextureResourceInfo = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/ResourceInfo.c;336|TextureResourceInfo}} | TextureType = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/TextureImportTool.c;50|TextureType}} | TextureTypeProperty = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/TextureImportTool.c;21|TextureTypeProperty}} | TextureTypes = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/TextureImportTool.c;114|TextureTypes}} | TextureValidation = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/TextureValidation.c;93|TextureValidation}} | TextureValidationRequest = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/TextureValidation.c;1|TextureValidationRequest}} | TextureValidationResponse = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/TextureValidation.c;13|TextureValidationResponse}} | TextureValidationUtils = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/TextureValidation.c;27|TextureValidationUtils}} | TextureValidator = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/ValidateMaterialPlugin.c;385|TextureValidator}} | TextureValidatorRequest = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/ValidateMaterialPlugin.c;364|TextureValidatorRequest}} | TextureValidatorResponse = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/ValidateMaterialPlugin.c;373|TextureValidatorResponse}} | TextWidget = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/TextWidget.c;15|TextWidget}} | TextWidgetBenchmark = {{Link|enfusion://ScriptEditor/scripts/GameLib/tests/TextWidgetBenchmark.c;1|TextWidgetBenchmark}} | TFireteamLockArray = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_AIGroupFireteamLock.c;7|TFireteamLockArray}} | TFireteamLockRefArray = {{Link|enfusion://ScriptEditor/scripts/Game/AI/Group/SCR_AIGroupFireteamLock.c;6|TFireteamLockRefArray}} | TFloatArray = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;385|TFloatArray}} | TFloatSet = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;461|TFloatSet}} | ThreeStateCheckboxWidget = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/ThreeStateCheckboxWidget.c;12|ThreeStateCheckboxWidget}} | ThrowGrenadeAction = {{Link|enfusion://ScriptEditor/scripts/Game/UserActions/ThrowGrenadeAction.c;2|ThrowGrenadeAction}} | TimeAndWeatherManagerEntity = {{Link|enfusion://ScriptEditor/scripts/GameCode/World/TimeAndWeatherManagerEntity.c;17|TimeAndWeatherManagerEntity}} | TimeAndWeatherManagerEntityClass = {{Link|enfusion://ScriptEditor/scripts/GameCode/World/TimeAndWeatherManagerEntity.c;1|TimeAndWeatherManagerEntityClass}} | TimeAndWeatherManagerEntitySerializer = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/Persistence/Serializers/Entities/TimeAndWeatherManagerEntitySerializer.c;1|TimeAndWeatherManagerEntitySerializer}} | TimeBasedGraphWidget = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/TimeBasedGraphWidget.c;12|TimeBasedGraphWidget}} | TimeBasedGraphWithAxesWidget = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/TimeBasedGraphWithAxesWidget.c;12|TimeBasedGraphWithAxesWidget}} | TimecodeCinematicTrack = {{Link|enfusion://ScriptEditor/scripts/Game/Cinematics/TimecodeCinematicTrack.c;1|TimecodeCinematicTrack}} | TimeContainer = {{Link|enfusion://ScriptEditor/scripts/GameCode/World/TimeAndWeatherManagerEntity.c;833|TimeContainer}} | TimedDialogueData = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Dialogue/TimedDialogueData.c;12|TimedDialogueData}} | TimerTriggerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Projectile/Trigger/TimerTriggerComponent.c;16|TimerTriggerComponent}} | TimerTriggerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Projectile/Trigger/TimerTriggerComponent.c;12|TimerTriggerComponentClass}} | TIntArray = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;386|TIntArray}} | TIntClassMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;598|TIntClassMap}} | TIntFloatMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;595|TIntFloatMap}} | TIntIntMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;596|TIntIntMap}} | TIntManagedMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;599|TIntManagedMap}} | TIntManagedRefMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;600|TIntManagedRefMap}} | TIntPointerMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;601|TIntPointerMap}} | TIntSet = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;462|TIntSet}} | TIntStringMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;597|TIntStringMap}} | TIntVectorMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;602|TIntVectorMap}} | TManagedArray = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;389|TManagedArray}} | TManagedClassMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;634|TManagedClassMap}} | TManagedFloatMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;631|TManagedFloatMap}} | TManagedIntMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;632|TManagedIntMap}} | TManagedManagedMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;635|TManagedManagedMap}} | TManagedManagedRefMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;636|TManagedManagedRefMap}} | TManagedPointerMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;637|TManagedPointerMap}} | TManagedRefArray = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;390|TManagedRefArray}} | TManagedRefClassMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;643|TManagedRefClassMap}} | TManagedRefFloatMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;640|TManagedRefFloatMap}} | TManagedRefIntMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;641|TManagedRefIntMap}} | TManagedRefManagedMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;644|TManagedRefManagedMap}} | TManagedRefManagedRefMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;645|TManagedRefManagedRefMap}} | TManagedRefPointerMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;646|TManagedRefPointerMap}} | TManagedRefSet = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;465|TManagedRefSet}} | TManagedRefStringMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;642|TManagedRefStringMap}} | TManagedRefVectorMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;647|TManagedRefVectorMap}} | TManagedSet = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;464|TManagedSet}} | TManagedStringMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;633|TManagedStringMap}} | TManagedVectorMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;638|TManagedVectorMap}} | TMeshIndex = {{Link|enfusion://ScriptEditor/scripts/Core/proto/EnEntity.c;25|TMeshIndex}} | TNodeId = {{Link|enfusion://ScriptEditor/scripts/Core/proto/EnEntity.c;23|TNodeId}} | ToolSize = {{Link|enfusion://ScriptEditor/scripts/Game/Map/ComponentsUI/SCR_MapRTWBaseUI.c;1|ToolSize}} | TouchComponent = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Components/TouchComponent.c;16|TouchComponent}} | TouchComponentClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Components/TouchComponent.c;12|TouchComponentClass}} | TouchEvent = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/TouchEvent.c;8|TouchEvent}} | TPointerArray = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;392|TPointerArray}} | TPointerClassMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;625|TPointerClassMap}} | TPointerFloatMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;622|TPointerFloatMap}} | TPointerIntMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;623|TPointerIntMap}} | TPointerManagedMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;626|TPointerManagedMap}} | TPointerManagedRefMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;627|TPointerManagedRefMap}} | TPointerPointerMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;628|TPointerPointerMap}} | TPointerSet = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;466|TPointerSet}} | TPointerStringMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;624|TPointerStringMap}} | TPointerVectorMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;629|TPointerVectorMap}} | TraceBox = {{Link|enfusion://ScriptEditor/scripts/Core/generated/World/TraceBox.c;12|TraceBox}} | TraceFilterCallback = {{Link|enfusion://ScriptEditor/scripts/Core/proto/EnWorld.c;9|TraceFilterCallback}} | TraceFlags = {{Link|enfusion://ScriptEditor/scripts/Core/generated/World/TraceFlags.c;12|TraceFlags}} | TraceOBB = {{Link|enfusion://ScriptEditor/scripts/Core/generated/World/TraceOBB.c;12|TraceOBB}} | TraceParam = {{Link|enfusion://ScriptEditor/scripts/Core/generated/World/TraceParam.c;15|TraceParam}} | TracerProjectile = {{Link|enfusion://ScriptEditor/scripts/Game/generated/EntityTypes/TracerProjectile.c;16|TracerProjectile}} | TracerProjectileClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/EntityTypes/TracerProjectile.c;12|TracerProjectileClass}} | TraceSphere = {{Link|enfusion://ScriptEditor/scripts/Core/generated/World/TraceSphere.c;12|TraceSphere}} | TrackDecal = {{Link|enfusion://ScriptEditor/scripts/Core/generated/World/TrackDecal.c;12|TrackDecal}} | TrackDecalInfo = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_VehicleTrackDecalComponent.c;3|TrackDecalInfo}} | TrackedControllerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/TrackedControllerComponent.c;16|TrackedControllerComponent}} | TrackedControllerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/TrackedControllerComponent.c;12|TrackedControllerComponentClass}} | TransformResetParams = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/TransformResetParams.c;11|TransformResetParams}} | TransmissionData = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/SCR_VonDisplay.c;3|TransmissionData}} | Tree = {{Link|enfusion://ScriptEditor/scripts/GameCode/Vegetation/Tree.c;10|Tree}} | TreeClass = {{Link|enfusion://ScriptEditor/scripts/GameCode/Vegetation/Tree.c;1|TreeClass}} | TreeEntity = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/TreeEntity.c;12|TreeEntity}} | TreeEntityClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/TreeEntityClass.c;12|TreeEntityClass}} | TreeGroupClass = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/ForestGenerator/TreeGroupClass.c;1|TreeGroupClass}} | TResourceNameArray = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;393|TResourceNameArray}} | TriMeshDrawCommand = {{Link|enfusion://ScriptEditor/scripts/Core/proto/EnWidgets.c;109|TriMeshDrawCommand}} | TStringArray = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;384|TStringArray}} | TStringClassMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;607|TStringClassMap}} | TStringFloatMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;604|TStringFloatMap}} | TStringIntMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;605|TStringIntMap}} | TStringManagedMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;608|TStringManagedMap}} | TStringManagedRefMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;609|TStringManagedRefMap}} | TStringPointerMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;610|TStringPointerMap}} | TStringSet = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;460|TStringSet}} | TStringStringMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;606|TStringStringMap}} | TStringVectorMap = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;611|TStringVectorMap}} | Tuple = {{Link|enfusion://ScriptEditor/scripts/Core/tuple.c;12|Tuple}} | Tuple1 = {{Link|enfusion://ScriptEditor/scripts/Core/tuple.c;33|Tuple1}} | Tuple2 = {{Link|enfusion://ScriptEditor/scripts/Core/tuple.c;60|Tuple2}} | Tuple3 = {{Link|enfusion://ScriptEditor/scripts/Core/tuple.c;89|Tuple3}} | Tuple4 = {{Link|enfusion://ScriptEditor/scripts/Core/tuple.c;120|Tuple4}} | Tuple5 = {{Link|enfusion://ScriptEditor/scripts/Core/tuple.c;147|Tuple5}} | Tuple6 = {{Link|enfusion://ScriptEditor/scripts/Core/tuple.c;176|Tuple6}} | TurnOnUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/generated/UserAction/TurnOnUserAction.c;12|TurnOnUserAction}} | Turret = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Entities/Turret.c;16|Turret}} | TurretClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Entities/Turret.c;12|TurretClass}} | TurretCompartmentSlot = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/TurretCompartmentSlot.c;12|TurretCompartmentSlot}} | TurretComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Turrets/TurretComponent.c;12|TurretComponent}} | TurretComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Turrets/TurretComponentClass.c;12|TurretComponentClass}} | TurretControllerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/TurretControllerComponent.c;12|TurretControllerComponent}} | TurretControllerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/TurretControllerComponentClass.c;12|TurretControllerComponentClass}} | TurretControllerComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Serializers/TurretControllerComponentSerializer.c;12|TurretControllerComponentSerializer}} | TurretSlotComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Turrets/TurretSlotComponent.c;16|TurretSlotComponent}} | TurretSlotComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Turrets/TurretSlotComponent.c;12|TurretSlotComponentClass}} | TVectorArray = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;391|TVectorArray}} | TxaErrCode = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/EnfusionBlenderTools/AnimExport.c;1|TxaErrCode}} | TxaExporter = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/generated/TxaExporter.c;9|TxaExporter}} | TypeID = {{Link|enfusion://ScriptEditor/scripts/Core/proto/Types.c;149|TypeID}} | typename = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Types/typename.c;12|typename}} | UGLAnimationComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/UGLAnimationComponent.c;12|UGLAnimationComponent}} | UGLAnimationComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/UGLAnimationComponentClass.c;12|UGLAnimationComponentClass}} | UIColors = {{Link|enfusion://ScriptEditor/scripts/Game/Global/Constants.c;16|UIColors}} | UIConstants = {{Link|enfusion://ScriptEditor/scripts/Game/Global/Constants.c;150|UIConstants}} | UIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/generated/UI/UIInfo.c;13|UIInfo}} | UIInfoAssetCard = {{Link|enfusion://ScriptEditor/scripts/Game/Editor/Containers/UIInfo/UIInfoAssetCard.c;1|UIInfoAssetCard}} | UiStyleColors = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Components/WidgetLibrary/SCR_ColorComponent.c;1|UiStyleColors}} | UIWidget = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/UIWidget.c;12|UIWidget}} | UIWidgets = {{Link|enfusion://ScriptEditor/scripts/Core/attributes.c;37|UIWidgets}} | UniformGridLayoutWidget = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/UniformGridLayoutWidget.c;15|UniformGridLayoutWidget}} | UniformGridSlot = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/UniformGridSlot.c;12|UniformGridSlot}} | UniversalInventoryStorageComponent = {{Link|enfusion://ScriptEditor/scripts/GameCode/Components/InventorySystem/UniversalInventoryStorageComponent.c;8|UniversalInventoryStorageComponent}} | UniversalInventoryStorageComponentClass = {{Link|enfusion://ScriptEditor/scripts/GameCode/Components/InventorySystem/UniversalInventoryStorageComponent.c;1|UniversalInventoryStorageComponentClass}} | UniversalListboxWidget = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/UniversalListboxWidget.c;12|UniversalListboxWidget}} | UnknownDamageEffect = {{Link|enfusion://ScriptEditor/scripts/Game/generated/DamageEffects/UnknownDamageEffect.c;12|UnknownDamageEffect}} | UploadSaveCommand = {{Link|enfusion://ScriptEditor/scripts/Game/Network/ServerCommands/UploadSaveCommand.c;36|UploadSaveCommand}} | UserActionContext = {{Link|enfusion://ScriptEditor/scripts/Game/generated/UserAction/UserActionContext.c;15|UserActionContext}} | UserPrivilege = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/UserPrivilege.c;7|UserPrivilege}} | UserPrivilegeResult = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/UserPrivilegeResult.c;7|UserPrivilegeResult}} | UserSettings = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Containers/UserSettings.c;12|UserSettings}} | UserShapeFilter = {{Link|enfusion://ScriptEditor/scripts/Core/generated/WorkbenchAPI/Terrain/UserShapeFilter.c;15|UserShapeFilter}} | UserWidget = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/UserWidget.c;12|UserWidget}} | UUID = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Types/UUID.c;27|UUID}} | ValidateFBXPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/ValidateFBXPlugin.c;18|ValidateFBXPlugin}} | ValidateMaterialPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/ValidateMaterialPlugin.c;1|ValidateMaterialPlugin}} | VCFlags = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Visual/VCFlags.c;13|VCFlags}} | vector = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Types/vector.c;12|vector}} | Vehicle = {{Link|enfusion://ScriptEditor/scripts/GameCode/Vehicle/Vehicle.c;22|Vehicle}} | VehicleAnimationComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/VehicleAnimationComponent.c;12|VehicleAnimationComponent}} | VehicleAnimationComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/VehicleAnimationComponentClass.c;12|VehicleAnimationComponentClass}} | VehicleBaseSimulation = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/VehicleBaseSimulation.c;16|VehicleBaseSimulation}} | VehicleBaseSimulationClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/VehicleBaseSimulation.c;12|VehicleBaseSimulationClass}} | VehicleBodyEffectBase = {{Link|enfusion://ScriptEditor/scripts/Game/Effects/ParticleEmitter/VehicleBody.c;5|VehicleBodyEffectBase}} | VehicleBodyEffectBaseClass = {{Link|enfusion://ScriptEditor/scripts/Game/Effects/ParticleEmitter/VehicleBody.c;1|VehicleBodyEffectBaseClass}} | VehicleBuoyancyComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Physics/VehicleBuoyancyComponent.c;12|VehicleBuoyancyComponent}} | VehicleBuoyancyComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Physics/VehicleBuoyancyComponentClass.c;12|VehicleBuoyancyComponentClass}} | VehicleChatChannel = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Chat/VehicleChatChannel.c;12|VehicleChatChannel}} | VehicleCinematicTrack = {{Link|enfusion://ScriptEditor/scripts/Game/Cinematics/VehicleCinematicTrack.c;1|VehicleCinematicTrack}} | VehicleClass = {{Link|enfusion://ScriptEditor/scripts/GameCode/Vehicle/Vehicle.c;18|VehicleClass}} | VehicleControllerComponent = {{Link|enfusion://ScriptEditor/scripts/GameCode/Vehicle/VehicleControllerComponent.c;8|VehicleControllerComponent}} | VehicleControllerComponentClass = {{Link|enfusion://ScriptEditor/scripts/GameCode/Vehicle/VehicleControllerComponent.c;1|VehicleControllerComponentClass}} | VehicleDebugDrawSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/VehicleDebugDrawSystem.c;12|VehicleDebugDrawSystem}} | VehicleDoorUserAction = {{Link|enfusion://ScriptEditor/scripts/Game/generated/UserAction/VehicleDoorUserAction.c;12|VehicleDoorUserAction}} | VehicleDust = {{Link|enfusion://ScriptEditor/scripts/Game/Vehicle/SCR_VehicleDustPerWheelComponent.c;34|VehicleDust}} | VehicleFixedWingSimulation = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/VehicleFixedWingSimulation.c;16|VehicleFixedWingSimulation}} | VehicleFixedWingSimulationClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/VehicleFixedWingSimulation.c;12|VehicleFixedWingSimulationClass}} | VehicleGamepadEffectsManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Gamepad/VehicleGamepadEffectsManagerComponent.c;16|VehicleGamepadEffectsManagerComponent}} | VehicleGamepadEffectsManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Gamepad/VehicleGamepadEffectsManagerComponent.c;12|VehicleGamepadEffectsManagerComponentClass}} | VehicleHelicopterSimulation = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/VehicleHelicopterSimulation.c;16|VehicleHelicopterSimulation}} | VehicleHelicopterSimulationClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/VehicleHelicopterSimulation.c;12|VehicleHelicopterSimulationClass}} | VehicleLightPortalComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/VehicleLightPortalComponent.c;12|VehicleLightPortalComponent}} | VehicleLightPortalComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/VehicleLightPortalComponentClass.c;12|VehicleLightPortalComponentClass}} | VehiclePartPanel = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Entities/VehiclePartPanel.c;16|VehiclePartPanel}} | VehiclePartPanelClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Entities/VehiclePartPanel.c;12|VehiclePartPanelClass}} | VehiclePartRotor = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Entities/VehiclePartRotor.c;16|VehiclePartRotor}} | VehiclePartRotorClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Entities/VehiclePartRotor.c;12|VehiclePartRotorClass}} | VehiclePerceivableComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Perception/VehiclePerceivableComponent.c;16|VehiclePerceivableComponent}} | VehiclePerceivableComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Perception/VehiclePerceivableComponent.c;12|VehiclePerceivableComponentClass}} | VehiclePostSimulationSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/VehiclePostSimulationSystem.c;12|VehiclePostSimulationSystem}} | VehicleProcAnimComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/VehicleProcAnimComponent.c;16|VehicleProcAnimComponent}} | VehicleProcAnimComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/VehicleProcAnimComponent.c;12|VehicleProcAnimComponentClass}} | VehicleResourceRequest = {{Link|enfusion://ScriptEditor/scripts/GameCode/Core/PrefabList.c;12|VehicleResourceRequest}} | VehiclesDustSystem = {{Link|enfusion://ScriptEditor/scripts/Game/Systems/VehiclesDustSystem.c;1|VehiclesDustSystem}} | VehicleSimulationSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/VehicleSimulationSystem.c;12|VehicleSimulationSystem}} | VehicleSoundComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/VehicleSoundComponent.c;16|VehicleSoundComponent}} | VehicleSoundComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/VehicleSoundComponent.c;12|VehicleSoundComponentClass}} | VehicleTrackedSimulation = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/VehicleTrackedSimulation.c;16|VehicleTrackedSimulation}} | VehicleTrackedSimulationClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/VehicleTrackedSimulation.c;12|VehicleTrackedSimulationClass}} | VehicleUpdateAnimsSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/VehicleUpdateAnimsSystem.c;12|VehicleUpdateAnimsSystem}} | VehicleUpdateSignalsSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/VehicleUpdateSignalsSystem.c;12|VehicleUpdateSignalsSystem}} | VehicleWheeledSimulation = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/VehicleWheeledSimulation.c;16|VehicleWheeledSimulation}} | VehicleWheeledSimulation_SA_B = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/VehicleWheeledSimulation_SA_B.c;16|VehicleWheeledSimulation_SA_B}} | VehicleWheeledSimulation_SA_BClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/VehicleWheeledSimulation_SA_B.c;12|VehicleWheeledSimulation_SA_BClass}} | VehicleWheeledSimulationClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/VehicleWheeledSimulation.c;12|VehicleWheeledSimulationClass}} | VehicleWheelSound = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Vehicle/VehicleWheelSound.c;12|VehicleWheelSound}} | VerticalFillOrigin = {{Link|enfusion://ScriptEditor/scripts/Core/proto/EnWidgets.c;64|VerticalFillOrigin}} | VerticalLayoutSlot = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/VerticalLayoutSlot.c;12|VerticalLayoutSlot}} | VerticalLayoutWidget = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/VerticalLayoutWidget.c;12|VerticalLayoutWidget}} | VicinitySystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/VicinitySystem.c;12|VicinitySystem}} | VideoCommand = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/VideoCommand.c;12|VideoCommand}} | VideoWidget = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/VideoWidget.c;12|VideoWidget}} | VisualIdentity = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Identity/VisualIdentity.c;12|VisualIdentity}} | VObject = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Resources/VObject.c;13|VObject}} | VolumeDataProviderComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/VolumeDataProviderComponent.c;16|VolumeDataProviderComponent}} | VolumeDataProviderComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/VolumeDataProviderComponent.c;12|VolumeDataProviderComponentClass}} | VolumeEntity = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/VolumeEntity.c;16|VolumeEntity}} | VolumeEntityClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/VolumeEntity.c;12|VolumeEntityClass}} | VolumeReceiverEntity = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/VolumeReceiverEntity.c;16|VolumeReceiverEntity}} | VolumeReceiverEntityClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/VolumeReceiverEntity.c;12|VolumeReceiverEntityClass}} | VolumesDebugSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/VolumesDebugSystem.c;12|VolumesDebugSystem}} | VoNComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/VoNComponent.c;19|VoNComponent}} | VoNComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/VoNComponent.c;12|VoNComponentClass}} | VonRadioMessage = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Radio/VonRadioMessage.c;12|VonRadioMessage}} | VoNSystem = {{Link|enfusion://ScriptEditor/scripts/Game/generated/System/VoNSystem.c;12|VoNSystem}} | WallGeneratorEntity = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/WallGeneratorEntity.c;6|WallGeneratorEntity}} | WallGeneratorEntityClass = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/WallGeneratorEntity.c;1|WallGeneratorEntityClass}} | WallGeneratorPointData = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/WallGenerator/WallGeneratorPointData.c;1|WallGeneratorPointData}} | WallLengthGroup = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/WallGenerator/WallLengthGroup.c;1|WallLengthGroup}} | WallWeightPair = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/WallGenerator/WallWeightPair.c;2|WallWeightPair}} | WB_UIMenuItem = {{Link|enfusion://ScriptEditor/scripts/GameLib/entities/gameLibEntities.c;3|WB_UIMenuItem}} | WBModuleDef = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorkbenchAPI/Modules/WBModuleDef.c;14|WBModuleDef}} | WBProgressDialog = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorkbenchAPI/WBProgressDialog.c;14|WBProgressDialog}} | WeaponAimModifierContext = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapons/WeaponAimModifierContext.c;16|WeaponAimModifierContext}} | WeaponAnimationComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/WeaponAnimationComponent.c;12|WeaponAnimationComponent}} | WeaponAnimationComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/WeaponAnimationComponentClass.c;12|WeaponAnimationComponentClass}} | WeaponAttachmentAttributes = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/WeaponAttachmentAttributes.c;12|WeaponAttachmentAttributes}} | WeaponAttachmentsStorageComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/WeaponAttachmentsStorageComponent.c;16|WeaponAttachmentsStorageComponent}} | WeaponAttachmentsStorageComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/InventorySystem/WeaponAttachmentsStorageComponent.c;12|WeaponAttachmentsStorageComponentClass}} | WeaponAttachmentsStorageComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Serializers/WeaponAttachmentsStorageComponentSerializer.c;12|WeaponAttachmentsStorageComponentSerializer}} | WeaponComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/WeaponComponent.c;12|WeaponComponent}} | WeaponComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/WeaponComponentClass.c;12|WeaponComponentClass}} | WeaponComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Serializers/WeaponComponentSerializer.c;12|WeaponComponentSerializer}} | WeaponGamepadEffectsManagerComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Gamepad/WeaponGamepadEffectsManagerComponent.c;16|WeaponGamepadEffectsManagerComponent}} | WeaponGamepadEffectsManagerComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Gamepad/WeaponGamepadEffectsManagerComponent.c;12|WeaponGamepadEffectsManagerComponentClass}} | WeaponInfoColorSet = {{Link|enfusion://ScriptEditor/scripts/Game/UI/HUD/WeaponInfo/SCR_WeaponInfo_MultiWeaponTurret.c;943|WeaponInfoColorSet}} | WeaponSlotComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/WeaponSlotComponent.c;12|WeaponSlotComponent}} | WeaponSlotComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/WeaponSlotComponentClass.c;12|WeaponSlotComponentClass}} | WeaponSlotComponentSerializer = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Systems/Persistence/Serializers/WeaponSlotComponentSerializer.c;12|WeaponSlotComponentSerializer}} | WeaponSoundComponent = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/WeaponSoundComponent.c;16|WeaponSoundComponent}} | WeaponSoundComponentClass = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Components/WeaponSoundComponent.c;12|WeaponSoundComponentClass}} | WeaponUIInfo = {{Link|enfusion://ScriptEditor/scripts/Game/UI/WeaponUIInfo.c;3|WeaponUIInfo}} | WeatherCinematicTrack = {{Link|enfusion://ScriptEditor/scripts/Game/Cinematics/WeatherCinematicTrack.c;1|WeatherCinematicTrack}} | WeatherFogPattern = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WeatherFogPattern.c;7|WeatherFogPattern}} | WeatherLightning = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WeatherLightning.c;7|WeatherLightning}} | WeatherLightningFlash = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WeatherLightningFlash.c;7|WeatherLightningFlash}} | WeatherLightningPattern = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WeatherLightningPattern.c;7|WeatherLightningPattern}} | WeatherManager = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WeatherManager.c;7|WeatherManager}} | WeatherRainPattern = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WeatherRainPattern.c;7|WeatherRainPattern}} | WeatherState = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WeatherState.c;7|WeatherState}} | WeatherStateMachine = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WeatherStateMachine.c;7|WeatherStateMachine}} | WeatherStateTransitionManager = {{Link|enfusion://ScriptEditor/scripts/Game/generated/WeatherStateTransitionManager.c;7|WeatherStateTransitionManager}} | WeatherStateTransitionNode = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WeatherStateTransitionNode.c;7|WeatherStateTransitionNode}} | WeatherTransition = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WeatherTransition.c;7|WeatherTransition}} | WeatherTransitionRequestResponse = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WeatherTransitionRequestResponse.c;7|WeatherTransitionRequestResponse}} | WeatherVariant = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WeatherVariant.c;7|WeatherVariant}} | WeatherWindPattern = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WeatherWindPattern.c;7|WeatherWindPattern}} | WelcomeDialogUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/Dialogs/WelcomeDialog.c;2|WelcomeDialogUI}} | WETMouseButtonFlag = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorkbenchAPI/WETMouseButtonFlag.c;15|WETMouseButtonFlag}} | WideForestGeneratorClusterObject = {{Link|enfusion://ScriptEditor/scripts/Game/Generators/ForestGenerator/ForestGeneratorClusters.c;75|WideForestGeneratorClusterObject}} | Widget = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/Widget.c;12|Widget}} | WidgetAnimationAlphaMask = {{Link|enfusion://ScriptEditor/scripts/GameLib/WidgetAnimations.c;172|WidgetAnimationAlphaMask}} | WidgetAnimationBase = {{Link|enfusion://ScriptEditor/scripts/GameLib/WidgetAnimation.c;38|WidgetAnimationBase}} | WidgetAnimationBlurIntensity = {{Link|enfusion://ScriptEditor/scripts/GameLib/WidgetAnimations.c;2|WidgetAnimationBlurIntensity}} | WidgetAnimationColor = {{Link|enfusion://ScriptEditor/scripts/GameLib/WidgetAnimations.c;248|WidgetAnimationColor}} | WidgetAnimationFrameSize = {{Link|enfusion://ScriptEditor/scripts/GameLib/WidgetAnimations.c;282|WidgetAnimationFrameSize}} | WidgetAnimationImageRotation = {{Link|enfusion://ScriptEditor/scripts/GameLib/WidgetAnimations.c;210|WidgetAnimationImageRotation}} | WidgetAnimationImageSaturation = {{Link|enfusion://ScriptEditor/scripts/GameLib/WidgetAnimations.c;354|WidgetAnimationImageSaturation}} | WidgetAnimationLayoutFill = {{Link|enfusion://ScriptEditor/scripts/GameLib/WidgetAnimations.c;139|WidgetAnimationLayoutFill}} | WidgetAnimationOpacity = {{Link|enfusion://ScriptEditor/scripts/GameLib/WidgetAnimations.c;35|WidgetAnimationOpacity}} | WidgetAnimationPadding = {{Link|enfusion://ScriptEditor/scripts/GameLib/WidgetAnimations.c;91|WidgetAnimationPadding}} | WidgetAnimationPosition = {{Link|enfusion://ScriptEditor/scripts/GameLib/WidgetAnimations.c;318|WidgetAnimationPosition}} | WidgetAnimationValue = {{Link|enfusion://ScriptEditor/scripts/GameLib/WidgetAnimations.c;392|WidgetAnimationValue}} | WidgetEventCallback = {{Link|enfusion://ScriptEditor/scripts/Core/proto/EnWidgets.c;9|WidgetEventCallback}} | WidgetFlags = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/WidgetFlags.c;13|WidgetFlags}} | WidgetLibraryMenuUI = {{Link|enfusion://ScriptEditor/scripts/Game/UI/Menu/WidgetLibraryMenuUI.c;2|WidgetLibraryMenuUI}} | WidgetManager = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/WidgetManager.c;15|WidgetManager}} | WidgetNavigationDirection = {{Link|enfusion://ScriptEditor/scripts/Core/proto/EnWidgets.c;49|WidgetNavigationDirection}} | WidgetNavigationRuleType = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/WidgetNavigationRuleType.c;15|WidgetNavigationRuleType}} | WidgetSource = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Containers/WidgetSource.c;12|WidgetSource}} | WidgetType = {{Link|enfusion://ScriptEditor/scripts/Core/proto/EnWidgets.c;12|WidgetType}} | WindingOrder = {{Link|enfusion://ScriptEditor/scripts/Core/generated/Math/WindingOrder.c;12|WindingOrder}} | WindowSlot = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/WindowSlot.c;12|WindowSlot}} | WindowWidget = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/WindowWidget.c;12|WindowWidget}} | Workbench = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorkbenchAPI/Workbench.c;14|Workbench}} | WorkbenchPlugin = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorkbenchAPI/Plugins/WorkbenchPlugin.c;14|WorkbenchPlugin}} | WorkbenchPluginAttribute = {{Link|enfusion://ScriptEditor/scripts/GameLib/workbench/workbench.c;61|WorkbenchPluginAttribute}} | WorkbenchSearchResourcesCallback = {{Link|enfusion://ScriptEditor/scripts/GameLib/workbench/workbench.c;3|WorkbenchSearchResourcesCallback}} | WorkbenchToolAttribute = {{Link|enfusion://ScriptEditor/scripts/GameLib/workbench/workbench.c;87|WorkbenchToolAttribute}} | WorkshopApi = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/WorkshopApi.c;13|WorkshopApi}} | WorkshopAuthor = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/WorkshopAuthor.c;12|WorkshopAuthor}} | WorkshopCatalogue = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/WorkshopCatalogue.c;12|WorkshopCatalogue}} | WorkshopComment = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorkshopComment.c;7|WorkshopComment}} | WorkshopItem = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/WorkshopItem.c;13|WorkshopItem}} | WorkshopTag = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/WorkshopTag.c;14|WorkshopTag}} | WorkspaceSlot = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/WorkspaceSlot.c;12|WorkspaceSlot}} | WorkspaceWidget = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/WorkspaceWidget.c;15|WorkspaceWidget}} | World = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/World/World.c;15|World}} | WorldBuildMeta = {{Link|enfusion://ScriptEditor/scripts/WorkbenchCommon/AddonBuildInfoTool.c;246|WorldBuildMeta}} | WorldController = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorldSystems/WorldController.c;12|WorldController}} | WorldControllerInfo = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorldSystems/WorldControllerInfo.c;12|WorldControllerInfo}} | WorldDataExport = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/WorldEditor/SCR_WorldDataExportTool.c;250|WorldDataExport}} | WorldDecal = {{Link|enfusion://ScriptEditor/scripts/GameLib/entities/Decal.c;8|WorldDecal}} | WorldDecalClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/entities/Decal.c;1|WorldDecalClass}} | WorldEditor = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorkbenchAPI/Modules/WorldEditor.c;14|WorldEditor}} | WorldEditorAPI = {{Link|enfusion://ScriptEditor/scripts/Core/generated/WorkbenchAPI/WorldEditorAPI.c;12|WorldEditorAPI}} | WorldEditorIngame = {{Link|enfusion://ScriptEditor/scripts/Core/worldEditor.c;6|WorldEditorIngame}} | WorldEditorPlugin = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorkbenchAPI/Plugins/WorldEditorPlugin.c;14|WorldEditorPlugin}} | WorldEditorTool = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorkbenchAPI/Plugins/WorldEditorTool.c;17|WorldEditorTool}} | WorldEntity = {{Link|enfusion://ScriptEditor/scripts/GameLib/entities/gameLibEntities.c;64|WorldEntity}} | WorldEntityClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/entities/gameLibEntities.c;60|WorldEntityClass}} | WorldExporterConfig = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/WorldExporterPlugin.c;7|WorldExporterConfig}} | WorldExporterPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/WorldExporterPlugin.c;377|WorldExporterPlugin}} | WorldExportScript = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/WorldExporterPlugin.c;358|WorldExportScript}} | WorldOccluderEntity = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/WorldOccluderEntity.c;16|WorldOccluderEntity}} | WorldOccluderEntityClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Entities/WorldOccluderEntity.c;12|WorldOccluderEntityClass}} | WorldOneTimePointArgs = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorldSystems/WorldOneTimePointArgs.c;13|WorldOneTimePointArgs}} | WorldRunConfiguration = {{Link|enfusion://ScriptEditor/scripts/WorkbenchCommon/WorldRunTool.c;2|WorldRunConfiguration}} | WorldRunPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchCommon/WorldRunTool.c;10|WorldRunPlugin}} | WorldSaveItem = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/WorldSaveItem.c;12|WorldSaveItem}} | WorldSaveManifest = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/online/WorldSaveManifest.c;12|WorldSaveManifest}} | WorldSubsceneComponent = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/Components/WorldSubsceneComponent.c;16|WorldSubsceneComponent}} | WorldSubsceneComponentClass = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorldSubsceneComponentClass.c;7|WorldSubsceneComponentClass}} | WorldSystem = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorldSystems/WorldSystem.c;16|WorldSystem}} | WorldSystemInfo = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorldSystems/WorldSystemInfo.c;13|WorldSystemInfo}} | WorldSystemLocation = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorldSystems/WorldSystemLocation.c;12|WorldSystemLocation}} | WorldSystemPoint = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorldSystems/WorldSystemPoint.c;12|WorldSystemPoint}} | WorldSystems = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorldSystems/WorldSystems.c;12|WorldSystems}} | WorldTestPlugin = {{Link|enfusion://ScriptEditor/scripts/WorkbenchCommon/WorldTestTool.c;1|WorldTestPlugin}} | WorldTimestamp = {{Link|enfusion://ScriptEditor/scripts/Core/generated/World/WorldTimestamp.c;25|WorldTimestamp}} | WorldUpdatePointArgs = {{Link|enfusion://ScriptEditor/scripts/GameLib/generated/WorldSystems/WorldUpdatePointArgs.c;13|WorldUpdatePointArgs}} | XComboBoxWidget = {{Link|enfusion://ScriptEditor/scripts/Core/generated/UI/XComboBoxWidget.c;12|XComboBoxWidget}} | XOBResourceInfo = {{Link|enfusion://ScriptEditor/scripts/WorkbenchGameCommon/ResourceInfo.c;389|XOBResourceInfo}} | ZeroGeneratorAimModifier = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/ZeroGeneratorAimModifier.c;12|ZeroGeneratorAimModifier}} | ZeroingGeneratedData = {{Link|enfusion://ScriptEditor/scripts/GameCode/Weapon/SightsComponent.c;2|ZeroingGeneratedData}} | ZeroingMarkInfo = {{Link|enfusion://ScriptEditor/scripts/Game/generated/Weapon/ZeroingMarkInfo.c;12|ZeroingMarkInfo}} |= -no [[Template:Link/Enfusion|class]] provided!-{{TemplateCase||[[Category:Link/Enfusion template usage error]]}} |#default= {{#if:{{#pos:{{{2}}}|/}} | {{Link|enfusion://ResourceManager/~ArmaReforger:{{{2}}}|{{{2}}}}} | -unknown [[Template:Link/Enfusion|class]] ("{{{2}}}") provided!-{{TemplateCase||[[Category:Pages with wrong Enfusion classes]]}} }} }}

<!-- ARMA 4 --> |arma4= Soon™…

<!-- no (valid) game provided --> |= -no '''[[Template:Link/Enfusion|game]]''' defined!-{{TemplateCase||[[Category:Link/Enfusion template usage error]]}} |#default= -wrong '''[[Template:Link/Enfusion|game]]''' ("{{{1}}}") provided!-{{TemplateCase||[[Category:Link/Enfusion template usage error]]}} }}</includeonly><noinclude>{{Doc/Template |descr= Create a {{GameCategory|armaR|Modding|Official Tools|text= Workbench}} link for: * {{Link|Arma Reforger:Script Editor|Script Editor}} scripting classes * {{Link|Arma Reforger:Resource Manager|Resource Manager}} directory path (note: paths '''must''' use {{hl|/}} separator and '''not''' end with {{hl|/}}) * it can ''eventually'' be expanded to uniquely named resource files. It also adds the page to the [[:Category:Link/Enfusion template usage error|Link/Enfusion template usage error]] category on usage error, and to the [[:Category:Pages with wrong Enfusion classes|Pages with wrong Enfusion classes]] category if the provided class is unknown. |param1= game |descr1= format to the {{Template|Name}}'s identifier format, e.g {{hl|armaR}}, {{hl|arma4}} etc. |param2= itemName |descr2= '''scripting classname''', e.g {{hl|SCR_UIInfo}}. Uniquely named resource files ''may'' follow later (e.g {{hl|SCR_UIInfo.c}}, {{hl|FieldManualConfigRoot.conf}}). |example1= <nowiki>{{Link/Enfusion}}</nowiki> |result1= {{Link/Enfusion}} |example2= <nowiki>{{Link/Enfusion|abc}}</nowiki> |result2= {{Link/Enfusion|abc}} |example3= <nowiki>{{Link/Enfusion|armaR}}</nowiki> |result3= {{Link/Enfusion|armaR}} |example4= <nowiki>{{Link/Enfusion|armaR|stuff}}</nowiki> |result4= {{Link/Enfusion|armaR|stuff}} |example5= <nowiki>{{Link/Enfusion|armaR|SCR_UIInfo}}</nowiki><br><nowiki>{{Link/Enfusion|armaR|SCR_UIInfo.c}}</nowiki><br><nowiki>{{Link/Enfusion|armaR|FieldManualConfigRoot.conf}}</nowiki> |result5= {{Link/Enfusion|armaR|SCR_UIInfo}}<br>{{Link/Enfusion|armaR|SCR_UIInfo.c}}<br>{{Link/Enfusion|armaR|FieldManualConfigRoot.conf}} |example6= <nowiki>{{Link/Enfusion|arma4}}</nowiki><br><nowiki>{{Link/Enfusion|arma4|SCR_UIInfo}}</nowiki> |result6= {{Link/Enfusion|arma4}}<br>{{Link/Enfusion|arma4|SCR_UIInfo}} |example7= <nowiki>{{Link/Enfusion|armaR|scripts/Game/Generators}}</nowiki> |result7= {{Link/Enfusion|armaR|scripts/Game/Generators}} }}</noinclude>
tdyl6b75pj04nl9dlr51nltijlprlm4

# Template:ArgTitle

10
25195
377948
347775
2026-01-14T13:32:32Z
Lou Montana
10739
Added old retrocompatibility (that was {{ArgTitle|title|level}} instead of {{ArgTitle|level|title}} like now)
377948
wikitext
text/x-wiki
<includeonly>{{#switch: {{{2}}} |1 |2 |3 |4 |5 |6= {{#if:{{{2|}}}|<div style="display: flex; align-items: baseline">{{#if:{{{3|}}}|<div style="margin-right: 0.5em">{{{3}}}</div>}}<div style="flex-grow: 1"> {{#switch: {{{2}}} |1= = |2= == |3= === |4= ==== |5= ===== |6= ======}} {{{1}}} {{#switch: {{{2}}} |1= = |2= == |3= === |4= ==== |5= ===== |6= ======}} </div>{{#if:{{{4|}}}|<div style="margin-left: 0.5em">{{{4}}}</div>}} </div>|-no title defined!-{{TemplateCase||[[Category:ArgTitle template usage error]]}}}}

|#default= {{#if:{{{2|}}}|<div style="display: flex; align-items: baseline">{{#if:{{{3|}}}|<div style="margin-right: 0.5em">{{{3}}}</div>}}<div style="flex-grow: 1"> {{#switch: {{{1}}} |1= = |#default |2= == |3= === |4= ==== |5= ===== |6= ======}} {{{2}}} {{#switch: {{{1}}} |1= = |#default |2= == |3= === |4= ==== |5= ===== |6= ======}} </div>{{#if:{{{4|}}}|<div style="margin-left: 0.5em">{{{4}}}</div>}} </div>|-no title defined!-{{TemplateCase||[[Category:ArgTitle template usage error]]}}}}

}}</includeonly><noinclude>__NOTOC__{{Doc/Template |descr= Defines a wiki title (e.g {{hl|c= === Title ===}}) |param1= level |descr1= (Optional, default 2) 1..6 number (number of "{{=}}" in wiki wode for title, e.g <syntaxhighlight lang="html+handlebars" inline>== title H2 ==</syntaxhighlight>) |param2= title |descr2= title text |param3= left |descr3= (Optional, default empty) any text that should be on the left of the title text (usually {{Template|GVI}} or {{Template|Icon}}) |param4= right |descr4= (Optional, default empty) any text that should be on the right of the title text (usually {{Template|GVI}} or {{Template|Icon}}) |example1= style="min-width: 15em" {{!}} <nowiki>{{ArgTitle}}</nowiki> |result1= style="min-width: 15em" {{!}} {{ArgTitle}} |example2= <nowiki>{{ArgTitle|4}}</nowiki> |result2= {{ArgTitle|4}} |example3= <nowiki>{{ArgTitle|4|My Title}}</nowiki> |result3= {{ArgTitle|4|My Title}} |example4= <nowiki>{{ArgTitle|4|My Title|Left}}</nowiki> |result4= {{ArgTitle|4|My Title|Left}} |example5= <nowiki>{{ArgTitle|4|My Title||Right}}</nowiki> |result5= {{ArgTitle|4|My Title||Right}} |example6= <nowiki>{{ArgTitle|4|My Title|Left|Right}}</nowiki> |result6= {{ArgTitle|4|My Title|Left|Right}} |example7= <nowiki>{{ArgTitle|4|Test|{{GVI|ofp|1.00}}|{{Icon|serverExec|32}}}}</nowiki> |result7= <br><br>{{ArgTitle|4|Test|{{GVI|ofp|1.00}}|{{Icon|serverExec|32}}}}<br><br> |example8= <nowiki>{{ArgTitle|My Title|4}}</nowiki><br> <nowiki>{{ArgTitle|My Title|4|{{GVI|ofp|1.00}}}}</nowiki> |result8= {{ArgTitle|My Title|4}}<br>{{ArgTitle|My Title|4|{{GVI|ofp|1.00}}}} }}</noinclude>
se3z3icxm3pxqpfshjdhd2hnin1lxkf

# Template:Sticky

10
28922
295910
249374
2021-11-16T09:33:36Z
Lou Montana
10739
Text replacement - "<tt>([^ =]+)<\/tt>" to "{{hl|$1}}"
295910
wikitext
text/x-wiki
<includeonly>{{#if:{{{1|}}} | <div class="sticky-{{#ifeq:{{lc:{{{2|top}}}}}|bottom|bottom|top}}">{{{1}}}</div> | -no content provided- }}</includeonly><noinclude>{{Doc/Template |descr= Creates a sticky note - an information that sticks to the page, even after scrolling. |param1= content |descr1= the sticky note content |param2= position |descr2= (Optional, default {{hl|top}}) can be {{hl|top}} or {{hl|bottom}}. |example1= <nowiki>{{Sticky}}</nowiki> |result1= {{Sticky}} |example2= <nowiki>{{Sticky|{{Feature|warning|Use '''on'''EventName in [[Config]]!}}}}</nowiki> |result2= style{{=}}"height: 40em; vertical-align: top" {{!}} {{Sticky|{{Feature|warning|Use '''on'''EventName in [[Config]]!}}}} |example3= <nowiki>{{Sticky|Jump to [[#top|the top]] of the page|bottom}}</nowiki> |result3= style{{=}}"height: 40em; vertical-align: bottom" {{!}} {{Sticky|Jump to [[#top|the top]] of the page|bottom}} }}</noinclude>
t2rkujsui0j4tb0d0zadf36gq8gvxi9

# Template:Infobox/WorkbenchPlugin

10
38137
378047
369861
2026-01-29T12:03:48Z
Lou Montana
10739
Add uiPath
378047
wikitext
text/x-wiki
<includeonly><div class="float-right" style="max-width: 30em"> {| class="wikitable" ! class="align-center" | {{{name|-no name provided!-{{TemplateCase||[[Category:Infobox/WorkbenchPlugin template usage error]]}}}}} |- {{#if:{{{editor|}}} | {{#if: {{#pos:{{Trim|{{{editor}}}}}|<nowiki> </nowiki>}} | <!-- multiple values --> {{#if: {{#pos:{{{editor}}}|world}}{{#pos:{{{editor}}}|particle}}{{#pos:{{{editor}}}|animation}}{{#pos:{{{editor}}}|script}}{{#pos:{{{editor}}}|audio}}{{#pos:{{{editor}}}|behavior}}{{#pos:{{{editor}}}|string}}{{#pos:{{{editor}}}|procanim}} | {{!}} style="font-size: 0.9em" {{!}} This plugin is available in: {{Columns|2| {{#if: {{#pos:{{{editor}}}|resource}} | * {{Link|{{TemplateCase|Arma Reforger:Resource Manager{{!}}Resource Manager|{{NAMESPACE}}:Resource Manager}}}} }}{{#if: {{#pos:{{{editor}}}|world}} | * {{Link|{{TemplateCase|Arma Reforger:World Editor{{!}}World Editor|{{NAMESPACE}}:World Editor}}}} }}{{#if: {{#pos:{{{editor}}}|particle}} | * {{Link|{{TemplateCase|Arma Reforger:Particle Editor{{!}}Particle Editor|{{NAMESPACE}}:Particle Editor}}}} }}{{#if: {{#pos:{{{editor}}}|animation}} | * {{Link|{{TemplateCase|Arma Reforger:Animation Editor{{!}}Animation Editor|{{NAMESPACE}}:Animation Editor}}}} }}{{#if: {{#pos:{{{editor}}}|script}} | * {{Link|{{TemplateCase|Arma Reforger:Script Editor{{!}}Script Editor|{{NAMESPACE}}:Script Editor}}}} }}{{#if: {{#pos:{{{editor}}}|audio}} | * {{Link|{{TemplateCase|Arma Reforger:Audio Editor{{!}}Audio Editor|{{NAMESPACE}}:Audio Editor}}}} }}{{#if: {{#pos:{{{editor}}}|behavior}} | * {{Link|{{TemplateCase|Arma Reforger:Behavior Editor{{!}}Behavior Editor|{{NAMESPACE}}:Behavior Editor}}}} }}{{#if: {{#pos:{{{editor}}}|string}} | * {{Link|{{TemplateCase|Arma Reforger:String Editor{{!}}String Editor|{{NAMESPACE}}:String Editor}}}} }}{{#if: {{#pos:{{{editor}}}|procanim}} | * {{Link|{{TemplateCase|Arma Reforger:Procedural Animation Editor{{!}}Procedural Animation Editor|{{NAMESPACE}}:Procedural Animation Editor}}}} }} }} | {{!}} class="align-center" {{!}} -bad editors "{{{editor}}}" provided!-{{TemplateCase||[[Category:Infobox/WorkbenchPlugin template usage error]]}} }} | <!-- single or no values --> {{!}} class="align-center" {{!}} {{#switch:{{lc:{{{editor}}}}} |resource= {{Link|{{TemplateCase|Arma Reforger:Resource Manager{{!}}Resource Manager|{{NAMESPACE}}:Resource Manager}}}} plugin |world= {{Link|{{TemplateCase|Arma Reforger:World Editor{{!}}World Editor|{{NAMESPACE}}:World Editor}}}} plugin |particle= {{Link|{{TemplateCase|Arma Reforger:Particle Editor{{!}}Particle Editor|{{NAMESPACE}}:Particle Editor}}}} plugin |animation= {{Link|{{TemplateCase|Arma Reforger:Animation Editor{{!}}Animation Editor|{{NAMESPACE}}:Animation Editor}}}} plugin |script= {{Link|{{TemplateCase|Arma Reforger:Script Editor{{!}}Script Editor|{{NAMESPACE}}:Script Editor}}}} plugin |audio= {{Link|{{TemplateCase|Arma Reforger:Audio Editor{{!}}Audio Editor|{{NAMESPACE}}:Audio Editor}}}} plugin |behavior= {{Link|{{TemplateCase|Arma Reforger:Behavior Editor{{!}}Behavior Editor|{{NAMESPACE}}:Behavior Editor}}}} plugin |string= {{Link|{{TemplateCase|Arma Reforger:String Editor{{!}}String Editor|{{NAMESPACE}}:String Editor}}}} plugin |procanim= {{Link|{{TemplateCase|Arma Reforger:Procedural Animation Editor{{!}}Procedural Animation Editor|{{NAMESPACE}}:Procedural Animation Editor}}}} plugin |#default= -bad editor "{{{editor|}}}" provided!-{{TemplateCase||[[Category:Infobox/WorkbenchPlugin template usage error]]}} }} }} | {{!}} class="align-center" {{!}} -no editor provided!-{{TemplateCase||[[Category:Infobox/WorkbenchPlugin template usage error]]}} }} {{#if: {{{uiPath|}}} | {{!}}- {{!}} {{!}} '''UI Path:''' Plugins/{{{uiPath}}} }} {{#if: {{{shortcut|}}} | {{!}}- {{!}} {{!}} {{{shortcut}}} }} |- | {{{descr|-no description provided!-{{TemplateCase||[[Category:Infobox/WorkbenchPlugin template usage error]]}}}}} {{#if: {{{file|}}} | <nowiki/> {{!}}- {{!}} '''File:''' {{{file}}} }} |}</div></includeonly><noinclude>{{Doc/Template |descr= Create an infobox for a Workbench Editor plugin.{{Feature|informative|All parameters are named.}} Its error category is {{Link|Category:Infobox/WorkbenchPlugin template usage error|Infobox/WorkbenchPlugin template usage error}}. |param1= name= |descr1= the plugin's display name |param2= editor= |descr2= in which editors can this plugin be found - can be a multiple space-separated (case-insensitive) selection of: <div style="margin-left: 2em"> {{Columns|4| * {{Link|Arma Reforger:Resource Manager|resource}} * {{Link|Arma Reforger:World Editor|world}} * {{Link|Arma Reforger:Particle Editor|particle}} * {{Link|Arma Reforger:Animation Editor|animation}} * {{Link|Arma Reforger:Script Editor|script}} * {{Link|Arma Reforger:Audio Editor|audio}} * {{Link|Arma Reforger:Behavior Editor|behavior}} * {{Link|Arma Reforger:String Editor|string}} * {{Link|Arma Reforger:Procedural Animation Editor|procanim}} }} </div> |param3= descr= |descr3= a short description of the plugin's role(s) |param4= uiPath= |descr4= (Optional) UI path that will be prefixed by {{hl|Plugins/}}, e.g "Terrain" or "World/Prefabs" (will respectively display {{hl|Plugins/Terrain}} / {{hl|Plugins/World/Prefabs}}) |param5= shortcut= |descr5= (Optional) keyboard shortcut - see {{Template|Controls}} |param6= file= |descr6= (Optional) the editor's file path - see {{Template|Link}}

|example1= <syntaxhighlight lang="handlebars">{{Infobox/WorkbenchPlugin}}</syntaxhighlight> |result1= {{Infobox/WorkbenchPlugin}}

|example2= <syntaxhighlight lang="handlebars"> {{Infobox/WorkbenchPlugin |name= My Plugin |editor= script |file= }} </syntaxhighlight> |result2= {{Infobox/WorkbenchPlugin |name= My Plugin |editor= script |file= }}

|example3= <syntaxhighlight lang="handlebars"> {{Infobox/WorkbenchPlugin |name= My Plugin |editor= badvalue |descr= plugin description }} </syntaxhighlight> |result3= {{Infobox/WorkbenchPlugin |name= My Plugin |editor= badvalue |descr= plugin description }}

|example4= <syntaxhighlight lang="handlebars"> {{Infobox/WorkbenchPlugin |name= My Plugin |editor= bad value |descr= plugin description }} </syntaxhighlight> |result4= {{Infobox/WorkbenchPlugin |name= My Plugin |editor= bad value |descr= plugin description }}

|example5= <syntaxhighlight lang="handlebars"> {{Infobox/WorkbenchPlugin |name= Basic Code Formatter |editor= script |descr= The Basic Code Formatter is a plugin that helps formatting code properly. Use is this way: * Shortcut 1 to scan edited lines in the currently-opened file (or in a whole addon, depending on options) * Shortcut 2 to scan '''all''' the lines in the currently-opened file (not depending on options) |file= {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_BasicCodeFormatterPlugin.c}} |shortcut= <nowiki/> # {{Controls|Ctrl|Shift|K}} # {{Controls|Ctrl|Alt|Shift|K}} }} </syntaxhighlight> |result5= {{Infobox/WorkbenchPlugin |name= Basic Code Formatter |editor= script |descr= The Basic Code Formatter is a plugin that helps formatting code properly. Use is this way: * Shortcut 1 to scan edited lines in the currently-opened file (or in a whole addon, depending on options) * Shortcut 2 to scan '''all''' the lines in the currently-opened file (not depending on options) |file= {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_BasicCodeFormatterPlugin.c}} |shortcut= <nowiki/> # {{Controls|Ctrl|Shift|K}} # {{Controls|Ctrl|Alt|Shift|K}} }}

|example6= <syntaxhighlight lang="handlebars"> {{Infobox/WorkbenchPlugin |name= Do Something |editor= world particle animation script audio behavior string procanim |descr= The Do Something plugin does something, as the name says. |shortcut= <nowiki/> # {{Controls|Ctrl|Alt|Del}} in {{Link|Arma Reforger:Script Editor|Script Editor}} # {{Controls|Ctrl|Shift|Del}} in {{Link|Arma Reforger:World Editor|World Editor}} |file= {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_BasicCodeFormatterPlugin.c}} }} </syntaxhighlight> | |result6= {{Infobox/WorkbenchPlugin |name= Do Something |editor= world particle animation script audio behavior string procanim |descr= The Do Something plugin does something, as the name says. |uiPath= World Entities |shortcut= <nowiki/> # {{Controls|Ctrl|Alt|Del}} in {{Link|Arma Reforger:Script Editor|Script Editor}} # {{Controls|Ctrl|Shift|Del}} in {{Link|Arma Reforger:World Editor|World Editor}} |file= {{Link|enfusion://ScriptEditor/scripts/WorkbenchGame/ScriptEditor/SCR_BasicCodeFormatterPlugin.c}} }}

}}</noinclude>
20ux4kz47hyqm0deoxn3gbh5yuf58ur

# Template:sic

10
15508
329148
322910
2022-07-25T12:14:19Z
Lou Montana
10739
Add proper spelling argument, proper doc, CSS classes
329148
wikitext
text/x-wiki
<includeonly>{{#if:{{{1|}}}|<span class="sic" title="This is the intended documentation spelling{{#if:{{{2|}}}|; the actual proper spelling would be '{{{2}}}'}}.">{{{1}}}|}}{{#if:{{{1|}}}|</span>|}}<sup class="sic" title="This is the intended documentation spelling{{#if:{{{2|}}}|; the actual proper spelling would be '{{{2}}}'}}.">[[Template:sic|sic]]</sup></includeonly><noinclude>{{Doc/Template

|descr= Template {{hl|<nowiki>{{sic}}</nowiki>}} placed immediately after a circumstantially correct but unusual spelling or grammatically iffy statement, will add a small but superior note at that point in the text that links to this page.

{{Feature|quote|The Latin adverb '''sic''' ("thus"; in full: ''sic erat scriptum'', "thus was it written") added immediately after a quoted word or phrase (or a longer piece of text), indicates that the quotation has been transcribed exactly as found in the original source, complete with any erroneous or archaic spelling or other nonstandard presentation.|Wikipedia|https://en.wikipedia.org/wiki/Sic}} '''''Sic''''', in other words, indicates that the word is a direct retranscription and not the result of a spelling mistake.

{{Feature|important|Not to be confused with '''{{Link|https://www.merriam-webster.com/dictionary/sigh|sigh}}'''.}}

|param1= incorrect |descr1= (Optional) wrongfully spelt term

|param2= correct |descr2= (Optional) correct spelling

|example1= {{hl|"...so we can then use setDammage<nowiki>{{sic}}</nowiki> to..."}} |result1= {{hl|"...so we can then use setDammage{{sic}} to..."}}

|example2= {{hl|"...so we can then use <nowiki>{{sic|setDammage}}</nowiki> to..."}} |result2= {{hl|"...so we can then use {{sic|setDammage}} to..."}}

|example3= {{hl|"this is a <nowiki>{{sic|nular|nullar}}</nowiki> operator"}} |result3= {{hl|"this is a {{sic|nular|nullar}} operator"}} }} </noinclude>
rozawfuj713s3f4tgw29bniwf4lt55s

# Template:Informative

10
34278
336987
336986
2023-01-05T10:24:33Z
Lou Montana
10739
Add category
336987
wikitext
text/x-wiki
<includeonly>{{Feature|informative|{{{1}}}}}</includeonly><noinclude>See [[Template:Feature|Feature-informative Template]].[[Category:Historical Templates]]</noinclude>
s8vz1996ol6l7gubp541ir4spxe8pas

# Template:dayz

10
24355
322490
322481
2022-06-13T10:37:44Z
Lou Montana
10739
Some wiki formatting
322490
wikitext
text/x-wiki
<includeonly>{{Name|dayz}}</includeonly><noinclude>{{Doc/Template |descr= Returns {{hl|{{dayz}}}}. |example1= <nowiki>{{dayz}}</nowiki> |result1= {{dayz}} }}</noinclude>
3rnrxd5ruwcl25de9azg203jc60tupi

# Template:Hatnote

10
15138
170432
170431
2020-12-10T13:23:15Z
Lou Montana
10739
lineReturn--
170432
wikitext
text/x-wiki
<includeonly><div class="dablink">ⓘ ''{{{1|-no text defined-}}}''</div> ----</includeonly><noinclude> == Usage == {{<nowiki/>Hatnote|'''''message'''''}} * message: text to be displayed

{| class="wikitable" |+ Examples ! Code ! Result |- | <nowiki>{{Hatnote}}</nowiki> | {{Hatnote}} |- | <nowiki>{{Hatnote|This page is about {{arma2}}. For similar functionality in {{arma3}}, see [[addAction]].}}</nowiki> | {{Hatnote|This page is about {{arma2}}. For similar functionality in {{arma3}}, see [[addAction]].}} |}

[[Category:Templates|{{uc:{{PAGENAME}}}}]]</noinclude>
s8k95on086shm3kcq2krfdkaswzaf3k

# Template:Colorball

10
23044
292573
180742
2021-08-10T12:51:20Z
Lou Montana
10739
Text replacement - "{|class" to "{| class"
292573
wikitext
text/x-wiki
<includeonly><div style="background-color: {{{1|#025D00}}}; background: radial-gradient(circle at 0.25em 0.25em, #FFF, {{{1|#025D00}}}, #333); border-radius: 50%; box-shadow: 0 0 3px 0 #888; display: inline-block; font-size: {{{2|1}}}em; margin: 3px; vertical-align: middle; height: 1em; width: 1em"></div></includeonly><noinclude> Displays a color ball.

== Usage == <nowiki>{{Colorball|</nowiki>'''''colour'''''|'''''size'''''}} * color: (Optional, default #025D00) HTML colour, can be one of: ** HTML colour name - ''red'', ''darkgrey'', etc. ** HTML colour format - '''#RGB''' or '''#RRGGBB''' ** rgb format - '''rgb(255, 0, 0)''' ** rgba format - '''rgba(255, 0, 0, 0.5)''' ** hsl format - '''hsl(120, 100%, 50%)''' ** hsla format - '''hsla(120, 60%, 70%, 0.3)''' * size (Optional, default 1) size relative to font-size (em)

{| class="wikitable" |+ Examples ! Code ! Result |- | <nowiki>{{Colorball}}</nowiki> | {{Colorball}} |- | <nowiki>{{Colorball|orange}}</nowiki> | {{Colorball|orange}} |- | <nowiki>{{Colorball|#FF5533|2}}</nowiki> | {{Colorball|#FF5533|2}} |- | <nowiki>{{Colorball|#F0F|8}}</nowiki> | {{Colorball|#F0F|8}} |}

== Source == <syntaxhighlight lang="html"> <div style=" background-color: {{{1|#025D00}}}; background: radial-gradient(circle at 0.25em 0.25em, #FFF, {{{1|#025D00}}}, #333); border-radius: 50%; box-shadow: 0 0 3px 0 #888; display: inline-block; font-size: {{{2|1}}}em; margin: 3px; vertical-align: middle; height: 1em; width: 1em"></div> </syntaxhighlight>

[[Category:Templates|{{uc:{{PAGENAME}}}}]] </noinclude>
qd50uhfg4ecnzm5sq9psm0xazi4w9lr