Weapon Suppressor Creation – Arma Reforger

From Bohemia Interactive Community
Jump to navigation Jump to search
No edit summary
No edit summary
 
(8 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{Messagebox|'''Overview'''
{{TOC|side}}{{Messagebox|'''Overview'''
This tutorial covers following topics:
This tutorial covers following topics:


Line 36: Line 36:


If importing a model from another source (e.g., Arma 3), you may need to rotate it by 90 degrees to align correctly.
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 ===
=== Object Naming ===
Line 47: Line 50:


=== Adding Snap Points ===
=== 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:
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:


Line 61: Line 65:
# '''Check Orientation''' :
# '''Check Orientation''' :
#* Verify that the <code>snap_weapon</code> aligns accurately with the suppressor's model.
#* 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]] .


=== Collision Mesh ===
 
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.
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 ====
====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:
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''' :
*'''Common Collider Types''' :  
** '''Box Collider'''  
**'''Box Collider'''
** '''Convex Collider'''  
**'''Convex Collider'''
** '''Cylinder Collider'''  
**'''Cylinder Collider'''
** '''Sphere Collider'''  
**'''Sphere Collider'''
** '''Capsule Collider'''  
**'''Capsule Collider'''
** '''TriMesh Collider'''  
**'''TriMesh Collider'''
* '''Naming Colliders''' :
*'''Naming Colliders''' :  
** Name your colliders with appropriate prefixes to indicate their type.
**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.
**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 ====
====Simplifying the Collider====


* '''Keep It Simple''' : Use the simplest shape that accurately represents the suppressor.
*'''Keep It Simple''' : Use the simplest shape that accurately represents the suppressor.
* '''Performance Consideration''' : Simplified colliders reduce computational overhead.
*'''Performance Consideration''': Simplified colliders reduce computational overhead.
* '''Avoid Complex Meshes''' : Complex collision meshes can negatively impact performance.
*'''Avoid Complex Meshes''' : Complex collision meshes can negatively impact performance.


==== Assigning Layer Preset and Game Material ====
====Assigning Layer Preset and Game Material====
Assign appropriate properties to your collider:
Assign appropriate properties to your collider:


* '''Layer Preset''' : <code>ItemFireView</code>
*'''Layer Preset''' : <code>ItemFireView</code>
** This layer preset is appropriate for weapon attachments and ensures correct interactions in the game.
** This layer preset is appropriate for weapon attachments and ensures correct interactions in the game.
* '''Game Material''' : <code>weapon_metal.gamemat</code>
*'''Game Material''' : <code>weapon_metal.gamemat</code>  
** This material provides appropriate physical properties and sound effects for metal weapon components.
**This material provides appropriate physical properties and sound effects for metal weapon components.


===== How to Assign =====
=====How to Assign=====


# '''In Your 3D Software''' :
#'''In Your 3D Software''' :
#* '''Blender with EBT (Optional)''' :
#* '''Blender with EBT (Optional)''' :
#** Use the '''EBT Object Tools'''  to assign properties directly in Blender.
#**Use the '''EBT Object Tools'''  to assign properties directly in Blender.
#** Navigate to '''Object Properties'''  > '''EBT Object Properties''' .
#**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]] .
#**Set '''Layer Preset'''  and '''Game Material''' .  Reference: [[Arma Reforger:Enfusion Blender Tools: Objects Tools|Enfusion Blender Tools: Object Tools]] .
#* '''Other 3D Software''' :
#*'''Other 3D Software''' :
#** Add custom properties or user-defined attributes to colliders.
#**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)]] .
#**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''' :
#'''In Enfusion Workbench Import Settings''' :
#* If not set in the 3D software, you can assign them during import.
#* If not set in the 3D software, you can assign them during import.
#* In the '''Import Settings''' , select your collider.
#* In the '''Import Settings''' , select your collider.
#** Set '''Usage'''  to <code>ItemFireView</code>.
#**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]] .
#**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 ===
===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.
Export your model to the '''FBX'''  format suitable for Enfusion.


* '''Using Enfusion Blender Toolkit (EBT) FBX Exporter'''  (Optional):
*'''Using Enfusion Blender Toolkit (EBT) FBX Exporter'''  (Optional):
** Simplifies export and ensures compatibility.
**Simplifies export and ensures compatibility.
** Automatically registers FBX in Workbench and enables "'''Export Scene Hierarchy'''".
**'''Automatically imports & registers''' FBX in Workbench and enables "'''Export Scene Hierarchy'''".
* '''Without EBT''' :
*'''Without EBT''' :  
** Manually register '''Import & Register''' file
**Manually register '''[[Arma Reforger:Weapon Creation/Asset Preparation#Model Import & Registration|Import & Register]]''' file
** Manually enable '''"Export Scene Hierarchy"'''  in export settings.
**Manually enable '''"[[Arma Reforger:Weapon Creation/Asset Preparation#Skeleton & Hierarchy|Export Scene Hierarchy]]"'''  in export settings.
** Ensure export settings align with Enfusion requirements.
**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.


== Creating the Attachment Script Class ==
*'''Use the <code>TAG_</code> Prefix:'''
Define the attachment type by creating a script class, ensuring compatibility with weapons.
**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>


=== Setting Up Your Script Directory ===
===Creating the Script File===
Organize scripts within your mod:


=== Naming Conventions ===
====Create the Script File====


* '''Script File''' : <code>SampleMod_NewWeapon_Attachments_muzzle.c</code>.
#'''Navigate to Your Script Directory:'''  
* '''Class Names''' :
#*Go to <code>/Scripts/Game/Attachments/Muzzles/</code> within your mod folder.
** Attachment Config Class: <code>AttachmentMuzzle65_39Class</code>.
#*If these folders don't exist, create them accordingly.
** Attachment Class: <code>AttachmentMuzzle65_39</code>.
#'''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>.


=== Creating the Script File ===
#


# '''Create the File''' :
====Define the Attachment Config Class====
#* In <code>Muzzles/</code>, create <code>SampleMod_NewWeapon_Attachments_muzzle.c</code>.
Open the newly created script file and define your classes exactly as follows:
# '''Define the Classes''' :
#
<enforce>
<enforce>
class AttachmentMuzzle65_39Class {}
class AttachmentMuzzle65_39Class {}
Line 153: Line 229:
</enforce>
</enforce>


=== Recompiling Scripts ===
===Recompiling Scripts===
After creating the script, recompile the game scripts:
After creating the script, recompile the game scripts:


* '''In Script Editor''' :
*'''In Script Editor''' :
** Use '''Compile and Reload Scripts'''  (<code>⇧ Shift + F7</code>).
** Use '''Compile and Reload Scripts'''  (<code>⇧ Shift + F7</code>).
* '''In World Editor''' :
*'''In World Editor''' :  
** Use '''Reload Game Scripts'''  (<code>Ctrl + R</code>).
**Use '''Reload Game Scripts'''  (<code>Ctrl + R</code>).


== Texturing the Suppressor ==
Apply textures to give your suppressor the desired appearance.


=== Creating Enfusion Materials ===


* '''After Import''' :
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}}
** Enfusion Materials (<code>.emat</code> files) are created in the <code>Data</code> folder.
 
** Named based on material names in your 3D software.
==Creating the Suppressor Prefab==
** Use <code>MatPBRMaterial</code> shader by default.
 
===Create Suppressor Prefab===
[[File:armareforger-new-weapon-suppressor-prefab-structure.png|thumb|Prefab structure]]


=== Assigning Textures ===
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.}}


