Hyper convection lathes and industrial ore processor (#23202)

* Hyper-convection lathes and industrial ore processor

* balance

* gold... why not?

* review

---------

Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
This commit is contained in:
Nemanja
2023-12-30 11:18:58 -05:00
committed by GitHub
parent 88adf1ea1a
commit c3f81bfe03
25 changed files with 367 additions and 62 deletions

View File

@@ -0,0 +1,21 @@
using Content.Shared.Lathe;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
namespace Content.Server.Lathe.Components;
/// <summary>
/// This is used for a <see cref="LatheComponent"/> that releases heat into the surroundings while producing items.
/// </summary>
[RegisterComponent]
[Access(typeof(LatheSystem))]
public sealed partial class LatheHeatProducingComponent : Component
{
/// <summary>
/// The amount of energy produced each second when producing an item.
/// </summary>
[DataField, ViewVariables(VVAccess.ReadWrite)]
public float EnergyPerSecond = 40000;
[DataField(customTypeSerializer: typeof(TimeOffsetSerializer))]
public TimeSpan NextSecond;
}

View File

@@ -1,7 +1,8 @@
using System.Diagnostics.CodeAnalysis; using System.Diagnostics.CodeAnalysis;
using System.Linq; using System.Linq;
using Content.Server.Administration.Logs; 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.Lathe.Components;
using Content.Server.Materials; using Content.Server.Materials;
using Content.Server.Power.Components; using Content.Server.Power.Components;
@@ -16,7 +17,6 @@ using Content.Shared.Research.Components;
using Content.Shared.Research.Prototypes; using Content.Shared.Research.Prototypes;
using JetBrains.Annotations; using JetBrains.Annotations;
using Robust.Server.GameObjects; using Robust.Server.GameObjects;
using Robust.Shared.Audio;
using Robust.Shared.Audio.Systems; using Robust.Shared.Audio.Systems;
using Robust.Shared.Prototypes; using Robust.Shared.Prototypes;
using Robust.Shared.Timing; using Robust.Shared.Timing;
@@ -29,12 +29,18 @@ namespace Content.Server.Lathe
[Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly IGameTiming _timing = default!;
[Dependency] private readonly IPrototypeManager _proto = default!; [Dependency] private readonly IPrototypeManager _proto = default!;
[Dependency] private readonly IAdminLogManager _adminLogger = default!; [Dependency] private readonly IAdminLogManager _adminLogger = default!;
[Dependency] private readonly AtmosphereSystem _atmosphere = default!;
[Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
[Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly SharedAudioSystem _audio = default!;
[Dependency] private readonly UserInterfaceSystem _uiSys = default!; [Dependency] private readonly UserInterfaceSystem _uiSys = default!;
[Dependency] private readonly MaterialStorageSystem _materialStorage = default!; [Dependency] private readonly MaterialStorageSystem _materialStorage = default!;
[Dependency] private readonly StackSystem _stack = default!; [Dependency] private readonly StackSystem _stack = default!;
[Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly TransformSystem _transform = default!;
/// <summary>
/// Per-tick cache
/// </summary>
private readonly List<GasMixture> _environments = new();
public override void Initialize() public override void Initialize()
{ {
@@ -42,8 +48,6 @@ namespace Content.Server.Lathe
SubscribeLocalEvent<LatheComponent, GetMaterialWhitelistEvent>(OnGetWhitelist); SubscribeLocalEvent<LatheComponent, GetMaterialWhitelistEvent>(OnGetWhitelist);
SubscribeLocalEvent<LatheComponent, MapInitEvent>(OnMapInit); SubscribeLocalEvent<LatheComponent, MapInitEvent>(OnMapInit);
SubscribeLocalEvent<LatheComponent, PowerChangedEvent>(OnPowerChanged); SubscribeLocalEvent<LatheComponent, PowerChangedEvent>(OnPowerChanged);
SubscribeLocalEvent<LatheComponent, RefreshPartsEvent>(OnPartsRefresh);
SubscribeLocalEvent<LatheComponent, UpgradeExamineEvent>(OnUpgradeExamine);
SubscribeLocalEvent<LatheComponent, TechnologyDatabaseModifiedEvent>(OnDatabaseModified); SubscribeLocalEvent<LatheComponent, TechnologyDatabaseModifiedEvent>(OnDatabaseModified);
SubscribeLocalEvent<LatheComponent, ResearchRegistrationChangedEvent>(OnResearchRegistrationChanged); SubscribeLocalEvent<LatheComponent, ResearchRegistrationChangedEvent>(OnResearchRegistrationChanged);
@@ -54,6 +58,7 @@ namespace Content.Server.Lathe
SubscribeLocalEvent<LatheComponent, MaterialAmountChangedEvent>(OnMaterialAmountChanged); SubscribeLocalEvent<LatheComponent, MaterialAmountChangedEvent>(OnMaterialAmountChanged);
SubscribeLocalEvent<TechnologyDatabaseComponent, LatheGetRecipesEvent>(OnGetRecipes); SubscribeLocalEvent<TechnologyDatabaseComponent, LatheGetRecipesEvent>(OnGetRecipes);
SubscribeLocalEvent<EmagLatheRecipesComponent, LatheGetRecipesEvent>(GetEmagLatheRecipes); SubscribeLocalEvent<EmagLatheRecipesComponent, LatheGetRecipesEvent>(GetEmagLatheRecipes);
SubscribeLocalEvent<LatheHeatProducingComponent, LatheStartPrintingEvent>(OnHeatStartPrinting);
SubscribeLocalEvent<LatheComponent, LatheEjectMaterialMessage>(OnLatheEjectMessage); SubscribeLocalEvent<LatheComponent, LatheEjectMaterialMessage>(OnLatheEjectMessage);
} }
@@ -63,14 +68,14 @@ namespace Content.Server.Lathe
if (!lathe.CanEjectStoredMaterials) if (!lathe.CanEjectStoredMaterials)
return; return;
if (!_prototypeManager.TryIndex<MaterialPrototype>(message.Material, out var material)) if (!_proto.TryIndex<MaterialPrototype>(message.Material, out var material))
return; return;
var volume = 0; var volume = 0;
if (material.StackEntity != null) if (material.StackEntity != null)
{ {
var entProto = _prototypeManager.Index<EntityPrototype>(material.StackEntity); var entProto = _proto.Index<EntityPrototype>(material.StackEntity);
if (!entProto.TryGetComponent<PhysicalCompositionComponent>(out var composition)) if (!entProto.TryGetComponent<PhysicalCompositionComponent>(out var composition))
return; return;
@@ -103,6 +108,34 @@ namespace Content.Server.Lathe
if (_timing.CurTime - comp.StartTime >= comp.ProductionLength) if (_timing.CurTime - comp.StartTime >= comp.ProductionLength)
FinishProducing(uid, lathe); FinishProducing(uid, lathe);
} }
var heatQuery = EntityQueryEnumerator<LatheHeatProducingComponent, LatheProducingComponent, TransformComponent>();
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) private void OnGetWhitelist(EntityUid uid, LatheComponent component, ref GetMaterialWhitelistEvent args)
@@ -189,6 +222,9 @@ namespace Content.Server.Lathe
lathe.ProductionLength = recipe.CompleteTime * component.TimeMultiplier; lathe.ProductionLength = recipe.CompleteTime * component.TimeMultiplier;
component.CurrentRecipe = recipe; component.CurrentRecipe = recipe;
var ev = new LatheStartPrintingEvent(recipe);
RaiseLocalEvent(uid, ref ev);
_audio.PlayPvs(component.ProducingSound, uid); _audio.PlayPvs(component.ProducingSound, uid);
UpdateRunningAppearance(uid, true); UpdateRunningAppearance(uid, true);
UpdateUserInterfaceState(uid, component); 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) private void OnMaterialAmountChanged(EntityUid uid, LatheComponent component, ref MaterialAmountChangedEvent args)
{ {
UpdateUserInterfaceState(uid, component); 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) private void OnDatabaseModified(EntityUid uid, LatheComponent component, ref TechnologyDatabaseModifiedEvent args)
{ {
UpdateUserInterfaceState(uid, component); UpdateUserInterfaceState(uid, component);

View File

@@ -57,39 +57,15 @@ namespace Content.Shared.Lathe
/// <summary> /// <summary>
/// A modifier that changes how long it takes to print a recipe /// A modifier that changes how long it takes to print a recipe
/// </summary> /// </summary>
[ViewVariables(VVAccess.ReadWrite)] [DataField, ViewVariables(VVAccess.ReadWrite)]
public float TimeMultiplier = 1; public float TimeMultiplier = 1;
/// <summary>
/// The machine part that reduces how long it takes to print a recipe.
/// </summary>
[DataField]
public ProtoId<MachinePartPrototype> MachinePartPrintSpeed = "Manipulator";
/// <summary>
/// The value that is used to calculate the modified <see cref="TimeMultiplier"/>
/// </summary>
[DataField]
public float PartRatingPrintTimeMultiplier = 0.5f;
/// <summary> /// <summary>
/// A modifier that changes how much of a material is needed to print a recipe /// A modifier that changes how much of a material is needed to print a recipe
/// </summary> /// </summary>
[ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] [DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
public float MaterialUseMultiplier = 1; public float MaterialUseMultiplier = 1;
/// <summary>
/// The machine part that reduces how much material it takes to print a recipe.
/// </summary>
[DataField]
public ProtoId<MachinePartPrototype> MachinePartMaterialUse = "MatterBin";
/// <summary>
/// The value that is used to calculate the modifier <see cref="MaterialUseMultiplier"/>
/// </summary>
[DataField]
public float PartRatingMaterialUseMultiplier = DefaultPartRatingMaterialUseMultiplier;
public const float DefaultPartRatingMaterialUseMultiplier = 0.85f; public const float DefaultPartRatingMaterialUseMultiplier = 0.85f;
#endregion #endregion
} }
@@ -105,4 +81,10 @@ namespace Content.Shared.Lathe
Lathe = lathe; Lathe = lathe;
} }
} }
/// <summary>
/// Event raised on a lathe when it starts producing a recipe.
/// </summary>
[ByRefEvent]
public readonly record struct LatheStartPrintingEvent(LatheRecipePrototype Recipe);
} }

