From 8f63e49d3397a5e08199c1cc9151e71b8b7dfdd4 Mon Sep 17 00:00:00 2001 From: ConstantlyConfused <67894661+Eternally-Confused@users.noreply.github.com> Date: Mon, 10 Feb 2025 16:48:53 -0700 Subject: [PATCH 1/3] Add nitrious oxide tanks to surgery kits (#2951) added Nitrous tanks to Surgery Duffels --- Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml b/Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml index 6f4a978356..9056ea0a58 100644 --- a/Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml +++ b/Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml @@ -13,6 +13,7 @@ - id: Retractor - id: Scalpel - id: BoneGel + - id: NitrousOxideTankFilled # DeltaV - add anesthesia - type: entity id: ClothingBackpackDuffelCBURNFilled @@ -48,6 +49,7 @@ - id: ClothingHandsGlovesNitrile - id: EmergencyRollerBedSpawnFolded - id: BoneGel + - id: NitrousOxideTankFilled # DeltaV - add anesthesia - type: entity parent: ClothingBackpackDuffelSyndicateBundle From 6eae68c87cb973978b0d08213eb6f01efc5ff8a4 Mon Sep 17 00:00:00 2001 From: Quanteey <61941975+Quanteey@users.noreply.github.com> Date: Tue, 11 Feb 2025 09:40:36 +0100 Subject: [PATCH 2/3] Make crew monitors beep when someone dies / crits (#2930) * Make the crew monitors beep when someone dies or crits * Cleanup * Fix a comment that was not updated earlier. Signed-off-by: Quanteey <61941975+Quanteey@users.noreply.github.com> * Switch frame time tracking to using timespans * use timestamps of next alert instead of frame time tracking * Fix outdated docs --------- Signed-off-by: Quanteey <61941975+Quanteey@users.noreply.github.com> --- .../CrewMonitoringConsoleComponent.cs | 35 ++++++++++++- .../CrewMonitoringConsoleSystem.cs | 48 ++++++++++++++++++ .../_DV/Medical/CrewMonitoring/crew_alert.ogg | Bin 0 -> 33311 bytes .../Medical/handheld_crew_monitor.yml | 4 ++ 4 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 Resources/Audio/_DV/Medical/CrewMonitoring/crew_alert.ogg diff --git a/Content.Server/Medical/CrewMonitoring/CrewMonitoringConsoleComponent.cs b/Content.Server/Medical/CrewMonitoring/CrewMonitoringConsoleComponent.cs index c2d7124194..3eef6bc0c5 100644 --- a/Content.Server/Medical/CrewMonitoring/CrewMonitoringConsoleComponent.cs +++ b/Content.Server/Medical/CrewMonitoring/CrewMonitoringConsoleComponent.cs @@ -1,8 +1,10 @@ using Content.Shared.Medical.SuitSensor; +using Robust.Shared.Audio; // DeltaV +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; // DeltaV namespace Content.Server.Medical.CrewMonitoring; -[RegisterComponent] +[RegisterComponent, AutoGenerateComponentPause] // DeltaV - add AutoGenerateComponentPause [Access(typeof(CrewMonitoringConsoleSystem))] public sealed partial class CrewMonitoringConsoleComponent : Component { @@ -16,4 +18,35 @@ public sealed partial class CrewMonitoringConsoleComponent : Component /// [DataField("sensorTimeout"), ViewVariables(VVAccess.ReadWrite)] public float SensorTimeout = 10f; + + // DeltaV - start of alert system code + /// + /// Should the component beep if someone goes critical or dies + /// + [DataField] + public bool AlertsEnabled = true; + + /// + /// Track sensors that have triggered the crew member critical alert. + /// + public HashSet AlertedSensors = []; + + /// + /// Timestamp of the next possible alert (alert cooldown) + /// + [DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), AutoPausedField] + public TimeSpan NextAlert; + + /// + /// Time between alerts + /// + [DataField] + public TimeSpan AlertCooldown = TimeSpan.FromSeconds(15); + + /// + /// Alert sound that is played when a crew member goes into critical / dies. + /// + [DataField] + public SoundSpecifier AlertSound = new SoundPathSpecifier("/Audio/_DV/Medical/CrewMonitoring/crew_alert.ogg"); + // DeltaV - end of alert system code } diff --git a/Content.Server/Medical/CrewMonitoring/CrewMonitoringConsoleSystem.cs b/Content.Server/Medical/CrewMonitoring/CrewMonitoringConsoleSystem.cs index a53df6dbae..f5176fe5ba 100644 --- a/Content.Server/Medical/CrewMonitoring/CrewMonitoringConsoleSystem.cs +++ b/Content.Server/Medical/CrewMonitoring/CrewMonitoringConsoleSystem.cs @@ -1,11 +1,15 @@ using System.Linq; using Content.Server.DeviceNetwork; using Content.Server.DeviceNetwork.Systems; +using Content.Server.Power.EntitySystems; // DeltaV using Content.Server.PowerCell; using Content.Shared.Medical.CrewMonitoring; using Content.Shared.Medical.SuitSensor; using Content.Shared.Pinpointer; using Robust.Server.GameObjects; +using Robust.Shared.Audio; // DeltaV +using Robust.Shared.Audio.Systems; // DeltaV +using Robust.Shared.Timing; // DeltaV namespace Content.Server.Medical.CrewMonitoring; @@ -13,6 +17,8 @@ public sealed class CrewMonitoringConsoleSystem : EntitySystem { [Dependency] private readonly PowerCellSystem _cell = default!; [Dependency] private readonly UserInterfaceSystem _uiSystem = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; // DeltaV + [Dependency] private readonly IGameTiming _timing = default!; // DeltaV public override void Initialize() { @@ -43,6 +49,48 @@ private void OnPacketReceived(EntityUid uid, CrewMonitoringConsoleComponent comp component.ConnectedSensors = sensorStatus; UpdateUserInterface(uid, component); + + // DeltaV - start of alert system code + if (!component.AlertsEnabled) + return; + + // station power (for the machine version) + if (!this.IsPowered(uid, EntityManager)) + return; + + // cell power (for the handheld) + if (!_cell.HasActivatableCharge(uid)) + return; + + foreach (var (sensorId, status) in sensorStatus) + { + // DamagePercentage above 1f is considered critical. It is null when sensor vitals are off. + var isCritical = status.DamagePercentage is >= 1f; + + // Skip crew members that we have already alerted about + if (component.AlertedSensors.Contains(sensorId)) + { + if (status.IsAlive && !isCritical) + component.AlertedSensors.Remove(sensorId); + continue; + } + + if (!status.IsAlive || isCritical) + { + if (_timing.CurTime >= component.NextAlert) + { + var audioParams = AudioParams.Default.WithVolume(-2f).WithMaxDistance(4f); + _audio.PlayPvs(component.AlertSound, uid, audioParams); + component.NextAlert = _timing.CurTime + component.AlertCooldown; + } + + // We are doing this outside the cooldown check to avoid "alert queues" + // If two people die at the same time and remain dead for longer, we want to alert once for both people + // instead of alerting once for the first one, waiting the cooldown, and then alerting again for the second one. + component.AlertedSensors.Add(sensorId); + } + } + // DeltaV - end of alert system code } private void OnUIOpened(EntityUid uid, CrewMonitoringConsoleComponent component, BoundUIOpenedEvent args) diff --git a/Resources/Audio/_DV/Medical/CrewMonitoring/crew_alert.ogg b/Resources/Audio/_DV/Medical/CrewMonitoring/crew_alert.ogg new file mode 100644 index 0000000000000000000000000000000000000000..d7474c8fc29f71fbfe8fe1440cee1006777170cd GIT binary patch literal 33311 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 Date: Wed, 12 Feb 2025 12:18:35 -0500 Subject: [PATCH 3/3] Modified check for console power Our isPowered check defaults to false for invalid checks whereas Delta-V's defaults to true, so needed an extra component check. --- .../Medical/CrewMonitoring/CrewMonitoringConsoleSystem.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Content.Server/Medical/CrewMonitoring/CrewMonitoringConsoleSystem.cs b/Content.Server/Medical/CrewMonitoring/CrewMonitoringConsoleSystem.cs index f5176fe5ba..5c4e5d1ff6 100644 --- a/Content.Server/Medical/CrewMonitoring/CrewMonitoringConsoleSystem.cs +++ b/Content.Server/Medical/CrewMonitoring/CrewMonitoringConsoleSystem.cs @@ -2,6 +2,7 @@ using Content.Server.DeviceNetwork; using Content.Server.DeviceNetwork.Systems; using Content.Server.Power.EntitySystems; // DeltaV +using Content.Server.Power.Components; // Floofstation using Content.Server.PowerCell; using Content.Shared.Medical.CrewMonitoring; using Content.Shared.Medical.SuitSensor; @@ -55,7 +56,7 @@ private void OnPacketReceived(EntityUid uid, CrewMonitoringConsoleComponent comp return; // station power (for the machine version) - if (!this.IsPowered(uid, EntityManager)) + if (this.HasComp(uid) && !this.IsPowered(uid, EntityManager)) // Floofstation - our IsPowered differs from Delta-V currently so added an extra check return; // cell power (for the handheld)