# '''Prepare Textures''' :
{{Clear}}
#* Use a tool like '''Substance Painter'''  to create PBR textures.
===Creating a Child Prefab===
#* '''Export Preset''' :
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''' .
#** Use the '''BCR+NMO'''  preset from GitHub:
#** Substance Export Profiles .
# '''Import Textures into the Game''' :
#* Place exported textures (e.g., <code>Suppressor_BCR.tiff</code>, <code>Suppressor_NMO.tiff</code>) in your mod's <code>Data</code> directory.
# '''Assign Textures to Materials''' :
#* In Enfusion Workbench, open the <code>.emat</code> files.
#* Assign textures to corresponding fields:
#** '''BCR Map''' : Assign <code>_BCR</code> texture.
#** '''NMO Map''' : Assign <code>_NMO</code> texture.  Refer to [[Arma Reforger:Textures|Textures in Arma Reforger]]  for details.
# '''Verify Material Settings''' :
#* Adjust properties like '''Metallic''' , '''Roughness''' , and '''Specular''' as needed.


=== Testing the Textures ===
To create this child prefab:


* '''Preview the Model''' :
#'''Right-click'''  on your base suppressor prefab ('''Suppressor_SampleSuppressor_01_base.et''' ) and select '''Inherit''' .
** Use Enfusion Workbench to ensure textures appear correctly.
#'''Name''' the new prefab without the <code>_base</code> suffix (e.g., '''Suppressor_SampleSuppressor_01.et''' ).
* '''Check for Issues''' :
#'''Move''' this prefab to the appropriate directory alongside your base prefab.
** 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 Suppressor 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.


=== Inherit from Base Suppressor Prefab ===
Create a new prefab by inheriting from the base suppressor:


* '''Base Prefab''' :
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.
** <code>Prefabs/Weapons/Core/Suppressor_base.et</code>.
* '''Create New Prefab''' :
** Inherit from <code>Suppressor_base.et</code>.
** Name it appropriately, e.g., <code>YourSuppressor_base.et</code>.


=== Edit the Suppressor Prefab ===
===Edit the Suppressor Prefab===
Configure components within your new prefab.
Configure components within your new prefab.
[[File:armareforger-new-weapon-suppressor-inventory-configuration.png|thumb|1379x1379px|'''InventoryItemComponent''' configuration]]


==== Configure MeshObject ====
====Configure MeshObject====


* Assign your suppressor's mesh to the <code>MeshObject</code> component.
*Assign your suppressor's mesh to the <code>MeshObject</code> component.


==== Configure InventoryItemComponent ====
====Configure InventoryItemComponent====
Next, configure the suppressor's inventory properties:


* '''Item Display Name''' :
#Select the '''InventoryItemComponent''' .
** Set the name displayed in the inventory.
#Modify the '''Item Display Name''' to change how the suppressor appears in the inventory.
* '''Storage Properties''' :
#Adjust the '''Item Phys Attributes''' to change storage properties like weight and size.
** Adjust weight, size, and physical attributes.
#Under '''Custom Attributes''' , adjust the '''PreviewRenderAttributes'''  to change the suppressor's visibility in the inventory preview
* '''Preview Render Attributes''' :
** Configure inventory preview visibility.


==== Configure WeaponAttachmentAttributes ====
{{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 WeaponAttachmentAttributes====
In '''Custom Attributes'''  of <code>InventoryItemComponent</code>:
In '''Custom Attributes'''  of <code>InventoryItemComponent</code>:


* '''WeaponAttachmentAttributes'''  is already inherited from the base prefab.
*'''WeaponAttachmentAttributes'''  is already inherited from the base prefab.
* '''Set Attachment Type''' :
*'''Set Attachment Type''' :
** Assign <code>AttachmentMuzzle65_39</code>.
**Assign class of your suppressor (i.e.<code>AttachmentMuzzle65_39</code> )
** This parameter controls where the suppressor can be attached.
***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
**This parameter controls where the suppressor can be attached.
[[File:armareforger-new-weapon-suppressor-change-class.gif]]


==== Configure SCR_WeaponAttachmentSuppressor Component ====
====Configure SCR_WeaponAttachmentSuppressor Component====
Now, configure the suppressor's attachment properties:


* '''Attachment Type''' :
#Select the '''SCR_WeaponAttachmentSuppresor''' component.
** Ensure it's set to <code>AttachmentMuzzle65_39</code>.
#'''Attachment Type''' : Set this to the class you created earlier for the suppressor attachment point.
* '''Adjust Properties''' :
#'''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 Speed Coefficient''' :
#'''Muzzle Dispersion Factor''' : Modify this to account for changes in bullet spread when the suppressor is attached.
*** Modify as needed (suppressors can affect velocity).
#'''Extra Obstruction Length''' : Increase this value to simulate the added length of the suppressor, affecting the weapon's obstruction values in the '''WeaponComponent''' .
** '''Muzzle Dispersion Factor''' :
#'''Recoil Coefficients''' :
*** Adjust for accuracy changes.
#*'''Linear Factors''' : Adjust to simulate changes in linear recoil.
** '''Extra Obstruction Length''' :
#*'''Angular Factors''' : Adjust to simulate changes in angular recoil.
*** Adjust this value to reflect the added length of the suppressor.
#*'''Turn Factors''' : Adjust to simulate changes in weapon turn dynamics due to the suppressor's weigh
*** '''Note''' : This will increase '''Weapon Obstruction''' values defined in the weapon's <code>WeaponComponent</code>. It affects how the suppressor impacts the weapon's handling, particularly in confined spaces.
** '''Recoil Coefficients''' :
*** Adjust recoil when suppressor is attached.


==== Configure SCR_MuzzleEffectComponent ====
===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.


* '''Particle Effect''' :
====Configure Attachment Obstruction (Optional)====
** Assign appropriate muzzle flash or smoke effects.
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.
* '''Effect Position''' :
** Create <code>EntitySlotInfo</code> (e.g., "position").
** Adjust '''Offset'''  to match suppressor's end.
* '''Reset On Fire''' :
** Disable if not needed.


==== Configure Attachment Obstruction (Optional) ====
To configure obstruction attributes:
The '''SCR_WeaponAttachmentObstructionAttributes''' is already inherited from the parent suppressor prefab, so you do not need to add it manually. If you wish to configure obstruction attributes:


* '''Navigate to SCR_WeaponAttachmentObstructionAttributes''' :
#'''Navigate to SCR_WeaponAttachmentObstructionAttributes:'''  
** In the prefab's '''Custom Attributes''' , locate '''SCR_WeaponAttachmentObstructionAttributes''' .
#*In your prefab's '''Custom Attributes''' , locate the '''SCR_WeaponAttachmentObstructionAttributes''' entry.
* '''Adjust Parameters as Needed''' :
#'''Adjust Parameters as Needed:'''
** '''Obstructed Attachment Types''' :
#*'''Attachment Type'''
*** List attachment types that '''cannot'''  be mounted at the same time as this one.
#**Class of attachment which following rules applies to
** '''Required Attachment Types''' :
#*'''Obstructed Attachment Types:'''  
*** List attachment types that '''must'''  be present for this one to be attachable.
#**List attachment types that cannot be mounted at the same time as this suppressor.
*** Example description: ''"Types of attachments required for this one to be attachable e.g., M9 Bayonet requires A2 flash hider for mounting."''
#**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.


==== Adjust ActionsManagerComponent (Optional) ====
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)====


* '''Adjust Action Positions''' :
** Modify '''Offset'''  to align actions with the suppressor.


=== Localization ===
Depending on how your suppressor is positioned, you might need to adjust the positions of user and muzzle actions:


* '''Localize Asset''' :
#Select the '''ActionsManagerComponent''' .
** Create localization entries for proper in-game display.
#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:


== Integrating the Suppressor with a Weapon ==
*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]]


=== Configure the Weapon's Muzzle Component ===
==Integrating the Suppressor with a Weapon==
Open the weapon prefab to which the suppressor will attach.


==== Add AttachmentSlotComponent ====
===Configure the Weapon's Muzzle Component===


* '''Add Child Component''' :
To enable your weapon to accept and properly function with your newly created suppressor, you need to configure the weapon's components accordingly.
** Attach <code>AttachmentSlotComponent</code> to the weapon's <code>MuzzleComponent</code>.
* '''Configure''' :
** '''Pivot ID''' :
*** Set to weapon's muzzle slot (e.g., <code>slot_barrel_muzzle</code>).
** '''Child Pivot ID''' :
*** Set to <code>snap_weapon</code>.
** '''Attachment Type''' :
*** Assign <code>AttachmentMuzzle65_39</code>.
** '''Show in Inspection''' :
*** Enable this option.


==== Add SCR_WeaponStatsManagerComponent ====
===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 Component''' :
====Add an AttachmentSlotComponent====
** Attach <code>SCR_WeaponStatsManagerComponent</code> to manage weapon stats.
* '''Configuration''' :
** No additional setup unless customizing stats.


