Partial lathe ECS, fix cursed lathe visualizer, a bit more audiovisual feedback for lathes (#7238)

* Prototype that's mostly borked rather than completely borked

* ECS inserting mats

* Partial ECS mostly done, needs cleanup and visualizer

* Replace timers

* Power visualizes at least

* First ""working"" version

* Clean up all lathes

* Colors

* Fix animation timing

* Fixes greyscale, adds a bunch of colors

* Give every (used) material a color

* Made most lathes take long enough you can at least see there's some sort of animation

* Insertion feedback popup

* Sound for circuit printer and uniform printer

* Fix queueing, optimize update

* Remove mono crash

* cleanup

* Fix test failure

* Techfab inserting sprite

* Cleanup and commenting

* Fix bug in CanProduce check

* Fix UI resolves

* Mirror review stuff
This commit is contained in:
Rane
2022-04-17 03:34:14 -04:00
committed by GitHub
parent 5f9cb8271d
commit 93cdca4f82
70 changed files with 781 additions and 1183 deletions

View File

@@ -0,0 +1,15 @@
namespace Content.Client.Lathe;
/// <summary>
/// Holds the idle and running state for machines to control
/// playing animtions on the client.
/// </summary>
[RegisterComponent]
public sealed class LatheVisualsComponent : Component
{
[DataField("idleState", required: true)]
public string IdleState = default!;
[DataField("runningState", required: true)]
public string RunningState = default!;
}

View File

@@ -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<LatheVisualsComponent>
{
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
}

View File

@@ -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<AnimationPlayerComponent>(entity);
}
public override void OnChangeData(AppearanceComponent component)
{
base.OnChangeData(component);
var sprite = _entMan.GetComponent<ISpriteComponent>(component.Owner);
var animPlayer = _entMan.GetComponent<AnimationPlayerComponent>(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
}
}
}

View File

@@ -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<AnimationPlayerComponent>(entity);
}
public override void OnChangeData(AppearanceComponent component)
{
base.OnChangeData(component);
var sprite = _entMan.GetComponent<ISpriteComponent>(component.Owner);
var animPlayer = _entMan.GetComponent<AnimationPlayerComponent>(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
}
}
}

View File

@@ -1,7 +1,6 @@
using System.Threading; using System.Threading;
using Content.Server.Disease.Components; using Content.Server.Disease.Components;
using Content.Shared.Disease; using Content.Shared.Disease;
using Content.Shared.Disease.Components;
using Content.Shared.Interaction; using Content.Shared.Interaction;
using Content.Shared.Inventory; using Content.Shared.Inventory;
using Content.Shared.Examine; 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)); _popupSystem.PopupEntity(Loc.GetString("diagnoser-cant-use-swab", ("machine", uid), ("swab", args.Used)), uid, Filter.Entities(args.User));
return; 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; 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)); _popupSystem.PopupEntity(Loc.GetString("diagnoser-cant-use-swab", ("machine", uid), ("swab", args.Used)), uid, Filter.Entities(args.User));
return; 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<DiseaseMachineComponent>(uid); var machine = Comp<DiseaseMachineComponent>(uid);
machine.Disease = swab.Disease; machine.Disease = swab.Disease;
EntityManager.DeleteEntity(args.Used); EntityManager.DeleteEntity(args.Used);

View File

@@ -18,6 +18,7 @@ namespace Content.Server.Entry
"ClientEntitySpawner", "ClientEntitySpawner",
"CharacterInfo", "CharacterInfo",
"ItemCabinetVisuals", "ItemCabinetVisuals",
"LatheVisuals",
"DiseaseMachineVisuals", "DiseaseMachineVisuals",
"HandheldGPS", "HandheldGPS",
"ToggleableLightVisuals", "ToggleableLightVisuals",

View File

@@ -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.Server.UserInterface;
using Content.Shared.Interaction;
using Content.Shared.Lathe; using Content.Shared.Lathe;
using Content.Shared.Power;
using Content.Shared.Research.Prototypes; using Content.Shared.Research.Prototypes;
using Robust.Server.GameObjects; using Robust.Server.GameObjects;
using Robust.Server.Player; using Content.Shared.Sound;
namespace Content.Server.Lathe.Components namespace Content.Server.Lathe.Components
{ {
[RegisterComponent] [RegisterComponent]
public sealed class LatheComponent : SharedLatheComponent, IInteractUsing public sealed class LatheComponent : SharedLatheComponent
{ {
[Dependency] private readonly IEntityManager _entMan = default!; /// <summary>
/// How much volume in cm^3 each sheet of material adds
public const int VolumePerSheet = 100; /// </summary>
public int VolumePerSheet = 100;
/// <summary>
/// The lathe's construction queue
/// </summary>
[ViewVariables] [ViewVariables]
public Queue<LatheRecipePrototype> Queue { get; } = new(); public Queue<LatheRecipePrototype> Queue { get; } = new();
/// <summary>
/// The recipe the lathe is currently producing
/// </summary>
[ViewVariables] [ViewVariables]
public bool Producing { get; private set; } public LatheRecipePrototype? ProducingRecipe;
/// <summary>
private LatheState _state = LatheState.Base; /// How long the inserting animation will play
/// </summary>
private LatheState State
{
get => _state;
set => _state = value;
}
[ViewVariables] [ViewVariables]
private LatheRecipePrototype? _producingRecipe; public float InsertionTime = 0.79f; // 0.01 off for animation timing
/// <summary>
/// Update accumulator for the insertion time
/// </suummary>
public float InsertionAccumulator = 0f;
/// <summary>
/// Production accumulator for the production time.
/// </summary>
[ViewVariables] [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); /// <summary>
/// The sound that plays when the lathe is producing an item, if any
/// </summary>
[DataField("producingSound")]
public SoundSpecifier? ProducingSound;
[ViewVariables] private BoundUserInterface? UserInterface => Owner.GetUIOrNull(LatheUiKey.Key); /// <summmary>
/// The lathe's UI.
protected override void Initialize() /// </summary>
{ [ViewVariables] public BoundUserInterface? UserInterface;
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<MaterialStorageComponent>(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<TransformComponent>(Owner).Coordinates);
UserInterface?.SendMessage(new LatheStoppedProducingRecipeMessage());
State = LatheState.Base;
SetAppearance(LatheVisualState.Idle);
});
return true;
}
public void OpenUserInterface(IPlayerSession session)
{
UserInterface?.Open(session);
}
async Task<bool> 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<string> GetIdQueue()
{
var queue = new Queue<string>();
foreach (var recipePrototype in Queue)
{
queue.Enqueue(recipePrototype.ID);
}
return queue;
}
private enum LatheState : byte
{
Base,
Inserting,
Producing
}
} }
} }

View File

@@ -0,0 +1,9 @@
namespace Content.Server.Lathe.Components
{
/// <summary>
/// For EntityQuery to keep track of which lathes are inserting
/// <summary>
[RegisterComponent]
public sealed class LatheInsertingComponent : Component
{}
}

View File

@@ -0,0 +1,9 @@
namespace Content.Server.Lathe.Components
{
/// <summary>
/// For EntityQuery to keep track of which lathes are producing
/// <summary>
[RegisterComponent]
public sealed class LatheProducingComponent : Component
{}
}

View File

@@ -1,21 +1,286 @@
using Content.Server.Lathe.Components; 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 JetBrains.Annotations;
using Robust.Shared.GameObjects;
namespace Content.Server.Lathe namespace Content.Server.Lathe
{ {
[UsedImplicitly] [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<LatheComponent, InteractUsingEvent>(OnInteractUsing);
SubscribeLocalEvent<LatheComponent, ComponentInit>(OnComponentInit);
}
// These queues are to add/remove COMPONENTS to the lathes
private Queue<EntityUid> ProducingAddQueue = new();
private Queue<EntityUid> ProducingRemoveQueue = new();
private Queue<EntityUid> InsertingAddQueue = new();
private Queue<EntityUid> InsertingRemoveQueue = new();
public override void Update(float frameTime) public override void Update(float frameTime)
{ {
foreach (var comp in EntityManager.EntityQuery<LatheComponent>()) foreach (var uid in ProducingAddQueue)
EnsureComp<LatheProducingComponent>(uid);
ProducingAddQueue.Clear();
foreach (var uid in ProducingRemoveQueue)
RemComp<LatheProducingComponent>(uid);
ProducingRemoveQueue.Clear();
foreach (var uid in InsertingAddQueue)
EnsureComp<LatheInsertingComponent>(uid);
InsertingAddQueue.Clear();
foreach (var uid in InsertingRemoveQueue)
RemComp<LatheInsertingComponent>(uid);
InsertingRemoveQueue.Clear();
foreach (var (insertingComp, lathe) in EntityQuery<LatheInsertingComponent, LatheComponent>(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<LatheProducingComponent, LatheComponent>(false))
{
if (lathe.ProducingRecipe == null)
continue;
if (lathe.ProducingAccumulator < lathe.ProducingRecipe.CompleteTime.TotalSeconds)
{
lathe.ProducingAccumulator += frameTime;
continue;
}
lathe.ProducingAccumulator = 0;
FinishProducing(lathe.ProducingRecipe, lathe);
}
}
/// <summary>
/// Initialize the UI and appearance.
/// Appearance requires initialization or the layers break
/// </summary>
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<AppearanceComponent>(uid, out var appearance))
return;
appearance.SetData(LatheVisuals.IsInserting, false);
appearance.SetData(LatheVisuals.IsRunning, false);
}
/// <summary>
/// When someone tries to use an item on the lathe,
/// insert it if it's a stack and fits inside
/// </summary>
private void OnInteractUsing(EntityUid uid, LatheComponent component, InteractUsingEvent args)
{
if (!TryComp<MaterialStorageComponent>(uid, out var storage) || !TryComp<MaterialComponent>(args.Used, out var material))
return;
var multiplier = 1;
if (TryComp<StackComponent>(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);
}
/// <summary>
/// This handles the checks to start producing an item, and
/// starts up the sound and visuals
/// </summary>
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<LatheProducingComponent>(component.Owner))
return false;
if (TryComp<ApcPowerReceiverComponent>(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;
}
/// <summary>
/// After the production timer is up, this spawns the recipe and
/// either cleans up or continues to the next item in the queue
/// </summary>
private void FinishProducing(LatheRecipePrototype recipe, LatheComponent component)
{
component.ProducingRecipe = null;
EntityManager.SpawnEntity(recipe.Result, Comp<TransformComponent>(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);
}
/// <summary>
/// Sets the machine sprite to either play the running animation
/// or stop.
/// </summary>
private void UpdateRunningAppearance(EntityUid uid, bool isRunning)
{
if (!TryComp<AppearanceComponent>(uid, out var appearance))
return;
appearance.SetData(LatheVisuals.IsRunning, isRunning);
}
/// <summary>
/// Sets the machine sprite to play the inserting animation
/// and sets the color of the inserted mat if applicable
/// </summary>
private void UpdateInsertingAppearance(EntityUid uid, bool isInserting, Color? color = null)
{
if (!TryComp<AppearanceComponent>(uid, out var appearance))
return;
appearance.SetData(LatheVisuals.IsInserting, isInserting);
if (color != null)
appearance.SetData(LatheVisuals.InsertingColor, color);
}
/// <summary>
/// Handles all the button presses in the lathe UI
/// </summary>
private void UserInterfaceOnOnReceiveMessage(EntityUid uid, LatheComponent component, ServerBoundUserInterfaceMessage message)
{
if (TryComp<ApcPowerReceiverComponent>(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<LatheProducingComponent>(component.Owner) && component.Queue.Count > 0)
Produce(component, component.Queue.Dequeue());
break;
case LatheSyncRequestMessage _:
if (!HasComp<MaterialStorageComponent>(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;
}
}
/// <summary>
/// Gets all the prototypes in the lathe's construction queue
/// </summary>
private Queue<string> GetIdQueue(LatheComponent lathe)
{
var queue = new Queue<string>();
foreach (var recipePrototype in lathe.Queue)
{
queue.Enqueue(recipePrototype.ID);
}
return queue;
} }
} }
} }

View File

@@ -0,0 +1,94 @@
using Robust.Shared.Serialization;
namespace Content.Shared.Lathe;
/// <summary>
/// Sent to the server to sync material storage and the recipe queue.
/// </summary>
[Serializable, NetSerializable]
public sealed class LatheSyncRequestMessage : BoundUserInterfaceMessage
{
public LatheSyncRequestMessage()
{
}
}
/// <summary>
/// Sent to the server to sync the lathe's technology database with the research server.
/// </summary>
[Serializable, NetSerializable]
public sealed class LatheServerSyncMessage : BoundUserInterfaceMessage
{
public LatheServerSyncMessage()
{
}
}
/// <summary>
/// Sent to the server to open the ResearchClient UI.
/// </summary>
[Serializable, NetSerializable]
public sealed class LatheServerSelectionMessage : BoundUserInterfaceMessage
{
public LatheServerSelectionMessage()
{
}
}
/// <summary>
/// Sent to the client when the lathe is producing a recipe.
/// </summary>
[Serializable, NetSerializable]
public sealed class LatheProducingRecipeMessage : BoundUserInterfaceMessage
{
public readonly string ID;
public LatheProducingRecipeMessage(string id)
{
ID = id;
}
}
/// <summary>
/// Sent to the client when the lathe stopped/finished producing a recipe.
/// </summary>
[Serializable, NetSerializable]
public sealed class LatheStoppedProducingRecipeMessage : BoundUserInterfaceMessage
{
public LatheStoppedProducingRecipeMessage()
{
}
}
/// <summary>
/// Sent to the client to let it know about the recipe queue.
/// </summary>
[Serializable, NetSerializable]
public sealed class LatheFullQueueMessage : BoundUserInterfaceMessage
{
public readonly Queue<string> Recipes;
public LatheFullQueueMessage(Queue<string> recipes)
{
Recipes = recipes;
}
}
/// <summary>
/// Sent to the server when a client queues a new recipe.
/// </summary>
[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,
}

View File

@@ -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
}
}

