diff --git a/Content.Server/Explosion/Components/OnTrigger/GibOnTriggerComponent.cs b/Content.Server/Explosion/Components/OnTrigger/GibOnTriggerComponent.cs
index da584676593..61615d65b9a 100644
--- a/Content.Server/Explosion/Components/OnTrigger/GibOnTriggerComponent.cs
+++ b/Content.Server/Explosion/Components/OnTrigger/GibOnTriggerComponent.cs
@@ -13,4 +13,11 @@ public sealed partial class GibOnTriggerComponent : Component
[ViewVariables(VVAccess.ReadWrite)]
[DataField("deleteItems")]
public bool DeleteItems = false;
+
+ ///
+ /// Frontier - Should gibbing also delete the owners organs?
+ ///
+ [ViewVariables(VVAccess.ReadWrite)]
+ [DataField("deleteOrgans")]
+ public bool DeleteOrgans = false;
}
diff --git a/Content.Server/Explosion/EntitySystems/TriggerSystem.cs b/Content.Server/Explosion/EntitySystems/TriggerSystem.cs
index 0647fec0690..d05a186a315 100644
--- a/Content.Server/Explosion/EntitySystems/TriggerSystem.cs
+++ b/Content.Server/Explosion/EntitySystems/TriggerSystem.cs
@@ -33,6 +33,7 @@
using Robust.Shared.Random;
using Robust.Shared.Player;
using Content.Shared.Coordinates;
+using Content.Shared.Body.Components; // Frontier - Gib organs
namespace Content.Server.Explosion.EntitySystems
{
@@ -175,6 +176,19 @@ private void HandleGibTrigger(EntityUid uid, GibOnTriggerComponent component, Tr
Del(item);
}
}
+
+ if (component.DeleteOrgans) // Frontier - Gib organs
+ {
+ if (TryComp(xform.ParentUid, out var body))
+ {
+ var organs = _body.GetBodyOrganComponents(xform.ParentUid, body);
+ foreach (var (_, organ) in organs)
+ {
+ Del(organ.Owner);
+ }
+ }
+ } // Frontier
+
_body.GibBody(xform.ParentUid, true);
args.Handled = true;
}
diff --git a/Content.Shared/Bed/Sleep/AutoWakeUpComponent.cs b/Content.Shared/Bed/Sleep/AutoWakeUpComponent.cs
new file mode 100644
index 00000000000..f2fa75ca4a2
--- /dev/null
+++ b/Content.Shared/Bed/Sleep/AutoWakeUpComponent.cs
@@ -0,0 +1,13 @@
+using Content.Shared.FixedPoint;
+using Robust.Shared.GameStates;
+using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
+
+namespace Content.Shared.Bed.Sleep;
+
+///
+/// Frontier - Added to AI to allow auto waking up after 5 secs.
+///
+[NetworkedComponent, RegisterComponent]
+public sealed partial class AutoWakeUpComponent : Component
+{
+}
diff --git a/Content.Shared/Bed/Sleep/SharedSleepingSystem.cs b/Content.Shared/Bed/Sleep/SharedSleepingSystem.cs
index 4e4bc2c574b..1a5443b160c 100644
--- a/Content.Shared/Bed/Sleep/SharedSleepingSystem.cs
+++ b/Content.Shared/Bed/Sleep/SharedSleepingSystem.cs
@@ -7,6 +7,7 @@
using Robust.Shared.Network;
using Robust.Shared.Prototypes;
using Robust.Shared.Timing;
+using System.Threading.Tasks; // Frontier
namespace Content.Server.Bed.Sleep
{
@@ -38,6 +39,16 @@ private void OnMapInit(EntityUid uid, SleepingComponent component, MapInitEvent
// TODO remove hardcoded time.
_actionsSystem.SetCooldown(component.WakeAction, _gameTiming.CurTime, _gameTiming.CurTime + TimeSpan.FromSeconds(15));
+
+ if (TryComp(uid, out var autoWakeUp)) // Frontier
+ {
+ Task.Run(async () =>
+ {
+ await Task.Delay(TimeSpan.FromSeconds(5));
+ ev = new SleepStateChangedEvent(false);
+ RaiseLocalEvent(uid, ev);
+ });
+ } // Frontier
}
private void OnShutdown(EntityUid uid, SleepingComponent component, ComponentShutdown args)
diff --git a/Content.Shared/Buckle/Components/BuckleComponent.cs b/Content.Shared/Buckle/Components/BuckleComponent.cs
index cf28b56d51f..80d3be7db14 100644
--- a/Content.Shared/Buckle/Components/BuckleComponent.cs
+++ b/Content.Shared/Buckle/Components/BuckleComponent.cs
@@ -75,6 +75,13 @@ public sealed partial class BuckleComponent : Component
/// Used for client rendering
///
[ViewVariables] public int? OriginalDrawDepth;
+
+ ///
+ /// Frontier - True if the entity is blocked from buckling.
+ ///
+ [DataField]
+ [ViewVariables(VVAccess.ReadWrite)]
+ public bool Disable;
}
[ByRefEvent]
diff --git a/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs b/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs
index cfaea47d304..ab5289f35a6 100644
--- a/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs
+++ b/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs
@@ -323,6 +323,9 @@ private bool CanBuckle(
if (attemptEvent.Cancelled)
return false;
+ if (buckleComp.Disable) // Frontier
+ return false; // Frontier
+
return true;
}
diff --git a/Resources/Prototypes/_NF/Entities/Mobs/NPCs/syndicatemob.yml b/Resources/Prototypes/_NF/Entities/Mobs/NPCs/syndicatemob.yml
index bc8cfdb9102..8a7e4a2e544 100644
--- a/Resources/Prototypes/_NF/Entities/Mobs/NPCs/syndicatemob.yml
+++ b/Resources/Prototypes/_NF/Entities/Mobs/NPCs/syndicatemob.yml
@@ -22,6 +22,9 @@
minimumWait: 120 # 1 * 2
maximumWait: 240 # 2 * 60
NextAdvertisementTime: 0
+ - type: Buckle
+ disable: true
+ - type: AutoWakeUp
# Humans
- type: entity
@@ -164,7 +167,7 @@
- SyndicateNavalGrenadierGear
- type: AutoImplant
implants:
- - DeathAcidifierImplant
+ - DeathAcidifierImplantNF
- type: RechargeBasicEntityAmmo
rechargeCooldown: 5
rechargeSound:
@@ -236,16 +239,12 @@
- type: Loadout
prototypes:
- SyndicateNavalCommanderGear
- - type: MobThresholds
- thresholds:
- 0: Alive
- 140: Dead # No crit state to ensure that mob explodes ASAP
- type: Stamina
critThreshold: 500 # Extra hard to incapacitate and loot
- type: AutoImplant
implants:
- DeathRattleImplant
- - DeathAcidifierImplant
+ - DeathAcidifierImplantNF
- type: RechargeBasicEntityAmmo
rechargeCooldown: 0.5
rechargeSound:
diff --git a/Resources/Prototypes/_NF/Entities/Objects/Misc/implanters.yml b/Resources/Prototypes/_NF/Entities/Objects/Misc/implanters.yml
index 9872e713e1d..d119d2ac358 100644
--- a/Resources/Prototypes/_NF/Entities/Objects/Misc/implanters.yml
+++ b/Resources/Prototypes/_NF/Entities/Objects/Misc/implanters.yml
@@ -7,3 +7,12 @@
components:
- type: Implanter
implant: MedicalTrackingImplant
+
+- type: entity
+ id: DeathAcidifierImplanterNF
+ name: death acidifier implanter
+ suffix: All
+ parent: BaseImplantOnlyImplanterSyndi
+ components:
+ - type: Implanter
+ implant: DeathAcidifierImplantNF
diff --git a/Resources/Prototypes/_NF/Entities/Objects/Misc/subdermal_implants.yml b/Resources/Prototypes/_NF/Entities/Objects/Misc/subdermal_implants.yml
index 7f7b7237e29..57f96e3992e 100644
--- a/Resources/Prototypes/_NF/Entities/Objects/Misc/subdermal_implants.yml
+++ b/Resources/Prototypes/_NF/Entities/Objects/Misc/subdermal_implants.yml
@@ -25,3 +25,29 @@
- Dead
- type: Rattle
radioChannel: "Medical"
+
+- type: entity
+ parent: BaseSubdermalImplant
+ id: DeathAcidifierImplantNF
+ name: death-acidifier implant
+ description: This implant melts the user and their equipment upon death.
+ noSpawn: true
+ components:
+ - type: SubdermalImplant
+ permanent: true
+# implantAction: ActionActivateDeathAcidifier
+ - type: TriggerOnMobstateChange
+ mobState:
+ - Dead
+ - Critical
+# - type: TriggerImplantAction
+ - type: GibOnTrigger
+ deleteItems: true
+ deleteOrgans: true
+ - type: SpawnOnTrigger
+ proto: Acidifier
+ - type: Tag
+ tags:
+ - SubdermalImplant
+ - HideContextMenu
+ - DeathAcidifier