diff --git a/Content.Server/_HL/Traits/Physical/SyntheticHeartComponent.cs b/Content.Server/_HL/Traits/Physical/SyntheticHeartComponent.cs new file mode 100644 index 00000000000..2f9509341af --- /dev/null +++ b/Content.Server/_HL/Traits/Physical/SyntheticHeartComponent.cs @@ -0,0 +1,7 @@ +namespace Content.Server._HL.Traits.Physical; + +[RegisterComponent] +public sealed partial class SyntheticHeartComponent : Component +{ + +} diff --git a/Content.Server/_HL/Traits/Physical/SyntheticHeartSystem.cs b/Content.Server/_HL/Traits/Physical/SyntheticHeartSystem.cs new file mode 100644 index 00000000000..555d844f3be --- /dev/null +++ b/Content.Server/_HL/Traits/Physical/SyntheticHeartSystem.cs @@ -0,0 +1,47 @@ +using Content.Shared.Body.Systems; +using Content.Shared._Shitmed.Body.Organ; +using Content.Shared.Body.Components; +using Content.Shared.Body.Organ; +using Robust.Shared.Containers; + +namespace Content.Server._HL.Traits.Physical; + +public sealed class SyntheticHeartSystem : EntitySystem +{ + [Dependency] private readonly SharedBodySystem _body = null!; + [Dependency] private readonly SharedContainerSystem _containers = null!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnStartup); + } + + private void OnStartup(EntityUid uid, SyntheticHeartComponent comp, ComponentStartup args) + { + if (!TryComp(uid, out var body)) + return; + + if (_body.TryGetBodyOrganEntityComps((uid, body), out var livers)) + { + var old = livers[0].Owner; + if (_containers.TryGetContainingContainer((old, null, null), out var cont)) + { + var part = cont.Owner; + _body.RemoveOrgan(old); + QueueDel(old); + + var spawn = Spawn("OrganSynthHeart", Transform(part).Coordinates); + if (TryComp(spawn, out OrganComponent? organ)) + { + _body.InsertOrgan(part, spawn, "heart", null, organ); + } + else + { + QueueDel(spawn); + } + } + } + } +} diff --git a/Resources/Locale/en-US/_HL/traits/traits.ftl b/Resources/Locale/en-US/_HL/traits/traits.ftl index 55f5f598bfe..243c96acf0a 100644 --- a/Resources/Locale/en-US/_HL/traits/traits.ftl +++ b/Resources/Locale/en-US/_HL/traits/traits.ftl @@ -126,6 +126,8 @@ hl-trait-kinky-erotic-moods-desc = Every half hour or so you receive a private r hl-trait-romantic-moods-name = Romantic Moods hl-trait-romantic-moods-desc = Every half hour or so you receive a private reminder of two randomly drawn romantic inclinations — tenderness, dates, closeness. Preferences rotate every one to two and a half hours. +trait-syntheticheart-name = Synthetic Heart +trait-syntheticheart-desc = You have a high-tech biomechanical heart based on the same technology found in Synths. Their nanites work on you, and chemicals will continue to process even when the rest of your body won't - but they have significantly reduced effect on you. trait-hardskin-name = Hard Skin trait-hardskin-desc = Your skin is too hard for needles to pierce. injector-component-deny-hardskin = {CAPITALIZE(THE($target))}'s skin is too hard for the needle to pierce. diff --git a/Resources/Prototypes/_HL/Traits/Physical.yml b/Resources/Prototypes/_HL/Traits/Physical.yml index f5d0321dbf6..e6875d141af 100644 --- a/Resources/Prototypes/_HL/Traits/Physical.yml +++ b/Resources/Prototypes/_HL/Traits/Physical.yml @@ -419,6 +419,23 @@ removeBodyPart: Arm partSymmetry: Right +- type: trait + id: SyntheticHeart + name: trait-syntheticheart-name + description: trait-syntheticheart-desc + category: Physical + cost: 16 + speciesBlacklist: # HardLight + - IPC + - Synth + mutuallyExclusiveTraits: + - PlateletFactories + - NaturalRegen + - UnnaturalRegen + components: + - type: SyntheticHeart + - type: HLSynth + - type: trait id: HardSkin name: trait-hardskin-name diff --git a/Resources/Prototypes/_Mono/Traits/physical.yml b/Resources/Prototypes/_Mono/Traits/physical.yml index 64550e3bb3c..34a8d9ac98a 100644 --- a/Resources/Prototypes/_Mono/Traits/physical.yml +++ b/Resources/Prototypes/_Mono/Traits/physical.yml @@ -376,6 +376,7 @@ - NaturalRegen - ShadekinRegeneration - ExtremeShadekinRegeneration + - SyntheticHeart # HL speciesBlacklist: - IPC - Avali