View File

@@ -0,0 +1,17 @@
using Robust.Shared.Serialization;
namespace Content.Shared.Lathe
{
[Serializable, NetSerializable]
/// <summary>
/// Stores bools for if the machine is on
/// and if it's currently running and/or inserting.
/// Used for the visualizer
/// </summary>
public enum LatheVisuals : byte
{
IsRunning,
IsInserting,
InsertingColor
}
}

View File

@@ -1,11 +1,6 @@
using System;
using System.Collections.Generic;
using Content.Shared.Research.Prototypes; using Content.Shared.Research.Prototypes;
using Robust.Shared.GameObjects;
using Robust.Shared.GameStates; using Robust.Shared.GameStates;
using Robust.Shared.IoC;
using Robust.Shared.Prototypes; using Robust.Shared.Prototypes;
using Robust.Shared.Serialization;
namespace Content.Shared.Lathe namespace Content.Shared.Lathe
{ {
@@ -24,7 +19,7 @@ namespace Content.Shared.Lathe
foreach (var (material, amount) in recipe.RequiredMaterials) foreach (var (material, amount) in recipe.RequiredMaterials)
{ {
if (storage[material] <= (amount * quantity)) return false; if (storage[material] < (amount * quantity)) return false;
} }
return true; return true;
@@ -34,98 +29,5 @@ namespace Content.Shared.Lathe
{ {
return PrototypeManager.TryIndex(id, out LatheRecipePrototype? recipe) && CanProduce(recipe, quantity); return PrototypeManager.TryIndex(id, out LatheRecipePrototype? recipe) && CanProduce(recipe, quantity);
} }
/// <summary>
/// Sent to the server to sync material storage and the recipe queue.
/// </summary>
[Serializable, NetSerializable]
public sealed class LatheSyncRequestMessage : BoundUserInterfaceMessage
{
public LatheSyncRequestMessage()
{
}
}
/// <summary>
/// Sent to the server to sync the lathe's technology database with the research server.
/// </summary>
[Serializable, NetSerializable]
public sealed class LatheServerSyncMessage : BoundUserInterfaceMessage
{
public LatheServerSyncMessage()
{
}
}
/// <summary>
/// Sent to the server to open the ResearchClient UI.
/// </summary>
[Serializable, NetSerializable]
public sealed class LatheServerSelectionMessage : BoundUserInterfaceMessage
{
public LatheServerSelectionMessage()
{
}
}
/// <summary>
/// Sent to the client when the lathe is producing a recipe.
/// </summary>
[Serializable, NetSerializable]
public sealed class LatheProducingRecipeMessage : BoundUserInterfaceMessage
{
public readonly string ID;
public LatheProducingRecipeMessage(string id)
{
ID = id;
}
}
/// <summary>
/// Sent to the client when the lathe stopped/finished producing a recipe.
/// </summary>
[Serializable, NetSerializable]
public sealed class LatheStoppedProducingRecipeMessage : BoundUserInterfaceMessage
{
public LatheStoppedProducingRecipeMessage()
{
}
}
/// <summary>
/// Sent to the client to let it know about the recipe queue.
/// </summary>
[Serializable, NetSerializable]
public sealed class LatheFullQueueMessage : BoundUserInterfaceMessage
{
public readonly Queue<string> Recipes;
public LatheFullQueueMessage(Queue<string> recipes)
{
Recipes = recipes;
}
}
/// <summary>
/// Sent to the server when a client queues a new recipe.
/// </summary>
[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,
}
} }
} }

View File

@@ -1,14 +1,9 @@
using System;
using System.Collections.Generic;
using Content.Shared.Materials; using Content.Shared.Materials;
using Robust.Shared.IoC;
using Robust.Shared.Prototypes; using Robust.Shared.Prototypes;
using Robust.Shared.Serialization; 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;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Dictionary; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Dictionary;
using Robust.Shared.Utility; using Robust.Shared.Utility;
using Robust.Shared.ViewVariables;
namespace Content.Shared.Research.Prototypes namespace Content.Shared.Research.Prototypes
{ {
@@ -32,7 +27,7 @@ namespace Content.Shared.Research.Prototypes
private string _result = string.Empty; private string _result = string.Empty;
[DataField("completetime")] [DataField("completetime")]
private int _completeTime = 2500; private TimeSpan _completeTime = TimeSpan.FromSeconds(5);
[DataField("materials", customTypeSerializer: typeof(PrototypeIdDictionarySerializer<int, MaterialPrototype>))] [DataField("materials", customTypeSerializer: typeof(PrototypeIdDictionarySerializer<int, MaterialPrototype>))]
private Dictionary<string, int> _requiredMaterials = new(); private Dictionary<string, int> _requiredMaterials = new();
@@ -102,6 +97,6 @@ namespace Content.Shared.Research.Prototypes
/// Might lower depending on the lathe's upgrade level. /// Might lower depending on the lathe's upgrade level.
/// </summary> /// </summary>
[ViewVariables] [ViewVariables]
public int CompleteTime => _completeTime; public TimeSpan CompleteTime => _completeTime;
} }
} }

Binary file not shown.

View File

@@ -1,3 +1,7 @@
diagnoser_printing.ogg taken from https://freesound.org/people/RobSp1derp1g/sounds/615419/ and edited 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 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

Binary file not shown.

View File

@@ -0,0 +1 @@
machine-insert-item = You insert {THE($item)} into {THE($machine)}.

View File

@@ -9,14 +9,18 @@
netsync: false netsync: false
layers: layers:
- state: icon - state: icon
map: ["enum.AutolatheVisualLayers.Base"] map: ["enum.LatheVisualLayers.IsRunning"]
- state: unlit - state: unlit
shader: unshaded shader: unshaded
map: ["enum.AutolatheVisualLayers.BaseUnlit"] map: ["enum.PowerDeviceVisualLayers.Powered"]
- state: building - state: inserting
map: ["enum.AutolatheVisualLayers.AnimationLayer"] map: ["enum.LatheVisualLayers.IsInserting"]
- state: panel - state: panel
map: ["enum.WiresVisualLayers.MaintenancePanel"] map: ["enum.WiresVisualLayers.MaintenancePanel"]
- type: Appearance
- type: LatheVisuals
idleState: icon
runningState: building
- type: Physics - type: Physics
bodyType: Static bodyType: Static
- type: Fixtures - type: Fixtures
@@ -66,10 +70,6 @@
- CableStack - CableStack
- HandheldGPSBasic - HandheldGPSBasic
- HandheldHealthAnalyzer - HandheldHealthAnalyzer
- type: Appearance
visuals:
- type: AutolatheVisualizer
- type: WiresVisualizer
- type: ActivatableUI - type: ActivatableUI
key: enum.LatheUiKey.Key key: enum.LatheUiKey.Key
- type: ActivatableUIRequiresPower - type: ActivatableUIRequiresPower
@@ -93,14 +93,18 @@
netsync: false netsync: false
layers: layers:
- state: icon - state: icon
map: ["enum.ProtolatheVisualLayers.Base"] map: ["enum.LatheVisualLayers.IsRunning"]
- state: unlit - state: unlit
shader: unshaded shader: unshaded
map: ["enum.ProtolatheVisualLayers.BaseUnlit"] map: ["enum.PowerDeviceVisualLayers.Powered"]
- state: building - state: inserting
map: ["enum.ProtolatheVisualLayers.AnimationLayer"] map: ["enum.LatheVisualLayers.IsInserting"]
- state: panel - state: panel
map: ["enum.WiresVisualLayers.MaintenancePanel"] map: ["enum.WiresVisualLayers.MaintenancePanel"]
- type: Appearance
- type: LatheVisuals
idleState: icon
runningState: building
- type: Physics - type: Physics
bodyType: Static bodyType: Static
- type: Fixtures - type: Fixtures
@@ -196,10 +200,6 @@
type: LatheBoundUserInterface type: LatheBoundUserInterface
- key: enum.ResearchClientUiKey.Key - key: enum.ResearchClientUiKey.Key
type: ResearchClientBoundUserInterface type: ResearchClientBoundUserInterface
- type: Appearance
visuals:
- type: ProtolatheVisualizer
- type: WiresVisualizer
- type: Transform - type: Transform
anchored: true anchored: true
- type: Pullable - type: Pullable
@@ -216,12 +216,10 @@
sprite: Structures/Machines/circuit_imprinter.rsi sprite: Structures/Machines/circuit_imprinter.rsi
layers: layers:
- state: icon - state: icon
map: ["enum.ProtolatheVisualLayers.Base"] map: ["enum.LatheVisualLayers.IsRunning"]
- state: unlit - state: unlit
shader: unshaded shader: unshaded
map: ["enum.ProtolatheVisualLayers.BaseUnlit"] map: ["enum.PowerDeviceVisualLayers.Powered"]
- state: building
map: ["enum.ProtolatheVisualLayers.AnimationLayer"]
- state: panel - state: panel
map: ["enum.WiresVisualLayers.MaintenancePanel"] map: ["enum.WiresVisualLayers.MaintenancePanel"]
- type: ProtolatheDatabase - type: ProtolatheDatabase
@@ -248,6 +246,8 @@
- StasisBedMachineCircuitboard - StasisBedMachineCircuitboard
- type: Machine - type: Machine
board: CircuitImprinterMachineCircuitboard board: CircuitImprinterMachineCircuitboard
- type: Lathe
producingSound: /Audio/Machines/circuitprinter.ogg
- type: entity - type: entity
parent: Protolathe parent: Protolathe
@@ -260,14 +260,16 @@
sprite: Structures/Machines/security_techfab.rsi sprite: Structures/Machines/security_techfab.rsi
layers: layers:
- state: icon - state: icon
map: ["enum.ProtolatheVisualLayers.Base"] map: ["enum.LatheVisualLayers.IsRunning"]
- state: unlit - state: unlit
shader: unshaded shader: unshaded
map: ["enum.ProtolatheVisualLayers.BaseUnlit"] map: ["enum.PowerDeviceVisualLayers.Powered"]
- state: icon - state: inserting
map: ["enum.ProtolatheVisualLayers.AnimationLayer"] map: ["enum.LatheVisualLayers.IsInserting"]
- state: panel - state: panel
map: ["enum.WiresVisualLayers.MaintenancePanel"] map: ["enum.WiresVisualLayers.MaintenancePanel"]
idleState: icon
runningState: icon
- type: ProtolatheDatabase - type: ProtolatheDatabase
protolatherecipes: protolatherecipes:
- Flash - Flash
@@ -375,13 +377,8 @@
netsync: false netsync: false
layers: layers:
- state: icon - state: icon
map: ["enum.AutolatheVisualLayers.Base"] map: ["enum.LatheVisualLayers.IsRunning"]
- state: unlit
shader: unshaded
map: ["enum.AutolatheVisualLayers.BaseUnlit"]
- state: building
map: ["enum.AutolatheVisualLayers.AnimationLayer"]
- state: panel
map: ["enum.WiresVisualLayers.MaintenancePanel"]
- type: Machine - type: Machine
board: UniformPrinterMachineCircuitboard board: UniformPrinterMachineCircuitboard
- type: Lathe
producingSound: /Audio/Machines/uniformprinter.ogg

