From c71ac26fdc250e23343edbc2cc0be1e90353eebd Mon Sep 17 00:00:00 2001 From: rhailrake <49613070+rhailrake@users.noreply.github.com> Date: Fri, 28 Apr 2023 05:08:05 +0600 Subject: [PATCH] [feat] Emote panel, monkey rsi fix --- Content.Client/Input/ContentContexts.cs | 1 + .../Options/UI/Tabs/KeyRebindTab.xaml.cs | 1 + .../Systems/Emotions/EmotionsUIController.cs | 139 ++++++++++++ .../Emotions/Windows/EmotionsWindow.xaml | 12 + .../Emotions/Windows/EmotionsWindow.xaml.cs | 13 ++ .../MenuBar/GameTopMenuBarUIController.cs | 4 + .../MenuBar/Widgets/GameTopMenuBar.xaml | 10 + .../Chat/Systems/ChatSystem.Emote.cs | 2 + Content.Server/Chat/Systems/ChatSystem.cs | 3 + .../Emoting/Systems/BodyEmotesSystem.cs | 2 +- .../Chat/Prototypes/EmotePrototype.cs | 11 +- Content.Shared/Input/ContentKeyFunctions.cs | 1 + Resources/Prototypes/Voice/disease_emotes.yml | 36 +-- Resources/Prototypes/Voice/speech_emotes.yml | 208 ------------------ Resources/Prototypes/emotes.yml | 108 +++++++++ Resources/Textures/Interface/emotions.svg | 13 ++ .../Interface/emotions.svg.192dpi.png | Bin 0 -> 355 bytes .../Interface/emotions.svg.192dpi.png.yml | 2 + .../Textures/Mobs/Animals/monkey.rsi/dead.png | Bin 0 -> 348 bytes .../Mobs/Animals/monkey.rsi/meta.json | 10 +- Resources/keybinds.yml | 3 + 21 files changed, 338 insertions(+), 241 deletions(-) create mode 100644 Content.Client/UserInterface/Systems/Emotions/EmotionsUIController.cs create mode 100644 Content.Client/UserInterface/Systems/Emotions/Windows/EmotionsWindow.xaml create mode 100644 Content.Client/UserInterface/Systems/Emotions/Windows/EmotionsWindow.xaml.cs delete mode 100644 Resources/Prototypes/Voice/speech_emotes.yml create mode 100644 Resources/Prototypes/emotes.yml create mode 100644 Resources/Textures/Interface/emotions.svg create mode 100644 Resources/Textures/Interface/emotions.svg.192dpi.png create mode 100644 Resources/Textures/Interface/emotions.svg.192dpi.png.yml create mode 100644 Resources/Textures/Mobs/Animals/monkey.rsi/dead.png diff --git a/Content.Client/Input/ContentContexts.cs b/Content.Client/Input/ContentContexts.cs index 03f4f3f38b..a5cfc1d966 100644 --- a/Content.Client/Input/ContentContexts.cs +++ b/Content.Client/Input/ContentContexts.cs @@ -55,6 +55,7 @@ namespace Content.Client.Input human.AddFunction(ContentKeyFunctions.UseItemInHand); human.AddFunction(ContentKeyFunctions.AltUseItemInHand); human.AddFunction(ContentKeyFunctions.OpenCharacterMenu); + human.AddFunction(ContentKeyFunctions.OpenEmotionsMenu); human.AddFunction(ContentKeyFunctions.ActivateItemInWorld); human.AddFunction(ContentKeyFunctions.ThrowItemInHand); human.AddFunction(ContentKeyFunctions.AltActivateItemInWorld); diff --git a/Content.Client/Options/UI/Tabs/KeyRebindTab.xaml.cs b/Content.Client/Options/UI/Tabs/KeyRebindTab.xaml.cs index ce5cf421ae..5b786a9122 100644 --- a/Content.Client/Options/UI/Tabs/KeyRebindTab.xaml.cs +++ b/Content.Client/Options/UI/Tabs/KeyRebindTab.xaml.cs @@ -209,6 +209,7 @@ namespace Content.Client.Options.UI.Tabs AddButton(ContentKeyFunctions.CycleChatChannelForward); AddButton(ContentKeyFunctions.CycleChatChannelBackward); AddButton(ContentKeyFunctions.OpenCharacterMenu); + AddButton(ContentKeyFunctions.OpenEmotionsMenu); AddButton(ContentKeyFunctions.OpenCraftingMenu); AddButton(ContentKeyFunctions.OpenGuidebook); AddButton(ContentKeyFunctions.OpenInventoryMenu); diff --git a/Content.Client/UserInterface/Systems/Emotions/EmotionsUIController.cs b/Content.Client/UserInterface/Systems/Emotions/EmotionsUIController.cs new file mode 100644 index 0000000000..2c34076911 --- /dev/null +++ b/Content.Client/UserInterface/Systems/Emotions/EmotionsUIController.cs @@ -0,0 +1,139 @@ +using System.Linq; +using Content.Client.Chat.Managers; +using Content.Client.Gameplay; +using Content.Client.UserInterface.Controls; +using Content.Client.UserInterface.Systems.Emotions.Windows; +using Content.Shared.Chat; +using Content.Shared.Chat.Prototypes; +using Content.Shared.Input; +using Robust.Client.UserInterface; +using Robust.Client.UserInterface.Controllers; +using Robust.Client.UserInterface.Controls; +using Robust.Shared.Input.Binding; +using Robust.Shared.Prototypes; +using Robust.Shared.Random; +using Robust.Shared.Utility; + +namespace Content.Client.UserInterface.Systems.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 EmotionsWindow? _window; + private MenuButton? EmotionsButton => UIManager.GetActiveUIWidgetOrNull()?.EmotionsButton; + + private DateTime _lastEmotionTimeUse = DateTime.Now; + private float _emoteCooldown = 1.5f; + + public void OnStateEntered(GameplayState state) + { + DebugTools.Assert(_window == null); + + _window = UIManager.CreateWindow(); + + _window.OnOpen += OnWindowOpened; + _window.OnClose += OnWindowClosed; + + var emotions = _prototypeManager.EnumeratePrototypes().ToList(); + emotions.Sort((a,b) => string.Compare(a.ButtonText, b.ButtonText.ToString(), StringComparison.Ordinal)); + + foreach (var emote in emotions) + { + var control = new Button(); + control.OnPressed += _ => UseEmote(_random.Pick(emote.ChatMessages)); + control.Text = emote.ButtonText; + control.HorizontalExpand = true; + control.VerticalExpand = true; + control.MaxWidth = 250; + control.MaxHeight = 50; + _window.EmotionsContainer.AddChild(control); + } + + CommandBinds.Builder + .Bind(ContentKeyFunctions.OpenEmotionsMenu, + InputCmdHandler.FromDelegate(_ => ToggleWindow())) + .Register(); + } + + public void UnloadButton() + { + if (EmotionsButton == null) + { + return; + } + + EmotionsButton.OnPressed -= EmotionsButtonPressed; + } + + private void UseEmote(string emote) + { + var timeSpan = DateTime.Now - _lastEmotionTimeUse; + var seconds = timeSpan.TotalSeconds; + if (seconds < _emoteCooldown) + { + return; + } + + _lastEmotionTimeUse = DateTime.Now; + _chatManager.SendMessage(emote, ChatSelectChannel.Emotes); + } + + public void LoadButton() + { + 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; + } + + public void OnStateExited(GameplayState state) + { + if (_window != null) + { + _window.OnOpen -= OnWindowOpened; + _window.OnClose -= OnWindowClosed; + + _window.Dispose(); + _window = null; + } + + CommandBinds.Unregister(); + } + + private void EmotionsButtonPressed(BaseButton.ButtonEventArgs args) + { + ToggleWindow(); + } + + private void ToggleWindow() + { + if (_window == null) + return; + + if (_window.IsOpen) + { + _window.Close(); + return; + } + + _window.Open(); + } +} diff --git a/Content.Client/UserInterface/Systems/Emotions/Windows/EmotionsWindow.xaml b/Content.Client/UserInterface/Systems/Emotions/Windows/EmotionsWindow.xaml new file mode 100644 index 0000000000..a57eb92def --- /dev/null +++ b/Content.Client/UserInterface/Systems/Emotions/Windows/EmotionsWindow.xaml @@ -0,0 +1,12 @@ + + + + + diff --git a/Content.Client/UserInterface/Systems/Emotions/Windows/EmotionsWindow.xaml.cs b/Content.Client/UserInterface/Systems/Emotions/Windows/EmotionsWindow.xaml.cs new file mode 100644 index 0000000000..90a72cc178 --- /dev/null +++ b/Content.Client/UserInterface/Systems/Emotions/Windows/EmotionsWindow.xaml.cs @@ -0,0 +1,13 @@ +using Robust.Client.AutoGenerated; +using Robust.Client.UserInterface.CustomControls; +using Robust.Client.UserInterface.XAML; + +namespace Content.Client.UserInterface.Systems.Emotions.Windows; +[GenerateTypedNameReferences] +public sealed partial class EmotionsWindow : DefaultWindow +{ + public EmotionsWindow() + { + RobustXamlLoader.Load(this); + } +} diff --git a/Content.Client/UserInterface/Systems/MenuBar/GameTopMenuBarUIController.cs b/Content.Client/UserInterface/Systems/MenuBar/GameTopMenuBarUIController.cs index 1505db48a7..07c0ab6b77 100644 --- a/Content.Client/UserInterface/Systems/MenuBar/GameTopMenuBarUIController.cs +++ b/Content.Client/UserInterface/Systems/MenuBar/GameTopMenuBarUIController.cs @@ -3,6 +3,7 @@ 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.Emotions; using Content.Client.UserInterface.Systems.EscapeMenu; using Content.Client.UserInterface.Systems.Gameplay; using Content.Client.UserInterface.Systems.Guidebook; @@ -22,6 +23,7 @@ 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 EmotionsUIController _emotions = default!; private GameTopMenuBar? GameTopMenuBar => UIManager.GetActiveUIWidgetOrNull(); @@ -44,6 +46,7 @@ public sealed class GameTopMenuBarUIController : UIController _ahelp.UnloadButton(); _action.UnloadButton(); _sandbox.UnloadButton(); + _emotions.UnloadButton(); } public void LoadButtons() @@ -56,5 +59,6 @@ public sealed class GameTopMenuBarUIController : UIController _ahelp.LoadButton(); _action.LoadButton(); _sandbox.LoadButton(); + _emotions.LoadButton(); } } diff --git a/Content.Client/UserInterface/Systems/MenuBar/Widgets/GameTopMenuBar.xaml b/Content.Client/UserInterface/Systems/MenuBar/Widgets/GameTopMenuBar.xaml index 3c8cd1d164..814b92805d 100644 --- a/Content.Client/UserInterface/Systems/MenuBar/Widgets/GameTopMenuBar.xaml +++ b/Content.Client/UserInterface/Systems/MenuBar/Widgets/GameTopMenuBar.xaml @@ -43,6 +43,16 @@ HorizontalExpand="True" AppendStyleClass="{x:Static style:StyleBase.ButtonSquare}" /> + (); foreach (var emote in emotes) { + if (emote.ChatTriggers == null) + continue; foreach (var word in emote.ChatTriggers) { var lowerWord = word.ToLower(); diff --git a/Content.Server/Chat/Systems/ChatSystem.cs b/Content.Server/Chat/Systems/ChatSystem.cs index 5c5aa2966f..9218c0df34 100644 --- a/Content.Server/Chat/Systems/ChatSystem.cs +++ b/Content.Server/Chat/Systems/ChatSystem.cs @@ -184,6 +184,9 @@ public sealed partial class ChatSystem : SharedChatSystem { if (HasComp(source)) { + if(desiredType == InGameICChatType.Emote) + return; + // Ghosts can only send dead chat messages, so we'll forward it to InGame OOC. TrySendInGameOOCMessage(source, message, InGameOOCChatType.Dead, range == ChatTransmitRange.HideChat, shell, player); return; diff --git a/Content.Server/Emoting/Systems/BodyEmotesSystem.cs b/Content.Server/Emoting/Systems/BodyEmotesSystem.cs index 594eb0ec6d..9b0890d47c 100644 --- a/Content.Server/Emoting/Systems/BodyEmotesSystem.cs +++ b/Content.Server/Emoting/Systems/BodyEmotesSystem.cs @@ -31,7 +31,7 @@ public sealed class BodyEmotesSystem : EntitySystem return; var cat = args.Emote.Category; - if (cat.HasFlag(EmoteCategory.Hands)) + if (cat.HasFlag(EmoteCategory.Gesture)) { args.Handled = TryEmoteHands(uid, args.Emote, component); } diff --git a/Content.Shared/Chat/Prototypes/EmotePrototype.cs b/Content.Shared/Chat/Prototypes/EmotePrototype.cs index 08f209d28d..40367a5655 100644 --- a/Content.Shared/Chat/Prototypes/EmotePrototype.cs +++ b/Content.Shared/Chat/Prototypes/EmotePrototype.cs @@ -33,7 +33,14 @@ public sealed partial class EmotePrototype : IPrototype /// All words should be unique across all emote prototypes. /// [DataField("chatTriggers")] - public HashSet ChatTriggers = new(); + public HashSet? ChatTriggers = new(); + + /// + /// Текст для кнопки в эмоут меню. + /// Бля ну или как это описать, вы поняли короче. ¯\_(ツ)_/¯ + /// + [DataField("buttonText")] + public string ButtonText { get; } = "Unknown"; } /// @@ -46,6 +53,6 @@ public enum EmoteCategory : byte { Invalid = 0, Vocal = 1 << 0, - Hands = 1 << 1, + Gesture = 1 << 1, General = byte.MaxValue } diff --git a/Content.Shared/Input/ContentKeyFunctions.cs b/Content.Shared/Input/ContentKeyFunctions.cs index ee4a4e9023..474eadf428 100644 --- a/Content.Shared/Input/ContentKeyFunctions.cs +++ b/Content.Shared/Input/ContentKeyFunctions.cs @@ -25,6 +25,7 @@ namespace Content.Shared.Input public static readonly BoundKeyFunction CycleChatChannelBackward = "CycleChatChannelBackward"; public static readonly BoundKeyFunction EscapeContext = "EscapeContext"; public static readonly BoundKeyFunction OpenCharacterMenu = "OpenCharacterMenu"; + public static readonly BoundKeyFunction OpenEmotionsMenu = "OpenEmotionsMenu"; public static readonly BoundKeyFunction OpenCraftingMenu = "OpenCraftingMenu"; public static readonly BoundKeyFunction OpenGuidebook = "OpenGuidebook"; public static readonly BoundKeyFunction OpenInventoryMenu = "OpenInventoryMenu"; diff --git a/Resources/Prototypes/Voice/disease_emotes.yml b/Resources/Prototypes/Voice/disease_emotes.yml index af93025cae..13a87b0872 100644 --- a/Resources/Prototypes/Voice/disease_emotes.yml +++ b/Resources/Prototypes/Voice/disease_emotes.yml @@ -1,45 +1,23 @@ - type: emote id: Sneeze + buttonText: Чихать category: Vocal - chatMessages: [sneezes] - + chatMessages: [чихает] + - type: emote id: Cough + buttonText: Кашлять category: Vocal - chatMessages: [coughs] + chatMessages: [кашляет] chatTriggers: - cough - coughs -- type: emote - id: CatMeow - category: Vocal - chatMessages: [meows] - -- type: emote - id: CatHisses - category: Vocal - chatMessages: [hisses] - -- type: emote - id: MonkeyScreeches - category: Vocal - chatMessages: [screeches] - -- type: emote - id: RobotBeep - category: Vocal - chatMessages: [beeps] - - type: emote id: Yawn + buttonText: Зевать category: Vocal - chatMessages: [yawns] + chatMessages: [зевает] chatTriggers: - yawn - yawns - -- type: emote - id: Snore - category: Vocal - chatMessages: [snores] diff --git a/Resources/Prototypes/Voice/speech_emotes.yml b/Resources/Prototypes/Voice/speech_emotes.yml deleted file mode 100644 index 8473560f15..0000000000 --- a/Resources/Prototypes/Voice/speech_emotes.yml +++ /dev/null @@ -1,208 +0,0 @@ -# vocal emotes -- type: emote - id: Scream - category: Vocal - chatMessages: [screams!] - chatTriggers: - - scream - - screams - - screams. - - screams! - - screaming - - screamed - - shriek - - shrieks - - shrieks. - - shrieks! - - shrieking - - shrieked - - screech - - screeches - - screeches. - - screeches! - - screeching - - screeched - - yell - - yells - - yells. - - yells! - - yelled - - yelling - -- type: emote - id: Laugh - category: Vocal - chatMessages: [laughs] - chatTriggers: - - laugh - - laughs - - laughs. - - laughs! - - laughing - - laughed - - chuckle - - chuckles - - chuckles. - - chuckles! - - chuckled - - chuckling - - giggle - - giggles - - giggles. - - giggles! - - giggling - - giggled - -- type: emote - id: Honk - category: Vocal - chatMessages: [honks] - -- type: emote - id: Sigh - category: Vocal - chatMessages: [sighs] - chatTriggers: - - sigh - - sighs - - sighed - - sigh. - - sighs. - - sighed. - -- type: emote - id: Whistle - category: Vocal - chatMessages: [whistle] - chatTriggers: - - whistle - - whistle. - - whistle! - - whistles - - whistles. - - whistles! - - whistleblowing - - whistleblowing. - - whistleblowing! - -- type: emote - id: Crying - category: Vocal - chatMessages: [crying] - chatTriggers: - - cry - - cry. - - cry! - - crying - - crying. - - crying! - - cries - - cries. - - cries! - -- type: emote - id: Squish - category: Vocal - chatMessages: [squishing] - chatTriggers: - - squish - - squish. - - squish! - - squishing - - squishing. - - squishing! - - squishes - - squishes. - - squishes! - -- type: emote - id: Chitter - category: Vocal - chatMessages: [chitters.] - chatTriggers: - - chitter - - chitter. - - chitter! - - chitters - - chitters. - - chitters! - - chittered - - chittered. - - chittered! - -- type: emote - id: Squeak - category: Vocal - chatMessages: [squeaks.] - chatTriggers: - - squeak - - squeak. - - squeak! - - squeaks - - squeaks. - - squeaks! - - squeaked - - squeaked. - - squeaked! - -- type: emote - id: Click - category: Vocal - chatMessages: [click.] - chatTriggers: - - click - - click. - - click! - - clicks - - clicks. - - clicks! - -# hand emotes -- type: emote - id: Clap - category: Hands - chatMessages: [claps!] - chatTriggers: - - clap - - claps - - claps. - - claps! - - clapping - - clapped - -- type: emote - id: Snap - category: Hands - chatMessages: [snaps fingers] # snaps <{THEIR($ent)}> fingers? - chatTriggers: - - snap - - snaps - - snapping - - snapped - - snap fingers - - snaps fingers - - snaps fingers. - - snaps fingers! - - snaps their fingers - - snaps their fingers. - - snaps their fingers! - - snapping fingers - - snapped fingers - -- type: emote - id: Salute - category: Hands - chatMessages: [Salute] - chatTriggers: - - salute - - salute. - - salute! - - salutes - - salutes. - - salutes! - -- type: emote - id: DefaultDeathgasp - chatMessages: ["emote-deathgasp"] - chatTriggers: - - deathgasp diff --git a/Resources/Prototypes/emotes.yml b/Resources/Prototypes/emotes.yml new file mode 100644 index 0000000000..0b9e8d1a25 --- /dev/null +++ b/Resources/Prototypes/emotes.yml @@ -0,0 +1,108 @@ +- type: emote + id: Scream + category: Vocal + buttonText: Кричать + chatMessages: [кричит, орет, вопит, рявкает] + chatTriggers: + - кричит + - закричал + - закричала + - орет + - заорал + - заорала + - визжит + - завизжал + - завизжала + - взвизгнул + - взвизгнула + - рявкает + - рявкнул + - рявкнула + - вопит + +- type: emote + id: Laugh + category: Vocal + buttonText: Смеяться + chatMessages: [смеется, ржет, усмехается, хохочет, гогочет] + chatTriggers: + - смеется + - просмеялся + - засмеялся + - засмеялась + - хихикает + - хихикнул + - хихикнула + - хихикает + - ржет + - усмехается + - усмехнулась + - усмехнулся + - хохочет + - гогочет + +- type: emote + id: Clap + category: Gesture + buttonText: Хлопать + chatMessages: [хлопает] + chatTriggers: + - хлопает + - захлопала + - захлопал + - похлопал + +- type: emote + id: Snap + category: Gesture + buttonText: Щелкать пальцами + chatMessages: [щелкает пальцами] + chatTriggers: + - щелкает пальцами + - щелкает + - щелкнул + - щелкнула + - щелкунл пальцами + - щелкунла пальцами + +- type: emote + id: WaveHand + category: Gesture + buttonText: Махать рукой + chatMessages: [машет рукой] + +- type: emote + id: Nod + category: Gesture + buttonText: Кивать + chatMessages: [кивает] + +- type: emote + id: ShakeHead + category: Gesture + buttonText: Покачать головой + chatMessages: [качает головой] + +- type: emote + id: Frown + category: Gesture + buttonText: Хмуриться + chatMessages: [хмурится] + +- type: emote + id: Smile + category: Gesture + buttonText: Улыбаться + chatMessages: [улыбается] + +- type: emote + id: Sniff + category: Gesture + buttonText: Принюхиваться + chatMessages: [принюхивается] + +- type: emote + id: LickLips + category: Gesture + buttonText: Облизываться + chatMessages: [облизывается] diff --git a/Resources/Textures/Interface/emotions.svg b/Resources/Textures/Interface/emotions.svg new file mode 100644 index 0000000000..cc83f74322 --- /dev/null +++ b/Resources/Textures/Interface/emotions.svg @@ -0,0 +1,13 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + diff --git a/Resources/Textures/Interface/emotions.svg.192dpi.png b/Resources/Textures/Interface/emotions.svg.192dpi.png new file mode 100644 index 0000000000000000000000000000000000000000..6fc6e102366a87a5887836b8ab79ee3e3e1726be GIT binary patch literal 355 zcmV-p0i6DcP)qSYFc1dd-#ZJYOC(B)>=Aqeb0o^`94bn#vPZDQ1vo;E5VQp@OiYk652WXS7y zvd3dISrz}rpT<|?592u*560dYYq}U@?DlmQo>UVTR;iv2XOkCY|mr=9Er4vFhKU~}o7jmJ?ujF0RZabmAsT%S=~iM_b? z!k(SZm2rVJX$-t^CtiLz8Yg3&^TnB&fBoBk_YGf*-M${Q{u}@R002ovPDHLkV1meg Bng##> literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/emotions.svg.192dpi.png.yml b/Resources/Textures/Interface/emotions.svg.192dpi.png.yml new file mode 100644 index 0000000000..dabd6601f7 --- /dev/null +++ b/Resources/Textures/Interface/emotions.svg.192dpi.png.yml @@ -0,0 +1,2 @@ +sample: + filter: true diff --git a/Resources/Textures/Mobs/Animals/monkey.rsi/dead.png b/Resources/Textures/Mobs/Animals/monkey.rsi/dead.png new file mode 100644 index 0000000000000000000000000000000000000000..487fddc0724443bacae7512574a51730af659c38 GIT binary patch literal 348 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvxd5LK*8>L*O!QzdW?=X~(|D#a z!~ZjBiHV619z1AhXkcKNc}Vt>1W+YoNswPKgTu2MX+TavRY*jMOKNd)QD#9&W_}(6 zL&conu!5q}?_YuoK7M_o<*loA?#%h%4WR}XjUPPHIq#!+lA)-lcZY>>knv?>FNHae zCLNg+q7bZUZm(~>^^$>|s;QxCXScEH<`oheIVX8;uxYaF*!k^&LO~)apv&@8E-UNRFu{%QCOp-ab$rAgRp>zXL3+bpiqlu zQizaNxrj)hp=cAQK?VbB%pB$B2g^LBSX=F~Xm4VbV3m-NG(8pjK#S$#S%H=tK`h%_ q104b+ugW$tb-mC#`hoi|BZG~CVA!-tIfg*H89ZJ6T-G@yGywo(X?r37 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Animals/monkey.rsi/meta.json b/Resources/Textures/Mobs/Animals/monkey.rsi/meta.json index b62cac749a..34c97ed83c 100644 --- a/Resources/Textures/Mobs/Animals/monkey.rsi/meta.json +++ b/Resources/Textures/Mobs/Animals/monkey.rsi/meta.json @@ -10,6 +10,14 @@ { "name": "monkey", "directions": 4 - } + }, + { + "name": "dead", + "delays": [ + [ + 1 + ] + ] + } ] } diff --git a/Resources/keybinds.yml b/Resources/keybinds.yml index 897506623c..d78a73a22a 100644 --- a/Resources/keybinds.yml +++ b/Resources/keybinds.yml @@ -183,6 +183,9 @@ binds: - function: OpenCharacterMenu type: State key: C +- function: OpenEmotionsMenu + type: State + key: Y - function: TextCursorSelect # TextCursorSelect HAS to be above ExamineEntity # So that LineEdit receives it correctly.