From ad879ff67682cbe8a87c6f989307459708b206c8 Mon Sep 17 00:00:00 2001 From: drdth Date: Tue, 14 Jan 2025 16:11:18 +0300 Subject: [PATCH 1/8] add: crit heartbeat sound --- .../CritHeartbeat/CritHeartbeatComponent.cs | 13 ++++++++++ .../CritHeartbeat/CritHeartbeatSystem.cs | 24 ++++++++++++++++++ .../Audio/_Sunrise/Effects/heartbeat.ogg | Bin 0 -> 6739 bytes .../Prototypes/Entities/Mobs/Species/base.yml | 1 + 4 files changed, 38 insertions(+) create mode 100644 Content.Shared/_Sunrise/CritHeartbeat/CritHeartbeatComponent.cs create mode 100644 Content.Shared/_Sunrise/CritHeartbeat/CritHeartbeatSystem.cs create mode 100644 Resources/Audio/_Sunrise/Effects/heartbeat.ogg diff --git a/Content.Shared/_Sunrise/CritHeartbeat/CritHeartbeatComponent.cs b/Content.Shared/_Sunrise/CritHeartbeat/CritHeartbeatComponent.cs new file mode 100644 index 00000000000..6a01af9fdf8 --- /dev/null +++ b/Content.Shared/_Sunrise/CritHeartbeat/CritHeartbeatComponent.cs @@ -0,0 +1,13 @@ +using Robust.Shared.Audio; +using Robust.Shared.GameStates; + +namespace Content.Shared._Sunrise.CritHeartbeat; + +[RegisterComponent, NetworkedComponent] +public sealed partial class CritHeartbeatComponent : Component +{ + [DataField] + public SoundSpecifier HeartbeatSound = new SoundPathSpecifier("/Audio/_Sunrise/Effects/heartbeat.ogg"); + + public EntityUid? AudioStream; +} diff --git a/Content.Shared/_Sunrise/CritHeartbeat/CritHeartbeatSystem.cs b/Content.Shared/_Sunrise/CritHeartbeat/CritHeartbeatSystem.cs new file mode 100644 index 00000000000..f45183ef4f6 --- /dev/null +++ b/Content.Shared/_Sunrise/CritHeartbeat/CritHeartbeatSystem.cs @@ -0,0 +1,24 @@ +using Content.Shared.Mobs; +using Robust.Shared.Audio; +using Robust.Shared.Audio.Systems; + +namespace Content.Shared._Sunrise.CritHeartbeat; + +public sealed class CritHeartbeatSystem : EntitySystem +{ + [Dependency] private readonly SharedAudioSystem _audio = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnMobStateChanged); + } + + private void OnMobStateChanged(Entity ent, ref MobStateChangedEvent args) + { + ent.Comp.AudioStream = args.NewMobState == MobState.Critical + ? _audio.PlayEntity(ent.Comp.HeartbeatSound, ent, ent, AudioParams.Default.WithLoop(true))?.Entity + : _audio.Stop(ent.Comp.AudioStream); + } +} diff --git a/Resources/Audio/_Sunrise/Effects/heartbeat.ogg b/Resources/Audio/_Sunrise/Effects/heartbeat.ogg new file mode 100644 index 0000000000000000000000000000000000000000..288bc882613d6009b005e3e9957bb21b6745cd8e GIT binary patch literal 6739 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 XGS!2VpEY1Nf$>|V{#tjPyLkT(-rvi5 literal 0 HcmV?d00001 diff --git a/Resources/Prototypes/Entities/Mobs/Species/base.yml b/Resources/Prototypes/Entities/Mobs/Species/base.yml index 1da01fcde1e..3c8c27abbbb 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/base.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/base.yml @@ -261,6 +261,7 @@ - type: Carriable - type: CanEscapeInventory - type: Mood + - type: CritHeartbeat # Sunrise-End - type: Barotrauma damage: From cc4b615717771e7bcfa1ce3539c616b76cf6a389 Mon Sep 17 00:00:00 2001 From: drdth Date: Tue, 14 Jan 2025 16:41:39 +0300 Subject: [PATCH 2/8] fix: fix strange things happening on second crit --- .../_Sunrise/CritHeartbeat/CritHeartbeatComponent.cs | 5 ++--- .../_Sunrise/CritHeartbeat/CritHeartbeatSystem.cs | 7 +++---- 2 files changed, 5 insertions(+), 7 deletions(-) rename {Content.Shared => Content.Server}/_Sunrise/CritHeartbeat/CritHeartbeatComponent.cs (68%) rename {Content.Shared => Content.Server}/_Sunrise/CritHeartbeat/CritHeartbeatSystem.cs (80%) diff --git a/Content.Shared/_Sunrise/CritHeartbeat/CritHeartbeatComponent.cs b/Content.Server/_Sunrise/CritHeartbeat/CritHeartbeatComponent.cs similarity index 68% rename from Content.Shared/_Sunrise/CritHeartbeat/CritHeartbeatComponent.cs rename to Content.Server/_Sunrise/CritHeartbeat/CritHeartbeatComponent.cs index 6a01af9fdf8..fb2f037d5ff 100644 --- a/Content.Shared/_Sunrise/CritHeartbeat/CritHeartbeatComponent.cs +++ b/Content.Server/_Sunrise/CritHeartbeat/CritHeartbeatComponent.cs @@ -1,9 +1,8 @@ using Robust.Shared.Audio; -using Robust.Shared.GameStates; -namespace Content.Shared._Sunrise.CritHeartbeat; +namespace Content.Server._Sunrise.CritHeartbeat; -[RegisterComponent, NetworkedComponent] +[RegisterComponent] public sealed partial class CritHeartbeatComponent : Component { [DataField] diff --git a/Content.Shared/_Sunrise/CritHeartbeat/CritHeartbeatSystem.cs b/Content.Server/_Sunrise/CritHeartbeat/CritHeartbeatSystem.cs similarity index 80% rename from Content.Shared/_Sunrise/CritHeartbeat/CritHeartbeatSystem.cs rename to Content.Server/_Sunrise/CritHeartbeat/CritHeartbeatSystem.cs index f45183ef4f6..bf8bed50981 100644 --- a/Content.Shared/_Sunrise/CritHeartbeat/CritHeartbeatSystem.cs +++ b/Content.Server/_Sunrise/CritHeartbeat/CritHeartbeatSystem.cs @@ -1,12 +1,11 @@ using Content.Shared.Mobs; +using Robust.Server.Audio; using Robust.Shared.Audio; -using Robust.Shared.Audio.Systems; - -namespace Content.Shared._Sunrise.CritHeartbeat; +namespace Content.Server._Sunrise.CritHeartbeat; public sealed class CritHeartbeatSystem : EntitySystem { - [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly AudioSystem _audio = default!; public override void Initialize() { From 13340a93ff5b69dbd3fac77e8b433b6c01793a64 Mon Sep 17 00:00:00 2001 From: drdth Date: Tue, 14 Jan 2025 16:49:45 +0300 Subject: [PATCH 3/8] add: disable option for children in prototypes --- .../_Sunrise/CritHeartbeat/CritHeartbeatComponent.cs | 6 ++++++ .../_Sunrise/CritHeartbeat/CritHeartbeatSystem.cs | 3 +++ 2 files changed, 9 insertions(+) diff --git a/Content.Server/_Sunrise/CritHeartbeat/CritHeartbeatComponent.cs b/Content.Server/_Sunrise/CritHeartbeat/CritHeartbeatComponent.cs index fb2f037d5ff..b4a62e87a6d 100644 --- a/Content.Server/_Sunrise/CritHeartbeat/CritHeartbeatComponent.cs +++ b/Content.Server/_Sunrise/CritHeartbeat/CritHeartbeatComponent.cs @@ -8,5 +8,11 @@ public sealed partial class CritHeartbeatComponent : Component [DataField] public SoundSpecifier HeartbeatSound = new SoundPathSpecifier("/Audio/_Sunrise/Effects/heartbeat.ogg"); + /// + /// Чтобы выключать это для наследников в прототипах + /// + [DataField] + public bool Enabled = true; + public EntityUid? AudioStream; } diff --git a/Content.Server/_Sunrise/CritHeartbeat/CritHeartbeatSystem.cs b/Content.Server/_Sunrise/CritHeartbeat/CritHeartbeatSystem.cs index bf8bed50981..f11f78a22fe 100644 --- a/Content.Server/_Sunrise/CritHeartbeat/CritHeartbeatSystem.cs +++ b/Content.Server/_Sunrise/CritHeartbeat/CritHeartbeatSystem.cs @@ -16,6 +16,9 @@ public override void Initialize() private void OnMobStateChanged(Entity ent, ref MobStateChangedEvent args) { + if (!ent.Comp.Enabled) + return; + ent.Comp.AudioStream = args.NewMobState == MobState.Critical ? _audio.PlayEntity(ent.Comp.HeartbeatSound, ent, ent, AudioParams.Default.WithLoop(true))?.Entity : _audio.Stop(ent.Comp.AudioStream); From 1534503fdc5925613e7c0eaea6cc55cd6b7d0d03 Mon Sep 17 00:00:00 2001 From: drdth Date: Tue, 14 Jan 2025 17:58:24 +0300 Subject: [PATCH 4/8] add: shitty implementation of health-relative pitch scale --- .../CritHeartbeat/CritHeartbeatSystem.cs | 28 +++++++++++++++++-- .../Prototypes/Entities/Mobs/Species/base.yml | 5 ++++ 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/Content.Server/_Sunrise/CritHeartbeat/CritHeartbeatSystem.cs b/Content.Server/_Sunrise/CritHeartbeat/CritHeartbeatSystem.cs index f11f78a22fe..5f7d993f368 100644 --- a/Content.Server/_Sunrise/CritHeartbeat/CritHeartbeatSystem.cs +++ b/Content.Server/_Sunrise/CritHeartbeat/CritHeartbeatSystem.cs @@ -1,6 +1,8 @@ -using Content.Shared.Mobs; +using Content.Shared.Damage; +using Content.Shared.Mobs; using Robust.Server.Audio; using Robust.Shared.Audio; + namespace Content.Server._Sunrise.CritHeartbeat; public sealed class CritHeartbeatSystem : EntitySystem @@ -12,6 +14,7 @@ public override void Initialize() base.Initialize(); SubscribeLocalEvent(OnMobStateChanged); + SubscribeLocalEvent(OnDamage); } private void OnMobStateChanged(Entity ent, ref MobStateChangedEvent args) @@ -19,8 +22,29 @@ private void OnMobStateChanged(Entity ent, ref MobStateC if (!ent.Comp.Enabled) return; + if (!TryComp(ent, out var damageableComponent)) + return; + + var pitch = Math.Min(1, 100 / damageableComponent.TotalDamage.Float()); + ent.Comp.AudioStream = args.NewMobState == MobState.Critical - ? _audio.PlayEntity(ent.Comp.HeartbeatSound, ent, ent, AudioParams.Default.WithLoop(true))?.Entity + ? _audio.PlayEntity(ent.Comp.HeartbeatSound, ent, ent)?.Entity : _audio.Stop(ent.Comp.AudioStream); } + + private void OnDamage(Entity ent, ref DamageChangedEvent args) + { + if (!ent.Comp.Enabled) + return; + + if (ent.Comp.AudioStream == null) + return; + + var pitch = Math.Min(1, 100 / args.Damageable.TotalDamage.Float()); + + // Потому что игра говно, тут нельзя изменять аудиопарамс уже существующего звука. Поэтому я пересоздаю его заново + // Это приводит к проигрыванию звука через неравномерные промежутки времени, но зато работает и не очень заметно + _audio.Stop(ent.Comp.AudioStream); + ent.Comp.AudioStream = _audio.PlayEntity(ent.Comp.HeartbeatSound, ent, ent, AudioParams.Default.WithPitchScale(pitch))?.Entity; + } } diff --git a/Resources/Prototypes/Entities/Mobs/Species/base.yml b/Resources/Prototypes/Entities/Mobs/Species/base.yml index 3c8c27abbbb..a1114c20e41 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/base.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/base.yml @@ -262,6 +262,11 @@ - type: CanEscapeInventory - type: Mood - type: CritHeartbeat + heartbeatSound: + path: /Audio/_Sunrise/Effects/heartbeat.ogg + params: + volume: -3 + loop: True # Sunrise-End - type: Barotrauma damage: From 7d0e076ec392c5c2d86901949e33142d9e36dfa2 Mon Sep 17 00:00:00 2001 From: drdth Date: Tue, 14 Jan 2025 22:04:48 +0300 Subject: [PATCH 5/8] clean up --- Content.Server/_Sunrise/CritHeartbeat/CritHeartbeatSystem.cs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/Content.Server/_Sunrise/CritHeartbeat/CritHeartbeatSystem.cs b/Content.Server/_Sunrise/CritHeartbeat/CritHeartbeatSystem.cs index 5f7d993f368..fd42cd585f9 100644 --- a/Content.Server/_Sunrise/CritHeartbeat/CritHeartbeatSystem.cs +++ b/Content.Server/_Sunrise/CritHeartbeat/CritHeartbeatSystem.cs @@ -22,11 +22,6 @@ private void OnMobStateChanged(Entity ent, ref MobStateC if (!ent.Comp.Enabled) return; - if (!TryComp(ent, out var damageableComponent)) - return; - - var pitch = Math.Min(1, 100 / damageableComponent.TotalDamage.Float()); - ent.Comp.AudioStream = args.NewMobState == MobState.Critical ? _audio.PlayEntity(ent.Comp.HeartbeatSound, ent, ent)?.Entity : _audio.Stop(ent.Comp.AudioStream); From 7bd58a441ac214655529e9adab0a275eacf08abb Mon Sep 17 00:00:00 2001 From: drdth Date: Wed, 15 Jan 2025 07:39:02 +0300 Subject: [PATCH 6/8] review requested changes --- Content.Server/_Sunrise/CritHeartbeat/CritHeartbeatSystem.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Server/_Sunrise/CritHeartbeat/CritHeartbeatSystem.cs b/Content.Server/_Sunrise/CritHeartbeat/CritHeartbeatSystem.cs index fd42cd585f9..c51dda5eebe 100644 --- a/Content.Server/_Sunrise/CritHeartbeat/CritHeartbeatSystem.cs +++ b/Content.Server/_Sunrise/CritHeartbeat/CritHeartbeatSystem.cs @@ -32,7 +32,7 @@ private void OnDamage(Entity ent, ref DamageChangedEvent if (!ent.Comp.Enabled) return; - if (ent.Comp.AudioStream == null) + if (ent.Comp.AudioStream == null || !Exists(ent.Comp.AudioStream)) return; var pitch = Math.Min(1, 100 / args.Damageable.TotalDamage.Float()); From 80e9166b853d16643e62901f1a4038e954989c13 Mon Sep 17 00:00:00 2001 From: drdth Date: Wed, 15 Jan 2025 07:39:02 +0300 Subject: [PATCH 7/8] review requested changes --- Content.Server/_Sunrise/CritHeartbeat/CritHeartbeatSystem.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Server/_Sunrise/CritHeartbeat/CritHeartbeatSystem.cs b/Content.Server/_Sunrise/CritHeartbeat/CritHeartbeatSystem.cs index fd42cd585f9..dfa89d66846 100644 --- a/Content.Server/_Sunrise/CritHeartbeat/CritHeartbeatSystem.cs +++ b/Content.Server/_Sunrise/CritHeartbeat/CritHeartbeatSystem.cs @@ -32,7 +32,7 @@ private void OnDamage(Entity ent, ref DamageChangedEvent if (!ent.Comp.Enabled) return; - if (ent.Comp.AudioStream == null) + if (!Exists(ent.Comp.AudioStream)) return; var pitch = Math.Min(1, 100 / args.Damageable.TotalDamage.Float()); From a832f5bba1dff01550fd80669996d75c56c4b6b0 Mon Sep 17 00:00:00 2001 From: drdth Date: Wed, 15 Jan 2025 07:42:11 +0300 Subject: [PATCH 8/8] changes 2 --- Content.Server/_Sunrise/CritHeartbeat/CritHeartbeatSystem.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Server/_Sunrise/CritHeartbeat/CritHeartbeatSystem.cs b/Content.Server/_Sunrise/CritHeartbeat/CritHeartbeatSystem.cs index c51dda5eebe..dfa89d66846 100644 --- a/Content.Server/_Sunrise/CritHeartbeat/CritHeartbeatSystem.cs +++ b/Content.Server/_Sunrise/CritHeartbeat/CritHeartbeatSystem.cs @@ -32,7 +32,7 @@ private void OnDamage(Entity ent, ref DamageChangedEvent if (!ent.Comp.Enabled) return; - if (ent.Comp.AudioStream == null || !Exists(ent.Comp.AudioStream)) + if (!Exists(ent.Comp.AudioStream)) return; var pitch = Math.Min(1, 100 / args.Damageable.TotalDamage.Float());