View File

@@ -3,33 +3,39 @@
stack: Glass stack: Glass
name: glass name: glass
icon: Objects/Materials/Sheets/glass.rsi/glass.png icon: Objects/Materials/Sheets/glass.rsi/glass.png
color: "#a8ccd7"
- type: material - type: material
id: ReinforcedGlass id: ReinforcedGlass
stack: ReinforcedGlass stack: ReinforcedGlass
name: reinforced glass name: reinforced glass
icon: Objects/Materials/Sheets/glass.rsi/rglass.png icon: Objects/Materials/Sheets/glass.rsi/rglass.png
color: "#549bb0"
- type: material - type: material
id: PlasmaGlass id: PlasmaGlass
stack: PlasmaGlass stack: PlasmaGlass
name: plasma glass name: plasma glass
icon: Objects/Materials/Sheets/glass.rsi/pglass.png icon: Objects/Materials/Sheets/glass.rsi/pglass.png
color: "#b35989"
- type: material - type: material
id: ReinforcedPlasmaGlass id: ReinforcedPlasmaGlass
stack: ReinforcedPlasmaGlass stack: ReinforcedPlasmaGlass
name: reinforced plasma glass name: reinforced plasma glass
icon: Objects/Materials/Sheets/glass.rsi/rpglass.png icon: Objects/Materials/Sheets/glass.rsi/rpglass.png
color: "#8c4069"
- type: material - type: material
id: TitaniumGlass id: TitaniumGlass
stack: TitaniumGlass stack: TitaniumGlass
name: titanium glass name: titanium glass
icon: Objects/Materials/Sheets/glass.rsi/titaniumglass.png icon: Objects/Materials/Sheets/glass.rsi/titaniumglass.png
color: "#333135"
- type: material - type: material
id: PlastitaniumGlass id: PlastitaniumGlass
stack: PlastitaniumGlass stack: PlastitaniumGlass
name: plastitanium glass name: plastitanium glass
icon: Objects/Materials/Sheets/glass.rsi/plastitaniumglass.png icon: Objects/Materials/Sheets/glass.rsi/plastitaniumglass.png
color: "#232127"

View File

@@ -4,33 +4,39 @@
stack: Cloth stack: Cloth
name: cloth name: cloth
icon: /Textures/Objects/Materials/materials.rsi/cloth.png icon: /Textures/Objects/Materials/materials.rsi/cloth.png
color: "#e7e7de"
- type: material - type: material
id: Durathread id: Durathread
stack: Durathread stack: Durathread
name: durathread name: durathread
icon: /Textures/Objects/Materials/materials.rsi/durathread.png icon: /Textures/Objects/Materials/materials.rsi/durathread.png
color: "#8291a1"
- type: material - type: material
id: Plasma id: Plasma
stack: Plasma stack: Plasma
name: plasma name: plasma
icon: Objects/Materials/Sheets/other.rsi/plasma.png icon: Objects/Materials/Sheets/other.rsi/plasma.png
color: "#7e009e"
- type: material - type: material
id: Phoron id: Phoron
stack: Phoron stack: Phoron
name: phoron name: phoron
icon: Objects/Materials/Sheets/other.rsi/phoron.png icon: Objects/Materials/Sheets/other.rsi/phoron.png
color: "#FF3300"
- type: material - type: material
id: Plastic id: Plastic
stack: Plastic stack: Plastic
name: plastic name: plastic
icon: Objects/Materials/Sheets/other.rsi/plastic.png icon: Objects/Materials/Sheets/other.rsi/plastic.png
color: "#d9d9d9"
- type: material - type: material
id: Wood id: Wood
stack: WoodPlank stack: WoodPlank
name: wood name: wood
icon: Objects/Materials/materials.rsi/wood.png icon: Objects/Materials/materials.rsi/wood.png
color: "#966F33"

View File

@@ -9,18 +9,21 @@
stack: Adamantine stack: Adamantine
name: adamantine name: adamantine
icon: Objects/Materials/ingots.rsi/adamantine.png icon: Objects/Materials/ingots.rsi/adamantine.png
color: "#7dc37f"
- type: material - type: material
id: Copper id: Copper
stack: Copper stack: Copper
name: copper name: copper
icon: Objects/Materials/ingots.rsi/copper.png icon: Objects/Materials/ingots.rsi/copper.png
color: "#B87333"
- type: material - type: material
id: Gold id: Gold
stack: Gold stack: Gold
name: gold name: gold
icon: Objects/Materials/ingots.rsi/gold.png icon: Objects/Materials/ingots.rsi/gold.png
color: "#FFD700"
- type: material - type: material
id: Hydrogen id: Hydrogen
@@ -32,34 +35,39 @@
id: Iron id: Iron
stack: Iron stack: Iron
name: 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 - type: material
id: Silver id: Silver
stack: Silver stack: Silver
name: silver name: silver
icon: Objects/Materials/ingots.rsi/silver.png icon: Objects/Materials/ingots.rsi/silver.png
color: "#C0C0C0"
- type: material - type: material
id: Plasteel id: Plasteel
stack: Plasteel stack: Plasteel
name: plasteel name: plasteel
icon: Objects/Materials/Sheets/metal.rsi/plasteel.png icon: Objects/Materials/Sheets/metal.rsi/plasteel.png
color: "#696969" #Okay, this is epic
- type: material - type: material
id: Brass id: Brass
stack: Brass stack: Brass
name: brass name: brass
icon: Objects/Materials/Sheets/metal.rsi/brass.png icon: Objects/Materials/Sheets/metal.rsi/brass.png
color: "#E1C16E"
- type: material - type: material
id: Titanium id: Titanium
stack: Titanium stack: Titanium
name: titanium name: titanium
icon: Objects/Materials/Sheets/metal.rsi/titanium.png icon: Objects/Materials/Sheets/metal.rsi/titanium.png
color: "#878681"
- type: material - type: material
id: Plastitanium id: Plastitanium
stack: Plastitanium stack: Plastitanium
name: plastitanium name: plastitanium
icon: Objects/Materials/Sheets/metal.rsi/plastitanium.png icon: Objects/Materials/Sheets/metal.rsi/plastitanium.png
color: "#4e4e4b"

View File

@@ -2,7 +2,7 @@
id: CapacitorStockPart id: CapacitorStockPart
icon: Objects/Misc/stock_parts.rsi/capacitor.png icon: Objects/Misc/stock_parts.rsi/capacitor.png
result: CapacitorStockPart result: CapacitorStockPart
completetime: 250 completetime: 1
materials: materials:
Steel: 50 Steel: 50
Plastic: 50 Plastic: 50
@@ -11,7 +11,7 @@
id: MatterBinStockPart id: MatterBinStockPart
icon: Objects/Misc/stock_parts.rsi/matter_bin.png icon: Objects/Misc/stock_parts.rsi/matter_bin.png
result: MatterBinStockPart result: MatterBinStockPart
completetime: 250 completetime: 1
materials: materials:
Steel: 50 Steel: 50
Plastic: 50 Plastic: 50
@@ -20,7 +20,7 @@
id: MicroLaserStockPart id: MicroLaserStockPart
icon: Objects/Misc/stock_parts.rsi/micro_laser.png icon: Objects/Misc/stock_parts.rsi/micro_laser.png
result: MicroLaserStockPart result: MicroLaserStockPart
completetime: 250 completetime: 1
materials: materials:
Steel: 50 Steel: 50
Glass: 50 Glass: 50
@@ -30,7 +30,7 @@
id: MicroManipulatorStockPart id: MicroManipulatorStockPart
icon: Objects/Misc/stock_parts.rsi/micro_mani.png icon: Objects/Misc/stock_parts.rsi/micro_mani.png
result: MicroManipulatorStockPart result: MicroManipulatorStockPart
completetime: 250 completetime: 1
materials: materials:
Steel: 50 Steel: 50
Plastic: 50 Plastic: 50
@@ -39,7 +39,7 @@
id: ScanningModuleStockPart id: ScanningModuleStockPart
icon: Objects/Misc/stock_parts.rsi/scan_module_static.png icon: Objects/Misc/stock_parts.rsi/scan_module_static.png
result: ScanningModuleStockPart result: ScanningModuleStockPart
completetime: 250 completetime: 1
materials: materials:
Steel: 50 Steel: 50
Glass: 50 Glass: 50

View File

@@ -4,7 +4,7 @@
sprite: Objects/Tools/Hydroponics/hoe.rsi sprite: Objects/Tools/Hydroponics/hoe.rsi
state: icon state: icon
result: HydroponicsToolMiniHoe result: HydroponicsToolMiniHoe
completetime: 500 completetime: 2
materials: materials:
Steel: 200 Steel: 200
Plastic: 100 Plastic: 100
@@ -15,7 +15,7 @@
sprite: Objects/Tools/Hydroponics/scythe.rsi sprite: Objects/Tools/Hydroponics/scythe.rsi
state: icon state: icon
result: HydroponicsToolScythe result: HydroponicsToolScythe
completetime: 500 completetime: 2
materials: materials:
Steel: 300 Steel: 300
Plastic: 200 Plastic: 200
@@ -26,7 +26,7 @@
sprite: Objects/Tools/Hydroponics/hatchet.rsi sprite: Objects/Tools/Hydroponics/hatchet.rsi
state: icon state: icon
result: HydroponicsToolHatchet result: HydroponicsToolHatchet
completetime: 500 completetime: 2
materials: materials:
Steel: 200 Steel: 200
Plastic: 100 Plastic: 100
@@ -37,7 +37,7 @@
sprite: Objects/Tools/Hydroponics/spade.rsi sprite: Objects/Tools/Hydroponics/spade.rsi
state: icon state: icon
result: HydroponicsToolSpade result: HydroponicsToolSpade
completetime: 500 completetime: 2
materials: materials:
Steel: 200 Steel: 200
Plastic: 100 Plastic: 100

