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