diff --git a/Content.Client/Audio/AudioUIController.cs b/Content.Client/Audio/AudioUIController.cs index ef903672fd..16e1edd252 100644 --- a/Content.Client/Audio/AudioUIController.cs +++ b/Content.Client/Audio/AudioUIController.cs @@ -54,7 +54,7 @@ public sealed class AudioUIController : UIController { if (!string.IsNullOrEmpty(value)) { - var resource = _cache.GetResource(value); + var resource = GetSoundOrFallback(value, CCVars.UIClickSound.DefaultValue); var source = _audioManager.CreateAudioSource(resource); @@ -77,7 +77,7 @@ public sealed class AudioUIController : UIController { if (!string.IsNullOrEmpty(value)) { - var hoverResource = _cache.GetResource(value); + var hoverResource = GetSoundOrFallback(value, CCVars.UIHoverSound.DefaultValue); var hoverSource = _audioManager.CreateAudioSource(hoverResource); @@ -95,4 +95,12 @@ public sealed class AudioUIController : UIController UIManager.SetHoverSound(null); } } + + private AudioResource GetSoundOrFallback(string path, string fallback) + { + if (!_cache.TryGetResource(path, out AudioResource? resource)) + return _cache.GetResource(fallback); + + return resource; + } } diff --git a/Content.Server/Administration/Managers/AdminManager.cs b/Content.Server/Administration/Managers/AdminManager.cs index c03569c95f..707184b3af 100644 --- a/Content.Server/Administration/Managers/AdminManager.cs +++ b/Content.Server/Administration/Managers/AdminManager.cs @@ -392,7 +392,8 @@ namespace Content.Server.Administration.Managers // я ебался в зад, поймите if (!data.HasFlag(AdminFlags.Permissions) && !data.HasFlag(AdminFlags.Host) && dbData.AdminServer != null && dbData.AdminServer != "unknown" && currentServerName != "unknown" - && currentServerName != dbData.AdminServer) + && currentServerName != dbData.AdminServer + && _cfg.GetCVar(CCVars.AdminUseCustomNamesAdminRank)) { return null; } diff --git a/Content.Server/Administration/Systems/BwoinkSystem.cs b/Content.Server/Administration/Systems/BwoinkSystem.cs index f81e35f35c..6d2a0a76db 100644 --- a/Content.Server/Administration/Systems/BwoinkSystem.cs +++ b/Content.Server/Administration/Systems/BwoinkSystem.cs @@ -405,14 +405,21 @@ namespace Content.Server.Administration.Systems var escapedText = FormattedMessage.EscapeText(message.Text); string bwoinkText; + string adminPrefix = ""; + + //Getting an administrator position + if (_config.GetCVar(CCVars.AhelpAdminPrefix) && senderAdmin is not null && senderAdmin.Title is not null) + { + adminPrefix = $"[bold]\\[{senderAdmin.Title}\\][/bold] "; + } if (senderAdmin is not null && senderAdmin.Flags == AdminFlags.Adminhelp) // Mentor. Not full admin. That's why it's colored differently. { - bwoinkText = $"[color=purple]{senderSession.Name}[/color]"; + bwoinkText = $"[color=purple]{adminPrefix}{senderSession.Name}[/color]"; } else if (senderAdmin is not null && senderAdmin.HasFlag(AdminFlags.Adminhelp)) { - bwoinkText = $"[color=red]{senderSession.Name}[/color]"; + bwoinkText = $"[color=red]{adminPrefix}{senderSession.Name}[/color]"; } else { @@ -435,6 +442,13 @@ namespace Content.Server.Administration.Systems RaiseNetworkEvent(msg, channel); } + string adminPrefixWebhook = ""; + + if (_config.GetCVar(CCVars.AhelpAdminPrefixWebhook) && senderAdmin is not null && senderAdmin.Title is not null) + { + adminPrefixWebhook = $"[bold]\\[{senderAdmin.Title}\\][/bold] "; + } + // Notify player if (_playerManager.TryGetSessionById(message.UserId, out var session)) { @@ -447,11 +461,11 @@ namespace Content.Server.Administration.Systems // Doing the same thing as above, but with the override name. Theres probably a better way to do this. if (senderAdmin is not null && senderAdmin.Flags == AdminFlags.Adminhelp) // Mentor. Not full admin. That's why it's colored differently. { - overrideMsgText = $"[color=purple]{_overrideClientName}[/color]"; + overrideMsgText = $"[color=purple]{adminPrefixWebhook}{_overrideClientName}[/color]"; } else if (senderAdmin is not null && senderAdmin.HasFlag(AdminFlags.Adminhelp)) { - overrideMsgText = $"[color=red]{_overrideClientName}[/color]"; + overrideMsgText = $"[color=red]{adminPrefixWebhook}{_overrideClientName}[/color]"; } else { diff --git a/Content.Server/Body/Components/RespiratorComponent.cs b/Content.Server/Body/Components/RespiratorComponent.cs index 2afd39d09a..cd6e8fa168 100644 --- a/Content.Server/Body/Components/RespiratorComponent.cs +++ b/Content.Server/Body/Components/RespiratorComponent.cs @@ -1,5 +1,7 @@ using Content.Server.Body.Systems; +using Content.Shared.Chat.Prototypes; using Content.Shared.Damage; +using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; using Robust.Shared.Audio; // WD @@ -51,10 +53,16 @@ namespace Content.Server.Body.Components public DamageSpecifier DamageRecovery = default!; [DataField] - public TimeSpan GaspPopupCooldown = TimeSpan.FromSeconds(8); + public TimeSpan GaspEmoteCooldown = TimeSpan.FromSeconds(8); [ViewVariables] - public TimeSpan LastGaspPopupTime; + public TimeSpan LastGaspEmoteTime; + + /// + /// The emote when gasps + /// + [DataField] + public ProtoId GaspEmote = "Gasp"; /// /// How many cycles in a row has the mob been under-saturated? diff --git a/Content.Server/Body/Systems/RespiratorSystem.cs b/Content.Server/Body/Systems/RespiratorSystem.cs index 7f99018612..20945ca3d7 100644 --- a/Content.Server/Body/Systems/RespiratorSystem.cs +++ b/Content.Server/Body/Systems/RespiratorSystem.cs @@ -2,6 +2,7 @@ using Content.Server.Administration.Logs; using Content.Server.Atmos; using Content.Server.Atmos.EntitySystems; using Content.Server.Body.Components; +using Content.Server.Chat.Systems; using Content.Server.Chemistry.Containers.EntitySystems; using Content.Server.DoAfter; using Content.Server.Nutrition.Components; // WD @@ -42,14 +43,16 @@ public sealed class RespiratorSystem : EntitySystem [Dependency] private readonly BodySystem _bodySystem = default!; [Dependency] private readonly DamageableSystem _damageableSys = default!; [Dependency] private readonly LungSystem _lungSystem = default!; - [Dependency] private readonly PopupSystem _popupSystem = default!; [Dependency] private readonly MobStateSystem _mobState = default!; [Dependency] private readonly SolutionContainerSystem _solutionContainerSystem = default!; + [Dependency] private readonly ChatSystem _chat = default!; [Dependency] private readonly InventorySystem _inventorySystem = default!; // WD [Dependency] private readonly ActionBlockerSystem _blocker = default!; // WD [Dependency] private readonly AudioSystem _audio = default!; // WD [Dependency] private readonly DoAfterSystem _doAfter = default!; // WD [Dependency] private readonly DamageableSystem _damageable = default!; // WD + [Dependency] private readonly SharedPopupSystem _popupSystem = default!; // WD + public override void Initialize() { @@ -116,10 +119,10 @@ public sealed class RespiratorSystem : EntitySystem continue; } - if (_gameTiming.CurTime >= respirator.LastGaspPopupTime + respirator.GaspPopupCooldown) + if (_gameTiming.CurTime >= respirator.LastGaspEmoteTime + respirator.GaspEmoteCooldown) { - respirator.LastGaspPopupTime = _gameTiming.CurTime; - _popupSystem.PopupEntity($"{Name(Identity.Entity(uid, EntityManager))} задыхается!", uid); + respirator.LastGaspEmoteTime = _gameTiming.CurTime; + _chat.TryEmoteWithChat(uid, respirator.GaspEmote, ignoreActionBlocker: true); } TakeSuffocationDamage((uid, respirator)); diff --git a/Content.Server/MassMedia/Systems/NewsSystem.cs b/Content.Server/MassMedia/Systems/NewsSystem.cs index 2b18b57ff8..0259b283e2 100644 --- a/Content.Server/MassMedia/Systems/NewsSystem.cs +++ b/Content.Server/MassMedia/Systems/NewsSystem.cs @@ -20,6 +20,7 @@ using Content.Server.Station.Systems; using Content.Shared.Popups; using Content.Shared.StationRecords; using Robust.Shared.Audio.Systems; +using Content.Server.Chat.Managers; namespace Content.Server.MassMedia.Systems; @@ -35,6 +36,7 @@ public sealed class NewsSystem : SharedNewsSystem [Dependency] private readonly GameTicker _ticker = default!; [Dependency] private readonly AccessReaderSystem _accessReader = default!; [Dependency] private readonly IdCardSystem _idCardSystem = default!; + [Dependency] private readonly IChatManager _chatManager = default!; public override void Initialize() { @@ -167,6 +169,12 @@ public sealed class NewsSystem : SharedNewsSystem $"{ToPrettyString(author):actor} created news article {article.Title} by {article.Author}: {article.Content}" ); + _chatManager.SendAdminAnnouncement(Loc.GetString("news-publish-admin-announcement", + ("actor", msg.Session.AttachedEntity), + ("title", article.Title), + ("author", article.Author ?? Loc.GetString("news-read-ui-no-author")) + )); + articles.Add(article); var args = new NewsArticlePublishedEvent(article); diff --git a/Content.Server/Medical/CrewMonitoring/CrewMonitoringServerSystem.cs b/Content.Server/Medical/CrewMonitoring/CrewMonitoringServerSystem.cs index 864ce2c55e..d7b8cc67a5 100644 --- a/Content.Server/Medical/CrewMonitoring/CrewMonitoringServerSystem.cs +++ b/Content.Server/Medical/CrewMonitoring/CrewMonitoringServerSystem.cs @@ -1,4 +1,4 @@ -using Content.Server.DeviceNetwork; +using Content.Server.DeviceNetwork; using Content.Server.DeviceNetwork.Components; using Content.Server.DeviceNetwork.Systems; using Content.Server.Medical.SuitSensors; diff --git a/Content.Shared/CCVar/CCVars.cs b/Content.Shared/CCVar/CCVars.cs index f202820f15..076c2329e8 100644 --- a/Content.Shared/CCVar/CCVars.cs +++ b/Content.Shared/CCVar/CCVars.cs @@ -874,6 +874,52 @@ namespace Content.Shared.CCVar public static readonly CVarDef AdminBypassMaxPlayers = CVarDef.Create("admin.bypass_max_players", true, CVar.SERVERONLY); + /// + /// Determine if custom rank names are used. + /// If it is false, it'd use the actual rank name regardless of the individual's title. + /// + /// + /// + public static readonly CVarDef AdminUseCustomNamesAdminRank = + CVarDef.Create("admin.use_custom_names_admin_rank", true, CVar.SERVERONLY); + + /* + * AHELP + */ + + /// + /// Ahelp rate limit values are accounted in periods of this size (seconds). + /// After the period has passed, the count resets. + /// + /// + public static readonly CVarDef AhelpRateLimitPeriod = + CVarDef.Create("ahelp.rate_limit_period", 2, CVar.SERVERONLY); + + /// + /// How many ahelp messages are allowed in a single rate limit period. + /// + /// + public static readonly CVarDef AhelpRateLimitCount = + CVarDef.Create("ahelp.rate_limit_count", 10, CVar.SERVERONLY); + + /// + /// Should the administrator's position be displayed in ahelp. + /// If it is is false, only the admin's ckey will be displayed in the ahelp. + /// + /// + /// + public static readonly CVarDef AhelpAdminPrefix = + CVarDef.Create("ahelp.admin_prefix", true, CVar.SERVERONLY); + + /// + /// Should the administrator's position be displayed in the webhook. + /// If it is is false, only the admin's ckey will be displayed in webhook. + /// + /// + /// + public static readonly CVarDef AhelpAdminPrefixWebhook = + CVarDef.Create("ahelp.admin_prefix_webhook", true, CVar.SERVERONLY); + /* * Explosions */ diff --git a/Resources/Audio/Animals/attributions.yml b/Resources/Audio/Animals/attributions.yml index c34832a807..7fd7e8b2e7 100644 --- a/Resources/Audio/Animals/attributions.yml +++ b/Resources/Audio/Animals/attributions.yml @@ -7,7 +7,7 @@ license: "CC-BY-3.0" copyright: "Modified from 'Meow 4.wav' by freesound user 'TRNGLE. The original audio was trimmed, split to mono, and converted from WAV to OGG format" source: "https://freesound.org/people/TRNGLE/sounds/368006/" - + - files: ["cat_meow2.ogg"] license: "CC-BY-3.0" copyright: "Created by freesound user 'TRNGLE. The original audio split to mono, and converted from WAV to OGG format" @@ -117,24 +117,42 @@ license: "CC-BY-4.0" copyright: "Audio is recorded/created by Pfranzen 'FreeSound.org'. The original audio was trimmed and renamed" source: "https://freesound.org/people/pfranzen/sounds/322744/" - + - files: ["dog_bark1.ogg"] license: "CC0-1.0" copyright: "Audio is recorded/created by KFerentchak 'FreeSound.org'. The original audio was trimmed and renamed" - source: "https://freesound.org/people/KFerentchak/sounds/235912/" - + source: "https://freesound.org/people/KFerentchak/sounds/235912/" + - files: ["dog_bark2.ogg"] license: "CC0-1.0" copyright: "Audio is recorded/created by KFerentchak 'FreeSound.org'. The original audio was trimmed and renamed" - source: "https://freesound.org/people/KFerentchak/sounds/235912/" - + source: "https://freesound.org/people/KFerentchak/sounds/235912/" + - files: ["dog_bark3.ogg"] license: "CC0-1.0" copyright: "Audio is recorded/created by KFerentchak 'FreeSound.org'. The original audio was trimmed and renamed" source: "https://freesound.org/people/KFerentchak/sounds/235912/" - + - files: ["nymph_chirp.ogg"] license: "CC-BY-SA-3.0" copyright: "Taken from ParadiseSS13" source: "https://github.com/ParadiseSS13/Paradise/commit/a34f1054cef5a44a67fdac3b67b811137c6071dd" - \ No newline at end of file + +- files: + - fox1.ogg + - fox2.ogg + - fox3.ogg + - fox4.ogg + - fox5.ogg + - fox6.ogg + - fox7.ogg + - fox8.ogg + - fox9.ogg + - fox10.ogg + - fox11.ogg + - fox12.ogg + - fox13.ogg + - fox14.ogg + copyright: "Created by fujiwaranao" + license: "CC-BY-NC-SA-4.0" + source: "https://github.com/space-wizards/space-station-14/pull/27578" diff --git a/Resources/Audio/Animals/fox1.ogg b/Resources/Audio/Animals/fox1.ogg new file mode 100644 index 0000000000..40fe16cc52 Binary files /dev/null and b/Resources/Audio/Animals/fox1.ogg differ diff --git a/Resources/Audio/Animals/fox10.ogg b/Resources/Audio/Animals/fox10.ogg new file mode 100644 index 0000000000..2a9e156dc5 Binary files /dev/null and b/Resources/Audio/Animals/fox10.ogg differ diff --git a/Resources/Audio/Animals/fox11.ogg b/Resources/Audio/Animals/fox11.ogg new file mode 100644 index 0000000000..d294137dc1 Binary files /dev/null and b/Resources/Audio/Animals/fox11.ogg differ diff --git a/Resources/Audio/Animals/fox12.ogg b/Resources/Audio/Animals/fox12.ogg new file mode 100644 index 0000000000..c413af81c7 Binary files /dev/null and b/Resources/Audio/Animals/fox12.ogg differ diff --git a/Resources/Audio/Animals/fox13.ogg b/Resources/Audio/Animals/fox13.ogg new file mode 100644 index 0000000000..197a9e4339 Binary files /dev/null and b/Resources/Audio/Animals/fox13.ogg differ diff --git a/Resources/Audio/Animals/fox14.ogg b/Resources/Audio/Animals/fox14.ogg new file mode 100644 index 0000000000..1d9c99889d Binary files /dev/null and b/Resources/Audio/Animals/fox14.ogg differ diff --git a/Resources/Audio/Animals/fox2.ogg b/Resources/Audio/Animals/fox2.ogg new file mode 100644 index 0000000000..7aeb7da911 Binary files /dev/null and b/Resources/Audio/Animals/fox2.ogg differ diff --git a/Resources/Audio/Animals/fox3.ogg b/Resources/Audio/Animals/fox3.ogg new file mode 100644 index 0000000000..561b313f41 Binary files /dev/null and b/Resources/Audio/Animals/fox3.ogg differ diff --git a/Resources/Audio/Animals/fox4.ogg b/Resources/Audio/Animals/fox4.ogg new file mode 100644 index 0000000000..6805d0e848 Binary files /dev/null and b/Resources/Audio/Animals/fox4.ogg differ diff --git a/Resources/Audio/Animals/fox5.ogg b/Resources/Audio/Animals/fox5.ogg new file mode 100644 index 0000000000..5aefa939cc Binary files /dev/null and b/Resources/Audio/Animals/fox5.ogg differ diff --git a/Resources/Audio/Animals/fox6.ogg b/Resources/Audio/Animals/fox6.ogg new file mode 100644 index 0000000000..d23cca5ff2 Binary files /dev/null and b/Resources/Audio/Animals/fox6.ogg differ diff --git a/Resources/Audio/Animals/fox7.ogg b/Resources/Audio/Animals/fox7.ogg new file mode 100644 index 0000000000..d4da91e73b Binary files /dev/null and b/Resources/Audio/Animals/fox7.ogg differ diff --git a/Resources/Audio/Animals/fox8.ogg b/Resources/Audio/Animals/fox8.ogg new file mode 100644 index 0000000000..52337a640b Binary files /dev/null and b/Resources/Audio/Animals/fox8.ogg differ diff --git a/Resources/Audio/Animals/fox9.ogg b/Resources/Audio/Animals/fox9.ogg new file mode 100644 index 0000000000..eb161ccdaf Binary files /dev/null and b/Resources/Audio/Animals/fox9.ogg differ diff --git a/Resources/Audio/Effects/Gasp/attributions.yml b/Resources/Audio/Effects/Gasp/attributions.yml new file mode 100644 index 0000000000..fe8f817c5a --- /dev/null +++ b/Resources/Audio/Effects/Gasp/attributions.yml @@ -0,0 +1,26 @@ +- files: + - deathgasp_1.ogg + - deathgasp_2.ogg + - female_deathgasp_1.ogg + - female_deathgasp_2.ogg + - female_deathgasp_3.ogg + - female_deathgasp_4.ogg + - female_deathgasp_5.ogg + - male_deathgasp_1.ogg + - male_deathgasp_2.ogg + - male_deathgasp_3.ogg + - male_deathgasp_4.ogg + - male_deathgasp_5.ogg + license: "CC-BY-SA-3.0" + copyright: "Taken from Paradise at https://github.com/ParadiseSS13/Paradise/commit/4397f13c72998aa7e6ce192215c9f77b9d62eee2" + source: "https://github.com/ParadiseSS13/Paradise/tree/4397f13c72998aa7e6ce192215c9f77b9d62eee2/sound/goonstation/voice" + +- files: + - gasp_female1.ogg + - gasp_female2.ogg + - gasp_female3.ogg + - gasp_male1.ogg + - gasp_male2.ogg + license: "CC-BY-SA-3.0" + copyright: "Taken from tgstation at https://github.com/tgstation/tgstation/commit/f7a49c4068f1277e6857baf0892d355f1c055974" + source: "https://github.com/tgstation/tgstation/tree/f7a49c4068f1277e6857baf0892d355f1c055974/sound/voice/human" diff --git a/Resources/Audio/Effects/Gasp/deathgasp_1.ogg b/Resources/Audio/Effects/Gasp/deathgasp_1.ogg new file mode 100644 index 0000000000..d6e4f8a9e7 Binary files /dev/null and b/Resources/Audio/Effects/Gasp/deathgasp_1.ogg differ diff --git a/Resources/Audio/Effects/Gasp/deathgasp_2.ogg b/Resources/Audio/Effects/Gasp/deathgasp_2.ogg new file mode 100644 index 0000000000..77959ff8a8 Binary files /dev/null and b/Resources/Audio/Effects/Gasp/deathgasp_2.ogg differ diff --git a/Resources/Audio/Effects/Gasp/female_deathgasp_1.ogg b/Resources/Audio/Effects/Gasp/female_deathgasp_1.ogg new file mode 100644 index 0000000000..2139a26695 Binary files /dev/null and b/Resources/Audio/Effects/Gasp/female_deathgasp_1.ogg differ diff --git a/Resources/Audio/Effects/Gasp/female_deathgasp_2.ogg b/Resources/Audio/Effects/Gasp/female_deathgasp_2.ogg new file mode 100644 index 0000000000..713721d723 Binary files /dev/null and b/Resources/Audio/Effects/Gasp/female_deathgasp_2.ogg differ diff --git a/Resources/Audio/Effects/Gasp/female_deathgasp_3.ogg b/Resources/Audio/Effects/Gasp/female_deathgasp_3.ogg new file mode 100644 index 0000000000..eaf356db4b Binary files /dev/null and b/Resources/Audio/Effects/Gasp/female_deathgasp_3.ogg differ diff --git a/Resources/Audio/Effects/Gasp/female_deathgasp_4.ogg b/Resources/Audio/Effects/Gasp/female_deathgasp_4.ogg new file mode 100644 index 0000000000..b3c9a8045b Binary files /dev/null and b/Resources/Audio/Effects/Gasp/female_deathgasp_4.ogg differ diff --git a/Resources/Audio/Effects/Gasp/female_deathgasp_5.ogg b/Resources/Audio/Effects/Gasp/female_deathgasp_5.ogg new file mode 100644 index 0000000000..b9b45c92ad Binary files /dev/null and b/Resources/Audio/Effects/Gasp/female_deathgasp_5.ogg differ diff --git a/Resources/Audio/Effects/Gasp/gasp_female1.ogg b/Resources/Audio/Effects/Gasp/gasp_female1.ogg new file mode 100644 index 0000000000..ec9da07eba Binary files /dev/null and b/Resources/Audio/Effects/Gasp/gasp_female1.ogg differ diff --git a/Resources/Audio/Effects/Gasp/gasp_female2.ogg b/Resources/Audio/Effects/Gasp/gasp_female2.ogg new file mode 100644 index 0000000000..2db7d5109c Binary files /dev/null and b/Resources/Audio/Effects/Gasp/gasp_female2.ogg differ diff --git a/Resources/Audio/Effects/Gasp/gasp_female3.ogg b/Resources/Audio/Effects/Gasp/gasp_female3.ogg new file mode 100644 index 0000000000..af94ccba8f Binary files /dev/null and b/Resources/Audio/Effects/Gasp/gasp_female3.ogg differ diff --git a/Resources/Audio/Effects/Gasp/gasp_male1.ogg b/Resources/Audio/Effects/Gasp/gasp_male1.ogg new file mode 100644 index 0000000000..657a2739cd Binary files /dev/null and b/Resources/Audio/Effects/Gasp/gasp_male1.ogg differ diff --git a/Resources/Audio/Effects/Gasp/gasp_male2.ogg b/Resources/Audio/Effects/Gasp/gasp_male2.ogg new file mode 100644 index 0000000000..88ac0b77f4 Binary files /dev/null and b/Resources/Audio/Effects/Gasp/gasp_male2.ogg differ diff --git a/Resources/Audio/Effects/Gasp/male_deathgasp_1.ogg b/Resources/Audio/Effects/Gasp/male_deathgasp_1.ogg new file mode 100644 index 0000000000..341ac39fbc Binary files /dev/null and b/Resources/Audio/Effects/Gasp/male_deathgasp_1.ogg differ diff --git a/Resources/Audio/Effects/Gasp/male_deathgasp_2.ogg b/Resources/Audio/Effects/Gasp/male_deathgasp_2.ogg new file mode 100644 index 0000000000..15bab8b848 Binary files /dev/null and b/Resources/Audio/Effects/Gasp/male_deathgasp_2.ogg differ diff --git a/Resources/Audio/Effects/Gasp/male_deathgasp_3.ogg b/Resources/Audio/Effects/Gasp/male_deathgasp_3.ogg new file mode 100644 index 0000000000..c5107366e3 Binary files /dev/null and b/Resources/Audio/Effects/Gasp/male_deathgasp_3.ogg differ diff --git a/Resources/Audio/Effects/Gasp/male_deathgasp_4.ogg b/Resources/Audio/Effects/Gasp/male_deathgasp_4.ogg new file mode 100644 index 0000000000..b306297917 Binary files /dev/null and b/Resources/Audio/Effects/Gasp/male_deathgasp_4.ogg differ diff --git a/Resources/Audio/Effects/Gasp/male_deathgasp_5.ogg b/Resources/Audio/Effects/Gasp/male_deathgasp_5.ogg new file mode 100644 index 0000000000..0f175b4088 Binary files /dev/null and b/Resources/Audio/Effects/Gasp/male_deathgasp_5.ogg differ diff --git a/Resources/Audio/Items/attributions.yml b/Resources/Audio/Items/attributions.yml index b3ae4f611f..6a2d579b70 100644 --- a/Resources/Audio/Items/attributions.yml +++ b/Resources/Audio/Items/attributions.yml @@ -134,3 +134,8 @@ license: "CC-BY-SA-3.0" copyright: "Taken from tgstation." source: "https://github.com/tgstation/tgstation/blob/a7f525bce9a359ab5282fc754078cd4b5678a006/sound/items" + +- files: ["pen_click.ogg"] + license: "CC0-1.0" + copyright: "Created by dslrguide, converted to ogg and mono by Themias" + source: "https://freesound.org/people/dslrguide/sounds/321484" \ No newline at end of file diff --git a/Resources/Audio/Items/pen_click.ogg b/Resources/Audio/Items/pen_click.ogg new file mode 100644 index 0000000000..621b88c4f8 Binary files /dev/null and b/Resources/Audio/Items/pen_click.ogg differ diff --git a/Resources/ConfigPresets/WizardsDen/wizardsDen.toml b/Resources/ConfigPresets/WizardsDen/wizardsDen.toml index 413de472bf..63a53b77ad 100644 --- a/Resources/ConfigPresets/WizardsDen/wizardsDen.toml +++ b/Resources/ConfigPresets/WizardsDen/wizardsDen.toml @@ -35,5 +35,9 @@ see_own_notes = true deadmin_on_join = true new_player_threshold = 600 +[ahelp] +admin_prefix = false +admin_prefix_webhook = false + [worldgen] enabled = true diff --git a/Resources/Locale/en-US/body/behavior/behavior.ftl b/Resources/Locale/en-US/body/behavior/behavior.ftl deleted file mode 100644 index 6870fdb894..0000000000 --- a/Resources/Locale/en-US/body/behavior/behavior.ftl +++ /dev/null @@ -1 +0,0 @@ -lung-behavior-gasp = Gasp \ No newline at end of file diff --git a/Resources/Locale/en-US/chat/emotes.ftl b/Resources/Locale/en-US/chat/emotes.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/Resources/Locale/en-US/mass-media/news-ui.ftl b/Resources/Locale/en-US/mass-media/news-ui.ftl index 9f62fe75c0..1553a24b4a 100644 --- a/Resources/Locale/en-US/mass-media/news-ui.ftl +++ b/Resources/Locale/en-US/mass-media/news-ui.ftl @@ -34,3 +34,4 @@ news-write-ui-richtext-tooltip = News articles support rich text {"[bullet/]bullet[/color]"} news-pda-notification-header = New news article +news-publish-admin-announcement = {$actor} published news article {$title} by {$author}" diff --git a/Resources/Locale/ru-RU/_white/mobs/emote.ftl b/Resources/Locale/ru-RU/_white/mobs/emote.ftl new file mode 100644 index 0000000000..c6e2e7457e --- /dev/null +++ b/Resources/Locale/ru-RU/_white/mobs/emote.ftl @@ -0,0 +1 @@ +chat-emote-msg-gasp = задыхается diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml index ec6160531b..7ec993058f 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml @@ -2482,7 +2482,7 @@ interactFailureString: petting-failure-generic interactSuccessSpawn: EffectHearts interactSuccessSound: - path: /Audio/Animals/fox_squeak.ogg + collection: Fox - type: Grammar attributes: gender: epicene diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/pets.yml b/Resources/Prototypes/Entities/Mobs/NPCs/pets.yml index e3c5c25dd6..8db5161176 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/pets.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/pets.yml @@ -529,7 +529,7 @@ interactFailureString: petting-failure-generic interactSuccessSpawn: EffectHearts interactSuccessSound: - path: /Audio/Animals/fox_squeak.ogg + collection: Fox - type: Butcherable syndieRoleRequired: true spawned: diff --git a/Resources/Prototypes/Entities/Objects/Devices/pda.yml b/Resources/Prototypes/Entities/Objects/Devices/pda.yml index 73a9fb73c6..58be5a46af 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/pda.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/pda.yml @@ -680,6 +680,7 @@ scanDelay: 0 - type: CartridgeLoader uiKey: enum.PdaUiKey.Key + notificationsEnabled: false preinstalled: - CrewManifestCartridge - NotekeeperCartridge diff --git a/Resources/Prototypes/Entities/Objects/Misc/paper.yml b/Resources/Prototypes/Entities/Objects/Misc/paper.yml index 6e84c47ff8..9c85065954 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/paper.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/paper.yml @@ -325,6 +325,14 @@ - type: PhysicalComposition materialComposition: Steel: 25 + - type: EmitSoundOnUse + sound: + path: /Audio/Items/pen_click.ogg + params: + volume: -4 + maxDistance: 2 + - type: UseDelay + delay: 0.3 - type: entity parent: Pen diff --git a/Resources/Prototypes/Entities/Objects/Misc/pen.yml b/Resources/Prototypes/Entities/Objects/Misc/pen.yml new file mode 100644 index 0000000000..e69de29bb2 diff --git a/Resources/Prototypes/Entities/Structures/Machines/crew_monitor_server.yml b/Resources/Prototypes/Entities/Structures/Machines/crew_monitor_server.yml index 8281a6548b..64ad3a30da 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/crew_monitor_server.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/crew_monitor_server.yml @@ -56,6 +56,7 @@ SheetSteel1: min: 1 max: 2 + - type: AmbientOnPowered - type: AmbientSound volume: -9 range: 5 diff --git a/Resources/Prototypes/Entities/Structures/Machines/research.yml b/Resources/Prototypes/Entities/Structures/Machines/research.yml index 948b3f84b2..a5254480a5 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/research.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/research.yml @@ -48,6 +48,7 @@ min: 1 max: 2 - type: Appearance + - type: AmbientOnPowered - type: AmbientSound volume: -9 range: 5 diff --git a/Resources/Prototypes/Entities/Structures/Machines/surveillance_camera_routers.yml b/Resources/Prototypes/Entities/Structures/Machines/surveillance_camera_routers.yml index 890d7d734e..47de620286 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/surveillance_camera_routers.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/surveillance_camera_routers.yml @@ -22,6 +22,12 @@ snapCardinals: true layers: - state: server + - type: AmbientOnPowered + - type: AmbientSound + volume: -9 + range: 5 + sound: + path: /Audio/Ambience/Objects/server_fans.ogg - type: entity parent: SurveillanceCameraRouterBase @@ -113,6 +119,7 @@ subnetColor: "#088743" - type: entity + abstract: true parent: [ BaseMachinePowered, ConstructibleMachine ] id: SurveillanceCameraWirelessRouterBase name: wireless camera router @@ -135,6 +142,12 @@ sprite: Structures/Machines/server.rsi layers: - state: server + - type: AmbientOnPowered + - type: AmbientSound + volume: -9 + range: 5 + sound: + path: /Audio/Ambience/Objects/server_fans.ogg - type: entity parent: SurveillanceCameraWirelessRouterBase diff --git a/Resources/Prototypes/Entities/Structures/Machines/telecomms.yml b/Resources/Prototypes/Entities/Structures/Machines/telecomms.yml index 2664dfe24c..bf4d7207f6 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/telecomms.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/telecomms.yml @@ -21,6 +21,12 @@ True: { visible: true } False: { visible: false } - type: Appearance + - type: AmbientOnPowered + - type: AmbientSound + volume: -9 + range: 5 + sound: + path: /Audio/Ambience/Objects/server_fans.ogg - type: WiresVisuals - type: Physics bodyType: Static diff --git a/Resources/Prototypes/SoundCollections/deathgasp.yml b/Resources/Prototypes/SoundCollections/deathgasp.yml new file mode 100644 index 0000000000..28c33c1fb4 --- /dev/null +++ b/Resources/Prototypes/SoundCollections/deathgasp.yml @@ -0,0 +1,23 @@ +- type: soundCollection + id: MaleDeathGasp + files: + - /Audio/Effects/Gasp/male_deathgasp_1.ogg + - /Audio/Effects/Gasp/male_deathgasp_2.ogg + - /Audio/Effects/Gasp/male_deathgasp_3.ogg + - /Audio/Effects/Gasp/male_deathgasp_4.ogg + - /Audio/Effects/Gasp/male_deathgasp_5.ogg + +- type: soundCollection + id: FemaleDeathGasp + files: + - /Audio/Effects/Gasp/female_deathgasp_1.ogg + - /Audio/Effects/Gasp/female_deathgasp_2.ogg + - /Audio/Effects/Gasp/female_deathgasp_3.ogg + - /Audio/Effects/Gasp/female_deathgasp_4.ogg + - /Audio/Effects/Gasp/female_deathgasp_5.ogg + +- type: soundCollection + id: DeathGasp + files: + - /Audio/Effects/Gasp/deathgasp_1.ogg + - /Audio/Effects/Gasp/deathgasp_2.ogg diff --git a/Resources/Prototypes/SoundCollections/fox.yml b/Resources/Prototypes/SoundCollections/fox.yml new file mode 100644 index 0000000000..912ae24e9a --- /dev/null +++ b/Resources/Prototypes/SoundCollections/fox.yml @@ -0,0 +1,18 @@ +- type: soundCollection + id: Fox + files: + - /Audio/Animals/fox_squeak.ogg + - /Audio/Animals/fox1.ogg + - /Audio/Animals/fox2.ogg + - /Audio/Animals/fox3.ogg + - /Audio/Animals/fox4.ogg + - /Audio/Animals/fox5.ogg + - /Audio/Animals/fox6.ogg + - /Audio/Animals/fox7.ogg + - /Audio/Animals/fox8.ogg + - /Audio/Animals/fox9.ogg + - /Audio/Animals/fox10.ogg + - /Audio/Animals/fox11.ogg + - /Audio/Animals/fox12.ogg + - /Audio/Animals/fox13.ogg + - /Audio/Animals/fox14.ogg diff --git a/Resources/Prototypes/SoundCollections/gasp.yml b/Resources/Prototypes/SoundCollections/gasp.yml new file mode 100644 index 0000000000..0f1ec51eda --- /dev/null +++ b/Resources/Prototypes/SoundCollections/gasp.yml @@ -0,0 +1,12 @@ +- type: soundCollection + id: MaleGasp + files: + - /Audio/Effects/Gasp/gasp_male1.ogg + - /Audio/Effects/Gasp/gasp_male2.ogg + +- type: soundCollection + id: FemaleGasp + files: + - /Audio/Effects/Gasp/gasp_female1.ogg + - /Audio/Effects/Gasp/gasp_female2.ogg + - /Audio/Effects/Gasp/gasp_female3.ogg diff --git a/Resources/Prototypes/Voice/speech_emote_sounds.yml b/Resources/Prototypes/Voice/speech_emote_sounds.yml index c4031db44b..93e9b33a0e 100644 --- a/Resources/Prototypes/Voice/speech_emote_sounds.yml +++ b/Resources/Prototypes/Voice/speech_emote_sounds.yml @@ -34,6 +34,10 @@ collection: Whistles Weh: collection: Weh + Gasp: + collection: MaleGasp + DefaultDeathgasp: + collection: MaleDeathGasp - type: emoteSounds id: FemaleHuman @@ -70,6 +74,10 @@ collection: Whistles Weh: collection: Weh + Gasp: + collection: FemaleGasp + DefaultDeathgasp: + collection: FemaleDeathGasp - type: emoteSounds id: MaleFelinid @@ -108,6 +116,10 @@ collection: FelinidGrowls Purr: collection: FelinidPurrs + Gasp: + collection: MaleGasp + DefaultDeathgasp: + collection: DeathGasp - type: emoteSounds id: FemaleFelinid @@ -144,6 +156,10 @@ collection: FelinidGrowls Purr: collection: FelinidPurrs + Gasp: + collection: FemaleGasp + DefaultDeathgasp: + collection: DeathGasp - type: emoteSounds id: SoundsHarpy @@ -200,7 +216,10 @@ collection: HarpyCaws Chirp: collection: HarpyChirps - + Gasp: + collection: MaleGasp + DefaultDeathgasp: + collection: DeathGasp - type: emoteSounds id: UnisexReptilian @@ -255,6 +274,10 @@ collection: Whistles Weh: collection: Weh + Gasp: + collection: MaleGasp + DefaultDeathgasp: + collection: MaleDeathGasp params: variation: 0.125 @@ -293,6 +316,10 @@ collection: Whistles Weh: collection: Weh + Gasp: + collection: FemaleGasp + DefaultDeathgasp: + collection: FemaleDeathGasp params: variation: 0.125 @@ -320,6 +347,10 @@ collection: BikeHorn Weh: collection: Weh + Gasp: + collection: MaleGasp + DefaultDeathgasp: + collection: DeathGasp params: variation: 0.125 @@ -338,6 +369,10 @@ path: /Audio/Voice/Arachnid/arachnid_click.ogg Weh: collection: Weh + Gasp: + collection: MaleGasp + DefaultDeathgasp: + collection: DeathGasp - type: emoteSounds id: UnisexDwarf @@ -372,6 +407,10 @@ collection: Whistles Weh: collection: Weh + Gasp: + collection: MaleGasp + DefaultDeathgasp: + collection: MaleDeathGasp params: variation: 0.125 pitch: 0.75 @@ -409,6 +448,10 @@ collection: Whistles Weh: collection: Weh + Gasp: + collection: FemaleGasp + DefaultDeathgasp: + collection: FemaleDeathGasp params: variation: 0.125 pitch: 0.75 @@ -430,6 +473,10 @@ path: /Audio/Voice/Moth/moth_squeak.ogg Weh: collection: Weh + Gasp: + collection: MaleGasp + DefaultDeathgasp: + collection: DeathGasp - type: emoteSounds id: UnisexSilicon diff --git a/Resources/Prototypes/Voice/speech_emotes.yml b/Resources/Prototypes/Voice/speech_emotes.yml index c9361c90e1..675a43388c 100644 --- a/Resources/Prototypes/Voice/speech_emotes.yml +++ b/Resources/Prototypes/Voice/speech_emotes.yml @@ -1,4 +1,4 @@ -# vocal emotes +# vocal emotes - type: emote id: Scream category: Vocal @@ -216,6 +216,14 @@ chatMessages: [облизывается] allowMenu: true +- type: emote + id: Gasp + name: chat-emote-name-gasp + whitelist: + components: + - Respirator + chatMessages: ["chat-emote-msg-gasp"] + - type: emote id: DefaultDeathgasp chatMessages: [ "emote-deathgasp" ]