==== Update WeaponSoundComponent ====
#'''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]]'''


* '''Add Suppressed Sounds''' :
====Configure the AttachmentSlotComponent====
** Update <code>WeaponSoundComponent</code> with suppressed firing sounds.
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:


== Testing Your Suppressor ==
* '''Save All Prefabs:'''
Thorough testing ensures functionality aligns with expectations.
** 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>


* '''Attachment Verification''' :
{{GameCategory|armaR|Modding|Tutorials|Assets}}
** Attach and detach the suppressor.
{{GameCategory|armaR|Modding|Tutorials|Assets|Weapon Creation}}
* '''Alignment Check''' :
** Confirm correct alignment with the weapon's muzzle.
* '''Functionality Test''' :
** Fire the weapon with the suppressor.
** Check muzzle effects, sounds, recoil, and accuracy.
* '''Attachment Obstruction Test''' :
** Verify incompatible attachments cannot be mounted simultaneously.
* '''Required Attachments Test''' :
** Ensure required attachments are necessary for mounting.
* '''Inventory Inspection''' :
** Confirm the suppressor's name and preview display correctly.

Latest revision as of 12:11, 11 December 2024

💬
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.
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.
📥
Sources files for this tutorial can be found on Arma Reforger Samples Github repository

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., SampleMod_NewWeapon) 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 - 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 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.


