Pārlūkot izejas kodu

Tdm update 7 (#217)

* smoke grenades, grenade tweaks

* removes unused jobs

* more job removals

* loads of ss14 job-specific stuff removed

* integrations

* missing job stuff

* working mapswap, fixed flashlight sprites, grenade runtimes

* restricted crafting for tdm, adds 10 second timer before capture status switches in area capture

* map updates
Taislin 6 mēneši atpakaļ
vecāks
revīzija
72206e2e5b
100 mainītis faili ar 892 papildinājumiem un 5902 dzēšanām
  1. 1 1
      Content.Client/Access/UI/IdCardConsoleWindow.xaml.cs
  2. 38 8
      Content.Client/Construction/UI/ConstructionMenuPresenter.cs
  3. 15 5
      Content.Client/Lobby/UI/ObserveWarningWindow.xaml
  4. 0 56
      Content.Client/SprayPainter/SprayPainterSystem.cs
  5. 0 42
      Content.Client/SprayPainter/UI/SprayPainterBoundUserInterface.cs
  6. 0 34
      Content.Client/SprayPainter/UI/SprayPainterWindow.xaml
  7. 0 96
      Content.Client/SprayPainter/UI/SprayPainterWindow.xaml.cs
  8. 9 73
      Content.IntegrationTests/Tests/Round/JobTest.cs
  9. 1 26
      Content.IntegrationTests/Tests/Storage/StorageInteractionTest.cs
  10. 8 0
      Content.Server/Explosion/EntitySystems/ProjectileGrenadeSystem.cs
  11. 83 11
      Content.Server/GameTicking/Rules/CaptureAreaSystem.cs
  12. 15 0
      Content.Server/GameTicking/Rules/Components/CaptureAreaComponent.cs
  13. 0 67
      Content.Server/SprayPainter/SprayPainterSystem.cs
  14. 8 1
      Content.Server/Voting/Managers/VoteManager.DefaultVotes.cs
  15. 2 2
      Content.Shared/CCVar/CCVars.Vote.cs
  16. 16 9
      Content.Shared/Civ14/CivResearch/CivResearchComponent.cs
  17. 1 2
      Content.Shared/Civ14/CivResearch/CivResearchSystem.cs
  18. 6 0
      Content.Shared/Construction/Prototypes/ConstructionPrototype.cs
  19. 1 1
      Content.Shared/GameTicking/SharedGameTicker.cs
  20. 0 24
      Content.Shared/SprayPainter/Components/PaintableAirlockComponent.cs
  21. 0 37
      Content.Shared/SprayPainter/Components/SprayPainterComponent.cs
  22. 0 21
      Content.Shared/SprayPainter/Prototypes/AirlockDepartmentsPrototype.cs
  23. 0 19
      Content.Shared/SprayPainter/Prototypes/AirlockGroupPrototype.cs
  24. 0 195
      Content.Shared/SprayPainter/SharedSprayPainterSystem.cs
  25. 0 73
      Content.Shared/SprayPainter/SprayPainterEvents.cs
  26. 0 31
      Content.Tests/Shared/Preferences/Job/JobPriorityTest.cs
  27. 1 1
      Resources/ConfigPresets/Build/development.toml
  28. 0 11
      Resources/Maps/Test/dev_map.yml
  29. 5 0
      Resources/Maps/civ/tdm/camp.yml
  30. 367 107
      Resources/Maps/civ/tdm/camp_ww2.yml
  31. 65 25
      Resources/Maps/civ/tdm/opushka.yml
  32. 0 60
      Resources/Prototypes/Catalog/Cargo/cargo_medical.yml
  33. 0 10
      Resources/Prototypes/Catalog/Cargo/cargo_service.yml
  34. 0 269
      Resources/Prototypes/Catalog/Cargo/cargo_vending.yml
  35. 0 23
      Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml
  36. 0 111
      Resources/Prototypes/Catalog/Fills/Boxes/general.yml
  37. 52 52
      Resources/Prototypes/Catalog/Fills/Boxes/syndicate.yml
  38. 49 49
      Resources/Prototypes/Catalog/Fills/Crates/armory.yml
  39. 56 118
      Resources/Prototypes/Catalog/Fills/Crates/medical.yml
  40. 0 369
      Resources/Prototypes/Catalog/Fills/Crates/permaescape.yml
  41. 72 77
      Resources/Prototypes/Catalog/Fills/Crates/salvage.yml
  42. 0 1
      Resources/Prototypes/Catalog/Fills/Crates/service.yml
  43. 0 32
      Resources/Prototypes/Catalog/Fills/Crates/syndicate.yml
  44. 21 226
      Resources/Prototypes/Catalog/Fills/Crates/vending.yml
  45. 0 207
      Resources/Prototypes/Catalog/Fills/Items/belt.yml
  46. 0 63
      Resources/Prototypes/Catalog/Fills/Items/briefcases.yml
  47. 0 111
      Resources/Prototypes/Catalog/Fills/Items/firstaidkits.yml
  48. 0 49
      Resources/Prototypes/Catalog/Fills/Lockers/biohazard.yml
  49. 0 47
      Resources/Prototypes/Catalog/Fills/Lockers/cargo.yml
  50. 0 110
      Resources/Prototypes/Catalog/Fills/Lockers/dressers.yml
  51. 0 153
      Resources/Prototypes/Catalog/Fills/Lockers/engineer.yml
  52. 0 382
      Resources/Prototypes/Catalog/Fills/Lockers/heads.yml
  53. 0 147
      Resources/Prototypes/Catalog/Fills/Lockers/medical.yml
  54. 0 204
      Resources/Prototypes/Catalog/Fills/Lockers/misc.yml
  55. 0 15
      Resources/Prototypes/Catalog/Fills/Lockers/science.yml
  56. 0 241
      Resources/Prototypes/Catalog/Fills/Lockers/security.yml
  57. 0 141
      Resources/Prototypes/Catalog/Fills/Lockers/service.yml
  58. 0 51
      Resources/Prototypes/Catalog/Fills/Lockers/space_ruin.yml
  59. 0 275
      Resources/Prototypes/Catalog/Fills/Lockers/suit_storage.yml
  60. 0 125
      Resources/Prototypes/Catalog/Fills/Lockers/wardrobe_colors.yml
  61. 0 221
      Resources/Prototypes/Catalog/Fills/Lockers/wardrobe_job.yml
  62. 0 20
      Resources/Prototypes/Catalog/VendingMachines/Inventories/ammo.yml
  63. 0 17
      Resources/Prototypes/Catalog/VendingMachines/Inventories/atmosdrobe.yml
  64. 0 20
      Resources/Prototypes/Catalog/VendingMachines/Inventories/bardrobe.yml
  65. 0 53
      Resources/Prototypes/Catalog/VendingMachines/Inventories/boozeomat.yml
  66. 0 22
      Resources/Prototypes/Catalog/VendingMachines/Inventories/cargodrobe.yml
  67. 0 21
      Resources/Prototypes/Catalog/VendingMachines/Inventories/cart.yml
  68. 0 23
      Resources/Prototypes/Catalog/VendingMachines/Inventories/centdrobe.yml
  69. 0 14
      Resources/Prototypes/Catalog/VendingMachines/Inventories/chang.yml
  70. 0 35
      Resources/Prototypes/Catalog/VendingMachines/Inventories/chapel.yml
  71. 0 16
      Resources/Prototypes/Catalog/VendingMachines/Inventories/chefdrobe.yml
  72. 0 28
      Resources/Prototypes/Catalog/VendingMachines/Inventories/chefvend.yml
  73. 0 18
      Resources/Prototypes/Catalog/VendingMachines/Inventories/chemdrobe.yml
  74. 0 64
      Resources/Prototypes/Catalog/VendingMachines/Inventories/chemvend.yml
  75. 0 101
      Resources/Prototypes/Catalog/VendingMachines/Inventories/clothesmate.yml
  76. 0 19
      Resources/Prototypes/Catalog/VendingMachines/Inventories/curadrobe.yml
  77. 0 19
      Resources/Prototypes/Catalog/VendingMachines/Inventories/detdrobe.yml
  78. 0 33
      Resources/Prototypes/Catalog/VendingMachines/Inventories/dinnerware.yml
  79. 0 13
      Resources/Prototypes/Catalog/VendingMachines/Inventories/discount.yml
  80. 0 21
      Resources/Prototypes/Catalog/VendingMachines/Inventories/engidrobe.yml
  81. 0 15
      Resources/Prototypes/Catalog/VendingMachines/Inventories/engivend.yml
  82. 0 21
      Resources/Prototypes/Catalog/VendingMachines/Inventories/games.yml
  83. 0 11
      Resources/Prototypes/Catalog/VendingMachines/Inventories/genedrobe.yml
  84. 0 18
      Resources/Prototypes/Catalog/VendingMachines/Inventories/gib.yml
  85. 0 12
      Resources/Prototypes/Catalog/VendingMachines/Inventories/happyhonk.yml
  86. 0 17
      Resources/Prototypes/Catalog/VendingMachines/Inventories/hydrobe.yml
  87. 0 17
      Resources/Prototypes/Catalog/VendingMachines/Inventories/janidrobe.yml
  88. 0 27
      Resources/Prototypes/Catalog/VendingMachines/Inventories/lawdrobe.yml
  89. 0 14
      Resources/Prototypes/Catalog/VendingMachines/Inventories/magivend.yml
  90. 0 14
      Resources/Prototypes/Catalog/VendingMachines/Inventories/medical.yml
  91. 0 30
      Resources/Prototypes/Catalog/VendingMachines/Inventories/medidrobe.yml
  92. 0 42
      Resources/Prototypes/Catalog/VendingMachines/Inventories/pride.yml
  93. 0 17
      Resources/Prototypes/Catalog/VendingMachines/Inventories/pwrgame.yml
  94. 0 12
      Resources/Prototypes/Catalog/VendingMachines/Inventories/robodrobe.yml
  95. 0 22
      Resources/Prototypes/Catalog/VendingMachines/Inventories/robotics.yml
  96. 0 14
      Resources/Prototypes/Catalog/VendingMachines/Inventories/salvage.yml
  97. 0 19
      Resources/Prototypes/Catalog/VendingMachines/Inventories/scidrobe.yml
  98. 0 28
      Resources/Prototypes/Catalog/VendingMachines/Inventories/sec.yml
  99. 0 32
      Resources/Prototypes/Catalog/VendingMachines/Inventories/secdrobe.yml
  100. 0 46
      Resources/Prototypes/Catalog/VendingMachines/Inventories/seeds.yml

+ 1 - 1
Content.Client/Access/UI/IdCardConsoleWindow.xaml.cs

@@ -28,7 +28,7 @@ public sealed partial class IdCardConsoleWindow : DefaultWindow
         private string? _lastJobProto;
 
         // The job that will be picked if the ID doesn't have a job on the station.
-        private static ProtoId<JobPrototype> _defaultJob = "Passenger";
+        private static ProtoId<JobPrototype> _defaultJob = "Nomad";
 
         public IdCardConsoleWindow(IdCardConsoleBoundUserInterface owner, IPrototypeManager prototypeManager,
             List<ProtoId<AccessLevelPrototype>> accessLevels)

+ 38 - 8
Content.Client/Construction/UI/ConstructionMenuPresenter.cs

@@ -181,6 +181,7 @@ private void OnGridViewRecipeSelected(object? sender, ConstructionPrototype? rec
         /// <param name="args">A tuple containing the search string and selected category.</param>
         private void OnViewPopulateRecipes(object? sender, (string search, string category) args)
         {
+            _sawmill = _logManager.GetSawmill("craftmenu");
             var (search, category) = args;
 
             var recipes = new List<ConstructionPrototype>();
@@ -191,21 +192,50 @@ private void OnViewPopulateRecipes(object? sender, (string search, string catego
                 _selectedCategory = string.Empty;
             else
                 _selectedCategory = category;
+            _sawmill.Info("Populating...");
+            var currentAge = 0;
+            var isTDM = false;
+            var mapId = _mapManager.GetAllMapIds().FirstOrDefault();
+            if (_playerManager.LocalEntity != null)
+            {
+                if (_entManager.TryGetComponent<TransformComponent>(_playerManager.LocalEntity, out var xform))
+                {
+                    mapId = xform.MapID;
+                }
+            }
+
+            var mapUid = _mapManager.GetMapEntityId(mapId);
+
+            if (_entManager.TryGetComponent(mapUid, out CivResearchComponent? component))
+            {
+                var newval = (int)MathF.Floor(component.ResearchLevel / 100);
+                if (newval > currentAge)
+                {
+                    currentAge = newval;
+                }
+                _sawmill.Info($"Current age: {currentAge}");
+            }
+
+            if (component != null)
+            {
+                if (component.IsTDM)
+                {
+                    isTDM = true;
+                    _sawmill.Info("Map is TDM");
+                }
+            }
+
             foreach (var recipe in _prototypeManager.EnumeratePrototypes<ConstructionPrototype>())
             {
                 if (recipe.Hide)
                     continue;
-                var currentAge = 0;
-                // Get the entity UID associated with the first map
-                var mapId = _mapManager.GetAllMapIds().FirstOrDefault();
-                var mapUid = _mapManager.GetMapEntityId(mapId);
 
-                if (_entManager.TryGetComponent<CivResearchComponent>(mapUid, out var comp))
-                {
-                    currentAge = (int)MathF.Floor(comp.ResearchLevel / 100);
-                }
                 if (currentAge < recipe.AgeMin || currentAge > recipe.AgeMax)
                     continue;
+                if (recipe.TDM == false && isTDM == true)
+                {
+                    continue;
+                }
                 if (_playerManager.LocalSession == null
                 || _playerManager.LocalEntity == null
                 || _whitelistSystem.IsWhitelistFail(recipe.EntityWhitelist, _playerManager.LocalEntity.Value))

+ 15 - 5
Content.Client/Lobby/UI/ObserveWarningWindow.xaml

@@ -3,12 +3,22 @@
     xmlns:cc="clr-namespace:Content.Client.Administration.UI.CustomControls">
     <BoxContainer Orientation="Vertical">
         <Label Text="{Loc 'observe-warning-1'}"/>
-        <Label Text="{Loc 'observe-warning-2'}"/>
         <BoxContainer Orientation="Horizontal">
-            <Button Name="NevermindButton" Text="{Loc 'observe-nevermind'}" SizeFlagsStretchRatio="1"/>
-            <Control HorizontalExpand="True" SizeFlagsStretchRatio="2" />
-            <cc:CommandButton Command="observe" Name="ObserveButton" StyleClasses="Caution" Text="{Loc 'observe-confirm'}" SizeFlagsStretchRatio="1"/>
-            <cc:CommandButton Command="observe admin" Name="ObserveAsAdminButton" Text="{Loc 'observe-as-admin'}" SizeFlagsStretchRatio="1" Visible="False"/>
+            <Button Name="NevermindButton"
+                    Text="{Loc 'observe-nevermind'}"
+                    SizeFlagsStretchRatio="1"/>
+            <Control HorizontalExpand="True"
+                    SizeFlagsStretchRatio="2"/>
+            <cc:CommandButton Command="observe"
+                    Name="ObserveButton"
+                    StyleClasses="Caution"
+                    Text="{Loc 'observe-confirm'}"
+                    SizeFlagsStretchRatio="1"/>
+            <cc:CommandButton Command="observe admin"
+                    Name="ObserveAsAdminButton"
+                    Text="{Loc 'observe-as-admin'}"
+                    SizeFlagsStretchRatio="1"
+                    Visible="False"/>
         </BoxContainer>
     </BoxContainer>
 </DefaultWindow>

+ 0 - 56
Content.Client/SprayPainter/SprayPainterSystem.cs

@@ -1,56 +0,0 @@
-using Content.Shared.SprayPainter;
-using Robust.Client.Graphics;
-using Robust.Client.ResourceManagement;
-using Robust.Shared.Serialization.TypeSerializers.Implementations;
-using Robust.Shared.Utility;
-using System.Linq;
-using Robust.Shared.Graphics;
-
-namespace Content.Client.SprayPainter;
-
-public sealed class SprayPainterSystem : SharedSprayPainterSystem
-{
-    [Dependency] private readonly IResourceCache _resourceCache = default!;
-
-    public List<SprayPainterEntry> Entries { get; private set; } = new();
-
-    protected override void CacheStyles()
-    {
-        base.CacheStyles();
-
-        Entries.Clear();
-        foreach (var style in Styles)
-        {
-            var name = style.Name;
-            string? iconPath = Groups
-              .FindAll(x => x.StylePaths.ContainsKey(name))?
-              .MaxBy(x => x.IconPriority)?.StylePaths[name];
-            if (iconPath == null)
-            {
-                Entries.Add(new SprayPainterEntry(name, null));
-                continue;
-            }
-
-            RSIResource doorRsi = _resourceCache.GetResource<RSIResource>(SpriteSpecifierSerializer.TextureRoot / new ResPath(iconPath));
-            if (!doorRsi.RSI.TryGetState("closed", out var icon))
-            {
-                Entries.Add(new SprayPainterEntry(name, null));
-                continue;
-            }
-
-            Entries.Add(new SprayPainterEntry(name, icon.Frame0));
-        }
-    }
-}
-
-public sealed class SprayPainterEntry
-{
-    public string Name;
-    public Texture? Icon;
-
-    public SprayPainterEntry(string name, Texture? icon)
-    {
-        Name = name;
-        Icon = icon;
-    }
-}

+ 0 - 42
Content.Client/SprayPainter/UI/SprayPainterBoundUserInterface.cs

@@ -1,42 +0,0 @@
-using Content.Shared.SprayPainter;
-using Content.Shared.SprayPainter.Components;
-using Robust.Client.UserInterface;
-using Robust.Client.UserInterface.Controls;
-
-namespace Content.Client.SprayPainter.UI;
-
-public sealed class SprayPainterBoundUserInterface : BoundUserInterface
-{
-    [ViewVariables]
-    private SprayPainterWindow? _window;
-
-    public SprayPainterBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
-    {
-    }
-
-    protected override void Open()
-    {
-        base.Open();
-
-        _window = this.CreateWindow<SprayPainterWindow>();
-
-        _window.OnSpritePicked = OnSpritePicked;
-        _window.OnColorPicked = OnColorPicked;
-
-        if (EntMan.TryGetComponent(Owner, out SprayPainterComponent? comp))
-        {
-            _window.Populate(EntMan.System<SprayPainterSystem>().Entries, comp.Index, comp.PickedColor, comp.ColorPalette);
-        }
-    }
-
-    private void OnSpritePicked(ItemList.ItemListSelectedEventArgs args)
-    {
-        SendMessage(new SprayPainterSpritePickedMessage(args.ItemIndex));
-    }
-
-    private void OnColorPicked(ItemList.ItemListSelectedEventArgs args)
-    {
-        var key = _window?.IndexToColorKey(args.ItemIndex);
-        SendMessage(new SprayPainterColorPickedMessage(key));
-    }
-}

+ 0 - 34
Content.Client/SprayPainter/UI/SprayPainterWindow.xaml

@@ -1,34 +0,0 @@
-<DefaultWindow xmlns="https://spacestation14.io"
-               MinSize="500 300"
-               SetSize="500 500"
-               Title="{Loc 'spray-painter-window-title'}">
-    <BoxContainer Orientation="Horizontal"
-                  HorizontalExpand="True"
-                  VerticalExpand="True"
-                  SeparationOverride="4"
-                  MinWidth="450">
-        <BoxContainer Orientation="Vertical"
-                      HorizontalExpand="True"
-                      VerticalExpand="True"
-                      SeparationOverride="4"
-                      MinWidth="200">
-            <Label Name="SelectedSpriteLabel"
-                   Text="{Loc 'spray-painter-selected-style'}">
-            </Label>
-            <ItemList Name="SpriteList"
-                      SizeFlagsStretchRatio="8"
-                      VerticalExpand="True"/>
-        </BoxContainer>
-        <BoxContainer Orientation="Vertical"
-                      HorizontalExpand="True"
-                      VerticalExpand="True"
-                      SeparationOverride="4"
-                      MinWidth="200">
-            <Label Name="SelectedColorLabel"
-                   Text="{Loc 'spray-painter-selected-color'}"/>
-            <ItemList Name="ColorList"
-                      SizeFlagsStretchRatio="8"
-                      VerticalExpand="True"/>
-        </BoxContainer>
-    </BoxContainer>
-</DefaultWindow>

+ 0 - 96
Content.Client/SprayPainter/UI/SprayPainterWindow.xaml.cs

@@ -1,96 +0,0 @@
-using Robust.Client.AutoGenerated;
-using Robust.Client.GameObjects;
-using Robust.Client.UserInterface.Controls;
-using Robust.Client.UserInterface.CustomControls;
-using Robust.Client.UserInterface.XAML;
-using Robust.Shared.Utility;
-
-namespace Content.Client.SprayPainter.UI;
-
-[GenerateTypedNameReferences]
-public sealed partial class SprayPainterWindow : DefaultWindow
-{
-    [Dependency] private readonly IEntitySystemManager _sysMan = default!;
-    private readonly SpriteSystem _spriteSystem;
-
-    public Action<ItemList.ItemListSelectedEventArgs>? OnSpritePicked;
-    public Action<ItemList.ItemListSelectedEventArgs>? OnColorPicked;
-    public Dictionary<string, int> ItemColorIndex = new();
-
-    private Dictionary<string, Color> currentPalette = new();
-    private const string colorLocKeyPrefix = "pipe-painter-color-";
-    private List<SprayPainterEntry> CurrentEntries = new List<SprayPainterEntry>();
-
-    private readonly SpriteSpecifier _colorEntryIconTexture = new SpriteSpecifier.Rsi(
-        new ResPath("Structures/Piping/Atmospherics/pipe.rsi"),
-        "pipeStraight");
-
-    public SprayPainterWindow()
-    {
-        RobustXamlLoader.Load(this);
-        IoCManager.InjectDependencies(this);
-        _spriteSystem = _sysMan.GetEntitySystem<SpriteSystem>();
-    }
-
-    private static string GetColorLocString(string? colorKey)
-    {
-        if (string.IsNullOrEmpty(colorKey))
-            return Loc.GetString("pipe-painter-no-color-selected");
-        var locKey = colorLocKeyPrefix + colorKey;
-
-        if (!Loc.TryGetString(locKey, out var locString))
-            locString = colorKey;
-
-        return locString;
-        }
-
-    public string? IndexToColorKey(int index)
-    {
-        return (string?) ColorList[index].Metadata;
-    }
-
-    public void Populate(List<SprayPainterEntry> entries, int selectedStyle, string? selectedColorKey, Dictionary<string, Color> palette)
-    {
-        // Only clear if the entries change. Otherwise the list would "jump" after selecting an item
-        if (!CurrentEntries.Equals(entries))
-        {
-            CurrentEntries = entries;
-            SpriteList.Clear();
-            foreach (var entry in entries)
-            {
-                SpriteList.AddItem(entry.Name, entry.Icon);
-            }
-        }
-
-        if (!currentPalette.Equals(palette))
-        {
-            currentPalette = palette;
-            ItemColorIndex.Clear();
-            ColorList.Clear();
-
-            foreach (var color in palette)
-            {
-                var locString = GetColorLocString(color.Key);
-                var item = ColorList.AddItem(locString, _spriteSystem.Frame0(_colorEntryIconTexture));
-                item.IconModulate = color.Value;
-                item.Metadata = color.Key;
-
-                ItemColorIndex.Add(color.Key, ColorList.IndexOf(item));
-            }
-        }
-
-        // Disable event so we don't send a new event for pre-selectedStyle entry and end up in a loop
-
-        if (selectedColorKey != null)
-        {
-            var index = ItemColorIndex[selectedColorKey];
-            ColorList.OnItemSelected -= OnColorPicked;
-            ColorList[index].Selected = true;
-            ColorList.OnItemSelected += OnColorPicked;
-        }
-
-        SpriteList.OnItemSelected -= OnSpritePicked;
-        SpriteList[selectedStyle].Selected = true;
-        SpriteList.OnItemSelected += OnSpritePicked;
-    }
-}

+ 9 - 73
Content.IntegrationTests/Tests/Round/JobTest.cs

@@ -18,9 +18,7 @@ namespace Content.IntegrationTests.Tests.Round;
 [TestFixture]
 public sealed class JobTest
 {
-    private static readonly ProtoId<JobPrototype> Passenger = "Passenger";
-    private static readonly ProtoId<JobPrototype> Engineer = "StationEngineer";
-    private static readonly ProtoId<JobPrototype> Captain = "Captain";
+    private static readonly ProtoId<JobPrototype> Nomad = "Nomad";
 
     private static string _map = "JobTestMap";
 
@@ -39,9 +37,7 @@ public sealed class JobTest
           mapNameTemplate: ""Nomads""
         - type: StationJobs
           availableJobs:
-            {Passenger}: [ -1, -1 ]
-            {Engineer}: [ -1, -1 ]
-            {Captain}: [ 1, 1 ]
+            {Nomad}: [ -1, -1 ]
 ";
 
     private void AssertJob(TestPair pair, ProtoId<JobPrototype> job, NetUserId? user = null, bool isAntag = false)
@@ -66,7 +62,7 @@ private void AssertJob(TestPair pair, ProtoId<JobPrototype> job, NetUserId? user
     }
 
     /// <summary>
-    /// Simple test that checks that starting the round spawns the player into the test map as a passenger.
+    /// Simple test that checks that starting the round spawns the player into the test map as a nomad.
     /// </summary>
     [Test]
     public async Task StartRoundTest()
@@ -92,7 +88,7 @@ public async Task StartRoundTest()
         await pair.Server.WaitPost(() => ticker.StartRound());
         await pair.RunTicksSync(10);
 
-        AssertJob(pair, Passenger);
+        AssertJob(pair, Nomad);
 
         await pair.Server.WaitPost(() => ticker.RestartRound());
         await pair.CleanReturnAsync();
@@ -116,21 +112,12 @@ public async Task JobPreferenceTest()
         Assert.That(ticker.RunLevel, Is.EqualTo(GameRunLevel.PreRoundLobby));
         Assert.That(pair.Client.AttachedEntity, Is.Null);
 
-        await pair.SetJobPriorities((Passenger, JobPriority.Medium), (Engineer, JobPriority.High));
+        await pair.SetJobPriorities((Nomad, JobPriority.Medium));
         ticker.ToggleReadyAll(true);
         await pair.Server.WaitPost(() => ticker.StartRound());
         await pair.RunTicksSync(10);
 
-        AssertJob(pair, Engineer);
-
-        await pair.Server.WaitPost(() => ticker.RestartRound());
-        Assert.That(ticker.RunLevel, Is.EqualTo(GameRunLevel.PreRoundLobby));
-        await pair.SetJobPriorities((Passenger, JobPriority.High), (Engineer, JobPriority.Medium));
-        ticker.ToggleReadyAll(true);
-        await pair.Server.WaitPost(() => ticker.StartRound());
-        await pair.RunTicksSync(10);
-
-        AssertJob(pair, Passenger);
+        AssertJob(pair, Nomad);
 
         await pair.Server.WaitPost(() => ticker.RestartRound());
         await pair.CleanReturnAsync();
@@ -155,68 +142,17 @@ public async Task JobWeightTest()
         Assert.That(ticker.RunLevel, Is.EqualTo(GameRunLevel.PreRoundLobby));
         Assert.That(pair.Client.AttachedEntity, Is.Null);
 
-        var captain = pair.Server.ProtoMan.Index(Captain);
-        var engineer = pair.Server.ProtoMan.Index(Engineer);
-        var passenger = pair.Server.ProtoMan.Index(Passenger);
-        Assert.That(captain.Weight, Is.GreaterThan(engineer.Weight));
-        Assert.That(engineer.Weight, Is.EqualTo(passenger.Weight));
+        var nomad = pair.Server.ProtoMan.Index(Nomad);
 
-        await pair.SetJobPriorities((Passenger, JobPriority.Medium), (Engineer, JobPriority.High), (Captain, JobPriority.Low));
+        await pair.SetJobPriorities((Nomad, JobPriority.Medium));
         ticker.ToggleReadyAll(true);
         await pair.Server.WaitPost(() => ticker.StartRound());
         await pair.RunTicksSync(10);
 
-        AssertJob(pair, Captain);
+        AssertJob(pair, Nomad);
 
         await pair.Server.WaitPost(() => ticker.RestartRound());
         await pair.CleanReturnAsync();
     }
 
-    /// <summary>
-    /// Check that jobs are preferentially given to players that have marked those jobs as higher priority.
-    /// </summary>
-    [Test]
-    public async Task JobPriorityTest()
-    {
-        await using var pair = await PoolManager.GetServerClient(new PoolSettings
-        {
-            DummyTicker = false,
-            Connected = true,
-            InLobby = true
-        });
-
-        pair.Server.CfgMan.SetCVar(CCVars.GameMap, _map);
-        var ticker = pair.Server.System<GameTicker>();
-        Assert.That(ticker.RunLevel, Is.EqualTo(GameRunLevel.PreRoundLobby));
-        Assert.That(pair.Client.AttachedEntity, Is.Null);
-
-        await pair.Server.AddDummySessions(5);
-        await pair.RunTicksSync(5);
-
-        var engineers = pair.Server.PlayerMan.Sessions.Select(x => x.UserId).ToList();
-        var captain = engineers[3];
-        engineers.RemoveAt(3);
-
-        await pair.SetJobPriorities(captain, (Captain, JobPriority.High), (Engineer, JobPriority.Medium));
-        foreach (var engi in engineers)
-        {
-            await pair.SetJobPriorities(engi, (Captain, JobPriority.Medium), (Engineer, JobPriority.High));
-        }
-
-        ticker.ToggleReadyAll(true);
-        await pair.Server.WaitPost(() => ticker.StartRound());
-        await pair.RunTicksSync(10);
-
-        AssertJob(pair, Captain, captain);
-        Assert.Multiple(() =>
-        {
-            foreach (var engi in engineers)
-            {
-                AssertJob(pair, Engineer, engi);
-            }
-        });
-
-        await pair.Server.WaitPost(() => ticker.RestartRound());
-        await pair.CleanReturnAsync();
-    }
 }

+ 1 - 26
Content.IntegrationTests/Tests/Storage/StorageInteractionTest.cs

@@ -44,31 +44,6 @@ public async Task UiInteractTest()
         await Activate();
         Assert.That(IsUiOpen(StorageComponent.StorageUiKey.Key), Is.True);
 
-        // Pick up a PDA
-        var pda = await PlaceInHands("PassengerPDA");
-        var sPda = ToServer(pda);
-        Assert.That(sys.IsEntityInContainer(sPda), Is.True);
-        Assert.That(sys.TryGetContainingContainer((sPda, null), out var container));
-        Assert.That(container!.Owner, Is.EqualTo(SPlayer));
-
-        // Insert the PDA into the backpack
-        await Interact();
-        Assert.That(sys.TryGetContainingContainer((sPda, null), out container));
-        Assert.That(container!.Owner, Is.EqualTo(backpack));
-
-        // Use "e" / ActivateInWorld to open the PDA UI while it is still in the backpack.
-        var ctrl = GetStorageControl(pda);
-        await ClickControl(ctrl, ContentKeyFunctions.ActivateItemInWorld);
-        await RunTicks(10);
-        Assert.That(IsUiOpen(StorageComponent.StorageUiKey.Key), Is.True);
-        Assert.That(IsUiOpen(PdaUiKey.Key), Is.True);
-
-        // Click on the pda to pick it up and remove it from the backpack.
-        await ClickControl(ctrl, ContentKeyFunctions.MoveStoredItem);
-        await RunTicks(10);
-        Assert.That(sys.TryGetContainingContainer((sPda, null), out container));
-        Assert.That(container!.Owner, Is.EqualTo(SPlayer));
-
         // UIs should still be open
         Assert.That(IsUiOpen(StorageComponent.StorageUiKey.Key), Is.True);
         Assert.That(IsUiOpen(PdaUiKey.Key), Is.True);
@@ -81,7 +56,7 @@ private ItemGridPiece GetStorageControl(NetEntity target)
     {
         var uid = ToClient(target);
         var hotbar = GetWidget<HotbarGui>();
-        var storageContainer  = GetControlFromField<Control>(nameof(HotbarGui.StorageContainer), hotbar);
+        var storageContainer = GetControlFromField<Control>(nameof(HotbarGui.StorageContainer), hotbar);
         return GetControlFromChildren<ItemGridPiece>(c => c.Entity == uid, storageContainer);
     }
 }

+ 8 - 0
Content.Server/Explosion/EntitySystems/ProjectileGrenadeSystem.cs

@@ -58,6 +58,14 @@ private void FragmentIntoProjectiles(EntityUid uid, ProjectileGrenadeComponent c
         var grenadeCoord = _transformSystem.GetMapCoordinates(uid);
         var shootCount = 0;
         var totalCount = component.Container.ContainedEntities.Count + component.UnspawnedCount;
+
+        // Check for division by zero
+        if (totalCount <= 0)
+        {
+            Logger.Warning($"ProjectileGrenade {ToPrettyString(uid)} has no projectiles to fragment into");
+            return;
+        }
+
         var segmentAngle = 360 / totalCount;
 
         while (TrySpawnContents(grenadeCoord, component, out var contentUid))

+ 83 - 11
Content.Server/GameTicking/Rules/CaptureAreaSystem.cs

@@ -94,22 +94,88 @@ private void ProcessArea(EntityUid uid, CaptureAreaComponent area, float frameTi
         if (currentController != area.Controller)
         {
             // Controller changed (or became contested/empty)
-            area.Controller = currentController;
-            area.CaptureTimer = 0f; // Reset timer on change
-            area.CaptureTimerAnnouncement1 = false;
-            area.CaptureTimerAnnouncement2 = false;
             if (currentController == "")
             {
-                _chat.DispatchGlobalAnnouncement($"{area.PreviousController} has lost control of {area.Name}!", "Objective", false, null, Color.Red);
+                // Area became contested or empty
+                if (area.ContestedTimer == 0f)
+                {
+                    // Store the last controller when we first enter contested state
+                    area.LastController = area.Controller;
+                }
+
+                // Increment contested timer
+                area.ContestedTimer += frameTime;
+
+                // Only reset the capture timer if contested for long enough
+                if (area.ContestedTimer >= area.ContestedResetTime)
+                {
+                    // Reset capture progress after contested threshold is reached
+                    area.CaptureTimer = 0f;
+                    area.CaptureTimerAnnouncement1 = false;
+                    area.CaptureTimerAnnouncement2 = false;
+
+                    // Only announce loss of control once the timer has fully reset
+                    if (!string.IsNullOrEmpty(area.LastController))
+                    {
+                        _chat.DispatchGlobalAnnouncement($"{area.LastController} has lost control of {area.Name}!", "Objective", false, null, Color.Red);
+                        area.LastController = ""; // Clear last controller after announcement
+                    }
+                }
+            }
+            else if (area.Controller == "")
+            {
+                // Area was contested/empty but now has a controller
+                if (currentController == area.LastController && area.ContestedTimer < area.ContestedResetTime)
+                {
+                    // The previous controller regained control before the reset threshold
+                    // Don't reset the timer or make announcements
+                    area.Controller = currentController;
+                    area.ContestedTimer = 0f;
+                }
+                else
+                {
+                    // New controller or contested long enough to reset
+                    area.Controller = currentController;
+                    area.ContestedTimer = 0f;
+                    _chat.DispatchGlobalAnnouncement($"{currentController} has gained control of {area.Name}!", "Objective", false, null, Color.DodgerBlue);
+                }
             }
             else
             {
-                _chat.DispatchGlobalAnnouncement($"{currentController} has gained control of {area.Name}!", "Objective", false, null, Color.DodgerBlue);
+                // Direct change from one faction to another
+                if (area.ContestedTimer == 0f)
+                {
+                    // Store the last controller when we first enter contested state
+                    area.LastController = area.Controller;
+                }
+
+                // Treat as contested first
+                area.Controller = "";
+                area.ContestedTimer += frameTime;
+
+                // Only reset and announce if contested long enough
+                if (area.ContestedTimer >= area.ContestedResetTime)
+                {
+                    area.CaptureTimer = 0f;
+                    area.CaptureTimerAnnouncement1 = false;
+                    area.CaptureTimerAnnouncement2 = false;
+
+                    // Now update to the new controller
+                    area.Controller = currentController;
+
+                    // Announce the change
+                    _chat.DispatchGlobalAnnouncement($"{area.LastController} has lost control of {area.Name}!", "Objective", false, null, Color.Red);
+                    _chat.DispatchGlobalAnnouncement($"{currentController} has gained control of {area.Name}!", "Objective", false, null, Color.DodgerBlue);
+
+                    area.LastController = "";
+                    area.ContestedTimer = 0f;
+                }
             }
         }
         else if (!string.IsNullOrEmpty(currentController))
         {
-            // Controller remains the same, increment timer
+            // Controller remains the same, reset contested timer and increment capture timer
+            area.ContestedTimer = 0f;
             area.CaptureTimer += frameTime;
 
             //announce when theres 2 and 1 minutes left.
@@ -133,14 +199,20 @@ private void ProcessArea(EntityUid uid, CaptureAreaComponent area, float frameTi
                     _roundEndSystem.EndRound();
                 }
             }
-
         }
         else
         {
             // Area is empty or contested, and wasn't previously controlled by a single faction
-            area.CaptureTimer = 0f; // Ensure timer is reset/stays reset
-            area.CaptureTimerAnnouncement1 = false;
-            area.CaptureTimerAnnouncement2 = false;
+            // Increment contested timer
+            area.ContestedTimer += frameTime;
+
+            if (area.ContestedTimer >= area.ContestedResetTime)
+            {
+                // Reset capture progress after contested threshold is reached
+                area.CaptureTimer = 0f;
+                area.CaptureTimerAnnouncement1 = false;
+                area.CaptureTimerAnnouncement2 = false;
+            }
         }
         area.PreviousController = currentController;
     }

+ 15 - 0
Content.Server/GameTicking/Rules/Components/CaptureAreaComponent.cs

@@ -59,6 +59,21 @@ public sealed partial class CaptureAreaComponent : Component
     [DataField("capturableFactions")]
     public List<string> CapturableFactions { get; set; } = [];
 
+    /// <summary>
+    /// How long the area needs to be contested or lost before the capture timer resets
+    /// </summary>
+    [DataField("contestedResetTime")]
+    public float ContestedResetTime { get; set; } = 10f;
 
+    /// <summary>
+    /// Current timer tracking how long the area has been contested or lost
+    /// </summary>
+    [DataField("contestedTimer")]
+    public float ContestedTimer { get; set; } = 0f;
 
+    /// <summary>
+    /// The last controller before the area became contested or lost
+    /// </summary>
+    [DataField("lastController")]
+    public string LastController { get; set; } = "";
 }

+ 0 - 67
Content.Server/SprayPainter/SprayPainterSystem.cs

@@ -1,67 +0,0 @@
-using Content.Server.Atmos.Piping.Components;
-using Content.Server.Atmos.Piping.EntitySystems;
-using Content.Shared.DoAfter;
-using Content.Shared.Interaction;
-using Content.Shared.SprayPainter;
-using Content.Shared.SprayPainter.Components;
-
-namespace Content.Server.SprayPainter;
-
-/// <summary>
-/// Handles spraying pipes using a spray painter.
-/// Airlocks are handled in shared.
-/// </summary>
-public sealed class SprayPainterSystem : SharedSprayPainterSystem
-{
-    [Dependency] private readonly AtmosPipeColorSystem _pipeColor = default!;
-
-    public override void Initialize()
-    {
-        base.Initialize();
-
-        SubscribeLocalEvent<SprayPainterComponent, SprayPainterPipeDoAfterEvent>(OnPipeDoAfter);
-
-        SubscribeLocalEvent<AtmosPipeColorComponent, InteractUsingEvent>(OnPipeInteract);
-    }
-
-    private void OnPipeDoAfter(Entity<SprayPainterComponent> ent, ref SprayPainterPipeDoAfterEvent args)
-    {
-        if (args.Handled || args.Cancelled)
-            return;
-
-        if (args.Args.Target is not {} target)
-            return;
-
-        if (!TryComp<AtmosPipeColorComponent>(target, out var color))
-            return;
-
-        Audio.PlayPvs(ent.Comp.SpraySound, ent);
-
-        _pipeColor.SetColor(target, color, args.Color);
-
-        args.Handled = true;
-    }
-
-    private void OnPipeInteract(Entity<AtmosPipeColorComponent> ent, ref InteractUsingEvent args)
-    {
-        if (args.Handled)
-            return;
-
-        if (!TryComp<SprayPainterComponent>(args.Used, out var painter) || painter.PickedColor is not {} colorName)
-            return;
-
-        if (!painter.ColorPalette.TryGetValue(colorName, out var color))
-            return;
-
-        var doAfterEventArgs = new DoAfterArgs(EntityManager, args.User, painter.PipeSprayTime, new SprayPainterPipeDoAfterEvent(color), args.Used, target: ent, used: args.Used)
-        {
-            BreakOnMove = true,
-            BreakOnDamage = true,
-            // multiple pipes can be sprayed at once just not the same one
-            DuplicateCondition = DuplicateConditions.SameTarget,
-            NeedHand = true,
-        };
-
-        args.Handled = DoAfter.TryStartDoAfter(doAfterEventArgs);
-    }
-}

+ 8 - 1
Content.Server/Voting/Managers/VoteManager.DefaultVotes.cs

@@ -19,6 +19,7 @@
 using Robust.Shared.Enums;
 using Robust.Shared.Player;
 using Robust.Shared.Random;
+using Robust.Shared.Configuration;
 
 namespace Content.Server.Voting.Managers
 {
@@ -27,12 +28,16 @@ public sealed partial class VoteManager
         [Dependency] private readonly IPlayerLocator _locator = default!;
         [Dependency] private readonly ILogManager _logManager = default!;
         [Dependency] private readonly IBanManager _bans = default!;
-        [Dependency] private readonly VoteWebhooks _voteWebhooks = default!;
 
+        [Dependency] private readonly ILogManager _log = default!;
+        [Dependency] private readonly VoteWebhooks _voteWebhooks = default!;
+        [Dependency] private readonly IConfigurationManager _configurationManager = default!;
+        private readonly ISawmill _sawmill = default!;
         private VotingSystem? _votingSystem;
         private RoleSystem? _roleSystem;
         private GameTicker? _gameTicker;
 
+
         private static readonly Dictionary<StandardVoteType, CVarDef<bool>> VoteTypesToEnableCVars = new()
         {
             {StandardVoteType.Restart, CCVars.VoteRestartEnabled},
@@ -308,6 +313,8 @@ public void CreateMapVote(ICommonSession? initiator)
                 {
                     if (_gameMapManager.TrySelectMapIfEligible(picked.ID))
                     {
+
+                        _configurationManager.SetCVar(CCVars.GameMap, picked.ID);
                         ticker.UpdateInfoText();
                     }
                 }

+ 2 - 2
Content.Shared/CCVar/CCVars.Vote.cs

@@ -62,13 +62,13 @@ public sealed partial class CCVars
     ///     Sets the duration of the map vote timer.
     /// </summary>
     public static readonly CVarDef<int>
-        VoteTimerMap = CVarDef.Create("vote.timermap", 90, CVar.SERVERONLY);
+        VoteTimerMap = CVarDef.Create("vote.timermap", 40, CVar.SERVERONLY);
 
     /// <summary>
     ///     Sets the duration of the restart vote timer.
     /// </summary>
     public static readonly CVarDef<int>
-        VoteTimerRestart = CVarDef.Create("vote.timerrestart", 60, CVar.SERVERONLY);
+        VoteTimerRestart = CVarDef.Create("vote.timerrestart", 40, CVar.SERVERONLY);
 
     /// <summary>
     ///     Sets the duration of the gamemode/preset vote timer.

+ 16 - 9
Content.Shared/Civ14/CivResearch/CivResearchComponent.cs

@@ -4,40 +4,47 @@
 using Robust.Shared.Serialization;
 using Robust.Shared.Serialization.Manager.Attributes;
 using Robust.Shared.ViewVariables;
+using Robust.Shared.Prototypes;
+using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
 
 namespace Content.Shared.Civ14.CivResearch;
 
-[RegisterComponent]
-[NetworkedComponent]
+[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
 public sealed partial class CivResearchComponent : Component
 {
     /// <summary>
     /// Defines if research is currently active and progressing
     /// </summary>
     [ViewVariables(VVAccess.ReadWrite)]
-    [DataField("researchEnabled")]
+    [DataField("researchEnabled"), AutoNetworkedField]
     public bool ResearchEnabled { get; set; } = true;
     /// <summary>
     /// The current research level. From 0 to 800.
     /// </summary>
-    [ViewVariables(VVAccess.ReadWrite)]
-    [DataField("researchLevel")]
+
+    [DataField("researchLevel"), AutoNetworkedField]
     public float ResearchLevel { get; set; } = 0f;
     /// <summary>
     /// For autoresearch, how much research increases per tick.
     /// This defaults to 100 levels per day.
     /// </summary>
-    [ViewVariables(VVAccess.ReadWrite)]
-    [DataField("researchSpeed")]
+
+    [DataField("researchSpeed"), AutoNetworkedField]
     public float ResearchSpeed { get; set; } = 0.000057f;
     /// <summary>
     /// The maximum research level.
     /// Should probably stay below 900 as 9 is used as the research level for disabled and futuristic stuff.
     /// </summary>
-    [ViewVariables(VVAccess.ReadWrite)]
-    [DataField("maxResearch")]
+
+    [DataField("maxResearch"), AutoNetworkedField]
     public float MaxResearch { get; set; } = 800;
     /// <summary>
+    /// If the map is tdm or not. Crafting is restricted in TDM maps.
+    /// </summary>
+    [ViewVariables(VVAccess.ReadWrite)]
+    [DataField("isTDM"), AutoNetworkedField]
+    public bool IsTDM { get; set; } = false;
+    /// <summary>
     /// Calculates the current age based on the ResearchLevel.
     /// Age is determined by flooring the division of ResearchLevel by 100.
     /// </summary>

+ 1 - 2
Content.Shared/Civ14/CivResearch/CivResearchSystem.cs

@@ -19,7 +19,6 @@ public override void Initialize()
         _sawmill = _logManager.GetSawmill("research");
     }
 
-
     /// <summary>
     /// Ensures that a CivResearchComponent is attached to the entity representing a newly created map.
     /// </summary>
@@ -28,7 +27,7 @@ private void OnMapCreated(MapCreatedEvent ev)
     {
         var mapUid = _mapManager.GetMapEntityId(ev.MapId);
         EnsureComp<CivResearchComponent>(mapUid);
-        _sawmill.Info("research", $"Ensured ResearchComponent on new map {ev.MapId} (Entity: {mapUid})");
+        _sawmill.Info($"Ensured ResearchComponent on new map {ev.MapId} (Entity: {mapUid})");
     }
 
     /// <summary>

+ 6 - 0
Content.Shared/Construction/Prototypes/ConstructionPrototype.cs

@@ -71,6 +71,12 @@ public sealed partial class ConstructionPrototype : IPrototype
     [DataField("agemin")]
     public int AgeMin { get; set; } = 8;
 
+    /// <summary>
+    /// If this crafting recipe is available in TDM.
+    /// </summary>
+    [DataField("tdm")]
+    public bool TDM { get; set; } = false;
+
     /// <summary>
     /// If not null, then this is used to check if the entity trying to construct this is whitelisted.
     /// If they're not whitelisted, hide the item.

+ 1 - 1
Content.Shared/GameTicking/SharedGameTicker.cs

@@ -22,7 +22,7 @@ public abstract class SharedGameTicker : EntitySystem
         // But this is easier, and at least it isn't hardcoded.
         //TODO: Move these, they really belong in StationJobsSystem or a cvar.
         [ValidatePrototypeId<JobPrototype>]
-        public const string FallbackOverflowJob = "Passenger";
+        public const string FallbackOverflowJob = "Nomad";
 
         public const string FallbackOverflowJobName = "job-name-passenger";
 

+ 0 - 24
Content.Shared/SprayPainter/Components/PaintableAirlockComponent.cs

@@ -1,24 +0,0 @@
-using Content.Shared.Roles;
-using Content.Shared.SprayPainter.Prototypes;
-using Robust.Shared.GameStates;
-using Robust.Shared.Prototypes;
-
-namespace Content.Shared.SprayPainter.Components;
-
-[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
-public sealed partial class PaintableAirlockComponent : Component
-{
-    /// <summary>
-    /// Group of styles this airlock can be painted with, e.g. glass, standard or external.
-    /// </summary>
-    [DataField(required: true), AutoNetworkedField]
-    public ProtoId<AirlockGroupPrototype> Group = string.Empty;
-
-    /// <summary>
-    /// Department this airlock is painted as, or none.
-    /// Must be specified in prototypes for turf war to work.
-    /// To better catch any mistakes, you need to explicitly state a non-styled airlock has a null department.
-    /// </summary>
-    [DataField(required: true), AutoNetworkedField]
-    public ProtoId<DepartmentPrototype>? Department;
-}

+ 0 - 37
Content.Shared/SprayPainter/Components/SprayPainterComponent.cs

@@ -1,37 +0,0 @@
-using Content.Shared.DoAfter;
-using Robust.Shared.Audio;
-using Robust.Shared.GameStates;
-
-namespace Content.Shared.SprayPainter.Components;
-
-[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
-public sealed partial class SprayPainterComponent : Component
-{
-    [DataField]
-    public SoundSpecifier SpraySound = new SoundPathSpecifier("/Audio/Effects/spray2.ogg");
-
-    [DataField]
-    public TimeSpan AirlockSprayTime = TimeSpan.FromSeconds(3);
-
-    [DataField]
-    public TimeSpan PipeSprayTime = TimeSpan.FromSeconds(1);
-
-    /// <summary>
-    /// Pipe color chosen to spray with.
-    /// </summary>
-    [DataField, AutoNetworkedField]
-    public string? PickedColor;
-
-    /// <summary>
-    /// Pipe colors that can be selected.
-    /// </summary>
-    [DataField]
-    public Dictionary<string, Color> ColorPalette = new();
-
-    /// <summary>
-    /// Airlock style index selected.
-    /// After prototype reload this might not be the same style but it will never be out of bounds.
-    /// </summary>
-    [DataField, AutoNetworkedField]
-    public int Index;
-}

+ 0 - 21
Content.Shared/SprayPainter/Prototypes/AirlockDepartmentsPrototype.cs

@@ -1,21 +0,0 @@
-using Content.Shared.Roles;
-using Robust.Shared.Prototypes;
-
-namespace Content.Shared.SprayPainter.Prototypes;
-
-/// <summary>
-/// Maps airlock style names to department ids.
-/// </summary>
-[Prototype]
-public sealed partial class AirlockDepartmentsPrototype : IPrototype
-{
-    [IdDataField]
-    public string ID { get; private set; } = default!;
-
-    /// <summary>
-    /// Dictionary of style names to department ids.
-    /// If a style does not have a department (e.g. external) it is set to null.
-    /// </summary>
-    [DataField(required: true)]
-    public Dictionary<string, ProtoId<DepartmentPrototype>> Departments = new();
-}

+ 0 - 19
Content.Shared/SprayPainter/Prototypes/AirlockGroupPrototype.cs

@@ -1,19 +0,0 @@
-using Robust.Shared.Prototypes;
-
-namespace Content.Shared.SprayPainter.Prototypes;
-
-[Prototype("AirlockGroup")]
-public sealed partial class AirlockGroupPrototype : IPrototype
-{
-    [IdDataField]
-    public string ID { get; private set; } = default!;
-
-    [DataField("stylePaths")]
-    public Dictionary<string, string> StylePaths = default!;
-
-    // The priority determines, which sprite is used when showing
-    // the icon for a style in the SprayPainter UI. The highest priority
-    // gets shown.
-    [DataField("iconPriority")]
-    public int IconPriority = 0;
-}

+ 0 - 195
Content.Shared/SprayPainter/SharedSprayPainterSystem.cs

@@ -1,195 +0,0 @@
-using Content.Shared.Administration.Logs;
-using Content.Shared.Database;
-using Content.Shared.DoAfter;
-using Content.Shared.Doors.Components;
-using Content.Shared.Interaction;
-using Content.Shared.Popups;
-using Content.Shared.SprayPainter.Components;
-using Content.Shared.SprayPainter.Prototypes;
-using Robust.Shared.Audio.Systems;
-using Robust.Shared.Prototypes;
-using System.Linq;
-
-namespace Content.Shared.SprayPainter;
-
-/// <summary>
-/// System for painting airlocks using a spray painter.
-/// Pipes are handled serverside since AtmosPipeColorSystem is server only.
-/// </summary>
-public abstract class SharedSprayPainterSystem : EntitySystem
-{
-    [Dependency] protected readonly IPrototypeManager Proto = default!;
-    [Dependency] private   readonly ISharedAdminLogManager _adminLogger = default!;
-    [Dependency] protected readonly SharedAppearanceSystem Appearance = default!;
-    [Dependency] protected readonly SharedAudioSystem Audio = default!;
-    [Dependency] protected readonly SharedDoAfterSystem DoAfter = default!;
-    [Dependency] private   readonly SharedPopupSystem _popup = default!;
-
-    public List<AirlockStyle> Styles { get; private set; } = new();
-    public List<AirlockGroupPrototype> Groups { get; private set; } = new();
-
-    [ValidatePrototypeId<AirlockDepartmentsPrototype>]
-    private const string Departments = "Departments";
-
-    public override void Initialize()
-    {
-        base.Initialize();
-
-        CacheStyles();
-
-        SubscribeLocalEvent<SprayPainterComponent, MapInitEvent>(OnMapInit);
-        SubscribeLocalEvent<SprayPainterComponent, SprayPainterDoorDoAfterEvent>(OnDoorDoAfter);
-        Subs.BuiEvents<SprayPainterComponent>(SprayPainterUiKey.Key, subs =>
-        {
-            subs.Event<SprayPainterSpritePickedMessage>(OnSpritePicked);
-            subs.Event<SprayPainterColorPickedMessage>(OnColorPicked);
-        });
-
-        SubscribeLocalEvent<PaintableAirlockComponent, InteractUsingEvent>(OnAirlockInteract);
-
-        SubscribeLocalEvent<PrototypesReloadedEventArgs>(OnPrototypesReloaded);
-    }
-
-    private void OnMapInit(Entity<SprayPainterComponent> ent, ref MapInitEvent args)
-    {
-        if (ent.Comp.ColorPalette.Count == 0)
-            return;
-
-        SetColor(ent, ent.Comp.ColorPalette.First().Key);
-    }
-
-    private void OnDoorDoAfter(Entity<SprayPainterComponent> ent, ref SprayPainterDoorDoAfterEvent args)
-    {
-        if (args.Handled || args.Cancelled)
-            return;
-
-        if (args.Args.Target is not {} target)
-            return;
-
-        if (!TryComp<PaintableAirlockComponent>(target, out var airlock))
-            return;
-
-        airlock.Department = args.Department;
-        Dirty(target, airlock);
-
-        Audio.PlayPredicted(ent.Comp.SpraySound, ent, args.Args.User);
-        Appearance.SetData(target, DoorVisuals.BaseRSI, args.Sprite);
-        _adminLogger.Add(LogType.Action, LogImpact.Low, $"{ToPrettyString(args.Args.User):user} painted {ToPrettyString(args.Args.Target.Value):target}");
-
-        args.Handled = true;
-    }
-
-    #region UI messages
-
-    private void OnColorPicked(Entity<SprayPainterComponent> ent, ref SprayPainterColorPickedMessage args)
-    {
-        SetColor(ent, args.Key);
-    }
-
-    private void OnSpritePicked(Entity<SprayPainterComponent> ent, ref SprayPainterSpritePickedMessage args)
-    {
-        if (args.Index >= Styles.Count)
-            return;
-
-        ent.Comp.Index = args.Index;
-        Dirty(ent, ent.Comp);
-    }
-
-    private void SetColor(Entity<SprayPainterComponent> ent, string? paletteKey)
-    {
-        if (paletteKey == null || paletteKey == ent.Comp.PickedColor)
-            return;
-
-        if (!ent.Comp.ColorPalette.ContainsKey(paletteKey))
-            return;
-
-        ent.Comp.PickedColor = paletteKey;
-        Dirty(ent, ent.Comp);
-    }
-
-    #endregion
-
-    private void OnAirlockInteract(Entity<PaintableAirlockComponent> ent, ref InteractUsingEvent args)
-    {
-        if (args.Handled)
-            return;
-
-        if (!TryComp<SprayPainterComponent>(args.Used, out var painter))
-            return;
-
-        var group = Proto.Index<AirlockGroupPrototype>(ent.Comp.Group);
-
-        var style = Styles[painter.Index];
-        if (!group.StylePaths.TryGetValue(style.Name, out var sprite))
-        {
-            string msg = Loc.GetString("spray-painter-style-not-available");
-            _popup.PopupClient(msg, args.User, args.User);
-            return;
-        }
-
-        var doAfterEventArgs = new DoAfterArgs(EntityManager, args.User, painter.AirlockSprayTime, new SprayPainterDoorDoAfterEvent(sprite, style.Department), args.Used, target: ent, used: args.Used)
-        {
-            BreakOnMove = true,
-            BreakOnDamage = true,
-            NeedHand = true,
-        };
-        if (!DoAfter.TryStartDoAfter(doAfterEventArgs, out var id))
-            return;
-
-        args.Handled = true;
-
-        // Log the attempt
-        _adminLogger.Add(LogType.Action, LogImpact.Low, $"{ToPrettyString(args.User):user} is painting {ToPrettyString(ent):target} to '{style.Name}' at {Transform(ent).Coordinates:targetlocation}");
-    }
-
-    #region Style caching
-
-    private void OnPrototypesReloaded(PrototypesReloadedEventArgs args)
-    {
-        if (!args.WasModified<AirlockGroupPrototype>() && !args.WasModified<AirlockDepartmentsPrototype>())
-            return;
-
-        Styles.Clear();
-        Groups.Clear();
-        CacheStyles();
-
-        // style index might be invalid now so check them all
-        var max = Styles.Count - 1;
-        var query = AllEntityQuery<SprayPainterComponent>();
-        while (query.MoveNext(out var uid, out var comp))
-        {
-            if (comp.Index > max)
-            {
-                comp.Index = max;
-                Dirty(uid, comp);
-            }
-        }
-    }
-
-    protected virtual void CacheStyles()
-    {
-        // collect every style's name
-        var names = new SortedSet<string>();
-        foreach (var group in Proto.EnumeratePrototypes<AirlockGroupPrototype>())
-        {
-            Groups.Add(group);
-            foreach (var style in group.StylePaths.Keys)
-            {
-                names.Add(style);
-            }
-        }
-
-        // get their department ids too for the final style list
-        var departments = Proto.Index<AirlockDepartmentsPrototype>(Departments);
-        Styles.Capacity = names.Count;
-        foreach (var name in names)
-        {
-            departments.Departments.TryGetValue(name, out var department);
-            Styles.Add(new AirlockStyle(name, department));
-        }
-    }
-
-    #endregion
-}
-
-public record struct AirlockStyle(string Name, string? Department);

+ 0 - 73
Content.Shared/SprayPainter/SprayPainterEvents.cs

@@ -1,73 +0,0 @@
-using Content.Shared.DoAfter;
-using Robust.Shared.Serialization;
-
-namespace Content.Shared.SprayPainter;
-
-[Serializable, NetSerializable]
-public enum SprayPainterUiKey
-{
-    Key,
-}
-
-[Serializable, NetSerializable]
-public sealed class SprayPainterSpritePickedMessage : BoundUserInterfaceMessage
-{
-    public readonly int Index;
-
-    public SprayPainterSpritePickedMessage(int index)
-    {
-        Index = index;
-    }
-}
-
-[Serializable, NetSerializable]
-public sealed class SprayPainterColorPickedMessage : BoundUserInterfaceMessage
-{
-    public readonly string? Key;
-
-    public SprayPainterColorPickedMessage(string? key)
-    {
-        Key = key;
-    }
-}
-
-[Serializable, NetSerializable]
-public sealed partial class SprayPainterDoorDoAfterEvent : DoAfterEvent
-{
-    /// <summary>
-    /// Base RSI path to set for the door sprite.
-    /// </summary>
-    [DataField]
-    public string Sprite;
-
-    /// <summary>
-    /// Department id to set for the door, if the style has one.
-    /// </summary>
-    [DataField]
-    public string? Department;
-
-    public SprayPainterDoorDoAfterEvent(string sprite, string? department)
-    {
-        Sprite = sprite;
-        Department = department;
-    }
-
-    public override DoAfterEvent Clone() => this;
-}
-
-[Serializable, NetSerializable]
-public sealed partial class SprayPainterPipeDoAfterEvent : DoAfterEvent
-{
-    /// <summary>
-    /// Color of the pipe to set.
-    /// </summary>
-    [DataField]
-    public Color Color;
-
-    public SprayPainterPipeDoAfterEvent(Color color)
-    {
-        Color = color;
-    }
-
-    public override DoAfterEvent Clone() => this;
-}

+ 0 - 31
Content.Tests/Shared/Preferences/Job/JobPriorityTest.cs

@@ -1,31 +0,0 @@
-using System;
-using Content.Server.Database;
-using Content.Shared.Preferences;
-using NUnit.Framework;
-
-namespace Content.Tests.Shared.Preferences.Job
-{
-    [TestFixture]
-    [TestOf(typeof(JobPriority))]
-    [TestOf(typeof(DbJobPriority))]
-    public sealed class JobPriorityTest
-    {
-        [Test]
-        public void JobPriorityEnumParityTest()
-        {
-            var priorities = Enum.GetValues<JobPriority>();
-            var dbPriorities = Enum.GetValues<DbJobPriority>();
-
-            Assert.That(priorities.Length, Is.EqualTo(dbPriorities.Length));
-
-            for (var i = 0; i < priorities.Length; i++)
-            {
-                var priority = priorities[i];
-                var dbPriority = dbPriorities[i];
-
-                Assert.That((int) priority, Is.EqualTo((int) dbPriority));
-                Assert.That(priority.ToString(), Is.EqualTo(dbPriority.ToString()));
-            }
-        }
-    }
-}

+ 1 - 1
Resources/ConfigPresets/Build/development.toml

@@ -2,7 +2,7 @@
 # Straight in-game baby
 lobbyenabled = true
 # Dev map for faster loading & convenience
-map = "Opushka"
+map = "CampWW2"
 role_timers = false
 lobbyduration = 15
 disallowlatejoins = false

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 11
Resources/Maps/Test/dev_map.yml


+ 5 - 0
Resources/Maps/civ/tdm/camp.yml

@@ -38,6 +38,11 @@ entities:
     - type: MovedGrids
     - type: Broadphase
     - type: OccluderTree
+    - type: CivResearch
+      researchLevel: 200
+      maxResearch: 200
+      researchEnabled: false
+      isTDM: true
   - uid: 2
     components:
     - type: MetaData

+ 367 - 107
Resources/Maps/civ/tdm/camp_ww2.yml

@@ -4,8 +4,8 @@ meta:
   engineVersion: 251.0.0
   forkId: ""
   forkVersion: ""
-  time: 05/19/2025 18:40:29
-  entityCount: 3941
+  time: 05/20/2025 22:19:05
+  entityCount: 3990
 maps:
 - 1
 grids:
@@ -39,7 +39,10 @@ entities:
     - type: Broadphase
     - type: OccluderTree
     - type: CivResearch
-      researchLevel: 0.75583875
+      isTDM: True
+      maxResearch: 600
+      researchLevel: 600
+      researchEnabled: False
   - uid: 2
     components:
     - type: MetaData
@@ -3182,6 +3185,164 @@ entities:
       rot: 1.5707963267948966 rad
       pos: 73.50877,23.728542
       parent: 2
+- proto: civ13_magazine_clip_(7.62x54mm)
+  entities:
+  - uid: 3981
+    components:
+    - type: Transform
+      pos: 36.55528,43.318863
+      parent: 2
+  - uid: 3982
+    components:
+    - type: Transform
+      pos: 36.52403,43.318863
+      parent: 2
+  - uid: 3983
+    components:
+    - type: Transform
+      pos: 36.52403,43.318863
+      parent: 2
+  - uid: 3984
+    components:
+    - type: Transform
+      pos: 36.52403,43.318863
+      parent: 2
+  - uid: 3985
+    components:
+    - type: Transform
+      pos: 36.52403,43.318863
+      parent: 2
+  - uid: 3986
+    components:
+    - type: Transform
+      pos: 36.52403,43.318863
+      parent: 2
+  - uid: 3987
+    components:
+    - type: Transform
+      pos: 36.52403,43.318863
+      parent: 2
+  - uid: 3988
+    components:
+    - type: Transform
+      pos: 36.52403,43.318863
+      parent: 2
+  - uid: 3989
+    components:
+    - type: Transform
+      pos: 36.52403,43.318863
+      parent: 2
+  - uid: 3990
+    components:
+    - type: Transform
+      pos: 36.52403,43.318863
+      parent: 2
+- proto: civ13_magazine_clip_(7.92x57mm)
+  entities:
+  - uid: 3964
+    components:
+    - type: Transform
+      pos: 113.54649,40.365738
+      parent: 2
+  - uid: 3965
+    components:
+    - type: Transform
+      pos: 113.48399,40.396988
+      parent: 2
+  - uid: 3966
+    components:
+    - type: Transform
+      pos: 113.48399,40.396988
+      parent: 2
+  - uid: 3967
+    components:
+    - type: Transform
+      pos: 113.48399,40.396988
+      parent: 2
+  - uid: 3968
+    components:
+    - type: Transform
+      pos: 113.48399,40.396988
+      parent: 2
+  - uid: 3969
+    components:
+    - type: Transform
+      pos: 113.48399,40.396988
+      parent: 2
+  - uid: 3970
+    components:
+    - type: Transform
+      pos: 113.48399,40.396988
+      parent: 2
+  - uid: 3971
+    components:
+    - type: Transform
+      pos: 113.48399,40.396988
+      parent: 2
+  - uid: 3972
+    components:
+    - type: Transform
+      pos: 113.48399,40.396988
+      parent: 2
+  - uid: 3973
+    components:
+    - type: Transform
+      pos: 113.48399,40.396988
+      parent: 2
+- proto: civ13_magazine_mp40_(9x19mm)
+  entities:
+  - uid: 3957
+    components:
+    - type: Transform
+      pos: 113.60899,43.213223
+      parent: 2
+  - uid: 3960
+    components:
+    - type: Transform
+      pos: 113.46837,43.338223
+      parent: 2
+  - uid: 3961
+    components:
+    - type: Transform
+      pos: 113.32774,43.463223
+      parent: 2
+  - uid: 3962
+    components:
+    - type: Transform
+      pos: 113.32774,43.463223
+      parent: 2
+  - uid: 3963
+    components:
+    - type: Transform
+      pos: 113.32774,43.463223
+      parent: 2
+- proto: civ13_magazine_PPSh_41_drum_magazine_(7.62x25mm)
+  entities:
+  - uid: 3976
+    components:
+    - type: Transform
+      pos: 37.539654,43.475113
+      parent: 2
+  - uid: 3977
+    components:
+    - type: Transform
+      pos: 37.539654,43.459488
+      parent: 2
+  - uid: 3978
+    components:
+    - type: Transform
+      pos: 37.539654,43.459488
+      parent: 2
+  - uid: 3979
+    components:
+    - type: Transform
+      pos: 37.539654,43.459488
+      parent: 2
+  - uid: 3980
+    components:
+    - type: Transform
+      pos: 37.539654,43.459488
+      parent: 2
 - proto: civ13_sword_longsword
   entities:
   - uid: 3875
@@ -3236,6 +3397,11 @@ entities:
       parent: 2
 - proto: CrateWood
   entities:
+  - uid: 2206
+    components:
+    - type: Transform
+      pos: 113.5,40.5
+      parent: 2
   - uid: 3413
     components:
     - type: Transform
@@ -3246,6 +3412,21 @@ entities:
     - type: Transform
       pos: 89.5,32.5
       parent: 2
+  - uid: 3837
+    components:
+    - type: Transform
+      pos: 113.5,43.5
+      parent: 2
+  - uid: 3974
+    components:
+    - type: Transform
+      pos: 36.5,43.5
+      parent: 2
+  - uid: 3975
+    components:
+    - type: Transform
+      pos: 37.5,43.5
+      parent: 2
 - proto: CrateWoodArrows
   entities:
   - uid: 3835
@@ -3258,15 +3439,37 @@ entities:
     - type: Transform
       pos: 36.5,38.5
       parent: 2
-  - uid: 3837
+- proto: CrateWoodBarbedwire
+  entities:
+  - uid: 3947
     components:
     - type: Transform
-      pos: 113.5,43.5
+      pos: 34.5,36.5
       parent: 2
-  - uid: 3838
+  - uid: 3948
     components:
     - type: Transform
-      pos: 112.5,39.5
+      pos: 34.5,37.5
+      parent: 2
+  - uid: 3949
+    components:
+    - type: Transform
+      pos: 34.5,38.5
+      parent: 2
+  - uid: 3950
+    components:
+    - type: Transform
+      pos: 114.5,38.5
+      parent: 2
+  - uid: 3951
+    components:
+    - type: Transform
+      pos: 114.5,39.5
+      parent: 2
+  - uid: 3952
+    components:
+    - type: Transform
+      pos: 114.5,37.5
       parent: 2
 - proto: CrateWoodenGrave
   entities:
@@ -3285,6 +3488,68 @@ entities:
     - type: Transform
       pos: 86.5,48.5
       parent: 2
+- proto: CrateWoodSandbags
+  entities:
+  - uid: 3889
+    components:
+    - type: Transform
+      pos: 34.5,45.5
+      parent: 2
+  - uid: 3942
+    components:
+    - type: Transform
+      pos: 35.5,45.5
+      parent: 2
+  - uid: 3943
+    components:
+    - type: Transform
+      pos: 35.5,46.5
+      parent: 2
+  - uid: 3944
+    components:
+    - type: Transform
+      pos: 34.5,46.5
+      parent: 2
+  - uid: 3945
+    components:
+    - type: Transform
+      pos: 34.5,47.5
+      parent: 2
+  - uid: 3946
+    components:
+    - type: Transform
+      pos: 35.5,47.5
+      parent: 2
+  - uid: 3953
+    components:
+    - type: Transform
+      pos: 116.5,46.5
+      parent: 2
+  - uid: 3954
+    components:
+    - type: Transform
+      pos: 116.5,45.5
+      parent: 2
+  - uid: 3955
+    components:
+    - type: Transform
+      pos: 116.5,44.5
+      parent: 2
+  - uid: 3956
+    components:
+    - type: Transform
+      pos: 117.5,46.5
+      parent: 2
+  - uid: 3958
+    components:
+    - type: Transform
+      pos: 117.5,45.5
+      parent: 2
+  - uid: 3959
+    components:
+    - type: Transform
+      pos: 117.5,44.5
+      parent: 2
 - proto: CrenelatedWall
   entities:
   - uid: 1077
@@ -10530,247 +10795,247 @@ entities:
       parent: 2
 - proto: MarkerGracewallGermanyWW2
   entities:
-  - uid: 3877
+  - uid: 3838
     components:
     - type: Transform
-      pos: 44.5,71.5
+      pos: 52.5,70.5
       parent: 2
-  - uid: 3902
+  - uid: 3877
     components:
     - type: Transform
-      pos: 44.5,2.5
+      pos: 52.5,34.5
       parent: 2
-  - uid: 3903
+  - uid: 3878
     components:
     - type: Transform
-      pos: 44.5,5.5
+      pos: 52.5,31.5
       parent: 2
-  - uid: 3904
+  - uid: 3879
     components:
     - type: Transform
-      pos: 44.5,8.5
+      pos: 52.5,28.5
       parent: 2
-  - uid: 3905
+  - uid: 3880
     components:
     - type: Transform
-      pos: 44.5,11.5
+      pos: 52.5,25.5
       parent: 2
-  - uid: 3906
+  - uid: 3881
     components:
     - type: Transform
-      pos: 44.5,14.5
+      pos: 52.5,22.5
       parent: 2
-  - uid: 3907
+  - uid: 3882
     components:
     - type: Transform
-      pos: 44.5,17.5
+      pos: 52.5,19.5
       parent: 2
-  - uid: 3908
+  - uid: 3883
     components:
     - type: Transform
-      pos: 44.5,20.5
+      pos: 52.5,16.5
       parent: 2
-  - uid: 3909
+  - uid: 3884
     components:
     - type: Transform
-      pos: 44.5,23.5
+      pos: 52.5,13.5
       parent: 2
-  - uid: 3910
+  - uid: 3885
     components:
     - type: Transform
-      pos: 44.5,26.5
+      pos: 52.5,7.5
       parent: 2
-  - uid: 3911
+  - uid: 3886
     components:
     - type: Transform
-      pos: 44.5,29.5
+      pos: 52.5,10.5
       parent: 2
-  - uid: 3912
+  - uid: 3887
     components:
     - type: Transform
-      pos: 44.5,32.5
+      pos: 52.5,4.5
       parent: 2
-  - uid: 3913
+  - uid: 3888
     components:
     - type: Transform
-      pos: 44.5,35.5
+      pos: 52.5,1.5
       parent: 2
-  - uid: 3914
+  - uid: 3890
     components:
     - type: Transform
-      pos: 44.5,38.5
+      pos: 52.5,40.5
       parent: 2
-  - uid: 3915
+  - uid: 3891
     components:
     - type: Transform
-      pos: 44.5,41.5
+      pos: 52.5,43.5
       parent: 2
-  - uid: 3916
+  - uid: 3892
     components:
     - type: Transform
-      pos: 44.5,44.5
+      pos: 52.5,46.5
       parent: 2
-  - uid: 3917
+  - uid: 3893
     components:
     - type: Transform
-      pos: 44.5,47.5
+      pos: 52.5,49.5
       parent: 2
-  - uid: 3918
+  - uid: 3894
     components:
     - type: Transform
-      pos: 44.5,50.5
+      pos: 52.5,52.5
       parent: 2
-  - uid: 3919
+  - uid: 3895
     components:
     - type: Transform
-      pos: 44.5,53.5
+      pos: 52.5,55.5
       parent: 2
-  - uid: 3920
+  - uid: 3896
     components:
     - type: Transform
-      pos: 44.5,56.5
+      pos: 52.5,58.5
       parent: 2
-  - uid: 3921
+  - uid: 3897
     components:
     - type: Transform
-      pos: 44.5,59.5
+      pos: 52.5,61.5
       parent: 2
-  - uid: 3922
+  - uid: 3898
     components:
     - type: Transform
-      pos: 44.5,62.5
+      pos: 52.5,67.5
       parent: 2
-  - uid: 3923
+  - uid: 3899
     components:
     - type: Transform
-      pos: 44.5,65.5
+      pos: 52.5,64.5
       parent: 2
   - uid: 3924
     components:
     - type: Transform
-      pos: 44.5,68.5
+      pos: 52.5,37.5
       parent: 2
 - proto: MarkerGracewallSovietWW2
   entities:
-  - uid: 3878
+  - uid: 3900
     components:
     - type: Transform
-      pos: 104.5,67.5
+      pos: 97.5,42.5
       parent: 2
-  - uid: 3879
+  - uid: 3901
     components:
     - type: Transform
-      pos: 104.5,70.5
+      pos: 97.5,45.5
       parent: 2
-  - uid: 3880
+  - uid: 3902
     components:
     - type: Transform
-      pos: 104.5,64.5
+      pos: 97.5,51.5
       parent: 2
-  - uid: 3881
+  - uid: 3903
     components:
     - type: Transform
-      pos: 104.5,61.5
+      pos: 97.5,54.5
       parent: 2
-  - uid: 3882
+  - uid: 3904
     components:
     - type: Transform
-      pos: 104.5,58.5
+      pos: 97.5,57.5
       parent: 2
-  - uid: 3883
+  - uid: 3905
     components:
     - type: Transform
-      pos: 104.5,55.5
+      pos: 97.5,60.5
       parent: 2
-  - uid: 3884
+  - uid: 3906
     components:
     - type: Transform
-      pos: 104.5,52.5
+      pos: 97.5,63.5
       parent: 2
-  - uid: 3885
+  - uid: 3907
     components:
     - type: Transform
-      pos: 104.5,49.5
+      pos: 97.5,66.5
       parent: 2
-  - uid: 3886
+  - uid: 3908
     components:
     - type: Transform
-      pos: 104.5,46.5
+      pos: 97.5,69.5
       parent: 2
-  - uid: 3887
+  - uid: 3909
     components:
     - type: Transform
-      pos: 104.5,43.5
+      pos: 97.5,48.5
       parent: 2
-  - uid: 3888
+  - uid: 3910
     components:
     - type: Transform
-      pos: 104.5,40.5
+      pos: 97.5,39.5
       parent: 2
-  - uid: 3889
+  - uid: 3911
     components:
     - type: Transform
-      pos: 104.5,37.5
+      pos: 97.5,36.5
       parent: 2
-  - uid: 3890
+  - uid: 3912
     components:
     - type: Transform
-      pos: 104.5,34.5
+      pos: 97.5,33.5
       parent: 2
-  - uid: 3891
+  - uid: 3913
     components:
     - type: Transform
-      pos: 104.5,31.5
+      pos: 97.5,30.5
       parent: 2
-  - uid: 3892
+  - uid: 3914
     components:
     - type: Transform
-      pos: 104.5,28.5
+      pos: 97.5,27.5
       parent: 2
-  - uid: 3893
+  - uid: 3915
     components:
     - type: Transform
-      pos: 104.5,25.5
+      pos: 97.5,24.5
       parent: 2
-  - uid: 3894
+  - uid: 3916
     components:
     - type: Transform
-      pos: 104.5,22.5
+      pos: 97.5,21.5
       parent: 2
-  - uid: 3895
+  - uid: 3917
     components:
     - type: Transform
-      pos: 104.5,19.5
+      pos: 97.5,18.5
       parent: 2
-  - uid: 3896
+  - uid: 3918
     components:
     - type: Transform
-      pos: 104.5,16.5
+      pos: 97.5,15.5
       parent: 2
-  - uid: 3897
+  - uid: 3919
     components:
     - type: Transform
-      pos: 104.5,13.5
+      pos: 97.5,12.5
       parent: 2
-  - uid: 3898
+  - uid: 3920
     components:
     - type: Transform
-      pos: 104.5,10.5
+      pos: 97.5,9.5
       parent: 2
-  - uid: 3899
+  - uid: 3921
     components:
     - type: Transform
-      pos: 104.5,7.5
+      pos: 97.5,6.5
       parent: 2
-  - uid: 3900
+  - uid: 3922
     components:
     - type: Transform
-      pos: 104.5,4.5
+      pos: 97.5,3.5
       parent: 2
-  - uid: 3901
+  - uid: 3923
     components:
     - type: Transform
-      pos: 104.5,1.5
+      pos: 97.5,0.5
       parent: 2
 - proto: MarkerKOTHCampWW2
   entities:
@@ -12708,11 +12973,6 @@ entities:
     - type: Transform
       pos: 28,40
       parent: 2
-  - uid: 2206
-    components:
-    - type: Transform
-      pos: 45,41
-      parent: 2
   - uid: 2207
     components:
     - type: Transform

+ 65 - 25
Resources/Maps/civ/tdm/opushka.yml

@@ -4,8 +4,8 @@ meta:
   engineVersion: 251.0.0
   forkId: ""
   forkVersion: ""
-  time: 05/19/2025 18:35:10
-  entityCount: 1206
+  time: 05/20/2025 22:13:11
+  entityCount: 1213
 maps:
 - 1
 grids:
@@ -38,7 +38,10 @@ entities:
     - type: Broadphase
     - type: OccluderTree
     - type: CivResearch
-      researchLevel: 19.284668
+      isTDM: True
+      maxResearch: 600
+      researchLevel: 600
+      researchEnabled: False
     - type: FTLDestination
   - uid: 2
     components:
@@ -3541,69 +3544,106 @@ entities:
       removedMasks: 20
     - type: PlaceableSurface
       isPlaceable: True
-- proto: Dresser
+- proto: CrateWoodBarbedwire
   entities:
-  - uid: 280
+  - uid: 1140
     components:
     - type: Transform
-      pos: 22.5,14.5
+      pos: -30.5,19.5
+      parent: 2
+  - uid: 1141
+    components:
+    - type: Transform
+      pos: -30.5,18.5
+      parent: 2
+  - uid: 1142
+    components:
+    - type: Transform
+      pos: -30.5,17.5
+      parent: 2
+  - uid: 1143
+    components:
+    - type: Transform
+      pos: 77.5,18.5
+      parent: 2
+  - uid: 1144
+    components:
+    - type: Transform
+      pos: 77.5,17.5
       parent: 2
-- proto: FlashlightLantern
+  - uid: 1207
+    components:
+    - type: Transform
+      pos: 77.5,19.5
+      parent: 2
+- proto: CrateWoodSandbags
   entities:
   - uid: 1134
     components:
     - type: Transform
-      pos: -24.639353,18.287933
+      pos: -30.5,22.5
       parent: 2
   - uid: 1135
     components:
     - type: Transform
-      pos: -24.561228,18.131683
+      pos: -30.5,23.5
       parent: 2
   - uid: 1136
     components:
     - type: Transform
-      pos: -24.467478,17.694183
+      pos: -30.5,24.5
       parent: 2
   - uid: 1137
     components:
     - type: Transform
-      pos: -24.467478,17.616058
+      pos: -31.5,24.5
       parent: 2
   - uid: 1138
     components:
     - type: Transform
-      pos: -24.670603,17.444183
+      pos: -31.5,23.5
       parent: 2
   - uid: 1139
     components:
     - type: Transform
-      pos: 75.33335,22.680456
+      pos: -31.5,22.5
       parent: 2
-  - uid: 1140
+  - uid: 1208
     components:
     - type: Transform
-      pos: 75.473976,22.571081
+      pos: 77.5,24.5
       parent: 2
-  - uid: 1141
+  - uid: 1209
     components:
     - type: Transform
-      pos: 75.598976,22.039831
+      pos: 77.5,23.5
       parent: 2
-  - uid: 1142
+  - uid: 1210
     components:
     - type: Transform
-      pos: 75.58335,19.883934
+      pos: 77.5,22.5
       parent: 2
-  - uid: 1143
+  - uid: 1211
     components:
     - type: Transform
-      pos: 75.52085,19.555809
+      pos: 78.5,22.5
       parent: 2
-  - uid: 1144
+  - uid: 1212
     components:
     - type: Transform
-      pos: 75.2396,19.102684
+      pos: 78.5,23.5
+      parent: 2
+  - uid: 1213
+    components:
+    - type: Transform
+      pos: 78.5,24.5
+      parent: 2
+- proto: Dresser
+  entities:
+  - uid: 280
+    components:
+    - type: Transform
+      pos: 22.5,14.5
       parent: 2
 - proto: FloraTreeStump
   entities:
@@ -8050,7 +8090,7 @@ entities:
       pos: 21.5,24.5
       parent: 2
     - type: Door
-      secondsUntilStateChange: -11129.497
+      secondsUntilStateChange: -11252.765
       state: Opening
     - type: Godmode
       oldDamage: {}
@@ -8060,7 +8100,7 @@ entities:
       pos: 23.5,17.5
       parent: 2
     - type: Door
-      secondsUntilStateChange: -14222.212
+      secondsUntilStateChange: -14345.4795
       state: Opening
     - type: Godmode
       oldDamage: {}

+ 0 - 60
Resources/Prototypes/Catalog/Cargo/cargo_medical.yml

@@ -28,66 +28,6 @@
   category: cargoproduct-category-name-medical
   group: market
 
-- type: cargoProduct
-  id: EmergencyBurnKit
-  icon:
-    sprite: Objects/Specific/Medical/firstaidkits.rsi
-    state: burnkit
-  product: CrateEmergencyBurnKit
-  cost: 700
-  category: cargoproduct-category-name-medical
-  group: market
-
-- type: cargoProduct
-  id: EmergencyToxinKit
-  icon:
-    sprite: Objects/Specific/Medical/firstaidkits.rsi
-    state: toxinkit
-  product: CrateEmergencyToxinKit
-  cost: 600
-  category: cargoproduct-category-name-medical
-  group: market
-
-- type: cargoProduct
-  id: EmergencyO2Kit
-  icon:
-    sprite: Objects/Specific/Medical/firstaidkits.rsi
-    state: o2kit
-  product: CrateEmergencyO2Kit
-  cost: 600
-  category: cargoproduct-category-name-medical
-  group: market
-
-- type: cargoProduct
-  id: EmergencyBruteKit
-  icon:
-    sprite: Objects/Specific/Medical/firstaidkits.rsi
-    state: brutekit
-  product: CrateEmergencyBruteKit
-  cost: 600
-  category: cargoproduct-category-name-medical
-  group: market
-
-- type: cargoProduct
-  id: EmergencyAdvancedKit
-  icon:
-    sprite: Objects/Specific/Medical/firstaidkits.rsi
-    state: advkit
-  product: CrateEmergencyAdvancedKit
-  cost: 1200
-  category: cargoproduct-category-name-medical
-  group: market
-
-- type: cargoProduct
-  id: EmergencyRadiationKit
-  icon:
-    sprite: Objects/Specific/Medical/firstaidkits.rsi
-    state: radkit
-  product: CrateEmergencyRadiationKit
-  cost: 600
-  category: cargoproduct-category-name-medical
-  group: market
-
 - type: cargoProduct
   id: MedicalBodybags
   icon:

+ 0 - 10
Resources/Prototypes/Catalog/Cargo/cargo_service.yml

@@ -178,16 +178,6 @@
   category: cargoproduct-category-name-service
   group: market
 
-- type: cargoProduct
-  id: JanitorExplosive
-  icon:
-    sprite: Clothing/Head/Helmets/janitor_bombsuit.rsi
-    state: icon
-  product: ClosetJanitorBombFilled
-  cost: 1000
-  category: cargoproduct-category-name-service
-  group: market
-
 - type: cargoProduct
   id: ServiceJanitorTrolley
   icon:

+ 0 - 269
Resources/Prototypes/Catalog/Cargo/cargo_vending.yml

@@ -1,269 +0,0 @@
-# If you've arrived here after a failed NoCargoOrderArbitrage test, it's likely
-# because the product in question contains a restock box which links to a
-# vending machine inventory that has had items added to it recently and caused
-# its calculated price to exceed the cost below.
-#
-# The costs will need to be kept in line with the inventory of the respective
-# vending machines. An extra hundred or two profit margin should be fine.
-
-- type: cargoProduct
-  id: CrateVendingMachineRestockBooze
-  icon:
-    sprite: Objects/Specific/Service/vending_machine_restock.rsi
-    state: base
-  product: CrateVendingMachineRestockBoozeFilled
-  cost: 3500
-  category: cargoproduct-category-name-service
-  group: market
-
-- type: cargoProduct
-  id: CrateVendingMachineRestockChefvend
-  name: ChefVend restock crate
-  icon:
-    sprite: Objects/Specific/Service/vending_machine_restock.rsi
-    state: base
-  product: CrateVendingMachineRestockChefvendFilled
-  cost: 680
-  category: cargoproduct-category-name-service
-  group: market
-
-- type: cargoProduct
-  id: CrateVendingMachineRestockClothes
-  icon:
-    sprite: Objects/Specific/Service/vending_machine_restock.rsi
-    state: base
-  product: CrateVendingMachineRestockClothesFilled
-  cost: 2440
-  category: cargoproduct-category-name-service
-  group: market
-
-- type: cargoProduct
-  id: CrateVendingMachineRestockAutoDrobe
-  icon:
-    sprite: Objects/Specific/Service/vending_machine_restock.rsi
-    state: base
-  product: CrateVendingMachineRestockAutoDrobeFilled
-  cost: 2500
-  category: cargoproduct-category-name-service
-  group: market
-
-- type: cargoProduct
-  id: CrateVendingMachineRestockDinnerware
-  icon:
-    sprite: Objects/Specific/Service/vending_machine_restock.rsi
-    state: base
-  product: CrateVendingMachineRestockDinnerwareFilled
-  cost: 2000
-  category: cargoproduct-category-name-service
-  group: market
-
-- type: cargoProduct
-  id: CrateVendingMachineRestockCondimentStation
-  name: condiment station restock crate
-  icon:
-    sprite: Objects/Specific/Service/vending_machine_restock.rsi
-    state: base
-  product: CrateVendingMachineRestockCondimentStationFilled
-  cost: 300
-  category: cargoproduct-category-name-service
-  group: market
-
-- type: cargoProduct
-  id: CrateVendingMachineRestockEngineering
-  icon:
-    sprite: Objects/Specific/Service/vending_machine_restock.rsi
-    state: base
-  product: CrateVendingMachineRestockEngineeringFilled
-  cost: 3200
-  category: cargoproduct-category-name-engineering
-  group: market
-
-- type: cargoProduct
-  id: CrateVendingMachineRestockGames
-  icon:
-    sprite: Objects/Specific/Service/vending_machine_restock.rsi
-    state: base
-  product: CrateVendingMachineRestockGamesFilled
-  cost: 750
-  category: cargoproduct-category-name-service
-  group: market
-
-- type: cargoProduct
-  id: CrateVendingMachineRestockHotDrinks
-  icon:
-    sprite: Objects/Specific/Service/vending_machine_restock.rsi
-    state: base
-  product: CrateVendingMachineRestockHotDrinksFilled
-  cost: 1200
-  category: cargoproduct-category-name-service
-  group: market
-
-- type: cargoProduct
-  id: CrateVendingMachineRestockMedical
-  icon:
-    sprite: Objects/Specific/Service/vending_machine_restock.rsi
-    state: base
-  product: CrateVendingMachineRestockMedicalFilled
-  cost: 1750
-  category: cargoproduct-category-name-medical
-  group: market
-
-- type: cargoProduct
-  id: CrateVendingMachineRestockChemVend
-  icon:
-    sprite: Objects/Specific/Service/vending_machine_restock.rsi
-    state: base
-  product: CrateVendingMachineRestockChemVendFilled
-  cost: 3820
-  category: cargoproduct-category-name-medical
-  group: market
-
-- type: cargoProduct
-  id: CrateVendingMachineRestockNutriMax
-  icon:
-    sprite: Objects/Specific/Service/vending_machine_restock.rsi
-    state: base
-  product: CrateVendingMachineRestockNutriMaxFilled
-  cost: 2400
-  category: cargoproduct-category-name-hydroponics
-  group: market
-
-- type: cargoProduct
-  id: CrateVendingMachineRestockPTech
-  icon:
-    sprite: Objects/Specific/Service/vending_machine_restock.rsi
-    state: base
-  product: CrateVendingMachineRestockPTechFilled
-  cost: 1200
-  category: cargoproduct-category-name-service
-  group: market
-
-- type: cargoProduct
-  id: CrateVendingMachineRestockRobustSoftdrinks
-  icon:
-    sprite: Objects/Specific/Service/vending_machine_restock.rsi
-    state: base
-  product: CrateVendingMachineRestockRobustSoftdrinksFilled
-  cost: 1200
-  category: cargoproduct-category-name-service
-  group: market
-
-- type: cargoProduct
-  id: CrateVendingMachineRestockSalvageEquipment
-  icon:
-    sprite: Objects/Specific/Service/vending_machine_restock.rsi
-    state: base
-  product: CrateVendingMachineRestockSalvageEquipmentFilled
-  cost: 1500
-  category: cargoproduct-category-name-engineering
-  group: market
-
-- type: cargoProduct
-  id: CrateVendingMachineRestockSecTech
-  icon:
-    sprite: Objects/Specific/Service/vending_machine_restock.rsi
-    state: base
-  product: CrateVendingMachineRestockSecTechFilled
-  cost: 2200
-  category: cargoproduct-category-name-security
-  group: market
-
-- type: cargoProduct
-  id: CrateVendingMachineRestockSeeds
-  icon:
-    sprite: Objects/Specific/Service/vending_machine_restock.rsi
-    state: base
-  product: CrateVendingMachineRestockSeedsFilled
-  cost: 3600
-  category: cargoproduct-category-name-hydroponics
-  group: market
-
-- type: cargoProduct
-  id: CrateVendingMachineRestockSmokes
-  icon:
-    sprite: Objects/Specific/Service/vending_machine_restock.rsi
-    state: base
-  product: CrateVendingMachineRestockSmokesFilled
-  cost: 1200
-  category: cargoproduct-category-name-service
-  group: market
-
-- type: cargoProduct
-  id: CrateVendingMachineRestockVendomat
-  icon:
-    sprite: Objects/Specific/Service/vending_machine_restock.rsi
-    state: base
-  product: CrateVendingMachineRestockVendomatFilled
-  cost: 1200
-  category: cargoproduct-category-name-service
-  group: market
-
-- type: cargoProduct
-  id: CrateVendingMachineRestockRobotics
-  icon:
-    sprite: Objects/Specific/Service/vending_machine_restock.rsi
-    state: base
-  product: CrateVendingMachineRestockRoboticsFilled
-  cost: 1600
-  category: cargoproduct-category-name-science
-  group: market
-
-- type: cargoProduct
-  id: CrateVendingMachineRestockTankDispenser
-  icon:
-    sprite: Objects/Specific/Service/vending_machine_restock.rsi
-    state: base
-  product: CrateVendingMachineRestockTankDispenserFilled
-  cost: 1000
-  category: cargoproduct-category-name-atmospherics
-  group: market
-
-- type: cargoProduct
-  id: CrateVendingMachineRestockHappyHonk
-  icon:
-    sprite: Objects/Specific/Service/vending_machine_restock.rsi
-    state: base
-  product: CrateVendingMachineRestockHappyHonkFilled
-  cost: 2100
-  category: cargoproduct-category-name-service
-  group: market
-
-- type: cargoProduct
-  id: CrateVendingMachineRestockGetmoreChocolateCorp
-  icon:
-    sprite: Objects/Specific/Service/vending_machine_restock.rsi
-    state: base
-  product: CrateVendingMachineRestockGetmoreChocolateCorpFilled
-  cost: 1200
-  category: cargoproduct-category-name-service
-  group: market
-
-- type: cargoProduct
-  id: CrateVendingMachineRestockChang
-  icon:
-    sprite: Objects/Specific/Service/vending_machine_restock.rsi
-    state: base
-  product: CrateVendingMachineRestockChangFilled
-  cost: 1200
-  category: cargoproduct-category-name-service
-  group: market
-
-- type: cargoProduct
-  id: CrateVendingMachineRestockDiscountDans
-  icon:
-    sprite: Objects/Specific/Service/vending_machine_restock.rsi
-    state: base
-  product: CrateVendingMachineRestockDiscountDansFilled
-  cost: 1200
-  category: cargoproduct-category-name-service
-  group: market
-
-- type: cargoProduct
-  id: CrateVendingMachineRestockDonut
-  icon:
-    sprite: Objects/Specific/Service/vending_machine_restock.rsi
-    state: base
-  product: CrateVendingMachineRestockDonutFilled
-  cost: 1200
-  category: cargoproduct-category-name-service
-  group: market

+ 0 - 23
Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml

@@ -140,8 +140,6 @@
         - id: ClothingShoesClown
         - id: ClothingMaskClown
         - id: BikeHorn
-        - id: ClownPDA
-        - id: ClothingHeadsetService
 
 - type: entity
   parent: ClothingBackpackDuffelSyndicateBundle
@@ -192,25 +190,6 @@
         - id: C4
           amount: 8
 
-- type: entity
-  parent: ClothingBackpackChameleon
-  id: ClothingBackpackChameleonFill
-  suffix: Fill, Chameleon
-  components:
-    - type: StorageFill
-      contents:
-        - id: ChameleonPDA
-        - id: ClothingUniformJumpsuitChameleon
-        - id: ClothingOuterChameleon
-        - id: ClothingNeckChameleon
-        - id: ClothingMaskGasChameleon
-        - id: ClothingHeadHatChameleon
-        - id: ClothingHandsChameleon
-        - id: ClothingEyesChameleon
-        - id: ClothingHeadsetChameleon
-        - id: ClothingShoesChameleon
-        - id: BarberScissors
-
 - type: entity
   parent: ClothingBackpackDuffelSyndicateBundle
   id: ClothingBackpackDuffelSyndicateEVABundle
@@ -304,8 +283,6 @@
     - type: StorageFill
       contents:
         - id: DefibrillatorSyndicate
-        - id: MedkitCombatFilled
-          amount: 4
         - id: Tourniquet
           amount: 4
         - id: CombatMedipen

+ 0 - 111
Resources/Prototypes/Catalog/Fills/Boxes/general.yml

@@ -116,21 +116,6 @@
         - id: LightTubeCrystalRed
         - id: LightTubeCrystalGreen
 
-- type: entity
-  name: PDA box
-  parent: BoxCardboard
-  id: BoxPDA
-  description: A box of spare PDA microcomputers.
-  components:
-    - type: StorageFill
-      contents:
-        - id: PassengerPDA
-          amount: 4
-    - type: Sprite
-      layers:
-        - state: box
-        - state: pda
-
 - type: entity
   name: ID card box
   parent: BoxCardboard
@@ -290,102 +275,6 @@
         components:
           - EncryptionKey
 
-- type: entity
-  name: cargo encryption key box
-  parent: BoxEncryptionKeyPassenger
-  id: BoxEncryptionKeyCargo
-  components:
-    - type: StorageFill
-      contents:
-        - id: EncryptionKeyCargo
-          amount: 4
-
-- type: entity
-  name: engineering encryption key box
-  parent: BoxEncryptionKeyPassenger
-  id: BoxEncryptionKeyEngineering
-  components:
-    - type: StorageFill
-      contents:
-        - id: EncryptionKeyEngineering
-          amount: 4
-
-- type: entity
-  name: med-sci encryption key box
-  parent: BoxEncryptionKeyPassenger
-  id: BoxEncryptionKeyMedicalScience
-  components:
-    - type: StorageFill
-      contents:
-        - id: EncryptionKeyMedicalScience
-          amount: 4
-
-- type: entity
-  name: medical encryption key box
-  parent: BoxEncryptionKeyPassenger
-  id: BoxEncryptionKeyMedical
-  components:
-    - type: StorageFill
-      contents:
-        - id: EncryptionKeyMedical
-          amount: 4
-
-- type: entity
-  name: robotech encryption key box
-  parent: BoxEncryptionKeyPassenger
-  id: BoxEncryptionKeyRobo
-  components:
-    - type: StorageFill
-      contents:
-        - id: EncryptionKeyRobo
-          amount: 4
-
-- type: entity
-  name: science encryption key box
-  parent: BoxEncryptionKeyPassenger
-  id: BoxEncryptionKeyScience
-  components:
-    - type: StorageFill
-      contents:
-        - id: EncryptionKeyScience
-          amount: 4
-
-- type: entity
-  name: security encryption key box
-  parent: BoxEncryptionKeyPassenger
-  id: BoxEncryptionKeySecurity
-  components:
-    - type: StorageFill
-      contents:
-        - id: EncryptionKeySecurity
-          amount: 4
-
-- type: entity
-  name: service encryption key box
-  parent: BoxEncryptionKeyPassenger
-  id: BoxEncryptionKeyService
-  components:
-    - type: StorageFill
-      contents:
-        - id: EncryptionKeyService
-          amount: 4
-
-- type: entity
-  name: syndicate encryption key box
-  parent: [BoxEncryptionKeyPassenger, BaseSyndicateContraband]
-  id: BoxEncryptionKeySyndie
-  description: Two syndicate encryption keys for the price of one. Miniaturized for ease of use.
-  components:
-    - type: STWeight
-      self: 3
-    - type: Item
-      size: Normal
-    - type: StorageFill
-      contents:
-        - id: EncryptionKeySyndie
-          amount: 2
-    - type: Storage
-
 - type: entity
   name: lead-lined box
   parent: BoxCardboard

+ 52 - 52
Resources/Prototypes/Catalog/Fills/Boxes/syndicate.yml

@@ -1,6 +1,6 @@
 - type: entity
   id: ElectricalDisruptionKit
-  parent: [BoxCardboard, BaseSyndicateContraband]
+  parent: [BoxCardboard]
   name: electrical disruption kit
   suffix: Filled
   components:
@@ -12,76 +12,76 @@
           amount: 1
 
 - type: entity
-  parent: [BoxVial, BaseSyndicateContraband]
+  parent: [BoxVial]
   id: ChemicalSynthesisKit
   name: chemical synthesis kit
   description: A starter kit for the aspiring chemist, includes toxin and vestine for all your criminal needs!
   components:
-  - type: Storage
-    grid:
-    - 0,0,3,2
-  - type: StorageFill
-    contents:
-      - id: Beaker
-        amount: 2
-      - id: Dropper
-      # It would be cool to have special "syndicate" chemical analysis goggles
-      - id: ClothingEyesGlassesChemical
-      - id: VestineChemistryVial
-        amount: 2
-      - id: BaseChemistryEmptyVial
-      - id: SyringeStimulants
+    - type: Storage
+      grid:
+        - 0,0,3,2
+    - type: StorageFill
+      contents:
+        - id: Beaker
+          amount: 2
+        - id: Dropper
+        # It would be cool to have special "syndicate" chemical analysis goggles
+        - id: ClothingEyesGlassesChemical
+        - id: VestineChemistryVial
+          amount: 2
+        - id: BaseChemistryEmptyVial
+        - id: SyringeStimulants
 
 - type: entity
-  parent: [BoxCardboard, BaseSyndicateContraband]
+  parent: [BoxCardboard]
   id: ThrowingKnivesKit
   name: throwing knives kit
   description: A set of 4 syndicate branded throwing knives, perfect for embedding into the body of your victims.
   components:
-  - type: Storage
-    grid:
-    - 0,0,3,1
-  - type: StorageFill
-    contents:
-      - id: ThrowingKnife
-        amount: 4
-  - type: Sprite
-    layers:
-      - state: box_of_doom
-      - state: throwing_knives
+    - type: Storage
+      grid:
+        - 0,0,3,1
+    - type: StorageFill
+      contents:
+        - id: ThrowingKnife
+          amount: 4
+    - type: Sprite
+      layers:
+        - state: box_of_doom
+        - state: throwing_knives
 
 - type: entity
   name: deathrattle implant box
-  parent: [BoxCardboard, BaseSyndicateContraband]
+  parent: [BoxCardboard]
   id: BoxDeathRattleImplants
   description: Six deathrattle implants for the whole squad.
   components:
-  - type: Sprite
-    layers:
-      - state: box_of_doom
-      - state: syringe
-  - type: Storage
-    grid:
-    - 0,0,5,3
-  - type: StorageFill
-    contents:
-      - id: DeathRattleImplanter
-        amount: 6
+    - type: Sprite
+      layers:
+        - state: box_of_doom
+        - state: syringe
+    - type: Storage
+      grid:
+        - 0,0,5,3
+    - type: StorageFill
+      contents:
+        - id: DeathRattleImplanter
+          amount: 6
 
 - type: entity
-  parent: [BoxCardboard, BaseSyndicateContraband]
+  parent: [BoxCardboard]
   id: CombatBakeryKit
   name: combat bakery kit
   description: A kit of clandestine baked weapons.
   components:
-  - type: Sprite
-    layers:
-      - state: box_of_doom
-      - state: france
-  - type: StorageFill
-    contents:
-      - id: WeaponCroissant
-        amount: 2
-      - id: WeaponBaguette
-      - id: SyndicateMicrowaveMachineCircuitboard
-      - id: PaperWrittenCombatBakeryKit
+    - type: Sprite
+      layers:
+        - state: box_of_doom
+        - state: france
+    - type: StorageFill
+      contents:
+        - id: WeaponCroissant
+          amount: 2
+        - id: WeaponBaguette
+        - id: SyndicateMicrowaveMachineCircuitboard
+        - id: PaperWrittenCombatBakeryKit

+ 49 - 49
Resources/Prototypes/Catalog/Fills/Crates/armory.yml

@@ -1,90 +1,90 @@
 - type: entity
   id: CrateArmorySMG
-  parent: [ CrateWeaponSecure, BaseSecurityContraband ]
+  parent: [CrateWeaponSecure]
   name: SMG crate
   description: Contains two high-powered, semiautomatic rifles with four mags. Requires Armory access to open.
   components:
-  - type: StorageFill
-    contents:
-      - id: WeaponSubMachineGunWt550
-        amount: 2
-      - id: MagazinePistolSubMachineGunTopMounted
-        amount: 4
+    - type: StorageFill
+      contents:
+        - id: WeaponSubMachineGunWt550
+          amount: 2
+        - id: MagazinePistolSubMachineGunTopMounted
+          amount: 4
 
 - type: entity
   id: CrateArmoryShotgun
-  parent: [ CrateWeaponSecure, BaseSecurityContraband ]
+  parent: [CrateWeaponSecure]
   name: shotgun crate
   description: For when the enemy absolutely needs to be replaced with lead. Contains two Enforcer Combat Shotguns, and some standard shotgun shells. Requires Armory access to open.
   components:
-  - type: StorageFill
-    contents:
-      - id: WeaponShotgunEnforcer
-        amount: 2
-      - id: BoxLethalshot
-        amount: 4
+    - type: StorageFill
+      contents:
+        - id: WeaponShotgunEnforcer
+          amount: 2
+        - id: BoxLethalshot
+          amount: 4
 
 - type: entity
   id: CrateTrackingImplants
-  parent: [ CrateWeaponSecure, BaseSecurityContraband ]
+  parent: [CrateWeaponSecure]
   name: tracking implants
   description: Contains a handful of tracking implanters. Good for prisoners you'd like to release but still keep track of.
   components:
-  - type: StorageFill
-    contents:
-      - id: TrackingImplanter
-        amount: 5
+    - type: StorageFill
+      contents:
+        - id: TrackingImplanter
+          amount: 5
 
 - type: entity
-  parent: [ CrateWeaponSecure, BaseSecurityContraband ]
+  parent: [CrateWeaponSecure]
   id: CrateTrainingBombs
   name: training bombs
   description: Contains three low-yield training bombs for security to learn defusal and safe ordnance disposal, EOD suit not included. Requires Armory access to open.
   components:
-  - type: StorageFill
-    contents:
-    - id: TrainingBomb
-      amount: 3
+    - type: StorageFill
+      contents:
+        - id: TrainingBomb
+          amount: 3
 
 - type: entity
   id: CrateArmoryLaser
-  parent: [ CrateWeaponSecure, BaseSecurityContraband ]
+  parent: [CrateWeaponSecure]
   name: lasers crate
   description: Contains three standard-issue laser rifles. Requires Armory access to open.
   components:
-  - type: StorageFill
-    contents:
-      - id: WeaponLaserCarbine
-        amount: 3
+    - type: StorageFill
+      contents:
+        - id: WeaponLaserCarbine
+          amount: 3
 
 - type: entity
   id: CrateArmoryPistols
-  parent: [ CrateWeaponSecure, BaseSecurityContraband ]
+  parent: [CrateWeaponSecure]
   name: pistols crate
   description: Contains two standard NT pistols with four mags. Requires Armory access to open.
   components:
-  - type: StorageFill
-    contents:
-    - id: WeaponPistolMk58
-      amount: 2
-    - id: MagazinePistol
-      amount: 4
+    - type: StorageFill
+      contents:
+        - id: WeaponPistolMk58
+          amount: 2
+        - id: MagazinePistol
+          amount: 4
 
 - type: entity
   id: CrateSecurityRiot
-  parent: [ CrateWeaponSecure, BaseSecurityContraband ]
+  parent: [CrateWeaponSecure]
   name: swat crate
   description: Contains two sets of riot armor, helmets, shields, and enforcers loaded with beanbags. Extra ammo is included. Requires Armory access to open.
   components:
-  - type: StorageFill
-    contents:
-    - id: ClothingOuterArmorRiot
-      amount: 2
-    - id: ClothingHeadHelmetRiot
-      amount: 2
-    - id: WeaponShotgunEnforcerRubber
-      amount: 2
-    - id: BoxBeanbag
-      amount: 2
-    - id: RiotShield
-      amount: 2
+    - type: StorageFill
+      contents:
+        - id: ClothingOuterArmorRiot
+          amount: 2
+        - id: ClothingHeadHelmetRiot
+          amount: 2
+        - id: WeaponShotgunEnforcerRubber
+          amount: 2
+        - id: BoxBeanbag
+          amount: 2
+        - id: RiotShield
+          amount: 2

+ 56 - 118
Resources/Prototypes/Catalog/Fills/Crates/medical.yml

@@ -4,17 +4,15 @@
   name: medical supplies crate
   description: Basic medical supplies.
   components:
-  - type: StorageFill
-    contents:
-      - id: MedkitFilled
-        amount: 2
-      - id: Gauze
-        amount: 2
-      - id: Bloodpack
-        amount: 2
-      - id: BoxLatexGloves
-      - id: BoxSterileMask
-      - id: BoxMouthSwab
+    - type: StorageFill
+      contents:
+        - id: Gauze
+          amount: 2
+        - id: Bloodpack
+          amount: 2
+        - id: BoxLatexGloves
+        - id: BoxSterileMask
+        - id: BoxMouthSwab
 
 - type: entity
   id: CrateChemistrySupplies
@@ -22,15 +20,15 @@
   name: chemistry supplies crate
   description: Basic chemistry supplies.
   components:
-  - type: StorageFill
-    contents:
-      - id: BoxSyringe
-      - id: BoxBeaker
-      - id: BoxPillCanister
-      - id: Dropper
-        amount: 2
-      - id: BoxBottle
-        amount: 2
+    - type: StorageFill
+      contents:
+        - id: BoxSyringe
+        - id: BoxBeaker
+        - id: BoxPillCanister
+        - id: Dropper
+          amount: 2
+        - id: BoxBottle
+          amount: 2
 
 - type: entity
   id: CrateChemistryVials
@@ -38,9 +36,9 @@
   name: vial supply crate
   description: Crate filled with a box of vials.
   components:
-  - type: StorageFill
-    contents:
-      - id: BoxVial
+    - type: StorageFill
+      contents:
+        - id: BoxVial
 
 - type: entity
   id: CrateMindShieldImplants
@@ -48,10 +46,10 @@
   name: MindShield implant crate
   description: Crate filled with 3 MindShield implants.
   components:
-  - type: StorageFill
-    contents:
-      - id: MindShieldImplanter
-        amount: 3
+    - type: StorageFill
+      contents:
+        - id: MindShieldImplanter
+          amount: 3
 
 - type: entity
   id: CrateMedicalSurgery
@@ -59,15 +57,15 @@
   name: surgical supplies crate
   description: Surgical instruments.
   components:
-  - type: StorageFill
-    contents:
-      - id: Scalpel
-      - id: Retractor
-      - id: Cautery
-      - id: Drill
-      - id: Saw
-      - id: Hemostat
-      - id: ClothingMaskSterile
+    - type: StorageFill
+      contents:
+        - id: Scalpel
+        - id: Retractor
+        - id: Cautery
+        - id: Drill
+        - id: Saw
+        - id: Hemostat
+        - id: ClothingMaskSterile
 
 - type: entity
   id: CrateMedicalScrubs
@@ -75,76 +73,16 @@
   name: medical scrubs crate
   description: Medical clothings.
   components:
-  - type: StorageFill
-    contents:
-      - id: UniformScrubsColorGreen
-      - id: UniformScrubsColorPurple
-      - id: UniformScrubsColorBlue
-      - id: ClothingHeadHatSurgcapBlue
-      - id: ClothingHeadHatSurgcapPurple
-      - id: ClothingHeadHatSurgcapGreen
-      - id: ClothingMaskSterile
-        amount: 3
-
-- type: entity
-  id: CrateEmergencyBurnKit
-  parent: CrateMedical
-  name: emergency burn kit
-  description: Crate filled with a burn treatment kit.
-  components:
-  - type: StorageFill
-    contents:
-    - id: MedkitBurnFilled
-
-- type: entity
-  id: CrateEmergencyToxinKit
-  parent: CrateMedical
-  name: emergency toxin kit
-  description: Crate filled with a toxin treatment kit.
-  components:
-  - type: StorageFill
-    contents:
-    - id: MedkitToxinFilled
-
-- type: entity
-  id: CrateEmergencyO2Kit
-  parent: CrateMedical
-  name: emergency O2 kit
-  description: Crate filled with an O2 treatment kit.
-  components:
-  - type: StorageFill
-    contents:
-    - id: MedkitOxygenFilled
-
-- type: entity
-  id: CrateEmergencyBruteKit
-  parent: CrateMedical
-  name: emergency brute kit
-  description: Crate filled with a brute treatment kit.
-  components:
-  - type: StorageFill
-    contents:
-    - id: MedkitBruteFilled
-
-- type: entity
-  id: CrateEmergencyAdvancedKit
-  parent: CrateMedical
-  name: emergency advanced kit
-  description: Crate filled with an advanced treatment kit.
-  components:
-  - type: StorageFill
-    contents:
-    - id: MedkitAdvancedFilled
-
-- type: entity
-  id: CrateEmergencyRadiationKit
-  parent: CrateMedical
-  name: emergency radiation kit
-  description: Crate filled with a radiation treatment kit.
-  components:
-  - type: StorageFill
-    contents:
-    - id: MedkitRadiationFilled
+    - type: StorageFill
+      contents:
+        - id: UniformScrubsColorGreen
+        - id: UniformScrubsColorPurple
+        - id: UniformScrubsColorBlue
+        - id: ClothingHeadHatSurgcapBlue
+        - id: ClothingHeadHatSurgcapPurple
+        - id: ClothingHeadHatSurgcapGreen
+        - id: ClothingMaskSterile
+          amount: 3
 
 - type: entity
   id: CrateBodyBags
@@ -152,10 +90,10 @@
   name: body bags crate
   description: Contains ten body bags.
   components:
-  - type: StorageFill
-    contents:
-      - id: BoxBodyBag
-        amount: 2
+    - type: StorageFill
+      contents:
+        - id: BoxBodyBag
+          amount: 2
 
 - type: entity
   id: CrateVirologyBiosuit
@@ -163,11 +101,11 @@
   name: virology bio suit crate
   description: Contains 2 biohazard suits to ensure that no disease will distract you from treating the crew. Requires Medical access to open.
   components:
-  - type: StorageFill
-    contents:
-      - id: ClothingOuterBioVirology
-        amount: 2
-      - id: ClothingHeadHatHoodBioVirology
-        amount: 2
-      - id: ClothingMaskSterile
-        amount: 2
+    - type: StorageFill
+      contents:
+        - id: ClothingOuterBioVirology
+          amount: 2
+        - id: ClothingHeadHatHoodBioVirology
+          amount: 2
+        - id: ClothingMaskSterile
+          amount: 2

+ 0 - 369
Resources/Prototypes/Catalog/Fills/Crates/permaescape.yml

@@ -1,369 +0,0 @@
-- type: entity
-  name: Perma Escape Crate Spawner
-  id: CratePermaEscapeSpawner
-  parent: CrateEmptySpawner
-  components:
-    - type: RandomSpawner
-      prototypes:
-        # Please note any duplicates & alphabetize <3
-        - CrateEngineeringMiniJetpack
-        - CratePermaEscapeBureaucracy
-        - CratePermaEscapeEVA
-        - CratePermaEscapeGiftsFromSyndicate
-        - CratePermaEscapeGun
-        - CratePermaEscapeLights
-        - CratePermaEscapeMerc
-        - CrateServiceCustomSmokable
-        - CrateTrashCartFilled
-        - CratePermaEscapeComs # x2
-        - CratePermaEscapeComs
-        - CratePermaEscapeDigging # x2
-        - CratePermaEscapeDigging
-        - CratePermaEscapeMats #x2
-        - CratePermaEscapeMats
-        - CratePermaEscapeTowercap # x2
-        - CratePermaEscapeTowercap
-        - ClosetMaintenanceFilledRandom # x3
-        - ClosetMaintenanceFilledRandom
-        - ClosetMaintenanceFilledRandom
-      rarePrototypes:
-        - MobTick # These need to be killable by one dude with a shovel.
-      rareChance: .30
-      chance: 1
-      offset: 0.0
-
-- type: entity
-  id: CratePermaEscapeDigging
-  parent: CrateGenericSteel
-  suffix: Digging
-  components:
-    - type: StorageFill
-      contents:
-        - id: Shovel
-        - id: Pickaxe
-          prob: 0.90
-        - id: Pickaxe
-          prob: 0.40
-        - id: Pickaxe
-          prob: 0.10
-        - id: Shovel
-          prob: 0.50
-        - id: Shovel
-          prob: 0.20
-        - id: HydroponicsToolSpade
-          prob: 0.10
-        - id: HydroponicsToolHatchet
-          prob: 0.05
-
-- type: entity
-  id: CratePermaEscapeEVA
-  parent: CrateGenericSteel
-  suffix: EVAs
-  components:
-    - type: StorageFill
-      contents:
-        - id: ClothingHeadHelmetEVALarge
-        - id: ClothingOuterHardsuitEVAPrisoner
-        - id: ClothingHeadHelmetEVALarge
-          prob: 0.80
-        - id: ClothingOuterHardsuitEVAPrisoner
-          prob: 0.80
-        - id: ClothingOuterHardsuitVoidParamed
-          prob: 0.10
-        - id: ClothingOuterRedRacoon
-          prob: 0.10
-        - id: ClothingOuterSanta
-          prob: 0.10
-        - id: ClothingOuterHardsuitSyndicate
-          prob: 0.20
-        - id: EmergencyOxygenTankFilled
-          prob: 0.25
-        - id: EmergencyOxygenTank
-          prob: 0.25
-        - id: OxygenTankFilled
-          prob: 0.05
-
-- type: entity
-  id: CratePermaEscapeGun
-  parent: CrateGenericSteel
-  suffix: Gun
-  components:
-    - type: StorageFill
-      contents:
-        - id: WeaponPistolMk58
-          prob: 0.15
-          orGroup: gun
-        - id: FoamCrossbow
-          prob: 0.10
-          orGroup: gun
-        - id: WeaponRifleFoam
-          prob: 0.05
-          orGroup: gun
-        - id: WeaponPistolFlintlock
-          prob: 0.20
-          orGroup: gun
-        - id: WeaponShotgunBlunderbuss
-          prob: 0.10
-          orGroup: gun
-        - id: WeaponShotgunBlunderbuss
-          prob: 0.15
-          orGroup: gun
-        - id: WeaponRevolverPirate
-          prob: 0.15
-          orGroup: gun
-        - id: WeaponProtoKineticAccelerator
-          prob: 0.20
-          orGroup: gun
-
-- type: entity
-  id: CratePermaEscapeBureaucracy
-  parent: CrateGenericSteel
-  suffix: Writing
-  components:
-    - type: StorageFill
-      contents:
-        - id: RubberStampApproved
-        - id: RubberStampDenied
-        - id: Pen
-        - id: Pen
-        - id: Pen
-        - id: BoxFolderBase
-          orGroup: folderA
-        - id: BoxFolderBlack
-          orGroup: folderA
-        - id: BoxFolderBlue
-          orGroup: folderA
-        - id: BoxFolderGreen
-          orGroup: folderA
-        - id: BoxFolderGrey
-          orGroup: folderA
-        - id: BoxFolderRed
-          orGroup: folderA
-        - id: BoxFolderWhite
-          orGroup: folderA
-        - id: BoxFolderYellow
-          orGroup: folderA
-        - id: BoxFolderBase
-          orGroup: folderB
-        - id: BoxFolderBlack
-          orGroup: folderB
-        - id: BoxFolderBlue
-          orGroup: folderB
-        - id: BoxFolderGreen
-          orGroup: folderB
-        - id: BoxFolderGrey
-          orGroup: folderB
-        - id: BoxFolderRed
-          orGroup: folderB
-        - id: BoxFolderWhite
-          orGroup: folderB
-        - id: BoxFolderYellow
-          orGroup: folderB
-        - id: CrayonBox
-          prob: 0.50
-        - id: CrayonBox
-          prob: 0.10
-        - id: ClearPDA # change to visitor one day.
-          prob: 0.10
-        - id: PersonalAI
-
-- type: entity
-  id: CratePermaEscapeLights
-  parent: CrateGenericSteel
-  suffix: Glowsticks
-  components:
-    - type: StorageFill
-      contents:
-        - id: GlowstickBlue
-          prob: 0.50
-        - id: GlowstickBlue
-          prob: 0.20
-        - id: GlowstickBlue
-          prob: 0.05
-        - id: GlowstickBase
-          prob: 0.50
-        - id: GlowstickBase
-          prob: 0.20
-        - id: GlowstickBase
-          prob: 0.05
-        - id: GlowstickPurple
-          prob: 0.50
-        - id: GlowstickPurple
-          prob: 0.20
-        - id: GlowstickPurple
-          prob: 0.05
-        - id: GlowstickRed
-          prob: 0.50
-        - id: GlowstickRed
-          prob: 0.20
-        - id: GlowstickRed
-          prob: 0.05
-        - id: GlowstickYellow
-          prob: 0.50
-        - id: GlowstickYellow
-          prob: 0.20
-        - id: GlowstickYellow
-          prob: 0.05
-
-- type: entity
-  id: CratePermaEscapeMats
-  parent: CrateGenericSteel
-  suffix: Mats
-  components:
-    - type: StorageFill
-      contents:
-        - id: SheetSteel
-          orGroup: matA
-        - id: PartRodMetal
-          orGroup: matA
-        - id: SheetSteel
-          orGroup: matB
-        - id: PartRodMetal
-          orGroup: matB
-
-- type: entity
-  id: CratePermaEscapeGiftsFromSyndicate
-  parent: CrateGenericSteel
-  suffix: Syndi Gifts
-  components:
-    - type: StorageFill
-      contents:
-        - id: ClothingEyesGlassesOutlawGlasses
-        - id: ClothingHeadHatOutlawHat
-        - id: HappyHonkNukieSnacks
-        # - id: BaseUplinkRadio # too spicy I think.
-        # prob: 0.50
-        # - id: Telecrystal
-        # prob: 0.80
-        # - id: Telecrystal
-        # prob: 0.80
-        # - id: Telecrystal
-        # prob: 0.70
-        # - id: Telecrystal
-        # prob: 0.50
-        # - id: Telecrystal
-        # prob: 0.20
-        # - id: Telecrystal
-        # prob: 0.10
-        # - id: Telecrystal
-        # prob: 0.05
-        # - id: Telecrystal
-        # prob: 0.01
-        # - id: Telecrystal5
-        # prob: 0.01
-        - id: CyberPen
-          prob: 0.10
-        - id: AbominationCube
-          prob: 0.20
-          orGroup: cube
-        - id: SpaceCarpCube
-          prob: 0.20
-          orGroup: cube
-        - id: SyndicateSponge
-          prob: 0.20
-          orGroup: cube
-        - id: MindShieldImplanter
-          prob: 0.20
-        - id: ClothingHandsGlovesConducting # funny
-          prob: 0.30
-        - id: CigPackSyndicate
-          prob: 0.80
-        - id: StimpackMini
-          prob: 0.20
-        - id: StimpackMini
-          prob: 0.10
-        - id: CombatMedipen
-          prob: 0.05
-        - id: MedkitCombatFilled
-          prob: 0.01
-        - id: SoapSyndie
-          prob: 0.15
-        - id: DnaScramblerImplanter
-          prob: 0.005
-
-- type: entity
-  id: CratePermaEscapeMerc
-  parent: CrateGenericSteel
-  suffix: Merc
-  components:
-    - type: StorageFill
-      contents:
-        - id: ClothingUniformJumpsuitMercenary
-        - id: ClothingHeadBandMerc
-          prob: 0.50
-        - id: ClothingHeadHatBeretMerc
-          prob: 0.20
-        - id: ClothingHeadHelmetMerc
-          prob: 0.05
-        - id: ClothingEyesGlassesMercenary
-          prob: 0.20
-        - id: ClothingMaskGasMerc
-          prob: 0.10
-        - id: ClothingHandsGlovesMercFingerless
-          prob: 0.20
-        - id: ClothingHandsMercGlovesCombat
-          prob: 0.05
-        - id: ClothingBackpackMerc
-          prob: 0.50
-        - id: ClothingShoesBootsMerc
-          prob: 0.50
-        - id: ClothingOuterVestWebMerc
-          prob: 0.25
-        - id: ClothingBeltMercWebbing
-          prob: 0.05
-
-- type: entity
-  id: CratePermaEscapeComs
-  parent: CrateGenericSteel
-  suffix: Coms
-  components:
-    - type: StorageFill
-      contents:
-        - id: ClothingHeadsetMining
-          orGroup: coms
-        - id: ClothingHeadsetMining
-          orGroup: coms
-        - id: ClothingHeadsetMining
-          orGroup: coms
-        - id: ClothingHeadsetGrey
-          orGroup: coms
-        - id: ClothingHeadsetScience
-          orGroup: coms
-        - id: ClothingHeadsetService
-          orGroup: coms
-        - id: ClothingHeadsetEngineering
-          orGroup: coms
-        - id: ClothingHeadsetMedical
-          orGroup: coms
-        - id: EncryptionKeyCargo
-          prob: 0.05
-        - id: EncryptionKeyScience
-          prob: 0.05
-        - id: EncryptionKeyService
-          prob: 0.05
-        - id: EncryptionKeyMedical
-          prob: 0.05
-        - id: EncryptionKeyEngineering
-          prob: 0.05
-        - id: EncryptionKeySecurity
-          prob: 0.01
-
-- type: entity
-  id: CratePermaEscapeTowercap
-  parent: CrateGenericSteel
-  suffix: Towercap
-  components:
-    - type: StorageFill
-      contents:
-        - id: TowercapSeeds
-        - id: TowercapSeeds
-          prob: 0.80
-        - id: TowercapSeeds
-          prob: 0.50
-        - id: TowercapSeeds
-          prob: 0.20
-        - id: SteelcapSeeds
-          prob: 0.10
-        - id: SteelLog
-        - id: HydroponicsToolHatchet
-          prob: 0.75

+ 72 - 77
Resources/Prototypes/Catalog/Fills/Crates/salvage.yml

@@ -5,90 +5,85 @@
   suffix: Filled
   parent: CrateGenericSteel
   components:
-  - type: StorageFill
-    contents:
-      - id: ClothingOuterHardsuitSalvage
-      - id: ClothingMaskBreath
-      - id: OxygenTankFilled
-      - id: FireExtinguisher
-      - id: ClothingShoesBootsMag
-      - id: HandHeldMassScanner
-      - id: Pickaxe
-      - id: Welder
-      - id: Wrench
-      - id: Screwdriver
-      - id: Crowbar
-      - id: Wirecutter
-      - id: ClothingBeltUtility
-      - id: OreBag
-      - id: ClothingBeltSalvageWebbing
+    - type: StorageFill
+      contents:
+        - id: ClothingOuterHardsuitSalvage
+        - id: ClothingMaskBreath
+        - id: OxygenTankFilled
+        - id: FireExtinguisher
+        - id: ClothingShoesBootsMag
+        - id: HandHeldMassScanner
+        - id: Pickaxe
+        - id: Welder
+        - id: Wrench
+        - id: Screwdriver
+        - id: Crowbar
+        - id: Wirecutter
+        - id: ClothingBeltUtility
+        - id: OreBag
+        - id: ClothingBeltSalvageWebbing
 
 - type: entity
   id: CrateSalvageAssortedGoodies
   suffix: Filled, Salvage Random
-  categories: [ HideSpawnMenu ] # You should use SalvageMaterialCrateSpawner instead
+  categories: [HideSpawnMenu] # You should use SalvageMaterialCrateSpawner instead
   parent: CrateGenericSteel
   components:
-  - type: StorageFill
-    contents:
+    - type: StorageFill
+      contents:
         # Normal (10%)
-      - id: OxygenTankFilled
-        prob: 0.1
-      - id: SheetPlasma
-        prob: 0.1
-      - id: IngotGold
-        prob: 0.1
-      - id: IngotSilver
-        prob: 0.1
-      - id: SheetPlasma
-        prob: 0.1
-      - id: WelderIndustrialAdvanced
-        prob: 0.1
-      - id: ResearchDisk
-        prob: 0.1
-      - id: SheetUranium
-        prob: 0.1
-        #  - Service
-      - id: CrayonBox
-        prob: 0.1
-        #  - Medical
-      - id: MedkitFilled
-        prob: 0.1
-      - id: BoxSyringe
-        prob: 0.1
-      - id: BoxBeaker
-        prob: 0.1
-        #  - Heh
-      - id: SalvageHumanCorpse
-        prob: 0.1
-        # Interesting (1%)
-        #  - Ammo
-      - id: MagazineBoxMagnum
-        prob: 0.01
-      - id: ResearchDisk10000
-        prob: 0.01
-        # Just no (0.1%)
-        #  - Working guns
-      - id: WeaponRevolverDeckard
-        prob: 0.001
-      - id: WeaponRevolverInspector
-        prob: 0.001
-      - id: ClothingShoesBootsMagBlinding
-        prob: 0.001
-        #  - Skub
-      - id: Skub
-        prob: 0.001
-      - id: ClothingHeadHatCatEars
-        prob: 0.01
-      - id: ClothingHeadHatDogEars
-        prob: 0.01
-        # TRAITOR EQUIPMENT (0.01%)
-      - id: Telecrystal10
-        prob: 0.0001
-      - id: WeaponRevolverPython
-        prob: 0.0001
-      - id: WeaponRevolverMateba
-        prob: 0.0001
+        - id: OxygenTankFilled
+          prob: 0.1
+        - id: SheetPlasma
+          prob: 0.1
+        - id: IngotGold
+          prob: 0.1
+        - id: IngotSilver
+          prob: 0.1
+        - id: SheetPlasma
+          prob: 0.1
+        - id: WelderIndustrialAdvanced
+          prob: 0.1
+        - id: ResearchDisk
+          prob: 0.1
+        - id: SheetUranium
+          prob: 0.1
+          #  - Service
+        - id: CrayonBox
+          prob: 0.1
+          #  - Medical
+        - id: BoxSyringe
+          prob: 0.1
+        - id: BoxBeaker
+          prob: 0.1
+          # Interesting (1%)
+          #  - Ammo
+        - id: MagazineBoxMagnum
+          prob: 0.01
+        - id: ResearchDisk10000
+          prob: 0.01
+          # Just no (0.1%)
+          #  - Working guns
+        - id: WeaponRevolverDeckard
+          prob: 0.001
+        - id: WeaponRevolverInspector
+          prob: 0.001
+        - id: ClothingShoesBootsMagBlinding
+          prob: 0.001
+          #  - Skub
+        - id: Skub
+          prob: 0.001
+        - id: ClothingHeadHatCatEars
+          prob: 0.01
+        - id: ClothingHeadHatDogEars
+          prob: 0.01
+          # TRAITOR EQUIPMENT (0.01%)
+        - id: Telecrystal10
+          prob: 0.0001
+        - id: WeaponRevolverPython
+          prob: 0.0001
+        - id: WeaponRevolverMateba
+          prob: 0.0001
 
 - type: entity
   parent: CrateGenericSteel

+ 0 - 1
Resources/Prototypes/Catalog/Fills/Crates/service.yml

@@ -163,7 +163,6 @@
   components:
     - type: StorageFill
       contents:
-        - id: BoxPDA
         - id: BoxID
 
 - type: entity

+ 0 - 32
Resources/Prototypes/Catalog/Fills/Crates/syndicate.yml

@@ -1,32 +0,0 @@
-- type: entity
-  id: CrateSyndicateSurplusBundle
-  parent: [ CrateSyndicate, StorePresetUplink, BaseSyndicateContraband ]
-  name: Syndicate surplus crate
-  description: Contains 50 telecrystals worth of completely random Syndicate items. It can be useless junk or really good.
-  components:
-    - type: SurplusBundle
-      totalPrice: 50
-
-- type: entity
-  id: CrateCybersunJuggernautBundle
-  suffix: Filled
-  parent: CrateSyndicate
-  name: Cybersun juggernaut bundle
-  description: Contains everything except a big gun to go postal.
-  components:
-  - type: StorageFill
-    contents:
-      - id: ClothingOuterHardsuitJuggernaut
-      - id: ClothingMaskGasSyndicate
-      - id: ClothingHandsGlovesCombat
-      - id: DoubleEmergencyOxygenTankFilled
-      - id: DoubleEmergencyNitrogenTankFilled
-
-- type: entity
-  id: CrateSyndicateSuperSurplusBundle
-  parent: [ CrateSyndicate, StorePresetUplink, BaseSyndicateContraband ]
-  name: Syndicate super surplus crate
-  description: Contains 125 telecrystals worth of completely random Syndicate items.
-  components:
-    - type: SurplusBundle
-      totalPrice: 125

+ 21 - 226
Resources/Prototypes/Catalog/Fills/Crates/vending.yml

@@ -4,39 +4,9 @@
   name: Booze-O-Mat restock crate
   description: Contains a restock box for the Booze-O-Mat.
   components:
-  - type: StorageFill
-    contents:
-      - id: VendingMachineRestockBooze
-
-- type: entity
-  id: CrateVendingMachineRestockChefvendFilled
-  parent: CratePlastic
-  name: ChefVend restock crate
-  description: Contains a restock box for the ChefVend.
-  components:
-  - type: StorageFill
-    contents:
-      - id: VendingMachineRestockChefvend
-
-- type: entity
-  id: CrateVendingMachineRestockClothesFilled
-  parent: CratePlastic
-  name: clothing restock crate
-  description: Contains a restock box for the clothes vending machines.
-  components:
-  - type: StorageFill
-    contents:
-      - id: VendingMachineRestockClothes
-
-- type: entity
-  id: CrateVendingMachineRestockAutoDrobeFilled
-  parent: CratePlastic
-  name: AutoDrobe restock crate
-  description: Contains a restock box for the AutoDrobe.
-  components:
-  - type: StorageFill
-    contents:
-      - id: VendingMachineRestockCostumes
+    - type: StorageFill
+      contents:
+        - id: VendingMachineRestockBooze
 
 - type: entity
   id: CrateVendingMachineRestockCondimentStationFilled
@@ -44,70 +14,9 @@
   name: condiment station restock crate
   description: Contains a restock box for the condiment station.
   components:
-  - type: StorageFill
-    contents:
-      - id: VendingMachineRestockCondimentStation
-
-- type: entity
-  id: CrateVendingMachineRestockDinnerwareFilled
-  parent: CratePlastic
-  name: Plasteel Chef restock crate
-  description: Contains a restock box for the Plasteel Chef vending machine.
-  components:
-  - type: StorageFill
-    contents:
-      - id: VendingMachineRestockDinnerware
-
-- type: entity
-  id: CrateVendingMachineRestockEngineeringFilled
-  parent: CrateEngineeringSecure
-  name: EngiVend restock crate
-  description: Contains a restock box for the EngiVend. Also supports the YouTool.
-  components:
-  - type: StorageFill
-    contents:
-      - id: VendingMachineRestockEngineering
-
-- type: entity
-  id: CrateVendingMachineRestockGamesFilled
-  parent: CratePlastic
-  name: Good Clean Fun restock crate
-  description: Contains a restock box for the Good Clean Fun vending machine.
-  components:
-  - type: StorageFill
-    contents:
-      - id: VendingMachineRestockGames
-
-- type: entity
-  id: CrateVendingMachineRestockHotDrinksFilled
-  parent: CratePlastic
-  name: Solar's Best restock crate
-  description: Contains two restock boxes for Solar's Best Hot Drinks vending machine.
-  components:
-  - type: StorageFill
-    contents:
-      - id: VendingMachineRestockHotDrinks
-        amount: 2
-
-- type: entity
-  id: CrateVendingMachineRestockMedicalFilled
-  parent: CrateMedicalSecure
-  name: NanoMed restock crate
-  description: Contains a restock box, compatible with the NanoMed and NanoMedPlus.
-  components:
-  - type: StorageFill
-    contents:
-      - id: VendingMachineRestockMedical
-
-- type: entity
-  id: CrateVendingMachineRestockChemVendFilled
-  parent: CrateMedicalSecure
-  name: ChemVend restock crate
-  description: Contains a restock box for the ChemVend.
-  components:
-  - type: StorageFill
-    contents:
-      - id: VendingMachineRestockChemVend
+    - type: StorageFill
+      contents:
+        - id: VendingMachineRestockCondimentStation
 
 - type: entity
   id: CrateVendingMachineRestockNutriMaxFilled
@@ -115,19 +24,9 @@
   name: NutriMax restock crate
   description: Contains a restock box for the NutriMax vending machine.
   components:
-  - type: StorageFill
-    contents:
-      - id: VendingMachineRestockNutriMax
-
-- type: entity
-  id: CrateVendingMachineRestockPTechFilled
-  parent: CratePlastic
-  name: PTech restock crate
-  description: Contains a restock box for the PTech bureaucracy dispenser.
-  components:
-  - type: StorageFill
-    contents:
-      - id: VendingMachineRestockPTech
+    - type: StorageFill
+      contents:
+        - id: VendingMachineRestockNutriMax
 
 - type: entity
   id: CrateVendingMachineRestockRobustSoftdrinksFilled
@@ -135,40 +34,10 @@
   name: beverage vendor restock crate
   description: Contains restock boxes for beverage vending machines.
   components:
-  - type: StorageFill
-    contents:
-      - id: VendingMachineRestockRobustSoftdrinks
-        amount: 2
-
-- type: entity
-  id: CrateVendingMachineRestockSalvageEquipmentFilled
-  parent: CrateGenericSteel
-  name: Salvage restock crate
-  description: Contains a restock box for the salvage vendor.
-  components:
-  - type: StorageFill
-    contents:
-      - id: VendingMachineRestockSalvageEquipment
-
-- type: entity
-  id: CrateVendingMachineRestockSecTechFilled
-  parent: CrateSecgear
-  name: SecTech restock crate
-  description: Contains a restock box for the SecTech vending machine.
-  components:
-  - type: StorageFill
-    contents:
-      - id: VendingMachineRestockSecTech
-
-- type: entity
-  id: CrateVendingMachineRestockSeedsFilled
-  parent: CrateHydroSecure
-  name: MegaSeed restock crate
-  description: Contains a restock box for the MegaSeed vending machine.
-  components:
-  - type: StorageFill
-    contents:
-      - id: VendingMachineRestockSeeds
+    - type: StorageFill
+      contents:
+        - id: VendingMachineRestockRobustSoftdrinks
+          amount: 2
 
 - type: entity
   id: CrateVendingMachineRestockSmokesFilled
@@ -176,84 +45,10 @@
   name: ShadyCigs restock crate
   description: Contains two restock boxes for the ShadyCigs vending machine.
   components:
-  - type: StorageFill
-    contents:
-      - id: VendingMachineRestockSmokes
-        amount: 2
-
-- type: entity
-  id: CrateVendingMachineRestockVendomatFilled
-  parent: CratePlastic
-  name: Vendomat restock crate
-  description: Contains a restock box for a Vendomat vending machine.
-  components:
-  - type: StorageFill
-    contents:
-    - id: VendingMachineRestockVendomat
-
-- type: entity
-  id: CrateVendingMachineRestockRoboticsFilled
-  parent: CrateScienceSecure
-  name: Robotech Deluxe restock crate
-  description: Contains a restock box for a Robotech Deluxe vending machine.
-  components:
-  - type: StorageFill
-    contents:
-    - id: VendingMachineRestockRobotics
-
-- type: entity
-  id: CrateVendingMachineRestockTankDispenserFilled
-  parent: CratePlastic
-  name: tank dispenser restock crate
-  description: Contains a restock box for an Engineering or Atmospherics tank dispenser.
-  components:
-  - type: StorageFill
-    contents:
-      - id: VendingMachineRestockTankDispenser
-
-- type: entity
-  id: CrateVendingMachineRestockHappyHonkFilled
-  parent: CratePlastic
-  name: Happy Honk restock crate
-  description: Contains a restock box for a happy honk dispenser.
-  components:
-  - type: StorageFill
-    contents:
-      - id: VendingMachineRestockHappyHonk
-        amount: 2
-
-- type: entity
-  id: CrateVendingMachineRestockGetmoreChocolateCorpFilled
-  parent: CratePlastic
-  name: Getmore Chocolate Corp restock crate
-  description: Contains a restock box for a Getmore Chocolate Corp dispenser.
-  components:
-  - type: StorageFill
-    contents:
-      - id: VendingMachineRestockGetmoreChocolateCorp
-        amount: 2
-
-- type: entity
-  id: CrateVendingMachineRestockChangFilled
-  parent: CratePlastic
-  name: Chang restock crate
-  description: Contains a restock box for a Mr. Chang dispenser.
-  components:
-  - type: StorageFill
-    contents:
-      - id: VendingMachineRestockChang
-        amount: 2
-
-- type: entity
-  id: CrateVendingMachineRestockDiscountDansFilled
-  parent: CratePlastic
-  name: Discount Dans restock crate
-  description: Contains a restock box for a Discount Dan's dispenser.
-  components:
-  - type: StorageFill
-    contents:
-      - id: VendingMachineRestockDiscountDans
-        amount: 2
+    - type: StorageFill
+      contents:
+        - id: VendingMachineRestockSmokes
+          amount: 2
 
 - type: entity
   id: CrateVendingMachineRestockDonutFilled
@@ -261,7 +56,7 @@
   name: Donut restock crate
   description: Contains a restock box for a Monkin' Donuts dispenser.
   components:
-  - type: StorageFill
-    contents:
-      - id: VendingMachineRestockDonut
-        amount: 2
+    - type: StorageFill
+      contents:
+        - id: VendingMachineRestockDonut
+          amount: 2

+ 0 - 207
Resources/Prototypes/Catalog/Fills/Items/belt.yml

@@ -1,207 +0,0 @@
-- type: entity
-  id: ClothingBeltUtilityFilled
-  parent: ClothingBeltUtility
-  suffix: Filled
-  components:
-    - type: StorageFill
-      contents:
-        - id: Crowbar
-        - id: Wrench
-        - id: Screwdriver
-        - id: Wirecutter
-        - id: Welder
-        - id: NetworkConfigurator
-
-- type: entity
-  id: ClothingBeltUtilityEngineering
-  parent: ClothingBeltUtility
-  suffix: Engineering
-  components:
-    - type: StorageFill
-      contents:
-        - id: CrowbarYellow
-        - id: Wrench
-        - id: Screwdriver
-        - id: Wirecutter
-        - id: Welder
-        - id: Multitool
-
-- type: entity
-  id: ClothingBeltChiefEngineerFilled
-  parent: ClothingBeltChiefEngineer
-  suffix: Filled
-  components:
-    - type: StorageFill
-      contents:
-        - id: PowerDrill
-        - id: JawsOfLife
-        - id: WelderExperimental
-        - id: Multitool
-        - id: HolofanProjector
-        - id: GasAnalyzer
-        - id: trayScanner
-
-- type: entityTable
-  id: BeltSecurityEntityTable
-  table: !type:AllSelector
-    children:
-      - id: Stunbaton
-      - id: Handcuffs
-      - id: Handcuffs
-      - id: HoloprojectorSecurity
-      - id: RadioHandheldSecurity
-
-- type: entity
-  id: ClothingBeltSecurityFilled
-  parent: ClothingBeltSecurity
-  suffix: Filled
-  components:
-    - type: EntityTableContainerFill
-      containers:
-        storagebase: !type:NestedSelector
-          tableId: BeltSecurityEntityTable
-
-- type: entity
-  id: ClothingBeltSecurityWebbingFilled
-  parent: ClothingBeltSecurityWebbing
-  suffix: Filled
-  components:
-    - type: EntityTableContainerFill
-      containers:
-        storagebase: !type:NestedSelector
-          tableId: BeltSecurityEntityTable
-
-- type: entity
-  id: ClothingBeltJanitorFilled
-  parent: ClothingBeltJanitor
-  suffix: Filled
-  components:
-    - type: StorageFill
-      contents:
-        - id: Soap #Make a soap group and pick between when i'm not lazy
-        - id: SprayBottleSpaceCleaner
-        - id: CleanerGrenade
-          amount: 2
-        - id: FlashlightLantern
-        - id: LightReplacer
-
-- type: entity
-  id: ClothingBeltMedicalFilled
-  parent: ClothingBeltMedical
-  suffix: Filled
-  components:
-    - type: StorageFill
-      contents:
-        - id: Brutepack
-          amount: 2
-        - id: Ointment
-          amount: 1
-        - id: Bloodpack
-          amount: 1
-        - id: Gauze
-        - id: EmergencyMedipen #You never know what people are going to latejoin into
-
-- type: entity
-  id: ClothingBeltMedicalEMTFilled
-  parent: ClothingBeltMedicalEMT
-  suffix: Paramedic,Filled
-  components:
-    - type: StorageFill
-      contents:
-        - id: Brutepack
-        - id: Ointment
-        - id: Bloodpack
-        - id: Gauze
-        - id: EmergencyMedipen #You never know what people are going to latejoin into
-          amount: 3
-
-- type: entity
-  id: ClothingBeltPlantFilled
-  parent: ClothingBeltPlant
-  suffix: Filled
-  components:
-    - type: StorageFill
-      contents:
-        - id: HydroponicsToolMiniHoe
-        - id: HydroponicsToolSpade
-        - id: HydroponicsToolClippers
-        - id: RobustHarvestChemistryBottle
-
-- type: entity
-  id: ClothingBeltSheathFilled
-  parent: ClothingBeltSheath
-  suffix: Filled
-  components:
-    - type: ContainerFill
-      containers:
-        item:
-          - CaptainSabre
-
-- type: entity
-  id: ClothingBeltMilitaryWebbingGrenadeFilled
-  parent: ClothingBeltMilitaryWebbing
-  name: grenadier chest rig
-  suffix: Filled
-  components:
-    - type: STWeight
-      self: 10
-    - type: Item
-      size: Ginormous
-    - type: Storage
-      maxItemSize: Normal
-      grid:
-        - 0,0,7,1
-    - type: StorageFill
-      contents:
-        - id: ExGrenade
-          amount: 4
-        - id: SyndieMiniBomb
-          amount: 2
-        - id: EmpGrenade
-          amount: 2
-
-- type: entity
-  id: ClothingBeltMilitaryWebbingMedFilled
-  parent: ClothingBeltMilitaryWebbingMed
-  suffix: Filled
-  components:
-    - type: StorageFill
-      contents:
-        - id: EpinephrineChemistryBottle
-          amount: 2
-        - id: EphedrineChemistryBottle
-          amount: 2
-        - id: OmnizineChemistryBottle
-        - id: MedkitCombatFilled
-
-- type: entity
-  parent: ClothingBeltWand
-  id: ClothingBeltWandFilled
-  suffix: Filled
-  components:
-    - type: StorageFill
-      contents:
-        - id: WeaponWandPolymorphCarp
-        - id: WeaponWandFireball
-        - id: WeaponWandDeath
-        - id: WeaponWandPolymorphDoor
-
-- type: entity
-  id: ClothingBeltHolsterFilled
-  parent: ClothingBeltHolster
-  suffix: Filled
-  components:
-    - type: StorageFill
-      contents:
-        - id: WeaponRevolverInspector
-        - id: SpeedLoaderMagnum
-
-- type: entity
-  id: ClothingBeltChefFilled
-  parent: ClothingBeltChef
-  suffix: Filled
-  components:
-    - type: StorageFill
-      contents:
-        - id: FoodShakerSalt
-        - id: FoodShakerPepper

+ 0 - 63
Resources/Prototypes/Catalog/Fills/Items/briefcases.yml

@@ -1,63 +0,0 @@
-- type: entity
-  id: BriefcaseBrownFilled
-  parent: BriefcaseBrown
-  suffix: Filled, Paper
-  components:
-    - type: StorageFill
-      contents:
-        - id: Paper
-          amount: 3
-
-- type: entity
-  id: BriefcaseSyndieSniperBundleFilled
-  parent: BriefcaseSyndie
-  suffix: Syndicate, Sniper Bundle
-  components:
-    - type: STWeight
-      self: 10
-    - type: Item
-      size: Ginormous
-    - type: Storage
-      maxItemSize: Huge
-      grid:
-        - 0,0,6,3
-    - type: StorageFill
-      contents:
-        - id: WeaponSniperHristov
-        - id: MagazineBoxAntiMateriel
-        - id: ClothingNeckTieRed
-        - id: ClothingHandsGlovesLatex
-        - id: ClothingUniformJumpsuitLawyerBlack
-        - id: BarberScissors
-
-- type: entity
-  id: BriefcaseSyndieLobbyingBundleFilled
-  parent: BriefcaseSyndie
-  suffix: Syndicate, Spesos
-  components:
-    - type: StorageFill
-      contents:
-        - id: ClothingEyesGlassesSunglasses
-        - id: SpaceCash30000
-          amount: 1
-        - id: EncryptionKeySyndie
-        - id: RubberStampTrader
-        - id: PhoneInstrumentSyndicate
-        - id: ClothingUniformJumpsuitTacticool
-        - id: ClothingOuterCoatJensen
-        - id: ClothingHandsGlovesCombat
-        - id: ClothingMaskNeckGaiter
-        - id: SyndieHandyFlag
-
-- type: entity
-  id: BriefcaseThiefBribingBundleFilled
-  parent: BriefcaseSyndie
-  suffix: Thief, Spesos
-  components:
-    - type: StorageFill
-      contents:
-        - id: ClothingEyesGlassesSunglasses
-        - id: SpaceCash20000
-          amount: 1
-        - id: ClothingOuterCoatJensen
-        - id: ClothingHandsGlovesColorBlack

+ 0 - 111
Resources/Prototypes/Catalog/Fills/Items/firstaidkits.yml

@@ -1,111 +0,0 @@
-#Entities found at entities/objects/specific/medical
-- type: entity
-  id: MedkitFilled
-  suffix: Filled
-  parent: Medkit
-  components:
-  - type: StorageFill
-    contents:
-      - id: Brutepack
-      - id: Ointment
-      - id: Gauze
-      - id: PillCanisterTricordrazine
-      # see https://github.com/tgstation/blob/master/code/game/objects/items/storage/firstaid.dm for example contents
-
-- type: entity
-  id: MedkitBurnFilled
-  suffix: Filled
-  parent: MedkitBurn
-  components:
-  - type: StorageFill
-    contents:
-      - id: Ointment
-        amount: 2
-      - id: PillCanisterKelotane
-      - id: PillCanisterDermaline
-
-- type: entity
-  id: MedkitBruteFilled
-  suffix: Filled
-  parent: MedkitBrute
-  components:
-  - type: StorageFill
-    contents:
-      - id: Brutepack
-      - id: Gauze
-      - id: PillCanisterIron
-      - id: PillCanisterCopper
-
-- type: entity
-  id: MedkitToxinFilled
-  suffix: Filled
-  parent: MedkitToxin
-  components:
-  - type: StorageFill
-    contents:
-      - id: SyringeIpecac
-      - id: SyringeEthylredoxrazine
-      - id: AntiPoisonMedipen
-      - id: PillCanisterDylovene
-      - id: PillCanisterCharcoal
-
-- type: entity
-  id: MedkitOxygenFilled
-  suffix: Filled
-  parent: MedkitO2
-  components:
-  - type: StorageFill
-    contents:
-      - id: ClothingMaskBreathMedical
-      - id: EmergencyOxygenTankFilled
-      - id: EmergencyMedipen
-      - id: SyringeInaprovaline
-      - id: PillCanisterDexalin
-
-- type: entity
-  id: MedkitRadiationFilled
-  suffix: Filled
-  parent: MedkitRadiation
-  components:
-  - type: StorageFill
-    contents:
-      - id: SyringePhalanximine
-      - id: RadAutoInjector
-      - id: PillCanisterPotassiumIodide
-      - id: PillCanisterHyronalin
-
-- type: entity
-  id: MedkitAdvancedFilled
-  suffix: Filled
-  parent: MedkitAdvanced
-  components:
-  - type: StorageFill
-    contents:
-      - id: MedicatedSuture
-      - id: RegenerativeMesh
-      - id: Bloodpack
-        amount: 2
-
-- type: entity
-  id: MedkitCombatFilled
-  suffix: Filled
-  parent: MedkitCombat
-  components:
-  - type: StorageFill
-    contents:
-      - id: MedicatedSuture
-      - id: RegenerativeMesh
-      - id: SyringeEphedrine
-      - id: SyringeSaline
-      - id: BruteAutoInjector
-      - id: BurnAutoInjector
-
-- type: entity
-  id: StimkitFilled
-  suffix: Stimkit, Filled
-  parent: Medkit
-  components:
-  - type: StorageFill
-    contents:
-      - id: StimpackMini
-        amount: 6

+ 0 - 49
Resources/Prototypes/Catalog/Fills/Lockers/biohazard.yml

@@ -1,49 +0,0 @@
- - type: entity
-   id: ClosetL3Filled
-   suffix: Filled, Generic
-   parent: ClosetL3
-   components:
-   - type: StorageFill
-     contents:
-       - id: ClothingOuterBioGeneral
-       - id: ClothingHeadHatHoodBioGeneral
-
- - type: entity
-   id: ClosetL3VirologyFilled
-   suffix: Filled, Virology
-   parent: ClosetL3Virology
-   components:
-   - type: StorageFill
-     contents:
-       - id: ClothingOuterBioVirology
-       - id: ClothingHeadHatHoodBioVirology
-
- - type: entity
-   id: ClosetL3SecurityFilled
-   suffix: Filled, Security
-   parent: ClosetL3Security
-   components:
-   - type: StorageFill
-     contents:
-       - id: ClothingOuterBioSecurity
-       - id: ClothingHeadHatHoodBioSecurity
-
- - type: entity
-   id: ClosetL3JanitorFilled
-   suffix: Filled, Janitor
-   parent: ClosetL3Janitor
-   components:
-   - type: StorageFill
-     contents:
-       - id: ClothingOuterBioJanitor
-       - id: ClothingHeadHatHoodBioJanitor
-
- - type: entity
-   id: ClosetL3ScienceFilled
-   suffix: Filled, Science
-   parent: ClosetL3Virology
-   components:
-   - type: StorageFill
-     contents:
-       - id: ClothingOuterBioScientist
-       - id: ClothingHeadHatHoodBioScientist

+ 0 - 47
Resources/Prototypes/Catalog/Fills/Lockers/cargo.yml

@@ -1,47 +0,0 @@
-- type: entityTable
-  id: FillSalvageSpecialistHardsuitSpatio
-  table: !type:AllSelector
-    children:
-    - id: OxygenTankFilled
-    - id: ClothingShoesBootsMag
-    - id: ClothingOuterHardsuitSpatio
-    - id: ClothingMaskGasExplorer
-
-- type: entityTable
-  id: LockerFillSalvageSpecialist
-  table: !type:AllSelector
-    children:
-    - id: ClothingBeltUtilityFilled
-    - id: SurvivalKnife
-    - id: HandheldGPSBasic
-    - id: RadioHandheld
-    - id: AppraisalTool
-    - id: FireExtinguisher
-    - id: Flare
-      prob: 0.3
-      rolls: !type:ConstantNumberSelector
-        value: 3
-
-- type: entity
-  id: LockerSalvageSpecialistFilledHardsuit
-  suffix: Filled, Hardsuit
-  parent: LockerSalvageSpecialist
-  components:
-  - type: EntityTableContainerFill
-    containers:
-      entity_storage: !type:AllSelector
-        children:
-          - !type:NestedSelector
-            tableId: FillSalvageSpecialistHardsuitSpatio
-          - !type:NestedSelector
-            tableId: LockerFillSalvageSpecialist
-
-- type: entity
-  id: LockerSalvageSpecialistFilled
-  suffix: Filled
-  parent: LockerSalvageSpecialist
-  components:
-    - type: EntityTableContainerFill
-      containers:
-        entity_storage: !type:NestedSelector
-          tableId: LockerFillSalvageSpecialist

+ 0 - 110
Resources/Prototypes/Catalog/Fills/Lockers/dressers.yml

@@ -1,110 +0,0 @@
-- type: entity
-  id: DresserCaptainFilled
-  parent: Dresser
-  suffix: Filled, Captain
-  components:
-  - type: StorageFill
-    contents:
-      - id: ClothingHeadHatCaptain
-      - id: ClothingHeadHatCapcap
-      - id: ClothingUniformJumpsuitCapFormal
-      - id: ClothingUniformJumpskirtCapFormalDress
-      - id: ClothingHandsGlovesCaptain
-      - id: ClothingOuterWinterCap
-      - id: ClothingNeckCloakCap
-
-- type: entity
-  id: DresserChiefEngineerFilled
-  parent: Dresser
-  suffix: Filled, Chief Engineer
-  components:
-  - type: StorageFill
-    contents:
-      - id: ClothingUniformJumpsuitChiefEngineerTurtle
-      - id: ClothingUniformJumpskirtChiefEngineerTurtle
-      - id: ClothingHeadHatBeretEngineering
-      - id: ClothingOuterWinterCE
-      - id: ClothingNeckCloakCe
-
-- type: entity
-  id: DresserChiefMedicalOfficerFilled
-  parent: Dresser
-  suffix: Filled, Chief Medical Officer
-  components:
-  - type: StorageFill
-    contents:
-      - id: ClothingOuterCoatLabCmo
-      - id: ClothingUniformJumpsuitCMOTurtle
-      - id: ClothingUniformJumpskirtCMOTurtle
-      - id: ClothingHeadHatBeretCmo
-      - id: ClothingHeadMirror
-      - id: ClothingEyesGlasses
-      - id: ClothingOuterWinterCMO
-      - id: ClothingCloakCmo
-
-- type: entity
-  id: DresserHeadOfPersonnelFilled
-  parent: Dresser
-  suffix: Filled, Head Of Personnel
-  components:
-  - type: StorageFill
-    contents:
-      - id: ClothingHeadHatHopcap
-      - id: ClothingOuterWinterHoP
-      - id: ClothingEyesGlasses
-      - id: ClothingNeckCloakHop
-
-- type: entity
-  id: DresserHeadOfSecurityFilled
-  parent: Dresser
-  suffix: Filled, Head Of Security
-  components:
-  - type: StorageFill
-    contents:
-      - id: ClothingHeadHatBeretHoS
-      - id: ClothingHeadHatHoshat
-      - id: ClothingUniformJumpskirtHoSAlt
-      - id: ClothingUniformJumpsuitHoSAlt
-      - id: ClothingUniformJumpskirtHosFormal
-      - id: ClothingUniformJumpsuitHosFormal
-      - id: ClothingOuterWinterHoS
-      - id: ClothingNeckCloakHos
-
-- type: entity
-  id: DresserQuarterMasterFilled
-  parent: Dresser
-  suffix: Filled, Quarter Master
-  components:
-  - type: StorageFill
-    contents:
-      - id: ClothingHeadHatBeretQM
-      - id: ClothingUniformJumpsuitQMFormal
-      - id: ClothingUniformJumpsuitQMTurtleneck
-      - id: ClothingUniformJumpskirtQMTurtleneck
-      - id: ClothingHandsGlovesColorBrown
-      - id: ClothingOuterWinterQM
-      - id: ClothingNeckCloakQm
-
-- type: entity
-  id: DresserResearchDirectorFilled
-  parent: Dresser
-  suffix: Filled, Research Director
-  components:
-  - type: StorageFill
-    contents:
-      - id: ClothingHeadHatBeretRND
-      - id: ClothingHandsGlovesColorPurple
-      - id: ClothingEyesGlasses
-      - id: ClothingOuterWinterRD
-      - id: ClothingOuterCoatRD
-      - id: ClothingNeckCloakRd
-
-- type: entity
-  id: DresserWardenFilled
-  parent: Dresser
-  suffix: Filled, Warden
-  components:
-  - type: StorageFill
-    contents:
-      - id: ClothingHeadHatWarden
-      - id: ClothingHeadHatBeretWarden

+ 0 - 153
Resources/Prototypes/Catalog/Fills/Lockers/engineer.yml

@@ -1,153 +0,0 @@
-- type: entity
-  id: ClosetToolFilled
-  parent: ClosetTool
-  suffix: Filled
-  components:
-  - type: StorageFill
-    contents:
-      - id: ClothingOuterVestHazard
-        prob: 0.4
-      - id: FlashlightLantern
-        prob: 0.7
-      - id: Screwdriver
-        prob: 0.7
-      - id: Wrench
-        prob: 0.7
-      - id: Welder
-        prob: 0.7
-      - id: Crowbar
-        prob: 0.7
-      - id: Wirecutter
-        prob: 0.7
-      - id: Multitool
-        prob: 0.2
-      - id: trayScanner
-        prob: 0.7
-      - id: GasAnalyzer
-        prob: 0.7
-      - id: ClothingBeltUtility
-        prob: 0.2
-      - id: ClothingHandsGlovesColorYellow
-        prob: 0.05
-      - id: ClothingHeadHatHardhatRed
-        prob: 0.4
-      - id: CableApcStack
-        prob: 0.3
-      - id: CableApcStack
-        prob: 0.3
-      - id: CableApcStack
-        prob: 0.3
-      - id: SprayPainter
-        prob: 0.7
-
-- type: entity
-  id: LockerElectricalSuppliesFilled
-  suffix: Filled
-  parent: LockerElectricalSupplies
-  components:
-  - type: StorageFill
-    contents:
-      - id: ToolboxElectricalFilled
-        prob: 0.7
-      - id: FirelockElectronics
-        prob: 0.05
-      - id: APCElectronics
-        prob: 0.1
-      - id: CableMVStack
-        prob: 0.2
-      - id: CableApcStack
-        prob: 0.3
-
-- type: entity
-  id: LockerWeldingSuppliesFilled
-  suffix: Filled
-  parent: LockerWeldingSupplies
-  components:
-  - type: StorageFill
-    contents:
-      - id: ClothingHeadHatWelding
-      - id: ClothingHeadHatWelding
-      - id: ClothingHeadHatWelding
-        prob: 0.5
-      - id: Welder
-      - id: Welder
-      - id: WelderMini
-        orGroup: thirdWelder
-      - id: Welder
-        prob: 0.33
-        orGroup: thirdWelder
-      - id: WelderIndustrial
-        prob: 0.33
-        orGroup: thirdWelder
-
-- type: entity
-  id: LockerAtmosphericsFilledHardsuit
-  suffix: Filled, Hardsuit
-  parent: LockerAtmospherics
-  components:
-  - type: StorageFill
-    contents:
-      - id: ClothingOuterHardsuitAtmos
-      - id: ClothingMaskGasAtmos
-      - id: ClothingOuterSuitAtmosFire
-      - id: ClothingHeadHelmetAtmosFire
-      - id: GasAnalyzer
-      - id: MedkitOxygenFilled
-      - id: HolofanProjector
-      - id: RCD
-      - id: RCDAmmo
-
-- type: entity
-  id: LockerAtmosphericsFilled
-  suffix: Filled
-  parent: LockerAtmospherics
-  components:
-  - type: StorageFill
-    contents:
-      - id: ClothingMaskGasAtmos
-      - id: ClothingOuterSuitAtmosFire
-      - id: ClothingHeadHelmetAtmosFire
-      - id: GasAnalyzer
-      - id: MedkitOxygenFilled
-      - id: HolofanProjector
-      - id: RCD
-      - id: RCDAmmo
-
-- type: entity
-  id: LockerEngineerFilledHardsuit
-  suffix: Filled, Hardsuit
-  parent: LockerEngineer
-  components:
-  - type: StorageFill
-    contents:
-      - id: ClothingOuterHardsuitEngineering
-      - id: ClothingHandsGlovesColorYellow
-      - id: ClothingMaskGas
-      - id: ClothingShoesBootsMag
-      - id: RCD
-      - id: RCDAmmo
-
-- type: entity
-  id: LockerEngineerFilled
-  suffix: Filled
-  parent: LockerEngineer
-  components:
-  - type: StorageFill
-    contents:
-      - id: ClothingHandsGlovesColorYellow
-      - id: ClothingMaskGas
-      - id: trayScanner
-      - id: RCD
-      - id: RCDAmmo
-
-- type: entity
-  id: ClosetRadiationSuitFilled
-  parent: ClosetRadiationSuit
-  suffix: Filled
-  components:
-  - type: StorageFill
-    contents:
-      - id: ClothingOuterSuitRad
-        amount: 2
-      - id: GeigerCounter
-        amount: 2

+ 0 - 382
Resources/Prototypes/Catalog/Fills/Lockers/heads.yml

@@ -1,382 +0,0 @@
-- type: entityTable
-  id: LockerFillQuarterMaster
-  table: !type:AllSelector
-    children:
-      - id: BoxEncryptionKeyCargo
-      - id: BoxFolderQmClipboard
-      - id: CargoRequestComputerCircuitboard
-      - id: CargoSaleComputerCircuitboard
-      - id: CargoShuttleComputerCircuitboard
-      - id: CargoShuttleConsoleCircuitboard
-      - id: SalvageMagnetMachineCircuitboard
-      - id: CigPackGreen
-        prob: 0.50
-      - id: ClothingHeadsetAltCargo
-      - id: DoorRemoteCargo
-      - id: RubberStampApproved
-      - id: RubberStampDenied
-      - id: RubberStampQm
-      - id: AstroNavCartridge
-      - id: MailTeleporterMachineCircuitboard
-
-- type: entity
-  id: LockerQuarterMasterFilled
-  suffix: Filled
-  parent: LockerQuarterMaster
-  components:
-    - type: EntityTableContainerFill
-      containers:
-        entity_storage: !type:NestedSelector
-          tableId: LockerFillQuarterMaster
-
-# No laser table
-- type: entityTable
-  id: LockerFillCaptainNoLaser
-  table: !type:AllSelector
-    children:
-      - id: CaptainIDCard
-      - id: CigarGoldCase
-        prob: 0.25
-      - id: ClothingBeltSheathFilled
-      - id: ClothingHeadsetAltCommand
-      - id: ClothingOuterArmorCaptainCarapace
-      - id: CommsComputerCircuitboard
-      - id: DoorRemoteCommand
-      - id: MedalCase
-      - id: NukeDisk
-      - id: PinpointerNuclear
-      - id: PlushieNuke
-        prob: 0.1
-      - id: RubberStampCaptain
-      - id: SpaceCash1000
-      - id: WeaponDisabler
-      - id: ClothingEyesGlassesCommand
-
-# No laser table + Laser table
-- type: entityTable
-  id: LockerFillCaptainLaser
-  table: !type:AllSelector
-    children:
-      - !type:NestedSelector
-        tableId: LockerFillCaptainNoLaser
-      - id: WeaponAntiqueLaser
-
-# Hardsuit table, used for suit storage as well
-- type: entityTable
-  id: FillCaptainHardsuit
-  table: !type:AllSelector
-    children:
-      - id: ClothingOuterHardsuitCap
-      - id: ClothingMaskGasCaptain
-      - id: JetpackCaptainFilled
-      - id: OxygenTankFilled
-
-# No laser locker, used when the antique laser is placed in the special display crate
-- type: entity
-  id: LockerCaptainFilledNoLaser
-  suffix: Filled
-  parent: LockerCaptain
-  components:
-    - type: EntityTableContainerFill
-      containers:
-        entity_storage: !type:NestedSelector
-          tableId: LockerFillCaptainNoLaser
-
-# No Laser + Laser locker
-- type: entity
-  id: LockerCaptainFilled
-  suffix: Filled, AntiqueLaser
-  parent: LockerCaptain
-  components:
-    - type: EntityTableContainerFill
-      containers:
-        entity_storage: !type:NestedSelector
-          tableId: LockerFillCaptainLaser
-
-# No Laser + Laser + Hardsuit locker
-- type: entity
-  id: LockerCaptainFilledHardsuit
-  suffix: Filled, Hardsuit
-  parent: LockerCaptain
-  components:
-    - type: EntityTableContainerFill
-      containers:
-        entity_storage: !type:AllSelector
-          children:
-            - !type:NestedSelector
-              tableId: LockerFillCaptainLaser
-            - !type:NestedSelector
-              tableId: FillCaptainHardsuit
-
-- type: entityTable
-  id: LockerFillHeadOfPersonnel
-  table: !type:AllSelector
-    children:
-      - id: AccessConfigurator
-      - id: BoxEncryptionKeyPassenger
-      - id: BoxEncryptionKeyService
-      - id: BoxHeadset
-      - id: BoxID
-      - id: BoxPDA
-      - id: CigarGoldCase
-        prob: 0.25
-        # Fuck the HoP they don't deserve fucking cigars.
-        # Yes they do fuck you.
-      - id: ClothingBackpackIan
-        prob: 0.5
-      - id: ClothingHeadsetCommand
-      - id: ClothingNeckGoldmedal
-      - id: DoorRemoteService
-      - id: HoPIDCard
-      - id: IDComputerCircuitboard
-      - id: RubberStampApproved
-      - id: RubberStampDenied
-      - id: RubberStampHop
-      - id: WeaponDisabler
-      - id: ClothingEyesHudCommand
-
-- type: entity
-  id: LockerHeadOfPersonnelFilled
-  suffix: Filled
-  parent: LockerHeadOfPersonnel
-  components:
-    - type: EntityTableContainerFill
-      containers:
-        entity_storage: !type:NestedSelector
-          tableId: LockerFillHeadOfPersonnel
-
-# No hardsuit table
-- type: entityTable
-  id: LockerFillChiefEngineerNoHardsuit
-  table: !type:AllSelector
-    children:
-      - id: AccessConfigurator
-      - id: BoxEncryptionKeyEngineering
-      - id: CigarCase
-        prob: 0.15
-      - id: ClothingBeltChiefEngineerFilled
-      - id: ClothingEyesGlassesMeson
-      - id: ClothingHandsGlovesColorYellow
-      - id: ClothingHeadsetAltEngineering
-      - id: DoorRemoteEngineering
-      - id: RCD
-      - id: RCDAmmo
-      - id: RubberStampCE
-
-# Hardsuit table, used for suit storage as well
-- type: entityTable
-  id: FillChiefEngineerHardsuit
-  table: !type:AllSelector
-    children:
-      - id: ClothingMaskGasAtmos
-      - id: ClothingOuterHardsuitEngineeringWhite
-      - id: ClothingShoesBootsMagAdv
-      - id: JetpackVoidFilled
-      - id: OxygenTankFilled
-
-# No hardsuit locker
-- type: entity
-  id: LockerChiefEngineerFilled
-  suffix: Filled
-  parent: LockerChiefEngineer
-  components:
-    - type: EntityTableContainerFill
-      containers:
-        entity_storage: !type:NestedSelector
-          tableId: LockerFillChiefEngineerNoHardsuit
-
-# No hardsuit + hardsuit locker
-- type: entity
-  id: LockerChiefEngineerFilledHardsuit
-  suffix: Filled, Hardsuit
-  parent: LockerChiefEngineer
-  components:
-    - type: EntityTableContainerFill
-      containers:
-        entity_storage: !type:AllSelector
-          children:
-            - !type:NestedSelector
-              tableId: LockerFillChiefEngineerNoHardsuit
-            - !type:NestedSelector
-              tableId: FillChiefEngineerHardsuit
-
-# No hardsuit table
-- type: entityTable
-  id: LockerFillChiefMedicalOfficerNoHardsuit
-  table: !type:AllSelector
-    children:
-      - id: BoxEncryptionKeyMedical
-      - id: ClothingBackpackDuffelSurgeryFilled
-      - id: ClothingCloakCmo
-      - id: ClothingEyesHudMedical
-      - id: ClothingHandsGlovesNitrile
-      - id: ClothingHeadHatBeretCmo
-      - id: ClothingHeadsetAltMedical
-      - id: ClothingMaskSterile
-      - id: DoorRemoteMedical
-      - id: HandheldCrewMonitor
-      - id: Hypospray
-      - id: MedicalTechFabCircuitboard
-      - id: MedkitFilled
-      - id: RubberStampCMO
-      - id: MedTekCartridge
-
-# Hardsuit table, used for suit storage as well
-- type: entityTable
-  id: FillChiefMedicalOfficerHardsuit
-  table: !type:AllSelector
-    children:
-      - id: ClothingMaskBreathMedical
-      - id: ClothingOuterHardsuitMedical
-      - id: OxygenTankFilled
-
-# No hardsuit locker
-- type: entity
-  id: LockerChiefMedicalOfficerFilled
-  suffix: Filled
-  parent: LockerChiefMedicalOfficer
-  components:
-    - type: EntityTableContainerFill
-      containers:
-        entity_storage: !type:NestedSelector
-          tableId: LockerFillChiefMedicalOfficerNoHardsuit
-
-# No hardsuit + Hardsuit locker
-- type: entity
-  id: LockerChiefMedicalOfficerFilledHardsuit
-  suffix: Filled, Hardsuit
-  parent: LockerChiefMedicalOfficer
-  components:
-    - type: EntityTableContainerFill
-      containers:
-        entity_storage: !type:AllSelector
-          children:
-            - !type:NestedSelector
-              tableId: LockerFillChiefMedicalOfficerNoHardsuit
-            - !type:NestedSelector
-              tableId: FillChiefMedicalOfficerHardsuit
-
-# No hardsuit table
-- type: entityTable
-  id: LockerFillResearchDirectorNoHardsuit
-  table: !type:AllSelector
-    children:
-      - id: BoxEncryptionKeyScience
-      - id: CircuitImprinterMachineCircuitboard
-      - id: ClothingBeltUtilityFilled
-      - id: ClothingHeadsetAltScience
-      - id: DoorRemoteResearch
-      - id: HandTeleporter
-      - id: ProtolatheMachineCircuitboard
-      - id: ResearchComputerCircuitboard
-      - id: RubberStampRd
-
-# Hardsuit table, used for suit storage as well
-- type: entityTable
-  id: FillResearchDirectorHardsuit
-  table: !type:AllSelector
-    children:
-      - id: ClothingMaskBreath
-      - id: ClothingOuterHardsuitRd
-      - id: OxygenTankFilled
-
-# No hardsuit locker
-- type: entity
-  id: LockerResearchDirectorFilled
-  suffix: Filled
-  parent: LockerResearchDirector
-  components:
-    - type: EntityTableContainerFill
-      containers:
-        entity_storage: !type:NestedSelector
-          tableId: LockerFillResearchDirectorNoHardsuit
-
-# No hardsuit + Hardsuit locker
-- type: entity
-  id: LockerResearchDirectorFilledHardsuit
-  suffix: Filled, Hardsuit
-  parent: LockerResearchDirector
-  components:
-    - type: EntityTableContainerFill
-      containers:
-        entity_storage: !type:AllSelector
-          children:
-            - !type:NestedSelector
-              tableId: LockerFillResearchDirectorNoHardsuit
-            - !type:NestedSelector
-              tableId: FillResearchDirectorHardsuit
-
-# No hardsuit table
-- type: entityTable
-  id: LockerFillHeadOfSecurityNoHardsuit
-  table: !type:AllSelector
-    children:
-      - id: WeaponEnergyShotgun
-      - id: BoxEncryptionKeySecurity
-      - id: CigarGoldCase
-        prob: 0.50
-      - id: ClothingBeltSecurityFilled
-      - id: ClothingEyesGlassesSecurity
-      - id: ClothingHeadsetAltSecurity
-      - id: ClothingMaskNeckGaiter
-      - id: ClothingOuterCoatHoSTrench
-      - id: ClothingShoesBootsJack
-      - id: DoorRemoteSecurity
-      - id: HoloprojectorSecurity
-      - id: RubberStampHos
-      - id: SecurityTechFabCircuitboard
-      - id: WeaponDisabler
-      - id: WantedListCartridge
-      - id: DrinkHosFlask
-
-# Hardsuit table, used for suit storage as well
-- type: entityTable
-  id: FillHeadOfSecurityHardsuit
-  table: !type:AllSelector
-    children:
-      - id: ClothingMaskGasSwat
-      - id: ClothingOuterHardsuitSecurityRed
-      - id: JetpackSecurityFilled
-      - id: OxygenTankFilled
-
-# No hardsuit locker
-- type: entity
-  id: LockerHeadOfSecurityFilled
-  suffix: Filled
-  parent: LockerHeadOfSecurity
-  components:
-    - type: EntityTableContainerFill
-      containers:
-        entity_storage: !type:NestedSelector
-          tableId: LockerFillHeadOfSecurityNoHardsuit
-
-# No hardsuit + Hardsuit locker
-- type: entity
-  id: LockerHeadOfSecurityFilledHardsuit
-  suffix: Filled, Hardsuit
-  parent: LockerHeadOfSecurity
-  components:
-    - type: EntityTableContainerFill
-      containers:
-        entity_storage: !type:AllSelector
-          children:
-            - !type:NestedSelector
-              tableId: LockerFillHeadOfSecurityNoHardsuit
-            - !type:NestedSelector
-              tableId: FillHeadOfSecurityHardsuit
-
-- type: entity
-  id: LockerFreezerVaultFilled
-  suffix: Vault, Locked
-  parent: LockerFreezerBase
-  components:
-    - type: AccessReader
-      access: [["Command"]]
-    - type: StorageFill
-      contents:
-        - id: WeaponRevolverDeckard
-        - id: ClothingOuterHardsuitBasic
-        - id: JetpackBlue
-        - id: SpaceCash1000
-        - id: BeachBall
-        - id: BikeHorn

+ 0 - 147
Resources/Prototypes/Catalog/Fills/Lockers/medical.yml

@@ -1,147 +0,0 @@
-- type: entity
-  id: LockerMedicineFilled
-  suffix: Filled
-  parent: LockerMedicine
-  components:
-  - type: StorageFill
-    contents:
-      - id: BoxSyringe
-      - id: EpinephrineChemistryBottle
-        amount: 1
-      - id: Brutepack
-        amount: 2
-      - id: Ointment
-        amount: 2
-      - id: Bloodpack
-        amount: 2
-      - id: Gauze
-
-- type: entity
-  id: LockerWallMedicalFilled
-  name: medicine wall locker
-  suffix: Filled
-  parent: LockerWallMedical
-  components:
-  - type: StorageFill
-    contents:
-      - id: BoxSyringe
-      - id: EpinephrineChemistryBottle
-        amount: 1
-      - id: Brutepack
-        amount: 2
-      - id: Ointment
-        amount: 2
-      - id: Bloodpack
-        amount: 2
-      - id: Gauze
-
-
-- type: entity
-  id: LockerMedicalFilled
-  suffix: Filled
-  parent: LockerMedical
-  components:
-  - type: StorageFill
-    contents:
-      - id: HandheldHealthAnalyzer
-        prob: 0.6
-      - id: ClothingHeadMirror
-        prob: 0.1
-      - id: ClothingHandsGlovesLatex
-      - id: ClothingHeadsetMedical
-      - id: ClothingEyesHudMedical
-      - id: ClothingHeadHatSurgcapGreen
-        prob: 0.1
-        orGroup: Surgcaps
-      - id: ClothingHeadHatSurgcapPurple
-        prob: 0.05
-        orGroup: Surgcaps
-      - id: ClothingHeadHatSurgcapBlue
-        prob: 0.90
-        orGroup: Surgcaps
-      - id: UniformScrubsColorBlue
-        prob: 0.5
-        orGroup: Surgshrubs
-      - id: UniformScrubsColorGreen
-        prob: 0.1
-        orGroup: Surgshrubs
-      - id: UniformScrubsColorPurple
-        prob: 0.05
-        orGroup: Surgshrubs
-      - id: ClothingMaskSterile
-
-- type: entity
-  parent: LockerWallMedical
-  id: LockerWallMedicalDoctorFilled
-  name: medical doctor's wall locker
-  suffix: Filled
-  components:
-  - type: StorageFill
-    contents:
-      - id: HandheldHealthAnalyzer
-        prob: 0.6
-      - id: ClothingHandsGlovesLatex
-      - id: ClothingHeadsetMedical
-      - id: ClothingEyesHudMedical
-      - id: ClothingHeadHatSurgcapGreen
-        prob: 0.1
-        orGroup: Surgcaps
-      - id: ClothingHeadHatSurgcapPurple
-        prob: 0.05
-        orGroup: Surgcaps
-      - id: ClothingHeadHatSurgcapBlue
-        prob: 0.90
-        orGroup: Surgcaps
-      - id: UniformScrubsColorBlue
-        prob: 0.5
-        orGroup: Surgshrubs
-      - id: UniformScrubsColorGreen
-        prob: 0.1
-        orGroup: Surgshrubs
-      - id: UniformScrubsColorPurple
-        prob: 0.05
-        orGroup: Surgshrubs
-      - id: ClothingMaskSterile
-
-- type: entity
-  id: LockerChemistryFilled
-  suffix: Filled
-  parent: LockerChemistry
-  components:
-  - type: StorageFill
-    contents:
-      - id: BoxSyringe
-      - id: BoxBeaker
-      - id: BoxBeaker
-        prob: 0.3
-      - id: BoxPillCanister
-      - id: BoxBottle
-      - id: BoxVial
-      - id: PlasmaChemistryVial
-      - id: ChemBag
-      - id: ClothingHandsGlovesLatex
-      - id: ClothingHeadsetMedical
-      - id: ClothingMaskSterile
-      - id: HandLabeler
-        prob: 0.5
-
-- type: entity
-  id: LockerParamedicFilled
-  suffix: Filled
-  parent: LockerParamedic
-  components:
-  - type: StorageFill
-    contents:
-      - id: ClothingOuterHardsuitVoidParamed
-      - id: ClothingOuterCoatParamedicWB
-      - id: ClothingHeadHatParamedicsoft
-      - id: ClothingOuterWinterPara
-      - id: ClothingUniformJumpsuitParamedic
-      - id: ClothingUniformJumpskirtParamedic
-      - id: ClothingEyesHudMedical
-      - id: ClothingHandsGlovesLatex
-      - id: ClothingHeadsetMedical
-      - id: ClothingMaskSterile
-      - id: HandheldGPSBasic
-      - id: MedkitFilled
-        prob: 0.3

+ 0 - 204
Resources/Prototypes/Catalog/Fills/Lockers/misc.yml

@@ -1,204 +0,0 @@
-- type: entity
-  id: LockerSyndicatePersonalFilled
-  suffix: Filled
-  parent: LockerSyndicatePersonal
-  components:
-  - type: EntityTableContainerFill
-    containers:
-      entity_storage: !type:AllSelector
-        children:
-        - id: ClothingBeltMilitaryWebbing
-        - id: ClothingHandsGlovesCombat
-        - id: JetpackBlackFilled
-        - id: ClothingUniformJumpsuitOperative
-        - id: ClothingUniformJumpskirtOperative
-        - id: ClothingHeadsetAltSyndicate
-        - id: ClothingEyesHudSyndicate
-
-- type: entityTable
-  id: FillLockerEmergencyStandard
-  table: !type:AllSelector
-    children:
-    - id: ClothingMaskBreath
-    - id: ClothingOuterSuitEmergency
-    - !type:GroupSelector
-      children:
-      - id: EmergencyOxygenTankFilled
-      - id: OxygenTankFilled
-    - id: ToolboxEmergencyFilled
-      prob: 0.5
-    - id: MedkitOxygenFilled
-      prob: 0.2
-    - id: WeaponFlareGun
-      prob: 0.1
-    - id: BoxMRE
-      prob: 0.1
-
-- type: entity
-  id: ClosetEmergencyFilledRandom
-  parent: ClosetEmergency
-  suffix: Filled, Random
-  components:
-  - type: EntityTableContainerFill
-    containers:
-      entity_storage: !type:NestedSelector
-        tableId: FillLockerEmergencyStandard
-
-- type: entity
-  id: ClosetWallEmergencyFilledRandom
-  parent: ClosetWallEmergency
-  suffix: Filled, Random
-  components:
-  - type: EntityTableContainerFill
-    containers:
-      entity_storage: !type:NestedSelector
-        tableId: FillLockerEmergencyStandard
-
-- type: entityTable
-  id: FillLockerEmergencyN2Standard
-  table: !type:AllSelector
-    children:
-    - id: ClothingMaskBreath
-    - id: ClothingOuterSuitEmergency
-    - id: BoxMRE
-      prob: 0.1
-    - id: ToolboxEmergencyFilled
-      prob: 0.05
-    - !type:GroupSelector
-      children:
-      - id: EmergencyNitrogenTankFilled
-        weight: 4
-      - id: NitrogenTankFilled
-
-- type: entity
-  id: ClosetEmergencyN2FilledRandom
-  parent: ClosetEmergencyN2
-  suffix: Filled, Random
-  components:
-  - type: EntityTableContainerFill
-    containers:
-      entity_storage: !type:NestedSelector
-        tableId: FillLockerEmergencyN2Standard
-
-- type: entity
-  parent: ClosetWallEmergencyN2
-  id: ClosetWallEmergencyN2FilledRandom
-  suffix: Filled, Random
-  components:
-  - type: EntityTableContainerFill
-    containers:
-      entity_storage: !type:NestedSelector
-        tableId: FillLockerEmergencyN2Standard
-
-- type: entityTable
-  id: FillLockerFireStandard
-  table: !type:AllSelector
-    children:
-    - id: ClothingOuterSuitFire
-    - id: ClothingHeadHelmetFire
-    - id: ClothingMaskGas
-    - !type:GroupSelector
-      children:
-      - id: EmergencyOxygenTankFilled
-      - id: OxygenTankFilled
-    - id: CrowbarRed
-    - !type:GroupSelector
-      children:
-      - id: FireExtinguisher
-        weight: 98
-      - id: SprayBottleWater #It's just budget cut after budget cut man
-        weight: 2
-
-- type: entity
-  id: ClosetFireFilled
-  parent: ClosetFire
-  suffix: Filled
-  components:
-  - type: EntityTableContainerFill
-    containers:
-      entity_storage: !type:NestedSelector
-        tableId: FillLockerFireStandard
-
-- type: entity
-  id: ClosetWallFireFilledRandom
-  parent: ClosetWallFire
-  suffix: Filled
-  components:
-  - type: EntityTableContainerFill
-    containers:
-      entity_storage: !type:NestedSelector
-        tableId: FillLockerFireStandard
-
-- type: entityTable
-  id: SyndieMaintLoot
-  table: !type:GroupSelector
-    children:
-    - !type:GroupSelector
-      children:
-      - id: ClothingUniformJumpsuitOperative
-      - id: ClothingUniformJumpskirtOperative
-    - id: ClothingBackpackDuffelSyndicate
-    - id: CyberPen
-    - id: CigPackSyndicate
-    - id: ClothingBackpackDuffelSyndicatePyjamaBundle
-    - id: ClothingBeltMilitaryWebbing
-    - id: ClothingShoesBootsCombatFilled
-    - id: ToolboxSyndicateFilled
-    - id: BalloonSyn
-    - id: WeaponSniperMosin
-      weight: 2
-
-- type: entityTable
-  id: MaintenanceLockerLoot
-  table: !type:AllSelector
-    children:
-    - id: StrangePill
-      prob: 0.20
-    # Tools
-    - !type:NestedSelector
-      tableId: MaintToolsTable
-      rolls: !type:RangeNumberSelector
-        range: 1, 5
-    # Fluff
-    - !type:NestedSelector
-      tableId: MaintFluffTable
-      prob: 0.33
-      rolls: !type:RangeNumberSelector
-        range: 0, 2
-    # Plushies
-    - !type:NestedSelector
-      tableId: AllPlushiesTable
-      prob: 0.10
-      rolls: !type:RangeNumberSelector
-        range: 1, 2
-    # Weapons
-    - !type:NestedSelector
-      tableId: MaintWeaponTable
-      prob: 0.075
-    # Syndie Loot
-    - !type:NestedSelector
-      tableId: SyndieMaintLoot
-      prob: 0.05
-    # Recursive
-    - id: ClosetMaintenanceFilledRandom
-      prob: 0.01
-
-- type: entity
-  id: ClosetMaintenanceFilledRandom
-  suffix: Filled, Random
-  parent: ClosetMaintenance
-  components:
-  - type: EntityTableContainerFill
-    containers:
-      entity_storage: !type:NestedSelector
-        tableId: MaintenanceLockerLoot
-
-- type: entity
-  id: ClosetWallMaintenanceFilledRandom
-  parent: ClosetWall
-  suffix: Filled, Random
-  components:
-  - type: EntityTableContainerFill
-    containers:
-      entity_storage: !type:NestedSelector
-        tableId: MaintenanceLockerLoot

+ 0 - 15
Resources/Prototypes/Catalog/Fills/Lockers/science.yml

@@ -1,15 +0,0 @@
-- type: entity
-  id: LockerScienceFilled
-  suffix: Filled
-  parent: LockerScientist
-  components:
-  - type: StorageFill
-    contents:
-      - id: ClothingHandsGlovesLatex
-      - id: ClothingHeadsetScience
-      - id: ClothingMaskSterile
-      - id: ClothingOuterCoatRnd
-      - id: AnomalyScanner
-      - id: NodeScanner
-      - id: NetworkConfigurator
-        prob: 0.5

+ 0 - 241
Resources/Prototypes/Catalog/Fills/Lockers/security.yml

@@ -1,241 +0,0 @@
-- type: entity
-  id: LockerWardenFilledHardsuit
-  suffix: Filled, Hardsuit
-  parent: LockerWarden
-  components:
-    - type: StorageFill
-      contents:
-        - id: FlashlightSeclite
-        - id: WeaponDisabler
-        - id: ClothingBeltSecurityFilled
-        - id: Flash
-        - id: ClothingEyesGlassesSecurity
-        - id: ClothingHandsGlovesCombat
-        - id: ClothingShoesBootsJack
-        - id: ClothingOuterCoatWarden
-        - id: ClothingOuterWinterWarden
-        - id: RubberStampWarden
-        - id: DoorRemoteArmory
-        - id: ClothingOuterHardsuitWarden
-        - id: HoloprojectorSecurity
-        - id: ClothingBackpackElectropack
-          amount: 2
-        - id: RemoteSignaller
-          amount: 2
-
-- type: entity
-  id: LockerWardenFilled
-  suffix: Filled
-  parent: LockerWarden
-  components:
-    - type: StorageFill
-      contents:
-        - id: FlashlightSeclite
-        - id: WeaponDisabler
-        - id: ClothingBeltSecurityFilled
-        - id: Flash
-        - id: ClothingEyesGlassesSecurity
-        - id: ClothingHandsGlovesCombat
-        - id: ClothingShoesBootsJack
-        - id: ClothingOuterCoatWarden
-        - id: ClothingOuterWinterWarden
-        - id: RubberStampWarden
-        - id: DoorRemoteArmory
-        - id: HoloprojectorSecurity
-        - id: ClothingBackpackElectropack
-          amount: 2
-        - id: RemoteSignaller
-          amount: 2
-        - id: Binoculars
-
-- type: entity
-  id: LockerSecurityFilled
-  suffix: Filled
-  parent: LockerSecurity
-  components:
-    - type: StorageFill
-      contents:
-        - id: FlashlightSeclite
-          prob: 0.8
-        - id: WeaponDisabler
-        - id: ClothingUniformJumpsuitSecGrey
-          prob: 0.3
-        - id: ClothingHeadHelmetBasic
-        - id: ClothingOuterArmorBasic
-        - id: ClothingBeltSecurityFilled
-        - id: Flash
-          prob: 0.5
-        - id: ClothingEyesGlassesSecurity
-        - id: ClothingHeadsetSecurity
-        - id: ClothingHandsGlovesColorBlack
-        - id: ClothingShoesBootsJack
-        - id: WeaponMeleeNeedle
-          prob: 0.1
-        - id: HoloprojectorSecurity
-          prob: 0.6
-
-- type: entity
-  id: LockerBrigmedicFilled
-  suffix: Brigmedic, Filled
-  parent: LockerBrigmedic
-  components:
-    - type: StorageFill
-      contents:
-        - id: ClothingEyesGlassesSecurity
-        - id: WeaponDisabler
-        - id: TrackingImplanter
-          amount: 2
-        - id: ClothingOuterHardsuitBrigmedic
-        - id: BoxSterileMask
-        - id: ClothingHeadHatBeretBrigmedic
-        - id: ClothingOuterCoatAMG
-        - id: ClothingUniformJumpsuitBrigmedic
-        - id: ClothingUniformJumpskirtBrigmedic
-        - id: ClothingUniformJumpskirtOfLife
-          prob: 0.1
-        - id: MedkitFilled
-        - id: MedkitCombatFilled
-          prob: 0.6
-        - id: MedkitAdvancedFilled
-          prob: 0.4
-        - id: MedkitOxygenFilled
-          prob: 0.3
-        - id: MedkitBruteFilled
-          prob: 0.3
-        - id: MedkitToxinFilled
-          prob: 0.3
-        - id: MedkitBurnFilled
-          prob: 0.7
-        - id: ClothingNeckCloakMoth #bzzz Moth-pocalypse
-          prob: 0.15
-
-- type: entity
-  id: LockerDetectiveFilled
-  suffix: Filled
-  parent: LockerDetective
-  components:
-    - type: StorageFill
-      contents:
-        - id: ClothingEyesGlassesSecurity
-          prob: 0.3
-        - id: ClothingHeadHatDetGadget
-        - id: ClothingNeckTieDet
-        - id: ClothingOuterVestDetective
-        - id: ClothingOuterCoatDetective
-        - id: FlashlightSeclite
-        - id: ForensicScanner
-        - id: LogProbeCartridge
-        - id: BoxForensicPad
-        - id: DrinkDetFlask
-        - id: ClothingHandsGlovesForensic
-        - id: RubberStampDetective
-        - id: HoloprojectorSecurity
-        - id: BoxEvidenceMarkers
-        - id: HandLabeler
-
-- type: entity
-  id: ClosetBombFilled
-  parent: ClosetBomb
-  suffix: Filled
-  components:
-    - type: StorageFill
-      contents:
-        - id: ClothingHeadHelmetBombSuit
-        - id: ClothingOuterSuitBomb
-        - id: Wirecutter
-        - id: Screwdriver
-        - id: Multitool
-          prob: 0.5
-
-- type: entity
-  parent: [GunSafeBaseSecure, BaseSecurityContraband]
-  id: GunSafeDisabler
-  name: disabler safe
-  components:
-    - type: StorageFill
-      contents:
-        - id: WeaponDisabler
-          amount: 5
-
-- type: entity
-  parent: [GunSafeBaseSecure, BaseSecurityContraband]
-  id: GunSafePistolMk58
-  name: mk58 safe
-  components:
-    - type: StorageFill
-      contents:
-        - id: WeaponPistolMk58
-          amount: 4
-        - id: MagazinePistol
-          amount: 8
-
-- type: entity
-  parent: [GunSafeBaseSecure, BaseSecurityContraband]
-  id: GunSafeRifleLecter
-  name: lecter safe
-  components:
-    - type: StorageFill
-      contents:
-        - id: WeaponRifleLecter
-          amount: 2
-        - id: MagazineRifle
-          amount: 4
-
-- type: entity
-  parent: [GunSafeBaseSecure, BaseSecurityContraband]
-  id: GunSafeSubMachineGunDrozd
-  name: drozd safe
-  components:
-    - type: StorageFill
-      contents:
-        - id: WeaponSubMachineGunDrozd
-          amount: 2
-        - id: MagazinePistolSubMachineGun
-          amount: 4
-
-- type: entity
-  parent: [GunSafeBaseSecure, BaseSecurityContraband]
-  id: GunSafeShotgunEnforcer
-  name: enforcer safe
-  components:
-    - type: StorageFill
-      contents:
-        - id: WeaponShotgunEnforcer
-          amount: 2
-        - id: BoxLethalshot
-          amount: 4
-
-- type: entity
-  parent: [GunSafeBaseSecure, BaseSecurityContraband]
-  id: GunSafeShotgunKammerer
-  name: kammerer safe
-  components:
-    - type: StorageFill
-      contents:
-        - id: WeaponShotgunKammerer
-          amount: 2
-        - id: BoxLethalshot
-          amount: 2
-
-- type: entity
-  id: GunSafeSubMachineGunWt550
-  suffix: Wt550
-  parent: [GunSafeBaseSecure, BaseSecurityContraband]
-  name: wt550 safe
-  components:
-    - type: StorageFill
-      contents:
-        - id: WeaponSubMachineGunWt550
-          amount: 2
-        - id: MagazinePistolSubMachineGunTopMounted
-          amount: 4
-
-- type: entity
-  parent: [GunSafeBaseSecure, BaseSecurityContraband]
-  id: GunSafeLaserCarbine
-  name: laser safe
-  components:
-    - type: StorageFill
-      contents:
-        - id: WeaponLaserCarbine
-          amount: 3

+ 0 - 141
Resources/Prototypes/Catalog/Fills/Lockers/service.yml

@@ -1,141 +0,0 @@
-- type: entity
-  id: LockerBoozeFilled
-  suffix: Filled
-  parent: LockerBooze
-  components:
-  - type: StorageFill
-    contents:
-      - id: ClothingOuterArmorBasicSlim
-      - id: WeaponShotgunDoubleBarreledRubber
-      - id: DrinkShaker
-      - id: ClothingEyesHudBeer
-      - id: HandLabeler
-        amount: 1
-      - id: DrinkBottleBeer
-        prob: 0.5
-      - id: DrinkBottleBeer
-        prob: 0.5
-      - id: DrinkBottleBeer
-        prob: 0.5
-      - id: BoxBeanbag
-        amount: 2
-      - id: RagItem
-        amount: 2
-
-#- type: entity
-#  id: LockerFormalFilled
-#  suffix: Filled
-#  parent: LockerFormal
-
-- type: entity
-  id: ClosetChefFilled
-  suffix: Filled
-  parent: ClosetChef
-  components:
-  - type: StorageFill
-    contents:
-      - id: CrowbarRed
-      - id: VariantCubeBox
-      - id: BoxMousetrap
-        amount: 2
-      - id: SprayBottleWater
-      - id: ReagentContainerFlour
-        amount: 2
-      - id: FoodBoxCloth
-        amount: 1
-      - id: ReagentContainerSugar
-      - id: FoodCondimentPacketSalt
-        amount: 3
-      - id: FoodCondimentPacketPepper
-        amount: 3
-      - id: FoodCondimentBottleEnzyme
-      # really, milk should go in the fridge. Unfortunately saltern only has freezers.
-      # yes, I'm using this as an excuse to not have to do extra work.
-      - id: DrinkMilkCarton
-        amount: 2
-      - id: DrinkSoyMilkCarton
-
-- type: entity
-  id: ClosetJanitorFilled
-  suffix: Filled
-  parent: ClosetJanitor
-  components:
-  - type: StorageFill
-    contents:
-      - id: MopItem
-        amount: 2
-      - id: BoxMousetrap
-        amount: 2
-      - id: WetFloorSign
-        amount: 3
-      - id: TrashBag
-        amount: 2
-      - id: LightReplacer
-      - id: BoxLightMixed
-      - id: Holoprojector
-      - id: SoapNT
-        amount: 2
-      - id: FlashlightLantern
-        amount: 2
-      - id: Plunger
-        amount: 2
-
-- type: entity
-  id: ClosetLegalFilled
-  suffix: Filled
-  parent: ClosetLegal
-  components:
-  - type: StorageFill
-    contents:
-      - id: BriefcaseBrownFilled
-        prob: 0.80
-      - id: ClothingOuterRobesJudge
-
-- type: entity
-  id: LockerBotanistFilled
-  suffix: Filled
-  parent: LockerBotanist
-  components:
-  - type: StorageFill
-    contents:
-      - id: ClothingHandsGlovesLeather
-      - id: ClothingOuterApronBotanist
-      - id: ClothingHeadBandBotany
-      - id: RobustHarvestChemistryBottle
-        prob: 0.3
-      - id: ClothingBeltPlant
-      - id: PlantBag ##Some maps don't have nutrivend
-      - id: BoxMouthSwab
-      - id: Dropper
-      - id: HandLabeler
-      - id: ClothingUniformOveralls
-      - id: ClothingHeadHatTrucker
-        prob: 0.1
-
-- type: entity
-  id: LockerBotanistLoot
-  suffix: Loot
-  parent: LockerBotanist
-  components:
-  - type: StorageFill
-    contents:
-      - id: ClothingUniformOveralls
-      - id: ClothingHeadHatTrucker
-        prob: 0.3
-      - id: GatfruitSeeds
-        prob: 0.1
-      - id: FlyAmanitaSeeds
-        prob: 0.5
-      - id: NettleSeeds
-        prob: 0.7
-
-- type: entity
-  id: ClosetJanitorBombFilled
-  parent: ClosetJanitorBomb
-  suffix: DO NOT MAP, Filled
-  categories: [ DoNotMap ]
-  components:
-  - type: StorageFill
-    contents:
-      - id: ClothingHeadHelmetJanitorBombSuit
-      - id: ClothingOuterSuitJanitorBomb

+ 0 - 51
Resources/Prototypes/Catalog/Fills/Lockers/space_ruin.yml

@@ -1,51 +0,0 @@
-#Old AI sat voidsuits
-- type: entity
-  id: LockerOldAISat
-  name: closet
-  suffix: NTSRA voidsuit locker
-  parent: LockerSyndicate
-  components:
-  - type: StorageFill
-    contents:
-      - id: ClothingHeadHelmetAncient
-      - id: ClothingOuterHardsuitAncientEVA
-      - id: JetpackVoidFilled
-
-#Syndicate ship armory stuff
-- type: entity
-  id: LockerSyndicateShipGearBasic
-  parent: LockerSyndicate
-  suffix: Basic ship gear, Random
-  components:
-  - type: StorageFill
-    contents:
-      - id: CrowbarRed
-        prob: 0.6
-      - id: ClothingShoesBootsCombat
-        prob: 0.4
-      - id: ClothingUniformJumpsuitOperative
-        prob: 0.4
-      - id: ClothingHandsGlovesCombat
-        prob: 0.2
-      - id: ClothingBeltMilitaryWebbing
-        prob: 0.2
-        
-#Garunteed chameleon kit spawn, for the syndicate dropship
-- type: entity
-  id: LockerSyndicateShipGearBasicChameleonKit
-  parent: LockerSyndicateShipGearBasic
-  suffix: Basic ship gear, Random, Chameleon Kit
-  components:
-  - type: StorageFill
-    contents:
-      - id: ClothingBackpackChameleonFill
-      - id: CrowbarRed
-        prob: 0.6
-      - id: ClothingShoesBootsCombat
-        prob: 0.4
-      - id: ClothingUniformJumpsuitOperative
-        prob: 0.4
-      - id: ClothingHandsGlovesCombat
-        prob: 0.2
-      - id: ClothingBeltMilitaryWebbing
-        prob: 0.2

+ 0 - 275
Resources/Prototypes/Catalog/Fills/Lockers/suit_storage.yml

@@ -1,275 +0,0 @@
-#SOFTSUITS
-#Basic EVA
-- type: entity
-  id: SuitStorageEVA
-  parent: SuitStorageBase
-  suffix: EVA
-  components:
-  - type: StorageFill
-    contents:
-        - id: OxygenTankFilled
-        - id: ClothingOuterHardsuitEVA
-        - id: ClothingHeadHelmetEVA
-        - id: ClothingMaskBreath
-
-#Basic EVA (Big Ass Helmet)
-- type: entity
-  id: SuitStorageEVAAlternate
-  parent: SuitStorageBase
-  suffix: EVA, Large Helmet
-  components:
-  - type: StorageFill
-    contents:
-        - id: OxygenTankFilled
-        - id: ClothingOuterHardsuitEVA
-        - id: ClothingHeadHelmetEVALarge
-        - id: ClothingMaskBreath
-
-#Emergency EVA
-- type: entity
-  id: SuitStorageEVAEmergency
-  parent: SuitStorageBase
-  suffix: Emergency EVA
-  components:
-  - type: StorageFill
-    contents:
-        - id: OxygenTankFilled
-        - id: ClothingOuterSuitEmergency
-        - id: ClothingMaskBreath
-
-#Prisoner EVA
-- type: entity
-  id: SuitStorageEVAPrisoner
-  parent: SuitStorageBase
-  suffix: Prisoner EVA
-  components:
-  - type: StorageFill
-    contents:
-        - id: OxygenTankFilled
-        - id: ClothingOuterHardsuitEVAPrisoner
-        - id: ClothingHeadHelmetEVALarge
-        - id: ClothingMaskBreath
-
-#Syndicate EVA
-- type: entity
-  id: SuitStorageEVASyndicate
-  parent: SuitStorageBase
-  suffix: Syndicate EVA
-  components:
-  - type: StorageFill
-    contents:
-        - id: OxygenTankFilled
-        - id: ClothingOuterHardsuitSyndicate
-        - id: ClothingHeadHelmetSyndicate
-        - id: ClothingMaskGasSyndicate
-
-#Pirate EVA
-- type: entity
-  id: SuitStorageEVAPirate
-  parent: SuitStorageBase
-  suffix: Pirate EVA
-  components:
-  - type: StorageFill
-    contents:
-        - id: OxygenTankFilled
-        - id: ClothingOuterHardsuitPirateEVA
-        - id: ClothingMaskGas
-
-#NTSRA Voidsuit
-- type: entity
-  id: SuitStorageNTSRA
-  parent: SuitStorageBase
-  suffix: Ancient EVA
-  components:
-  - type: StorageFill
-    contents:
-        - id: JetpackVoidFilled
-        - id: ClothingOuterHardsuitAncientEVA
-        - id: ClothingHeadHelmetAncient
-        - id: ClothingMaskBreath
-
-#HARDSUITS
-#Basic hardsuit
-- type: entity
-  id: SuitStorageBasic
-  parent: SuitStorageBase
-  suffix: Basic Hardsuit
-  components:
-  - type: StorageFill
-    contents:
-        - id: OxygenTankFilled
-        - id: ClothingOuterHardsuitBasic
-        - id: ClothingMaskBreath
-
-#Engineering hardsuit
-- type: entity
-  id: SuitStorageEngi
-  parent: SuitStorageBase
-  suffix: Station Engineer
-  components:
-  - type: StorageFill
-    contents:
-        - id: OxygenTankFilled
-        - id: ClothingShoesBootsMag
-        - id: ClothingOuterHardsuitEngineering
-        - id: ClothingMaskBreath
-  - type: AccessReader
-    access: [["Engineering"]]
-
-#Atmospherics hardsuit
-- type: entity
-  id: SuitStorageAtmos
-  parent: SuitStorageBase
-  suffix: Atmospheric Technician
-  components:
-  - type: StorageFill
-    contents:
-        - id: OxygenTankFilled
-        - id: ClothingOuterHardsuitAtmos
-        - id: ClothingMaskBreath
-  - type: AccessReader
-    access: [["Atmospherics"]]
-
-#Security hardsuit
-- type: entity
-  id: SuitStorageSec
-  parent: SuitStorageBase
-  suffix: Security
-  components:
-  - type: StorageFill
-    contents:
-        - id: OxygenTankFilled
-        - id: ClothingOuterHardsuitSecurity
-        - id: ClothingMaskBreath
-  - type: AccessReader
-    access: [["Security"]]
-
-#CE's hardsuit
-- type: entity
-  id: SuitStorageCE
-  parent: SuitStorageBase
-  suffix: Chief Engineer
-  components:
-  - type: EntityTableContainerFill
-    containers:
-      entity_storage: !type:NestedSelector
-        tableId: FillChiefEngineerHardsuit
-  - type: AccessReader
-    access: [["ChiefEngineer"]]
-
-#CMO's hardsuit
-- type: entity
-  id: SuitStorageCMO
-  parent: SuitStorageBase
-  suffix: Chief Medical Officer
-  components:
-  - type: EntityTableContainerFill
-    containers:
-      entity_storage: !type:NestedSelector
-        tableId: FillChiefMedicalOfficerHardsuit
-  - type: AccessReader
-    access: [ [ "ChiefMedicalOfficer" ] ]
-
-#RD's hardsuit
-- type: entity
-  id: SuitStorageRD
-  parent: SuitStorageBase
-  suffix: Research Director
-  components:
-  - type: EntityTableContainerFill
-    containers:
-      entity_storage: !type:NestedSelector
-        tableId: FillResearchDirectorHardsuit
-  - type: AccessReader
-    access: [ [ "ResearchDirector" ] ]
-
-#HOS's hardsuit
-- type: entity
-  id: SuitStorageHOS
-  parent: SuitStorageBase
-  suffix: Head of Security
-  components:
-  - type: EntityTableContainerFill
-    containers:
-      entity_storage: !type:NestedSelector
-        tableId: FillHeadOfSecurityHardsuit
-  - type: AccessReader
-    access: [["HeadOfSecurity"]]
-
-#Warden's hardsuit
-- type: entity
-  id: SuitStorageWarden
-  parent: SuitStorageBase
-  suffix: Warden
-  components:
-  - type: StorageFill
-    contents:
-        - id: OxygenTankFilled
-        - id: ClothingOuterHardsuitWarden
-        - id: ClothingMaskBreath
-  - type: AccessReader
-    access: [["Armory"]]
-
-#Captain's hardsuit
-- type: entity
-  id: SuitStorageCaptain
-  parent: SuitStorageBase
-  suffix: Captain
-  components:
-  - type: EntityTableContainerFill
-    containers:
-      entity_storage: !type:NestedSelector
-        tableId: FillCaptainHardsuit
-  - type: AccessReader
-    access: [["Captain"]]
-
-#Salvage hardsuit
-- type: entity
-  id: SuitStorageSalv
-  parent: SuitStorageBase
-  suffix: Salvage
-  components:
-  - type: EntityTableContainerFill
-    containers:
-      entity_storage: !type:NestedSelector
-        tableId: FillSalvageSpecialistHardsuitSpatio
-  - type: AccessReader
-    access: [["Salvage"]]
-
-#Blood-red hardsuit
-- type: entity
-  id: SuitStorageSyndie
-  parent: SuitStorageBase
-  suffix: Syndicate Hardsuit
-  components:
-  - type: StorageFill
-    contents:
-        - id: OxygenTankFilled
-        - id: ClothingOuterHardsuitSyndie
-        - id: ClothingShoesBootsMagSyndie
-        - id: ClothingMaskGasSyndicate
-
-#Pirate Captain's hardsuit
-- type: entity
-  id: SuitStoragePirateCap
-  parent: SuitStorageBase
-  suffix: Pirate Captain
-  components:
-  - type: StorageFill
-    contents:
-        - id: OxygenTankFilled
-        - id: ClothingOuterHardsuitPirateCap
-        - id: ClothingMaskGas
-
-#Wizard
-- type: entity
-  id: SuitStorageWizard
-  parent: SuitStorageBase
-  suffix: Wizard
-  components:
-  - type: StorageFill
-    contents:
-        - id: OxygenTankFilled
-        - id: ClothingOuterHardsuitWizard
-        - id: ClothingMaskBreath
-        - id: JetpackVoidFilled

+ 0 - 125
Resources/Prototypes/Catalog/Fills/Lockers/wardrobe_colors.yml

@@ -1,125 +0,0 @@
-- type: entity
-  id: WardrobeGreyFilled
-  suffix: Filled
-  parent: WardrobeGrey
-  components:
-  - type: StorageFill
-    contents:
-      - id: ClothingUniformJumpsuitColorGrey
-        amount: 2
-      - id: ClothingUniformJumpskirtColorGrey
-        amount: 2
-      - id: ClothingShoesColorBlack
-        amount: 3
-      - id: ClothingHeadHatGreysoft
-      - id: ClothingBackpackDuffel
-        prob: 0.5
-      - id: ClothingOuterCoatBomber
-        prob: 0.3
-
-- type: entity
-  id: WardrobeMixedFilled
-  suffix: Filled
-  parent: WardrobeMixed
-  components:
-  - type: StorageFill
-    contents:
-      - id: ClothingShoesColorBlack
-        amount: 1
-      - id: ClothingShoesColorBrown
-        amount: 1
-      - id: ClothingShoesColorWhite
-        amount: 1
-      - id: ClothingOuterCoatBomber
-        prob: 0.4
-      - id: ClothingOuterCoatGentle
-        prob: 0.3
-      - id: ClothingUniformRandomShorts
-        amount: 3
-      - id: ClothingUniformRandomArmless
-        amount: 5
-      - id: ClothingUniformRandomStandard
-        amount: 5
-      - id: ClothingUniformRandomBra
-        amount: 5
-      - id: ClothingUniformRandomShirt
-        amount: 4
-
-- type: entity
-  id: WardrobeYellowFilled
-  suffix: Filled
-  parent: WardrobeYellow
-  components:
-  - type: StorageFill
-    contents:
-      - id: ClothingUniformJumpsuitColorYellow
-      - id: ClothingUniformJumpskirtColorYellow
-      - id: ClothingShoesColorOrange
-        amount: 2
-      - id: ClothingHeadBandGold
-
-
-- type: entity
-  id: WardrobeWhiteFilled
-  suffix: Filled
-  parent: WardrobeWhite
-  components:
-  - type: StorageFill
-    contents:
-      - id: ClothingUniformJumpsuitColorWhite
-      - id: ClothingUniformJumpskirtColorWhite
-      - id: ClothingShoesColorWhite
-        amount: 2
-      - id: ClothingHeadHatMimesoft
-
-- type: entity
-  id: WardrobeBlueFilled
-  suffix: Filled
-  parent: WardrobeBlue
-  components:
-  - type: StorageFill
-    contents:
-      - id: ClothingUniformJumpsuitColorBlue
-      - id: ClothingUniformJumpskirtColorBlue
-      - id: ClothingShoesColorBrown
-        amount: 2
-
-- type: entity
-  id: WardrobePinkFilled
-  suffix: Filled
-  parent: WardrobePink
-  components:
-  - type: StorageFill
-    contents:
-      - id: ClothingUniformJumpsuitColorPink
-      - id: ClothingUniformJumpskirtColorPink
-      - id: ClothingShoesColorBrown
-        amount: 2
-
-- type: entity
-  id: WardrobeBlackFilled
-  suffix: Filled
-  parent: WardrobeBlack
-  components:
-  - type: StorageFill
-    contents:
-      - id: ClothingUniformJumpsuitColorBlack
-      - id: ClothingUniformJumpskirtColorBlack
-      - id: ClothingShoesColorBlack
-        amount: 2
-      - id: ClothingHeadBandBlack
-      - id: ClothingHeadBandSkull
-        prob: 0.4
-
-- type: entity
-  id: WardrobeGreenFilled
-  suffix: Filled
-  parent: WardrobeGreen
-  components:
-  - type: StorageFill
-    contents:
-      - id: ClothingUniformJumpsuitColorGreen
-      - id: ClothingUniformJumpskirtColorGreen
-      - id: ClothingShoesColorBlack
-        amount: 2
-      - id: ClothingHeadBandGreen

+ 0 - 221
Resources/Prototypes/Catalog/Fills/Lockers/wardrobe_job.yml

@@ -1,221 +0,0 @@
- - type: entity
-   id: WardrobePrisonFilled
-   suffix: Filled
-   parent: WardrobePrison
-   description: "Contains a selection of nice orange clothes for people enjoying their stay in the brig."
-   components:
-   - type: StorageFill
-     contents:
-       - id: ClothingUniformJumpsuitPrisoner
-         amount: 2
-       - id: ClothingUniformJumpskirtPrisoner
-         amount: 2
-       - id: ClothingShoesColorBlack
-         amount: 2
-       - id: ClothingMaskMuzzle
-
-#- type: entity
-#  id: WardrobePajamaFilled
-#  suffix: Filled
-#  parent: WardrobeWhite
-#  name: pajama wardrobe
-
- - type: entity
-   id: WardrobeRoboticsFilled
-   suffix: Filled
-   parent: WardrobeRobotics
-   description: "You can build a robot out of this locker."
-   components:
-   - type: StorageFill
-     contents:
-     - id: ClothingOuterCoatRobo
-       amount: 2
-     - id: ClothingUniformJumpsuitRoboticist
-     - id: ClothingUniformJumpskirtRoboticist
-     - id: ClothingShoesColorBlack
-       amount: 2
-     - id: ClothingHandsGlovesFingerless
-       amount: 2
-
- - type: entity
-   id: WardrobeChemistryFilled
-   suffix: Filled
-   parent: WardrobeChemistry
-   description: "The sleek orange threads contained within make you much less likely to be thrown out of the chemistry lab."
-   components:
-   - type: StorageFill
-     contents:
-       - id: ClothingUniformJumpsuitChemistry
-       - id: ClothingBackpackChemistry
-       - id: ClothingShoesColorWhite
-       - id: ClothingOuterCoatLabChem
-       - id: ClothingUniformJumpskirtChemistry
-
- - type: entity
-   id: WardrobeGeneticsFilled
-   suffix: Filled
-   parent: WardrobeGenetics
-   description: "The sleek blue threads contained within make you much less likely to be thrown out of the genetics lab."
-   components:
-   - type: StorageFill
-     contents:
-       - id: ClothingUniformJumpsuitGenetics
-       - id: ClothingBackpackGenetics
-       - id: ClothingShoesColorWhite
-       - id: ClothingOuterCoatLabGene
-       - id: ClothingUniformJumpskirtGenetics
-
- - type: entity
-   id: WardrobeVirologyFilled
-   suffix: Filled
-   parent: WardrobeVirology
-   description: "The sleek green threads contained within make you much less likely to be thrown out of the virology lab."
-   components:
-   - type: StorageFill
-     contents:
-       - id: ClothingUniformJumpsuitVirology
-       - id: ClothingBackpackVirology
-       - id: ClothingShoesColorWhite
-       - id: ClothingOuterCoatLabViro
-       - id: ClothingUniformJumpskirtVirology
-
- - type: entity
-   id: WardrobeScienceFilled
-   suffix: Filled
-   parent: WardrobeScience
-   description: "You've read a couple pop science articles, now it's time for the real deal."
-   components:
-   - type: StorageFill
-     contents:
-       - id: ClothingUniformJumpsuitScientist
-       - id: ClothingBackpackScience
-       - id: ClothingShoesColorWhite
-       - id: ClothingOuterCoatRnd
-       - id: ClothingUniformJumpskirtScientist
-       - id: ClothingEyesGlasses
-         prob: 0.5
-       - id: CrowbarRed #The jojoke - hit video game Half-Life
-         prob: 0.1
-
-
- - type: entity
-   id: WardrobeBotanistFilled
-   suffix: Filled
-   parent: WardrobeBotanist
-   description: "Plant yourself among the plant men with these 100% natural plant-derived clothes."
-   components:
-   - type: StorageFill
-     contents:
-       - id: ClothingUniformJumpsuitHydroponics
-       - id: ClothingBackpackHydroponics
-       - id: ClothingShoesColorBrown
-       - id: ClothingOuterApronBotanist
-       - id: ClothingUniformJumpskirtHydroponics
-       - id: ClothingUniformOveralls
-       - id: ClothingHeadHatTrucker #the hat itself is a subtle joke
-         prob: 0.15
-       - id: ClothingHandsGlovesLeather
-         prob: 0.5
-
- - type: entity
-   id: WardrobeMedicalDoctorFilled
-   suffix: Filled
-   parent: WardrobeMedicalDoctor
-   description: "We've all played doctor before, now practice medicine."
-   components:
-   - type: StorageFill
-     contents:
-       - id: ClothingUniformJumpsuitMedicalDoctor
-       - id: ClothingBackpackMedical
-       - id: ClothingShoesColorWhite
-       - id: ClothingOuterCoatLab
-       - id: ClothingUniformJumpskirtMedicalDoctor
-       - id: ClothingHandsGlovesLatex
-         prob: 0.4
-       - id: ClothingEyesGlasses
-         prob: 0.3
-
- - type: entity
-   id: WardrobeChapelFilled
-   suffix: Filled
-   parent: WardrobeChapel
-   description: "You have to look presentable for your flock."
-   components:
-   - type: StorageFill
-     contents: # todo chaplain backpack
-       - id: ClothingUniformJumpsuitChaplain
-       - id: ClothingShoesColorBlack
-       - id: ClothingUniformJumpskirtChaplain
-
- - type: entity
-   id: WardrobeSecurityFilled
-   suffix: Filled
-   parent: WardrobeSecurity
-   description: "Cross the thin red line."
-   components:
-   - type: StorageFill
-     contents:
-       - id: ClothingUniformJumpsuitSec
-       - id: ClothingBackpackSecurity
-       - id: ClothingShoesBootsJack
-       - id: ClothingEyesGlassesSunglasses
-       - id: ClothingHeadHelmetBasic
-       - id: ClothingOuterArmorBasic
-       - id: ClothingUniformJumpskirtSec
-
- - type: entity
-   id: WardrobeCargoFilled
-   suffix: Filled
-   parent: WardrobeCargo
-   description: "This locker? Maybe 500 spesos. Brotherhood? Priceless."
-   components:
-   - type: StorageFill
-     contents:
-       - id: ClothingHeadHatCargosoft
-       - id: ClothingUniformJumpsuitCargo
-       - id: ClothingBackpack
-       - id: ClothingShoesColorBlack
-       - id: ClothingUniformJumpskirtCargo
-       - id: ClothingHandsGlovesFingerless
-       - id: AppraisalTool
-
- - type: entity
-   id: WardrobeSalvageFilled
-   suffix: Filled
-   parent: WardrobeSalvage
-   components:
-   - type: StorageFill
-     contents:
-       - id: ClothingBackpack
-       - id: ClothingShoesBootsSalvage
-         amount: 2
-       - id: ClothingUniformJumpsuitSalvageSpecialist
-         amount: 2
-
- - type: entity
-   id: WardrobeAtmosphericsFilled
-   suffix: Filled
-   parent: WardrobeAtmospherics
-   description: "This locker contains a uniform for atmospheric technicians."
-   components:
-   - type: StorageFill
-     contents:
-       - id: ClothingUniformJumpsuitAtmos
-       - id: ClothingBackpackEngineering
-       - id: ClothingShoesColorWhite
-       - id: ClothingUniformJumpskirtAtmos
-
- - type: entity
-   id: WardrobeEngineeringFilled
-   suffix: Filled
-   parent: WardrobeEngineering
-   description: "This locker contains a uniform for engineering or social engineering."
-   components:
-   - type: StorageFill
-     contents:
-       - id: ClothingHeadHatHardhatYellow
-       - id: ClothingUniformJumpsuitEngineering
-       - id: ClothingBackpackEngineering
-       - id: ClothingShoesBootsWork
-       - id: ClothingOuterVestHazard
-       - id: ClothingUniformJumpskirtEngineering

+ 0 - 20
Resources/Prototypes/Catalog/VendingMachines/Inventories/ammo.yml

@@ -1,20 +0,0 @@
-- type: vendingMachineInventory
-  id: AmmoVendInventory
-  startingInventory:
-    MagazineBoxCaselessRifle: 6
-    MagazineBoxCaselessRiflePractice: 3
-
-    MagazineBoxLightRifleBig: 6
-    MagazineBoxLightRiflePractice: 3
-
-    MagazineBoxMagnum: 6
-    MagazineBoxMagnumPractice: 3
-
-    MagazineBoxPistol: 6
-    MagazineBoxPistolPractice: 3
-
-    MagazineBoxRifle: 6
-    MagazineBoxRiflePractice: 3
-
-    BoxLethalshot: 6
-    BoxShotgunPractice: 3

+ 0 - 17
Resources/Prototypes/Catalog/VendingMachines/Inventories/atmosdrobe.yml

@@ -1,17 +0,0 @@
-- type: vendingMachineInventory
-  id: AtmosDrobeInventory
-  startingInventory:
-    ClothingBackpackDuffelAtmospherics: 2
-    ClothingBackpackSatchelAtmospherics: 2
-    ClothingBackpackAtmospherics: 2
-    ClothingUniformJumpsuitAtmos: 3
-    ClothingUniformJumpskirtAtmos: 3
-    ClothingUniformJumpsuitAtmosCasual: 3
-    ClothingShoesColorWhite: 3
-    ClothingHeadsetEngineering: 2
-    ClothingHeadHelmetFire: 2
-    ClothingOuterSuitFire: 2
-    ClothingOuterWinterAtmos: 2
-    ClothingNeckScarfStripedLightBlue: 3
-  contrabandInventory:
-    ToyFigurineAtmosTech: 1

+ 0 - 20
Resources/Prototypes/Catalog/VendingMachines/Inventories/bardrobe.yml

@@ -1,20 +0,0 @@
-- type: vendingMachineInventory
-  id: BarDrobeInventory
-  startingInventory:
-    ClothingHeadHatBowlerHat: 2
-    ClothingHeadHatTophat: 2
-    ClothingEyesHudBeer: 2
-    ClothingEyesEyepatchHudBeer: 2
-    ClothingHeadsetService: 2
-    ClothingOuterApronBar: 2
-    ClothingOuterWinterBar: 2
-    ClothingUniformJumpsuitBartender: 2
-    ClothingUniformJumpskirtBartender: 2
-    ClothingUniformJumpsuitBartenderPurple: 2
-    ClothingShoesColorBlack: 2
-    ClothingOuterArmorBasicSlim: 2
-    ClothingOuterVest: 2
-    ClothingBeltBandolier: 2
-    ClothingEyesGlassesSunglasses: 2
-  contrabandInventory:
-    ToyFigurineBartender: 1

+ 0 - 53
Resources/Prototypes/Catalog/VendingMachines/Inventories/boozeomat.yml

@@ -1,53 +0,0 @@
-- type: vendingMachineInventory
-  id: BoozeOMatInventory
-  startingInventory:
-    DrinkGlass: 20 #Kept glasses at top for ease to differentiate from booze.
-    DrinkShotGlass: 10
-    DrinkGlassCoupeShaped: 10
-    DrinkVacuumFlask: 5
-    DrinkFlaskBar: 5
-    DrinkShaker: 5
-    DrinkJigger: 5
-    DrinkIceBucket: 2
-    BarSpoon: 3
-    CustomDrinkJug: 2 #to allow for custom drinks in the soda/booze dispensers
-    DrinkAbsintheBottleFull: 2
-    DrinkAleBottleFull: 5
-    DrinkBeerBottleFull: 5
-    DrinkBlueCuracaoBottleFull: 2
-    DrinkCognacBottleFull: 4
-    DrinkCoconutWaterCarton: 3
-    DrinkColaBottleFull: 4
-    DrinkEnergyDrinkCan: 8
-    DrinkMilkCarton: 2
-    DrinkCreamCarton: 5
-    DrinkGinBottleFull: 3
-    DrinkGildlagerBottleFull: 2 #if champagne gets less because its premium, then gildlager should match this and have two
-    DrinkGrenadineBottleFull: 2
-    DrinkJuiceLimeCarton: 3
-    DrinkJuiceLemonCarton: 3
-    DrinkJuiceOrangeCarton: 3
-    DrinkJuiceTomatoCarton: 3
-    DrinkCoffeeLiqueurBottleFull: 3
-    DrinkMelonLiquorBottleFull: 3
-    DrinkPatronBottleFull: 2
-    DrinkRumBottleFull: 4
-    DrinkSodaWaterCan: 8
-    DrinkSolDryCan: 8
-    DrinkSpaceMountainWindBottleFull: 3
-    DrinkSpaceUpBottleFull: 3
-    DrinkTequilaBottleFull: 3
-    DrinkTonicWaterCan: 8
-    DrinkVermouthBottleFull: 5
-    DrinkVodkaBottleFull: 5
-    DrinkWhiskeyBottleFull: 5
-    DrinkWineBottleFull: 5
-    DrinkChampagneBottleFull: 2 #because the premium drink
-    DrinkSakeBottleFull: 3
-    DrinkBeerCan: 5
-    DrinkWineCan: 5
-  contrabandInventory:
-    EthanolChemistryBottle: 3
-    DrinkBottleOfNothingFull: 1
-  emaggedInventory:
-    DrinkPoisonWinebottleFull: 2

+ 0 - 22
Resources/Prototypes/Catalog/VendingMachines/Inventories/cargodrobe.yml

@@ -1,22 +0,0 @@
-- type: vendingMachineInventory
-  id: CargoDrobeInventory
-  startingInventory:
-    ClothingBackpackCargo: 3
-    ClothingBackpackSatchelCargo: 3
-    ClothingBackpackDuffelCargo: 3
-    ClothingUniformJumpsuitCargo: 3
-    ClothingUniformJumpskirtCargo: 3
-    ClothingShoesColorBlack: 3
-    ClothingHandsGlovesFingerless: 3
-    ClothingHeadHatCargosoft: 3
-    ClothingHeadBandBrown: 3
-    ClothingHeadsetCargo: 3
-    ClothingOuterWinterCargo: 2
-    ClothingOuterWinterMiner: 2
-    ClothingNeckScarfStripedBrown: 3
-    ClothingShoesBootsWinterCargo: 2
-    MailBag: 2
-  contrabandInventory:
-    ToyFigurineCargoTech: 1
-    ToyFigurineSalvage: 1
-    ToyFigurineQuartermaster: 1

+ 0 - 21
Resources/Prototypes/Catalog/VendingMachines/Inventories/cart.yml

@@ -1,21 +0,0 @@
-- type: vendingMachineInventory
-  id: PTechInventory
-  startingInventory:
-    PassengerPDA: 5
-    ClearPDA: 5
-    PassengerIDCard: 5
-    ClothingHeadsetGrey: 5
-    RubberStampApproved: 1
-    RubberStampDenied: 1
-    Paper: 10
-    Envelope: 10
-    HandLabeler: 2
-    EncryptionKeyCargo: 2
-    EncryptionKeyEngineering: 2
-    EncryptionKeyMedical: 2
-    EncryptionKeyScience: 2
-    EncryptionKeySecurity: 1
-    EncryptionKeyService: 3
-  contrabandInventory:
-    BalloonNT: 2
-    LuxuryPen: 1

+ 0 - 23
Resources/Prototypes/Catalog/VendingMachines/Inventories/centdrobe.yml

@@ -1,23 +0,0 @@
-- type: vendingMachineInventory
-  id: CentDrobeInventory
-  startingInventory:
-    ClothingShoesBootsLaceup: 3
-    ClothingShoesBootsJack: 3
-    ClothingHandsGlovesCombat: 3
-    ClothingEyesGlassesSunglasses: 3
-    ClothingUniformJumpsuitCentcomOfficer: 3
-    ClothingUniformJumpsuitCentcomOfficial: 3
-    ClothingUniformJumpsuitCentcomAgent: 3
-    ClothingUniformJumpsuitCentcomFormal: 3
-    ClothingUniformJumpskirtCentcomFormalDress: 3
-    ClothingHeadHatCentcom: 3
-    ClothingHeadHatCentcomcap: 3
-    ClothingMaskGasCentcom: 3
-    ClothingHeadsetCentCom: 3
-    ClothingOuterWinterCentcom: 3
-    ClothingOuterCoatExpensive: 1
-    ClothingNeckScarfStripedCentcom: 3
-    ClothingNeckCloakCentcom: 3
-  contrabandInventory:
-    ToyFigurineCaptain: 1
-    ToyFigurineHeadOfPersonnel: 1

+ 0 - 14
Resources/Prototypes/Catalog/VendingMachines/Inventories/chang.yml

@@ -1,14 +0,0 @@
-- type: vendingMachineInventory
-  id: ChangInventory
-  startingInventory:
-    FoodCondimentPacketSoy: 5
-    FoodSnackCookieFortune: 5
-    DrinkRamen: 3
-    DrinkHellRamen: 3
-    FoodSnackChowMein: 3
-    FoodSnackDanDanNoodles: 3
-    PairedChopsticks: 3
-  contrabandInventory:
-    FoodBakedDumplings: 2
-    FoodSoupMiso: 2
-# rice?

+ 0 - 35
Resources/Prototypes/Catalog/VendingMachines/Inventories/chapel.yml

@@ -1,35 +0,0 @@
-- type: vendingMachineInventory
-  id: PietyVendInventory
-  startingInventory:
-    ClothingUniformJumpsuitChaplain: 2
-    ClothingUniformJumpskirtChaplain: 2
-    ClothingUniformJumpsuitMonasticRobeDark: 1
-    ClothingUniformJumpsuitMonasticRobeLight: 1
-    ClothingNeckStoleChaplain: 1
-    ClothingOuterHoodieChaplain: 1
-    ClothingOuterHoodieBlack: 1
-    ClothingHeadHatHoodNunHood: 1
-    ClothingOuterNunRobe: 1
-    ClothingHeadHatFez: 1
-    ClothingHeadHatPlaguedoctor: 1
-    ClothingHeadHatWitch: 1
-    ClothingHeadHatWitch1: 1
-    ClothingOuterPlagueSuit: 1
-    ClothingMaskPlague: 1
-    ClothingHeadsetService: 2
-    BoxCandle: 2
-    BoxCandleSmall: 2
-    Urn: 5
-    Bible: 1
-  contrabandInventory:
-    FoodBakedBunHotX: 2
-    DrinkWineBottleFull: 1
-    ToyFigurineChaplain: 1
-  emaggedInventory:
-    ClothingOuterArmorCult: 1
-    ClothingHeadHelmetCult: 1
-    ClothingOuterRobesCult: 3
-    ClothingHeadHatHoodCulthood: 3
-    ClothingShoesCult: 4
-    BedsheetCult: 4
-    ClothingNeckScarfStripedBlack: 3

+ 0 - 16
Resources/Prototypes/Catalog/VendingMachines/Inventories/chefdrobe.yml

@@ -1,16 +0,0 @@
-- type: vendingMachineInventory
-  id: ChefDrobeInventory
-  startingInventory:
-    ClothingHeadsetService: 2
-    ClothingOuterApronChef: 3
-    ClothingOuterWinterChef: 2
-    ClothingOuterJacketChef: 1
-    ClothingUniformJumpsuitChef: 1
-    ClothingMaskItalianMoustache: 2
-    ClothingUniformJumpskirtChef:  2
-    ClothingHeadHatChef: 2
-    ClothingShoesColorBlack: 2
-    ClothingShoesChef: 2
-    ClothingBeltChef: 2
-  contrabandInventory:
-    ToyFigurineChef: 1

+ 0 - 28
Resources/Prototypes/Catalog/VendingMachines/Inventories/chefvend.yml

@@ -1,28 +0,0 @@
-- type: vendingMachineInventory
-  id: ChefvendInventory
-  startingInventory:
-    ReagentContainerFlour: 2
-    ReagentContainerCornmeal: 2
-    ReagentContainerSugar: 2
-    ReagentContainerRice: 2
-    FoodCondimentPacketSalt: 4
-    FoodCondimentBottleEnzyme: 2
-    FoodCondimentBottleHotsauce: 1
-    FoodCondimentBottleKetchup: 1
-    FoodCondimentBottleBBQ: 1
-    FoodCondimentBottleVinegar: 2
-    ReagentContainerOliveoil: 2
-    ReagentContainerMayo: 1
-    VariantCubeBox: 1
-    FoodContainerEgg: 1
-    DrinkMilkCarton: 2
-    DrinkSoyMilkCarton: 1
-    FoodButter: 3
-    FoodCheese: 1
-    FoodMeat: 6
-  contrabandInventory:
-    EggBoxBroken: 1
-    FoodBoxDonkpocket: 1
-    FoodFrozenSandwich: 2
-    FoodFrozenSandwichStrawberry: 2
-    

+ 0 - 18
Resources/Prototypes/Catalog/VendingMachines/Inventories/chemdrobe.yml

@@ -1,18 +0,0 @@
-- type: vendingMachineInventory
-  id: ChemDrobeInventory
-  startingInventory:
-    ClothingUniformJumpsuitChemistry: 2
-    ClothingUniformJumpskirtChemistry: 2
-    ClothingOuterCoatLabChem: 2
-    ClothingShoesColorWhite: 2
-    ClothingBackpackChemistry: 2
-    ClothingBackpackSatchelChemistry: 2
-    ClothingBackpackDuffelChemistry: 2
-    ChemBag: 2
-    HandLabeler: 3
-    ClothingBeltMedical: 2
-    ClothingHandsGlovesLatex: 2
-    ClothingHeadsetMedical: 2
-    ClothingOuterWinterChem: 2
-  contrabandInventory:
-    ToyFigurineChemist: 1

+ 0 - 64
Resources/Prototypes/Catalog/VendingMachines/Inventories/chemvend.yml

@@ -1,64 +0,0 @@
-- type: vendingMachineInventory
-  id: ChemVendInventory
-  startingInventory:
-    Jug: 4
-    JugAluminium: 2
-    JugCarbon: 4
-    JugChlorine: 1
-    JugCopper: 2
-    JugEthanol: 2
-    JugFluorine: 1
-    JugHydrogen: 3
-    JugIodine: 1
-    JugIron: 2
-    JugLithium: 2
-    JugMercury: 1
-    JugNitrogen: 3
-    JugOxygen: 3
-    JugPhosphorus: 1
-    JugPotassium: 2
-    JugRadium: 1
-    JugSilicon: 2
-    JugSodium: 2
-    JugSugar: 3
-    JugSulfur: 1
-  contrabandInventory:
-    DrinkLithiumFlask: 1
-    StrangePill: 3
-  emaggedInventory:
-    ToxinChemistryBottle: 1
-
-- type: vendingMachineInventory
-  id: ChemVendInventorySyndicate
-  startingInventory:
-    Jug: 4
-    JugAluminium: 2
-    JugCarbon: 4
-    JugChlorine: 1
-    JugCopper: 2
-    JugEthanol: 2
-    JugFluorine: 1
-    JugHydrogen: 3
-    JugIodine: 1
-    JugIron: 2
-    JugLithium: 2
-    JugMercury: 1
-    JugNitrogen: 3
-    JugOxygen: 3
-    JugPhosphorus: 1
-    JugPotassium: 2
-    JugRadium: 1
-    JugSilicon: 2
-    JugSodium: 2
-    JugSugar: 3
-    JugSulfur: 1
-    JugWeldingFuel: 1
-  contrabandInventory:
-    DrinkLithiumFlask: 1
-    StrangePill: 3
-  emaggedInventory:
-    PaxChemistryBottle: 3
-    MuteToxinChemistryBottle: 3
-    LeadChemistryBottle: 2
-    ToxinChemistryBottle: 1
-    

+ 0 - 101
Resources/Prototypes/Catalog/VendingMachines/Inventories/clothesmate.yml

@@ -1,101 +0,0 @@
-# DO NOT ADD MORE, USE UNIFORM DYING
-- type: vendingMachineInventory
-  id: ClothesMateInventory
-  startingInventory:
-    ClothingBackpack: 5
-    ClothingBackpackDuffel: 5
-    ClothingBackpackSatchel: 3
-    ClothingBackpackSatchelLeather: 2
-    ClothingRandomSpawner: 8
-    ClothingHeadHatBeret: 4
-    ClothingHeadBandBlack: 2
-    ClothingHeadBandBlue: 2
-    ClothingHeadBandGreen: 2
-    ClothingHeadBandRed: 2
-    ClothingHeadBandSkull: 2
-    ClothingHeadHatGreyFlatcap: 3
-    ClothingHeadHatBrownFlatcap: 3
-    ClothingUniformJumpsuitColorGrey: 8
-    ClothingUniformJumpskirtColorGrey: 8
-    ClothingUniformJumpsuitColorWhite: 3
-    ClothingUniformJumpskirtColorWhite: 3
-    ClothingUniformJumpsuitColorBlack: 3
-    ClothingUniformJumpskirtColorBlack: 3
-    ClothingUniformJumpsuitColorBlue: 2
-    ClothingUniformJumpskirtColorBlue: 2
-    ClothingUniformJumpsuitColorYellow: 2
-    ClothingUniformJumpskirtColorYellow: 2
-    ClothingUniformJumpsuitColorGreen: 2
-    # DO NOT ADD MORE, USE UNIFORM DYING
-    ClothingUniformJumpskirtColorGreen: 2
-    ClothingUniformJumpsuitColorOrange: 2
-    ClothingUniformJumpskirtColorOrange: 2
-    ClothingUniformJumpsuitColorRed: 2
-    ClothingUniformJumpskirtColorRed: 2
-    ClothingUniformJumpsuitColorPurple: 2
-    ClothingUniformJumpskirtColorPurple: 2
-    ClothingUniformJumpsuitColorPink: 2
-    ClothingUniformJumpskirtColorPink: 2
-    ClothingUniformJumpsuitColorDarkBlue: 2
-    ClothingUniformJumpskirtColorDarkBlue: 2
-    ClothingUniformJumpsuitColorDarkGreen:  2
-    ClothingUniformJumpskirtColorDarkGreen: 2
-    ClothingUniformJumpsuitColorTeal: 2
-    ClothingUniformJumpskirtColorTeal: 2
-    ClothingUniformJumpsuitHawaiBlack: 2
-    ClothingUniformJumpsuitHawaiBlue: 2
-    ClothingUniformJumpsuitHawaiRed: 2
-    ClothingUniformJumpsuitHawaiYellow: 2
-    ClothingUniformJumpsuitFlannel: 2
-    ClothingUniformJumpsuitCasualBlue: 2
-    ClothingUniformJumpskirtCasualBlue: 2
-    ClothingUniformJumpsuitCasualPurple: 2
-    ClothingUniformJumpskirtCasualPurple: 2
-    ClothingUniformJumpsuitCasualRed: 2
-    ClothingUniformJumpskirtCasualRed: 2
-    ClothingUniformJumpsuitCasualGreen: 2
-    ClothingUniformJumpskirtCasualGreen: 2
-    # DO NOT ADD MORE, USE UNIFORM DYING
-    ClothingShoesColorBlack: 8
-    ClothingShoesColorBrown: 4
-    ClothingShoesColorWhite: 3
-    ClothingShoesColorBlue: 2
-    ClothingShoesColorYellow: 2
-    ClothingShoesColorGreen: 2
-    ClothingShoesColorOrange: 2
-    ClothingShoesColorRed: 2
-    ClothingShoesColorPurple: 2
-    ClothingHeadHatGreysoft: 8
-    ClothingHeadHatMimesoft: 3
-    ClothingHeadHatBluesoft: 2
-    ClothingHeadHatYellowsoft: 2
-    ClothingHeadHatGreensoft: 2
-    ClothingHeadHatOrangesoft: 2
-    ClothingHeadHatRedsoft: 2
-    # DO NOT ADD MORE, USE UNIFORM DYING
-    ClothingHeadHatBlacksoft: 2
-    ClothingHeadHatPurplesoft: 2
-    ClothingHeadHatCorpsoft: 2
-    ClothingHeadFishCap: 2
-    ClothingHeadRastaHat: 2
-    ClothingBeltStorageWaistbag: 3
-    ClothingEyesGlasses: 6
-    ClothingHandsGlovesColorBlack: 4
-    ClothingHandsGlovesColorGray: 4
-    ClothingHandsGlovesColorBrown: 2
-    ClothingHandsGlovesColorWhite: 2
-    ClothingHandsGlovesColorRed: 2
-    ClothingHandsGlovesColorBlue: 2
-    ClothingHandsGlovesColorTeal: 2
-    ClothingHandsGlovesColorGreen: 2
-    ClothingHandsGlovesColorOrange: 2
-    ClothingHandsGlovesColorPurple: 2
-    ClothingEyesGlassesCheapSunglasses: 3
-    # DO NOT ADD MORE, USE UNIFORM DYING
-  contrabandInventory:
-    ClothingMaskNeckGaiter: 2
-    ClothingUniformJumpsuitTacticool: 1
-    ClothingUniformJumpskirtTacticool: 1
-    ToyFigurinePassenger: 1
-    ToyFigurineGreytider: 1
-  # DO NOT ADD MORE, USE UNIFORM DYING

+ 0 - 19
Resources/Prototypes/Catalog/VendingMachines/Inventories/curadrobe.yml

@@ -1,19 +0,0 @@
-- type: vendingMachineInventory
-  id: CuraDrobeInventory
-  startingInventory:
-    BooksBag: 2
-    BriefcaseBrown: 2
-    HandLabeler: 2
-    Cane: 3
-    ClothingEyesGlasses: 2
-    ClothingEyesGlassesJamjar: 2
-    ClothingNeckScarfStripedGreen: 2
-    ClothingUniformJumpsuitCurator: 3
-    ClothingUniformJumpskirtCurator: 3
-    ClothingUniformJumpsuitLibrarian: 3
-    ClothingUniformJumpskirtLibrarian: 3
-    ClothingShoesBootsLaceup: 2
-    ClothingHeadsetService: 2
-  contrabandInventory:
-    ToyFigurineLibrarian: 1
-

+ 0 - 19
Resources/Prototypes/Catalog/VendingMachines/Inventories/detdrobe.yml

@@ -1,19 +0,0 @@
-- type: vendingMachineInventory
-  id: DetDrobeInventory
-  startingInventory:
-    ClothingUniformJumpsuitDetective: 2
-    ClothingUniformJumpskirtDetective: 2
-    ClothingShoesColorBrown: 2
-    ClothingOuterCoatDetectiveLoadout: 1
-    ClothingOuterCoatDetectiveLoadoutGrey: 1
-    ClothingHeadHatFedoraBrown: 2
-    ClothingUniformJumpsuitDetectiveGrey: 2
-    ClothingUniformJumpskirtDetectiveGrey: 2
-    ClothingOuterVestDetective: 2
-    ClothingNeckTieDet: 2
-    ClothingHeadHatFedoraGrey: 2
-    ClothingHandsGlovesColorBlack: 2
-    ClothingHandsGlovesLatex: 2
-    ClothingHeadsetSecurity: 2
-  contrabandInventory:
-    ToyFigurineDetective: 1

+ 0 - 33
Resources/Prototypes/Catalog/VendingMachines/Inventories/dinnerware.yml

@@ -1,33 +0,0 @@
-- type: vendingMachineInventory
-  id: DinnerwareInventory
-  startingInventory:
-    ButchCleaver: 1
-    KitchenKnife: 5
-    RollingPin: 4
-    Spoon: 4
-    Fork: 4
-    PairedChopsticks: 4
-    FoodBowlBig: 10
-    FoodPlate: 10
-    FoodPlateSmall: 10
-    FoodPlateTin: 5
-    FoodPlateMuffinTin: 5
-    FoodKebabSkewer: 5
-    DrinkGlass: 5
-    Beaker: 5
-    LargeBeaker: 5
-    Pitcher: 2
-    DrinkMug: 5
-    DrinkMugBlack: 2
-    DrinkMugBlue: 2
-    DrinkMugGreen: 2
-    DrinkMugHeart: 1
-    DrinkMugMetal: 2
-    DrinkMugMoebius: 1
-    DrinkMugOne: 1
-    DrinkMugRainbow: 2
-    DrinkMugRed: 2
-  contrabandInventory:
-    CandyBowl: 1
-    BarSpoon: 2
-    DrinkShaker: 2

+ 0 - 13
Resources/Prototypes/Catalog/VendingMachines/Inventories/discount.yml

@@ -1,13 +0,0 @@
-- type: vendingMachineInventory
-  id: DiscountDansInventory
-  startingInventory:
-    FoodSnackCheesie: 3
-    FoodSnackChips: 3
-    FoodSnackBoritos: 3
-    DrinkEnergyDrinkCan: 4
-    FoodSnackPopcorn: 3
-    FoodSnackEnergy: 3
-    CigPackMixed: 2
-  contrabandInventory:
-    FoodSnackDanDanNoodles: 3
-    FoodBakedBunHoney: 3

+ 0 - 21
Resources/Prototypes/Catalog/VendingMachines/Inventories/engidrobe.yml

@@ -1,21 +0,0 @@
-- type: vendingMachineInventory
-  id: EngiDrobeInventory
-  startingInventory:
-    ClothingBackpackDuffelEngineering: 3
-    ClothingBackpackSatchelEngineering: 3
-    ClothingBackpackEngineering: 3
-    ClothingUniformJumpsuitEngineering: 3
-    ClothingUniformJumpskirtEngineering: 3
-    ClothingUniformJumpsuitEngineeringHazard: 3
-    ClothingShoesColorBlack: 3
-    ClothingOuterVestHazard: 3
-    ClothingShoesBootsWork: 3
-    ClothingHeadHatHardhatYellow: 3
-    ClothingHeadHatHardhatOrange: 3
-    ClothingHeadsetEngineering: 3
-    ClothingOuterWinterEngi: 2
-    ClothingNeckScarfStripedOrange: 3
-    ClothingShoesBootsWinterEngi: 2
-  contrabandInventory:
-    ToyFigurineEngineer: 1
-    ToyFigurineChiefEngineer: 1

+ 0 - 15
Resources/Prototypes/Catalog/VendingMachines/Inventories/engivend.yml

@@ -1,15 +0,0 @@
-- type: vendingMachineInventory
-  id: EngiVendInventory
-  startingInventory:
-    ClothingEyesGlassesMeson: 4
-    ClothingHeadHatWelding: 6
-    CrowbarYellow: 8
-    Multitool: 4
-    NetworkConfigurator: 5
-    PowerCellMedium: 5
-    ClothingHandsGlovesColorYellow: 6
-    BoxInflatable: 2
-    ClothingHeadHatCone: 4
-  contrabandInventory:
-    CowToolboxFilled: 1
-    DrinkBeerCan: 3

+ 0 - 21
Resources/Prototypes/Catalog/VendingMachines/Inventories/games.yml

@@ -1,21 +0,0 @@
-- type: vendingMachineInventory
-  id: GoodCleanFunInventory
-  startingInventory:
-    DiceBag: 6
-    Paper: 8
-    d6Dice: 8
-    ChessBoard: 1
-    BackgammonBoard: 1
-    ParchisBoard: 1
-    CheckerBoard: 1
-    ShipBattlemap: 1
-    SnowBattlemap: 1
-    SandBattlemap: 1
-    MoonBattlemap: 1
-    GrassBattlemap: 1
-    MysteryFigureBox: 2
-    BooksBag: 3
-  contrabandInventory:
-    Basketball: 1
-    FoodSnackBoritos: 3
-    DrinkSpaceMountainWindCan: 3

+ 0 - 11
Resources/Prototypes/Catalog/VendingMachines/Inventories/genedrobe.yml

@@ -1,11 +0,0 @@
-- type: vendingMachineInventory
-  id: GeneDrobeInventory
-  startingInventory:
-    ClothingUniformJumpsuitGenetics: 2
-    ClothingUniformJumpskirtGenetics: 2
-    ClothingShoesColorWhite: 2
-    ClothingOuterCoatLabGene: 2
-    ClothingOuterWinterGen: 2
-    ClothingBackpackGenetics: 2
-    ClothingBackpackSatchelGenetics: 2
-    ClothingBackpackDuffelGenetics: 2

+ 0 - 18
Resources/Prototypes/Catalog/VendingMachines/Inventories/gib.yml

@@ -1,18 +0,0 @@
-- type: vendingMachineInventory
-  id: DrGibbInventory
-  startingInventory:
-    DrinkDrGibbCan: 6
-    DrinkGrapeCan: 2
-    DrinkRootBeerCan: 2
-    DrinkIcedTeaCan: 2
-    DrinkSolDryCan: 2
-    DrinkLemonLimeCan: 2
-    DrinkLemonLimeCranberryCan: 2
-    DrinkFourteenLokoCan: 2
-  contrabandInventory:
-    ClothingNeckStethoscope: 2
-    Saw: 2
-    Tourniquet: 3
-  emaggedInventory:
-    DrinkNukieCan: 2
-    DrinkChangelingStingCan: 2

+ 0 - 12
Resources/Prototypes/Catalog/VendingMachines/Inventories/happyhonk.yml

@@ -1,12 +0,0 @@
-- type: vendingMachineInventory
-  id: HappyHonkDispenserInventory
-  startingInventory:
-    HappyHonk: 10
-    HappyHonkMime: 4
-  contrabandInventory:
-    ToyFigurineClown: 1
-    ToyFigurineMime: 1
-    ToyFigurineNukie: 1
-  emaggedInventory:
-    HappyHonkCluwne: 1
-    HappyHonkNukie: 1

+ 0 - 17
Resources/Prototypes/Catalog/VendingMachines/Inventories/hydrobe.yml

@@ -1,17 +0,0 @@
-- type: vendingMachineInventory
-  id: HyDrobeInventory
-  startingInventory:
-    ClothingBackpackHydroponics: 2
-    ClothingBackpackSatchelHydroponics: 2
-    ClothingBackpackDuffelHydroponics: 2
-    ClothingOuterApronBotanist: 2
-    ClothingUniformOveralls: 3
-    ClothingUniformJumpsuitHydroponics: 3
-    ClothingUniformJumpskirtHydroponics: 3
-    ClothingNeckScarfStripedGreen: 3
-    ClothingHeadBandBotany: 3
-    ClothingHeadsetService: 2
-    ClothingOuterWinterHydro: 2
-  contrabandInventory:
-    ToyFigurineBotanist: 1
-

+ 0 - 17
Resources/Prototypes/Catalog/VendingMachines/Inventories/janidrobe.yml

@@ -1,17 +0,0 @@
-- type: vendingMachineInventory
-  id: JaniDrobeInventory
-  startingInventory:
-    ClothingUniformJumpsuitJanitor: 2
-    ClothingUniformJumpskirtJanitor: 2
-    ClothingHandsGlovesJanitor: 2
-    ClothingShoesColorBlack: 2
-    ClothingHeadHatPurplesoft: 2
-    ClothingBeltJanitor: 2
-    ClothingHeadsetService: 2
-    ClothingOuterWinterJani: 2
-    ClothingNeckScarfStripedPurple: 3
-  contrabandInventory:
-    ToyFigurineJanitor: 1
-  emaggedInventory:
-    ClothingUniformJumpskirtJanimaid: 2
-    ClothingUniformJumpskirtJanimaidmini: 1

+ 0 - 27
Resources/Prototypes/Catalog/VendingMachines/Inventories/lawdrobe.yml

@@ -1,27 +0,0 @@
-- type: vendingMachineInventory
-  id: LawDrobeInventory
-  startingInventory:
-    ClothingUniformJumpsuitLawyerBlue: 1
-    ClothingUniformJumpskirtLawyerBlue: 1
-    ClothingUniformJumpsuitLawyerPurple: 1
-    ClothingUniformJumpskirtLawyerPurple: 1
-    ClothingUniformJumpsuitLawyerRed: 1
-    ClothingUniformJumpskirtLawyerRed: 1
-    ClothingUniformJumpsuitLawyerBlack: 1
-    ClothingUniformJumpskirtLawyerBlack: 1
-    ClothingUniformJumpsuitLawyerGood: 1
-    ClothingUniformJumpskirtLawyerGood: 1
-    ClothingShoesBootsLaceup: 2
-    ClothingHeadsetService: 2
-    ClothingNeckLawyerbadge: 2
-    BriefcaseBrown: 2
-    LuxuryPen: 2
-    HandLabeler: 2
-  contrabandInventory:
-    ClothingOuterRobesJudge: 1
-    ClothingHeadHatPwig: 1
-    # "Legally" obtained currency
-    SpaceCash100: 2
-    ToyFigurineLawyer: 1
-  emaggedInventory:
-    CyberPen: 1

+ 0 - 14
Resources/Prototypes/Catalog/VendingMachines/Inventories/magivend.yml

@@ -1,14 +0,0 @@
-- type: vendingMachineInventory
-  id: MagiVendInventory
-  startingInventory:
-    ClothingHeadHatWizard: 3
-    ClothingOuterWizard: 3
-    ClothingHeadHatWizardFake: 3
-    ClothingHeadHatRedwizard: 3
-    ClothingOuterWizardRed: 3
-    ClothingHeadHatVioletwizard: 3
-    ClothingOuterWizardViolet: 3
-    ClothingShoesWizard: 9
-    #TODO:
-    #only missing staff
-    #and if wizarditis reagent when hacked if we want this.

+ 0 - 14
Resources/Prototypes/Catalog/VendingMachines/Inventories/medical.yml

@@ -1,14 +0,0 @@
-- type: vendingMachineInventory
-  id: NanoMedPlusInventory
-  startingInventory:
-    HandheldHealthAnalyzer: 3
-    Brutepack: 5
-    Ointment: 5
-    Bloodpack: 5
-    EpinephrineChemistryBottle: 3
-    Syringe: 5
-    BoxBottle: 3
-    ClothingEyesHudMedical: 2
-    ClothingEyesEyepatchHudMedical: 2
-  contrabandInventory:
-    FoodApple: 1

+ 0 - 30
Resources/Prototypes/Catalog/VendingMachines/Inventories/medidrobe.yml

@@ -1,30 +0,0 @@
-- type: vendingMachineInventory
-  id: MediDrobeInventory
-  startingInventory:
-    ClothingBackpackDuffelMedical: 4
-    ClothingBackpackMedical: 4
-    ClothingBackpackSatchelMedical: 4
-    ClothingUniformJumpsuitMedicalDoctor: 4
-    ClothingUniformJumpskirtMedicalDoctor: 4
-    ClothingBeltMedical: 4
-    ClothingHeadHatBeretMedic: 4
-    ClothingHeadNurseHat: 4
-    ClothingOuterCoatLab: 4
-    ClothingShoesColorWhite: 4
-    ClothingHandsGlovesLatex: 4
-    ClothingHandsGlovesNitrile: 2
-    ClothingHeadsetMedical: 4
-    ClothingOuterWinterMed: 2
-    ClothingOuterHospitalGown: 5
-    UniformScrubsColorGreen: 4
-    UniformScrubsColorBlue: 4
-    UniformScrubsColorPurple: 4
-    ClothingHeadHatSurgcapGreen: 4 
-    ClothingHeadHatSurgcapBlue: 4
-    ClothingHeadHatSurgcapPurple: 4
-    ClothingShoesBootsWinterMed: 2
-  contrabandInventory:
-    ClothingUniformJumpskirtOfLife: 1
-    ToyFigurineMedicalDoctor: 1
-    ToyFigurineParamedic: 1
-    ToyFigurineChiefMedicalOfficer: 1

+ 0 - 42
Resources/Prototypes/Catalog/VendingMachines/Inventories/pride.yml

@@ -1,42 +0,0 @@
-- type: vendingMachineInventory
-  id: PrideDrobeInventory
-  startingInventory:
-    ClothingNeckLGBTPin: 3
-    ClothingNeckAllyPin: 3
-    ClothingNeckAromanticPin: 3
-    ClothingNeckAsexualPin: 3
-    ClothingNeckAroacePin: 3
-    ClothingNeckBisexualPin: 3
-    ClothingNeckGayPin: 3
-    ClothingNeckIntersexPin: 3
-    ClothingNeckLesbianPin: 3
-    ClothingNeckNonBinaryPin: 3
-    ClothingNeckPansexualPin: 3
-    ClothingNeckOmnisexualPin: 3
-    ClothingNeckGenderqueerPin: 3
-    ClothingNeckTransPin: 3
-    ClothingNeckAutismPin: 3
-    ClothingNeckGoldAutismPin: 3
-    PlushieSharkBlue: 2
-    PlushieSharkPink: 2
-    PlushieSharkGrey: 2
-    ClothingNeckScarfStripedAce: 2
-    ClothingNeckScarfStripedAro: 2
-    ClothingNeckScarfStripedAroace: 2
-    ClothingNeckScarfStripedBiSexual: 2
-    ClothingNeckScarfStripedGay: 2
-    ClothingNeckScarfStripedInter: 2
-    ClothingNeckScarfStripedLesbian: 2
-    ClothingNeckScarfStripedPan: 2
-    ClothingNeckScarfStripedNonBinary: 2
-    ClothingNeckScarfStripedRainbow: 2
-    ClothingNeckScarfStripedTrans: 2
-    ClothingHeadHatXmasCrown: 2
-    BedsheetRainbow: 2
-    ClothingNeckHeadphones: 2
-    ClothingHeadHatFlowerWreath: 2
-    ClothingUniformColorRainbow: 2
-    ClothingUnderSocksCoder: 2
-    ClothingUnderSocksBee: 2
-  contrabandInventory:
-    ClothingNeckScarfStripedLesbianLong: 2

+ 0 - 17
Resources/Prototypes/Catalog/VendingMachines/Inventories/pwrgame.yml

@@ -1,17 +0,0 @@
-- type: vendingMachineInventory
-  id: PwrGameInventory
-  startingInventory:
-    DrinkPwrGameCan: 4
-    DrinkEnergyDrinkCan: 4
-    DrinkGrapeCan: 2
-    DrinkRootBeerCan: 2
-    DrinkIcedTeaCan: 2
-    DrinkSolDryCan: 2
-    DrinkLemonLimeCan: 2
-    DrinkLemonLimeCranberryCan: 2
-    DrinkFourteenLokoCan: 2
-  contrabandInventory:
-    DrinkDrGibbCan: 3
-  emaggedInventory:
-    DrinkNukieCan: 2
-    DrinkChangelingStingCan: 2

+ 0 - 12
Resources/Prototypes/Catalog/VendingMachines/Inventories/robodrobe.yml

@@ -1,12 +0,0 @@
-- type: vendingMachineInventory
-  id: RoboDrobeInventory
-  startingInventory:
-    ClothingOuterCoatRobo: 2
-    ClothingUniformJumpsuitRoboticist: 2
-    ClothingUniformJumpskirtRoboticist: 2
-    ClothingShoesColorBlack: 2
-    ClothingHandsGlovesRobohands: 2
-    ClothingHeadHatCorpsoft: 2
-    ClothingHeadBandSkull: 2
-    ClothingHeadsetRobotics: 2
-    ClothingOuterWinterRobo: 2

+ 0 - 22
Resources/Prototypes/Catalog/VendingMachines/Inventories/robotics.yml

@@ -1,22 +0,0 @@
-- type: vendingMachineInventory
-  id: RoboticsInventory
-  startingInventory:
-    CableApcStack: 4
-    SciFlash: 4
-    ProximitySensor: 3
-    ClothingEyesHudDiagnostic: 2
-    ClothingEyesEyepatchHudDiag: 2
-    RemoteSignaller: 3
-    Igniter: 3 # its more ordnance but yeah
-    HandheldHealthAnalyzer: 3
-    Scalpel: 2
-    SawElectric: 2
-    #Bonesetter: 2 add when robotics
-    NitrousOxideTankFilled: 2
-    ClothingMaskBreathMedical: 5
-    ClothingHeadHatWeldingMaskFlame: 1
-    Welder: 1
-    Screwdriver: 2
-    Crowbar: 2
-  contrabandInventory:
-    FoodBurgerRobot: 1  

+ 0 - 14
Resources/Prototypes/Catalog/VendingMachines/Inventories/salvage.yml

@@ -1,14 +0,0 @@
-- type: vendingMachineInventory
-  id: SalvageEquipmentInventory
-  startingInventory:
-    Crowbar: 2
-    Pickaxe: 4
-    OreBag: 4
-    Flare: 4
-    FlashlightLantern: 2
-    HandheldGPSBasic: 2
-    RadioHandheld: 2
-    WeaponGrapplingGun: 4
-    WeaponProtoKineticAccelerator: 4
-  contrabandInventory:
-    PlushieCarp: 1

+ 0 - 19
Resources/Prototypes/Catalog/VendingMachines/Inventories/scidrobe.yml

@@ -1,19 +0,0 @@
-- type: vendingMachineInventory
-  id: SciDrobeInventory
-  startingInventory:
-    ClothingBackpackScience: 3
-    ClothingBackpackSatchelScience: 3
-    ClothingBackpackDuffelScience: 3
-    ClothingUniformJumpsuitScientist: 3
-    ClothingUniformJumpskirtScientist: 3
-    ClothingUniformJumpsuitScientistFormal: 3
-    ClothingOuterCoatRnd: 3
-    ClothingShoesColorWhite: 3
-    ClothingNeckTieSci: 3
-    ClothingHeadsetScience: 3
-    ClothingMaskGas: 3
-    ClothingOuterWinterSci: 2
-    ClothingNeckScarfStripedPurple: 3
-    ClothingShoesBootsWinterSci: 2
-  contrabandInventory:
-    ToyFigurineResearchDirector: 1  

+ 0 - 28
Resources/Prototypes/Catalog/VendingMachines/Inventories/sec.yml

@@ -1,28 +0,0 @@
-- type: vendingMachineInventory
-  id: SecTechInventory
-  startingInventory:
-    SecurityWhistle: 5
-    Handcuffs: 8
-    GrenadeFlashBang: 4
-    TearGasGrenade: 4
-    ClusterBangFull: 2
-    GrenadeStinger: 4
-    Flash: 5
-    Tourniquet: 5
-    FlashlightSeclite: 5
-    ClothingEyesGlassesSunglasses: 2
-    ClothingEyesHudSecurity: 2
-    ClothingEyesEyepatchHudSecurity: 2
-    ClothingBeltSecurityWebbing: 5
-    CombatKnife: 3
-    Zipties: 12
-    RiotShield: 2
-    RiotLaserShield: 2
-    RiotBulletShield: 2
-    RadioHandheldSecurity: 5
-  # security officers need to follow a diet regimen!
-  contrabandInventory:
-    WeaponMeleeNeedle: 2
-    FoodDonutHomer: 12
-    FoodBoxDonut: 2
-    #box evidence

+ 0 - 32
Resources/Prototypes/Catalog/VendingMachines/Inventories/secdrobe.yml

@@ -1,32 +0,0 @@
-- type: vendingMachineInventory
-  id: SecDrobeInventory
-  startingInventory:
-    ClothingBackpackSecurity: 3
-    ClothingBackpackSatchelSecurity: 3
-    ClothingBackpackDuffelSecurity: 3
-    ClothingUniformJumpsuitSec: 3
-    ClothingShoesBootsJack: 3
-    ClothingHeadHatBeretSecurity: 3
-    ClothingHeadHatSecsoft: 3
-    ClothingHeadBandRed: 3
-    ClothingMaskNeckGaiterRed: 3
-    ClothingHandsGlovesColorBlack: 3
-    ClothingHandsGlovesFingerless: 3
-    ClothingUniformJumpskirtSec: 3
-    ClothingUniformJumpsuitSecGrey: 3
-    ClothingUniformJumpskirtSecGrey: 3
-    ClothingUniformJumpsuitSecBlue: 3
-    ClothingHeadsetSecurity: 3
-    ClothingOuterWinterSec: 2
-    ClothingOuterArmorBasic: 2
-    ClothingNeckScarfStripedRed: 3
-    ClothingOuterArmorBasicSlim: 2
-    ClothingEyesBlindfold: 1
-    ClothingShoesBootsCombat: 1
-    ClothingShoesBootsWinterSec: 2
-    ClothingHeadHelmetJustice: 1
-  contrabandInventory:
-    ClothingMaskClownSecurity: 1
-    ToyFigurineSecurity: 1
-    ToyFigurineWarden: 1
-    ToyFigurineHeadOfSecurity: 1

+ 0 - 46
Resources/Prototypes/Catalog/VendingMachines/Inventories/seeds.yml

@@ -1,46 +0,0 @@
-- type: vendingMachineInventory
-  id: MegaSeedServitorInventory
-  startingInventory:
-    AloeSeeds: 3
-    AmbrosiaVulgarisSeeds: 3
-    AppleSeeds: 5
-    BananaSeeds: 5
-    BerrySeeds: 5
-    CarrotSeeds: 5
-    CabbageSeeds: 5
-    ChanterelleSeeds: 5
-    CherrySeeds: 5
-    ChiliSeeds: 5
-    CocoaSeeds: 3
-    CornSeeds: 5
-    CottonSeeds: 5
-    EggplantSeeds: 5
-    EggySeeds: 5
-    GalaxythistleSeeds: 3
-    GarlicSeeds: 3
-    GrapeSeeds: 5
-    LemonSeeds: 5
-    LimeSeeds: 5
-    PineappleSeeds: 5
-    LingzhiSeeds: 3
-    OatSeeds: 5
-    OnionSeeds: 5
-    OnionRedSeeds: 5
-    OrangeSeeds: 5
-    PeaSeeds: 5
-    PoppySeeds: 3
-    PotatoSeeds: 5
-    PumpkinSeeds: 5
-    RiceSeeds: 5
-    SoybeanSeeds: 5
-    SugarcaneSeeds: 5
-    TeaPlantSeeds: 5
-    TomatoSeeds: 5
-    TowercapSeeds: 5
-    WheatSeeds: 5
-    WatermelonSeeds: 5
-  contrabandInventory:
-    TobaccoSeeds: 2
-    FoodSnackSemki: 2
-  emaggedInventory:
-    FlyAmanitaSeeds: 1

Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels