How to Add a New Ammo Type
This how‑to describes the full workflow for adding a new ammo type: creating Gameplay Tags, configuring ItemsAssistant, filling Clarification and AdditionalData assets, setting up DamageType classes, and wiring the InteractActor.
As an example, we will add a new “12 mm” caliber with three variants: Casual, Electro, and Explosive.
1. Create Gameplay Tags for AmmoSubtype
All ammo types use the AmmoSubtype Gameplay Tag field in the Clarification asset BP_Ammo_ClarData_Master.
Tags encode both caliber and damage type and are expected to follow this pattern:
World.Items.Ammo.Type.CALIBER.DAMAGE_TYPE
For the 12 mm caliber, create three tags:
World.Items.Ammo.Type.12mm.CasualWorld.Items.Ammo.Type.12mm.ElectroWorld.Items.Ammo.Type.12mm.Explosive
The exact names are not strictly enforced, but sticking to this structure helps avoid confusion and makes filtering and debugging easier.
2. Register new AmmoSubtype values in ItemsAssistant
To make ItemsAssistant aware of the new ammo subtypes, they must be added to its configuration widget.
- Open
EUW_ClarificationData. - Find the
AmmoTypewidget. - In the
Variantslist, add the new tags:World.Items.Ammo.Type.12mm.CasualWorld.Items.Ammo.Type.12mm.ElectroWorld.Items.Ammo.Type.12mm.Explosive
This allows the generator to pick these values and write them into the AmmoSubtype field of the generated Clarification assets.
3. Configure the new ammo in ItemsAssistant
Next, use ItemsAssistant to configure the new ammo item. We start with the Casual variant; Electro and Explosive will follow the same pattern.
- Open ItemsAssistant.
- Set
ItemType == Ammo. - Create a new ammo item and fill the basic data for the Casual round:
General info:
Name=12mmCasualShortName=12mmCasDescription=12mmCasual descriptionAbbreviation=12mmCWeight=1Price=2Rarity=Common
Inventory:
Texture= any appropriate icon (or your custom one).TextureType=SimpleSize=1x1Maximum Numbers In Slot=60ForSale=true
Ammo parameters (logical ammo stats):
AmmoDamage=10AmmoDamageDeviation=5AmmoType=12mm_casual(string identifier for this ammo “family”).DamageType=Casual(fromE_AmmoDamageType).ProcessingType=LineTrace(fromE_ShotProcessingType).AmmoFeature=None(fromE_AmmoFeature).
- Press
Generate.
The generator will automatically create and connect the following assets:
- A new row
AMMO_12mmCasualinDT_ItemData. - A Clarification asset
DA_CL_12mmCasual(child ofBP_Ammo_ClarData_Master). - An AdditionalData asset
DA_AD_Ammo_12mm_Casual, referenced in theAdditionalDatafield ofDA_CL_12mmCasual. - An InteractActor
BP_Int_12mmCasual. - DamageType classes (children of
BP_DamageTypeMaster_C) for the Clarification fieldsDamage TypeandDamage Type Critical.
Important: all core ammo logic fields in DA_CL_12mmCasual (damage enums, processing type, ammo feature, etc.) are filled automatically by the generator and are driven by the DamageType classes at runtime.
4. Complete the Clarification and AdditionalData setup
The generator created:
DA_CL_12mmCasual— Clarification asset (parent:BP_Ammo_ClarData_Master).DA_AD_Ammo_12mm_Casual— AdditionalData asset linked inDA_CL_12mmCasual.AdditionalData.
You usually edit:
- Visual / projectile / effects fields in
DA_CL_12mmCasual. - Distance‑dependent damage and similar advanced parameters in
DA_AD_Ammo_12mm_Casual.
4.1. StaticMesh and projectile settings
In DA_CL_12mmCasual set:
StaticMesh : StaticMesh
The visible bullet/projectile mesh (used by the projectile actor and/or visual systems).
If ProcessingType == Actor Bullet (projectile actor instead of line trace), configure projectile behavior:
Bullet Class : BP_Bullet_Master_C
Create a child class fromBP_Bullet_Master_Cand assign it here. This class defines the projectile actor logic (movement, collision, lifetime, detonation).Is Homing Projectile : bool
Enables/disables homing behavior.Homing Acceleration Magnitude : float
Acceleration used by the homing steering logic; higher values mean stronger path correction.PredictionProjectileSpeed : float
Expected projectile speed, used for trajectory prediction / marker helpers (e.g.BPConnectWeaponPredicateHit).OrientProjectileToHitLocation : bool
If true, the projectile mesh orients “face‑forward” along its movement direction, towards the current hit location.
If ProcessingType == LineTrace, these projectile fields are less critical, since hit detection is done via traces and visuals mostly come from effects.
4.2. Effects block: shells, tracers, hit / no‑hit reactions
The Effects fields in BP_Ammo_ClarData_Master define how this ammo type looks and sounds during firing and on hit.
Shell ejection (Eject Bullet System)
Use Eject Bullet System : bool
Enables or disables shell ejection for this ammo type.Eject Bullet System : NiagaraSystem
Niagara system for the shell ejection VFX (flying shell particles).Eject Bullet Mesh : StaticMesh
Static mesh of the shell, used by the ejection system.
If the ammo should not produce shells (for example, pure energy bolts), you can disable the system or use a more abstract effect.
Tracer System
Use Tracer System : bool
Controls whether the projectile leaves a visible tracer.Tracer System : NiagaraSystem
Niagara system that renders the tracer (line/beam or particle trail).
Tracers are useful for readability (seeing shot direction) and for expressing ammo identity, e.g. electric arcs for Electro or fiery trails for Explosive.
Hit / no‑hit behavior
SpawnHitReactIfNoHit : bool
When true, the system will still spawn a hit reaction even if the bullet does not collide with any object and just reaches its maximum distance / self‑destruct point.- Use this for ammo that must explode or produce an effect at the end of its trajectory (Explosive ammo, timed detonation, etc.).
No Hit React System : NiagaraSystem
Niagara effect for the “no actual hit but final reaction” case, for example an explosion in the air, dust puff, or impact‑like flash at max range.
4.3. Hit Effects Mode and Custom Hit React
Hit Effects Mode : E_CustomHitReactMode
Determines how hit effects are resolved:- whether to use only
BP_ImpactData(ImpactData asset), - or to override parts of it via
Custom Hit React.
- whether to use only
Custom Hit React : S_ImpactData_Shot
A struct that holds custom hit effect data (visuals, audio, decals, and extra flags) used for this ammo type.- Used according to the chosen
Hit Effects Mode. - This is where you can give Electro ammo a very specific spark/explosion look that differs from the generic ImpactData.
- Used according to the chosen
UseCustomHitSound : bool
If true, the hit sound can be taken from the custom configuration rather than only fromBP_ImpactData.
4.4. ImpactData (link to BP_ImpactData)
The ImpactData : PrimaryDataAsset field in DA_CL_12mmCasual is a reference to a BP_ImpactData DataAsset, which controls how hits are visualized depending on the surface and context.
BP_ImpactData has two main logical blocks:
CC Impact Data— used for melee/unarmed, not normally modified for ammo.BulletImpactData— used by firearms and ammunition.
For ammo, the important part is BulletImpactData:
BulletImpactDatais aMAP<EPhysicalSurfaceType, ImpactEffectStruct>.- For each
EPhysicalSurfaceType(flesh, metal, concrete, etc.) you configure:- a Niagara hit effect (blood, sparks, dust),
- a list of decals (bullet holes, scratches, blood splatters),
- a hit sound (SoundBase/SoundCue).
Runtime behavior for ammo:
- On hit, the system identifies the
EPhysicalSurfaceTypeof the impacted material. - It looks up the corresponding entry in
BulletImpactData. - It spawns the configured Niagara system, applies a random decal from the array, and plays the configured sound.
If no matching surface is found, the fallback/default behavior defined in BP_ImpactData will be used.
Note: CC Impact Data / AdvancedImpact belong to the melee side of the system. You usually do not modify them when creating ammo, unless the same BP_ImpactData is deliberately shared between melee weapons and bullets and you want to adjust both contexts.
4.5. AmmoSubtype
In DA_CL_12mmCasual make sure the AmmoSubtype field is set correctly:
AmmoSubtype : GameplayTag
For the Casual 12 mm example:World.Items.Ammo.Type.12mm.Casual.
This tag is used for:
- in‑game compatibility filters (which ammo types are valid for a given weapon),
- ammo selection and priority logic during reload (together with the weapon’s AMMO Priority configuration),
- UI categorization and display of ammo types.
All other core logical ammo fields in the Clarification asset (such as Damage Type Enum, Damage Type, Damage Type Critical, AmmoFeature, Processing Type and so on) are generated and driven automatically by ItemsAssistant and the associated DamageType classes based on the data you set in ItemsAssistant.
You normally do not override these manually in the Clarification asset; instead you adjust damage behavior in the generated DamageType classes (see next section).
5. Configure the generated DamageType classes
For each ammo type, the generator creates two DamageType classes (children of BP_DamageTypeMaster_C):
- One for the Clarification field
Damage Type. - One for
Damage Type Critical.
Open each of these classes and configure:
-
Ammo Type- Set this to the same ammo identifier that you used in ItemsAssistant
AmmoType(e.g.12mm_casual). - This associates the DamageType with the corresponding ammo family.
- Set this to the same ammo identifier that you used in ItemsAssistant
-
Core DamageType behavior:
-
Damage Type=Ammo
Marks this DamageType as belonging to the ammo pipeline (as opposed to melee, grenades, etc.). -
Camera Shake
Camera shake to apply on the victim when hit by this DamageType, for example a stronger shake for heavy calibers. -
PlayHitReact : bool
If true, characters hit by this DamageType will play hit‑reaction animations according to BPMainComponent and animation blueprints.
-
Critical vs normal DamageType:
- The normal DamageType handles non‑critical hits.
- The critical DamageType works with the weapon’s critical chance and multipliers (
Critical Hit Damage Percent,Critical Hit Damage Chance) as defined in the weapon Clarification assets andBPFirearmsComponent.
6. Wire the InteractActor
The generator created an InteractActor for the ammo, for example BP_Int_12mmCasual.
Open this actor and fill:
- Category
GeneralData:Data Asset— assign the master ItemData asset created for this ammo (the one referenced by theAMMO_12mmCasualrow inDT_ItemData).
This allows pickups in the world to correctly spawn as this ammo type and integrate with the inventory and weapon systems.
7. Repeat for Electro and Explosive variants
Now repeat the same steps for 12mmElectro and 12mmExplosive:
- Make sure the Gameplay Tags are used correctly:
World.Items.Ammo.Type.12mm.ElectroWorld.Items.Ammo.Type.12mm.Explosive
- Use ItemsAssistant to create the ammo entries, with their own:
AmmoDamage/AmmoDamageDeviation,AmmoType(e.g.12mm_electro,12mm_explosive),DamageTypeenum value (Electro / Explosive),ProcessingType(LineTrace or Actor Bullet),AmmoFeature(e.g. special features for Electro/Explosive).
- Press
Generatefor each variant. - In the generated Clarification + AdditionalData assets:
- Set the appropriate
AmmoSubtypetag. - Configure projectile and Effects fields (tracers, shell ejection, NoHitReact for air‑explosions, etc.).
- Link the correct
BP_ImpactDataand, if needed, override visuals withCustom Hit Reactfor unique Electro/Explosive behavior.
- Set the appropriate
- In the generated DamageType and DamageType Critical classes:
- Set
Ammo Typeto the matching ammo identifier. - Set
Damage Type = Ammo, adjustCamera ShakeandPlayHitReact.
- Set
- In the InteractActors for Electro/Explosive ammo:
- Set the
Data Assetreference underGeneralDatato the correct ItemData asset.
- Set the