armareforger-new-weapon-suppressor-model-orientation.png

Object Naming

Follow these naming conventions to ensure proper import and functioning:

  • Level of Detail (LOD) Suffixes :
    • Use _LOD0, _LOD1, etc., to indicate different LODs.
    • Example: Suppressor_LOD0, Suppressor_LOD1.

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 Conventions page.

Adding Snap Points

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:

  1. 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.
  2. Name the Empty Object :
    • Set the name to snap_weapon.
  3. 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.
  4. Check Orientation :
    • Verify that the snap_weapon aligns accurately with the suppressor's model.

armareforger-new-weapon-suppressor-snap-orientation.png


For detailed guidance, see Weapon Slots and Bones .

📖
Recommended read: Slot/snap points concept is described in Weapon Creation documentation

Collision Mesh

Creating an efficient collision mesh optimizes performance and ensures accurate physical interactions.

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 UBX_, UCX_, etc., are typically used, focus on selecting the collider that best suits your model's shape
📖
Recommended read: More details about Inventory Configuration can be found on Weapon Optic Creation documentation

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 : ItemFireView
    • This layer preset is appropriate for weapon attachments and ensures correct interactions in the game.
  • Game Material : weapon_metal.gamemat
    • This material provides appropriate physical properties and sound effects for metal weapon components.
