Penetratio system
Penetration System Overview
The S.A.T. Penetration System is a lightweight, easy-to-extend mechanic for ballistic projectiles that uses Physical Materials to define how well surfaces resist penetration. It works out-of-the-box with no need to manually tag surface types in Project Settings.
π‘ How It Works (In Short)

Ballistic projectiles carry a
Penetration
integer.On every hit, the projectile checks the Physical Material of the surface.
It reads the Penetration Index from a data table (
DT_MaterialsIndex
).The index value is subtracted from the projectileβs current penetration.
If penetration β₯ material index β projectile continues
If penetration < material index β projectile stops and resets to pool
Damage is reduced after each penetration by the Penetration Ratio Variable.

π Pooling Compatibility
When the projectile is stopped by a material it canβt penetrate, it:
Triggers impact logic
Resets penetration value and damage to original
Returns to pool (if pooling is enabled)
π§ͺ Example Setup
PM_Flesh
Enemy flesh
1
PM_Concrete
Wall surface
3
This means a projectile with penetration value 3:
β Can pierce 3 enemies with
PM_Flesh
β Will stop on the first
PM_Concrete
surface
π Data Table: DT_MaterialsIndex
DT_MaterialsIndex

You can add your own materials by:
Creating a new Physical Material in your project.
Assigning that material to a row in the
DT_MaterialsIndex
, giving it a penetration index.Applying the physical material to a mesh's material slot under "Phys Material".

π οΈ Customization Tips
Want armor to block more? Just give it a high index (e.g., 5β10).
Want paper-thin surfaces? Set index to 0.
Want to simulate light cover? Use fractional damage reduction via the Penetration Ratio.
π₯ Damage Scaling (Penetration Ratio)
After each penetration, projectile damage is scaled down using a predefined ratio (set on the projectile). For example:
Penetration Ratio = 0.75
Initial damage = 100
After 1st hit = 75
After 2nd hit = 56.25
And so on...
This prevents infinite multi-kills with a single bullet and creates diminishing returns on deep penetrations.
π― Integration Steps Recap
β Create new Physical Materials for the surfaces you want.
β Add each to
DT_MaterialsIndex
with desired index.β Assign Physical Materials to your meshes (Static or Skeletal).
β Ensure projectiles hitting those meshes are Ballistic and have Penetration > 0.
β Tweak penetration value and penetration ratio per projectile.
β
Best Practices
Use pooling only for ballistic projectiles, not explosive.
Use clear Physical Material naming (like
PM_Wood
,PM_Armor
,PM_Glass
) for organization.Keep indexes intuitive: lower = easier to pass, higher = stronger resistance.
Always test with debug lines or prints to confirm material is correctly detected!
Last updated