diff --git a/Content.Server/Sticky/Components/StickyComponent.cs b/Content.Server/Sticky/Components/StickyComponent.cs
index 3d71934f90..c0e916adc5 100644
--- a/Content.Server/Sticky/Components/StickyComponent.cs
+++ b/Content.Server/Sticky/Components/StickyComponent.cs
@@ -16,6 +16,13 @@ public sealed class StickyComponent : Component
[ViewVariables(VVAccess.ReadWrite)]
public EntityWhitelist? Whitelist;
+ ///
+ /// What target entities can't be used as surface for sticky entity.
+ ///
+ [DataField("blacklist")]
+ [ViewVariables(VVAccess.ReadWrite)]
+ public EntityWhitelist? Blacklist;
+
///
/// How much time does it take to stick entity to target.
/// If zero will stick entity immediately.
diff --git a/Content.Server/Sticky/Systems/StickySystem.cs b/Content.Server/Sticky/Systems/StickySystem.cs
index 4634808877..8e4b533141 100644
--- a/Content.Server/Sticky/Systems/StickySystem.cs
+++ b/Content.Server/Sticky/Systems/StickySystem.cs
@@ -55,8 +55,12 @@ public sealed class StickySystem : EntitySystem
{
if (!Resolve(uid, ref component))
return false;
+
+ // check whitelist and blacklist
if (component.Whitelist != null && !component.Whitelist.IsValid(target))
return false;
+ if (component.Blacklist != null && component.Blacklist.IsValid(target))
+ return false;
// check if delay is not zero to start do after
var delay = (float) component.StickDelay.TotalSeconds;
diff --git a/Resources/Prototypes/Damage/containers.yml b/Resources/Prototypes/Damage/containers.yml
index c4b37a4ac7..2fde20d34a 100644
--- a/Resources/Prototypes/Damage/containers.yml
+++ b/Resources/Prototypes/Damage/containers.yml
@@ -14,3 +14,4 @@
supportedTypes:
- Heat
- Shock
+ - Structural # this probably should be in separate container
diff --git a/Resources/Prototypes/Damage/types.yml b/Resources/Prototypes/Damage/types.yml
index 97d7566956..105ebb5de2 100644
--- a/Resources/Prototypes/Damage/types.yml
+++ b/Resources/Prototypes/Damage/types.yml
@@ -36,3 +36,8 @@
- type: damageType
id: Cellular
+
+# Damage represent structures internal integrity.
+# Exclusive for structures such as walls, airlocks and others.
+- type: damageType
+ id: Structural
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Bombs/plastic.yml b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/plastic.yml
index 7de57c3e61..f44163c3bd 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Bombs/plastic.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/plastic.yml
@@ -25,11 +25,14 @@
stickPopupSuccess: comp-sticky-success-stick-bomb
unstickPopupStart: comp-sticky-start-unstick-bomb
unstickPopupSuccess: comp-sticky-success-unstick-bomb
+ blacklist: # can't stick it to other items
+ components:
+ - Item
- type: Explosive # Powerful explosion in a very small radius. Doesn't break underplating.
- explosionType: Default
- maxIntensity: 300
- intensitySlope: 100
- totalIntensity: 300
+ explosionType: DemolitionCharge
+ totalIntensity: 60
+ intensitySlope: 5
+ maxIntensity: 30
canCreateVacuum: false
- type: ExplodeOnTrigger
- type: Damageable
@@ -38,10 +41,11 @@
thresholds:
- trigger:
!type:DamageTrigger
- damage: 10
+ damage: 50
behaviors:
- !type:DoActsBehavior
acts: ["Destruction"]
+ - !type:ExplodeBehavior
- type: StickyVisualizer
- type: Appearance
visuals:
diff --git a/Resources/Prototypes/explosion.yml b/Resources/Prototypes/explosion.yml
index a6206d5f79..b49037341c 100644
--- a/Resources/Prototypes/explosion.yml
+++ b/Resources/Prototypes/explosion.yml
@@ -11,7 +11,22 @@
tileBreakIntensity: [0, 10, 30]
tileBreakRerollReduction: 20
lightColor: Orange
- texturePath: /Textures/Effects/fire.rsi
+ texturePath: /Textures/Effects/fire.rsi
+ fireStates: 3
+
+- type: explosion
+ id: DemolitionCharge
+ damagePerIntensity:
+ types:
+ Heat: 3
+ Blunt: 3
+ Piercing: 3
+ Structural: 50
+ tileBreakChance: [ 0, 0.5, 1 ]
+ tileBreakIntensity: [ 0, 10, 30 ]
+ tileBreakRerollReduction: 20
+ lightColor: Orange
+ texturePath: /Textures/Effects/fire.rsi
fireStates: 3
- type: explosion