View File

@@ -4,7 +4,7 @@
sprite: Structures/conveyor.rsi sprite: Structures/conveyor.rsi
state: conveyor_loose state: conveyor_loose
result: ConveyorBeltAssembly result: ConveyorBeltAssembly
completetime: 1000 completetime: 4
materials: materials:
Steel: 500 Steel: 500
Plastic: 50 Plastic: 50

View File

@@ -4,7 +4,7 @@
sprite: Objects/Specific/Chemistry/beaker.rsi sprite: Objects/Specific/Chemistry/beaker.rsi
state: beaker state: beaker
result: Beaker result: Beaker
completetime: 500 completetime: 2
materials: materials:
Glass: 100 Glass: 100
@@ -14,7 +14,7 @@
sprite: Objects/Specific/Chemistry/beaker_large.rsi sprite: Objects/Specific/Chemistry/beaker_large.rsi
state: beakerlarge state: beakerlarge
result: LargeBeaker result: LargeBeaker
completetime: 500 completetime: 2
materials: materials:
Glass: 200 Glass: 200
@@ -24,7 +24,7 @@
sprite: Objects/Specific/Chemistry/beaker_cryostasis.rsi sprite: Objects/Specific/Chemistry/beaker_cryostasis.rsi
state: beakernoreact state: beakernoreact
result: CryostasisBeaker result: CryostasisBeaker
completetime: 500 completetime: 2
materials: materials:
Steel: 250 Steel: 250
Plastic: 50 Plastic: 50
@@ -35,7 +35,7 @@
sprite: Objects/Specific/Chemistry/dropper.rsi sprite: Objects/Specific/Chemistry/dropper.rsi
state: dropper state: dropper
result: Dropper result: Dropper
completetime: 500 completetime: 2
materials: materials:
Glass: 200 Glass: 200
Plastic: 100 Plastic: 100
@@ -46,7 +46,7 @@
sprite: Objects/Specific/Chemistry/syringe.rsi sprite: Objects/Specific/Chemistry/syringe.rsi
state: syringe_base0 state: syringe_base0
result: Syringe result: Syringe
completetime: 500 completetime: 2
materials: materials:
Plastic: 100 Plastic: 100
Steel: 25 Steel: 25
@@ -55,6 +55,6 @@
id: PillCanister id: PillCanister
icon: Objects/Specific/Chemistry/pills_canister.rsi/pill_canister.png icon: Objects/Specific/Chemistry/pills_canister.rsi/pill_canister.png
result: PillCanister result: PillCanister
completetime: 500 completetime: 2
materials: materials:
Plastic: 100 Plastic: 100

View File

@@ -6,7 +6,7 @@
sprite: Clothing/Uniforms/Jumpsuit/Color/grey.rsi sprite: Clothing/Uniforms/Jumpsuit/Color/grey.rsi
state: icon state: icon
result: ClothingUniformJumpsuitColorGrey result: ClothingUniformJumpsuitColorGrey
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
@@ -16,7 +16,7 @@
sprite: Clothing/Uniforms/Jumpskirt/Color/grey.rsi sprite: Clothing/Uniforms/Jumpskirt/Color/grey.rsi
state: icon state: icon
result: ClothingUniformJumpskirtColorGrey result: ClothingUniformJumpskirtColorGrey
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
@@ -26,7 +26,7 @@
sprite: Clothing/Uniforms/Jumpsuit/bartender.rsi sprite: Clothing/Uniforms/Jumpsuit/bartender.rsi
state: icon state: icon
result: ClothingUniformJumpsuitBartender result: ClothingUniformJumpsuitBartender
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
@@ -36,7 +36,7 @@
sprite: Clothing/Uniforms/Jumpskirt/bartender.rsi sprite: Clothing/Uniforms/Jumpskirt/bartender.rsi
state: icon state: icon
result: ClothingUniformJumpskirtBartender result: ClothingUniformJumpskirtBartender
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
@@ -46,7 +46,7 @@
sprite: Clothing/Uniforms/Jumpsuit/captain.rsi sprite: Clothing/Uniforms/Jumpsuit/captain.rsi
state: icon state: icon
result: ClothingUniformJumpsuitCaptain result: ClothingUniformJumpsuitCaptain
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
Durathread: 100 Durathread: 100
@@ -57,7 +57,7 @@
sprite: Clothing/Uniforms/Jumpskirt/captain.rsi sprite: Clothing/Uniforms/Jumpskirt/captain.rsi
state: icon state: icon
result: ClothingUniformJumpskirtCaptain result: ClothingUniformJumpskirtCaptain
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
Durathread: 100 Durathread: 100
@@ -68,7 +68,7 @@
sprite: Clothing/Uniforms/Jumpsuit/cargotech.rsi sprite: Clothing/Uniforms/Jumpsuit/cargotech.rsi
state: icon state: icon
result: ClothingUniformJumpsuitCargo result: ClothingUniformJumpsuitCargo
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
@@ -78,7 +78,7 @@
sprite: Clothing/Uniforms/Jumpskirt/cargotech.rsi sprite: Clothing/Uniforms/Jumpskirt/cargotech.rsi
state: icon state: icon
result: ClothingUniformJumpskirtCargo result: ClothingUniformJumpskirtCargo
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
@@ -88,7 +88,7 @@
sprite: Clothing/Uniforms/Jumpsuit/salvage.rsi sprite: Clothing/Uniforms/Jumpsuit/salvage.rsi
state: icon state: icon
result: ClothingUniformJumpsuitSalvageSpecialist result: ClothingUniformJumpsuitSalvageSpecialist
completetime: 800 completetime: 4
materials: materials:
Cloth: 500 #It's armored but I don't want to include durathread for a non-head 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 sprite: Clothing/Uniforms/Jumpsuit/ce.rsi
state: icon state: icon
result: ClothingUniformJumpsuitChiefEngineer result: ClothingUniformJumpsuitChiefEngineer
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
Durathread: 100 Durathread: 100
@@ -109,7 +109,7 @@
sprite: Clothing/Uniforms/Jumpskirt/ce.rsi sprite: Clothing/Uniforms/Jumpskirt/ce.rsi
state: icon state: icon
result: ClothingUniformJumpskirtChiefEngineer result: ClothingUniformJumpskirtChiefEngineer
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
Durathread: 100 Durathread: 100
@@ -120,7 +120,7 @@
sprite: Clothing/Uniforms/Jumpsuit/chaplain.rsi sprite: Clothing/Uniforms/Jumpsuit/chaplain.rsi
state: icon state: icon
result: ClothingUniformJumpsuitChaplain result: ClothingUniformJumpsuitChaplain
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
@@ -130,7 +130,7 @@
sprite: Clothing/Uniforms/Jumpskirt/chaplain.rsi sprite: Clothing/Uniforms/Jumpskirt/chaplain.rsi
state: icon state: icon
result: ClothingUniformJumpskirtChaplain result: ClothingUniformJumpskirtChaplain
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
@@ -140,7 +140,7 @@
sprite: Clothing/Uniforms/Jumpsuit/chef.rsi sprite: Clothing/Uniforms/Jumpsuit/chef.rsi
state: icon state: icon
result: ClothingUniformJumpsuitChef result: ClothingUniformJumpsuitChef
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
@@ -150,7 +150,7 @@
sprite: Clothing/Uniforms/Jumpskirt/chef.rsi sprite: Clothing/Uniforms/Jumpskirt/chef.rsi
state: icon state: icon
result: ClothingUniformJumpskirtChef result: ClothingUniformJumpskirtChef
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
@@ -160,7 +160,7 @@
sprite: Clothing/Uniforms/Jumpsuit/chemistry.rsi sprite: Clothing/Uniforms/Jumpsuit/chemistry.rsi
state: icon state: icon
result: ClothingUniformJumpsuitChemistry result: ClothingUniformJumpsuitChemistry
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
@@ -170,7 +170,7 @@
sprite: Clothing/Uniforms/Jumpskirt/chemistry.rsi sprite: Clothing/Uniforms/Jumpskirt/chemistry.rsi
state: icon state: icon
result: ClothingUniformJumpskirtChemistry result: ClothingUniformJumpskirtChemistry
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
@@ -180,7 +180,7 @@
sprite: Clothing/Uniforms/Jumpsuit/clown.rsi sprite: Clothing/Uniforms/Jumpsuit/clown.rsi
state: icon state: icon
result: ClothingUniformJumpsuitClown result: ClothingUniformJumpsuitClown
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
@@ -190,7 +190,7 @@
sprite: Clothing/Uniforms/Jumpsuit/cmo.rsi sprite: Clothing/Uniforms/Jumpsuit/cmo.rsi
state: icon state: icon
result: ClothingUniformJumpsuitCMO result: ClothingUniformJumpsuitCMO
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
Durathread: 100 Durathread: 100
@@ -201,7 +201,7 @@
sprite: Clothing/Uniforms/Jumpskirt/cmo.rsi sprite: Clothing/Uniforms/Jumpskirt/cmo.rsi
state: icon state: icon
result: ClothingUniformJumpskirtCMO result: ClothingUniformJumpskirtCMO
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
Durathread: 100 Durathread: 100
@@ -212,7 +212,7 @@
sprite: Clothing/Uniforms/Jumpsuit/detective.rsi sprite: Clothing/Uniforms/Jumpsuit/detective.rsi
state: icon state: icon
result: ClothingUniformJumpsuitDetective result: ClothingUniformJumpsuitDetective
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
@@ -222,7 +222,7 @@
sprite: Clothing/Uniforms/Jumpskirt/detective.rsi sprite: Clothing/Uniforms/Jumpskirt/detective.rsi
state: icon state: icon
result: ClothingUniformJumpskirtDetective result: ClothingUniformJumpskirtDetective
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
@@ -232,7 +232,7 @@
sprite: Clothing/Uniforms/Jumpsuit/engineering.rsi sprite: Clothing/Uniforms/Jumpsuit/engineering.rsi
state: icon state: icon
result: ClothingUniformJumpsuitEngineering result: ClothingUniformJumpsuitEngineering
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
@@ -242,7 +242,7 @@
sprite: Clothing/Uniforms/Jumpskirt/engineering.rsi sprite: Clothing/Uniforms/Jumpskirt/engineering.rsi
state: icon state: icon
result: ClothingUniformJumpskirtEngineering result: ClothingUniformJumpskirtEngineering
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
@@ -252,7 +252,7 @@
sprite: Clothing/Uniforms/Jumpsuit/hop.rsi sprite: Clothing/Uniforms/Jumpsuit/hop.rsi
state: icon state: icon
result: ClothingUniformJumpsuitHoP result: ClothingUniformJumpsuitHoP
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
Durathread: 100 Durathread: 100
@@ -263,7 +263,7 @@
sprite: Clothing/Uniforms/Jumpskirt/hop.rsi sprite: Clothing/Uniforms/Jumpskirt/hop.rsi
state: icon state: icon
result: ClothingUniformJumpskirtHoP result: ClothingUniformJumpskirtHoP
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
Durathread: 100 Durathread: 100
@@ -274,7 +274,7 @@
sprite: Clothing/Uniforms/Jumpsuit/hos.rsi sprite: Clothing/Uniforms/Jumpsuit/hos.rsi
state: icon state: icon
result: ClothingUniformJumpsuitHoS result: ClothingUniformJumpsuitHoS
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
Durathread: 100 Durathread: 100
@@ -285,7 +285,7 @@
sprite: Clothing/Uniforms/Jumpskirt/hos.rsi sprite: Clothing/Uniforms/Jumpskirt/hos.rsi
state: icon state: icon
result: ClothingUniformJumpskirtHoS result: ClothingUniformJumpskirtHoS
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
Durathread: 100 Durathread: 100
@@ -296,7 +296,7 @@
sprite: Clothing/Uniforms/Jumpsuit/hydro.rsi sprite: Clothing/Uniforms/Jumpsuit/hydro.rsi
state: icon state: icon
result: ClothingUniformJumpsuitHydroponics result: ClothingUniformJumpsuitHydroponics
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
@@ -306,7 +306,7 @@
sprite: Clothing/Uniforms/Jumpskirt/hydro.rsi sprite: Clothing/Uniforms/Jumpskirt/hydro.rsi
state: icon state: icon
result: ClothingUniformJumpskirtHydroponics result: ClothingUniformJumpskirtHydroponics
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
@@ -316,7 +316,7 @@
sprite: Clothing/Uniforms/Jumpsuit/janitor.rsi sprite: Clothing/Uniforms/Jumpsuit/janitor.rsi
state: icon state: icon
result: ClothingUniformJumpsuitJanitor result: ClothingUniformJumpsuitJanitor
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
@@ -326,7 +326,7 @@
sprite: Clothing/Uniforms/Jumpskirt/janitor.rsi sprite: Clothing/Uniforms/Jumpskirt/janitor.rsi
state: icon state: icon
result: ClothingUniformJumpskirtJanitor result: ClothingUniformJumpskirtJanitor
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
@@ -336,7 +336,7 @@
sprite: Clothing/Uniforms/Jumpsuit/lawyerblack.rsi sprite: Clothing/Uniforms/Jumpsuit/lawyerblack.rsi
state: icon state: icon
result: ClothingUniformJumpsuitLawyerBlack result: ClothingUniformJumpsuitLawyerBlack
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
@@ -346,7 +346,7 @@
sprite: Clothing/Uniforms/Jumpsuit/librarian.rsi sprite: Clothing/Uniforms/Jumpsuit/librarian.rsi
state: icon state: icon
result: ClothingUniformJumpsuitLibrarian result: ClothingUniformJumpsuitLibrarian
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
@@ -356,7 +356,7 @@
sprite: Clothing/Uniforms/Jumpskirt/Color/lightbrown.rsi sprite: Clothing/Uniforms/Jumpskirt/Color/lightbrown.rsi
state: icon state: icon
result: ClothingUniformJumpskirtColorLightBrown result: ClothingUniformJumpskirtColorLightBrown
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
@@ -366,7 +366,7 @@
sprite: Clothing/Uniforms/Jumpsuit/medical.rsi sprite: Clothing/Uniforms/Jumpsuit/medical.rsi
state: icon state: icon
result: ClothingUniformJumpsuitMedicalDoctor result: ClothingUniformJumpsuitMedicalDoctor
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
@@ -376,7 +376,7 @@
sprite: Clothing/Uniforms/Jumpskirt/medical.rsi sprite: Clothing/Uniforms/Jumpskirt/medical.rsi
state: icon state: icon
result: ClothingUniformJumpskirtMedicalDoctor result: ClothingUniformJumpskirtMedicalDoctor
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
@@ -386,7 +386,7 @@
sprite: Clothing/Uniforms/Jumpsuit/mime.rsi sprite: Clothing/Uniforms/Jumpsuit/mime.rsi
state: icon state: icon
result: ClothingUniformJumpsuitMime result: ClothingUniformJumpsuitMime
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
@@ -396,7 +396,7 @@
sprite: Clothing/Uniforms/Jumpskirt/mime.rsi sprite: Clothing/Uniforms/Jumpskirt/mime.rsi
state: icon state: icon
result: ClothingUniformJumpskirtMime result: ClothingUniformJumpskirtMime
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
@@ -406,7 +406,7 @@
sprite: Clothing/Uniforms/Jumpsuit/lawyerpurple.rsi sprite: Clothing/Uniforms/Jumpsuit/lawyerpurple.rsi
state: icon state: icon
result: ClothingUniformJumpsuitLawyerPurple result: ClothingUniformJumpsuitLawyerPurple
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
@@ -416,7 +416,7 @@
sprite: Clothing/Uniforms/Jumpsuit/paramedic.rsi sprite: Clothing/Uniforms/Jumpsuit/paramedic.rsi
state: icon state: icon
result: ClothingUniformJumpsuitParamedic result: ClothingUniformJumpsuitParamedic
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
@@ -426,7 +426,7 @@
sprite: Clothing/Uniforms/Jumpskirt/paramedic.rsi sprite: Clothing/Uniforms/Jumpskirt/paramedic.rsi
state: icon state: icon
result: ClothingUniformJumpskirtParamedic result: ClothingUniformJumpskirtParamedic
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
@@ -436,7 +436,7 @@
sprite: Clothing/Uniforms/Jumpsuit/prisoner.rsi sprite: Clothing/Uniforms/Jumpsuit/prisoner.rsi
state: icon state: icon
result: ClothingUniformJumpsuitPrisoner result: ClothingUniformJumpsuitPrisoner
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
@@ -446,7 +446,7 @@
sprite: Clothing/Uniforms/Jumpskirt/prisoner.rsi sprite: Clothing/Uniforms/Jumpskirt/prisoner.rsi
state: icon state: icon
result: ClothingUniformJumpskirtPrisoner result: ClothingUniformJumpskirtPrisoner
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
@@ -456,7 +456,7 @@
sprite: Clothing/Uniforms/Jumpsuit/qm.rsi sprite: Clothing/Uniforms/Jumpsuit/qm.rsi
state: icon state: icon
result: ClothingUniformJumpsuitQM result: ClothingUniformJumpsuitQM
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
@@ -466,7 +466,7 @@
sprite: Clothing/Uniforms/Jumpskirt/qm.rsi sprite: Clothing/Uniforms/Jumpskirt/qm.rsi
state: icon state: icon
result: ClothingUniformJumpskirtQM result: ClothingUniformJumpskirtQM
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
@@ -476,7 +476,7 @@
sprite: Clothing/Uniforms/Jumpsuit/rnd.rsi sprite: Clothing/Uniforms/Jumpsuit/rnd.rsi
state: icon state: icon
result: ClothingUniformJumpsuitResearchDirector result: ClothingUniformJumpsuitResearchDirector
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
Durathread: 100 Durathread: 100
@@ -487,7 +487,7 @@
sprite: Clothing/Uniforms/Jumpskirt/rnd.rsi sprite: Clothing/Uniforms/Jumpskirt/rnd.rsi
state: icon state: icon
result: ClothingUniformJumpskirtResearchDirector result: ClothingUniformJumpskirtResearchDirector
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
Durathread: 100 Durathread: 100
@@ -498,7 +498,7 @@
sprite: Clothing/Uniforms/Jumpsuit/scientist.rsi sprite: Clothing/Uniforms/Jumpsuit/scientist.rsi
state: icon state: icon
result: ClothingUniformJumpsuitScientist result: ClothingUniformJumpsuitScientist
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
@@ -508,7 +508,7 @@
sprite: Clothing/Uniforms/Jumpskirt/scientist.rsi sprite: Clothing/Uniforms/Jumpskirt/scientist.rsi
state: icon state: icon
result: ClothingUniformJumpskirtScientist result: ClothingUniformJumpskirtScientist
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
@@ -518,7 +518,7 @@
sprite: Clothing/Uniforms/Jumpsuit/security.rsi sprite: Clothing/Uniforms/Jumpsuit/security.rsi
state: icon state: icon
result: ClothingUniformJumpsuitSec result: ClothingUniformJumpsuitSec
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
@@ -528,7 +528,7 @@
sprite: Clothing/Uniforms/Jumpskirt/security.rsi sprite: Clothing/Uniforms/Jumpskirt/security.rsi
state: icon state: icon
result: ClothingUniformJumpskirtSec result: ClothingUniformJumpskirtSec
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
@@ -538,7 +538,7 @@
sprite: Clothing/Uniforms/Jumpsuit/warden.rsi sprite: Clothing/Uniforms/Jumpsuit/warden.rsi
state: icon state: icon
result: ClothingUniformJumpsuitWarden result: ClothingUniformJumpsuitWarden
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300
@@ -548,7 +548,7 @@
sprite: Clothing/Uniforms/Jumpskirt/warden.rsi sprite: Clothing/Uniforms/Jumpskirt/warden.rsi
state: icon state: icon
result: ClothingUniformJumpskirtWarden result: ClothingUniformJumpskirtWarden
completetime: 800 completetime: 4
materials: materials:
Cloth: 300 Cloth: 300

