diff --git a/Content.Server/Lathe/Components/LatheHeatProducingComponent.cs b/Content.Server/Lathe/Components/LatheHeatProducingComponent.cs
new file mode 100644
index 0000000000..ea5912ad2f
--- /dev/null
+++ b/Content.Server/Lathe/Components/LatheHeatProducingComponent.cs
@@ -0,0 +1,21 @@
+using Content.Shared.Lathe;
+using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
+
+namespace Content.Server.Lathe.Components;
+
+///
+/// This is used for a that releases heat into the surroundings while producing items.
+///
+[RegisterComponent]
+[Access(typeof(LatheSystem))]
+public sealed partial class LatheHeatProducingComponent : Component
+{
+ ///
+ /// The amount of energy produced each second when producing an item.
+ ///
+ [DataField, ViewVariables(VVAccess.ReadWrite)]
+ public float EnergyPerSecond = 40000;
+
+ [DataField(customTypeSerializer: typeof(TimeOffsetSerializer))]
+ public TimeSpan NextSecond;
+}
diff --git a/Content.Server/Lathe/LatheSystem.cs b/Content.Server/Lathe/LatheSystem.cs
index c6614fcd4f..a262c1a69f 100644
--- a/Content.Server/Lathe/LatheSystem.cs
+++ b/Content.Server/Lathe/LatheSystem.cs
@@ -1,7 +1,8 @@
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using Content.Server.Administration.Logs;
-using Content.Server.Construction;
+using Content.Server.Atmos;
+using Content.Server.Atmos.EntitySystems;
using Content.Server.Lathe.Components;
using Content.Server.Materials;
using Content.Server.Power.Components;
@@ -16,7 +17,6 @@ using Content.Shared.Research.Components;
using Content.Shared.Research.Prototypes;
using JetBrains.Annotations;
using Robust.Server.GameObjects;
-using Robust.Shared.Audio;
using Robust.Shared.Audio.Systems;
using Robust.Shared.Prototypes;
using Robust.Shared.Timing;
@@ -29,12 +29,18 @@ namespace Content.Server.Lathe
[Dependency] private readonly IGameTiming _timing = default!;
[Dependency] private readonly IPrototypeManager _proto = default!;
[Dependency] private readonly IAdminLogManager _adminLogger = default!;
+ [Dependency] private readonly AtmosphereSystem _atmosphere = default!;
[Dependency] private readonly SharedAppearanceSystem _appearance = default!;
[Dependency] private readonly SharedAudioSystem _audio = default!;
[Dependency] private readonly UserInterfaceSystem _uiSys = default!;
[Dependency] private readonly MaterialStorageSystem _materialStorage = default!;
[Dependency] private readonly StackSystem _stack = default!;
- [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
+ [Dependency] private readonly TransformSystem _transform = default!;
+
+ ///
+ /// Per-tick cache
+ ///
+ private readonly List _environments = new();
public override void Initialize()
{
@@ -42,8 +48,6 @@ namespace Content.Server.Lathe
SubscribeLocalEvent(OnGetWhitelist);
SubscribeLocalEvent(OnMapInit);
SubscribeLocalEvent(OnPowerChanged);
- SubscribeLocalEvent(OnPartsRefresh);
- SubscribeLocalEvent(OnUpgradeExamine);
SubscribeLocalEvent(OnDatabaseModified);
SubscribeLocalEvent(OnResearchRegistrationChanged);
@@ -54,6 +58,7 @@ namespace Content.Server.Lathe
SubscribeLocalEvent(OnMaterialAmountChanged);
SubscribeLocalEvent(OnGetRecipes);
SubscribeLocalEvent(GetEmagLatheRecipes);
+ SubscribeLocalEvent(OnHeatStartPrinting);
SubscribeLocalEvent(OnLatheEjectMessage);
}
@@ -63,14 +68,14 @@ namespace Content.Server.Lathe
if (!lathe.CanEjectStoredMaterials)
return;
- if (!_prototypeManager.TryIndex(message.Material, out var material))
+ if (!_proto.TryIndex(message.Material, out var material))
return;
var volume = 0;
if (material.StackEntity != null)
{
- var entProto = _prototypeManager.Index(material.StackEntity);
+ var entProto = _proto.Index(material.StackEntity);
if (!entProto.TryGetComponent(out var composition))
return;
@@ -103,6 +108,34 @@ namespace Content.Server.Lathe
if (_timing.CurTime - comp.StartTime >= comp.ProductionLength)
FinishProducing(uid, lathe);
}
+
+ var heatQuery = EntityQueryEnumerator();
+ while (heatQuery.MoveNext(out var uid, out var heatComp, out _, out var xform))
+ {
+ if (_timing.CurTime < heatComp.NextSecond)
+ continue;
+ heatComp.NextSecond += TimeSpan.FromSeconds(1);
+
+ var position = _transform.GetGridTilePositionOrDefault((uid,xform));
+ _environments.Clear();
+
+ if (_atmosphere.GetTileMixture(xform.GridUid, xform.MapUid, position, true) is { } tileMix)
+ _environments.Add(tileMix);
+
+ if (xform.GridUid != null)
+ {
+ _environments.AddRange(_atmosphere.GetAdjacentTileMixtures(xform.GridUid.Value, position, false, true));
+ }
+
+ if (_environments.Count > 0)
+ {
+ var heatPerTile = heatComp.EnergyPerSecond / _environments.Count;
+ foreach (var env in _environments)
+ {
+ _atmosphere.AddHeat(env, heatPerTile);
+ }
+ }
+ }
}
private void OnGetWhitelist(EntityUid uid, LatheComponent component, ref GetMaterialWhitelistEvent args)
@@ -189,6 +222,9 @@ namespace Content.Server.Lathe
lathe.ProductionLength = recipe.CompleteTime * component.TimeMultiplier;
component.CurrentRecipe = recipe;
+ var ev = new LatheStartPrintingEvent(recipe);
+ RaiseLocalEvent(uid, ref ev);
+
_audio.PlayPvs(component.ProducingSound, uid);
UpdateRunningAppearance(uid, true);
UpdateUserInterfaceState(uid, component);
@@ -260,6 +296,11 @@ namespace Content.Server.Lathe
}
}
+ private void OnHeatStartPrinting(EntityUid uid, LatheHeatProducingComponent component, LatheStartPrintingEvent args)
+ {
+ component.NextSecond = _timing.CurTime;
+ }
+
private void OnMaterialAmountChanged(EntityUid uid, LatheComponent component, ref MaterialAmountChangedEvent args)
{
UpdateUserInterfaceState(uid, component);
@@ -300,22 +341,6 @@ namespace Content.Server.Lathe
}
}
- private void OnPartsRefresh(EntityUid uid, LatheComponent component, RefreshPartsEvent args)
- {
- var printTimeRating = args.PartRatings[component.MachinePartPrintSpeed];
- var materialUseRating = args.PartRatings[component.MachinePartMaterialUse];
-
- component.TimeMultiplier = MathF.Pow(component.PartRatingPrintTimeMultiplier, printTimeRating - 1);
- component.MaterialUseMultiplier = MathF.Pow(component.PartRatingMaterialUseMultiplier, materialUseRating - 1);
- Dirty(component);
- }
-
- private void OnUpgradeExamine(EntityUid uid, LatheComponent component, UpgradeExamineEvent args)
- {
- args.AddPercentageUpgrade("lathe-component-upgrade-speed", 1 / component.TimeMultiplier);
- args.AddPercentageUpgrade("lathe-component-upgrade-material-use", component.MaterialUseMultiplier);
- }
-
private void OnDatabaseModified(EntityUid uid, LatheComponent component, ref TechnologyDatabaseModifiedEvent args)
{
UpdateUserInterfaceState(uid, component);
diff --git a/Content.Shared/Lathe/LatheComponent.cs b/Content.Shared/Lathe/LatheComponent.cs
index 410db3c86f..8607cf48e2 100644
--- a/Content.Shared/Lathe/LatheComponent.cs
+++ b/Content.Shared/Lathe/LatheComponent.cs
@@ -57,39 +57,15 @@ namespace Content.Shared.Lathe
///
/// A modifier that changes how long it takes to print a recipe
///
- [ViewVariables(VVAccess.ReadWrite)]
+ [DataField, ViewVariables(VVAccess.ReadWrite)]
public float TimeMultiplier = 1;
- ///
- /// The machine part that reduces how long it takes to print a recipe.
- ///
- [DataField]
- public ProtoId MachinePartPrintSpeed = "Manipulator";
-
- ///
- /// The value that is used to calculate the modified
- ///
- [DataField]
- public float PartRatingPrintTimeMultiplier = 0.5f;
-
///
/// A modifier that changes how much of a material is needed to print a recipe
///
- [ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
+ [DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
public float MaterialUseMultiplier = 1;
- ///
- /// The machine part that reduces how much material it takes to print a recipe.
- ///
- [DataField]
- public ProtoId MachinePartMaterialUse = "MatterBin";
-
- ///
- /// The value that is used to calculate the modifier
- ///
- [DataField]
- public float PartRatingMaterialUseMultiplier = DefaultPartRatingMaterialUseMultiplier;
-
public const float DefaultPartRatingMaterialUseMultiplier = 0.85f;
#endregion
}
@@ -105,4 +81,10 @@ namespace Content.Shared.Lathe
Lathe = lathe;
}
}
+
+ ///
+ /// Event raised on a lathe when it starts producing a recipe.
+ ///
+ [ByRefEvent]
+ public readonly record struct LatheStartPrintingEvent(LatheRecipePrototype Recipe);
}
diff --git a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml
index 221dbddbe5..d9a0ef573b 100644
--- a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml
+++ b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml
@@ -12,6 +12,24 @@
materialRequirements:
Glass: 1
+- type: entity
+ parent: BaseMachineCircuitboard
+ id: AutolatheHyperConvectionMachineCircuitboard
+ name: hyper convection autolathe machine board
+ description: A machine printed circuit board for a hyper convection autolathe
+ components:
+ - type: MachineBoard
+ prototype: AutolatheHyperConvection
+ requirements:
+ MatterBin: 3
+ materialRequirements:
+ Glass: 1
+ tagRequirements:
+ Igniter:
+ Amount: 1
+ DefaultPrototype: Igniter
+ ExamineName: Igniter
+
- type: entity
id: ProtolatheMachineCircuitboard
parent: BaseMachineCircuitboard
@@ -29,6 +47,26 @@
DefaultPrototype: Beaker
ExamineName: Glass Beaker
+- type: entity
+ parent: BaseMachineCircuitboard
+ id: ProtolatheHyperConvectionMachineCircuitboard
+ name: hyper convection protolathe machine board
+ description: A machine printed circuit board for a hyper convection protolathe.
+ components:
+ - type: MachineBoard
+ prototype: ProtolatheHyperConvection
+ requirements:
+ MatterBin: 2
+ tagRequirements:
+ GlassBeaker:
+ Amount: 2
+ DefaultPrototype: Beaker
+ ExamineName: Glass Beaker
+ Igniter:
+ Amount: 1
+ DefaultPrototype: Igniter
+ ExamineName: Igniter
+
- type: entity
id: SecurityTechFabCircuitboard
parent: BaseMachineCircuitboard
@@ -873,6 +911,21 @@
materialRequirements:
Glass: 1
+- type: entity
+ parent: BaseMachineCircuitboard
+ id: OreProcessorIndustrialMachineCircuitboard
+ name: industrial ore processor machine board
+ components:
+ - type: Sprite
+ state: supply
+ - type: MachineBoard
+ prototype: OreProcessorIndustrial
+ requirements:
+ MatterBin: 1
+ Manipulator: 3
+ materialRequirements:
+ Glass: 1
+
- type: entity
id: SheetifierMachineCircuitboard
parent: BaseMachineCircuitboard
diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml
index 76e6aaf76a..7472258f75 100644
--- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml
+++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml
@@ -180,6 +180,21 @@
- MagazineBoxLightRifleUranium
- MagazineBoxRifleUranium
+- type: entity
+ id: AutolatheHyperConvection
+ parent: Autolathe
+ name: hyper convection autolathe
+ description: A highly-experimental autolathe that harnesses the power of extreme heat to slowly create objects more cost-effectively.
+ components:
+ - type: Sprite
+ sprite: Structures/Machines/autolathe_hypercon.rsi
+ - type: Lathe
+ materialUseMultiplier: 0.70
+ timeMultiplier: 1.5
+ - type: LatheHeatProducing
+ - type: Machine
+ board: AutolatheHyperConvectionMachineCircuitboard
+
- type: entity
id: Protolathe
parent: BaseLathe
@@ -296,6 +311,21 @@
- WeaponLaserCannon
- WeaponXrayCannon
+- type: entity
+ id: ProtolatheHyperConvection
+ parent: Protolathe
+ name: hyper convection protolathe
+ description: A highly-experimental protolathe that harnesses the power of extreme heat to slowly create objects more cost-effectively.
+ components:
+ - type: Sprite
+ sprite: Structures/Machines/protolathe_hypercon.rsi
+ - type: Lathe
+ materialUseMultiplier: 0.70
+ timeMultiplier: 1.5
+ - type: LatheHeatProducing
+ - type: Machine
+ board: ProtolatheHyperConvectionMachineCircuitboard
+
- type: entity
id: CircuitImprinter
parent: BaseLathe
@@ -320,6 +350,11 @@
idleState: icon
runningState: building
staticRecipes:
+ - ProtolatheMachineCircuitboard
+ - AutolatheMachineCircuitboard
+ - CircuitImprinterMachineCircuitboard
+ - OreProcessorMachineCircuitboard
+ - MaterialReclaimerMachineCircuitboard
- ElectrolysisUnitMachineCircuitboard
- CentrifugeMachineCircuitboard
- CondenserMachineCircuitBoard
@@ -345,8 +380,8 @@
- SolarControlComputerCircuitboard
- SolarTrackerElectronics
- PowerComputerCircuitboard
- - AutolatheMachineCircuitboard
- - ProtolatheMachineCircuitboard
+ - AutolatheHyperConvectionMachineCircuitboard
+ - ProtolatheHyperConvectionMachineCircuitboard
- ReagentGrinderMachineCircuitboard
- HotplateMachineCircuitboard
- MicrowaveMachineCircuitboard
@@ -356,13 +391,11 @@
- UniformPrinterMachineCircuitboard
- ShuttleConsoleCircuitboard
- RadarConsoleCircuitboard
- - CircuitImprinterMachineCircuitboard
- TechDiskComputerCircuitboard
- DawInstrumentMachineCircuitboard
- CloningConsoleComputerCircuitboard
- StasisBedMachineCircuitboard
- - MaterialReclaimerMachineCircuitboard
- - OreProcessorMachineCircuitboard
+ - OreProcessorIndustrialMachineCircuitboard
- CargoTelepadMachineCircuitboard
- RipleyCentralElectronics
- RipleyPeripheralsElectronics
@@ -925,6 +958,20 @@
- IngotSilver30
- MaterialBananium10
+- type: entity
+ parent: OreProcessor
+ id: OreProcessorIndustrial
+ name: industrial ore processor
+ description: An ore processor specifically designed for mass-producing metals in industrial applications.
+ components:
+ - type: Sprite
+ sprite: Structures/Machines/ore_processor_industrial.rsi
+ - type: Machine
+ board: OreProcessorIndustrialMachineCircuitboard
+ - type: Lathe
+ materialUseMultiplier: 0.75
+ timeMultiplier: 0.5
+
- type: entity
parent: BaseLathe
id: Sheetifier
diff --git a/Resources/Prototypes/Recipes/Lathes/electronics.yml b/Resources/Prototypes/Recipes/Lathes/electronics.yml
index b4b05a8a01..340047856c 100644
--- a/Resources/Prototypes/Recipes/Lathes/electronics.yml
+++ b/Resources/Prototypes/Recipes/Lathes/electronics.yml
@@ -188,6 +188,24 @@
Steel: 100
Glass: 900
+- type: latheRecipe
+ id: AutolatheHyperConvectionMachineCircuitboard
+ result: AutolatheHyperConvectionMachineCircuitboard
+ completetime: 4
+ materials:
+ Steel: 100
+ Glass: 900
+ Gold: 100
+
+- type: latheRecipe
+ id: ProtolatheHyperConvectionMachineCircuitboard
+ result: ProtolatheHyperConvectionMachineCircuitboard
+ completetime: 4
+ materials:
+ Steel: 100
+ Glass: 900
+ Gold: 100
+
- type: latheRecipe
id: CircuitImprinterMachineCircuitboard
result: CircuitImprinterMachineCircuitboard
@@ -390,6 +408,14 @@
materials:
Steel: 100
Glass: 900
+
+- type: latheRecipe
+ id: OreProcessorIndustrialMachineCircuitboard
+ result: OreProcessorIndustrialMachineCircuitboard
+ completetime: 4
+ materials:
+ Steel: 100
+ Glass: 900
Gold: 100
- type: latheRecipe
diff --git a/Resources/Prototypes/Research/industrial.yml b/Resources/Prototypes/Research/industrial.yml
index e460957b80..ef4df8370b 100644
--- a/Resources/Prototypes/Research/industrial.yml
+++ b/Resources/Prototypes/Research/industrial.yml
@@ -12,7 +12,7 @@
recipeUnlocks:
- MiningDrill
- BorgModuleMining
- - OreProcessorMachineCircuitboard
+ - OreProcessorIndustrialMachineCircuitboard
- OreBagOfHolding
- type: technology
@@ -45,16 +45,14 @@
id: IndustrialEngineering
name: research-technology-industrial-engineering
icon:
- sprite: Structures/Machines/protolathe.rsi
- state: icon
+ sprite: Structures/Machines/protolathe_hypercon.rsi
+ state: building
discipline: Industrial
tier: 1
- cost: 7500
+ cost: 10000
recipeUnlocks:
- - ProtolatheMachineCircuitboard
- - AutolatheMachineCircuitboard
- - CircuitImprinterMachineCircuitboard
- - MaterialReclaimerMachineCircuitboard
+ - AutolatheHyperConvectionMachineCircuitboard
+ - ProtolatheHyperConvectionMachineCircuitboard
- SheetifierMachineCircuitboard
- type: technology
diff --git a/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/building.png b/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/building.png
new file mode 100644
index 0000000000..cb1abc7aa8
Binary files /dev/null and b/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/building.png differ
diff --git a/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/icon.png b/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/icon.png
new file mode 100644
index 0000000000..1cd22bea85
Binary files /dev/null and b/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/icon.png differ
diff --git a/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/inserting.png b/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/inserting.png
new file mode 100644
index 0000000000..8c927b29ce
Binary files /dev/null and b/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/inserting.png differ
diff --git a/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/meta.json b/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/meta.json
new file mode 100644
index 0000000000..3dfb0685f2
--- /dev/null
+++ b/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/meta.json
@@ -0,0 +1,51 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Created by UbaserB (GitHub) for SS14",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "panel"
+ },
+ {
+ "name": "unlit"
+ },
+ {
+ "name": "building",
+ "delays": [
+ [
+ 0.5,
+ 0.5,
+ 0.5,
+ 0.5,
+ 0.5,
+ 0.5,
+ 0.5,
+ 0.5,
+ 0.5
+ ]
+ ]
+ },
+ {
+ "name": "inserting",
+ "delays": [
+ [
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ]
+ ]
+ }
+ ]
+}
diff --git a/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/panel.png b/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/panel.png
new file mode 100644
index 0000000000..1e07131c13
Binary files /dev/null and b/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/panel.png differ
diff --git a/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/unlit.png b/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/unlit.png
new file mode 100644
index 0000000000..f837d09c96
Binary files /dev/null and b/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/unlit.png differ
diff --git a/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/building.png b/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/building.png
new file mode 100644
index 0000000000..da9b15a934
Binary files /dev/null and b/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/building.png differ
diff --git a/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/icon.png b/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/icon.png
new file mode 100644
index 0000000000..adeaf7b727
Binary files /dev/null and b/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/icon.png differ
diff --git a/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/inserting.png b/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/inserting.png
new file mode 100644
index 0000000000..568e62f9a2
Binary files /dev/null and b/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/inserting.png differ
diff --git a/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/meta.json b/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/meta.json
new file mode 100644
index 0000000000..30361f88d6
--- /dev/null
+++ b/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/meta.json
@@ -0,0 +1,50 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Created by UbaserB (GitHub) for SS14, based on ore processor sprite from tgstation",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "inserting",
+ "delays": [
+ [
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 5
+ ]
+ ]
+ },
+ {
+ "name": "building",
+ "delays": [
+ [
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ]
+ ]
+ },
+ {
+ "name": "icon"
+ },
+ {
+ "name": "panel"
+ },
+ {
+ "name": "unlit"
+ }
+ ]
+}
diff --git a/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/panel.png b/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/panel.png
new file mode 100644
index 0000000000..eebe721853
Binary files /dev/null and b/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/panel.png differ
diff --git a/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/unlit.png b/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/unlit.png
new file mode 100644
index 0000000000..3b3190d1e7
Binary files /dev/null and b/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/unlit.png differ
diff --git a/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/building.png b/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/building.png
new file mode 100644
index 0000000000..8cb2114545
Binary files /dev/null and b/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/building.png differ
diff --git a/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/icon.png b/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/icon.png
new file mode 100644
index 0000000000..1ac31a73be
Binary files /dev/null and b/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/icon.png differ
diff --git a/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/inserting.png b/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/inserting.png
new file mode 100644
index 0000000000..752cad34ba
Binary files /dev/null and b/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/inserting.png differ
diff --git a/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/meta.json b/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/meta.json
new file mode 100644
index 0000000000..b0326326f9
--- /dev/null
+++ b/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/meta.json
@@ -0,0 +1,52 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Created by UbaserB (GitHub) for SS14",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "panel"
+ },
+ {
+ "name": "unlit"
+ },
+ {
+ "name": "building",
+ "delays": [
+ [
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0
+ ]
+ ]
+ },
+ {
+ "name": "inserting",
+ "delays": [
+ [
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ]
+ ]
+ }
+ ]
+}
diff --git a/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/panel.png b/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/panel.png
new file mode 100644
index 0000000000..1d2d002032
Binary files /dev/null and b/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/panel.png differ
diff --git a/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/unlit.png b/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/unlit.png
new file mode 100644
index 0000000000..dd7d0d8643
Binary files /dev/null and b/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/unlit.png differ