From 0d1bae073565bbcab3fa2dfdfe41ed4ccd41700d Mon Sep 17 00:00:00 2001 From: DrSmugleaf Date: Fri, 5 Apr 2024 21:58:21 -0700 Subject: [PATCH 1/7] Add surgery (#1000) --- .../_CM14/Medical/Surgery/CMSurgeryBui.cs | 436 ++++++++++++++++++ .../Medical/Surgery/CMSurgeryStepButton.xaml | 4 + .../Surgery/CMSurgeryStepButton.xaml.cs | 16 + .../_CM14/Medical/Surgery/CMSurgerySystem.cs | 13 + .../Medical/Surgery/CMSurgeryWindow.xaml | 30 ++ .../Medical/Surgery/CMSurgeryWindow.xaml.cs | 14 + .../_CM14/Xenos/UI/XenoChoiceControl.xaml.cs | 29 ++ .../_CM14/Medical/Surgery/CMSurgerySystem.cs | 123 +++++ Content.Shared/_CM14/Body/BodyPrototype.cs | 14 + .../_CM14/Marines/Skills/SkillsComponent.cs | 10 + .../Surgery/CMOperatingTableComponent.cs | 7 + .../Medical/Surgery/CMSurgeryComponent.cs | 18 + .../Medical/Surgery/CMSurgeryDoAfterEvent.cs | 20 + .../Medical/Surgery/CMSurgeryStepEvent.cs | 7 + .../Surgery/CMSurgeryTargetComponent.cs | 7 + .../_CM14/Medical/Surgery/CMSurgeryUI.cs | 24 + ...MSurgeryCloseIncisionConditionComponent.cs | 7 + .../CMSurgeryLarvaConditionComponent.cs | 7 + ...SurgeryOperatingTableConditionComponent.cs | 7 + .../CMSurgeryPartConditionComponent.cs | 11 + .../Surgery/Conditions/CMSurgeryValidEvent.cs | 7 + .../Complete/CMSurgeryCompletedEvent.cs | 7 + .../Complete/CMSurgeryRemoveLarvaComponent.cs | 7 + .../Step/CMSurgeryStepBleedEffectComponent.cs | 11 + .../Step/CMSurgeryStepEmoteEffectComponent.cs | 13 + .../Surgery/SharedCMSurgerySystem.Steps.cs | 352 ++++++++++++++ .../Medical/Surgery/SharedCMSurgerySystem.cs | 160 +++++++ .../Medical/Surgery/StepInvalidReason.cs | 10 + .../Steps/CMSurgeryCanPerformStepEvent.cs | 14 + .../CMSurgeryCutLarvaRootsStepComponent.cs | 7 + .../Steps/CMSurgeryStepCompleteCheckEvent.cs | 4 + .../Surgery/Steps/CMSurgeryStepComponent.cs | 24 + .../Steps/Parts/CMBleedersClampedComponent.cs | 7 + .../Steps/Parts/CMIncisionOpenComponent.cs | 7 + .../Steps/Parts/CMRibcageOpenComponent.cs | 7 + .../Steps/Parts/CMRibcageSawedComponent.cs | 7 + .../Steps/Parts/CMSkinRetractedComponent.cs | 7 + .../Surgery/Tools/CMBoneGelComponent.cs | 10 + .../Surgery/Tools/CMBoneSawComponent.cs | 10 + .../Surgery/Tools/CMCauteryComponent.cs | 10 + .../Surgery/Tools/CMHemostatComponent.cs | 10 + .../Surgery/Tools/CMRetractorComponent.cs | 10 + .../Surgery/Tools/CMScalpelComponent.cs | 10 + .../Surgery/Tools/CMSurgeryToolComponent.cs | 15 + .../Surgery/Tools/CMSurgicalDrillComponent.cs | 10 + .../Surgery/Tools/ICMSurgeryToolComponent.cs | 6 + .../Xenos/Hugger/VictimHuggedComponent.cs | 56 +++ .../_CM14/Medical/Surgery/attributions.yml | 49 ++ .../Audio/_CM14/Medical/Surgery/cautery1.ogg | Bin 0 -> 34770 bytes .../Audio/_CM14/Medical/Surgery/cautery2.ogg | Bin 0 -> 16854 bytes .../Audio/_CM14/Medical/Surgery/hemostat1.ogg | Bin 0 -> 15729 bytes .../Audio/_CM14/Medical/Surgery/organ1.ogg | Bin 0 -> 18912 bytes .../Audio/_CM14/Medical/Surgery/organ2.ogg | Bin 0 -> 18946 bytes .../_CM14/Medical/Surgery/retractor1.ogg | Bin 0 -> 11537 bytes .../_CM14/Medical/Surgery/retractor2.ogg | Bin 0 -> 9915 bytes Resources/Audio/_CM14/Medical/Surgery/saw.ogg | Bin 0 -> 46750 bytes .../Audio/_CM14/Medical/Surgery/scalpel1.ogg | Bin 0 -> 13736 bytes .../Audio/_CM14/Medical/Surgery/scalpel2.ogg | Bin 0 -> 13098 bytes .../_CM14/Entities/Mobs/Species/base.yml | 68 +++ .../Entities/Objects/Medical/surgery.yml | 376 +++++++++++++++ .../Furniture/Tables/operating_table.yml | 14 + .../_CM14/Entities/Surgery/cm_surgeries.yml | 56 +++ .../Entities/Surgery/cm_surgery_steps.yml | 158 +++++++ .../_CM14/EntityLists/cm_surgery_list.yml | 11 + .../Surgery/operating_table.rsi/active.png | Bin 0 -> 604 bytes .../Surgery/operating_table.rsi/base.png | Bin 0 -> 379 bytes .../Surgery/operating_table.rsi/idle.png | Bin 0 -> 379 bytes .../Surgery/operating_table.rsi/meta.json | 28 ++ SpaceStation14.sln.DotSettings | 1 + 69 files changed, 2363 insertions(+) create mode 100644 Content.Client/_CM14/Medical/Surgery/CMSurgeryBui.cs create mode 100644 Content.Client/_CM14/Medical/Surgery/CMSurgeryStepButton.xaml create mode 100644 Content.Client/_CM14/Medical/Surgery/CMSurgeryStepButton.xaml.cs create mode 100644 Content.Client/_CM14/Medical/Surgery/CMSurgerySystem.cs create mode 100644 Content.Client/_CM14/Medical/Surgery/CMSurgeryWindow.xaml create mode 100644 Content.Client/_CM14/Medical/Surgery/CMSurgeryWindow.xaml.cs create mode 100644 Content.Client/_CM14/Xenos/UI/XenoChoiceControl.xaml.cs create mode 100644 Content.Server/_CM14/Medical/Surgery/CMSurgerySystem.cs create mode 100644 Content.Shared/_CM14/Body/BodyPrototype.cs create mode 100644 Content.Shared/_CM14/Marines/Skills/SkillsComponent.cs create mode 100644 Content.Shared/_CM14/Medical/Surgery/CMOperatingTableComponent.cs create mode 100644 Content.Shared/_CM14/Medical/Surgery/CMSurgeryComponent.cs create mode 100644 Content.Shared/_CM14/Medical/Surgery/CMSurgeryDoAfterEvent.cs create mode 100644 Content.Shared/_CM14/Medical/Surgery/CMSurgeryStepEvent.cs create mode 100644 Content.Shared/_CM14/Medical/Surgery/CMSurgeryTargetComponent.cs create mode 100644 Content.Shared/_CM14/Medical/Surgery/CMSurgeryUI.cs create mode 100644 Content.Shared/_CM14/Medical/Surgery/Conditions/CMSurgeryCloseIncisionConditionComponent.cs create mode 100644 Content.Shared/_CM14/Medical/Surgery/Conditions/CMSurgeryLarvaConditionComponent.cs create mode 100644 Content.Shared/_CM14/Medical/Surgery/Conditions/CMSurgeryOperatingTableConditionComponent.cs create mode 100644 Content.Shared/_CM14/Medical/Surgery/Conditions/CMSurgeryPartConditionComponent.cs create mode 100644 Content.Shared/_CM14/Medical/Surgery/Conditions/CMSurgeryValidEvent.cs create mode 100644 Content.Shared/_CM14/Medical/Surgery/Effects/Complete/CMSurgeryCompletedEvent.cs create mode 100644 Content.Shared/_CM14/Medical/Surgery/Effects/Complete/CMSurgeryRemoveLarvaComponent.cs create mode 100644 Content.Shared/_CM14/Medical/Surgery/Effects/Step/CMSurgeryStepBleedEffectComponent.cs create mode 100644 Content.Shared/_CM14/Medical/Surgery/Effects/Step/CMSurgeryStepEmoteEffectComponent.cs create mode 100644 Content.Shared/_CM14/Medical/Surgery/SharedCMSurgerySystem.Steps.cs create mode 100644 Content.Shared/_CM14/Medical/Surgery/SharedCMSurgerySystem.cs create mode 100644 Content.Shared/_CM14/Medical/Surgery/StepInvalidReason.cs create mode 100644 Content.Shared/_CM14/Medical/Surgery/Steps/CMSurgeryCanPerformStepEvent.cs create mode 100644 Content.Shared/_CM14/Medical/Surgery/Steps/CMSurgeryCutLarvaRootsStepComponent.cs create mode 100644 Content.Shared/_CM14/Medical/Surgery/Steps/CMSurgeryStepCompleteCheckEvent.cs create mode 100644 Content.Shared/_CM14/Medical/Surgery/Steps/CMSurgeryStepComponent.cs create mode 100644 Content.Shared/_CM14/Medical/Surgery/Steps/Parts/CMBleedersClampedComponent.cs create mode 100644 Content.Shared/_CM14/Medical/Surgery/Steps/Parts/CMIncisionOpenComponent.cs create mode 100644 Content.Shared/_CM14/Medical/Surgery/Steps/Parts/CMRibcageOpenComponent.cs create mode 100644 Content.Shared/_CM14/Medical/Surgery/Steps/Parts/CMRibcageSawedComponent.cs create mode 100644 Content.Shared/_CM14/Medical/Surgery/Steps/Parts/CMSkinRetractedComponent.cs create mode 100644 Content.Shared/_CM14/Medical/Surgery/Tools/CMBoneGelComponent.cs create mode 100644 Content.Shared/_CM14/Medical/Surgery/Tools/CMBoneSawComponent.cs create mode 100644 Content.Shared/_CM14/Medical/Surgery/Tools/CMCauteryComponent.cs create mode 100644 Content.Shared/_CM14/Medical/Surgery/Tools/CMHemostatComponent.cs create mode 100644 Content.Shared/_CM14/Medical/Surgery/Tools/CMRetractorComponent.cs create mode 100644 Content.Shared/_CM14/Medical/Surgery/Tools/CMScalpelComponent.cs create mode 100644 Content.Shared/_CM14/Medical/Surgery/Tools/CMSurgeryToolComponent.cs create mode 100644 Content.Shared/_CM14/Medical/Surgery/Tools/CMSurgicalDrillComponent.cs create mode 100644 Content.Shared/_CM14/Medical/Surgery/Tools/ICMSurgeryToolComponent.cs create mode 100644 Content.Shared/_CM14/Xenos/Hugger/VictimHuggedComponent.cs create mode 100644 Resources/Audio/_CM14/Medical/Surgery/attributions.yml create mode 100644 Resources/Audio/_CM14/Medical/Surgery/cautery1.ogg create mode 100644 Resources/Audio/_CM14/Medical/Surgery/cautery2.ogg create mode 100644 Resources/Audio/_CM14/Medical/Surgery/hemostat1.ogg create mode 100644 Resources/Audio/_CM14/Medical/Surgery/organ1.ogg create mode 100644 Resources/Audio/_CM14/Medical/Surgery/organ2.ogg create mode 100644 Resources/Audio/_CM14/Medical/Surgery/retractor1.ogg create mode 100644 Resources/Audio/_CM14/Medical/Surgery/retractor2.ogg create mode 100644 Resources/Audio/_CM14/Medical/Surgery/saw.ogg create mode 100644 Resources/Audio/_CM14/Medical/Surgery/scalpel1.ogg create mode 100644 Resources/Audio/_CM14/Medical/Surgery/scalpel2.ogg create mode 100644 Resources/Prototypes/_CM14/Entities/Mobs/Species/base.yml create mode 100644 Resources/Prototypes/_CM14/Entities/Objects/Medical/surgery.yml create mode 100644 Resources/Prototypes/_CM14/Entities/Structures/Furniture/Tables/operating_table.yml create mode 100644 Resources/Prototypes/_CM14/Entities/Surgery/cm_surgeries.yml create mode 100644 Resources/Prototypes/_CM14/Entities/Surgery/cm_surgery_steps.yml create mode 100644 Resources/Prototypes/_CM14/EntityLists/cm_surgery_list.yml create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/operating_table.rsi/active.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/operating_table.rsi/base.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/operating_table.rsi/idle.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/operating_table.rsi/meta.json diff --git a/Content.Client/_CM14/Medical/Surgery/CMSurgeryBui.cs b/Content.Client/_CM14/Medical/Surgery/CMSurgeryBui.cs new file mode 100644 index 00000000000..8310efb4810 --- /dev/null +++ b/Content.Client/_CM14/Medical/Surgery/CMSurgeryBui.cs @@ -0,0 +1,436 @@ +using Content.Client._CM14.Xenos.UI; +using Content.Client.Administration.UI.CustomControls; +using Content.Shared._CM14.Medical.Surgery; +using Content.Shared.Body.Part; +using Content.Shared.Standing; +using JetBrains.Annotations; +using Robust.Client.GameObjects; +using Robust.Client.Player; +using Robust.Shared.Prototypes; +using Robust.Shared.Utility; +using static Robust.Client.UserInterface.Control; + +namespace Content.Client._CM14.Medical.Surgery; + +[UsedImplicitly] +public sealed class CMSurgeryBui : BoundUserInterface +{ + [Dependency] private readonly IEntityManager _entities = default!; + [Dependency] private readonly IPlayerManager _player = default!; + + private readonly StandingStateSystem _standing; + private readonly CMSurgerySystem _system; + + [ViewVariables] + private CMSurgeryWindow? _window; + + private EntityUid? _part; + private (EntityUid Ent, EntProtoId Proto)? _surgery; + private readonly List _previousSurgeries = new(); + + public CMSurgeryBui(EntityUid owner, Enum uiKey) : base(owner, uiKey) + { + _standing = _entities.System(); + _system = _entities.System(); + } + + protected override void Open() + { + _system.OnRefresh += () => + { + UpdateDisabledPanel(); + RefreshUI(); + }; + + if (State is CMSurgeryBuiState s) + Update(s); + } + + protected override void UpdateState(BoundUserInterfaceState state) + { + if (state is CMSurgeryBuiState s) + Update(s); + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + if (disposing) + _window?.Dispose(); + + _system.OnRefresh -= RefreshUI; + } + + private void Update(CMSurgeryBuiState state) + { + if (_window == null) + { + _window = new CMSurgeryWindow(); + _window.OnClose += Close; + _window.Title = "Surgery"; + + _window.PartsButton.OnPressed += _ => + { + _part = null; + _surgery = null; + _previousSurgeries.Clear(); + View(ViewType.Parts); + }; + + _window.SurgeriesButton.OnPressed += _ => + { + _surgery = null; + _previousSurgeries.Clear(); + + if (!_entities.TryGetNetEntity(_part, out var netPart) || + State is not CMSurgeryBuiState s || + !s.Choices.TryGetValue(netPart.Value, out var surgeries)) + { + return; + } + + OnPartPressed(netPart.Value, surgeries); + }; + + _window.StepsButton.OnPressed += _ => + { + if (!_entities.TryGetNetEntity(_part, out var netPart) || + _previousSurgeries.Count == 0) + { + return; + } + + var last = _previousSurgeries[^1]; + _previousSurgeries.RemoveAt(_previousSurgeries.Count - 1); + + if (_system.GetSingleton(last) is not { } previousId || + !_entities.TryGetComponent(previousId, out CMSurgeryComponent? previous)) + { + return; + } + + OnSurgeryPressed((previousId, previous), netPart.Value, last); + }; + } + + _window.Surgeries.DisposeAllChildren(); + _window.Steps.DisposeAllChildren(); + _window.Parts.DisposeAllChildren(); + + View(ViewType.Parts); + + var oldSurgery = _surgery; + var oldPart = _part; + _part = null; + _surgery = null; + + var parts = new List>(state.Choices.Keys.Count); + foreach (var choice in state.Choices.Keys) + { + if (_entities.TryGetEntity(choice, out var ent) && + _entities.TryGetComponent(ent, out BodyPartComponent? part)) + { + parts.Add((ent.Value, part)); + } + } + + parts.Sort((a, b) => + { + int GetScore(Entity part) + { + return part.Comp.PartType switch + { + BodyPartType.Head => 1, + BodyPartType.Torso => 2, + BodyPartType.Arm => 3, + BodyPartType.Hand => 4, + BodyPartType.Leg => 5, + BodyPartType.Foot => 6, + BodyPartType.Tail => 7, + BodyPartType.Other => 8, + _ => 0 + }; + } + + return GetScore(a) - GetScore(b); + }); + + foreach (var part in parts) + { + var netPart = _entities.GetNetEntity(part.Owner); + var surgeries = state.Choices[netPart]; + var partName = _entities.GetComponent(part).EntityName; + var partButton = new XenoChoiceControl(); + + partButton.Set(partName, null); + partButton.Button.OnPressed += _ => OnPartPressed(netPart, surgeries); + + _window.Parts.AddChild(partButton); + + foreach (var surgeryId in surgeries) + { + if (_system.GetSingleton(surgeryId) is not { } surgery || + !_entities.TryGetComponent(surgery, out CMSurgeryComponent? surgeryComp)) + { + continue; + } + + if (oldPart == part && oldSurgery?.Proto == surgeryId) + OnSurgeryPressed((surgery, surgeryComp), netPart, surgeryId); + } + + if (oldPart == part && oldSurgery == null) + OnPartPressed(netPart, surgeries); + } + + RefreshUI(); + UpdateDisabledPanel(); + + if (!_window.IsOpen) + _window.OpenCentered(); + } + + private void AddStep(EntProtoId stepId, NetEntity netPart, EntProtoId surgeryId) + { + if (_window == null || + _system.GetSingleton(stepId) is not { } step) + { + return; + } + + var stepName = new FormattedMessage(); + stepName.AddText(_entities.GetComponent(step).EntityName); + + var stepButton = new CMSurgeryStepButton { Step = step }; + stepButton.Button.OnPressed += _ => SendMessage(new CMSurgeryStepChosenBuiMessage(netPart, surgeryId, stepId)); + + _window.Steps.AddChild(stepButton); + } + + private void OnSurgeryPressed(Entity surgery, NetEntity netPart, EntProtoId surgeryId) + { + if (_window == null) + return; + + _part = _entities.GetEntity(netPart); + _surgery = (surgery, surgeryId); + + _window.Steps.DisposeAllChildren(); + + if (surgery.Comp.Requirement is { } requirementId && _system.GetSingleton(requirementId) is { } requirement) + { + var label = new XenoChoiceControl(); + label.Button.OnPressed += _ => + { + _previousSurgeries.Add(surgeryId); + + if (_entities.TryGetComponent(requirement, out CMSurgeryComponent? requirementComp)) + OnSurgeryPressed((requirement, requirementComp), netPart, requirementId); + }; + + var msg = new FormattedMessage(); + var surgeryName = _entities.GetComponent(requirement).EntityName; + msg.AddMarkup($"[bold]Requires: {surgeryName}[/bold]"); + label.Set(msg, null); + + _window.Steps.AddChild(label); + _window.Steps.AddChild(new HSeparator { Color = Color.FromHex("#4972A1"), Margin = new Thickness(0, 0, 0, 1) }); + } + + foreach (var stepId in surgery.Comp.Steps) + { + AddStep(stepId, netPart, surgeryId); + } + + View(ViewType.Steps); + RefreshUI(); + } + + private void OnPartPressed(NetEntity netPart, List surgeryIds) + { + if (_window == null) + return; + + _part = _entities.GetEntity(netPart); + + _window.Surgeries.DisposeAllChildren(); + + var surgeries = new List<(Entity Ent, EntProtoId Id, string Name)>(); + foreach (var surgeryId in surgeryIds) + { + if (_system.GetSingleton(surgeryId) is not { } surgery || + !_entities.TryGetComponent(surgery, out CMSurgeryComponent? surgeryComp)) + { + continue; + } + + var name = _entities.GetComponent(surgery).EntityName; + surgeries.Add(((surgery, surgeryComp), surgeryId, name)); + } + + surgeries.Sort((a, b ) => + { + var priority = a.Ent.Comp.Priority.CompareTo(b.Ent.Comp.Priority); + if (priority != 0) + return priority; + + return string.Compare(a.Name, b.Name, StringComparison.Ordinal); + }); + + foreach (var surgery in surgeries) + { + var surgeryButton = new XenoChoiceControl(); + surgeryButton.Set(surgery.Name, null); + + surgeryButton.Button.OnPressed += _ => OnSurgeryPressed(surgery.Ent, netPart, surgery.Id); + _window.Surgeries.AddChild(surgeryButton); + } + + RefreshUI(); + View(ViewType.Surgeries); + } + + private void RefreshUI() + { + if (_window == null || + !_entities.HasComponent(_surgery?.Ent) || + !_entities.TryGetComponent(_part, out BodyPartComponent? part)) + { + return; + } + + var next = _system.GetNextStep(Owner, _part.Value, _surgery.Value.Ent); + var i = 0; + foreach (var child in _window.Steps.Children) + { + if (child is not CMSurgeryStepButton stepButton) + continue; + + var status = StepStatus.Incomplete; + if (next == null) + { + status = StepStatus.Complete; + } + else if (next.Value.Surgery.Owner != _surgery.Value.Ent) + { + status = StepStatus.Incomplete; + } + else if (next.Value.Step == i) + { + status = StepStatus.Next; + } + else if (i < next.Value.Step) + { + status = StepStatus.Complete; + } + + stepButton.Button.Disabled = status != StepStatus.Next; + + var stepName = new FormattedMessage(); + stepName.AddText(_entities.GetComponent(stepButton.Step).EntityName); + + if (status == StepStatus.Complete) + { + stepButton.Button.Modulate = Color.Green; + } + else + { + stepButton.Button.Modulate = Color.White; + if (_player.LocalEntity is { } player && + !_system.CanPerformStep(player, Owner, part.PartType, stepButton.Step, false, out var popup, out var reason, out _)) + { + stepButton.ToolTip = popup; + stepButton.Button.Disabled = true; + + switch (reason) + { + case StepInvalidReason.MissingSkills: + stepName.AddMarkup(" [color=red](Missing surgery skill)[/color]"); + break; + case StepInvalidReason.NeedsOperatingTable: + stepName.AddMarkup(" [color=red](Needs operating table)[/color]"); + break; + case StepInvalidReason.Armor: + stepName.AddMarkup(" [color=red](Remove their armor!)[/color]"); + break; + case StepInvalidReason.MissingTool: + stepName.AddMarkup(" [color=red](Missing tool)[/color]"); + break; + } + } + } + + var texture = _entities.GetComponentOrNull(stepButton.Step)?.Icon?.Default; + stepButton.Set(stepName, texture); + i++; + } + + UpdateDisabledPanel(); + } + + private void UpdateDisabledPanel() + { + if (_window == null) + return; + + if (_standing.IsDown(Owner)) + { + _window.DisabledPanel.Visible = false; + _window.DisabledPanel.MouseFilter = MouseFilterMode.Ignore; + return; + } + + _window.DisabledPanel.Visible = true; + + var text = new FormattedMessage(); + text.AddMarkup("[color=red][font size=16]They need to be lying down![/font][/color]"); + _window.DisabledLabel.SetMessage(text); + _window.DisabledPanel.MouseFilter = MouseFilterMode.Stop; + } + + private void View(ViewType type) + { + if (_window == null) + return; + + _window.PartsButton.Parent!.Margin = new Thickness(0, 0, 0, 10); + + _window.Parts.Visible = type == ViewType.Parts; + _window.PartsButton.Disabled = type == ViewType.Parts; + + _window.Surgeries.Visible = type == ViewType.Surgeries; + _window.SurgeriesButton.Disabled = type != ViewType.Steps; + + _window.Steps.Visible = type == ViewType.Steps; + _window.StepsButton.Disabled = type != ViewType.Steps || _previousSurgeries.Count == 0; + + if (_entities.TryGetComponent(_part, out MetaDataComponent? partMeta) && + _entities.TryGetComponent(_surgery?.Ent, out MetaDataComponent? surgeryMeta)) + { + _window.Title = $"Surgery - {partMeta.EntityName}, {surgeryMeta.EntityName}"; + } + else if (partMeta != null) + { + _window.Title = $"Surgery - {partMeta.EntityName}"; + } + else + { + _window.Title = "Surgery"; + } + } + + private enum ViewType + { + Parts, + Surgeries, + Steps + } + + private enum StepStatus + { + Next, + Complete, + Incomplete + } +} diff --git a/Content.Client/_CM14/Medical/Surgery/CMSurgeryStepButton.xaml b/Content.Client/_CM14/Medical/Surgery/CMSurgeryStepButton.xaml new file mode 100644 index 00000000000..368d761f9b6 --- /dev/null +++ b/Content.Client/_CM14/Medical/Surgery/CMSurgeryStepButton.xaml @@ -0,0 +1,4 @@ + + diff --git a/Content.Client/_CM14/Medical/Surgery/CMSurgeryStepButton.xaml.cs b/Content.Client/_CM14/Medical/Surgery/CMSurgeryStepButton.xaml.cs new file mode 100644 index 00000000000..6731aa0b35f --- /dev/null +++ b/Content.Client/_CM14/Medical/Surgery/CMSurgeryStepButton.xaml.cs @@ -0,0 +1,16 @@ +using Content.Client._CM14.Xenos.UI; +using Robust.Client.AutoGenerated; +using Robust.Client.UserInterface.XAML; + +namespace Content.Client._CM14.Medical.Surgery; + +[GenerateTypedNameReferences] +public sealed partial class CMSurgeryStepButton : XenoChoiceControl +{ + public EntityUid Step { get; set; } + + public CMSurgeryStepButton() + { + RobustXamlLoader.Load(this); + } +} diff --git a/Content.Client/_CM14/Medical/Surgery/CMSurgerySystem.cs b/Content.Client/_CM14/Medical/Surgery/CMSurgerySystem.cs new file mode 100644 index 00000000000..dc5c7910020 --- /dev/null +++ b/Content.Client/_CM14/Medical/Surgery/CMSurgerySystem.cs @@ -0,0 +1,13 @@ +using Content.Shared._CM14.Medical.Surgery; + +namespace Content.Client._CM14.Medical.Surgery; + +public sealed class CMSurgerySystem : SharedCMSurgerySystem +{ + public event Action? OnRefresh; + + public override void Update(float frameTime) + { + OnRefresh?.Invoke(); + } +} diff --git a/Content.Client/_CM14/Medical/Surgery/CMSurgeryWindow.xaml b/Content.Client/_CM14/Medical/Surgery/CMSurgeryWindow.xaml new file mode 100644 index 00000000000..510774b51d7 --- /dev/null +++ b/Content.Client/_CM14/Medical/Surgery/CMSurgeryWindow.xaml @@ -0,0 +1,30 @@ + + + + + + diff --git a/Content.Client/_CM14/Xenos/UI/XenoChoiceControl.xaml.cs b/Content.Client/_CM14/Xenos/UI/BaseButtonForSurgery.xaml.cs similarity index 87% rename from Content.Client/_CM14/Xenos/UI/XenoChoiceControl.xaml.cs rename to Content.Client/_CM14/Xenos/UI/BaseButtonForSurgery.xaml.cs index 4a3deecbd4c..5e95cb3be8f 100644 --- a/Content.Client/_CM14/Xenos/UI/XenoChoiceControl.xaml.cs +++ b/Content.Client/_CM14/Xenos/UI/BaseButtonForSurgery.xaml.cs @@ -8,9 +8,9 @@ namespace Content.Client._CM14.Xenos.UI; [GenerateTypedNameReferences] [Virtual] -public partial class XenoChoiceControl : Control +public partial class BaseButtonForSurgery : Control { - public XenoChoiceControl() + public BaseButtonForSurgery() { RobustXamlLoader.Load(this); } diff --git a/Content.Server/_CM14/Medical/Surgery/CMSurgerySystem.cs b/Content.Server/_CM14/Medical/Surgery/CMSurgerySystem.cs index 2e410bcff7f..c35ce27447c 100644 --- a/Content.Server/_CM14/Medical/Surgery/CMSurgerySystem.cs +++ b/Content.Server/_CM14/Medical/Surgery/CMSurgerySystem.cs @@ -6,12 +6,15 @@ using Content.Shared._CM14.Medical.Surgery.Conditions; using Content.Shared._CM14.Medical.Surgery.Effects.Step; using Content.Shared._CM14.Medical.Surgery.Tools; +using Content.Shared._RMC14.Medical.Surgery; using Content.Shared.Interaction; using Content.Shared.Prototypes; using Robust.Server.GameObjects; using Robust.Shared.Player; using Robust.Shared.Prototypes; using Robust.Shared.Utility; +using CMSurgeryBuiState = Content.Shared._CM14.Medical.Surgery.CMSurgeryBuiState; +using CMSurgeryUIKey = Content.Shared._CM14.Medical.Surgery.CMSurgeryUIKey; namespace Content.Server._CM14.Medical.Surgery; diff --git a/Content.Shared/_CM14/Medical/Surgery/CMOperatingTableComponent.cs b/Content.Shared/_CM14/Medical/Surgery/CMOperatingTableComponent.cs index bee757e276d..6f9a09026ed 100644 --- a/Content.Shared/_CM14/Medical/Surgery/CMOperatingTableComponent.cs +++ b/Content.Shared/_CM14/Medical/Surgery/CMOperatingTableComponent.cs @@ -1,7 +1,8 @@ -using Robust.Shared.GameStates; +using Content.Shared._RMC14.Medical.Surgery; +using Robust.Shared.GameStates; namespace Content.Shared._CM14.Medical.Surgery; [RegisterComponent, NetworkedComponent] [Access(typeof(SharedCMSurgerySystem))] -public sealed partial class CMOperatingTableComponent : Component; +public sealed partial class CMOperatingTableComponent : Component {}; diff --git a/Content.Shared/_CM14/Medical/Surgery/CMSurgeryComponent.cs b/Content.Shared/_CM14/Medical/Surgery/CMSurgeryComponent.cs index 4764841b0d5..28a5798362e 100644 --- a/Content.Shared/_CM14/Medical/Surgery/CMSurgeryComponent.cs +++ b/Content.Shared/_CM14/Medical/Surgery/CMSurgeryComponent.cs @@ -1,4 +1,5 @@ -using Robust.Shared.GameStates; +using Content.Shared._RMC14.Medical.Surgery; +using Robust.Shared.GameStates; using Robust.Shared.Prototypes; namespace Content.Shared._CM14.Medical.Surgery; diff --git a/Content.Shared/_CM14/Medical/Surgery/CMSurgeryDoAfterEvent.cs b/Content.Shared/_CM14/Medical/Surgery/CMSurgeryDoAfterEvent.cs index 1307b095433..ddbab5f89e2 100644 --- a/Content.Shared/_CM14/Medical/Surgery/CMSurgeryDoAfterEvent.cs +++ b/Content.Shared/_CM14/Medical/Surgery/CMSurgeryDoAfterEvent.cs @@ -2,18 +2,16 @@ using Robust.Shared.Prototypes; using Robust.Shared.Serialization; -namespace Content.Shared._CM14.Medical.Surgery; +namespace Content.Shared._RMC14.Medical.Surgery; [Serializable, NetSerializable] public sealed partial class CMSurgeryDoAfterEvent : SimpleDoAfterEvent { - public readonly NetEntity Part; public readonly EntProtoId Surgery; public readonly EntProtoId Step; - public CMSurgeryDoAfterEvent(NetEntity part, EntProtoId surgery, EntProtoId step) + public CMSurgeryDoAfterEvent(EntProtoId surgery, EntProtoId step) { - Part = part; Surgery = surgery; Step = step; } diff --git a/Content.Shared/_CM14/Medical/Surgery/CMSurgeryTargetComponent.cs b/Content.Shared/_CM14/Medical/Surgery/CMSurgeryTargetComponent.cs index dbe86e8458d..867d4149714 100644 --- a/Content.Shared/_CM14/Medical/Surgery/CMSurgeryTargetComponent.cs +++ b/Content.Shared/_CM14/Medical/Surgery/CMSurgeryTargetComponent.cs @@ -1,7 +1,8 @@ -using Robust.Shared.GameStates; +using Content.Shared._RMC14.Medical.Surgery; +using Robust.Shared.GameStates; namespace Content.Shared._CM14.Medical.Surgery; [RegisterComponent, NetworkedComponent] [Access(typeof(SharedCMSurgerySystem))] -public sealed partial class CMSurgeryTargetComponent : Component; +public sealed partial class CMSurgeryTargetComponent : Component {}; diff --git a/Content.Shared/_CM14/Medical/Surgery/Conditions/CMSurgeryCloseIncisionConditionComponent.cs b/Content.Shared/_CM14/Medical/Surgery/Conditions/CMSurgeryCloseIncisionConditionComponent.cs index e992284204f..248318f819b 100644 --- a/Content.Shared/_CM14/Medical/Surgery/Conditions/CMSurgeryCloseIncisionConditionComponent.cs +++ b/Content.Shared/_CM14/Medical/Surgery/Conditions/CMSurgeryCloseIncisionConditionComponent.cs @@ -1,7 +1,8 @@ -using Robust.Shared.GameStates; +using Content.Shared._RMC14.Medical.Surgery; +using Robust.Shared.GameStates; namespace Content.Shared._CM14.Medical.Surgery.Conditions; [RegisterComponent, NetworkedComponent] [Access(typeof(SharedCMSurgerySystem))] -public sealed partial class CMSurgeryCloseIncisionConditionComponent : Component; +public sealed partial class CMSurgeryCloseIncisionConditionComponent : Component {}; diff --git a/Content.Shared/_CM14/Medical/Surgery/Conditions/CMSurgeryLarvaConditionComponent.cs b/Content.Shared/_CM14/Medical/Surgery/Conditions/CMSurgeryLarvaConditionComponent.cs deleted file mode 100644 index 41126f728a8..00000000000 --- a/Content.Shared/_CM14/Medical/Surgery/Conditions/CMSurgeryLarvaConditionComponent.cs +++ /dev/null @@ -1,7 +0,0 @@ -using Robust.Shared.GameStates; - -namespace Content.Shared._CM14.Medical.Surgery.Conditions; - -[RegisterComponent, NetworkedComponent] -[Access(typeof(SharedCMSurgerySystem))] -public sealed partial class CMSurgeryLarvaConditionComponent : Component; diff --git a/Content.Shared/_CM14/Medical/Surgery/Conditions/CMSurgeryOperatingTableConditionComponent.cs b/Content.Shared/_CM14/Medical/Surgery/Conditions/CMSurgeryOperatingTableConditionComponent.cs index 086da0a97f2..9caf66585e4 100644 --- a/Content.Shared/_CM14/Medical/Surgery/Conditions/CMSurgeryOperatingTableConditionComponent.cs +++ b/Content.Shared/_CM14/Medical/Surgery/Conditions/CMSurgeryOperatingTableConditionComponent.cs @@ -1,7 +1,8 @@ -using Robust.Shared.GameStates; +using Content.Shared._RMC14.Medical.Surgery; +using Robust.Shared.GameStates; namespace Content.Shared._CM14.Medical.Surgery.Conditions; [RegisterComponent, NetworkedComponent] [Access(typeof(SharedCMSurgerySystem))] -public sealed partial class CMSurgeryOperatingTableConditionComponent : Component; +public sealed partial class CMSurgeryOperatingTableConditionComponent : Component {}; diff --git a/Content.Shared/_CM14/Medical/Surgery/Effects/Complete/CMSurgeryRemoveLarvaComponent.cs b/Content.Shared/_CM14/Medical/Surgery/Effects/Complete/CMSurgeryRemoveLarvaComponent.cs deleted file mode 100644 index 09dc3306061..00000000000 --- a/Content.Shared/_CM14/Medical/Surgery/Effects/Complete/CMSurgeryRemoveLarvaComponent.cs +++ /dev/null @@ -1,7 +0,0 @@ -using Robust.Shared.GameStates; - -namespace Content.Shared._CM14.Medical.Surgery.Effects.Complete; - -[RegisterComponent, NetworkedComponent] -[Access(typeof(SharedCMSurgerySystem))] -public sealed partial class CMSurgeryRemoveLarvaComponent : Component; diff --git a/Content.Shared/_CM14/Medical/Surgery/Effects/Step/CMSurgeryStepBleedEffectComponent.cs b/Content.Shared/_CM14/Medical/Surgery/Effects/Step/CMSurgeryStepBleedEffectComponent.cs index e0e1648680a..19c80b3464d 100644 --- a/Content.Shared/_CM14/Medical/Surgery/Effects/Step/CMSurgeryStepBleedEffectComponent.cs +++ b/Content.Shared/_CM14/Medical/Surgery/Effects/Step/CMSurgeryStepBleedEffectComponent.cs @@ -1,4 +1,5 @@ -using Robust.Shared.GameStates; +using Content.Shared._RMC14.Medical.Surgery; +using Robust.Shared.GameStates; namespace Content.Shared._CM14.Medical.Surgery.Effects.Step; diff --git a/Content.Shared/_CM14/Medical/Surgery/Effects/Step/CMSurgeryStepEmoteEffectComponent.cs b/Content.Shared/_CM14/Medical/Surgery/Effects/Step/CMSurgeryStepEmoteEffectComponent.cs index f4a69f9daef..d758b197ed2 100644 --- a/Content.Shared/_CM14/Medical/Surgery/Effects/Step/CMSurgeryStepEmoteEffectComponent.cs +++ b/Content.Shared/_CM14/Medical/Surgery/Effects/Step/CMSurgeryStepEmoteEffectComponent.cs @@ -1,4 +1,5 @@ -using Content.Shared.Chat.Prototypes; +using Content.Shared._RMC14.Medical.Surgery; +using Content.Shared.Chat.Prototypes; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; diff --git a/Content.Shared/_CM14/Medical/Surgery/SharedCMSurgerySystem.Steps.cs b/Content.Shared/_CM14/Medical/Surgery/SharedCMSurgerySystem.Steps.cs index f960fc5ac29..f1f8d4ab801 100644 --- a/Content.Shared/_CM14/Medical/Surgery/SharedCMSurgerySystem.Steps.cs +++ b/Content.Shared/_CM14/Medical/Surgery/SharedCMSurgerySystem.Steps.cs @@ -1,9 +1,8 @@ -using Content.Shared._CM14.Marines.Skills; +using Content.Shared._CM14.Medical.Surgery; using Content.Shared._CM14.Medical.Surgery.Conditions; using Content.Shared._CM14.Medical.Surgery.Steps; using Content.Shared._CM14.Medical.Surgery.Tools; -using Content.Shared._CM14.Xenos.Hugger; -using Content.Shared.Armor; +using Content.Shared._RMC14.Medical.Surgery.Steps; using Content.Shared.Body.Part; using Content.Shared.Buckle.Components; using Content.Shared.DoAfter; @@ -11,7 +10,7 @@ using Content.Shared.Popups; using Robust.Shared.Prototypes; -namespace Content.Shared._CM14.Medical.Surgery; +namespace Content.Shared._RMC14.Medical.Surgery; public abstract partial class SharedCMSurgerySystem { @@ -21,14 +20,9 @@ private void InitializeSteps() SubscribeLocalEvent(OnToolCheck); SubscribeLocalEvent(OnToolCanPerform); - SubSurgery(OnCutLarvaRootsStep, OnCutLarvaRootsCheck); - - SubscribeLocalEvent(_inventory.RelayEvent); - SubscribeLocalEvent>(OnArmorCanPerformStep); - - Subs.BuiEvents(CMSurgeryUIKey.Key, sub => + Subs.BuiEvents(CMSurgeryUIKey.Key, subs => { - sub.Event(OnSurgeryTargetStepChosen); + subs.Event(OnSurgeryTargetStepChosen); }); } @@ -127,13 +121,6 @@ private void OnToolCheck(Entity ent, ref CMSurgeryStepCo private void OnToolCanPerform(Entity ent, ref CMSurgeryCanPerformStepEvent args) { - if (!TryComp(args.User, out SkillsComponent? skills) || - skills.Surgery < ent.Comp.Skill) - { - args.Invalid = StepInvalidReason.MissingSkills; - return; - } - if (HasComp(ent)) { if (!TryComp(args.Body, out BuckleComponent? buckle) || @@ -170,32 +157,16 @@ private void OnToolCanPerform(Entity ent, ref CMSurgeryC } } - private void OnCutLarvaRootsStep(Entity ent, ref CMSurgeryStepEvent args) + private void OnSurgeryTargetStepChosen(Entity ent, ref CMSurgeryStepChosenBuiMsg args) { - if (TryComp(args.Body, out VictimHuggedComponent? hugged) && - hugged.BurstAt > _timing.CurTime) - { - hugged.RootsCut = true; - } - } + var user = args.Session.AttachedEntity; - private void OnCutLarvaRootsCheck(Entity ent, ref CMSurgeryStepCompleteCheckEvent args) - { - if (!TryComp(args.Body, out VictimHuggedComponent? hugged) || !hugged.RootsCut) - args.Cancelled = true; - } - - private void OnArmorCanPerformStep(Entity ent, ref InventoryRelayedEvent args) - { - if (args.Args.Invalid == StepInvalidReason.None) - args.Args.Invalid = StepInvalidReason.Armor; - } + if (user == null) + return; - private void OnSurgeryTargetStepChosen(Entity ent, ref CMSurgeryStepChosenBuiMessage args) - { - if (args.Session.AttachedEntity is not { } user || - GetEntity(args.Entity) is not { Valid: true } body || - !IsSurgeryValid(body, args.Part, args.Surgery, args.Step, out var surgery, out var part, out var step)) + if (GetEntity(args.Entity) is not { Valid: true } body || + GetEntity(args.Part) is not { Valid: true } targetPart || + !IsSurgeryValid(body, targetPart, args.Surgery, args.Step, out var surgery, out var part, out var step)) { return; } @@ -206,7 +177,7 @@ private void OnSurgeryTargetStepChosen(Entity ent, ref return; } - if (!CanPerformStep(user, body, part.Comp.PartType, step, true, out _, out _, out var validTools)) + if (!CanPerformStep(user.Value, body, part.Comp.PartType, step, true, out _, out _, out var validTools)) return; if (_net.IsServer && validTools?.Count > 0) @@ -216,15 +187,18 @@ private void OnSurgeryTargetStepChosen(Entity ent, ref if (TryComp(tool, out CMSurgeryToolComponent? toolComp) && toolComp.EndSound != null) { - _audio.PlayEntity(toolComp.StartSound, user, tool); + _audio.PlayEntity(toolComp.StartSound, user.Value, tool); } } } - var ev = new CMSurgeryDoAfterEvent(GetNetEntity(part), args.Surgery, args.Step); - var doAfter = new DoAfterArgs(EntityManager, user, 2, ev, body, body) + if (TryComp(body, out TransformComponent? xform)) + _rotateToFace.TryFaceCoordinates(user.Value, _transform.GetMapCoordinates(body, xform).Position); + + var ev = new CMSurgeryDoAfterEvent(args.Surgery, args.Step); + var doAfter = new DoAfterArgs(EntityManager, user.Value, 2, ev, body, part) { - BreakOnMove = true + BreakOnMove = true, }; _doAfter.TryStartDoAfter(doAfter); } @@ -263,7 +237,7 @@ private void OnSurgeryTargetStepChosen(Entity ent, ref public bool PreviousStepsComplete(EntityUid body, EntityUid part, Entity surgery, EntProtoId step) { - // TODO CM14 use index instead of the prototype id + // TODO RMC14 use index instead of the prototype id if (surgery.Comp.Requirement is { } requirement) { if (GetSingleton(requirement) is not { } requiredEnt || diff --git a/Content.Shared/_CM14/Medical/Surgery/SharedCMSurgerySystem.cs b/Content.Shared/_CM14/Medical/Surgery/SharedCMSurgerySystem.cs index 8ac1589c97e..b3864e4917b 100644 --- a/Content.Shared/_CM14/Medical/Surgery/SharedCMSurgerySystem.cs +++ b/Content.Shared/_CM14/Medical/Surgery/SharedCMSurgerySystem.cs @@ -1,23 +1,22 @@ using System.Linq; +using Content.Shared._CM14.Medical.Surgery; using Content.Shared._CM14.Medical.Surgery.Conditions; -using Content.Shared._CM14.Medical.Surgery.Effects.Complete; using Content.Shared._CM14.Medical.Surgery.Steps.Parts; -using Content.Shared._CM14.Xenos.Hugger; using Content.Shared.Body.Part; using Content.Shared.Buckle.Components; using Content.Shared.DoAfter; using Content.Shared.GameTicking; using Content.Shared.Hands.EntitySystems; -using Content.Shared.Inventory; +using Content.Shared.Interaction; using Content.Shared.Popups; -using Content.Shared.Standing; +using Content.Shared.Standing.Systems; using Robust.Shared.Audio.Systems; using Robust.Shared.Map; using Robust.Shared.Network; using Robust.Shared.Prototypes; using Robust.Shared.Timing; -namespace Content.Shared._CM14.Medical.Surgery; +namespace Content.Shared._RMC14.Medical.Surgery; public abstract partial class SharedCMSurgerySystem : EntitySystem { @@ -28,8 +27,9 @@ public abstract partial class SharedCMSurgerySystem : EntitySystem [Dependency] private readonly INetManager _net = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly IPrototypeManager _prototypes = default!; - [Dependency] private readonly StandingStateSystem _standing = default!; - [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly RotateToFaceSystem _rotateToFace = default!; + [Dependency] private readonly SharedStandingStateSystem _standing = default!; + [Dependency] private readonly SharedTransformSystem _transform = default!; private readonly Dictionary _surgeries = new(); @@ -42,11 +42,8 @@ public override void Initialize() SubscribeLocalEvent(OnTargetDoAfter); SubscribeLocalEvent(OnCloseIncisionValid); - SubscribeLocalEvent(OnLarvaValid); SubscribeLocalEvent(OnPartConditionValid); - SubscribeLocalEvent(OnRemoveLarva); - InitializeSteps(); } @@ -60,15 +57,15 @@ private void OnTargetDoAfter(Entity ent, ref CMSurgery if (args.Cancelled || args.Handled || args.Target is not { } target || - !IsSurgeryValid(target, args.Part, args.Surgery, args.Step, out var surgery, out var part, out var step) || - !PreviousStepsComplete(target, part, surgery, args.Step) || + !IsSurgeryValid(ent, target, args.Surgery, args.Step, out var surgery, out var part, out var step) || + !PreviousStepsComplete(ent, part, surgery, args.Step) || !CanPerformStep(args.User, ent, part.Comp.PartType, step, false)) { Log.Warning($"{ToPrettyString(args.User)} tried to start invalid surgery."); return; } - var ev = new CMSurgeryStepEvent(args.User, target, part, GetTools(args.User)); + var ev = new CMSurgeryStepEvent(args.User, ent, part, GetTools(args.User)); RaiseLocalEvent(step, ref ev); RefreshUI(ent); @@ -84,24 +81,13 @@ private void OnCloseIncisionValid(Entity ent, ref CMSurgeryValidEvent args) - { - if (!HasComp(args.Body)) - args.Cancelled = true; - } - private void OnPartConditionValid(Entity ent, ref CMSurgeryValidEvent args) { if (CompOrNull(args.Part)?.PartType != ent.Comp.Part) args.Cancelled = true; } - private void OnRemoveLarva(Entity ent, ref CMSurgeryCompletedEvent args) - { - RemCompDeferred(ent); - } - - protected bool IsSurgeryValid(EntityUid body, NetEntity netPart, EntProtoId surgery, EntProtoId stepId, out Entity surgeryEnt, out Entity part, out EntityUid step) + protected bool IsSurgeryValid(EntityUid body, EntityUid targetPart, EntProtoId surgery, EntProtoId stepId, out Entity surgeryEnt, out Entity part, out EntityUid step) { surgeryEnt = default; part = default; @@ -109,8 +95,7 @@ protected bool IsSurgeryValid(EntityUid body, NetEntity netPart, EntProtoId surg if (!HasComp(body) || !IsLyingDown(body) || - GetEntity(netPart) is not { Valid: true } netPartEnt || - !TryComp(netPartEnt, out BodyPartComponent? partComp) || + !TryComp(targetPart, out BodyPartComponent? partComp) || GetSingleton(surgery) is not { } surgeryEntId || !TryComp(surgeryEntId, out CMSurgeryComponent? surgeryComp) || !surgeryComp.Steps.Contains(stepId) || @@ -119,7 +104,7 @@ protected bool IsSurgeryValid(EntityUid body, NetEntity netPart, EntProtoId surg return false; } - var ev = new CMSurgeryValidEvent(body, netPartEnt); + var ev = new CMSurgeryValidEvent(body, targetPart); RaiseLocalEvent(stepEnt, ref ev); RaiseLocalEvent(surgeryEntId, ref ev); @@ -127,7 +112,7 @@ protected bool IsSurgeryValid(EntityUid body, NetEntity netPart, EntProtoId surg return false; surgeryEnt = (surgeryEntId, surgeryComp); - part = (netPartEnt, partComp); + part = (targetPart, partComp); step = stepEnt; return true; } diff --git a/Content.Shared/_CM14/Medical/Surgery/Steps/CMSurgeryCutLarvaRootsStepComponent.cs b/Content.Shared/_CM14/Medical/Surgery/Steps/CMSurgeryCutLarvaRootsStepComponent.cs deleted file mode 100644 index 7d078e2c113..00000000000 --- a/Content.Shared/_CM14/Medical/Surgery/Steps/CMSurgeryCutLarvaRootsStepComponent.cs +++ /dev/null @@ -1,7 +0,0 @@ -using Robust.Shared.GameStates; - -namespace Content.Shared._CM14.Medical.Surgery.Steps; - -[RegisterComponent, NetworkedComponent] -[Access(typeof(SharedCMSurgerySystem))] -public sealed partial class CMSurgeryCutLarvaRootsStepComponent : Component; diff --git a/Content.Shared/_CM14/Medical/Surgery/Steps/CMSurgeryStepComponent.cs b/Content.Shared/_CM14/Medical/Surgery/Steps/CMSurgeryStepComponent.cs index bff3bedcc47..9885b2d1789 100644 --- a/Content.Shared/_CM14/Medical/Surgery/Steps/CMSurgeryStepComponent.cs +++ b/Content.Shared/_CM14/Medical/Surgery/Steps/CMSurgeryStepComponent.cs @@ -1,7 +1,7 @@ using Robust.Shared.GameStates; using Robust.Shared.Prototypes; -namespace Content.Shared._CM14.Medical.Surgery.Steps; +namespace Content.Shared._RMC14.Medical.Surgery.Steps; [RegisterComponent, NetworkedComponent, AutoGenerateComponentState] [Access(typeof(SharedCMSurgerySystem))] diff --git a/Content.Shared/_CM14/Medical/Surgery/Steps/Parts/CMBleedersClampedComponent.cs b/Content.Shared/_CM14/Medical/Surgery/Steps/Parts/CMBleedersClampedComponent.cs index 3bd60bc9fd9..d73c196cedf 100644 --- a/Content.Shared/_CM14/Medical/Surgery/Steps/Parts/CMBleedersClampedComponent.cs +++ b/Content.Shared/_CM14/Medical/Surgery/Steps/Parts/CMBleedersClampedComponent.cs @@ -1,7 +1,8 @@ -using Robust.Shared.GameStates; +using Content.Shared._RMC14.Medical.Surgery; +using Robust.Shared.GameStates; namespace Content.Shared._CM14.Medical.Surgery.Steps.Parts; [RegisterComponent, NetworkedComponent] [Access(typeof(SharedCMSurgerySystem))] -public sealed partial class CMBleedersClampedComponent : Component; +public sealed partial class CMBleedersClampedComponent : Component {}; diff --git a/Content.Shared/_CM14/Medical/Surgery/Steps/Parts/CMIncisionOpenComponent.cs b/Content.Shared/_CM14/Medical/Surgery/Steps/Parts/CMIncisionOpenComponent.cs index f9c37f24102..96557a828af 100644 --- a/Content.Shared/_CM14/Medical/Surgery/Steps/Parts/CMIncisionOpenComponent.cs +++ b/Content.Shared/_CM14/Medical/Surgery/Steps/Parts/CMIncisionOpenComponent.cs @@ -1,7 +1,8 @@ -using Robust.Shared.GameStates; +using Content.Shared._RMC14.Medical.Surgery; +using Robust.Shared.GameStates; namespace Content.Shared._CM14.Medical.Surgery.Steps.Parts; [RegisterComponent, NetworkedComponent] [Access(typeof(SharedCMSurgerySystem))] -public sealed partial class CMIncisionOpenComponent : Component; +public sealed partial class CMIncisionOpenComponent : Component {}; diff --git a/Content.Shared/_CM14/Medical/Surgery/Steps/Parts/CMRibcageOpenComponent.cs b/Content.Shared/_CM14/Medical/Surgery/Steps/Parts/CMRibcageOpenComponent.cs index 95fc1085f3d..bab67357cbb 100644 --- a/Content.Shared/_CM14/Medical/Surgery/Steps/Parts/CMRibcageOpenComponent.cs +++ b/Content.Shared/_CM14/Medical/Surgery/Steps/Parts/CMRibcageOpenComponent.cs @@ -1,7 +1,8 @@ -using Robust.Shared.GameStates; +using Content.Shared._RMC14.Medical.Surgery; +using Robust.Shared.GameStates; namespace Content.Shared._CM14.Medical.Surgery.Steps.Parts; [RegisterComponent, NetworkedComponent] [Access(typeof(SharedCMSurgerySystem))] -public sealed partial class CMRibcageOpenComponent : Component; +public sealed partial class CMRibcageOpenComponent : Component {}; diff --git a/Content.Shared/_CM14/Medical/Surgery/Steps/Parts/CMRibcageSawedComponent.cs b/Content.Shared/_CM14/Medical/Surgery/Steps/Parts/CMRibcageSawedComponent.cs index 0055a2bc8cf..52565e6a71e 100644 --- a/Content.Shared/_CM14/Medical/Surgery/Steps/Parts/CMRibcageSawedComponent.cs +++ b/Content.Shared/_CM14/Medical/Surgery/Steps/Parts/CMRibcageSawedComponent.cs @@ -1,7 +1,8 @@ -using Robust.Shared.GameStates; +using Content.Shared._RMC14.Medical.Surgery; +using Robust.Shared.GameStates; namespace Content.Shared._CM14.Medical.Surgery.Steps.Parts; [RegisterComponent, NetworkedComponent] [Access(typeof(SharedCMSurgerySystem))] -public sealed partial class CMRibcageSawedComponent : Component; +public sealed partial class CMRibcageSawedComponent : Component {}; diff --git a/Content.Shared/_CM14/Medical/Surgery/Steps/Parts/CMSkinRetractedComponent.cs b/Content.Shared/_CM14/Medical/Surgery/Steps/Parts/CMSkinRetractedComponent.cs index f39dae79c24..d9042df2919 100644 --- a/Content.Shared/_CM14/Medical/Surgery/Steps/Parts/CMSkinRetractedComponent.cs +++ b/Content.Shared/_CM14/Medical/Surgery/Steps/Parts/CMSkinRetractedComponent.cs @@ -1,7 +1,8 @@ -using Robust.Shared.GameStates; +using Content.Shared._RMC14.Medical.Surgery; +using Robust.Shared.GameStates; namespace Content.Shared._CM14.Medical.Surgery.Steps.Parts; [RegisterComponent, NetworkedComponent] [Access(typeof(SharedCMSurgerySystem))] -public sealed partial class CMSkinRetractedComponent : Component; +public sealed partial class CMSkinRetractedComponent : Component {}; diff --git a/Content.Shared/_CM14/Medical/Surgery/Tools/CMBoneGelComponent.cs b/Content.Shared/_CM14/Medical/Surgery/Tools/CMBoneGelComponent.cs index c84e2574f18..c8de96534ca 100644 --- a/Content.Shared/_CM14/Medical/Surgery/Tools/CMBoneGelComponent.cs +++ b/Content.Shared/_CM14/Medical/Surgery/Tools/CMBoneGelComponent.cs @@ -1,4 +1,5 @@ -using Robust.Shared.GameStates; +using Content.Shared._RMC14.Medical.Surgery; +using Robust.Shared.GameStates; namespace Content.Shared._CM14.Medical.Surgery.Tools; diff --git a/Content.Shared/_CM14/Medical/Surgery/Tools/CMBoneSawComponent.cs b/Content.Shared/_CM14/Medical/Surgery/Tools/CMBoneSawComponent.cs index f40870930d8..7d9076513f5 100644 --- a/Content.Shared/_CM14/Medical/Surgery/Tools/CMBoneSawComponent.cs +++ b/Content.Shared/_CM14/Medical/Surgery/Tools/CMBoneSawComponent.cs @@ -1,4 +1,5 @@ -using Robust.Shared.GameStates; +using Content.Shared._RMC14.Medical.Surgery; +using Robust.Shared.GameStates; namespace Content.Shared._CM14.Medical.Surgery.Tools; diff --git a/Content.Shared/_CM14/Medical/Surgery/Tools/CMCauteryComponent.cs b/Content.Shared/_CM14/Medical/Surgery/Tools/CMCauteryComponent.cs index 9939de2ab08..5f58831ad14 100644 --- a/Content.Shared/_CM14/Medical/Surgery/Tools/CMCauteryComponent.cs +++ b/Content.Shared/_CM14/Medical/Surgery/Tools/CMCauteryComponent.cs @@ -1,4 +1,5 @@ -using Robust.Shared.GameStates; +using Content.Shared._RMC14.Medical.Surgery; +using Robust.Shared.GameStates; namespace Content.Shared._CM14.Medical.Surgery.Tools; diff --git a/Content.Shared/_CM14/Medical/Surgery/Tools/CMHemostatComponent.cs b/Content.Shared/_CM14/Medical/Surgery/Tools/CMHemostatComponent.cs index dbb13e39cfe..5022462d642 100644 --- a/Content.Shared/_CM14/Medical/Surgery/Tools/CMHemostatComponent.cs +++ b/Content.Shared/_CM14/Medical/Surgery/Tools/CMHemostatComponent.cs @@ -1,4 +1,5 @@ -using Robust.Shared.GameStates; +using Content.Shared._RMC14.Medical.Surgery; +using Robust.Shared.GameStates; namespace Content.Shared._CM14.Medical.Surgery.Tools; diff --git a/Content.Shared/_CM14/Medical/Surgery/Tools/CMRetractorComponent.cs b/Content.Shared/_CM14/Medical/Surgery/Tools/CMRetractorComponent.cs index 9d1c4306578..cb24fd38098 100644 --- a/Content.Shared/_CM14/Medical/Surgery/Tools/CMRetractorComponent.cs +++ b/Content.Shared/_CM14/Medical/Surgery/Tools/CMRetractorComponent.cs @@ -1,4 +1,5 @@ -using Robust.Shared.GameStates; +using Content.Shared._RMC14.Medical.Surgery; +using Robust.Shared.GameStates; namespace Content.Shared._CM14.Medical.Surgery.Tools; diff --git a/Content.Shared/_CM14/Medical/Surgery/Tools/CMScalpelComponent.cs b/Content.Shared/_CM14/Medical/Surgery/Tools/CMScalpelComponent.cs index 666ea69832c..9e71fdc39ce 100644 --- a/Content.Shared/_CM14/Medical/Surgery/Tools/CMScalpelComponent.cs +++ b/Content.Shared/_CM14/Medical/Surgery/Tools/CMScalpelComponent.cs @@ -1,4 +1,5 @@ -using Robust.Shared.GameStates; +using Content.Shared._RMC14.Medical.Surgery; +using Robust.Shared.GameStates; namespace Content.Shared._CM14.Medical.Surgery.Tools; diff --git a/Content.Shared/_CM14/Medical/Surgery/Tools/CMSurgeryToolComponent.cs b/Content.Shared/_CM14/Medical/Surgery/Tools/CMSurgeryToolComponent.cs index 921ed0fe9f9..6b579175ae9 100644 --- a/Content.Shared/_CM14/Medical/Surgery/Tools/CMSurgeryToolComponent.cs +++ b/Content.Shared/_CM14/Medical/Surgery/Tools/CMSurgeryToolComponent.cs @@ -1,4 +1,5 @@ -using Robust.Shared.Audio; +using Content.Shared._RMC14.Medical.Surgery; +using Robust.Shared.Audio; using Robust.Shared.GameStates; namespace Content.Shared._CM14.Medical.Surgery.Tools; diff --git a/Content.Shared/_CM14/Medical/Surgery/Tools/CMSurgicalDrillComponent.cs b/Content.Shared/_CM14/Medical/Surgery/Tools/CMSurgicalDrillComponent.cs index 066b0d0f940..4ad2c9ee2ad 100644 --- a/Content.Shared/_CM14/Medical/Surgery/Tools/CMSurgicalDrillComponent.cs +++ b/Content.Shared/_CM14/Medical/Surgery/Tools/CMSurgicalDrillComponent.cs @@ -1,4 +1,5 @@ -using Robust.Shared.GameStates; +using Content.Shared._RMC14.Medical.Surgery; +using Robust.Shared.GameStates; namespace Content.Shared._CM14.Medical.Surgery.Tools; diff --git a/Content.Shared/_CM14/Xenos/Hugger/VictimHuggedComponent.cs b/Content.Shared/_CM14/Xenos/Hugger/VictimHuggedComponent.cs deleted file mode 100644 index 896137fc4e8..00000000000 --- a/Content.Shared/_CM14/Xenos/Hugger/VictimHuggedComponent.cs +++ /dev/null @@ -1,56 +0,0 @@ -using Content.Shared._CM14.Medical.Surgery; -using Robust.Shared.Audio; -using Robust.Shared.GameStates; -using Robust.Shared.Prototypes; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; -using Robust.Shared.Utility; -using static Robust.Shared.Utility.SpriteSpecifier; - -namespace Content.Shared._CM14.Xenos.Hugger; - -[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] -[Access(typeof(SharedXenoHuggerSystem))] -public sealed partial class VictimHuggedComponent : Component -{ - [DataField, AutoNetworkedField] - public string ContainerId = "cm_hugger_container"; - - [DataField, AutoNetworkedField] - public SpriteSpecifier HuggedSprite = new Rsi(new ResPath("/Textures/_CM14/Mobs/Xenos/Hugger/hugger_mask.rsi"), "human"); - - [DataField, AutoNetworkedField] - public Enum HuggedLayer = VictimHuggedLayer.Hugged; - - [DataField, AutoNetworkedField] - public TimeSpan FallOffDelay = TimeSpan.FromSeconds(10); - - [DataField, AutoNetworkedField] - public TimeSpan FallOffAt; - - [DataField, AutoNetworkedField] - public bool FellOff; - - [DataField, AutoNetworkedField] - public TimeSpan RecoverAt; - - [DataField, AutoNetworkedField] - public bool Recovered; - - [DataField, AutoNetworkedField] - public TimeSpan BurstDelay = TimeSpan.FromMinutes(8); - - [DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), AutoNetworkedField] - public TimeSpan BurstAt; - - [DataField, AutoNetworkedField] - public float IncubationMultiplier = 1; - - [DataField, AutoNetworkedField] - public EntProtoId BurstSpawn = "CMXenoLarva"; - - [DataField, AutoNetworkedField] - public SoundSpecifier BurstSound = new SoundCollectionSpecifier("XenoChestBurst"); - - [DataField, AutoNetworkedField, Access(typeof(SharedCMSurgerySystem))] - public bool RootsCut; -} diff --git a/Content.Shared/_RMC/Medical/Surgery/CMSurgeryUI.cs b/Content.Shared/_RMC/Medical/Surgery/CMSurgeryUI.cs new file mode 100644 index 00000000000..68bef1cbc4b --- /dev/null +++ b/Content.Shared/_RMC/Medical/Surgery/CMSurgeryUI.cs @@ -0,0 +1,24 @@ +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; + +namespace Content.Shared._RMC14.Medical.Surgery; + +[Serializable, NetSerializable] +public enum CMSurgeryUIKey +{ + Key +} + +[Serializable, NetSerializable] +public sealed class CMSurgeryBuiState(Dictionary> choices) : BoundUserInterfaceState +{ + public readonly Dictionary> Choices = choices; +} + +[Serializable, NetSerializable] +public sealed class CMSurgeryStepChosenBuiMsg(NetEntity part, EntProtoId surgery, EntProtoId step) : BoundUserInterfaceMessage +{ + public readonly NetEntity Part = part; + public readonly EntProtoId Surgery = surgery; + public readonly EntProtoId Step = step; +} diff --git a/Resources/Prototypes/_CM14/Entities/Mobs/Species/base.yml b/Resources/Prototypes/_CM14/Entities/Mobs/Species/base.yml index f4d5a2be093..5e04d1761f0 100644 --- a/Resources/Prototypes/_CM14/Entities/Mobs/Species/base.yml +++ b/Resources/Prototypes/_CM14/Entities/Mobs/Species/base.yml @@ -6,7 +6,6 @@ name: Urist C.M. McHands suffix: CM14 components: - - type: Marine - type: Hunger - type: Thirst - type: Body diff --git a/Resources/Prototypes/_CM14/Entities/Surgery/cm_surgeries.yml b/Resources/Prototypes/_CM14/Entities/Surgery/cm_surgeries.yml index 01b998f6e58..5bee0d91af9 100644 --- a/Resources/Prototypes/_CM14/Entities/Surgery/cm_surgeries.yml +++ b/Resources/Prototypes/_CM14/Entities/Surgery/cm_surgeries.yml @@ -38,19 +38,3 @@ - CMSurgeryStepPriseOpenBones - type: CMSurgeryPartCondition part: Torso - -- type: entity - parent: CMSurgeryBase - id: CMSurgeryAlienEmbryoRemoval - name: Alien Embryo Removal - description: Removal of an alien embryo from the body. - components: - - type: CMSurgery - priority: -1 - requirement: CMSurgeryOpenRibcage - steps: - - CMSurgeryStepCutLarvaRoots - - CMSurgeryStepRemoveLarva - - type: CMSurgeryLarvaCondition - - type: CMSurgeryPartCondition - part: Torso diff --git a/Resources/Prototypes/_CM14/Entities/Surgery/cm_surgery_steps.yml b/Resources/Prototypes/_CM14/Entities/Surgery/cm_surgery_steps.yml index ad7fc11d0f6..f02c2c42a5b 100644 --- a/Resources/Prototypes/_CM14/Entities/Surgery/cm_surgery_steps.yml +++ b/Resources/Prototypes/_CM14/Entities/Surgery/cm_surgery_steps.yml @@ -81,37 +81,6 @@ sprite: _CM14/Objects/Medical/Surgery/retractor.rsi state: retractor -- type: entity - parent: CMSurgeryStepBase - id: CMSurgeryStepCutLarvaRoots - name: Cut larva roots - components: - - type: CMSurgeryStep - skill: 2 - tool: - - type: CMScalpel - - type: CMSurgeryCutLarvaRootsStep - - type: Sprite - sprite: _CM14/Objects/Medical/Surgery/scalpel.rsi - state: scalpel - - type: CMSurgeryOperatingTableCondition - -- type: entity - parent: CMSurgeryStepBase - id: CMSurgeryStepRemoveLarva - name: Remove larva - components: - - type: CMSurgeryStep - skill: 2 - tool: - - type: CMHemostat - bodyRemove: - - type: VictimHugged - - type: Sprite - sprite: _CM14/Objects/Medical/Surgery/hemostat.rsi - state: hemostat - - type: CMSurgeryOperatingTableCondition - - type: entity parent: CMSurgeryStepBase id: CMSurgeryStepCloseBones From b8166c6ebfe1deff3ee053fb909821f18641e99e Mon Sep 17 00:00:00 2001 From: drdth Date: Wed, 28 Aug 2024 10:13:30 +0300 Subject: [PATCH 4/7] fixes --- .../_CM14/Medical/Surgery/CMSurgerySystem.cs | 7 +++---- .../Surgery/SharedCMSurgerySystem.Steps.cs | 18 +++++------------- 2 files changed, 8 insertions(+), 17 deletions(-) diff --git a/Content.Server/_CM14/Medical/Surgery/CMSurgerySystem.cs b/Content.Server/_CM14/Medical/Surgery/CMSurgerySystem.cs index c35ce27447c..c13b7be19f7 100644 --- a/Content.Server/_CM14/Medical/Surgery/CMSurgerySystem.cs +++ b/Content.Server/_CM14/Medical/Surgery/CMSurgerySystem.cs @@ -65,7 +65,7 @@ protected override void RefreshUI(EntityUid body) } } - _ui.TrySetUiState(body, CMSurgeryUIKey.Key, new CMSurgeryBuiState(surgeries)); + _ui.SetUiState(body, CMSurgeryUIKey.Key, new CMSurgeryBuiState(surgeries)); } private void OnToolAfterInteract(Entity ent, ref AfterInteractEvent args) @@ -78,8 +78,7 @@ private void OnToolAfterInteract(Entity ent, ref AfterIn return; } - if (!TryComp(args.User, out SkillsComponent? skills) || - skills.Surgery < 1) + if (!TryComp(args.User, out SkillsComponent? skills) || skills.Surgery < 1) { _popup.PopupEntity("You don't know how to perform surgery!", args.User, args.User); return; @@ -92,7 +91,7 @@ private void OnToolAfterInteract(Entity ent, ref AfterIn } args.Handled = true; - _ui.TryOpen(args.Target.Value, CMSurgeryUIKey.Key, actor.PlayerSession); + _ui.OpenUi(args.Target.Value, CMSurgeryUIKey.Key, actor.PlayerSession); RefreshUI(args.Target.Value); } diff --git a/Content.Shared/_CM14/Medical/Surgery/SharedCMSurgerySystem.Steps.cs b/Content.Shared/_CM14/Medical/Surgery/SharedCMSurgerySystem.Steps.cs index f1f8d4ab801..7d7a47c399f 100644 --- a/Content.Shared/_CM14/Medical/Surgery/SharedCMSurgerySystem.Steps.cs +++ b/Content.Shared/_CM14/Medical/Surgery/SharedCMSurgerySystem.Steps.cs @@ -159,11 +159,6 @@ private void OnToolCanPerform(Entity ent, ref CMSurgeryC private void OnSurgeryTargetStepChosen(Entity ent, ref CMSurgeryStepChosenBuiMsg args) { - var user = args.Session.AttachedEntity; - - if (user == null) - return; - if (GetEntity(args.Entity) is not { Valid: true } body || GetEntity(args.Part) is not { Valid: true } targetPart || !IsSurgeryValid(body, targetPart, args.Surgery, args.Step, out var surgery, out var part, out var step)) @@ -171,13 +166,10 @@ private void OnSurgeryTargetStepChosen(Entity ent, ref return; } - if (!PreviousStepsComplete(body, part, surgery, args.Step) || - IsStepComplete(body, part, args.Step)) - { + if (!PreviousStepsComplete(body, part, surgery, args.Step) || IsStepComplete(body, part, args.Step)) return; - } - if (!CanPerformStep(user.Value, body, part.Comp.PartType, step, true, out _, out _, out var validTools)) + if (!CanPerformStep(args.Actor, body, part.Comp.PartType, step, true, out _, out _, out var validTools)) return; if (_net.IsServer && validTools?.Count > 0) @@ -187,16 +179,16 @@ private void OnSurgeryTargetStepChosen(Entity ent, ref if (TryComp(tool, out CMSurgeryToolComponent? toolComp) && toolComp.EndSound != null) { - _audio.PlayEntity(toolComp.StartSound, user.Value, tool); + _audio.PlayEntity(toolComp.StartSound, args.Actor, tool); } } } if (TryComp(body, out TransformComponent? xform)) - _rotateToFace.TryFaceCoordinates(user.Value, _transform.GetMapCoordinates(body, xform).Position); + _rotateToFace.TryFaceCoordinates(args.Actor, _transform.GetMapCoordinates(body, xform).Position); var ev = new CMSurgeryDoAfterEvent(args.Surgery, args.Step); - var doAfter = new DoAfterArgs(EntityManager, user.Value, 2, ev, body, part) + var doAfter = new DoAfterArgs(EntityManager, args.Actor, 2, ev, body, part) { BreakOnMove = true, }; From 8c0cdc3336a022e39b6e3c396eecdcb08f1e0025 Mon Sep 17 00:00:00 2001 From: drdth Date: Wed, 28 Aug 2024 10:24:57 +0300 Subject: [PATCH 5/7] fix no spawn --- Resources/Prototypes/Entities/Objects/Devices/flatpack.yml | 3 +-- .../Prototypes/Entities/Structures/Machines/flatpacker.yml | 3 +-- Resources/Prototypes/_CM14/Entities/Surgery/cm_surgeries.yml | 3 +-- .../Prototypes/_CM14/Entities/Surgery/cm_surgery_steps.yml | 3 +-- 4 files changed, 4 insertions(+), 8 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Devices/flatpack.yml b/Resources/Prototypes/Entities/Objects/Devices/flatpack.yml index 6aa766bd588..0639b248cb9 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/flatpack.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/flatpack.yml @@ -3,8 +3,7 @@ id: BaseFlatpack name: base flatpack description: A flatpack used for constructing something. - categories: - - hideSpawnMenu + noSpawn: true components: - type: Item size: Large diff --git a/Resources/Prototypes/Entities/Structures/Machines/flatpacker.yml b/Resources/Prototypes/Entities/Structures/Machines/flatpacker.yml index b4f05cf68a7..37fdad46ba7 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/flatpacker.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/flatpacker.yml @@ -83,8 +83,7 @@ - type: entity id: FlatpackerNoBoardEffect - categories: - - hideSpawnMenu + noSpawn: true components: - type: Sprite sprite: Structures/Machines/autolathe.rsi diff --git a/Resources/Prototypes/_CM14/Entities/Surgery/cm_surgeries.yml b/Resources/Prototypes/_CM14/Entities/Surgery/cm_surgeries.yml index 5bee0d91af9..c360b34f4d4 100644 --- a/Resources/Prototypes/_CM14/Entities/Surgery/cm_surgeries.yml +++ b/Resources/Prototypes/_CM14/Entities/Surgery/cm_surgeries.yml @@ -1,7 +1,6 @@ - type: entity id: CMSurgeryBase - categories: - - hideSpawnMenu + noSpawn: true - type: entity parent: CMSurgeryBase diff --git a/Resources/Prototypes/_CM14/Entities/Surgery/cm_surgery_steps.yml b/Resources/Prototypes/_CM14/Entities/Surgery/cm_surgery_steps.yml index f02c2c42a5b..8a0a9415901 100644 --- a/Resources/Prototypes/_CM14/Entities/Surgery/cm_surgery_steps.yml +++ b/Resources/Prototypes/_CM14/Entities/Surgery/cm_surgery_steps.yml @@ -1,7 +1,6 @@ - type: entity id: CMSurgeryStepBase - categories: - - hideSpawnMenu + noSpawn: true components: - type: CMSurgeryStep From cb977819cb320c740be4d37a0025048ab61912ea Mon Sep 17 00:00:00 2001 From: drdth Date: Thu, 29 Aug 2024 21:01:29 +0300 Subject: [PATCH 6/7] sprites --- .../Medical/Surgery/bone_gel.rsi/bone-gel.png | Bin 0 -> 432 bytes .../Surgery/bone_gel.rsi/bone-gel_0.png | Bin 0 -> 391 bytes .../Surgery/bone_gel.rsi/bone-gel_25.png | Bin 0 -> 444 bytes .../Surgery/bone_gel.rsi/bone-gel_50.png | Bin 0 -> 456 bytes .../Surgery/bone_gel.rsi/bone-gel_75.png | Bin 0 -> 444 bytes .../Medical/Surgery/bone_gel.rsi/meta.json | 29 +++++++ .../bone_gel.rsi/predator_bone-gel.png | Bin 0 -> 585 bytes .../Surgery/bonesetter.rsi/bonesetter.png | Bin 0 -> 581 bytes .../Medical/Surgery/bonesetter.rsi/meta.json | 17 ++++ .../bonesetter.rsi/predator_bonesetter.png | Bin 0 -> 489 bytes .../Medical/Surgery/cautery.rsi/cautery.png | Bin 0 -> 374 bytes .../Surgery/cautery.rsi/cautery_on.png | Bin 0 -> 562 bytes .../Medical/Surgery/cautery.rsi/meta.json | 28 +++++++ .../Surgery/cautery.rsi/predator_cautery.png | Bin 0 -> 585 bytes .../Medical/Surgery/drill.rsi/drill.png | Bin 0 -> 528 bytes .../Medical/Surgery/drill.rsi/drill_on.png | Bin 0 -> 628 bytes .../Medical/Surgery/drill.rsi/meta.json | 35 +++++++++ .../Surgery/drill.rsi/predator_drill.png | Bin 0 -> 504 bytes .../Surgery/drill.rsi/predator_drill_on.png | Bin 0 -> 591 bytes .../Medical/Surgery/healing.rsi/drapes.png | Bin 0 -> 236 bytes .../Medical/Surgery/healing.rsi/fixovein.png | Bin 0 -> 389 bytes .../Medical/Surgery/healing.rsi/meta.json | 23 ++++++ .../Surgery/healing.rsi/predator_fixovein.png | Bin 0 -> 586 bytes .../Surgery/healing.rsi/stabilizer_gel.png | Bin 0 -> 436 bytes .../Surgery/healing_gun.rsi/healing_gel.png | Bin 0 -> 218 bytes .../Surgery/healing_gun.rsi/healing_gun.png | Bin 0 -> 618 bytes .../healing_gun.rsi/healing_gun_empty.png | Bin 0 -> 589 bytes .../healing_gun.rsi/healing_gun_on.png | Bin 0 -> 1212 bytes .../Medical/Surgery/healing_gun.rsi/meta.json | 36 +++++++++ .../Medical/Surgery/hemostat.rsi/hemostat.png | Bin 0 -> 413 bytes .../Medical/Surgery/hemostat.rsi/meta.json | 17 ++++ .../hemostat.rsi/predator_hemostat.png | Bin 0 -> 457 bytes .../Medical/Surgery/pump.rsi/meta.json | 14 ++++ .../Objects/Medical/Surgery/pump.rsi/pump.png | Bin 0 -> 575 bytes .../Medical/Surgery/retractor.rsi/meta.json | 17 ++++ .../retractor.rsi/predator_retractor.png | Bin 0 -> 538 bytes .../Surgery/retractor.rsi/retractor.png | Bin 0 -> 525 bytes .../Objects/Medical/Surgery/saw.rsi/meta.json | 27 +++++++ .../Surgery/saw.rsi/predator_bonesaw.png | Bin 0 -> 389 bytes .../Objects/Medical/Surgery/saw.rsi/saw.png | Bin 0 -> 464 bytes .../Medical/Surgery/saw.rsi/saw_on.png | Bin 0 -> 734 bytes .../Medical/Surgery/scalpel.rsi/meta.json | 73 ++++++++++++++++++ .../Surgery/scalpel.rsi/pict_system.png | Bin 0 -> 571 bytes .../Surgery/scalpel.rsi/predator_scalpel.png | Bin 0 -> 406 bytes .../Medical/Surgery/scalpel.rsi/scalpel.png | Bin 0 -> 260 bytes .../Surgery/scalpel.rsi/scalpel_laser.png | Bin 0 -> 349 bytes .../Surgery/scalpel.rsi/scalpel_laser_2.png | Bin 0 -> 412 bytes .../scalpel.rsi/scalpel_laser_2_on.png | Bin 0 -> 654 bytes .../Surgery/scalpel.rsi/scalpel_laser_3.png | Bin 0 -> 422 bytes .../scalpel.rsi/scalpel_laser_3_on.png | Bin 0 -> 712 bytes .../Surgery/scalpel.rsi/scalpel_laser_on.png | Bin 0 -> 463 bytes .../Surgery/scalpel.rsi/scalpel_manager.png | Bin 0 -> 435 bytes .../scalpel.rsi/scalpel_manager_on.png | Bin 0 -> 633 bytes .../Medical/Surgery/wound_clamp.rsi/meta.json | 17 ++++ .../Surgery/wound_clamp.rsi/wound_clamp.png | Bin 0 -> 627 bytes .../wound_clamp.rsi/wound_clamp_on.png | Bin 0 -> 660 bytes 56 files changed, 333 insertions(+) create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/bone_gel.rsi/bone-gel.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/bone_gel.rsi/bone-gel_0.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/bone_gel.rsi/bone-gel_25.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/bone_gel.rsi/bone-gel_50.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/bone_gel.rsi/bone-gel_75.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/bone_gel.rsi/meta.json create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/bone_gel.rsi/predator_bone-gel.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/bonesetter.rsi/bonesetter.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/bonesetter.rsi/meta.json create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/bonesetter.rsi/predator_bonesetter.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/cautery.rsi/cautery.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/cautery.rsi/cautery_on.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/cautery.rsi/meta.json create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/cautery.rsi/predator_cautery.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/drill.rsi/drill.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/drill.rsi/drill_on.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/drill.rsi/meta.json create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/drill.rsi/predator_drill.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/drill.rsi/predator_drill_on.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/healing.rsi/drapes.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/healing.rsi/fixovein.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/healing.rsi/meta.json create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/healing.rsi/predator_fixovein.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/healing.rsi/stabilizer_gel.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/healing_gun.rsi/healing_gel.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/healing_gun.rsi/healing_gun.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/healing_gun.rsi/healing_gun_empty.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/healing_gun.rsi/healing_gun_on.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/healing_gun.rsi/meta.json create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/hemostat.rsi/hemostat.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/hemostat.rsi/meta.json create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/hemostat.rsi/predator_hemostat.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/pump.rsi/meta.json create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/pump.rsi/pump.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/retractor.rsi/meta.json create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/retractor.rsi/predator_retractor.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/retractor.rsi/retractor.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/saw.rsi/meta.json create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/saw.rsi/predator_bonesaw.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/saw.rsi/saw.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/saw.rsi/saw_on.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/scalpel.rsi/meta.json create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/scalpel.rsi/pict_system.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/scalpel.rsi/predator_scalpel.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/scalpel.rsi/scalpel.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/scalpel.rsi/scalpel_laser.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/scalpel.rsi/scalpel_laser_2.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/scalpel.rsi/scalpel_laser_2_on.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/scalpel.rsi/scalpel_laser_3.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/scalpel.rsi/scalpel_laser_3_on.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/scalpel.rsi/scalpel_laser_on.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/scalpel.rsi/scalpel_manager.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/scalpel.rsi/scalpel_manager_on.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/wound_clamp.rsi/meta.json create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/wound_clamp.rsi/wound_clamp.png create mode 100644 Resources/Textures/_CM14/Objects/Medical/Surgery/wound_clamp.rsi/wound_clamp_on.png diff --git a/Resources/Textures/_CM14/Objects/Medical/Surgery/bone_gel.rsi/bone-gel.png b/Resources/Textures/_CM14/Objects/Medical/Surgery/bone_gel.rsi/bone-gel.png new file mode 100644 index 0000000000000000000000000000000000000000..f66bf6cdf9eb1aea9b77e8819b3f0cd71609ab3b GIT binary patch literal 432 zcmV;h0Z;ykP)VQ!P3~dK!$;$qRv9CRT%t%)UfGl_SvPTGP zJNTa*M^F?3_wU?ixOM9hgPNKg*=CUJfBX2M(_jE z8DNgtuzn^&VR`F+VjV$p2%I>3nZd$XmqF23i{avO@QL{kgQy%2hTNHrrx{HAO@Yz!h2bGk9Zej7ZXpPO zECsQ*Pi|-M%&laQH`FA_9I_n%vKSqJ9FZ|^5q%s01IWGy0lI|%y5+DCdHsm^_$S)| zu=q!}oE$)w13(so0Hv0b?EsL)Fh_s@EJQ$nE@=SdYh>RehXPI0fG!sggW_KnaA5=T zDK^XWf%1Gnb$4mu02oNnH^eDN)4Bju#cJJp^nd5JgLu`E(lR1B1judsQOyC=2BQub abpQay3zG>w#k|=70000VQ!P3~dK!$;$qRv9CRT%t%)UfGl_SvPTGP zJNTa*M^F?3_wU?ixOM9hgPNKg*=CUJfBX2M(_jE z8DNgtuzn^&VR`F+VjV$p2%I>3nZd$XmqF23i{avVQ!P3~dK!$;$qRv9CRT%t%)UfGl_SvPTGP zJNTa*M^F?3_wU?ixOM9hgPNKg*=CUJfBX2M(_jE z8DNgtuzn^&VR`F+VjV$p2%I>3nZd$XmqF23i{avY_w?p_B&oewce;uwy-cXa_;kPfeaR3aM_?vmXquN zT`nF5#lI}TI^YY~r`Rmh2g>sS)!n6q17ILQ-w>x9O>+ULiq*RH=>N`b2l1*SrDa5N m2$0+MqnZP#4MrU>>Hq-vnwwVQ!P3~dK!$;$qRv9CRT%t%)UfGl_SvPTGP zJNTa*M^F?3_wU?ixOM9hgPNKg*=CUJfBX2M(_jE z8DNgtuzn^&VR`F+VjV$p2%I>3nZd$XmqF23i{avsS)!n6q17ILQ-w>x9P3r4&qfuO3R4k5FoehM>Pjf8;m+&)Bykn1(&uM)eu4e0000VQ!P3~dK!$;$qRv9CRT%t%)UfGl_SvPTGP zJNTa*M^F?3_wU?ixOM9hgPNKg*=CUJfBX2M(_jE z8DNgtuzn^&VR`F+VjV$p2%I>3nZd$XmqF23i{av+3c>X$AOx{ov%-%k^ zoxwA=62kxXg*Fa=0Z};~AU1{bAD)NMAV*}(TSSss6xRi3HlBw29t1!kKsN^_?HD(2Ydnh6q{xGKzTl(y1TS+01PDP8{(9sXfnX&I3m m0_3*+sOA7_gHZ>JIsgD|ZIr)=vS7Rb00003B@lXJo8&@^5KR&K1&oaTfJKE<(2`R(pR4EccK_e&tri~$@AVwt=XcI~ z-nUNrXSD&^0BrzA09*3rf>nGwuygt=0HM%`97zt*#Y(|)k;&zm?7dVmjaRD=0oMR9 zUtLerSF}dOiF4`>cIk3H-)j^v%qq_v5q8ueGAzgK#nJgQ{#Dzs;fS}Upskrhk z=6ad|{0Mu8MbUl?l{SXw!=q!h3z`CK<>(&3R-lD2;cB%IBAj+6S_WWY0L_HKgV1uP z)w=>{PO)K(PlcPx9RZ-dyP19UI6`*SxvAb30D60UQ9gN^PqLD-=Sz!8)d&L$nQxE> z0KSSLt{(f$7YpKe*B(jV03g2oguznp1%78pJwMA0RXz)cBmb&bj^+0Kr#QmuPmzN6C{j3K40lAuIt(rB^CE7R5QTx#kFj zA;4C6T`Rwo$ur@ht8`Yppwz{&a)<_iNw-_`Py56@> zPL#tC06&f(=R<=O^iPQ?$Q7Pkl+NlCp$eh_Kv@10=;&~lU^_A&= zM}`i_5D3D0|M=7b0l(gq3`wzg%PyFXp&11FVqtMkKwwh1Us{#r9x#JIaIbe<>242$=f%uVg{>U7uv zv3(ozLSi?#5mAbR{e%F6LtHA1s2z}|uVWpAYTFTRFc3Qg8G#r|EEIT{1WWM?5y*Ha#_s5z7{6BzN zZ6%ZTaQHk^el`VQvV)_xZ$G`fx_+;hHCrvWy1eB3&Q7|S79tuTTbmbzl$-@(b2$)A0rvNH-TB4kkK>*8 zp&h`@?cG@8V*@m{w~83}&UVI4gOC+sGj}HY{CF=iLi)9e1|ZldJhUl1<-KNdamNHe z6z2Wh{6gUZ3R2S!K$M#I69Fh!Jf2hRR{;?9$KBJBy_O=xbG^Rdx4;YlvEL}%YbnP7 z0GJ2opLhvvH=8X#QVW@E?K18he*NGAIa zs77iB5RIUCFzuu?QY_%&3elaBi;yK!1;WI{mvozaM0t9@C6)iHw9K(%(I-MnYS5_bOkab!622qSnG{Ut2Gf!JREobLg2vCi;1f}c zlb5Id3S63zi-$WA$HmQ}LRKEQSD^vNOj8Aq&&IK_n498s=z?3NWfkSK5 zpS&;KI<1lQ<(GaIg|nx=UeKW5$5|6GYdT7TH@ahJ43$nidit~6Bp7`{m|t6gH{ ze#OaWlgiW9tQRo*JM}GFvw-g9O?xVuWH~thOwDUQtQhy+t|4*r?Bgo`PMv4IrTFAW z<+1*e-yqL0Imw>k4Li@9^K}jD1m3W3*&_M)_a49c*MA#sFH`sW s$+hhUe}m{od4_MyO3>hcYSW-EyL82}M@G);fr)^@)78&qol`;+0O@q_`2YX_ literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CM14/Objects/Medical/Surgery/cautery.rsi/meta.json b/Resources/Textures/_CM14/Objects/Medical/Surgery/cautery.rsi/meta.json new file mode 100644 index 00000000000..d9ca4359f9f --- /dev/null +++ b/Resources/Textures/_CM14/Objects/Medical/Surgery/cautery.rsi/meta.json @@ -0,0 +1,28 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from cmss13 at https://github.com/cmss13-devs/cmss13/blob/7917d83bac9cddd14c0ca0b457256b2683cc047f/icons/obj/items/surgery_tools.dmi", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "cautery" + }, + { + "name": "cautery_on", + "delays": [ + [ + 0.3, + 0.2, + 0.3, + 0.2 + ] + ] + }, + { + "name": "predator_cautery" + } + ] +} diff --git a/Resources/Textures/_CM14/Objects/Medical/Surgery/cautery.rsi/predator_cautery.png b/Resources/Textures/_CM14/Objects/Medical/Surgery/cautery.rsi/predator_cautery.png new file mode 100644 index 0000000000000000000000000000000000000000..9375b9ad03ac9d291d1521e88e81badaceabcbb0 GIT binary patch literal 585 zcmV-P0=E5$P)qHNLv7(-i*84DesHQ;gMFxdG#~@CIN(Xu3gp6;%tofK-h(~^UKIQ;?6OYudl7b z{lZq9t|4Me_fk2$V#b@0Jpth1%yuZp9Fp%~uPh0PL`@w47UBxxI>OC_!R=7W1NUPd zdz7c7nJZlbm=FlV%5otRYbeJW6?anZ48Q}GwGvjd9=yH2XfHr)tWE^bsuY{`APi}H zu9FA+qN71rrYU~hg{wFvq40|lV@)Wy9b;5IGybUpP!Mkjs~z%zZ~zF`h139$14udu zt)HA-kZeERn|dDC(nXv+fR_#mOzTyx&*0IyzrOI_jzUnFx_%AAVp<2KP>wz!7=M7; zN+J(Xskw$RuPVPIQU|b=o_U}b;sk&!?^JBsRmZLYT6`fT+LIW-_E6W)_P><_{}SL6 XQHoc>{iH>&00000NkvXXu0mjfiJ%4l literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CM14/Objects/Medical/Surgery/drill.rsi/drill.png b/Resources/Textures/_CM14/Objects/Medical/Surgery/drill.rsi/drill.png new file mode 100644 index 0000000000000000000000000000000000000000..7fb323dce9661b6d34014109afeec8243983b440 GIT binary patch literal 528 zcmV+r0`L8aP)VQ!Pj5=WOI3U2;`ag{Q?&D_$A%0$lTeluD zC~$K#Jox&RK}}7LpkW|=AaLl+B}S4Q0J1zYCy7B(RuU}O(lwnSIx>J^>GBN>RZ1)j zZTJ2#)RbisG_0(=l>uaq(3E-qL5?Td0Wfg?@pB9Xx6c55CB%tU4ju3b3xPc$B(Khp zAC|;mXsFL{@7@Cj6B8qbckkXYsH!S6?A*DRK}ku0;r#iF3=>-#APxYz_Vnq~aDzU* zeFx@)=z~8Qf%JD2d0gPZy@w2|)@@?AbLkAjiQT&is=xO5F(W(#mMz|jA_)t^U(hr_ zY>>jt0U1t=dKO%YwPa=gn^+ov(*ihHB~=*Co;nN;36LcqJs>qvvEFb#0~r8kHiR1Z z9~2FsxCH?a8x#`AmW2iRVT2x48~_6*=DJ`@K#8z0uK_Fu@;O)z7(xMo>16w!Cjb(w0AzXpqy~7U z1OuR~Mi&Rb05KI0%^a|O2jNPDrViM(?I?yKTIB!?2hh?Yq8u;~VAKJl4gdhtLeC1c Sek(9cZ( literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CM14/Objects/Medical/Surgery/drill.rsi/drill_on.png b/Resources/Textures/_CM14/Objects/Medical/Surgery/drill.rsi/drill_on.png new file mode 100644 index 0000000000000000000000000000000000000000..9d609d0033db0b44b619d0576270988fb4942e6d GIT binary patch literal 628 zcmV-)0*n2LP)G$mPDSSSrjAtf6r zk%dvRnB=2uM9NM|C<{sX&H^c!hgew5FosE1ULlFpm~*+WF>hY;e7wiv{5S8uch5WL zch0@HTgME4ECL_^0{A}w_R^97A4_)+ASA?r+kFM8v9aKLe1xp52~(bW&=M;Mz3AiQP(t_%N-!oVX2 zvl3z=&V?&JQD8|3DcR6o(*y+tdEoW>z-B81Ns=HlGac5}HoG24&RXKG5l~Cz-7R-Md27L z5gM$fszOn{Ujg8<73H!ZxCuMjoa`HB&gOy@vR5{LJ9|w4;R+2F9K%ng3c%MlH2a@q z`egv46cNCv>{S7blmdXCfA`rnyAuorz~IB9PWe*e!lPyg0GF1FM>l|#)##Uqt^n)H zy9y({PJjYH&p?_0{z3#m00ck)1V8}PAJDBoFgZBFdH}pfP*zq79?v-lf&ij;$a(~g z)s_172he$_dOMZ&)E|%mB8mC~YNGytApq1Lp#A{$2f{`D0RkWZJ@p1rA)ViyX-l;L O0000p}`~?NE5CX9f zYq3Zmkk&#F+aTDa7r{S}K!RuyKjL9yEy8(ozfW8?C&N=fG1~Q7w96^5c&12VAc0Mt!VXw89f)w{xVBycp>2_)%m uIO!SP{$QjA*d^5zG)6!mp^T}2p8o(+uexZ7Xc-p(0000*D&dwH}8!k?`%|NeDB;d_uV`9L}MBgI|0=8UbKA@IP>nvfzOr1Pyw#|Yytv^95_76_bcCVzVPe%$6}0Hky$@W zs+|H99$io(AUdFc@luQ=JS&&z_U?Z87^I%>REkYf1zQ2UYyj@)K}7Bg+TVz?B}D2dqB;SbxC!13_T@0qYM~f57?! z)8h}|c#fK$l?ibD0i&ZC#~&~{oN|&Z6a_|My2o=4j4HtK2aJv9Tz|mmc+M#<6U_n9 duB|_yf**ZccZt5#!vX*R002ovPDHLkV1i)j184vM literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CM14/Objects/Medical/Surgery/healing.rsi/drapes.png b/Resources/Textures/_CM14/Objects/Medical/Surgery/healing.rsi/drapes.png new file mode 100644 index 0000000000000000000000000000000000000000..f1d7a14fcdc09ed8519b040fe6a7723931458b18 GIT binary patch literal 236 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5C^*m4 z#WAE}&f6>c+$|0QtRDn@iX3^QpIDgumdr`JU3-i9bS>NLAN+TTxw}sww3!ryQ+GUtkPr&--hbDM;L?{LB>7ePtpJY literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CM14/Objects/Medical/Surgery/healing.rsi/fixovein.png b/Resources/Textures/_CM14/Objects/Medical/Surgery/healing.rsi/fixovein.png new file mode 100644 index 0000000000000000000000000000000000000000..60f4424b12aec9fdc3a1d1d4e50b856fbcb37f2b GIT binary patch literal 389 zcmV;00eb$4P)VQ!Pj5=U=IAF7j%YPW#ch4S1x;danR~Kxt zstGT`F$@sL5bF?<9T4Db{r}djM+`{<0u1Wn;tb_CZ!*kVdIl~J69+l2Ljv&ba zAj^?0x%u)X!`okM45eaR3`fNHz-s1!97lqgBsl=&b9XO$28LG`!Isba@BwJK0GMU~ zVl_26usULVPL=~;KrAPQp`&FAm<_TV6bexRmT*Us0!VVewa1Sc8MYn#fB(*Xa7Y*$ z>4L@2pS#Qe5(8NdRzoWXz<|xGPr$f7$gp$ULAV$wUECtWEV3K`N`OgN#6anQE)D=? zy-sy?FdI|`+&=ReEJh9>%K@O^hFf?OAvTX*AuzI|0F=$NWM%)OM*&QZ<_;j&BC0xo jnqbrcqYfB#z^DTNA{vB&6OjE*00000NkvXXu0mjfRM3(% literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CM14/Objects/Medical/Surgery/healing.rsi/meta.json b/Resources/Textures/_CM14/Objects/Medical/Surgery/healing.rsi/meta.json new file mode 100644 index 00000000000..0931de34a5f --- /dev/null +++ b/Resources/Textures/_CM14/Objects/Medical/Surgery/healing.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from cmss13 at https://github.com/cmss13-devs/cmss13/blob/7917d83bac9cddd14c0ca0b457256b2683cc047f/icons/obj/items/surgery_tools.dmi", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "fixovein" + }, + { + "name": "predator_fixovein" + }, + { + "name": "drapes" + }, + { + "name": "stabilizer_gel" + } + ] +} diff --git a/Resources/Textures/_CM14/Objects/Medical/Surgery/healing.rsi/predator_fixovein.png b/Resources/Textures/_CM14/Objects/Medical/Surgery/healing.rsi/predator_fixovein.png new file mode 100644 index 0000000000000000000000000000000000000000..e6d0bcb9fe237897b74c2d873d86a29b58722e35 GIT binary patch literal 586 zcmV-Q0=4~#P);+toi;Ew{VJ~0aCCNb~M*+z4_b*>CXd4=U`F|ML8FX~C8SHE<8J<6T$}p+B z|34{?AlU)>x>^heULr!^@y#1x8sq?S07(wmy?rl3dw&l@esLLGEIK%xA<)m0fm}e6 z17y`T806$+86G`)%y8()ak#H<-+RO$DJ4yN2Y`aRqN*OwzjEa&m{wJiV;~ohT~LkS?s0Rpm|C=P*v;MgSkH~^Fe zkR1X7;v#wslmN2Q0CEV3i%?`g>1hBx{y}1NON5}HNA^865+l(L09g!j04V>%3Zesz z5XaCw5yDzM0t~YMZsXWW;kZQnqm9ewO~v$2cQFxBcLo`{eTdEeC;vG z%`=i6Adn=$@L}Eu25JG49U!hQ&cJ{x%I7isCp8pEb^vl3098hxZ=XR(CXwz4(i$W{ zgJrcK2@&cXxE#z;f35#A$O029v5p`)1aKN$&H!$nGXo*bLI58iCkIf~0px;F2Mo9a Y0A`c5=03521^@s607*qoM6N<$f|ttZ4FCWD literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CM14/Objects/Medical/Surgery/healing.rsi/stabilizer_gel.png b/Resources/Textures/_CM14/Objects/Medical/Surgery/healing.rsi/stabilizer_gel.png new file mode 100644 index 0000000000000000000000000000000000000000..06890da4898a92213d8e9f2b64d3291e60f152c5 GIT binary patch literal 436 zcmV;l0ZaagP)mX6uiOONe~B%u8M>IgF1;Q z2u{upqJxtPPR=4!hc5nv4(ePZR@##5(CJRw?S$AblKn32DU^ImhCrU@{qltj;h)P0 z7y%<-1O`W7W_C{SMh(1CxBgs!;Q6U(tZePz^k7evA8sQ{^em9u&k251lW=z;FV}7- zMAT07BtY=Ycm`MpC71B0$2*LSj?s1`32gy_XBQVxy}E|q^noQ{cVkV$X%^aFpOMbd z5>W8=`-_CT^Dev-4`TTn{NfiL_=(S`S=`m!3Iq~Yciy(X#^!b zcq{>R@03=;Zy2nS1y*5N;MfA*p=Wi|3TnNA>!#KcprQeD;R@@cKk(QBN&7na=6tFnyj8~@QQKI)aijA7|hnP9kggZD%$LOca1i4JIDY1 zAEvYazW4d%W1w~rIIy1~^_2hB*fN3c8HH|olU!77)EVU3cOB1Ak9%@#=FU8iJLfqU zyj8zz#QDX2*$VC(N4N~u+%CSAwfWX3(}r${Aq)qeH*imjk$ZpQQcE02$kWx&Wt~$( F696!;PHX@G literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CM14/Objects/Medical/Surgery/healing_gun.rsi/healing_gun.png b/Resources/Textures/_CM14/Objects/Medical/Surgery/healing_gun.rsi/healing_gun.png new file mode 100644 index 0000000000000000000000000000000000000000..9ed93296577051490a273e1b16971623070140a8 GIT binary patch literal 618 zcmV-w0+s!VP)*?t6A9Du#gp{EC@+H%H$&p#WY#icw!S%C+g!e>XcY}z<0r2;Ws zcNt~2Wt{wJ?>jUcAusV~Ne=yD`ncCMidj~wyvELd+1VJ%iXa@q88`+*d zKDkOf9)W`(bq$TmLseo=GAjU2H-e)*2-03&3IIaIjMfMQ$6y`r@5pWk{I0LyZmS4Gse<==t1Mu$v@4<~U!n!Tj)Bpeg07*qoM6N<$ Ef=-nVHUIzs literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CM14/Objects/Medical/Surgery/healing_gun.rsi/healing_gun_empty.png b/Resources/Textures/_CM14/Objects/Medical/Surgery/healing_gun.rsi/healing_gun_empty.png new file mode 100644 index 0000000000000000000000000000000000000000..a92166fe24fadd8e3779cf1ba16ef2e87b8c2e59 GIT binary patch literal 589 zcmV-T0ZC7h8IcDTPQ28IF@5Z|mvn>aY)msn#DuLeNbe>=P? zRR|M-#;0d#W2utr-d0S3khD@|RD)7~Z%_U|nQy8R``h9q3pAe}?@3kOk;vrwQjqo? zon7RBaz`Tvh2Z$j<+L7c17p|7M^znGIKsZN86wB( za=RsimRibQU2Z8MlHq^#fGA@~iqhdYkkFIMiaSdUk|GdnaClT3RA=RSMGL^)jpR5U zB$@Jb13;i+mSTzIXsny73+kO(AZiBS;qv7Oy9Q9gFa{v|LvU764p*sH^ zMp^)J%(yLx@*}G0Cl?Y6f1?pI{-EXfbHcePAlJawTl6X6`b3YP literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CM14/Objects/Medical/Surgery/healing_gun.rsi/healing_gun_on.png b/Resources/Textures/_CM14/Objects/Medical/Surgery/healing_gun.rsi/healing_gun_on.png new file mode 100644 index 0000000000000000000000000000000000000000..3baa0776c0a5ecccfe44152d61549d039ba71b7c GIT binary patch literal 1212 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGooCO|{#S9F5M?jcysy3fA0|QH* zr;B4q#hkZuZ8Jn1WsW|7!X+rQw_yo~r-+`yA~%jMjjp7XOIyvFnmVSg=$*ROj4Mnt zN2OP6l2%i~!WA7q7?1TQ2!43H!Q=5!6(^2EyYlx~9xJ}K`^fED#ou)WIp6d)zrVZp z?%ca~{`+^i1q3prh%iX9I=C@TKw?IgFzo&=+rd`;#^|yByqU}U~$DSwsB>VBLs+-+3zwdi1c zxn{C~%fa64@H5MFo6DMOFN+56jW_h?J2yMXUo&HYRfuVA+5)?Omu_C3nE$B$%g3lU ziibXX%3ZqFFaPYtwxUJtX}?@^GM?Z2Tc+w~`supkoLP4*T%uibw7yKV8ZnjZlM z4JSA5PAj;&?$?i7v%Bv|vv^-U-hTCr^Q~V${uVv20hw^LbNl+-Rr`_Sbx5&*8Vgn*XMY~MW5@}|E1(T zYoBSb{`E8I^Ns%(_w(l$DQ=PvNxZ^hyJT(u^JQV>x2`+M&3dWscSztUOY>pDrn?{S z{VRGE&A8}>z>Phn)u)AL|5uAv)c2dwJBI2O>o;>O&LqA+@hB}r^))-Q z!>Z%w=WN})*IInn>xdXYz!A)J4yWSex?i`85FbYood`@pT1?X%}e!jjBD>jEGd~b)8lvbnEAC6>4Ee4YXv?{SXy_Y`4{uFo%?<(A1*HJ!EwU+3?esiUys%5UbHKT?$w zQfupS&&dD3-LUfh@4w4!y@KBJfB2aFWNkp(*Pnd<|8p69)egSTwPKdXUi$;b*H1kD zJ~eXw{TGSv)WYjyHCKiEuCPy#d_~ypa25Lml~JAlhe4%P)VQ!PknDf}XY2nUdc)qMjHJj>#Q`7-g2Mb@ z-2ccH;gh3^13(sZbyhRjdgp@q-A!q5i}1-&%>lFmL^}ZFn_GeD{||4S$#CNAWrp+T zE;HP^^#~j?AbR@jWniCM80#_w1g0}wd;FNXQ2+uULxF~a6Pml1J%gH>9K-P|FBmL! zi&`6iz>h(JeQ2~}<8pPkZ?I1~(ljQ)IBY?jB4+@24 z8;*k=0rEYmmXqxO5C8=~$k!kTfav>o?t>gavN=O17hnUR6c3}1D6K0HB|;K4S?zcP&q&e7}|*t6!)MI0MTXTt@L#O zs0s$fy)fG^Fb(3<)d8>y37Mv=17MCors?hgYJgD(j5+`S0)Ve;Z@OG500000NkvXX Hu0mjfsH>)l literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CM14/Objects/Medical/Surgery/hemostat.rsi/meta.json b/Resources/Textures/_CM14/Objects/Medical/Surgery/hemostat.rsi/meta.json new file mode 100644 index 00000000000..44f3bb9e5c4 --- /dev/null +++ b/Resources/Textures/_CM14/Objects/Medical/Surgery/hemostat.rsi/meta.json @@ -0,0 +1,17 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from cmss13 at https://github.com/cmss13-devs/cmss13/blob/7917d83bac9cddd14c0ca0b457256b2683cc047f/icons/obj/items/surgery_tools.dmi", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "hemostat" + }, + { + "name": "predator_hemostat" + } + ] +} diff --git a/Resources/Textures/_CM14/Objects/Medical/Surgery/hemostat.rsi/predator_hemostat.png b/Resources/Textures/_CM14/Objects/Medical/Surgery/hemostat.rsi/predator_hemostat.png new file mode 100644 index 0000000000000000000000000000000000000000..5924c5a9b57606ba2b4c769b604bb699932da6dc GIT binary patch literal 457 zcmV;)0XF`LP)VQ!PkmLY!JCFY$`sAS#Q`7-96bVH z-2ccH;gh491E7Y2Eh?|5Waxxi1hO2&KXu_c!~Pu`Xcq#=jxaOO1oLI&RsO@|$g!Mc z2f)DMWh)t;KD@&qEw2KmL40xn$qoQnC?%%^w*0}JYYYl1T5xf?H~<9Hwe%Ps-MztJ z<>UjVLHyH)chScIPafW3Tr#ugzp1So!?Ar^z>Wa&!Qymr00@ABA7(j-21UaYdPV^V zB<55x%%9Q*ra?J?TtK!1Kw0r7Fa$vKfH;6!fFcKg;y*Sjd|(^^DtthRkCH-&YzMsm z_=&+0nD;>;0ID0VUcNv-2dL>={TJltLlFbPGyx*>uhKIFK&9V&H2yj=b0f(P0HySb%F6%9Vn99vIXQqV z2f!R5E+zLLna@BbAUhF4a{!#Cy91~NMjZeEMD4GZf{Y*e00000NkvXXu0mjf&qcLE literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CM14/Objects/Medical/Surgery/pump.rsi/meta.json b/Resources/Textures/_CM14/Objects/Medical/Surgery/pump.rsi/meta.json new file mode 100644 index 00000000000..36a78bbb36b --- /dev/null +++ b/Resources/Textures/_CM14/Objects/Medical/Surgery/pump.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from cmss13 at https://github.com/cmss13-devs/cmss13/blob/7917d83bac9cddd14c0ca0b457256b2683cc047f/icons/obj/items/surgery_tools.dmi", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "pump" + } + ] +} diff --git a/Resources/Textures/_CM14/Objects/Medical/Surgery/pump.rsi/pump.png b/Resources/Textures/_CM14/Objects/Medical/Surgery/pump.rsi/pump.png new file mode 100644 index 0000000000000000000000000000000000000000..42b6d3667e657fe464adae143ac54c97441858cb GIT binary patch literal 575 zcmV-F0>J%=P)VQ!Pj5=V{0c1HKF3k5oy4a#sn;EI<0B#<^ z|G4DVZac!TZgCHsUzpdx;H9DQ|H0R<3~Fj}4DUXE28+LW`JUn0g7@5!M0>Iz)^wwMmX&x6|;Chs}TpeQQ|7dNpqV5m}JVQ9PehoPn{ zlcB7hk%ZzEQ7p{55w1eui;|yPCg6|fev#0{FUMUMj-v2;q>X#3=i%-WLULs6T_WLXBbZG-pwE)E=ZaKzJ7VnxasWm z{|slZqe>w0&z!srXWzQ@h~XDEHv=dQfY>0gZ1Gkw4N3!Az-S=J0WggqT1!^;KPZl) zBLg78DyhP7_S9jpPhpls#d?F;Fg>`;BFO=0n*W1>85Fl50AhoD3ich)fnh;@aL14e zh%N_A%yk(+7J(8ODBB@}fWUOTzNCr+P#gn{5?H}QuEi8NfSO>`0Yk$9poDho&eQ*( z(hW#6oH>4hz77BZn5Ake(gWiFm?J=#(yT|81E^^!Sq`8T7y$QM{B z1T4hDUr2qu2)2R<38ICf5=4LDytm}70D#tggv(r|lhhBmx@M>bfBi3MT?u^|-0tBklT3 z-d~iNLIPAhMRs<6k?!s87{#*_*a6tnPmvaNg;NHyhuGVq=2?)wX@?KUL~8ysJHy~a zKnpGVS$kfD+LyulMkX*!XrVr50=QY0N+T-VShwJIt!9T0&g6YAbHOPCRQ6Hx1ogFn zATo-LLrI-;nhjoaK+k@_inHKcGy-?GH)dsPf&jDA+o$?mbOM+K0P4%&*keU-)}7~~ z6JV|TiA#%BYa$u}eM^y_st2fiKxZc!0g^yq)H{*yw&d*Zjb0hc2MK_74jm3s45yODBL=ua7-CftUy)Flf;D44_~FY{fx?XslnwuJ-5z cV&b2`7qQMx9vcM0ng9R*07*qoM6N<$g25Z^7ytkO literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CM14/Objects/Medical/Surgery/retractor.rsi/retractor.png b/Resources/Textures/_CM14/Objects/Medical/Surgery/retractor.rsi/retractor.png new file mode 100644 index 0000000000000000000000000000000000000000..333a286a4f13ff484ec16e5888dad3905dcfb6eb GIT binary patch literal 525 zcmV+o0`mQdP)<-27kvK?#y>fq(`gTGc) zfKtVp0IEm)Fo8K%wH-+2soCUjfm;1#rAo7NB>@8gz*<-l$L;2901ymMPtIv$(+P|L z6J~4-AfIrmuas0*t{X5` z00`ASJ~!yidk@YzYh@}7=g3sC0A%!t9Okl8od5j#7GSdP>;S4cOms10CQPLTP$xai zTvq?^@*xJ24PYdb5yOU9QQ5)KvDRE(Q>eMd1E>WMH>y;9wWnd`Cfn{$fT$a`n|ERy z36Pd~A^->v9sICxnI{J5WZGE(upPSwfY&IzPI1Pc2tYy*vwHWhSzP@9?OhE*o>VQ!Pj5=V{0izBWybjQ|5C8x5%>$}i_~7bE zMuH9iSzg)Q&rp*X$iOY4fFdU#z{l|Y%LfQsOqSuptH*FQ41mPY`AFbDvO_Q&0JHq` zjfV`n?kNnHcg{hP|M~{Oe)r-LRyHzUNJ0*Ujm*bz0J7y^4KmVTN00)P40OQsp1Bhk zkfRXfZ#q{OZA#j0)Q3|B=O4 zup2W7iNiwRBz6Z-3SbV$27n>Jp!V`4{ty5GQw@1wG{ESGB-7XcC^S|8X`(`4<%+G~ zpkKM-3RyHd03|$J0L1~Icmq=ZK{O~qQbL2wgJ!k==$0av1sEX!(@ZIi%`$=^Fc4tW j0izBWb-<_t2HXJvmkrh>gLKy&00000NkvXXu0mjf^Rt~w literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CM14/Objects/Medical/Surgery/saw.rsi/saw.png b/Resources/Textures/_CM14/Objects/Medical/Surgery/saw.rsi/saw.png new file mode 100644 index 0000000000000000000000000000000000000000..ea570c4d151244ee97287bee104461666b99d18b GIT binary patch literal 464 zcmV;>0WbcEP)VQ!Pj5+|T0|K0_|5IY5?5kI=GLqx~ zEm_(Be8NHu(UAct;)=484AW;XWAN~B#A*<-{PZdF;Nq$h*gdmh?@>mq4j=~X*s-7C z?fZ`m!h-x*9rW$@Uj_*YQ3e-h8-^uI*E7UK2ZF^x>?wV93}xl5aJ6JP09Pm=gHLbY zF|1p)iGhoi8BBu!hz+tF=6k#jc=_rLN#Y=I_4*wKLnB?Vk2_kXFkE~57;pSzbpTWo z&P2Fp?-9HP5|StA078zasL5dv7ZU-qL7@TiDKdC+|0%K=RoZoajd+98%8smWHKMS z}Kbgd1huan|Tg_}()X=%?Y!=>6P= z)Ul(?3hnOgLppsDy4`P3TD%W$-nL-1vH{l%SIPCK>(4-harNi37s+STrt5L!@WK9f zCo&+a7ie~RKZwxnI}gccJPsQk)%&vbL%o0NLF-2v@a5}wuJefZu?^=hoFhHG@Sp@A zI-Q9ds!M;sfIl}yK7?L0UJWg9)b&y5)@P1@VU@Uh?*`0FpCHHB8|XC6XMd9}VS$Ecp-H8$|dkSTM!qb`oac0uQkDM`%-&fr@oY>a9oX- zq0eo=`*$sf6WRLQ2H+wDmz@aCJsg5Mk*)9E2ElTi0lYUU=DWb2P@0ItFwJuZ@C z`XPkx?YC|g1Cga~oci1&0N3C28(Fw6*M)3-E(7q7h&WN9Kehp6h}D`w*=fNYG(2dKihe1L3>$_J>xn0$aLjLHY7!2Jw@u4^P)VQ!Pj5=WWIDnf+@IOBJuV3CXQq=)kva%=^ zR>in6T)F-j%x1UuWZ*6=Wcb?O&+zl$cCgr{v)BJ$d;A!~5o9?4WI4=22Tv1*1KZCq zh+8T!h$x6Nym|1FLEguQ!3OAnBS8A$t1B=EU^NTF0SXEV|A82*VgcsgVEWdrM_|iA zhQbWi(UgUU!0jzt7>)z!uR!`IR16nDaRA72CnqNcJ3A)^EiDZORaIq%+qdsBT)TDy zEZ@*j!?0`3G=}N3moaSGc96l{%bp=KH44mcTe1sb5Xe!ovJ4D;eQ+Uc!H?m92M-=F z?%TKTKM*s39D)o^?B30=YyC`y6K5|o+`n_5p`s>-Vcn`tD13Bq{v1SZ!``Dv0ZP*VL)U=(1Z(E+ZY zC+Gk|27z({OstE6;r{|)oP$Ei!dMp^EkFkow45Xd5CcGI0))Fds~ObP>=002ov JPDHLkV1k3y<}&~Q literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CM14/Objects/Medical/Surgery/scalpel.rsi/predator_scalpel.png b/Resources/Textures/_CM14/Objects/Medical/Surgery/scalpel.rsi/predator_scalpel.png new file mode 100644 index 0000000000000000000000000000000000000000..f503fc0d1d309295c60019c9fb7d5ebe17f32b07 GIT binary patch literal 406 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv(mfq~J( z)5S5QV$R#iw%*K+0&Vx1cQbP;b@ob~ck_JC9;IP+u%UNpD%XF957Q%VMMV4(ZZQ!P zb7U247E7C)kt{S(q&#AtarO3Y%XJn<)+fbT23WF=*}J@5J9Q}p-Srxve;3Fq^}vRBBluQ)z(Pac)OB?dG8jidmRyT zYXMvA?HxX|KQmbz8lBe*upCS(p0+*a zn5`qrdfD3+UutbG9nP9ux%_6qrkKWe1`t|-uL(4 zX@jNf`xY=>PS;O9;nRC)!Cj|K5>ir82eP(oF_CC#X_07YWtGgkzwdOx+grSC&h6g} z-`w8LpJ&;|?C{{o&C@(b7-m?NNTqNZ_3~WMJzj8N@^61htEgoHPaEdm=1aN|6X0FI xSaRA>rr_qzaG(zuJYD@<);T3K0RT;WVUYj; literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CM14/Objects/Medical/Surgery/scalpel.rsi/scalpel_laser.png b/Resources/Textures/_CM14/Objects/Medical/Surgery/scalpel.rsi/scalpel_laser.png new file mode 100644 index 0000000000000000000000000000000000000000..9b5d19c28b64f2fa641ba6fa2761d087b7d17c4c GIT binary patch literal 349 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv(mfq{|V z)5S5QVoq|RM1sMqhCucntAs0zi}@r<4_qi{n6~Cky{V~XTl980!vh%tJHGueR6Z-q zuxZaCwf2LDBBnn)a`SY-uEnWb%%%)&%rY`E{}y*Q>M;MD;~&xS@Y18RJnNURNbY&^ zRMJO>_g{V0Z@%RZ6}}o&N>m@dw^(Cg+rtKSemMgROH0EWH!T}~w)4GBt|zopr0QiiM{Qv*} literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CM14/Objects/Medical/Surgery/scalpel.rsi/scalpel_laser_2.png b/Resources/Textures/_CM14/Objects/Medical/Surgery/scalpel.rsi/scalpel_laser_2.png new file mode 100644 index 0000000000000000000000000000000000000000..0384e1ab36f21fe6eb57937b32714eaf02669fe8 GIT binary patch literal 412 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv(mfq~J_ z)5S5QVoq|RM1sMqhCucntAs0zi}@r<8E*1jm^Ah8`ekaz3tnGSX49{%Y|G`BH#+d+ z#Fw_c?vg8?F|f0@|M&9p;`#pWZgNHGcRlCubkoC~o2N^jc{e}dLig9y4F=a*SI2J6 z6F$7@XtX5LoVEW~|4B)yP*pwg;pJOvHoHVc1Kwf@PdgTe~DWM4fzsRT( literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CM14/Objects/Medical/Surgery/scalpel.rsi/scalpel_laser_2_on.png b/Resources/Textures/_CM14/Objects/Medical/Surgery/scalpel.rsi/scalpel_laser_2_on.png new file mode 100644 index 0000000000000000000000000000000000000000..4fc26472124f0d851522898def5595a214d7e5c5 GIT binary patch literal 654 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|S$T zr;B4q#hkaZ_IpPMiX7kXACt9ULYY8|gtV82Qz^$3Cr78z>m8 z@8TG(tS8%Il-|<5q z9$Gc7TzS39k6Yo@R<1=y_pjg&xh3ZCrvCiv)-!iw9^5`)a8EboYt#2K?z>8N&Zhf3 z+s?T`H$PaQD&)Y88;)&n!dHj#+`KMkxBf-Y?Tzv3SM7U_&EN7)|DWBpVkz~t>>8`u z=3Q=jX?%A9kNW+!4O71FHTYyL$2h4$?#4l}*2|y2*VVC|ULC(Db?WJ{xZMrDZ9{v7L9t%a&G?Sx@YX` z7=mZ>TF3w6Xv7-09SjEUEDcCfOY9HSAGBOlmO1y5)I0tU!Hb-uh5s@hJOBK>)&2YO z59XcUy(P5a;6DcYT}*HO?CJc+u=x4s^11qd866KTwP&~_Uyv_=9)Wk5^yJE~FA&uP Pr8ovpS3j3^P6+1i1&tyO87FCwZ3) z;*UcB1V8`;Kmh&^AiuIe;(7VzUix)FT+p%ttg9-nEgy$R`#3p1gFKQUU)M+PuZgHs z0K+hdrfF~-hZeR`zC1_0`Gh&Qj_KVE%+E~mbqA}n7+P9`TqqzamC(Jd;l^)EbFv;@$P|WsdI`bTr^{yXASlg@lJ8Of54#SZ|#%2F9UOWp8{Au&~;b#76ndbX58To}i zpA4V;cjK)CAzJd+C+Pi{ZZhxud@pbnb>ywzCzRY}6ThpJ; zt-VN;^S3F>(`jp-?B493X!XCL;qQYNE7v)c#%J#Cn43S_YR~%jZTGfM^?PmjK26Z$ zol?EZYVHn~a|@sEX?}2kVckh4yOS61Mlp+p&9eP|ODa!3?H?m!)~wY`DKGMkAAGrK zeDSDx_pLg;>4yt<7QeVRgRe$+d7{goBPTw@+Nxgn`?b-~yj``@C$g{lHS3n9?_4uxLmnKd9$1vNZ#`fJy z!3)L@Vv|h7xLR9!L1HmXU+_CfTvHE;q(q!;-^>bP0l+XkKu@pNj literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CM14/Objects/Medical/Surgery/scalpel.rsi/scalpel_laser_on.png b/Resources/Textures/_CM14/Objects/Medical/Surgery/scalpel.rsi/scalpel_laser_on.png new file mode 100644 index 0000000000000000000000000000000000000000..75041112d5cfc77dc4555956ade21caf6376dc6d GIT binary patch literal 463 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3HF&`%2dVDb50q$YKTtz9S&aI8~cZnt_3_ z(bL5-q+-t78T-8tJBS?LKT$7A;EJQbq)U9VI*V2`2WiZ@c+#=umpn(GD~qh`A5*S> zjCrnJD~t0rIJmAJbZVb==|&EtY|FZ1HZNT#2~E%Pe!BPR?;U&Y)P8zral*WXk)7Fq z0gMh5Fq~PnO13|H#nq?@UV)~*PtP-Ed~9B9yGG~i!+#qey*l|(wNBZF!R*VKU$>6$ z+}|O#SYLkrtRtVl>aLl|nd71q5f{7Re*AqV_2pGRW1jtdG zGcTRga5dw>n=b-4V;G}13go#hi@kgAJ}=7z*~yi9(LZ)F``MWG&JYt-(rhVUKW-&F zMP6%0xLe>h-SDj*CISn-Ui$Ln(;F5h4FU0UW(OJ_FeIH$(_%u3nbijzs*{o zzVNkxkW2W~pL4@%Z)Niww>`kXgO2_=*#B)j>-d|w@|S5p*F?D`_7fB*Gs)&Rm@K?@ s`R_OOJ#vkmvNJc?L-c)k&tS(Wzy1ZUuI3j_U<@&My85}Sb4q9e0J=`X3;+NC literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CM14/Objects/Medical/Surgery/scalpel.rsi/scalpel_manager.png b/Resources/Textures/_CM14/Objects/Medical/Surgery/scalpel.rsi/scalpel_manager.png new file mode 100644 index 0000000000000000000000000000000000000000..af593050e77f8e8d5bf68d4bf266389e9d9dcee7 GIT binary patch literal 435 zcmV;k0ZjghP)VQ!P(8K{+va}!u7Gt$)oAj>zbp9yB4 zID46)qh-o}e2$>10|K0_{|ANnF$4sr!^J9Ua_~BW>LFlZtjnOLCdaU0?@>ljXn^?m z08P@sty_=4p#h=^0jfCwWMNllH8}W@(*TH1^E3dn9Au%pmp#~0P&9x5&2s^=<>${` zX4tvyAlOnMCQ3g^4ggt(E{4r=Qp_aU0mwcD0btew$2BFEljHyxShs2uIF*Cqno`S2 zb^ypinB|5>x^T-u369t}r^o>y-=kX&D(OJt z<&Ur3gXqEAMwSCWme)1qFeFA5)5Kze4gdj=<&?xPMGoknxrC+`6LbK*z^DU8 d9WdYy005~;)W(~2E2;nh002ovPDHLkV1fxdv>yNf literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CM14/Objects/Medical/Surgery/scalpel.rsi/scalpel_manager_on.png b/Resources/Textures/_CM14/Objects/Medical/Surgery/scalpel.rsi/scalpel_manager_on.png new file mode 100644 index 0000000000000000000000000000000000000000..d04cb0ca29d1916af536837fe42c3ebb0b15e201 GIT binary patch literal 633 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|S$` zr;B4q#hkaZ_In?85IH{oh2B3#QLZ4Dmkacq*jd>Ru8a-6vxGxWFY3a^CM%65g`=hx z78#)%EG#-iSOVLfrg{nLSXf-Q{KdDvC8<7U_IIm0zx^`X>Wb#a=z0Er%XnIu>AA0tIKkwyaELd@9xbTc5UlqXPA@O`u;bMge0%CiP-xS zH}hNH?{4_G(V)fYujucJFs@d9GsR^!lUxNFrS@#zyY3uEy3db&oDK`xmYxsFy8kzs zkFUS4QF-mBTEPVmIp)lp8Nl9nIiS7j*Y?Bt(GBAN{!D3py*irp$u8zCr_F^LHoU6+ zf3Q(QN>GRMOr5j>p5MW@6m^-lpc|&#sGXm|kRM zR^Yeqj~34~cb0~yf{Y23E({TJf($_JkH4*#_$Smgd|_T9uke@QCA){c!!JgWiRdDi z_!Hi;^X%e#ldkiY{lNoc*Y4kpl5PK=zjpn_$TKm%^&mLOlKjaQbbU+x3thkP!LHKG>tYE zHrhl;6-2N|lg83sQ4rC_pom>g`~mUf2dw)xJImfh?{@cs67fM;Za;3`%+8y+46t9u zKY{)xFf}vBU!Gemo6EDSi?hs+63FI8cwu~!t!-|xo6B=1hzK%)Gl>)g@@!&yRvO3H zyuB7A0_XR56F}&X4)$5)xWUS+OY+$VDG11L^QVWVH0~4rR0M$eg(W@KDtlh{Y zkJhk{&eg@UAmASX(@R7^yqMz|7#tdwD!_<2{9qU!LzZ+d4v7RHHwrCehVarF!cG#T zFq5~@bKV31GV&D=0iSc$1mMN!SfOj)OirZ+9!)l!Q&-|oK!u#Ef}@R4(!oPYJ~9My z*k7+zLs#ZSfPjKSfD~aAl~57lPyPD8#x{ebn}dM`{aciwF-L4*v1+uZEzym|9>_r}y8 z+X%q_0gz0k^~!2qU7XcbyY-&%`U}Nf&2go)-|^2aEa~h_PBk9y)!ofiPh1ZG1Z-~a zsFTA36L5NdX%@!++4)7YkYhTT${0U@VGJM5nWLEu$?0?6g)@MFsp+hFA`!+kj>!a* zGlte~y&0biMy(gNOaXq@1Hh$Elj^nQoLT7W^F!4tW%c^}KA^UnEo{1`i+3>yR|*^tjj0K6uJ^ix$@`w7u)Tc>?sL4xfI0Fo0u z7RJ~wIjTn6pbr4WJjD7bKQaJTj$QF^dmXq1IS)nVftOYu>io3+`G+0!i3|~ zrD~me7(9SsSY!YYUDIg+S`kDqe9f0e=lC8dfMJ;x0QB~^>TD{v2Eb!D=ynVH`i%`h ug7CZD`aO>Ox(oc?hkbet48Wjm1mGJejjSDjizxR10000 Date: Fri, 30 Aug 2024 00:38:42 +0300 Subject: [PATCH 7/7] running tests