View File

@@ -4,7 +4,7 @@
sprite: Objects/Weapons/Melee/cleaver.rsi sprite: Objects/Weapons/Melee/cleaver.rsi
state: butch state: butch
result: ButchCleaver result: ButchCleaver
completetime: 500 completetime: 2
materials: materials:
Steel: 300 Steel: 300
Plastic: 50 Plastic: 50
@@ -15,7 +15,7 @@
sprite: Objects/Weapons/Melee/kitchen_knife.rsi sprite: Objects/Weapons/Melee/kitchen_knife.rsi
state: icon state: icon
result: KitchenKnife result: KitchenKnife
completetime: 500 completetime: 2
materials: materials:
Steel: 200 Steel: 200
Plastic: 50 Plastic: 50
@@ -24,7 +24,7 @@
id: DrinkMug id: DrinkMug
icon: Objects/Consumable/Drinks/mug.rsi icon: Objects/Consumable/Drinks/mug.rsi
result: DrinkMug result: DrinkMug
completetime: 200 completetime: 0.8
materials: materials:
Glass: 50 Glass: 50
@@ -32,7 +32,7 @@
id: DrinkMugMetal id: DrinkMugMetal
icon: Objects/Consumable/Drinks/mug_metal.rsi icon: Objects/Consumable/Drinks/mug_metal.rsi
result: DrinkMugMetal result: DrinkMugMetal
completetime: 200 completetime: 0.8
materials: materials:
Steel: 50 Steel: 50
@@ -40,6 +40,6 @@
id: DrinkGlass id: DrinkGlass
icon: Objects/Consumable/Drinks/glass_clear.rsi icon: Objects/Consumable/Drinks/glass_clear.rsi
result: DrinkGlass result: DrinkGlass
completetime: 200 completetime: 0.8
materials: materials:
Glass: 50 Glass: 50

View File