How to Assign
  1. In Your 3D Software :
  2. 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.


Exporting the Model

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 :
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 (.emat files) should be created in the Data folder next to the model.
  • These new materials are named based on the material names in your 3D software.
  • By default, they use the MatPBRMaterial shader.
Suppressor material setup

Assigning Textures

  1. 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:
  2. Import Textures into the Game :
    • Place your exported textures (e.g., Suppressor_BCR.tga, Suppressor_NMO.tga) into the appropriate folder within your mod's Data directory.
  3. Assign Textures to Materials :
    • In the Enfusion Workbench, navigate to the .emat 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 (_BCR).
      • NMO Map :
        • Assign your Normal Map (_NMO).
    • For detailed information on texture types and how to use them, refer to Arma Reforger: Textures .
  4. 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.

Existing vanilla muzzle attachment classes can be found in the 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 Scripts/Game/Attachments/Muzzles 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 TAG_ Prefix:
    • Prefix your script file names and class names with a unique tag to prevent naming conflicts.
    • In this case, the tag is SampleMod_NewWeapon.
  • Script File:
    • Use a clear and descriptive filename that includes your mod's tag.
    • Example: SampleMod_NewWeapon_Attachments_Muzzle.c
  • Class Names:
    • Attachment Config Class: Defines the configuration class for your muzzle attachment.
      • Example: AttachmentMuzzle65_39Class
    • Attachment Class: Inherits from AttachmentMuzzle.
      • Example: AttachmentMuzzle65_39

Creating the Script File

Create the Script File

  1. Navigate to Your Script Directory:
    • Go to /Scripts/Game/Attachments/Muzzles/ within your mod folder.
    • If these folders don't exist, create them accordingly.
  2. Create a New Script File:
    • Right-click in the Muzzles folder and select New Script .
    • Name the file SampleMod_NewWeapon_Attachments_Muzzle.c.
    • Ensure the file extension is .c.

Define the Attachment Config Class

Open the newly created script file and define your classes exactly as follows:

class AttachmentMuzzle65_39Class {} AttachmentMuzzle65_39Class AttachmentMuzzle65_39Source; class AttachmentMuzzle65_39 : AttachmentMuzzle { };

Recompiling Scripts

After creating the script, recompile the game scripts:

  • In Script Editor :
    • Use Compile and Reload Scripts (⇧ Shift + F7).
  • In World Editor :
    • Use Reload Game Scripts (Ctrl + R).


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.

📖
Recommended read: For more information on how attachment classes and inheritance affect compatibility, refer to the Weapon Optic Creation: Attachments Configuration documentation

Creating the Suppressor Prefab

