From b5e8c57978a116a65fc1f87105f1b4b1fca6670f Mon Sep 17 00:00:00 2001 From: Ed <96445749+TheShuEd@users.noreply.github.com> Date: Sat, 7 Oct 2023 03:26:34 +0300 Subject: [PATCH] Liquid anomaly (#20626) Co-authored-by: Kara --- .../Components/InjectionAnomalyComponent.cs | 47 ++++ .../PuddleCreateAnomalyComponent.cs | 29 +++ .../ReagentProducerAnomalyComponent.cs | 94 +++++++ .../Anomaly/Effects/InjectionAnomalySystem.cs | 67 +++++ .../Effects/PuddleCreateAnomalySystem.cs | 39 +++ .../Effects/ReagentProducerAnomalySystem.cs | 152 ++++++++++++ Resources/Audio/Effects/attributions.yml | 7 +- Resources/Audio/Effects/waterswirl.ogg | Bin 0 -> 23487 bytes .../Markers/Spawners/Random/anomaly.yml | 1 + .../Entities/Mobs/NPCs/elemental.yml | 229 ++++++++++++++++++ .../Structures/Specific/anomalies.yml | 106 ++++++++ .../Mobs/Aliens/elemental.rsi/alive.png | Bin 0 -> 4174 bytes .../Mobs/Aliens/elemental.rsi/dead.png | Bin 0 -> 510 bytes .../Mobs/Aliens/elemental.rsi/meta.json | 44 ++++ .../Anomalies/liquid_anom.rsi/anom.png | Bin 0 -> 1239 bytes .../Anomalies/liquid_anom.rsi/meta.json | 33 +++ .../Anomalies/liquid_anom.rsi/pulse.png | Bin 0 -> 1509 bytes 17 files changed, 847 insertions(+), 1 deletion(-) create mode 100644 Content.Server/Anomaly/Components/InjectionAnomalyComponent.cs create mode 100644 Content.Server/Anomaly/Components/PuddleCreateAnomalyComponent.cs create mode 100644 Content.Server/Anomaly/Components/ReagentProducerAnomalyComponent.cs create mode 100644 Content.Server/Anomaly/Effects/InjectionAnomalySystem.cs create mode 100644 Content.Server/Anomaly/Effects/PuddleCreateAnomalySystem.cs create mode 100644 Content.Server/Anomaly/Effects/ReagentProducerAnomalySystem.cs create mode 100644 Resources/Audio/Effects/waterswirl.ogg create mode 100644 Resources/Textures/Mobs/Aliens/elemental.rsi/alive.png create mode 100644 Resources/Textures/Mobs/Aliens/elemental.rsi/dead.png create mode 100644 Resources/Textures/Mobs/Aliens/elemental.rsi/meta.json create mode 100644 Resources/Textures/Structures/Specific/Anomalies/liquid_anom.rsi/anom.png create mode 100644 Resources/Textures/Structures/Specific/Anomalies/liquid_anom.rsi/meta.json create mode 100644 Resources/Textures/Structures/Specific/Anomalies/liquid_anom.rsi/pulse.png diff --git a/Content.Server/Anomaly/Components/InjectionAnomalyComponent.cs b/Content.Server/Anomaly/Components/InjectionAnomalyComponent.cs new file mode 100644 index 0000000000..4a9b5b6b55 --- /dev/null +++ b/Content.Server/Anomaly/Components/InjectionAnomalyComponent.cs @@ -0,0 +1,47 @@ +using Content.Server.Anomaly.Effects; +using Robust.Shared.Prototypes; + +namespace Content.Server.Anomaly.Components; + +/// +/// This component allows the anomaly to inject liquid from the SolutionContainer +/// into the surrounding entities with the InjectionSolution component +/// + +[RegisterComponent, Access(typeof(InjectionAnomalySystem))] +public sealed partial class InjectionAnomalyComponent : Component +{ + /// + /// the maximum amount of injection of a substance into an entity per pulsation + /// scales with Severity + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public float MaxSolutionInjection = 15; + /// + /// the maximum amount of injection of a substance into an entity in the supercritical phase + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public float SuperCriticalSolutionInjection = 50; + + /// + /// The maximum radius in which the anomaly injects reagents into the surrounding containers. + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public float InjectRadius = 3; + /// + /// The maximum radius in which the anomaly injects reagents into the surrounding containers. + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public float SuperCriticalInjectRadius = 15; + + /// + /// The name of the prototype of the special effect that appears above the entities into which the injection was carried out + /// + [DataField, ViewVariables(VVAccess.ReadOnly)] + public EntProtoId VisualEffectPrototype = "PuddleSparkle"; + /// + /// Solution name that can be drained. + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public string Solution { get; set; } = "default"; +} diff --git a/Content.Server/Anomaly/Components/PuddleCreateAnomalyComponent.cs b/Content.Server/Anomaly/Components/PuddleCreateAnomalyComponent.cs new file mode 100644 index 0000000000..78c50b3d7e --- /dev/null +++ b/Content.Server/Anomaly/Components/PuddleCreateAnomalyComponent.cs @@ -0,0 +1,29 @@ +using Content.Server.Anomaly.Effects; + +namespace Content.Server.Anomaly.Components; + +/// +/// This component allows the anomaly to create puddles from the solutionContainer +/// +[RegisterComponent, Access(typeof(PuddleCreateAnomalySystem))] +public sealed partial class PuddleCreateAnomalyComponent : Component +{ + /// + /// The maximum amount of solution that an anomaly can splash out of the storage on the floor during pulsation. + /// Scales with Severity. + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public float MaxPuddleSize = 100; + + /// + /// The maximum amount of solution that an anomaly can splash out of the storage on the floor during supercritical event + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public float SuperCriticalPuddleSize = 1000; + + /// + /// Solution name that can be drained. + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public string Solution { get; set; } = "default"; +} diff --git a/Content.Server/Anomaly/Components/ReagentProducerAnomalyComponent.cs b/Content.Server/Anomaly/Components/ReagentProducerAnomalyComponent.cs new file mode 100644 index 0000000000..aa860c1713 --- /dev/null +++ b/Content.Server/Anomaly/Components/ReagentProducerAnomalyComponent.cs @@ -0,0 +1,94 @@ +using Content.Server.Anomaly.Effects; +using Content.Shared.Chemistry.Reagent; +using Robust.Shared.Audio; +using Robust.Shared.Prototypes; +using System.Numerics; + +namespace Content.Server.Anomaly.Components; +/// +/// This component allows the anomaly to generate a random type of reagent in the specified SolutionContainer. +/// With the increasing severity of the anomaly, the type of reagent produced may change. +/// The higher the severity of the anomaly, the higher the chance of dangerous or useful reagents. +/// +[RegisterComponent, Access(typeof(ReagentProducerAnomalySystem))] +public sealed partial class ReagentProducerAnomalyComponent : Component +{ + //the addition of the reagent will occur instantly when an anomaly appears, + //and there will not be the first three seconds of a white empty anomaly. + public float AccumulatedFrametime = 3.0f; + /// + /// How frequently should this reagent generation update, in seconds? + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public float UpdateInterval = 3.0f; + + /// + /// The spread of the random weight of the choice of this category, depending on the severity. + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public Vector2 WeightSpreadDangerous = new(5.0f, 9.0f); + /// + /// The spread of the random weight of the choice of this category, depending on the severity. + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public Vector2 WeightSpreadFun = new(3.0f, 0.0f); + /// + /// The spread of the random weight of the choice of this category, depending on the severity. + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public Vector2 WeightSpreadUseful = new(1.0f, 1.0f); + + /// + /// Category of dangerous reagents for injection. Various toxins and poisons + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public List> DangerousChemicals = new(); + /// + /// Category of useful reagents for injection. Medicine and other things that players WANT to get + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public List> UsefulChemicals = new(); + /// + /// Category of fun reagents for injection. Glue, drugs, beer. Something that will bring fun. + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public List> FunChemicals = new(); + + /// + /// Noise made when anomaly pulse. + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public SoundSpecifier ChangeSound = new SoundPathSpecifier("/Audio/Effects/waterswirl.ogg"); + /// + /// The component will repaint the sprites of the object to match the current color of the solution, + /// if the RandomSprite component is hung correctly. + /// Ideally, this should be put into a separate component, but I suffered for 4 hours, + /// and nothing worked out for me. So for now it will be like this. + /// + [DataField, ViewVariables(VVAccess.ReadOnly)] + public bool NeedRecolor = false; + + /// + /// the maximum amount of reagent produced per second + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public float MaxReagentProducing = 1.5f; + + /// + /// how much does the reagent production increase before entering the supercritical state + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public float SupercriticalReagentProducingModifier = 100f; + + /// + /// The name of the reagent that the anomaly produces. + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public ProtoId ProducingReagent = "Water"; + /// + /// Solution name where the substance is generated + /// + [ViewVariables(VVAccess.ReadWrite)] + [DataField("solution")] + public string Solution = "default"; +} diff --git a/Content.Server/Anomaly/Effects/InjectionAnomalySystem.cs b/Content.Server/Anomaly/Effects/InjectionAnomalySystem.cs new file mode 100644 index 0000000000..acc0e2f0c3 --- /dev/null +++ b/Content.Server/Anomaly/Effects/InjectionAnomalySystem.cs @@ -0,0 +1,67 @@ +using System.Linq; +using Content.Server.Anomaly.Components; +using Content.Server.Chemistry.Components.SolutionManager; +using Content.Server.Chemistry.EntitySystems; +using Content.Shared.Anomaly.Components; + +namespace Content.Server.Anomaly.Effects; +/// +/// This component allows the anomaly to inject liquid from the SolutionContainer +/// into the surrounding entities with the InjectionSolution component +/// +/// + +/// +public sealed class InjectionAnomalySystem : EntitySystem +{ + [Dependency] private readonly EntityLookupSystem _lookup = default!; + [Dependency] private readonly SolutionContainerSystem _solutionContainer = default!; + + private EntityQuery _injectableQuery; + + public override void Initialize() + { + SubscribeLocalEvent(OnPulse); + SubscribeLocalEvent(OnSupercritical, before: new[] { typeof(SolutionContainerSystem) }); + + _injectableQuery = GetEntityQuery(); + } + + private void OnPulse(EntityUid uid, InjectionAnomalyComponent component, ref AnomalyPulseEvent args) + { + PulseScalableEffect(uid, component, component.InjectRadius, component.MaxSolutionInjection * args.Severity); + } + + private void OnSupercritical(EntityUid uid, InjectionAnomalyComponent component, ref AnomalySupercriticalEvent args) + { + PulseScalableEffect(uid, component, component.SuperCriticalInjectRadius, component.SuperCriticalSolutionInjection); + } + + private void PulseScalableEffect(EntityUid uid, InjectionAnomalyComponent component, float injectRadius, float maxInject) + { + if (!_solutionContainer.TryGetSolution(uid, component.Solution, out var sol)) + return; + //We get all the entity in the radius into which the reagent will be injected. + var xformQuery = GetEntityQuery(); + var xform = xformQuery.GetComponent(uid); + var allEnts = _lookup.GetComponentsInRange(xform.MapPosition, injectRadius) + .Select(x => x.Owner).ToList(); + + //for each matching entity found + foreach (var ent in allEnts) + { + if (!_solutionContainer.TryGetInjectableSolution(ent, out var injectable)) + continue; + + if (_injectableQuery.TryGetComponent(ent, out var injEnt)) + { + var buffer = sol; + _solutionContainer.TryTransferSolution(ent, injectable, buffer, maxInject); + //Spawn Effect + var uidXform = Transform(ent); + Spawn(component.VisualEffectPrototype, uidXform.Coordinates); + } + } + } + +} diff --git a/Content.Server/Anomaly/Effects/PuddleCreateAnomalySystem.cs b/Content.Server/Anomaly/Effects/PuddleCreateAnomalySystem.cs new file mode 100644 index 0000000000..deae38e5c8 --- /dev/null +++ b/Content.Server/Anomaly/Effects/PuddleCreateAnomalySystem.cs @@ -0,0 +1,39 @@ +using Content.Server.Anomaly.Components; +using Content.Server.Chemistry.EntitySystems; +using Content.Shared.Anomaly.Components; +using Content.Server.Fluids.EntitySystems; + +namespace Content.Server.Anomaly.Effects; + +/// +/// This component allows the anomaly to create puddles from SolutionContainer. +/// +public sealed class PuddleCreateAnomalySystem : EntitySystem +{ + [Dependency] private readonly PuddleSystem _puddle = default!; + [Dependency] private readonly SolutionContainerSystem _solutionContainer = default!; + + public override void Initialize() + { + SubscribeLocalEvent(OnPulse); + SubscribeLocalEvent(OnSupercritical, before: new[] { typeof(InjectionAnomalySystem) }); + } + + private void OnPulse(EntityUid uid, PuddleCreateAnomalyComponent component, ref AnomalyPulseEvent args) + { + if (!_solutionContainer.TryGetSolution(uid, component.Solution, out var sol)) + return; + + var xform = Transform(uid); + var puddleSol = _solutionContainer.SplitSolution(uid, sol, component.MaxPuddleSize * args.Severity); + _puddle.TrySplashSpillAt(uid, xform.Coordinates, puddleSol, out _); + } + private void OnSupercritical(EntityUid uid, PuddleCreateAnomalyComponent component, ref AnomalySupercriticalEvent args) + { + if (!_solutionContainer.TryGetSolution(uid, component.Solution, out var sol)) + return; + var buffer = sol; + var xform = Transform(uid); + _puddle.TrySpillAt(xform.Coordinates, buffer, out _); + } +} diff --git a/Content.Server/Anomaly/Effects/ReagentProducerAnomalySystem.cs b/Content.Server/Anomaly/Effects/ReagentProducerAnomalySystem.cs new file mode 100644 index 0000000000..fdfff42d7c --- /dev/null +++ b/Content.Server/Anomaly/Effects/ReagentProducerAnomalySystem.cs @@ -0,0 +1,152 @@ +using Content.Server.Anomaly.Components; +using Content.Server.Chemistry.EntitySystems; +using Content.Shared.Anomaly.Components; +using Robust.Shared.Random; +using Content.Shared.Chemistry.Components; +using Robust.Shared.Prototypes; +using Content.Shared.Sprite; +using Robust.Server.GameObjects; + +namespace Content.Server.Anomaly.Effects; + +/// + +public sealed class ReagentProducerAnomalySystem : EntitySystem +{ + //The idea is to divide substances into several categories. + //The anomaly will choose one of the categories with a given chance based on severity. + //Then a random substance will be selected from the selected category. + //There are the following categories: + + //Dangerous: + //selected most often. A list of substances that are extremely unpleasant for injection. + + //Fun: + //Funny things have an increased chance of appearing in an anomaly. + + //Useful: + //Those reagents that the players are hunting for. Very low percentage of loss. + + [Dependency] private readonly SolutionContainerSystem _solutionContainer = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly PointLightSystem _light = default!; + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + + public const string FallbackReagent = "Water"; + + public override void Initialize() + { + SubscribeLocalEvent(OnPulse); + SubscribeLocalEvent(OnMapInit); + } + + private void OnPulse(EntityUid uid, ReagentProducerAnomalyComponent component, ref AnomalyPulseEvent args) + { + if (_random.NextFloat(0.0f, 1.0f) > args.Stability) + ChangeReagent(uid, component, args.Severity); + } + + private void ChangeReagent(EntityUid uid, ReagentProducerAnomalyComponent component, float severity) + { + var reagent = GetRandomReagentType(uid, component, severity); + component.ProducingReagent = reagent; + _audio.PlayPvs(component.ChangeSound, uid); + } + + //reagent realtime generation + public override void Update(float frameTime) + { + base.Update(frameTime); + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var component, out var anomaly)) + { + component.AccumulatedFrametime += frameTime; + + if (component.AccumulatedFrametime < component.UpdateInterval) + continue; + + if (!_solutionContainer.TryGetSolution(uid, component.Solution, out var producerSol)) + continue; + + Solution newSol = new(); + var reagentProducingAmount = anomaly.Stability * component.MaxReagentProducing * component.AccumulatedFrametime; + if (anomaly.Severity >= 0.97) reagentProducingAmount *= component.SupercriticalReagentProducingModifier; + + newSol.AddReagent(component.ProducingReagent, reagentProducingAmount); + _solutionContainer.TryAddSolution(uid, producerSol, newSol); //TO DO - the container is not fully filled. + + component.AccumulatedFrametime = 0; + + // The component will repaint the sprites of the object to match the current color of the solution, + // if the RandomSprite component is hung correctly. + + // Ideally, this should be put into a separate component, but I suffered for 4 hours, + // and nothing worked out for me. So for now it will be like this. + if (component.NeedRecolor) + { + var color = producerSol.GetColor(_prototypeManager); + _light.SetColor(uid, color); + if (TryComp(uid, out var randomSprite)) + { + foreach (var ent in randomSprite.Selected) + { + var state = randomSprite.Selected[ent.Key]; + state.Color = color; + randomSprite.Selected[ent.Key] = state; + } + Dirty(uid, randomSprite); + } + } + } + } + + private void OnMapInit(EntityUid uid, ReagentProducerAnomalyComponent component, MapInitEvent args) + { + ChangeReagent(uid, component, 0.1f); //MapInit Reagent 100% change + } + + // returns a random reagent based on a system of random weights. + // First, the category is selected: The category has a minimum and maximum weight, + // the current value depends on severity. + // Accordingly, with the strengthening of the anomaly, + // the chances of falling out of some categories grow, and some fall. + // + // After that, a random reagent in the selected category is selected. + // + // Such a system is made to control the danger and interest of the anomaly more. + private string GetRandomReagentType(EntityUid uid, ReagentProducerAnomalyComponent component, float severity) + { + //Category Weight Randomization + var currentWeightDangerous = MathHelper.Lerp(component.WeightSpreadDangerous.X, component.WeightSpreadDangerous.Y, severity); + var currentWeightFun = MathHelper.Lerp(component.WeightSpreadFun.X, component.WeightSpreadFun.Y, severity); + var currentWeightUseful = MathHelper.Lerp(component.WeightSpreadUseful.X, component.WeightSpreadUseful.Y, severity); + + var sumWeight = currentWeightDangerous + currentWeightFun + currentWeightUseful; + var rnd = _random.NextFloat(0f, sumWeight); + //Dangerous + if (rnd <= currentWeightDangerous && component.DangerousChemicals.Count > 0) + { + var reagent = _random.Pick(component.DangerousChemicals); + return reagent; + } + else rnd -= currentWeightDangerous; + //Fun + if (rnd <= currentWeightFun && component.FunChemicals.Count > 0) + { + var reagent = _random.Pick(component.FunChemicals); + return reagent; + } + else rnd -= currentWeightFun; + //Useful + if (rnd <= currentWeightUseful && component.UsefulChemicals.Count > 0) + { + var reagent = _random.Pick(component.UsefulChemicals); + return reagent; + } + //We should never end up here. + //Maybe Log Error? + return FallbackReagent; + } +} diff --git a/Resources/Audio/Effects/attributions.yml b/Resources/Audio/Effects/attributions.yml index f9239f4dab..71a2ae2b53 100644 --- a/Resources/Audio/Effects/attributions.yml +++ b/Resources/Audio/Effects/attributions.yml @@ -56,4 +56,9 @@ - files: ["break_stone.ogg"] license: "CC-BY-SA-3.0" copyright: "Taken from tgstation" - source: "https://github.com/tgstation/tgstation/blob/e3a835b96043fad1269ee7b0c3a6cb340a466f3a/sound/effects/break_stone.ogg" \ No newline at end of file + source: "https://github.com/tgstation/tgstation/blob/e3a835b96043fad1269ee7b0c3a6cb340a466f3a/sound/effects/break_stone.ogg" + +- files: ["waterswirl.ogg"] + license: "CC0-1.0" + copyright: "Taken from InspectorJ via freesound.org and mixed from stereo to mono." + source: "https://freesound.org/people/InspectorJ/sounds/398703/" diff --git a/Resources/Audio/Effects/waterswirl.ogg b/Resources/Audio/Effects/waterswirl.ogg new file mode 100644 index 0000000000000000000000000000000000000000..d8c9755a69cd64745cf9373e9e217f4472594c9e GIT binary patch literal 23487 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 Y12t`iwM?HG_5c6?07*qoM6N<$f}|!E`v3p{ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/elemental.rsi/dead.png b/Resources/Textures/Mobs/Aliens/elemental.rsi/dead.png new file mode 100644 index 0000000000000000000000000000000000000000..1363188c390d3c8a235f404b1aa2c4fc7285bac3 GIT binary patch literal 510 zcmVPx$xJg7oR9J=WmA`7jP!z_$h(jQtTP=u-n_$P5LYEGXowDWyniuFQU3~$40au^E z&84&;LIpP$u~eZ$0)cGlP|oei{gc>KX@`81xw)S2cmCWPpj4?+e=JL07>*~2yyknZ zvhO4S!|^2PcG_@k8vyXO|G;LuJ1Inko41;c)XRF!0j=pOa|~JByk2wQ*fyd##&Wer ztJ%P2yVGV*K)`#|p%B`Xruvy=wqK5JtkV+i7b9n}Fnmlo=?ZAdEomB4b^=AdHlm5maCN%9Qs9BhkB}FnIvLSJiyawW{)_$A|k= zTXccWn`ZzZE~y}lQZU@e1Vd5)OfWj>ZcpklztREqguQR~`2czHJ=fA5H-eH)IV9=m zADFx&P3AO&#+%U8|14wP5}qYJ)7s1Pt60x$0f#Wn1MQJ#K?gzRJXU54_`SfXW#t`L z{$Dwf+!>$@54{s)L!If50A!Fuly`hfmHJou1QjdmJB>`NkpKVy07*qoM6N<$g2ycC AbpQYW literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/elemental.rsi/meta.json b/Resources/Textures/Mobs/Aliens/elemental.rsi/meta.json new file mode 100644 index 0000000000..3d3d7f75a8 --- /dev/null +++ b/Resources/Textures/Mobs/Aliens/elemental.rsi/meta.json @@ -0,0 +1,44 @@ +{ + "version": 1, + "license": "CC0-1.0", + "copyright": "Created by TheShuEd (github) for Space Station 14.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "dead" + }, + { + "name": "alive", + "directions": 4, + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + } + ] +} diff --git a/Resources/Textures/Structures/Specific/Anomalies/liquid_anom.rsi/anom.png b/Resources/Textures/Structures/Specific/Anomalies/liquid_anom.rsi/anom.png new file mode 100644 index 0000000000000000000000000000000000000000..f421984c36b38c91d00dcfb2b4518e05fd209dcb GIT binary patch literal 1239 zcmV;|1StE7P)Px(kx4{BRCt{2T03qVNf3Q9Oisf?OMw9su%Sem7ILtG?Rz-&1>_4THI(`S@&%OY z1Ui6VhhAW_O$-Yw83asGFS#uuXCjC{#?AQwU^;8?_1i^ML-1k>xh+B}Acg;ts?4=(-L7!fN+l=Zfs~vC z&=JGdW{vIVWAVE6!4CdpT&u_Oc&;Jc|UAcQ_u!1=Fr zYmS@{SAa`^y&U-ZBlM{PeqYzUT^d{nX?Q3V0AOW5$UPe&ZhGz0FqvJU)eBT=2sIpt z?;ouITL6KG&o3t{*KBM*ALIRpkG(cS8?N91pw$cL#m&n2f4^Ni@8eB??*kl@*%g3r z@Ib$1z-Qdv6G%g=7r2Yajn=5t&=7J#xsnj7EUp0n##($q=TOa5ERgt zpO3SHmmrt`nuXKTGp`Ue9NY^Qz`ci&KI=aPTbuRD%*SRQNccyH9%Np=dSM7-kO+|Q zrf_mz08#E_Vf=}Xg!#}nc$?Fe2)n|hffIU(i#^`v2tI{x9h?OP1qB5K1qB5K1^-QS z`r+Vfb*NLPo7*dbCY zNW^!kH zMCE9YbC*bpQA3h^ac|J&58w^T^UDd&FDK5nSl23$x$*x<{Ls?Uc`9-*V-liSyS{^2DDV1l2wH>Nd4NwBLx z;y3WYu0T8ZMz?tO^obekLb5@EVEY4X0t$RoEgPk^s?g}RcXN~`AXI@Ae61=|0jV3Y z$RQH4q1}zCoUe1E(Hh@>Os#Ww)j+Nl8!unIaP}3%E-^x_lqtVT4evEXfqd(oCLrWc zAy9iBST4(yex%4D;=9Hhqr5q3C!uSD)a6j&uPZe))i!T$j7P|B)`lQ*h!8P+aVpf$9ay3agNDn1{j5}XK7N20ML&Jxz z<$rjvzj1ncCK{`T1G5BO!H3%Py&WR4&-R`DzWgx_QDN&gC`kB$<=0pWKOpl8h{U-} z5x$*1SKu)XF@C9rUJel#euqIJq@frj3JMBR@DmS2a2V6w@B#n;002ovPDHLkV1lhM BF5mzF literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Specific/Anomalies/liquid_anom.rsi/meta.json b/Resources/Textures/Structures/Specific/Anomalies/liquid_anom.rsi/meta.json new file mode 100644 index 0000000000..320816f3c5 --- /dev/null +++ b/Resources/Textures/Structures/Specific/Anomalies/liquid_anom.rsi/meta.json @@ -0,0 +1,33 @@ +{ + "version": 1, + "license": "CC0-1.0", + "copyright": "Created by TheShuEd (github) for ss14", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "anom", + "delays": [ + [ + 0.18625, + 0.18625, + 0.18625, + 0.18625 + ] + ] + }, + { + "name": "pulse", + "delays": [ + [ + 0.15625, + 0.15625, + 0.15625, + 0.15625 + ] + ] + } + ] +} diff --git a/Resources/Textures/Structures/Specific/Anomalies/liquid_anom.rsi/pulse.png b/Resources/Textures/Structures/Specific/Anomalies/liquid_anom.rsi/pulse.png new file mode 100644 index 0000000000000000000000000000000000000000..3447184fb6fb09436a7834135c9b52f693fe2359 GIT binary patch literal 1509 zcmVPx)pGibPRCt{2Tg_@4R}}tKnn+l}f-EFsVFv;>L?loZ646B$d4+8A0?rF~YrORf z$S2WT`~A$@-P=5^}vlFF9B)g`gQB)nd$0s#CV!12ksvjR!w0>HDU zPms^$V&D5g005CLHa!w4*=V*xGF*lq1n>qvt~$NcP9S4xoJO-1s*G0Y0Dz^(4`~zx zfR$VpE4gg+cRrUxaW#*PO4&$JF6y-^8qHRyGM;3M@3=#nn83iE!8HV57UvXrezCRtErxlu#LN z@_t&7+?8B5CWnmd_HVFWdSo4^xSGdRNBx~~3Yd}|z%zcr0$}gpFwsD8UlS#R7oIRPY9V zWPHyXYR6Yj0hxaDTIR9?1sO)Tgbz_;RMD#@@kU_~PaBm;xqR z$^u2|QRH2dA?YB34420u8Ecgi9v1TWd+5gwLdbYO2q5kRjSAT)D=XLYhPXVvP%4-d zvJSd&_YMxjwMr>k#Z=F!0x|WF%e%YEL9;SE3HA;S!&LGc%~tr~&%eT?udd$(7TWl` z#=<&(VGUnGz$|JAOMDNw7fiSpO57C|Z8N0ZS97+Mv#8JCH4>M{fl0vwm_9=kdj;m{ z2vq=F<*^?Yg{jJAa;12deF8c?#Nw&k7y#P2!%39M6LlgBwn=V=-xOnm~jCJ9cH zhOs|Dt`d=uv&$}qqcIBE2iV$NSN?XEl_OQ3fZQ{ngQ+(FU@(A$%fz?uRioQ$t+J&rEmnXG zrv?c!9{5(a+TJK*d!r0s;vgOMUHb!c@@;UPdQJ@zChym_9y=8!IZ!1&6Vr6Yn~w9X zQ-GUn0APEgjL%m+*0WrQnZA&HpnS$wKn3&+WOazBplea3=^!FWoljQyHW)=Kj>rO= z;kF93mH~41w;@e2(*?wWBuQ5Vr2||O78$Q{LfReyIRIOm>oF&oHffxoB<>aFB%E2X z!sY~$rILNs>A9813A)50-`7Q5tm4k2T(-5j9<54Z;*}lou#h)yxU3A&^#^c})_9vd z+J^v>!Yo}R+twWd7#zT%ukM+iH=If2+wCKC`(L$8Bpu4dLhK^hm!}uj4iRgA0HEGV zQgYLk$kQ56@<|4#PeIo^U;?W@KsJ(u?eFenNKx0`fZsm+9{&3CPfq;_DrW;o)srxj zK7gbhAg<6Qv%Bm`h~fWOPe}bgLxe`N6>e0@i(TnmXyfk#k_6x%2`?{J50wPl00000 LNkvXXu0mjfZNa{0 literal 0 HcmV?d00001