From 8d6565ea423388633257b48fe3d8bb65bea6b95b Mon Sep 17 00:00:00 2001 From: Alex Evgrashin Date: Sat, 22 Jan 2022 15:55:11 +0300 Subject: [PATCH] Xenoarchaeology artifacts (#6069) Co-authored-by: Alexander Evgrashin --- Content.Client/Entry/IgnoredComponents.cs | 8 +- .../XenoArtifacts/RandomArtifactVisualizer.cs | 29 +++ .../XenoArtifacts/ArtifactComponent.cs | 37 +++ .../XenoArtifacts/ArtifactSystem.cs | 70 +++++ .../Components/SpawnArtifactComponent.cs | 37 +++ .../Components/TelepathicArtifactComponent.cs | 45 ++++ .../Effects/Systems/SpawnArtifactSystem.cs | 67 +++++ .../Systems/TelepathicArtifactSystem.cs | 46 ++++ .../Events/ArtifactActivatedEvent.cs | 16 ++ .../RandomArtifactSpriteComponent.cs | 22 ++ .../RandomArtifactSpriteSystem.cs | 58 +++++ .../Components/ArtifactGasTriggerComponent.cs | 41 +++ .../ArtifactInteractionTriggerComponent.cs | 12 + .../Systems/ArtifactGasTriggerSystem.cs | 51 ++++ .../ArtifactInteractionTriggerSystem.cs | 29 +++ .../XenoArtifacts/SharedArtifact.cs | 11 + .../xenoarchaeology/badfeeling-artifact.ftl | 22 ++ .../xenoarchaeology/goodfeeling-artifact.ftl | 21 ++ .../Markers/Spawners/Random/artifacts.yml | 25 ++ .../Specific/Xenoarchaeology/artifacts.yml | 124 +++++++++ .../xeno_artifacts.rsi/ano01.png | Bin 0 -> 572 bytes .../xeno_artifacts.rsi/ano01_on.png | Bin 0 -> 1679 bytes .../xeno_artifacts.rsi/ano02.png | Bin 0 -> 304 bytes .../xeno_artifacts.rsi/ano02_on.png | Bin 0 -> 656 bytes .../xeno_artifacts.rsi/ano03.png | Bin 0 -> 1014 bytes .../xeno_artifacts.rsi/ano03_on.png | Bin 0 -> 4385 bytes .../xeno_artifacts.rsi/ano04.png | Bin 0 -> 836 bytes .../xeno_artifacts.rsi/ano04_on.png | Bin 0 -> 3606 bytes .../xeno_artifacts.rsi/ano05.png | Bin 0 -> 818 bytes .../xeno_artifacts.rsi/ano05_on.png | Bin 0 -> 3022 bytes .../xeno_artifacts.rsi/ano06.png | Bin 0 -> 337 bytes .../xeno_artifacts.rsi/ano06_on.png | Bin 0 -> 1706 bytes .../xeno_artifacts.rsi/ano07.png | Bin 0 -> 661 bytes .../xeno_artifacts.rsi/ano07_on.png | Bin 0 -> 2494 bytes .../xeno_artifacts.rsi/ano08.png | Bin 0 -> 783 bytes .../xeno_artifacts.rsi/ano08_on.png | Bin 0 -> 1669 bytes .../xeno_artifacts.rsi/ano09.png | Bin 0 -> 1004 bytes .../xeno_artifacts.rsi/ano09_on.png | Bin 0 -> 3676 bytes .../xeno_artifacts.rsi/ano10.png | Bin 0 -> 745 bytes .../xeno_artifacts.rsi/ano10_on.png | Bin 0 -> 2036 bytes .../xeno_artifacts.rsi/ano11.png | Bin 0 -> 1020 bytes .../xeno_artifacts.rsi/ano11_on.png | Bin 0 -> 1023 bytes .../xeno_artifacts.rsi/ano12.png | Bin 0 -> 787 bytes .../xeno_artifacts.rsi/ano12_on.png | Bin 0 -> 3487 bytes .../xeno_artifacts.rsi/ano13.png | Bin 0 -> 1610 bytes .../xeno_artifacts.rsi/ano13_on.png | Bin 0 -> 3812 bytes .../xeno_artifacts.rsi/ano14.png | Bin 0 -> 435 bytes .../xeno_artifacts.rsi/ano14_on.png | Bin 0 -> 3352 bytes .../xeno_artifacts.rsi/meta.json | 245 ++++++++++++++++++ SpaceStation14.sln.DotSettings | 1 + 50 files changed, 1016 insertions(+), 1 deletion(-) create mode 100644 Content.Client/Xenoarchaeology/XenoArtifacts/RandomArtifactVisualizer.cs create mode 100644 Content.Server/Xenoarchaeology/XenoArtifacts/ArtifactComponent.cs create mode 100644 Content.Server/Xenoarchaeology/XenoArtifacts/ArtifactSystem.cs create mode 100644 Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Components/SpawnArtifactComponent.cs create mode 100644 Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Components/TelepathicArtifactComponent.cs create mode 100644 Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Systems/SpawnArtifactSystem.cs create mode 100644 Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Systems/TelepathicArtifactSystem.cs create mode 100644 Content.Server/Xenoarchaeology/XenoArtifacts/Events/ArtifactActivatedEvent.cs create mode 100644 Content.Server/Xenoarchaeology/XenoArtifacts/RandomArtifactSpriteComponent.cs create mode 100644 Content.Server/Xenoarchaeology/XenoArtifacts/RandomArtifactSpriteSystem.cs create mode 100644 Content.Server/Xenoarchaeology/XenoArtifacts/Triggers/Components/ArtifactGasTriggerComponent.cs create mode 100644 Content.Server/Xenoarchaeology/XenoArtifacts/Triggers/Components/ArtifactInteractionTriggerComponent.cs create mode 100644 Content.Server/Xenoarchaeology/XenoArtifacts/Triggers/Systems/ArtifactGasTriggerSystem.cs create mode 100644 Content.Server/Xenoarchaeology/XenoArtifacts/Triggers/Systems/ArtifactInteractionTriggerSystem.cs create mode 100644 Content.Shared/Xenoarchaeology/XenoArtifacts/SharedArtifact.cs create mode 100644 Resources/Locale/en-US/xenoarchaeology/badfeeling-artifact.ftl create mode 100644 Resources/Locale/en-US/xenoarchaeology/goodfeeling-artifact.ftl create mode 100644 Resources/Prototypes/Entities/Markers/Spawners/Random/artifacts.yml create mode 100644 Resources/Prototypes/Entities/Objects/Specific/Xenoarchaeology/artifacts.yml create mode 100644 Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano01.png create mode 100644 Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano01_on.png create mode 100644 Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano02.png create mode 100644 Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano02_on.png create mode 100644 Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano03.png create mode 100644 Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano03_on.png create mode 100644 Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano04.png create mode 100644 Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano04_on.png create mode 100644 Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano05.png create mode 100644 Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano05_on.png create mode 100644 Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano06.png create mode 100644 Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano06_on.png create mode 100644 Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano07.png create mode 100644 Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano07_on.png create mode 100644 Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano08.png create mode 100644 Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano08_on.png create mode 100644 Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano09.png create mode 100644 Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano09_on.png create mode 100644 Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano10.png create mode 100644 Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano10_on.png create mode 100644 Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano11.png create mode 100644 Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano11_on.png create mode 100644 Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano12.png create mode 100644 Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano12_on.png create mode 100644 Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano13.png create mode 100644 Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano13_on.png create mode 100644 Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano14.png create mode 100644 Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano14_on.png create mode 100644 Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/meta.json diff --git a/Content.Client/Entry/IgnoredComponents.cs b/Content.Client/Entry/IgnoredComponents.cs index 14086f402f..8bbad8b1ad 100644 --- a/Content.Client/Entry/IgnoredComponents.cs +++ b/Content.Client/Entry/IgnoredComponents.cs @@ -326,7 +326,13 @@ namespace Content.Client.Entry "GrowingKudzu", "MonkeyAccent", "ReplacementAccent", - "ResistLocker" + "ResistLocker", + "SpawnArtifact", + "TelepathicArtifact", + "ArtifactGasTrigger", + "ArtifactInteractionTrigger", + "Artifact", + "RandomArtifactSprite" }; } } diff --git a/Content.Client/Xenoarchaeology/XenoArtifacts/RandomArtifactVisualizer.cs b/Content.Client/Xenoarchaeology/XenoArtifacts/RandomArtifactVisualizer.cs new file mode 100644 index 0000000000..ba8484b784 --- /dev/null +++ b/Content.Client/Xenoarchaeology/XenoArtifacts/RandomArtifactVisualizer.cs @@ -0,0 +1,29 @@ +using Content.Shared.Xenoarchaeology.XenoArtifacts; +using Robust.Client.GameObjects; +using Robust.Shared.GameObjects; +using Robust.Shared.IoC; + +namespace Content.Client.Xenoarchaeology.XenoArtifacts; + +public class RandomArtifactVisualizer : AppearanceVisualizer +{ + public override void OnChangeData(AppearanceComponent component) + { + base.OnChangeData(component); + + var entities = IoCManager.Resolve(); + if (!entities.TryGetComponent(component.Owner, out ISpriteComponent? sprite)) return; + + if (!component.TryGetData(SharedArtifactsVisuals.SpriteIndex, out int spriteIndex)) + return; + + if (!component.TryGetData(SharedArtifactsVisuals.IsActivated, out bool isActivated)) + isActivated = false; + + var spriteIndexStr = spriteIndex.ToString("D2"); + var spritePrefix = isActivated ? "_on" : ""; + + var spriteState = "ano" + spriteIndexStr + spritePrefix; + sprite.LayerSetState(0, spriteState); + } +} diff --git a/Content.Server/Xenoarchaeology/XenoArtifacts/ArtifactComponent.cs b/Content.Server/Xenoarchaeology/XenoArtifacts/ArtifactComponent.cs new file mode 100644 index 0000000000..8b5386a15c --- /dev/null +++ b/Content.Server/Xenoarchaeology/XenoArtifacts/ArtifactComponent.cs @@ -0,0 +1,37 @@ +using System; +using Robust.Shared.GameObjects; +using Robust.Shared.Serialization.Manager.Attributes; +using Robust.Shared.ViewVariables; + +namespace Content.Server.Xenoarchaeology.XenoArtifacts; + +[RegisterComponent] +public class ArtifactComponent : Component +{ + public override string Name => "Artifact"; + + /// + /// Should artifact pick a random trigger on startup? + /// + [DataField("randomTrigger")] + public bool RandomTrigger = true; + + /// + /// List of all possible triggers activations. + /// Should be same as components names. + /// + [DataField("possibleTriggers")] + public string[] PossibleTriggers = { + "ArtifactInteractionTrigger", + "ArtifactGasTrigger" + }; + + /// + /// Cooldown time between artifact activations (in seconds). + /// + [DataField("timer")] + [ViewVariables(VVAccess.ReadWrite)] + public double CooldownTime = 10; + + public TimeSpan LastActivationTime; +} diff --git a/Content.Server/Xenoarchaeology/XenoArtifacts/ArtifactSystem.cs b/Content.Server/Xenoarchaeology/XenoArtifacts/ArtifactSystem.cs new file mode 100644 index 0000000000..ca62871709 --- /dev/null +++ b/Content.Server/Xenoarchaeology/XenoArtifacts/ArtifactSystem.cs @@ -0,0 +1,70 @@ +using Content.Server.Xenoarchaeology.XenoArtifacts.Events; +using Robust.Shared.GameObjects; +using Robust.Shared.IoC; +using Robust.Shared.Random; +using Robust.Shared.Timing; + +namespace Content.Server.Xenoarchaeology.XenoArtifacts; + +public class ArtifactSystem : EntitySystem +{ + [Dependency] private readonly IGameTiming _gameTiming = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly IComponentFactory _componentFactory = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnInit); + } + + private void OnInit(EntityUid uid, ArtifactComponent component, ComponentInit args) + { + if (component.RandomTrigger) + { + AddRandomTrigger(uid, component); + } + } + + public void AddRandomTrigger(EntityUid uid, ArtifactComponent? component = null) + { + if (!Resolve(uid, ref component)) + return; + + var triggerName = _random.Pick(component.PossibleTriggers); + var trigger = (Component) _componentFactory.GetComponent(triggerName); + trigger.Owner = uid; + + EntityManager.AddComponent(uid, trigger); + } + + public bool TryActivateArtifact(EntityUid uid, EntityUid? user = null, + ArtifactComponent? component = null) + { + if (!Resolve(uid, ref component)) + return false; + + // check if artifact isn't under cooldown + var timeDif = _gameTiming.CurTime - component.LastActivationTime; + if (timeDif.TotalSeconds < component.CooldownTime) + return false; + + ForceActivateArtifact(uid, user, component); + return true; + } + + public void ForceActivateArtifact(EntityUid uid, EntityUid? user = null, + ArtifactComponent? component = null) + { + if (!Resolve(uid, ref component)) + return; + + component.LastActivationTime = _gameTiming.CurTime; + + var ev = new ArtifactActivatedEvent() + { + Activator = user + }; + RaiseLocalEvent(uid, ev); + } +} diff --git a/Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Components/SpawnArtifactComponent.cs b/Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Components/SpawnArtifactComponent.cs new file mode 100644 index 0000000000..154759887a --- /dev/null +++ b/Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Components/SpawnArtifactComponent.cs @@ -0,0 +1,37 @@ +using System.Collections.Generic; +using Robust.Shared.GameObjects; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.Manager.Attributes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List; +using Robust.Shared.ViewVariables; + +namespace Content.Server.Xenoarchaeology.XenoArtifacts.Effects.Components; + +/// +/// When activated artifact will spawn an entity from prototype. +/// It could be an angry mob or some random item. +/// +[RegisterComponent] +public class SpawnArtifactComponent : Component +{ + public override string Name => "SpawnArtifact"; + + [DataField("random")] + public bool RandomPrototype = true; + + [DataField("possiblePrototypes", customTypeSerializer:typeof(PrototypeIdListSerializer))] + public List PossiblePrototypes = new(); + + [ViewVariables(VVAccess.ReadWrite)] + [DataField("prototype", customTypeSerializer:typeof(PrototypeIdSerializer))] + public string? Prototype; + + [DataField("range")] + public float Range = 0.5f; + + [DataField("maxSpawns")] + public int MaxSpawns = 20; + + public int SpawnsCount = 0; +} diff --git a/Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Components/TelepathicArtifactComponent.cs b/Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Components/TelepathicArtifactComponent.cs new file mode 100644 index 0000000000..00ecdd9790 --- /dev/null +++ b/Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Components/TelepathicArtifactComponent.cs @@ -0,0 +1,45 @@ +using Robust.Shared.GameObjects; +using Robust.Shared.Serialization.Manager.Attributes; +using Robust.Shared.ViewVariables; + +namespace Content.Server.Xenoarchaeology.XenoArtifacts.Effects.Components; + +/// +/// Harmless artifact that broadcast "thoughts" to players nearby. +/// Thoughts are shown as popups and unique for each player. +/// +[RegisterComponent] +public class TelepathicArtifactComponent : Component +{ + public override string Name => "TelepathicArtifact"; + + /// + /// Loc string ids of telepathic messages. + /// Will be randomly picked and shown to player. + /// + [DataField("messages")] + [ViewVariables(VVAccess.ReadWrite)] + public string[] Messages = default!; + + /// + /// Loc string ids of telepathic messages (spooky version). + /// Will be randomly picked and shown to player. + /// + [DataField("drastic")] + [ViewVariables(VVAccess.ReadWrite)] + public string[] DrasticMessages = default!; + + /// + /// Probability to pick drastic version of message. + /// + [DataField("drasticProb")] + [ViewVariables(VVAccess.ReadWrite)] + public float DrasticMessageProb = 0.2f; + + /// + /// Radius in which player can receive artifacts messages. + /// + [DataField("range")] + [ViewVariables(VVAccess.ReadWrite)] + public float Range = 10f; +} diff --git a/Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Systems/SpawnArtifactSystem.cs b/Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Systems/SpawnArtifactSystem.cs new file mode 100644 index 0000000000..9dc8559a23 --- /dev/null +++ b/Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Systems/SpawnArtifactSystem.cs @@ -0,0 +1,67 @@ +using Content.Server.Clothing.Components; +using Content.Server.Xenoarchaeology.XenoArtifacts.Effects.Components; +using Content.Server.Xenoarchaeology.XenoArtifacts.Events; +using Content.Shared.Hands.Components; +using Robust.Shared.GameObjects; +using Robust.Shared.IoC; +using Robust.Shared.Maths; +using Robust.Shared.Random; + +namespace Content.Server.Xenoarchaeology.XenoArtifacts.Effects.Systems; + +public class SpawnArtifactSystem : EntitySystem +{ + [Dependency] private readonly IRobustRandom _random = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnInit); + SubscribeLocalEvent(OnActivate); + } + private void OnInit(EntityUid uid, SpawnArtifactComponent component, ComponentInit args) + { + ChooseRandomPrototype(uid, component); + } + + private void OnActivate(EntityUid uid, SpawnArtifactComponent component, ArtifactActivatedEvent args) + { + if (component.Prototype == null) + return; + if (component.SpawnsCount >= component.MaxSpawns) + return; + + // select spawn position near artifact + var artifactCord = Transform(uid).Coordinates; + var dx = _random.NextFloat(-component.Range, component.Range); + var dy = _random.NextFloat(-component.Range, component.Range); + var spawnCord = artifactCord.Offset(new Vector2(dx, dy)); + + // spawn entity + var spawned = EntityManager.SpawnEntity(component.Prototype, spawnCord); + component.SpawnsCount++; + + // if there is an user - try to put spawned item in their hands + // doesn't work for spawners + if (args.Activator != null && + EntityManager.TryGetComponent(args.Activator.Value, out SharedHandsComponent? hands) && + EntityManager.HasComponent(spawned)) + { + hands.TryPutInAnyHand(spawned); + } + } + + private void ChooseRandomPrototype(EntityUid uid, SpawnArtifactComponent? component = null) + { + if (!Resolve(uid, ref component)) + return; + + if (!component.RandomPrototype) + return; + if (component.PossiblePrototypes.Count == 0) + return; + + var proto = _random.Pick(component.PossiblePrototypes); + component.Prototype = proto; + } +} diff --git a/Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Systems/TelepathicArtifactSystem.cs b/Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Systems/TelepathicArtifactSystem.cs new file mode 100644 index 0000000000..90736f6edc --- /dev/null +++ b/Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Systems/TelepathicArtifactSystem.cs @@ -0,0 +1,46 @@ +using Content.Server.Xenoarchaeology.XenoArtifacts.Effects.Components; +using Content.Server.Xenoarchaeology.XenoArtifacts.Events; +using Content.Shared.Popups; +using Robust.Server.GameObjects; +using Robust.Shared.GameObjects; +using Robust.Shared.IoC; +using Robust.Shared.Localization; +using Robust.Shared.Player; +using Robust.Shared.Random; + +namespace Content.Server.Xenoarchaeology.XenoArtifacts.Effects.Systems; + +public class TelepathicArtifactSystem : EntitySystem +{ + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly IEntityLookup _lookup = default!; + [Dependency] private readonly SharedPopupSystem _popupSystem = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnActivate); + } + + private void OnActivate(EntityUid uid, TelepathicArtifactComponent component, ArtifactActivatedEvent args) + { + // try to find victims nearby + var victims = _lookup.GetEntitiesInRange(uid, component.Range); + foreach (var victimUid in victims) + { + if (!EntityManager.HasComponent(victimUid)) + continue; + + // roll if msg should be usual or drastic + var isDrastic = _random.NextFloat() <= component.DrasticMessageProb; + var msgArr = isDrastic ? component.DrasticMessages : component.Messages; + + // pick a random message + var msgId = _random.Pick(msgArr); + var msg = Loc.GetString(msgId); + + // show it as a popup, but only for the victim + _popupSystem.PopupEntity(msg, victimUid, Filter.Entities(victimUid)); + } + } +} diff --git a/Content.Server/Xenoarchaeology/XenoArtifacts/Events/ArtifactActivatedEvent.cs b/Content.Server/Xenoarchaeology/XenoArtifacts/Events/ArtifactActivatedEvent.cs new file mode 100644 index 0000000000..32da8b5fde --- /dev/null +++ b/Content.Server/Xenoarchaeology/XenoArtifacts/Events/ArtifactActivatedEvent.cs @@ -0,0 +1,16 @@ +using Robust.Shared.GameObjects; + +namespace Content.Server.Xenoarchaeology.XenoArtifacts.Events; + +/// +/// Invokes when artifact was successfully activated. +/// Used to start attached effects. +/// +public class ArtifactActivatedEvent : EntityEventArgs +{ + /// + /// Entity that activate this artifact. + /// Usually player, but can also be another object. + /// + public EntityUid? Activator; +} diff --git a/Content.Server/Xenoarchaeology/XenoArtifacts/RandomArtifactSpriteComponent.cs b/Content.Server/Xenoarchaeology/XenoArtifacts/RandomArtifactSpriteComponent.cs new file mode 100644 index 0000000000..abacdeb76a --- /dev/null +++ b/Content.Server/Xenoarchaeology/XenoArtifacts/RandomArtifactSpriteComponent.cs @@ -0,0 +1,22 @@ +using System; +using Robust.Shared.GameObjects; +using Robust.Shared.Serialization.Manager.Attributes; + +namespace Content.Server.Xenoarchaeology.XenoArtifacts; + +[RegisterComponent] +public class RandomArtifactSpriteComponent : Component +{ + public override string Name => "RandomArtifactSprite"; + + [DataField("minSprite")] + public int MinSprite = 1; + + [DataField("maxSprite")] + public int MaxSprite = 14; + + [DataField("activationTime")] + public double ActivationTime = 2.0; + + public TimeSpan? ActivationStart; +} diff --git a/Content.Server/Xenoarchaeology/XenoArtifacts/RandomArtifactSpriteSystem.cs b/Content.Server/Xenoarchaeology/XenoArtifacts/RandomArtifactSpriteSystem.cs new file mode 100644 index 0000000000..4bbe2a3e67 --- /dev/null +++ b/Content.Server/Xenoarchaeology/XenoArtifacts/RandomArtifactSpriteSystem.cs @@ -0,0 +1,58 @@ +using System; +using Content.Server.Xenoarchaeology.XenoArtifacts.Events; +using Content.Shared.Xenoarchaeology.XenoArtifacts; +using Robust.Shared.GameObjects; +using Robust.Shared.IoC; +using Robust.Shared.Random; +using Robust.Shared.Timing; + +namespace Content.Server.Xenoarchaeology.XenoArtifacts; + +public class RandomArtifactSpriteSystem : EntitySystem +{ + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly IGameTiming _time = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnInit); + SubscribeLocalEvent(OnActivated); + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + var query = EntityManager.EntityQuery(); + foreach (var (component, appearance) in query) + { + if (component.ActivationStart == null) + return; + + var timeDif = _time.CurTime - component.ActivationStart.Value; + if (timeDif.Seconds >= component.ActivationTime) + { + appearance.SetData(SharedArtifactsVisuals.IsActivated, false); + component.ActivationStart = null; + } + } + } + + private void OnInit(EntityUid uid, RandomArtifactSpriteComponent component, ComponentInit args) + { + if (!TryComp(uid, out AppearanceComponent? appearance)) + return; + + var randomSprite = _random.Next(component.MinSprite, component.MaxSprite + 1); + appearance.SetData(SharedArtifactsVisuals.SpriteIndex, randomSprite); + } + + private void OnActivated(EntityUid uid, RandomArtifactSpriteComponent component, ArtifactActivatedEvent args) + { + if (!TryComp(uid, out AppearanceComponent? appearance)) + return; + + appearance.SetData(SharedArtifactsVisuals.IsActivated, true); + component.ActivationStart = _time.CurTime; + } +} diff --git a/Content.Server/Xenoarchaeology/XenoArtifacts/Triggers/Components/ArtifactGasTriggerComponent.cs b/Content.Server/Xenoarchaeology/XenoArtifacts/Triggers/Components/ArtifactGasTriggerComponent.cs new file mode 100644 index 0000000000..3f1357d8c2 --- /dev/null +++ b/Content.Server/Xenoarchaeology/XenoArtifacts/Triggers/Components/ArtifactGasTriggerComponent.cs @@ -0,0 +1,41 @@ +using Content.Shared.Atmos; +using Robust.Shared.GameObjects; +using Robust.Shared.Serialization.Manager.Attributes; +using Robust.Shared.ViewVariables; + +namespace Content.Server.Xenoarchaeology.XenoArtifacts.Triggers.Components; + +/// +/// Activates artifact when it surrounded by certain gas. +/// +[RegisterComponent] +public class ArtifactGasTriggerComponent : Component +{ + public override string Name => "ArtifactGasTrigger"; + + /// + /// List of possible activation gases to pick on startup. + /// + [DataField("possibleGas")] + public Gas[] PossibleGases = + { + Gas.Oxygen, + Gas.Plasma, + Gas.Nitrogen, + Gas.CarbonDioxide + }; + + /// + /// Gas id that will activate artifact. + /// + [DataField("gas")] + [ViewVariables(VVAccess.ReadWrite)] + public Gas? ActivationGas; + + /// + /// How many moles of gas should be present in room to activate artifact. + /// + [DataField("moles")] + [ViewVariables(VVAccess.ReadWrite)] + public float ActivationMoles = Atmospherics.MolesCellStandard * 0.1f; +} diff --git a/Content.Server/Xenoarchaeology/XenoArtifacts/Triggers/Components/ArtifactInteractionTriggerComponent.cs b/Content.Server/Xenoarchaeology/XenoArtifacts/Triggers/Components/ArtifactInteractionTriggerComponent.cs new file mode 100644 index 0000000000..b75e86def3 --- /dev/null +++ b/Content.Server/Xenoarchaeology/XenoArtifacts/Triggers/Components/ArtifactInteractionTriggerComponent.cs @@ -0,0 +1,12 @@ +using Robust.Shared.GameObjects; + +namespace Content.Server.Xenoarchaeology.XenoArtifacts.Triggers.Components; + +/// +/// Activate artifact just by touching it. +/// +[RegisterComponent] +public class ArtifactInteractionTriggerComponent : Component +{ + public override string Name => "ArtifactInteractionTrigger"; +} diff --git a/Content.Server/Xenoarchaeology/XenoArtifacts/Triggers/Systems/ArtifactGasTriggerSystem.cs b/Content.Server/Xenoarchaeology/XenoArtifacts/Triggers/Systems/ArtifactGasTriggerSystem.cs new file mode 100644 index 0000000000..1cc7cd331f --- /dev/null +++ b/Content.Server/Xenoarchaeology/XenoArtifacts/Triggers/Systems/ArtifactGasTriggerSystem.cs @@ -0,0 +1,51 @@ +using Content.Server.Atmos.EntitySystems; +using Content.Server.Xenoarchaeology.XenoArtifacts.Triggers.Components; +using Robust.Shared.GameObjects; +using Robust.Shared.IoC; +using Robust.Shared.Random; + +namespace Content.Server.Xenoarchaeology.XenoArtifacts.Triggers.Systems; + +public class ArtifactGasTriggerSystem : EntitySystem +{ + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly AtmosphereSystem _atmosphereSystem = default!; + [Dependency] private readonly ArtifactSystem _artifactSystem = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnInit); + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + var query = EntityManager.EntityQuery(); + foreach (var (trigger, transform) in query) + { + if (trigger.ActivationGas == null) + return; + + var environment = _atmosphereSystem.GetTileMixture(transform.Coordinates, true); + if (environment == null) + return; + + // check if outside there is enough moles to activate artifact + var moles = environment.GetMoles(trigger.ActivationGas.Value); + if (moles < trigger.ActivationMoles) + return; + + _artifactSystem.TryActivateArtifact(trigger.Owner); + } + } + + private void OnInit(EntityUid uid, ArtifactGasTriggerComponent component, ComponentInit args) + { + if (component.ActivationGas == null) + { + var gas = _random.Pick(component.PossibleGases); + component.ActivationGas = gas; + } + } +} diff --git a/Content.Server/Xenoarchaeology/XenoArtifacts/Triggers/Systems/ArtifactInteractionTriggerSystem.cs b/Content.Server/Xenoarchaeology/XenoArtifacts/Triggers/Systems/ArtifactInteractionTriggerSystem.cs new file mode 100644 index 0000000000..1d51cbe097 --- /dev/null +++ b/Content.Server/Xenoarchaeology/XenoArtifacts/Triggers/Systems/ArtifactInteractionTriggerSystem.cs @@ -0,0 +1,29 @@ +using Content.Server.Xenoarchaeology.XenoArtifacts.Triggers.Components; +using Content.Shared.ActionBlocker; +using Content.Shared.Interaction; +using Content.Shared.Interaction.Helpers; +using Robust.Shared.GameObjects; +using Robust.Shared.IoC; + +namespace Content.Server.Xenoarchaeology.XenoArtifacts.Triggers.Systems; + +public class ArtifactInteractionTriggerSystem : EntitySystem +{ + [Dependency] private readonly ArtifactSystem _artifactSystem = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnInteract); + } + + private void OnInteract(EntityUid uid, ArtifactInteractionTriggerComponent component, InteractHandEvent args) + { + if (args.Handled) + return; + if (!args.InRangeUnobstructed()) + return; + + args.Handled = _artifactSystem.TryActivateArtifact(uid, args.User); + } +} diff --git a/Content.Shared/Xenoarchaeology/XenoArtifacts/SharedArtifact.cs b/Content.Shared/Xenoarchaeology/XenoArtifacts/SharedArtifact.cs new file mode 100644 index 0000000000..d10c4a325d --- /dev/null +++ b/Content.Shared/Xenoarchaeology/XenoArtifacts/SharedArtifact.cs @@ -0,0 +1,11 @@ +using System; +using Robust.Shared.Serialization; + +namespace Content.Shared.Xenoarchaeology.XenoArtifacts; + +[Serializable, NetSerializable] +public enum SharedArtifactsVisuals : byte +{ + SpriteIndex, + IsActivated +} diff --git a/Resources/Locale/en-US/xenoarchaeology/badfeeling-artifact.ftl b/Resources/Locale/en-US/xenoarchaeology/badfeeling-artifact.ftl new file mode 100644 index 0000000000..e3224af085 --- /dev/null +++ b/Resources/Locale/en-US/xenoarchaeology/badfeeling-artifact.ftl @@ -0,0 +1,22 @@ +badfeeling-artifact-1 = Something doesn't feel right. +badfeeling-artifact-2 = You get a strange feeling in your gut. +badfeeling-artifact-3 = Your instincts are trying to warn you about something. +badfeeling-artifact-4 = Someone just walked over your grave. +badfeeling-artifact-5 = There's a strange feeling in the air. +badfeeling-artifact-6 = There's a strange smell in the air. +badfeeling-artifact-7 = The tips of your fingers feel tingly. +badfeeling-artifact-8 = You feel witchy. +badfeeling-artifact-9 = You have a terrible sense of foreboding. +badfeeling-artifact-10 = You've got a bad feeling about this. +badfeeling-artifact-11 = Your scalp prickles. +badfeeling-artifact-12 = The light seems to flicker. +badfeeling-artifact-13 = The shadows seem to lengthen. +badfeeling-artifact-14 = The walls are getting closer. +badfeeling-artifact-15 = Something is wrong. + +badfeeling-artifact-drastic-1 = Someone's trying to kill you! +badfeeling-artifact-drastic-2 = There's something out there! +badfeeling-artifact-drastic-3 = What's happening to you? +badfeeling-artifact-drastic-4 = OH GOD! +badfeeling-artifact-drastic-5 = HELP ME! +badfeeling-artifact-drastic-6 = You've got to get out of here! diff --git a/Resources/Locale/en-US/xenoarchaeology/goodfeeling-artifact.ftl b/Resources/Locale/en-US/xenoarchaeology/goodfeeling-artifact.ftl new file mode 100644 index 0000000000..007138c00b --- /dev/null +++ b/Resources/Locale/en-US/xenoarchaeology/goodfeeling-artifact.ftl @@ -0,0 +1,21 @@ +goodfeeling-artifact-1 = You feel good. +goodfeeling-artifact-2 = Everything seems to be going alright +goodfeeling-artifact-3 = You've got a good feeling about this +goodfeeling-artifact-4 = Your instincts tell you everything is going to be getting better. +goodfeeling-artifact-5 = There's a good feeling in the air. +goodfeeling-artifact-6 = Something smells... good. +goodfeeling-artifact-7 = The tips of your fingers feel tingly. +goodfeeling-artifact-8 = You've got a good feeling about this. +goodfeeling-artifact-9 = You feel happy. +goodfeeling-artifact-10 = ou fight the urge to smile. +goodfeeling-artifact-11 = Your scalp prickles. +goodfeeling-artifact-12 = All the colours seem a bit more vibrant. +goodfeeling-artifact-13 = Everything seems a little lighter. +goodfeeling-artifact-14 = The troubles of the world seem to fade away. + +goodfeeling-artifact-drastic-1 = You want to hug everyone you meet! +goodfeeling-artifact-drastic-2 = Everything is going so well! +goodfeeling-artifact-drastic-3 = You feel euphoric. +goodfeeling-artifact-drastic-4 = You feel giddy. +goodfeeling-artifact-drastic-5 = You're so happy suddenly you almost want to dance and sing. +goodfeeling-artifact-drastic-6 = You feel like the world is out to help you. diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/artifacts.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/artifacts.yml new file mode 100644 index 0000000000..97a4149946 --- /dev/null +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/artifacts.yml @@ -0,0 +1,25 @@ +- type: entity + id: RandomArtifactSpawner + name: random artifact spawner + parent: MarkerBase + components: + - type: Sprite + layers: + - state: red + - texture: Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano01.png + - type: RandomSpawner + prototypes: + - BadfeelingArtifact + - GoodfeelingArtifact + - AngryMobsSpawnArtifact + - JunkSpawnArtifact + - BananaSpawnArtifact + chance: 1 + +- type: entity + id: RandomArtifactSpawner20 + name: random artifact spawner [20] + parent: RandomArtifactSpawner + components: + - type: RandomSpawner + chance: 0.2 diff --git a/Resources/Prototypes/Entities/Objects/Specific/Xenoarchaeology/artifacts.yml b/Resources/Prototypes/Entities/Objects/Specific/Xenoarchaeology/artifacts.yml new file mode 100644 index 0000000000..75ea5de5da --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Specific/Xenoarchaeology/artifacts.yml @@ -0,0 +1,124 @@ +- type: entity + parent: BaseStructureDynamic + id: BaseXenoArtifact + name: alien artifact + description: A strange alien device. + abstract: true + components: + - type: Sprite + sprite: Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi + netsync: false + state: ano01 + - type: Physics + bodyType: Dynamic + - type: Fixtures + fixtures: + - shape: + !type:PhysShapeCircle + radius: 0.45 + mass: 150 + layer: + - SmallImpassable + mask: + - VaultImpassable + - type: InteractionOutline + - type: Artifact + - type: RandomArtifactSprite + - type: Appearance + visuals: + - type: RandomArtifactVisualizer + +# Telepathic +- type: entity + parent: BaseXenoArtifact + id: BadfeelingArtifact + suffix: Badfeeling + components: + - type: TelepathicArtifact + messages: + - badfeeling-artifact-1 + - badfeeling-artifact-2 + - badfeeling-artifact-3 + - badfeeling-artifact-4 + - badfeeling-artifact-5 + - badfeeling-artifact-6 + - badfeeling-artifact-7 + - badfeeling-artifact-8 + - badfeeling-artifact-9 + - badfeeling-artifact-10 + - badfeeling-artifact-11 + - badfeeling-artifact-12 + - badfeeling-artifact-13 + - badfeeling-artifact-14 + - badfeeling-artifact-15 + drastic: + - badfeeling-artifact-drastic-1 + - badfeeling-artifact-drastic-2 + - badfeeling-artifact-drastic-3 + - badfeeling-artifact-drastic-4 + - badfeeling-artifact-drastic-5 + - badfeeling-artifact-drastic-6 + +- type: entity + parent: BaseXenoArtifact + id: GoodfeelingArtifact + suffix: Goodfeeling + components: + - type: TelepathicArtifact + messages: + - goodfeeling-artifact-1 + - goodfeeling-artifact-2 + - goodfeeling-artifact-3 + - goodfeeling-artifact-4 + - goodfeeling-artifact-5 + - goodfeeling-artifact-6 + - goodfeeling-artifact-7 + - goodfeeling-artifact-8 + - goodfeeling-artifact-9 + - goodfeeling-artifact-10 + - goodfeeling-artifact-11 + - goodfeeling-artifact-12 + - goodfeeling-artifact-13 + - goodfeeling-artifact-14 + drastic: + - goodfeeling-artifact-drastic-1 + - goodfeeling-artifact-drastic-2 + - goodfeeling-artifact-drastic-3 + - goodfeeling-artifact-drastic-4 + - goodfeeling-artifact-drastic-5 + - goodfeeling-artifact-drastic-6 + +# Spawners +- type: entity + parent: BaseXenoArtifact + id: AngryMobsSpawnArtifact + suffix: Angry Mobs Spawn + components: + - type: SpawnArtifact + maxSpawns: 5 + possiblePrototypes: + - MobCarpHolo + - MobCarpMagic + +- type: entity + parent: BaseXenoArtifact + id: JunkSpawnArtifact + suffix: Junk Spawn + components: + - type: SpawnArtifact + maxSpawns: 10 + possiblePrototypes: + - FoodPacketSyndiTrash + - FoodPacketSemkiTrash + - RandomInstruments + - ToySpawner + +- type: entity + parent: BaseXenoArtifact + id: BananaSpawnArtifact + suffix: Banana Spawn + components: + - type: SpawnArtifact + maxSpawns: 20 + possiblePrototypes: + - FoodBanana diff --git a/Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano01.png b/Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano01.png new file mode 100644 index 0000000000000000000000000000000000000000..76514f26c7bef6b291fe1af32c28231901adaa10 GIT binary patch literal 572 zcmV-C0>k}@P)c zYy^u~C5V>3poeE7f!vc~X7z5}+uO{DMDS^5cAl62|9P2Nc#sFV&r%E!-xwJm@cEzq zB%BBo1LRc(&MshN*N=pA1#V0JnZQ-{b@(mtB~NQib=AEYS~UwY_g45=;Xz|BO@w^s?Rb0XZ_! zUh3CC&3@!S&$jx@M+mVnm6KA-Zt$EDGK+aNMD2GUWL~ovT4(*edfe0JSEY zX1zU68p6aEOUg)d0MQ6}s|?9u!7&6>$=XJIod~2M2c1FwYxxW00K{ll(Xk!?0000< KMNUMnLSTX&VFC{T literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano01_on.png b/Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano01_on.png new file mode 100644 index 0000000000000000000000000000000000000000..f63b7c469e13bd20ae624644f51417d9c027b891 GIT binary patch literal 1679 zcmV;A25|X_P)eJp$es^qR@Z`drQFD7IQ+Xw)F~jfa^@X7}ye|NGXw?gwG_?ac1)d-HwY z%)HI_K`Et_Qc5YSQL00Tw9n|sLXn~*ivdW(9_UT4Ln;Hb!vLgV4{nCEIwUqgbqI0b zuVM$F|7!XHNXj1E3`?id8zGSaszZoZJK&E$Vat_b2H^2uB>(1Dtuul-_?_n^|H}{4 z8DUkg0qr2M4Y2I}i|~(tjh(HF0+;t2{8mIkgZCT!G*OT^0=Dl+dS^D$F8o*q(B8jk z3v_OPCwIYp>sk{9ruX~t^Na$o_xtgaMnR$oxN;em=HcrLN$yTB?ZmgDb~NYy8;gzY zHx}XM5?tF3waMtujmkFX{viIwr{UsUb~^aY{XzU^4#L!IbREiFP{9((072eAuvH%O zS_{Iw-^z6BT+ZW%%zQgj|>;1w(h_Up$5Y2b?N{^b@6wKG&?~FoLd}kln z+g73=h_Aih-V4sYXpG%nlead|~jBk%aRKD*V zB^)dT7uGTP< z?yn#Hp^>k>e{^>~eDgQKzo#4desg~mzV9~F9;dEDNDut*arwDA)Le1hN8iH(z`RsG z&Z6j?qHgbO|VdRqB;)H-G$W)Vmw`Q?DTg-}dJ>pMo|6>#>IJ zrmhDTpf(8~-6PNK&*V|f{mU|Z9EP3%eBPNv79W0XQhL~T56REYxAJK0d~)M!_S7t_ z*(1A5UzbOZ_s8P<8o)WCPP%~gba>}7=Mb=T5YP;jII zmaY1F?oA?h0zb8KknT&C{8CCOrIb=iNg~zavZLEYlK)4nil9QVMrZ>ENM-;%`1-Gi zfoKy4h;IO6@F!lT7$YbhCf+T8ZRjv@Aw4^u0gS=FbV%mMzqyCj8bRrB>0`w|+(NdY z!==lL|4BM_nHg8GL^puf`;GkgmPLW-{U*PaQJ}rw)-(49^2ah}8#?H@Kajsa z9=qHH6)eF9h~WL+{P@h*f)MX-;ODUx1bBY~KjvCc)&~^KFY5ye=9l#W1@nUqP{YzY zn*Mj9<;Q2f3sO4tABf1$V;5Az>faHOpZ6}P-SYE`=7-k@^nsXTISPXE-vD699(i;rur~{QZ&*@%X;mP^&^+oRQ}y zII4K_z(HWg;7?Q6Q>eE-B1ng3^$}F%6z0qFebN*{ z%%Ck?H=#SE_ecyY1`T=ns`hl$V$ zu+8{g9{wCIY2bU>L;25!@JBrS?hwAG-IRFs0X3wjX^?TQJuvV30GF4WJ-m^Z7vB(3 z@wpb0@Bb>|XYQhh+u(kXa9GKI*V3ih0K7^j%+F86KgvoD|0?2_^#KL*%ld#-$}c4& Z`411B;6Madswe;e002ovPDHLkV1kLHX2k#i literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano02.png b/Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano02.png new file mode 100644 index 0000000000000000000000000000000000000000..1714be79af0d252c1f1d2adc61d75daa2891f1a0 GIT binary patch literal 304 zcmV-00nh%4P)=MtAENI>%5AH4U6d@fs4#BM=yLI`jg>46opTAwjrG-LqXxfKb0wYf=miEX_a?KpT}^YcL;47icFrsC9a&fa6zHTxU))a zBUoW$91w(MxnJcmS32hkB+Fa@1VIo4K@bDw%A&1mu&>Va>oigT;CUWKqY(gLzuzNC z5-THJ=~p$YQenq&au=kOrjfP=p>h4+b;YHWSg+RrfW=~wGn6EWs$$|_);H&w3W7lC z?-T&VnOJfrmgaXxOi>?|v^f(qTYcTfSr28Sq=F#8YPB-svXSLXEdA*L{zT&C?FM1w zJ{`xL>EkT55L`dTjeOCCxGpp1C?ch32fdP&+~ zYMNfEQaS*R;~cN53IM{$eTqM?GZO_<006F%Bsp2Fze}opJO%XU=a;veOh5j-2J%w? zVdQ>rCgwIC%w&K8E`le9F8vI(yccLifAAY2+6vnmX{fJ0>JtP(5ClOG1VIo4K@h#9 z&#%N9p^q;`8>Mfr#T%zj=L3Ee#hI8jRhqg~p6ZgKyJXhpZvpJg;v{Ec4qy!6{^9Nm z@zzO;ldn2<1EWL@U>rv7d(CqKty5SXHfr|DoY$=jS0 zXq(#S1DdMOcTM2{7`6G_6wr_N4#2BEmI8kwi>3f{n;mE3*0x691%qA$&(ZbyfL0j% qMu@h;7H$8FKSKmT5ClOGgXIsMD-Y_`aSQ9t@-d_tWEZ&|XE^t9?zv|M_{k=f{juNaM)B{PhdW8M?}q{E zH95L@xT}=$TPqXT4+EIG!PizBTllZ38}I@TOlDHQ)7>8uEleaA0jh|c0>I97aB!MA zH|h;4Gi(0jhXIU6ldtbwCn`#$5CN)s=Q{Ai0Jqco+=Pdd@qW}BQ~*dbYyJcPnxaBe zRLS11qr7uMhy6}BqTs8IEv&f6M!kVVi4cN2*AenUh=3mkbm+T-1Hf=HjsQf5w(K=U z&HY!{mwHVG@C;#^{oi9VYrZ#i159Q>4%&qzBtqHSbz%SW&YQZyCngWc+!48XxRY+D z_tMUFU^JSzI=d*1L_GM-!<}?`e3BcdR8{>>H_{X}g9NpQsvGqN62ZRO*rmj%lv)7* zlNsm6e`zl!5Fg1r8}$Zn0JwB=0+cf~d)QuNWC>+DQ;MeDuQQK$%09?<7!W1m*CEk5_ zPh_mjtof6ss9-WHB&2YWSf5upT}}&oiLLXPIX|3?_k_ete8?m~!2vPzug@=|R`WF$ z_7ba&jn&4+!d{|nv~YcX8P|%aUXw`$bK8;2fdh021taLU&LdVE8>Vi61Sg#Y@qv_Z zz1t*6OqPK5>g*zVV;*IoC#P+r#Va>;1H=Pb(-alI9{qxay#xTf`|w^OK2)n!G&Ma_ zRAvkhFB-ftkGRrNptQ}bIl;@oqyi_KXf(on1smqbVfes5ju*fByD`E1jtuT#(|LK>d%siZa)71_2r! z(Nk<@&Ea}3T+ii5Q00Ws$4^tVjaCKVdLYvzh^Cs5m5|`qcHOJO@gwbeX zX3gXC{siRTrild74+&8s1S6qA!KqRb9Hq)$07*qoM6N<$f-1b@lK=n! literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano03_on.png b/Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano03_on.png new file mode 100644 index 0000000000000000000000000000000000000000..2334c50393bba89e224f80eb8b02c45fb34f931d GIT binary patch literal 4385 zcmW+)c{o(>9~~rQU&<1VvW!7SB-zF`l&nRFtlx-|C2JauvX2b1Z!^e}ooq?QzSCIB zl6~KoF=!^k{KoH(``-K9=RWUy?m3_LoX@>cCPw#IF9}=%0069d_hFByXM5_Q!FZ86 zuH1gj1^{rZ>%lb50y1|p-@2Jvpu3wD-*rty5de2Y9fZXb4XX9^Z@n7nULOASp?GRi zlexr4x7P1M>DL6!fd?YK8*C;?Wxs|^sy3VpWmPhYX$`+iS|J}eS#DQ;)QWhfB|oG^ zV=Bx9j=L-FxBd3?`$mHo@06CTckPSGYhcaz zl;zo+8m~~IWuOFCxOthwTN&j`2c{jADR`}*rv#U7RPR8L;tBx?wRV&XVUizm^+{}+ zy`s-^8>FLJO1??wR30+c>#RiXlDU24pKH8*`bi|XM&b<^aA94T3u4$??;mup^*5*g zZ62m}H|a$z`;cZb56m`+fcsl(`x*LYFInx+$^j`xxDzA6AL8&MvFYpJ@QpD>*Lwih zBY+T0f~#wx->CP&Hn~Qnjye|&U~@B4yJH9N!r&f5aZ8dm04cy95|5bXlGPDN`9OH5*DGI5i*3E)*jSobUjK7ejrUVB|ew*uIxAl6nAqE>!&jLQp z*7^rA=nSx(Zl?cu6`r^sHF>=cm)xs(>orOJ&B}_iqhA5swl^PS_e|=3;jmX7Ub6>& zP|uRsuo{i2q9N+bfvLLur$q5cc5)cvecjmlRP-v8+d2DTNj$6F-3I4=#dYSQ;@C1U zD>(7vJx+2;_zj0$k9VzD;=co5#(^}W&r5zN5=TBf>4D$xyL$CsdkfB9i|#NAbBGT_ zmc#l6on)`b%%9DYTotXYUp*vYDZGr>Em%}<=BPwZc=IaK(6@2HTUyyPc0c^#Bs}MU z-3pX}Ahycskb@#n-yc|PSvQ>#f7XxKg&4jXtBGdly?Eb(B*dCA`R4`m-|f%+77q8? zo$us?PEaq4s4@u;`ATl-_Jnyf)oJ>^oDrs$7g9j82eSE&OI}^Tq+`y1{R;tymaR1+ z{jhH{=+fnQ1(4g)uT@pbOy4(Z17_;=HWNm7`S_XMmzyHjLg4$o_a*$sKGenY zd_mZb%fvu(M*lqf&yG=B|Lis22$$=|FJ?Vs=#d?*YQ8e0E{&w&$z1tA- zMTS6uJksOn;G&|X0qkY&BqNX5`g88{zYtz$5-Xc(;~n(h0bzS}mHy`PrVD^?hd)Y4ML1iT zeU{NeGs(+H7V(e#6(Aw~ywcxXiprKxzs5~%BxUq>9EQ;?D>SE_qMTj$n0f6B9J%~3 zFN@!>i3OmZ1b~t`@b?aazSb%xW=ncI<@@LmZ0Yw$U6G!eq)&^8&qg+5 z=*eVarPFbv*XX#VT$Ny8*0tfkH8Nv)5t_#DnId3YkOoU5H}P)|@XesF3J$|;hh2!R z+sf;{fz$s;9@%U!bIj>E8C^M|JME`uFJ5HPimxn{7g8ecv34PVO1Jtct7+=loAr1) zjlmjFJm|t7KkodW$^jyyxn$~AT|It0KN3o|l)jjrlR(5_c_~5S57`P1pfBLQ*_t8F zE^$$rOc5r}WF2yScwW?lqc9@?7TxtOqz(xj7G-ww4NY0-r73Ra z4vMjH30!l7`1*FRrsp)EEgj{&)ews_pY82bVtWTmOx$IpT(-5iC;3tQ747vzbm`+r z^D<7G_jya_j8H*5#+0?TAeV^8VS7A)BB?4j;T7ae1it4}7dl}R z@+~vBe*CcB{1e9U1Ito=YTYzF+-kS+%;@mdi|VhE+Kh@f>@wxdfv9kp2XGh-JdcTkRX-c=fYg=uXfuGbON&7j|vLZ>{x8F`gDN6A;&#OIdY z4`kF`FL2!dRo0pG3YDh~ZVvz>cV#|o7I0eBDWyk<(D5k-#S|TQg`VCL4HW1!n~k7m zyckxNY@6z8ZA9EiE?!0_ALN4N1upW
    $E}r&*-gh*lvyeZ%k+f*R z^MO8G_$CBy*MhTA5!Y>Wd`A-(SS!v$C8XTV`!=`JgRx)++QmLlObE zA~E7SIg3(PMmRG5lx`Q?kveG?{u!;7prBDOvGr=ZYbSYI>eFX8s?f)QS2Of&lI*Tt zcTWej*xFqJ5dUha%1FZs`q$xl({uM4rW~LhvbIQ#u;;Uz|4e$}A1g_5rAu^ObFa6( zeuU1n9g_BOAe0fjeve{-r>P%fZNqckn8)e(WiHhj}wqxX{g@;J}?|VCj>d>hqGv2Xs?ZOYuw_L;@FZ{wNwq^PCI(PUO)J1%A*eYK?WFd$xta z`7<*>pe=6Fx!Xr|6HmJt$hQvG#Gt}ih#!L3k;}$d5>ifTIr>iUkor6F&F*Up@{S3W zCOuD7sV!r6E)g)d_!basc-j28-Nq;@l(9SLyjpKP;Uayh$vonN zv83s?o%jlYy%OMrr|IZaF@__u*iky<7r?;X^V8rk`&Djki|{HXMmG`xb}g8ikkXSqXA3U%c@5)vnl8|@NcOn) z!r)0gB9;4zl@Q|smL`jL|0EjM4b;f5-1&^H?yiiB4a|!v+BYXa&w(*Zbz(xNENUym zVk?JYE_;VxOHs162ds!nV@U!uz+FNJX-LrprC7@)`ZyBG|}P<)O!0xpJUa>Ua- zAknvM_ZBQHyBS6zerVc7-WR1!&*6-MeX@O2uW+Uv+QAU_f$?;SCa;5mV~P#XDrPD> z^CY!n+_g4STY7MaQAg|P>;Y&|yjQ!ic= z(ReS2xNYmP%AKdLap}NCG1d;7n$uQ(stfxF2>A%y9Ix&m6ZAxQW@YpiC3G>Brii2TarA)elw?iz&v_{ZWYK zl^2gx(=v&Sx$q@DW-PgTRt@Ltzuntm3}%^AM@!84u{5$bo$CA{0WJ|S)*?{nFFd=4@5@`tV6(Yv*!*2w3_8DxcQ4!+ z3LC|qf_OR^;{I_9QA1;4x0=^$ZG#z1&Pie`ZE!T5u~NMM_)xv833tv4_SU!P4w*>$ zXj4Z|r8E4qL6(6)wm5}~i7?pr+u)0nA`{${_flLj*)7Vy{e!jSF?&-8+GZ=oq_%Ne z&rGOBj*>N$^8onme)llm_LW-G}v>|9aqL>1AOuyq^ zUrBXc%LSpn*&`wPNA3izcjmiS+CDgK)y0>n8o(Vy^1Q9)_091#h)-tmC7wBCNQLOw V!>J8U>Yon)Ku^aAR<33L;eSZxy5Rr- literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano04.png b/Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano04.png new file mode 100644 index 0000000000000000000000000000000000000000..9765a1e9d4e96191e5cacb4266e6d3b43de1d2e3 GIT binary patch literal 836 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano05.png b/Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano05.png new file mode 100644 index 0000000000000000000000000000000000000000..d16546ebe376e7787f7d49257b79de84996003bf GIT binary patch literal 818 zcmV-21I_%2P)@rZ>W_4M_#RU8Vq-R>?aCs>!ZkcnEOf=7$ zDRPmwr2Hn?t=+L*QHY5t$S(7HGVe89LpE+C&apy`vLBO-9` zF=LHAqD~7~$?&q(HM>sHD7gxp|oGL=|0h#jiyPX62^kza10Gb{q zR*?gMc4d4m0Uw@>i#IZkCtga*_Ma2oy2D%R%WuB<>c|L@$fSZ$^@6D%cAjyGnm!RB);SDtPWgn4LOF<<)#({7 zlWV$~Tm?<%bpQaXr^b|B83DQAWC-%O|IEU*o9fX#`;%-AsB*5d$3ZDz{XS#$o#dlb zo(F)G^BzB#zJc3v%m~sDMeJc@ZZQ@en{nhfh6b*?28a+`D+2>70|VX=`0m>1{!;Ig wco@|xL~fsZBzvNIr^>NA;ME^(ze@=G1#!g127eYm4gdfE07*qoM6N<$g3n`iXaE2J literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano05_on.png b/Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano05_on.png new file mode 100644 index 0000000000000000000000000000000000000000..5e2b6c6d101c40ff9b3df099eeaca0bb8bd0f012 GIT binary patch literal 3022 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano06_on.png b/Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano06_on.png new file mode 100644 index 0000000000000000000000000000000000000000..a8c64f6d44b64fdd9c6f6c8cfbf0bc7214a63f0d GIT binary patch literal 1706 zcmV;b237fqP) zze^lx7{|XJCxJjnF#(xPP(g{HSdGPzDj5lXf(R669xHu>u*IL zrfIfxU2o~S-ZD)yw%&b^U$Eb(wOV-nDeiy$$ys+vKhqIF*Y!{9JRiIdRQr_q>&K_S^fE?&{~G{MJ?{sOPhl$Z z*IZNoH8)TjFJ@(b|t3s9fx zgUNCD;lcAC6vwcA25g@J2gNbv{-c#S?ApMt4IHh^DffTgSjGEq!255&=Z#fvKl3?2 z(oT4Nzp6hz>bD2)_talK@9(XDV>Pv(xdAkr&CqM_WUSqK(Iolnfd<$MKZeKKu2TA){u2^L^H+(Lw~S~&URetT^X073<*%letSfaoDb_92h_-TlFHAYMOn11J;< z0OBVf!5soFDpsOTipVd=&-FFXJM=|gCmjl9Kz?z4?nwDU5C%O+LzZ^eP1F$TMX>2*#H;ID$^8BeT2#KQlf)Mhj_j6wm(rr7@kYA3U z>#AVOvY_ia7?w%7Dwh0e{RBY}1VIo4K@bE%5X3cr@&R)0r+fhNGvUumN4e5|etfwS zou@8_fEO(D^WFUr=D$Mu0HXcO!@*i<2Hs$!Hy9b4pTEBz`W<1zp-aCx4tKb-Yd*mK zx-%Rq#D4Yi2}Jr+ApZl7?JH;oMxCu<$guf#y zxn(>=;RaB+0skM7C%>rApDqf`Io$aGUw1Zf@B=vb0es!rR6alcd;J}nKY`{?;CuaD z?);)Y|8)5PZr{_h`SF1X5xMjW`1~`S4?zC(e#!?RKNGQ_!cbu*UH}qa2ubut9|{Xm z9Ulq`QH+nSq{|0z0}F!%AdfuE&%X}-bol^*jGR2q&%X}-RQUi&897Sl$0uauWNm(a zul?!r0jl96jLP}(My&<789Daao}X2y#Q*peaB}Fxv%>8PhsR-VEvoSg%m?6V0G=#3 z94TvJWIMFd40PA8bvZ*8jWIF^ZEFz?cP7r{{<@#nql9t=raRyTxS#*@GLUdC)(t8J zbC8tC)h4A&4uNy8j>{OJe1Hu4gXdn+Wt0z)2Y)qwzQcP2qI`gy`zaqF=YGluAU{D6 z1VIo4K@bE%5CoA2C?6mLewk1{Kt}ws;2sW+4oAwoA}H^EnWP#Hz7F%_v*4FWs(gUZ z{p%y!i6+TE`r?iAd}XdD{)wFr&hz4!biXXPuL%@&|9W0VU%bJr2Fz;k8-hwEc0OQX z09Y7+-w?70T@;#gxbp!--M^mKf3z}(T^rc7fuof<<^F@>7`D%V?K9w@IHr7xxG2)) z0|>Z(eJa1(_xH^2_WfD?=L3`vkQu)$C?6mrep#@VDtYI+izmA%@5OtRB%=mW9IGChEthp=_QgURIAW zG6+lHepnm-!a6wwo;~Wgoqujnt^kk6f%zd}`yh+U*8xg1FcR``jFCa-rV?&{DEfPN z=!O;LN<0t8&CLn^j_ey&M3HsF3Yjo>0k&=XUvWBR{3f<80|;vgzc;4NmI zWf(?ddx~xLZ!EC={{Q{9UmpC&KSsfIV-N)D@%MNU27kN+nvY7Ts=_ z$z(zt#{dil1D4Aro6UwOin!fw0Lny!@wec9zXK3O5wqEh`Fx%`u-omJ&1N~dUTXs5 zBY1xIuTU)h&BycztZwex+nWNYR;&2F|6wjoQ_klz0Q>#kIIh#v(L$bKL#$!d6KYhe zRhrEv!{Lx9ib#@#IF8xx_tvqj1n4)fpW0XRHchFqfa!Fq{&c;0ck~F~_jOkc7M-!N zfHX}>l7uYF@H~$=j`KPI&}=pd!w}E&zI5nE0)U*n(P%In4nNFAQIxN-fw2Jn#L_e+ v%QBKAq0wjnO700000NkvXXu0mjf=o~Tm literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano07_on.png b/Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano07_on.png new file mode 100644 index 0000000000000000000000000000000000000000..4853e41b9964f9171696589d2eb0ff8d52546f7c GIT binary patch literal 2494 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 N002ovPDHLkV1mxJa^L^} literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano08_on.png b/Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano08_on.png new file mode 100644 index 0000000000000000000000000000000000000000..820bc0046f094b06128b15bd60cd68f30fd99f0a GIT binary patch literal 1669 zcmV;027394P)ZY5tyH;Y?U*Kh>{(}5~{sOW< zU8A;ulSQ&JMnRE3(hy(_X0VH~-G%$cZ^kotX5Je=lgyDUVKbWZ?mPG0`{vEPfDa!& zeE9I;LkI$*2kgQcy>@PbL!lVm{N>j>t3UiKhJS9Ro?*2=$TEP;Mxyi8*8v=sLpUghP03I9 zV=NSwAd@eGpM*Ug_PZ7!m5z6oz762TewP@4j{NuEf~b{c0Kg~H*KTP{Q7A??7uUn9 zBKYaB!-Jn`1?;`(k)Q6zbmZ}S6KJX-tYj1%l)9e5JN`T6-`fs6;hBKl*l$e2t^`P> z?1^oHEd*iE%5I(qjg@xrahHkL}%^$9(lVNL^#^Q%Qrz3wiL}1czZt3OS~fZ ziTCri-|;r|*=`H}Tt@)_?Pd^C>>8!NFA<-d=-YacZ5L1Pcf-%q`&sNa8-t@2K&uY` zaI1;|yxRAu z9ZSw)>S5LHZEfSW^IPR0TRFfO`x=Ub)BPB}{Pe1i{KJ_B0HCsyK>6tza{@Mt{Z9B< z60lY5cWVDlC$_c(c(&Wplx`>znripp$(Zc{U~%ajm7N4?M{jUmIpwnZam)X7r_N>f z!(#uS?6>=-Zr}=NC=vi@`(65Im7D+qUG*zF3Dm2nT%Ua1 z@Utdfpy$1A?YGNsDL^V6?~KnT0RWe8yGw9k`Al1SIj*bmXg)KzqLk zeqgxvTdn|_902~$tD(-dfPE_Eti1_;McvW8WMkBvP`Ap9eM1YtsBb8CdTJg z0Q#7y9-p9EI&z$diTCs1-}|fPC=t_dyLj1e=Q+SMc%8f~nO@v!-O>IIg=N&MfO1HF zsiA${zc+S+_nqH|4<9~!I7guv%@&H$tlR(JY7~mm$K*r*W_Hc+NB0iH&4lt4;hpv9 zLGV4954fCKy6F!n6r+#lX6iqQ;4c)T*}0i|mIpU0T%97(lQ-=C0ORC|>`&kUrWHWy z}M9M^`D*e|j_U=;Xy!L|To;_0}}(jUMhiHq(}-~nO%0ZtOI zajPk^KY=%d^anWgezP45BY)rhM8WZr?A1s{boKG=>i}MDA6xD|crAa?{Jddn1<)Q# zSBa7O`0}obi;8SoAJ04Xv+|D`91V>2K7yM{v}4IxsLG)y-YEfSJb*vp(M}PP6cjYTT!x31H^^to8A3Ly*Y+ zgkfW3`U8yNLUez^u;6)rfYY6j7ySvNREA=N7Ch;R5?vq9n}1X%9{~OXZxzea$EK+9 P00000NkvXXu0mjfF{4Ky literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano09.png b/Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano09.png new file mode 100644 index 0000000000000000000000000000000000000000..0911c00c7024c0c37c7414dd08afab842519153c GIT binary patch literal 1004 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 S;*~rA0000HW|E literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano11.png b/Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano11.png new file mode 100644 index 0000000000000000000000000000000000000000..117b64c646156f9a0ebe2d6c7735d4bd8c363f7a GIT binary patch literal 1020 zcmV(orMxy6==SSbaeRJ>8}!g-;W-Y9tGg}d=$ zbNErcs9LL`Lj)&Ss<1E}>X@ilx~r-2V;h7@fqNj?Dly}bbRhX+it$6tT7<9Rm>)QFEh@ubNv2zItR z98JF|UH`jdK`k8`vCHKKz~l9r{2s4FbXUBkaHrF05!6hG(2890^#D+-Rv8PVNn!`#g*8e-3WF&q9}6r&K+dA+)}_Z&pmGvk^6Se z;&XdE0E`T0n9k0cDq*TXFcek*1iM|g$#R(mhl^zY4*J|K04lW_VbQ^AwZ_!syQGf{ z>EsIz7l)!d5e32I1Nicrc}oJil3*yT+|w6AmdnKV-iIiP02@}oNYGe;^pPPwdkv$H z4fD~==XwV(?X_DiGjGJ(Cr|Riv11*_1DumcL4l$f$87=VD+mn>PyfL!L=1CYb#V5?4=g*@qc7>a9!5F zSvL5WfjB^BNZC{cJdW)EEi0g5s{;S+3TOurKq5Ivptl#V*URjup8$}2Af?-W$eksT ztnY1EmKhs=ngjdy@%>Ngjxdhnu_z0d)g$}Shf_>vXE`@NM;Ab`khk3^74*p#fBl`W zuYSnK7mjo4yVn>SpP=y9HQtoUyi)y>iBm6=N*|6q}BhuI5!z!(C%qf?^?Wi^SpzfO5WmhM&288h}Uc zhIQLu?ks&f`a2S2#L>eCnVOz4-vx~rh()MXtNJ6PR;?1ccR>H|@k*N}23WeZ$kL@n z({dPUukCd1biEkNRkhiTU|!4RFD7Q#9JM|6Lk^8Bcn=`sCXUV4V(37HF)iK0!c_c&MF!Gs1>5LNxA~{`HbM&5hveSm<|b+SDE12%&i$R= zJ>T!|d(OG%z!tXfe}|>n#K(I3RIM#Z9ssT>M=p8p17N*SV0dJ- zF44m6+lKefP{`2da=UR!9tM)V0BW@elcLUWL=Erl!e+PQa5(sTWd%i9tt;T!u@?*? zGFN9zeJ-~ffPrK$lj&)L69xzTfuIUtv)lEUqO3BP8suamPOPIHfO~6e9NOXIhLY#> zu`v=y`gHQS)F7t@kKz*qLm$9rU(T8e(3SWDL3Kx407Y3P()|z)hXY_k2Pz4w9Y`GM z)2r7obTrAusZVqlY?b7d$mjD!V?8E9Uuo+Bh^2*@cz7QG7pBs>AT6&try7<@0e6;V z1gDEw{894xJb(T9N8QS+@z&Y196xcQ>3o3evon^OyPy(lqtDUbwVQw>Vz;*769mH= z062YYjLf$`05F#-{xABwcC*Xp1<=#?sh z*NDc-ds|TyhDV;^!2W%F^<8mCRJJ4G5I^54{<5EVJkDf#n(MPOv;gGftmV$KtPeK- z(+%2=|AY1ECEkp^$neN0@-Iv5{Nf_Q#5n73zfL@HkmX#?^t|`}IU?bZshv)ziFWNV zIi@?1ld~2;6-vi1z`MEeIz~6flANpAURcZ)Nh{78!xZG?tfey?Q31{;KW7`e0Jt2v zR1~yQzJT;(uF-aXJDWx7@Ifw2P8rXFYIKA3gCsA~`Um#uJBiG1`4W!|#be z%|0#u literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano12.png b/Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano12.png new file mode 100644 index 0000000000000000000000000000000000000000..c066c39b07d355f2ad7c3934cc3549feac31d89b GIT binary patch literal 787 zcmV+u1MK{XP)}uQ~A);9kK|~M_p$NJ72}Jw|UWyGpNW}L!m)(s5XAe|AYj1AksjJGM~ zCB?kNjJHEFrMsGSgHgUm2C$lSgRO(b;MTiiX>Er6Y&s-gNLh4bhmP#9kg`Iu{cM`0 zwHa=`JGKrMgHeHm0A(Q$in< zlI86vA}Ippe`E!Yk2XlS4uD=;jTrTElX-iNYN3Yj`Lr4_(iuTIBWN{Z_?}O-P-EVn zqh4;RdlB+=e6%sT0>0;yD|wjlHdhxNmbat$o{y@=@^%#X+vjSb#`Wa`*Ow1e3pITQ zx^S_@I5~iK;JDDNfBfYQ=FgP;Cns^*P&Xd>D90ey{`hgy6E)DdTn<0 z7RjHK`zB-Hn5a=wS@l*4pjB&O#2$H|?PEG7<7@_v<jH(iS!NIp!u^II&&ZsDwbPFS?sRZeEIx?%wdXpxvBTQ zeg94ItOS7Rn7se6MXuy&o%~5TwAX6Hxb^P(&KlT)-XP9TZ$cTRGlF7XV%P@r_ME0< z#T%*uJ9~@za8;$=7W7r1OCg{D*Ow10t<6x(OA@XV%HsalJ@?#WI;N&y#TDs{(31pm z=({kKie*JcWJN|4=>U4R)&K1JEVJvg0Gf={XsUnZXV^JoU&BY^AmKWia`k@YNiX3# znxfVG|C84co|v!Ih>dhAD>9<`J%|rpjPAGoB|6=hr~(R;Wc4bUPcg-7;tv-sqz0mb R@FoBN002ovPDHLkV1oD7e5wEd literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano12_on.png b/Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano12_on.png new file mode 100644 index 0000000000000000000000000000000000000000..554cdc21a00b43afdc4aafc33464e23eafea21ac GIT binary patch literal 3487 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano13_on.png b/Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano13_on.png new file mode 100644 index 0000000000000000000000000000000000000000..98cd3db05b5ba0867863d62fcbc38199d4640d99 GIT binary patch literal 3812 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 GjQKYgWwJp4 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano14.png b/Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano14.png new file mode 100644 index 0000000000000000000000000000000000000000..e6ae176de88849df4a2b159a4de020f27a1b7653 GIT binary patch literal 435 zcmV;k0ZjghP)=Eo6hxmhxx)9*(!!|LC433pkxQu7h?dp^halA_vSTM`CMDYl5L)&xs}BPM0|NsC z0|Nt{n5L;t(^UU^@5dPt%d%jMsQ|{9YK*DVG*unz`m!wDoS$a|#266~fa<-+T1yCl z+wDe5380DyF~)ArZU?q)yR7R0OuSzXGDZj3hTPEZQG@X_ml(Mwq1-d zwUh$TDvdFsYr3zO^Hc_mG1Yso*Pynyr-ax{}lju?*Yg; zxAF6Q-}i35Uj=BzYI!LIYc1=#a=l)$*5aINS;#pv&oleJqkTYKdFRLv0Y{r(Rpgu_ zrG&MXloBBXM1*;s+xrkgJNV#I<2{Ob>45&@N~niD3(+1BLTJLyaJ&_uHp6$qbIt${ zO-4irAv|Q^cpVDm((CzCfHs_0NGXwXCdSA-&n*Kn#)m_XB9u#o9PuLMNO@CDob literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano14_on.png b/Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/ano14_on.png new file mode 100644 index 0000000000000000000000000000000000000000..cf60bc220457877b40cc29018e1b71afcf400dce GIT binary patch literal 3352 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 G2>Blhz;xpP literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/meta.json b/Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/meta.json new file mode 100644 index 0000000000..fda4b97b5a --- /dev/null +++ b/Resources/Textures/Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi/meta.json @@ -0,0 +1,245 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from baystation at commit https://github.com/Baystation12/Baystation12/commit/a929584d9db319eb7484113221be25cfa1d5dc09", + "states": [ + { + "name": "ano01" + }, + { + "name": "ano01_on", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "ano02" + }, + { + "name": "ano02_on", + "delays": [ + [ + 0.3, + 0.2, + 0.1 + ] + ] + }, + { + "name": "ano03" + }, + { + "name": "ano03_on", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "ano04" + }, + { + "name": "ano04_on", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "ano05" + }, + { + "name": "ano05_on", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "ano06" + }, + { + "name": "ano06_on", + "delays": [ + [ + 0.5, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "ano07" + }, + { + "name": "ano07_on", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "ano08" + }, + { + "name": "ano08_on", + "delays": [ + [ + 0.3, + 0.2, + 0.2, + 0.1, + 0.1 + ] + ] + }, + { + "name": "ano09" + }, + { + "name": "ano09_on", + "delays": [ + [ + 0.3, + 0.3, + 0.3, + 0.3 + ] + ] + }, + { + "name": "ano10" + }, + { + "name": "ano10_on", + "delays": [ + [ + 1.0, + 0.2, + 0.1, + 0.2, + 0.2, + 0.2 + ] + ] + }, + { + "name": "ano11" + }, + { + "name": "ano11_on" + }, + { + "name": "ano12" + }, + { + "name": "ano12_on", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "ano13" + }, + { + "name": "ano13_on", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "ano14" + }, + { + "name": "ano14_on", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + } + ] +} \ No newline at end of file diff --git a/SpaceStation14.sln.DotSettings b/SpaceStation14.sln.DotSettings index da231d591f..9db578f9af 100644 --- a/SpaceStation14.sln.DotSettings +++ b/SpaceStation14.sln.DotSettings @@ -301,5 +301,6 @@ True True True + True True True