]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Lathe Categories (#24247)
authorNemanja <98561806+EmoGarbage404@users.noreply.github.com>
Sat, 20 Jan 2024 00:45:03 +0000 (19:45 -0500)
committerGitHub <noreply@github.com>
Sat, 20 Jan 2024 00:45:03 +0000 (17:45 -0700)
* Lathe Categories

* serilog my beloathed

19 files changed:
Content.Client/Lathe/UI/LatheBoundUserInterface.cs
Content.Client/Lathe/UI/LatheMenu.xaml
Content.Client/Lathe/UI/LatheMenu.xaml.cs
Content.Client/Lathe/UI/RecipeTooltip.xaml.cs
Content.Shared/Lathe/Prototypes/LatheCategoryPrototype.cs [new file with mode: 0644]
Content.Shared/Research/Prototypes/LatheRecipePrototype.cs
Resources/Locale/en-US/lathe/lathe-categories.ftl [new file with mode: 0644]
Resources/Locale/en-US/lathe/ui/lathe-menu.ftl
Resources/Prototypes/Recipes/Lathes/Parts.yml
Resources/Prototypes/Recipes/Lathes/categories.yml [new file with mode: 0644]
Resources/Prototypes/Recipes/Lathes/devices.yml
Resources/Prototypes/Recipes/Lathes/electronics.yml
Resources/Prototypes/Recipes/Lathes/mech_parts.yml
Resources/Prototypes/Recipes/Lathes/medical.yml
Resources/Prototypes/Recipes/Lathes/misc.yml
Resources/Prototypes/Recipes/Lathes/powercells.yml
Resources/Prototypes/Recipes/Lathes/robotics.yml
Resources/Prototypes/Recipes/Lathes/security.yml
Resources/Prototypes/Recipes/Lathes/tools.yml

index ed2307b165d5f4a8493eb7a7ae9e676f57c2518f..456471598a48ef43ddeee4e6f7288fb407b145e7 100644 (file)
@@ -43,7 +43,8 @@ namespace Content.Client.Lathe.UI
                 case LatheUpdateState msg:
                     if (_menu != null)
                         _menu.Recipes = msg.Recipes;
-                    _menu?.PopulateRecipes(Owner);
+                    _menu?.PopulateRecipes();
+                    _menu?.UpdateCategories();
                     _menu?.PopulateQueueList(msg.Queue);
                     _menu?.SetQueueInfo(msg.CurrentlyProducing);
                     break;
index 1e60db68e2621a29fab996958649fc9fd9621ebd..2b97166f05a67ba5a541e5203f5dfa26caf2ca4f 100644 (file)
                         PlaceHolder="{Loc 'lathe-menu-search-designs'}"
                         HorizontalExpand="True">
                     </LineEdit>
-                    <Button
-                        Name="FilterButton"
-                        Text="{Loc 'lathe-menu-search-filter'}"
-                        TextAlign="Center"
-                        Margin="5 0 0 0"
-                        Disabled="True"
-                        StyleClasses="ButtonSquare">
-                    </Button>
+                    <OptionButton
+                        Name="FilterOption"
+                        MinWidth="100"
+                        StyleClasses="ButtonSquare"/>
                 </BoxContainer>
                 <BoxContainer Orientation="Vertical"
                     MinHeight="225"
index 88fdcccbf013e356efc2d6ee958f160e4ba7ddb7..93d80dbf9c5e36c35ce1982a71174ac7d3482192 100644 (file)
@@ -2,6 +2,7 @@ using System.Linq;
 using System.Text;
 using Content.Client.Materials;
 using Content.Shared.Lathe;
+using Content.Shared.Lathe.Prototypes;
 using Content.Shared.Materials;
 using Content.Shared.Research.Prototypes;
 using Robust.Client.AutoGenerated;
@@ -18,6 +19,7 @@ public sealed partial class LatheMenu : DefaultWindow
 {
     [Dependency] private readonly IEntityManager _entityManager = default!;
     [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
+    private EntityUid _owner;
     private readonly SpriteSystem _spriteSystem;
     private readonly LatheSystem _lathe;
     private readonly MaterialStorageSystem _materialStorage;
@@ -27,8 +29,13 @@ public sealed partial class LatheMenu : DefaultWindow
 
     public List<ProtoId<LatheRecipePrototype>> Recipes = new();
 
+    public List<ProtoId<LatheCategoryPrototype>>? Categories;
+
+    public ProtoId<LatheCategoryPrototype>? CurrentCategory;
+
     public LatheMenu(LatheBoundUserInterface owner)
     {
+        _owner = owner.Owner;
         RobustXamlLoader.Load(this);
         IoCManager.InjectDependencies(this);
 
@@ -40,13 +47,15 @@ public sealed partial class LatheMenu : DefaultWindow
 
         SearchBar.OnTextChanged += _ =>
         {
-            PopulateRecipes(owner.Owner);
+            PopulateRecipes();
         };
         AmountLineEdit.OnTextChanged += _ =>
         {
-            PopulateRecipes(owner.Owner);
+            PopulateRecipes();
         };
 
+        FilterOption.OnItemSelected += OnItemSelected;
+
         ServerListButton.OnPressed += a => OnServerListButtonPressed?.Invoke(a);
 
         if (_entityManager.TryGetComponent<LatheComponent>(owner.Owner, out var latheComponent))
@@ -63,10 +72,9 @@ public sealed partial class LatheMenu : DefaultWindow
     /// <summary>
     /// Populates the list of all the recipes
     /// </summary>
-    /// <param name="lathe"></param>
-    public void PopulateRecipes(EntityUid lathe)
+    public void PopulateRecipes()
     {
-        if (!_entityManager.TryGetComponent<LatheComponent>(lathe, out var component))
+        if (!_entityManager.TryGetComponent<LatheComponent>(_owner, out var component))
             return;
 
         var recipesToShow = new List<LatheRecipePrototype>();
@@ -75,6 +83,9 @@ public sealed partial class LatheMenu : DefaultWindow
             if (!_prototypeManager.TryIndex(recipe, out var proto))
                 continue;
 
+            if (CurrentCategory != null && proto.Category != CurrentCategory)
+                continue;
+
             if (SearchBar.Text.Trim().Length != 0)
             {
                 if (proto.Name.ToLowerInvariant().Contains(SearchBar.Text.Trim().ToLowerInvariant()))
@@ -89,8 +100,9 @@ public sealed partial class LatheMenu : DefaultWindow
         if (!int.TryParse(AmountLineEdit.Text, out var quantity) || quantity <= 0)
             quantity = 1;
 
+        var sortedRecipesToShow = recipesToShow.OrderBy(p => p.Name);
         RecipeList.Children.Clear();
-        foreach (var prototype in recipesToShow)
+        foreach (var prototype in sortedRecipesToShow)
         {
             StringBuilder sb = new();
             var first = true;
@@ -115,13 +127,16 @@ public sealed partial class LatheMenu : DefaultWindow
                 sb.Append(Loc.GetString("lathe-menu-tooltip-display", ("material", name), ("amount", amountText)));
             }
 
-            sb.Append('\n');
-            sb.Append(Loc.GetString("lathe-menu-description-display", ("description", prototype.Description)));
+            if (!string.IsNullOrWhiteSpace(prototype.Description))
+            {
+                sb.Append('\n');
+                sb.Append(Loc.GetString("lathe-menu-description-display", ("description", prototype.Description)));
+            }
 
             var icon = prototype.Icon == null
                 ? _spriteSystem.GetPrototypeIcon(prototype.Result).Default
                 : _spriteSystem.Frame0(prototype.Icon);
-            var canProduce = _lathe.CanProduce(lathe, prototype, quantity);
+            var canProduce = _lathe.CanProduce(_owner, prototype, quantity);
 
             var control = new RecipeControl(prototype, sb.ToString(), canProduce, icon);
             control.OnButtonPressed += s =>
@@ -134,6 +149,41 @@ public sealed partial class LatheMenu : DefaultWindow
         }
     }
 
+    public void UpdateCategories()
+    {
+        var currentCategories = new List<ProtoId<LatheCategoryPrototype>>();
+        foreach (var recipeId in Recipes)
+        {
+            var recipe = _prototypeManager.Index(recipeId);
+
+            if (recipe.Category == null)
+                continue;
+
+            if (currentCategories.Contains(recipe.Category.Value))
+                continue;
+
+            currentCategories.Add(recipe.Category.Value);
+        }
+
+        if (Categories != null && (Categories.Count == currentCategories.Count || !Categories.All(currentCategories.Contains)))
+            return;
+
+        Categories = currentCategories;
+        var sortedCategories = currentCategories
+            .Select(p => _prototypeManager.Index(p))
+            .OrderBy(p => Loc.GetString(p.Name))
+            .ToList();
+
+        FilterOption.Clear();
+        FilterOption.AddItem(Loc.GetString("lathe-menu-category-all"), -1);
+        foreach (var category in sortedCategories)
+        {
+            FilterOption.AddItem(Loc.GetString(category.Name), Categories.IndexOf(category.ID));
+        }
+
+        FilterOption.SelectId(-1);
+    }
+
     /// <summary>
     /// Populates the build queue list with all queued items
     /// </summary>
@@ -162,4 +212,18 @@ public sealed partial class LatheMenu : DefaultWindow
             : _spriteSystem.Frame0(recipe.Icon);
         NameLabel.Text = $"{recipe.Name}";
     }
+
+    private void OnItemSelected(OptionButton.ItemSelectedEventArgs obj)
+    {
+        FilterOption.SelectId(obj.Id);
+        if (obj.Id == -1)
+        {
+            CurrentCategory = null;
+        }
+        else
+        {
+            CurrentCategory = Categories?[obj.Id];
+        }
+        PopulateRecipes();
+    }
 }
index 5d2e3ca081fe2206c7a6216efbfd1de34ed497bf..45d854e92f6803fa4953366d3345b034e0186f8e 100644 (file)
@@ -1,20 +1,17 @@
-using Content.Shared.Research.Prototypes;
+using Content.Client.Message;
 using Robust.Client.AutoGenerated;
-using Robust.Client.Graphics;
 using Robust.Client.UserInterface;
 using Robust.Client.UserInterface.XAML;
-using Robust.Shared.Graphics;
 
 namespace Content.Client.Lathe.UI;
 
 [GenerateTypedNameReferences]
 public sealed partial class RecipeTooltip : Control
 {
-
     public RecipeTooltip(string tooltip)
     {
         RobustXamlLoader.Load(this);
 
-        RecipeTooltipLabel.SetMessage(tooltip);
+        RecipeTooltipLabel.SetMarkup(tooltip);
     }
 }
diff --git a/Content.Shared/Lathe/Prototypes/LatheCategoryPrototype.cs b/Content.Shared/Lathe/Prototypes/LatheCategoryPrototype.cs
new file mode 100644 (file)
index 0000000..9af8e77
--- /dev/null
@@ -0,0 +1,21 @@
+using Content.Shared.Research.Prototypes;
+using Robust.Shared.Prototypes;
+
+namespace Content.Shared.Lathe.Prototypes;
+
+/// <summary>
+/// This is a prototype for a category for <see cref="LatheRecipePrototype"/>
+/// </summary>
+[Prototype]
+public sealed partial class LatheCategoryPrototype : IPrototype
+{
+    /// <inheritdoc/>
+    [IdDataField]
+    public string ID { get; } = default!;
+
+    /// <summary>
+    /// A localized string used in the UI
+    /// </summary>
+    [DataField]
+    public LocId Name;
+}
index 709a592cc1d5629b9aeb05b253c938cf560ec429..8b0c866cbe3b7443a56b138ae842053e49b47d94 100644 (file)
@@ -1,3 +1,4 @@
+using Content.Shared.Lathe.Prototypes;
 using Content.Shared.Materials;
 using Robust.Shared.Prototypes;
 using Robust.Shared.Serialization;
@@ -38,6 +39,7 @@ namespace Content.Shared.Research.Prototypes
         [DataField("materials", customTypeSerializer: typeof(PrototypeIdDictionarySerializer<int, MaterialPrototype>))]
         private Dictionary<string, int> _requiredMaterials = new();
 
+        //todo make these function calls because we're eating tons of resolves here.
         /// <summary>
         ///     Name displayed in the lathe GUI.
         /// </summary>
@@ -46,7 +48,8 @@ namespace Content.Shared.Research.Prototypes
         {
             get
             {
-                if (_name.Trim().Length != 0) return _name;
+                if (_name.Trim().Length != 0)
+                    return _name;
                 var protoMan = IoCManager.Resolve<IPrototypeManager>();
                 protoMan.TryIndex(Result, out EntityPrototype? prototype);
                 if (prototype?.Name != null)
@@ -63,7 +66,8 @@ namespace Content.Shared.Research.Prototypes
         {
             get
             {
-                if (_description.Trim().Length != 0) return _description;
+                if (_description.Trim().Length != 0)
+                    return _description;
                 var protoMan = IoCManager.Resolve<IPrototypeManager>();
                 protoMan.TryIndex(Result, out EntityPrototype? prototype);
                 if (prototype?.Description != null)
@@ -93,5 +97,11 @@ namespace Content.Shared.Research.Prototypes
 
         [DataField("applyMaterialDiscount")]
         public bool ApplyMaterialDiscount = true;
+
+        /// <summary>
+        /// A category used for visually sorting lathe recipes in the UI.
+        /// </summary>
+        [DataField]
+        public ProtoId<LatheCategoryPrototype>? Category;
     }
 }
diff --git a/Resources/Locale/en-US/lathe/lathe-categories.ftl b/Resources/Locale/en-US/lathe/lathe-categories.ftl
new file mode 100644 (file)
index 0000000..a7261c2
--- /dev/null
@@ -0,0 +1,8 @@
+lathe-category-ammo = Ammo
+lathe-category-circuitry = Circuitry
+lathe-category-lights = Lights
+lathe-category-mechs = Mechs
+lathe-category-parts = Parts
+lathe-category-robotics = Robotics
+lathe-category-tools = Tools
+lathe-category-weapons = Weapons
index 3ccdb2b0eb3c4a169a10fb7962b81df353b8a286..92f313086cb3f9170b7a4e3ed4d1daa90d3d0197 100644 (file)
@@ -3,11 +3,12 @@ lathe-menu-queue = Queue
 lathe-menu-server-list = Server list
 lathe-menu-sync = Sync
 lathe-menu-search-designs = Search designs
-lathe-menu-search-filter = Filter
+lathe-menu-category-all = All
+lathe-menu-search-filter = Filter:
 lathe-menu-amount = Amount:
 lathe-menu-material-display = {$material} ({$amount})
 lathe-menu-tooltip-display = {$amount} of {$material}
-lathe-menu-description-display = {$description}
+lathe-menu-description-display = [italic]{$description}[/italic]
 lathe-menu-material-amount = { $amount ->
     [1] {NATURALFIXED($amount, 2)} {$unit}
     *[other] {NATURALFIXED($amount, 2)} {MAKEPLURAL($unit)}
index 658248c140ed134eb987b7fcace8d4a4755e2d90..90cff2174d6d73518f243d572c24d32c331478cc 100644 (file)
@@ -1,6 +1,7 @@
 - type: latheRecipe
   id: CapacitorStockPart
   result: CapacitorStockPart
+  category: Parts
   completetime: 1
   materials:
     Steel: 50
@@ -9,6 +10,7 @@
 - type: latheRecipe
   id: MatterBinStockPart
   result: MatterBinStockPart
+  category: Parts
   completetime: 1
   materials:
     Steel: 50
@@ -17,6 +19,7 @@
 - type: latheRecipe
   id: MicroManipulatorStockPart
   result: MicroManipulatorStockPart
+  category: Parts
   completetime: 1
   materials:
     Steel: 50
diff --git a/Resources/Prototypes/Recipes/Lathes/categories.yml b/Resources/Prototypes/Recipes/Lathes/categories.yml
new file mode 100644 (file)
index 0000000..8faa67a
--- /dev/null
@@ -0,0 +1,31 @@
+- type: latheCategory
+  id: Ammo
+  name: lathe-category-ammo
+
+- type: latheCategory
+  id: Circuitry
+  name: lathe-category-circuitry
+
+- type: latheCategory
+  id: Lights
+  name: lathe-category-lights
+
+- type: latheCategory
+  id: Mech
+  name: lathe-category-mechs
+
+- type: latheCategory
+  id: Parts
+  name: lathe-category-parts
+
+- type: latheCategory
+  id: Robotics
+  name: lathe-category-robotics
+
+- type: latheCategory
+  id: Tools
+  name: lathe-category-tools
+
+- type: latheCategory
+  id: Weapons
+  name: lathe-category-weapons
index 1a1f5326e39c621890df6a3c9fef9a892c2ba6c3..066c2ba8d320832380905b8d23506a08733ac036 100644 (file)
@@ -1,6 +1,7 @@
 - type: latheRecipe
   id: TimerTrigger
   result: TimerTrigger
+  category: Parts
   completetime: 2
   materials:
     Steel: 300
@@ -9,6 +10,7 @@
 - type: latheRecipe
   id: SignalTrigger
   result: SignalTrigger
+  category: Parts
   completetime: 2
   materials:
     Steel: 300
@@ -17,6 +19,7 @@
 - type: latheRecipe
   id: VoiceTrigger
   result: VoiceTrigger
+  category: Parts
   completetime: 2
   materials:
     Steel: 300
@@ -25,6 +28,7 @@
 - type: latheRecipe
   id: Igniter
   result: Igniter
+  category: Parts
   completetime: 2
   materials:
     Steel: 300
@@ -34,6 +38,7 @@
 - type: latheRecipe
   id: ChemicalPayload
   result: ChemicalPayload
+  category: Weapons
   completetime: 2
   materials:
     Steel: 200
@@ -42,6 +47,7 @@
 - type: latheRecipe
   id: FlashPayload
   result: FlashPayload
+  category: Weapons
   completetime: 2
   materials:
     Steel: 50
@@ -52,6 +58,7 @@
 - type: latheRecipe
   id: ExplosivePayload
   result: ExplosivePayload
+  category: Weapons
   completetime: 4
   materials:
     Steel: 100
@@ -63,6 +70,7 @@
 - type: latheRecipe
   id: Signaller
   result: RemoteSignaller
+  category: Parts
   completetime: 2
   materials:
     Steel: 100
@@ -72,6 +80,7 @@
 - type: latheRecipe
   id: AnomalyLocator
   result: AnomalyLocatorEmpty
+  category: Tools
   completetime: 3
   materials:
     Steel: 400
@@ -80,6 +89,7 @@
 - type: latheRecipe
   id: AnomalyLocatorWide
   result: AnomalyLocatorWideEmpty
+  category: Tools
   completetime: 3
   materials:
     Steel: 400
@@ -88,6 +98,7 @@
 - type: latheRecipe
   id: AnomalyScanner
   result: AnomalyScanner
+  category: Tools
   completetime: 2
   materials:
     Plastic: 200
 - type: latheRecipe
   id: WeaponPistolCHIMP
   result: WeaponPistolCHIMP
+  category: Tools
   completetime: 5
   materials:
     Steel: 500
 - type: latheRecipe
   id: WeaponGauntletGorilla
   result: WeaponGauntletGorilla
+  category: Tools
   completetime: 5
   materials:
     Steel: 1500
 - type: latheRecipe
   id: WeaponCrusher
   result: WeaponCrusher
+  category: Weapons
   completetime: 5
   materials:
     Steel: 1000
 - type: latheRecipe
   id: WeaponCrusherDagger
   result: WeaponCrusherDagger
+  category: Weapons
   completetime: 5
   materials:
     Steel: 500
 - type: latheRecipe
   id: WeaponCrusherGlaive
   result: WeaponCrusherGlaive
+  category: Weapons
   completetime: 5
   materials:
     Steel: 1500
 - type: latheRecipe
   id: WeaponForceGun
   result: WeaponForceGun
+  category: Tools
   completetime: 5
   materials:
     Steel: 500
 - type: latheRecipe
   id: WeaponProtoKineticAccelerator
   result: WeaponProtoKineticAccelerator
+  category: Weapons
   completetime: 5
   materials:
     Steel: 1000
 - type: latheRecipe
   id: WeaponTetherGun
   result: WeaponTetherGun
+  category: Tools
   completetime: 5
   materials:
     Steel: 500
 - type: latheRecipe
   id: WeaponGrapplingGun
   result: WeaponGrapplingGun
+  category: Tools
   completetime: 5
   materials:
     Steel: 500
index 123b7f60367f3f8a0d8842b9dd69b903f51a073c..2e93b9518eac02778b2fe505e30a3f74731beb3b 100644 (file)
@@ -1,6 +1,7 @@
 - type: latheRecipe
   id: FirelockElectronics
   result: FirelockElectronics
+  category: Circuitry
   completetime: 2
   materials:
      Steel: 100
@@ -9,6 +10,7 @@
 - type: latheRecipe
   id: MailingUnitElectronics
   result: MailingUnitElectronics
+  category: Circuitry
   completetime: 4
   materials:
     Steel: 50
@@ -17,6 +19,7 @@
 - type: latheRecipe
   id: CellRechargerCircuitboard
   result: CellRechargerCircuitboard
+  category: Circuitry
   completetime: 2
   materials:
     Steel: 50
@@ -25,6 +28,7 @@
 - type: latheRecipe
   id: BorgChargerCircuitboard
   result: BorgChargerCircuitboard
+  category: Circuitry
   completetime: 2
   materials:
     Steel: 50
@@ -33,6 +37,7 @@
 - type: latheRecipe
   id: WeaponCapacitorRechargerCircuitboard
   result: WeaponCapacitorRechargerCircuitboard
+  category: Circuitry
   completetime: 2
   materials:
     Steel: 50
@@ -41,6 +46,7 @@
 - type: latheRecipe
   id: TurboItemRechargerCircuitboard
   result: TurboItemRechargerCircuitboard
+  category: Circuitry
   completetime: 2
   materials:
     Steel: 500
@@ -50,6 +56,7 @@
 - type: latheRecipe
   id: DoorElectronics
   result: DoorElectronics
+  category: Circuitry
   completetime: 2
   materials:
      Steel: 50
@@ -58,6 +65,7 @@
 - type: latheRecipe
   id: AirAlarmElectronics
   result: AirAlarmElectronics
+  category: Circuitry
   completetime: 2
   materials:
      Steel: 100
@@ -66,6 +74,7 @@
 - type: latheRecipe
   id: StationMapElectronics
   result: StationMapCircuitboard
+  category: Circuitry
   completetime: 2
   materials:
      Steel: 50
@@ -74,6 +83,7 @@
 - type: latheRecipe
   id: IntercomElectronics
   result: IntercomElectronics
+  category: Circuitry
   completetime: 2
   materials:
      Steel: 50
@@ -82,6 +92,7 @@
 - type: latheRecipe
   id: FireAlarmElectronics
   result: FireAlarmElectronics
+  category: Circuitry
   completetime: 2
   materials:
      Steel: 100
 - type: latheRecipe
   id: SignalTimerElectronics
   result: SignalTimerElectronics
+  category: Circuitry
   completetime: 2
   materials:
      Steel: 50
 - type: latheRecipe
   id: CloningPodMachineCircuitboard
   result: CloningPodMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
      Steel: 100
 - type: latheRecipe
   id: ThermomachineFreezerMachineCircuitBoard
   result: ThermomachineFreezerMachineCircuitBoard
+  category: Circuitry
   completetime: 4
   materials:
     Steel: 150
 - type: latheRecipe
   id: HellfireFreezerMachineCircuitBoard
   result: HellfireFreezerMachineCircuitBoard
+  category: Circuitry
   completetime: 4
   materials:
     Steel: 150
 - type: latheRecipe
   id: CondenserMachineCircuitBoard
   result: CondenserMachineCircuitBoard
+  category: Circuitry
   completetime: 4
   materials:
     Steel: 100
 - type: latheRecipe
   id: PortableScrubberMachineCircuitBoard
   result: PortableScrubberMachineCircuitBoard
+  category: Circuitry
   completetime: 4
   materials:
     Steel: 150
 - type: latheRecipe
   id: MedicalScannerMachineCircuitboard
   result: MedicalScannerMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
      Steel: 100
 - type: latheRecipe
   id: CryoPodMachineCircuitboard
   result: CryoPodMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
     Steel: 100
 - type: latheRecipe
   id: ChemMasterMachineCircuitboard
   result: ChemMasterMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
      Steel: 100
 - type: latheRecipe
   id: ChemDispenserMachineCircuitboard
   result: ChemDispenserMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
      Steel: 100
 - type: latheRecipe
   id: BiomassReclaimerMachineCircuitboard
   result: BiomassReclaimerMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
      Steel: 100
 - type: latheRecipe
   id: BiofabricatorMachineCircuitboard
   result: BiofabricatorMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
      Steel: 100
 - type: latheRecipe
   id: HydroponicsTrayMachineCircuitboard
   result: HydroponicsTrayMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
      Steel: 100
 - type: latheRecipe
   id: AutolatheMachineCircuitboard
   result: AutolatheMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
      Steel: 100
 - type: latheRecipe
   id: ProtolatheMachineCircuitboard
   result: ProtolatheMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
      Steel: 100
 - type: latheRecipe
   id: AutolatheHyperConvectionMachineCircuitboard
   result: AutolatheHyperConvectionMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
     Steel: 100
 - type: latheRecipe
   id: ProtolatheHyperConvectionMachineCircuitboard
   result: ProtolatheHyperConvectionMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
     Steel: 100
 - type: latheRecipe
   id: CircuitImprinterMachineCircuitboard
   result: CircuitImprinterMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
      Steel: 100
 - type: latheRecipe
   id: ExosuitFabricatorMachineCircuitboard
   result: ExosuitFabricatorMachineCircuitboard
+  category: Circuitry
   completetime: 5
   materials:
      Steel: 100
 - type: latheRecipe
   id: UniformPrinterMachineCircuitboard
   result: UniformPrinterMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
      Steel: 100
 - type: latheRecipe
   id: VaccinatorMachineCircuitboard
   result: VaccinatorMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
      Steel: 100
 - type: latheRecipe
   id: DiagnoserMachineCircuitboard
   result: DiagnoserMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
      Steel: 100
 - type: latheRecipe
   id: ArtifactAnalyzerMachineCircuitboard
   result: ArtifactAnalyzerMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
      Steel: 100
 - type: latheRecipe
   id: TraversalDistorterMachineCircuitboard
   result: TraversalDistorterMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
      Steel: 100
 - type: latheRecipe
   id: ArtifactCrusherMachineCircuitboard
   result: ArtifactCrusherMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
     Steel: 100
 - type: latheRecipe
   id: AnomalyVesselCircuitboard
   result: AnomalyVesselCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
      Steel: 100
 - type: latheRecipe
   id: AnomalyVesselExperimentalCircuitboard
   result: AnomalyVesselExperimentalCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
     Steel: 100
 - type: latheRecipe
   id: AnomalySynchronizerCircuitboard
   result: AnomalySynchronizerCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
      Steel: 100
 - type: latheRecipe
   id: APECircuitboard
   result: APECircuitboard
+  category: Circuitry
   completetime: 4
   materials:
      Steel: 100
 - type: latheRecipe
   id: ReagentGrinderMachineCircuitboard
   result: ReagentGrinderMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
      Steel: 100
 - type: latheRecipe
   id: HotplateMachineCircuitboard
   result: HotplateMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
      Steel: 100
 - type: latheRecipe
   id: AnalysisComputerCircuitboard
   result: AnalysisComputerCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
      Steel: 100
 - type: latheRecipe
   id: TechDiskComputerCircuitboard
   result: TechDiskComputerCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
      Steel: 100
 - type: latheRecipe
   id: ShuttleConsoleCircuitboard
   result: ShuttleConsoleCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
      Steel: 100
 - type: latheRecipe
   id: RadarConsoleCircuitboard
   result: RadarConsoleCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
      Steel: 100
 - type: latheRecipe
   id: DawInstrumentMachineCircuitboard
   result: DawInstrumentMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
     Steel: 100
 - type: latheRecipe
   id: StasisBedMachineCircuitboard
   result: StasisBedMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
     Steel: 100
 - type: latheRecipe
   id: ElectrolysisUnitMachineCircuitboard
   result: ElectrolysisUnitMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
     Steel: 100
 - type: latheRecipe
   id: CentrifugeMachineCircuitboard
   result: CentrifugeMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
     Steel: 100
 - type: latheRecipe
   id: MaterialReclaimerMachineCircuitboard
   result: MaterialReclaimerMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
     Steel: 100
 - type: latheRecipe
   id: OreProcessorMachineCircuitboard
   result: OreProcessorMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
     Steel: 100
 - type: latheRecipe
   id: OreProcessorIndustrialMachineCircuitboard
   result: OreProcessorIndustrialMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
     Steel: 100
 - type: latheRecipe
   id: RipleyCentralElectronics
   result: RipleyCentralElectronics
+  category: Circuitry
   completetime: 4
   materials:
     Steel: 100
 - type: latheRecipe
   id: RipleyPeripheralsElectronics
   result: RipleyPeripheralsElectronics
+  category: Circuitry
   completetime: 4
   materials:
     Steel: 100
 - type: latheRecipe
   id: HonkerCentralElectronics
   result: HonkerCentralElectronics
+  category: Circuitry
   completetime: 4
   materials:
     Steel: 100
 - type: latheRecipe
   id: HonkerPeripheralsElectronics
   result: HonkerPeripheralsElectronics
+  category: Circuitry
   completetime: 4
   materials:
     Steel: 100
 - type: latheRecipe
   id: HonkerTargetingElectronics
   result: HonkerTargetingElectronics
+  category: Circuitry
   completetime: 4
   materials:
     Steel: 100
 - type: latheRecipe
   id: HamtrCentralElectronics
   result: HamtrCentralElectronics
+  category: Circuitry
   completetime: 4
   materials:
     Steel: 100
 - type: latheRecipe
   id: HamtrPeripheralsElectronics
   result: HamtrPeripheralsElectronics
+  category: Circuitry
   completetime: 4
   materials:
     Steel: 100
 - type: latheRecipe
   id: APCElectronics
   result: APCElectronics
+  category: Circuitry
   completetime: 2
   materials:
      Steel: 50
 - type: latheRecipe
   id: SubstationMachineCircuitboard
   result: SubstationMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
      Steel: 50
 - type: latheRecipe
   id: WallmountSubstationElectronics
   result: WallmountSubstationElectronics
+  category: Circuitry
   completetime: 4
   materials:
      Steel: 50
 - type: latheRecipe
   id: SMESMachineCircuitboard
   result: SMESMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
      Steel: 100
 - type: latheRecipe
   id: PortableGeneratorPacmanMachineCircuitboard
   result: PortableGeneratorPacmanMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
      Steel: 50
 - type: latheRecipe
   id: PortableGeneratorSuperPacmanMachineCircuitboard
   result: PortableGeneratorSuperPacmanMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
      Steel: 50
 - type: latheRecipe
   id: PortableGeneratorJrPacmanMachineCircuitboard
   result: PortableGeneratorJrPacmanMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
     Steel: 50
 - type: latheRecipe
   id: WallmountGeneratorElectronics
   result: WallmountGeneratorElectronics
+  category: Circuitry
   completetime: 4
   materials:
      Steel: 50
 - type: latheRecipe
   id: WallmountGeneratorAPUElectronics
   result: WallmountGeneratorAPUElectronics
+  category: Circuitry
   completetime: 4
   materials:
      Steel: 50
 - type: latheRecipe
   id: SolarControlComputerCircuitboard
   result: SolarControlComputerCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
      Steel: 100
 - type: latheRecipe
   id: SolarTrackerElectronics
   result: SolarTrackerElectronics
+  category: Circuitry
   completetime: 4
   materials:
      Steel: 150
 - type: latheRecipe
   id: PowerComputerCircuitboard
   result: PowerComputerCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
      Steel: 100
 - type: latheRecipe
   id: CloningConsoleComputerCircuitboard
   result: CloningConsoleComputerCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
      Steel: 100
 - type: latheRecipe
   id: MicrowaveMachineCircuitboard
   result: MicrowaveMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
      Steel: 100
 - type: latheRecipe
   id: ElectricGrillMachineCircuitboard
   result: ElectricGrillMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
      Steel: 100
 - type: latheRecipe
   id: FatExtractorMachineCircuitboard
   result: FatExtractorMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
      Steel: 100
 - type: latheRecipe
   id: FlatpackerMachineCircuitboard
   result: FlatpackerMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
     Steel: 100
 - type: latheRecipe
   id: SheetifierMachineCircuitboard
   result: SheetifierMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
     Steel: 100
 - type: latheRecipe
   id: SurveillanceCameraRouterCircuitboard
   result: SurveillanceCameraRouterCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
     Steel: 100
 - type: latheRecipe
   id: SurveillanceCameraWirelessRouterCircuitboard
   result: SurveillanceCameraWirelessRouterCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
     Steel: 100
 - type: latheRecipe
   id: SurveillanceWirelessCameraAnchoredCircuitboard
   result: SurveillanceWirelessCameraAnchoredCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
     Steel: 100
 - type: latheRecipe
   id: SurveillanceWirelessCameraMovableCircuitboard
   result: SurveillanceWirelessCameraMovableCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
     Steel: 100
 - type: latheRecipe
   id: SurveillanceCameraMonitorCircuitboard
   result: SurveillanceCameraMonitorCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
     Steel: 100
 - type: latheRecipe
   id: SurveillanceWirelessCameraMonitorCircuitboard
   result: SurveillanceWirelessCameraMonitorCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
     Steel: 100
 - type: latheRecipe
   id: ComputerTelevisionCircuitboard
   result: ComputerTelevisionCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
     Steel: 100
 - type: latheRecipe
   id: EmitterCircuitboard
   result: EmitterCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
     Steel: 100
 - type: latheRecipe
   id: ThrusterMachineCircuitboard
   result: ThrusterMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
     Steel: 100
 - type: latheRecipe
   id: GyroscopeMachineCircuitboard
   result: GyroscopeMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
     Steel: 100
 - type: latheRecipe
   id: GasRecyclerMachineCircuitboard
   result: GasRecyclerMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
     Steel: 100
 - type: latheRecipe
   id: SeedExtractorMachineCircuitboard
   result: SeedExtractorMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
     Steel: 100
 - type: latheRecipe
   id: BoozeDispenserMachineCircuitboard
   result: BoozeDispenserMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
      Steel: 100
 - type: latheRecipe
   id: CargoTelepadMachineCircuitboard
   result: CargoTelepadMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
     Steel: 100
 - type: latheRecipe
   id: SodaDispenserMachineCircuitboard
   result: SodaDispenserMachineCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
      Steel: 100
 - type: latheRecipe
   id: TelecomServerCircuitboard
   result: TelecomServerCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
      Steel: 100
 - type: latheRecipe
   id: MassMediaCircuitboard
   result: ComputerMassMediaCircuitboard
+  category: Circuitry
   completetime: 4
   materials:
      Steel: 100
 - type: latheRecipe
   id: MiniGravityGeneratorCircuitboard
   result: MiniGravityGeneratorCircuitboard
+  category: Circuitry
   completetime: 6
   materials:
      Steel: 100
index 462e285cf1941b18aee34864097728524f41d214..4f9f84d0dc8288ccef49af0eba6d512a742378ca 100644 (file)
@@ -2,6 +2,7 @@
 - type: latheRecipe
   id: RipleyHarness
   result: RipleyHarness
+  category: Mech
   completetime: 10
   materials:
     Steel: 1500
@@ -10,6 +11,7 @@
 - type: latheRecipe
   id: RipleyLArm
   result: RipleyLArm
+  category: Mech
   completetime: 10
   materials:
     Steel: 1000
@@ -18,6 +20,7 @@
 - type: latheRecipe
   id: RipleyLLeg
   result: RipleyLLeg
+  category: Mech
   completetime: 10
   materials:
     Steel: 1000
@@ -26,6 +29,7 @@
 - type: latheRecipe
   id: RipleyRLeg
   result: RipleyRLeg
+  category: Mech
   completetime: 10
   materials:
     Steel: 1000
@@ -34,6 +38,7 @@
 - type: latheRecipe
   id: RipleyRArm
   result: RipleyRArm
+  category: Mech
   completetime: 10
   materials:
     Steel: 1000
@@ -42,6 +47,7 @@
 - type: latheRecipe
   id: MechEquipmentGrabber
   result: MechEquipmentGrabber
+  category: Mech
   completetime: 10
   materials:
     Steel: 500
@@ -51,6 +57,7 @@
 - type: latheRecipe
   id: HonkerHarness
   result: HonkerHarness
+  category: Mech
   completetime: 10
   materials:
     Steel: 3000
@@ -60,6 +67,7 @@
 - type: latheRecipe
   id: HonkerLArm
   result: HonkerLArm
+  category: Mech
   completetime: 10
   materials:
     Steel: 3000
@@ -69,6 +77,7 @@
 - type: latheRecipe
   id: HonkerLLeg
   result: HonkerLLeg
+  category: Mech
   completetime: 10
   materials:
     Steel: 3000
@@ -78,6 +87,7 @@
 - type: latheRecipe
   id: HonkerRLeg
   result: HonkerRLeg
+  category: Mech
   completetime: 10
   materials:
     Steel: 3000
@@ -87,6 +97,7 @@
 - type: latheRecipe
   id: HonkerRArm
   result: HonkerRArm
+  category: Mech
   completetime: 10
   materials:
     Steel: 3000
 - type: latheRecipe
   id: MechEquipmentHorn
   result: MechEquipmentHorn
+  category: Mech
   completetime: 10
   materials:
     Steel: 500
 - type: latheRecipe
   id: HamtrHarness
   result: HamtrHarness
+  category: Mech
   completetime: 10
   materials:
     Steel: 1200
 - type: latheRecipe
   id: HamtrLArm
   result: HamtrLArm
+  category: Mech
   completetime: 10
   materials:
     Steel: 800
 - type: latheRecipe
   id: HamtrLLeg
   result: HamtrLLeg
+  category: Mech
   completetime: 10
   materials:
     Steel: 800
 - type: latheRecipe
   id: HamtrRLeg
   result: HamtrRLeg
+  category: Mech
   completetime: 10
   materials:
     Steel: 800
 - type: latheRecipe
   id: HamtrRArm
   result: HamtrRArm
+  category: Mech
   completetime: 10
   materials:
     Steel: 800
 - type: latheRecipe
   id: MechEquipmentGrabberSmall
   result: MechEquipmentGrabberSmall
+  category: Mech
   completetime: 10
   materials:
     Steel: 400
 - type: latheRecipe
   id: VimHarness
   result: VimHarness
+  category: Mech
   completetime: 5
   materials:
     Steel: 500
index d3477832e99a4fe082350fba79afb12cad08658e..51cdf830502b9e0e0d16db8de493393ca4ae22d2 100644 (file)
@@ -1,6 +1,7 @@
 - type: latheRecipe
   id: Scalpel
   result: Scalpel
+  category: Tools
   completetime: 2
   materials:
     Steel: 200
@@ -8,6 +9,7 @@
 - type: latheRecipe
   id: Retractor
   result: Retractor
+  category: Tools
   completetime: 2
   materials:
     Steel: 200
@@ -15,6 +17,7 @@
 - type: latheRecipe
   id: Cautery
   result: Cautery
+  category: Tools
   completetime: 2
   materials:
     Steel: 200
@@ -22,6 +25,7 @@
 - type: latheRecipe
   id: Drill
   result: Drill
+  category: Tools
   completetime: 2
   materials:
     Steel: 200
@@ -30,6 +34,7 @@
 - type: latheRecipe
   id: Saw
   result: Saw
+  category: Tools
   completetime: 2
   materials:
     Steel: 200
@@ -37,6 +42,7 @@
 - type: latheRecipe
   id: Hemostat
   result: Hemostat
+  category: Tools
   completetime: 2
   materials:
     Steel: 200
@@ -74,6 +80,7 @@
 - type: latheRecipe
   id: HandheldCrewMonitor
   result: HandheldCrewMonitorEmpty
+  category: Tools
   completetime: 2
   materials:
     Glass: 1200
@@ -83,6 +90,7 @@
 - type: latheRecipe
   id: HandheldHealthAnalyzer
   result: HandheldHealthAnalyzerEmpty
+  category: Tools
   completetime: 4
   materials:
     Glass: 500
 - type: latheRecipe
   id: HandLabeler
   result: HandLabeler
+  category: Tools
   completetime: 2
   materials:
     Plastic: 100
   materials:
     Steel: 500
     Plastic: 300
-    
+
 - type: latheRecipe
   id: RollerBedSpawnFolded
   result: RollerBedSpawnFolded
index 96cd83a7feae9382f607cda952b4c73f92bdf091..a7c294a0df6827c9dae9e6265fa5dc26ab6b486b 100644 (file)
@@ -1,6 +1,7 @@
 - type: latheRecipe
   id: LightTube
   result: LightTube
+  category: Lights
   completetime: 2
   materials:
     Steel: 50
@@ -9,6 +10,7 @@
 - type: latheRecipe
   id: SodiumLightTube
   result: SodiumLightTube
+  category: Lights
   completetime: 2
   materials:
     Steel: 50
@@ -17,6 +19,7 @@
 - type: latheRecipe
   id: ExteriorLightTube
   result: ExteriorLightTube
+  category: Lights
   completetime: 2
   materials:
     Steel: 50
@@ -25,6 +28,7 @@
 - type: latheRecipe
   id: LightBulb
   result: LightBulb
+  category: Lights
   completetime: 2
   materials:
     Steel: 50
@@ -33,6 +37,7 @@
 - type: latheRecipe
   id: GlowstickRed
   result: GlowstickRed
+  category: Lights
   completetime: 2
   materials:
     Plastic: 50
@@ -40,6 +45,7 @@
 - type: latheRecipe
   id: Flare
   result: Flare
+  category: Lights
   completetime: 2
   materials:
     Plastic: 50
@@ -47,6 +53,7 @@
 - type: latheRecipe
   id: FlashlightLantern
   result: EmptyFlashlightLantern
+  category: Lights
   completetime: 2
   materials:
     Steel: 100
@@ -56,6 +63,7 @@
 - type: latheRecipe
   id: FireExtinguisher
   result: FireExtinguisher
+  category: Tools
   completetime: 2
   materials:
     Steel: 200
@@ -88,6 +96,7 @@
 - type: latheRecipe
   id: NodeScanner
   result: NodeScanner
+  category: Tools
   completetime: 2
   materials:
     Steel: 100
index 2982c070be2bd017a0a165d57ab98208b314dc3a..0b63995a63a9163671f1211fac29ee702484eb62 100644 (file)
@@ -1,6 +1,7 @@
 - type: latheRecipe
   id: PowerCellSmall
   result: PowerCellSmallPrinted
+  category: Parts
   completetime: 1
   materials:
     Steel: 100
@@ -9,6 +10,7 @@
 - type: latheRecipe
   id: PowerCellMedium
   result: PowerCellMediumPrinted
+  category: Parts
   completetime: 6
   materials:
     Steel: 300
@@ -19,6 +21,7 @@
 - type: latheRecipe
   id: PowerCellHigh
   result: PowerCellHighPrinted
+  category: Parts
   completetime: 10
   materials:
     Steel: 300
@@ -29,6 +32,7 @@
 - type: latheRecipe
   id: PowerCellMicroreactor
   result: PowerCellMicroreactorPrinted
+  category: Parts
   completetime: 10
   materials:
     Steel: 500
index c8a5810925cf1f3c87ed1ce0f6d9c6971c058dba..1d840e3b4cba6461fc282936d46e99b0569e31a8 100644 (file)
@@ -1,6 +1,7 @@
 - type: latheRecipe
   id: ProximitySensor
   result: ProximitySensor
+  category: Robotics
   completetime: 2
   materials:
     Steel: 200
@@ -9,6 +10,7 @@
 - type: latheRecipe
   id: SciFlash
   result: SciFlash
+  category: Robotics
   completetime: 2
   materials:
     Glass: 100
@@ -18,6 +20,7 @@
 - type: latheRecipe
   id: CyborgEndoskeleton
   result: CyborgEndoskeleton
+  category: Robotics
   completetime: 3
   materials:
     Steel: 1500
@@ -25,6 +28,7 @@
 - type: latheRecipe
   id: LeftArmBorg
   result: LeftArmBorg
+  category: Robotics
   completetime: 2
   materials:
     Steel: 250
@@ -33,6 +37,7 @@
 - type: latheRecipe
   id: RightArmBorg
   result: RightArmBorg
+  category: Robotics
   completetime: 2
   materials:
     Steel: 250
@@ -41,6 +46,7 @@
 - type: latheRecipe
   id: LeftLegBorg
   result: LeftLegBorg
+  category: Robotics
   completetime: 2
   materials:
     Steel: 250
@@ -49,6 +55,7 @@
 - type: latheRecipe
   id: RightLegBorg
   result: RightLegBorg
+  category: Robotics
   completetime: 2
   materials:
     Steel: 250
@@ -57,6 +64,7 @@
 - type: latheRecipe
   id: LightHeadBorg
   result: LightHeadBorg
+  category: Robotics
   completetime: 2
   materials:
     Steel: 250
@@ -65,6 +73,7 @@
 - type: latheRecipe
   id: TorsoBorg
   result: TorsoBorg
+  category: Robotics
   completetime: 2
   materials:
     Steel: 250
@@ -73,6 +82,7 @@
 - type: latheRecipe
   id: LeftArmBorgEngineer
   result: LeftArmBorgEngineer
+  category: Robotics
   completetime: 2
   materials:
     Steel: 250
@@ -81,6 +91,7 @@
 - type: latheRecipe
   id: RightArmBorgEngineer
   result: RightArmBorgEngineer
+  category: Robotics
   completetime: 2
   materials:
     Steel: 250
 - type: latheRecipe
   id: LeftLegBorgEngineer
   result: LeftLegBorgEngineer
+  category: Robotics
   completetime: 2
   materials:
     Steel: 250
 - type: latheRecipe
   id: RightLegBorgEngineer
   result: RightLegBorgEngineer
+  category: Robotics
   completetime: 2
   materials:
     Steel: 250
 - type: latheRecipe
   id: HeadBorgEngineer
   result: HeadBorgEngineer
+  category: Robotics
   completetime: 2
   materials:
     Steel: 250
 - type: latheRecipe
   id: TorsoBorgEngineer
   result: TorsoBorgEngineer
+  category: Robotics
   completetime: 2
   materials:
     Steel: 250
 - type: latheRecipe
   id: LeftArmBorgMedical
   result: LeftArmBorgMedical
+  category: Robotics
   completetime: 2
   materials:
     Steel: 250
 - type: latheRecipe
   id: RightArmBorgMedical
   result: RightArmBorgMedical
+  category: Robotics
   completetime: 2
   materials:
     Steel: 250
 - type: latheRecipe
   id: LeftLegBorgMedical
   result: LeftLegBorgMedical
+  category: Robotics
   completetime: 2
   materials:
     Steel: 250
 - type: latheRecipe
   id: RightLegBorgMedical
   result: RightLegBorgMedical
+  category: Robotics
   completetime: 2
   materials:
     Steel: 250
 - type: latheRecipe
   id: HeadBorgMedical
   result: HeadBorgMedical
+  category: Robotics
   completetime: 2
   materials:
     Steel: 250
 - type: latheRecipe
   id: TorsoBorgMedical
   result: TorsoBorgMedical
+  category: Robotics
   completetime: 2
   materials:
     Steel: 250
 - type: latheRecipe
   id: LeftArmBorgMining
   result: LeftArmBorgMining
+  category: Robotics
   completetime: 2
   materials:
     Steel: 250
 - type: latheRecipe
   id: RightArmBorgMining
   result: RightArmBorgMining
+  category: Robotics
   completetime: 2
   materials:
     Steel: 250
 - type: latheRecipe
   id: LeftLegBorgMining
   result: LeftLegBorgMining
+  category: Robotics
   completetime: 2
   materials:
     Steel: 250
 - type: latheRecipe
   id: RightLegBorgMining
   result: RightLegBorgMining
+  category: Robotics
   completetime: 2
   materials:
     Steel: 250
 - type: latheRecipe
   id: HeadBorgMining
   result: HeadBorgMining
+  category: Robotics
   completetime: 2
   materials:
     Steel: 250
 - type: latheRecipe
   id: TorsoBorgMining
   result: TorsoBorgMining
+  category: Robotics
   completetime: 2
   materials:
     Steel: 250
 - type: latheRecipe
   id: LeftArmBorgService
   result: LeftArmBorgService
+  category: Robotics
   completetime: 2
   materials:
     Steel: 250
 - type: latheRecipe
   id: RightArmBorgService
   result: RightArmBorgService
+  category: Robotics
   completetime: 2
   materials:
     Steel: 250
 - type: latheRecipe
   id: LeftLegBorgService
   result: LeftLegBorgService
+  category: Robotics
   completetime: 2
   materials:
     Steel: 250
 - type: latheRecipe
   id: RightLegBorgService
   result: RightLegBorgService
+  category: Robotics
   completetime: 2
   materials:
     Steel: 250
 - type: latheRecipe
   id: HeadBorgService
   result: HeadBorgService
+  category: Robotics
   completetime: 2
   materials:
     Steel: 250
 - type: latheRecipe
   id: TorsoBorgService
   result: TorsoBorgService
+  category: Robotics
   completetime: 2
   materials:
     Steel: 250
 - type: latheRecipe
   id: LeftLegBorgJanitor
   result: LeftLegBorgJanitor
+  category: Robotics
   completetime: 2
   materials:
     Steel: 250
 - type: latheRecipe
   id: RightLegBorgJanitor
   result: RightLegBorgJanitor
+  category: Robotics
   completetime: 2
   materials:
     Steel: 250
 - type: latheRecipe
   id: HeadBorgJanitor
   result: HeadBorgJanitor
+  category: Robotics
   completetime: 4
   materials:
     Steel: 500
 - type: latheRecipe
   id: TorsoBorgJanitor
   result: TorsoBorgJanitor
+  category: Robotics
   completetime: 4
   materials:
     Steel: 500
 - type: latheRecipe
   id: MMI
   result: MMI
+  category: Robotics
   completetime: 3
   icon:
     sprite: Objects/Specific/Robotics/mmi.rsi
 - type: latheRecipe
   id: PositronicBrain
   result: PositronicBrain
+  category: Robotics
   completetime: 3
   materials:
     Steel: 500
 - type: latheRecipe
   id: BorgModuleCable
   result: BorgModuleCable
+  category: Robotics
   completetime: 3
   materials:
     Steel: 250
 - type: latheRecipe
   id: BorgModuleFireExtinguisher
   result: BorgModuleFireExtinguisher
+  category: Robotics
   completetime: 3
   materials:
     Steel: 250
 - type: latheRecipe
   id: BorgModuleGPS
   result: BorgModuleGPS
+  category: Robotics
   completetime: 3
   materials:
     Steel: 250
 - type: latheRecipe
   id: BorgModuleRadiationDetection
   result: BorgModuleRadiationDetection
+  category: Robotics
   completetime: 3
   materials:
     Steel: 250
 - type: latheRecipe
   id: BorgModuleTool
   result: BorgModuleTool
+  category: Robotics
   completetime: 3
   materials:
     Steel: 250
 - type: latheRecipe
   id: BorgModuleAppraisal
   result: BorgModuleAppraisal
+  category: Robotics
   completetime: 3
   materials:
     Steel: 250
 - type: latheRecipe
   id: BorgModuleMining
   result: BorgModuleMining
+  category: Robotics
   completetime: 3
   materials:
     Steel: 250
 - type: latheRecipe
   id: BorgModuleGrapplingGun
   result: BorgModuleGrapplingGun
+  category: Robotics
   completetime: 3
   materials:
     Steel: 500
 - type: latheRecipe
   id: BorgModuleAdvancedTool
   result: BorgModuleAdvancedTool
+  category: Robotics
   completetime: 3
   materials:
     Steel: 500
 - type: latheRecipe
   id: BorgModuleConstruction
   result: BorgModuleConstruction
+  category: Robotics
   completetime: 3
   materials:
     Steel: 500
 - type: latheRecipe
   id: BorgModuleGasAnalyzer
   result: BorgModuleGasAnalyzer
+  category: Robotics
   completetime: 3
   materials:
     Steel: 250
 - type: latheRecipe
   id: BorgModuleRCD
   result: BorgModuleRCD
+  category: Robotics
   completetime: 3
   materials:
     Steel: 500
 - type: latheRecipe
   id: BorgModuleLightReplacer
   result: BorgModuleLightReplacer
+  category: Robotics
   completetime: 3
   materials:
     Steel: 250
 - type: latheRecipe
   id: BorgModuleCleaning
   result: BorgModuleCleaning
+  category: Robotics
   completetime: 3
   materials:
     Steel: 250
 - type: latheRecipe
   id: BorgModuleAdvancedCleaning
   result: BorgModuleAdvancedCleaning
+  category: Robotics
   completetime: 3
   materials:
     Steel: 250
 - type: latheRecipe
   id: BorgModuleDiagnosis
   result: BorgModuleDiagnosis
+  category: Robotics
   completetime: 3
   materials:
     Steel: 250
 - type: latheRecipe
   id: BorgModuleTreatment
   result: BorgModuleTreatment
+  category: Robotics
   completetime: 3
   materials:
     Steel: 250
 - type: latheRecipe
   id: BorgModuleAdvancedTreatment
   result: BorgModuleAdvancedTreatment
+  category: Robotics
   completetime: 3
   materials:
     Steel: 500
 - type: latheRecipe
   id: BorgModuleDefibrillator
   result: BorgModuleDefibrillator
+  category: Robotics
   completetime: 3
   materials:
     Steel: 500
 - type: latheRecipe
   id: BorgModuleArtifact
   result: BorgModuleArtifact
+  category: Robotics
   completetime: 3
   materials:
     Steel: 250
 - type: latheRecipe
   id: BorgModuleAnomaly
   result: BorgModuleAnomaly
+  category: Robotics
   completetime: 3
   materials:
     Steel: 250
 - type: latheRecipe
   id: BorgModuleService
   result: BorgModuleService
+  category: Robotics
   completetime: 3
   materials:
     Steel: 250
 - type: latheRecipe
   id: BorgModuleMusique
   result: BorgModuleMusique
+  category: Robotics
   completetime: 3
   materials:
     Steel: 250
 - type: latheRecipe
   id: BorgModuleGardening
   result: BorgModuleGardening
+  category: Robotics
   completetime: 3
   materials:
     Steel: 250
 - type: latheRecipe
   id: BorgModuleHarvesting
   result: BorgModuleHarvesting
+  category: Robotics
   completetime: 3
   materials:
     Steel: 250
 - type: latheRecipe
   id: BorgModuleClowning
   result: BorgModuleClowning
+  category: Robotics
   completetime: 3
   materials:
     Steel: 250
index 940d52b7f95caf3a0d43106766a167ab8306d95e..eb9da60d7810ff5cd8c75ff5268472cf3b49ec6f 100644 (file)
@@ -15,6 +15,7 @@
 - type: latheRecipe
   id: Stunbaton
   result: Stunbaton
+  category: Weapons
   completetime: 2
   materials:
     Steel: 300
@@ -23,6 +24,7 @@
 - type: latheRecipe
   id: Truncheon
   result: Truncheon
+  category: Weapons
   completetime: 2
   materials:
     Steel: 300
@@ -31,6 +33,7 @@
 - type: latheRecipe
   id: WeaponLaserCarbine
   result: WeaponLaserCarbine
+  category: Weapons
   completetime: 8
   materials:
     Steel: 2000
@@ -40,6 +43,7 @@
 - type: latheRecipe
   id: WeaponAdvancedLaser
   result: WeaponAdvancedLaser
+  category: Weapons
   completetime: 5
   materials:
     Steel: 1500
@@ -49,6 +53,7 @@
 - type: latheRecipe
   id: WeaponLaserCannon
   result: WeaponLaserCannon
+  category: Weapons
   completetime: 5
   materials:
     Steel: 1250
@@ -58,6 +63,7 @@
 - type: latheRecipe
   id: WeaponLaserSvalinn
   result: WeaponLaserSvalinn
+  category: Weapons
   completetime: 5
   materials:
     Steel: 2000
@@ -66,6 +72,7 @@
 - type: latheRecipe
   id: WeaponXrayCannon
   result: WeaponXrayCannon
+  category: Weapons
   completetime: 5
   materials:
     Steel: 1500
 - type: latheRecipe
   id: ShellShotgunBeanbag
   result: ShellShotgunBeanbag
+  category: Ammo
   completetime: 2
   materials:
     Plastic: 15
 - type: latheRecipe
   id: CartridgePistolRubber
   result: CartridgePistolRubber
+  category: Ammo
   completetime: 2
   materials:
     Plastic: 5
 - type: latheRecipe
   id: CartridgeMagnumRubber
   result: CartridgeMagnumRubber
+  category: Ammo
   completetime: 2
   materials:
     Plastic: 5
 - type: latheRecipe
   id: CartridgeRifle
   result: CartridgeRifle
+  category: Ammo
   completetime: 2
   materials:
     Steel: 15
 - type: latheRecipe
   id: CartridgeLightRifleRubber
   result: CartridgeLightRifleRubber
+  category: Ammo
   completetime: 2
   materials:
     Plastic: 10
 - type: latheRecipe
   id: CartridgeRifleRubber
   result: CartridgeRifleRubber
+  category: Ammo
   completetime: 2
   materials:
     Plastic: 10
 - type: latheRecipe
   id: CartridgePistol
   result: CartridgePistol
+  category: Ammo
   completetime: 2
   materials:
     Steel: 10
 - type: latheRecipe
   id: ShellShotgun
   result: ShellShotgun
+  category: Ammo
   completetime: 2
   materials:
     Steel: 20
 - type: latheRecipe
   id: CartridgeMagnum
   result: CartridgeMagnum
+  category: Ammo
   completetime: 2
   materials:
     Steel: 20
 - type: latheRecipe
   id: CartridgeLightRifle
   result: CartridgeLightRifle
+  category: Ammo
   completetime: 2
   materials:
     Steel: 30
 - type: latheRecipe
   id: ShellShotgunFlare
   result: ShellShotgunFlare
+  category: Ammo
   completetime: 2
   materials:
     Plastic: 20
 - type: latheRecipe
   id: ShellTranquilizer
   result: ShellTranquilizer
+  category: Ammo
   completetime: 4
   materials:
     Plastic: 15
 - type: latheRecipe
   id: MagazinePistol
   result: MagazinePistol
+  category: Ammo
   completetime: 5
   materials:
     Steel: 100
 - type: latheRecipe
   id: MagazinePistolSubMachineGun
   result: MagazinePistolSubMachineGun
+  category: Ammo
   completetime: 5
   materials:
     Steel: 300
 - type: latheRecipe
   id: MagazinePistolSubMachineGunTopMounted
   result: MagazinePistolSubMachineGunTopMounted
+  category: Ammo
   completetime: 5
   materials:
     Steel: 300
 - type: latheRecipe
   id: MagazineBoxPistol
   result: MagazineBoxPistol
+  category: Ammo
   completetime: 5
   materials:
     Steel: 650
 - type: latheRecipe
   id: MagazineBoxPistolRubber
   result: MagazineBoxPistolRubber
+  category: Ammo
   completetime: 5
   materials:
     Steel: 350
 - type: latheRecipe
   id: MagazineBoxMagnum
   result: MagazineBoxMagnum
+  category: Ammo
   completetime: 5
   materials:
     Steel: 1250
 - type: latheRecipe
   id: MagazineBoxMagnumRubber
   result: MagazineBoxMagnumRubber
+  category: Ammo
   completetime: 5
   materials:
     Steel: 350
 - type: latheRecipe
   id: MagazineRifle
   result: MagazineRifle
+  category: Ammo
   completetime: 5
   materials:
     Steel: 375
 - type: latheRecipe
   id: MagazineLightRifle
   result: MagazineLightRifle
+  category: Ammo
   completetime: 5
   materials:
     Steel: 375
 - type: latheRecipe
   id: MagazineBoxRifle
   result: MagazineBoxRifle
+  category: Ammo
   completetime: 5
   materials:
     Steel: 950
 - type: latheRecipe
   id: MagazineBoxRifleRubber
   result: MagazineBoxRifleRubber
+  category: Ammo
   completetime: 5
   materials:
     Steel: 350
 - type: latheRecipe
   id: MagazineBoxLightRifle
   result: MagazineBoxLightRifle
+  category: Ammo
   completetime: 5
   materials:
     Steel: 1800
 - type: latheRecipe
   id: MagazineBoxLightRifleRubber
   result: MagazineBoxLightRifleRubber
+  category: Ammo
   completetime: 5
   materials:
     Steel: 350
 - type: latheRecipe
   id: SpeedLoaderMagnum
   result: SpeedLoaderMagnum
+  category: Ammo
   completetime: 5
   materials:
     Steel: 200
 - type: latheRecipe
   id: ShellShotgunIncendiary
   result: ShellShotgunIncendiary
+  category: Ammo
   completetime: 2
   materials:
     Plastic: 20
 - type: latheRecipe
   id: CartridgePistolIncendiary
   result: CartridgePistolIncendiary
+  category: Ammo
   completetime: 2
   materials:
     Plastic: 10
 - type: latheRecipe
   id: CartridgeMagnumIncendiary
   result: CartridgeMagnumIncendiary
+  category: Ammo
   completetime: 2
   materials:
     Plastic: 20
 - type: latheRecipe
   id: CartridgeLightRifleIncendiary
   result: CartridgeLightRifleIncendiary
+  category: Ammo
   completetime: 2
   materials:
     Plastic: 20
 - type: latheRecipe
   id: CartridgeRifleIncendiary
   result: CartridgeRifleIncendiary
+  category: Ammo
   completetime: 2
   materials:
     Plastic: 15
 - type: latheRecipe
   id: MagazineBoxPistolIncendiary
   result: MagazineBoxPistolIncendiary
+  category: Ammo
   completetime: 5
   materials:
     Plastic: 650
 - type: latheRecipe
   id: MagazineBoxMagnumIncendiary
   result: MagazineBoxMagnumIncendiary
+  category: Ammo
   completetime: 5
   materials:
     Plastic: 1250
 - type: latheRecipe
   id: MagazineBoxLightRifleIncendiary
   result: MagazineBoxLightRifleIncendiary
+  category: Ammo
   completetime: 5
   materials:
     Plastic: 1800
 - type: latheRecipe
   id: MagazineBoxRifleIncendiary
   result: MagazineBoxRifleIncendiary
+  category: Ammo
   completetime: 5
   materials:
     Plastic: 950
 - type: latheRecipe
   id: ShellShotgunPractice
   result: ShellShotgunPractice
+  category: Ammo
   completetime: 2
   materials:
     Plastic: 20
 - type: latheRecipe
   id: MagazineBoxPistolPractice
   result: MagazineBoxPistolPractice
+  category: Ammo
   completetime: 5
   materials:
     Plastic: 600
 - type: latheRecipe
   id: MagazineBoxMagnumPractice
   result: MagazineBoxMagnumPractice
+  category: Ammo
   completetime: 5
   materials:
     Plastic: 1200
 - type: latheRecipe
   id: MagazineBoxLightRiflePractice
   result: MagazineBoxLightRiflePractice
+  category: Ammo
   completetime: 5
   materials:
     Plastic: 1000
 - type: latheRecipe
   id: MagazineBoxRiflePractice
   result: MagazineBoxRiflePractice
+  category: Ammo
   completetime: 5
   materials:
     Plastic: 900
 - type: latheRecipe
   id: WeaponLaserCarbinePractice
   result: WeaponLaserCarbinePractice
+  category: Weapons
   completetime: 6
   materials:
     Steel: 1800
 - type: latheRecipe
   id: WeaponDisablerPractice
   result: WeaponDisablerPractice
+  category: Weapons
   completetime: 4
   materials:
     Steel: 500
 - type: latheRecipe
   id: ShellShotgunUranium
   result: ShellShotgunUranium
+  category: Ammo
   completetime: 2
   materials:
     Plastic: 15
 - type: latheRecipe
   id: CartridgePistolUranium
   result: CartridgePistolUranium
+  category: Ammo
   completetime: 2
   materials:
     Plastic: 5
 - type: latheRecipe
   id: CartridgeMagnumUranium
   result: CartridgeMagnumUranium
+  category: Ammo
   completetime: 2
   materials:
     Plastic: 20
 - type: latheRecipe
   id: CartridgeLightRifleUranium
   result: CartridgeLightRifleUranium
+  category: Ammo
   completetime: 2
   materials:
     Plastic: 20
 - type: latheRecipe
   id: CartridgeRifleUranium
   result: CartridgeRifleUranium
+  category: Ammo
   completetime: 2
   materials:
     Plastic: 15
 - type: latheRecipe
   id: MagazineBoxPistolUranium
   result: MagazineBoxPistolUranium
+  category: Ammo
   completetime: 5
   materials:
     Plastic: 650
 - type: latheRecipe
   id: MagazineBoxMagnumUranium
   result: MagazineBoxMagnumUranium
+  category: Ammo
   completetime: 5
   materials:
     Plastic: 1250
 - type: latheRecipe
   id: MagazineBoxLightRifleUranium
   result: MagazineBoxLightRifleUranium
+  category: Ammo
   completetime: 5
   materials:
     Plastic: 1800
 - type: latheRecipe
   id: MagazineBoxRifleUranium
   result: MagazineBoxRifleUranium
+  category: Ammo
   completetime: 5
   materials:
     Plastic: 950
     Uranium: 95
-    
+
 - type: latheRecipe
   id: WeaponDisablerSMG
   result: WeaponDisablerSMG
+  category: Weapons
   completetime: 6
   materials:
     Steel: 1000
index 6c7612436e6c54bf75647fdbaa6630045b8ec48b..ce3f4cda3ce4815cee43e37b55028f372b8fa10c 100644 (file)
@@ -4,6 +4,7 @@
     sprite: Objects/Tools/wirecutters.rsi
     state: cutters-map
   result: Wirecutter
+  category: Tools
   completetime: 2
   materials:
     Steel: 200
@@ -15,6 +16,7 @@
     sprite: Objects/Tools/screwdriver.rsi
     state: screwdriver-map
   result: Screwdriver
+  category: Tools
   completetime: 2
   materials:
     Steel: 200
@@ -23,6 +25,7 @@
 - type: latheRecipe
   id: Welder
   result: Welder
+  category: Tools
   completetime: 2
   materials:
     Steel: 400
@@ -30,6 +33,7 @@
 - type: latheRecipe
   id: Wrench
   result: Wrench
+  category: Tools
   completetime: 2
   materials:
     Steel: 200
@@ -37,6 +41,7 @@
 - type: latheRecipe
   id: CableStack
   result: CableApcStack1
+  category: Parts
   completetime: 2
   materials:
     Steel: 30
@@ -44,6 +49,7 @@
 - type: latheRecipe
   id: CableMVStack
   result: CableMVStack1
+  category: Parts
   completetime: 2
   materials:
     Steel: 30
@@ -51,6 +57,7 @@
 - type: latheRecipe
   id: CableHVStack
   result: CableHVStack1
+  category: Parts
   completetime: 2
   materials:
     Steel: 30
@@ -58,6 +65,7 @@
 - type: latheRecipe
   id: Crowbar
   result: Crowbar
+  category: Tools
   completetime: 2
   materials:
     Steel: 200
@@ -65,6 +73,7 @@
 - type: latheRecipe
   id: Pickaxe
   result: Pickaxe
+  category: Tools
   completetime: 4
   materials:
     Steel: 1000
@@ -73,6 +82,7 @@
 - type: latheRecipe
   id: Shovel
   result: Shovel
+  category: Tools
   completetime: 2
   materials:
     Steel: 200
@@ -81,6 +91,7 @@
 - type: latheRecipe
   id: Multitool
   result: Multitool
+  category: Tools
   completetime: 2
   materials:
     Steel: 200
 - type: latheRecipe
   id: NetworkConfigurator
   result: NetworkConfigurator
+  category: Tools
   completetime: 2
   materials:
     Steel: 200
 - type: latheRecipe
   id: PowerDrill
   result: PowerDrill
+  category: Tools
   completetime: 2
   materials:
     Steel: 600
 - type: latheRecipe
   id: RCD
   result: RCDEmpty
+  category: Tools
   completetime: 4
   materials:
     Steel: 1000
 - type: latheRecipe
   id: RCDAmmo
   result: RCDAmmo
+  category: Tools
   completetime: 2.4
   materials:
     Steel: 500
 - type: latheRecipe
   id: HandheldGPSBasic
   result: HandheldGPSBasic
+  category: Tools
   completetime: 2
   materials:
     Steel: 800
 - type: latheRecipe
   id: TRayScanner
   result: trayScanner
+  category: Tools
   completetime: 2
   materials:
     Steel: 800
 - type: latheRecipe
   id: GasAnalyzer
   result: GasAnalyzer
+  category: Tools
   completetime: 2
   materials:
     Steel: 800
 - type: latheRecipe
   id: SprayPainter
   result: SprayPainter
+  category: Tools
   completetime: 2
   materials:
     Steel: 300
 - type: latheRecipe
   id: UtilityBelt
   result: ClothingBeltUtility
+  category: Tools
   completetime: 2
   materials:
     Cloth: 100
 - type: latheRecipe
   id: HolofanProjector
   result: HolofanProjector
+  category: Tools
   completetime: 8
   materials: # Inherited materials and time from PowerCellMedium recipe
     Steel: 600
 - type: latheRecipe
   id: RPED
   result: RPED
+  category: Tools
   completetime: 10
   materials:
     Steel: 650
 - type: latheRecipe
   id: MiningDrill
   result: MiningDrill
+  category: Tools
   completetime: 3
   materials:
     Steel: 500
 - type: latheRecipe
   id: WelderExperimental
   result: WelderExperimental
+  category: Tools
   completetime: 6
   materials:
     Steel: 800
 - type: latheRecipe
   id: JawsOfLife
   result: JawsOfLife
+  category: Tools
   completetime: 6
   materials:
     Steel: 1000
     Glass: 500
     Plasma: 300
     Gold: 50
-    
+
 - type: latheRecipe
   id: HoloprojectorField
   result: HoloprojectorField
+  category: Tools
   completetime: 3
   materials:
     Steel: 500
     Plasma: 300
     Glass: 100
-    
+
 - type: latheRecipe
   id: WeaponParticleDecelerator
   result: WeaponParticleDecelerator
+  category: Tools
   completetime: 6
   materials:
     Steel: 750
     Plasma: 150
-    Uranium: 150
\ No newline at end of file
+    Uranium: 150