@@ -2,7 +2,7 @@
id: FirelockElectronics id: FirelockElectronics
icon: Objects/Misc/module.rsi/mainboard.png icon: Objects/Misc/module.rsi/mainboard.png
result: FirelockElectronics result: FirelockElectronics
completetime: 500 completetime: 2
materials: materials:
Steel: 50 Steel: 50
Plastic: 50 Plastic: 50
@@ -11,7 +11,7 @@
id: DoorElectronics id: DoorElectronics
icon: Objects/Misc/module.rsi/door_electronics.png icon: Objects/Misc/module.rsi/door_electronics.png
result: DoorElectronics result: DoorElectronics
completetime: 500 completetime: 2
materials: materials:
Steel: 50 Steel: 50
Plastic: 50 Plastic: 50
@@ -20,7 +20,7 @@
id: AirAlarmElectronics id: AirAlarmElectronics
icon: Objects/Misc/module.rsi/airalarm_electronics.png icon: Objects/Misc/module.rsi/airalarm_electronics.png
result: AirAlarmElectronics result: AirAlarmElectronics
completetime: 500 completetime: 2
materials: materials:
Steel: 50 Steel: 50
Plastic: 50 Plastic: 50
@@ -29,7 +29,7 @@
id: FireAlarmElectronics id: FireAlarmElectronics
icon: Objects/Misc/module.rsi/door_electronics.png icon: Objects/Misc/module.rsi/door_electronics.png
result: FireAlarmElectronics result: FireAlarmElectronics
completetime: 500 completetime: 2
materials: materials:
Steel: 50 Steel: 50
Plastic: 50 Plastic: 50
@@ -38,7 +38,7 @@
id: CloningPodMachineCircuitboard id: CloningPodMachineCircuitboard
icon: Objects/Misc/module.rsi/id_mod.png icon: Objects/Misc/module.rsi/id_mod.png
result: CloningPodMachineCircuitboard result: CloningPodMachineCircuitboard
completetime: 1000 completetime: 4
materials: materials:
Steel: 100 Steel: 100
Glass: 900 Glass: 900
@@ -48,7 +48,7 @@
id: ThermomachineFreezerMachineCircuitBoard id: ThermomachineFreezerMachineCircuitBoard
icon: Objects/Misc/module.rsi/id_mod.png icon: Objects/Misc/module.rsi/id_mod.png
result: ThermomachineFreezerMachineCircuitBoard result: ThermomachineFreezerMachineCircuitBoard
completetime: 1000 completetime: 4
materials: materials:
Steel: 150 Steel: 150
Glass: 900 Glass: 900
@@ -58,7 +58,7 @@
id: MedicalScannerMachineCircuitboard id: MedicalScannerMachineCircuitboard
icon: Objects/Misc/module.rsi/id_mod.png icon: Objects/Misc/module.rsi/id_mod.png
result: MedicalScannerMachineCircuitboard result: MedicalScannerMachineCircuitboard
completetime: 1000 completetime: 4
materials: materials:
Steel: 100 Steel: 100
Glass: 900 Glass: 900
@@ -67,7 +67,7 @@
id: ChemMasterMachineCircuitboard id: ChemMasterMachineCircuitboard
icon: Objects/Misc/module.rsi/id_mod.png icon: Objects/Misc/module.rsi/id_mod.png
result: ChemMasterMachineCircuitboard result: ChemMasterMachineCircuitboard
completetime: 1000 completetime: 4
materials: materials:
Steel: 100 Steel: 100
Glass: 900 Glass: 900
@@ -76,7 +76,7 @@
id: ChemDispenserMachineCircuitboard id: ChemDispenserMachineCircuitboard
icon: Objects/Misc/module.rsi/id_mod.png icon: Objects/Misc/module.rsi/id_mod.png
result: ChemDispenserMachineCircuitboard result: ChemDispenserMachineCircuitboard
completetime: 1000 completetime: 4
materials: materials:
Steel: 100 Steel: 100
Glass: 900 Glass: 900
@@ -86,7 +86,7 @@
id: HydroponicsTrayMachineCircuitboard id: HydroponicsTrayMachineCircuitboard
icon: Objects/Misc/module.rsi/id_mod.png icon: Objects/Misc/module.rsi/id_mod.png
result: HydroponicsTrayMachineCircuitboard result: HydroponicsTrayMachineCircuitboard
completetime: 1000 completetime: 4
materials: materials:
Steel: 100 Steel: 100
Glass: 900 Glass: 900
@@ -95,7 +95,7 @@
id: AutolatheMachineCircuitboard id: AutolatheMachineCircuitboard
icon: Objects/Misc/module.rsi/id_mod.png icon: Objects/Misc/module.rsi/id_mod.png
result: AutolatheMachineCircuitboard result: AutolatheMachineCircuitboard
completetime: 1000 completetime: 4
materials: materials:
Steel: 100 Steel: 100
Glass: 900 Glass: 900
@@ -104,7 +104,7 @@
id: ProtolatheMachineCircuitboard id: ProtolatheMachineCircuitboard
icon: Objects/Misc/module.rsi/id_mod.png icon: Objects/Misc/module.rsi/id_mod.png
result: ProtolatheMachineCircuitboard result: ProtolatheMachineCircuitboard
completetime: 1000 completetime: 4
materials: materials:
Steel: 100 Steel: 100
Glass: 900 Glass: 900
@@ -113,7 +113,7 @@
id: CircuitImprinterMachineCircuitboard id: CircuitImprinterMachineCircuitboard
icon: Objects/Misc/module.rsi/id_mod.png icon: Objects/Misc/module.rsi/id_mod.png
result: CircuitImprinterMachineCircuitboard result: CircuitImprinterMachineCircuitboard
completetime: 1000 completetime: 4
materials: materials:
Steel: 100 Steel: 100
Glass: 900 Glass: 900
@@ -122,7 +122,7 @@
id: UniformPrinterMachineCircuitboard id: UniformPrinterMachineCircuitboard
icon: Objects/Misc/module.rsi/id_mod.png icon: Objects/Misc/module.rsi/id_mod.png
result: UniformPrinterMachineCircuitboard result: UniformPrinterMachineCircuitboard
completetime: 1000 completetime: 4
materials: materials:
Steel: 100 Steel: 100
Glass: 900 Glass: 900
@@ -131,7 +131,7 @@
id: VaccinatorMachineCircuitboard id: VaccinatorMachineCircuitboard
icon: Objects/Misc/module.rsi/id_mod.png icon: Objects/Misc/module.rsi/id_mod.png
result: VaccinatorMachineCircuitboard result: VaccinatorMachineCircuitboard
completetime: 100 completetime: 4
materials: materials:
Steel: 100 Steel: 100
Glass: 900 Glass: 900
@@ -141,7 +141,7 @@
id: DiagnoserMachineCircuitboard id: DiagnoserMachineCircuitboard
icon: Objects/Misc/module.rsi/id_mod.png icon: Objects/Misc/module.rsi/id_mod.png
result: DiagnoserMachineCircuitboard result: DiagnoserMachineCircuitboard
completetime: 100 completetime: 4
materials: materials:
Steel: 100 Steel: 100
Glass: 900 Glass: 900
@@ -152,7 +152,7 @@
id: ReagentGrinderMachineCircuitboard id: ReagentGrinderMachineCircuitboard
icon: Objects/Misc/module.rsi/id_mod.png icon: Objects/Misc/module.rsi/id_mod.png
result: ReagentGrinderMachineCircuitboard result: ReagentGrinderMachineCircuitboard
completetime: 1000 completetime: 4
materials: materials:
Steel: 100 Steel: 100
Glass: 900 Glass: 900
@@ -161,7 +161,7 @@
id: CrewMonitoringComputerCircuitboard id: CrewMonitoringComputerCircuitboard
icon: Objects/Misc/module.rsi/id_mod.png icon: Objects/Misc/module.rsi/id_mod.png
result: CrewMonitoringComputerCircuitboard result: CrewMonitoringComputerCircuitboard
completetime: 1000 completetime: 4
materials: materials:
Steel: 100 Steel: 100
Glass: 900 Glass: 900
@@ -170,7 +170,7 @@
id: ShuttleConsoleCircuitboard id: ShuttleConsoleCircuitboard
icon: Objects/Misc/module.rsi/id_mod.png icon: Objects/Misc/module.rsi/id_mod.png
result: ShuttleConsoleCircuitboard result: ShuttleConsoleCircuitboard
completetime: 1000 completetime: 4
materials: materials:
Steel: 100 Steel: 100
Glass: 900 Glass: 900
@@ -180,7 +180,7 @@
id: DawInstrumentMachineCircuitboard id: DawInstrumentMachineCircuitboard
icon: Objects/Misc/module.rsi/id_mod.png icon: Objects/Misc/module.rsi/id_mod.png
result: DawInstrumentMachineCircuitboard result: DawInstrumentMachineCircuitboard
completetime: 1000 completetime: 4
materials: materials:
Steel: 100 Steel: 100
Glass: 900 Glass: 900
@@ -199,7 +199,7 @@
id: APCElectronics id: APCElectronics
icon: Objects/Misc/module.rsi/charger_APC.png icon: Objects/Misc/module.rsi/charger_APC.png
result: APCElectronics result: APCElectronics
completetime: 500 completetime: 2
materials: materials:
Steel: 50 Steel: 50
Glass: 100 Glass: 100
@@ -208,7 +208,7 @@
id: SubstationMachineCircuitboard id: SubstationMachineCircuitboard
icon: Objects/Misc/module.rsi/id_mod.png icon: Objects/Misc/module.rsi/id_mod.png
result: SubstationMachineCircuitboard result: SubstationMachineCircuitboard
completetime: 1000 completetime: 4
materials: materials:
Steel: 50 Steel: 50
Glass: 450 Glass: 450
@@ -217,7 +217,7 @@
id: WallmountSubstationElectronics id: WallmountSubstationElectronics
icon: Objects/Misc/module.rsi/id_mod.png icon: Objects/Misc/module.rsi/id_mod.png
result: WallmountSubstationElectronics result: WallmountSubstationElectronics
completetime: 1000 completetime: 4
materials: materials:
Steel: 50 Steel: 50
Glass: 350 Glass: 350
@@ -226,7 +226,7 @@
id: SMESMachineCircuitboard id: SMESMachineCircuitboard
icon: Objects/Misc/module.rsi/power_mod.png icon: Objects/Misc/module.rsi/power_mod.png
result: SMESMachineCircuitboard result: SMESMachineCircuitboard
completetime: 1000 completetime: 4
materials: materials:
Steel: 100 Steel: 100
Glass: 900 Glass: 900
@@ -235,7 +235,7 @@
id: GeneratorPlasmaMachineCircuitboard id: GeneratorPlasmaMachineCircuitboard
icon: Objects/Misc/module.rsi/id_mod.png icon: Objects/Misc/module.rsi/id_mod.png
result: GeneratorPlasmaMachineCircuitboard result: GeneratorPlasmaMachineCircuitboard
completetime: 1000 completetime: 4
materials: materials:
Steel: 50 Steel: 50
Glass: 350 Glass: 350
@@ -244,7 +244,7 @@
id: GeneratorUraniumMachineCircuitboard id: GeneratorUraniumMachineCircuitboard
icon: Objects/Misc/module.rsi/id_mod.png icon: Objects/Misc/module.rsi/id_mod.png
result: GeneratorUraniumMachineCircuitboard result: GeneratorUraniumMachineCircuitboard
completetime: 1000 completetime: 4
materials: materials:
Steel: 50 Steel: 50
Glass: 350 Glass: 350
@@ -253,7 +253,7 @@
id: WallmountGeneratorElectronics id: WallmountGeneratorElectronics
icon: Objects/Misc/module.rsi/id_mod.png icon: Objects/Misc/module.rsi/id_mod.png
result: WallmountGeneratorElectronics result: WallmountGeneratorElectronics
completetime: 1000 completetime: 4
materials: materials:
Steel: 50 Steel: 50
Glass: 350 Glass: 350
@@ -262,7 +262,7 @@
id: WallmountGeneratorAPUElectronics id: WallmountGeneratorAPUElectronics
icon: Objects/Misc/module.rsi/id_mod.png icon: Objects/Misc/module.rsi/id_mod.png
result: WallmountGeneratorAPUElectronics result: WallmountGeneratorAPUElectronics
completetime: 1000 completetime: 4
materials: materials:
Steel: 50 Steel: 50
Glass: 350 Glass: 350
@@ -271,7 +271,7 @@
id: SolarControlComputerCircuitboard id: SolarControlComputerCircuitboard
icon: Objects/Misc/module.rsi/id_mod.png icon: Objects/Misc/module.rsi/id_mod.png
result: SolarControlComputerCircuitboard result: SolarControlComputerCircuitboard
completetime: 1000 completetime: 4
materials: materials:
Steel: 100 Steel: 100
Glass: 900 Glass: 900

View File

