From 96ff529c82de673cd8cad7512e94f7b4dc413369 Mon Sep 17 00:00:00 2001
From: Ed <96445749+TheShuEd@users.noreply.github.com>
Date: Wed, 1 Nov 2023 02:20:52 +0300
Subject: [PATCH] Anomaly Cores (#21306)
* add first anomaly core
* meme
* 5 min to 10 min
fix yml
* fix
* Update doc
* no static price
---
.../Components/AnomalyCoreComponent.cs | 42 +++
.../Anomaly/Effects/AnomalyCoreSystem.cs | 56 ++++
Content.Shared/Anomaly/AnomalyCoreVisuals.cs | 9 +
.../Anomaly/Components/AnomalyComponent.cs | 13 +
Content.Shared/Anomaly/SharedAnomalySystem.cs | 5 +-
.../Specific/{ => Anomaly}/anomalies.yml | 21 ++
.../Structures/Specific/Anomaly/cores.yml | 251 ++++++++++++++++++
.../Cores/bluespace_core.rsi/core.png | Bin 0 -> 185 bytes
.../Cores/bluespace_core.rsi/meta.json | 25 ++
.../Cores/bluespace_core.rsi/pulse.png | Bin 0 -> 237 bytes
.../Cores/electric_core.rsi/core.png | Bin 0 -> 173 bytes
.../Cores/electric_core.rsi/meta.json | 25 ++
.../Cores/electric_core.rsi/pulse.png | Bin 0 -> 304 bytes
.../Anomalies/Cores/flesh_core.rsi/core.png | Bin 0 -> 279 bytes
.../Anomalies/Cores/flesh_core.rsi/meta.json | 25 ++
.../Anomalies/Cores/flesh_core.rsi/pulse.png | Bin 0 -> 331 bytes
.../Anomalies/Cores/gravity_core.rsi/core.png | Bin 0 -> 191 bytes
.../Cores/gravity_core.rsi/meta.json | 25 ++
.../Cores/gravity_core.rsi/pulse.png | Bin 0 -> 287 bytes
.../Anomalies/Cores/ice_core.rsi/core.png | Bin 0 -> 196 bytes
.../Anomalies/Cores/ice_core.rsi/meta.json | 25 ++
.../Anomalies/Cores/ice_core.rsi/pulse.png | Bin 0 -> 221 bytes
.../Anomalies/Cores/liquid_core.rsi/core.png | Bin 0 -> 216 bytes
.../Anomalies/Cores/liquid_core.rsi/meta.json | 25 ++
.../Anomalies/Cores/liquid_core.rsi/pulse.png | Bin 0 -> 441 bytes
.../Anomalies/Cores/pyro_core.rsi/core.png | Bin 0 -> 369 bytes
.../Anomalies/Cores/pyro_core.rsi/meta.json | 25 ++
.../Anomalies/Cores/pyro_core.rsi/pulse.png | Bin 0 -> 391 bytes
.../Anomalies/Cores/rock_core.rsi/core.png | Bin 0 -> 276 bytes
.../Anomalies/Cores/rock_core.rsi/meta.json | 25 ++
.../Anomalies/Cores/rock_core.rsi/pulse.png | Bin 0 -> 393 bytes
31 files changed, 596 insertions(+), 1 deletion(-)
create mode 100644 Content.Server/Anomaly/Components/AnomalyCoreComponent.cs
create mode 100644 Content.Server/Anomaly/Effects/AnomalyCoreSystem.cs
create mode 100644 Content.Shared/Anomaly/AnomalyCoreVisuals.cs
rename Resources/Prototypes/Entities/Structures/Specific/{ => Anomaly}/anomalies.yml (91%)
create mode 100644 Resources/Prototypes/Entities/Structures/Specific/Anomaly/cores.yml
create mode 100644 Resources/Textures/Structures/Specific/Anomalies/Cores/bluespace_core.rsi/core.png
create mode 100644 Resources/Textures/Structures/Specific/Anomalies/Cores/bluespace_core.rsi/meta.json
create mode 100644 Resources/Textures/Structures/Specific/Anomalies/Cores/bluespace_core.rsi/pulse.png
create mode 100644 Resources/Textures/Structures/Specific/Anomalies/Cores/electric_core.rsi/core.png
create mode 100644 Resources/Textures/Structures/Specific/Anomalies/Cores/electric_core.rsi/meta.json
create mode 100644 Resources/Textures/Structures/Specific/Anomalies/Cores/electric_core.rsi/pulse.png
create mode 100644 Resources/Textures/Structures/Specific/Anomalies/Cores/flesh_core.rsi/core.png
create mode 100644 Resources/Textures/Structures/Specific/Anomalies/Cores/flesh_core.rsi/meta.json
create mode 100644 Resources/Textures/Structures/Specific/Anomalies/Cores/flesh_core.rsi/pulse.png
create mode 100644 Resources/Textures/Structures/Specific/Anomalies/Cores/gravity_core.rsi/core.png
create mode 100644 Resources/Textures/Structures/Specific/Anomalies/Cores/gravity_core.rsi/meta.json
create mode 100644 Resources/Textures/Structures/Specific/Anomalies/Cores/gravity_core.rsi/pulse.png
create mode 100644 Resources/Textures/Structures/Specific/Anomalies/Cores/ice_core.rsi/core.png
create mode 100644 Resources/Textures/Structures/Specific/Anomalies/Cores/ice_core.rsi/meta.json
create mode 100644 Resources/Textures/Structures/Specific/Anomalies/Cores/ice_core.rsi/pulse.png
create mode 100644 Resources/Textures/Structures/Specific/Anomalies/Cores/liquid_core.rsi/core.png
create mode 100644 Resources/Textures/Structures/Specific/Anomalies/Cores/liquid_core.rsi/meta.json
create mode 100644 Resources/Textures/Structures/Specific/Anomalies/Cores/liquid_core.rsi/pulse.png
create mode 100644 Resources/Textures/Structures/Specific/Anomalies/Cores/pyro_core.rsi/core.png
create mode 100644 Resources/Textures/Structures/Specific/Anomalies/Cores/pyro_core.rsi/meta.json
create mode 100644 Resources/Textures/Structures/Specific/Anomalies/Cores/pyro_core.rsi/pulse.png
create mode 100644 Resources/Textures/Structures/Specific/Anomalies/Cores/rock_core.rsi/core.png
create mode 100644 Resources/Textures/Structures/Specific/Anomalies/Cores/rock_core.rsi/meta.json
create mode 100644 Resources/Textures/Structures/Specific/Anomalies/Cores/rock_core.rsi/pulse.png
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 0000000000000000000000000000000000000000..818a2fe22b9e2c7df5b3617d3957111ec48f703d
GIT binary patch
literal 185
zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL|>AJY5_^B3j>0
z-pzYJfyZTThwUB~-*5SmO`da)p@QXJ;Ot
z@cxPS#6Lgd!uOa=e#|;!%imMw2MTRv4N|wesEf+}x9sltww|M0QnD}h{%bY6(CE0KH-MEZx${CP3p00i_>zopr05WK2l>h($
literal 0
HcmV?d00001
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 0000000000000000000000000000000000000000..9176daa63ad435d6cee56fe5ee44692f941b2a9b
GIT binary patch
literal 173
zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}>7Fi*ArY-_
zFRd1AaNu#h$lZK=b8SPbo<@t&3(mc*I(3;qz1+r*YaYmoPCPHnC@45_|LQ%>g>&Dm
zYfmkHpSkDw@5+`7PN!T9@;Sm89$5LYAB>Bhf92iDDUGt1K59CAlot>b)O^R%b5m?e
T+@z)~pp^`su6{1-oD!MX?{NlE^}
z;r{qA+YWIDu?XEi6TdVWKa24_8GB1+X24ZLn2z=
zUNPi4WFXP@&|Hky>Sn|TCOst%zCPO)^{)c94vqpBrA2Z?SiGkQsk0tk>gf2PejCfA
z_sWWliY)^F{aW>6N_PJ%&5I1}{hr<0c6(RarTLSN6;Hay5q&-1yLQh3TN~Lk3^#T#
zC(GI&i`QqEz?UYmR8uegn3dYc+@4F0%LPIh6h7uMtSR?DI*Utd!c@!Z($pI-17ps;
zxhncvHgabD{sWs222ihl2$-I``eR
be|n@>6b7#GdbspA&~pr)u6{1-oD!MPx$1xZ9fRCt{2+HDSlAP_~-*QRT6_P-pu8T!jKF}7kDX8gEk0lYyG2qFOh003@^
zRI_VHQKVYU!aDEqpdX&$lbPP7$U55X$(Iz8{WCmj=%?oY3yCNoHNQx8D`a#L-uchg
z&}vpEvpsFQYwg^ymvF@q;9A5PC&8vqU`zD+zm{L58nOf~L+7WSu?bp!l84xVMiz01
z4g&xH00000H*$qDIhSMcTbhr-Ge^N%_TGA2?*~NwnBaauR{pK;2egE={6QX_zo)$+
ztH5NY5ffzk{eYIn&o%;Fi#X#X`06j`8yxz7-YMT@ACS@UwfxXa5=Y$$hRVDaa|r2g
d0001>!v~zJvdBpiknR8g002ovPDHLkV1f}+kNp4u
literal 0
HcmV?d00001
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 0000000000000000000000000000000000000000..ccc1645d2dcea628d181dc5be6a73fec18a35ed7
GIT binary patch
literal 191
zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}m7Xq+ArY-_
zCvW6xFyL|VFWkTK@BjCjHxZnw73P8iU!D7W00Vam9(;TWdA1%9Z1n39`Pgg&ebxsLQ0GFOh;s5{u
literal 0
HcmV?d00001
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 0000000000000000000000000000000000000000..9d22ec71d192c0c110696d532455bb195dc85fce
GIT binary patch
literal 287
zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|ZhE>nhE&XX
zdut=_VFiKKhruG9eK`jNZYoUP+}QqsZAbBQHII^qiw?J6_7hCY!b
zKgDPB(&sC8b$7gZ{&Az+?(N&!Zn7*9Fc;Jed;B*tK8t@Z_XmS_kC$rZW!m?b-)`;}
zd30?}OEmwyuZ%ipeyf@<+Eym5vsmiq(l(jbx9$pGSfaCigEF(2!(0~ijvYrAvxm>>
zmj+q|0^esn{NopV|4UU(+w7YnNoBUCac`e-Ff^=}+$OnQF6&V7z2|3zmsxR|*{j?;
fW&4nkfg!#Xe#@cerNjR%G}Yq&Gi&B%8*ApBeG0c3
zuP~)pG93MG;E<*DGd6|
nC%)K*GN`5=(16tLZXq)^Xnuh^SU`c*>uK|_skn^vkOuT49TmPA{#rKg1MPg!*C9M}1dxl?X5GBX^mX6UP%x;$uS
Rz&D^C22WQ%mvv4FO#mNIQQrUn
literal 0
HcmV?d00001
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 0000000000000000000000000000000000000000..f44798cf18eafb666ce9472e7d483614c00b5019
GIT binary patch
literal 216
zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}lRRA?wp#*S
O$KdJe=d#Wzp$Py+9#Jj;
literal 0
HcmV?d00001
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 0000000000000000000000000000000000000000..d8b04a5aaa63ba65c80015eca5766b3915c0f70d
GIT binary patch
literal 441
zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%yJzX3_D(1Ys
zwK1zXK!okV{Y#dWoqVl%@9yqmee-OB;^c&Kd4(^GyOsxNl$>~ww!l9@UMaX;uY8~C
z;k$n9)v;ZjvsQ=w-2bvg;dwz`$O%gZK_K|6`g-b#D%Id~^_4o7?+z)k9jUJQyi4au
z>OYl!R)%?b^ZnzB1HT^qeqFub!U0F|LS|37Zrw#|xBZ-KBX%T`?>
zBxos~8nwvB|J}i|FQyr;Gp9XB3#&P?WzU`S)%AOCJllOPb~U4y=8M&llHb>!W?pf%
z;d^^F|Lna}3eUIMHPk0=ym|W3cYzKVu)0*{c<^Y&pE-YgE#fB>n99k&ZEBJ2mrg$S
zi@kgcx6rz0pKEnJe1yIWcVrapy5+yZRCXIH!@K97ON;rfzopr0BTgkAOHXW
literal 0
HcmV?d00001
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 0000000000000000000000000000000000000000..61a5f22489ea5dd5e32a9a1fb97e1ec9cecab426
GIT binary patch
literal 369
zcmV-%0gnEOP)Px$D@jB_R9J=Wl`%`hKoo$#id)8mknM(`LYIIYOQ6s#gL4)kf1tm@pO8OLaOvdO
ztv?|{M-_)GC6sn_?Kz0CHi_-s2?e=tP2PK7^4`4zhr{8pq{wo0*5c}Eu52VOY$dkk
zyH$M8G%yL%##hhZX4?5KO$(3uaoc01E1@NjgsIvuJQh0u7F+X9o)lSRd1KJVVuy?Z
zWE9jQqki1l8Y_V!%hl~&h>U_paUnf~^nOTm33qX{1%v6NSMZ%|wW&b(t?#Zj6+kUl
zkgLIT^6N}!4NMZI>e{~o;Qq$1|4O;6czj+1@Unj8As*K9$8u^Pn?nhpF8(E;a}uPx$K}keGRCt{2+OZLWKoAAc)fx=UEWyAo44pBj0Rt-`paFAc4DG_e637TJG(Hmv
zWDq%A?yuZ`p~0Ol`z!TZfMzX-}~w;g=NM{AY33s&nTBoe07`9ujF$yUGQRKuqt1e*cBW2~N$6-y;|1I{pAd`I}RHeCtbOO5lqMk*h
z4VI&qYmzzG9Y#A#zUx7=jQ;VHQKdPqg^Bd>kOTB>mJGc(CSP8xpPx#&PhZ;R9J=WlTB{IKn#Vy$%K7-7jA_VBB~Z4e!8eoiy$c7aI2gJx-A~ef=Df*
zi#l8Ut!6xW&u=Ul9LI5-dna@e^(XI2mR&BYXgYxiO|>xlnFamHhtkV=m=CV%`*{uD
zN1ClIL}m@}yZLj7yo3nA<68;6Xtpy42<_;fLS$HuD2kGC8-if}k6m$-DExK&H@Q`y
zssL1)sOv2OSZQkC>;dc(5aDaN17M?xb=&;#`UxUtyKZYZUHz;ffFx9eWrWjt;^2(S+T0000Px$LrFwIRCt{2+OckfFc5&@Yt)rF8KWq&SSucYmGT046&|5aRJ!&7D%L7P)v=wk
z<4$yI;sYNR^#5i!JH|RYK8pYV0ARUX-guWce$2afnnpxKvc8nJ^W&fI4bPq5pMqmg
zRac$={`e9Rx!Si$T;BM)>TZs5U3H_s#x;d&qsKH8yR$BDyww0~EP`50!|h=gJ0t*w
zC1qjFN)(g?EtWM)!=4~S@G20Rg{}4hT61p1eig3uQ?{kIV#kiTIE8D2cB2~iF@ssV
zY+mK^nYtGM000000Qje@4nOB^cXV+y>q|NAPqUxa9``57`jS)P*{yZNS6Ld1UK==WGu01(3u|K)?NK{;kn00000NkvXXu0mjfDN?17
literal 0
HcmV?d00001
--
2.51.2