diff --git a/Content.Client/Lathe/Components/LatheVisualsComponent.cs b/Content.Client/Lathe/Components/LatheVisualsComponent.cs
new file mode 100644
index 0000000000..9622641787
--- /dev/null
+++ b/Content.Client/Lathe/Components/LatheVisualsComponent.cs
@@ -0,0 +1,15 @@
+namespace Content.Client.Lathe;
+
+///
+/// Holds the idle and running state for machines to control
+/// playing animtions on the client.
+///
+[RegisterComponent]
+public sealed class LatheVisualsComponent : Component
+{
+ [DataField("idleState", required: true)]
+ public string IdleState = default!;
+
+ [DataField("runningState", required: true)]
+ public string RunningState = default!;
+}
diff --git a/Content.Client/Lathe/LatheSystem.cs b/Content.Client/Lathe/LatheSystem.cs
new file mode 100644
index 0000000000..cb23a2606d
--- /dev/null
+++ b/Content.Client/Lathe/LatheSystem.cs
@@ -0,0 +1,43 @@
+using Robust.Client.GameObjects;
+using Content.Shared.Lathe;
+using Content.Shared.Power;
+using Content.Client.Power;
+using Content.Client.Wires.Visualizers;
+using Content.Shared.Wires;
+
+namespace Content.Client.Lathe
+{
+ public sealed class LatheSystem : VisualizerSystem
+ {
+ protected override void OnAppearanceChange(EntityUid uid, LatheVisualsComponent component, ref AppearanceChangeEvent args)
+ {
+ if (TryComp(uid, out SpriteComponent? sprite))
+ {
+ if (args.Component.TryGetData(PowerDeviceVisuals.Powered, out bool powered))
+ sprite.LayerSetVisible(PowerDeviceVisualLayers.Powered, powered);
+ if (args.Component.TryGetData(SharedWiresComponent.WiresVisuals.MaintenancePanelState, out bool panel))
+ sprite.LayerSetVisible(WiresVisualizer.WiresVisualLayers.MaintenancePanel, panel);
+ // Lathe specific stuff
+ if (args.Component.TryGetData(LatheVisuals.IsRunning, out bool isRunning))
+ {
+ var state = isRunning ? component.RunningState : component.IdleState;
+ sprite.LayerSetAnimationTime(LatheVisualLayers.IsRunning, 0f);
+ sprite.LayerSetState(LatheVisualLayers.IsRunning, state);
+ }
+ if (args.Component.TryGetData(LatheVisuals.IsInserting, out bool isInserting))
+ {
+ if (args.Component.TryGetData(LatheVisuals.InsertingColor, out Color color))
+ sprite.LayerSetColor(LatheVisualLayers.IsInserting, color);
+
+ sprite.LayerSetAnimationTime(LatheVisualLayers.IsInserting, 0f);
+ sprite.LayerSetVisible(LatheVisualLayers.IsInserting, isInserting);
+ }
+ }
+ }
+ }
+}
+public enum LatheVisualLayers : byte
+{
+ IsRunning,
+ IsInserting
+}
diff --git a/Content.Client/Lathe/Visualizers/AutolatheVisualizer.cs b/Content.Client/Lathe/Visualizers/AutolatheVisualizer.cs
deleted file mode 100644
index a27ff0b137..0000000000
--- a/Content.Client/Lathe/Visualizers/AutolatheVisualizer.cs
+++ /dev/null
@@ -1,134 +0,0 @@
-using System;
-using Content.Shared.Lathe;
-using Content.Shared.Power;
-using JetBrains.Annotations;
-using Robust.Client.Animations;
-using Robust.Client.GameObjects;
-using Robust.Shared.GameObjects;
-using Robust.Shared.IoC;
-
-namespace Content.Client.Lathe.Visualizers
-{
- [UsedImplicitly]
- public sealed class AutolatheVisualizer : AppearanceVisualizer
- {
- [Dependency] private readonly IEntityManager _entMan = default!;
-
- private const string AnimationKey = "inserting_animation";
-
- private Animation _buildingAnimation;
- private Animation _insertingMetalAnimation;
- private Animation _insertingGlassAnimation;
- private Animation _insertingGoldAnimation;
- private Animation _insertingPlasmaAnimation;
- private Animation _insertingPlasticAnimation;
-
- public AutolatheVisualizer()
- {
- _buildingAnimation = PopulateAnimation("building", "building_unlit", 0.5f);
- _insertingMetalAnimation = PopulateAnimation("inserting_metal", "inserting_unlit", 0.5f);
- _insertingGlassAnimation = PopulateAnimation("inserting_glass", "inserting_unlit", 0.5f);
- _insertingGoldAnimation = PopulateAnimation("inserting_gold", "inserting_unlit", 0.5f);
- _insertingPlasmaAnimation = PopulateAnimation("inserting_plasma", "inserting_unlit", 0.5f);
- _insertingPlasticAnimation = PopulateAnimation("inserting_plastic", "inserting_unlit", 0.5f);
- }
-
- private Animation PopulateAnimation(string sprite, string spriteUnlit, float length)
- {
- var animation = new Animation {Length = TimeSpan.FromSeconds(length)};
-
- var flick = new AnimationTrackSpriteFlick();
- animation.AnimationTracks.Add(flick);
- flick.LayerKey = AutolatheVisualLayers.Base;
- flick.KeyFrames.Add(new AnimationTrackSpriteFlick.KeyFrame(sprite, 0f));
-
- var flickUnlit = new AnimationTrackSpriteFlick();
- animation.AnimationTracks.Add(flickUnlit);
- flickUnlit.LayerKey = AutolatheVisualLayers.BaseUnlit;
- flickUnlit.KeyFrames.Add(new AnimationTrackSpriteFlick.KeyFrame(spriteUnlit, 0f));
-
- return animation;
- }
-
- public override void InitializeEntity(EntityUid entity)
- {
- IoCManager.InjectDependencies(this);
-
- _entMan.EnsureComponent(entity);
- }
-
- public override void OnChangeData(AppearanceComponent component)
- {
- base.OnChangeData(component);
-
- var sprite = _entMan.GetComponent(component.Owner);
- var animPlayer = _entMan.GetComponent(component.Owner);
- if (!component.TryGetData(PowerDeviceVisuals.VisualState, out LatheVisualState state))
- {
- state = LatheVisualState.Idle;
- }
- sprite.LayerSetVisible(AutolatheVisualLayers.AnimationLayer, true);
- switch (state)
- {
- case LatheVisualState.Idle:
- if (animPlayer.HasRunningAnimation(AnimationKey))
- {
- animPlayer.Stop(AnimationKey);
- }
-
- sprite.LayerSetState(AutolatheVisualLayers.Base, "icon");
- sprite.LayerSetState(AutolatheVisualLayers.BaseUnlit, "unlit");
- sprite.LayerSetVisible(AutolatheVisualLayers.AnimationLayer, false);
- break;
- case LatheVisualState.Producing:
- if (!animPlayer.HasRunningAnimation(AnimationKey))
- {
- animPlayer.Play(_buildingAnimation, AnimationKey);
- }
- break;
- case LatheVisualState.InsertingMetal:
- if (!animPlayer.HasRunningAnimation(AnimationKey))
- {
- animPlayer.Play(_insertingMetalAnimation, AnimationKey);
- }
- break;
- case LatheVisualState.InsertingGlass:
- if (!animPlayer.HasRunningAnimation(AnimationKey))
- {
- animPlayer.Play(_insertingGlassAnimation, AnimationKey);
- }
- break;
- case LatheVisualState.InsertingGold:
- if (!animPlayer.HasRunningAnimation(AnimationKey))
- {
- animPlayer.Play(_insertingGoldAnimation, AnimationKey);
- }
- break;
- case LatheVisualState.InsertingPlasma:
- if (!animPlayer.HasRunningAnimation(AnimationKey))
- {
- animPlayer.Play(_insertingPlasmaAnimation, AnimationKey);
- }
- break;
- case LatheVisualState.InsertingPlastic:
- if (!animPlayer.HasRunningAnimation(AnimationKey))
- {
- animPlayer.Play(_insertingPlasticAnimation, AnimationKey);
- }
- break;
- default:
- throw new ArgumentOutOfRangeException();
- }
-
- var glowingPartsVisible = !(component.TryGetData(PowerDeviceVisuals.Powered, out bool powered) && !powered);
- sprite.LayerSetVisible(AutolatheVisualLayers.BaseUnlit, glowingPartsVisible);
- }
-
- public enum AutolatheVisualLayers : byte
- {
- Base,
- BaseUnlit,
- AnimationLayer
- }
- }
-}
diff --git a/Content.Client/Lathe/Visualizers/ProtolatheVisualizer.cs b/Content.Client/Lathe/Visualizers/ProtolatheVisualizer.cs
deleted file mode 100644
index bdeb3e0d2a..0000000000
--- a/Content.Client/Lathe/Visualizers/ProtolatheVisualizer.cs
+++ /dev/null
@@ -1,134 +0,0 @@
-using System;
-using Content.Shared.Lathe;
-using Content.Shared.Power;
-using JetBrains.Annotations;
-using Robust.Client.Animations;
-using Robust.Client.GameObjects;
-using Robust.Shared.GameObjects;
-using Robust.Shared.IoC;
-
-namespace Content.Client.Lathe.Visualizers
-{
- [UsedImplicitly]
- public sealed class ProtolatheVisualizer : AppearanceVisualizer
- {
- [Dependency] private readonly IEntityManager _entMan = default!;
-
- private const string AnimationKey = "inserting_animation";
-
- private Animation _buildingAnimation;
- private Animation _insertingMetalAnimation;
- private Animation _insertingGlassAnimation;
- private Animation _insertingGoldAnimation;
- private Animation _insertingPlasmaAnimation;
- private Animation _insertingPlasticAnimation;
-
- public ProtolatheVisualizer()
- {
- _buildingAnimation = PopulateAnimation("building", "building_unlit", 0.8f);
- _insertingMetalAnimation = PopulateAnimation("inserting_metal", "inserting_unlit", 0.8f);
- _insertingGlassAnimation = PopulateAnimation("inserting_glass", "inserting_unlit", 0.8f);
- _insertingGoldAnimation = PopulateAnimation("inserting_gold", "inserting_unlit", 0.8f);
- _insertingPlasmaAnimation = PopulateAnimation("inserting_plasma", "inserting_unlit", 0.8f);
- _insertingPlasticAnimation = PopulateAnimation("inserting_plastic", "inserting_unlit", 0.8f);
- }
-
- private Animation PopulateAnimation(string sprite, string spriteUnlit, float length)
- {
- var animation = new Animation { Length = TimeSpan.FromSeconds(length) };
-
- var flick = new AnimationTrackSpriteFlick();
- animation.AnimationTracks.Add(flick);
- flick.LayerKey = ProtolatheVisualLayers.Base;
- flick.KeyFrames.Add(new AnimationTrackSpriteFlick.KeyFrame(sprite, 0f));
-
- var flickUnlit = new AnimationTrackSpriteFlick();
- animation.AnimationTracks.Add(flickUnlit);
- flickUnlit.LayerKey = ProtolatheVisualLayers.BaseUnlit;
- flickUnlit.KeyFrames.Add(new AnimationTrackSpriteFlick.KeyFrame(spriteUnlit, 0f));
-
- return animation;
- }
-
- public override void InitializeEntity(EntityUid entity)
- {
- IoCManager.InjectDependencies(this);
-
- _entMan.EnsureComponent(entity);
- }
-
- public override void OnChangeData(AppearanceComponent component)
- {
- base.OnChangeData(component);
-
- var sprite = _entMan.GetComponent(component.Owner);
- var animPlayer = _entMan.GetComponent(component.Owner);
- if (!component.TryGetData(PowerDeviceVisuals.VisualState, out LatheVisualState state))
- {
- state = LatheVisualState.Idle;
- }
- sprite.LayerSetVisible(ProtolatheVisualLayers.AnimationLayer, true);
- switch (state)
- {
- case LatheVisualState.Idle:
- if (animPlayer.HasRunningAnimation(AnimationKey))
- {
- animPlayer.Stop(AnimationKey);
- }
-
- sprite.LayerSetState(ProtolatheVisualLayers.Base, "icon");
- sprite.LayerSetState(ProtolatheVisualLayers.BaseUnlit, "unlit");
- sprite.LayerSetVisible(ProtolatheVisualLayers.AnimationLayer, false);
- break;
- case LatheVisualState.Producing:
- if (!animPlayer.HasRunningAnimation(AnimationKey))
- {
- animPlayer.Play(_buildingAnimation, AnimationKey);
- }
- break;
- case LatheVisualState.InsertingMetal:
- if (!animPlayer.HasRunningAnimation(AnimationKey))
- {
- animPlayer.Play(_insertingMetalAnimation, AnimationKey);
- }
- break;
- case LatheVisualState.InsertingGlass:
- if (!animPlayer.HasRunningAnimation(AnimationKey))
- {
- animPlayer.Play(_insertingGlassAnimation, AnimationKey);
- }
- break;
- case LatheVisualState.InsertingGold:
- if (!animPlayer.HasRunningAnimation(AnimationKey))
- {
- animPlayer.Play(_insertingGoldAnimation, AnimationKey);
- }
- break;
- case LatheVisualState.InsertingPlasma:
- if (!animPlayer.HasRunningAnimation(AnimationKey))
- {
- animPlayer.Play(_insertingPlasmaAnimation, AnimationKey);
- }
- break;
- case LatheVisualState.InsertingPlastic:
- if (!animPlayer.HasRunningAnimation(AnimationKey))
- {
- animPlayer.Play(_insertingPlasticAnimation, AnimationKey);
- }
- break;
- default:
- throw new ArgumentOutOfRangeException();
- }
-
- var glowingPartsVisible = !(component.TryGetData(PowerDeviceVisuals.Powered, out bool powered) && !powered);
- sprite.LayerSetVisible(ProtolatheVisualLayers.BaseUnlit, glowingPartsVisible);
- }
-
- public enum ProtolatheVisualLayers : byte
- {
- Base,
- BaseUnlit,
- AnimationLayer
- }
- }
-}
diff --git a/Content.Server/Disease/DiseaseDiagnosisSystem.cs b/Content.Server/Disease/DiseaseDiagnosisSystem.cs
index 4686adb090..5d76f5297d 100644
--- a/Content.Server/Disease/DiseaseDiagnosisSystem.cs
+++ b/Content.Server/Disease/DiseaseDiagnosisSystem.cs
@@ -1,7 +1,6 @@
using System.Threading;
using Content.Server.Disease.Components;
using Content.Shared.Disease;
-using Content.Shared.Disease.Components;
using Content.Shared.Interaction;
using Content.Shared.Inventory;
using Content.Shared.Examine;
@@ -151,7 +150,7 @@ namespace Content.Server.Disease
_popupSystem.PopupEntity(Loc.GetString("diagnoser-cant-use-swab", ("machine", uid), ("swab", args.Used)), uid, Filter.Entities(args.User));
return;
}
- _popupSystem.PopupEntity(Loc.GetString("diagnoser-insert-swab", ("machine", uid), ("swab", args.Used)), uid, Filter.Entities(args.User));
+ _popupSystem.PopupEntity(Loc.GetString("machine-insert-item", ("machine", uid), ("item", args.Used)), uid, Filter.Entities(args.User));
machine.Disease = swab.Disease;
@@ -183,7 +182,7 @@ namespace Content.Server.Disease
_popupSystem.PopupEntity(Loc.GetString("diagnoser-cant-use-swab", ("machine", uid), ("swab", args.Used)), uid, Filter.Entities(args.User));
return;
}
- _popupSystem.PopupEntity(Loc.GetString("diagnoser-insert-swab", ("machine", uid), ("swab", args.Used)), uid, Filter.Entities(args.User));
+ _popupSystem.PopupEntity(Loc.GetString("machine-insert-item", ("machine", uid), ("item", args.Used)), uid, Filter.Entities(args.User));
var machine = Comp(uid);
machine.Disease = swab.Disease;
EntityManager.DeleteEntity(args.Used);
diff --git a/Content.Server/Entry/IgnoredComponents.cs b/Content.Server/Entry/IgnoredComponents.cs
index 41fd5e6514..44997f3d96 100644
--- a/Content.Server/Entry/IgnoredComponents.cs
+++ b/Content.Server/Entry/IgnoredComponents.cs
@@ -18,6 +18,7 @@ namespace Content.Server.Entry
"ClientEntitySpawner",
"CharacterInfo",
"ItemCabinetVisuals",
+ "LatheVisuals",
"DiseaseMachineVisuals",
"HandheldGPS",
"ToggleableLightVisuals",
diff --git a/Content.Server/Lathe/Components/LatheComponent.cs b/Content.Server/Lathe/Components/LatheComponent.cs
index 203b563382..2bf7e343ed 100644
--- a/Content.Server/Lathe/Components/LatheComponent.cs
+++ b/Content.Server/Lathe/Components/LatheComponent.cs
@@ -1,219 +1,53 @@
-using System.Linq;
-using System.Threading.Tasks;
-using Content.Server.Materials;
-using Content.Server.Power.Components;
-using Content.Server.Research.Components;
-using Content.Server.Stack;
using Content.Server.UserInterface;
-using Content.Shared.Interaction;
using Content.Shared.Lathe;
-using Content.Shared.Power;
using Content.Shared.Research.Prototypes;
using Robust.Server.GameObjects;
-using Robust.Server.Player;
+using Content.Shared.Sound;
namespace Content.Server.Lathe.Components
{
[RegisterComponent]
- public sealed class LatheComponent : SharedLatheComponent, IInteractUsing
+ public sealed class LatheComponent : SharedLatheComponent
{
- [Dependency] private readonly IEntityManager _entMan = default!;
-
- public const int VolumePerSheet = 100;
+ ///
+ /// How much volume in cm^3 each sheet of material adds
+ ///
+ public int VolumePerSheet = 100;
+ ///
+ /// The lathe's construction queue
+ ///
[ViewVariables]
public Queue Queue { get; } = new();
-
+ ///
+ /// The recipe the lathe is currently producing
+ ///
[ViewVariables]
- public bool Producing { get; private set; }
-
- private LatheState _state = LatheState.Base;
-
- private LatheState State
- {
- get => _state;
- set => _state = value;
- }
-
+ public LatheRecipePrototype? ProducingRecipe;
+ ///
+ /// How long the inserting animation will play
+ ///
[ViewVariables]
- private LatheRecipePrototype? _producingRecipe;
+ public float InsertionTime = 0.79f; // 0.01 off for animation timing
+ ///
+ /// Update accumulator for the insertion time
+ ///
+ public float InsertionAccumulator = 0f;
+ ///
+ /// Production accumulator for the production time.
+ ///
[ViewVariables]
- private bool Powered => !_entMan.TryGetComponent(Owner, out ApcPowerReceiverComponent? receiver) || receiver.Powered;
+ public float ProducingAccumulator = 0f;
- private static readonly TimeSpan InsertionTime = TimeSpan.FromSeconds(0.9f);
+ ///
+ /// The sound that plays when the lathe is producing an item, if any
+ ///
+ [DataField("producingSound")]
+ public SoundSpecifier? ProducingSound;
- [ViewVariables] private BoundUserInterface? UserInterface => Owner.GetUIOrNull(LatheUiKey.Key);
-
- protected override void Initialize()
- {
- base.Initialize();
-
- if (UserInterface != null)
- {
- UserInterface.OnReceiveMessage += UserInterfaceOnOnReceiveMessage;
- }
- }
-
- private void UserInterfaceOnOnReceiveMessage(ServerBoundUserInterfaceMessage message)
- {
- if (!Powered)
- return;
-
- switch (message.Message)
- {
- case LatheQueueRecipeMessage msg:
- PrototypeManager.TryIndex(msg.ID, out LatheRecipePrototype? recipe);
- if (recipe != null!)
- for (var i = 0; i < msg.Quantity; i++)
- {
- Queue.Enqueue(recipe);
- UserInterface?.SendMessage(new LatheFullQueueMessage(GetIdQueue()));
- }
- break;
- case LatheSyncRequestMessage _:
- if (!_entMan.HasComponent(Owner)) return;
- UserInterface?.SendMessage(new LatheFullQueueMessage(GetIdQueue()));
- if (_producingRecipe != null)
- UserInterface?.SendMessage(new LatheProducingRecipeMessage(_producingRecipe.ID));
- break;
-
- case LatheServerSelectionMessage _:
- if (!_entMan.TryGetComponent(Owner, out ResearchClientComponent? researchClient)) return;
- researchClient.OpenUserInterface(message.Session);
- break;
-
- case LatheServerSyncMessage _:
- if (!_entMan.TryGetComponent(Owner, out TechnologyDatabaseComponent? database)
- || !_entMan.TryGetComponent(Owner, out ProtolatheDatabaseComponent? protoDatabase)) return;
-
- if (database.SyncWithServer())
- protoDatabase.Sync();
-
- break;
- }
-
-
- }
-
- internal bool Produce(LatheRecipePrototype recipe)
- {
- if (Producing || !Powered || !CanProduce(recipe) || !_entMan.TryGetComponent(Owner, out MaterialStorageComponent? storage)) return false;
-
- UserInterface?.SendMessage(new LatheFullQueueMessage(GetIdQueue()));
-
- Producing = true;
- _producingRecipe = recipe;
-
- foreach (var (material, amount) in recipe.RequiredMaterials)
- {
- // This should always return true, otherwise CanProduce fucked up.
- storage.RemoveMaterial(material, amount);
- }
-
- UserInterface?.SendMessage(new LatheProducingRecipeMessage(recipe.ID));
-
- State = LatheState.Producing;
- SetAppearance(LatheVisualState.Producing);
-
- Owner.SpawnTimer(recipe.CompleteTime, () =>
- {
- Producing = false;
- _producingRecipe = null;
- _entMan.SpawnEntity(recipe.Result, _entMan.GetComponent(Owner).Coordinates);
- UserInterface?.SendMessage(new LatheStoppedProducingRecipeMessage());
- State = LatheState.Base;
- SetAppearance(LatheVisualState.Idle);
- });
-
- return true;
- }
-
- public void OpenUserInterface(IPlayerSession session)
- {
- UserInterface?.Open(session);
- }
- async Task IInteractUsing.InteractUsing(InteractUsingEventArgs eventArgs)
- {
- if (!_entMan.TryGetComponent(Owner, out MaterialStorageComponent? storage)
- || !_entMan.TryGetComponent(eventArgs.Using, out MaterialComponent? material)) return false;
-
- var multiplier = 1;
-
- if (_entMan.TryGetComponent(eventArgs.Using, out StackComponent? stack)) multiplier = stack.Count;
-
- var totalAmount = 0;
-
- // Check if it can insert all materials.
- foreach (var mat in material.MaterialIds)
- {
- // TODO: Change how MaterialComponent works so this is not hard-coded.
- if (!storage.CanInsertMaterial(mat, VolumePerSheet * multiplier)) return false;
- totalAmount += VolumePerSheet * multiplier;
- }
-
- // Check if it can take ALL of the material's volume.
- if (storage.CanTakeAmount(totalAmount)) return false;
-
- foreach (var mat in material.MaterialIds)
- {
- storage.InsertMaterial(mat, VolumePerSheet * multiplier);
- }
-
- State = LatheState.Inserting;
- switch (material.Materials.FirstOrDefault()?.ID)
- {
- case "Steel":
- SetAppearance(LatheVisualState.InsertingMetal);
- break;
- case "Glass":
- SetAppearance(LatheVisualState.InsertingGlass);
- break;
- case "Gold":
- SetAppearance(LatheVisualState.InsertingGold);
- break;
- case "Plastic":
- SetAppearance(LatheVisualState.InsertingPlastic);
- break;
- case "Plasma":
- SetAppearance(LatheVisualState.InsertingPlasma);
- break;
- }
-
- Owner.SpawnTimer(InsertionTime, () =>
- {
- State = LatheState.Base;
- SetAppearance(LatheVisualState.Idle);
- });
-
- _entMan.DeleteEntity(eventArgs.Using);
-
- return true;
- }
-
- private void SetAppearance(LatheVisualState state)
- {
- if (_entMan.TryGetComponent(Owner, out AppearanceComponent? appearance))
- {
- appearance.SetData(PowerDeviceVisuals.VisualState, state);
- }
- }
-
- private Queue GetIdQueue()
- {
- var queue = new Queue();
- foreach (var recipePrototype in Queue)
- {
- queue.Enqueue(recipePrototype.ID);
- }
-
- return queue;
- }
-
- private enum LatheState : byte
- {
- Base,
- Inserting,
- Producing
- }
+ ///
+ /// The lathe's UI.
+ ///
+ [ViewVariables] public BoundUserInterface? UserInterface;
}
}
diff --git a/Content.Server/Lathe/Components/LatheInsertingComponent.cs b/Content.Server/Lathe/Components/LatheInsertingComponent.cs
new file mode 100644
index 0000000000..e808c4d26d
--- /dev/null
+++ b/Content.Server/Lathe/Components/LatheInsertingComponent.cs
@@ -0,0 +1,9 @@
+namespace Content.Server.Lathe.Components
+{
+ ///
+ /// For EntityQuery to keep track of which lathes are inserting
+ ///
+ [RegisterComponent]
+ public sealed class LatheInsertingComponent : Component
+ {}
+}
diff --git a/Content.Server/Lathe/Components/LatheProducingComponent.cs b/Content.Server/Lathe/Components/LatheProducingComponent.cs
new file mode 100644
index 0000000000..55ff79d625
--- /dev/null
+++ b/Content.Server/Lathe/Components/LatheProducingComponent.cs
@@ -0,0 +1,9 @@
+namespace Content.Server.Lathe.Components
+{
+ ///
+ /// For EntityQuery to keep track of which lathes are producing
+ ///
+ [RegisterComponent]
+ public sealed class LatheProducingComponent : Component
+ {}
+}
diff --git a/Content.Server/Lathe/LatheSystem.cs b/Content.Server/Lathe/LatheSystem.cs
index ad5025129e..cdb37f42ab 100644
--- a/Content.Server/Lathe/LatheSystem.cs
+++ b/Content.Server/Lathe/LatheSystem.cs
@@ -1,21 +1,286 @@
using Content.Server.Lathe.Components;
+using Content.Shared.Lathe;
+using Content.Shared.Materials;
+using Content.Shared.Research.Prototypes;
+using Content.Server.Research.Components;
+using Content.Shared.Interaction;
+using Content.Server.Materials;
+using Content.Server.Popups;
+using Content.Server.Power.Components;
+using Content.Server.Stack;
+using Content.Server.UserInterface;
+using Robust.Server.GameObjects;
+using Robust.Shared.Prototypes;
+using Robust.Shared.Player;
+using Robust.Shared.Audio;
using JetBrains.Annotations;
-using Robust.Shared.GameObjects;
namespace Content.Server.Lathe
{
[UsedImplicitly]
- internal sealed class LatheSystem : EntitySystem
+ public sealed class LatheSystem : EntitySystem
{
+ [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
+ [Dependency] private readonly PopupSystem _popupSystem = default!;
+
+ public override void Initialize()
+ {
+ base.Initialize();
+ SubscribeLocalEvent(OnInteractUsing);
+ SubscribeLocalEvent(OnComponentInit);
+ }
+
+ // These queues are to add/remove COMPONENTS to the lathes
+ private Queue ProducingAddQueue = new();
+ private Queue ProducingRemoveQueue = new();
+ private Queue InsertingAddQueue = new();
+ private Queue InsertingRemoveQueue = new();
+
public override void Update(float frameTime)
{
- foreach (var comp in EntityManager.EntityQuery())
+ foreach (var uid in ProducingAddQueue)
+ EnsureComp(uid);
+ ProducingAddQueue.Clear();
+ foreach (var uid in ProducingRemoveQueue)
+ RemComp(uid);
+ ProducingRemoveQueue.Clear();
+ foreach (var uid in InsertingAddQueue)
+ EnsureComp(uid);
+ InsertingAddQueue.Clear();
+ foreach (var uid in InsertingRemoveQueue)
+ RemComp(uid);
+ InsertingRemoveQueue.Clear();
+
+ foreach (var (insertingComp, lathe) in EntityQuery(false))
{
- if (comp.Producing == false && comp.Queue.Count > 0)
+ if (lathe.InsertionAccumulator < lathe.InsertionTime)
{
- comp.Produce(comp.Queue.Dequeue());
+ lathe.InsertionAccumulator += frameTime;
+ continue;
}
+ lathe.InsertionAccumulator = 0;
+ UpdateInsertingAppearance(lathe.Owner, false);
+ InsertingRemoveQueue.Enqueue(lathe.Owner);
}
+
+ foreach (var (producingComp, lathe) in EntityQuery(false))
+ {
+ if (lathe.ProducingRecipe == null)
+ continue;
+ if (lathe.ProducingAccumulator < lathe.ProducingRecipe.CompleteTime.TotalSeconds)
+ {
+ lathe.ProducingAccumulator += frameTime;
+ continue;
+ }
+ lathe.ProducingAccumulator = 0;
+
+ FinishProducing(lathe.ProducingRecipe, lathe);
+ }
+ }
+
+ ///
+ /// Initialize the UI and appearance.
+ /// Appearance requires initialization or the layers break
+ ///
+ private void OnComponentInit(EntityUid uid, LatheComponent component, ComponentInit args)
+ {
+ component.UserInterface = uid.GetUIOrNull(LatheUiKey.Key);
+ if (component.UserInterface != null)
+ {
+ component.UserInterface.OnReceiveMessage += msg => UserInterfaceOnOnReceiveMessage(uid, component, msg);
+ }
+
+ if (!TryComp(uid, out var appearance))
+ return;
+ appearance.SetData(LatheVisuals.IsInserting, false);
+ appearance.SetData(LatheVisuals.IsRunning, false);
+ }
+
+ ///
+ /// When someone tries to use an item on the lathe,
+ /// insert it if it's a stack and fits inside
+ ///
+ private void OnInteractUsing(EntityUid uid, LatheComponent component, InteractUsingEvent args)
+ {
+ if (!TryComp(uid, out var storage) || !TryComp(args.Used, out var material))
+ return;
+
+ var multiplier = 1;
+
+ if (TryComp(args.Used, out var stack))
+ multiplier = stack.Count;
+
+ var totalAmount = 0;
+
+ // Check if it can insert all materials.
+ foreach (var mat in material.MaterialIds)
+ {
+ // TODO: Change how MaterialComponent works so this is not hard-coded.
+ if (!storage.CanInsertMaterial(mat, component.VolumePerSheet * multiplier))
+ return;
+ totalAmount += component.VolumePerSheet * multiplier;
+ }
+
+ // Check if it can take ALL of the material's volume.
+ if (storage.StorageLimit > 0 && !storage.CanTakeAmount(totalAmount))
+ return;
+ var lastMat = string.Empty;
+ foreach (var mat in material.MaterialIds)
+ {
+ storage.InsertMaterial(mat, component.VolumePerSheet * multiplier);
+ lastMat = mat;
+ }
+ /// We need the prototype to get the color
+ _prototypeManager.TryIndex(lastMat, out MaterialPrototype? matProto);
+
+ EntityManager.QueueDeleteEntity(args.Used);
+ InsertingAddQueue.Enqueue(uid);
+ _popupSystem.PopupEntity(Loc.GetString("machine-insert-item", ("machine", uid),
+ ("item", args.Used)), uid, Filter.Entities(args.User));
+ if (matProto != null)
+ {
+ UpdateInsertingAppearance(uid, true, matProto.Color);
+ }
+ UpdateInsertingAppearance(uid, true);
+ }
+
+ ///
+ /// This handles the checks to start producing an item, and
+ /// starts up the sound and visuals
+ ///
+ private bool Produce(LatheComponent component, LatheRecipePrototype recipe, bool SkipCheck = false)
+ {
+ if (!component.CanProduce(recipe)
+ || !TryComp(component.Owner, out MaterialStorageComponent? storage))
+ return false;
+
+ if (!SkipCheck && HasComp(component.Owner))
+ return false;
+
+ if (TryComp(component.Owner, out var receiver) && !receiver.Powered)
+ return false;
+
+ component.UserInterface?.SendMessage(new LatheFullQueueMessage(GetIdQueue(component)));
+
+ component.ProducingRecipe = recipe;
+
+ foreach (var (material, amount) in recipe.RequiredMaterials)
+ {
+ // This should always return true, otherwise CanProduce fucked up.
+ storage.RemoveMaterial(material, amount);
+ }
+
+ component.UserInterface?.SendMessage(new LatheProducingRecipeMessage(recipe.ID));
+ if (component.ProducingSound != null)
+ {
+ SoundSystem.Play(Filter.Pvs(component.Owner), component.ProducingSound.GetSound(), component.Owner);
+ }
+ UpdateRunningAppearance(component.Owner, true);
+ ProducingAddQueue.Enqueue(component.Owner);
+ return true;
+ }
+
+ ///
+ /// After the production timer is up, this spawns the recipe and
+ /// either cleans up or continues to the next item in the queue
+ ///
+ private void FinishProducing(LatheRecipePrototype recipe, LatheComponent component)
+ {
+ component.ProducingRecipe = null;
+ EntityManager.SpawnEntity(recipe.Result, Comp(component.Owner).Coordinates);
+ component.UserInterface?.SendMessage(new LatheStoppedProducingRecipeMessage());
+ // Continue to next in queue if there are items left
+ if (component.Queue.Count > 0)
+ {
+ Produce(component, component.Queue.Dequeue(), true);
+ return;
+ }
+ ProducingRemoveQueue.Enqueue(component.Owner);
+ UpdateRunningAppearance(component.Owner, false);
+ }
+
+ ///
+ /// Sets the machine sprite to either play the running animation
+ /// or stop.
+ ///
+ private void UpdateRunningAppearance(EntityUid uid, bool isRunning)
+ {
+ if (!TryComp(uid, out var appearance))
+ return;
+
+ appearance.SetData(LatheVisuals.IsRunning, isRunning);
+ }
+
+ ///
+ /// Sets the machine sprite to play the inserting animation
+ /// and sets the color of the inserted mat if applicable
+ ///
+ private void UpdateInsertingAppearance(EntityUid uid, bool isInserting, Color? color = null)
+ {
+ if (!TryComp(uid, out var appearance))
+ return;
+
+ appearance.SetData(LatheVisuals.IsInserting, isInserting);
+ if (color != null)
+ appearance.SetData(LatheVisuals.InsertingColor, color);
+ }
+
+ ///
+ /// Handles all the button presses in the lathe UI
+ ///
+ private void UserInterfaceOnOnReceiveMessage(EntityUid uid, LatheComponent component, ServerBoundUserInterfaceMessage message)
+ {
+ if (TryComp(uid, out var receiver) && !receiver.Powered)
+ return;
+
+ switch (message.Message)
+ {
+ case LatheQueueRecipeMessage msg:
+ _prototypeManager.TryIndex(msg.ID, out LatheRecipePrototype? recipe);
+ if (recipe != null!)
+ for (var i = 0; i < msg.Quantity; i++)
+ {
+ component.Queue.Enqueue(recipe);
+ component.UserInterface?.SendMessage(new LatheFullQueueMessage(GetIdQueue(component)));
+ }
+ if (!HasComp(component.Owner) && component.Queue.Count > 0)
+ Produce(component, component.Queue.Dequeue());
+
+ break;
+ case LatheSyncRequestMessage _:
+ if (!HasComp(uid)) return;
+ component.UserInterface?.SendMessage(new LatheFullQueueMessage(GetIdQueue(component)));
+ if (component.ProducingRecipe != null)
+ component.UserInterface?.SendMessage(new LatheProducingRecipeMessage(component.ProducingRecipe.ID));
+ break;
+
+ case LatheServerSelectionMessage _:
+ if (!TryComp(uid, out ResearchClientComponent? researchClient)) return;
+ researchClient.OpenUserInterface(message.Session);
+ break;
+
+ case LatheServerSyncMessage _:
+ if (!TryComp(uid, out TechnologyDatabaseComponent? database)
+ || !TryComp(uid, out ProtolatheDatabaseComponent? protoDatabase)) return;
+
+ if (database.SyncWithServer())
+ protoDatabase.Sync();
+
+ break;
+ }
+ }
+
+ ///
+ /// Gets all the prototypes in the lathe's construction queue
+ ///
+ private Queue GetIdQueue(LatheComponent lathe)
+ {
+ var queue = new Queue();
+ foreach (var recipePrototype in lathe.Queue)
+ {
+ queue.Enqueue(recipePrototype.ID);
+ }
+ return queue;
}
}
}
diff --git a/Content.Shared/Lathe/LatheMessages.cs b/Content.Shared/Lathe/LatheMessages.cs
new file mode 100644
index 0000000000..0ffffb1306
--- /dev/null
+++ b/Content.Shared/Lathe/LatheMessages.cs
@@ -0,0 +1,94 @@
+using Robust.Shared.Serialization;
+
+namespace Content.Shared.Lathe;
+
+ ///
+ /// Sent to the server to sync material storage and the recipe queue.
+ ///
+ [Serializable, NetSerializable]
+ public sealed class LatheSyncRequestMessage : BoundUserInterfaceMessage
+ {
+ public LatheSyncRequestMessage()
+ {
+ }
+ }
+
+ ///
+ /// Sent to the server to sync the lathe's technology database with the research server.
+ ///
+ [Serializable, NetSerializable]
+ public sealed class LatheServerSyncMessage : BoundUserInterfaceMessage
+ {
+ public LatheServerSyncMessage()
+ {
+ }
+ }
+
+ ///
+ /// Sent to the server to open the ResearchClient UI.
+ ///
+ [Serializable, NetSerializable]
+ public sealed class LatheServerSelectionMessage : BoundUserInterfaceMessage
+ {
+ public LatheServerSelectionMessage()
+ {
+ }
+ }
+
+ ///
+ /// Sent to the client when the lathe is producing a recipe.
+ ///
+ [Serializable, NetSerializable]
+ public sealed class LatheProducingRecipeMessage : BoundUserInterfaceMessage
+ {
+ public readonly string ID;
+ public LatheProducingRecipeMessage(string id)
+ {
+ ID = id;
+ }
+ }
+
+ ///
+ /// Sent to the client when the lathe stopped/finished producing a recipe.
+ ///
+ [Serializable, NetSerializable]
+ public sealed class LatheStoppedProducingRecipeMessage : BoundUserInterfaceMessage
+ {
+ public LatheStoppedProducingRecipeMessage()
+ {
+ }
+ }
+
+ ///
+ /// Sent to the client to let it know about the recipe queue.
+ ///
+ [Serializable, NetSerializable]
+ public sealed class LatheFullQueueMessage : BoundUserInterfaceMessage
+ {
+ public readonly Queue Recipes;
+ public LatheFullQueueMessage(Queue recipes)
+ {
+ Recipes = recipes;
+ }
+ }
+
+ ///
+ /// Sent to the server when a client queues a new recipe.
+ ///
+ [Serializable, NetSerializable]
+ public sealed class LatheQueueRecipeMessage : BoundUserInterfaceMessage
+ {
+ public readonly string ID;
+ public readonly int Quantity;
+ public LatheQueueRecipeMessage(string id, int quantity)
+ {
+ ID = id;
+ Quantity = quantity;
+ }
+ }
+
+ [NetSerializable, Serializable]
+ public enum LatheUiKey
+ {
+ Key,
+ }
diff --git a/Content.Shared/Lathe/LatheVisualState.cs b/Content.Shared/Lathe/LatheVisualState.cs
deleted file mode 100644
index 1f2c7a5834..0000000000
--- a/Content.Shared/Lathe/LatheVisualState.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-using System;
-using Robust.Shared.Serialization;
-
-namespace Content.Shared.Lathe
-{
- [Serializable, NetSerializable]
- public enum LatheVisualState
- {
- Idle,
- Producing,
- InsertingMetal,
- InsertingGlass,
- InsertingGold,
- InsertingPlasma,
- InsertingPlastic
- }
-}
diff --git a/Content.Shared/Lathe/LatheVisuals.cs b/Content.Shared/Lathe/LatheVisuals.cs
new file mode 100644
index 0000000000..7ae780a592
--- /dev/null
+++ b/Content.Shared/Lathe/LatheVisuals.cs
@@ -0,0 +1,17 @@
+using Robust.Shared.Serialization;
+
+namespace Content.Shared.Lathe
+{
+ [Serializable, NetSerializable]
+ ///
+ /// Stores bools for if the machine is on
+ /// and if it's currently running and/or inserting.
+ /// Used for the visualizer
+ ///
+ public enum LatheVisuals : byte
+ {
+ IsRunning,
+ IsInserting,
+ InsertingColor
+ }
+}
diff --git a/Content.Shared/Lathe/SharedLatheComponent.cs b/Content.Shared/Lathe/SharedLatheComponent.cs
index f47212cbcc..217dd67911 100644
--- a/Content.Shared/Lathe/SharedLatheComponent.cs
+++ b/Content.Shared/Lathe/SharedLatheComponent.cs
@@ -1,11 +1,6 @@
-using System;
-using System.Collections.Generic;
using Content.Shared.Research.Prototypes;
-using Robust.Shared.GameObjects;
using Robust.Shared.GameStates;
-using Robust.Shared.IoC;
using Robust.Shared.Prototypes;
-using Robust.Shared.Serialization;
namespace Content.Shared.Lathe
{
@@ -24,7 +19,7 @@ namespace Content.Shared.Lathe
foreach (var (material, amount) in recipe.RequiredMaterials)
{
- if (storage[material] <= (amount * quantity)) return false;
+ if (storage[material] < (amount * quantity)) return false;
}
return true;
@@ -34,98 +29,5 @@ namespace Content.Shared.Lathe
{
return PrototypeManager.TryIndex(id, out LatheRecipePrototype? recipe) && CanProduce(recipe, quantity);
}
-
- ///
- /// Sent to the server to sync material storage and the recipe queue.
- ///
- [Serializable, NetSerializable]
- public sealed class LatheSyncRequestMessage : BoundUserInterfaceMessage
- {
- public LatheSyncRequestMessage()
- {
- }
- }
-
-
-
- ///
- /// Sent to the server to sync the lathe's technology database with the research server.
- ///
- [Serializable, NetSerializable]
- public sealed class LatheServerSyncMessage : BoundUserInterfaceMessage
- {
- public LatheServerSyncMessage()
- {
- }
- }
-
- ///
- /// Sent to the server to open the ResearchClient UI.
- ///
- [Serializable, NetSerializable]
- public sealed class LatheServerSelectionMessage : BoundUserInterfaceMessage
- {
- public LatheServerSelectionMessage()
- {
- }
- }
-
- ///
- /// Sent to the client when the lathe is producing a recipe.
- ///
- [Serializable, NetSerializable]
- public sealed class LatheProducingRecipeMessage : BoundUserInterfaceMessage
- {
- public readonly string ID;
- public LatheProducingRecipeMessage(string id)
- {
- ID = id;
- }
- }
-
- ///
- /// Sent to the client when the lathe stopped/finished producing a recipe.
- ///
- [Serializable, NetSerializable]
- public sealed class LatheStoppedProducingRecipeMessage : BoundUserInterfaceMessage
- {
- public LatheStoppedProducingRecipeMessage()
- {
- }
- }
-
- ///
- /// Sent to the client to let it know about the recipe queue.
- ///
- [Serializable, NetSerializable]
- public sealed class LatheFullQueueMessage : BoundUserInterfaceMessage
- {
- public readonly Queue Recipes;
- public LatheFullQueueMessage(Queue recipes)
- {
- Recipes = recipes;
- }
- }
-
- ///
- /// Sent to the server when a client queues a new recipe.
- ///
- [Serializable, NetSerializable]
- public sealed class LatheQueueRecipeMessage : BoundUserInterfaceMessage
- {
- public readonly string ID;
- public readonly int Quantity;
- public LatheQueueRecipeMessage(string id, int quantity)
- {
- ID = id;
- Quantity = quantity;
- }
- }
-
- [NetSerializable, Serializable]
- public enum LatheUiKey
- {
- Key,
- }
}
}
diff --git a/Content.Shared/Research/Prototypes/LatheRecipePrototype.cs b/Content.Shared/Research/Prototypes/LatheRecipePrototype.cs
index e247d5ada8..be6a0a62d2 100644
--- a/Content.Shared/Research/Prototypes/LatheRecipePrototype.cs
+++ b/Content.Shared/Research/Prototypes/LatheRecipePrototype.cs
@@ -1,14 +1,9 @@
-using System;
-using System.Collections.Generic;
using Content.Shared.Materials;
-using Robust.Shared.IoC;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization;
-using Robust.Shared.Serialization.Manager.Attributes;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Dictionary;
using Robust.Shared.Utility;
-using Robust.Shared.ViewVariables;
namespace Content.Shared.Research.Prototypes
{
@@ -32,7 +27,7 @@ namespace Content.Shared.Research.Prototypes
private string _result = string.Empty;
[DataField("completetime")]
- private int _completeTime = 2500;
+ private TimeSpan _completeTime = TimeSpan.FromSeconds(5);
[DataField("materials", customTypeSerializer: typeof(PrototypeIdDictionarySerializer))]
private Dictionary _requiredMaterials = new();
@@ -102,6 +97,6 @@ namespace Content.Shared.Research.Prototypes
/// Might lower depending on the lathe's upgrade level.
///
[ViewVariables]
- public int CompleteTime => _completeTime;
+ public TimeSpan CompleteTime => _completeTime;
}
}
diff --git a/Resources/Audio/Machines/circuitprinter.ogg b/Resources/Audio/Machines/circuitprinter.ogg
new file mode 100644
index 0000000000..ce4c375c38
Binary files /dev/null and b/Resources/Audio/Machines/circuitprinter.ogg differ
diff --git a/Resources/Audio/Machines/license.txt b/Resources/Audio/Machines/license.txt
index b81583c745..eb1ca88436 100644
--- a/Resources/Audio/Machines/license.txt
+++ b/Resources/Audio/Machines/license.txt
@@ -1,3 +1,7 @@
diagnoser_printing.ogg taken from https://freesound.org/people/RobSp1derp1g/sounds/615419/ and edited
vaccinator_running.ogg taken from https://freesound.org/people/RutgerMuller/sounds/365413/ and edited
+
+uniformprinter.ogg taken from https://freesound.org/people/sukaton/sounds/60640/ and edited
+
+circuitprinter.ogg taken from https://freesound.org/people/OroborosNZ/sounds/273649/ and https://freesound.org/people/170048@virtualwindow.co.za/sounds/408041/ and edited
diff --git a/Resources/Audio/Machines/uniformprinter.ogg b/Resources/Audio/Machines/uniformprinter.ogg
new file mode 100644
index 0000000000..ddef963bdf
Binary files /dev/null and b/Resources/Audio/Machines/uniformprinter.ogg differ
diff --git a/Resources/Locale/en-US/machine/machine.ftl b/Resources/Locale/en-US/machine/machine.ftl
new file mode 100644
index 0000000000..b6bf7862cf
--- /dev/null
+++ b/Resources/Locale/en-US/machine/machine.ftl
@@ -0,0 +1 @@
+machine-insert-item = You insert {THE($item)} into {THE($machine)}.
diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml
index 94a3ed64b0..6b67df4d02 100644
--- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml
+++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml
@@ -9,14 +9,18 @@
netsync: false
layers:
- state: icon
- map: ["enum.AutolatheVisualLayers.Base"]
+ map: ["enum.LatheVisualLayers.IsRunning"]
- state: unlit
shader: unshaded
- map: ["enum.AutolatheVisualLayers.BaseUnlit"]
- - state: building
- map: ["enum.AutolatheVisualLayers.AnimationLayer"]
+ map: ["enum.PowerDeviceVisualLayers.Powered"]
+ - state: inserting
+ map: ["enum.LatheVisualLayers.IsInserting"]
- state: panel
map: ["enum.WiresVisualLayers.MaintenancePanel"]
+ - type: Appearance
+ - type: LatheVisuals
+ idleState: icon
+ runningState: building
- type: Physics
bodyType: Static
- type: Fixtures
@@ -66,10 +70,6 @@
- CableStack
- HandheldGPSBasic
- HandheldHealthAnalyzer
- - type: Appearance
- visuals:
- - type: AutolatheVisualizer
- - type: WiresVisualizer
- type: ActivatableUI
key: enum.LatheUiKey.Key
- type: ActivatableUIRequiresPower
@@ -93,14 +93,18 @@
netsync: false
layers:
- state: icon
- map: ["enum.ProtolatheVisualLayers.Base"]
+ map: ["enum.LatheVisualLayers.IsRunning"]
- state: unlit
shader: unshaded
- map: ["enum.ProtolatheVisualLayers.BaseUnlit"]
- - state: building
- map: ["enum.ProtolatheVisualLayers.AnimationLayer"]
+ map: ["enum.PowerDeviceVisualLayers.Powered"]
+ - state: inserting
+ map: ["enum.LatheVisualLayers.IsInserting"]
- state: panel
map: ["enum.WiresVisualLayers.MaintenancePanel"]
+ - type: Appearance
+ - type: LatheVisuals
+ idleState: icon
+ runningState: building
- type: Physics
bodyType: Static
- type: Fixtures
@@ -196,10 +200,6 @@
type: LatheBoundUserInterface
- key: enum.ResearchClientUiKey.Key
type: ResearchClientBoundUserInterface
- - type: Appearance
- visuals:
- - type: ProtolatheVisualizer
- - type: WiresVisualizer
- type: Transform
anchored: true
- type: Pullable
@@ -216,12 +216,10 @@
sprite: Structures/Machines/circuit_imprinter.rsi
layers:
- state: icon
- map: ["enum.ProtolatheVisualLayers.Base"]
+ map: ["enum.LatheVisualLayers.IsRunning"]
- state: unlit
shader: unshaded
- map: ["enum.ProtolatheVisualLayers.BaseUnlit"]
- - state: building
- map: ["enum.ProtolatheVisualLayers.AnimationLayer"]
+ map: ["enum.PowerDeviceVisualLayers.Powered"]
- state: panel
map: ["enum.WiresVisualLayers.MaintenancePanel"]
- type: ProtolatheDatabase
@@ -248,6 +246,8 @@
- StasisBedMachineCircuitboard
- type: Machine
board: CircuitImprinterMachineCircuitboard
+ - type: Lathe
+ producingSound: /Audio/Machines/circuitprinter.ogg
- type: entity
parent: Protolathe
@@ -260,14 +260,16 @@
sprite: Structures/Machines/security_techfab.rsi
layers:
- state: icon
- map: ["enum.ProtolatheVisualLayers.Base"]
+ map: ["enum.LatheVisualLayers.IsRunning"]
- state: unlit
shader: unshaded
- map: ["enum.ProtolatheVisualLayers.BaseUnlit"]
- - state: icon
- map: ["enum.ProtolatheVisualLayers.AnimationLayer"]
+ map: ["enum.PowerDeviceVisualLayers.Powered"]
+ - state: inserting
+ map: ["enum.LatheVisualLayers.IsInserting"]
- state: panel
map: ["enum.WiresVisualLayers.MaintenancePanel"]
+ idleState: icon
+ runningState: icon
- type: ProtolatheDatabase
protolatherecipes:
- Flash
@@ -375,13 +377,8 @@
netsync: false
layers:
- state: icon
- map: ["enum.AutolatheVisualLayers.Base"]
- - state: unlit
- shader: unshaded
- map: ["enum.AutolatheVisualLayers.BaseUnlit"]
- - state: building
- map: ["enum.AutolatheVisualLayers.AnimationLayer"]
- - state: panel
- map: ["enum.WiresVisualLayers.MaintenancePanel"]
+ map: ["enum.LatheVisualLayers.IsRunning"]
- type: Machine
board: UniformPrinterMachineCircuitboard
+ - type: Lathe
+ producingSound: /Audio/Machines/uniformprinter.ogg
diff --git a/Resources/Prototypes/Reagents/Materials/glass.yml b/Resources/Prototypes/Reagents/Materials/glass.yml
index c056c78967..73387a86a0 100644
--- a/Resources/Prototypes/Reagents/Materials/glass.yml
+++ b/Resources/Prototypes/Reagents/Materials/glass.yml
@@ -3,33 +3,39 @@
stack: Glass
name: glass
icon: Objects/Materials/Sheets/glass.rsi/glass.png
+ color: "#a8ccd7"
- type: material
id: ReinforcedGlass
stack: ReinforcedGlass
name: reinforced glass
icon: Objects/Materials/Sheets/glass.rsi/rglass.png
+ color: "#549bb0"
- type: material
id: PlasmaGlass
stack: PlasmaGlass
name: plasma glass
icon: Objects/Materials/Sheets/glass.rsi/pglass.png
+ color: "#b35989"
- type: material
id: ReinforcedPlasmaGlass
stack: ReinforcedPlasmaGlass
name: reinforced plasma glass
icon: Objects/Materials/Sheets/glass.rsi/rpglass.png
+ color: "#8c4069"
- type: material
id: TitaniumGlass
stack: TitaniumGlass
name: titanium glass
icon: Objects/Materials/Sheets/glass.rsi/titaniumglass.png
+ color: "#333135"
- type: material
id: PlastitaniumGlass
stack: PlastitaniumGlass
name: plastitanium glass
icon: Objects/Materials/Sheets/glass.rsi/plastitaniumglass.png
+ color: "#232127"
diff --git a/Resources/Prototypes/Reagents/Materials/materials.yml b/Resources/Prototypes/Reagents/Materials/materials.yml
index 4ed56ac8e1..152691d3cf 100644
--- a/Resources/Prototypes/Reagents/Materials/materials.yml
+++ b/Resources/Prototypes/Reagents/Materials/materials.yml
@@ -4,33 +4,39 @@
stack: Cloth
name: cloth
icon: /Textures/Objects/Materials/materials.rsi/cloth.png
+ color: "#e7e7de"
- type: material
id: Durathread
stack: Durathread
name: durathread
icon: /Textures/Objects/Materials/materials.rsi/durathread.png
+ color: "#8291a1"
- type: material
id: Plasma
stack: Plasma
name: plasma
icon: Objects/Materials/Sheets/other.rsi/plasma.png
+ color: "#7e009e"
- type: material
id: Phoron
stack: Phoron
name: phoron
icon: Objects/Materials/Sheets/other.rsi/phoron.png
+ color: "#FF3300"
- type: material
id: Plastic
stack: Plastic
name: plastic
icon: Objects/Materials/Sheets/other.rsi/plastic.png
+ color: "#d9d9d9"
- type: material
id: Wood
stack: WoodPlank
name: wood
icon: Objects/Materials/materials.rsi/wood.png
+ color: "#966F33"
diff --git a/Resources/Prototypes/Reagents/Materials/metals.yml b/Resources/Prototypes/Reagents/Materials/metals.yml
index 18c4ad33fe..47b0371c7e 100644
--- a/Resources/Prototypes/Reagents/Materials/metals.yml
+++ b/Resources/Prototypes/Reagents/Materials/metals.yml
@@ -9,18 +9,21 @@
stack: Adamantine
name: adamantine
icon: Objects/Materials/ingots.rsi/adamantine.png
+ color: "#7dc37f"
- type: material
id: Copper
stack: Copper
name: copper
icon: Objects/Materials/ingots.rsi/copper.png
+ color: "#B87333"
- type: material
id: Gold
stack: Gold
name: gold
icon: Objects/Materials/ingots.rsi/gold.png
+ color: "#FFD700"
- type: material
id: Hydrogen
@@ -32,34 +35,39 @@
id: Iron
stack: Iron
name: iron
- icon: Objects/Materials/ingots.rsi/iron.png
+ icon: Objects/Materials/ingots.rsi/iron.png #Do we even distinguish between steel and iron?
- type: material
id: Silver
stack: Silver
name: silver
icon: Objects/Materials/ingots.rsi/silver.png
+ color: "#C0C0C0"
- type: material
id: Plasteel
stack: Plasteel
name: plasteel
icon: Objects/Materials/Sheets/metal.rsi/plasteel.png
+ color: "#696969" #Okay, this is epic
- type: material
id: Brass
stack: Brass
name: brass
icon: Objects/Materials/Sheets/metal.rsi/brass.png
+ color: "#E1C16E"
- type: material
id: Titanium
stack: Titanium
name: titanium
icon: Objects/Materials/Sheets/metal.rsi/titanium.png
+ color: "#878681"
- type: material
id: Plastitanium
stack: Plastitanium
name: plastitanium
icon: Objects/Materials/Sheets/metal.rsi/plastitanium.png
+ color: "#4e4e4b"
diff --git a/Resources/Prototypes/Recipes/Lathes/Parts.yml b/Resources/Prototypes/Recipes/Lathes/Parts.yml
index f0f4b4fb3b..168ccb963f 100644
--- a/Resources/Prototypes/Recipes/Lathes/Parts.yml
+++ b/Resources/Prototypes/Recipes/Lathes/Parts.yml
@@ -2,7 +2,7 @@
id: CapacitorStockPart
icon: Objects/Misc/stock_parts.rsi/capacitor.png
result: CapacitorStockPart
- completetime: 250
+ completetime: 1
materials:
Steel: 50
Plastic: 50
@@ -11,7 +11,7 @@
id: MatterBinStockPart
icon: Objects/Misc/stock_parts.rsi/matter_bin.png
result: MatterBinStockPart
- completetime: 250
+ completetime: 1
materials:
Steel: 50
Plastic: 50
@@ -20,7 +20,7 @@
id: MicroLaserStockPart
icon: Objects/Misc/stock_parts.rsi/micro_laser.png
result: MicroLaserStockPart
- completetime: 250
+ completetime: 1
materials:
Steel: 50
Glass: 50
@@ -30,7 +30,7 @@
id: MicroManipulatorStockPart
icon: Objects/Misc/stock_parts.rsi/micro_mani.png
result: MicroManipulatorStockPart
- completetime: 250
+ completetime: 1
materials:
Steel: 50
Plastic: 50
@@ -39,7 +39,7 @@
id: ScanningModuleStockPart
icon: Objects/Misc/stock_parts.rsi/scan_module_static.png
result: ScanningModuleStockPart
- completetime: 250
+ completetime: 1
materials:
Steel: 50
Glass: 50
diff --git a/Resources/Prototypes/Recipes/Lathes/botany.yml b/Resources/Prototypes/Recipes/Lathes/botany.yml
index a14894d889..46a1288146 100644
--- a/Resources/Prototypes/Recipes/Lathes/botany.yml
+++ b/Resources/Prototypes/Recipes/Lathes/botany.yml
@@ -4,7 +4,7 @@
sprite: Objects/Tools/Hydroponics/hoe.rsi
state: icon
result: HydroponicsToolMiniHoe
- completetime: 500
+ completetime: 2
materials:
Steel: 200
Plastic: 100
@@ -15,7 +15,7 @@
sprite: Objects/Tools/Hydroponics/scythe.rsi
state: icon
result: HydroponicsToolScythe
- completetime: 500
+ completetime: 2
materials:
Steel: 300
Plastic: 200
@@ -26,7 +26,7 @@
sprite: Objects/Tools/Hydroponics/hatchet.rsi
state: icon
result: HydroponicsToolHatchet
- completetime: 500
+ completetime: 2
materials:
Steel: 200
Plastic: 100
@@ -37,7 +37,7 @@
sprite: Objects/Tools/Hydroponics/spade.rsi
state: icon
result: HydroponicsToolSpade
- completetime: 500
+ completetime: 2
materials:
Steel: 200
Plastic: 100
diff --git a/Resources/Prototypes/Recipes/Lathes/cargo.yml b/Resources/Prototypes/Recipes/Lathes/cargo.yml
index 98d4a636be..5ebce40fbd 100644
--- a/Resources/Prototypes/Recipes/Lathes/cargo.yml
+++ b/Resources/Prototypes/Recipes/Lathes/cargo.yml
@@ -4,7 +4,7 @@
sprite: Structures/conveyor.rsi
state: conveyor_loose
result: ConveyorBeltAssembly
- completetime: 1000
+ completetime: 4
materials:
Steel: 500
Plastic: 50
diff --git a/Resources/Prototypes/Recipes/Lathes/chemistry.yml b/Resources/Prototypes/Recipes/Lathes/chemistry.yml
index 6d9be1a84f..6716bb5aa8 100644
--- a/Resources/Prototypes/Recipes/Lathes/chemistry.yml
+++ b/Resources/Prototypes/Recipes/Lathes/chemistry.yml
@@ -4,7 +4,7 @@
sprite: Objects/Specific/Chemistry/beaker.rsi
state: beaker
result: Beaker
- completetime: 500
+ completetime: 2
materials:
Glass: 100
@@ -14,7 +14,7 @@
sprite: Objects/Specific/Chemistry/beaker_large.rsi
state: beakerlarge
result: LargeBeaker
- completetime: 500
+ completetime: 2
materials:
Glass: 200
@@ -24,18 +24,18 @@
sprite: Objects/Specific/Chemistry/beaker_cryostasis.rsi
state: beakernoreact
result: CryostasisBeaker
- completetime: 500
+ completetime: 2
materials:
Steel: 250
Plastic: 50
-
+
- type: latheRecipe
id: Dropper
icon:
sprite: Objects/Specific/Chemistry/dropper.rsi
state: dropper
result: Dropper
- completetime: 500
+ completetime: 2
materials:
Glass: 200
Plastic: 100
@@ -46,7 +46,7 @@
sprite: Objects/Specific/Chemistry/syringe.rsi
state: syringe_base0
result: Syringe
- completetime: 500
+ completetime: 2
materials:
Plastic: 100
Steel: 25
@@ -55,6 +55,6 @@
id: PillCanister
icon: Objects/Specific/Chemistry/pills_canister.rsi/pill_canister.png
result: PillCanister
- completetime: 500
+ completetime: 2
materials:
Plastic: 100
diff --git a/Resources/Prototypes/Recipes/Lathes/clothing.yml b/Resources/Prototypes/Recipes/Lathes/clothing.yml
index 5821a74d8c..015532656b 100644
--- a/Resources/Prototypes/Recipes/Lathes/clothing.yml
+++ b/Resources/Prototypes/Recipes/Lathes/clothing.yml
@@ -6,7 +6,7 @@
sprite: Clothing/Uniforms/Jumpsuit/Color/grey.rsi
state: icon
result: ClothingUniformJumpsuitColorGrey
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
@@ -16,7 +16,7 @@
sprite: Clothing/Uniforms/Jumpskirt/Color/grey.rsi
state: icon
result: ClothingUniformJumpskirtColorGrey
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
@@ -26,7 +26,7 @@
sprite: Clothing/Uniforms/Jumpsuit/bartender.rsi
state: icon
result: ClothingUniformJumpsuitBartender
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
@@ -36,7 +36,7 @@
sprite: Clothing/Uniforms/Jumpskirt/bartender.rsi
state: icon
result: ClothingUniformJumpskirtBartender
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
@@ -46,7 +46,7 @@
sprite: Clothing/Uniforms/Jumpsuit/captain.rsi
state: icon
result: ClothingUniformJumpsuitCaptain
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
Durathread: 100
@@ -57,7 +57,7 @@
sprite: Clothing/Uniforms/Jumpskirt/captain.rsi
state: icon
result: ClothingUniformJumpskirtCaptain
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
Durathread: 100
@@ -68,7 +68,7 @@
sprite: Clothing/Uniforms/Jumpsuit/cargotech.rsi
state: icon
result: ClothingUniformJumpsuitCargo
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
@@ -78,7 +78,7 @@
sprite: Clothing/Uniforms/Jumpskirt/cargotech.rsi
state: icon
result: ClothingUniformJumpskirtCargo
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
@@ -88,7 +88,7 @@
sprite: Clothing/Uniforms/Jumpsuit/salvage.rsi
state: icon
result: ClothingUniformJumpsuitSalvageSpecialist
- completetime: 800
+ completetime: 4
materials:
Cloth: 500 #It's armored but I don't want to include durathread for a non-head
@@ -98,7 +98,7 @@
sprite: Clothing/Uniforms/Jumpsuit/ce.rsi
state: icon
result: ClothingUniformJumpsuitChiefEngineer
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
Durathread: 100
@@ -109,7 +109,7 @@
sprite: Clothing/Uniforms/Jumpskirt/ce.rsi
state: icon
result: ClothingUniformJumpskirtChiefEngineer
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
Durathread: 100
@@ -120,7 +120,7 @@
sprite: Clothing/Uniforms/Jumpsuit/chaplain.rsi
state: icon
result: ClothingUniformJumpsuitChaplain
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
@@ -130,7 +130,7 @@
sprite: Clothing/Uniforms/Jumpskirt/chaplain.rsi
state: icon
result: ClothingUniformJumpskirtChaplain
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
@@ -140,7 +140,7 @@
sprite: Clothing/Uniforms/Jumpsuit/chef.rsi
state: icon
result: ClothingUniformJumpsuitChef
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
@@ -150,7 +150,7 @@
sprite: Clothing/Uniforms/Jumpskirt/chef.rsi
state: icon
result: ClothingUniformJumpskirtChef
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
@@ -160,7 +160,7 @@
sprite: Clothing/Uniforms/Jumpsuit/chemistry.rsi
state: icon
result: ClothingUniformJumpsuitChemistry
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
@@ -170,7 +170,7 @@
sprite: Clothing/Uniforms/Jumpskirt/chemistry.rsi
state: icon
result: ClothingUniformJumpskirtChemistry
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
@@ -180,7 +180,7 @@
sprite: Clothing/Uniforms/Jumpsuit/clown.rsi
state: icon
result: ClothingUniformJumpsuitClown
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
@@ -190,7 +190,7 @@
sprite: Clothing/Uniforms/Jumpsuit/cmo.rsi
state: icon
result: ClothingUniformJumpsuitCMO
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
Durathread: 100
@@ -201,7 +201,7 @@
sprite: Clothing/Uniforms/Jumpskirt/cmo.rsi
state: icon
result: ClothingUniformJumpskirtCMO
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
Durathread: 100
@@ -212,7 +212,7 @@
sprite: Clothing/Uniforms/Jumpsuit/detective.rsi
state: icon
result: ClothingUniformJumpsuitDetective
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
@@ -222,7 +222,7 @@
sprite: Clothing/Uniforms/Jumpskirt/detective.rsi
state: icon
result: ClothingUniformJumpskirtDetective
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
@@ -232,7 +232,7 @@
sprite: Clothing/Uniforms/Jumpsuit/engineering.rsi
state: icon
result: ClothingUniformJumpsuitEngineering
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
@@ -242,7 +242,7 @@
sprite: Clothing/Uniforms/Jumpskirt/engineering.rsi
state: icon
result: ClothingUniformJumpskirtEngineering
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
@@ -252,7 +252,7 @@
sprite: Clothing/Uniforms/Jumpsuit/hop.rsi
state: icon
result: ClothingUniformJumpsuitHoP
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
Durathread: 100
@@ -263,7 +263,7 @@
sprite: Clothing/Uniforms/Jumpskirt/hop.rsi
state: icon
result: ClothingUniformJumpskirtHoP
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
Durathread: 100
@@ -274,7 +274,7 @@
sprite: Clothing/Uniforms/Jumpsuit/hos.rsi
state: icon
result: ClothingUniformJumpsuitHoS
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
Durathread: 100
@@ -285,7 +285,7 @@
sprite: Clothing/Uniforms/Jumpskirt/hos.rsi
state: icon
result: ClothingUniformJumpskirtHoS
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
Durathread: 100
@@ -296,7 +296,7 @@
sprite: Clothing/Uniforms/Jumpsuit/hydro.rsi
state: icon
result: ClothingUniformJumpsuitHydroponics
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
@@ -306,7 +306,7 @@
sprite: Clothing/Uniforms/Jumpskirt/hydro.rsi
state: icon
result: ClothingUniformJumpskirtHydroponics
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
@@ -316,7 +316,7 @@
sprite: Clothing/Uniforms/Jumpsuit/janitor.rsi
state: icon
result: ClothingUniformJumpsuitJanitor
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
@@ -326,7 +326,7 @@
sprite: Clothing/Uniforms/Jumpskirt/janitor.rsi
state: icon
result: ClothingUniformJumpskirtJanitor
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
@@ -336,7 +336,7 @@
sprite: Clothing/Uniforms/Jumpsuit/lawyerblack.rsi
state: icon
result: ClothingUniformJumpsuitLawyerBlack
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
@@ -346,7 +346,7 @@
sprite: Clothing/Uniforms/Jumpsuit/librarian.rsi
state: icon
result: ClothingUniformJumpsuitLibrarian
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
@@ -356,7 +356,7 @@
sprite: Clothing/Uniforms/Jumpskirt/Color/lightbrown.rsi
state: icon
result: ClothingUniformJumpskirtColorLightBrown
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
@@ -366,7 +366,7 @@
sprite: Clothing/Uniforms/Jumpsuit/medical.rsi
state: icon
result: ClothingUniformJumpsuitMedicalDoctor
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
@@ -376,7 +376,7 @@
sprite: Clothing/Uniforms/Jumpskirt/medical.rsi
state: icon
result: ClothingUniformJumpskirtMedicalDoctor
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
@@ -386,7 +386,7 @@
sprite: Clothing/Uniforms/Jumpsuit/mime.rsi
state: icon
result: ClothingUniformJumpsuitMime
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
@@ -396,7 +396,7 @@
sprite: Clothing/Uniforms/Jumpskirt/mime.rsi
state: icon
result: ClothingUniformJumpskirtMime
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
@@ -406,7 +406,7 @@
sprite: Clothing/Uniforms/Jumpsuit/lawyerpurple.rsi
state: icon
result: ClothingUniformJumpsuitLawyerPurple
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
@@ -416,7 +416,7 @@
sprite: Clothing/Uniforms/Jumpsuit/paramedic.rsi
state: icon
result: ClothingUniformJumpsuitParamedic
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
@@ -426,7 +426,7 @@
sprite: Clothing/Uniforms/Jumpskirt/paramedic.rsi
state: icon
result: ClothingUniformJumpskirtParamedic
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
@@ -436,7 +436,7 @@
sprite: Clothing/Uniforms/Jumpsuit/prisoner.rsi
state: icon
result: ClothingUniformJumpsuitPrisoner
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
@@ -446,7 +446,7 @@
sprite: Clothing/Uniforms/Jumpskirt/prisoner.rsi
state: icon
result: ClothingUniformJumpskirtPrisoner
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
@@ -456,7 +456,7 @@
sprite: Clothing/Uniforms/Jumpsuit/qm.rsi
state: icon
result: ClothingUniformJumpsuitQM
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
@@ -466,7 +466,7 @@
sprite: Clothing/Uniforms/Jumpskirt/qm.rsi
state: icon
result: ClothingUniformJumpskirtQM
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
@@ -476,7 +476,7 @@
sprite: Clothing/Uniforms/Jumpsuit/rnd.rsi
state: icon
result: ClothingUniformJumpsuitResearchDirector
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
Durathread: 100
@@ -487,7 +487,7 @@
sprite: Clothing/Uniforms/Jumpskirt/rnd.rsi
state: icon
result: ClothingUniformJumpskirtResearchDirector
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
Durathread: 100
@@ -498,7 +498,7 @@
sprite: Clothing/Uniforms/Jumpsuit/scientist.rsi
state: icon
result: ClothingUniformJumpsuitScientist
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
@@ -508,7 +508,7 @@
sprite: Clothing/Uniforms/Jumpskirt/scientist.rsi
state: icon
result: ClothingUniformJumpskirtScientist
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
@@ -518,7 +518,7 @@
sprite: Clothing/Uniforms/Jumpsuit/security.rsi
state: icon
result: ClothingUniformJumpsuitSec
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
@@ -528,7 +528,7 @@
sprite: Clothing/Uniforms/Jumpskirt/security.rsi
state: icon
result: ClothingUniformJumpskirtSec
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
@@ -538,7 +538,7 @@
sprite: Clothing/Uniforms/Jumpsuit/warden.rsi
state: icon
result: ClothingUniformJumpsuitWarden
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
@@ -548,7 +548,7 @@
sprite: Clothing/Uniforms/Jumpskirt/warden.rsi
state: icon
result: ClothingUniformJumpskirtWarden
- completetime: 800
+ completetime: 4
materials:
Cloth: 300
diff --git a/Resources/Prototypes/Recipes/Lathes/cooking.yml b/Resources/Prototypes/Recipes/Lathes/cooking.yml
index 414d34f3a7..d81e068082 100644
--- a/Resources/Prototypes/Recipes/Lathes/cooking.yml
+++ b/Resources/Prototypes/Recipes/Lathes/cooking.yml
@@ -1,10 +1,10 @@
- type: latheRecipe
id: ButchCleaver
- icon:
+ icon:
sprite: Objects/Weapons/Melee/cleaver.rsi
state: butch
result: ButchCleaver
- completetime: 500
+ completetime: 2
materials:
Steel: 300
Plastic: 50
@@ -14,8 +14,8 @@
icon:
sprite: Objects/Weapons/Melee/kitchen_knife.rsi
state: icon
- result: KitchenKnife
- completetime: 500
+ result: KitchenKnife
+ completetime: 2
materials:
Steel: 200
Plastic: 50
@@ -24,7 +24,7 @@
id: DrinkMug
icon: Objects/Consumable/Drinks/mug.rsi
result: DrinkMug
- completetime: 200
+ completetime: 0.8
materials:
Glass: 50
@@ -32,7 +32,7 @@
id: DrinkMugMetal
icon: Objects/Consumable/Drinks/mug_metal.rsi
result: DrinkMugMetal
- completetime: 200
+ completetime: 0.8
materials:
Steel: 50
@@ -40,6 +40,6 @@
id: DrinkGlass
icon: Objects/Consumable/Drinks/glass_clear.rsi
result: DrinkGlass
- completetime: 200
+ completetime: 0.8
materials:
Glass: 50
diff --git a/Resources/Prototypes/Recipes/Lathes/electronics.yml b/Resources/Prototypes/Recipes/Lathes/electronics.yml
index f044b04760..7563626c34 100644
--- a/Resources/Prototypes/Recipes/Lathes/electronics.yml
+++ b/Resources/Prototypes/Recipes/Lathes/electronics.yml
@@ -2,7 +2,7 @@
id: FirelockElectronics
icon: Objects/Misc/module.rsi/mainboard.png
result: FirelockElectronics
- completetime: 500
+ completetime: 2
materials:
Steel: 50
Plastic: 50
@@ -11,7 +11,7 @@
id: DoorElectronics
icon: Objects/Misc/module.rsi/door_electronics.png
result: DoorElectronics
- completetime: 500
+ completetime: 2
materials:
Steel: 50
Plastic: 50
@@ -20,7 +20,7 @@
id: AirAlarmElectronics
icon: Objects/Misc/module.rsi/airalarm_electronics.png
result: AirAlarmElectronics
- completetime: 500
+ completetime: 2
materials:
Steel: 50
Plastic: 50
@@ -29,7 +29,7 @@
id: FireAlarmElectronics
icon: Objects/Misc/module.rsi/door_electronics.png
result: FireAlarmElectronics
- completetime: 500
+ completetime: 2
materials:
Steel: 50
Plastic: 50
@@ -38,7 +38,7 @@
id: CloningPodMachineCircuitboard
icon: Objects/Misc/module.rsi/id_mod.png
result: CloningPodMachineCircuitboard
- completetime: 1000
+ completetime: 4
materials:
Steel: 100
Glass: 900
@@ -48,7 +48,7 @@
id: ThermomachineFreezerMachineCircuitBoard
icon: Objects/Misc/module.rsi/id_mod.png
result: ThermomachineFreezerMachineCircuitBoard
- completetime: 1000
+ completetime: 4
materials:
Steel: 150
Glass: 900
@@ -58,7 +58,7 @@
id: MedicalScannerMachineCircuitboard
icon: Objects/Misc/module.rsi/id_mod.png
result: MedicalScannerMachineCircuitboard
- completetime: 1000
+ completetime: 4
materials:
Steel: 100
Glass: 900
@@ -67,7 +67,7 @@
id: ChemMasterMachineCircuitboard
icon: Objects/Misc/module.rsi/id_mod.png
result: ChemMasterMachineCircuitboard
- completetime: 1000
+ completetime: 4
materials:
Steel: 100
Glass: 900
@@ -76,7 +76,7 @@
id: ChemDispenserMachineCircuitboard
icon: Objects/Misc/module.rsi/id_mod.png
result: ChemDispenserMachineCircuitboard
- completetime: 1000
+ completetime: 4
materials:
Steel: 100
Glass: 900
@@ -86,7 +86,7 @@
id: HydroponicsTrayMachineCircuitboard
icon: Objects/Misc/module.rsi/id_mod.png
result: HydroponicsTrayMachineCircuitboard
- completetime: 1000
+ completetime: 4
materials:
Steel: 100
Glass: 900
@@ -95,7 +95,7 @@
id: AutolatheMachineCircuitboard
icon: Objects/Misc/module.rsi/id_mod.png
result: AutolatheMachineCircuitboard
- completetime: 1000
+ completetime: 4
materials:
Steel: 100
Glass: 900
@@ -104,7 +104,7 @@
id: ProtolatheMachineCircuitboard
icon: Objects/Misc/module.rsi/id_mod.png
result: ProtolatheMachineCircuitboard
- completetime: 1000
+ completetime: 4
materials:
Steel: 100
Glass: 900
@@ -113,7 +113,7 @@
id: CircuitImprinterMachineCircuitboard
icon: Objects/Misc/module.rsi/id_mod.png
result: CircuitImprinterMachineCircuitboard
- completetime: 1000
+ completetime: 4
materials:
Steel: 100
Glass: 900
@@ -122,7 +122,7 @@
id: UniformPrinterMachineCircuitboard
icon: Objects/Misc/module.rsi/id_mod.png
result: UniformPrinterMachineCircuitboard
- completetime: 1000
+ completetime: 4
materials:
Steel: 100
Glass: 900
@@ -131,7 +131,7 @@
id: VaccinatorMachineCircuitboard
icon: Objects/Misc/module.rsi/id_mod.png
result: VaccinatorMachineCircuitboard
- completetime: 100
+ completetime: 4
materials:
Steel: 100
Glass: 900
@@ -141,7 +141,7 @@
id: DiagnoserMachineCircuitboard
icon: Objects/Misc/module.rsi/id_mod.png
result: DiagnoserMachineCircuitboard
- completetime: 100
+ completetime: 4
materials:
Steel: 100
Glass: 900
@@ -152,7 +152,7 @@
id: ReagentGrinderMachineCircuitboard
icon: Objects/Misc/module.rsi/id_mod.png
result: ReagentGrinderMachineCircuitboard
- completetime: 1000
+ completetime: 4
materials:
Steel: 100
Glass: 900
@@ -161,7 +161,7 @@
id: CrewMonitoringComputerCircuitboard
icon: Objects/Misc/module.rsi/id_mod.png
result: CrewMonitoringComputerCircuitboard
- completetime: 1000
+ completetime: 4
materials:
Steel: 100
Glass: 900
@@ -170,7 +170,7 @@
id: ShuttleConsoleCircuitboard
icon: Objects/Misc/module.rsi/id_mod.png
result: ShuttleConsoleCircuitboard
- completetime: 1000
+ completetime: 4
materials:
Steel: 100
Glass: 900
@@ -180,7 +180,7 @@
id: DawInstrumentMachineCircuitboard
icon: Objects/Misc/module.rsi/id_mod.png
result: DawInstrumentMachineCircuitboard
- completetime: 1000
+ completetime: 4
materials:
Steel: 100
Glass: 900
@@ -199,7 +199,7 @@
id: APCElectronics
icon: Objects/Misc/module.rsi/charger_APC.png
result: APCElectronics
- completetime: 500
+ completetime: 2
materials:
Steel: 50
Glass: 100
@@ -208,7 +208,7 @@
id: SubstationMachineCircuitboard
icon: Objects/Misc/module.rsi/id_mod.png
result: SubstationMachineCircuitboard
- completetime: 1000
+ completetime: 4
materials:
Steel: 50
Glass: 450
@@ -217,7 +217,7 @@
id: WallmountSubstationElectronics
icon: Objects/Misc/module.rsi/id_mod.png
result: WallmountSubstationElectronics
- completetime: 1000
+ completetime: 4
materials:
Steel: 50
Glass: 350
@@ -226,7 +226,7 @@
id: SMESMachineCircuitboard
icon: Objects/Misc/module.rsi/power_mod.png
result: SMESMachineCircuitboard
- completetime: 1000
+ completetime: 4
materials:
Steel: 100
Glass: 900
@@ -235,7 +235,7 @@
id: GeneratorPlasmaMachineCircuitboard
icon: Objects/Misc/module.rsi/id_mod.png
result: GeneratorPlasmaMachineCircuitboard
- completetime: 1000
+ completetime: 4
materials:
Steel: 50
Glass: 350
@@ -244,7 +244,7 @@
id: GeneratorUraniumMachineCircuitboard
icon: Objects/Misc/module.rsi/id_mod.png
result: GeneratorUraniumMachineCircuitboard
- completetime: 1000
+ completetime: 4
materials:
Steel: 50
Glass: 350
@@ -253,7 +253,7 @@
id: WallmountGeneratorElectronics
icon: Objects/Misc/module.rsi/id_mod.png
result: WallmountGeneratorElectronics
- completetime: 1000
+ completetime: 4
materials:
Steel: 50
Glass: 350
@@ -262,7 +262,7 @@
id: WallmountGeneratorAPUElectronics
icon: Objects/Misc/module.rsi/id_mod.png
result: WallmountGeneratorAPUElectronics
- completetime: 1000
+ completetime: 4
materials:
Steel: 50
Glass: 350
@@ -271,7 +271,7 @@
id: SolarControlComputerCircuitboard
icon: Objects/Misc/module.rsi/id_mod.png
result: SolarControlComputerCircuitboard
- completetime: 1000
+ completetime: 4
materials:
Steel: 100
Glass: 900
diff --git a/Resources/Prototypes/Recipes/Lathes/janitorial.yml b/Resources/Prototypes/Recipes/Lathes/janitorial.yml
index b58750de19..3632811f06 100644
--- a/Resources/Prototypes/Recipes/Lathes/janitorial.yml
+++ b/Resources/Prototypes/Recipes/Lathes/janitorial.yml
@@ -1,10 +1,10 @@
- type: latheRecipe
id: MopItem
- icon:
+ icon:
sprite: Objects/Specific/Janitorial/mop.rsi
state: mop
result: MopItem
- completetime: 500
+ completetime: 2
materials:
Plastic: 100
@@ -12,7 +12,7 @@
id: MopBucket
icon: Objects/Specific/Janitorial/janitorial.rsi
result: MopBucket
- completetime: 500
+ completetime: 2
materials:
Steel: 100
Plastic: 100
@@ -23,7 +23,7 @@
sprite: Objects/Tools/bucket.rsi
state: icon
result: Bucket
- completetime: 500
+ completetime: 2
materials:
Steel: 100
@@ -31,7 +31,7 @@
id: WetFloorSign
icon: Objects/Specific/Janitorial/wet_floor_sign.rsi
result: WetFloorSign
- completetime: 500
+ completetime: 2
materials:
Plastic: 100
@@ -41,7 +41,7 @@
sprite: Objects/Specific/Janitorial/janitorial.rsi
state: cleaner
result: SprayBottle
- completetime: 500
+ completetime: 2
materials:
Plastic: 100
@@ -49,7 +49,7 @@
id: TrashBag
icon: Objects/Specific/Janitorial/trashbag.rsi
result: TrashBag
- completetime: 300
+ completetime: 1.2
materials:
Plastic: 100
@@ -57,7 +57,7 @@
id: LightReplacer
icon: Objects/Specific/Janitorial/light_replacer.rsi
result: LightReplacer
- completetime: 600
+ completetime: 2.4
materials:
Steel: 100
Glass: 1000
diff --git a/Resources/Prototypes/Recipes/Lathes/medical.yml b/Resources/Prototypes/Recipes/Lathes/medical.yml
index 01673908af..84e7761cde 100644
--- a/Resources/Prototypes/Recipes/Lathes/medical.yml
+++ b/Resources/Prototypes/Recipes/Lathes/medical.yml
@@ -2,7 +2,7 @@
id: Scalpel
icon: Objects/Specific/Medical/Surgery/scalpel.rsi/scalpel.png
result: Scalpel
- completetime: 500
+ completetime: 2
materials:
Steel: 200
@@ -10,7 +10,7 @@
id: Retractor
icon: Objects/Specific/Medical/Surgery/scissors.rsi/retractor.png
result: Scalpel
- completetime: 500
+ completetime: 2
materials:
Steel: 200
@@ -18,7 +18,7 @@
id: Cautery
icon: Objects/Specific/Medical/Surgery/cautery.rsi/cautery.png
result: Cautery
- completetime: 500
+ completetime: 2
materials:
Steel: 200
@@ -26,7 +26,7 @@
id: Drill
icon: Objects/Specific/Medical/Surgery/drill.rsi/drill.png
result: Drill
- completetime: 500
+ completetime: 2
materials:
Steel: 200
Plastic: 100
@@ -35,7 +35,7 @@
id: Saw
icon: Objects/Specific/Medical/Surgery/saw.rsi/saw.png
result: Saw
- completetime: 500
+ completetime: 2
materials:
Steel: 200
@@ -43,7 +43,7 @@
id: Hemostat
icon: Objects/Specific/Medical/Surgery/scissors.rsi/hemostat.png
result: Hemostat
- completetime: 500
+ completetime: 2
materials:
Steel: 200
@@ -51,7 +51,7 @@
id: BodyBag_Folded
icon: Objects/Specific/Medical/Morgue/bodybags.rsi/bag_folded.png
result: BodyBag_Folded
- completetime: 300
+ completetime: 1.2
materials:
Plastic: 200
@@ -59,7 +59,7 @@
id: HandheldCrewMonitor
icon: Objects/Specific/Medical/handheldcrewmonitor.rsi/icon.png
result: HandheldCrewMonitor
- completetime: 5000
+ completetime: 2
materials:
Glass: 1200
Steel: 1000
@@ -69,7 +69,7 @@
id: HandheldHealthAnalyzer
icon: Objects/Specific/Medical/healthanalyzer.rsi/icon.png
result: HandheldHealthAnalyzer
- completetime: 1000
+ completetime: 4
materials:
Glass: 500
Steel: 500
diff --git a/Resources/Prototypes/Recipes/Lathes/misc.yml b/Resources/Prototypes/Recipes/Lathes/misc.yml
index 3601fb520f..6320e4d114 100644
--- a/Resources/Prototypes/Recipes/Lathes/misc.yml
+++ b/Resources/Prototypes/Recipes/Lathes/misc.yml
@@ -2,7 +2,7 @@
id: LightTube
icon: Objects/Power/light_tube.rsi/normal.png
result: LightTube
- completetime: 500
+ completetime: 2
materials:
Steel: 50
Glass: 50
@@ -11,7 +11,7 @@
id: LightBulb
icon: Objects/Power/light_bulb.rsi/normal.png
result: LightBulb
- completetime: 500
+ completetime: 2
materials:
Steel: 50
Glass: 50
@@ -20,7 +20,7 @@
id: PowerCellSmallHigh
icon: Objects/Power/PowerCells/power_cell_small_hi.rsi
result: PowerCellSmallHigh
- completetime: 500
+ completetime: 2
materials:
Steel: 100
Glass: 100
@@ -29,7 +29,7 @@
id: GlowstickRed
icon: Objects/Misc/glowstick.rsi
result: GlowstickRed
- completetime: 500
+ completetime: 2
materials:
Plastic: 50
@@ -37,7 +37,7 @@
id: Flare
icon: Objects/Misc/flare.rsi
result: Flare
- completetime: 500
+ completetime: 2
materials:
Plastic: 50
@@ -47,7 +47,7 @@
sprite: Objects/Tools/flashlight.rsi
state: flashlight
result: FlashlightLantern
- completetime: 500
+ completetime: 2
materials:
Steel: 100
Glass: 100
@@ -59,7 +59,7 @@
sprite: Objects/Misc/fire_extinguisher.rsi
state: fire_extinguisher_closed
result: FireExtinguisher
- completetime: 500
+ completetime: 2
materials:
Steel: 200
@@ -67,7 +67,7 @@
id: Matchbox
icon: Objects/Tools/matches.rsi
result: Matchbox
- completetime: 10
+ completetime: 1
materials:
Wood: 100
@@ -77,7 +77,7 @@
sprite: Mobs/Silicon/drone.rsi
state: shell
result: Drone
- completetime: 1500
+ completetime: 6
materials:
Steel: 500
Glass: 500
@@ -89,7 +89,7 @@
sprite: Objects/Fun/Instruments/h_synthesizer.rsi
state: icon
result: SynthesizerInstrument
- completetime: 1000
+ completetime: 4
materials:
Steel: 300
Plastic: 300
diff --git a/Resources/Prototypes/Recipes/Lathes/security.yml b/Resources/Prototypes/Recipes/Lathes/security.yml
index 00f93dc309..cbfd33dab1 100644
--- a/Resources/Prototypes/Recipes/Lathes/security.yml
+++ b/Resources/Prototypes/Recipes/Lathes/security.yml
@@ -4,7 +4,7 @@
sprite: Objects/Misc/handcuffs.rsi
state: handcuff
result: Handcuffs
- completetime: 500
+ completetime: 2
materials:
Steel: 300
@@ -14,7 +14,7 @@
sprite: Objects/Weapons/Melee/stunbaton.rsi
state: stunbaton_off
result: Stunbaton
- completetime: 500
+ completetime: 2
materials:
Steel: 300
Plastic: 300
@@ -25,7 +25,7 @@
sprite: Objects/Weapons/Melee/flash.rsi
state: flash
result: Flash
- completetime: 500
+ completetime: 2
materials:
Glass: 100
Plastic: 200
@@ -37,62 +37,62 @@
sprite: Objects/Weapons/Guns/Ammunition/Casings/shotgun_shell_beanbag.rsi
state: base
result: ShellShotgunBeanbag
- completetime: 500
+ completetime: 2
materials:
Plastic: 15
Steel: 10
-
+
- type: latheRecipe
id: CartridgePistolRubber
icon:
sprite: Objects/Weapons/Guns/Ammunition/Casings/ammo_casing.rsi
state: base
result: CartridgePistolRubber
- completetime: 500
+ completetime: 2
materials:
Plastic: 5
Steel: 5
-
+
- type: latheRecipe
id: CartridgeMagnumRubber
icon:
sprite: Objects/Weapons/Guns/Ammunition/Casings/ammo_casing.rsi
state: base
result: CartridgeMagnumRubber
- completetime: 500
+ completetime: 2
materials:
Plastic: 5
Steel: 5
-
+
- type: latheRecipe
id: CartridgeClRifleRubber
icon:
sprite: Objects/Weapons/Guns/Ammunition/Casings/ammo_casing.rsi
state: base
result: CartridgeClRifleRubber
- completetime: 500
+ completetime: 2
materials:
Plastic: 10
Steel: 5
-
+
- type: latheRecipe
id: CartridgeLRifleRubber
icon:
sprite: Objects/Weapons/Guns/Ammunition/Casings/ammo_casing.rsi
state: base
result: CartridgeLRifleRubber
- completetime: 500
+ completetime: 2
materials:
Plastic: 10
Steel: 5
-
+
- type: latheRecipe
id: CartridgeSRifleRubber
icon:
sprite: Objects/Weapons/Guns/Ammunition/Casings/ammo_casing.rsi
state: base
result: CartridgeSRifleRubber
- completetime: 500
+ completetime: 2
materials:
Plastic: 10
Steel: 5
@@ -103,7 +103,7 @@
sprite: Objects/Weapons/Guns/Ammunition/Casings/ammo_casing.rsi
state: base
result: CartridgePistol
- completetime: 500
+ completetime: 2
materials:
Steel: 10
@@ -113,7 +113,7 @@
sprite: Objects/Weapons/Guns/Ammunition/Casings/shotgun_shell.rsi
state: base
result: ShellShotgun
- completetime: 500
+ completetime: 2
materials:
Steel: 20
@@ -123,7 +123,7 @@
sprite: Objects/Weapons/Guns/Ammunition/Casings/ammo_casing.rsi
state: base
result: CartridgeMagnum
- completetime: 500
+ completetime: 2
materials:
Steel: 20
@@ -133,6 +133,6 @@
sprite: Objects/Weapons/Guns/Ammunition/Casings/ammo_casing.rsi
state: base
result: CartridgeLRifle
- completetime: 500
+ completetime: 2
materials:
Steel: 30
diff --git a/Resources/Prototypes/Recipes/Lathes/sheet.yml b/Resources/Prototypes/Recipes/Lathes/sheet.yml
index 5670e0f6c1..4cea46e015 100644
--- a/Resources/Prototypes/Recipes/Lathes/sheet.yml
+++ b/Resources/Prototypes/Recipes/Lathes/sheet.yml
@@ -4,7 +4,7 @@
sprite: Objects/Materials/Sheets/metal.rsi
state: steel
result: SheetSteel1
- completetime: 500
+ completetime: 2
materials:
Steel: 100
@@ -14,7 +14,7 @@
sprite: Objects/Materials/Sheets/glass.rsi
state: glass
result: SheetGlass1
- completetime: 500
+ completetime: 2
materials:
Glass: 100
@@ -24,7 +24,7 @@
sprite: Objects/Materials/Sheets/glass.rsi
state: rglass
result: SheetRGlass1
- completetime: 500
+ completetime: 2
materials:
Glass: 100
Steel: 50
@@ -35,6 +35,6 @@
sprite: Objects/Materials/Sheets/other.rsi
state: plastic
result: SheetPlastic1
- completetime: 500
+ completetime: 2
materials:
Plastic: 100
diff --git a/Resources/Prototypes/Recipes/Lathes/tools.yml b/Resources/Prototypes/Recipes/Lathes/tools.yml
index 9a7e4b1866..2c91e78347 100644
--- a/Resources/Prototypes/Recipes/Lathes/tools.yml
+++ b/Resources/Prototypes/Recipes/Lathes/tools.yml
@@ -2,7 +2,7 @@
id: Wirecutter
icon: Objects/Tools/wirecutters.rsi/cutters-map.png
result: Wirecutter
- completetime: 500
+ completetime: 2
materials:
Steel: 200
Plastic: 50
@@ -13,7 +13,7 @@
sprite: Objects/Tools/screwdriver.rsi
state: screwdriver-map
result: Screwdriver
- completetime: 500
+ completetime: 2
materials:
Steel: 200
Plastic: 50
@@ -24,7 +24,7 @@
sprite: /Textures/Objects/Tools/welder.rsi
state: icon
result: Welder
- completetime: 500
+ completetime: 2
materials:
Steel: 400
@@ -32,7 +32,7 @@
id: Wrench
icon: Objects/Tools/wrench.rsi/icon.png
result: Wrench
- completetime: 500
+ completetime: 2
materials:
Steel: 200
@@ -41,7 +41,7 @@
name: LV cable
icon: /Textures/Objects/Tools/cable-coils.rsi/coillv-30.png
result: CableApcStack1
- completetime: 500
+ completetime: 2
materials:
Steel: 100
@@ -50,7 +50,7 @@
name: MV cable coil
icon: /Textures/Objects/Tools/cable-coils.rsi/coilmv-30.png
result: CableMVStack1
- completetime: 500
+ completetime: 2
materials:
Steel: 150
@@ -59,7 +59,7 @@
name: HV cable coil
icon: /Textures/Objects/Tools/cable-coils.rsi/coilhv-30.png
result: CableHVStack1
- completetime: 500
+ completetime: 2
materials:
Steel: 200
@@ -67,7 +67,7 @@
id: Crowbar
icon: Objects/Tools/crowbar.rsi/icon.png
result: Crowbar
- completetime: 500
+ completetime: 2
materials:
Steel: 200
@@ -75,7 +75,7 @@
id: Pickaxe
icon: Objects/Weapons/Melee/pickaxe.rsi
result: Pickaxe
- completetime: 500
+ completetime: 2
materials:
Steel: 200
Wood: 100
@@ -86,7 +86,7 @@
sprite: Objects/Tools/shovel.rsi
state: icon
result: Shovel
- completetime: 500
+ completetime: 2
materials:
Steel: 200
Wood: 100
@@ -97,7 +97,7 @@
sprite: Objects/Tools/multitool.rsi
state: icon
result: Multitool
- completetime: 500
+ completetime: 2
materials:
Steel: 200
Plastic: 200
@@ -108,7 +108,7 @@
sprite: Objects/Tools/drill.rsi
state: drill_screw
result: PowerDrill
- completetime: 500
+ completetime: 2
materials:
Steel: 600
Plastic: 200
@@ -119,7 +119,7 @@
sprite: Objects/Tools/rcd.rsi
state: icon
result: RCD
- completetime: 1000
+ completetime: 4
materials:
Steel: 1000
Plastic: 300
@@ -130,7 +130,7 @@
sprite: Objects/Tools/rcd.rsi
state: ammo
result: RCDAmmo
- completetime: 600
+ completetime: 2.4
materials:
Steel: 500
Plastic: 250
@@ -139,7 +139,7 @@
id: HandheldGPSBasic
icon: Objects/Devices/gps.rsi/icon.png
result: HandheldGPSBasic
- completetime: 2000
+ completetime: 2
materials:
Steel: 800
Glass: 300
diff --git a/Resources/Textures/Objects/Materials/materials.rsi/liggerhide.png b/Resources/Textures/Objects/Materials/materials.rsi/liggerhide.png
deleted file mode 100644
index 061a89dbad..0000000000
Binary files a/Resources/Textures/Objects/Materials/materials.rsi/liggerhide.png and /dev/null differ
diff --git a/Resources/Textures/Objects/Materials/materials.rsi/meta.json b/Resources/Textures/Objects/Materials/materials.rsi/meta.json
index 30ed4cee60..354aa4c9b0 100644
--- a/Resources/Textures/Objects/Materials/materials.rsi/meta.json
+++ b/Resources/Textures/Objects/Materials/materials.rsi/meta.json
@@ -90,9 +90,6 @@
{
"name": "leather_3"
},
- {
- "name": "liggerhide"
- },
{
"name": "monkeyhide"
},
diff --git a/Resources/Textures/Structures/Machines/autolathe.rsi/building_unlit.png b/Resources/Textures/Structures/Machines/autolathe.rsi/building_unlit.png
deleted file mode 100644
index 1930e8707d..0000000000
Binary files a/Resources/Textures/Structures/Machines/autolathe.rsi/building_unlit.png and /dev/null differ
diff --git a/Resources/Textures/Structures/Machines/autolathe.rsi/inserting.png b/Resources/Textures/Structures/Machines/autolathe.rsi/inserting.png
new file mode 100644
index 0000000000..9f2801ace4
Binary files /dev/null and b/Resources/Textures/Structures/Machines/autolathe.rsi/inserting.png differ
diff --git a/Resources/Textures/Structures/Machines/autolathe.rsi/inserting_glass.png b/Resources/Textures/Structures/Machines/autolathe.rsi/inserting_glass.png
deleted file mode 100644
index 907864a7cb..0000000000
Binary files a/Resources/Textures/Structures/Machines/autolathe.rsi/inserting_glass.png and /dev/null differ
diff --git a/Resources/Textures/Structures/Machines/autolathe.rsi/inserting_gold.png b/Resources/Textures/Structures/Machines/autolathe.rsi/inserting_gold.png
deleted file mode 100644
index d5d07bfb4f..0000000000
Binary files a/Resources/Textures/Structures/Machines/autolathe.rsi/inserting_gold.png and /dev/null differ
diff --git a/Resources/Textures/Structures/Machines/autolathe.rsi/inserting_metal.png b/Resources/Textures/Structures/Machines/autolathe.rsi/inserting_metal.png
deleted file mode 100644
index ccee553393..0000000000
Binary files a/Resources/Textures/Structures/Machines/autolathe.rsi/inserting_metal.png and /dev/null differ
diff --git a/Resources/Textures/Structures/Machines/autolathe.rsi/inserting_phoron.png b/Resources/Textures/Structures/Machines/autolathe.rsi/inserting_phoron.png
deleted file mode 100644
index 9b05fcf763..0000000000
Binary files a/Resources/Textures/Structures/Machines/autolathe.rsi/inserting_phoron.png and /dev/null differ
diff --git a/Resources/Textures/Structures/Machines/autolathe.rsi/inserting_plasma.png b/Resources/Textures/Structures/Machines/autolathe.rsi/inserting_plasma.png
deleted file mode 100644
index ac63a5293c..0000000000
Binary files a/Resources/Textures/Structures/Machines/autolathe.rsi/inserting_plasma.png and /dev/null differ
diff --git a/Resources/Textures/Structures/Machines/autolathe.rsi/inserting_plastic.png b/Resources/Textures/Structures/Machines/autolathe.rsi/inserting_plastic.png
deleted file mode 100644
index c1ebffb3d9..0000000000
Binary files a/Resources/Textures/Structures/Machines/autolathe.rsi/inserting_plastic.png and /dev/null differ
diff --git a/Resources/Textures/Structures/Machines/autolathe.rsi/inserting_unlit.png b/Resources/Textures/Structures/Machines/autolathe.rsi/inserting_unlit.png
deleted file mode 100644
index 87c876ff29..0000000000
Binary files a/Resources/Textures/Structures/Machines/autolathe.rsi/inserting_unlit.png and /dev/null differ
diff --git a/Resources/Textures/Structures/Machines/autolathe.rsi/meta.json b/Resources/Textures/Structures/Machines/autolathe.rsi/meta.json
index efa929279e..b53c89c7a6 100644
--- a/Resources/Textures/Structures/Machines/autolathe.rsi/meta.json
+++ b/Resources/Textures/Structures/Machines/autolathe.rsi/meta.json
@@ -33,124 +33,17 @@
]
},
{
- "name": "building_unlit",
+ "name": "inserting",
"delays": [
[
- 0.5,
- 0.5,
- 0.5,
- 0.5,
- 0.5,
- 0.5,
- 0.5,
- 0.5,
- 0.5
- ]
- ]
- },
- {
- "name": "inserting_unlit",
- "delays": [
- [
- 0.5,
- 0.5,
- 0.5,
- 0.5,
- 0.5,
- 0.5,
- 0.5,
- 0.5,
- 0.5
- ]
- ]
- },
- {
- "name": "inserting_glass",
- "delays": [
- [
- 0.5,
- 0.5,
- 0.5,
- 0.5,
- 0.5,
- 0.5,
- 0.5,
- 0.5
- ]
- ]
- },
- {
- "name": "inserting_gold",
- "delays": [
- [
- 0.5,
- 0.5,
- 0.5,
- 0.5,
- 0.5,
- 0.5,
- 0.5,
- 0.5
- ]
- ]
- },
- {
- "name": "inserting_metal",
- "delays": [
- [
- 0.5,
- 0.5,
- 0.5,
- 0.5,
- 0.5,
- 0.5,
- 0.5,
- 0.5
- ]
- ]
- },
- {
- "name": "inserting_phoron",
- "delays": [
- [
- 0.5,
- 0.5,
- 0.5,
- 0.5,
- 0.5,
- 0.5,
- 0.5,
- 0.5
- ]
- ]
- },
- {
- "name": "inserting_plasma",
- "delays": [
- [
- 0.5,
- 0.5,
- 0.5,
- 0.5,
- 0.5,
- 0.5,
- 0.5,
- 0.5
- ]
- ]
- },
- {
- "name": "inserting_plastic",
- "delays": [
- [
- 0.5,
- 0.5,
- 0.5,
- 0.5,
- 0.5,
- 0.5,
- 0.5,
- 0.5
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
]
]
}
diff --git a/Resources/Textures/Structures/Machines/circuit_imprinter.rsi/building_unlit.png b/Resources/Textures/Structures/Machines/circuit_imprinter.rsi/building_unlit.png
deleted file mode 100644
index 5eec827ab1..0000000000
Binary files a/Resources/Textures/Structures/Machines/circuit_imprinter.rsi/building_unlit.png and /dev/null differ
diff --git a/Resources/Textures/Structures/Machines/circuit_imprinter.rsi/meta.json b/Resources/Textures/Structures/Machines/circuit_imprinter.rsi/meta.json
index ff792f6c41..9b989ca421 100644
--- a/Resources/Textures/Structures/Machines/circuit_imprinter.rsi/meta.json
+++ b/Resources/Textures/Structures/Machines/circuit_imprinter.rsi/meta.json
@@ -20,68 +20,33 @@
"name": "building",
"delays": [
[
- 0.08,
- 0.08,
- 0.08,
- 0.08,
- 0.08,
- 0.08,
- 0.08,
- 0.08,
- 0.08,
- 0.08,
- 0.08,
- 0.08,
- 0.08,
- 0.08,
- 0.08,
- 0.08,
- 0.08,
- 0.08,
- 0.08,
- 0.08,
- 0.08,
- 0.08,
- 0.08,
- 0.08,
- 0.08
+ 0.16,
+ 0.16,
+ 0.16,
+ 0.16,
+ 0.16,
+ 0.16,
+ 0.16,
+ 0.16,
+ 0.16,
+ 0.16,
+ 0.16,
+ 0.16,
+ 0.16,
+ 0.16,
+ 0.16,
+ 0.16,
+ 0.16,
+ 0.16,
+ 0.16,
+ 0.16,
+ 0.16,
+ 0.16,
+ 0.16,
+ 0.16,
+ 0.18
]
]
- },
- {
- "name": "building_unlit",
- "delays": [
- [
- 0.08,
- 0.08,
- 0.08,
- 0.08,
- 0.08,
- 0.08,
- 0.08,
- 0.08,
- 0.08,
- 0.08,
- 0.08,
- 0.08,
- 0.08,
- 0.08,
- 0.08,
- 0.08,
- 0.08,
- 0.08,
- 0.08,
- 0.08,
- 0.08,
- 0.08,
- 0.08,
- 0.08,
- 0.08
- ]
- ]
- },
- {
- "name": "inserting_unlit"
}
]
}
diff --git a/Resources/Textures/Structures/Machines/protolathe.rsi/building_unlit.png b/Resources/Textures/Structures/Machines/protolathe.rsi/building_unlit.png
deleted file mode 100644
index f89b32d447..0000000000
Binary files a/Resources/Textures/Structures/Machines/protolathe.rsi/building_unlit.png and /dev/null differ
diff --git a/Resources/Textures/Structures/Machines/circuit_imprinter.rsi/inserting_unlit.png b/Resources/Textures/Structures/Machines/protolathe.rsi/inserting.png
similarity index 50%
rename from Resources/Textures/Structures/Machines/circuit_imprinter.rsi/inserting_unlit.png
rename to Resources/Textures/Structures/Machines/protolathe.rsi/inserting.png
index 9a9e240fbc..3f3c09debf 100644
Binary files a/Resources/Textures/Structures/Machines/circuit_imprinter.rsi/inserting_unlit.png and b/Resources/Textures/Structures/Machines/protolathe.rsi/inserting.png differ
diff --git a/Resources/Textures/Structures/Machines/protolathe.rsi/inserting_adamantine.png b/Resources/Textures/Structures/Machines/protolathe.rsi/inserting_adamantine.png
deleted file mode 100644
index b4baebf24c..0000000000
Binary files a/Resources/Textures/Structures/Machines/protolathe.rsi/inserting_adamantine.png and /dev/null differ
diff --git a/Resources/Textures/Structures/Machines/protolathe.rsi/inserting_bananium.png b/Resources/Textures/Structures/Machines/protolathe.rsi/inserting_bananium.png
deleted file mode 100644
index 2e639d0996..0000000000
Binary files a/Resources/Textures/Structures/Machines/protolathe.rsi/inserting_bananium.png and /dev/null differ
diff --git a/Resources/Textures/Structures/Machines/protolathe.rsi/inserting_diamond.png b/Resources/Textures/Structures/Machines/protolathe.rsi/inserting_diamond.png
deleted file mode 100644
index bb2bf4a3f0..0000000000
Binary files a/Resources/Textures/Structures/Machines/protolathe.rsi/inserting_diamond.png and /dev/null differ
diff --git a/Resources/Textures/Structures/Machines/protolathe.rsi/inserting_glass.png b/Resources/Textures/Structures/Machines/protolathe.rsi/inserting_glass.png
deleted file mode 100644
index c6970276e8..0000000000
Binary files a/Resources/Textures/Structures/Machines/protolathe.rsi/inserting_glass.png and /dev/null differ
diff --git a/Resources/Textures/Structures/Machines/protolathe.rsi/inserting_gold.png b/Resources/Textures/Structures/Machines/protolathe.rsi/inserting_gold.png
deleted file mode 100644
index 5b891b54d1..0000000000
Binary files a/Resources/Textures/Structures/Machines/protolathe.rsi/inserting_gold.png and /dev/null differ
diff --git a/Resources/Textures/Structures/Machines/protolathe.rsi/inserting_metal.png b/Resources/Textures/Structures/Machines/protolathe.rsi/inserting_metal.png
deleted file mode 100644
index 0c2fb3b7ee..0000000000
Binary files a/Resources/Textures/Structures/Machines/protolathe.rsi/inserting_metal.png and /dev/null differ
diff --git a/Resources/Textures/Structures/Machines/protolathe.rsi/inserting_phoron.png b/Resources/Textures/Structures/Machines/protolathe.rsi/inserting_phoron.png
deleted file mode 100644
index 8c3c2a995d..0000000000
Binary files a/Resources/Textures/Structures/Machines/protolathe.rsi/inserting_phoron.png and /dev/null differ
diff --git a/Resources/Textures/Structures/Machines/protolathe.rsi/inserting_plasma.png b/Resources/Textures/Structures/Machines/protolathe.rsi/inserting_plasma.png
deleted file mode 100644
index b40410b614..0000000000
Binary files a/Resources/Textures/Structures/Machines/protolathe.rsi/inserting_plasma.png and /dev/null differ
diff --git a/Resources/Textures/Structures/Machines/protolathe.rsi/inserting_plastic.png b/Resources/Textures/Structures/Machines/protolathe.rsi/inserting_plastic.png
deleted file mode 100644
index b6d71d9fed..0000000000
Binary files a/Resources/Textures/Structures/Machines/protolathe.rsi/inserting_plastic.png and /dev/null differ
diff --git a/Resources/Textures/Structures/Machines/protolathe.rsi/inserting_silver.png b/Resources/Textures/Structures/Machines/protolathe.rsi/inserting_silver.png
deleted file mode 100644
index 41dea825dc..0000000000
Binary files a/Resources/Textures/Structures/Machines/protolathe.rsi/inserting_silver.png and /dev/null differ
diff --git a/Resources/Textures/Structures/Machines/protolathe.rsi/inserting_unlit.png b/Resources/Textures/Structures/Machines/protolathe.rsi/inserting_unlit.png
deleted file mode 100644
index cce8a4f5af..0000000000
Binary files a/Resources/Textures/Structures/Machines/protolathe.rsi/inserting_unlit.png and /dev/null differ
diff --git a/Resources/Textures/Structures/Machines/protolathe.rsi/inserting_uranium.png b/Resources/Textures/Structures/Machines/protolathe.rsi/inserting_uranium.png
deleted file mode 100644
index 3ae789356d..0000000000
Binary files a/Resources/Textures/Structures/Machines/protolathe.rsi/inserting_uranium.png and /dev/null differ
diff --git a/Resources/Textures/Structures/Machines/protolathe.rsi/meta.json b/Resources/Textures/Structures/Machines/protolathe.rsi/meta.json
index 35c6d0d38a..17832603ef 100644
--- a/Resources/Textures/Structures/Machines/protolathe.rsi/meta.json
+++ b/Resources/Textures/Structures/Machines/protolathe.rsi/meta.json
@@ -37,203 +37,17 @@
]
},
{
- "name": "building_unlit",
+ "name": "inserting",
"delays": [
[
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8
- ]
- ]
- },
- {
- "name": "inserting_unlit",
- "delays": [
- [
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8
- ]
- ]
- },
- {
- "name": "inserting_glass",
- "delays": [
- [
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8
- ]
- ]
- },
- {
- "name": "inserting_adamantine",
- "delays": [
- [
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8
- ]
- ]
- },
- {
- "name": "inserting_bananium",
- "delays": [
- [
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8
- ]
- ]
- },
- {
- "name": "inserting_diamond",
- "delays": [
- [
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8
- ]
- ]
- },
- {
- "name": "inserting_silver",
- "delays": [
- [
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8
- ]
- ]
- },
- {
- "name": "inserting_uranium",
- "delays": [
- [
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8
- ]
- ]
- },
- {
- "name": "inserting_gold",
- "delays": [
- [
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8
- ]
- ]
- },
- {
- "name": "inserting_metal",
- "delays": [
- [
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8
- ]
- ]
- },
- {
- "name": "inserting_phoron",
- "delays": [
- [
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8
- ]
- ]
- },
- {
- "name": "inserting_plasma",
- "delays": [
- [
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8
- ]
- ]
- },
- {
- "name": "inserting_plastic",
- "delays": [
- [
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8,
- 0.8
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
]
]
}
diff --git a/Resources/Textures/Structures/Machines/security_techfab.rsi/inserting.png b/Resources/Textures/Structures/Machines/security_techfab.rsi/inserting.png
new file mode 100644
index 0000000000..3f3c09debf
Binary files /dev/null and b/Resources/Textures/Structures/Machines/security_techfab.rsi/inserting.png differ
diff --git a/Resources/Textures/Structures/Machines/security_techfab.rsi/meta.json b/Resources/Textures/Structures/Machines/security_techfab.rsi/meta.json
index 56cd60cf57..c95ca36111 100644
--- a/Resources/Textures/Structures/Machines/security_techfab.rsi/meta.json
+++ b/Resources/Textures/Structures/Machines/security_techfab.rsi/meta.json
@@ -15,6 +15,21 @@
},
{
"name": "unlit"
+ },
+ {
+ "name": "inserting",
+ "delays": [
+ [
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ]
+ ]
}
]
}
diff --git a/Resources/Textures/Structures/Machines/uniform_printer.rsi/meta.json b/Resources/Textures/Structures/Machines/uniform_printer.rsi/meta.json
index 78abd9d924..102fdffd50 100644
--- a/Resources/Textures/Structures/Machines/uniform_printer.rsi/meta.json
+++ b/Resources/Textures/Structures/Machines/uniform_printer.rsi/meta.json
@@ -11,12 +11,6 @@
"name": "icon",
"directions": 4
},
- {
- "name": "panel"
- },
- {
- "name": "unlit"
- },
{
"name": "building",
"directions": 4,
diff --git a/Resources/Textures/Structures/Machines/uniform_printer.rsi/panel.png b/Resources/Textures/Structures/Machines/uniform_printer.rsi/panel.png
deleted file mode 100644
index 4bc9f78502..0000000000
Binary files a/Resources/Textures/Structures/Machines/uniform_printer.rsi/panel.png and /dev/null differ
diff --git a/Resources/Textures/Structures/Machines/uniform_printer.rsi/unlit.png b/Resources/Textures/Structures/Machines/uniform_printer.rsi/unlit.png
deleted file mode 100644
index a375e8f32e..0000000000
Binary files a/Resources/Textures/Structures/Machines/uniform_printer.rsi/unlit.png and /dev/null differ