@@ -4,7 +4,7 @@
sprite: Objects/Specific/Janitorial/mop.rsi sprite: Objects/Specific/Janitorial/mop.rsi
state: mop state: mop
result: MopItem result: MopItem
completetime: 500 completetime: 2
materials: materials:
Plastic: 100 Plastic: 100
@@ -12,7 +12,7 @@
id: MopBucket id: MopBucket
icon: Objects/Specific/Janitorial/janitorial.rsi icon: Objects/Specific/Janitorial/janitorial.rsi
result: MopBucket result: MopBucket
completetime: 500 completetime: 2
materials: materials:
Steel: 100 Steel: 100
Plastic: 100 Plastic: 100
@@ -23,7 +23,7 @@
sprite: Objects/Tools/bucket.rsi sprite: Objects/Tools/bucket.rsi
state: icon state: icon
result: Bucket result: Bucket
completetime: 500 completetime: 2
materials: materials:
Steel: 100 Steel: 100
@@ -31,7 +31,7 @@
id: WetFloorSign id: WetFloorSign
icon: Objects/Specific/Janitorial/wet_floor_sign.rsi icon: Objects/Specific/Janitorial/wet_floor_sign.rsi
result: WetFloorSign result: WetFloorSign
completetime: 500 completetime: 2
materials: materials:
Plastic: 100 Plastic: 100
@@ -41,7 +41,7 @@
sprite: Objects/Specific/Janitorial/janitorial.rsi sprite: Objects/Specific/Janitorial/janitorial.rsi
state: cleaner state: cleaner
result: SprayBottle result: SprayBottle
completetime: 500 completetime: 2
materials: materials:
Plastic: 100 Plastic: 100
@@ -49,7 +49,7 @@
id: TrashBag id: TrashBag
icon: Objects/Specific/Janitorial/trashbag.rsi icon: Objects/Specific/Janitorial/trashbag.rsi
result: TrashBag result: TrashBag
completetime: 300 completetime: 1.2
materials: materials:
Plastic: 100 Plastic: 100
@@ -57,7 +57,7 @@
id: LightReplacer id: LightReplacer
icon: Objects/Specific/Janitorial/light_replacer.rsi icon: Objects/Specific/Janitorial/light_replacer.rsi
result: LightReplacer result: LightReplacer
completetime: 600 completetime: 2.4
materials: materials:
Steel: 100 Steel: 100
Glass: 1000 Glass: 1000

View File

@@ -2,7 +2,7 @@
id: Scalpel id: Scalpel
icon: Objects/Specific/Medical/Surgery/scalpel.rsi/scalpel.png icon: Objects/Specific/Medical/Surgery/scalpel.rsi/scalpel.png
result: Scalpel result: Scalpel
completetime: 500 completetime: 2
materials: materials:
Steel: 200 Steel: 200
@@ -10,7 +10,7 @@
id: Retractor id: Retractor
icon: Objects/Specific/Medical/Surgery/scissors.rsi/retractor.png icon: Objects/Specific/Medical/Surgery/scissors.rsi/retractor.png
result: Scalpel result: Scalpel
completetime: 500 completetime: 2
materials: materials:
Steel: 200 Steel: 200
@@ -18,7 +18,7 @@
id: Cautery id: Cautery
icon: Objects/Specific/Medical/Surgery/cautery.rsi/cautery.png icon: Objects/Specific/Medical/Surgery/cautery.rsi/cautery.png
result: Cautery result: Cautery
completetime: 500 completetime: 2
materials: materials:
Steel: 200 Steel: 200
@@ -26,7 +26,7 @@
id: Drill id: Drill
icon: Objects/Specific/Medical/Surgery/drill.rsi/drill.png icon: Objects/Specific/Medical/Surgery/drill.rsi/drill.png
result: Drill result: Drill
completetime: 500 completetime: 2
materials: materials:
Steel: 200 Steel: 200
Plastic: 100 Plastic: 100
@@ -35,7 +35,7 @@
id: Saw id: Saw
icon: Objects/Specific/Medical/Surgery/saw.rsi/saw.png icon: Objects/Specific/Medical/Surgery/saw.rsi/saw.png
result: Saw result: Saw
completetime: 500 completetime: 2
materials: materials:
Steel: 200 Steel: 200
@@ -43,7 +43,7 @@
id: Hemostat id: Hemostat
icon: Objects/Specific/Medical/Surgery/scissors.rsi/hemostat.png icon: Objects/Specific/Medical/Surgery/scissors.rsi/hemostat.png
result: Hemostat result: Hemostat
completetime: 500 completetime: 2
materials: materials:
Steel: 200 Steel: 200
@@ -51,7 +51,7 @@
id: BodyBag_Folded id: BodyBag_Folded
icon: Objects/Specific/Medical/Morgue/bodybags.rsi/bag_folded.png icon: Objects/Specific/Medical/Morgue/bodybags.rsi/bag_folded.png
result: BodyBag_Folded result: BodyBag_Folded
completetime: 300 completetime: 1.2
materials: materials:
Plastic: 200 Plastic: 200
@@ -59,7 +59,7 @@
id: HandheldCrewMonitor id: HandheldCrewMonitor
icon: Objects/Specific/Medical/handheldcrewmonitor.rsi/icon.png icon: Objects/Specific/Medical/handheldcrewmonitor.rsi/icon.png
result: HandheldCrewMonitor result: HandheldCrewMonitor
completetime: 5000 completetime: 2
materials: materials:
Glass: 1200 Glass: 1200
Steel: 1000 Steel: 1000
@@ -69,7 +69,7 @@
id: HandheldHealthAnalyzer id: HandheldHealthAnalyzer
icon: Objects/Specific/Medical/healthanalyzer.rsi/icon.png icon: Objects/Specific/Medical/healthanalyzer.rsi/icon.png
result: HandheldHealthAnalyzer result: HandheldHealthAnalyzer
completetime: 1000 completetime: 4
materials: materials:
Glass: 500 Glass: 500
Steel: 500 Steel: 500

View File

@@ -2,7 +2,7 @@
id: LightTube id: LightTube
icon: Objects/Power/light_tube.rsi/normal.png icon: Objects/Power/light_tube.rsi/normal.png
result: LightTube result: LightTube
completetime: 500 completetime: 2
materials: materials:
Steel: 50 Steel: 50
Glass: 50 Glass: 50
@@ -11,7 +11,7 @@
id: LightBulb id: LightBulb
icon: Objects/Power/light_bulb.rsi/normal.png icon: Objects/Power/light_bulb.rsi/normal.png
result: LightBulb result: LightBulb
completetime: 500 completetime: 2
materials: materials:
Steel: 50 Steel: 50
Glass: 50 Glass: 50
@@ -20,7 +20,7 @@
id: PowerCellSmallHigh id: PowerCellSmallHigh
icon: Objects/Power/PowerCells/power_cell_small_hi.rsi icon: Objects/Power/PowerCells/power_cell_small_hi.rsi
result: PowerCellSmallHigh result: PowerCellSmallHigh
completetime: 500 completetime: 2
materials: materials:
Steel: 100 Steel: 100
Glass: 100 Glass: 100
@@ -29,7 +29,7 @@
id: GlowstickRed id: GlowstickRed
icon: Objects/Misc/glowstick.rsi icon: Objects/Misc/glowstick.rsi
result: GlowstickRed result: GlowstickRed
completetime: 500 completetime: 2
materials: materials:
Plastic: 50 Plastic: 50
@@ -37,7 +37,7 @@
id: Flare id: Flare
icon: Objects/Misc/flare.rsi icon: Objects/Misc/flare.rsi
result: Flare result: Flare
completetime: 500 completetime: 2
materials: materials:
Plastic: 50 Plastic: 50
@@ -47,7 +47,7 @@
sprite: Objects/Tools/flashlight.rsi sprite: Objects/Tools/flashlight.rsi
state: flashlight state: flashlight
result: FlashlightLantern result: FlashlightLantern
completetime: 500 completetime: 2
materials: materials:
Steel: 100 Steel: 100
Glass: 100 Glass: 100
@@ -59,7 +59,7 @@
sprite: Objects/Misc/fire_extinguisher.rsi sprite: Objects/Misc/fire_extinguisher.rsi
state: fire_extinguisher_closed state: fire_extinguisher_closed
result: FireExtinguisher result: FireExtinguisher
completetime: 500 completetime: 2
materials: materials:
Steel: 200 Steel: 200
@@ -67,7 +67,7 @@
id: Matchbox id: Matchbox
icon: Objects/Tools/matches.rsi icon: Objects/Tools/matches.rsi
result: Matchbox result: Matchbox
completetime: 10 completetime: 1
materials: materials:
Wood: 100 Wood: 100
@@ -77,7 +77,7 @@
sprite: Mobs/Silicon/drone.rsi sprite: Mobs/Silicon/drone.rsi
state: shell state: shell
result: Drone result: Drone
completetime: 1500 completetime: 6
materials: materials:
Steel: 500 Steel: 500
Glass: 500 Glass: 500
@@ -89,7 +89,7 @@
sprite: Objects/Fun/Instruments/h_synthesizer.rsi sprite: Objects/Fun/Instruments/h_synthesizer.rsi
state: icon state: icon
result: SynthesizerInstrument result: SynthesizerInstrument
completetime: 1000 completetime: 4
materials: materials:
Steel: 300 Steel: 300
Plastic: 300 Plastic: 300

View File

