From d8b2886f7166e1a3974ed552162d84606876ad77 Mon Sep 17 00:00:00 2001 From: Kara Date: Tue, 5 Jul 2022 00:24:37 -0700 Subject: [PATCH] Makes the nuke keypad play a nonatonic scale (#9431) --- Content.Server/Nuke/NukeComponent.cs | 5 +++ Content.Server/Nuke/NukeSystem.cs | 33 +++++++++++++++++- .../Audio/Machines/Nuke/general_beep.ogg | Bin 4714 -> 5750 bytes 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/Content.Server/Nuke/NukeComponent.cs b/Content.Server/Nuke/NukeComponent.cs index 1f9d3b99f6..503a50758e 100644 --- a/Content.Server/Nuke/NukeComponent.cs +++ b/Content.Server/Nuke/NukeComponent.cs @@ -54,6 +54,11 @@ namespace Content.Server.Nuke [DataField("alertLevelOnActivate")] public string AlertLevelOnActivate = default!; [DataField("alertLevelOnDeactivate")] public string AlertLevelOnDeactivate = default!; + /// + /// This is stored so we can do a funny by making 0 shift the last played note up by 12 semitones (octave) + /// + public int LastPlayedKeypadSemitones = 0; + [DataField("keypadPressSound")] public SoundSpecifier KeypadPressSound = new SoundPathSpecifier("/Audio/Machines/Nuke/general_beep.ogg"); diff --git a/Content.Server/Nuke/NukeSystem.cs b/Content.Server/Nuke/NukeSystem.cs index a59a5bccc6..6f08aed792 100644 --- a/Content.Server/Nuke/NukeSystem.cs +++ b/Content.Server/Nuke/NukeSystem.cs @@ -173,7 +173,7 @@ namespace Content.Server.Nuke private void OnKeypadButtonPressed(EntityUid uid, NukeComponent component, NukeKeypadMessage args) { - PlaySound(uid, component.KeypadPressSound, 0.125f, component); + PlayNukeKeypadSound(uid, args.Value, component); if (component.Status != NukeStatus.AWAIT_CODE) return; @@ -358,6 +358,37 @@ namespace Content.Server.Nuke ui.SetState(state); } + private void PlayNukeKeypadSound(EntityUid uid, int number, NukeComponent? component = null) + { + if (!Resolve(uid, ref component)) + return; + + // This is a C mixolydian blues scale. + // 1 2 3 C D Eb + // 4 5 6 E F F# + // 7 8 9 G A Bb + var semitoneShift = number switch + { + 1 => 0, + 2 => 2, + 3 => 3, + 4 => 4, + 5 => 5, + 6 => 6, + 7 => 7, + 8 => 9, + 9 => 10, + 0 => component.LastPlayedKeypadSemitones + 12, + _ => 0 + }; + + // Don't double-dip on the octave shifting + component.LastPlayedKeypadSemitones = number == 0 ? component.LastPlayedKeypadSemitones : semitoneShift; + + SoundSystem.Play(component.KeypadPressSound.GetSound(), Filter.Pvs(uid), + AudioHelpers.ShiftSemitone(semitoneShift).WithVolume(-5f)); + } + private void PlaySound(EntityUid uid, SoundSpecifier sound, float varyPitch = 0f, NukeComponent? component = null) { diff --git a/Resources/Audio/Machines/Nuke/general_beep.ogg b/Resources/Audio/Machines/Nuke/general_beep.ogg index c149eb300a0c10bf4909d7e9a81023eb44288257..a8d2e34b49e9d622ec4553021ef8facb874808e7 100644 GIT binary patch delta 4890 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