View File

@@ -12,6 +12,24 @@
materialRequirements: materialRequirements:
Glass: 1 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 - type: entity
id: ProtolatheMachineCircuitboard id: ProtolatheMachineCircuitboard
parent: BaseMachineCircuitboard parent: BaseMachineCircuitboard
@@ -29,6 +47,26 @@
DefaultPrototype: Beaker DefaultPrototype: Beaker
ExamineName: Glass 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 - type: entity
id: SecurityTechFabCircuitboard id: SecurityTechFabCircuitboard
parent: BaseMachineCircuitboard parent: BaseMachineCircuitboard
@@ -873,6 +911,21 @@
materialRequirements: materialRequirements:
Glass: 1 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 - type: entity
id: SheetifierMachineCircuitboard id: SheetifierMachineCircuitboard
parent: BaseMachineCircuitboard parent: BaseMachineCircuitboard

View File

@@ -180,6 +180,21 @@
- MagazineBoxLightRifleUranium - MagazineBoxLightRifleUranium
- MagazineBoxRifleUranium - 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 - type: entity
id: Protolathe id: Protolathe
parent: BaseLathe parent: BaseLathe
@@ -296,6 +311,21 @@
- WeaponLaserCannon - WeaponLaserCannon
- WeaponXrayCannon - 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 - type: entity
id: CircuitImprinter id: CircuitImprinter
parent: BaseLathe parent: BaseLathe
@@ -320,6 +350,11 @@
idleState: icon idleState: icon
runningState: building runningState: building
staticRecipes: staticRecipes:
- ProtolatheMachineCircuitboard
- AutolatheMachineCircuitboard
- CircuitImprinterMachineCircuitboard
- OreProcessorMachineCircuitboard
- MaterialReclaimerMachineCircuitboard
- ElectrolysisUnitMachineCircuitboard - ElectrolysisUnitMachineCircuitboard
- CentrifugeMachineCircuitboard - CentrifugeMachineCircuitboard
- CondenserMachineCircuitBoard - CondenserMachineCircuitBoard
@@ -345,8 +380,8 @@
- SolarControlComputerCircuitboard - SolarControlComputerCircuitboard
- SolarTrackerElectronics - SolarTrackerElectronics
- PowerComputerCircuitboard - PowerComputerCircuitboard
- AutolatheMachineCircuitboard - AutolatheHyperConvectionMachineCircuitboard
- ProtolatheMachineCircuitboard - ProtolatheHyperConvectionMachineCircuitboard
- ReagentGrinderMachineCircuitboard - ReagentGrinderMachineCircuitboard
- HotplateMachineCircuitboard - HotplateMachineCircuitboard
- MicrowaveMachineCircuitboard - MicrowaveMachineCircuitboard
@@ -356,13 +391,11 @@
- UniformPrinterMachineCircuitboard - UniformPrinterMachineCircuitboard
- ShuttleConsoleCircuitboard - ShuttleConsoleCircuitboard
- RadarConsoleCircuitboard - RadarConsoleCircuitboard
- CircuitImprinterMachineCircuitboard
- TechDiskComputerCircuitboard - TechDiskComputerCircuitboard
- DawInstrumentMachineCircuitboard - DawInstrumentMachineCircuitboard
- CloningConsoleComputerCircuitboard - CloningConsoleComputerCircuitboard
- StasisBedMachineCircuitboard - StasisBedMachineCircuitboard
- MaterialReclaimerMachineCircuitboard - OreProcessorIndustrialMachineCircuitboard
- OreProcessorMachineCircuitboard
- CargoTelepadMachineCircuitboard - CargoTelepadMachineCircuitboard
- RipleyCentralElectronics - RipleyCentralElectronics
- RipleyPeripheralsElectronics - RipleyPeripheralsElectronics
@@ -925,6 +958,20 @@
- IngotSilver30 - IngotSilver30
- MaterialBananium10 - 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 - type: entity
parent: BaseLathe parent: BaseLathe
id: Sheetifier id: Sheetifier

