diff --git a/Content.Server/Anomaly/Components/AnomalyCoreComponent.cs b/Content.Server/Anomaly/Components/AnomalyCoreComponent.cs
new file mode 100644
index 0000000000..f86f95c71a
--- /dev/null
+++ b/Content.Server/Anomaly/Components/AnomalyCoreComponent.cs
@@ -0,0 +1,42 @@
+using Content.Server.Anomaly.Effects;
+using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
+
+namespace Content.Server.Anomaly.Components;
+
+///
+/// This component exists for a limited time, and after it expires it modifies the entity, greatly reducing its value and changing its visuals
+///
+[RegisterComponent, Access(typeof(AnomalyCoreSystem))]
+public sealed partial class AnomalyCoreComponent : Component
+{
+
+ ///
+ /// Amount of time required for the core to decompose into an inert core
+ ///
+ [DataField, ViewVariables(VVAccess.ReadWrite)]
+ public double TimeToDecay = 600;
+
+ ///
+ /// The moment of core decay. It is set during entity initialization.
+ ///
+ [DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), ViewVariables(VVAccess.ReadWrite)]
+ public TimeSpan DecayMoment;
+
+ ///
+ /// The starting value of the entity.
+ ///
+ [DataField, ViewVariables(VVAccess.ReadWrite)]
+ public double StartPrice = 10000;
+
+ ///
+ /// The value of the object sought during decaying
+ ///
+ [DataField, ViewVariables(VVAccess.ReadWrite)]
+ public double EndPrice = 200;
+
+ ///
+ /// Has the core decayed?
+ ///
+ [DataField, ViewVariables(VVAccess.ReadWrite)]
+ public bool IsDecayed;
+}
diff --git a/Content.Server/Anomaly/Effects/AnomalyCoreSystem.cs b/Content.Server/Anomaly/Effects/AnomalyCoreSystem.cs
new file mode 100644
index 0000000000..eb45101373
--- /dev/null
+++ b/Content.Server/Anomaly/Effects/AnomalyCoreSystem.cs
@@ -0,0 +1,56 @@
+using Content.Server.Anomaly.Components;
+using Content.Server.Cargo.Systems;
+using Content.Shared.Anomaly;
+using Robust.Shared.Timing;
+
+namespace Content.Server.Anomaly.Effects;
+
+///
+/// This component reduces the value of the entity during decay
+///
+public sealed class AnomalyCoreSystem : EntitySystem
+{
+ [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
+ [Dependency] private readonly IGameTiming _gameTiming = default!;
+
+ public override void Initialize()
+ {
+ SubscribeLocalEvent(OnMapInit);
+ SubscribeLocalEvent(OnGetPrice);
+ }
+
+ private void OnMapInit(Entity core, ref MapInitEvent args)
+ {
+ core.Comp.DecayMoment = _gameTiming.CurTime + TimeSpan.FromSeconds(core.Comp.TimeToDecay);
+ }
+
+ public override void Update(float frameTime)
+ {
+ base.Update(frameTime);
+
+ var query = EntityQueryEnumerator();
+ while (query.MoveNext(out var uid, out var component))
+ {
+ if (component.IsDecayed)
+ continue;
+
+ //When time runs out, we completely decompose
+ if (component.DecayMoment < _gameTiming.CurTime)
+ Decay(uid, component);
+ }
+ }
+ private void OnGetPrice(Entity core, ref PriceCalculationEvent args)
+ {
+ var timeLeft = core.Comp.DecayMoment - _gameTiming.CurTime;
+ var lerp = (double) (timeLeft.TotalSeconds / core.Comp.TimeToDecay);
+ lerp = Math.Clamp(lerp, 0, 1);
+
+ args.Price = MathHelper.Lerp(core.Comp.EndPrice, core.Comp.StartPrice, lerp);
+ }
+
+ private void Decay(EntityUid uid, AnomalyCoreComponent component)
+ {
+ _appearance.SetData(uid, AnomalyCoreVisuals.Decaying, false);
+ component.IsDecayed = true;
+ }
+}
diff --git a/Content.Shared/Anomaly/AnomalyCoreVisuals.cs b/Content.Shared/Anomaly/AnomalyCoreVisuals.cs
new file mode 100644
index 0000000000..f15ab58e0c
--- /dev/null
+++ b/Content.Shared/Anomaly/AnomalyCoreVisuals.cs
@@ -0,0 +1,9 @@
+using Robust.Shared.Serialization;
+
+namespace Content.Shared.Anomaly;
+
+[Serializable, NetSerializable]
+public enum AnomalyCoreVisuals : byte
+{
+ Decaying
+}
diff --git a/Content.Shared/Anomaly/Components/AnomalyComponent.cs b/Content.Shared/Anomaly/Components/AnomalyComponent.cs
index 07fc603e26..cf3ba75aaa 100644
--- a/Content.Shared/Anomaly/Components/AnomalyComponent.cs
+++ b/Content.Shared/Anomaly/Components/AnomalyComponent.cs
@@ -2,6 +2,7 @@ using System.Numerics;
using Content.Shared.Damage;
using Robust.Shared.Audio;
using Robust.Shared.GameStates;
+using Robust.Shared.Prototypes;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
namespace Content.Shared.Anomaly.Components;
@@ -208,6 +209,18 @@ public sealed partial class AnomalyComponent : Component
[DataField]
public SoundSpecifier AnomalyContactDamageSound = new SoundPathSpecifier("/Audio/Effects/lightburn.ogg");
+ ///
+ /// A prototype entity that appears when an anomaly supercrit collapse.
+ ///
+ [DataField, ViewVariables(VVAccess.ReadWrite)]
+ public EntProtoId? CorePrototype;
+
+ ///
+ /// A prototype entity that appears when an anomaly decays.
+ ///
+ [DataField, ViewVariables(VVAccess.ReadWrite)]
+ public EntProtoId? CoreInertPrototype;
+
#region Floating Animation
///
/// How long it takes to go from the bottom of the animation to the top.
diff --git a/Content.Shared/Anomaly/SharedAnomalySystem.cs b/Content.Shared/Anomaly/SharedAnomalySystem.cs
index 4b2b3ada70..ca77544a15 100644
--- a/Content.Shared/Anomaly/SharedAnomalySystem.cs
+++ b/Content.Shared/Anomaly/SharedAnomalySystem.cs
@@ -1,4 +1,4 @@
-using Content.Shared.Administration.Logs;
+using Content.Shared.Administration.Logs;
using Content.Shared.Anomaly.Components;
using Content.Shared.Damage;
using Content.Shared.Database;
@@ -181,6 +181,9 @@ public abstract class SharedAnomalySystem : EntitySystem
if (Terminating(uid) || _net.IsClient)
return;
+
+ Spawn(supercritical ? component.CorePrototype : component.CoreInertPrototype, Transform(uid).Coordinates);
+
QueueDel(uid);
}
diff --git a/Resources/Prototypes/Entities/Structures/Specific/anomalies.yml b/Resources/Prototypes/Entities/Structures/Specific/Anomaly/anomalies.yml
similarity index 91%
rename from Resources/Prototypes/Entities/Structures/Specific/anomalies.yml
rename to Resources/Prototypes/Entities/Structures/Specific/Anomaly/anomalies.yml
index 736834fa2f..3526216c13 100644
--- a/Resources/Prototypes/Entities/Structures/Specific/anomalies.yml
+++ b/Resources/Prototypes/Entities/Structures/Specific/Anomaly/anomalies.yml
@@ -53,6 +53,9 @@
parent: BaseAnomaly
suffix: Pyroclastic
components:
+ - type: Anomaly
+ corePrototype: AnomalyCorePyroclastic
+ coreInertPrototype: AnomalyCorePyroclasticInert
- type: Sprite
layers:
- state: anom1
@@ -81,6 +84,9 @@
parent: BaseAnomaly
suffix: Gravity
components:
+ - type: Anomaly
+ corePrototype: AnomalyCoreGravity
+ coreInertPrototype: AnomalyCoreGravityInert
- type: Sprite
layers:
- state: anom2
@@ -102,6 +108,9 @@
parent: BaseAnomaly
suffix: Electricity
components:
+ - type: Anomaly
+ corePrototype: AnomalyCoreElectricity
+ coreInertPrototype: AnomalyCoreElectricityInert
- type: Sprite
layers:
- state: anom3
@@ -122,6 +131,9 @@
parent: BaseAnomaly
suffix: Flesh
components:
+ - type: Anomaly
+ corePrototype: AnomalyCoreFlesh
+ coreInertPrototype: AnomalyCoreFleshInert
- type: Sprite
layers:
- state: anom5
@@ -186,6 +198,8 @@
- WallLayer
hard: false
- type: Anomaly
+ corePrototype: AnomalyCoreBluespace
+ coreInertPrototype: AnomalyCoreBluespaceInert
pulseSound:
collection: RadiationPulse
params:
@@ -214,6 +228,8 @@
color: "#befaff"
castShadows: false
- type: Anomaly
+ corePrototype: AnomalyCoreIce
+ coreInertPrototype: AnomalyCoreIceInert
anomalyContactDamage:
types:
Cold: 10
@@ -238,6 +254,9 @@
parent: BaseAnomaly
suffix: Rock
components:
+ - type: Anomaly
+ corePrototype: AnomalyCoreRock
+ coreInertPrototype: AnomalyCoreRockInert
- type: Sprite
layers:
- state: anom6
@@ -289,6 +308,8 @@
color: "#bbbbbb"
- type: BadFood
- type: Anomaly
+ corePrototype: AnomalyCoreLiquid
+ coreInertPrototype: AnomalyCoreLiquidInert
anomalyContactDamage:
types:
Slash: 1
diff --git a/Resources/Prototypes/Entities/Structures/Specific/Anomaly/cores.yml b/Resources/Prototypes/Entities/Structures/Specific/Anomaly/cores.yml
new file mode 100644
index 0000000000..835f309fc8
--- /dev/null
+++ b/Resources/Prototypes/Entities/Structures/Specific/Anomaly/cores.yml
@@ -0,0 +1,251 @@
+- type: entity
+ parent: BaseItem
+ id: BaseAnomalyCore
+ abstract: true
+ name: anomaly core
+ description: The core of a detroyed incomprehensible object.
+ components:
+ - type: Sprite
+ sprite: Structures/Specific/Anomalies/Cores/gravity_core.rsi
+ layers:
+ - state: core
+ - state: pulse
+ map: ["decay"]
+ - type: Appearance
+ - type: GenericVisualizer
+ visuals:
+ enum.AnomalyCoreVisuals.Decaying:
+ decay:
+ True: { visible: true }
+ False: { visible: false }
+ - type: Item
+ size: 10
+ - type: ItemCooldown
+ - type: EmitSoundOnUse #placeholder for future unical mechanic
+ sound:
+ collection: RadiationPulse
+ - type: UseDelay
+ delay: 2
+ - type: AnomalyCore
+ timeToDecay: 600
+ startPrice: 10000
+ endPrice: 200
+
+- type: entity
+ parent: BaseAnomalyCore
+ id: AnomalyCorePyroclastic
+ suffix: Pyroclastic
+ components:
+ - type: Sprite
+ sprite: Structures/Specific/Anomalies/Cores/pyro_core.rsi
+ - type: PointLight
+ radius: 1.5
+ energy: 1.5
+ color: "#fca3c0"
+ castShadows: false
+
+- type: entity
+ parent: BaseAnomalyCore
+ id: AnomalyCoreGravity
+ suffix: Gravity
+ components:
+ - type: Sprite
+ sprite: Structures/Specific/Anomalies/Cores/gravity_core.rsi
+ - type: PointLight
+ radius: 1.5
+ energy: 10
+ color: "#1e070e"
+ castShadows: false
+
+- type: entity
+ parent: BaseAnomalyCore
+ id: AnomalyCoreIce
+ suffix: Ice
+ components:
+ - type: Sprite
+ sprite: Structures/Specific/Anomalies/Cores/ice_core.rsi
+ - type: PointLight
+ radius: 1.5
+ energy: 1.5
+ color: "#befaff"
+ castShadows: false
+
+- type: entity
+ parent: BaseAnomalyCore
+ id: AnomalyCoreFlesh
+ suffix: Flesh
+ components:
+ - type: Sprite
+ sprite: Structures/Specific/Anomalies/Cores/flesh_core.rsi
+ - type: PointLight
+ radius: 1.5
+ energy: 3.5
+ color: "#cb5b7e"
+ castShadows: false
+
+- type: entity
+ parent: BaseAnomalyCore
+ id: AnomalyCoreRock
+ suffix: Rock
+ components:
+ - type: Sprite
+ sprite: Structures/Specific/Anomalies/Cores/rock_core.rsi
+ - type: PointLight
+ radius: 1.5
+ energy: 3.5
+ color: "#5ca8cb"
+ castShadows: false
+
+- type: entity
+ parent: BaseAnomalyCore
+ id: AnomalyCoreLiquid
+ suffix: Liquid
+ components:
+ - type: Sprite
+ sprite: Structures/Specific/Anomalies/Cores/liquid_core.rsi
+ - type: PointLight
+ radius: 1.5
+ energy: 3.5
+ color: "#ffffff"
+ castShadows: false
+
+- type: entity
+ parent: BaseAnomalyCore
+ id: AnomalyCoreBluespace
+ suffix: Bluespace
+ components:
+ - type: Sprite
+ sprite: Structures/Specific/Anomalies/Cores/bluespace_core.rsi
+ - type: PointLight
+ radius: 1.5
+ energy: 3.5
+ color: "#00ccff"
+ castShadows: false
+
+- type: entity
+ parent: BaseAnomalyCore
+ id: AnomalyCoreElectricity
+ suffix: Electricity
+ components:
+ - type: Sprite
+ sprite: Structures/Specific/Anomalies/Cores/electric_core.rsi
+ - type: PointLight
+ radius: 1.5
+ energy: 2.0
+ color: "#ffffaa"
+ castShadows: false
+ - type: Electrified
+
+# Inert cores
+
+- type: entity
+ parent: BaseAnomalyCore
+ id: BaseAnomalyInertCore
+ abstract: true
+ components:
+ - type: AnomalyCore
+ timeToDecay: 1 #decay very fast
+
+- type: entity
+ parent: BaseAnomalyInertCore
+ id: AnomalyCorePyroclasticInert
+ suffix: Pyroclastic, Inert
+ components:
+ - type: Sprite
+ sprite: Structures/Specific/Anomalies/Cores/pyro_core.rsi
+ - type: PointLight
+ radius: 1.5
+ energy: 1.5
+ color: "#fca3c0"
+ castShadows: false
+
+- type: entity
+ parent: BaseAnomalyInertCore
+ id: AnomalyCoreGravityInert
+ suffix: Gravity, Inert
+ components:
+ - type: Sprite
+ sprite: Structures/Specific/Anomalies/Cores/gravity_core.rsi
+ - type: PointLight
+ radius: 1.5
+ energy: 10
+ color: "#1e070e"
+ castShadows: false
+
+- type: entity
+ parent: BaseAnomalyInertCore
+ id: AnomalyCoreIceInert
+ suffix: Ice, Inert
+ components:
+ - type: Sprite
+ sprite: Structures/Specific/Anomalies/Cores/ice_core.rsi
+ - type: PointLight
+ radius: 1.5
+ energy: 1.5
+ color: "#befaff"
+ castShadows: false
+
+- type: entity
+ parent: BaseAnomalyInertCore
+ id: AnomalyCoreFleshInert
+ suffix: Flesh, Inert
+ components:
+ - type: Sprite
+ sprite: Structures/Specific/Anomalies/Cores/flesh_core.rsi
+ - type: PointLight
+ radius: 1.5
+ energy: 3.5
+ color: "#cb5b7e"
+ castShadows: false
+
+- type: entity
+ parent: BaseAnomalyInertCore
+ id: AnomalyCoreRockInert
+ suffix: Rock, Inert
+ components:
+ - type: Sprite
+ sprite: Structures/Specific/Anomalies/Cores/rock_core.rsi
+ - type: PointLight
+ radius: 1.5
+ energy: 3.5
+ color: "#5ca8cb"
+ castShadows: false
+
+- type: entity
+ parent: BaseAnomalyInertCore
+ id: AnomalyCoreLiquidInert
+ suffix: Liquid, Inert
+ components:
+ - type: Sprite
+ sprite: Structures/Specific/Anomalies/Cores/liquid_core.rsi
+ - type: PointLight
+ radius: 1.5
+ energy: 3.5
+ color: "#ffffff"
+ castShadows: false
+
+- type: entity
+ parent: BaseAnomalyInertCore
+ id: AnomalyCoreBluespaceInert
+ suffix: Bluespace, Inert
+ components:
+ - type: Sprite
+ sprite: Structures/Specific/Anomalies/Cores/bluespace_core.rsi
+ - type: PointLight
+ radius: 1.5
+ energy: 3.5
+ color: "#00ccff"
+ castShadows: false
+
+- type: entity
+ parent: BaseAnomalyInertCore
+ id: AnomalyCoreElectricityInert
+ suffix: Electricity, Inert
+ components:
+ - type: Sprite
+ sprite: Structures/Specific/Anomalies/Cores/electric_core.rsi
+ - type: PointLight
+ radius: 1.5
+ energy: 2.0
+ color: "#ffffaa"
+ castShadows: false
\ No newline at end of file
diff --git a/Resources/Textures/Structures/Specific/Anomalies/Cores/bluespace_core.rsi/core.png b/Resources/Textures/Structures/Specific/Anomalies/Cores/bluespace_core.rsi/core.png
new file mode 100644
index 0000000000..818a2fe22b
Binary files /dev/null and b/Resources/Textures/Structures/Specific/Anomalies/Cores/bluespace_core.rsi/core.png differ
diff --git a/Resources/Textures/Structures/Specific/Anomalies/Cores/bluespace_core.rsi/meta.json b/Resources/Textures/Structures/Specific/Anomalies/Cores/bluespace_core.rsi/meta.json
new file mode 100644
index 0000000000..94ffa2be6e
--- /dev/null
+++ b/Resources/Textures/Structures/Specific/Anomalies/Cores/bluespace_core.rsi/meta.json
@@ -0,0 +1,25 @@
+{
+ "version": 1,
+ "license": "CC0-1.0",
+ "copyright": "Created by TheShuEd (github) for ss14",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "core"
+ },
+ {
+ "name": "pulse",
+ "delays": [
+ [
+ 0.15625,
+ 0.15625,
+ 0.15625,
+ 0.15625
+ ]
+ ]
+ }
+ ]
+}
diff --git a/Resources/Textures/Structures/Specific/Anomalies/Cores/bluespace_core.rsi/pulse.png b/Resources/Textures/Structures/Specific/Anomalies/Cores/bluespace_core.rsi/pulse.png
new file mode 100644
index 0000000000..88421da601
Binary files /dev/null and b/Resources/Textures/Structures/Specific/Anomalies/Cores/bluespace_core.rsi/pulse.png differ
diff --git a/Resources/Textures/Structures/Specific/Anomalies/Cores/electric_core.rsi/core.png b/Resources/Textures/Structures/Specific/Anomalies/Cores/electric_core.rsi/core.png
new file mode 100644
index 0000000000..9176daa63a
Binary files /dev/null and b/Resources/Textures/Structures/Specific/Anomalies/Cores/electric_core.rsi/core.png differ
diff --git a/Resources/Textures/Structures/Specific/Anomalies/Cores/electric_core.rsi/meta.json b/Resources/Textures/Structures/Specific/Anomalies/Cores/electric_core.rsi/meta.json
new file mode 100644
index 0000000000..94ffa2be6e
--- /dev/null
+++ b/Resources/Textures/Structures/Specific/Anomalies/Cores/electric_core.rsi/meta.json
@@ -0,0 +1,25 @@
+{
+ "version": 1,
+ "license": "CC0-1.0",
+ "copyright": "Created by TheShuEd (github) for ss14",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "core"
+ },
+ {
+ "name": "pulse",
+ "delays": [
+ [
+ 0.15625,
+ 0.15625,
+ 0.15625,
+ 0.15625
+ ]
+ ]
+ }
+ ]
+}
diff --git a/Resources/Textures/Structures/Specific/Anomalies/Cores/electric_core.rsi/pulse.png b/Resources/Textures/Structures/Specific/Anomalies/Cores/electric_core.rsi/pulse.png
new file mode 100644
index 0000000000..32a49cb7f4
Binary files /dev/null and b/Resources/Textures/Structures/Specific/Anomalies/Cores/electric_core.rsi/pulse.png differ
diff --git a/Resources/Textures/Structures/Specific/Anomalies/Cores/flesh_core.rsi/core.png b/Resources/Textures/Structures/Specific/Anomalies/Cores/flesh_core.rsi/core.png
new file mode 100644
index 0000000000..b6dc8fc386
Binary files /dev/null and b/Resources/Textures/Structures/Specific/Anomalies/Cores/flesh_core.rsi/core.png differ
diff --git a/Resources/Textures/Structures/Specific/Anomalies/Cores/flesh_core.rsi/meta.json b/Resources/Textures/Structures/Specific/Anomalies/Cores/flesh_core.rsi/meta.json
new file mode 100644
index 0000000000..94ffa2be6e
--- /dev/null
+++ b/Resources/Textures/Structures/Specific/Anomalies/Cores/flesh_core.rsi/meta.json
@@ -0,0 +1,25 @@
+{
+ "version": 1,
+ "license": "CC0-1.0",
+ "copyright": "Created by TheShuEd (github) for ss14",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "core"
+ },
+ {
+ "name": "pulse",
+ "delays": [
+ [
+ 0.15625,
+ 0.15625,
+ 0.15625,
+ 0.15625
+ ]
+ ]
+ }
+ ]
+}
diff --git a/Resources/Textures/Structures/Specific/Anomalies/Cores/flesh_core.rsi/pulse.png b/Resources/Textures/Structures/Specific/Anomalies/Cores/flesh_core.rsi/pulse.png
new file mode 100644
index 0000000000..8e26e73327
Binary files /dev/null and b/Resources/Textures/Structures/Specific/Anomalies/Cores/flesh_core.rsi/pulse.png differ
diff --git a/Resources/Textures/Structures/Specific/Anomalies/Cores/gravity_core.rsi/core.png b/Resources/Textures/Structures/Specific/Anomalies/Cores/gravity_core.rsi/core.png
new file mode 100644
index 0000000000..ccc1645d2d
Binary files /dev/null and b/Resources/Textures/Structures/Specific/Anomalies/Cores/gravity_core.rsi/core.png differ
diff --git a/Resources/Textures/Structures/Specific/Anomalies/Cores/gravity_core.rsi/meta.json b/Resources/Textures/Structures/Specific/Anomalies/Cores/gravity_core.rsi/meta.json
new file mode 100644
index 0000000000..94ffa2be6e
--- /dev/null
+++ b/Resources/Textures/Structures/Specific/Anomalies/Cores/gravity_core.rsi/meta.json
@@ -0,0 +1,25 @@
+{
+ "version": 1,
+ "license": "CC0-1.0",
+ "copyright": "Created by TheShuEd (github) for ss14",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "core"
+ },
+ {
+ "name": "pulse",
+ "delays": [
+ [
+ 0.15625,
+ 0.15625,
+ 0.15625,
+ 0.15625
+ ]
+ ]
+ }
+ ]
+}
diff --git a/Resources/Textures/Structures/Specific/Anomalies/Cores/gravity_core.rsi/pulse.png b/Resources/Textures/Structures/Specific/Anomalies/Cores/gravity_core.rsi/pulse.png
new file mode 100644
index 0000000000..9d22ec71d1
Binary files /dev/null and b/Resources/Textures/Structures/Specific/Anomalies/Cores/gravity_core.rsi/pulse.png differ
diff --git a/Resources/Textures/Structures/Specific/Anomalies/Cores/ice_core.rsi/core.png b/Resources/Textures/Structures/Specific/Anomalies/Cores/ice_core.rsi/core.png
new file mode 100644
index 0000000000..de0694c7d8
Binary files /dev/null and b/Resources/Textures/Structures/Specific/Anomalies/Cores/ice_core.rsi/core.png differ
diff --git a/Resources/Textures/Structures/Specific/Anomalies/Cores/ice_core.rsi/meta.json b/Resources/Textures/Structures/Specific/Anomalies/Cores/ice_core.rsi/meta.json
new file mode 100644
index 0000000000..94ffa2be6e
--- /dev/null
+++ b/Resources/Textures/Structures/Specific/Anomalies/Cores/ice_core.rsi/meta.json
@@ -0,0 +1,25 @@
+{
+ "version": 1,
+ "license": "CC0-1.0",
+ "copyright": "Created by TheShuEd (github) for ss14",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "core"
+ },
+ {
+ "name": "pulse",
+ "delays": [
+ [
+ 0.15625,
+ 0.15625,
+ 0.15625,
+ 0.15625
+ ]
+ ]
+ }
+ ]
+}
diff --git a/Resources/Textures/Structures/Specific/Anomalies/Cores/ice_core.rsi/pulse.png b/Resources/Textures/Structures/Specific/Anomalies/Cores/ice_core.rsi/pulse.png
new file mode 100644
index 0000000000..b2ffbeb13c
Binary files /dev/null and b/Resources/Textures/Structures/Specific/Anomalies/Cores/ice_core.rsi/pulse.png differ
diff --git a/Resources/Textures/Structures/Specific/Anomalies/Cores/liquid_core.rsi/core.png b/Resources/Textures/Structures/Specific/Anomalies/Cores/liquid_core.rsi/core.png
new file mode 100644
index 0000000000..f44798cf18
Binary files /dev/null and b/Resources/Textures/Structures/Specific/Anomalies/Cores/liquid_core.rsi/core.png differ
diff --git a/Resources/Textures/Structures/Specific/Anomalies/Cores/liquid_core.rsi/meta.json b/Resources/Textures/Structures/Specific/Anomalies/Cores/liquid_core.rsi/meta.json
new file mode 100644
index 0000000000..94ffa2be6e
--- /dev/null
+++ b/Resources/Textures/Structures/Specific/Anomalies/Cores/liquid_core.rsi/meta.json
@@ -0,0 +1,25 @@
+{
+ "version": 1,
+ "license": "CC0-1.0",
+ "copyright": "Created by TheShuEd (github) for ss14",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "core"
+ },
+ {
+ "name": "pulse",
+ "delays": [
+ [
+ 0.15625,
+ 0.15625,
+ 0.15625,
+ 0.15625
+ ]
+ ]
+ }
+ ]
+}
diff --git a/Resources/Textures/Structures/Specific/Anomalies/Cores/liquid_core.rsi/pulse.png b/Resources/Textures/Structures/Specific/Anomalies/Cores/liquid_core.rsi/pulse.png
new file mode 100644
index 0000000000..d8b04a5aaa
Binary files /dev/null and b/Resources/Textures/Structures/Specific/Anomalies/Cores/liquid_core.rsi/pulse.png differ
diff --git a/Resources/Textures/Structures/Specific/Anomalies/Cores/pyro_core.rsi/core.png b/Resources/Textures/Structures/Specific/Anomalies/Cores/pyro_core.rsi/core.png
new file mode 100644
index 0000000000..61a5f22489
Binary files /dev/null and b/Resources/Textures/Structures/Specific/Anomalies/Cores/pyro_core.rsi/core.png differ
diff --git a/Resources/Textures/Structures/Specific/Anomalies/Cores/pyro_core.rsi/meta.json b/Resources/Textures/Structures/Specific/Anomalies/Cores/pyro_core.rsi/meta.json
new file mode 100644
index 0000000000..94ffa2be6e
--- /dev/null
+++ b/Resources/Textures/Structures/Specific/Anomalies/Cores/pyro_core.rsi/meta.json
@@ -0,0 +1,25 @@
+{
+ "version": 1,
+ "license": "CC0-1.0",
+ "copyright": "Created by TheShuEd (github) for ss14",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "core"
+ },
+ {
+ "name": "pulse",
+ "delays": [
+ [
+ 0.15625,
+ 0.15625,
+ 0.15625,
+ 0.15625
+ ]
+ ]
+ }
+ ]
+}
diff --git a/Resources/Textures/Structures/Specific/Anomalies/Cores/pyro_core.rsi/pulse.png b/Resources/Textures/Structures/Specific/Anomalies/Cores/pyro_core.rsi/pulse.png
new file mode 100644
index 0000000000..537c619d19
Binary files /dev/null and b/Resources/Textures/Structures/Specific/Anomalies/Cores/pyro_core.rsi/pulse.png differ
diff --git a/Resources/Textures/Structures/Specific/Anomalies/Cores/rock_core.rsi/core.png b/Resources/Textures/Structures/Specific/Anomalies/Cores/rock_core.rsi/core.png
new file mode 100644
index 0000000000..3d3ddce24e
Binary files /dev/null and b/Resources/Textures/Structures/Specific/Anomalies/Cores/rock_core.rsi/core.png differ
diff --git a/Resources/Textures/Structures/Specific/Anomalies/Cores/rock_core.rsi/meta.json b/Resources/Textures/Structures/Specific/Anomalies/Cores/rock_core.rsi/meta.json
new file mode 100644
index 0000000000..94ffa2be6e
--- /dev/null
+++ b/Resources/Textures/Structures/Specific/Anomalies/Cores/rock_core.rsi/meta.json
@@ -0,0 +1,25 @@
+{
+ "version": 1,
+ "license": "CC0-1.0",
+ "copyright": "Created by TheShuEd (github) for ss14",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "core"
+ },
+ {
+ "name": "pulse",
+ "delays": [
+ [
+ 0.15625,
+ 0.15625,
+ 0.15625,
+ 0.15625
+ ]
+ ]
+ }
+ ]
+}
diff --git a/Resources/Textures/Structures/Specific/Anomalies/Cores/rock_core.rsi/pulse.png b/Resources/Textures/Structures/Specific/Anomalies/Cores/rock_core.rsi/pulse.png
new file mode 100644
index 0000000000..4612777984
Binary files /dev/null and b/Resources/Textures/Structures/Specific/Anomalies/Cores/rock_core.rsi/pulse.png differ