Create Suppressor Prefab

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\Suppressor_base.et. This prefab contains most of the necessary configurations for suppressor attachments.

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

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 Inherit in... from the context menu.

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 Duplicate to "addon name" function on Suppressor_PBS4_base.et and then modify parameters of such new prefab.

When prompted to name your new prefab, consider adding a _base 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.

Inheriting from the base suppressor prefab ensures that essential components and configurations are included, saving you time and reducing the potential for errors.

Creating a Child Prefab

In addition to the base prefab, it's advisable to create a child prefab without the _base 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:

  1. Right-click on your base suppressor prefab (Suppressor_SampleSuppressor_01_base.et ) and select Inherit .
  2. Name the new prefab without the _base suffix (e.g., Suppressor_SampleSuppressor_01.et ).
  3. 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 Prefab Edit Mode by selecting it and clicking the Prefab Edit Mode button.

Edit the Suppressor Prefab

Configure components within your new prefab.

InventoryItemComponent configuration

Configure MeshObject

  • Assign your suppressor's mesh to the MeshObject component.

Configure InventoryItemComponent

Next, configure the suppressor's inventory properties:

  1. Select the InventoryItemComponent .
  2. Modify the Item Display Name to change how the suppressor appears in the inventory.
  3. Adjust the Item Phys Attributes to change storage properties like weight and size.
  4. Under Custom Attributes , adjust the PreviewRenderAttributes to change the suppressor's visibility in the inventory preview
📖
Recommended read: More details about Inventory Configuration can be found on Weapon Optic Creation documentation

Configure WeaponAttachmentAttributes

In Custom Attributes of InventoryItemComponent:

  • WeaponAttachmentAttributes is already inherited from the base prefab.
  • Set Attachment Type :
    • Assign class of your suppressor (i.e.AttachmentMuzzle65_39 )
      • 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
    • This parameter controls where the suppressor can be attached.

armareforger-new-weapon-suppressor-change-class.gif

Configure SCR_WeaponAttachmentSuppressor Component

Now, configure the suppressor's attachment properties:

  1. Select the SCR_WeaponAttachmentSuppresor component.
  2. Attachment Type : Set this to the class you created earlier for the suppressor attachment point.
  3. 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.
  4. Muzzle Dispersion Factor : Modify this to account for changes in bullet spread when the suppressor is attached.
  5. Extra Obstruction Length : Increase this value to simulate the added length of the suppressor, affecting the weapon's obstruction values in the WeaponComponent .
  6. 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:

  1. Select the SCR_MuzzleEffectComponent
  2. Particle Effect : Assign a suitable particle effect (e.g., Suppressor_Carbine.ptc) to represent the suppressed muzzle flash.
  3. 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.
  4. 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:

  1. Navigate to SCR_WeaponAttachmentObstructionAttributes:
    • In your prefab's Custom Attributes , locate the SCR_WeaponAttachmentObstructionAttributes entry.
  2. 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.

Example M16 suppressor obstruction setup

Adjust ActionsManagerComponent (Optional)

Depending on how your suppressor is positioned, you might need to adjust the positions of user and muzzle actions:

  1. Select the ActionsManagerComponent .
  2. Within the Action Context , locate the user and muzzle actions.
  3. Modify their Offset in the Position property to align them correctly with the suppressor's position

armareforger-new-weapon-suppressor-action-context-adjustment.gif

📖
Recommended read: Action Context Setup documentation

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.
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 Prefab Edit Mode .

Add an AttachmentSlotComponent

  1. Select the MuzzleComponent:
    • In the Entity Tree , expand your weapon entity and locate the MuzzleComponent.
  2. Add AttachmentSlotComponent as Child Component of Muzzle Component

Configure the AttachmentSlotComponent

With the AttachmentSlotComponent selected, configure its properties:

  1. Pivot ID:
    • Set the Pivot ID to the weapon's muzzle slot.
      • This is typically slot_barrel_muzzle.
    • This ensures the attachment point aligns with the muzzle end of the weapon.
  2. Child Pivot ID:
    • Set the Child Pivot ID to snap_weapon.
    • 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
  3. 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 isAttachmentMuzzle65_39 (the class you created earlier).
      • Select it to assign it to the attachment point.
  4. 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.

  1. Add SCR_WeaponStatsManagerComponent Component
  2. 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.


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 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.

  1. Select the WeaponSoundComponent:
    • In the Entity Tree, locate and select the WeaponSoundComponent.
  2. 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.
    • 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.
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 .

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 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