From ea939d1178fb690f989adfee4a64288e307b7db5 Mon Sep 17 00:00:00 2001
From: Spatison <137375981+Spatison@users.noreply.github.com>
Date: Fri, 7 Mar 2025 09:05:50 +0300
Subject: [PATCH] [Feature] Emotes Menu Type (#215)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* Revert "remove: отключим наше меню эмоций в пользу колеса эмоций"
This reverts commit 526211be
* Revert "fix: linter"
This reverts commit 8bf2cbfb
* feature: emotes menu type
* fix: linter
* fix: linter
* fixs
* fix
* Update speech_emote_sounds.yml
* Update speech_emote_sounds.yml
* Update dogs.yml
* Update animals.yml
* Update disease_emotes.yml
* Update WhiteEmotesMenu.xaml.cs
* Update WhiteEmotesMenu.xaml.cs
* Update tags.yml
---
Content.Client/Chat/UI/EmotesMenu.xaml.cs | 3 +-
Content.Client/Options/UI/Tabs/MiscTab.xaml | 7 +
.../Options/UI/Tabs/MiscTab.xaml.cs | 32 ++++
.../MenuBar/GameTopMenuBarUIController.cs | 8 +-
.../_White/UI/Emotes/EmotesMenuType.cs | 14 ++
.../_White/UI/Emotes/WhiteEmotesMenu.xaml | 12 ++
.../_White/UI/Emotes/WhiteEmotesMenu.xaml.cs | 68 +++++++
.../UI/Emotes/WhiteEmotesUIController.cs | 158 +++++++++++++++++
.../UI/Emotions/EmotionsUIController.cs | 166 ------------------
Content.Shared/_White/CVars.cs | 6 +
Resources/ConfigPresets/DeltaV/apoapsis.toml | 1 -
Resources/ConfigPresets/DeltaV/periapsis.toml | 1 -
Resources/Locale/en-US/DeltaV/chat/emotes.ftl | 2 -
.../Locale/en-US/_white/chat/emotion.ftl | 18 ++
.../en-US/_white/emotes/speech-emotes.ftl | 109 ------------
.../en-US/_white/escape-menu/options-menu.ftl | 2 +
Resources/Locale/en-US/chat/emotes.ftl | 77 ++++++--
Resources/Locale/en-US/deltav/chat/emotes.ftl | 39 ++++
Resources/Locale/en-US/emotes.ftl | 7 -
.../Locale/en-US/nyanotrasen/chat/emotes.ftl | 23 +++
.../Locale/ru-RU/_white/chat/emotion.ftl | 18 ++
.../ru-RU/_white/emotes/speech-emotes.ftl | 119 -------------
.../ru-RU/_white/escape-menu/options-menu.ftl | 2 +
Resources/Locale/ru-RU/chat/emotes.ftl | 132 ++++++++++++++
Resources/Locale/ru-RU/deltav/chat/emotes.ftl | 39 ++++
.../Locale/ru-RU/nyanotrasen/chat/emotes.ftl | 23 +++
Resources/Prototypes/Actions/emotes.yml | 11 +-
.../Prototypes/DeltaV/Voice/speech_emotes.yml | 66 ++++---
.../Nyanotrasen/Voice/speech_emotes.yml | 35 ++--
Resources/Prototypes/Voice/disease_emotes.yml | 26 ++-
Resources/Prototypes/Voice/speech_emotes.yml | 113 +++++++-----
Resources/Prototypes/Voice/tail_emotes.yml | 16 +-
.../Prototypes/_White/Voice/speech_emotes.yml | 13 +-
Resources/Prototypes/_White/tags.yml | 1 +
34 files changed, 842 insertions(+), 525 deletions(-)
create mode 100644 Content.Client/_White/UI/Emotes/EmotesMenuType.cs
create mode 100644 Content.Client/_White/UI/Emotes/WhiteEmotesMenu.xaml
create mode 100644 Content.Client/_White/UI/Emotes/WhiteEmotesMenu.xaml.cs
create mode 100644 Content.Client/_White/UI/Emotes/WhiteEmotesUIController.cs
delete mode 100644 Content.Client/_White/UI/Emotions/EmotionsUIController.cs
delete mode 100644 Resources/Locale/en-US/DeltaV/chat/emotes.ftl
create mode 100644 Resources/Locale/en-US/_white/chat/emotion.ftl
delete mode 100644 Resources/Locale/en-US/_white/emotes/speech-emotes.ftl
create mode 100644 Resources/Locale/en-US/deltav/chat/emotes.ftl
delete mode 100644 Resources/Locale/en-US/emotes.ftl
create mode 100644 Resources/Locale/en-US/nyanotrasen/chat/emotes.ftl
create mode 100644 Resources/Locale/ru-RU/_white/chat/emotion.ftl
delete mode 100644 Resources/Locale/ru-RU/_white/emotes/speech-emotes.ftl
create mode 100644 Resources/Locale/ru-RU/chat/emotes.ftl
create mode 100644 Resources/Locale/ru-RU/deltav/chat/emotes.ftl
create mode 100644 Resources/Locale/ru-RU/nyanotrasen/chat/emotes.ftl
diff --git a/Content.Client/Chat/UI/EmotesMenu.xaml.cs b/Content.Client/Chat/UI/EmotesMenu.xaml.cs
index ffbee717e0..e72a7dc5b7 100644
--- a/Content.Client/Chat/UI/EmotesMenu.xaml.cs
+++ b/Content.Client/Chat/UI/EmotesMenu.xaml.cs
@@ -1,5 +1,6 @@
using System.Linq;
using System.Numerics;
+using Content.Client._White.UI.Emotes;
using Content.Client.UserInterface.Controls;
using Content.Shared.Chat.Prototypes;
using Content.Shared.Speech;
@@ -14,7 +15,7 @@ using Robust.Shared.Prototypes;
namespace Content.Client.Chat.UI;
[GenerateTypedNameReferences]
-public sealed partial class EmotesMenu : RadialMenu
+public sealed partial class EmotesMenu : RadialMenu, IBaseEmoteMenu // WD EDIT
{
[Dependency] private readonly EntityManager _entManager = default!;
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
diff --git a/Content.Client/Options/UI/Tabs/MiscTab.xaml b/Content.Client/Options/UI/Tabs/MiscTab.xaml
index 973e673ae1..7bb2e405af 100644
--- a/Content.Client/Options/UI/Tabs/MiscTab.xaml
+++ b/Content.Client/Options/UI/Tabs/MiscTab.xaml
@@ -19,6 +19,13 @@
+
+
+
+
+
+
+
diff --git a/Content.Client/Options/UI/Tabs/MiscTab.xaml.cs b/Content.Client/Options/UI/Tabs/MiscTab.xaml.cs
index 6911a9698e..df41bd52b1 100644
--- a/Content.Client/Options/UI/Tabs/MiscTab.xaml.cs
+++ b/Content.Client/Options/UI/Tabs/MiscTab.xaml.cs
@@ -1,6 +1,7 @@
using System.Linq;
using Content.Client.UserInterface.Screens;
using Content.Shared._White;
+using Content.Shared._White.UI.Emotes;
using Content.Shared.CCVar;
using Content.Shared.HUD;
using Robust.Client.AutoGenerated;
@@ -60,6 +61,30 @@ namespace Content.Client.Options.UI.Tabs
UpdateApplyButton();
};
+
+ // WD EDIT START
+ id = 0;
+ var emotesMenuStyle = _cfg.GetCVar(WhiteCVars.EmotesMenuStyle);
+ foreach (var type in Enum.GetValues(typeof(EmotesMenuType)))
+ {
+ var name = type.ToString()!;
+ EmotesMenuType.AddItem(name, id);
+
+ if (name == emotesMenuStyle)
+ EmotesMenuType.SelectId(id);
+
+ EmotesMenuType.SetItemMetadata(id, name);
+
+ id++;
+ }
+
+ EmotesMenuType.OnItemSelected += args =>
+ {
+ EmotesMenuType.SelectId(args.Id);
+ UpdateApplyButton();
+ };
+ // WD EDIT END
+
ChatStackOption.AddItem(Loc.GetString("ui-options-chatstack-off"), 0);
ChatStackOption.AddItem(Loc.GetString("ui-options-chatstack-single"), 1);
ChatStackOption.AddItem(Loc.GetString("ui-options-chatstack-double"), 2);
@@ -189,6 +214,11 @@ namespace Content.Client.Options.UI.Tabs
_cfg.SetCVar(CCVars.UILayout, opt);
}
+ // WD EDIT START
+ if (EmotesMenuType.SelectedMetadata is string emotesMenuType)
+ _cfg.SetCVar(WhiteCVars.EmotesMenuStyle, emotesMenuType);
+ // WD EDIT END
+
_cfg.SaveToFile();
UpdateApplyButton();
}
@@ -197,6 +227,7 @@ namespace Content.Client.Options.UI.Tabs
{
var isHudThemeSame = HudThemeOption.SelectedId == _hudThemeIdToIndex.GetValueOrDefault(_cfg.GetCVar(CVars.InterfaceTheme), 0);
var isLayoutSame = HudLayoutOption.SelectedMetadata is string opt && opt == _cfg.GetCVar(CCVars.UILayout);
+ var isEmotesMenuTypeSame = EmotesMenuType.SelectedMetadata is string emotesMenuType && emotesMenuType == _cfg.GetCVar(WhiteCVars.EmotesMenuStyle); // WD EDIT
var isDiscordSame = DiscordRich.Pressed == _cfg.GetCVar(CVars.DiscordEnabled);
var isShowHeldItemSame = ShowHeldItemCheckBox.Pressed == _cfg.GetCVar(CCVars.HudHeldItemShow);
var isCombatModeIndicatorsSame = ShowCombatModeIndicatorsCheckBox.Pressed == _cfg.GetCVar(CCVars.CombatModeIndicatorsPointShow);
@@ -222,6 +253,7 @@ namespace Content.Client.Options.UI.Tabs
ApplyButton.Disabled = isHudThemeSame &&
isLayoutSame &&
+ isEmotesMenuTypeSame && // WD EDIT
isDiscordSame &&
isShowHeldItemSame &&
isCombatModeIndicatorsSame &&
diff --git a/Content.Client/UserInterface/Systems/MenuBar/GameTopMenuBarUIController.cs b/Content.Client/UserInterface/Systems/MenuBar/GameTopMenuBarUIController.cs
index 6f9545288f..3bc7ac8c88 100644
--- a/Content.Client/UserInterface/Systems/MenuBar/GameTopMenuBarUIController.cs
+++ b/Content.Client/UserInterface/Systems/MenuBar/GameTopMenuBarUIController.cs
@@ -1,9 +1,9 @@
+using Content.Client._White.UI.Emotes;
using Content.Client.UserInterface.Systems.Actions;
using Content.Client.UserInterface.Systems.Admin;
using Content.Client.UserInterface.Systems.Bwoink;
using Content.Client.UserInterface.Systems.Character;
using Content.Client.UserInterface.Systems.Crafting;
-using Content.Client.UserInterface.Systems.Emotes;
using Content.Client.UserInterface.Systems.EscapeMenu;
using Content.Client.UserInterface.Systems.Gameplay;
using Content.Client.UserInterface.Systems.Guidebook;
@@ -24,8 +24,8 @@ public sealed class GameTopMenuBarUIController : UIController
[Dependency] private readonly ActionUIController _action = default!;
[Dependency] private readonly SandboxUIController _sandbox = default!;
[Dependency] private readonly GuidebookUIController _guidebook = default!;
- [Dependency] private readonly EmotesUIController _emotes = default!;
[Dependency] private readonly LanguageMenuUIController _language = default!;
+ [Dependency] private readonly WhiteEmotesUIController _whiteEmotes = default!; // WD EDIT
private GameTopMenuBar? GameTopMenuBar => UIManager.GetActiveUIWidgetOrNull();
@@ -48,8 +48,8 @@ public sealed class GameTopMenuBarUIController : UIController
_ahelp.UnloadButton();
_action.UnloadButton();
_sandbox.UnloadButton();
- _emotes.UnloadButton();
_language.UnloadButton();
+ _whiteEmotes.UnloadButton(); // WD EDIT
}
public void LoadButtons()
@@ -62,7 +62,7 @@ public sealed class GameTopMenuBarUIController : UIController
_ahelp.LoadButton();
_action.LoadButton();
_sandbox.LoadButton();
- _emotes.LoadButton();
_language.LoadButton();
+ _whiteEmotes.LoadButton(); // WD EDIT
}
}
diff --git a/Content.Client/_White/UI/Emotes/EmotesMenuType.cs b/Content.Client/_White/UI/Emotes/EmotesMenuType.cs
new file mode 100644
index 0000000000..e43f8418b8
--- /dev/null
+++ b/Content.Client/_White/UI/Emotes/EmotesMenuType.cs
@@ -0,0 +1,14 @@
+namespace Content.Shared._White.UI.Emotes;
+
+
+public enum EmotesMenuType
+{
+ ///
+ /// The classic White Dream emotes menu
+ ///
+ Window,
+ ///
+ /// The temporary SS14 emotes menu
+ ///
+ Radial,
+}
diff --git a/Content.Client/_White/UI/Emotes/WhiteEmotesMenu.xaml b/Content.Client/_White/UI/Emotes/WhiteEmotesMenu.xaml
new file mode 100644
index 0000000000..c62a8fd2a0
--- /dev/null
+++ b/Content.Client/_White/UI/Emotes/WhiteEmotesMenu.xaml
@@ -0,0 +1,12 @@
+
+
+
+
+
diff --git a/Content.Client/_White/UI/Emotes/WhiteEmotesMenu.xaml.cs b/Content.Client/_White/UI/Emotes/WhiteEmotesMenu.xaml.cs
new file mode 100644
index 0000000000..3d61b65a9c
--- /dev/null
+++ b/Content.Client/_White/UI/Emotes/WhiteEmotesMenu.xaml.cs
@@ -0,0 +1,68 @@
+using System.Linq;
+using Content.Shared.Chat.Prototypes;
+using Content.Shared.Speech;
+using Content.Shared.Whitelist;
+using Robust.Client.AutoGenerated;
+using Robust.Client.UserInterface.Controls;
+using Robust.Client.UserInterface.CustomControls;
+using Robust.Client.UserInterface.XAML;
+using Robust.Shared.Player;
+using Robust.Shared.Prototypes;
+
+namespace Content.Client._White.UI.Emotes;
+
+[GenerateTypedNameReferences]
+public sealed partial class WhiteEmotesMenu : DefaultWindow, IBaseEmoteMenu
+{
+ [Dependency] private readonly EntityManager _entManager = default!;
+ [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
+ [Dependency] private readonly ISharedPlayerManager _playerManager = default!;
+
+ public event Action>? OnPlayEmote;
+
+ public WhiteEmotesMenu()
+ {
+ IoCManager.InjectDependencies(this);
+ RobustXamlLoader.Load(this);
+
+ var whitelistSystem = _entManager.System();
+
+ var emotes = _prototypeManager.EnumeratePrototypes().ToList();
+ emotes.Sort((a,b) => string.Compare(a.Name, b.Name, StringComparison.Ordinal));
+ foreach (var emote in emotes)
+ {
+ var player = _playerManager.LocalEntity;
+ if (emote.Category == EmoteCategory.Invalid ||
+ emote.ChatTriggers.Count == 0 ||
+ !(player.HasValue && whitelistSystem.IsWhitelistPassOrNull(emote.Whitelist, player.Value)) ||
+ whitelistSystem.IsBlacklistPass(emote.Blacklist, player.Value))
+ continue;
+
+ if (!emote.Available &&
+ _entManager.TryGetComponent(player.Value, out var speech) &&
+ !speech.AllowedEmotes.Contains(emote.ID))
+ continue;
+
+ var button = new EmoteMenuButton
+ {
+ ClipText = true,
+ HorizontalExpand = true,
+ VerticalExpand = true,
+ MinWidth = 120,
+ MaxWidth = 250,
+ MaxHeight = 35,
+ TextAlign = Label.AlignMode.Left,
+ Text = Loc.GetString(emote.Name),
+ ProtoId = emote,
+ };
+
+ button.OnPressed += _ => OnPlayEmote?.Invoke(emote);
+ EmotionsContainer.AddChild(button);
+ }
+ }
+}
+
+public sealed class EmoteMenuButton : Button
+{
+ public ProtoId ProtoId { get; set; }
+}
diff --git a/Content.Client/_White/UI/Emotes/WhiteEmotesUIController.cs b/Content.Client/_White/UI/Emotes/WhiteEmotesUIController.cs
new file mode 100644
index 0000000000..a59eac787c
--- /dev/null
+++ b/Content.Client/_White/UI/Emotes/WhiteEmotesUIController.cs
@@ -0,0 +1,158 @@
+using System.Numerics;
+using Content.Client.Chat.UI;
+using Content.Client.Gameplay;
+using Content.Client.UserInterface.Controls;
+using Content.Shared._White;
+using Content.Shared._White.UI.Emotes;
+using Content.Shared.Chat;
+using Content.Shared.Chat.Prototypes;
+using Content.Shared.Input;
+using Robust.Client.Graphics;
+using Robust.Client.Input;
+using Robust.Client.UserInterface.Controllers;
+using Robust.Client.UserInterface.Controls;
+using Robust.Shared.Configuration;
+using Robust.Shared.Input.Binding;
+using Robust.Shared.Prototypes;
+
+namespace Content.Client._White.UI.Emotes;
+
+public sealed class WhiteEmotesUIController : UIController, IOnStateChanged
+{
+ [Dependency] private readonly IClyde _displayManager = default!;
+ [Dependency] private readonly IInputManager _inputManager = default!;
+ [Dependency] private readonly IEntityManager _entityManager = default!;
+ [Dependency] private readonly IConfigurationManager _configurationManager = default!;
+
+ private IBaseEmoteMenu? _window;
+ private MenuButton? EmotesButton => UIManager.GetActiveUIWidgetOrNull()?.EmotesButton;
+
+ private DateTime _lastEmotionTimeUse = DateTime.Now;
+ private const float EmoteCooldown = 1.5f;
+
+ public void OnStateEntered(GameplayState state) =>
+ CommandBinds.Builder
+ .Bind(ContentKeyFunctions.OpenEmotesMenu, InputCmdHandler.FromDelegate(_ => ToggleWindow(false)))
+ .Register();
+
+ public void OnStateExited(GameplayState state) =>
+ CommandBinds.Unregister();
+
+ public void LoadButton()
+ {
+ if (EmotesButton == null)
+ return;
+
+ EmotesButton.OnPressed += EmotionsButtonPressed;
+ }
+
+ public void UnloadButton()
+ {
+ if (EmotesButton == null)
+ return;
+
+ EmotesButton.OnPressed -= EmotionsButtonPressed;
+ }
+
+ private void OnWindowOpened()
+ {
+ if (EmotesButton != null)
+ EmotesButton.Pressed = true;
+ }
+
+ private void OnWindowClosed()
+ {
+ if (EmotesButton != null)
+ EmotesButton.Pressed = false;
+
+ CloseWindow();
+ }
+
+ private void CloseWindow()
+ {
+ if (_window == null)
+ return;
+
+ _window.Dispose();
+ _window = null;
+ }
+
+ private void EmotionsButtonPressed(BaseButton.ButtonEventArgs args)
+ {
+ ToggleWindow(true);
+ }
+
+ private void ToggleWindow(bool centered)
+ {
+ if (_window == null)
+ {
+ if (!Enum.TryParse(_configurationManager.GetCVar(WhiteCVars.EmotesMenuStyle), out EmotesMenuType emotesMenuStyle))
+ emotesMenuStyle = EmotesMenuType.Window;
+
+ // setup window
+ switch (emotesMenuStyle)
+ {
+ case EmotesMenuType.Window:
+ _window = UIManager.CreateWindow();
+ break;
+ case EmotesMenuType.Radial:
+ _window = UIManager.CreateWindow();
+ break;
+ default:
+ _window = UIManager.CreateWindow();
+ break;
+ }
+
+ _window.OnClose += OnWindowClosed;
+ _window.OnOpen += OnWindowOpened;
+ _window.OnPlayEmote += OnPlayEmote;
+
+ if (EmotesButton != null)
+ EmotesButton.SetClickPressed(true);
+
+ if (centered)
+ {
+ _window.OpenCentered();
+ }
+ else
+ {
+ // Open the menu, centered on the mouse
+ var vpSize = _displayManager.ScreenSize;
+ _window.OpenCenteredAt(_inputManager.MouseScreenPosition.Position / vpSize);
+ }
+ }
+ else
+ {
+ _window.OnClose -= OnWindowClosed;
+ _window.OnOpen -= OnWindowOpened;
+ _window.OnPlayEmote -= OnPlayEmote;
+
+ if (EmotesButton != null)
+ EmotesButton.SetClickPressed(false);
+
+ CloseWindow();
+ }
+ }
+
+ private void OnPlayEmote(ProtoId protoId)
+ {
+ var timeSpan = DateTime.Now - _lastEmotionTimeUse;
+ var seconds = timeSpan.TotalSeconds;
+ if (seconds < EmoteCooldown)
+ return;
+
+ _lastEmotionTimeUse = DateTime.Now;
+
+ _entityManager.RaisePredictiveEvent(new PlayEmoteMessage(protoId));
+ }
+}
+
+public interface IBaseEmoteMenu
+{
+ public event Action>? OnPlayEmote;
+ public event Action? OnClose;
+ public event Action? OnOpen;
+ public void OpenCenteredAt(Vector2 relativePosition);
+ public void OpenCentered();
+ public void Dispose();
+}
diff --git a/Content.Client/_White/UI/Emotions/EmotionsUIController.cs b/Content.Client/_White/UI/Emotions/EmotionsUIController.cs
deleted file mode 100644
index 16be667290..0000000000
--- a/Content.Client/_White/UI/Emotions/EmotionsUIController.cs
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * DISABLED IN FAVOR OF EMOTES RADIAL MENU
- */
-
-
-// using System.Linq;
-// using Content.Client.Chat.Managers;
-// using Content.Client.Gameplay;
-// using Content.Client.UserInterface.Controls;
-// using Content.Shared.Chat;
-// using Content.Shared.Chat.Prototypes;
-// using Content.Shared.Input;
-// using Robust.Client.UserInterface.Controllers;
-// using Robust.Client.UserInterface.Controls;
-// using Robust.Client.UserInterface.CustomControls;
-// using Robust.Shared.Input.Binding;
-// using Robust.Shared.Prototypes;
-// using Robust.Shared.Random;
-//
-// namespace Content.Client._White.UI.Emotions;
-//
-// public sealed class EmotionsUIController : UIController, IOnStateChanged
-// {
-// [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
-// [Dependency] private readonly IRobustRandom _random = default!;
-// [Dependency] private readonly IChatManager _chatManager = default!;
-//
-// private DefaultWindow? _window;
-// private MenuButton? EmotionsButton => UIManager.GetActiveUIWidgetOrNull()?.EmotionsButton;
-//
-// private DateTime _lastEmotionTimeUse = DateTime.Now;
-// private const float EmoteCooldown = 1.5f;
-//
-// public void OnStateEntered(GameplayState state)
-// {
-// _window = FormMenu();
-//
-// _window.OnOpen += OnWindowOpened;
-// _window.OnClose += OnWindowClosed;
-//
-// CommandBinds.Builder
-// .Bind(ContentKeyFunctions.OpenEmotesMenu, InputCmdHandler.FromDelegate(_ => ToggleWindow()))
-// .Register();
-// }
-//
-// public void OnStateExited(GameplayState state)
-// {
-// if (_window != null)
-// {
-// _window.OnOpen -= OnWindowOpened;
-// _window.OnClose -= OnWindowClosed;
-//
-// _window.Dispose();
-// _window = null;
-// }
-//
-// CommandBinds.Unregister();
-// }
-//
-// public void LoadButton()
-// {
-// if (EmotionsButton == null)
-// return;
-//
-// EmotionsButton.OnPressed += EmotionsButtonPressed;
-// }
-//
-// public void UnloadButton()
-// {
-// if (EmotionsButton == null)
-// return;
-//
-// EmotionsButton.OnPressed -= EmotionsButtonPressed;
-// }
-//
-// private void OnWindowOpened()
-// {
-// if (EmotionsButton != null)
-// EmotionsButton.Pressed = true;
-// }
-//
-// private void OnWindowClosed()
-// {
-// if (EmotionsButton != null)
-// EmotionsButton.Pressed = false;
-// }
-//
-// private void EmotionsButtonPressed(BaseButton.ButtonEventArgs args)
-// {
-// ToggleWindow();
-// }
-//
-// private void ToggleWindow()
-// {
-// if (_window == null)
-// return;
-//
-// if (_window.IsOpen)
-// {
-// _window.Close();
-// return;
-// }
-//
-// _window.Open();
-// }
-//
-// private void UseEmote(string emote)
-// {
-// var time = (DateTime.Now - _lastEmotionTimeUse).TotalSeconds;
-// if (time < EmoteCooldown)
-// return;
-//
-// _lastEmotionTimeUse = DateTime.Now;
-// _chatManager.SendMessage(emote, ChatSelectChannel.Emotes);
-// }
-//
-// private Button CreateEmoteButton(EmotePrototype emote)
-// {
-// var control = new Button
-// {
-// ClipText = true,
-// HorizontalExpand = true,
-// VerticalExpand = true,
-// MinWidth = 120,
-// MaxWidth = 250,
-// MaxHeight = 35,
-// TextAlign = Label.AlignMode.Left,
-// Text = Loc.GetString(emote.ButtonText)
-// };
-//
-// control.OnPressed += _ => UseEmote(Loc.GetString(_random.Pick(emote.ChatMessages)));
-// return control;
-// }
-//
-// private DefaultWindow FormMenu()
-// {
-// var window = new DefaultWindow
-// {
-// Title = Loc.GetString("emotions-menu-title"),
-// VerticalExpand = true,
-// HorizontalExpand = true,
-// MinHeight = 250,
-// MinWidth = 300
-// };
-//
-// var grid = new GridContainer
-// {
-// Columns = 3
-// };
-//
-// var emotions = _prototypeManager.EnumeratePrototypes().ToList();
-// emotions.Sort((a,b) => string.Compare(Loc.GetString(a.ButtonText), Loc.GetString(b.ButtonText.ToString()), StringComparison.Ordinal));
-//
-// foreach (var emote in emotions)
-// {
-// if (!emote.AllowToEmotionsMenu)
-// continue;
-//
-// var button = CreateEmoteButton(emote);
-// grid.AddChild(button);
-// }
-//
-// window.Contents.AddChild(grid);
-// return window;
-// }
-// }
diff --git a/Content.Shared/_White/CVars.cs b/Content.Shared/_White/CVars.cs
index 38e3aa8935..c29e6a1d17 100644
--- a/Content.Shared/_White/CVars.cs
+++ b/Content.Shared/_White/CVars.cs
@@ -27,6 +27,12 @@ public sealed class WhiteCVars
public static readonly CVarDef LogInChat =
CVarDef.Create("white.log_in_chat", true, CVar.CLIENT | CVar.ARCHIVE | CVar.REPLICATED);
+ public static readonly CVarDef EmotesMenuStyle =
+ CVarDef.Create("white.emotes_menu_style", "Window", CVar.CLIENT | CVar.ARCHIVE);
+
+ public static readonly CVarDef CoalesceIdenticalMessages =
+ CVarDef.Create("white.coalesce_identical_messages", true, CVar.CLIENT | CVar.ARCHIVE | CVar.CLIENTONLY);
+
#endregion
#region TTS
diff --git a/Resources/ConfigPresets/DeltaV/apoapsis.toml b/Resources/ConfigPresets/DeltaV/apoapsis.toml
index d36e3c752a..e681bbe515 100644
--- a/Resources/ConfigPresets/DeltaV/apoapsis.toml
+++ b/Resources/ConfigPresets/DeltaV/apoapsis.toml
@@ -7,7 +7,6 @@ rules_file = "Rules.txt"
[whitelist]
enabled = false
-reason = "whitelist-not-whitelisted"
min_players = 90
[shuttle]
diff --git a/Resources/ConfigPresets/DeltaV/periapsis.toml b/Resources/ConfigPresets/DeltaV/periapsis.toml
index 26166f0ffd..9dfc2e631e 100644
--- a/Resources/ConfigPresets/DeltaV/periapsis.toml
+++ b/Resources/ConfigPresets/DeltaV/periapsis.toml
@@ -11,7 +11,6 @@ map_enabled = true
[whitelist]
enabled = false
-reason = "whitelist-not-whitelisted-peri"
min_players = 10
[ooc]
diff --git a/Resources/Locale/en-US/DeltaV/chat/emotes.ftl b/Resources/Locale/en-US/DeltaV/chat/emotes.ftl
deleted file mode 100644
index 1be2a3b58b..0000000000
--- a/Resources/Locale/en-US/DeltaV/chat/emotes.ftl
+++ /dev/null
@@ -1,2 +0,0 @@
-# Names
-delta-chat-emote-name-awoo = Awoo
diff --git a/Resources/Locale/en-US/_white/chat/emotion.ftl b/Resources/Locale/en-US/_white/chat/emotion.ftl
new file mode 100644
index 0000000000..1157371e19
--- /dev/null
+++ b/Resources/Locale/en-US/_white/chat/emotion.ftl
@@ -0,0 +1,18 @@
+# Names
+chat-emote-name-nod = Nod
+chat-emote-name-shake-head = Shake head
+chat-emote-name-frown = Frown
+chat-emote-name-smile = Smile
+
+# Message
+chat-emote-msg-nod = nods.
+chat-emote-msg-shake-head = shakes {POSS-ADJ($entity)} head.
+chat-emote-msg-frown = frowns.
+chat-emote-msg-smile = smiles.
+
+# Triggers
+chat-emote-trigger-nod-1 = nods
+chat-emote-trigger-shake-head-1 = shakes head
+chat-emote-trigger-shake-head-2 = shakes his head
+chat-emote-trigger-frown-1 = frowns
+chat-emote-trigger-smile-1 = smiles
\ No newline at end of file
diff --git a/Resources/Locale/en-US/_white/emotes/speech-emotes.ftl b/Resources/Locale/en-US/_white/emotes/speech-emotes.ftl
deleted file mode 100644
index 9df3628cc7..0000000000
--- a/Resources/Locale/en-US/_white/emotes/speech-emotes.ftl
+++ /dev/null
@@ -1,109 +0,0 @@
-#Scream
-emote-chat-button-text-scream = Scream
-
-emote-chat-messages-scream-1 = screams
-emote-chat-messages-scream-2 = shrieks
-emote-chat-messages-scream-3 = screeches
-emote-chat-messages-scream-4 = yells
-
-#Laugh
-emote-chat-button-text-laugh = Laugh
-
-emote-chat-messages-laugh-1 = laughs
-emote-chat-messages-laugh-2 = chuckles
-emote-chat-messages-laugh-3 = giggles
-emote-chat-messages-laugh-4 = chortles
-
-#Honk
-emote-chat-messages-honk-1 = chortles
-
-#Sigh
-emote-chat-button-text-sigh = Sigh
-
-emote-chat-messages-sigh-1 = sighs
-
-#Whistle
-emote-chat-button-text-whistle = Whistle
-
-emote-chat-messages-whistle-1 = whistles
-
-#Crying
-emote-chat-button-text-crying = Сry
-
-emote-chat-messages-crying-1 = cries
-
-#Squish
-emote-chat-messages-squish-1 = squishes
-
-#Chitter
-emote-chat-messages-chitter-1 = chitters
-
-#Squeak
-emote-chat-messages-squeak-1 = squeaks
-
-#Click
-emote-chat-messages-click-1 = clicks
-emote-chat-messages-click-2 = click
-
-#Clap
-emote-chat-button-text-clap = Clap
-
-emote-chat-messages-clap-1 = сlaps
-
-#Snap
-emote-chat-button-text-snap = Snap fingers
-
-emote-chat-messages-snap-1 = snaps
-emote-chat-messages-snap-2 = snaps fingers
-emote-chat-messages-snap-3 = snaps his fingers
-emote-chat-messages-snap-4 = snaps her fingers
-emote-chat-messages-snap-5 = snaps their fingers
-emote-chat-messages-snap-6 = snaps its fingers
-emote-chat-messages-snap-7 = snaps its' fingers
-
-#Salute
-emote-chat-button-text-salute = Salute
-
-emote-chat-messages-salute-1 = salutes
-
-#Deathgasp
-emote-chat-messages-deathgasp-1 = seizes up and falls limp, {POSS-ADJ($entity)} eyes dead and lifeless...
-emote-chat-messages-deathgasp-silicon-1 = seizes up and falls limp, {POSS-ADJ($entity)} lights sputtering into darkness...
-emote-chat-messages-deathgasp-ipc-1 = With a hiss of grinding servos and a screech of dying myomers, {CAPITALIZE($entity)} suddenly goes silent.
-
-#Buzz
-emote-chat-messages-buzz-1 = buzzes
-
-#Weh
-emote-chat-messages-weh-1 = wehs
-
-#Chirp
-emote-chat-messages-chirp-1 = chirps
-
-#Beep
-emote-chat-messages-beep-1 = beeps
-
-#Boop
-emote-chat-messages-boop-1 = boops
-
-#Chime
-emote-chat-messages-chime-1 = chimes
-
-#Buzz-Two
-emote-chat-messages-buzz-two-1 = buzzes twice
-
-#Ping
-emote-chat-messages-ping-1 = pings
-
-#Whirr
-emote-chat-messages-whirr-1 = whirrs
-
-chat-emote-name-nod = Nod
-chat-emote-name-shake-head = Shake Head
-chat-emote-name-frown = Frown
-chat-emote-name-smile = Smile
-
-chat-emote-msg-nod = nods.
-chat-emote-msg-shake-head = shakes {POSS-ADJ($entity)} head..
-chat-emote-msg-frown = frowns.
-chat-emote-msg-smile = smiles.
diff --git a/Resources/Locale/en-US/_white/escape-menu/options-menu.ftl b/Resources/Locale/en-US/_white/escape-menu/options-menu.ftl
index d2b553ae40..b27b908037 100644
--- a/Resources/Locale/en-US/_white/escape-menu/options-menu.ftl
+++ b/Resources/Locale/en-US/_white/escape-menu/options-menu.ftl
@@ -1,3 +1,5 @@
+ui-options-emotes-menu = Emotes menu type:
+
ui-options-log-in-chat = Log actions in the chat
ui-options-function-open-emotions-menu = Open emotions menu
diff --git a/Resources/Locale/en-US/chat/emotes.ftl b/Resources/Locale/en-US/chat/emotes.ftl
index acff55a9bb..2c93b266ae 100644
--- a/Resources/Locale/en-US/chat/emotes.ftl
+++ b/Resources/Locale/en-US/chat/emotes.ftl
@@ -32,19 +32,8 @@ chat-emote-name-robotbeep = Robot
# Shadowkin
chat-emote-name-mars = Mars
chat-emote-name-wurble = Wurble
-# Harpy
-chat-emote-name-harpyring = Ring
-chat-emote-name-harpypew = Pew
-chat-emote-name-harpybang = Bang
-chat-emote-name-harpyrev = Rev
-chat-emote-name-harpycaw = Caw
-chat-emote-name-harpyhoot = Hoot
# Vulp
chat-emote-name-tailwag = Wag Tail
-chat-emote-name-vulpbark = Bark
-chat-emote-name-vulpsnarl = Snarl
-chat-emote-name-vulpwhine = Whine
-chat-emote-name-vulphowl = Howl
# Felinid / Tajaran
chat-emote-name-meow = Meow
chat-emote-name-mew = Mew
@@ -68,16 +57,78 @@ chat-emote-msg-snap = snaps {POSS-ADJ($entity)} fingers.
chat-emote-msg-salute = salutes.
chat-emote-msg-deathgasp = seizes up and falls limp, {POSS-ADJ($entity)} eyes dead and lifeless...
chat-emote-msg-deathgasp-monkey = lets out a faint chimper as {SUBJECT($entity)} collapses and stops moving...
+chat-emote-msg-deathgasp-silicon = seizes up and falls limp, {POSS-ADJ($entity)} lights sputtering into darkness...
chat-emote-msg-buzz = buzz!
+chat-emote-msg-weh = weh!
chat-emote-msg-chirp = chirps!
chat-emote-msg-beep = beeps.
+chat-emote-msg-boop-1 = boops.
chat-emote-msg-chime = chimes.
chat-emote-msg-buzzestwo = buzzes twice.
chat-emote-msg-ping = pings.
+chat-emote-msg-whirr = whirring.
+chat-emote-msg-mars = marsing.
+chat-emote-msg-wurble = wurbling.
chat-emote-msg-sneeze = sneezes.
chat-emote-msg-cough = coughs.
-chat-emote-msg-catmeow = meows.
-chat-emote-msg-cathisses = hisses!
chat-emote-msg-monkeyscreeches = screeches!
chat-emote-msg-yawn = yawns.
chat-emote-msg-snore = snores.
+chat-emote-msg-tailwag = wags their tail.
+chat-emote-msg-flip = does a flip!
+chat-emote-msg-spin = spins!
+chat-emote-msg-jump = jumps!
+
+# Triggers
+chat-emote-trigger-scream-1 = screams
+chat-emote-trigger-scream-2 = shrieks
+chat-emote-trigger-scream-3 = screeches
+chat-emote-trigger-scream-4 = yells
+chat-emote-trigger-laugh-1 = laughs
+chat-emote-trigger-laugh-2 = chuckles
+chat-emote-trigger-laugh-3 = giggles
+chat-emote-trigger-laugh-4 = chortles
+chat-emote-trigger-honk-1 = honks
+chat-emote-trigger-sigh-1 = sighs
+chat-emote-trigger-whistle-1 = whistles
+chat-emote-trigger-crying-1 = cries
+chat-emote-trigger-squish-1 = squishes
+chat-emote-trigger-chitter-1 = chitters
+chat-emote-trigger-squeak-1 = squeaks
+chat-emote-trigger-click-1 = clicks
+chat-emote-trigger-click-2 = click
+chat-emote-trigger-clap-1 = сlaps
+chat-emote-trigger-snap-1 = snaps
+chat-emote-trigger-snap-2 = snaps fingers
+chat-emote-trigger-snap-3 = snaps his fingers
+chat-emote-trigger-snap-4 = snaps her fingers
+chat-emote-trigger-snap-5 = snaps their fingers
+chat-emote-trigger-snap-6 = snaps its fingers
+chat-emote-trigger-snap-7 = snaps it's fingers
+chat-emote-trigger-salute-1 = salutes
+chat-emote-trigger-deathgasp-1 = deathgasp
+chat-emote-trigger-deathgasp-silicon-1 = sdeathgasp
+chat-emote-trigger-buzz-1 = buzzes
+chat-emote-trigger-weh-1 = wehs
+chat-emote-trigger-chirp-1 = chirps
+chat-emote-trigger-beep-1 = beeps
+chat-emote-trigger-boop-1 = boops
+chat-emote-trigger-chime-1 = chimes
+chat-emote-trigger-buzz-two-1 = buzzes twice
+chat-emote-trigger-ping-1 = pings
+chat-emote-trigger-whirr-1 = whirrs
+chat-emote-trigger-mars-1 = marsing
+chat-emote-trigger-wurble-1 = wurbling
+chat-emote-trigger-sneeze-1 = sneezes
+chat-emote-trigger-cough-1 = coughs
+chat-emote-trigger-yawn-1 = yawns
+chat-emote-trigger-snore-1 = snores
+chat-emote-trigger-tailwag-1 = wags tail
+chat-emote-trigger-tailwag-2 = wags his tail
+chat-emote-trigger-tailwag-3 = wags her tail
+chat-emote-trigger-tailwag-4 = wags their tail
+chat-emote-trigger-tailwag-5 = wags its tail
+chat-emote-trigger-tailwag-6 = wags its' tail
+chat-emote-trigger-flip-1 = does a flip
+chat-emote-trigger-spin-1 = spins
+chat-emote-trigger-jump-1 = jumps
diff --git a/Resources/Locale/en-US/deltav/chat/emotes.ftl b/Resources/Locale/en-US/deltav/chat/emotes.ftl
new file mode 100644
index 0000000000..d8275f8a39
--- /dev/null
+++ b/Resources/Locale/en-US/deltav/chat/emotes.ftl
@@ -0,0 +1,39 @@
+# Names
+chat-emote-name-harpyring = Rings
+chat-emote-name-harpypew = Pew
+chat-emote-name-harpybang = Bang
+chat-emote-name-harpyrev = Rev
+chat-emote-name-harpycaw = Caw
+chat-emote-name-harpyhoot = Hoot
+chat-emote-name-vulpbark = Bark
+chat-emote-name-vulpsnarl = Snarl
+chat-emote-name-vulpwhine = Whine
+chat-emote-name-vulphowl = Howl
+delta-chat-emote-name-awoo = Awoo
+
+# Message
+chat-emote-msg-ring = rings.
+chat-emote-msg-pew = pew!
+chat-emote-msg-bang = bang!
+chat-emote-msg-rev = rev!
+chat-emote-msg-caw = caw.
+chat-emote-msg-hoot = hoots.
+chat-emote-msg-bark = bark.
+chat-emote-msg-snarl = snarl.
+chat-emote-msg-whine = whine.
+chat-emote-msg-howl = howl!
+chat-emote-msg-awoo = awoos!
+
+# Triggers
+chat-emote-trigger-ring-1 = rings
+chat-emote-trigger-pew-1 = pews
+chat-emote-trigger-pew-2 = pewpews
+chat-emote-trigger-bang-1 = bangs
+chat-emote-trigger-rev-1 = revs
+chat-emote-trigger-caw-1 = caws
+chat-emote-trigger-hoot-1 = hoots
+chat-emote-trigger-bark-1 = barks
+chat-emote-trigger-snarl-1 = snarls
+chat-emote-trigger-whine-1 = whines
+chat-emote-trigger-howl-1 = howls
+chat-emote-trigger-awoo-1 = awoos
diff --git a/Resources/Locale/en-US/emotes.ftl b/Resources/Locale/en-US/emotes.ftl
deleted file mode 100644
index 8efe738c94..0000000000
--- a/Resources/Locale/en-US/emotes.ftl
+++ /dev/null
@@ -1,7 +0,0 @@
-chat-emote-name-flip = Do a flip
-chat-emote-name-spin = Spin
-chat-emote-name-jump = Jump
-
-chat-emote-msg-flip = does a flip!
-chat-emote-msg-spin = spins!
-chat-emote-msg-jump = jumps!
\ No newline at end of file
diff --git a/Resources/Locale/en-US/nyanotrasen/chat/emotes.ftl b/Resources/Locale/en-US/nyanotrasen/chat/emotes.ftl
new file mode 100644
index 0000000000..aca3318084
--- /dev/null
+++ b/Resources/Locale/en-US/nyanotrasen/chat/emotes.ftl
@@ -0,0 +1,23 @@
+# Names
+chat-emote-name-cathisses = Hisses
+chat-emote-name-catmeow = Meow
+chat-emote-name-catmew = Mew
+chat-emote-name-catgrowl = Growl
+chat-emote-name-catpurr = Purr
+
+# Message
+chat-emote-msg-hisses = hisses!
+chat-emote-msg-meow = meow.
+chat-emote-msg-mew = mew.
+chat-emote-msg-growl = growl!
+chat-emote-msg-purr = purr.
+
+# Triggers
+chat-emote-trigger-hisses-1 = hisses
+chat-emote-trigger-meows-1 = meows
+chat-emote-trigger-meows-2 = miaus
+chat-emote-trigger-meows-3 = nyas
+chat-emote-trigger-meows-4 = mraows
+chat-emote-trigger-mews-1 = mews
+chat-emote-trigger-growls-1 = growls
+chat-emote-trigger-purrs-1 = purrs
\ No newline at end of file
diff --git a/Resources/Locale/ru-RU/_white/chat/emotion.ftl b/Resources/Locale/ru-RU/_white/chat/emotion.ftl
new file mode 100644
index 0000000000..79e2c7088d
--- /dev/null
+++ b/Resources/Locale/ru-RU/_white/chat/emotion.ftl
@@ -0,0 +1,18 @@
+# Names
+chat-emote-name-nod = Кивок
+chat-emote-name-shake-head = Качание головой
+chat-emote-name-frown = Нахмуривание
+chat-emote-name-smile = Улыбка
+
+# Message
+chat-emote-msg-nod = кивает.
+chat-emote-msg-shake-head = качает головой.
+chat-emote-msg-frown = хмурится.
+chat-emote-msg-smile = улыбается.
+
+# Triggers
+chat-emote-trigger-nod-1 = кивает
+chat-emote-trigger-shake-head-1 = качает головой
+chat-emote-trigger-shake-head-2 = качает своей головой
+chat-emote-trigger-frown-1 = хмурится
+chat-emote-trigger-smile-1 = улыбается
\ No newline at end of file
diff --git a/Resources/Locale/ru-RU/_white/emotes/speech-emotes.ftl b/Resources/Locale/ru-RU/_white/emotes/speech-emotes.ftl
deleted file mode 100644
index 08189604cb..0000000000
--- a/Resources/Locale/ru-RU/_white/emotes/speech-emotes.ftl
+++ /dev/null
@@ -1,119 +0,0 @@
-#Scream
-emote-chat-button-text-scream = Кричать
-
-emote-chat-messages-scream-1 = кричит
-emote-chat-messages-scream-2 = орет
-emote-chat-messages-scream-3 = визжит
-emote-chat-messages-scream-4 = вопит
-
-#Laugh
-emote-chat-button-text-laugh = Смеяться
-
-emote-chat-messages-laugh-1 = смеется
-emote-chat-messages-laugh-2 = хихикает
-emote-chat-messages-laugh-3 = гогочет
-emote-chat-messages-laugh-4 = хохочет
-
-#Honk
-emote-chat-messages-honk-1 = хонкает
-
-#Sigh
-emote-chat-button-text-sigh = Вздохнуть
-
-emote-chat-messages-sigh-1 = вздыхает
-
-#Whistle
-emote-chat-button-text-whistle = Свистеть
-
-emote-chat-messages-whistle-1 = свистит
-
-#Crying
-emote-chat-button-text-crying = Плакать
-
-emote-chat-messages-crying-1 = плачет
-
-#Squish
-emote-chat-messages-squish-1 = хлюпает
-
-#Chitter
-emote-chat-messages-chitter-1 = стрекочет
-
-#Squeak
-emote-chat-messages-squeak-1 = сквикает
-
-#Click
-emote-chat-messages-click-1 = щёлкает
-emote-chat-messages-click-2 = щелкает
-
-#Clap
-emote-chat-button-text-clap = Хлопать
-
-emote-chat-messages-clap-1 = хлопает
-
-#Snap
-emote-chat-button-text-snap = Щёлкать пальцами
-
-emote-chat-messages-snap-1 = щёлкает пальцами
-emote-chat-messages-snap-2 = щелкает пальцами
-emote-chat-messages-snap-3 = щёлкнул пальцами
-emote-chat-messages-snap-4 = щeлкнул пальцами
-emote-chat-messages-snap-5 = щёлкнула пальцами
-emote-chat-messages-snap-6 = щeлкнула пальцами
-emote-chat-messages-snap-7 = щёлкнуло пальцами
-
-#Salute
-emote-chat-button-text-salute = Салютовать
-
-emote-chat-messages-salute-1 = салютует
-
-#Deathgasp
-emote-chat-messages-deathgasp-1 = отключается и бессильно падает, {POSS-ADJ($entity)} глаза становятся пустыми и безжизненными...
-emote-chat-messages-deathgasp-silicon-1 = отключается и бессильно падает, {POSS-ADJ($entity)} огни, шипя, исчезают в темноте...
-emote-chat-messages-deathgasp-ipc-1 = С скрежушим шипением сервоприводов и визгом умирающих миомеров, {CAPITALIZE($entity)} динамики резко затихают...
-
-#Buzz
-emote-chat-messages-buzz-1 = бззз
-
-#Weh
-emote-chat-messages-weh-1 = Вах!
-
-#Chirp
-emote-chat-messages-chirp-1 = чирикает
-
-#Beep
-emote-chat-messages-beep-1 = гудит
-
-#Boop
-emote-chat-messages-boop-1 = бууп
-
-#Chime
-emote-chat-messages-chime-1 = звенит
-
-#Buzz-Two
-emote-chat-messages-buzz-two-1 = дважды жужжит
-
-#Ping
-emote-chat-messages-ping-1 = пинг
-
-#Whirr
-emote-chat-messages-whirr-1 = жужжит
-
-#Nod
-emote-chat-button-text-nod = Кивать
-
-emote-chat-messages-nod-1 = кивает
-
-#ShakeHead
-emote-chat-button-text-shake-head = Покачать головой
-
-emote-chat-messages-shake-head-1 = качает головой
-
-#Frown
-emote-chat-button-text-frown = Хмуриться
-
-emote-chat-messages-frown-1 = хмурится
-
-#Smile
-emote-chat-button-text-smile = Улыбаться
-
-emote-chat-messages-smile-1 = улыбается
\ No newline at end of file
diff --git a/Resources/Locale/ru-RU/_white/escape-menu/options-menu.ftl b/Resources/Locale/ru-RU/_white/escape-menu/options-menu.ftl
index cca078f5dc..5ac7a8ee3b 100644
--- a/Resources/Locale/ru-RU/_white/escape-menu/options-menu.ftl
+++ b/Resources/Locale/ru-RU/_white/escape-menu/options-menu.ftl
@@ -1,3 +1,5 @@
+ui-options-emotes-menu = Тип меню эмоции:
+
ui-options-log-in-chat = Логировать действия в чат
ui-options-function-open-emotions-menu = Открыть меню эмоций
diff --git a/Resources/Locale/ru-RU/chat/emotes.ftl b/Resources/Locale/ru-RU/chat/emotes.ftl
new file mode 100644
index 0000000000..77ac231ac6
--- /dev/null
+++ b/Resources/Locale/ru-RU/chat/emotes.ftl
@@ -0,0 +1,132 @@
+# Названия
+chat-emote-name-scream = Крик
+chat-emote-name-laugh = Смех
+chat-emote-name-honk = Хонк
+chat-emote-name-sigh = Вздох
+chat-emote-name-whistle = Свист
+chat-emote-name-crying = Плач
+chat-emote-name-squish = Хлюпанье
+chat-emote-name-chitter = Стрекотание
+chat-emote-name-squeak = Писк
+chat-emote-name-click = Щелчок
+chat-emote-name-clap = Хлопок
+chat-emote-name-snap = Щелчок
+chat-emote-name-salute = Салют
+chat-emote-name-deathgasp = Предсмертный хрип
+chat-emote-name-buzz = Жужжание
+chat-emote-name-weh = Вех
+chat-emote-name-chirp = Чириканье
+chat-emote-name-beep = Бип
+chat-emote-name-boop = Буп
+chat-emote-name-chime = Звон
+chat-emote-name-buzztwo = Двойное жужжание
+chat-emote-name-ping = Пинг
+chat-emote-name-whirr = Жужжание (механическое)
+chat-emote-name-mars = Марс
+chat-emote-name-wurble = Воркотание
+chat-emote-name-sneeze = Чихание
+chat-emote-name-cough = Кашель
+chat-emote-name-monkeyscreeches = Визг обезьяны
+chat-emote-name-yawn = Зевок
+chat-emote-name-snore = Храп
+chat-emote-name-tailwag = Вилять хвостом
+chat-emote-name-flip = Сальто
+chat-emote-name-spin = Кручение
+chat-emote-name-jump = Прыжок
+
+# Сообщения
+chat-emote-msg-scream = кричит!
+chat-emote-msg-laugh = смеется.
+chat-emote-msg-honk = хонкает.
+chat-emote-msg-sigh = вздыхает.
+chat-emote-msg-whistle = свистит.
+chat-emote-msg-crying = плачет.
+chat-emote-msg-squish = хлюпает.
+chat-emote-msg-chitter = стрекочет.
+chat-emote-msg-squeak = пищит.
+chat-emote-msg-click = щелкает.
+chat-emote-msg-clap = хлопает!
+chat-emote-msg-snap = щелкает {POSS-ADJ($entity)} пальцами.
+chat-emote-msg-salute = отдает честь.
+chat-emote-msg-deathgasp = судорожно дергается и обмякает, {POSS-ADJ($entity)} глаза мертвы и безжизненны...
+chat-emote-msg-deathgasp-monkey = издает слабый хрип, когда {SUBJECT($entity)} падает и перестает двигаться...
+chat-emote-msg-deathgasp-silicon = судорожно дергается и обмякает, {POSS-ADJ($entity)} огни гаснут...
+chat-emote-msg-buzz = жужжит!
+chat-emote-msg-weh = вех!
+chat-emote-msg-chirp = чирикает!
+chat-emote-msg-beep = издает бип.
+chat-emote-msg-boop-1 = издает буп.
+chat-emote-msg-chime = звенит.
+chat-emote-msg-buzzestwo = жужжит дважды.
+chat-emote-msg-ping = пингует.
+chat-emote-msg-whirr = жужжит.
+chat-emote-msg-mars = марсирует.
+chat-emote-msg-wurble = воркует.
+chat-emote-msg-sneeze = чихает.
+chat-emote-msg-cough = кашляет.
+chat-emote-msg-monkeyscreeches = визжит!
+chat-emote-msg-yawn = зевает.
+chat-emote-msg-snore = храпит.
+chat-emote-name-meow = Мяукать
+chat-emote-name-mew = Мявкать
+chat-emote-name-purr = Мурлыкать
+chat-emote-name-hisses = Шипеть
+chat-emote-name-growl = Рычать
+chat-emote-msg-tailwag = виляет хвостом.
+chat-emote-msg-flip = дает сальто!
+chat-emote-msg-spin = кутится!
+chat-emote-msg-jump = пыгает!
+
+# Триггеры
+chat-emote-trigger-scream-1 = кричит
+chat-emote-trigger-scream-2 = орет
+chat-emote-trigger-scream-3 = визжит
+chat-emote-trigger-scream-4 = вопит
+chat-emote-trigger-laugh-1 = смеется
+chat-emote-trigger-laugh-2 = хихикает
+chat-emote-trigger-laugh-3 = гогочет
+chat-emote-trigger-laugh-4 = хохочет
+chat-emote-trigger-honk-1 = хонкает
+chat-emote-trigger-sigh-1 = вздыхает
+chat-emote-trigger-whistle-1 = свистит
+chat-emote-trigger-crying-1 = плачет
+chat-emote-trigger-squish-1 = хлюпает
+chat-emote-trigger-chitter-1 = стрекочет
+chat-emote-trigger-squeak-1 = пищит
+chat-emote-trigger-click-1 = щёлкает
+chat-emote-trigger-click-2 = щелкает
+chat-emote-trigger-clap-1 = хлопает
+chat-emote-trigger-snap-1 = щёлкает пальцами
+chat-emote-trigger-snap-2 = щелкает пальцами
+chat-emote-trigger-snap-3 = щёлкнул пальцами
+chat-emote-trigger-snap-4 = щeлкнул пальцами
+chat-emote-trigger-snap-5 = щёлкнула пальцами
+chat-emote-trigger-snap-6 = щeлкнула пальцами
+chat-emote-trigger-snap-7 = щёлкнуло пальцами
+chat-emote-trigger-salute-1 = салютует
+chat-emote-trigger-deathgasp-1 = умирает
+chat-emote-trigger-deathgasp-silicon-1 = sумирает
+chat-emote-trigger-buzz-1 = бззз
+chat-emote-trigger-weh-1 = вех
+chat-emote-trigger-chirp-1 = чирикает
+chat-emote-trigger-beep-1 = бип
+chat-emote-trigger-boop-1 = буп
+chat-emote-trigger-chime-1 = звенит
+chat-emote-trigger-buzz-two-1 = дважды жужжит
+chat-emote-trigger-ping-1 = пингует
+chat-emote-trigger-whirr-1 = жужжит
+chat-emote-trigger-mars-1 = марсирует
+chat-emote-trigger-wurble-1 = воркует
+chat-emote-trigger-sneeze-1 = чихает
+chat-emote-trigger-cough-1 = кашляет
+chat-emote-trigger-yawn-1 = зевает
+chat-emote-trigger-snore-1 = храпит
+chat-emote-trigger-tailwag-1 = виляет хвостом
+chat-emote-trigger-tailwag-2 = виляет своим хвостом
+chat-emote-trigger-tailwag-3 = виляет хвостиком
+chat-emote-trigger-tailwag-4 = валяет своим хвостиком
+chat-emote-trigger-tailwag-5 = виляет хвостищем
+chat-emote-trigger-tailwag-6 = виляет своим хвостищем
+chat-emote-trigger-flip-1 = длает сальто
+chat-emote-trigger-spin-1 = кутится
+chat-emote-trigger-jump-1 = пыгает
diff --git a/Resources/Locale/ru-RU/deltav/chat/emotes.ftl b/Resources/Locale/ru-RU/deltav/chat/emotes.ftl
new file mode 100644
index 0000000000..c101623cdc
--- /dev/null
+++ b/Resources/Locale/ru-RU/deltav/chat/emotes.ftl
@@ -0,0 +1,39 @@
+# Названия
+chat-emote-name-harpyring = Звон
+chat-emote-name-harpypew = Пиу
+chat-emote-name-harpybang = Бах
+chat-emote-name-harpyrev = Рёв
+chat-emote-name-harpycaw = Кар
+chat-emote-name-harpyhoot = Ухать
+chat-emote-name-vulpbark = Лай
+chat-emote-name-vulpsnarl = Рык
+chat-emote-name-vulpwhine = Скулеж
+chat-emote-name-vulphowl = Вой
+delta-chat-emote-name-awoo = Аууу
+
+# Сообщения
+chat-emote-msg-ring = звенит.
+chat-emote-msg-pew = пиу!
+chat-emote-msg-bang = бах!
+chat-emote-msg-rev = ревёт!
+chat-emote-msg-caw = каркает.
+chat-emote-msg-hoot = ухает.
+chat-emote-msg-bark = лает.
+chat-emote-msg-snarl = рычит.
+chat-emote-msg-whine = скулит.
+chat-emote-msg-howl = воет!
+chat-emote-msg-awoo = аукает!
+
+# Триггеры
+chat-emote-trigger-rings-1 = звенит
+chat-emote-trigger-pews-1 = пиукает
+chat-emote-trigger-pews-2 = пиу-пиукает
+chat-emote-trigger-bangs-1 = бахает
+chat-emote-trigger-revs-1 = ревёт
+chat-emote-trigger-caws-1 = каркает
+chat-emote-trigger-hoot-1 = ухает
+chat-emote-trigger-barks-1 = лает
+chat-emote-trigger-snarls-1 = рычит
+chat-emote-trigger-whines-1 = скулит
+chat-emote-trigger-howls-1 = воет
+chat-emote-trigger-awoo-1 = аукает
diff --git a/Resources/Locale/ru-RU/nyanotrasen/chat/emotes.ftl b/Resources/Locale/ru-RU/nyanotrasen/chat/emotes.ftl
new file mode 100644
index 0000000000..4ea5b3609a
--- /dev/null
+++ b/Resources/Locale/ru-RU/nyanotrasen/chat/emotes.ftl
@@ -0,0 +1,23 @@
+# Названия
+chat-emote-name-cathisses = Шипение
+chat-emote-name-catmeow = Мяукание
+chat-emote-name-catmew = Мявканье
+chat-emote-name-catgrowl = Рычание
+chat-emote-name-catpurr = Мурлыканье
+
+# Сообщения
+chat-emote-msg-hisses = шипит!
+chat-emote-msg-meow = мяукает.
+chat-emote-msg-mew = мявкает.
+chat-emote-msg-growl = рычит!
+chat-emote-msg-purr = мурлыкает.
+
+# Триггеры
+chat-emote-trigger-hisses-1 = шипит
+chat-emote-trigger-meows-1 = мяукает
+chat-emote-trigger-meows-2 = мяускает
+chat-emote-trigger-meows-3 = някает
+chat-emote-trigger-meows-4 = мурмяукает
+chat-emote-trigger-mews-1 = мявкает
+chat-emote-trigger-growls-1 = рычит
+chat-emote-trigger-purrs-1 = мурлычет
\ No newline at end of file
diff --git a/Resources/Prototypes/Actions/emotes.yml b/Resources/Prototypes/Actions/emotes.yml
index 63b97e9772..8ad29a8e69 100644
--- a/Resources/Prototypes/Actions/emotes.yml
+++ b/Resources/Prototypes/Actions/emotes.yml
@@ -6,8 +6,7 @@
- HumanoidAppearance
chatMessages: ["chat-emote-msg-flip"]
chatTriggers:
- - flip
- - flips
+ - "chat-emote-trigger-flip-1" # WD EDIT
event: !type:AnimationFlipEmoteEvent
- type: emote
@@ -18,8 +17,7 @@
- HumanoidAppearance
chatMessages: ["chat-emote-msg-spin"]
chatTriggers:
- - spin
- - spins
+ - "chat-emote-trigger-spin-1" # WD EDIT
event: !type:AnimationSpinEmoteEvent
- type: emote
@@ -30,8 +28,5 @@
- HumanoidAppearance
chatMessages: ["chat-emote-msg-jump"]
chatTriggers:
- - jump
- - jumps
- - hop # TheDen
- - hops # TheDen
+ - "chat-emote-trigger-jump-1" # WD EDIT
event: !type:AnimationJumpEmoteEvent
diff --git a/Resources/Prototypes/DeltaV/Voice/speech_emotes.yml b/Resources/Prototypes/DeltaV/Voice/speech_emotes.yml
index 67d632b385..d9d2be591d 100644
--- a/Resources/Prototypes/DeltaV/Voice/speech_emotes.yml
+++ b/Resources/Prototypes/DeltaV/Voice/speech_emotes.yml
@@ -9,9 +9,11 @@
blacklist:
components:
- BorgChassis
- chatMessages: [ rings ]
+ # WD EDIT START
+ chatMessages: ["chat-emote-msg-ring"]
chatTriggers:
- - rings
+ - "chat-emote-trigger-ring-1"
+ # WD EDIT END
- type: emote
id: HarpyPew
@@ -24,10 +26,12 @@
blacklist:
components:
- BorgChassis
- chatMessages: [ pews ]
+ # WD EDIT START
+ chatMessages: ["chat-emote-msg-pew"]
chatTriggers:
- - pews
- - pewpews
+ - "chat-emote-trigger-pew-1"
+ - "chat-emote-trigger-pew-2"
+ # WD EDIT END
- type: emote
id: HarpyBang
@@ -40,9 +44,11 @@
blacklist:
components:
- BorgChassis
- chatMessages: [ bangs ]
+ # WD EDIT START
+ chatMessages: ["chat-emote-msg-bang"]
chatTriggers:
- - bangs
+ - "chat-emote-trigger-bang-1"
+ # WD EDIT END
- type: emote
id: HarpyRev
@@ -55,9 +61,11 @@
components:
- BorgChassis
category: Vocal
- chatMessages: [ revs ]
+ # WD EDIT START
+ chatMessages: ["chat-emote-msg-rev"]
chatTriggers:
- - revs
+ - "chat-emote-trigger-rev-1"
+ # WD EDIT END
- type: emote
id: HarpyCaw
@@ -70,9 +78,11 @@
blacklist:
components:
- BorgChassis
- chatMessages: [ caws ]
+ # WD EDIT START
+ chatMessages: ["chat-emote-msg-caw"]
chatTriggers:
- - caws
+ - "chat-emote-trigger-caw-1"
+ # WD EDIT END
- type: emote
id: HarpyHoot
@@ -85,9 +95,9 @@
blacklist:
components:
- BorgChassis
- chatMessages: [ hoots ]
+ chatMessages: ["chat-emote-msg-hoot"]
chatTriggers:
- - hoots
+ - "chat-emote-trigger-hoot-1"
#Vulpkanin
- type: emote
@@ -102,9 +112,11 @@
blacklist:
components:
- BorgChassis
- chatMessages: [ barks ]
+ # WD EDIT START
+ chatMessages: ["chat-emote-msg-bark"]
chatTriggers:
- - barks
+ - "chat-emote-trigger-bark-1"
+ # WD EDIT END
- type: emote
id: Snarl
@@ -118,9 +130,11 @@
blacklist:
components:
- BorgChassis
- chatMessages: [ snarls ]
+ # WD EDIT START
+ chatMessages: ["chat-emote-msg-snarl"]
chatTriggers:
- - snarls
+ - "chat-emote-trigger-snarl-1"
+ # WD EDIT END
- type: emote
id: Whine
@@ -134,9 +148,11 @@
blacklist:
components:
- BorgChassis
- chatMessages: [ whines ]
+ # WD EDIT START
+ chatMessages: ["chat-emote-msg-whine"]
chatTriggers:
- - whines
+ - "chat-emote-trigger-whine-1"
+ # WD EDIT END
- type: emote
id: Howl
@@ -150,9 +166,11 @@
blacklist:
components:
- BorgChassis
- chatMessages: [ howls ]
+ # WD EDIT START
+ chatMessages: ["chat-emote-msg-howl"]
chatTriggers:
- - howls
+ - "chat-emote-trigger-howl-1"
+ # WD EDIT END
- type: emote
id: Awoo
@@ -165,6 +183,8 @@
blacklist:
components:
- BorgChassis
- chatMessages: [awoos.]
+ # WD EDIT START
+ chatMessages: ["chat-emote-msg-awoo"]
chatTriggers:
- - awoos
+ - "chat-emote-trigger-awoo-1"
+ # WD EDIT END
diff --git a/Resources/Prototypes/Nyanotrasen/Voice/speech_emotes.yml b/Resources/Prototypes/Nyanotrasen/Voice/speech_emotes.yml
index 12653e1b13..95fa90ecd6 100644
--- a/Resources/Prototypes/Nyanotrasen/Voice/speech_emotes.yml
+++ b/Resources/Prototypes/Nyanotrasen/Voice/speech_emotes.yml
@@ -11,9 +11,10 @@
blacklist:
components:
- BorgChassis
- chatMessages: [ hisses ]
+ chatMessages: [ "chat-emote-msg-hisses" ]
chatTriggers:
- - hisses
+ - "chat-emote-trigger-hisses-1"
+ # WD EDIT END
- type: emote
id: Meow
@@ -27,12 +28,14 @@
blacklist:
components:
- BorgChassis
- chatMessages: [ meows ]
+ # WD EDIT START
+ chatMessages: [ "chat-emote-msg-meow" ]
chatTriggers:
- - meows
- - miaus
- - nyas
- - mraows
+ - "chat-emote-trigger-meow-1"
+ - "chat-emote-trigger-meow-2"
+ - "chat-emote-trigger-meow-3"
+ - "chat-emote-trigger-meow-4"
+ # WD EDIT END
- type: emote
id: Mew
@@ -46,9 +49,11 @@
blacklist:
components:
- BorgChassis
- chatMessages: [ mews ]
+ # WD EDIT START
+ chatMessages: [ "chat-emote-msg-mew" ]
chatTriggers:
- - mews
+ - "chat-emote-trigger-mew-1"
+ # WD EDIT END
- type: emote
id: Growl
@@ -62,9 +67,11 @@
blacklist:
components:
- BorgChassis
- chatMessages: [ growls ]
+ # WD EDIT START
+ chatMessages: [ "chat-emote-msg-growl" ]
chatTriggers:
- - growls
+ - "chat-emote-trigger-growl-1"
+ # WD EDIT END
- type: emote
id: Purr
@@ -78,6 +85,8 @@
blacklist:
components:
- BorgChassis
- chatMessages: [ purrs ]
+ # WD EDIT START
+ chatMessages: [ "chat-emote-msg-purr" ]
chatTriggers:
- - purrs
+ - "chat-emote-trigger-purr-1"
+ # WD EDIT END
diff --git a/Resources/Prototypes/Voice/disease_emotes.yml b/Resources/Prototypes/Voice/disease_emotes.yml
index 585afd1f79..4802bcde1e 100644
--- a/Resources/Prototypes/Voice/disease_emotes.yml
+++ b/Resources/Prototypes/Voice/disease_emotes.yml
@@ -3,6 +3,16 @@
name: chat-emote-name-sneeze
category: Vocal
chatMessages: [ "chat-emote-msg-sneeze" ]
+ # WD EDIT START
+ whitelist:
+ components:
+ - Vocal
+ blacklist:
+ components:
+ - BorgChassis
+ chatTriggers:
+ - "chat-emote-trigger-sneeze-1"
+ # WD EDIT END
- type: emote
id: Cough
@@ -17,7 +27,7 @@
components:
- BorgChassis
chatTriggers:
- - coughs
+ - "chat-emote-trigger-cough-1" # WD EDIT
- type: emote
id: CatMeow
@@ -30,7 +40,7 @@
name: chat-emote-name-cathisses
category: Vocal
chatMessages: [ "chat-emote-msg-cathisses" ]
-
+
- type: emote
id: MonkeyScreeches
name: chat-emote-name-monkeyscreeches
@@ -56,10 +66,20 @@
components:
- BorgChassis
chatTriggers:
- - yawns
+ - "chat-emote-trigger-yawn-1" # WD EDIT
- type: emote
id: Snore
name: chat-emote-name-snore
category: Vocal
chatMessages: [ "chat-emote-msg-snore" ]
+ # WD EDIT START
+ whitelist:
+ components:
+ - Vocal
+ blacklist:
+ components:
+ - BorgChassis
+ chatTriggers:
+ - "chat-emote-trigger-snore-1"
+ # WD EDIT END
diff --git a/Resources/Prototypes/Voice/speech_emotes.yml b/Resources/Prototypes/Voice/speech_emotes.yml
index cb774ff142..ac03103570 100644
--- a/Resources/Prototypes/Voice/speech_emotes.yml
+++ b/Resources/Prototypes/Voice/speech_emotes.yml
@@ -9,10 +9,12 @@
- Vocal
chatMessages: ["chat-emote-msg-scream"]
chatTriggers:
- - screams
- - shrieks
- - screeches
- - yells
+ # WD EDIT START
+ - "chat-emote-trigger-scream-1"
+ - "chat-emote-trigger-scream-2"
+ - "chat-emote-trigger-scream-3"
+ - "chat-emote-trigger-scream-4"
+ # WD EDIT END
- type: emote
id: Laugh
@@ -24,10 +26,12 @@
- Vocal
chatMessages: ["chat-emote-msg-laugh"]
chatTriggers:
- - laughs
- - chuckles
- - giggles
- - chortles
+ # WD EDIT START
+ - "chat-emote-trigger-laugh-1"
+ - "chat-emote-trigger-laugh-2"
+ - "chat-emote-trigger-laugh-3"
+ - "chat-emote-trigger-laugh-4"
+ # WD EDIT END
- type: emote
id: Honk
@@ -40,7 +44,7 @@
- SiliconEmotes
- HarpyEmotes
chatTriggers:
- - honks
+ - "chat-emote-trigger-honk-1" # WD EDIT
- type: emote
id: Sigh
@@ -52,7 +56,7 @@
- Vocal
chatMessages: ["chat-emote-msg-sigh"]
chatTriggers:
- - sighs
+ - "chat-emote-trigger-sigh-1" # WD EDIT
- type: emote
id: Whistle
@@ -64,7 +68,7 @@
- Vocal
chatMessages: ["chat-emote-msg-whistle"]
chatTriggers:
- - whistles
+ - "chat-emote-trigger-whistle-1" # WD EDIT
- type: emote
id: Crying
@@ -76,8 +80,10 @@
- Vocal
chatMessages: ["chat-emote-msg-crying"]
chatTriggers:
- - cries
- - sobs
+ # WD EDIT START
+ - "chat-emote-trigger-crying-1"
+ - "chat-emote-trigger-crying-2"
+ # WD EDIT END
- type: emote
id: Squish
@@ -92,7 +98,7 @@
- BorgChassis
chatMessages: ["chat-emote-msg-squish"]
chatTriggers:
- - squishes
+ - "chat-emote-trigger-squish-1" # WD EDIT
- type: emote
id: Chitter
@@ -107,7 +113,7 @@
- BorgChassis
chatMessages: ["chat-emote-msg-chitter"]
chatTriggers:
- - chitters
+ - "chat-emote-trigger-chitter-1" # WD EDIT
- type: emote
id: Squeak
@@ -122,7 +128,7 @@
- BorgChassis
chatMessages: ["chat-emote-msg-squeak"]
chatTriggers:
- - squeaks
+ - "chat-emote-trigger-squeak-1" # WD EDIT
- type: emote
id: Click
@@ -137,7 +143,10 @@
- BorgChassis
chatMessages: ["chat-emote-msg-click"]
chatTriggers:
- - clicks
+ # WD EDIT START
+ - "chat-emote-trigger-click-1"
+ - "chat-emote-trigger-click-2"
+ # WD EDIT END
# hand emotes
- type: emote
@@ -153,7 +162,7 @@
- BorgChassis
chatMessages: ["chat-emote-msg-clap"]
chatTriggers:
- - claps
+ - "chat-emote-trigger-clap-1" # WD EDIT
- type: emote
id: Snap
@@ -168,13 +177,15 @@
- BorgChassis
chatMessages: ["chat-emote-msg-snap"] # snaps <{THEIR($ent)}> fingers?
chatTriggers:
- - snaps
- - snaps fingers
- - snaps his fingers
- - snaps her fingers
- - snaps their fingers
- - snaps its fingers
- - snaps its' fingers
+ # WD EDIT START
+ - "chat-emote-trigger-snap-1"
+ - "chat-emote-trigger-snap-2"
+ - "chat-emote-trigger-snap-3"
+ - "chat-emote-trigger-snap-4"
+ - "chat-emote-trigger-snap-5"
+ - "chat-emote-trigger-snap-6"
+ - "chat-emote-trigger-snap-7"
+ # WD EDIT END
- type: emote
id: Salute
@@ -189,7 +200,7 @@
- BorgChassis
chatMessages: ["chat-emote-msg-salute"]
chatTriggers:
- - salutes
+ - "chat-emote-trigger-salute-1" # WD EDIT
- type: emote
id: DefaultDeathgasp
@@ -203,7 +214,7 @@
- SiliconEmotes
chatMessages: ["chat-emote-msg-deathgasp"]
chatTriggers:
- - deathgasp
+ - "chat-emote-trigger-deathgasp-1" # WD EDIT
- type: emote
id: MonkeyDeathgasp
@@ -220,7 +231,7 @@
- SiliconEmotes
chatMessages: ["chat-emote-msg-deathgasp-silicon"]
chatTriggers:
- - sdeathgasp
+ - "chat-emote-trigger-deathgasp-silicon-1" # WD EDIT
- type: emote
id: Buzz
@@ -233,14 +244,14 @@
- HarpyEmotes
chatMessages: ["chat-emote-msg-buzz"]
chatTriggers:
- - buzzes
+ - "chat-emote-trigger-buzz-1" # WD EDIT
- type: emote
id: Weh
name: chat-emote-name-weh
category: Vocal
icon: Interface/Emotes/weh.png
- chatMessages: [ wehs ]
+ chatMessages: ["chat-emote-msg-weh"]
- type: emote
id: Chirp
@@ -255,7 +266,7 @@
- HarpyEmotes
chatMessages: ["chat-emote-msg-chirp"]
chatTriggers:
- - chirps
+ - "chat-emote-trigger-chirp-1" # WD EDIT
# Machine Emotes
- type: emote
@@ -269,7 +280,7 @@
- HarpyEmotes
chatMessages: ["chat-emote-msg-beep"]
chatTriggers:
- - beeps
+ - "chat-emote-trigger-beep-1" # WD EDIT
- type: emote
id: Boop
@@ -279,9 +290,11 @@
tags:
- SiliconEmotes
- HarpyEmotes
- chatMessages: [ boops ]
+ # WD EDIT START
+ chatMessages: [ "chat-emote-msg-boop-1" ]
chatTriggers:
- - boops
+ - "chat-emote-trigger-boop-1"
+ # WD EDIT END
- type: emote
id: Chime
@@ -292,10 +305,12 @@
tags:
- SiliconEmotes
- HarpyEmotes
+ # WD EDIT START
chatMessages: ["chat-emote-msg-chime"]
chatTriggers:
- - chimes
-
+ - "chat-emote-trigger-chime-1"
+ # WD EDIT END
+
- type: emote
id: Buzz-Two
name: chat-emote-name-buzztwo
@@ -305,9 +320,11 @@
tags:
- SiliconEmotes
- HarpyEmotes
+ # WD EDIT START
chatMessages: ["chat-emote-msg-buzzestwo"]
chatTriggers:
- - buzzes twice
+ - "chat-emote-trigger-buzz-two-1"
+ # WD EDIT END
- type: emote
id: Ping
@@ -318,9 +335,11 @@
tags:
- SiliconEmotes
- HarpyEmotes
+ # WD EDIT START
chatMessages: ["chat-emote-msg-ping"]
chatTriggers:
- - pings
+ - "chat-emote-trigger-ping-1"
+ # WD EDIT END
- type: emote
id: Whirr
@@ -330,9 +349,11 @@
tags:
- SiliconEmotes
- HarpyEmotes
- chatMessages: [ whirrs ]
+ # WD EDIT START
+ chatMessages: ["chat-emote-msg-whirr"]
chatTriggers:
- - whirrs
+ - "chat-emote-trigger-whirr-1"
+ # WD EDIT END
- type: emote
id: Mars
@@ -345,9 +366,11 @@
blacklist:
components:
- BorgChassis
- chatMessages: [ mars ]
+ # WD EDIT START
+ chatMessages: ["chat-emote-msg-mars"]
chatTriggers:
- - mars
+ - "chat-emote-trigger-mars-1"
+ # WD EDIT END
- type: emote
id: Wurble
@@ -360,6 +383,8 @@
blacklist:
components:
- BorgChassis
- chatMessages: [ wurble ]
+ # WD EDIT START
+ chatMessages: ["chat-emote-msg-wurble"]
chatTriggers:
- - wurble
+ - "chat-emote-trigger-wurble-1"
+ # WD EDIT END
diff --git a/Resources/Prototypes/Voice/tail_emotes.yml b/Resources/Prototypes/Voice/tail_emotes.yml
index f1f59b18a5..f96fca848d 100644
--- a/Resources/Prototypes/Voice/tail_emotes.yml
+++ b/Resources/Prototypes/Voice/tail_emotes.yml
@@ -5,11 +5,13 @@
tags:
- VulpEmotes
- UnathiEmotes
- chatMessages: [wags their tail]
+ # WD EDIT START
+ chatMessages: ["chat-emote-msg-tailwag"]
chatTriggers:
- - wags tail
- - wags his tail
- - wags her tail
- - wags their tail
- - wags its tail
- - wags its' tail
+ - "chat-emote-trigger-tailwag-1"
+ - "chat-emote-trigger-tailwag-2"
+ - "chat-emote-trigger-tailwag-3"
+ - "chat-emote-trigger-tailwag-4"
+ - "chat-emote-trigger-tailwag-5"
+ - "chat-emote-trigger-tailwag-6"
+ # WD EDIT END
diff --git a/Resources/Prototypes/_White/Voice/speech_emotes.yml b/Resources/Prototypes/_White/Voice/speech_emotes.yml
index 7b518887f8..631460dfb1 100644
--- a/Resources/Prototypes/_White/Voice/speech_emotes.yml
+++ b/Resources/Prototypes/_White/Voice/speech_emotes.yml
@@ -1,23 +1,28 @@
- type: emote
id: Nod
name: chat-emote-name-nod
- category: General
chatMessages: [ "chat-emote-msg-nod" ]
+ chatTriggers:
+ - "chat-emote-trigger-nod-1"
- type: emote
id: ShakeHead
name: chat-emote-name-shake-head
- category: General
chatMessages: [ "chat-emote-msg-shake-head" ]
+ chatTriggers:
+ - "chat-emote-trigger-shake-head-1"
+ - "chat-emote-trigger-shake-head-2"
- type: emote
id: Frown
name: chat-emote-name-frown
- category: General
chatMessages: [ "chat-emote-msg-frown" ]
+ chatTriggers:
+ - "chat-emote-trigger-frown-1"
- type: emote
id: Smile
name: chat-emote-name-smile
- category: General
chatMessages: [ "chat-emote-msg-smile" ]
+ chatTriggers:
+ - "chat-emote-trigger-smile-1"
diff --git a/Resources/Prototypes/_White/tags.yml b/Resources/Prototypes/_White/tags.yml
index 04338a2346..df51bae693 100644
--- a/Resources/Prototypes/_White/tags.yml
+++ b/Resources/Prototypes/_White/tags.yml
@@ -18,3 +18,4 @@
- type: Tag
id: RiotGrenade
+