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