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.Casual
  • World.Items.Ammo.Type.12mm.Electro
  • World.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.

  1. Open EUW_ClarificationData.
  2. Find the AmmoType widget.
  3. In the Variants list, add the new tags:
    • World.Items.Ammo.Type.12mm.Casual
    • World.Items.Ammo.Type.12mm.Electro
    • World.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.

  1. Open ItemsAssistant.
  2. Set ItemType == Ammo.
  3. Create a new ammo item and fill the basic data for the Casual round:

General info:

  • Name = 12mmCasual
  • ShortName = 12mmCas
  • Description = 12mmCasual description
  • Abbreviation = 12mmC
  • Weight = 1
  • Price = 2
  • Rarity = Common

Inventory:

  • Texture = any appropriate icon (or your custom one).
  • TextureType = Simple
  • Size = 1x1
  • Maximum Numbers In Slot = 60
  • ForSale = true

Ammo parameters (logical ammo stats):

  • AmmoDamage = 10
  • AmmoDamageDeviation = 5
  • AmmoType = 12mm_casual (string identifier for this ammo “family”).
  • DamageType = Casual (from E_AmmoDamageType).
  • ProcessingType = LineTrace (from E_ShotProcessingType).
  • AmmoFeature = None (from E_AmmoFeature).
  1. Press Generate.

The generator will automatically create and connect the following assets:

  • A new row AMMO_12mmCasual in DT_ItemData.
  • A Clarification asset DA_CL_12mmCasual (child of BP_Ammo_ClarData_Master).
  • An AdditionalData asset DA_AD_Ammo_12mm_Casual, referenced in the AdditionalData field of DA_CL_12mmCasual.
  • An InteractActor BP_Int_12mmCasual.
  • DamageType classes (children of BP_DamageTypeMaster_C) for the Clarification fields Damage Type and Damage 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_12mmCasualClarification asset (parent: BP_Ammo_ClarData_Master).
  • DA_AD_Ammo_12mm_CasualAdditionalData asset linked in DA_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 from BP_Bullet_Master_C and 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.
  • 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.
  • UseCustomHitSound : bool
    If true, the hit sound can be taken from the custom configuration rather than only from 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:

  • BulletImpactData is a MAP<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:

  1. On hit, the system identifies the EPhysicalSurfaceType of the impacted material.
  2. It looks up the corresponding entry in BulletImpactData.
  3. 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:

  1. 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.
  2. 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 and BPFirearmsComponent.

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 the AMMO_12mmCasual row in DT_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.Electro
    • World.Items.Ammo.Type.12mm.Explosive
  • Use ItemsAssistant to create the ammo entries, with their own:
    • AmmoDamage / AmmoDamageDeviation,
    • AmmoType (e.g. 12mm_electro, 12mm_explosive),
    • DamageType enum value (Electro / Explosive),
    • ProcessingType (LineTrace or Actor Bullet),
    • AmmoFeature (e.g. special features for Electro/Explosive).
  • Press Generate for each variant.
  • In the generated Clarification + AdditionalData assets:
    • Set the appropriate AmmoSubtype tag.
    • Configure projectile and Effects fields (tracers, shell ejection, NoHitReact for air‑explosions, etc.).
    • Link the correct BP_ImpactData and, if needed, override visuals with Custom Hit React for unique Electro/Explosive behavior.
  • In the generated DamageType and DamageType Critical classes:
    • Set Ammo Type to the matching ammo identifier.
    • Set Damage Type = Ammo, adjust Camera Shake and PlayHitReact.
  • In the InteractActors for Electro/Explosive ammo:
    • Set the Data Asset reference under GeneralData to the correct ItemData asset.