From fa8c87a66de48ddd72f1a127bcfd9276636554cd Mon Sep 17 00:00:00 2001 From: NR <66198468+withoutcode333@users.noreply.github.com> Date: Mon, 21 Apr 2025 04:03:11 +0500 Subject: [PATCH 1/5] PIZDAAAAAAAAAAAAA --- .../Inventory/ClientInventorySystem.cs | 16 + .../Screens/DefaultGameScreen.xaml | 2 + .../Screens/DefaultGameScreen.xaml.cs | 1 + .../Screens/SeparatedChatGameScreen.xaml | 2 + .../Screens/SeparatedChatGameScreen.xaml.cs | 1 + .../Targeting/Systems/TargetingSystem.cs | 83 +++++ .../_White/Targeting/TargetingController.cs | 82 +++++ .../_White/Targeting/Ui/TargetingWidget.xaml | 268 ++++++++++++++ .../Targeting/Ui/TargetingWidget.xaml.cs | 86 +++++ .../Atmos/EntitySystems/BarotraumaSystem.cs | 4 +- Content.Server/Body/Systems/BodySystem.cs | 20 +- Content.Server/Hands/Systems/HandsSystem.cs | 51 ++- Content.Server/Medical/HealingSystem.cs | 18 + .../Targeting/Systems/TargetingSystem.cs | 56 +++ Content.Shared/Body/Organ/OrganComponent.cs | 3 + Content.Shared/Body/Part/BodyPartComponent.cs | 29 ++ Content.Shared/Body/Part/BodyPartEvents.cs | 9 + .../Body/Systems/SharedBodySystem.Body.cs | 35 ++ .../Systems/SharedBodySystem.IntegrityPart.cs | 338 ++++++++++++++++++ .../Body/Systems/SharedBodySystem.Parts.cs | 205 ++++++++++- .../Body/Systems/SharedBodySystem.cs | 1 + .../Damage/Systems/DamageableSystem.cs | 99 ++++- .../Inventory/InventorySystem.Slots.cs | 47 ++- .../Inventory/InventoryTemplatePrototype.cs | 3 + .../Components/TargetingComponent.cs | 74 ++++ .../_White/Targeting/TargetingEvents.cs | 38 ++ .../Audio/White/Targeting/targetingToggle.ogg | Bin 0 -> 4677 bytes Resources/Prototypes/Body/Organs/human.yml | 11 + .../Prototypes/Body/Prototypes/a_ghost.yml | 16 +- .../Prototypes/Body/Prototypes/human.yml | 32 +- .../Prototypes/Entities/Mobs/Species/base.yml | 3 + .../Interface/Ashen/targeting_doll.png | Bin 0 -> 422 bytes .../Interface/Clockwork/targeting_doll.png | Bin 0 -> 1219 bytes .../Interface/Default/targeting_doll.png | Bin 0 -> 422 bytes .../Interface/Minimalist/targeting_doll.png | Bin 0 -> 422 bytes .../Interface/Plasmafire/targeting_doll.png | Bin 0 -> 462 bytes .../Interface/Retro/targeting_doll.png | Bin 0 -> 383 bytes .../Textures/White/Targeting/Doll/head.png | Bin 0 -> 5663 bytes .../White/Targeting/Doll/head_hover.png | Bin 0 -> 7153 bytes .../Textures/White/Targeting/Doll/leftarm.png | Bin 0 -> 5779 bytes .../White/Targeting/Doll/leftarm_hover.png | Bin 0 -> 6652 bytes .../White/Targeting/Doll/leftfoot.png | Bin 0 -> 5462 bytes .../White/Targeting/Doll/leftfoot_hover.png | Bin 0 -> 5476 bytes .../White/Targeting/Doll/lefthand.png | Bin 0 -> 5462 bytes .../White/Targeting/Doll/lefthand_hover.png | Bin 0 -> 6174 bytes .../Textures/White/Targeting/Doll/leftleg.png | Bin 0 -> 5488 bytes .../White/Targeting/Doll/leftleg_hover.png | Bin 0 -> 6185 bytes .../Textures/White/Targeting/Doll/mouth.png | Bin 0 -> 5219 bytes .../White/Targeting/Doll/mouth_hover.png | Bin 0 -> 5208 bytes .../White/Targeting/Doll/rightarm.png | Bin 0 -> 5773 bytes .../White/Targeting/Doll/rightarm_hover.png | Bin 0 -> 6592 bytes .../White/Targeting/Doll/rightfoot.png | Bin 0 -> 5454 bytes .../White/Targeting/Doll/rightfoot_hover.png | Bin 0 -> 5465 bytes .../White/Targeting/Doll/righthand.png | Bin 0 -> 5467 bytes .../White/Targeting/Doll/righthand_hover.png | Bin 0 -> 6207 bytes .../White/Targeting/Doll/rightleg.png | Bin 0 -> 5473 bytes .../White/Targeting/Doll/rightleg_hover.png | Bin 0 -> 5908 bytes .../Textures/White/Targeting/Doll/stomach.png | Bin 0 -> 541 bytes .../White/Targeting/Doll/stomach_hover.png | Bin 0 -> 518 bytes .../Textures/White/Targeting/Doll/torso.png | Bin 0 -> 536 bytes .../White/Targeting/Doll/torso_hover.png | Bin 0 -> 512 bytes .../Targeting/Status/chest.rsi/chest_0.png | Bin 0 -> 160 bytes .../Targeting/Status/chest.rsi/chest_1.png | Bin 0 -> 160 bytes .../Targeting/Status/chest.rsi/chest_2.png | Bin 0 -> 160 bytes .../Targeting/Status/chest.rsi/chest_3.png | Bin 0 -> 160 bytes .../Targeting/Status/chest.rsi/chest_4.png | Bin 0 -> 160 bytes .../Targeting/Status/chest.rsi/chest_5.png | Bin 0 -> 186 bytes .../Status/chest.rsi/chest_6unused.png | Bin 0 -> 160 bytes .../Targeting/Status/chest.rsi/meta.json | 32 ++ .../Targeting/Status/groin.rsi/groin_0.png | Bin 0 -> 157 bytes .../Targeting/Status/groin.rsi/groin_1.png | Bin 0 -> 157 bytes .../Targeting/Status/groin.rsi/groin_2.png | Bin 0 -> 157 bytes .../Targeting/Status/groin.rsi/groin_3.png | Bin 0 -> 157 bytes .../Targeting/Status/groin.rsi/groin_4.png | Bin 0 -> 157 bytes .../Targeting/Status/groin.rsi/groin_5.png | Bin 0 -> 178 bytes .../Status/groin.rsi/groin_6unused.png | Bin 0 -> 157 bytes .../Targeting/Status/groin.rsi/meta.json | 32 ++ .../Targeting/Status/head.rsi/head_0.png | Bin 0 -> 140 bytes .../Targeting/Status/head.rsi/head_1.png | Bin 0 -> 140 bytes .../Targeting/Status/head.rsi/head_2.png | Bin 0 -> 140 bytes .../Targeting/Status/head.rsi/head_3.png | Bin 0 -> 140 bytes .../Targeting/Status/head.rsi/head_4.png | Bin 0 -> 140 bytes .../Targeting/Status/head.rsi/head_5.png | Bin 0 -> 155 bytes .../Status/head.rsi/head_6unused.png | Bin 0 -> 140 bytes .../White/Targeting/Status/head.rsi/meta.json | 32 ++ .../Status/leftarm.rsi/leftarm_0.png | Bin 0 -> 144 bytes .../Status/leftarm.rsi/leftarm_1.png | Bin 0 -> 144 bytes .../Status/leftarm.rsi/leftarm_2.png | Bin 0 -> 144 bytes .../Status/leftarm.rsi/leftarm_3.png | Bin 0 -> 144 bytes .../Status/leftarm.rsi/leftarm_4.png | Bin 0 -> 144 bytes .../Status/leftarm.rsi/leftarm_5.png | Bin 0 -> 154 bytes .../Status/leftarm.rsi/leftarm_6unused.png | Bin 0 -> 144 bytes .../Targeting/Status/leftarm.rsi/meta.json | 32 ++ .../Status/leftfoot.rsi/leftfoot_0.png | Bin 0 -> 145 bytes .../Status/leftfoot.rsi/leftfoot_1.png | Bin 0 -> 145 bytes .../Status/leftfoot.rsi/leftfoot_2.png | Bin 0 -> 145 bytes .../Status/leftfoot.rsi/leftfoot_3.png | Bin 0 -> 145 bytes .../Status/leftfoot.rsi/leftfoot_4.png | Bin 0 -> 145 bytes .../Status/leftfoot.rsi/leftfoot_5.png | Bin 0 -> 166 bytes .../Status/leftfoot.rsi/leftfoot_6unused.png | Bin 0 -> 145 bytes .../Targeting/Status/leftfoot.rsi/meta.json | 32 ++ .../Status/lefthand.rsi/lefthand_0.png | Bin 0 -> 136 bytes .../Status/lefthand.rsi/lefthand_1.png | Bin 0 -> 136 bytes .../Status/lefthand.rsi/lefthand_2.png | Bin 0 -> 136 bytes .../Status/lefthand.rsi/lefthand_3.png | Bin 0 -> 136 bytes .../Status/lefthand.rsi/lefthand_4.png | Bin 0 -> 136 bytes .../Status/lefthand.rsi/lefthand_5.png | Bin 0 -> 152 bytes .../Status/lefthand.rsi/lefthand_6unused.png | Bin 0 -> 136 bytes .../Targeting/Status/lefthand.rsi/meta.json | 32 ++ .../Status/leftleg.rsi/leftleg_0.png | Bin 0 -> 141 bytes .../Status/leftleg.rsi/leftleg_1.png | Bin 0 -> 141 bytes .../Status/leftleg.rsi/leftleg_2.png | Bin 0 -> 141 bytes .../Status/leftleg.rsi/leftleg_3.png | Bin 0 -> 141 bytes .../Status/leftleg.rsi/leftleg_4.png | Bin 0 -> 141 bytes .../Status/leftleg.rsi/leftleg_5.png | Bin 0 -> 170 bytes .../Status/leftleg.rsi/leftleg_6unused.png | Bin 0 -> 141 bytes .../Targeting/Status/leftleg.rsi/meta.json | 32 ++ .../Targeting/Status/rightarm.rsi/meta.json | 32 ++ .../Status/rightarm.rsi/rightarm_0.png | Bin 0 -> 147 bytes .../Status/rightarm.rsi/rightarm_1.png | Bin 0 -> 147 bytes .../Status/rightarm.rsi/rightarm_2.png | Bin 0 -> 147 bytes .../Status/rightarm.rsi/rightarm_3.png | Bin 0 -> 147 bytes .../Status/rightarm.rsi/rightarm_4.png | Bin 0 -> 147 bytes .../Status/rightarm.rsi/rightarm_5.png | Bin 0 -> 158 bytes .../Status/rightarm.rsi/rightarm_6unused.png | Bin 0 -> 147 bytes .../Targeting/Status/rightfoot.rsi/meta.json | 32 ++ .../Status/rightfoot.rsi/rightfoot_0.png | Bin 0 -> 176 bytes .../Status/rightfoot.rsi/rightfoot_1.png | Bin 0 -> 144 bytes .../Status/rightfoot.rsi/rightfoot_2.png | Bin 0 -> 144 bytes .../Status/rightfoot.rsi/rightfoot_3.png | Bin 0 -> 144 bytes .../Status/rightfoot.rsi/rightfoot_4.png | Bin 0 -> 144 bytes .../Status/rightfoot.rsi/rightfoot_5.png | Bin 0 -> 161 bytes .../rightfoot.rsi/rightfoot_6unused.png | Bin 0 -> 144 bytes .../Targeting/Status/righthand.rsi/meta.json | 32 ++ .../Status/righthand.rsi/righthand_0.png | Bin 0 -> 138 bytes .../Status/righthand.rsi/righthand_1.png | Bin 0 -> 138 bytes .../Status/righthand.rsi/righthand_2.png | Bin 0 -> 138 bytes .../Status/righthand.rsi/righthand_3.png | Bin 0 -> 138 bytes .../Status/righthand.rsi/righthand_4.png | Bin 0 -> 138 bytes .../Status/righthand.rsi/righthand_5.png | Bin 0 -> 152 bytes .../righthand.rsi/righthand_6unused.png | Bin 0 -> 138 bytes .../Targeting/Status/rightleg.rsi/meta.json | 32 ++ .../Status/rightleg.rsi/rightleg_0.png | Bin 0 -> 178 bytes .../Status/rightleg.rsi/rightleg_1.png | Bin 0 -> 141 bytes .../Status/rightleg.rsi/rightleg_2.png | Bin 0 -> 141 bytes .../Status/rightleg.rsi/rightleg_3.png | Bin 0 -> 141 bytes .../Status/rightleg.rsi/rightleg_4.png | Bin 0 -> 141 bytes .../Status/rightleg.rsi/rightleg_5.png | Bin 0 -> 166 bytes .../Status/rightleg.rsi/rightleg_6unused.png | Bin 0 -> 141 bytes 149 files changed, 1935 insertions(+), 50 deletions(-) create mode 100644 Content.Client/_White/Targeting/Systems/TargetingSystem.cs create mode 100644 Content.Client/_White/Targeting/TargetingController.cs create mode 100644 Content.Client/_White/Targeting/Ui/TargetingWidget.xaml create mode 100644 Content.Client/_White/Targeting/Ui/TargetingWidget.xaml.cs create mode 100644 Content.Server/_White/Targeting/Systems/TargetingSystem.cs create mode 100644 Content.Shared/Body/Systems/SharedBodySystem.IntegrityPart.cs create mode 100644 Content.Shared/_White/Targeting/Components/TargetingComponent.cs create mode 100644 Content.Shared/_White/Targeting/TargetingEvents.cs create mode 100644 Resources/Audio/White/Targeting/targetingToggle.ogg create mode 100644 Resources/Textures/Interface/Ashen/targeting_doll.png create mode 100644 Resources/Textures/Interface/Clockwork/targeting_doll.png create mode 100644 Resources/Textures/Interface/Default/targeting_doll.png create mode 100644 Resources/Textures/Interface/Minimalist/targeting_doll.png create mode 100644 Resources/Textures/Interface/Plasmafire/targeting_doll.png create mode 100644 Resources/Textures/Interface/Retro/targeting_doll.png create mode 100644 Resources/Textures/White/Targeting/Doll/head.png create mode 100644 Resources/Textures/White/Targeting/Doll/head_hover.png create mode 100644 Resources/Textures/White/Targeting/Doll/leftarm.png create mode 100644 Resources/Textures/White/Targeting/Doll/leftarm_hover.png create mode 100644 Resources/Textures/White/Targeting/Doll/leftfoot.png create mode 100644 Resources/Textures/White/Targeting/Doll/leftfoot_hover.png create mode 100644 Resources/Textures/White/Targeting/Doll/lefthand.png create mode 100644 Resources/Textures/White/Targeting/Doll/lefthand_hover.png create mode 100644 Resources/Textures/White/Targeting/Doll/leftleg.png create mode 100644 Resources/Textures/White/Targeting/Doll/leftleg_hover.png create mode 100644 Resources/Textures/White/Targeting/Doll/mouth.png create mode 100644 Resources/Textures/White/Targeting/Doll/mouth_hover.png create mode 100644 Resources/Textures/White/Targeting/Doll/rightarm.png create mode 100644 Resources/Textures/White/Targeting/Doll/rightarm_hover.png create mode 100644 Resources/Textures/White/Targeting/Doll/rightfoot.png create mode 100644 Resources/Textures/White/Targeting/Doll/rightfoot_hover.png create mode 100644 Resources/Textures/White/Targeting/Doll/righthand.png create mode 100644 Resources/Textures/White/Targeting/Doll/righthand_hover.png create mode 100644 Resources/Textures/White/Targeting/Doll/rightleg.png create mode 100644 Resources/Textures/White/Targeting/Doll/rightleg_hover.png create mode 100644 Resources/Textures/White/Targeting/Doll/stomach.png create mode 100644 Resources/Textures/White/Targeting/Doll/stomach_hover.png create mode 100644 Resources/Textures/White/Targeting/Doll/torso.png create mode 100644 Resources/Textures/White/Targeting/Doll/torso_hover.png create mode 100644 Resources/Textures/White/Targeting/Status/chest.rsi/chest_0.png create mode 100644 Resources/Textures/White/Targeting/Status/chest.rsi/chest_1.png create mode 100644 Resources/Textures/White/Targeting/Status/chest.rsi/chest_2.png create mode 100644 Resources/Textures/White/Targeting/Status/chest.rsi/chest_3.png create mode 100644 Resources/Textures/White/Targeting/Status/chest.rsi/chest_4.png create mode 100644 Resources/Textures/White/Targeting/Status/chest.rsi/chest_5.png create mode 100644 Resources/Textures/White/Targeting/Status/chest.rsi/chest_6unused.png create mode 100644 Resources/Textures/White/Targeting/Status/chest.rsi/meta.json create mode 100644 Resources/Textures/White/Targeting/Status/groin.rsi/groin_0.png create mode 100644 Resources/Textures/White/Targeting/Status/groin.rsi/groin_1.png create mode 100644 Resources/Textures/White/Targeting/Status/groin.rsi/groin_2.png create mode 100644 Resources/Textures/White/Targeting/Status/groin.rsi/groin_3.png create mode 100644 Resources/Textures/White/Targeting/Status/groin.rsi/groin_4.png create mode 100644 Resources/Textures/White/Targeting/Status/groin.rsi/groin_5.png create mode 100644 Resources/Textures/White/Targeting/Status/groin.rsi/groin_6unused.png create mode 100644 Resources/Textures/White/Targeting/Status/groin.rsi/meta.json create mode 100644 Resources/Textures/White/Targeting/Status/head.rsi/head_0.png create mode 100644 Resources/Textures/White/Targeting/Status/head.rsi/head_1.png create mode 100644 Resources/Textures/White/Targeting/Status/head.rsi/head_2.png create mode 100644 Resources/Textures/White/Targeting/Status/head.rsi/head_3.png create mode 100644 Resources/Textures/White/Targeting/Status/head.rsi/head_4.png create mode 100644 Resources/Textures/White/Targeting/Status/head.rsi/head_5.png create mode 100644 Resources/Textures/White/Targeting/Status/head.rsi/head_6unused.png create mode 100644 Resources/Textures/White/Targeting/Status/head.rsi/meta.json create mode 100644 Resources/Textures/White/Targeting/Status/leftarm.rsi/leftarm_0.png create mode 100644 Resources/Textures/White/Targeting/Status/leftarm.rsi/leftarm_1.png create mode 100644 Resources/Textures/White/Targeting/Status/leftarm.rsi/leftarm_2.png create mode 100644 Resources/Textures/White/Targeting/Status/leftarm.rsi/leftarm_3.png create mode 100644 Resources/Textures/White/Targeting/Status/leftarm.rsi/leftarm_4.png create mode 100644 Resources/Textures/White/Targeting/Status/leftarm.rsi/leftarm_5.png create mode 100644 Resources/Textures/White/Targeting/Status/leftarm.rsi/leftarm_6unused.png create mode 100644 Resources/Textures/White/Targeting/Status/leftarm.rsi/meta.json create mode 100644 Resources/Textures/White/Targeting/Status/leftfoot.rsi/leftfoot_0.png create mode 100644 Resources/Textures/White/Targeting/Status/leftfoot.rsi/leftfoot_1.png create mode 100644 Resources/Textures/White/Targeting/Status/leftfoot.rsi/leftfoot_2.png create mode 100644 Resources/Textures/White/Targeting/Status/leftfoot.rsi/leftfoot_3.png create mode 100644 Resources/Textures/White/Targeting/Status/leftfoot.rsi/leftfoot_4.png create mode 100644 Resources/Textures/White/Targeting/Status/leftfoot.rsi/leftfoot_5.png create mode 100644 Resources/Textures/White/Targeting/Status/leftfoot.rsi/leftfoot_6unused.png create mode 100644 Resources/Textures/White/Targeting/Status/leftfoot.rsi/meta.json create mode 100644 Resources/Textures/White/Targeting/Status/lefthand.rsi/lefthand_0.png create mode 100644 Resources/Textures/White/Targeting/Status/lefthand.rsi/lefthand_1.png create mode 100644 Resources/Textures/White/Targeting/Status/lefthand.rsi/lefthand_2.png create mode 100644 Resources/Textures/White/Targeting/Status/lefthand.rsi/lefthand_3.png create mode 100644 Resources/Textures/White/Targeting/Status/lefthand.rsi/lefthand_4.png create mode 100644 Resources/Textures/White/Targeting/Status/lefthand.rsi/lefthand_5.png create mode 100644 Resources/Textures/White/Targeting/Status/lefthand.rsi/lefthand_6unused.png create mode 100644 Resources/Textures/White/Targeting/Status/lefthand.rsi/meta.json create mode 100644 Resources/Textures/White/Targeting/Status/leftleg.rsi/leftleg_0.png create mode 100644 Resources/Textures/White/Targeting/Status/leftleg.rsi/leftleg_1.png create mode 100644 Resources/Textures/White/Targeting/Status/leftleg.rsi/leftleg_2.png create mode 100644 Resources/Textures/White/Targeting/Status/leftleg.rsi/leftleg_3.png create mode 100644 Resources/Textures/White/Targeting/Status/leftleg.rsi/leftleg_4.png create mode 100644 Resources/Textures/White/Targeting/Status/leftleg.rsi/leftleg_5.png create mode 100644 Resources/Textures/White/Targeting/Status/leftleg.rsi/leftleg_6unused.png create mode 100644 Resources/Textures/White/Targeting/Status/leftleg.rsi/meta.json create mode 100644 Resources/Textures/White/Targeting/Status/rightarm.rsi/meta.json create mode 100644 Resources/Textures/White/Targeting/Status/rightarm.rsi/rightarm_0.png create mode 100644 Resources/Textures/White/Targeting/Status/rightarm.rsi/rightarm_1.png create mode 100644 Resources/Textures/White/Targeting/Status/rightarm.rsi/rightarm_2.png create mode 100644 Resources/Textures/White/Targeting/Status/rightarm.rsi/rightarm_3.png create mode 100644 Resources/Textures/White/Targeting/Status/rightarm.rsi/rightarm_4.png create mode 100644 Resources/Textures/White/Targeting/Status/rightarm.rsi/rightarm_5.png create mode 100644 Resources/Textures/White/Targeting/Status/rightarm.rsi/rightarm_6unused.png create mode 100644 Resources/Textures/White/Targeting/Status/rightfoot.rsi/meta.json create mode 100644 Resources/Textures/White/Targeting/Status/rightfoot.rsi/rightfoot_0.png create mode 100644 Resources/Textures/White/Targeting/Status/rightfoot.rsi/rightfoot_1.png create mode 100644 Resources/Textures/White/Targeting/Status/rightfoot.rsi/rightfoot_2.png create mode 100644 Resources/Textures/White/Targeting/Status/rightfoot.rsi/rightfoot_3.png create mode 100644 Resources/Textures/White/Targeting/Status/rightfoot.rsi/rightfoot_4.png create mode 100644 Resources/Textures/White/Targeting/Status/rightfoot.rsi/rightfoot_5.png create mode 100644 Resources/Textures/White/Targeting/Status/rightfoot.rsi/rightfoot_6unused.png create mode 100644 Resources/Textures/White/Targeting/Status/righthand.rsi/meta.json create mode 100644 Resources/Textures/White/Targeting/Status/righthand.rsi/righthand_0.png create mode 100644 Resources/Textures/White/Targeting/Status/righthand.rsi/righthand_1.png create mode 100644 Resources/Textures/White/Targeting/Status/righthand.rsi/righthand_2.png create mode 100644 Resources/Textures/White/Targeting/Status/righthand.rsi/righthand_3.png create mode 100644 Resources/Textures/White/Targeting/Status/righthand.rsi/righthand_4.png create mode 100644 Resources/Textures/White/Targeting/Status/righthand.rsi/righthand_5.png create mode 100644 Resources/Textures/White/Targeting/Status/righthand.rsi/righthand_6unused.png create mode 100644 Resources/Textures/White/Targeting/Status/rightleg.rsi/meta.json create mode 100644 Resources/Textures/White/Targeting/Status/rightleg.rsi/rightleg_0.png create mode 100644 Resources/Textures/White/Targeting/Status/rightleg.rsi/rightleg_1.png create mode 100644 Resources/Textures/White/Targeting/Status/rightleg.rsi/rightleg_2.png create mode 100644 Resources/Textures/White/Targeting/Status/rightleg.rsi/rightleg_3.png create mode 100644 Resources/Textures/White/Targeting/Status/rightleg.rsi/rightleg_4.png create mode 100644 Resources/Textures/White/Targeting/Status/rightleg.rsi/rightleg_5.png create mode 100644 Resources/Textures/White/Targeting/Status/rightleg.rsi/rightleg_6unused.png diff --git a/Content.Client/Inventory/ClientInventorySystem.cs b/Content.Client/Inventory/ClientInventorySystem.cs index 87cea4e3d2f..3075a881180 100644 --- a/Content.Client/Inventory/ClientInventorySystem.cs +++ b/Content.Client/Inventory/ClientInventorySystem.cs @@ -1,6 +1,7 @@ using Content.Client.Clothing; using Content.Client.Examine; using Content.Client.Verbs.UI; +using Content.Shared._White.Targeting; using Content.Shared.Interaction; using Content.Shared.Inventory; using Content.Shared.Inventory.Events; @@ -46,7 +47,22 @@ public override void Initialize() _equipEventsQueue.Enqueue((comp, args))); SubscribeLocalEvent((_, comp, args) => _equipEventsQueue.Enqueue((comp, args))); + + // PARSEC EDIT START + SubscribeLocalEvent(RefreshInventorySlots); + // PARSEC EDIT END + } + + // PARSEC EDIT START + public void RefreshInventorySlots(EntityUid uid, InventorySlotsComponent component, RefreshInventorySlotsEvent args) + { + if (component.SlotData.TryGetValue(args.SlotName, out var slotData) + && _playerManager.LocalEntity == uid) + { + OnSlotRemoved?.Invoke(slotData); + } } + // PARSEC EDIT END public override void Update(float frameTime) { diff --git a/Content.Client/UserInterface/Screens/DefaultGameScreen.xaml b/Content.Client/UserInterface/Screens/DefaultGameScreen.xaml index 54aeffe72c9..d0aac694bd8 100644 --- a/Content.Client/UserInterface/Screens/DefaultGameScreen.xaml +++ b/Content.Client/UserInterface/Screens/DefaultGameScreen.xaml @@ -9,6 +9,7 @@ xmlns:hotbar="clr-namespace:Content.Client.UserInterface.Systems.Hotbar.Widgets" xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls" xmlns:inventory="clr-namespace:Content.Client.UserInterface.Systems.Inventory.Widgets" + xmlns:targetdoll="clr-namespace:Content.Client._White.Targeting.Ui" Name="DefaultHud" VerticalExpand="False" VerticalAlignment="Bottom" @@ -28,6 +29,7 @@ + diff --git a/Content.Client/UserInterface/Screens/DefaultGameScreen.xaml.cs b/Content.Client/UserInterface/Screens/DefaultGameScreen.xaml.cs index e630b0c480e..a2335ae3f7f 100644 --- a/Content.Client/UserInterface/Screens/DefaultGameScreen.xaml.cs +++ b/Content.Client/UserInterface/Screens/DefaultGameScreen.xaml.cs @@ -23,6 +23,7 @@ public DefaultGameScreen() SetAnchorAndMarginPreset(Hotbar, LayoutPreset.BottomWide, margin: 5); SetAnchorAndMarginPreset(Chat, LayoutPreset.TopRight, margin: 10); SetAnchorAndMarginPreset(Alerts, LayoutPreset.TopRight, margin: 10); + SetAnchorAndMarginPreset(Targeting, LayoutPreset.BottomRight, margin: 10); // PARSEC Chat.OnResized += ChatOnResized; Chat.OnChatResizeFinish += ChatOnResizeFinish; diff --git a/Content.Client/UserInterface/Screens/SeparatedChatGameScreen.xaml b/Content.Client/UserInterface/Screens/SeparatedChatGameScreen.xaml index f8e204c9d18..6b49729b73c 100644 --- a/Content.Client/UserInterface/Screens/SeparatedChatGameScreen.xaml +++ b/Content.Client/UserInterface/Screens/SeparatedChatGameScreen.xaml @@ -10,6 +10,7 @@ xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls" xmlns:graphics="clr-namespace:Robust.Client.Graphics;assembly=Robust.Client" xmlns:inventory="clr-namespace:Content.Client.UserInterface.Systems.Inventory.Widgets" + xmlns:targetdoll="clr-namespace:Content.Client._White.Targeting.Ui" Name="SeparatedChatHud" VerticalExpand="False" VerticalAlignment="Bottom" @@ -20,6 +21,7 @@ + diff --git a/Content.Client/UserInterface/Screens/SeparatedChatGameScreen.xaml.cs b/Content.Client/UserInterface/Screens/SeparatedChatGameScreen.xaml.cs index 45a29e03f1d..2d85a3e4b2c 100644 --- a/Content.Client/UserInterface/Screens/SeparatedChatGameScreen.xaml.cs +++ b/Content.Client/UserInterface/Screens/SeparatedChatGameScreen.xaml.cs @@ -23,6 +23,7 @@ public SeparatedChatGameScreen() SetAnchorAndMarginPreset(Ghost, LayoutPreset.BottomWide, margin: 80); SetAnchorAndMarginPreset(Hotbar, LayoutPreset.BottomWide, margin: 5); SetAnchorAndMarginPreset(Alerts, LayoutPreset.CenterRight, margin: 10); + SetAnchorAndMarginPreset(Targeting, LayoutPreset.BottomRight, margin: 10); // PARSEC ScreenContainer.OnSplitResizeFinished += () => OnChatResized?.Invoke(new Vector2(ScreenContainer.SplitFraction, 0)); diff --git a/Content.Client/_White/Targeting/Systems/TargetingSystem.cs b/Content.Client/_White/Targeting/Systems/TargetingSystem.cs new file mode 100644 index 00000000000..2b50a1dda4b --- /dev/null +++ b/Content.Client/_White/Targeting/Systems/TargetingSystem.cs @@ -0,0 +1,83 @@ +using Content.Shared._White.Targeting; +using Content.Shared._White.Targeting.Components; +using Robust.Client.Player; +using Robust.Shared.Player; + +namespace Content.Client._White.Targeting.Systems; + +public sealed class TargetingSystem : EntitySystem +{ + [Dependency] private readonly IPlayerManager _playerManager = default!; + + public event Action? TargetingStartup; + public event Action? TargetingShutdown; + public event Action? TargetChange; + public event Action? PartStatusStartup; + public event Action? PartStatusUpdate; + public event Action? PartStatusShutdown; + public override void Initialize() + { + base.Initialize(); + + // Local Events Subscribers + SubscribeLocalEvent(HandlePlayerAttached); + SubscribeLocalEvent(HandlePlayerDetached); + SubscribeLocalEvent(OnTargetingStartup); + SubscribeLocalEvent(OnTargetingShutdown); + + // Network Events Subscribers + SubscribeNetworkEvent(OnTargetingIntegrityChange); + } + + private void HandlePlayerAttached(EntityUid uid, TargetingComponent component, LocalPlayerAttachedEvent args) + { + TargetingStartup?.Invoke(component); + PartStatusStartup?.Invoke(component); + } + + private void HandlePlayerDetached(EntityUid uid, TargetingComponent component, LocalPlayerDetachedEvent args) + { + TargetingShutdown?.Invoke(); + PartStatusShutdown?.Invoke(); + } + + private void OnTargetingStartup(EntityUid uid, TargetingComponent component, ComponentStartup args) + { + if (_playerManager.LocalEntity == uid) + { + TargetingStartup?.Invoke(component); + PartStatusStartup?.Invoke(component); + } + } + + private void OnTargetingShutdown(EntityUid uid, TargetingComponent component, ComponentShutdown args) + { + if (_playerManager.LocalEntity == uid) + { + TargetingShutdown?.Invoke(); + PartStatusShutdown?.Invoke(); + } + } + + private void OnTargetingIntegrityChange(TargetingIntegrityChangeEvent args) + { + if(!TryGetEntity(args.Entity, out var uid)) + return; + + if(!TryComp(uid, out TargetingComponent? component)) + return; + + if (!_playerManager.LocalEntity.Equals(uid) || !args.NeedRefresh) + return; + + PartStatusUpdate?.Invoke(component); + } + + private void HandleTargetingChange(ICommonSession? session, TargetingBodyParts target) + { + if (session is not { AttachedEntity: { } uid } || !TryComp(uid, out _)) + return; + + TargetChange?.Invoke(target); + } +} diff --git a/Content.Client/_White/Targeting/TargetingController.cs b/Content.Client/_White/Targeting/TargetingController.cs new file mode 100644 index 00000000000..35a0e44e3ec --- /dev/null +++ b/Content.Client/_White/Targeting/TargetingController.cs @@ -0,0 +1,82 @@ +using Content.Client._White.Targeting.Systems; +using Content.Client._White.Targeting.Ui; +using Content.Client.Gameplay; +using Content.Shared._White.Targeting; +using Content.Shared._White.Targeting.Components; +using Robust.Client.Player; +using Robust.Client.UserInterface.Controllers; + +namespace Content.Client._White.Targeting; + +public sealed class TargetingController : UIController, IOnStateEntered, IOnSystemChanged +{ + [Dependency] private readonly IEntityManager _entManager = default!; + [Dependency] private readonly IEntityNetworkManager _net = default!; + [Dependency] private readonly IPlayerManager _playerManager = default!; + + private TargetingComponent? _targetingComponent; + private TargetingWidget? TargetingControl => UIManager.GetActiveUIWidgetOrNull(); + + public void OnSystemLoaded(TargetingSystem system) + { + system.TargetingStartup += AddTargetingControl; + system.TargetingShutdown += RemoveTargetingControl; + system.TargetChange += CycleTarget; + } + + public void OnSystemUnloaded(TargetingSystem system) + { + system.TargetingStartup -= AddTargetingControl; + system.TargetingShutdown -= RemoveTargetingControl; + system.TargetChange -= CycleTarget; + } + + public void OnStateEntered(GameplayState state) + { + if (TargetingControl == null) + return; + + TargetingControl.SetTargetDollVisible(_targetingComponent != null); + + if (_targetingComponent != null) + TargetingControl.SetBodyPartsVisible(_targetingComponent.TargetBodyPart); + } + + public void AddTargetingControl(TargetingComponent component) + { + _targetingComponent = component; + + if (TargetingControl != null) + { + TargetingControl.SetTargetDollVisible(_targetingComponent != null); + + if (_targetingComponent != null) + TargetingControl.SetBodyPartsVisible(_targetingComponent.TargetBodyPart); + } + + } + + public void RemoveTargetingControl() + { + TargetingControl?.SetTargetDollVisible(false); + + _targetingComponent = null; + } + + public void CycleTarget(TargetingBodyParts bodyPart) + { + if (_playerManager.LocalEntity is not { } user + || _entManager.GetComponent(user) is not { } targetingComponent + || TargetingControl == null) + return; + + var player = _entManager.GetNetEntity(user); + + if (bodyPart == targetingComponent.TargetBodyPart) + return; + + var msg = new TargetingChangeBodyPartEvent(player, bodyPart); + _net.SendSystemNetworkMessage(msg); + TargetingControl?.SetBodyPartsVisible(bodyPart); + } +} diff --git a/Content.Client/_White/Targeting/Ui/TargetingWidget.xaml b/Content.Client/_White/Targeting/Ui/TargetingWidget.xaml new file mode 100644 index 00000000000..dd9ed53d25e --- /dev/null +++ b/Content.Client/_White/Targeting/Ui/TargetingWidget.xaml @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Content.Client/_White/Targeting/Ui/TargetingWidget.xaml.cs b/Content.Client/_White/Targeting/Ui/TargetingWidget.xaml.cs new file mode 100644 index 00000000000..76d1bb0af8b --- /dev/null +++ b/Content.Client/_White/Targeting/Ui/TargetingWidget.xaml.cs @@ -0,0 +1,86 @@ +using System.Linq; +using Content.Shared._White.Targeting.Components; +using Robust.Client.AutoGenerated; +using Robust.Client.UserInterface.Controls; +using Robust.Client.UserInterface.XAML; + +namespace Content.Client._White.Targeting.Ui; + +[GenerateTypedNameReferences] +public sealed partial class TargetingWidget : UIWidget +{ + private readonly TargetingController _controller; + private readonly Dictionary _bodyPartControls; + + public TargetingWidget() + { + RobustXamlLoader.Load(this); + _controller = UserInterfaceManager.GetUIController(); + + _bodyPartControls = GetBodyPartTextureButtons(); + + foreach (var bodyPartButton in _bodyPartControls) + { + bodyPartButton.Value.MouseFilter = MouseFilterMode.Stop; + bodyPartButton.Value.OnPressed += _ => SetActiveBodyPart(bodyPartButton.Key); + bodyPartButton.Value.OnMouseEntered += _ => SetHoverBodyPart(bodyPartButton.Key); + bodyPartButton.Value.OnMouseExited += _ => SetHoverBodyPart(bodyPartButton.Key); + + TargetDoll.Texture = Theme.ResolveTexture("targeting_doll"); + } + } + + private Dictionary GetBodyPartTextureButtons() + { + return new Dictionary + { + { TargetingBodyParts.Head, HeadButton }, + { TargetingBodyParts.Chest, ChestButton }, + { TargetingBodyParts.Stomach, StomachButton }, + { TargetingBodyParts.LeftArm, LeftArmButton }, + { TargetingBodyParts.LeftHand, LeftHandButton }, + { TargetingBodyParts.RightArm, RightArmButton }, + { TargetingBodyParts.RightHand, RightHandButton }, + { TargetingBodyParts.LeftLeg, LeftLegButton }, + { TargetingBodyParts.LeftFoot, LeftFootButton }, + { TargetingBodyParts.RightLeg, RightLegButton }, + { TargetingBodyParts.RightFoot, RightFootButton }, + }; + } + + private void SetActiveBodyPart(TargetingBodyParts bodyPart) + { + _controller.CycleTarget(bodyPart); + } + + public void SetBodyPartsVisible(TargetingBodyParts bodyPart) + { + foreach (var bodyPartButton in _bodyPartControls) + { + bodyPartButton.Value.Children.First().Visible = bodyPartButton.Key == bodyPart; + if (bodyPartButton.Value.Children.Last().Visible && bodyPartButton.Key == bodyPart) + bodyPartButton.Value.Children.Last().Visible = false; + } + } + + protected override void OnThemeUpdated() + { + TargetDoll.Texture = Theme.ResolveTexture("target_doll"); + } + + public void SetTargetDollVisible(bool visible) + { + Visible = visible; + } + + public void SetHoverBodyPart(TargetingBodyParts bodyPart) + { + foreach (var bodyPartButton in _bodyPartControls) + { + if (bodyPartButton.Key == bodyPart && !bodyPartButton.Value.Children.First().Visible) + { + bodyPartButton.Value.Children.Last().Visible = !bodyPartButton.Value.Children.Last().Visible; + } + } + } +} diff --git a/Content.Server/Atmos/EntitySystems/BarotraumaSystem.cs b/Content.Server/Atmos/EntitySystems/BarotraumaSystem.cs index d9af71f0014..0d120cc2d3d 100644 --- a/Content.Server/Atmos/EntitySystems/BarotraumaSystem.cs +++ b/Content.Server/Atmos/EntitySystems/BarotraumaSystem.cs @@ -279,7 +279,7 @@ public override void Update(float frameTime) private void ActLowPressure(EntityUid uid, BarotraumaComponent barotrauma) { // Deal damage and ignore resistances. Resistance to pressure damage should be done via pressure protection gear. - _damageableSystem.TryChangeDamage(uid, barotrauma.Damage * Atmospherics.LowPressureDamage, true, false); + _damageableSystem.TryChangeDamage(uid, barotrauma.Damage * Atmospherics.LowPressureDamage, true, false, sever: false); if (!barotrauma.TakingDamage) { @@ -299,7 +299,7 @@ private void ActHighPressure(EntityUid uid, BarotraumaComponent barotrauma, floa ); // Deal damage and ignore resistances. Resistance to pressure damage should be done via pressure protection gear. - _damageableSystem.TryChangeDamage(uid, barotrauma.Damage * damageScale, true, false); + _damageableSystem.TryChangeDamage(uid, barotrauma.Damage * damageScale, true, false, sever: false); if (!barotrauma.TakingDamage) { diff --git a/Content.Server/Body/Systems/BodySystem.cs b/Content.Server/Body/Systems/BodySystem.cs index e10158cf357..a4d4b0e7eab 100644 --- a/Content.Server/Body/Systems/BodySystem.cs +++ b/Content.Server/Body/Systems/BodySystem.cs @@ -10,8 +10,8 @@ using Content.Shared.Movement.Events; using Content.Shared.Movement.Systems; using Robust.Shared.Audio; -using Robust.Shared.Timing; using System.Numerics; +using Robust.Shared.Timing; namespace Content.Server.Body.Systems; @@ -22,6 +22,7 @@ public sealed class BodySystem : SharedBodySystem [Dependency] private readonly HumanoidAppearanceSystem _humanoidSystem = default!; [Dependency] private readonly MobStateSystem _mobState = default!; [Dependency] private readonly SharedMindSystem _mindSystem = default!; + [Dependency] private readonly SharedAppearanceSystem _appearance = default!; public override void Initialize() { @@ -92,9 +93,15 @@ protected override void RemovePart( if (layer is null) return; + _appearance.SetData(bodyEnt, layer, true); // PARSEC + var layers = HumanoidVisualLayersExtension.Sublayers(layer.Value); _humanoidSystem.SetLayersVisibility( - bodyEnt, layers, visible: false, permanent: true, humanoid); + bodyEnt, + layers, + visible: false, + permanent: true, + humanoid); } public override HashSet GibBody( @@ -119,8 +126,13 @@ public override HashSet GibBody( if (xform.MapUid is null) return new HashSet(); - var gibs = base.GibBody(bodyId, gibOrgans, body, launchGibs: launchGibs, - splatDirection: splatDirection, splatModifier: splatModifier, splatCone:splatCone); + var gibs = base.GibBody(bodyId, + gibOrgans, + body, + launchGibs: launchGibs, + splatDirection: splatDirection, + splatModifier: splatModifier, + splatCone:splatCone); var ev = new BeingGibbedEvent(gibs); RaiseLocalEvent(bodyId, ref ev); diff --git a/Content.Server/Hands/Systems/HandsSystem.cs b/Content.Server/Hands/Systems/HandsSystem.cs index ef0425ce372..b17a946d37e 100644 --- a/Content.Server/Hands/Systems/HandsSystem.cs +++ b/Content.Server/Hands/Systems/HandsSystem.cs @@ -1,5 +1,6 @@ using System.Numerics; using Content.Server._White.Other.ChangeThrowForceSystem; +using Content.Server.Body.Systems; using Content.Server.Damage.Components; using Content.Server.Inventory; using Content.Server.Stack; @@ -8,6 +9,7 @@ using Content.Shared._White.MagGloves; using Content.Shared.ActionBlocker; using Content.Shared.Body.Part; +using Content.Shared.Body.Systems; using Content.Shared.CombatMode; using Content.Shared.Damage.Systems; using Content.Shared.Ensnaring.Components; @@ -42,6 +44,7 @@ public sealed class HandsSystem : SharedHandsSystem [Dependency] private readonly PullingSystem _pullingSystem = default!; [Dependency] private readonly ThrowingSystem _throwingSystem = default!; [Dependency] private readonly CultItemSystem _cultItem = default!; + [Dependency] private readonly SharedBodySystem _body = default!; // Parsec public override void Initialize() { @@ -59,11 +62,34 @@ public override void Initialize() SubscribeLocalEvent(OnExploded); + // PARSEC SUBS EDIT + SubscribeLocalEvent(HandleBodyPartEnabled); + SubscribeLocalEvent(HandleBodyPartDisabled); + // PARSEC SUBS EDIT END + CommandBinds.Builder .Bind(ContentKeyFunctions.ThrowItemInHand, new PointerInputCmdHandler(HandleThrowItem)) .Register(); } + // PARSEC EDIT START + private void HandleBodyPartEnabled(EntityUid uid, HandsComponent component, ref TargetingBodyPartEnabledEvent args) + { + BeforeAddHand(uid, component, args.Entity, args.BodyPartComponent, SharedBodySystem.GetPartSlotContainerId(args.BodyPartComponent.ParentSlot?.Id ?? string.Empty)); + } + + private void HandleBodyPartDisabled(EntityUid uid, HandsComponent component, ref TargetingBodyPartDisabledEvent args) + { + if(TerminatingOrDeleted(uid)) + return; + + if (args.BodyPartComponent.PartType != BodyPartType.Hand) + return; + + RemoveHand(uid, SharedBodySystem.GetPartSlotContainerId(args.BodyPartComponent.ParentSlot?.Id ?? string.Empty)); + } + // PARSEC EDIT END + public override void Shutdown() { base.Shutdown(); @@ -109,22 +135,33 @@ private void OnDisarmed(EntityUid uid, HandsComponent component, DisarmedEvent a args.Handled = true; // no shove/stun. } - private void HandleBodyPartAdded(EntityUid uid, HandsComponent component, ref BodyPartAddedEvent args) + private void BeforeAddHand(EntityUid uid, HandsComponent component, EntityUid partUid, BodyPartComponent? partComponent, string partSlot) { - if (args.Part.Comp.PartType != BodyPartType.Hand) + if (partComponent is null || partComponent.PartType != BodyPartType.Hand) return; - // If this annoys you, which it should. - // Ping Smugleaf. - var location = args.Part.Comp.Symmetry switch + var location = partComponent.Symmetry switch { BodyPartSymmetry.None => HandLocation.Middle, BodyPartSymmetry.Left => HandLocation.Left, BodyPartSymmetry.Right => HandLocation.Right, - _ => throw new ArgumentOutOfRangeException(nameof(args.Part.Comp.Symmetry)) + _ => throw new ArgumentOutOfRangeException(nameof(partComponent.Symmetry)) + { + HelpLink = null, + HResult = 0, + Source = null + } }; - AddHand(uid, args.Slot, location); + if (_body.TryGetParentBodyPart(partUid, out _, out var parentPartComp) && partComponent.Enabled && parentPartComp.Enabled) + { + AddHand(uid, partSlot, location); + } + } + + private void HandleBodyPartAdded(EntityUid uid, HandsComponent component, ref BodyPartAddedEvent args) + { + BeforeAddHand(uid, component, args.Part.Owner, args.Part.Comp, args.Slot); } private void HandleBodyPartRemoved(EntityUid uid, HandsComponent component, ref BodyPartRemovedEvent args) diff --git a/Content.Server/Medical/HealingSystem.cs b/Content.Server/Medical/HealingSystem.cs index 70336c8b27f..d29d778ed55 100644 --- a/Content.Server/Medical/HealingSystem.cs +++ b/Content.Server/Medical/HealingSystem.cs @@ -1,11 +1,15 @@ +using System.Linq; using Content.Server.Administration.Logs; using Content.Server.Body.Components; using Content.Server.Body.Systems; using Content.Server.Medical.Components; using Content.Server.Popups; using Content.Server.Stack; +using Content.Shared._White.Targeting.Components; using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Audio; +using Content.Shared.Body.Part; +using Content.Shared.Body.Systems; using Content.Shared.Damage; using Content.Shared.Database; using Content.Shared.DoAfter; @@ -37,6 +41,7 @@ public sealed class HealingSystem : EntitySystem [Dependency] private readonly MobThresholdSystem _mobThresholdSystem = default!; [Dependency] private readonly PopupSystem _popupSystem = default!; [Dependency] private readonly SharedSolutionContainerSystem _solutionContainerSystem = default!; + [Dependency] private readonly SharedBodySystem _body = default!; // PARSEC public override void Initialize() { @@ -85,6 +90,19 @@ entity.Comp.DamageContainerID is not null && if (healed == null && healing.BloodlossModifier != 0) return; + if (healed != null && healed.GetTotal() == 0) + { + if (TryComp(args.User, out var user) + && TryComp(args.Target, out var target) + && healing.Damage.GetTotal() < 0) + { + var (type, symmetry) = _body.ConvertTargetBodyPart(user.TargetBodyPart); + if (_body.GetBodyChildrenOfType(args.Target.Value, type).FirstOrDefault() is { } bodyPart + && bodyPart.Component.PartIntegrity < BodyPartComponent.MaxPartIntegrity) + _body.TryChangePartIntegrity(bodyPart, healing.Damage.GetTotal().Float(), false, target.TargetBodyPart, out _); + } + } + var total = healed?.GetTotal() ?? FixedPoint2.Zero; // Re-verify that we can heal the damage. diff --git a/Content.Server/_White/Targeting/Systems/TargetingSystem.cs b/Content.Server/_White/Targeting/Systems/TargetingSystem.cs new file mode 100644 index 00000000000..c57e44477fd --- /dev/null +++ b/Content.Server/_White/Targeting/Systems/TargetingSystem.cs @@ -0,0 +1,56 @@ +using Content.Shared._White.Targeting; +using Content.Shared._White.Targeting.Components; +using Content.Shared.Body.Systems; +using Content.Shared.Mobs; +using Robust.Server.Audio; +using Robust.Shared.Audio; + +namespace Content.Server._White.Targeting.Systems; + +public sealed class TargetingSystem : EntitySystem +{ + [Dependency] private readonly AudioSystem _audio = default!; + [Dependency] private readonly SharedBodySystem _bodySystem = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeNetworkEvent(OnTargetChange); + SubscribeLocalEvent(OnMobStateChange); + } + + private void OnTargetChange(TargetingChangeBodyPartEvent message, EntitySessionEventArgs args) + { + if (!TryComp(GetEntity(message.Entity), out var target)) + return; + + target.TargetBodyPart = message.BodyPart; + + Dirty(GetEntity(message.Entity), target); + } + + private void OnMobStateChange(EntityUid uid, TargetingComponent component, MobStateChangedEvent args) + { + var changed = false; + + if (args.NewMobState == MobState.Dead) + { + foreach (TargetingBodyParts part in Enum.GetValues(typeof(TargetingBodyParts))) + { + component.TargetIntegrities[part] = TargetIntegrity.Dead; + changed = true; + } + } + else if (args is { OldMobState: MobState.Dead, NewMobState: MobState.Alive or MobState.Critical }) + { + component.TargetIntegrities = _bodySystem.GetBodyPartStatus(uid); + changed = true; + } + + if (changed) + { + Dirty(uid, component); + RaiseNetworkEvent(new TargetingIntegrityChangeEvent(GetNetEntity(uid)), uid); + } + } +} diff --git a/Content.Shared/Body/Organ/OrganComponent.cs b/Content.Shared/Body/Organ/OrganComponent.cs index 3048927b5fb..6152edfe3df 100644 --- a/Content.Shared/Body/Organ/OrganComponent.cs +++ b/Content.Shared/Body/Organ/OrganComponent.cs @@ -13,4 +13,7 @@ public sealed partial class OrganComponent : Component /// [DataField, AutoNetworkedField] public EntityUid? Body; + + [DataField] + public string SlotId = ""; } diff --git a/Content.Shared/Body/Part/BodyPartComponent.cs b/Content.Shared/Body/Part/BodyPartComponent.cs index c4e65c06a3f..bd576d8fd48 100644 --- a/Content.Shared/Body/Part/BodyPartComponent.cs +++ b/Content.Shared/Body/Part/BodyPartComponent.cs @@ -1,5 +1,6 @@ using Content.Shared.Body.Components; using Content.Shared.Body.Systems; +using Content.Shared.Containers.ItemSlots; using Robust.Shared.Containers; using Robust.Shared.GameStates; using Robust.Shared.Serialization; @@ -79,6 +80,34 @@ private List OrganSlotsVV return temp; } } + + //parsec edit start + [DataField, AutoNetworkedField] + public float PartIntegrity = 70f; + public const float MaxPartIntegrity = 70; + + [DataField, AutoNetworkedField] + public bool Enabled = true; + + [DataField] + public float PartHealingTime = 30; + public float PartHealingTimer = 0; + + [DataField] + public float SelfHealingAmount = 5; + + [DataField] + public string ContainerName { get; set; } = "part_slot"; + + [DataField, AutoNetworkedField] + public ItemSlot ItemInsertionSlot = new(); + + [DataField, AutoNetworkedField] + public EntityUid? OwnerBodyPart; + + [DataField, AutoNetworkedField] + public BodyPartSlot? ParentSlot; + //parsec edit end } /// diff --git a/Content.Shared/Body/Part/BodyPartEvents.cs b/Content.Shared/Body/Part/BodyPartEvents.cs index 0d8d2c8a268..95eba35a35f 100644 --- a/Content.Shared/Body/Part/BodyPartEvents.cs +++ b/Content.Shared/Body/Part/BodyPartEvents.cs @@ -5,3 +5,12 @@ namespace Content.Shared.Body.Part; [ByRefEvent] public readonly record struct BodyPartRemovedEvent(string Slot, Entity Part); + +[ByRefEvent] +public readonly record struct TargetingBodyPartEnableChangedEvent(bool IsEnabled); + +[ByRefEvent] +public readonly record struct TargetingBodyPartEnabledEvent(EntityUid Entity, BodyPartComponent BodyPartComponent); + +[ByRefEvent] +public readonly record struct TargetingBodyPartDisabledEvent(EntityUid Entity, BodyPartComponent BodyPartComponent); diff --git a/Content.Shared/Body/Systems/SharedBodySystem.Body.cs b/Content.Shared/Body/Systems/SharedBodySystem.Body.cs index 250f90db8f3..f542d1d0a32 100644 --- a/Content.Shared/Body/Systems/SharedBodySystem.Body.cs +++ b/Content.Shared/Body/Systems/SharedBodySystem.Body.cs @@ -4,15 +4,18 @@ using Content.Shared.Body.Organ; using Content.Shared.Body.Part; using Content.Shared.Body.Prototypes; +using Content.Shared.Damage; using Content.Shared.DragDrop; using Content.Shared.Gibbing.Components; using Content.Shared.Gibbing.Events; using Content.Shared.Gibbing.Systems; using Content.Shared.Inventory; +using Content.Shared.Standing.Systems; using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.Containers; using Robust.Shared.Map; +using Robust.Shared.Timing; using Robust.Shared.Utility; namespace Content.Shared.Body.Systems; @@ -29,6 +32,7 @@ public partial class SharedBodySystem [Dependency] private readonly InventorySystem _inventory = default!; [Dependency] private readonly GibbingSystem _gibbingSystem = default!; [Dependency] private readonly SharedAudioSystem _audioSystem = default!; + [Dependency] private readonly IGameTiming _gameTiming = default!; // PARSEC private const float GibletLaunchImpulse = 8; private const float GibletLaunchImpulseVariance = 3; @@ -42,7 +46,38 @@ private void InitializeBody() SubscribeLocalEvent(OnBodyInit); SubscribeLocalEvent(OnBodyMapInit); SubscribeLocalEvent(OnBodyCanDrag); + + // PARSEC EDIT START + SubscribeLocalEvent(OnDamageChanged); + SubscribeLocalEvent(OnStandAttempt); + // PARSEC EDIT END + } + + // PARSEC EDIT START + private void OnStandAttempt(Entity ent, ref StandAttemptEvent args) + { + if (ent.Comp.LegEntities.Count == 0) + args.Cancel(); + } + + private void OnDamageChanged(Entity ent, ref DamageChangedEvent args) + { + if (args.PartDamageMultiplier == 0 + || args.TargetBodyPart is null + || args.DamageDelta is null + || !args.DamageIncreased + && !args.DamageDecreased) + return; + + var (targetType, targetSymmetry) = ConvertTargetBodyPart(args.TargetBodyPart.Value); + foreach (var part in GetBodyChildrenOfType(ent, targetType, ent.Comp) + .Where(part => part.Component.Symmetry == targetSymmetry)) + { + if (_gameTiming.IsFirstTimePredicted) + ApplyPartDamage(part, args.DamageDelta, targetType, args.TargetBodyPart.Value, args.Sever, args.PartDamageMultiplier); + } } + // PARSEC EDIT END private void OnBodyInserted(Entity ent, ref EntInsertedIntoContainerMessage args) { diff --git a/Content.Shared/Body/Systems/SharedBodySystem.IntegrityPart.cs b/Content.Shared/Body/Systems/SharedBodySystem.IntegrityPart.cs new file mode 100644 index 00000000000..ba5a26a1ec6 --- /dev/null +++ b/Content.Shared/Body/Systems/SharedBodySystem.IntegrityPart.cs @@ -0,0 +1,338 @@ +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Content.Shared._White.Targeting; +using Content.Shared._White.Targeting.Components; +using Content.Shared.Body.Components; +using Content.Shared.Body.Part; +using Content.Shared.Damage; +using Content.Shared.Mobs.Components; +using Content.Shared.Mobs.Systems; +using Content.Shared.Standing; +using Robust.Shared.CPUJob.JobQueues; +using Robust.Shared.CPUJob.JobQueues.Queues; +using Robust.Shared.Network; +using Robust.Shared.Random; +using Robust.Shared.Timing; + +namespace Content.Shared.Body.Systems; + +public partial class SharedBodySystem +{ + [Dependency] private readonly INetManager _net = default!; + [Dependency] private readonly MobStateSystem _mobState = default!; + [Dependency] private readonly IRobustRandom _random = default!; + + private readonly string[] _damageTypes = ["Slash", "Pierce", "Blunt"]; + + private const double PartIntegrityJobTime = 0.005; + private readonly JobQueue _PartIntegrityJobQueue = new(PartIntegrityJobTime); + + public sealed class PartIntegrityJob : Job + { + private readonly SharedBodySystem _self; + private readonly Entity _ent; + public PartIntegrityJob(SharedBodySystem self, Entity ent, double maxTime, CancellationToken cancellation = default) : base(maxTime, cancellation) + { + _self = self; + _ent = ent; + } + + public PartIntegrityJob(SharedBodySystem self, Entity ent, double maxTime, IStopwatch stopwatch, CancellationToken cancellation = default) : base(maxTime, stopwatch, cancellation) + { + _self = self; + _ent = ent; + } + + protected override Task Process() + { + _self.ProcessPartIntegrityTick(_ent); + + return Task.FromResult(null); + } + } + + private EntityQuery _queryTargeting; + private void InitializePartIntegrity() + { + _queryTargeting = GetEntityQuery(); + } + + private void ProcessPartIntegrityTick(Entity entity) + { + if (entity.Comp is { Body: {} body, PartIntegrity: > 50 and < BodyPartComponent.MaxPartIntegrity } + && _queryTargeting.HasComp(body) + && !_mobState.IsDead(body)) + { + var healing = entity.Comp.SelfHealingAmount; + if (healing + entity.Comp.PartIntegrity > BodyPartComponent.MaxPartIntegrity) + healing = entity.Comp.PartIntegrity - BodyPartComponent.MaxPartIntegrity; + + TryChangePartIntegrity(entity, + healing, + false, + GetTargetBodyPart(entity), + out _); + } + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + _PartIntegrityJobQueue.Process(); + + if (!_timing.IsFirstTimePredicted) + return; + + using var query = EntityQueryEnumerator(); + while (query.MoveNext(out var ent, out var part)) + { + part.PartHealingTime += frameTime; + + if (part.PartHealingTimer >= part.PartHealingTime) + { + part.PartHealingTimer = 0; + _PartIntegrityJobQueue.EnqueueJob(new PartIntegrityJob(this, (ent, part), PartIntegrityJobTime)); + } + } + } + + /// + /// Propagates damage to the specified parts of the entity. + /// + private void ApplyPartDamage(Entity partEnt, + DamageSpecifier damage, + BodyPartType targetType, + TargetingBodyParts targetPart, + bool canSever, + float partMultiplier) + { + if (partEnt.Comp.Body is null) + return; + + foreach (var (damageType, damageValue) in damage.DamageDict) + { + if (damageValue.Float() == 0 + || TryEvadeDamage(partEnt.Comp.Body.Value, GetEvadeChance(targetType))) + continue; + + var modifier = GetDamageModifier(damageType); + var partModifier = GetPartDamageModifier(targetType); + var partIntegrityDamage = damageValue.Float() * modifier * partModifier * partMultiplier; + + TryChangePartIntegrity(partEnt, + partIntegrityDamage, + canSever && _damageTypes.Contains(damageType), + targetPart, + out var severed); + + if (severed) + break; + } + } + + public void TryChangePartIntegrity(Entity partEnt, + float partIntegrity, + bool canSever, + TargetingBodyParts? targetPart, + out bool severed) + { + severed = false; + if (!_timing.IsFirstTimePredicted || !_queryTargeting.HasComp(partEnt.Comp.Body)) + return; + + var partIdSlot = GetParentPartAndSlotOrNull(partEnt)?.Slot; + var originalPartIntegrity = partEnt.Comp.PartIntegrity; + partEnt.Comp.PartIntegrity = Math.Min(BodyPartComponent.MaxPartIntegrity, partEnt.Comp.PartIntegrity - partIntegrity); + if (canSever + && !partEnt.Comp.Enabled + && partEnt.Comp.PartIntegrity <= 0 + && partIdSlot is not null) + severed = true; + + switch (partEnt.Comp.Enabled) + { + case true + when partEnt.Comp.PartIntegrity <= 15.0f: + { + var ev = new TargetingBodyPartEnableChangedEvent(false); + RaiseLocalEvent(partEnt, ref ev); + break; + } + case false + when partEnt.Comp.PartIntegrity >= 80.0f: + { + var ev = new TargetingBodyPartEnableChangedEvent(true); + RaiseLocalEvent(partEnt, ref ev); + break; + } + } + + if (partEnt.Comp.PartIntegrity != originalPartIntegrity + && _queryTargeting.TryComp(partEnt.Comp.Body, out var targeting) + && HasComp(partEnt.Comp.Body)) + { + var newPartIntegrity = GetPartIntegrityThreshold(partEnt.Comp.PartIntegrity, severed, partEnt.Comp.Enabled); + + if (targetPart is not null && targeting.TargetIntegrities[targetPart.Value] != TargetIntegrity.Dead) + { + targeting.TargetIntegrities[targetPart.Value] = newPartIntegrity; + Dirty(partEnt.Comp.Body.Value, targeting); + } + + if (_net.IsServer) + RaiseNetworkEvent(new TargetingIntegrityChangeEvent(GetNetEntity(partEnt.Comp.Body.Value)), partEnt.Comp.Body.Value); + } + + if (severed && partIdSlot is not null) + DropPart(partEnt); + + Dirty(partEnt, partEnt.Comp); + } + + public Dictionary GetBodyPartStatus(EntityUid entityUid) + { + var result = new Dictionary(); + + if (!TryComp(entityUid, out var body)) + return result; + + foreach (TargetingBodyParts part in Enum.GetValues(typeof(TargetingBodyParts))) + { + result[part] = TargetIntegrity.Severed; + } + + foreach (var partComponent in GetBodyChildren(entityUid, body)) + { + var targetBodyPart = GetTargetBodyPart(partComponent.Component.PartType, partComponent.Component.Symmetry); + + if (targetBodyPart != null) + { + result[targetBodyPart.Value] = GetPartIntegrityThreshold(partComponent.Component.PartIntegrity, false, partComponent.Component.Enabled); + } + } + + return result; + } + + public TargetingBodyParts? GetTargetBodyPart(Entity part) + { + return GetTargetBodyPart(part.Comp.PartType, part.Comp.Symmetry); + } + + public TargetingBodyParts? GetTargetBodyPart(BodyPartComponent part) + { + return GetTargetBodyPart(part.PartType, part.Symmetry); + } + + public TargetingBodyParts? GetTargetBodyPart(BodyPartType type, BodyPartSymmetry symmetry) + { + return (type, symmetry) switch + { + (BodyPartType.Head, _) => TargetingBodyParts.Head, + (BodyPartType.Torso, _) => TargetingBodyParts.Chest, + (BodyPartType.Arm, BodyPartSymmetry.Left) => TargetingBodyParts.LeftArm, + (BodyPartType.Arm, BodyPartSymmetry.Right) => TargetingBodyParts.RightArm, + (BodyPartType.Leg, BodyPartSymmetry.Left) => TargetingBodyParts.LeftLeg, + (BodyPartType.Leg, BodyPartSymmetry.Right) => TargetingBodyParts.RightLeg, + _ => null + }; + } + + public (BodyPartType Type, BodyPartSymmetry Symmetry) ConvertTargetBodyPart(TargetingBodyParts targetPart) + { + return targetPart switch + { + TargetingBodyParts.Head => (BodyPartType.Head, BodyPartSymmetry.None), + TargetingBodyParts.Chest => (BodyPartType.Torso, BodyPartSymmetry.None), + TargetingBodyParts.Stomach => (BodyPartType.Torso, BodyPartSymmetry.None), + TargetingBodyParts.LeftArm => (BodyPartType.Arm, BodyPartSymmetry.Left), + TargetingBodyParts.LeftHand => (BodyPartType.Hand, BodyPartSymmetry.Left), + TargetingBodyParts.RightArm => (BodyPartType.Arm, BodyPartSymmetry.Right), + TargetingBodyParts.RightHand => (BodyPartType.Hand, BodyPartSymmetry.Right), + TargetingBodyParts.LeftLeg => (BodyPartType.Leg, BodyPartSymmetry.Left), + TargetingBodyParts.LeftFoot => (BodyPartType.Foot, BodyPartSymmetry.Left), + TargetingBodyParts.RightLeg => (BodyPartType.Leg, BodyPartSymmetry.Right), + TargetingBodyParts.RightFoot => (BodyPartType.Foot, BodyPartSymmetry.Right), + _ => (BodyPartType.Torso, BodyPartSymmetry.None) + }; + + } + + public float GetDamageModifier(string damageType) + { + return damageType switch + { + "Blunt" => 0.8f, + "Slash" => 1.2f, + "Pierce" => 0.5f, + "Heat" => 1.0f, + "Cold" => 1.0f, + "Shock" => 0.8f, + "Poison" => 0.8f, + "Radiation" => 0.8f, + "Cellular" => 0.8f, + _ => 0.5f + }; + } + + public float GetPartDamageModifier(BodyPartType partType) + { + return partType switch + { + BodyPartType.Head => 0.5f, + BodyPartType.Torso => 1.0f, + BodyPartType.Arm => 0.7f, + BodyPartType.Leg => 0.7f, + _ => 0.5f + }; + } + + public TargetIntegrity GetPartIntegrityThreshold(float PartIntegrity, bool severed, bool enabled) + { + if (severed) + return TargetIntegrity.Severed; + + if (!enabled) + return TargetIntegrity.Disabled; + + return PartIntegrity switch + { + <= 10.0f => TargetIntegrity.CriticallyWounded, + <= 25.0f => TargetIntegrity.HeavilyWounded, + <= 40.0f => TargetIntegrity.ModeratelyWounded, + <= 60.0f => TargetIntegrity.SomewhatWounded, + <= 80.0f => TargetIntegrity.LightlyWounded, + _ => TargetIntegrity.Healthy + }; + } + + public float GetEvadeChance(BodyPartType partType) + { + return partType switch + { + BodyPartType.Head => 0.70f, + BodyPartType.Arm => 0.20f, + BodyPartType.Leg => 0.20f, + BodyPartType.Torso => 0f, + _ => 0f + }; + } + + public bool CanEvadeDamage(EntityUid uid) + { + return TryComp(uid, out var mobState) + && TryComp(uid, out var standingState) + && !_mobState.IsCritical(uid, mobState) + && !_mobState.IsDead(uid, mobState) + && standingState.CurrentState != StandingState.Lying; + } + + public bool TryEvadeDamage(EntityUid uid, float evadeChance) + { + if (!CanEvadeDamage(uid)) + return false; + + return _random.NextFloat() < evadeChance; + } +} diff --git a/Content.Shared/Body/Systems/SharedBodySystem.Parts.cs b/Content.Shared/Body/Systems/SharedBodySystem.Parts.cs index ee79faa0b8e..580777655bc 100644 --- a/Content.Shared/Body/Systems/SharedBodySystem.Parts.cs +++ b/Content.Shared/Body/Systems/SharedBodySystem.Parts.cs @@ -1,12 +1,16 @@ using System.Diagnostics.CodeAnalysis; using System.Linq; +using Content.Shared._White.Targeting; using Content.Shared.Body.Components; using Content.Shared.Body.Events; using Content.Shared.Body.Organ; using Content.Shared.Body.Part; +using Content.Shared.Containers.ItemSlots; using Content.Shared.Damage; using Content.Shared.Damage.Prototypes; +using Content.Shared.Inventory; using Content.Shared.Movement.Components; +using Content.Shared.Random; using Robust.Shared.Containers; using Robust.Shared.Utility; @@ -14,6 +18,9 @@ namespace Content.Shared.Body.Systems; public partial class SharedBodySystem { + [Dependency] private readonly RandomHelperSystem _randomHelper = default!; + [Dependency] private readonly ItemSlotsSystem _slots = default!; + [Dependency] private readonly InventorySystem _inventorySystem = default!; private void InitializeParts() { // TODO: This doesn't handle comp removal on child ents. @@ -21,7 +28,196 @@ private void InitializeParts() // If you modify this also see the Body partial for root parts. SubscribeLocalEvent(OnBodyPartInserted); SubscribeLocalEvent(OnBodyPartRemoved); + + // PARSEC EDIT START + SubscribeLocalEvent(MapInit); + SubscribeLocalEvent(BodyPartRemoved); + SubscribeLocalEvent(TargetingPartEnableChanged); + // PARSEC EDIT END + } + + // PARSEC EDIT START + private void MapInit(Entity ent, ref MapInitEvent args) + { + if (ent.Comp.PartType != BodyPartType.Torso) + return; + + _slots.AddItemSlot(ent, ent.Comp.ContainerName, ent.Comp.ItemInsertionSlot); + Dirty(ent, ent.Comp); + } + + private void BodyPartRemoved(Entity ent, ref ComponentRemove args) + { + if (ent.Comp.PartType == BodyPartType.Torso) + { + _slots.RemoveItemSlot(ent, ent.Comp.ItemInsertionSlot); + } + } + + protected virtual void DropPart(Entity partEnt) + { + if (partEnt.Comp.Body is not null + && TryGetPartSlotContainerName(partEnt.Comp.PartType, out var containerNames) + && GetBodyPartCount(partEnt.Comp.Body.Value, partEnt.Comp.PartType) == 1) + { + foreach (var containerName in containerNames) + { + _inventorySystem.SetSlotStatus(partEnt.Comp.Body.Value, containerName, true); + var ev = new RefreshInventorySlotsEvent(containerName); + RaiseLocalEvent(partEnt.Comp.Body.Value, ev); + } + } + + if (TryComp(partEnt, out TransformComponent? transform) && _gameTiming.IsFirstTimePredicted) + { + var ev = new TargetingBodyPartEnableChangedEvent(false); + RaiseLocalEvent(partEnt, ref ev); + SharedTransform.AttachToGridOrMap(partEnt, transform); + _randomHelper.RandomOffset(partEnt, 0.5f); + } + } + + private void RemovePartEffect(Entity partEnt, Entity bodyEnt) + { + if (TerminatingOrDeleted(bodyEnt) || !Resolve(bodyEnt, ref bodyEnt.Comp, logMissing: false)) + return; + + if (partEnt.Comp.Children.Any()) + { + foreach (var slotId in partEnt.Comp.Children.Keys) + { + Standing.Down(bodyEnt); + if (Containers.TryGetContainer(partEnt, GetPartSlotContainerId(slotId), out var container) && + container is ContainerSlot slot && + slot.ContainedEntity is { } childEntity && + TryComp(childEntity, out BodyPartComponent? childPart)) + { + var ev = new TargetingBodyPartEnableChangedEvent(false); + RaiseLocalEvent(childEntity, ref ev); + DropPart((childEntity, childPart)); + } + } + Dirty(bodyEnt, bodyEnt.Comp); + } + + } + + private void TargetingPartEnableChanged(Entity partEnt, ref TargetingBodyPartEnableChangedEvent args) + { + partEnt.Comp.Enabled = args.IsEnabled; + Dirty(partEnt, partEnt.Comp); + + if (args.IsEnabled) + EnablePart(partEnt); + else + DisablePart(partEnt); + } + + private void EnablePart(Entity partEnt) + { + if (!TryComp(partEnt.Comp.Body, out BodyComponent? body)) + return; + + switch (partEnt.Comp.PartType) + { + case BodyPartType.Leg: + AddLeg(partEnt, (partEnt.Comp.Body.Value, body)); + break; + + case BodyPartType.Arm: + { + var hand = GetBodyChildrenOfType(partEnt.Comp.Body.Value, BodyPartType.Hand).FirstOrDefault(); + if (hand != default) + { + var ev = new TargetingBodyPartEnabledEvent(partEnt.Owner, partEnt.Comp); + RaiseLocalEvent(partEnt.Comp.Body.Value, ref ev); + } + + break; + } + + case BodyPartType.Hand: + { + var ev = new TargetingBodyPartEnabledEvent(partEnt.Owner, partEnt.Comp); + RaiseLocalEvent(partEnt.Comp.Body.Value, ref ev); + break; + } + } + } + + private void DisablePart(Entity partEnt) + { + if (!TryComp(partEnt.Comp.Body, out BodyComponent? body)) + return; + + switch (partEnt.Comp.PartType) + { + case BodyPartType.Leg: + RemoveLeg(partEnt, (partEnt.Comp.Body.Value, body)); + break; + + case BodyPartType.Arm: + { + var hand = GetBodyChildrenOfType(partEnt.Comp.Body.Value, BodyPartType.Hand).FirstOrDefault(); + if (hand != default) + { + var ev = new TargetingBodyPartDisabledEvent(partEnt.Owner, partEnt.Comp); + RaiseLocalEvent(partEnt.Comp.Body.Value, ref ev); + } + + break; + } + + case BodyPartType.Hand: + { + var ev = new TargetingBodyPartDisabledEvent(partEnt.Owner, partEnt.Comp); + RaiseLocalEvent(partEnt.Comp.Body.Value, ref ev); + break; + } + } + } + + public bool TryGetBodyPartOrgans( + EntityUid uid, + Type type, + [NotNullWhen(true)] out List<(EntityUid Id, OrganComponent Organ)>? organs, + BodyPartComponent? part = null) + { + if (!Resolve(uid, ref part)) + { + organs = null; + return false; + } + + var list = (from organ in GetPartOrgans(uid, part) where HasComp(organ.Id, type) select (organ.Id, organ.Component)).ToList(); + + if (list.Count != 0) + { + organs = list; + return true; + } + + organs = null; + return false; + } + + private bool TryGetPartSlotContainerName(BodyPartType partType, out HashSet containerNames) + { + containerNames = partType switch + { + BodyPartType.Arm => ["gloves"], + BodyPartType.Leg => ["shoes"], + BodyPartType.Head => ["eyes", "ears", "head", "mask"], + _ => [] + }; + return containerNames.Count > 0; + } + + public int GetBodyPartCount(EntityUid bodyId, BodyPartType partType, BodyComponent? body = null) + { + return !Resolve(bodyId, ref body, logMissing: false) ? 0 : GetBodyChildren(bodyId, body).Count(part => part.Component.PartType == partType); } + // PARSEC EDIT END private void OnBodyPartInserted(Entity ent, ref EntInsertedIntoContainerMessage args) { @@ -127,13 +323,15 @@ protected virtual void RemovePart( { Resolve(bodyEnt, ref bodyEnt.Comp, logMissing: false); Dirty(partEnt, partEnt.Comp); - partEnt.Comp.Body = null; + partEnt.Comp.OwnerBodyPart = partEnt.Comp.Body; // parsec + partEnt.Comp.ParentSlot = null; // parsec var ev = new BodyPartRemovedEvent(slotId, partEnt); RaiseLocalEvent(bodyEnt, ref ev); RemoveLeg(partEnt, bodyEnt); PartRemoveDamage(bodyEnt, partEnt); + RemovePartEffect(partEnt, bodyEnt); // parsec } private void AddLeg(Entity legEnt, Entity bodyEnt) @@ -416,8 +614,8 @@ public bool AttachPart( BodyPartComponent? part = null) { return Resolve(parentPartId, ref parentPart, logMissing: false) - && parentPart.Children.TryGetValue(slotId, out var slot) - && AttachPart(parentPartId, slot, partId, parentPart, part); + && parentPart.Children.TryGetValue(slotId, out var slot) + && AttachPart(parentPartId, slot, partId, parentPart, part); } /// @@ -444,6 +642,7 @@ public bool AttachPart( return false; } + part.ParentSlot = slot; return Containers.Insert(partId, container); } diff --git a/Content.Shared/Body/Systems/SharedBodySystem.cs b/Content.Shared/Body/Systems/SharedBodySystem.cs index 020d5b4be47..845df2e0436 100644 --- a/Content.Shared/Body/Systems/SharedBodySystem.cs +++ b/Content.Shared/Body/Systems/SharedBodySystem.cs @@ -43,6 +43,7 @@ public override void Initialize() InitializeBody(); InitializeParts(); + InitializePartIntegrity(); // Parsec } /// diff --git a/Content.Shared/Damage/Systems/DamageableSystem.cs b/Content.Shared/Damage/Systems/DamageableSystem.cs index 6b84bfc0128..91f841fc3eb 100644 --- a/Content.Shared/Damage/Systems/DamageableSystem.cs +++ b/Content.Shared/Damage/Systems/DamageableSystem.cs @@ -9,10 +9,12 @@ using Content.Shared.Radiation.Events; using Content.Shared.Rejuvenate; using Content.Shared._White; +using Content.Shared._White.Targeting.Components; using Robust.Shared.Configuration; using Robust.Shared.GameStates; using Robust.Shared.Network; using Robust.Shared.Prototypes; +using Robust.Shared.Random; using Robust.Shared.Utility; namespace Content.Shared.Damage @@ -24,6 +26,7 @@ public sealed class DamageableSystem : EntitySystem [Dependency] private readonly INetManager _netMan = default!; [Dependency] private readonly MobThresholdSystem _mobThreshold = default!; [Dependency] private readonly IConfigurationManager _cfg = default!; + [Dependency] private readonly IRobustRandom _random = default!; private float DamageGetModifier { get; set; } @@ -49,6 +52,27 @@ public override void Initialize() _mindContainerQuery = GetEntityQuery(); } + // PARSEC EDIT START + public TargetingBodyParts? GetRandomBodyPart(EntityUid uid, TargetingComponent? target = null) + { + if (!Resolve(uid, ref target)) + return null; + + var totalWeight = target.TargetingChance.Values.Sum(); + var randomValue = _random.NextFloat() * totalWeight; + + foreach (var (part, weight) in target.TargetingChance) + { + if (randomValue <= weight) + return part; + + randomValue -= weight; + } + + return TargetingBodyParts.Chest; + } + // PARSEC EDIT END + /// /// Initialize a damageable component /// @@ -107,11 +131,32 @@ public void SetDamage(EntityUid uid, DamageableComponent damageable, DamageSpeci /// This updates cached damage information, flags the component as dirty, and raises a damage changed event. /// The damage changed event is used by other systems, such as damage thresholds. /// - public void DamageChanged(EntityUid uid, DamageableComponent component, DamageSpecifier? damageDelta = null, - bool interruptsDoAfters = true, EntityUid? origin = null) + public void DamageChanged(EntityUid uid, + DamageableComponent component, + DamageSpecifier? damageDelta = null, + bool interruptsDoAfters = true, + EntityUid? origin = null, + bool sever = true, + float partDamageMultiplier = 1F) { component.Damage.GetDamagePerGroup(_prototypeManager, component.DamagePerGroup); component.TotalDamage = component.Damage.GetTotal(); + TargetingBodyParts? targetingBodyPart = null; // PARSEC EDIT + + // START PARSEC EDIT + if (TryComp(uid, out var target)) + { + if (origin.HasValue && TryComp(origin.Value, out var targeter)) + { + targetingBodyPart = targeter.TargetBodyPart; + } + else + { + targetingBodyPart = GetRandomBodyPart(uid, target); + } + } + // END PARSEC EDIT + Dirty(uid, component); if (_appearanceQuery.TryGetComponent(uid, out var appearance) && damageDelta != null) @@ -119,7 +164,7 @@ public void DamageChanged(EntityUid uid, DamageableComponent component, DamageSp var data = new DamageVisualizerGroupData(component.DamagePerGroup.Keys.ToList()); _appearance.SetData(uid, DamageVisualizerKeys.DamageUpdateGroups, data, appearance); } - RaiseLocalEvent(uid, new DamageChangedEvent(component, damageDelta, interruptsDoAfters, origin)); + RaiseLocalEvent(uid, new DamageChangedEvent(component, damageDelta, interruptsDoAfters, origin, targetingBodyPart, sever, partDamageMultiplier)); } /// @@ -134,8 +179,14 @@ public void DamageChanged(EntityUid uid, DamageableComponent component, DamageSp /// Returns a with information about the actual damage changes. This will be /// null if the user had no applicable components that can take damage. /// - public DamageSpecifier? TryChangeDamage(EntityUid? uid, DamageSpecifier damage, bool ignoreResistances = false, - bool interruptsDoAfters = true, DamageableComponent? damageable = null, EntityUid? origin = null) + public DamageSpecifier? TryChangeDamage(EntityUid? uid, + DamageSpecifier damage, + bool ignoreResistances = false, + bool interruptsDoAfters = true, + DamageableComponent? damageable = null, + EntityUid? origin = null, + bool? sever = true, + float? partDamageMultiplier = 1F) { if (!uid.HasValue || !_damageableQuery.Resolve(uid.Value, ref damageable, false)) { @@ -198,7 +249,15 @@ public void DamageChanged(EntityUid uid, DamageableComponent component, DamageSp } if (delta.DamageDict.Count > 0) - DamageChanged(uid.Value, damageable, delta, interruptsDoAfters, origin); + { + DamageChanged(uid.Value, + damageable, + delta, + interruptsDoAfters, + origin, + sever ?? true, + partDamageMultiplier ?? 1.00f); + } return delta; } @@ -358,11 +417,31 @@ public sealed class DamageChangedEvent : EntityEventArgs /// public readonly EntityUid? Origin; - public DamageChangedEvent(DamageableComponent damageable, DamageSpecifier? damageDelta, bool interruptsDoAfters, EntityUid? origin) + // PARSEC EDIT START + public readonly float PartDamageMultiplier; + + public readonly bool Sever; + + public readonly TargetingBodyParts? TargetBodyPart; + + public readonly bool DamageDecreased; + // PARSEC EDIT END + + public DamageChangedEvent(DamageableComponent damageable, + DamageSpecifier? damageDelta, + bool interruptsDoAfters, + EntityUid? origin, + TargetingBodyParts? targetBodyPart = null, + bool sever = true, + float partDamageMultiplier = 1F) { Damageable = damageable; DamageDelta = damageDelta; Origin = origin; + TargetBodyPart = targetBodyPart; + Sever = sever; + PartDamageMultiplier = partDamageMultiplier; + if (DamageDelta == null) return; @@ -374,6 +453,12 @@ public DamageChangedEvent(DamageableComponent damageable, DamageSpecifier? damag DamageIncreased = true; break; } + + if (damageChange < 0) + { + DamageDecreased = true; + break; + } } InterruptsDoAfters = interruptsDoAfters && DamageIncreased; } diff --git a/Content.Shared/Inventory/InventorySystem.Slots.cs b/Content.Shared/Inventory/InventorySystem.Slots.cs index 19831278b0a..9ea527652db 100644 --- a/Content.Shared/Inventory/InventorySystem.Slots.cs +++ b/Content.Shared/Inventory/InventorySystem.Slots.cs @@ -1,17 +1,56 @@ using System.Diagnostics.CodeAnalysis; using Content.Shared.Inventory.Events; +using Content.Shared.Random; using Content.Shared.Storage; using Robust.Shared.Containers; using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.Manager; using Robust.Shared.Utility; namespace Content.Shared.Inventory; public partial class InventorySystem : EntitySystem { + [Dependency] private readonly RandomHelperSystem _randomHelper = default!; // PARSEC + [Dependency] private readonly ISerializationManager _serializationManager = default!; // PARSEC [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly IViewVariablesManager _vvm = default!; + // PARSEC EDIT START + public void SetSlotStatus(EntityUid uid, string slotName, bool isDisabled, InventoryComponent? inventory = null) + { + if (!Resolve(uid, ref inventory)) + return; + + foreach (var slot in inventory.Slots) + { + if (slot.Name != slotName) + continue; + + + if (!TryGetSlotContainer(uid, slotName, out var container, out _, inventory)) + break; + + if (isDisabled) + { + if (container.ContainedEntity is { } entityUid && TryComp(entityUid, out TransformComponent? transform) && _gameTiming.IsFirstTimePredicted) + { + _transform.AttachToGridOrMap(entityUid, transform); + _randomHelper.RandomOffset(entityUid, 0.5f); + } + _containerSystem.ShutdownContainer(container); + } + else + _containerSystem.EnsureContainer(uid, slotName); + + slot.Disabled = isDisabled; + break; + } + + Dirty(uid, inventory); + } + // PARSEC EDIT END + private void InitializeSlots() { SubscribeLocalEvent(OnInit); @@ -57,6 +96,8 @@ protected virtual void OnInit(EntityUid uid, InventoryComponent component, Compo if (!_prototypeManager.TryIndex(component.TemplateId, out InventoryTemplatePrototype? invTemplate)) return; + _serializationManager.CopyTo(invTemplate.Slots, ref component.Slots, notNullableOverride: true); // PARSEC + component.Slots = invTemplate.Slots; component.Containers = new ContainerSlot[component.Slots.Length]; for (var i = 0; i < component.Containers.Length; i++) @@ -115,7 +156,7 @@ public bool TryGetSlot(EntityUid uid, string slot, [NotNullWhen(true)] out SlotD foreach (var slotDef in inventory.Slots) { - if (!slotDef.Name.Equals(slot)) + if (!slotDef.Name.Equals(slot) || slotDef.Disabled) continue; slotDefinition = slotDef; return true; @@ -203,7 +244,7 @@ public bool MoveNext([NotNullWhen(true)] out ContainerSlot? container) var i = _nextIdx++; var slot = _slots[i]; - if ((slot.SlotFlags & _flags) == 0) + if ((slot.SlotFlags & _flags) == 0 || slot.Disabled) continue; container = _containers[i]; @@ -221,7 +262,7 @@ public bool NextItem(out EntityUid item) var i = _nextIdx++; var slot = _slots[i]; - if ((slot.SlotFlags & _flags) == 0) + if ((slot.SlotFlags & _flags) == 0 || slot.Disabled) continue; var container = _containers[i]; diff --git a/Content.Shared/Inventory/InventoryTemplatePrototype.cs b/Content.Shared/Inventory/InventoryTemplatePrototype.cs index a4d77767e37..67d3022c231 100644 --- a/Content.Shared/Inventory/InventoryTemplatePrototype.cs +++ b/Content.Shared/Inventory/InventoryTemplatePrototype.cs @@ -55,4 +55,7 @@ public sealed partial class SlotDefinition /// Entity blacklist for CanEquip checks. /// [DataField("blacklist")] public EntityWhitelist? Blacklist = null; + + [DataField] + public bool Disabled; // PARSEC } diff --git a/Content.Shared/_White/Targeting/Components/TargetingComponent.cs b/Content.Shared/_White/Targeting/Components/TargetingComponent.cs new file mode 100644 index 00000000000..09f4ab9b6ae --- /dev/null +++ b/Content.Shared/_White/Targeting/Components/TargetingComponent.cs @@ -0,0 +1,74 @@ +using Robust.Shared.Audio; +using Robust.Shared.GameStates; + +namespace Content.Shared._White.Targeting.Components; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class TargetingComponent : Component +{ + [ViewVariables, AutoNetworkedField] + public TargetingBodyParts TargetBodyPart = TargetingBodyParts.Chest; + + [DataField] + public Dictionary TargetingChance = new() + { + { TargetingBodyParts.Head, 0.1f }, + { TargetingBodyParts.Chest, 0.4f }, + { TargetingBodyParts.LeftArm, 0.125f }, + { TargetingBodyParts.RightArm, 0.125f }, + { TargetingBodyParts.LeftLeg, 0.125f }, + { TargetingBodyParts.Stomach, 0.125f }, + { TargetingBodyParts.RightFoot, 0.100f }, + { TargetingBodyParts.LeftFoot, 0.100f }, + { TargetingBodyParts.RightHand, 0.100f }, + { TargetingBodyParts.LeftHand, 0.100f } + }; + + [ViewVariables, AutoNetworkedField] + public Dictionary TargetIntegrities = new() + { + { TargetingBodyParts.Head, TargetIntegrity.Healthy }, + { TargetingBodyParts.Chest, TargetIntegrity.Healthy }, + { TargetingBodyParts.LeftArm, TargetIntegrity.Healthy }, + { TargetingBodyParts.RightArm, TargetIntegrity.Healthy }, + { TargetingBodyParts.LeftLeg, TargetIntegrity.Healthy }, + { TargetingBodyParts.RightLeg, TargetIntegrity.Healthy }, + { TargetingBodyParts.Stomach, TargetIntegrity.Healthy }, + { TargetingBodyParts.RightHand, TargetIntegrity.Healthy }, + { TargetingBodyParts.LeftHand, TargetIntegrity.Healthy }, + { TargetingBodyParts.RightFoot, TargetIntegrity.Healthy }, + { TargetingBodyParts.LeftFoot, TargetIntegrity.Healthy }, + }; + + // Maybe in future, not now, very bad sound + //[DataField, ViewVariables(VVAccess.ReadWrite)] + //public SoundSpecifier SoundToggle = new SoundPathSpecifier("/Audio/White/Targeting/targetingToggle.ogg"); +} + +public enum TargetingBodyParts +{ + Head, + Chest, + LeftArm, + RightArm, + LeftLeg, + RightLeg, + Stomach, + LeftHand, + RightHand, + LeftFoot, + RightFoot +} + +public enum TargetIntegrity +{ + Healthy, + LightlyWounded, + SomewhatWounded, + ModeratelyWounded, + HeavilyWounded, + CriticallyWounded, + Severed, + Dead, + Disabled, +} diff --git a/Content.Shared/_White/Targeting/TargetingEvents.cs b/Content.Shared/_White/Targeting/TargetingEvents.cs new file mode 100644 index 00000000000..e9c631f1099 --- /dev/null +++ b/Content.Shared/_White/Targeting/TargetingEvents.cs @@ -0,0 +1,38 @@ +using Content.Shared._White.Targeting.Components; +using Robust.Shared.Serialization; + +namespace Content.Shared._White.Targeting; + +[Serializable, NetSerializable] +public sealed class TargetingChangeBodyPartEvent : EntityEventArgs +{ + public NetEntity Entity { get; } + public TargetingBodyParts BodyPart { get; } + public TargetingChangeBodyPartEvent(NetEntity entity, TargetingBodyParts bodyPart) + { + Entity = entity; + BodyPart = bodyPart; + } +} + +[Serializable, NetSerializable] +public sealed class TargetingIntegrityChangeEvent : EntityEventArgs +{ + public NetEntity Entity { get; } + public bool NeedRefresh { get; } + public TargetingIntegrityChangeEvent(NetEntity entity, bool needRefresh = true) + { + Entity = entity; + NeedRefresh = needRefresh; + } +} + +public sealed class RefreshInventorySlotsEvent : EntityEventArgs +{ + public string SlotName { get; } + + public RefreshInventorySlotsEvent(string slotName) + { + SlotName = slotName; + } +} diff --git a/Resources/Audio/White/Targeting/targetingToggle.ogg b/Resources/Audio/White/Targeting/targetingToggle.ogg new file mode 100644 index 0000000000000000000000000000000000000000..4d1fa9f33259617895d9899f59577606d3663dd7 GIT binary patch literal 4677 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 Gwf_J)eXQF6 literal 0 HcmV?d00001 diff --git a/Resources/Prototypes/Body/Organs/human.yml b/Resources/Prototypes/Body/Organs/human.yml index 69081020ce0..c35a2a8fb5c 100644 --- a/Resources/Prototypes/Body/Organs/human.yml +++ b/Resources/Prototypes/Body/Organs/human.yml @@ -43,6 +43,7 @@ - type: Sprite state: brain - type: Organ + slotId: "brain" - type: Input context: "ghost" - type: Brain @@ -74,6 +75,8 @@ name: eyes description: "I see you!" components: + - type: Organ + slotId: eyes - type: Sprite layers: - state: eyeball-l @@ -119,6 +122,8 @@ - state: lung-l - state: lung-r - type: Lung + - type: Organ + slotId: lungs - type: Metabolizer removeEmpty: true solutionOnBody: false @@ -148,6 +153,8 @@ name: heart description: "I feel bad for the heartless bastard who lost this." components: + - type: Organ + slotId: heart - type: Sprite state: heart-on # The heart 'metabolizes' medicines and poisons that aren't filtered out by other organs. @@ -167,6 +174,8 @@ name: stomach description: "Gross. This is hard to stomach." components: + - type: Organ + slotId: stomach - type: Sprite state: stomach - type: SolutionContainerManager @@ -196,6 +205,8 @@ name: liver description: "Pairing suggestion: chianti and fava beans." components: + - type: Organ + slotId: liver - type: Sprite state: liver - type: Metabolizer # The liver metabolizes certain chemicals only, like alcohol. diff --git a/Resources/Prototypes/Body/Prototypes/a_ghost.yml b/Resources/Prototypes/Body/Prototypes/a_ghost.yml index 09784c3ef53..f04ed70197e 100644 --- a/Resources/Prototypes/Body/Prototypes/a_ghost.yml +++ b/Resources/Prototypes/Body/Prototypes/a_ghost.yml @@ -6,17 +6,17 @@ torso: part: TorsoHuman connections: - - right_arm - - left_arm - right_arm: + - right arm + - left arm + right arm: part: RightArmHuman connections: - - right_hand - left_arm: + - right hand + left arm: part: LeftArmHuman connections: - - left_hand - right_hand: + - left hand + right hand: part: RightHandHuman - left_hand: + left hand: part: LeftHandHuman diff --git a/Resources/Prototypes/Body/Prototypes/human.yml b/Resources/Prototypes/Body/Prototypes/human.yml index 94c77a27d73..7a0f3bb5a7b 100644 --- a/Resources/Prototypes/Body/Prototypes/human.yml +++ b/Resources/Prototypes/Body/Prototypes/human.yml @@ -13,37 +13,37 @@ torso: part: TorsoHuman connections: - - right_arm - - left_arm - - right_leg - - left_leg + - right arm + - left arm + - right leg + - left leg organs: heart: OrganHumanHeart lungs: OrganHumanLungs stomach: OrganHumanStomach liver: OrganHumanLiver kidneys: OrganHumanKidneys - right_arm: + right arm: part: RightArmHuman connections: - - right_hand - left_arm: + - right hand + left arm: part: LeftArmHuman connections: - - left_hand - right_hand: + - left hand + right hand: part: RightHandHuman - left_hand: + left hand: part: LeftHandHuman - right_leg: + right leg: part: RightLegHuman connections: - - right_foot - left_leg: + - right foot + left leg: part: LeftLegHuman connections: - - left_foot - right_foot: + - left foot + right foot: part: RightFootHuman - left_foot: + left foot: part: LeftFootHuman diff --git a/Resources/Prototypes/Entities/Mobs/Species/base.yml b/Resources/Prototypes/Entities/Mobs/Species/base.yml index 0466cfd26d8..05661a96381 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/base.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/base.yml @@ -239,6 +239,7 @@ amount: 5 - type: Speech speechSounds: Alto + - type: Targeting - type: DamageForceSay - type: Vocal sounds: @@ -280,6 +281,7 @@ id: BaseMobSpeciesOrganic abstract: true components: + - type: Targeting - type: Barotrauma damage: types: @@ -336,6 +338,7 @@ id: BaseSpeciesDummy abstract: true components: + - type: Targeting - type: Hands - type: Inventory - type: InventorySlots diff --git a/Resources/Textures/Interface/Ashen/targeting_doll.png b/Resources/Textures/Interface/Ashen/targeting_doll.png new file mode 100644 index 0000000000000000000000000000000000000000..e8eb2f52717b08c7124e99ddf4e2196a958b9362 GIT binary patch literal 422 zcmV;X0a^ZuP)B!WNgi#Ry4AL+$E_3_uFqG4dg>tn??69QH5lvm-Ll}lhpd9N#+YW% zasLXji1&+wmlEqi2;ZTeheu^_Y$rnaVE}n~a3r{2Cn*r|%S-3nOz1*N2_u>aRX`%5 z1hn{*z%>*?uj4?dHCEw-Q1+>9Q)euM(t%tZl+h3~0i}H8T=sKDX$U?EdG?W(P0}VjAg!8)cZ@$o{WHe@4;JDYw)l`f Q3jhEB07*qoM6N<$g4h?VQ2+n{ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Clockwork/targeting_doll.png b/Resources/Textures/Interface/Clockwork/targeting_doll.png new file mode 100644 index 0000000000000000000000000000000000000000..8426d42299a09f42051f2e351fdc74b8f3b60c27 GIT binary patch literal 1219 zcmV;!1U&nRP)Z zPe>zI9LGPVGj?oJn=v?UD27c4%eEc#P+>(BHuchz*B*1&s|RrpUb?5<+hSRYUJ5-3 zg|fYMPi3J*h!h12RYLI~MwBw$Y0bFl32U(ZyI6w#^EX7zdS;E z)#yxq_uNQ}4@?`h#La9TmNh+*GAy%+mH-LxHaBhfPh<9i=*`1Ov+#vq#?y+0Nl+Nzq#)T ze)?p+q9vt(VDq>YA4y7jadylbTUpxF&Er;Jt$EyvFMc_$`(>z_%=~9bV`14yTV@l} z#ytXY=C?8m0FNH7RRA6@PU?>yu2oX;cN~Bt=PaJjDuK-binC*^EN$w$)rPmW?wkQo zw_3=jZ@XAjH5n}dF;8O~{ycD9^zq`P{&;axfBIy-lFurRs>w8adjgxUENup!#o00P zSw(O5_QX|9reBo+=vO6FP4<52;a-Lmu*@dV_5lbwNfZNh=L{_=aj>;VW;91(Y5>4{ z9&GIeEcP={w_0(*OnSIC5atpQ5ZZedBqda2$2@LTO68hfXwSX;ahtoh6C7;qQ7YFk zk6V>|R&fBD$2}gK5baN03aEWC$A9MHzo4t`oKd%06{zWjsR8cZc4;e>YwT7V6~H@h z863eRfRGc;F1~ z%>i^pLl~DbplWj9U05Cty-a(HT)AjkxAZI)1C8Am)p+V`xc9 z->o*{etA*sUdVv(WN_o%rEf3N`h%@KcJ^&bm>Qr|uHB2=IfQ&x(fxViGC#O71L5QY(NR&D8Xz;83)F`H#egV2qU!k(6%D0w zje?jf*Dht?+)OBgLa;(YcPbX>S0%(Z{o5@Z3o&*P1Hb?31g~U6O6Oec*U{F)%`x!tr*T-X zqiQndZ*)2%fVJvLdj3Juh-%ON_^Szxpy1p`eUW1y4tBFBWPbIn+kJI)M$;21Dlisnyww+$jRXH!SXObo-%vG~Kxbr`P3C6Yo=w%{ zfHSI^d{3lUKZ@i129SZywXB^VGM3rg2rDe)il=Eqk7&B!WNgi#Ry4AL+$E_3_uFqG4dg>tn??69QH5lvm-Ll}lhpd9N#+YW% zasLXji1&+wmlEqi2;ZTeheu^_Y$rnaVE}n~a3r{2Cn*r|%S-3nOz1*N2_u>aRX`%5 z1hn{*z%>*?uj4?dHCEw-Q1+>9Q)euM(t%tZl+h3~0i}H8T=sKDX$U?EdG?W(P0}VjAg!8)cZ@$o{WHe@4;JDYw)l`f Q3jhEB07*qoM6N<$g4h?VQ2+n{ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Minimalist/targeting_doll.png b/Resources/Textures/Interface/Minimalist/targeting_doll.png new file mode 100644 index 0000000000000000000000000000000000000000..e8eb2f52717b08c7124e99ddf4e2196a958b9362 GIT binary patch literal 422 zcmV;X0a^ZuP)B!WNgi#Ry4AL+$E_3_uFqG4dg>tn??69QH5lvm-Ll}lhpd9N#+YW% zasLXji1&+wmlEqi2;ZTeheu^_Y$rnaVE}n~a3r{2Cn*r|%S-3nOz1*N2_u>aRX`%5 z1hn{*z%>*?uj4?dHCEw-Q1+>9Q)euM(t%tZl+h3~0i}H8T=sKDX$U?EdG?W(P0}VjAg!8)cZ@$o{WHe@4;JDYw)l`f Q3jhEB07*qoM6N<$g4h?VQ2+n{ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Plasmafire/targeting_doll.png b/Resources/Textures/Interface/Plasmafire/targeting_doll.png new file mode 100644 index 0000000000000000000000000000000000000000..57262d67028b03c02f37300c70b7c86d9dc066ae GIT binary patch literal 462 zcmV;<0WtoGP);043`B7PLs~nf6~#%~{Qq}W8ry{Zp#$fDv2@X5Rh2tbRk_oloEhx< zCj)n`O^pcvpZrpvT{39f%iFs*A%p-?&o23Y=|zUF zTR$Om1W4e8HKF(43_)ZNVGw<lAhm=O>#2=`?`MobCN^uYi$4=o6m1arbb!T_HUa{{cA`~|pL5lBu3 zh+72xw;I^3`*BTBr$d6CrD+Tsbzn1t_995GGd*K+xEJ5#m1x^(%&E zD~4ygLwLH`=&^~8ZJm!^7R!VaSgOhJj^huiJjU_=1B90xZ-OR$IRF3v07*qoM6N<$ Eg5+YkBme*a literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Retro/targeting_doll.png b/Resources/Textures/Interface/Retro/targeting_doll.png new file mode 100644 index 0000000000000000000000000000000000000000..a147539c3ae627b06ea0fcfe67a9228dd21ae5cd GIT binary patch literal 383 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Doll/leftfoot.png b/Resources/Textures/White/Targeting/Doll/leftfoot.png new file mode 100644 index 0000000000000000000000000000000000000000..07da8e67b7544af6097d5fd978fd36a563621bb2 GIT binary patch literal 5462 zcmeHLdr%YC8V}VA%0uvhRjZN)z2alZZgw}>T@!gEJR$}WBdC3`*=!&{9wdPTM2jE{ zYVj(*mGLoh>!TI5ScKw>tAL>OQ58pQN3iAA2Zh_KB35wjNrH&e&fIav_AfKD$=P$h z?{~iMcYfbF*Ic*!GWvEbJgT!V(#zYn`Cd&c3s)0w4QXo;n*T%*aL z(WbIoOQwT41Xbh$3+>CKl{tZ#_AB-SmE zjy*hM(r)j_?;c;ejrQh;-kjZ-{BiPBx7lS?rZcDiQGN9KckAMpZ2oFV*2cZkF1Lb! zx@SK;8Ju$)zo`+4xK;FKkkumAF3 z#Ki|4PkLs0O^lNISEL3N9Y2*Q?J5WjxUhNc_@uDzVZnDAsYPnK|`CsdqcW+}8^Che9;#kGI>7bLv&ywaI?mMGlrWeWyEV8-w*NAHA$*05;@~UR3_3ey$l7V% zgBuo=<`kJL>qhPQXJez!lyhlYm#>&Te9-o3UWZL_?SALiNUkZdFOuiYzj5GTWJ6fg z)VMpbsej+Je!nkj{-WtaadlRj`N{o*Cf^UYEspy7{?|=SE#)<)GwrVVP0_R3F6{lh zyd>kdMVFe6EY0d@jyl$HqDyEyce)p8JlwixO~#e{gO;|aL#CT;@h6(k#%(Xw?4Zsc zy;pv*tF+?C^Vm}%MMC`J($FhAu5s}tTXt1OV_RIt?485aFXz0sE$?RQ2Gp%8A>&%* zgAKz=UCTp4JO@7v`*Qun_7S&bdEfh`MQ!?|^4HGdsO25oe_GbowX(Tz=kAk*KkS8z zvxY?bdD<95dEC|lW!mwH)pP5&w^*O~NrMWOdG>zdIaL2y_k$<=rf87d=|GnwagoI$`%w-^J;0)g$k1 z*rcg}YjRU+YIfEh$Xi`rHmod{+db$`drRqE-sEMQM=d^UGg`enmv)~2!I~4pN3XYU z8La$PP<&+HmWHxbA04_Y^>$4vio9^`$NjaKxc-JDJNuN!!x^351Vx-GM#r{{T>0}B z{lc^Fokh2Ax|q3>IJc@eG&@>MU;f)lzpB9Mp1P`*!>7@_aEhEee$r?U-Hc<%^l{VD zRuHB8#7Mw0 zt6y5rP*cNC)0VGeTzvPf9Us)~*VA!u>&_jf_3zBv^{}=gs4l1Mqh0gLf9Ygy=}S1z z6I*7dJe{7N(6#>2;wX;^E_t_3*QQ6Uf0A>4LPEEEvuDG)9xOk5qAh5Tq46E*vEa^a zw~qarjP}dH9w$F_C5XXw9ve<{{Mymcb+Y$^tL?YF3-V2ewki${=Wu*RYQbK#P%(#M z47xyCZBVg+Hk}ddRUD2u$Y!LO6xPC3v58u}gx6VpipSNeCA@fC0V|ABHc1~|u@;(Z)1~Uolug2O;8LJ%@8R6X9qFhUKAXzw zfT0m^ETMuh91}vMh$JAEB~Tn@1+-8t8~`!bqy?&^QwK(6 zhf)J5R77ARl}ZDkFad-S2n!J!Ap&V|4G2Yqt5g{3fKoG5xWS~O!E$PKbRx?)>JuFU zcEYKU7`cQe2!vnu#H7*|4R8Q8pw+7lR`bgtrB=tzx6pPz5fO?Yga9K@QhTeJyHWvwqaS2LNlh$mF_@GFL#l*l4~lE|>>pNuf>P5K zT1Hz~0168*3PC8CR0>cEMkoO~9R`g7_6D_9lllLw?d8K2I~P4tYXl0b9fAk6VMZfkB#GpYDQp4h4^;%?6FdN}Je_M8G593JBD}6*r)7siwXfjWvn2uLGbA zLJ$bXln6<|0tyxK_NevANa19G#v!11Q+a&(XDY)FXle`wcZ|QnV*K0BGTE=hH^_H&JV&Jum->U14 z(dGW~NuSk&zvou)98c8EdkWqGxT>NeWRAB1oTt+2PeE&_F>;Za!|@ntzg#%mO2&Xr zH;Y^m=62U(=qQ(WPxSovIp`wfvJmBv8;ZsduN>HiQ&W}8DY^dM;{Obid*$SGbw9eY vG+J0(kh|txYm7CUfF{RJx+JcD)BMa#-U6LS9tVyM%1 literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Doll/leftfoot_hover.png b/Resources/Textures/White/Targeting/Doll/leftfoot_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..2c9f9e38df46d02146b3875717a9ff840faee264 GIT binary patch literal 5476 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Doll/lefthand_hover.png b/Resources/Textures/White/Targeting/Doll/lefthand_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..3ff52eae555b870e68bb83de31a192057d27fdf5 GIT binary patch literal 6174 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Doll/leftleg.png b/Resources/Textures/White/Targeting/Doll/leftleg.png new file mode 100644 index 0000000000000000000000000000000000000000..99dc24ce62ece522e0099552bfac0170da399f1d GIT binary patch literal 5488 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 T)k~kCmKb+uAE(kKVJZIsYnLPV literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Doll/mouth.png b/Resources/Textures/White/Targeting/Doll/mouth.png new file mode 100644 index 0000000000000000000000000000000000000000..202f411874e1bfebf30b7edf2642593cc4424c14 GIT binary patch literal 5219 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 b`pNt`E{SyxIoSrb#0nndAF3|$owe{kU37F` literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Doll/mouth_hover.png b/Resources/Textures/White/Targeting/Doll/mouth_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..a5014f42ca3db0a388ddf896159d75a6c4cd5106 GIT binary patch literal 5208 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 Sge(HMy!hxOMeSrw(SHDU=oxna literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Doll/rightarm_hover.png b/Resources/Textures/White/Targeting/Doll/rightarm_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..7121c80830df2fa38f689ab9050edf0f918c64a1 GIT binary patch literal 6592 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Doll/righthand.png b/Resources/Textures/White/Targeting/Doll/righthand.png new file mode 100644 index 0000000000000000000000000000000000000000..e71f8de80ed087cb7adea8ca430681c53120a505 GIT binary patch literal 5467 zcmeHLdsGuw8jng*0Y$6$R${;>44Iis$jnFtOn5{L1`Ml$woYayFoirw0tt$OZ-G@o ztAZlx78Pv;sjDo$zz0@*Kd`!LtDMR~KjSz3oBK93HRZlbPx%mT1b#H<}DuE{Ww^ z(u^#hwQ*V=&vvzOP4J34Bi%xt6l#`bdM`Md4CgPY4EC%F%x_j}?{3*UxmVtBw<)Uw z$GIQhZv5?6>w*kpRIE6$>xl5ND9ufV&zU&c7ja}&dw?4Ogcm-CM=m+yuVWTeg?7nM5RL;|7PF>U1Y<)g@ zNkZYeqt>nQvCD@Xs8~EXHmf3Mzc+ECF>V%r_C$8`Zzqq}T9b-9Gr&^1 zCrY*?>umL+?q+&wXy4n1yIl{z;EP=;4)5Ff{GOd7ZjI>^dt~*M!vjturV;-@ga7(V z?ed7HKX#^1?Fj1q@{C8lrl>Zw-^%M>-EtOSsnIFJo<@CARvQy!H0`Pkart=Gw2v2G z$QUu#_gu%YkXgFEUmyG^SKzjzi}M(-o+WuB+3aIU^6=tLs*rnEg3>d2+e~4(g>v)? zes#eLxUgU=WE@naqo`F>$>dRn1<#=j(XrNDX2lulC0CVl~cDW z+?*~dzM4Ozq2s6W5tUW-eSD?Kw*!au9lqCd#q%?bgLjY3Saem8+IYC2Zse8OJ$^ay zN!TdVZCm}be%68YIkzTWTYfI=o>z0vU%Sj+Fm~MUqM?U8dprz0bmK(Vl60Djy~^Wt zSjfp_Duqn;ssw=W3uos^!;b{@TXbVfc1BF+F-vf!B(je@2OsZ|Gh@@=Jz`Vf%4YYq znD;2ZW%Cjb9okT{eSXfa((a}6_)k04H{2|~Cm1$oP4C#FHlx+OX?D}e@2r_Bq3BXW zzLWYix}v-!zqT}cdf7dhyK}5&1{xsS3uEB*GpI97RcXSHa4C`n8lclf z052{XaM!i}8jmw^g_lgL#7(uI_B+n`j4Hi2D8wydiC2f7==PDD++3-v;^+z9KL-4C z%QN{!S5xhs(R1_Y4jv`Bg94v=zPP`mU_+5|H1wHj}N|#yV!8UebGWwS%I>wCy&>o7YFvFDar{X zZP58qj6uWt*>py*XYqIefi@#WC$bj4hK=X+QbE(cDgmEkq=Ly}C9E{c*aR+oriq<2 zGg3{@Or!}$5IEK)z(xW99c!WZHeHh5OxmOZ2QCTP_HLno?=Z0>N(EDtD!$BMV)>XK z<_AL|HZBzvjCJ7$m>4Y?Ee~yl0C!SBg2iGag+i;<>Sq=C8BFm)gdhkZj0#Z{0v3=t zO>d!WklyTNhiJi&vu4`F87-Va&$nYz8bgXjDiDBi{;T!rj7nu2yx!c(0^mbvql`kt z4;Jcl!uB3!OGqjJX=>V_>CJ zl5zu`Vqcy@E*044Cm93HF{GnOX<3N|_QxR+EutZe)zFXzrYHy&Y5j2;qfr8(+CeGw zW(%dKSvwQ}_u~K#1rs!m&?1OnH6jSppcq6@3=2t67!zx8n!zci9mGTv2UJNVwO^GT ziUClFSd6d)BZgo`fkP1*g_;rseiLz*c1E>K`&ls%c*F$Pf$4;_Pc0Lh_2+V{^2wWmYCH|tVI?RihO$s{ z%EAIr7{y2gAz?y|ib&X>6yZKFXtc98Fq}5+e_7khhab?A^l;7$=1+5UwbaxkHo4`l z)gM~J9vq5XIQYJPy9`Fdb0s?h##UI(4s!?y+TN7A&9sp%P z77&c75rTwK5|apo?>{_$2`198VxV;~3Ixh(7>HsJE#%LzxK@maF@LHhY40jLe>DmN zU64RKe?oW|B0@A0f`JfP0!mqgF_4DBVaOj;qE@Q~yMyN4W>2DqVNyhpDDh{6Cx$68 z3d1x+Fa!t>7O@b8gFF&igk>mNtHEIWO|ku-;(T4tufhuu+K;nWr5GUmuVQU6Xm|br zQMdGga}^xZ!nSj|Rqa4&@AK2TNxaV~`1}u(ycNG6==wm{TQTrf#vj!6fv&e=;H`{5 zsOz24UwQY!T<{LSSrZW^cf1YYJ(KOr0IjaZ@Tq1V&$XBR>cCrD z*bj7ewkVV#o$tAJ?d?4L3!3Q!y2J{3u)53TklOODnQ#wY_48b0(ABAPddIEH99SGa vZ2!{SL}B*AED26JM~*C7bS?GSh@1uPM;hF?!!eo1>{BX2BITvyX3YB!e5kzX literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Doll/righthand_hover.png b/Resources/Textures/White/Targeting/Doll/righthand_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..d51910da1735eae1f8cd1ac6621aaba45d280ada GIT binary patch literal 6207 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 E0F#f?zyJUM literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Doll/rightleg_hover.png b/Resources/Textures/White/Targeting/Doll/rightleg_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..b0936de0a0988200facc73e57f9acb8fee7e2891 GIT binary patch literal 5908 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Doll/stomach.png b/Resources/Textures/White/Targeting/Doll/stomach.png new file mode 100644 index 0000000000000000000000000000000000000000..cada7a5adea648ab486e0cff3bc3b78c6c583f41 GIT binary patch literal 541 zcmV+&0^EX>4Tx04R}tkv&MmKp2MKriy=62Rn#3WT;LSM2k2|6^me@v=v%)FuC*(nlvOS zE{=k0!NH%!s)LKOt`4q(Aov5~?BJy6A|-y86k5c1aCZ;yeecWNcYshYGu7;v1XRs3 zlCh|m$*ziBujoS$255~)%+%wl#WXy}*FAiEzYFs$@47!nzmhW<;1h}Gm~L3a8^kl4 zmd<&fILL~ULVQjear_B#$>b`5 zkz)ZBsE`~#_#gc4t(l*ma+3m4p!3DHKgNKrU7%63?eAmTZkz!AXW&X}`73o`_LKBl zOA8$VgWJHxbxV`?fXf|V_(_)x$&vgtg?t`(KcjET0zf zSVionG{D=yFgAE9KS9K)ZgNg?LjqEX>4Tx04R}tkv&MmKp2MKriy=62Rn#3WT;LSM2k2|6^me@v=v%)FuC*(nlvOS zE{=k0!NH%!s)LKOt`4q(Aov5~?BJy6A|-y86k5c1aCZ;yeecWNcYshYGu7;v1XRs3 zlCh|m$*ziBujoS$255~)%+%wl#WXy}*FAiEzYFs$@47!nzmhW<;1h}Gm~L3a8^kl4 zmd<&fILL~ULVQjear_B#$>b`5 zkz)ZBsE`~#_#gc4t(l*ma+3m4p!3DHKgNKrU7%63?eAmTZkz!AXW&X}`73o`_LKBl zOA8$VgWJHxbxV`?fXf|V_(_)x$&vgtg?t`(KcjET0zV!Z literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Doll/torso.png b/Resources/Textures/White/Targeting/Doll/torso.png new file mode 100644 index 0000000000000000000000000000000000000000..941608e0d389c5fb140682d27bdbea8fe6756f3b GIT binary patch literal 536 zcmV+z0_XjSP)EX>4Tx04R}tkv&MmKp2MKriy=62Rn#3WT;LSM2k2|6^me@v=v%)FuC*(nlvOS zE{=k0!NH%!s)LKOt`4q(Aov5~?BJy6A|-y86k5c1aCZ;yeecWNcYshYGu7;v1XRs3 zlCh|m$*ziBujoS$255~)%+%wl#WXy}*FAiEzYFs$@47!nzmhW<;1h}Gm~L3a8^kl4 zmd<&fILL~ULVQjear_B#$>b`5 zkz)ZBsE`~#_#gc4t(l*ma+3m4p!3DHKgNKrU7%63?eAmTZkz!AXW&X}`73o`_LKBl zOA8$VgWJHxbxV`?fXf|V_(_)x$&vgtg?t`(KcjET0zSGjL6S+_GLRG0#^45l;IkE0>rxf<&14#kbhCgv7mhb4d!e=$ABt< aCe#OYs0xOx#4Hd10000EX>4Tx04R}tkv&MmKp2MKriy=62Rn#3WT;LSM2k2|6^me@v=v%)FuC*(nlvOS zE{=k0!NH%!s)LKOt`4q(Aov5~?BJy6A|-y86k5c1aCZ;yeecWNcYshYGu7;v1XRs3 zlCh|m$*ziBujoS$255~)%+%wl#WXy}*FAiEzYFs$@47!nzmhW<;1h}Gm~L3a8^kl4 zmd<&fILL~ULVQjear_B#$>b`5 zkz)ZBsE`~#_#gc4t(l*ma+3m4p!3DHKgNKrU7%63?eAmTZkz!AXW&X}`73o`_LKBl zOA8$VgWJHxbxV`?fXf|V_(_)x$&vgtg?t`(KcjET0zqP3=E@+u_<;Spw5ATfq{XMfq{X6s90oVm<0gQumt=nqEHe50000FVdQ&MBb@0LMEl AQ~&?~ literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/chest.rsi/chest_1.png b/Resources/Textures/White/Targeting/Status/chest.rsi/chest_1.png new file mode 100644 index 0000000000000000000000000000000000000000..591b6a5bab5ae843376516c4b6ec7ff84745a0f7 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|_yc@GTp9i| z1jR8-Ucsa)Jb_2}6&M!hw!x zMqy(PgNI=Uco;=yICwBBhcNnu3xybPwb?Q-Sl2PM?z*#lK2Rrvr>mdKI;Vst0HK&G A<^TWy literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/chest.rsi/chest_2.png b/Resources/Textures/White/Targeting/Status/chest.rsi/chest_2.png new file mode 100644 index 0000000000000000000000000000000000000000..71f09fc7f6b9bd060464f2194375919c69f0f400 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|_yc@GTp9i| z#04>|n9Q(u8AE9bL*Z9>518F~p)bIYENegrUbr;Xp?; zqp&fD!NafvJd7eU96T76Lm2(Sg+dIt+H4sZtm_zBcimY&AE=YT)78&qol`;+0BA}p AJOBUy literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/chest.rsi/chest_3.png b/Resources/Textures/White/Targeting/Status/chest.rsi/chest_3.png new file mode 100644 index 0000000000000000000000000000000000000000..fa9f954321ca062b2e99e196306e10b6c1ef3e71 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|_yc@GTp9i| z#5pjmC}h}M$586WFrj3}JD?P6NswPK!+#)8F~p)bIYENegrUbr;Xp?; zqp&fD!NafvJd7eU96T76Lm2(Sg+dIt+H4sZtm_zBcimY&AE=YT)78&qol`;+0Ep%* ArvLx| literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/chest.rsi/chest_4.png b/Resources/Textures/White/Targeting/Status/chest.rsi/chest_4.png new file mode 100644 index 0000000000000000000000000000000000000000..ada865a05feb185577dd430bd00969d23bfcd6aa GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|_yc@GTp9i| z#3?bXuwmHi#89fqkYf4b3{Z--B*-tA;Xe?_Tu=jFVdQ&MBb@03{$Q Ang9R* literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/chest.rsi/chest_5.png b/Resources/Textures/White/Targeting/Status/chest.rsi/chest_5.png new file mode 100644 index 0000000000000000000000000000000000000000..eefec17cf6057f69452a6cb4da15774d87e6ad7d GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|Bm#UwTp9i| zEMQ;=4h}xSz@Vq6_n(0wE-uc>%1Yy=`evXSj*=k1V21w?aP?G(5m3y=)5S5wqBl7~ zg4Kkf$H(W4kB`m{QG<<}Hg4Qx_%MuN5}VQ;t{DflW}MvKG?6ohH7|UV!`cIndjk#5 aFfwR`GrXC!cS0-B90pHUKbLh*2~7YCBs|Li literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/chest.rsi/chest_6unused.png b/Resources/Textures/White/Targeting/Status/chest.rsi/chest_6unused.png new file mode 100644 index 0000000000000000000000000000000000000000..c289a454bdb5a9074999e863762f2703f3d301bc GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|_yc@GTp9i| z=;`SN2M5Q+#aUTdU7P=w6)448666=m@E-_dE~tS_((`n246*1pF(kU3Zqx2kK<-boFyt=akR{07$AT A`Tzg` literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/chest.rsi/meta.json b/Resources/Textures/White/Targeting/Status/chest.rsi/meta.json new file mode 100644 index 00000000000..b175f743e72 --- /dev/null +++ b/Resources/Textures/White/Targeting/Status/chest.rsi/meta.json @@ -0,0 +1,32 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Tgstation sprites taken at commit https://github.com/tgstation/tgstation/commit/c7e14784b35b1a136351c396d3a546f461ee2451", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "chest_0" + }, + { + "name": "chest_1" + }, + { + "name": "chest_2" + }, + { + "name": "chest_3" + }, + { + "name": "chest_4" + }, + { + "name": "chest_5" + }, + { + "name": "chest_6unused" + } + ] +} diff --git a/Resources/Textures/White/Targeting/Status/groin.rsi/groin_0.png b/Resources/Textures/White/Targeting/Status/groin.rsi/groin_0.png new file mode 100644 index 0000000000000000000000000000000000000000..2e46e3a8cf1db046c2c06ac090df412c212feb73 GIT binary patch literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|_yc@GTp9i| z$Oe?FXU)|rTBV%O-?XRoK2VCaB*-tA;Xe?_Tu=ja)Jcw;s&1sCywwi w`Sk1%bzsP2)e&e2X5=ssEMZp!%Ed4+)UYtPAAVBv4XBO5)78&qol`;+0ARK(JOBUy literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/groin.rsi/groin_2.png b/Resources/Textures/White/Targeting/Status/groin.rsi/groin_2.png new file mode 100644 index 0000000000000000000000000000000000000000..8a6e3add67f7a291a76514fd82b795cf10e81070 GIT binary patch literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|_yc@GTp9i| z#04>|n9Q(u8AE9bL*Z9>51Ixyt1>IgIhGjbRRmar=VFVdQ&MBb@04ZiGk^lez literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/groin.rsi/groin_3.png b/Resources/Textures/White/Targeting/Status/groin.rsi/groin_3.png new file mode 100644 index 0000000000000000000000000000000000000000..6d7966fc14190edf38b2d63e198f3c2944052822 GIT binary patch literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|_yc@GTp9i| z#5pjmC}h}M$586WFrj3}JD?P6NswPK!+#)Ixyt1>IgIhGjbRRmar=VFVdQ&MBb@07$_r{Qv*} literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/groin.rsi/groin_4.png b/Resources/Textures/White/Targeting/Status/groin.rsi/groin_4.png new file mode 100644 index 0000000000000000000000000000000000000000..cc36cf23ca46540663073a1f24171aa7d3b36643 GIT binary patch literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|_yc@GTp9i| z#3?bXuwmHi#89fqkYf4b3{Z--B*-tA;Xe?_Tu=j%1Yy=`evXSj*=k1V21w?aP?G(5m3y;)5S5wqBl7~ zf^~6&&w)cnP8~aT>e!JEZ$@QdVPlSs4@?>-&XsK`&|+XzYkH@!Btc{XH^WvthKvKX S_h$h0GkCiCxvXFVdQ&MBb@0EKBN5&!@I literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/head.rsi/head_1.png b/Resources/Textures/White/Targeting/Status/head.rsi/head_1.png new file mode 100644 index 0000000000000000000000000000000000000000..0ba1a77dfd9a8755f1793921a8c583cd40f5767e GIT binary patch literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv{s5m4SBC!#L2(R|S1>Hw%aC5m zU{Q1NJy43VB*-tA!Qt7BG$2RY)5S4FV`6fGf;0!$f=`lDMFLq{rc4c(${{H&C=}py k`Ou3;9{af68ILkB%>2r9ye>3(0#F-+r>mdKI;Vst0Ak1|qyPW_ literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/head.rsi/head_2.png b/Resources/Textures/White/Targeting/Status/head.rsi/head_2.png new file mode 100644 index 0000000000000000000000000000000000000000..1cb55b4fe97f7c31bd11c3a899fd4ef2feb8b6bf GIT binary patch literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv{s5m4SBC!#aX}0#CNu0^#!#BV zQ215e11QB<666=m;PC858jz#y>EaloF)=woL7IbW!6(V7B7v+eQ>F$?<&cyX6bf*< keCWj^kA2+kj7J$5W`1QlUKg4?0jQ0^)78&qol`;+04^XV`Tzg` literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/head.rsi/head_3.png b/Resources/Textures/White/Targeting/Status/head.rsi/head_3.png new file mode 100644 index 0000000000000000000000000000000000000000..d797b40a16129e062c7a105896b1d9a0784102be GIT binary patch literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv{s5m4SBC!#aSjYC3K{m+F_ii- zOeop$4k*P~666=m;PC858jz#y>EaloF)=woL7IbW!6(V7B7v+eQ>F$?<&cyX6bf*< keCWj^kA2+kj7J$5W`1QlUKg4?0jQ0^)78&qol`;+087s&WdHyG literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/head.rsi/head_4.png b/Resources/Textures/White/Targeting/Status/head.rsi/head_4.png new file mode 100644 index 0000000000000000000000000000000000000000..fbc1678ce5dacc75e2bbeea26616cf509326c462 GIT binary patch literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv{s5m4SBC!#aY_s;Y#8=BF_daD zq*%T<1C(Mc3GxeOaCmkj4am{FVdQ&MBb@0Pj^MSO5S3 literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/head.rsi/head_5.png b/Resources/Textures/White/Targeting/Status/head.rsi/head_5.png new file mode 100644 index 0000000000000000000000000000000000000000..4d024c61f7f2c0bc5fd3e850e0d7af7d2eb1c05f GIT binary patch literal 155 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvi2$DvSBC!#3m6#m^z?#*gHJFp z#Kpz^XJD|hvJ(B-yc4K~u_VYZn8D%MjWi&~(9^{+L}Oxdf`T-M=7LW%eR={|Lwx22 zPSsf6wt$PHot1k*mZ96_Ln?6|`?%d1k1{X>JZ4Fr_DE+JP&0$4tDnm{r-UW|Q%fr_ literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/head.rsi/head_6unused.png b/Resources/Textures/White/Targeting/Status/head.rsi/head_6unused.png new file mode 100644 index 0000000000000000000000000000000000000000..74b58c642bbb81375ac68067edc66aaa7dad4983 GIT binary patch literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv{s5m4SBC!#dU|@n!NGBHaaLAV z*XF-v1xhiN1o;IsI6S+N2IOdax;TbtOiWHtkmlf8@JVv2NFZy=l&JwzIV7b8g#w%| kAA0e~V;{FW<532NnO~WX*M%le0BU3KboFyt=akR{01!?lxBvhE literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/head.rsi/meta.json b/Resources/Textures/White/Targeting/Status/head.rsi/meta.json new file mode 100644 index 00000000000..d0faf3a6eb2 --- /dev/null +++ b/Resources/Textures/White/Targeting/Status/head.rsi/meta.json @@ -0,0 +1,32 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/c7e14784b35b1a136351c396d3a546f461ee2451", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "head_0" + }, + { + "name": "head_1" + }, + { + "name": "head_2" + }, + { + "name": "head_3" + }, + { + "name": "head_4" + }, + { + "name": "head_5" + }, + { + "name": "head_6unused" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/White/Targeting/Status/leftarm.rsi/leftarm_0.png b/Resources/Textures/White/Targeting/Status/leftarm.rsi/leftarm_0.png new file mode 100644 index 0000000000000000000000000000000000000000..22c7982489b70ff16db2cb15624b07f8a3de7ca9 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|I0Jk_Tp9i| z$Oe?FXU+X#I@Ja!$XpWS7tHYgze~V1MIcwr)5S5wqBl7~f^`dXPm73wV9-Gq4_0AC m(ViZbvk59MdIAlc7#W;zGsrAoyrCPYgTd3)&t;ucLK6V3)h4|F literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/leftarm.rsi/leftarm_1.png b/Resources/Textures/White/Targeting/Status/leftarm.rsi/leftarm_1.png new file mode 100644 index 0000000000000000000000000000000000000000..cd3b5d4c1c8dcde3933519ebbb0bc9dc4f9fbfc0 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|I0Jk_Tp9i| z1jR8-UcvC|7`p{fkhvttFPP!~f0ux3ia@TKr;B5VMQ?I~1nU;&o)!@U!JvaK9<0KO mqCGtF)}#cW{_FFctbZ(2ZN`ppUXO@geCx^F(#J) literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/leftarm.rsi/leftarm_2.png b/Resources/Textures/White/Targeting/Status/leftarm.rsi/leftarm_2.png new file mode 100644 index 0000000000000000000000000000000000000000..e4db19616792928b1dbebd853069562e1fe392fd GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|I0Jk_Tp9i| z#04>|n9LAUah@9}$XpWS7tHYgze~V1MIcwr)5S5wqBl7~f^`dXPm73wV9-Gq4_0AC m(ViZbvk59MdIAlc7#W;zGsrAoyrCPYgTd3)&t;ucLK6Up_9jLE literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/leftarm.rsi/leftarm_3.png b/Resources/Textures/White/Targeting/Status/leftarm.rsi/leftarm_3.png new file mode 100644 index 0000000000000000000000000000000000000000..d6a204a18a9cdece9985776c6faa1d9cb6a98d73 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|I0Jk_Tp9i| z#5pjmC}hwQnAHvxWG)Hv3ugHL-zDIhB9N=*>Eak-(VLtg!McUHr$xj-FzBF*2dl86 mXipEz*#wmrJ%I*Jj111V8Dy3(-p~!y!QkoY=d#Wzp$Pz7|0TZw literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/leftarm.rsi/leftarm_4.png b/Resources/Textures/White/Targeting/Status/leftarm.rsi/leftarm_4.png new file mode 100644 index 0000000000000000000000000000000000000000..2c9e81508b33ad3544c5d44f04a6c14ef249e34c GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|I0Jk_Tp9i| z#3?bXuwm#i?SBLmWG)Hv3ugHL-zDIhB9N=*>Eak-(VLtg!McUHr$xj-FzBF*2dl86 mXipEz*#wmrJ%I*Jj111V8Dy3(-p~!y!QkoY=d#Wzp$Pzlqb5TD literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/leftarm.rsi/leftarm_5.png b/Resources/Textures/White/Targeting/Status/leftarm.rsi/leftarm_5.png new file mode 100644 index 0000000000000000000000000000000000000000..a00a6b1822e796f1cb38c52e4aa16f445ed3115c GIT binary patch literal 154 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|_yc@GTp9i| z=;`U5U|56jtvlr+T$J%I*Jj0`cw4CEak-(VLtg!McUHr$xj-FzBF*2dl86 mXipEz*#wmrJ%I*Jj111V8Dy3(-p~!y!QkoY=d#Wzp$PzVJ|+tQ literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/leftarm.rsi/meta.json b/Resources/Textures/White/Targeting/Status/leftarm.rsi/meta.json new file mode 100644 index 00000000000..33dfab0d90d --- /dev/null +++ b/Resources/Textures/White/Targeting/Status/leftarm.rsi/meta.json @@ -0,0 +1,32 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Tgstation sprites taken at commit https://github.com/tgstation/tgstation/commit/c7e14784b35b1a136351c396d3a546f461ee2451", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "leftarm_0" + }, + { + "name": "leftarm_1" + }, + { + "name": "leftarm_2" + }, + { + "name": "leftarm_3" + }, + { + "name": "leftarm_4" + }, + { + "name": "leftarm_5" + }, + { + "name": "leftarm_6unused" + } + ] +} diff --git a/Resources/Textures/White/Targeting/Status/leftfoot.rsi/leftfoot_0.png b/Resources/Textures/White/Targeting/Status/leftfoot.rsi/leftfoot_0.png new file mode 100644 index 0000000000000000000000000000000000000000..af6e8eb45e56bd311a2730259aac25c5d6011e66 GIT binary patch literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|cmjMvTp9i| zsAtWU4Jg+tT9qkk0#d|M666=m@c;k+&AJX9K)$l4i(`mIZ*qbJ>*55F3ycPa#zuyM m0S8WW__GR21l)}L!N?#c&Y<|GG;bqNIfJLGpUXO@geCy^pC?rS literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/leftfoot.rsi/leftfoot_1.png b/Resources/Textures/White/Targeting/Status/leftfoot.rsi/leftfoot_1.png new file mode 100644 index 0000000000000000000000000000000000000000..b8e10c8c48c228683e8de51710e707e4c86e4f41 GIT binary patch literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|cmjMvTp9i| zOkTkd6vwb^FT?wp{QW?2mXaX9V21zy|8LfH=m7GSJzX3_EP9g@Bv=waPKc#safyx;?UHx3vIVCg!04^>k`2YX_ literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/leftfoot.rsi/leftfoot_2.png b/Resources/Textures/White/Targeting/Status/leftfoot.rsi/leftfoot_2.png new file mode 100644 index 0000000000000000000000000000000000000000..31feb63b7bcc2e66bdf2ae1d4f3453a2e4677947 GIT binary patch literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|cmjMvTp9i| zteDIY7sRl48N&qKEw_N;EG0pH!3_WZ|KF_Z&;jHtd%8G=So9_*NU$zW5V^o;U}$V) oC>U_yM2A1CutdPk$RCUhV&V*ne@gQ<0+lm(y85}Sb4q9e05}pT9smFU literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/leftfoot.rsi/leftfoot_3.png b/Resources/Textures/White/Targeting/Status/leftfoot.rsi/leftfoot_3.png new file mode 100644 index 0000000000000000000000000000000000000000..274855e4194b5d05834a62a87f33995572ee10cd GIT binary patch literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|cmjMvTp9i| ztSDrNb70t8$G{{hYYY@;DGBlmX88aA|7Kl>4j^CI)5S5wqBl7~f^~6%$OT3NLt`UD n!GHrNI{aCMB?4|n{$OMf6K7ETQ<}FCsGPym)z4*}Q$iB}i2Nnu literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/leftfoot.rsi/leftfoot_4.png b/Resources/Textures/White/Targeting/Status/leftfoot.rsi/leftfoot_4.png new file mode 100644 index 0000000000000000000000000000000000000000..b3e5dfefa166a79b05b1a4d0531a8aa8142235e7 GIT binary patch literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|cmjMvTp9i| ztgvB-Q)1Zb#GueH{Vq_Pr6kBNnBo8b|C@CkI)Hp-PZ!4!i{9h}3D(64A{Q7942_Kp n1p^M8=FLGA#m!`3cFLGA#U;G@V+#~#DGBlmX88aA|7Kl>4j^CI)5S5wqBl7~f^~6%$OT3NLt`UD n!GHrNI{aCMB?4|n{$OMf6K7ETQ<}FCsGPym)z4*}Q$iB}4k9O| literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/leftfoot.rsi/meta.json b/Resources/Textures/White/Targeting/Status/leftfoot.rsi/meta.json new file mode 100644 index 00000000000..3e6b122ac9c --- /dev/null +++ b/Resources/Textures/White/Targeting/Status/leftfoot.rsi/meta.json @@ -0,0 +1,32 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Tgstation sprites taken at commit https://github.com/tgstation/tgstation/commit/c7e14784b35b1a136351c396d3a546f461ee2451", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "leftfoot_0" + }, + { + "name": "leftfoot_1" + }, + { + "name": "leftfoot_2" + }, + { + "name": "leftfoot_3" + }, + { + "name": "leftfoot_4" + }, + { + "name": "leftfoot_5" + }, + { + "name": "leftfoot_6unused" + } + ] +} diff --git a/Resources/Textures/White/Targeting/Status/lefthand.rsi/lefthand_0.png b/Resources/Textures/White/Targeting/Status/lefthand.rsi/lefthand_0.png new file mode 100644 index 0000000000000000000000000000000000000000..f56984a54eb3f82e70d69c291ce142972ea81297 GIT binary patch literal 136 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|I0Jk_Tp9i| z$Oe?FXU+X#I@Ja!$XpWS7tHYgze~V1MIcws)5S5wqBl7~f^~6&Ktf8Aih}=2CN?*w ePm2>A7#LJ0G6+v7zO@pllEKr}&t;ucLK6UZOCzuV literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/lefthand.rsi/lefthand_1.png b/Resources/Textures/White/Targeting/Status/lefthand.rsi/lefthand_1.png new file mode 100644 index 0000000000000000000000000000000000000000..e5a7aea1b40fa2e1227e2ae1d7312ed50f16ba20 GIT binary patch literal 136 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|I0Jk_Tp9i| z1jR8-UcvC|7`p{fkhvttFPP!~f0ux3ia@TMr;B5VMQ?I~1nc4kfrOMK6$Ss5Ol)pU epB5)LFfgc0WDuTEd}}38C4;A{pUXO@geCxP*CUDm literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/lefthand.rsi/lefthand_2.png b/Resources/Textures/White/Targeting/Status/lefthand.rsi/lefthand_2.png new file mode 100644 index 0000000000000000000000000000000000000000..43c72f0b2109137d0a8072d0e27d424ce07263fd GIT binary patch literal 136 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|I0Jk_Tp9i| z#04>|n9LAUah@9}$XpWS7tHYgze~V1MIcws)5S5wqBl7~f^~6&Ktf8Aih}=2CN?*w ePm2>A7#LJ0G6+v7zO@pllEKr}&t;ucLK6U2BqKQh literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/lefthand.rsi/lefthand_3.png b/Resources/Textures/White/Targeting/Status/lefthand.rsi/lefthand_3.png new file mode 100644 index 0000000000000000000000000000000000000000..3114a1995cdfbaca9693d435046fedbe1ede8c22 GIT binary patch literal 136 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|I0Jk_Tp9i| z#5pjmC}hwQnAHvxWG)Hv3ugHL-zDIhB9JTR>Eak-(VLtg!MeCXAR#45MZte16Pp{; er^N{l3=Aq08H6Vk-&zS&$>8bg=d#Wzp$PylWg@Zw literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/lefthand.rsi/lefthand_4.png b/Resources/Textures/White/Targeting/Status/lefthand.rsi/lefthand_4.png new file mode 100644 index 0000000000000000000000000000000000000000..83c4daefabf1aa53bb56177cd30a59bc033f609c GIT binary patch literal 136 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|I0Jk_Tp9i| z#3?bXuwm#i?SBLmWG)Hv3ugHL-zDIhB9JTR>Eak-(VLtg!MeCXAR#45MZte16Pp{; er^N{l3=Aq08H6Vk-&zS&$>8bg=d#Wzp$Py|=_57( literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/lefthand.rsi/lefthand_5.png b/Resources/Textures/White/Targeting/Status/lefthand.rsi/lefthand_5.png new file mode 100644 index 0000000000000000000000000000000000000000..2b33680d43842bc7cab7aeaf2efd290ce5798e63 GIT binary patch literal 152 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|_yc@GTp9i| z=;`U5U|Eak-(VLtg!MeCXAR#45MZte16Pp{; er^N{l3=Aq08H6Vk-&zS&$>8bg=d#Wzp$Py)L?ZqG literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/lefthand.rsi/meta.json b/Resources/Textures/White/Targeting/Status/lefthand.rsi/meta.json new file mode 100644 index 00000000000..21597c125ff --- /dev/null +++ b/Resources/Textures/White/Targeting/Status/lefthand.rsi/meta.json @@ -0,0 +1,32 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Tgstation sprites taken at commit https://github.com/tgstation/tgstation/commit/c7e14784b35b1a136351c396d3a546f461ee2451", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "lefthand_0" + }, + { + "name": "lefthand_1" + }, + { + "name": "lefthand_2" + }, + { + "name": "lefthand_3" + }, + { + "name": "lefthand_4" + }, + { + "name": "lefthand_5" + }, + { + "name": "lefthand_6unused" + } + ] +} diff --git a/Resources/Textures/White/Targeting/Status/leftleg.rsi/leftleg_0.png b/Resources/Textures/White/Targeting/Status/leftleg.rsi/leftleg_0.png new file mode 100644 index 0000000000000000000000000000000000000000..9f8193be960fb987fe26a88ada5103e532407624 GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|cmjMvTp9i| zsAtWU4Jg+tT9qkk0#d|M666=m@c;k+&AJX9K)$@Ei(`mIZ*qbJ>*9n7%x-ROYJa$9 iaB3t-v2eAiFff>|Wzg-ZUwjp)l)=;0&t;ucLK6T;uq8?W literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/leftleg.rsi/leftleg_1.png b/Resources/Textures/White/Targeting/Status/leftleg.rsi/leftleg_1.png new file mode 100644 index 0000000000000000000000000000000000000000..ab0c3e410daebde3b664a5051ee922b41c502ec5 GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|cmjMvTp9i| zOkTkd6vwb^FT?wp{QW?2mXaX9V21zy|8LfH=m7HNJzX3_EP9g@Bv=4j^CN)5S5wqBl7~f^~7i1ZFokH?==p jGdML8q*%DxR2Udc*D~n#)GxjYRLbD#>gTe~DWM4f-pV7_ literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/leftleg.rsi/leftleg_4.png b/Resources/Textures/White/Targeting/Status/leftleg.rsi/leftleg_4.png new file mode 100644 index 0000000000000000000000000000000000000000..9dcd84fffdf08bb6afa4e24643e5754bb42ffe67 GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|cmjMvTp9i| ztgvB-Q)1Zb#GueH{Vq_Pr6kBNnBo8b|C@CkI)Hq6PZ!4!i{9h}3D(646PVrH+|>SX j&EV8XkYeF#Q(<5*UCW@`Q@{8sP$`3_tDnm{r-UW|D`+I~ literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/leftleg.rsi/leftleg_5.png b/Resources/Textures/White/Targeting/Status/leftleg.rsi/leftleg_5.png new file mode 100644 index 0000000000000000000000000000000000000000..75bd581d69b23e914f915868d69b5e8ad04b74ca GIT binary patch literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|Bm#UwTp9i| zoM2!G4h~+x0Aw=g>FLGA#m!`3cFLGA#U;G@V+#~#DGBlmX88aA|7Kl>4j^CN)5S5wqBl7~f^~7i1ZFokH?==p jGdML8q*%DxR2Udc*D~n#)GxjYRLbD#>gTe~DWM4fT;wI1 literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/leftleg.rsi/meta.json b/Resources/Textures/White/Targeting/Status/leftleg.rsi/meta.json new file mode 100644 index 00000000000..05a89188295 --- /dev/null +++ b/Resources/Textures/White/Targeting/Status/leftleg.rsi/meta.json @@ -0,0 +1,32 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Tgstation sprites taken at commit https://github.com/tgstation/tgstation/commit/c7e14784b35b1a136351c396d3a546f461ee2451", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "leftleg_0" + }, + { + "name": "leftleg_1" + }, + { + "name": "leftleg_2" + }, + { + "name": "leftleg_3" + }, + { + "name": "leftleg_4" + }, + { + "name": "leftleg_5" + }, + { + "name": "leftleg_6unused" + } + ] +} diff --git a/Resources/Textures/White/Targeting/Status/rightarm.rsi/meta.json b/Resources/Textures/White/Targeting/Status/rightarm.rsi/meta.json new file mode 100644 index 00000000000..a6751d91bda --- /dev/null +++ b/Resources/Textures/White/Targeting/Status/rightarm.rsi/meta.json @@ -0,0 +1,32 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Tgstation sprites taken at commit https://github.com/tgstation/tgstation/commit/c7e14784b35b1a136351c396d3a546f461ee2451", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "rightarm_0" + }, + { + "name": "rightarm_1" + }, + { + "name": "rightarm_2" + }, + { + "name": "rightarm_3" + }, + { + "name": "rightarm_4" + }, + { + "name": "rightarm_5" + }, + { + "name": "rightarm_6unused" + } + ] +} diff --git a/Resources/Textures/White/Targeting/Status/rightarm.rsi/rightarm_0.png b/Resources/Textures/White/Targeting/Status/rightarm.rsi/rightarm_0.png new file mode 100644 index 0000000000000000000000000000000000000000..44c8aca6329dcd40234536a238417fca04e3e772 GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|I0Jk_Tp9i| z$Oe?FXU+X#I@Ja!$XpWS7tHYgze~V1MIcwx)5S5wqBl7~g7pe}Ps@{;948-#GfX+Y qnnB}y$93KwpO!fmTyBg43=FQU3^K=dELsfI#Ng@b=d#Wzp$Pz<(<$iy literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/rightarm.rsi/rightarm_1.png b/Resources/Textures/White/Targeting/Status/rightarm.rsi/rightarm_1.png new file mode 100644 index 0000000000000000000000000000000000000000..035e0ae12e9b5deff13521ac11db8583d56b7e85 GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|I0Jk_Tp9i| z1jR8-UcvC|7`p{fkhvttFPP!~f0ux3ia@TWr;B5VMQ?I~1nU*{o|Y#wIZi$fXP9z) qHG{_aj_bTVJ}q-BxZD^87#Lhx8Dx&_ShN_ZiNVv=&t;ucLK6U!y(z;0 literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/rightarm.rsi/rightarm_2.png b/Resources/Textures/White/Targeting/Status/rightarm.rsi/rightarm_2.png new file mode 100644 index 0000000000000000000000000000000000000000..f6db2e12a9bdd9ab60af437500ba7b50de30ebb9 GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|I0Jk_Tp9i| z#04>|n9LAUah@9}$XpWS7tHYgze~V1MIcwx)5S5wqBl7~g7pe}Ps@{;948-#GfX+Y qnnB}y$93KwpO!fmTyBg43=FQU3^K=dELsfI#Ng@b=d#Wzp$PzZk128h literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/rightarm.rsi/rightarm_3.png b/Resources/Textures/White/Targeting/Status/rightarm.rsi/rightarm_3.png new file mode 100644 index 0000000000000000000000000000000000000000..cd974fdeea6f52a03ae3e4c44048df5ec4d83f5e GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|I0Jk_Tp9i| z#5pjmC}hwQnAHvxWG)Hv3ugHL-zDIhB9N=;>Eak-(VLtg!Fq+gr{&2^j+2kW8KxXx q&7g6<<2rATPsEak-(VLtg!Fq+gr{&2^j+2kW8KxXx q&7g6<<2rATPsEak-(VLtg!Fq+gr{&2^j+2kW8KxXx q&7g6<<2rATPs6cY~Ol5@kv8w?Y8HU9GlomO3X?7*3Wr$79>7uj}P+N$$f|7kg~ zBpHTHGAV|-41s(Mk$>La)Q!4fpY`lOI|IY-8QgErE&crvXd8p4tDnm{r-UW|y3ja{ literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/rightfoot.rsi/rightfoot_1.png b/Resources/Textures/White/Targeting/Status/rightfoot.rsi/rightfoot_1.png new file mode 100644 index 0000000000000000000000000000000000000000..967639b3fd1ab59ac776dca393efce1f977b7148 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|cmjMvTp9i| z1jR8-UcsbP0l+XkKDcC65 literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/rightfoot.rsi/rightfoot_2.png b/Resources/Textures/White/Targeting/Status/rightfoot.rsi/rightfoot_2.png new file mode 100644 index 0000000000000000000000000000000000000000..bff7d8016d0aa34190d2a21f08606564f3095d92 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|cmjMvTp9i| z#04>|n9Q(u8N-$0A|9YPOG%JlFvI`<|2OM8bO8BEo-U3d7QM*{60D08L@tOJ7#SHF nKboALq_lv6XT@8cBnAdydj_d1|GqT?RWo?H`njxgN@xNA|FkGb literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/rightfoot.rsi/rightfoot_3.png b/Resources/Textures/White/Targeting/Status/rightfoot.rsi/rightfoot_3.png new file mode 100644 index 0000000000000000000000000000000000000000..d74824df983c9e2c4571bd2ebe4fd5b0da4ee7d7 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|cmjMvTp9i| z#5pjmC}h}M$M8{N{wJU~OG%JlFvI`<|2OM8bO8BEo-U3d7QM*{60D08L@tOJ7#SHF nKboALq_lv6XT@8cBnAdydj_d1|GqT?RWo?H`njxgN@xNAAZ94R literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/rightfoot.rsi/rightfoot_4.png b/Resources/Textures/White/Targeting/Status/rightfoot.rsi/rightfoot_4.png new file mode 100644 index 0000000000000000000000000000000000000000..50f6abc2c3493932b95c919b9ec8e43fd3501e17 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|cmjMvTp9i| z#3?bXuwmHi#IV8bt}#%Yr6kBNnBo8b|C@CkI)Hp7PZ!4!i{9h}3D(64A{RsqjEoG8 nA5BhAQd+>kv*N8z5(9&EU|7Jw5EmEspMk;P^3h_T0``(1zhH*{V6e1)*>9kbx~Gd{h(&L5f&}a0 z1d$6O8w`v#8a|qso|2T7lzK3mL0KU1cH|KT2H7tRI&;<^Z31dx@O1TaS?83{1OTZc BG5G)h literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/rightfoot.rsi/rightfoot_6unused.png b/Resources/Textures/White/Targeting/Status/rightfoot.rsi/rightfoot_6unused.png new file mode 100644 index 0000000000000000000000000000000000000000..ebc654d70e9390d142c8840b550b18251750a031 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|cmjMvTp9i| z=;`SN2M5Q+#eH#KZweG=DGBlmX88aA|7Kl>4j^C2)5S5wqBl7~f^~6%$ORDtBO^oO mN0ZZ&lol}Xtaz)F#K0hI&meW>-?wI_QIt0OB< g56ctxg9n%yRO=apt55Wa1JyEky85}Sb4q9e0E{OhtN;K2 literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/righthand.rsi/righthand_1.png b/Resources/Textures/White/Targeting/Status/righthand.rsi/righthand_1.png new file mode 100644 index 0000000000000000000000000000000000000000..e14168b2e7d274acd23f5bd8ac0ffcc7b3bdf673 GIT binary patch literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|I0Jk_Tp9i| z1jR8-UcvC|7`p{fkhvttFPP!~f0ux3ia@S{r;B5VMQ?I~1nXi3VFM#Wp&$nbR!3Hz g9+oHW2M;hasMa$GSD)w;2dZW8boFyt=akR{0D@;Ch5!Hn literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/righthand.rsi/righthand_2.png b/Resources/Textures/White/Targeting/Status/righthand.rsi/righthand_2.png new file mode 100644 index 0000000000000000000000000000000000000000..b12b15e883b39f3f0b24ee9dfb8ea87d3c2a0deb GIT binary patch literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|I0Jk_Tp9i| z#04>|n9LAUah@9}$XpWS7tHYgze~V1MIcwf)5S5wqBl7~f^{*2uz``GP>_QIt0OB< g56ctxg9n%yRO=apt55Wa1JyEky85}Sb4q9e0BRBEak-(VLtg!Md11*ucn8D9FKq)sdB_ ghvkX;!2`?;s`U)Q)hGJIfod5%UHx3vIVCg!06|3|t^fc4 literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/righthand.rsi/righthand_4.png b/Resources/Textures/White/Targeting/Status/righthand.rsi/righthand_4.png new file mode 100644 index 0000000000000000000000000000000000000000..4afd3e7f53131f6cc8a2439b08eed334157435a3 GIT binary patch literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|I0Jk_Tp9i| z#3?bXuwm#i?SBLmWG)Hv3ugHL-zDIhB9N=#>Eak-(VLtg!Md11*ucn8D9FKq)sdB_ ghvkX;!2`?;s`U)Q)hGJIfod5%UHx3vIVCg!0AI}ei(k> r$eA-8_gTc4xFjSvBMiCNEak-(VLtg!Md11*ucn8D9FKq)sdB_ ghvkX;!2`?;s`U)Q)hGJIfod5%UHx3vIVCg!09L#q`Tzg` literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/rightleg.rsi/meta.json b/Resources/Textures/White/Targeting/Status/rightleg.rsi/meta.json new file mode 100644 index 00000000000..b056021b841 --- /dev/null +++ b/Resources/Textures/White/Targeting/Status/rightleg.rsi/meta.json @@ -0,0 +1,32 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Tgstation sprites taken at commit https://github.com/tgstation/tgstation/commit/c7e14784b35b1a136351c396d3a546f461ee2451", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "rightleg_0" + }, + { + "name": "rightleg_1" + }, + { + "name": "rightleg_2" + }, + { + "name": "rightleg_3" + }, + { + "name": "rightleg_4" + }, + { + "name": "rightleg_5" + }, + { + "name": "rightleg_6unused" + } + ] +} diff --git a/Resources/Textures/White/Targeting/Status/rightleg.rsi/rightleg_0.png b/Resources/Textures/White/Targeting/Status/rightleg.rsi/rightleg_0.png new file mode 100644 index 0000000000000000000000000000000000000000..f773330b026e2319cbed7e2013d4dd9e6a7d0ace GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?3oArNM~bhqvgP%y>Q z#W5tpJvl*wb+Mv>6cZYuY|A3y$;oiD;nV+^psWI2^X00Om&nhK^;u%Uux#4Q=IJuI z5nm@fWtiZ3f8O0iUCJlQ7(#Q{rHo!NWVJq7VF@&?#F>FX)0yqo?d7cbK>HXxUHx3v IIVCg!0E0I)jsO4v literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/rightleg.rsi/rightleg_1.png b/Resources/Textures/White/Targeting/Status/rightleg.rsi/rightleg_1.png new file mode 100644 index 0000000000000000000000000000000000000000..786b0777c38cc7425ad85f8ca833f6798ccbce1c GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|cmjMvTp9i| z1jR8-Ucs|n9Q(u8N-$0A|9YPOG%JlFvI`<|2OM8bO8DCo-U3d7QM*{60D08J}|kdsi`q> j&EV8ZkjY?m7H42E+rXg1_{^gasFcCe)z4*}Q$iB}Iz%Jo literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/rightleg.rsi/rightleg_3.png b/Resources/Textures/White/Targeting/Status/rightleg.rsi/rightleg_3.png new file mode 100644 index 0000000000000000000000000000000000000000..2f9690690d72a2be8182a5b4fde5ffaac6c252e4 GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|cmjMvTp9i| z#5pjmC}h}M$M8{N{wJU~OG%JlFvI`<|2OM8bO8DCo-U3d7QM*{60D08J}|kdsi`q> j&EV8ZkjY?m7H42E+rXg1_{^gasFcCe)z4*}Q$iB}S$rg3 literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/rightleg.rsi/rightleg_4.png b/Resources/Textures/White/Targeting/Status/rightleg.rsi/rightleg_4.png new file mode 100644 index 0000000000000000000000000000000000000000..ec62ccb0627d4b41348a43414fd1307746a28a83 GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|cmjMvTp9i| z#3?bXuwmHi#IV8bt}#%Yr6kBNnBo8b|C@CkI)Hq6PZ!4!i{9h}3D(64ADGgTe~DWM4f16?CK literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/rightleg.rsi/rightleg_5.png b/Resources/Textures/White/Targeting/Status/rightleg.rsi/rightleg_5.png new file mode 100644 index 0000000000000000000000000000000000000000..70ccb309add238bae2e54d34edc459ea25e12070 GIT binary patch literal 166 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|L<4+6Tp9i| z=;`SN2M3>EU|7Jw5EmEspMk;P^3h_T0``(1zhH*{V6e1)*>9kbj;D)bh(&L5f&}a0 zgbz$^YH4bFxFTjm%=|d}z?oAX2e{1sa5aQ&2uM46ft4Zf7=z2<%H0A$eGHzielF{r G5}E+?-ZjSn literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Status/rightleg.rsi/rightleg_6unused.png b/Resources/Textures/White/Targeting/Status/rightleg.rsi/rightleg_6unused.png new file mode 100644 index 0000000000000000000000000000000000000000..9c4ee1f90383d727ece0ef7e402bfc181671a459 GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|cmjMvTp9i| z=;`SN2M5Q+#eH#KZweG=DGBlmX88aA|7Kl>4j^CN)5S5wqBl7~f^~7i2PQW)H8m!# j8Jt=PG8wGS;tULC8yIvLpLrAll`?p``njxgN@xNA8!sb{ literal 0 HcmV?d00001 From ea9eaae9b3fe6b2850b8d3153c40685412687028 Mon Sep 17 00:00:00 2001 From: NR <66198468+withoutcode333@users.noreply.github.com> Date: Tue, 22 Apr 2025 19:21:24 +0500 Subject: [PATCH 2/5] resprite act1 --- .../Interface/Ashen/targeting_doll.png | Bin 422 -> 441 bytes .../Interface/Clockwork/targeting_doll.png | Bin 1219 -> 1245 bytes .../Interface/Default/targeting_doll.png | Bin 422 -> 444 bytes .../Interface/Minimalist/targeting_doll.png | Bin 422 -> 441 bytes .../Interface/Plasmafire/targeting_doll.png | Bin 462 -> 497 bytes .../Interface/Retro/targeting_doll.png | Bin 383 -> 404 bytes .../Interface/Slimecore/targeting_doll.png | Bin 0 -> 444 bytes .../Textures/White/Targeting/Doll/head.png | Bin 5663 -> 546 bytes .../White/Targeting/Doll/head_hover.png | Bin 7153 -> 531 bytes .../Textures/White/Targeting/Doll/leftarm.png | Bin 5779 -> 518 bytes .../White/Targeting/Doll/leftarm_hover.png | Bin 6652 -> 532 bytes .../White/Targeting/Doll/leftfoot.png | Bin 5462 -> 497 bytes .../White/Targeting/Doll/leftfoot_hover.png | Bin 5476 -> 504 bytes .../White/Targeting/Doll/lefthand.png | Bin 5462 -> 496 bytes .../White/Targeting/Doll/lefthand_hover.png | Bin 6174 -> 511 bytes .../Textures/White/Targeting/Doll/leftleg.png | Bin 5488 -> 527 bytes .../White/Targeting/Doll/leftleg_hover.png | Bin 6185 -> 513 bytes .../Textures/White/Targeting/Doll/mouth.png | Bin 5219 -> 492 bytes .../White/Targeting/Doll/mouth_hover.png | Bin 5208 -> 477 bytes .../White/Targeting/Doll/rightarm.png | Bin 5773 -> 510 bytes .../White/Targeting/Doll/rightarm_hover.png | Bin 6592 -> 523 bytes .../White/Targeting/Doll/rightfoot.png | Bin 5454 -> 500 bytes .../White/Targeting/Doll/rightfoot_hover.png | Bin 5465 -> 498 bytes .../White/Targeting/Doll/righthand.png | Bin 5467 -> 499 bytes .../White/Targeting/Doll/righthand_hover.png | Bin 6207 -> 519 bytes .../White/Targeting/Doll/rightleg.png | Bin 5473 -> 507 bytes .../White/Targeting/Doll/rightleg_hover.png | Bin 5908 -> 519 bytes .../Textures/White/Targeting/Doll/stomach.png | Bin 541 -> 538 bytes .../White/Targeting/Doll/stomach_hover.png | Bin 518 -> 532 bytes .../Textures/White/Targeting/Doll/torso.png | Bin 536 -> 518 bytes .../White/Targeting/Doll/torso_hover.png | Bin 512 -> 518 bytes 31 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 Resources/Textures/Interface/Slimecore/targeting_doll.png diff --git a/Resources/Textures/Interface/Ashen/targeting_doll.png b/Resources/Textures/Interface/Ashen/targeting_doll.png index e8eb2f52717b08c7124e99ddf4e2196a958b9362..48bde9834f35d9ea11fdee54771f4179eb02822a 100644 GIT binary patch delta 340 zcmZ3+ypwr?3KwH>kh>GZx^prwCo1~Yi;H9Z*YcXfSOV`LHg(ok#-}Yx&Imv?K+=W^xjxS;L4APAo6>3&&3t&7sWA25P zYfY<#V;mBnF`0<#vFPeA<(V+^L3v4{;{=QA2Ij|H1lZ42ofQ@}6jHeUou{)~afi?n zjYSd*6~d1A9C)A-#&Sr1;Y~|n6$Q@pSoWs)$lp~eDL%G3H5cq|ta-LOf8txy5C0$b zHMFQZ1sWe&F>}H{1^bqJ&T>^8tK}A{eObI>@%80iLQS>T5-mzA_$S|NVNRPWFPpo^ e*I?^Y^MCPGn`JyV=e>W!00f?{elF{r5}E++IG(Hk delta 323 zcmV-J0lfaX1EvFzB#|*oe*tt-PE!Ct=GbNc009+AL_t(Ijh&O*a>F1DL`}j12HL8S z|Nqt^aS6nihps(iG%N>69&MYt)wZd}trQ!s&sT$b>LCE{KtEMA80+@kvf#aktb(=1 zm}by%{|d2)_ltv<66-+--=Us|M`dtqCqnpP0C{3?e@o}wOz1*N2_u>a zRX`%51hn{*z%>*?uj4?dHCEw-Q1+>9Q)euM(t%tZl+h3~0i}H8T=sKDX$U?Edc diff --git a/Resources/Textures/Interface/Clockwork/targeting_doll.png b/Resources/Textures/Interface/Clockwork/targeting_doll.png index 8426d42299a09f42051f2e351fdc74b8f3b60c27..46e6ac9e1d04407e1603a7e570b751e4598ab42b 100644 GIT binary patch delta 1226 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 delta 323 zcmV-J0lfaX1EvFzB#|*oe*tt-PE!Ct=GbNc009+AL_t(Ijh&O*a>F1DL`}j12HL8S z|Nqt^aS6nihps(iG%N>69&MYt)wZd}trQ!s&sT$b>LCE{KtEMA80+@kvf#aktb(=1 zm}by%{|d2)_ltv<66-+--=Us|M`dtqCqnpP0C{3?e@o}wOz1*N2_u>a zRX`%51hn{*z%>*?uj4?dHCEw-Q1+>9Q)euM(t%tZl+h3~0i}H8T=sKDX$U?Edc diff --git a/Resources/Textures/Interface/Plasmafire/targeting_doll.png b/Resources/Textures/Interface/Plasmafire/targeting_doll.png index 57262d67028b03c02f37300c70b7c86d9dc066ae..dc718d1bc2514fcfe43dd043bcb831b1090d969f 100644 GIT binary patch delta 372 zcmX@d{E>Nr3KwH>kh>GZx^prwCn~1Z%a#QB1vC7|10Ek0JI}ztDDUaw7-G>obuxc( zvjWf2rBl<*U%V+;^7h*M|CZBP0%p{|`}T$J;*)aygC%n4Lh9q3Ro5Kg?i$u$^O` zibLKMBdK^MQd-`o5Pn3^j0KfZdM4C|-b^!E%v;OXk;vd$@? F2>^qixrP7$ delta 339 zcmV-Z0j&P<1I`1GB#|*=e*tt-PE!Ct=GbNc00AXQL_t(Ijh&O(c7resL~#N`T05l` z#Yx)y|94gz+l2k01LuITbkSl}l{-{bxznMX8SMKf19z@XjR^ps{8FD?GHBb&+q*X* zgaE!>e5=X^b#rY#=pRgET$R$)h2Xo-F8P1yMTV|hKOuAkNZ^Gvf1&r^3_)ZNVGw<< zUtWYF#27KICIs(q_s0(qMI-```;DnA2$q8qN*)VBszFhz#hjq~F>lAhm=O>#2=`?` zMobCN^uYi$4=o6m1arbb!T_HUa{{cA`~|pL5lBu3h+72xw;I^3`*BTBr$d6CrD+Ts zbzn1t_995GaMIOM?7@8UCYyr@ix*0Tur8 zba4!^=$$(GwNQ%!N2|B%jk+)Y`ggOte7<&0$29olbw-iC$A2=}|2%AO45+U$R2Au1 z8Ktu5x%N?}1lEj?&*yLp&RNl*JL7(*WB}{e`8#?d7=#moAIM&Cs>$m3A$Id zbrwT_ayLi$RKAA4=gzFX#Q8z$bMQ-!74z?&?X6%q+piK|5FfcB?G|H8s?gPh+QLr8 z1s$cPiobu!8$4xt;u@BXrNnWUZR~+$8F+pAAK%_=PtcLC-My;mi zrai~~s};-=LOiq$o^Q~~k$UF3(9DH>OBu&sofm=384`P~_N4rkSfjsE`kvXplrZ_+ aKl>}4`0KK{85aPm(Itl_m=zqY}5tVx>dnX!xNY0;o)A4P=$h!iOF*ofkxA1`!r4msWpG zaHqk0U#qyKJhY)j48TKRU(0^l2vEMXsAdR5_MXfPKwMUxATL~acf4c(S!{N+s|uq= zfC^i3&Bjh(;hCs`f1pB!sKqti*Y|7NOyIX~pC8AvK0%J~+r9t5v=1%esXJP!qQkju zX;pk$XD)&j|3L;h2E|b#gBhaau;rs4Tn`*L zASNcIt!=ELqG4fSXW<{Esj087uA9)lAfatR>)fpgEep)dY(ioa5}FtI1&2jd^;_E6 z`(#!*M5c*~N}634TnaQwv?RzcnBhMb5U}BwKG0q+PZ!4!i{9SJulbr4cv`PkC}c)l zd-!|*>ncXZ_O$2xPPfk&Z8^QkF6-itI_}=h1!El2p7Df; z>#^vbw=AD9@j-b>qSFM6=?3A)90b_=iq0~#UKCci{+*|@TXBcb5)B1uMP-pA9uCh{ z(pV1740tQUDKw#F@fz8K>(|tlviwt2;j#6pxnOr=&9mM46W^GA`2Vo4p+ns%%=pNP zi30x>-mGoE@^!=cDvntf`kMOUW@~xgc)Pjm@XEuxXP!~ZFfnf7CNJ X7s~jXMg@Hb1{;H?tDnm{r-UW|@bbK# literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Targeting/Doll/head.png b/Resources/Textures/White/Targeting/Doll/head.png index 9c645d2353c88f96bbf8e92fed127ce532d950d4..024def7a41a631da08d7ec1d720c9b26c2a9c439 100644 GIT binary patch delta 150 zcmV;H0BQf9ETROEBNYLKX+uL$Nkc;*aB^>EX>4Tx04R~Ot^{@gbdjEA)&KwiSV=@d zR2Y?YkFgDaFc1STgrVrzCR>mqJJ2Ckq5Uo+h04+E1z(+Bwq+;WH8637O}u)+0k`v* zg!xCn4n4#9z(oTaPzDrn{4L(Cw3s^k#56HL`dStjzM6d{9@oVI?EnA(07*qoM6N<$ Eg7mjMTmS$7 literal 5663 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 literal 5779 zcmeHLdsGuw8jm8VKt(OIN>yS?t$>rvDs z{l4G#n8__jh>v>C)!S7d5Ih$X9i9l!L*OxNm<#;9K)mHF5I6-bP$yXvnM|R{Y}E2; zKxmzB0zzQpwE}_d+_jQ9=5Z6zz_wuJ|u5YdUuyjpS0i_kUZwQH-J^fa?;;Ye_aR;v4qzf?5)62S=&+M;x z@0-_K(_9za3On(`ebf2u6D>r`=F{^$uNRKlyg&ce3$9t&kzHDXCnl|;U_7L03{R^{#E?jGv($={(WHC#= zl={`T5e365;up?bzw?s`9V0&9P}Rur^#R#~hrcP^=DnvnH@U0Xr}BLqv$+>GRh}+C zd@j~2?!EKl1L%hLk9mJqUV1Qh!V+))=l;1`>E?1GgITp?S8Bzzz^F5dMj5v%OZXmu*s`HhVp-xWTL6v(3XKlZoKg%U5Y2ue%%ef)l@>fPw zES7~Ol{>k=db#WK)%%g0kw^E<#pGj)Ls#S`h;}u^=7o9-yrzsFy4+)=aFij*_e!hp zZfr{x7Qt`agDx9im%edHUY@6Cnt5`L*EZo|(%W1ay?U}JMm=rMI?u#uYZA|plG?3d z+h%_K!H$n+7daPADw)z?Ow$qxX$Ezg!vVO{ZO*QPq^< z({k@O7wNesTk)o43qD*nqq%5E%?zQaSlXyop{ z&x$<7OrBcX)% z=EAw1PG@U|UH&+CRnuX=JJddz^Y`n+7R@+)_YL;vTZM1c-siP71qW+3e`j>9E}Nuz zAi-ZcaJlDpwn?T)2Id#grNliz3NBuI$njtxW9jrf{RD>u|v6~4KvUFqSHvLd>n>B{z6GWZ{7 z6$xjrnnVJfL~hx!r4jNseH}Bf0+BHfb7i9%j;4Ytt`Ko6{p(56o_SZJF<6>AmE)slw!4-Xo(~< zGgF*Nh>d2Q1fwWQg5nY!N1y~^nQyQ%HpF0g*$&Z*5e_V@nKxN^qd{oLWHiPMt3o7# z^TLPr=}jtCKfJ-x#{%R-Vq;7aOpHqOddWZyi#1{%1nD#AcQq_(_;`>c0*f)j%z}t{ zz+ioOAOy$u>zgvnX%2TdRszz19*SDvs@P*oM#ZQS`Zeqn=y<)!p#{l)Ow!70ACdK# zZT1<5I|B`Y>ixKnNk8=6Aq=HdDmvWAX4uV(30H{h>(iW(0geTL!UF?|0Z=gpij<6)o zuo?_Sr7~;)#B?(cvyw?0Xq6p`gHWst<1{FyLAXE}i;$RxK;%-uAZ(ykh5|}Pa5CV4 z;#fM;Xx1|@oV=dV0g1_=b4=I?r^6Cr6e3)VJ{n0#W2{=J0Be9ZaK=o_qbW772Q#gV zoli_gU@$pJ9J-Clap@zWS-@<8xoAhlP%(i!X6%8Xp*xUT#-6DVz%dTJp_OL9SdC`2 z(U_(X*^Ls~HT$Pku%I}`%7imk06|flq%n-fP&G=>B>YkV@B$qmZ{&FG{Qo6wFCSrW zZ_uN83tWG`W2m>LW`gwIyWZP0-cd|Kp`$ElhV6C1!psAl!%m3RJH@6j1|5L?qc33} zj`P2l3^>LyS`nPlk9UvMO0^s&MG*!i?77a$5jjf$M5dK< zxK@e<%Cv!xoBMyd7pTTj8l`9w`!n1F93Dt&FeyS1ECJnvag@uYfe0(t0E*#ca;OO*4TmFgjf~|0MansfeX7x;)Hw7_O5=Y@ za-tl=GFrgGl!V1WY6vO3LbV9WY8e1vVOgTe~DWM4f@n$Rp literal 6652 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 diff --git a/Resources/Textures/White/Targeting/Doll/leftfoot.png b/Resources/Textures/White/Targeting/Doll/leftfoot.png index 07da8e67b7544af6097d5fd978fd36a563621bb2..a445715729ff2b30fd966b0064469a145dc7eeca 100644 GIT binary patch delta 101 zcmcbn^^tjkvM6I~rn7T^r?ay{K~a8MW=<*tgT}{1m&J*XQUSnWjQ1^6k4B?oW zoRgGbaj=2ym4t*&gai;|NlH9hcyeySk!8(|jg5>9PkC5PE?u}_4%EWn>FVdQ&MBb@ E0I`xHJ^%m! literal 5462 zcmeHLdr%YC8V}VA%0uvhRjZN)z2alZZgw}>T@!gEJR$}WBdC3`*=!&{9wdPTM2jE{ zYVj(*mGLoh>!TI5ScKw>tAL>OQ58pQN3iAA2Zh_KB35wjNrH&e&fIav_AfKD$=P$h z?{~iMcYfbF*Ic*!GWvEbJgT!V(#zYn`Cd&c3s)0w4QXo;n*T%*aL z(WbIoOQwT41Xbh$3+>CKl{tZ#_AB-SmE zjy*hM(r)j_?;c;ejrQh;-kjZ-{BiPBx7lS?rZcDiQGN9KckAMpZ2oFV*2cZkF1Lb! zx@SK;8Ju$)zo`+4xK;FKkkumAF3 z#Ki|4PkLs0O^lNISEL3N9Y2*Q?J5WjxUhNc_@uDzVZnDAsYPnK|`CsdqcW+}8^Che9;#kGI>7bLv&ywaI?mMGlrWeWyEV8-w*NAHA$*05;@~UR3_3ey$l7V% zgBuo=<`kJL>qhPQXJez!lyhlYm#>&Te9-o3UWZL_?SALiNUkZdFOuiYzj5GTWJ6fg z)VMpbsej+Je!nkj{-WtaadlRj`N{o*Cf^UYEspy7{?|=SE#)<)GwrVVP0_R3F6{lh zyd>kdMVFe6EY0d@jyl$HqDyEyce)p8JlwixO~#e{gO;|aL#CT;@h6(k#%(Xw?4Zsc zy;pv*tF+?C^Vm}%MMC`J($FhAu5s}tTXt1OV_RIt?485aFXz0sE$?RQ2Gp%8A>&%* zgAKz=UCTp4JO@7v`*Qun_7S&bdEfh`MQ!?|^4HGdsO25oe_GbowX(Tz=kAk*KkS8z zvxY?bdD<95dEC|lW!mwH)pP5&w^*O~NrMWOdG>zdIaL2y_k$<=rf87d=|GnwagoI$`%w-^J;0)g$k1 z*rcg}YjRU+YIfEh$Xi`rHmod{+db$`drRqE-sEMQM=d^UGg`enmv)~2!I~4pN3XYU z8La$PP<&+HmWHxbA04_Y^>$4vio9^`$NjaKxc-JDJNuN!!x^351Vx-GM#r{{T>0}B z{lc^Fokh2Ax|q3>IJc@eG&@>MU;f)lzpB9Mp1P`*!>7@_aEhEee$r?U-Hc<%^l{VD zRuHB8#7Mw0 zt6y5rP*cNC)0VGeTzvPf9Us)~*VA!u>&_jf_3zBv^{}=gs4l1Mqh0gLf9Ygy=}S1z z6I*7dJe{7N(6#>2;wX;^E_t_3*QQ6Uf0A>4LPEEEvuDG)9xOk5qAh5Tq46E*vEa^a zw~qarjP}dH9w$F_C5XXw9ve<{{Mymcb+Y$^tL?YF3-V2ewki${=Wu*RYQbK#P%(#M z47xyCZBVg+Hk}ddRUD2u$Y!LO6xPC3v58u}gx6VpipSNeCA@fC0V|ABHc1~|u@;(Z)1~Uolug2O;8LJ%@8R6X9qFhUKAXzw zfT0m^ETMuh91}vMh$JAEB~Tn@1+-8t8~`!bqy?&^QwK(6 zhf)J5R77ARl}ZDkFad-S2n!J!Ap&V|4G2Yqt5g{3fKoG5xWS~O!E$PKbRx?)>JuFU zcEYKU7`cQe2!vnu#H7*|4R8Q8pw+7lR`bgtrB=tzx6pPz5fO?Yga9K@QhTeJyHWvwqaS2LNlh$mF_@GFL#l*l4~lE|>>pNuf>P5K zT1Hz~0168*3PC8CR0>cEMkoO~9R`g7_6D_9lllLw?d8K2I~P4tYXl0b9fAk6VMZfkB#GpYDQp4h4^;%?6FdN}Je_M8G593JBD}6*r)7siwXfjWvn2uLGbA zLJ$bXln6<|0tyxK_NevANa19G#v!11Q+a&(XDY)FXle`wcZ|QnV*K0BGTE=hH^_H&JV&Jum->U14 z(dGW~NuSk&zvou)98c8EdkWqGxT>NeWRAB1oTt+2PeE&_F>;Za!|@ntzg#%mO2&Xr zH;Y^m=62U(=qQ(WPxSovIp`wfvJmBv8;ZsduN>HiQ&W}8DY^dM;{Obid*$SGbw9eY vG+J0(kh|txYm7CUfF{RJx+JcD)BMa#-U6LS9tVyM%1 diff --git a/Resources/Textures/White/Targeting/Doll/leftfoot_hover.png b/Resources/Textures/White/Targeting/Doll/leftfoot_hover.png index 2c9f9e38df46d02146b3875717a9ff840faee264..b094ee0a46645acbda62a006a07fa14dfc07f20e 100644 GIT binary patch delta 108 zcmaE&^@DkWvM6I~rn7T^r?ay{K~a8MW=<*tgT}){JUK8h~USnWj(DQV04B?oW zoN^-3;$Q=}PvV9IFwI-^h7~sAQ1Mu8{oS`)Pa#f<1w2~l8(n_piTx)S3j3^ HP6iZ@j;(0yi9naDJ<(xB_nfu-Q`|kbS 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 diff --git a/Resources/Textures/White/Targeting/Doll/lefthand_hover.png b/Resources/Textures/White/Targeting/Doll/lefthand_hover.png index 3ff52eae555b870e68bb83de31a192057d27fdf5..fa0526b6f99c9d74aee957f69d494e0ab3f4544c 100644 GIT binary patch delta 114 zcmbPd@Sk~tvM6I~rn7T^r?ay{K~a8MW=<*tgT};7Y-Nmr6X&H~V_;w~^>lFz;h346 zk^lrJ5-kokut_{@nk@O~!J?f!-7^eW7B+CkGK4BkPZZo_C}6!I(ysL&6T{UXoQ>Q5 SaVY~0VDNPHb6Mw<&;$VWDJWe4 literal 6174 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 diff --git a/Resources/Textures/White/Targeting/Doll/leftleg.png b/Resources/Textures/White/Targeting/Doll/leftleg.png index 99dc24ce62ece522e0099552bfac0170da399f1d..4cec83a8687d34467f12e333890109902f3cf577 100644 GIT binary patch delta 116 zcmV-)0E_?dDvtz^BaO!$C7!M2x*ZD#W;FWWx}!`!+hWN+9JI*~@m%s^o++}Uq|{V;|`3EjYY2{K^{%iuTHB!F5Gz#~4)|gTihW6liA-xv0=h-afasY47T> zUPJFqnswH_3My$`+Np@KAXD%iroM+uy7|O*)26Og60E znMu(*qc(WP?X@%v(cKJrk34>9eqntz{$b`nGDlDL6?-*bJ9Tb&`;^XAD+(L&*w`y$ zN?xA2!K=n-T5kEzPnSp3Y>ddf{dMh;+`Nqmhx}^BOBR%6x~+a&8|SsO;TN>Rdt-Cm zJsB_aWXX}-+0Dncgbg=lHYpbejyUwOFIQ#V|AOaBLH=dyf&++E-{h=~98j89pR%mO z!!72<8m@HZu!AWj<#+SGjG^fq|L;Dm3!CEI zg9f(ntEkZH`+OUB-PpMwOS-cC{1szl^rnY@~M>XQ`xebD<({$0ol=GSU#p74Y z*!AS65vzXP5&rP&k1trF-_fidv3s|1R^r;t@|pD?MX_idw43<_vf_2dB!ShAUU%(*st{z?yZgH`6pjIDcn-{MaEYAR9^nH#ZfY{zJG3D1^;MgO~ti?$Awwpgml)J@xy&g zQ;r}ZqbH}liSH;IeZyx|QNR}qiqG3Nh}vowjy%PLOe+6sjB4PFoFF$pbWiZMfj;C# zQOwNo&9d*m4NU3uvekY!Idh%fEud`en9z>E&er{#wwBlm++QudUwt^VW?6Y$>8tPm z(57!R7jqsZT$`TsAS5-uz2K+V89rm(vKo(9r_Lz&W!agr@g3@-fwk*8u@#HQIYQsD zoOV|n32WQjc;u!uDsUP0bK(O}9QUa4Szpz9x3#tXV z0sGN>%}hdXG4V;tqNDi^lNIb&9F8p1VI}oRG|Sb|35;3JYdd<3$7LuvZ=Og4Ype>| z$V4u((X$stY4wYe^iql!`ii&AK>z>~&5~S)DcNi%9CDrumjGj@Sis}DRM;drZ@wm) ztFYK;F2=|BFr;!YX(;a%Z?4Qn8HgBVcn<`)lkE$pl+4S@7G^oJI9E!frtF|^&1YSYuIG}_Dt^@X7Hz4q2rTe2%0 zN-v<3X%kSjgH@5ImW)tqqI)fz6eKVvtIG=lTR?(K8g`8cJ!BL}`f-!b#i!VHAu&I1ENQAufb*N+Lxl zNgpV++0K$?J?(@7;Cu$)hzux(U@#0(C?$q4lExvOM2bUFF)9?2QoWuO>H0v-vN514 z$>hFXIiV;3B|#`k0+YZI43k2b5Yt1r7!g7ei4NBZ#R!ZdA{P{;C&Dc@6A9AEn8*ZL zU^OSWCY*#5Q=`>#9?FNGNTQQT)&LAZ4=`rRl5T%8rDaU?Y?gHLiAaP9f+G@CiaHlV zo+!bpa*lW8>N@)KZnPw9=MIe`ZIM^C{%mNS1)3?wSXM0y&5 zNFjzo7>bY(PKl)uj!S78)sZwz3ZF)|TMTSEX``nm03HEXpg>(*af5qOHR);nbR+G| z1E35-5D3P!h?Ee)fHj`rZwOCSiQngRJ*VrL7EX>4Tx04R~O5C(PuQ<0u!)&KwiH%UZ6 zR2Y?GWIzTv3?~>cKn}wRhW`v|4F4I_7;+d+Fu?^UGsGdQW5Ol~k-z~4RDuz^Zy6W> X7Y_?}t=S?-00000NkvXXu0mjfJ-8#C literal 6185 zcmeHLX;c&05)P{ZiYTB62qCy3Ch6?y2m-RNhDA_BhEBQz5we&B0t`G^lmSI>!F3o! z`&z1^L` z_Hmu8ZLE#KU?#h}Ir*V?P4v{6sJMpsjqbo;G@9ZAmdpGgIaVwY@%T{)Ru(5lut+SQ zhrz_&8VvG`xzC*VQ>5V;b&GYIccd=PZC%uN|JC^zzwJQ{*z2`~k-BT!NUD!Da%6wJ z>1h4#g!cU%#Sx4@pU&@}nR3MFdDgt=u?rpS7jJAG(WvTy zR=*4AQ(KVuudMctg=Y$uHCp~kbPx{R`?)`(M;cJt^1fU;*!)XEh~4wR?aw@i?=>gN z&n2YI2sByJY4-D-kSgBh)LPo{$69ZL14p$2`l6@Yp7l$py`Wd)l26kF!>;ZC{R)1T=lw5Y~xpH`DLGdaY@LeuHu-uz33U6ms*3O3dl`lU+>FWQIo zmT+0@4959t%a1BYP2`k(qy;mAI z`?v22C_lLR#=iEd8-z2_gJ-gZ`zN_v&AFPEwYVOr&C|S`RyJ9ccg!m<+GCI4(SX!z zWqxz9XW+_{Z;cycemm`J7t?Wa#H>Si7W-kF<u6ZaKF_cni>?Q&R#h*|PWffCs^uJ@ z!ysLyCcY@W)gu>(Ferj9O#l@%X zIz1{QV$Nkg++#Z6pxX6Tg2=(>QzpBMs`@UT)fPLS%3qW9c6VgRxv8ELs}JP0OI{`( zUkUX}pR7wtyZ-J@3m=UCbw>T`!_!;gvyIP6tnII+=|+-W?1F|4)y{om<}WYmwcOyb zf5Ltg?7Tk6(R$1N%_50g?$1a&cQ zs^xiI{u?`wKJ+_uq0mbYW7Kr;k_mOvA8%&f+)&q3eIPyX&Z27;caId*vFBa=DX7u4 zJ-56UxU6HQ&uWTtShmO5OVjX1jwLMz4*l_6{v{D6M_2pYi>lCkpS^KA zW?8m+h8#20wVeH6NsIl;CmM10+iXE2R&A?Q>9!kfj>jxK)6}aR>}rCNTIs>Q{f&Lp zLif3OeZG+`?N=mQEi&{TYFia&9WCzIJhk(x&MYsNz~q;LoQ$`o1&6FV{o7K_xhLoL zguI&b0AsFh?wz`IKETnIlpALWPLycsS3j*;H*mCKWOYRPJn+#E7H)pC3pG!#Yvpz0 zabmXmZL3Sz+RocIx+|_Mxf2&Up%=_CwxUl<&Umuh#HhgZf(D~R8hBV;>n<(lNT`9s zJO?t*XzkPkBS+TgN8@g)RW!`_{q9K<5j;pLf4b?ook^o6x7TH2wm}|Hl4EuG)=VA4 z0|VW^wtm0#cDDr?YEx5V)Y|7-RvXs^ooGJp8^+V?OU_}0EEQe_?ieQY*lzVYbsR#j;}l47>;bjZcK#z2_b%Zh9M3tZH@8-t%B zldWXEDG^8Y?bY%Rv5W3nX?eIBXXM7+OHpU*T?)!ij~$wS%FpNPG_Kgrs?pl-;!zN z!3GI%qT}Q$73=axwwu;YzH?#tPH$v>t8^A<8FiXH-RMzty z9og=Vjvv=`bT!XS++yoiYj2cx_rQj=%O)&JXTn83)15XlJq$O7?JGA7js~iRr|hB5 zwjyMuMAp>oJzt!<@mQ&DX$tnW+V2Bhg?+d=|JrE~To)^rPZ>%aYV4FJv5A!H1H04% zE|a$&DcaRgx?xpWpW_tGh)r%yZTAkIr`lY&VVjU}PUrc;p_6v5=eAO2cIjvI?h-Dq zGpVEexZ_IPUgpIOTbCsG*g!2B8Rk`lQ=|1&U5BeFsV*#Vsp;(LI)a6jBx~aZYt}If zi;VB<%-m^sWo7Pl$#&XM!*@m(`PNpYt)|YCJku>zrjm>2@0+9p-J87u8LvNW>dS@=A(~GcJIxTY*Y2ke}4YBU42sNs(jyLgG1a7VJ_y6@Gg(Y zH`dW%FSiW`d+N+mN$sdUAMLsARZ`=uu-EQ8CpBytrLIpfi?!P?x}@q@X+N~5qw)dh zW1d8PvHFcBlc`>>lXK?r)5niro_)8nb>QxlwDpp*-QHzWF&I64KDyB^_x56OMFIi@ zi#P}&Rv<<;Y2BM}*vgM{;iwz#2F=Wtj)Y>Nw`c>~^JM2hjh{GyXWRbSG<=$+pqey~asRSwk zz&pqCW5~G0+E^P2%wzdExqN^?pKNgvGMSh~B+BJ-f}BDSNy3RF5Cn+;nMfw%Q4PE_ zPAG$7@j|Jk0%8oq36XLoe6fr#5@HpY5Jwa(v&G@ie(Xp81Y&RRPw+zN2NqC1h_R5E zNFo44fq*#PLMn5PK|ww^^rsfm0Q7x@=!Zx}(Go7=9D@jDmg6B{?k9V3v?NLy4$LJY zQHTIlm7=4Pz8KQg-JAW%LP0?|Um#Xmp=5udDdY1#ll6sfiXLS+;~hcGKjD6%{V{f> zGOFe6&2kcPqZRJCJK5qC6NOsCSg2ni2SsAN2qOoH%Cm=5BZOb|iH90&oRv1Is!E*0@)a!7(Wgrhv7 zT%if75V)BQOpBM8JGgQt;T8lDO< z5HviHfhIhON=JAwO#YDTe^q#NMR)*>MgB*^W5P@(05h0)5|@df^+$p593}wa(G`MB zhADI!nLJj1e^q#l003Z7=qxh%pO`%km%#%lBsw1C(f~Y_10#42K%?O43?7#Yl9>pP z4t|+z|6g)`s%I+jF+3ZhVmtd-iZ;amD%LTDar+;d)MGMqUq!cR;-`K3L$;$+@pm2{ z7Ky)e2rTy7AYaArH@d#j^;HafmGZaj`bO7RG4NH&-?Hm3qf7hqmp&pyU(e;}cl_{z z`F`fLFfSKsjT$>oO@F$Brs9|zm7=F*8fHIdd6?OfofyoV)QOR4 T)k~kCmKb+uAE(kKVJZIsYnLPV diff --git a/Resources/Textures/White/Targeting/Doll/mouth.png b/Resources/Textures/White/Targeting/Doll/mouth.png index 202f411874e1bfebf30b7edf2642593cc4424c14..da12f632d1ef07546f161dfba5efa3f8b15da3e5 100644 GIT binary patch delta 81 zcmaE?@rHSV@?>RZVJ3}x7sp1WB^59Ihp0#!43y85}Sb4q9e07%6dz5oCK literal 5219 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 b`pNt`E{SyxIoSrb#0nndAF3|$owe{kU37F` diff --git a/Resources/Textures/White/Targeting/Doll/mouth_hover.png b/Resources/Textures/White/Targeting/Doll/mouth_hover.png index a5014f42ca3db0a388ddf896159d75a6c4cd5106..d1ea568a11e01125020e2b311edee55cc6ced804 100644 GIT binary patch delta 81 zcmcbiahG|5vM6I~rn7T^r?ay{K~a8MW=<*tgT}zopr01LnvEC2ui literal 5208 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 C9v=Px literal 5773 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 Sge(HMy!hxOMeSrw(SHDU=oxna diff --git a/Resources/Textures/White/Targeting/Doll/rightarm_hover.png b/Resources/Textures/White/Targeting/Doll/rightarm_hover.png index 7121c80830df2fa38f689ab9050edf0f918c64a1..f1873705275c3534d1a64234e6eaceb4ef113ee0 100644 GIT binary patch delta 127 zcmX?L+|4pUS(LFg)7d$|)7e>}peR2rGbfdSL1W_PS?pzuu@mQ|USnWjaP)L>4B?oW zoZ`S{$)ld&qsDXaBu^m+r-@^TtVfdor%G|4>V_3=rd(`Al46O|6M$gGp@hcRrpCrb e)<|n328Pp{xTmybss9BU#^CAd=d#Wzp$P!i(kKc5 literal 6592 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 diff --git a/Resources/Textures/White/Targeting/Doll/righthand.png b/Resources/Textures/White/Targeting/Doll/righthand.png index e71f8de80ed087cb7adea8ca430681c53120a505..ae489df8bf826886e8e282e3bda9981615646a0e 100644 GIT binary patch delta 103 zcmcbu^_h8svM6I~rn7T^r?ay{K~a8MW=<*tgT}Ea literal 5467 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 diff --git a/Resources/Textures/White/Targeting/Doll/righthand_hover.png b/Resources/Textures/White/Targeting/Doll/righthand_hover.png index d51910da1735eae1f8cd1ac6621aaba45d280ada..097e5516959921f908bfbb43209218ca730fbd99 100644 GIT binary patch delta 123 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 E0F#f?zyJUM diff --git a/Resources/Textures/White/Targeting/Doll/rightleg_hover.png b/Resources/Textures/White/Targeting/Doll/rightleg_hover.png index b0936de0a0988200facc73e57f9acb8fee7e2891..2bc97d85309e10b57077425946e13e83a5df1e0b 100644 GIT binary patch delta 123 zcmbQD*UmCQS(LFg)7d$|)7e>}peR2rGbfdSL1W_PuPkMZkrU^oUSnWju=R9t43U_c zoN^-3;$Q>MGJ^;Q2}>SziGRi`4F9ADBm;#RgHN<9sxoqx@iAP*GD&3_iwMsO7Uj0{ b3mF*Xgm|12dkocp1~GWL`njxgN@xNA^++e! literal 5908 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 diff --git a/Resources/Textures/White/Targeting/Doll/stomach.png b/Resources/Textures/White/Targeting/Doll/stomach.png index cada7a5adea648ab486e0cff3bc3b78c6c583f41..66958a609daaf255970f5e257dbe45d864bbe936 100644 GIT binary patch delta 109 zcmV-z0FwWm1eye}wE<;NNklgA zsZ0LPCD*`2R!Aat6M1ASNyzOFd{QNaoi(uZ95~->W=O=UrRFYQ4-*kC$xRI1*ZNUm P00000NkvXXu0mjf)|V;O delta 112 zcmV-$0FVEg1f2x1wE<{TNklNq0;F^YXBoyMeL?Dz}vtuHh3yO zLBy$Ua!ztX0%kOxlxPb?OfSJs%s%8nhW1ZXV?cg$IY#uq?m{~Eg6iT{bg%(=fCz>e SLe}vB0000$;0De<%d*Gir8RW2T2_f;joZ^H*C?RDdN00000NkvXXu0mjfaUUdq delta 107 zcmV-x0F?iR1egS{wE<&JNklD`F->SjD;m**SOI1j0xoil z$j^56WjiARR`&{&;TnAc#Jc?DjBQ_#e^JP>pnU)h=4?O5fGU9|)CYB_3Wlu2ED!(y N002ovPDHLkV1oLkDwY5M diff --git a/Resources/Textures/White/Targeting/Doll/torso_hover.png b/Resources/Textures/White/Targeting/Doll/torso_hover.png index d698b3c11ec003f3f7200697c0fd281e77c371c1..d6cd3462c1c6c285bc91b70c47762b28990da705 100644 GIT binary patch delta 89 zcmZo*X=B;2l`+u9)5S4FVrp{AiA0No4k`(W2|zI8jDUMUs@`EGwIttEAYUT1XQjpT oM8UYwfJ!$uAXt=C$koisP%g`!xz8_WF#`~Iy85}Sb4q9e0AM2>5dZ)H delta 83 zcmZo;X<*r~mC@VG)5S4FVrp{AkMk3bIjAHwUSjVEczwWS%}O31SlqQyvrJ*ZxkeC} h2qIQQq@>JXWw^M3<&V~)03ik-@O1TaS?83{1OT2_AwB>A From 901f7db442853947614ad1011e8f5efed0913e34 Mon Sep 17 00:00:00 2001 From: NR <66198468+withoutcode333@users.noreply.github.com> Date: Tue, 22 Apr 2025 19:55:39 +0500 Subject: [PATCH 3/5] act2 --- .../_White/Targeting/Ui/TargetingWidget.xaml | 8 ++++---- .../Textures/White/Targeting/Doll/head.png | Bin 546 -> 552 bytes .../White/Targeting/Doll/head_hover.png | Bin 531 -> 551 bytes 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Content.Client/_White/Targeting/Ui/TargetingWidget.xaml b/Content.Client/_White/Targeting/Ui/TargetingWidget.xaml index dd9ed53d25e..ad0690e8f21 100644 --- a/Content.Client/_White/Targeting/Ui/TargetingWidget.xaml +++ b/Content.Client/_White/Targeting/Ui/TargetingWidget.xaml @@ -105,25 +105,25 @@ Visible="False"/> diff --git a/Resources/Textures/White/Targeting/Doll/head.png b/Resources/Textures/White/Targeting/Doll/head.png index 024def7a41a631da08d7ec1d720c9b26c2a9c439..ae7e1873b7e7c2b1f4345aab3a407adba6cc633f 100644 GIT binary patch delta 137 zcmV;40CxYP1gHd%7YYan1^@s6E6vrlu_2TJb6!bAK~xx(jnJ_TfG`k4(U)wK4KfdV zKtcA%JZzA4XgKMFC~)H|zAfttoM>2F9yR*Hfs%op8PH%0uzmrsGZ$Aw&A?#G9$4nMUB8BxTzjS$9Q3$vk=i4?dg?nO00000NkvXXu0mjfX}~x& delta 131 zcmV-}0DS+b1fm3x7YYXm1^@s6+M8!!u_2TJZCFV}K~xx(b&s(PfG`jPFNC4!*d|+$ zB0JC_R-yeaBZbP*>jht(UbbZ?+%+(9g-yJA!2!4Pn1uO9zz#jb`M^a38&C!mar`ab lt+bdr`@}RcK>Au17rvT(B_7ws0qp<)002ovPDHLkV1g4=H8TJJ diff --git a/Resources/Textures/White/Targeting/Doll/head_hover.png b/Resources/Textures/White/Targeting/Doll/head_hover.png index 851fd2e9ba8c48c23710a2b49ee578370c2f6ce2..c953d846162c255db2bc899d6d43bb41d8ae844c 100644 GIT binary patch delta 136 zcmV;30C)eB1g8X$7YYgp1^@s6V(_Gcu_2TJa$QM8K~xx(g^|etfFKM6C#i~RtN^Q# z3ao~*d_)c*;QUx-IR$`7Au|&INFbAVan$7G?hCpUzvEnFUvvt(6^DXur2&)MMSR|Q qr990)p&etjdY4NLqx&I7vfUpE!4&Y1{*>GR0000p1d{}i7YYdo1^@s6 Date: Thu, 1 May 2025 02:35:34 +0500 Subject: [PATCH 4/5] fixes / tweaks / adds --- .../Targeting/Systems/TargetingSystem.cs | 41 ++++++++----------- .../_White/Targeting/TargetingController.cs | 2 - .../Targeting/Ui/TargetingWidget.xaml.cs | 8 ++-- .../Components/TargetingComponent.cs | 3 +- 4 files changed, 20 insertions(+), 34 deletions(-) diff --git a/Content.Client/_White/Targeting/Systems/TargetingSystem.cs b/Content.Client/_White/Targeting/Systems/TargetingSystem.cs index 2b50a1dda4b..24db925d6d2 100644 --- a/Content.Client/_White/Targeting/Systems/TargetingSystem.cs +++ b/Content.Client/_White/Targeting/Systems/TargetingSystem.cs @@ -11,31 +11,30 @@ public sealed class TargetingSystem : EntitySystem public event Action? TargetingStartup; public event Action? TargetingShutdown; - public event Action? TargetChange; public event Action? PartStatusStartup; public event Action? PartStatusUpdate; public event Action? PartStatusShutdown; + public override void Initialize() { base.Initialize(); - // Local Events Subscribers - SubscribeLocalEvent(HandlePlayerAttached); - SubscribeLocalEvent(HandlePlayerDetached); + SubscribeLocalEvent(PlayerAttached); + SubscribeLocalEvent(PlayerDetached); + SubscribeLocalEvent(OnTargetingStartup); SubscribeLocalEvent(OnTargetingShutdown); - // Network Events Subscribers SubscribeNetworkEvent(OnTargetingIntegrityChange); } - private void HandlePlayerAttached(EntityUid uid, TargetingComponent component, LocalPlayerAttachedEvent args) + private void PlayerAttached(EntityUid uid, TargetingComponent component, LocalPlayerAttachedEvent args) { TargetingStartup?.Invoke(component); PartStatusStartup?.Invoke(component); } - private void HandlePlayerDetached(EntityUid uid, TargetingComponent component, LocalPlayerDetachedEvent args) + private void PlayerDetached(EntityUid uid, TargetingComponent component, LocalPlayerDetachedEvent args) { TargetingShutdown?.Invoke(); PartStatusShutdown?.Invoke(); @@ -43,20 +42,20 @@ private void HandlePlayerDetached(EntityUid uid, TargetingComponent component, L private void OnTargetingStartup(EntityUid uid, TargetingComponent component, ComponentStartup args) { - if (_playerManager.LocalEntity == uid) - { - TargetingStartup?.Invoke(component); - PartStatusStartup?.Invoke(component); - } + if (_playerManager.LocalEntity != uid) + return; + + TargetingStartup?.Invoke(component); + PartStatusStartup?.Invoke(component); } private void OnTargetingShutdown(EntityUid uid, TargetingComponent component, ComponentShutdown args) { - if (_playerManager.LocalEntity == uid) - { - TargetingShutdown?.Invoke(); - PartStatusShutdown?.Invoke(); - } + if (_playerManager.LocalEntity != uid) + return; + + TargetingShutdown?.Invoke(); + PartStatusShutdown?.Invoke(); } private void OnTargetingIntegrityChange(TargetingIntegrityChangeEvent args) @@ -72,12 +71,4 @@ private void OnTargetingIntegrityChange(TargetingIntegrityChangeEvent args) PartStatusUpdate?.Invoke(component); } - - private void HandleTargetingChange(ICommonSession? session, TargetingBodyParts target) - { - if (session is not { AttachedEntity: { } uid } || !TryComp(uid, out _)) - return; - - TargetChange?.Invoke(target); - } } diff --git a/Content.Client/_White/Targeting/TargetingController.cs b/Content.Client/_White/Targeting/TargetingController.cs index 35a0e44e3ec..3b00b8e3c50 100644 --- a/Content.Client/_White/Targeting/TargetingController.cs +++ b/Content.Client/_White/Targeting/TargetingController.cs @@ -21,14 +21,12 @@ public void OnSystemLoaded(TargetingSystem system) { system.TargetingStartup += AddTargetingControl; system.TargetingShutdown += RemoveTargetingControl; - system.TargetChange += CycleTarget; } public void OnSystemUnloaded(TargetingSystem system) { system.TargetingStartup -= AddTargetingControl; system.TargetingShutdown -= RemoveTargetingControl; - system.TargetChange -= CycleTarget; } public void OnStateEntered(GameplayState state) diff --git a/Content.Client/_White/Targeting/Ui/TargetingWidget.xaml.cs b/Content.Client/_White/Targeting/Ui/TargetingWidget.xaml.cs index 76d1bb0af8b..bf41ccfd605 100644 --- a/Content.Client/_White/Targeting/Ui/TargetingWidget.xaml.cs +++ b/Content.Client/_White/Targeting/Ui/TargetingWidget.xaml.cs @@ -22,6 +22,7 @@ public TargetingWidget() foreach (var bodyPartButton in _bodyPartControls) { bodyPartButton.Value.MouseFilter = MouseFilterMode.Stop; + bodyPartButton.Value.OnPressed += _ => SetActiveBodyPart(bodyPartButton.Key); bodyPartButton.Value.OnMouseEntered += _ => SetHoverBodyPart(bodyPartButton.Key); bodyPartButton.Value.OnMouseExited += _ => SetHoverBodyPart(bodyPartButton.Key); @@ -75,12 +76,9 @@ public void SetTargetDollVisible(bool visible) public void SetHoverBodyPart(TargetingBodyParts bodyPart) { - foreach (var bodyPartButton in _bodyPartControls) + foreach (var bodyPartButton in _bodyPartControls.Where(bodyPartButton => bodyPartButton.Key == bodyPart && !bodyPartButton.Value.Children.First().Visible)) { - if (bodyPartButton.Key == bodyPart && !bodyPartButton.Value.Children.First().Visible) - { - bodyPartButton.Value.Children.Last().Visible = !bodyPartButton.Value.Children.Last().Visible; - } + bodyPartButton.Value.Children.Last().Visible = !bodyPartButton.Value.Children.Last().Visible; } } } diff --git a/Content.Shared/_White/Targeting/Components/TargetingComponent.cs b/Content.Shared/_White/Targeting/Components/TargetingComponent.cs index 09f4ab9b6ae..14da2560ced 100644 --- a/Content.Shared/_White/Targeting/Components/TargetingComponent.cs +++ b/Content.Shared/_White/Targeting/Components/TargetingComponent.cs @@ -1,5 +1,4 @@ -using Robust.Shared.Audio; -using Robust.Shared.GameStates; +using Robust.Shared.GameStates; namespace Content.Shared._White.Targeting.Components; From a07e5bf41163d372fa25ad01a3220b1f8c1874aa Mon Sep 17 00:00:00 2001 From: NR <66198468+withoutcode333@users.noreply.github.com> Date: Sun, 11 May 2025 13:12:45 +0500 Subject: [PATCH 5/5] some changes --- .../Explosion/EntitySystems/ExplosionSystem.Processing.cs | 3 +-- Content.Shared/Body/Systems/SharedBodySystem.IntegrityPart.cs | 2 ++ Content.Shared/Body/Systems/SharedBodySystem.Parts.cs | 1 - Content.Shared/Damage/Systems/DamageableSystem.cs | 1 + 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Content.Server/Explosion/EntitySystems/ExplosionSystem.Processing.cs b/Content.Server/Explosion/EntitySystems/ExplosionSystem.Processing.cs index 9dc201723d8..dcdafc8454a 100644 --- a/Content.Server/Explosion/EntitySystems/ExplosionSystem.Processing.cs +++ b/Content.Server/Explosion/EntitySystems/ExplosionSystem.Processing.cs @@ -445,8 +445,7 @@ private void ProcessEntity( foreach (var (entity, damage) in _toDamage) { // TODO EXPLOSIONS turn explosions into entities, and pass the the entity in as the damage origin. - _damageableSystem.TryChangeDamage(entity, damage, ignoreResistances: ignoreResistances); // WD EDIT - + _damageableSystem.TryChangeDamage(entity, damage, ignoreResistances: ignoreResistances, sever: true); // WD EDIT } } diff --git a/Content.Shared/Body/Systems/SharedBodySystem.IntegrityPart.cs b/Content.Shared/Body/Systems/SharedBodySystem.IntegrityPart.cs index ba5a26a1ec6..1b8f71814aa 100644 --- a/Content.Shared/Body/Systems/SharedBodySystem.IntegrityPart.cs +++ b/Content.Shared/Body/Systems/SharedBodySystem.IntegrityPart.cs @@ -144,6 +144,7 @@ public void TryChangePartIntegrity(Entity partEnt, var partIdSlot = GetParentPartAndSlotOrNull(partEnt)?.Slot; var originalPartIntegrity = partEnt.Comp.PartIntegrity; partEnt.Comp.PartIntegrity = Math.Min(BodyPartComponent.MaxPartIntegrity, partEnt.Comp.PartIntegrity - partIntegrity); + if (canSever && !partEnt.Comp.Enabled && partEnt.Comp.PartIntegrity <= 0 @@ -159,6 +160,7 @@ public void TryChangePartIntegrity(Entity partEnt, RaiseLocalEvent(partEnt, ref ev); break; } + case false when partEnt.Comp.PartIntegrity >= 80.0f: { diff --git a/Content.Shared/Body/Systems/SharedBodySystem.Parts.cs b/Content.Shared/Body/Systems/SharedBodySystem.Parts.cs index 580777655bc..9d17aa360fc 100644 --- a/Content.Shared/Body/Systems/SharedBodySystem.Parts.cs +++ b/Content.Shared/Body/Systems/SharedBodySystem.Parts.cs @@ -132,7 +132,6 @@ private void EnablePart(Entity partEnt) var ev = new TargetingBodyPartEnabledEvent(partEnt.Owner, partEnt.Comp); RaiseLocalEvent(partEnt.Comp.Body.Value, ref ev); } - break; } diff --git a/Content.Shared/Damage/Systems/DamageableSystem.cs b/Content.Shared/Damage/Systems/DamageableSystem.cs index 91f841fc3eb..f3d3e7099d2 100644 --- a/Content.Shared/Damage/Systems/DamageableSystem.cs +++ b/Content.Shared/Damage/Systems/DamageableSystem.cs @@ -164,6 +164,7 @@ public void DamageChanged(EntityUid uid, var data = new DamageVisualizerGroupData(component.DamagePerGroup.Keys.ToList()); _appearance.SetData(uid, DamageVisualizerKeys.DamageUpdateGroups, data, appearance); } + RaiseLocalEvent(uid, new DamageChangedEvent(component, damageDelta, interruptsDoAfters, origin, targetingBodyPart, sever, partDamageMultiplier)); }