View File

@@ -188,6 +188,24 @@
Steel: 100 Steel: 100
Glass: 900 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 - type: latheRecipe
id: CircuitImprinterMachineCircuitboard id: CircuitImprinterMachineCircuitboard
result: CircuitImprinterMachineCircuitboard result: CircuitImprinterMachineCircuitboard
@@ -390,6 +408,14 @@
materials: materials:
Steel: 100 Steel: 100
Glass: 900 Glass: 900
- type: latheRecipe
id: OreProcessorIndustrialMachineCircuitboard
result: OreProcessorIndustrialMachineCircuitboard
completetime: 4
materials:
Steel: 100
Glass: 900
Gold: 100 Gold: 100
- type: latheRecipe - type: latheRecipe

View File

@@ -12,7 +12,7 @@
recipeUnlocks: recipeUnlocks:
- MiningDrill - MiningDrill
- BorgModuleMining - BorgModuleMining
- OreProcessorMachineCircuitboard - OreProcessorIndustrialMachineCircuitboard
- OreBagOfHolding - OreBagOfHolding
- type: technology - type: technology
@@ -45,16 +45,14 @@
id: IndustrialEngineering id: IndustrialEngineering
name: research-technology-industrial-engineering name: research-technology-industrial-engineering
icon: icon:
sprite: Structures/Machines/protolathe.rsi sprite: Structures/Machines/protolathe_hypercon.rsi
state: icon state: building
discipline: Industrial discipline: Industrial
tier: 1 tier: 1
cost: 7500 cost: 10000
recipeUnlocks: recipeUnlocks:
- ProtolatheMachineCircuitboard - AutolatheHyperConvectionMachineCircuitboard
- AutolatheMachineCircuitboard - ProtolatheHyperConvectionMachineCircuitboard
- CircuitImprinterMachineCircuitboard
- MaterialReclaimerMachineCircuitboard
- SheetifierMachineCircuitboard - SheetifierMachineCircuitboard
- type: technology - type: technology

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 711 B

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 470 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 903 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 223 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 652 B

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 761 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 202 B