From 1d052d041098c0dd113a431ad73ddabcfd751384 Mon Sep 17 00:00:00 2001 From: ike709 Date: Fri, 26 Mar 2021 10:23:12 -0500 Subject: [PATCH] Improves the HUD (#3655) * All good except the combat doll * Makes the HUD inventory less terrible * Cleanup, nuke the Combat Mode button * Harm icon * Switch the icon * Basic goon hud * Toggleable * Nuke the popup, properly centers it * Fix clicking the button * Nuke some old code * missed a comment * Remove defaults * Localization * Nuke some old yaml * New sprites Co-authored-by: ike709 --- .../HumanInventoryInterfaceController.cs | 70 +++++++++--- .../Inventory/InventoryInterfaceController.cs | 12 -- .../Components/Mobs/CombatModeComponent.cs | 1 - .../EntitySystems/ClientInventorySystem.cs | 40 +------ .../EntitySystems/CombatModeSystem.cs | 20 ---- Content.Client/Input/ContentContexts.cs | 1 - Content.Client/UserInterface/GameHud.cs | 90 +++++++++------ Content.Client/UserInterface/HandsGui.cs | 107 +----------------- .../UserInterface/OptionsMenu.KeyRebind.cs | 1 - Content.Server/Actions/CombatMode.cs | 28 +++++ Content.Shared/Actions/ActionType.cs | 3 +- Content.Shared/Input/ContentKeyFunctions.cs | 1 - Resources/Locale/en-US/ui/hud.ftl | 5 + Resources/Locale/en-US/ui/options.ftl | 1 - Resources/Prototypes/Actions/actions.yml | 32 ++++-- .../Prototypes/Entities/Mobs/Player/human.yml | 3 +- .../Textures/Interface/Actions/disarm.png | Bin 1183 -> 696 bytes Resources/Textures/Interface/Actions/harm.png | Bin 0 -> 633 bytes .../Textures/Interface/Actions/meta.json | 7 +- .../Textures/Interface/Inventory/back.png | Bin 706 -> 425 bytes .../Textures/Interface/Inventory/belt.png | Bin 636 -> 395 bytes .../Textures/Interface/Inventory/block.png | Bin 0 -> 231 bytes .../Textures/Interface/Inventory/ears.png | Bin 633 -> 419 bytes .../Textures/Interface/Inventory/glasses.png | Bin 656 -> 321 bytes .../Textures/Interface/Inventory/gloves.png | Bin 849 -> 441 bytes .../Textures/Interface/Inventory/hand_l.png | Bin 1191 -> 368 bytes .../Interface/Inventory/hand_l_active.png | Bin 0 -> 418 bytes .../Interface/Inventory/hand_l_no_letter.png | Bin 2573 -> 0 bytes .../Interface/Inventory/hand_middle.png | Bin 2485 -> 0 bytes .../Textures/Interface/Inventory/hand_r.png | Bin 1179 -> 406 bytes .../Interface/Inventory/hand_r_active.png | Bin 0 -> 474 bytes .../Interface/Inventory/hand_r_no_letter.png | Bin 2438 -> 0 bytes .../Textures/Interface/Inventory/head.png | Bin 887 -> 355 bytes Resources/Textures/Interface/Inventory/id.png | Bin 331 -> 364 bytes .../Interface/Inventory/inventory.png | Bin 0 -> 485 bytes .../Textures/Interface/Inventory/mask.png | Bin 722 -> 399 bytes .../Textures/Interface/Inventory/meta.json | 68 +++++++++++ .../Textures/Interface/Inventory/neck.png | Bin 846 -> 426 bytes .../Textures/Interface/Inventory/pocket.png | Bin 585 -> 370 bytes .../Textures/Interface/Inventory/sheet.png | Bin 0 -> 4231 bytes .../Textures/Interface/Inventory/shoes.png | Bin 634 -> 339 bytes .../Textures/Interface/Inventory/suit.png | Bin 762 -> 375 bytes .../Interface/Inventory/suit_storage.png | Bin 991 -> 480 bytes .../Textures/Interface/Inventory/uniform.png | Bin 728 -> 374 bytes Resources/keybinds.yml | 3 - 45 files changed, 245 insertions(+), 248 deletions(-) create mode 100644 Content.Server/Actions/CombatMode.cs create mode 100644 Resources/Locale/en-US/ui/hud.ftl create mode 100644 Resources/Textures/Interface/Actions/harm.png create mode 100644 Resources/Textures/Interface/Inventory/block.png create mode 100644 Resources/Textures/Interface/Inventory/hand_l_active.png delete mode 100644 Resources/Textures/Interface/Inventory/hand_l_no_letter.png delete mode 100644 Resources/Textures/Interface/Inventory/hand_middle.png create mode 100644 Resources/Textures/Interface/Inventory/hand_r_active.png delete mode 100644 Resources/Textures/Interface/Inventory/hand_r_no_letter.png create mode 100644 Resources/Textures/Interface/Inventory/inventory.png create mode 100644 Resources/Textures/Interface/Inventory/meta.json create mode 100644 Resources/Textures/Interface/Inventory/sheet.png diff --git a/Content.Client/GameObjects/Components/HUD/Inventory/HumanInventoryInterfaceController.cs b/Content.Client/GameObjects/Components/HUD/Inventory/HumanInventoryInterfaceController.cs index cd5f49d430..e7336d73f3 100644 --- a/Content.Client/GameObjects/Components/HUD/Inventory/HumanInventoryInterfaceController.cs +++ b/Content.Client/GameObjects/Components/HUD/Inventory/HumanInventoryInterfaceController.cs @@ -27,11 +27,22 @@ namespace Content.Client.GameObjects.Components.HUD.Inventory private ItemSlotButton _hudButtonPocket1 = default!; private ItemSlotButton _hudButtonPocket2 = default!; + private ItemSlotButton _hudButtonShoes = default!; + private ItemSlotButton _hudButtonJumpsuit = default!; + private ItemSlotButton _hudButtonGloves = default!; + private ItemSlotButton _hudButtonNeck = default!; + private ItemSlotButton _hudButtonHead = default!; private ItemSlotButton _hudButtonBelt = default!; private ItemSlotButton _hudButtonBack = default!; + private ItemSlotButton _hudButtonOClothing = default!; private ItemSlotButton _hudButtonId = default!; - private Control _rightQuickButtonsContainer = default!; - private Control _leftQuickButtonsContainer = default!; + private ItemSlotButton _hudButtonMask = default!; + private ItemSlotButton _hudButtonEyes = default!; + private ItemSlotButton _hudButtonEars = default!; + + private Control _topQuickButtonsContainer = default!; + private Control _bottomLeftQuickButtonsContainer = default!; + private Control _bottomRightQuickButtonsContainer = default!; public HumanInventoryInterfaceController(ClientInventoryComponent owner) : base(owner) { @@ -66,28 +77,55 @@ namespace Content.Client.GameObjects.Components.HUD.Inventory AddButton(out _hudButtonPocket1, Slots.POCKET1, "pocket"); AddButton(out _hudButtonPocket2, Slots.POCKET2, "pocket"); - AddButton(out _hudButtonBack, Slots.BACKPACK, "back"); - AddButton(out _hudButtonBelt, Slots.BELT, "belt"); AddButton(out _hudButtonId, Slots.IDCARD, "id"); - _leftQuickButtonsContainer = new HBoxContainer + AddButton(out _hudButtonBack, Slots.BACKPACK, "back"); + + AddButton(out _hudButtonBelt, Slots.BELT, "belt"); + + AddButton(out _hudButtonShoes, Slots.SHOES, "shoes"); + AddButton(out _hudButtonJumpsuit, Slots.INNERCLOTHING, "uniform"); + AddButton(out _hudButtonOClothing, Slots.OUTERCLOTHING, "suit"); + AddButton(out _hudButtonGloves, Slots.GLOVES, "gloves"); + AddButton(out _hudButtonNeck, Slots.NECK, "neck"); + AddButton(out _hudButtonMask, Slots.MASK, "mask"); + AddButton(out _hudButtonEyes, Slots.EYES, "glasses"); + AddButton(out _hudButtonEars, Slots.EARS, "ears"); + AddButton(out _hudButtonHead, Slots.HEAD, "head"); + + _topQuickButtonsContainer = new HBoxContainer { Children = { - _hudButtonId, - _hudButtonBack, - _hudButtonBelt, + _hudButtonShoes, + _hudButtonJumpsuit, + _hudButtonOClothing, + _hudButtonGloves, + _hudButtonNeck, + _hudButtonMask, + _hudButtonEyes, + _hudButtonEars, + _hudButtonHead }, SeparationOverride = 5 }; - _rightQuickButtonsContainer = new HBoxContainer + + _bottomRightQuickButtonsContainer = new HBoxContainer { Children = { _hudButtonPocket1, _hudButtonPocket2, - // keeps this "balanced" with the left, so the hands will appear perfectly in the center - new Control{MinSize = (64, 64)} + _hudButtonId, + }, + SeparationOverride = 5 + }; + _bottomLeftQuickButtonsContainer = new HBoxContainer + { + Children = + { + _hudButtonBelt, + _hudButtonBack }, SeparationOverride = 5 }; @@ -172,8 +210,9 @@ namespace Content.Client.GameObjects.Components.HUD.Inventory { base.PlayerAttached(); - GameHud.RightInventoryQuickButtonContainer.AddChild(_rightQuickButtonsContainer); - GameHud.LeftInventoryQuickButtonContainer.AddChild(_leftQuickButtonsContainer); + GameHud.BottomLeftInventoryQuickButtonContainer.AddChild(_bottomLeftQuickButtonsContainer); + GameHud.BottomRightInventoryQuickButtonContainer.AddChild(_bottomRightQuickButtonsContainer); + GameHud.TopInventoryQuickButtonContainer.AddChild(_topQuickButtonsContainer); // Update all the buttons to make sure they check out. @@ -195,8 +234,9 @@ namespace Content.Client.GameObjects.Components.HUD.Inventory { base.PlayerDetached(); - GameHud.RightInventoryQuickButtonContainer.RemoveChild(_rightQuickButtonsContainer); - GameHud.LeftInventoryQuickButtonContainer.RemoveChild(_leftQuickButtonsContainer); + GameHud.BottomRightInventoryQuickButtonContainer.RemoveChild(_bottomRightQuickButtonsContainer); + GameHud.BottomLeftInventoryQuickButtonContainer.RemoveChild(_bottomLeftQuickButtonsContainer); + GameHud.TopInventoryQuickButtonContainer.RemoveChild(_topQuickButtonsContainer); foreach (var (slot, list) in _inventoryButtons) { diff --git a/Content.Client/GameObjects/Components/HUD/Inventory/InventoryInterfaceController.cs b/Content.Client/GameObjects/Components/HUD/Inventory/InventoryInterfaceController.cs index 265f74547e..4f43b997bc 100644 --- a/Content.Client/GameObjects/Components/HUD/Inventory/InventoryInterfaceController.cs +++ b/Content.Client/GameObjects/Components/HUD/Inventory/InventoryInterfaceController.cs @@ -30,23 +30,11 @@ namespace Content.Client.GameObjects.Components.HUD.Inventory public virtual void PlayerAttached() { GameHud.InventoryButtonVisible = true; - GameHud.InventoryButtonToggled = b => - { - if (b) - { - Window?.Open(); - } - else - { - Window?.Close(); - } - }; } public virtual void PlayerDetached() { GameHud.InventoryButtonVisible = false; - Window?.Close(); } public virtual void Dispose() diff --git a/Content.Client/GameObjects/Components/Mobs/CombatModeComponent.cs b/Content.Client/GameObjects/Components/Mobs/CombatModeComponent.cs index 0f055eb452..927c94594d 100644 --- a/Content.Client/GameObjects/Components/Mobs/CombatModeComponent.cs +++ b/Content.Client/GameObjects/Components/Mobs/CombatModeComponent.cs @@ -58,7 +58,6 @@ namespace Content.Client.GameObjects.Components.Mobs return; } - _gameHud.CombatModeActive = IsInCombatMode; _gameHud.TargetingZone = ActiveZone; } } diff --git a/Content.Client/GameObjects/EntitySystems/ClientInventorySystem.cs b/Content.Client/GameObjects/EntitySystems/ClientInventorySystem.cs index 47036a5ed0..d79d0f6d1f 100644 --- a/Content.Client/GameObjects/EntitySystems/ClientInventorySystem.cs +++ b/Content.Client/GameObjects/EntitySystems/ClientInventorySystem.cs @@ -34,45 +34,7 @@ namespace Content.Client.GameObjects.EntitySystems private void HandleOpenInventoryMenu() { - if (_playerManager.LocalPlayer?.ControlledEntity == null - || !_playerManager.LocalPlayer.ControlledEntity.TryGetComponent(out ClientInventoryComponent? clientInventory)) - { - return; - } - - var menu = clientInventory.InterfaceController.Window; - - if (menu == null) return; - - if (menu.IsOpen) - { - if (menu.IsAtFront()) - { - _setOpenValue(menu, false); - } - else - { - menu.MoveToFront(); - } - } - else - { - _setOpenValue(menu, true); - } - } - - private void _setOpenValue(SS14Window menu, bool value) - { - if (value) - { - _gameHud.InventoryButtonDown = true; - menu.OpenCentered(); - } - else - { - _gameHud.InventoryButtonDown = false; - menu.Close(); - } + _gameHud.InventoryButtonDown = !_gameHud.InventoryButtonDown; } } } diff --git a/Content.Client/GameObjects/EntitySystems/CombatModeSystem.cs b/Content.Client/GameObjects/EntitySystems/CombatModeSystem.cs index 0798517a82..fadc9b28ec 100644 --- a/Content.Client/GameObjects/EntitySystems/CombatModeSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/CombatModeSystem.cs @@ -25,13 +25,7 @@ namespace Content.Client.GameObjects.EntitySystems { base.Initialize(); - _gameHud.OnCombatModeChanged = OnCombatModeChanged; _gameHud.OnTargetingZoneChanged = OnTargetingZoneChanged; - - CommandBinds.Builder - .Bind(ContentKeyFunctions.ToggleCombatMode, - InputCmdHandler.FromDelegate(CombatModeToggled)) - .Register(); } public override void Shutdown() @@ -40,15 +34,6 @@ namespace Content.Client.GameObjects.EntitySystems base.Shutdown(); } - private void CombatModeToggled(ICommonSession? session) - { - if (_gameTiming.IsFirstTimePredicted) - { - EntityManager.RaisePredictiveEvent( - new CombatModeSystemMessages.SetCombatModeActiveMessage(!IsInCombatMode())); - } - } - public bool IsInCombatMode() { var entity = _playerManager.LocalPlayer?.ControlledEntity; @@ -64,10 +49,5 @@ namespace Content.Client.GameObjects.EntitySystems { EntityManager.RaisePredictiveEvent(new CombatModeSystemMessages.SetTargetZoneMessage(obj)); } - - private void OnCombatModeChanged(bool obj) - { - EntityManager.RaisePredictiveEvent(new CombatModeSystemMessages.SetCombatModeActiveMessage(obj)); - } } } diff --git a/Content.Client/Input/ContentContexts.cs b/Content.Client/Input/ContentContexts.cs index 3f0eb27416..b9dc944bb3 100644 --- a/Content.Client/Input/ContentContexts.cs +++ b/Content.Client/Input/ContentContexts.cs @@ -37,7 +37,6 @@ namespace Content.Client.Input human.AddFunction(ContentKeyFunctions.SmartEquipBackpack); human.AddFunction(ContentKeyFunctions.SmartEquipBelt); human.AddFunction(ContentKeyFunctions.MouseMiddle); - human.AddFunction(ContentKeyFunctions.ToggleCombatMode); human.AddFunction(ContentKeyFunctions.WideAttack); human.AddFunction(ContentKeyFunctions.ArcadeUp); human.AddFunction(ContentKeyFunctions.ArcadeDown); diff --git a/Content.Client/UserInterface/GameHud.cs b/Content.Client/UserInterface/GameHud.cs index 7857327b89..bba6f20f47 100644 --- a/Content.Client/UserInterface/GameHud.cs +++ b/Content.Client/UserInterface/GameHud.cs @@ -7,7 +7,6 @@ using Content.Shared.Input; using Robust.Client.Graphics; using Robust.Client.Input; using Robust.Client.ResourceManagement; -using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; using Robust.Shared.Input; using Robust.Shared.Input.Binding; @@ -40,7 +39,6 @@ namespace Content.Client.UserInterface // Inventory top button. bool InventoryButtonDown { get; set; } bool InventoryButtonVisible { get; set; } - Action? InventoryButtonToggled { get; set; } // Crafting top button. bool CraftingButtonDown { get; set; } @@ -64,13 +62,12 @@ namespace Content.Client.UserInterface Control HandsContainer { get; } Control SuspicionContainer { get; } - Control RightInventoryQuickButtonContainer { get; } - Control LeftInventoryQuickButtonContainer { get; } + Control BottomLeftInventoryQuickButtonContainer { get; } + Control BottomRightInventoryQuickButtonContainer { get; } + Control TopInventoryQuickButtonContainer { get; } bool CombatPanelVisible { get; set; } - bool CombatModeActive { get; set; } TargetingZone TargetingZone { get; set; } - Action? OnCombatModeChanged { get; set; } Action? OnTargetingZoneChanged { get; set; } Control VoteContainer { get; } @@ -94,7 +91,6 @@ namespace Content.Client.UserInterface private TopButton _buttonSandboxMenu = default!; private InfoWindow _infoWindow = default!; private TargetingDoll _targetingDoll = default!; - private Button _combatModeButton = default!; private VBoxContainer _combatPanelContainer = default!; private VBoxContainer _topNotificationContainer = default!; @@ -103,8 +99,9 @@ namespace Content.Client.UserInterface public Control HandsContainer { get; private set; } = default!; public Control SuspicionContainer { get; private set; } = default!; - public Control RightInventoryQuickButtonContainer { get; private set; } = default!; - public Control LeftInventoryQuickButtonContainer { get; private set; } = default!; + public Control TopInventoryQuickButtonContainer { get; private set; } = default!; + public Control BottomLeftInventoryQuickButtonContainer { get; private set; } = default!; + public Control BottomRightInventoryQuickButtonContainer { get; private set; } = default!; public bool CombatPanelVisible { @@ -112,19 +109,11 @@ namespace Content.Client.UserInterface set => _combatPanelContainer.Visible = value; } - public bool CombatModeActive - { - get => _combatModeButton.Pressed; - set => _combatModeButton.Pressed = value; - } - public TargetingZone TargetingZone { get => _targetingDoll.ActiveZone; set => _targetingDoll.ActiveZone = value; } - - public Action? OnCombatModeChanged { get; set; } public Action? OnTargetingZoneChanged { get; set; } public void AddTopNotification(TopNotification notification) @@ -196,7 +185,7 @@ namespace Content.Client.UserInterface _topButtonsContainer.AddChild(_buttonInventoryMenu); - _buttonInventoryMenu.OnToggled += args => InventoryButtonToggled?.Invoke(args.Pressed); + _buttonInventoryMenu.OnToggled += args => InventoryButtonDown = args.Pressed; // Crafting _buttonCraftingMenu = new TopButton(craftingTexture, ContentKeyFunctions.OpenCraftingMenu, _inputManager) @@ -272,13 +261,10 @@ namespace Content.Client.UserInterface _combatPanelContainer = new VBoxContainer { + HorizontalAlignment = Control.HAlignment.Left, + VerticalAlignment = Control.VAlignment.Bottom, Children = { - (_combatModeButton = new Button - { - Text = Loc.GetString("Combat Mode"), - ToggleMode = true - }), (_targetingDoll = new TargetingDoll(_resourceCache)) } }; @@ -287,14 +273,13 @@ namespace Content.Client.UserInterface LC.SetGrowVertical(_combatPanelContainer, LC.GrowDirection.Begin); LC.SetAnchorAndMarginPreset(_combatPanelContainer, LC.LayoutPreset.BottomRight); LC.SetMarginBottom(_combatPanelContainer, -10f); - RootControl.AddChild(_combatPanelContainer); - _combatModeButton.OnToggled += args => OnCombatModeChanged?.Invoke(args.Pressed); _targetingDoll.OnZoneChanged += args => OnTargetingZoneChanged?.Invoke(args); - var centerBottomContainer = new HBoxContainer + var centerBottomContainer = new VBoxContainer { - SeparationOverride = 5 + SeparationOverride = 5, + HorizontalAlignment = Control.HAlignment.Center }; LC.SetAnchorAndMarginPreset(centerBottomContainer, LC.LayoutPreset.CenterBottom); LC.SetGrowHorizontal(centerBottomContainer, LC.GrowDirection.Both); @@ -305,24 +290,57 @@ namespace Content.Client.UserInterface HandsContainer = new Control { VerticalAlignment = Control.VAlignment.Bottom, + HorizontalAlignment = Control.HAlignment.Center }; - RightInventoryQuickButtonContainer = new Control + BottomRightInventoryQuickButtonContainer = new HBoxContainer() { VerticalAlignment = Control.VAlignment.Bottom, + HorizontalAlignment = Control.HAlignment.Right }; - LeftInventoryQuickButtonContainer = new Control + BottomLeftInventoryQuickButtonContainer = new HBoxContainer() { VerticalAlignment = Control.VAlignment.Bottom, + HorizontalAlignment = Control.HAlignment.Left }; - centerBottomContainer.AddChild(LeftInventoryQuickButtonContainer); - centerBottomContainer.AddChild(HandsContainer); - centerBottomContainer.AddChild(RightInventoryQuickButtonContainer); + TopInventoryQuickButtonContainer = new HBoxContainer() + { + Visible = false, + VerticalAlignment = Control.VAlignment.Bottom, + HorizontalAlignment = Control.HAlignment.Center + }; + var bottomRow = new HBoxContainer() + { + HorizontalAlignment = Control.HAlignment.Center + + }; + bottomRow.AddChild(new Control {MinSize = (69, 0)}); //Padding (nice) + bottomRow.AddChild(BottomLeftInventoryQuickButtonContainer); + bottomRow.AddChild(HandsContainer); + bottomRow.AddChild(BottomRightInventoryQuickButtonContainer); + bottomRow.AddChild(new Control {MinSize = (1, 0)}); //Padding + + + centerBottomContainer.AddChild(TopInventoryQuickButtonContainer); + centerBottomContainer.AddChild(bottomRow); SuspicionContainer = new Control { HorizontalAlignment = Control.HAlignment.Center }; + var rightBottomContainer = new HBoxContainer + { + SeparationOverride = 5 + }; + LC.SetAnchorAndMarginPreset(rightBottomContainer, LC.LayoutPreset.BottomRight); + LC.SetGrowHorizontal(rightBottomContainer, LC.GrowDirection.Begin); + LC.SetGrowVertical(rightBottomContainer, LC.GrowDirection.Begin); + LC.SetMarginBottom(rightBottomContainer, -10f); + LC.SetMarginRight(rightBottomContainer, -10f); + RootControl.AddChild(rightBottomContainer); + + rightBottomContainer.AddChild(_combatPanelContainer); + RootControl.AddChild(SuspicionContainer); LC.SetAnchorAndMarginPreset(SuspicionContainer, LC.LayoutPreset.BottomLeft, @@ -398,7 +416,11 @@ namespace Content.Client.UserInterface public bool InventoryButtonDown { get => _buttonInventoryMenu.Pressed; - set => _buttonInventoryMenu.Pressed = value; + set + { + TopInventoryQuickButtonContainer.Visible = value; + _buttonInventoryMenu.Pressed = value; + } } public bool InventoryButtonVisible @@ -407,8 +429,6 @@ namespace Content.Client.UserInterface set => _buttonInventoryMenu.Visible = value; } - public Action? InventoryButtonToggled { get; set; } - public bool CraftingButtonDown { get => _buttonCraftingMenu.Pressed; diff --git a/Content.Client/UserInterface/HandsGui.cs b/Content.Client/UserInterface/HandsGui.cs index b90ff28dfa..8d35536137 100644 --- a/Content.Client/UserInterface/HandsGui.cs +++ b/Content.Client/UserInterface/HandsGui.cs @@ -26,16 +26,12 @@ namespace Content.Client.UserInterface private readonly Texture _middleHandTexture; private readonly Texture _rightHandTexture; - private readonly ItemStatusPanel _leftPanel; private readonly ItemStatusPanel _topPanel; - private readonly ItemStatusPanel _rightPanel; private readonly HBoxContainer _guiContainer; private readonly VBoxContainer _handsColumn; private readonly HBoxContainer _handsContainer; - private int _lastHands; - public HandsGui() { IoCManager.InjectDependencies(this); @@ -43,18 +39,17 @@ namespace Content.Client.UserInterface AddChild(_guiContainer = new HBoxContainer { SeparationOverride = 0, + HorizontalAlignment = HAlignment.Center, Children = { - (_rightPanel = ItemStatusPanel.FromSide(HandLocation.Right)), (_handsColumn = new VBoxContainer { Children = { (_topPanel = ItemStatusPanel.FromSide(HandLocation.Middle)), - (_handsContainer = new HBoxContainer()) + (_handsContainer = new HBoxContainer{HorizontalAlignment = HAlignment.Center}) } }), - (_leftPanel = ItemStatusPanel.FromSide(HandLocation.Left)) } }); _leftHandTexture = _resourceCache.GetTexture("/Textures/Interface/Inventory/hand_l.png"); @@ -62,17 +57,6 @@ namespace Content.Client.UserInterface _rightHandTexture = _resourceCache.GetTexture("/Textures/Interface/Inventory/hand_r.png"); } - private ItemStatusPanel GetItemPanel(Hand hand) - { - return hand.Location switch - { - HandLocation.Left => _rightPanel, - HandLocation.Middle => _topPanel, - HandLocation.Right => _leftPanel, - _ => throw new IndexOutOfRangeException() - }; - } - private Texture HandTexture(HandLocation location) { switch (location) @@ -167,8 +151,6 @@ namespace Content.Client.UserInterface hand.Button!.SetActiveHand(component.ActiveIndex == hand.Name); } - _leftPanel.SetPositionFirst(); - _rightPanel.SetPositionLast(); } private void HandKeyBindDown(GUIBoundKeyEventArgs args, string slotName) @@ -240,90 +222,7 @@ namespace Content.Client.UserInterface _itemSlotManager.UpdateCooldown(hand.Button, hand.Entity); } - switch (component.Hands.Count) - { - case var n when n == 0 && _lastHands != 0: - _guiContainer.Visible = false; - - _topPanel.Update(null); - _leftPanel.Update(null); - _rightPanel.Update(null); - - break; - case 1: - if (_lastHands != 1) - { - _guiContainer.Visible = true; - - _topPanel.Update(null); - _topPanel.Visible = false; - - _leftPanel.Update(null); - _leftPanel.Visible = false; - - _rightPanel.Visible = true; - - if (!_guiContainer.Children.Contains(_rightPanel)) - { - _rightPanel.AddChild(_rightPanel); - _rightPanel.SetPositionFirst(); - } - } - - _rightPanel.Update(component.Hands[0].Entity); - - break; - case 2: - if (_lastHands != 2) - { - _guiContainer.Visible = true; - _topPanel.Update(null); - _topPanel.Visible = false; - - _leftPanel.Visible = true; - _rightPanel.Visible = true; - - if (_handsColumn.Children.Contains(_topPanel)) - { - _handsColumn.RemoveChild(_topPanel); - } - } - - _leftPanel.Update(component.Hands[0].Entity); - _rightPanel.Update(component.Hands[1].Entity); - - // Order is left, right - foreach (var hand in component.Hands) - { - var tooltip = GetItemPanel(hand); - tooltip.Update(hand.Entity); - } - - break; - case var n when n > 2: - if (_lastHands <= 2) - { - _guiContainer.Visible = true; - - _topPanel.Visible = true; - _leftPanel.Visible = false; - _rightPanel.Visible = false; - - if (!_handsColumn.Children.Contains(_topPanel)) - { - _handsColumn.AddChild(_topPanel); - _topPanel.SetPositionFirst(); - } - } - - _topPanel.Update(component.ActiveHand); - _leftPanel.Update(null); - _rightPanel.Update(null); - - break; - } - - _lastHands = component.Hands.Count; + _topPanel.Update(component.GetEntity(component.ActiveIndex)); } protected override void FrameUpdate(FrameEventArgs args) diff --git a/Content.Client/UserInterface/OptionsMenu.KeyRebind.cs b/Content.Client/UserInterface/OptionsMenu.KeyRebind.cs index 5bd58a2f32..8cb3e82e9b 100644 --- a/Content.Client/UserInterface/OptionsMenu.KeyRebind.cs +++ b/Content.Client/UserInterface/OptionsMenu.KeyRebind.cs @@ -129,7 +129,6 @@ namespace Content.Client.UserInterface AddButton(ContentKeyFunctions.Drop); AddButton(ContentKeyFunctions.ExamineEntity); AddButton(ContentKeyFunctions.SwapHands); - AddButton(ContentKeyFunctions.ToggleCombatMode); AddHeader("ui-options-header-interaction-adv"); AddButton(ContentKeyFunctions.SmartEquipBackpack); diff --git a/Content.Server/Actions/CombatMode.cs b/Content.Server/Actions/CombatMode.cs new file mode 100644 index 0000000000..4c3d5fca24 --- /dev/null +++ b/Content.Server/Actions/CombatMode.cs @@ -0,0 +1,28 @@ +#nullable enable +using Content.Server.GameObjects.Components.Mobs; +using Content.Shared.Actions; +using Content.Shared.Interfaces; +using JetBrains.Annotations; +using Robust.Shared.Localization; +using Robust.Shared.Serialization.Manager.Attributes; + +namespace Content.Server.Actions +{ + [UsedImplicitly] + [DataDefinition] + public class CombatMode : IToggleAction + { + public bool DoToggleAction(ToggleActionEventArgs args) + { + if (!args.Performer.TryGetComponent(out CombatModeComponent? combatMode)) + { + return false; + } + + args.Performer.PopupMessage(args.ToggledOn ? Loc.GetString("hud-combat-enabled") : Loc.GetString("hud-combat-disabled")); + combatMode.IsInCombatMode = args.ToggledOn; + + return true; + } + } +} diff --git a/Content.Shared/Actions/ActionType.cs b/Content.Shared/Actions/ActionType.cs index 78fb858c8d..dec3ae5494 100644 --- a/Content.Shared/Actions/ActionType.cs +++ b/Content.Shared/Actions/ActionType.cs @@ -7,8 +7,9 @@ namespace Content.Shared.Actions public enum ActionType : byte { Error, - HumanScream, + CombatMode, Disarm, + HumanScream, GhostBoo, DebugInstant, DebugToggle, diff --git a/Content.Shared/Input/ContentKeyFunctions.cs b/Content.Shared/Input/ContentKeyFunctions.cs index c5ab6bd091..73dbd1356e 100644 --- a/Content.Shared/Input/ContentKeyFunctions.cs +++ b/Content.Shared/Input/ContentKeyFunctions.cs @@ -26,7 +26,6 @@ namespace Content.Shared.Input public static readonly BoundKeyFunction TryPullObject = "TryPullObject"; public static readonly BoundKeyFunction MovePulledObject = "MovePulledObject"; public static readonly BoundKeyFunction ReleasePulledObject = "ReleasePulledObject"; - public static readonly BoundKeyFunction ToggleCombatMode = "ToggleCombatMode"; public static readonly BoundKeyFunction MouseMiddle = "MouseMiddle"; public static readonly BoundKeyFunction OpenEntitySpawnWindow = "OpenEntitySpawnWindow"; public static readonly BoundKeyFunction OpenSandboxWindow = "OpenSandboxWindow"; diff --git a/Resources/Locale/en-US/ui/hud.ftl b/Resources/Locale/en-US/ui/hud.ftl new file mode 100644 index 0000000000..bfacb5623d --- /dev/null +++ b/Resources/Locale/en-US/ui/hud.ftl @@ -0,0 +1,5 @@ +### HUD stuff + +## Combat mode +hud-combat-enabled = Combat mode enabled! +hud-combat-disabled = Combat mode disabled. diff --git a/Resources/Locale/en-US/ui/options.ftl b/Resources/Locale/en-US/ui/options.ftl index c2490c0320..f997e9e431 100644 --- a/Resources/Locale/en-US/ui/options.ftl +++ b/Resources/Locale/en-US/ui/options.ftl @@ -63,7 +63,6 @@ ui-options-function-activate-item-in-world = Activate item in world ui-options-function-drop = Drop item ui-options-function-examine-entity = Examine ui-options-function-swap-hands = Swap hands -ui-options-function-toggle-combat-mode = Toggle combat mode ui-options-function-smart-equip-backpack = Smart-equip to backpack ui-options-function-smart-equip-belt = Smart-equip to belt diff --git a/Resources/Prototypes/Actions/actions.yml b/Resources/Prototypes/Actions/actions.yml index 09ad922719..1442f13b9a 100644 --- a/Resources/Prototypes/Actions/actions.yml +++ b/Resources/Prototypes/Actions/actions.yml @@ -1,4 +1,25 @@ - type: action + actionType: CombatMode + icon: Interface/Actions/harm.png + name: "[color=red]Combat Mode[/color]" + description: "Enter combat mode." + filters: + - human + behaviorType: Toggle + behavior: !type:CombatMode + +- type: action + actionType: Disarm + icon: Interface/Actions/disarm.png + name: "[color=red]Disarm[/color]" + description: "Attempt to [color=red]disarm[/color] someone." + filters: + - human + behaviorType: TargetEntity + repeat: true + behavior: !type:DisarmAction { } + +- type: action actionType: HumanScream icon: Interface/Actions/scream.png name: "Scream" @@ -22,17 +43,6 @@ - /Audio/Voice/Human/femalescream_5.ogg wilhelm: /Audio/Voice/Human/wilhelm_scream.ogg -- type: action - actionType: Disarm - icon: Interface/Actions/disarm.png - name: "[color=red]Disarm[/color]" - description: "Attempt to [color=red]disarm[/color] someone." - filters: - - human - behaviorType: TargetEntity - repeat: true - behavior: !type:DisarmAction { } - - type: action actionType: GhostBoo icon: Interface/Actions/scream.png diff --git a/Resources/Prototypes/Entities/Mobs/Player/human.yml b/Resources/Prototypes/Entities/Mobs/Player/human.yml index 1911dae349..7755236fb0 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/human.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/human.yml @@ -14,8 +14,9 @@ - type: Alerts - type: Actions innateActions: - - HumanScream + - CombatMode - Disarm + - HumanScream - type: Eye zoom: 0.5, 0.5 - type: CameraRecoil diff --git a/Resources/Textures/Interface/Actions/disarm.png b/Resources/Textures/Interface/Actions/disarm.png index f1efa1df685d057446ac1616a0040aadff7308ef..ddedb404ee5e521ce1642eb1f82f787ce75982b1 100644 GIT binary patch delta 672 zcmV;R0$=@~3AhE2B!3BTNLh0L05#MA05#MBUS;J70007NNklk+zh?_Dfyl4!FPIqTHi&M$c5%zv6*UUTws^}zsubAR)uvJqF+PTI+zKSSB!AkHBG*}*PyPNsu=;`p<1 z5m7X2Wq}SUX9iqdT-Ois<5O!LN(OwviNbIyS7oZZFT8d^Rqc$cuKwp(< z<)%g>xJ30jh#@89xPLB`t{R*A!gdxI1$5nJUALQ# zE)gvOeXdep6vZDUwo`yD#Xj}4#i3_N2uJHE<|*U9ZFUZRY4QK*#N?o(H~@ezzkZ%X zmV2%2rO>1aet-QI$P9qZbR?!p6NoHFJs&Ce1x-NQPBuOp>V6{26a!znJWt*n;g;4P_;7cPwP6h%4Ipq}iKk@_tE^FfqYKBzC%JmF zIDYh&Rd=szP>`46d!rgM079!#hj1LsFRZZQ&K5lIenvzfA~fqY2;p3jfYjNx%oa!p z2*(BhEG>W17d)SP%|qcE00CyB4iW-O>HF_rhJSmd9FI)I{KRr>8;;`)1n!WQ00}Ug zu3ALY-6=;Quv^^b+ATM$>*pu>?Cb(_Y|Fj>q1MhD5?H*q#)t$YNy1LHKZ(8sWW~+R z+S_COqq#H#05_3_mz9eSkmHhFO5bPH?iV}RmpvqU2$TvLe&gnCqw%h)2U{o+`BgCt zoqyUL!!!5V2-HWw9s*v;I_+fZYzTmWo$RYiKe0rBS+5~jdfCh-7mkDFwT+(q=^=1h ztN(g-a;V$3h1~X^K3IBngOP9mB4oEV`;y3JHaQ6gLO4hVN_1uY0b5@CtZ(x6G@|yi ztnbq-z1kZ=&{ozTjPxW6T9*P9^ORT2Q-6NgIPxPrZ2T9PA9d~ZTPwFtc*Uyna_huj zJE&E7a2!Yg0OFx3mW<3W&#BaY{gj)>JQlsFnG}wQ}>geO^XQd)umfUGL0SXExJs$5nT?-(lPDNlr_S%1(E zwM*cl-;tkWiSgSk5uRp28A%Z0V=)#Vi!l<^Sqn||M4F7;>6;&21f)QnU+j9G>?tko zlL#v2&AqWl!2#A)1w@33dCG<3AQ_oqE)n-jmeLY_R4FaqwHKTZ8ZVyng9fhmui3T# dIlXrKA7;8;$q=w;B>(^b07*qoL`-5ceVrkF**S7@-RKko&Hq= zhvJCU$F|c0fVtC0D2~{T{Hp}_(g<^>j}?F}34a?r5V5tc9IIzzFc=Ksx?=!9k{pod zS-Iw=5q2XV3un@(t3%hgT7Vp?|AA^Yfrzo(uPeHP!O-a2ssbF;Y|&yHS`kQ+LnV;! zKh|`X`!!zgo^ZQ;!;NIuv;~a>D9a={0H|*P1zI>0AkTp5b4h@7O(cv2 zM#x8gtuk`uI1(%YIk@al=WM45PNa#1>y8mc?=>BE3UnEB&;{2)HxX822>fKPI?|P$ zv(+Wl*n~QVL_&6G3XiNydDHt8Ovc7EvYg51(x0Tz1J&5Et9{u;y2!V(Zh!|cPm20Yu^k|*rIv5Y4(y(~4 z&z*kx_6rbWQRt~MdSwTQ5sKrt-8lqw-wL|dFUg1qP`njIT>f$}-USP1QgLdMh2mHv zr|PvP&<5vzS9Ad2b2dBKu)QP#5#xTd>68^Pb?T)d$LawnJN2A*{aGlcQ0( z!}YrcVBxR;k~pg!*L!)f>*d5D-&yTzD*(s!xL!`2e~vE&2!A#)Nu1Sf2)h})x;Vh` zJI8T7k~pjH0OpD=#L8r`@2`oX5P<#u>n4|`TL6lpM2JcW5o}_>P=TiSvvb;Eq(D)W za_sx-hq=iC+S2Pp6opz_0UBFiTD%R>RcRE!nBpdDXSd@qLR(4a)Oo(qbQUhFzgId*9`VRpN;ySekiB1;-CWECux*; zG`BCO+J?nl@DK3b0ApXVCifTw(0QGzLUj-27CfWEBuB9j)y>hWTUb{;?N71>Wa_Zt z?~kSVN}W4wfJ45smV%H?I48vCMLT$A{1bwl_UIP2UjP6A07*qoM6N<$ Ef~|zT3IG5A literal 706 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dy#{zspTn`*LASNcIuCA-0uB)l3 zudSu0t!-?kZf<5~V{T?+VPR)!ZfkGi<`|vt6jR_7TO=wf2~@A5qG28oZxNVa8JK7p zlxQ82Y7?4f6P95co@pDAX&0Vl7m;NbnPnfDZ6B3wAD!(GndcCd=MbIe7?lq)D!Kq{ z8puHBxMJtDLYMdw*Mw5H#0s~h3h%sH?}A$I!dma5TA#u?pTY*8qB`G#M*o6l|H5Yf zqE`RnX8)4bfWo%Gg7(0|_Q0Zc4f$_fKp#1k1o;Isd_e_&NCxs|la??rFlKtXIEGmG zubq6msL4Q}P1JL-(ArZMHQbgawNxo>3C&u)@4t7crV&f@@$PTC6KDMW%)2{BYwG_6 zRg=B{K2*DEbK&n)r3-IO8>{wC3}k<>_qs0As#O}MEyV%8fg+((nF^wmFaIn)R^w%I z!6dc0=|j%2r=9p*5dz#H>{+$~}XLU_Bn)+&&g^MU_KImW-4rIxdTXvEC4L)ay`YgvQcfmUrv^ h&h0M#{_5{UegANm$2&c31%Oe=;OXk;vd$@?2>@hQI!FKj diff --git a/Resources/Textures/Interface/Inventory/belt.png b/Resources/Textures/Interface/Inventory/belt.png index 43b7816b64513731fd2387856b1b7145d376f2be..7998bc964e2ed2633932c7a0f04d0301931b2155 100644 GIT binary patch delta 379 zcmV->0fhei1d9WZ8Gi-<0047(dh`GQ010qNS#tmYHPiqAHPiuKW#tF}00BKoL_t(o zh3%KIi-Rx}#y^iP4sz&H(dIu04h1Lw{!WDs;&8iXFD@R3gK&#Cl!W*iEg3X7_<6cliFfuYU@VoH#OGj5@@d?5v#} z0Pdd^{2)Tci}49yD^ZBe0dxpw0J?U79l$xj!FE9$AHi5^oU7{wLbO)#tQ=TM4gid$ zh~uLbfN~(u&$BPdoyp{;ok}>yQV7w$gl)cl0n9jXz1}7*4J1U1JU>q!3MAK*<;SF@ zG6F~&ZS6EE40MA@OJ)2BCB1Gr1(fdSW4h|PQAeW3ngyT%P11udRRZuhrlpEVP8@(` z6$sHjxj~cLmZ9}M@M>qaa()x;06W0{02umCT?|eD%Ie~|f>1}WB}Dk1sJ=%hUH+&# Z(H{-Zi(ETjeHj1%002ovPDHLkV1m51q+kF5 literal 636 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dy=L38~Tn`*LASNcIuCA-0uB)k` zr>Uv0rJ<*#sjm%0+Qz!t`ntNtdU_`Mx`z6CCWfl!hH7R;s^&&&W~S=qW@a|#W;Pb) zwiXt4mKJtambTWKW_C6XjwWu7rmjw=t}bS7UKXyRqLM%>B*dj9C8eb#r4=OP6_gYe zm6eqw6qM9dRa7)=LNn~bv+N^s?IUv?BJ&)h@||LeoMVe!;!0dIid{2{-LuL)b1J>^ zYP<_-ee&yk3W2D>r>Ma%zsawlDWI?|pr|dds6DW_UA;-=BhYKEB|(0{3||OEh6%Lb-pCqkq23^QhhIsf{1{z;Q(vvJ~u zgOcax`)ywyUw&C-@=xwf?i0_Sc0Z}bD0z`-)>fV~6U4a0)%aSj^>+UE$hhY<>sU+7 z#-P>l%wMCH&iFm=!QF$|Z|~WB_|Eb_gC^*y8 z#W5tJ_3d>-uEPdAtq<=n>}C&sb@2(uG4T^WiyI#(PwCNAb#^P);8mNOt6MdB0$c3@ zPX!s~36Db7d_Fr}_V=+#>A~Og7_L?J)js|jH=F5@glD0aY0?kTwbPl`obM@}C$jt# z`-`dCi>w#8buhltaA4#LXkZdqz`zP*GS}EoGjOv!FezQR)x!UR@W&nPo6W8-e6m<; a5`QC?X=;P4i{F#t4M7)7ZWEP@|fssx|t^>+}18$|>g7FFe zpYLp+0UVnL09jfLeh_Xh)^{zg)!Ebg4glZ>A^NVx{p+?VK!1Enk)_3;L%gZR*5Uwg z`>fyxA+od>9su?-6JmD&9l{xaZil5GFcu+6j^n!!HKc4-11ySwDGmThas=l&7>iZ` zkRzbP^%?6x>bW!;Bmgx#Gu%=(kg^#;)<8T3FvG6eI*iR4AVolkdNTJ)d}?h_p`HTF z%~GXhZeda(R)3!ZYH(9rhoI~XtAl7xoa(m*c!m7~{A~asYAZh(fb$%j=MVi-HnSqs zDrud9DTpN{nsgMG$5wK{vQAjTBz3GwkBk8RI%y8KafV&80|tJtPva}D+Y0000Uv04MbXc+SgJ{zW@bQSW@BzgrT2%lY3V8|DhaegMMc9dJj*^j+dd-KAu`V~D&Hx( zz&WLzL=37hEn;-W?MQ+QT%inid z!fC%?=j5kGou1Wv(N2@!`YFwNZZc~J@6$;FXUw-SxM;jclgr>(H=Xg*sz)3%pMT>_ zab#TGweeMlgZL8ng2hah2IpE?yHA92IyyBLH`o@06)x~xAn+zrkKusb%{U8#`VFE? zk=NS3Z%Wyk=qu7x8Xv#$|BrvE?tMQ)RDXPYE$!uO8F2VS-IQ1p248WzNbkepnvZXl zPhe?~KluFD^eLtt7Slh9pN+o~>mYl6{;^s2RnAL(a+b~iT+MQ%xuE2y7w=|YHJ%xz zKfT1S-I)CNN$JnMowHO|hZ?>9RBc>oc}cwG!gZ}2&XvXsO#a?~bvNQ(^y~lZ$|t>d U<~}~N5f~{9p00i_>zopr0GCu1HUIzs diff --git a/Resources/Textures/Interface/Inventory/glasses.png b/Resources/Textures/Interface/Inventory/glasses.png index 936e57e454c72ba561366017ebdbd58464c7484c..30540d14f7dc6b1c7dc315c33dd589070db4959b 100644 GIT binary patch delta 305 zcmV-10nYxA1;GN48Gi-<0047(dh`GQ010qNS#tmYHPiqAHPiuKW#tF}008qzL_t(o zh3(g|3WG2d1<kgk6|fx_ z5lzMqz)>Y54hM(`WdN}>Km#;D1FW@>vG{GCW!J?_&i?|Cix3ZCctKfKtN9k#CP34) zXqpxPW;fzFA>Oo(5D$#Si-^^4KAEPg=M0V?t$HB=#{BRCRqKKawwkVBOhRVDQV#Lao{y0vqG00000NkvXXu0mjf D8JU6e literal 656 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyZv%WnTn`*LASNcIuCA-0uB)k` zr>Uv0rJ<*#sjm%0T6)^r#yZ;iy4w1BDrWks<_2nJhN|YqYGx)HW~LfuW~Tja}_cT^&r^986su&D@;L++2Xj z+|}LO&Ckls&&E|$R1)Y66%`E=uLu+GC{v$kbH7+~|9Fdl1k1ogtDq#SpcL!iRO^sb zn~*e{ungO}C~OPNYY!}J z4=idA%InC!*IfeixPM8IUogWL62KpV;KQ!QzYGkF%$_ceAr_~vPQDp-$UvYidQ!-S z4(_ZONf#o-T{PEi?Pxfb+td2JUS>6`e{9g6r@MdV|NA`m%$%Oon>!<>?VZv6H;|)e zN$Y~gk}p^?8#f-BZ(ycbA80Ot%E{wUZ=s9KjDZZ1pRoLy;|3A3k!?HFr;|qNM%Bzg~%CG(0&-{L!_w=8c S*15otX7F_Nb6Mw<&;$S}-65d> diff --git a/Resources/Textures/Interface/Inventory/gloves.png b/Resources/Textures/Interface/Inventory/gloves.png index c25c9db374429b0a7905a13d2cc908a68fc6378d..6878ddab40cceb33c39446726d56e8012b456fd1 100644 GIT binary patch delta 426 zcmV;b0agCd2Dt-}8Gi-<0047(dh`GQ010qNS#tmYHPiqAHPiuKW#tF}00C=BL_t(o zg~gY#Zi6rsMK7oe1FFh`1@RwP43U`l{!EcNMErqEWR^r#hKzJ*9XZrCwh3@2i$ppn zetypZ*fH=M9j>k{y@G`|ZiX}|92A;>V2|krc0UcO{g+SGKmmuVq z+B(EbK!y9v2;1!$bO<@`oJ3r%ZZ83O`c=4Ej*wv#d>QHBKI2=)sSDKTwsg+FByRzo zglSf|NCgQ@0ep5N27cdIiXEHd5}X(SPVFJuO5)K4Ya>d0ycdskH2!eQ7u8Mj14v!a U@!=yk0RR9107*qoM6N<$f|rc5`v3p{ literal 849 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyKLdP1Tn`*LASNcIuCA*AL>hXU zK%}X!rKztCL|S^0;iZF zr<6SB)O_c(LYIspR}d<8%`A4yEb+;&^T}`UDXjA;Z1Bx*^et%gEo$^HX!S2_4Jc>} zC~ONXXb&uG4=idADrnWz5v>9SLQqMNUogWLlEEMR;BC$IM+^*%TRmMILoEDzCr3Lk zHV|lyR*EQze$O&nFLuwBs_ogPk$0S84o>qj{P_RBgt~_Ambh;=E$ziW+GZ+F_4?`^ zs&)0MerRapzvWfjU-F~ozgYHP%z%ftrDVy}REhVEV#jWj-RXOMW5<#(zlQ6+-9}k6 zt0WCoZ@euQ<8yxheWA0R$`u_kFGc0~f1}nfbZvSY^dY`whRx46dwj(>ezl2rimP_~ zxobN88RwGO>y;aH7K>xG`!IZO6gdR$I8FYlCeCRx!r?W$MHI&rl% zyFv=iZ|S*#7^Fbh+0ScSo(zdhX)Yj#{moHakog;rJk0wfCiJ z;XCI}HZ38MW;Mfh&lNljezGx28Ci2;oLG*jsvWG8%}iw~(|g}$INfMh{e+eEP9J0( zFJJ#>Q#7;fU)+Rc&Azd-)f1l2xTx}_N}T81J0(Zwty||$dH2VlTw`~xNclu%gUsFQ zoI8FU7FAG>kv7)VPk-+9ZO6O+_pknb_NlJ?Z#?6l*4o7mYg$(UlLv#RtDnm{r-UW| D+Y)qX diff --git a/Resources/Textures/Interface/Inventory/hand_l.png b/Resources/Textures/Interface/Inventory/hand_l.png index c760ae8ee838809a152becda25fa4cae673c42a6..3ee9d5702e889f81e607c381d75da153a836d536 100644 GIT binary patch delta 352 zcmV-m0iXV-3Gf1t8Gi-<0047(dh`GQ010qNS#tmYHPiqAHPiuKW#tF}00AONL_t(o zh2@vA4uUWgMK8vMff!jNsDIEfm@x7EP9_e9Kd2a7FouBmtuz<$3S%n6CF2u$Ta1k&_?G(9NSmbT%i(|L6LKUy%BSy~W9o56PD zyg*sr?Fy*CB4U0@!bo5Y+?SXV(0&J~aB8#!=7wttn7}zN<`IzLl!uD@D7!$b1)LWo z5h|Q4P?q-rTv=`hwJOE}a#V03XcF>wKvhzmQhzL|8`QPw21e&@+ yykqVJF8R@OCDFCun-c3)+>O2dqRWG-le_>z0gfJ-P}*$(0000=9t0& literal 1191 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 diff --git a/Resources/Textures/Interface/Inventory/hand_r.png b/Resources/Textures/Interface/Inventory/hand_r.png index b3385441318dcf99d7fb2276a30d3e4b0c8094b4..9f2c68aba29394f3658f4b73131b14ec37ee4bd7 100644 GIT binary patch delta 390 zcmV;10eSwL36=wp8Gi-<0047(dh`GQ010qNS#tmYHPiqAHPiuKW#tF}00BrzL_t(o zh0T|}i-Ry2#ve-;2RY8AqRrkRWGFcK_jeLH1c&Z9i(Nd5gQJ}yxt?B=nwWd1ml$|{ zJnu&k@EidEFj@>@6gwB|yB54U1?t%r0KzCn-?jL@U!4M^dw&W>i$R6h$i%fc09?N+ zgi#Dei$R`kr!MCCam}%!1)D)WY)x02-$O!4gdgS2LM1>o~;9@ zG3!8Co*_j2qa3RO0I*tnBLLNQZzWhOyaUWm!E+?Z?$=1#*b!O|Oo;;kAsO=gh$Pv$ z1$ecLmVj980e?a=V+iX_XbPbPAVlp9LJOd2ZrTv?o-TxT30^^{!X}O_>H$?q6_&Zq zj(8hD3d}+1#^NcMDvim8)Lz9>%p|uC@Rz{5Z-V#N@P7dGU5j*2{Q>am6!?M|ORy%y k=SMo`!ShF-KdN5h0VkKHq0N0-_y7O^07*qoM6N<$g4K+tr~m)} literal 1179 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabRA=0V9d*Ob`Ho)PG(@xm{>Z|+MC%? zq;!LSV*IU+jD_Hq4h+}5M-WOuPBJFzsCGGoBxhS??CSYCmAmU8W?)d-kk;i`0CMOWqA~ zRzbUxeSQ3o|195g|3UCqt3_3R_rE`Xan3mls~@vk+)GdEarJW_5AUA#$oFBH?R+op z_uTEdmJ2?#UNY^M7kzG17n-9kJo!Pmt@BR#HGdOq^Q8|pAF6d*xFr1i;yj@q9;eC#kQ)%8V7A&l>S6J zAZ+LVbC*x{@l@Y!4$P=1xI4Wr<4)80uGe)kJKjB4ymI&O%*fB{J^YgM7lmg<-Iv?4 z?(oS<-^<$`mM~krUo&OyuW7GRer=Aduxp!EnX$X+z@q7)rE?cYd#pPt9DC@T9?yw? z*OuzPh)Vy@8MglfFakIWJR*x37`TN%nDNrxxiAkxe>uLazhMp!6 zY3gff>1k`~Yik*3Ya8om>+5J6>gX8gYU}Ij80hI5>gyUB=ouNRnj31Gn`xMtnc0{F zk-4q8rG zsjI!6gM*HlgNd7ysjG{*t1A%My1HAsdRn@AS-E-#2KZXL`4=?%7qt2pHv1R01{Aaf z6t;2$Bqsh;Q+D8?C->BMyK|9{2a1(P3L zShxOr?Ygas$Z^rk-(Bw9MAG%oCJ)jY;K z;kKl8#Gxg;^~;$WN)BIOSfIvh|KaK8=#+iG_q{J$Z_${*a6+b%@mR5Gm!D+C!wvV2 zehhapxbQmjun=ocpuqFM##8=M73z4*|V>8pXaRRFMk?8FRZ-&x%P38f{&2GY1vuN-A}xIt->5X zEl=Q8jLdbDD-$a|=|xOa-N$|+)!~NPPuGJytba_m%;1T7^?%>JJ?E|4^E)}RP6s^L RJOLPk44$rjF6*2Ung9St7ViK6 diff --git a/Resources/Textures/Interface/Inventory/hand_r_active.png b/Resources/Textures/Interface/Inventory/hand_r_active.png new file mode 100644 index 0000000000000000000000000000000000000000..fb9eeff5c5cdc7b5b0519911f491bb3418b3b364 GIT binary patch literal 474 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 Ef|me9`Tzg` diff --git a/Resources/Textures/Interface/Inventory/head.png b/Resources/Textures/Interface/Inventory/head.png index 21c70bbe38d7cfa240b425055bfe00b9e47e9462..f087c05b3cd5a2ab1fcdb8eadef2334447ecf1cc 100644 GIT binary patch delta 339 zcmV-Z0j&P_2IB&d8Gi-<0047(dh`GQ010qNS#tmYHPiqAHPiuKW#tF}009+AL_t(o zh3%KI4uUWgMK6Yhff!k6fc`$u+JW=&n;kZ&#Zn+*Vt>!GPDT&|}{0fI;%7Jpf*Lae&M)aC$iI_7X( z53$JF2Y|UWgqR&bg)j!7Y5_0~U{e<`=7aNabWX|wWqBs;M@k?~lc(kYzg1o){!SC_c6$KdZ$fPV)mX}6w1)E#oQEV3@-ys=z9mu*bl1>H%Hko7 zVa+>fCBT^9M@%|qFpRq_&v$EH$@nYK0-$y_WzBCSumJo&KvP!;B4G~TkZ&zh5d9U* l39(rR{n#2#n*32Uq8sw!ZT%SRx0L_@002ovPDHLkV1nrMl3xG- literal 887 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabRA=0U^ETz32{Ae;DDHzl)AdEhPtk% zhMuOTzLtibmZrWo5NYXYYZ+*38|&&C>#3OO1Cgq^fvUNonwgQRxsjTgsinD@y1AK| zjk%ePg_fCxxvhnTou#IkrMa!8g`Jg_nH7+@0Yl?1v+9EilFCB&swR5VO|qRo6`%>81`{o^eH z5-bA~tpby*f`BN+DmcYDDAhVR)jA~ACOFL|1c);1!m=C^vmB%H9g}h$lXIP7iky=3 zoKo_fV~d?r@|{!jozn_kGKyR?irq3x+_KBuv&((*>wNMXd*u3ZGBNvwVNSxy5iJ)!8|f_IPhbAfTY0LIqpj7JiTF3J!$RV_XTN9mD|g=x$q{#%hT;#&no66Yx9Sj#27J@ zf1G^$P0QSbf2&`xWih94oww;$U&HZ#Qu=~Z40E0`9*c-NUJ+2nG?mfy^y7yiT?sZa zQ;XMzt)lO_Q+Nfq+M?=z-LCojFLR%N;r`l21*hYlCns!~>BF$& zUDciqhdu7Jy?^>$S1tQinJ#PIpO-lwOrkPM(v8<$erU1ocEzdIrp#OGC3LK}uUqqb z$*rubw)3i1huW6BO*0DHV8Q(9=_a1H+{cq1Iygu;n>c+D6v}fvm(Qpp_E7NXa+5Re zU!xs%MB1+K_TrjwJLJlw#yi{8w(>}Eb(SJ(dj&$#k+ WX6CX?x8J~oz~JfX=d#Wzp$P!*vxf-) diff --git a/Resources/Textures/Interface/Inventory/id.png b/Resources/Textures/Interface/Inventory/id.png index fef736e5ca892414797d951151c382de3f94bae3..1c57380cae8a9ee2191f89628288d633125594f6 100644 GIT binary patch delta 348 zcmV-i0i*uQ0_*~i8Gi-<0047(dh`GQ010qNS#tmYHPiqAHPiuKW#tF}00ACJL_t(o zh3%KS4uU`sMK8vNf*5HeAb+r-Frni6tw<~gf3RYfMq?}}u`o+UUh-ZGZZ*4;%$#{- zlLZt@0|1W&xo()VC(B-UMDbapcUu6^4HMbxj>q#hD}a4u@PAm4Q;3Z;=1vX(w`&aD zFyXNvuK+BiGQ{El6havQ)e5izY}=fcb%5(SqY`kQK!~)_-`at($-Bg8?SK@mLUx7o zxliXh0n~}}q_OfoAe{g#>wqx46gCY$wDMj6 zbuFJt|NRa~l~rd8R2Nf@hHCT<$VICQMDHX>Q;fj?LZq#)*c4K}11rD^umL_l7W>H5 u0YvdxQw33sU`dGm&Ms`N>{R(tRiZZ*0Cg-~SuLUf0000bjbm`dS)#+SOb%90g5;d`NfaZvl1o;Isd_e+#ARzeD z+2=s{Rh}-6Ar`%BCo}Rj*DLV2ir#T?VA=UU_WHpd-L(f(t0j~^{+#S2*;a25_vz=q z9Vs>~3PoIr(GBWs*P<<0*NQr4t6bRMFED4pGO-Sarmsw5oO(rboSp7iUJOe?*4w(WXXWmCYi_qif|9}b00-aMlxd4kF1n4VmN zT>Ff+Nmf~A2XsoVXnk1{b@=bL_c3$cUHv^#JS$#qvjIzx1kl|Kp00i_>zopr0IxxT A_y7O^ diff --git a/Resources/Textures/Interface/Inventory/inventory.png b/Resources/Textures/Interface/Inventory/inventory.png new file mode 100644 index 0000000000000000000000000000000000000000..2bad7533ff15db39088b75134f0884bb2f06dd90 GIT binary patch literal 485 zcmViLgPe)9-ERP(WFb^CxVLiv_pO6Lr(q+{b=#1Jpa8Ok_WWXwGKcl40oO{EQ5t1*T#uBs$%y#W zSeh>BwjmuEaLqy*Whmmja}Mz-tbxAHSqPbW5CYudywAInx8cJ9Xrc*el+jeOm0nM8 zn@y%OgaGx5c6|ro`&VOL5$Dua#5pZqUMENa5C{SS@H?Y#*Kli~t&Q5E=h;N9$jv}K z5|W9oxotMlXPCVU{sA5vpzkmCmNmElqD@3bqBT^2e;^r>1?jDrcOWU^yt1{*Iu=D< zIT6Vm$q2|;s+@?DAS0KC$wY!y0pNHDl{p|Nz|;^=uR0x9enx+HwsO1Q+~so0DhY<~ bF{9`gJb=3rTJp5*00000NkvXXu0mjf8_>=v literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Inventory/mask.png b/Resources/Textures/Interface/Inventory/mask.png index d061aea399f5f00a5892d4d381bdd530db666ef4..f72070151e042c94ef7347cfade745db7be19fcf 100644 GIT binary patch delta 383 zcmV-_0f7F}1&;%e8Gi-<0047(dh`GQ010qNS#tmYHPiqAHPiuKW#tF}00BWsL_t(o zh3%KYii0o^hJTk{Jjk+MD%!k3@F3*m^Y;|+P<(@|#a=9n2aoP4Vb-P)yN#jH|1_B- z&NrD%Kp?Op04RAq$4Tlv*fb6}wa1A1b^s73DW-A2_2=vrAb&q_l)RoP#D_L~2M2)j zcZ)blQSy4e0oY1Qh|K{gL@)rVH^6S~hAi8IvBEm1RENI5_yM4SrEIKggs8w+u?oZ) zfPUC^3QBd5vN3b608V!x%l5|BS=s=FsH}Vb4Zv6dDVw{se{`)gfKR;^fKuJf*ydX! zr!G*cGZ%~o(0FxT`gF&*$ms-VOX(J)m(1pSY8wK7v$VAs^{pv`^F!447n79`6{KuT zS+srcg?tJCmA(@?Q)+JlKu<%DAJuEU18)Ft0Mj@iKk#q>r}h|yf-oi665{JKH+Hm~ d4EduPM8Ew1r1GTRB=-OS002ovPDHLkV1hY+tvvt$ literal 722 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dy4+DHcTn`*LASNcIuCA-0uB)k` zr>Uv0rJ<*-sjsbVtgCFUtF5o6VrHOfZlZ2(;vHqGZf*udW;W)UX69x#7Us4V7Iv2A zww4xlRu*>FmbNxVZZ=kSw#KgZCTEN*;5swYP$Ou zC9rPMxR$X%>Cb<5)2mhton@u`?-VSv`6m@is+9}3owU8D@?H4CiaE@;9F`eeILFv` zI{i@Le#V_Xj{77&iLB!lQt=33KFyu9P=U*4cIE_;t;=V(CBCxVIxCT(=4EahGt<16 zuK#W^SPQ>d%+K`c;|AW#YzjSwxAc+^6?K1zV9;dFk^E=Y$KPUc@0T0*GM<{FPRm~h zvqXy8Wlji@)qnIsK;>Ef*8R_fqB&V!zU9xaZ$#OZ%ewp^3#pZ9dUY0-TcGlnUt#9*oru?8sm){3W z%X<6#W7@y3miNzm@$)_P!#7Oh<+F@0>-O8&Hk`3Lko9-##emmbOU$?!#25+|2mXJj s;;I`J^?iU*JOloDff_1Iq->asIltWpkVb0o5|F7co{Aj-NC+Y7(Pk2)D9(d5xw)(#8{=7k zdms`<9qT5x$A2~ppo0LIElf(SEbar+KrJXaru?>68JGfDqfd|lOhrf$xfSb0NR{)u z;5h+IzasVCAOV=poLUFZc?7EibZvw9kXi?su2s{VHNd4jc}pOKs7I}s+K2}4H2FrX vt|e(RTfM!;@PiOvpC6v5FS>lFI?*rgJhO!aJw$;3015yANkvXXu0mjfZJ4mc delta 824 zcmV-81IPTT1I`AJBYy)GNkl^R{_kyl=4=ggTiyEY5M5L%}%d^j*zhUJFC zTh5xTGr!SjZ+(y!3k_qMgN%U*lgR)q^~Q8EIJ6L2s0l{|Fn>7b9BQ@3eyg*1z!YT& z?sP0NClUz-o>?WB`96fp<$fd#C=?1{S*65efk zpnsWICBFwiUw^T%}p(%B{tuvG`B5dXlAU~^S8i{Tj1Z1VAlU8?j76% zHf}hJ3D}iJRDX2+%Zm?kd_RI;m!HH~?E+L$>j5e)J#13NekFH1G#RXVAL|}mUjeUj znDxKL>T0?GXEr>53Z(6IR8tC!?S^j0pUmF;dSOsNvb1e`YvA>a)xbE8vgcg0Kd==6 zW>z2w0)MUClrg#-flkMoQ((MeaCOh$Q2`0`z~40jm^C^alpe=gli`TOAMixoqm?r# zAk45~u`iI9ak+6(FA_O7Prq#O8t|jyhc^I`ZW~4NT)w@i=n* z;%5))HAj0a;PJf-Wdyt$6p&E&fg?j;ykcpes|=^1T!Quith*`usMo(= ziFx68(3}fe9~e)=Frk3GB`{^37i^a|BDKzljjYq4IV}sU0C#B~Kn1)}{Ee_r#_KRB z5PLw)l#n@Ng6ac^l^_FZ6p&Be-28xgy{SD5SkBL{bxfz@#JfeLK)rDa)5$R5(EkAp zUNP5wnn@Bkafm$Q71B=DT%YGc!Z1u-JPo7aE&m6DM%In{O=klD0000#LSXg@1hMafEO(2Fn?p1?P z-xuEu5+Je?0H{>6q*)%^Y@SA3yK~}RI{-kM<(Q`t_m5jpfPeC+P^o5dAzmIuXmbF# zy?02n9F=O8ZvcB~4Y50b3lR;#)jvRVfCKjdAqo)5AJ??*Va&jKAL|QjnF9ckgb+nI zfGu;*J>CEz#OeX9d%Ht7Z#NpP`)~k6@{4g@p8x=Ddx0^71>rOzI|3qUja}9CiJd>- zF@_HbQJ`%vwp;di_@%07*qoM6N<$f&<%| ASO5S3 delta 571 zcmeywbdqI)WIZzj1B1(wu46!IOMp*^>wyCY#Kff3)pa%0bu~5gG&S|LH1xDJ^|iH) zb+q(!wDonB&2_c)^;OLcRn3jm%#78{%*<@e&1@{pZ7nS9EG_J;w9Kq5?5wTqY^>~T zja}_c+?-5ZUCi7(EL=S;T}4GDf#$2IXt-t+nfgT6oBPF@`^Q@ZBv=L|dZbi&q||t( z)_SJZdZpEQXEb^j)%s*M`4rdrmNtgg^+z>Ki)xw{)jTb_ae8#~^qBftF%7d~8)jSA z%=irSfJ#Y_UogWL{NN7|{QL0Tn}LB*!PBMQF~s8Z+R3kr4k-w@g?5CwE)F_c(O+(O zWKmAem%sN{-|kMHHDTl2Z-2bno*KN_F2eQS(Qx|uughb)wlm#7wfDe$d*!z(KkUE1 zXYC6<^}wRD>HY5fNlO-{JiN~4#QF1%*9YV52Y(yYE#8+{h~Haq{xVz8ZPwLGqt}PM zepe*=CQGG0^}%5UuETHB_TI}mY{1oKlbc|~WU)`dy}@JCmW8^@q|U9EpX2E7`b=!g z(g#bvCN2ER8Pc7W|IpK5`j4t!eYPdXH`lKCvZeDrchcf&QE&C19(Q@Nj_A%^!gIbu z(55jkS}du^ft8C-IMH{qnM#8p!zRbKnPta|)?bP1+im&T!Q|AMm%Dt!)OLPu2uxZq st#Zaqx2$LXYu?D)%xU+3-@k{kkkNeqllL8!z~E)@boFyt=akR{02NRE$N&HU diff --git a/Resources/Textures/Interface/Inventory/sheet.png b/Resources/Textures/Interface/Inventory/sheet.png new file mode 100644 index 0000000000000000000000000000000000000000..34ac8861c35b75c8bed99c49a61a694d2b173229 GIT binary patch literal 4231 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 VY0qgcb^-tZ002ovPDHLkV1my{h#UX_ literal 634 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dymjZl3Tn`*LASNcIuCA*AL>hXU zK%}X!rKztCL|S^<+Qz!t`g$s6rW$6Z))r=FHsU@eCe2W?b3flsT+5(H(kLtZ?1^UjdB*-tA;R^xqhZt~Y&EcaA z42*)FE{-7|bV>vzaOfb~Ifns=eD#>5#DJT82%*HWD@L4qgZmDBCHADveH2>uZC zJ!_KjPd&3@jz>3)FUiMpEIGcyG)`ec-H}jlyA7@ie>2*C9k)67BR4U2JIBeVaT&2c z>X}#@Bsm@4?tZXGAk9r^nPQ!2O!+0l19Ews8)m(Gr0!@HYraEBf#p48ZPd}&rSeWb zlRaOxq+f^)-(cGNbc^2G*o15EQzsZzXd3a_g^JAHvqCCy-ksPK7O$IM%7iRHg$xU_7+e_?u1WF# zTWFbk_~DP`?-qW2^S$Y8bc?iJUFcrnr?#R0!`ImzvXA5UnGXzZ22WQ%mvv4FO#oU& B5la97 diff --git a/Resources/Textures/Interface/Inventory/suit.png b/Resources/Textures/Interface/Inventory/suit.png index df79bc33dd7ba503f1d7561c011189ecdf8ae5ce..44a5c95e5599b91622a56e18176eca57a6b4afbf 100644 GIT binary patch delta 359 zcmV-t0hs>!1@{7w8Gi-<0047(dh`GQ010qNS#tmYHPiqAHPiuKW#tF}00AjUL_t(o zh3%KYii0o^hCfR$9%NZB6>Z)i_yRtEU!eE~ZcDs$S$gQv9wZXdY^&CoOMeiON#cCT z%me~~6#f$8z?(BBGaI6oJY1;zCNy_bd;rH+C6(HYBN`F~(Cd5WJd^-m?|J1}u zN-3-E0bniJ5UT^25WxUUeE@<3Z09V>vK>McL%(TGDAoE0$g&*(LKHO3X|S6xQ$Z$$ zz;>iR*SHq|?Zn(Y^dXqzd=|jc8V#W15B(|VzMYWfyhQ=*Bi0ZuyB7donpB2%=_%Dd zEy+az{=016xnP7Q0SHk%>`tG6%RW}4bHJ{BaA&-0-XZ`>wJ(1@CmfTK(7t-L?HvU# z!wUv0rJ<*-sjsc2r>$+Qqot>-Y_6-VucuMy}VP|D&Yi((3V`XP&?CN0R=4j&PWa{c_<|ZmC2{d0tMMK{;(7-Lo&@I@|Bh<(< z%-Ad3#52Og3y7jjydzA!qfC6FOnstFeWT5NW6gcz&HZA{{o>92<1GRbY(mrQBeLxy zvz=m!oMVgK5-Z%3D&2F+J#s2Maw|M@D?JOUy$fpn3!424fvDBLs5PLdEwG?Hu&_O_ zs6DW_eUV>(3((8HB|(0{3}5hrKcs-f1&YrZ7#K@ET^vI!{Cg+gENe0laTR1-nIU?x z^2kCBtt{4DSx3){C;r#_3m*(s<+IgqnR@ozUd4qgPFxNMdGa<>Ng_b*82gm8Z;rFN z_&4a(n(Ih2L<+i}d;auxoJqarR`!{f! zb6bYb*0T0Yw+`-^FB8*OZhW!UQHxLK_UswSwK;w^x1~guPH24p<{;-8pUZO=KHqoP z{jlkk-waO2S=TWuzPNta^n%Z-_6CIo(~~;%vYZ+EE522lkc#*&0XI7t0pvm-WX4lGg zZ#9dWwYXEbRaP`qzSnJ6)W`k&(gCtHP690~=ULv@w>c+Vf+Yyh4r z0q2d@WIneKYn1_=7)!L70D#-=cU*v~st5JJXaK^Du|&e?RxieE8xU~p0W}ktBm+~2)3mLQHJIWA!6ivm$|HI^zZfH0$` zL-i<@wh0A2O(ExvypQ9kvm!M^Y7A33B!DSJB6yx}?{1#kL=abO1&mVRDXaE9Yh?!1SC2&1lT)txkz)E@J1To1`YzyIH4mkFJ>G%H` zdH+v11OA^_#KGVN;Bedpz93`?UJ3F3wwBj{I_UF3)rvnfpd`pInBfbN;16{`p#m;pmqMto8fj!8NH5c z6nlG%p8Dqh`v2c?a-3GLr=}*;+K#RTyEpG;@cvLd$=A$!vwHfuIf5&-k`&YLHunKCg{Zzx}V`!VaG$KFvqI!j;f zWtueS-Xxb(*Bg#c;i!;X$)vV#XU5^h{X!4s&1JYJc=r46wL$;)^KE_ip7%&GE7Qe# zwF}bOZ?Ew__-9sjUd&7G_|(N+jB7pTrqoIAZuY8prg3P-HH+qo?_ab&T?uq3oan_= zX{S~DV5d6cUr{5Eo_`sy-B})OO0v`mV_;cu@8MGmCYMwB>+Zd|`*iB}YyaiB*)L6M UI#_odn5q~&UHx3vIVCg!00TP0zW@LL diff --git a/Resources/Textures/Interface/Inventory/uniform.png b/Resources/Textures/Interface/Inventory/uniform.png index bb7e4ec18a775322e87638936f3aa85c589f52a8..d98ef541ab44432017cf4d65a14a21f50bf7c078 100644 GIT binary patch delta 358 zcmV-s0h#{T1@;1v8Gi-<0047(dh`GQ010qNS#tmYHPiqAHPiuKW#tF}00AgTL_t(o zh3%KW&Vn!$#SdRx7|0h{Xi(pvVK8Ch`JGH03~zv%vS17YBMzpdssHX(OJm|$Ani@> zkDgNqfM*2&kjbJCqu6<~u5GX_SAjV;0e~=y(X|bZr-M^~bbl_9$)YzQ{`8IO<^XWm zl?bC4nJoG%fU#slj1FKzcmpu?17HIPks!~P5F#OsKhuQUe6g4Tz;M;F$Cau-4{)#P ztvV_I*#hp?QtQb8_n!9MdUgn_YX8>!%K+SksrBR#>QE_FKipokjv|%?O4U!pB}77Q z4ls`)a0ypc?O$&;(eDYT02)HuuwHMF=gU`?0q~9A0z2JyCb*}CZGlqtmB$>^GDT-&LQDt3*#H0l07*qoM6N<$ Ef-0t*qW}N^ literal 728 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dy9|C+rTn`*LASNcIuCA-0uB)k` zr>Uv0rJ<*#sjm%0T6)^r#(FAd`l{vzs^*5O=0-rIZf>e>Zf0gS*HTV(#i@;p%1O>SN_9Dk=%INJT}%)F;}^H^$sI z*4!`N!au<(D9I`)#X30EAu`V)D$g-0-zmDlDF%p&oMVff(+XWOid-{`-LgvDvdY}D z%iOceee&vj@`0$qr?Aeau)(LO!MC8%x2VytpvkYO$-ki4zo6B>u-U(`)xW4Ups+2V zs4cLtJ+P=fu(*B0saxxSeh(-K@(X78LJ<5R1z0g(sbgSZboX>|46!)9bn@MxCI^YO zz=QJ-$tMYVo($P?V!_=D2fU0gnj~)jy??gCR^}U5)2e1v_TQ^)yZhI!@3c(oW21EU zlSf#aPp(V&BFa{q94^qJBkFiVdLUhH!g0TvasvW^c4wit)3mLGMm2{6rJ>M^l{rZ%_!w_(A~L$pRcI|Z`XTz zc{zjb6JO7s_Y1`q+&%nww*B|?;`{aY|2rKjXl?sG?Q3e}wSxMNC5&sg&3hq?RuV-mpR`2RRarEG<74>IS soEOUQ*fu(z|8e`(+=zR@umAHdYYN=AFMgUUFuE8#UHx3vIVCg!0JS(#n*aa+ diff --git a/Resources/keybinds.yml b/Resources/keybinds.yml index e58876b05f..962c2eb931 100644 --- a/Resources/keybinds.yml +++ b/Resources/keybinds.yml @@ -130,9 +130,6 @@ binds: type: State key: MouseRight canFocus: true -- function: ToggleCombatMode - type: State - key: R - function: OpenCraftingMenu type: State key: G