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