Audio: Multiphase Destruction – Arma Reforger
The Multiphase Destruction (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 Audio: SCR SoundManagerEntity system, not individual entities. Entities reference enums in SCR_DestructionMultiPhaseComponent for sound definitions.
- Sounds are triggered:
- When an entity's damage phase changes (using SCR_EMaterialSoundTypeBreak).
- When spawned debris collides with the environment or other entities (using 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 .acp file linked to the MPDestructionManager.
Design
- All sound events are defined in one .acp: Sounds\Destruction\Multiphase\Destruction_Multiphase.acp
- A "manager" needs to be present in the gameworld: Prefabs\MP\MPDestructionManager.et
- Available sound types are defined via enums (SCR_EMaterialSoundTypeDebris and SCR_EMaterialSoundTypeBreak)
MPD Sound Setup
MPD Manager Setup
- Arma Reforger uses one universal prefab for the MPDestruction Manager: MPDestructionManager.et
- In its base entity, SCR_MPDestructionManager, the default .acp file is defined (Destruction_Multiphase.acp) in the "Untitled" category in "Sound Project".
- "Sound Event Name" is unused.
Enum Setup
Sounds use enum values. Pick one of the following two to mod:
- SCR_EMaterialSoundTypeBreak if the sound is supposed to play when the entity changes its damage phase.
In this case, the enum must start with "BREAK_", e.g. "BREAK_GLASSBOTTLE"; - 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:
Break Sounds | Debris Sounds | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
SCR_EMaterialSoundTypeBreak | 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. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
ACP and File Setup
- All MPD-related samples should be stored in Sounds → Destruction → Multiphase → Samples, with their folder matching the corresponding enum
- If the enum value is e.g. "BREAK_GLASSBOTTLE", the folder must be called Break_GlassBottle
- The most important thing regarding the actual ACP is the name of the Sound Event / Sound Node. The system will automatically create a mix of "SOUND_MPD_" + the name of the enum value. If our enum is e.g. "BREAK_GLASSBOTTLE", the Sound Event must be called "SOUND_MPD_BREAK_GLASSBOTTLE".
- Any logic should be kept in the singular Destruction_Multiphase.sig Signal file.
- There are three important Signals that can be used to change the sound dynamically: PhasesToDestroyed, EntitySize and CollisionDV; more information about them can be found here.
Entity Setup
Entities either have a SCR_DestructionMultiphaseComponent or integrate the MPD functionality in the entity type itself.
All components and entities that use MPD can be found below:
Entities | Components |
---|---|
Break sounds:
- Find the Material Sound Type towards the bottom of the "Unsorted" tab.
- Choose a fitting sound type from its dropdown menu.
Debris sounds:
- Find the "Small Debris" classes of the entity (sounds are defined in there):
- For a GenericEntity with SCR_DestructionMultiPhaseComponent, find "Destroy Spawn Objects" in the Destruction FX tab.
- For entities with built-in MPD, find "Phase Destroy Spawn Objects" in the Unsorted tab under destruction phases.
- Sounds are set in Material Sound Type at the bottom, using the SCR_EMaterialSoundType ENUM. Choose sounds matching the debris models defined in the Model Prefabs array.
Signals
Not all signals are available for each type of sound.
Signal Name | Description | Available for Break Sounds | Available for Impact Sounds |
---|---|---|---|
PhasesToDestroyed | An integer indicating how damaged the entity is.
|
![]() |
![]() |
EntitySize | The entity's mass, usually used in order to "scale" sounds. | ![]() |
![]() |
CollisionDV | A value reflecting the change in speed of an entity upon contact (how fast was it before, how much was it slowed down?) | ![]() |
![]() |
Debugging
If any issues arise, the first step should always be to make sure an MPDestructionManager entity exists in the world. Check if the 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.
Check for Prefabs Lacking Sound Definition
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.
Test MPD Sound in Game
This method should only be used to check if sounds work/are present in general. The broken objects behave differently based on damage dealt and impulses, so the only "proper" way is it to actually destroy them as they would get destroyed in-game. Look at step 6 to isolate the sounds when doing so.
- Open any terrain
- Make sure an MPDestructionManager is present in the GameWorld. (If not, add Prefabs → MP → MPDestructionManager.et)
- Place the entity you want to test (make sure MPD is enabled)
- Then
- If it is a GenericEntity with an SCR_DestructionMultiPhaseComponent
- In the "Destruction Setup" tab, set
- Base Health to 1
- In the "Unsorted" tab, search for Additional Hitzones → Default and set
- Max Health to 1
- Damage Reduction to 0
- Damage Threshold to 0
- In the "Destruction Setup" tab, set
- If it is an Entity with integrated MPD functionality
- In the Unsorted tab, set
- Max Health to 1,
- Base Damage Multiplier to 1
- Damage Reduction to 0
- Damage Threshold to 0
- Save the change to the prefab and reload the world.
- In the Unsorted tab, set
- If it is a GenericEntity with an SCR_DestructionMultiPhaseComponent
- The target should now get destroyed in 1 shot from any weapon.
- (Optional) To fully isolate the MPD sounds,
- Open the Audio Editor
- Open Debug → In-Game Debug → Sounds / Signals. The In-Game Debug window opens.
- Uncheck "Strict Filtering"
- Enter SOUND_MPD in the filter string bar
- The game will now only play back sounds that have SOUND_MPD in their Sound Event name.