diff --git a/Content.Server/_CP14/Demiplane/CP14DemiplaneSystem.Stabilization.cs b/Content.Server/_CP14/Demiplane/CP14DemiplaneSystem.Stabilization.cs index 4d4f055000..487f207a68 100644 --- a/Content.Server/_CP14/Demiplane/CP14DemiplaneSystem.Stabilization.cs +++ b/Content.Server/_CP14/Demiplane/CP14DemiplaneSystem.Stabilization.cs @@ -1,5 +1,6 @@ -using Content.Server.Body.Systems; using Content.Shared._CP14.Demiplane.Components; +using Content.Shared.Damage; +using Content.Shared.Damage.Prototypes; using Content.Shared.Mobs.Systems; using Content.Shared.SSDIndicator; @@ -11,7 +12,7 @@ public sealed partial class CP14DemiplaneSystem private TimeSpan _nextCheckTime = TimeSpan.Zero; [Dependency] private readonly MobStateSystem _mobState = default!; - [Dependency] private readonly BodySystem _body = default!; + [Dependency] private readonly DamageableSystem _damageable = default!; private void InitStabilization() { @@ -79,15 +80,18 @@ public sealed partial class CP14DemiplaneSystem public void DeleteDemiplane(Entity demiplane, bool safe = false) { - var query = EntityQueryEnumerator(); + var query = EntityQueryEnumerator(); - while (query.MoveNext(out var uid, out var stabilizer, out var xform)) + while (query.MoveNext(out var uid, out var extract, out var xform)) { - if (TryTeleportOutDemiplane(demiplane, uid)) - { - if (!safe) - _body.GibBody(uid); - } + if (!extract.Enabled) + continue; + + if (!TryTeleportOutDemiplane(demiplane, uid)) + continue; + + if (!safe) + _damageable.TryChangeDamage(uid, extract.ExtractDamage); } QueueDel(demiplane); diff --git a/Content.Server/_CP14/RoundEnd/CP14RoundEndSystem.cs b/Content.Server/_CP14/RoundEnd/CP14RoundEndSystem.cs index a628d91f74..c63d14c462 100644 --- a/Content.Server/_CP14/RoundEnd/CP14RoundEndSystem.cs +++ b/Content.Server/_CP14/RoundEnd/CP14RoundEndSystem.cs @@ -49,7 +49,7 @@ public sealed partial class CP14RoundEndSystem : EntitySystem if (_roundEndMoment > _timing.CurTime) return; - _demiplane.DeleteAllDemiplanes(safe: false); + _demiplane.DeleteAllDemiplanes(); _chatSystem.DispatchGlobalAnnouncement(Loc.GetString("cp14-round-end"), announcementSound: new SoundPathSpecifier("/Audio/_CP14/Announce/event_boom.ogg")); _roundEnd.EndRound(); diff --git a/Content.Shared/_CP14/Demiplane/Components/CP14DemiplaneForceExtractComponent.cs b/Content.Shared/_CP14/Demiplane/Components/CP14DemiplaneForceExtractComponent.cs new file mode 100644 index 0000000000..bd6e2fab9d --- /dev/null +++ b/Content.Shared/_CP14/Demiplane/Components/CP14DemiplaneForceExtractComponent.cs @@ -0,0 +1,22 @@ +using Content.Shared.Damage; + +namespace Content.Shared._CP14.Demiplane.Components; + +/// +/// When closing the demiplane, all entities with this component will be thrown out instead of being deleted. +/// +[RegisterComponent, Access(typeof(CP14SharedDemiplaneSystem))] +public sealed partial class CP14DemiplaneForceExtractComponent : Component +{ + [DataField] + public bool Enabled = true; + + [DataField] + public DamageSpecifier ExtractDamage = new() + { + DamageDict = new() + { + { "Blunt", 111 }, + } + }; +} diff --git a/Content.Shared/_CP14/Demiplane/Components/CP14DemiplanStabilizer.cs b/Content.Shared/_CP14/Demiplane/Components/CP14DemiplaneStabilizerComponent.cs similarity index 100% rename from Content.Shared/_CP14/Demiplane/Components/CP14DemiplanStabilizer.cs rename to Content.Shared/_CP14/Demiplane/Components/CP14DemiplaneStabilizerComponent.cs diff --git a/Resources/Prototypes/_CP14/Entities/Mobs/Player/Patrons/gods.yml b/Resources/Prototypes/_CP14/Entities/Mobs/Player/Patrons/gods.yml index 163fa15d8f..a6778cd0f5 100644 --- a/Resources/Prototypes/_CP14/Entities/Mobs/Player/Patrons/gods.yml +++ b/Resources/Prototypes/_CP14/Entities/Mobs/Player/Patrons/gods.yml @@ -67,8 +67,7 @@ types: CP14ManaDepletion: 1 - type: CP14ZLevelMover - - type: CP14DemiplaneStabilizer # teleports gods outside when the demiplane closes - enabled: false + - type: CP14DemiplaneForceExtract - type: UserInterface interfaces: enum.CP14ReligionEntityUiKey.Key: diff --git a/Resources/Prototypes/_CP14/Entities/Mobs/Species/base.yml b/Resources/Prototypes/_CP14/Entities/Mobs/Species/base.yml index dcd99b2a1a..cd0f8fbded 100644 --- a/Resources/Prototypes/_CP14/Entities/Mobs/Species/base.yml +++ b/Resources/Prototypes/_CP14/Entities/Mobs/Species/base.yml @@ -213,6 +213,7 @@ - type: Tag tags: - FootstepSound + - type: CP14DemiplaneForceExtract - type: CP14DemiplaneStabilizer requireAlive: true - type: CP14IgnitionModifier diff --git a/Resources/Prototypes/_CP14/Entities/Mobs/Species/skeleton.yml b/Resources/Prototypes/_CP14/Entities/Mobs/Species/skeleton.yml index 5fe44e2cb7..4808af175c 100644 --- a/Resources/Prototypes/_CP14/Entities/Mobs/Species/skeleton.yml +++ b/Resources/Prototypes/_CP14/Entities/Mobs/Species/skeleton.yml @@ -112,6 +112,8 @@ - type: Inventory templateId: CP14Human - type: TransferMindOnGib + - type: CP14DemiplaneForceExtract + enabled: false - type: CP14DemiplaneStabilizer enabled: false - type: GhostTakeoverAvailable