@@ -4,7 +4,7 @@
sprite: Objects/Misc/handcuffs.rsi sprite: Objects/Misc/handcuffs.rsi
state: handcuff state: handcuff
result: Handcuffs result: Handcuffs
completetime: 500 completetime: 2
materials: materials:
Steel: 300 Steel: 300
@@ -14,7 +14,7 @@
sprite: Objects/Weapons/Melee/stunbaton.rsi sprite: Objects/Weapons/Melee/stunbaton.rsi
state: stunbaton_off state: stunbaton_off
result: Stunbaton result: Stunbaton
completetime: 500 completetime: 2
materials: materials:
Steel: 300 Steel: 300
Plastic: 300 Plastic: 300
@@ -25,7 +25,7 @@
sprite: Objects/Weapons/Melee/flash.rsi sprite: Objects/Weapons/Melee/flash.rsi
state: flash state: flash
result: Flash result: Flash
completetime: 500 completetime: 2
materials: materials:
Glass: 100 Glass: 100
Plastic: 200 Plastic: 200
@@ -37,7 +37,7 @@
sprite: Objects/Weapons/Guns/Ammunition/Casings/shotgun_shell_beanbag.rsi sprite: Objects/Weapons/Guns/Ammunition/Casings/shotgun_shell_beanbag.rsi
state: base state: base
result: ShellShotgunBeanbag result: ShellShotgunBeanbag
completetime: 500 completetime: 2
materials: materials:
Plastic: 15 Plastic: 15
Steel: 10 Steel: 10
@@ -48,7 +48,7 @@
sprite: Objects/Weapons/Guns/Ammunition/Casings/ammo_casing.rsi sprite: Objects/Weapons/Guns/Ammunition/Casings/ammo_casing.rsi
state: base state: base
result: CartridgePistolRubber result: CartridgePistolRubber
completetime: 500 completetime: 2
materials: materials:
Plastic: 5 Plastic: 5
Steel: 5 Steel: 5
@@ -59,7 +59,7 @@
sprite: Objects/Weapons/Guns/Ammunition/Casings/ammo_casing.rsi sprite: Objects/Weapons/Guns/Ammunition/Casings/ammo_casing.rsi
state: base state: base
result: CartridgeMagnumRubber result: CartridgeMagnumRubber
completetime: 500 completetime: 2
materials: materials:
Plastic: 5 Plastic: 5
Steel: 5 Steel: 5
@@ -70,7 +70,7 @@
sprite: Objects/Weapons/Guns/Ammunition/Casings/ammo_casing.rsi sprite: Objects/Weapons/Guns/Ammunition/Casings/ammo_casing.rsi
state: base state: base
result: CartridgeClRifleRubber result: CartridgeClRifleRubber
completetime: 500 completetime: 2
materials: materials:
Plastic: 10 Plastic: 10
Steel: 5 Steel: 5
@@ -81,7 +81,7 @@
sprite: Objects/Weapons/Guns/Ammunition/Casings/ammo_casing.rsi sprite: Objects/Weapons/Guns/Ammunition/Casings/ammo_casing.rsi
state: base state: base
result: CartridgeLRifleRubber result: CartridgeLRifleRubber
completetime: 500 completetime: 2
materials: materials:
Plastic: 10 Plastic: 10
Steel: 5 Steel: 5
@@ -92,7 +92,7 @@
sprite: Objects/Weapons/Guns/Ammunition/Casings/ammo_casing.rsi sprite: Objects/Weapons/Guns/Ammunition/Casings/ammo_casing.rsi
state: base state: base
result: CartridgeSRifleRubber result: CartridgeSRifleRubber
completetime: 500 completetime: 2
materials: materials:
Plastic: 10 Plastic: 10
Steel: 5 Steel: 5
@@ -103,7 +103,7 @@
sprite: Objects/Weapons/Guns/Ammunition/Casings/ammo_casing.rsi sprite: Objects/Weapons/Guns/Ammunition/Casings/ammo_casing.rsi
state: base state: base
result: CartridgePistol result: CartridgePistol
completetime: 500 completetime: 2
materials: materials:
Steel: 10 Steel: 10
@@ -113,7 +113,7 @@
sprite: Objects/Weapons/Guns/Ammunition/Casings/shotgun_shell.rsi sprite: Objects/Weapons/Guns/Ammunition/Casings/shotgun_shell.rsi
state: base state: base
result: ShellShotgun result: ShellShotgun
completetime: 500 completetime: 2
materials: materials:
Steel: 20 Steel: 20
@@ -123,7 +123,7 @@
sprite: Objects/Weapons/Guns/Ammunition/Casings/ammo_casing.rsi sprite: Objects/Weapons/Guns/Ammunition/Casings/ammo_casing.rsi
state: base state: base
result: CartridgeMagnum result: CartridgeMagnum
completetime: 500 completetime: 2
materials: materials:
Steel: 20 Steel: 20
@@ -133,6 +133,6 @@
sprite: Objects/Weapons/Guns/Ammunition/Casings/ammo_casing.rsi sprite: Objects/Weapons/Guns/Ammunition/Casings/ammo_casing.rsi
state: base state: base
result: CartridgeLRifle result: CartridgeLRifle
completetime: 500 completetime: 2
materials: materials:
Steel: 30 Steel: 30

View File

@@ -4,7 +4,7 @@
sprite: Objects/Materials/Sheets/metal.rsi sprite: Objects/Materials/Sheets/metal.rsi
state: steel state: steel
result: SheetSteel1 result: SheetSteel1
completetime: 500 completetime: 2
materials: materials:
Steel: 100 Steel: 100
@@ -14,7 +14,7 @@
sprite: Objects/Materials/Sheets/glass.rsi sprite: Objects/Materials/Sheets/glass.rsi
state: glass state: glass
result: SheetGlass1 result: SheetGlass1
completetime: 500 completetime: 2
materials: materials:
Glass: 100 Glass: 100
@@ -24,7 +24,7 @@
sprite: Objects/Materials/Sheets/glass.rsi sprite: Objects/Materials/Sheets/glass.rsi
state: rglass state: rglass
result: SheetRGlass1 result: SheetRGlass1
completetime: 500 completetime: 2
materials: materials:
Glass: 100 Glass: 100
Steel: 50 Steel: 50
@@ -35,6 +35,6 @@
sprite: Objects/Materials/Sheets/other.rsi sprite: Objects/Materials/Sheets/other.rsi
state: plastic state: plastic
result: SheetPlastic1 result: SheetPlastic1
completetime: 500 completetime: 2
materials: materials:
Plastic: 100 Plastic: 100

View File

@@ -2,7 +2,7 @@
id: Wirecutter id: Wirecutter
icon: Objects/Tools/wirecutters.rsi/cutters-map.png icon: Objects/Tools/wirecutters.rsi/cutters-map.png
result: Wirecutter result: Wirecutter
completetime: 500 completetime: 2
materials: materials:
Steel: 200 Steel: 200
Plastic: 50 Plastic: 50
@@ -13,7 +13,7 @@
sprite: Objects/Tools/screwdriver.rsi sprite: Objects/Tools/screwdriver.rsi
state: screwdriver-map state: screwdriver-map
result: Screwdriver result: Screwdriver
completetime: 500 completetime: 2
materials: materials:
Steel: 200 Steel: 200
Plastic: 50 Plastic: 50
@@ -24,7 +24,7 @@
sprite: /Textures/Objects/Tools/welder.rsi sprite: /Textures/Objects/Tools/welder.rsi
state: icon state: icon
result: Welder result: Welder
completetime: 500 completetime: 2
materials: materials:
Steel: 400 Steel: 400
@@ -32,7 +32,7 @@
id: Wrench id: Wrench
icon: Objects/Tools/wrench.rsi/icon.png icon: Objects/Tools/wrench.rsi/icon.png
result: Wrench result: Wrench
completetime: 500 completetime: 2
materials: materials:
Steel: 200 Steel: 200
@@ -41,7 +41,7 @@
name: LV cable name: LV cable
icon: /Textures/Objects/Tools/cable-coils.rsi/coillv-30.png icon: /Textures/Objects/Tools/cable-coils.rsi/coillv-30.png
result: CableApcStack1 result: CableApcStack1
completetime: 500 completetime: 2
materials: materials:
Steel: 100 Steel: 100
@@ -50,7 +50,7 @@
name: MV cable coil name: MV cable coil
icon: /Textures/Objects/Tools/cable-coils.rsi/coilmv-30.png icon: /Textures/Objects/Tools/cable-coils.rsi/coilmv-30.png
result: CableMVStack1 result: CableMVStack1
completetime: 500 completetime: 2
materials: materials:
Steel: 150 Steel: 150
@@ -59,7 +59,7 @@
name: HV cable coil name: HV cable coil
icon: /Textures/Objects/Tools/cable-coils.rsi/coilhv-30.png icon: /Textures/Objects/Tools/cable-coils.rsi/coilhv-30.png
result: CableHVStack1 result: CableHVStack1
completetime: 500 completetime: 2
materials: materials:
Steel: 200 Steel: 200
@@ -67,7 +67,7 @@
id: Crowbar id: Crowbar
icon: Objects/Tools/crowbar.rsi/icon.png icon: Objects/Tools/crowbar.rsi/icon.png
result: Crowbar result: Crowbar
completetime: 500 completetime: 2
materials: materials:
Steel: 200 Steel: 200
@@ -75,7 +75,7 @@
id: Pickaxe id: Pickaxe
icon: Objects/Weapons/Melee/pickaxe.rsi icon: Objects/Weapons/Melee/pickaxe.rsi
result: Pickaxe result: Pickaxe
completetime: 500 completetime: 2
materials: materials:
Steel: 200 Steel: 200
Wood: 100 Wood: 100
@@ -86,7 +86,7 @@
sprite: Objects/Tools/shovel.rsi sprite: Objects/Tools/shovel.rsi
state: icon state: icon
result: Shovel result: Shovel
completetime: 500 completetime: 2
materials: materials:
Steel: 200 Steel: 200
Wood: 100 Wood: 100
@@ -97,7 +97,7 @@
sprite: Objects/Tools/multitool.rsi sprite: Objects/Tools/multitool.rsi
state: icon state: icon
result: Multitool result: Multitool
completetime: 500 completetime: 2
materials: materials:
Steel: 200 Steel: 200
Plastic: 200 Plastic: 200
@@ -108,7 +108,7 @@
sprite: Objects/Tools/drill.rsi sprite: Objects/Tools/drill.rsi
state: drill_screw state: drill_screw
result: PowerDrill result: PowerDrill
completetime: 500 completetime: 2
materials: materials:
Steel: 600 Steel: 600
Plastic: 200 Plastic: 200
@@ -119,7 +119,7 @@
sprite: Objects/Tools/rcd.rsi sprite: Objects/Tools/rcd.rsi
state: icon state: icon
result: RCD result: RCD
completetime: 1000 completetime: 4
materials: materials:
Steel: 1000 Steel: 1000
Plastic: 300 Plastic: 300
@@ -130,7 +130,7 @@
sprite: Objects/Tools/rcd.rsi sprite: Objects/Tools/rcd.rsi
state: ammo state: ammo
result: RCDAmmo result: RCDAmmo
completetime: 600 completetime: 2.4
materials: materials:
Steel: 500 Steel: 500
Plastic: 250 Plastic: 250
@@ -139,7 +139,7 @@
id: HandheldGPSBasic id: HandheldGPSBasic
icon: Objects/Devices/gps.rsi/icon.png icon: Objects/Devices/gps.rsi/icon.png
result: HandheldGPSBasic result: HandheldGPSBasic
completetime: 2000 completetime: 2
materials: materials:
Steel: 800 Steel: 800
Glass: 300 Glass: 300

Binary file not shown.

Before

Width:  |  Height:  |  Size: 390 B

View File

@@ -90,9 +90,6 @@
{ {
"name": "leather_3" "name": "leather_3"
}, },
{
"name": "liggerhide"
},
{ {
"name": "monkeyhide" "name": "monkeyhide"
}, },

Binary file not shown.

Before

Width:  |  Height:  |  Size: 685 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 656 B

View File

@@ -33,124 +33,17 @@
] ]
}, },
{ {
"name": "building_unlit", "name": "inserting",
"delays": [ "delays": [
[ [
0.5, 0.1,
0.5, 0.1,
0.5, 0.1,
0.5, 0.1,
0.5, 0.1,
0.5, 0.1,
0.5, 0.1,
0.5, 0.1
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
] ]
] ]
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 697 B

View File

@@ -20,68 +20,33 @@
"name": "building", "name": "building",
"delays": [ "delays": [
[ [
0.08, 0.16,
0.08, 0.16,
0.08, 0.16,
0.08, 0.16,
0.08, 0.16,
0.08, 0.16,
0.08, 0.16,
0.08, 0.16,
0.08, 0.16,
0.08, 0.16,
0.08, 0.16,
0.08, 0.16,
0.08, 0.16,
0.08, 0.16,
0.08, 0.16,
0.08, 0.16,
0.08, 0.16,
0.08, 0.16,
0.08, 0.16,
0.08, 0.16,
0.08, 0.16,
0.08, 0.16,
0.08, 0.16,
0.08, 0.16,
0.08 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"
} }
] ]
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 452 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 473 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 468 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 445 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 490 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 447 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 486 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 461 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 469 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 458 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 397 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 435 B

View File

@@ -37,203 +37,17 @@
] ]
}, },
{ {
"name": "building_unlit", "name": "inserting",
"delays": [ "delays": [
[ [
0.8, 0.1,
0.8, 0.1,
0.8, 0.1,
0.8, 0.1,
0.8, 0.1,
0.8, 0.1,
0.8, 0.1,
0.8, 0.1
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
] ]
] ]
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

View File

@@ -15,6 +15,21 @@
}, },
{ {
"name": "unlit" "name": "unlit"
},
{
"name": "inserting",
"delays": [
[
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1
]
]
} }
] ]
} }

View File

@@ -11,12 +11,6 @@
"name": "icon", "name": "icon",
"directions": 4 "directions": 4
}, },
{
"name": "panel"
},
{
"name": "unlit"
},
{ {
"name": "building", "name": "building",
"directions": 4, "directions": 4,

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB