From 299c4be3287f50dbedd7e7a5f4223ee3e4014b35 Mon Sep 17 00:00:00 2001 From: CrudeWax <75271456+CrudeWax@users.noreply.github.com> Date: Wed, 29 Dec 2021 06:58:48 +0300 Subject: [PATCH] Guardians (Holoparasites) (#5140) Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Co-authored-by: Leon Friedrich <60421075+ElectroJr@users.noreply.github.com> Co-authored-by: Metal Gear Sloth --- Content.Client/Entry/IgnoredComponents.cs | 3 + .../Actions/Actions/GuardianToggleAction.cs | 38 ++ Content.Server/Guardian/GuardianComponent.cs | 39 ++ .../Guardian/GuardianCreatorComponent.cs | 39 ++ .../Guardian/GuardianHostComponent.cs | 27 ++ Content.Server/Guardian/GuardianSystem.cs | 349 ++++++++++++++++++ Content.Shared/Actions/ActionType.cs | 1 + .../MobState/Components/MobStateComponent.cs | 2 +- .../MobState/EntitySystems/MobStateSystem.cs | 4 +- Resources/Audio/Effects/guardian_inject.ogg | Bin 0 -> 22763 bytes Resources/Audio/Effects/guardian_warn.ogg | Bin 0 -> 30782 bytes .../Audio/Voice/Human/malescream_guardian.ogg | Bin 0 -> 18748 bytes Resources/Locale/en-US/guardian/guardian.ftl | 22 ++ .../Prototypes/Actions/guardian_actions.yml | 12 + .../Catalog/Fills/Paper/manuals.yml | 29 ++ .../Prototypes/Catalog/uplink_catalog.yml | 20 +- .../Entities/Clothing/Head/soft.yml | 22 ++ .../Entities/Mobs/Player/guardian.yml | 73 ++++ .../Syndicate_Gadgets/guardian_activators.yml | 26 ++ .../Soft/bizarresoft.rsi/equipped-HELMET.png | Bin 0 -> 423 bytes .../Head/Soft/bizarresoft.rsi/icon.png | Bin 0 -> 386 bytes .../Head/Soft/bizarresoft.rsi/inhand-left.png | Bin 0 -> 411 bytes .../Soft/bizarresoft.rsi/inhand-right.png | Bin 0 -> 412 bytes .../Head/Soft/bizarresoft.rsi/meta.json | 26 ++ .../equipped-HELMET.png | Bin 0 -> 418 bytes .../Soft/bizarresoft_flipped.rsi/icon.png | Bin 0 -> 392 bytes .../bizarresoft_flipped.rsi/inhand-left.png | Bin 0 -> 411 bytes .../bizarresoft_flipped.rsi/inhand-right.png | Bin 0 -> 458 bytes .../Soft/bizarresoft_flipped.rsi/meta.json | 26 ++ .../Textures/Interface/Actions/manifest.png | Bin 0 -> 1922 bytes .../Textures/Interface/Actions/meta.json | 3 + .../Aliens/Guardians/guardians.rsi/magic.png | Bin 0 -> 924 bytes .../Guardians/guardians.rsi/magic_base.png | Bin 0 -> 1329 bytes .../Guardians/guardians.rsi/magic_flare.png | Bin 0 -> 1099 bytes .../Aliens/Guardians/guardians.rsi/meta.json | 57 +++ .../Aliens/Guardians/guardians.rsi/miner.png | Bin 0 -> 681 bytes .../Guardians/guardians.rsi/miner_base.png | Bin 0 -> 2776 bytes .../Guardians/guardians.rsi/miner_flare.png | Bin 0 -> 801 bytes .../Aliens/Guardians/guardians.rsi/tech.png | Bin 0 -> 854 bytes .../Guardians/guardians.rsi/tech_base.png | Bin 0 -> 1694 bytes .../Guardians/guardians.rsi/tech_flare.png | Bin 0 -> 930 bytes .../Misc/guardian_info.rsi/guardian_info.png | Bin 0 -> 1551 bytes .../Objects/Misc/guardian_info.rsi/icon.png | Bin 0 -> 952 bytes .../Objects/Misc/guardian_info.rsi/meta.json | 25 ++ 44 files changed, 836 insertions(+), 7 deletions(-) create mode 100644 Content.Server/Actions/Actions/GuardianToggleAction.cs create mode 100644 Content.Server/Guardian/GuardianComponent.cs create mode 100644 Content.Server/Guardian/GuardianCreatorComponent.cs create mode 100644 Content.Server/Guardian/GuardianHostComponent.cs create mode 100644 Content.Server/Guardian/GuardianSystem.cs create mode 100644 Resources/Audio/Effects/guardian_inject.ogg create mode 100644 Resources/Audio/Effects/guardian_warn.ogg create mode 100644 Resources/Audio/Voice/Human/malescream_guardian.ogg create mode 100644 Resources/Locale/en-US/guardian/guardian.ftl create mode 100644 Resources/Prototypes/Actions/guardian_actions.yml create mode 100644 Resources/Prototypes/Entities/Mobs/Player/guardian.yml create mode 100644 Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/guardian_activators.yml create mode 100644 Resources/Textures/Clothing/Head/Soft/bizarresoft.rsi/equipped-HELMET.png create mode 100644 Resources/Textures/Clothing/Head/Soft/bizarresoft.rsi/icon.png create mode 100644 Resources/Textures/Clothing/Head/Soft/bizarresoft.rsi/inhand-left.png create mode 100644 Resources/Textures/Clothing/Head/Soft/bizarresoft.rsi/inhand-right.png create mode 100644 Resources/Textures/Clothing/Head/Soft/bizarresoft.rsi/meta.json create mode 100644 Resources/Textures/Clothing/Head/Soft/bizarresoft_flipped.rsi/equipped-HELMET.png create mode 100644 Resources/Textures/Clothing/Head/Soft/bizarresoft_flipped.rsi/icon.png create mode 100644 Resources/Textures/Clothing/Head/Soft/bizarresoft_flipped.rsi/inhand-left.png create mode 100644 Resources/Textures/Clothing/Head/Soft/bizarresoft_flipped.rsi/inhand-right.png create mode 100644 Resources/Textures/Clothing/Head/Soft/bizarresoft_flipped.rsi/meta.json create mode 100644 Resources/Textures/Interface/Actions/manifest.png create mode 100644 Resources/Textures/Mobs/Aliens/Guardians/guardians.rsi/magic.png create mode 100644 Resources/Textures/Mobs/Aliens/Guardians/guardians.rsi/magic_base.png create mode 100644 Resources/Textures/Mobs/Aliens/Guardians/guardians.rsi/magic_flare.png create mode 100644 Resources/Textures/Mobs/Aliens/Guardians/guardians.rsi/meta.json create mode 100644 Resources/Textures/Mobs/Aliens/Guardians/guardians.rsi/miner.png create mode 100644 Resources/Textures/Mobs/Aliens/Guardians/guardians.rsi/miner_base.png create mode 100644 Resources/Textures/Mobs/Aliens/Guardians/guardians.rsi/miner_flare.png create mode 100644 Resources/Textures/Mobs/Aliens/Guardians/guardians.rsi/tech.png create mode 100644 Resources/Textures/Mobs/Aliens/Guardians/guardians.rsi/tech_base.png create mode 100644 Resources/Textures/Mobs/Aliens/Guardians/guardians.rsi/tech_flare.png create mode 100644 Resources/Textures/Objects/Misc/guardian_info.rsi/guardian_info.png create mode 100644 Resources/Textures/Objects/Misc/guardian_info.rsi/icon.png create mode 100644 Resources/Textures/Objects/Misc/guardian_info.rsi/meta.json diff --git a/Content.Client/Entry/IgnoredComponents.cs b/Content.Client/Entry/IgnoredComponents.cs index db6bf409f9..5741ee1b8f 100644 --- a/Content.Client/Entry/IgnoredComponents.cs +++ b/Content.Client/Entry/IgnoredComponents.cs @@ -314,6 +314,9 @@ namespace Content.Client.Entry "NukeCodePaper", "GhostRadio", "Armor", + "Guardian", + "GuardianCreator", + "GuardianHost", "Udder", "PneumaticCannon", "Spreader", diff --git a/Content.Server/Actions/Actions/GuardianToggleAction.cs b/Content.Server/Actions/Actions/GuardianToggleAction.cs new file mode 100644 index 0000000000..5343e72284 --- /dev/null +++ b/Content.Server/Actions/Actions/GuardianToggleAction.cs @@ -0,0 +1,38 @@ +using Content.Server.Guardian; +using Content.Shared.Actions.Behaviors; +using Content.Shared.Cooldown; +using Content.Shared.Popups; +using JetBrains.Annotations; +using Robust.Shared.GameObjects; +using Robust.Shared.IoC; +using Robust.Shared.Localization; +using Robust.Shared.Serialization.Manager.Attributes; + +namespace Content.Server.Actions.Actions +{ + /// + /// Manifests the guardian saved in the action, using the system + /// + [UsedImplicitly] + [DataDefinition] + public class ToggleGuardianAction : IInstantAction + { + [DataField("cooldown")] public float Cooldown { get; [UsedImplicitly] private set; } + + public void DoInstantAction(InstantActionEventArgs args) + { + var entManager = IoCManager.Resolve(); + + if (entManager.TryGetComponent(args.Performer, out GuardianHostComponent? hostComponent) && + hostComponent.HostedGuardian != null) + { + EntitySystem.Get().ToggleGuardian(hostComponent); + args.PerformerActions?.Cooldown(args.ActionType, Cooldowns.SecondsFromNow(Cooldown)); + } + else + { + args.Performer.PopupMessage(Loc.GetString("guardian-missing-invalid-action")); + } + } + } +} diff --git a/Content.Server/Guardian/GuardianComponent.cs b/Content.Server/Guardian/GuardianComponent.cs new file mode 100644 index 0000000000..a8ebedf22c --- /dev/null +++ b/Content.Server/Guardian/GuardianComponent.cs @@ -0,0 +1,39 @@ +using Robust.Shared.GameObjects; +using Robust.Shared.Serialization.Manager.Attributes; +using Robust.Shared.ViewVariables; + +namespace Content.Server.Guardian +{ + /// + /// Given to guardians to monitor their link with the host + /// + [RegisterComponent] + [ComponentProtoName("Guardian")] + public class GuardianComponent : Component + { + /// + /// The guardian host entity + /// + public EntityUid Host; + + /// + /// Percentage of damage reflected from the guardian to the host + /// + [ViewVariables] + [DataField("damageShare")] + public float DamageShare { get; set; } = 0.85f; + + /// + /// Maximum distance the guardian can travel before it's forced to recall, use YAML to set + /// + [ViewVariables] + [DataField("distanceAllowed")] + public float DistanceAllowed { get; set; } = 5f; + + /// + /// If the guardian is currently manifested + /// + public bool GuardianLoose = false; + + } +} diff --git a/Content.Server/Guardian/GuardianCreatorComponent.cs b/Content.Server/Guardian/GuardianCreatorComponent.cs new file mode 100644 index 0000000000..d581ddc351 --- /dev/null +++ b/Content.Server/Guardian/GuardianCreatorComponent.cs @@ -0,0 +1,39 @@ +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.ViewVariables; + +namespace Content.Server.Guardian +{ + /// + /// Creates a GuardianComponent attached to the user's GuardianHost. + /// + [RegisterComponent] + [ComponentProtoName("GuardianCreator")] + public sealed class GuardianCreatorComponent : Component + { + /// + /// Counts as spent upon exhausting the injection + /// + /// + /// We don't mark as deleted as examine depends on this. + /// + public bool Used = false; + + /// + /// The prototype of the guardian entity which will be created + /// + [ViewVariables] + [DataField("guardianProto", customTypeSerializer:typeof(PrototypeIdSerializer), required: true)] + public string GuardianProto { get; set; } = default!; + + /// + /// How long it takes to inject someone. + /// + [DataField("delay")] + public float InjectionDelay = 5f; + + public bool Injecting = false; + } +} diff --git a/Content.Server/Guardian/GuardianHostComponent.cs b/Content.Server/Guardian/GuardianHostComponent.cs new file mode 100644 index 0000000000..e9aecdae2a --- /dev/null +++ b/Content.Server/Guardian/GuardianHostComponent.cs @@ -0,0 +1,27 @@ +using Robust.Shared.Containers; +using Robust.Shared.GameObjects; +using Robust.Shared.ViewVariables; + +namespace Content.Server.Guardian +{ + /// + /// Given to guardian users upon establishing a guardian link with the entity + /// + [RegisterComponent] + [ComponentProtoName("GuardianHost")] + public sealed class GuardianHostComponent : Component + { + /// + /// Guardian hosted within the component + /// + /// + /// Can be null if the component is added at any time. + /// + public EntityUid? HostedGuardian; + + /// + /// Container which holds the guardian + /// + [ViewVariables] public ContainerSlot GuardianContainer = default!; + } +} diff --git a/Content.Server/Guardian/GuardianSystem.cs b/Content.Server/Guardian/GuardianSystem.cs new file mode 100644 index 0000000000..7373a6c079 --- /dev/null +++ b/Content.Server/Guardian/GuardianSystem.cs @@ -0,0 +1,349 @@ +using Content.Server.Actions; +using Content.Server.DoAfter; +using Content.Server.Hands.Components; +using Content.Server.Inventory.Components; +using Content.Server.Popups; +using Content.Shared.Actions; +using Content.Shared.Actions.Components; +using Content.Shared.Audio; +using Content.Shared.Damage; +using Content.Shared.Examine; +using Content.Shared.Interaction; +using Content.Shared.MobState; +using Content.Shared.MobState.EntitySystems; +using Robust.Server.GameObjects; +using Robust.Shared.Audio; +using Robust.Shared.Containers; +using Robust.Shared.GameObjects; +using Robust.Shared.IoC; +using Robust.Shared.Localization; +using Robust.Shared.Log; +using Robust.Shared.Player; +using Robust.Shared.Utility; + +namespace Content.Server.Guardian +{ + /// + /// A guardian has a host it's attached to that it fights for. A fighting spirit. + /// + public sealed class GuardianSystem : EntitySystem + { + [Dependency] private readonly DoAfterSystem _doAfterSystem = default!; + [Dependency] private readonly PopupSystem _popupSystem = default!; + [Dependency] private readonly DamageableSystem _damageSystem = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnCreatorUse); + SubscribeLocalEvent(OnCreatorInteract); + SubscribeLocalEvent(OnCreatorExamine); + SubscribeLocalEvent(OnCreatorInject); + SubscribeLocalEvent(OnCreatorCancelled); + + SubscribeLocalEvent(OnGuardianMove); + SubscribeLocalEvent(OnGuardianDamaged); + SubscribeLocalEvent(OnGuardianPlayer); + SubscribeLocalEvent(OnGuardianUnplayer); + + SubscribeLocalEvent(OnHostInit); + SubscribeLocalEvent(OnHostMove); + SubscribeLocalEvent(OnHostStateChange); + SubscribeLocalEvent(OnHostShutdown); + } + + private void OnGuardianUnplayer(EntityUid uid, GuardianComponent component, PlayerDetachedEvent args) + { + var host = component.Host; + + if (!TryComp(host, out var hostComponent)) return; + + RetractGuardian(hostComponent, component); + } + + private void OnGuardianPlayer(EntityUid uid, GuardianComponent component, PlayerAttachedEvent args) + { + var host = component.Host; + + if (!HasComp(host)) return; + + _popupSystem.PopupEntity(Loc.GetString("guardian-available"), host, Filter.Entities(host)); + } + + private void OnHostInit(EntityUid uid, GuardianHostComponent component, ComponentInit args) + { + component.GuardianContainer = uid.EnsureContainer("GuardianContainer"); + } + + private void OnHostShutdown(EntityUid uid, GuardianHostComponent component, ComponentShutdown args) + { + if (component.HostedGuardian == null) return; + EntityManager.QueueDeleteEntity(component.HostedGuardian.Value); + } + + public void ToggleGuardian(GuardianHostComponent hostComponent) + { + if (hostComponent.HostedGuardian == null || + !TryComp(hostComponent.HostedGuardian, out GuardianComponent? guardianComponent)) return; + + if (guardianComponent.GuardianLoose) + { + RetractGuardian(hostComponent, guardianComponent); + } + else + { + ReleaseGuardian(hostComponent, guardianComponent); + } + } + + /// + /// Adds the guardian host component to the user and spawns the guardian inside said component + /// + private void OnCreatorUse(EntityUid uid, GuardianCreatorComponent component, UseInHandEvent args) + { + if (args.Handled) return; + args.Handled = true; + UseCreator(args.User, args.User, component); + } + + private void OnCreatorInteract(EntityUid uid, GuardianCreatorComponent component, AfterInteractEvent args) + { + if (args.Handled || args.Target == null) return; + args.Handled = true; + UseCreator(args.User, args.Target.Value, component); + } + + private void OnCreatorCancelled(GuardianCreatorInjectCancelledEvent ev) + { + ev.Component.Injecting = false; + } + + private void UseCreator(EntityUid user, EntityUid target, GuardianCreatorComponent component) + { + if (component.Used) + { + _popupSystem.PopupEntity(Loc.GetString("guardian-activator-empty-invalid-creation"), user, Filter.Entities(user)); + return; + } + + // If user is already a host don't duplicate. + if (HasComp(target)) + { + _popupSystem.PopupEntity(Loc.GetString("guardian-already-present-invalid-creation"), user, Filter.Entities(user)); + return; + } + + // Can't work without actions + EntityManager.EnsureComponent(target); + + if (component.Injecting) return; + + component.Injecting = true; + + _doAfterSystem.DoAfter(new DoAfterEventArgs(user, component.InjectionDelay, target: target) + { + BroadcastFinishedEvent = new GuardianCreatorInjectedEvent(user, target, component), + BroadcastCancelledEvent = new GuardianCreatorInjectCancelledEvent(target, component), + BreakOnTargetMove = true, + BreakOnUserMove = true, + }); + } + + private void OnCreatorInject(GuardianCreatorInjectedEvent ev) + { + var comp = ev.Component; + + if (comp.Deleted || + comp.Used || + !TryComp(ev.User, out var hands) || + !hands.IsHolding(comp.Owner) || + HasComp(ev.Target) || + !TryComp(ev.Target, out var actions)) + { + comp.Injecting = false; + return; + } + + var hostXform = EntityManager.GetComponent(ev.Target); + var host = EntityManager.EnsureComponent(ev.Target); + // Use map position so it's not inadvertantly parented to the host + if it's in a container it spawns outside I guess. + var guardian = EntityManager.SpawnEntity(comp.GuardianProto, hostXform.MapPosition); + + host.GuardianContainer.Insert(guardian); + host.HostedGuardian = guardian; + + if (TryComp(guardian, out GuardianComponent? guardianComponent)) + { + guardianComponent.Host = ev.Target; + + // Grant the user the recall action and notify them + actions.Grant(ActionType.ManifestGuardian); + SoundSystem.Play(Filter.Entities(ev.Target), "/Audio/Effects/guardian_inject.ogg", ev.Target); + + _popupSystem.PopupEntity(Loc.GetString("guardian-created"), ev.Target, Filter.Entities(ev.Target)); + // Exhaust the activator + comp.Used = true; + } + else + { + Logger.ErrorS("guardian", $"Tried to spawn a guardian that doesn't have {nameof(GuardianComponent)}"); + EntityManager.QueueDeleteEntity(guardian); + } + } + + /// + /// Triggers when the host receives damage which puts the host in either critical or killed state + /// + private void OnHostStateChange(EntityUid uid, GuardianHostComponent component, MobStateChangedEvent args) + { + if (component.HostedGuardian == null) return; + + if (args.CurrentMobState.IsCritical()) + { + _popupSystem.PopupEntity(Loc.GetString("guardian-critical-warn"), component.HostedGuardian.Value, Filter.Entities(component.HostedGuardian.Value)); + SoundSystem.Play(Filter.Entities(component.HostedGuardian.Value), "/Audio/Effects/guardian_warn.ogg", component.HostedGuardian.Value); + } + else if (args.CurrentMobState.IsDead()) + { + SoundSystem.Play(Filter.Pvs(uid), "/Audio/Voice/Human/malescream_guardian.ogg", uid, AudioHelpers.WithVariation(0.20f)); + EntityManager.RemoveComponent(uid); + } + } + + /// + /// Handles guardian receiving damage and splitting it with the host according to his defence percent + /// + private void OnGuardianDamaged(EntityUid uid, GuardianComponent component, DamageChangedEvent args) + { + if (args.DamageDelta == null) return; + + _damageSystem.TryChangeDamage(component.Host, args.DamageDelta * component.DamageShare); + _popupSystem.PopupEntity(Loc.GetString("guardian-entity-taking-damage"), component.Host, Filter.Entities(component.Host)); + + } + + /// + /// Triggers while trying to examine an activator to see if it's used + /// + private void OnCreatorExamine(EntityUid uid, GuardianCreatorComponent component, ExaminedEvent args) + { + if (component.Used) + { + args.PushMarkup(Loc.GetString("guardian-activator-empty-examine")); + } + } + + /// + /// Called every time the host moves, to make sure the distance between the host and the guardian isn't too far + /// + private void OnHostMove(EntityUid uid, GuardianHostComponent component, ref MoveEvent args) + { + if (component.HostedGuardian == null || + !TryComp(component.HostedGuardian, out GuardianComponent? guardianComponent) || + !guardianComponent.GuardianLoose) return; + + CheckGuardianMove(uid, component.HostedGuardian.Value, component); + } + + /// + /// Called every time the guardian moves: makes sure it's not out of it's allowed distance + /// + private void OnGuardianMove(EntityUid uid, GuardianComponent component, ref MoveEvent args) + { + if (!component.GuardianLoose) return; + + CheckGuardianMove(component.Host, uid, guardianComponent: component); + } + + /// + /// Retract the guardian if either the host or the guardian move away from each other. + /// + private void CheckGuardianMove( + EntityUid hostUid, + EntityUid guardianUid, + GuardianHostComponent? hostComponent = null, + GuardianComponent? guardianComponent = null, + TransformComponent? hostXform = null, + TransformComponent? guardianXform = null) + { + if (!Resolve(hostUid, ref hostComponent, ref hostXform) || + !Resolve(guardianUid, ref guardianComponent, ref guardianXform)) + { + return; + } + + if (!guardianComponent.GuardianLoose) return; + + if (!guardianXform.Coordinates.InRange(EntityManager, hostXform.Coordinates, guardianComponent.DistanceAllowed)) + { + RetractGuardian(hostComponent, guardianComponent); + } + } + + private bool CanRelease(GuardianHostComponent host, GuardianComponent guardian) + { + return HasComp(guardian.Owner); + } + + private void ReleaseGuardian(GuardianHostComponent hostComponent, GuardianComponent guardianComponent) + { + if (guardianComponent.GuardianLoose) + { + DebugTools.Assert(!hostComponent.GuardianContainer.Contains(guardianComponent.Owner)); + return; + } + + if (!CanRelease(hostComponent, guardianComponent)) + { + _popupSystem.PopupEntity(Loc.GetString("guardian-no-soul"), hostComponent.Owner, Filter.Entities(hostComponent.Owner)); + return; + } + + DebugTools.Assert(hostComponent.GuardianContainer.Contains(guardianComponent.Owner)); + hostComponent.GuardianContainer.Remove(guardianComponent.Owner); + DebugTools.Assert(!hostComponent.GuardianContainer.Contains(guardianComponent.Owner)); + + guardianComponent.GuardianLoose = true; + } + + private void RetractGuardian(GuardianHostComponent hostComponent, GuardianComponent guardianComponent) + { + if (!guardianComponent.GuardianLoose) + { + DebugTools.Assert(hostComponent.GuardianContainer.Contains(guardianComponent.Owner)); + return; + } + + hostComponent.GuardianContainer.Insert(guardianComponent.Owner); + DebugTools.Assert(hostComponent.GuardianContainer.Contains(guardianComponent.Owner)); + _popupSystem.PopupEntity(Loc.GetString("guardian-entity-recall"), hostComponent.Owner, Filter.Pvs(hostComponent.Owner)); + guardianComponent.GuardianLoose = false; + } + + private sealed class GuardianCreatorInjectedEvent : EntityEventArgs + { + public EntityUid User { get; } + public EntityUid Target { get; } + public GuardianCreatorComponent Component { get; } + + public GuardianCreatorInjectedEvent(EntityUid user, EntityUid target, GuardianCreatorComponent component) + { + User = user; + Target = target; + Component = component; + } + } + + private sealed class GuardianCreatorInjectCancelledEvent : EntityEventArgs + { + public EntityUid Target { get; } + public GuardianCreatorComponent Component { get; } + + public GuardianCreatorInjectCancelledEvent(EntityUid target, GuardianCreatorComponent component) + { + Target = target; + Component = component; + } + } + } +} diff --git a/Content.Shared/Actions/ActionType.cs b/Content.Shared/Actions/ActionType.cs index 0cb60f42f0..4eb19eaf34 100644 --- a/Content.Shared/Actions/ActionType.cs +++ b/Content.Shared/Actions/ActionType.cs @@ -18,6 +18,7 @@ namespace Content.Shared.Actions DebugTargetEntity, DebugTargetEntityRepeat, SpellPie, + ManifestGuardian, PAIMidi } diff --git a/Content.Shared/MobState/Components/MobStateComponent.cs b/Content.Shared/MobState/Components/MobStateComponent.cs index 697849abe5..90f9dfeaed 100644 --- a/Content.Shared/MobState/Components/MobStateComponent.cs +++ b/Content.Shared/MobState/Components/MobStateComponent.cs @@ -5,6 +5,7 @@ using System.Linq; using Content.Shared.Alert; using Content.Shared.Damage; using Content.Shared.FixedPoint; +using Content.Shared.MobState.EntitySystems; using Content.Shared.MobState.State; using Robust.Shared.GameObjects; using Robust.Shared.GameStates; @@ -318,7 +319,6 @@ namespace Content.Shared.MobState.Components var message = new MobStateChangedEvent(this, old, state); entMan.EventBus.RaiseLocalEvent(Owner, message); - Dirty(); } } diff --git a/Content.Shared/MobState/EntitySystems/MobStateSystem.cs b/Content.Shared/MobState/EntitySystems/MobStateSystem.cs index 91dac34ca2..c4c2126f4d 100644 --- a/Content.Shared/MobState/EntitySystems/MobStateSystem.cs +++ b/Content.Shared/MobState/EntitySystems/MobStateSystem.cs @@ -111,7 +111,7 @@ namespace Content.Shared.MobState.EntitySystems private void OnStartPullAttempt(EntityUid uid, MobStateComponent component, StartPullAttemptEvent args) { - if(component.IsIncapacitated()) + if (component.IsIncapacitated()) args.Cancel(); } @@ -135,7 +135,7 @@ namespace Content.Shared.MobState.EntitySystems private void OnStandAttempt(EntityUid uid, MobStateComponent component, StandAttemptEvent args) { - if(component.IsIncapacitated()) + if (component.IsIncapacitated()) args.Cancel(); } } diff --git a/Resources/Audio/Effects/guardian_inject.ogg b/Resources/Audio/Effects/guardian_inject.ogg new file mode 100644 index 0000000000000000000000000000000000000000..3dca7114a1849e78c9b7d6c60362b1667a03f751 GIT binary patch literal 22763 zcmafabzB`iv+y1`xLa{6uEiaSyHmWlYw;q*-CBx6@uDqI+}+*X-HSUEzC)kqeeb=0 zefj0=&W&bEC@}sE;X>27s5=*DXkm`%ezMu)WJv_ z5zxg__bLd?NgEZg#nLwwh$I@88YshgOAurs;{NKNGAKo)V*+7C`tX7zMIbeR<*maG z8Wbrc2%_hOCk-OwFvS6403a)eHX?@>5uKm{5$FQ|bYT_jUPq$-uSEUjL`d)`+Axrg z0N^2f(h<4RpSPrADYav%{^p(VAB=+)e>2-(acKZhRza3<#D@DTX9@uDSv(PWS`m4c z5xZfZ;e$eop#VPs07Hu55K|M7iWeV!r#@R_xA?!ZZlW3fUvY>H(I>3Ti(tc8pz&e< z_5-9Eei#ufU4H*DvLBu-Y7RmP?`qm+mNsgtY&kD+nsl{C?6-(|-rY3kk^Y@D))5Gl zlctTF3gO#L>&ntb{0E{b_ZUm1f5AD9>>H+G^gtl$5|5bF=xPWAQ)2ZwRjwQYN!NR* zev^B_Ilrj-dpYRdCrZP5c`R(MPy9C44S|$;_E*x-|I6~1@2`;|?G;83i8flIgP+*7 zB$LE2CScnax!GeuAP7toJs97!%#G)Rr%G^Cm8JQ|;81`tJb5s-s`P&@#$n_kcuoU! z1z7>I^hJd^QEY>Zl|z3od`HEVsQk#RUFc#AC0(j&cAPU>HpjfXsex4*IyNQMs z@v4Y_?MDW&y(lccX^hH?X5%orf;1;Y`oe$AN%qn;0HAbEG>$?1KlzMk6oX0y6Ox%G z**GWFB-CBaW)oetYrS>ng7t2^mm&Gq)krJRO#A=jf0_>Qax%zZ|ED2zJ$TMTynB@K z=>KUZq(cD*Y^lHFO{RiUZh~@nf>G&$LkUYz1zTd0Lwy`aPlek~h0AP`Q%{XcPhG=K zGto}B#&t2tZ1Ki>^?zkOxW7%r1OUER3cA?Wbg`Q}pDAU8E&J#JVb~XsjM$+4yvY+w zDHBU&6>H&b^VZEtV`6%N-5#QI5@%aPaDUv1R)01bopn}__qT9 z0J*;mdvKgc0h4N4l}TNVX98gM(@X{0K_3%m+ zeV#|YfP?&yvd3a@K*HDn;E$||NEaM$ zJVLh{qdLI5Lu4GmTaacl!b_VTKfp_q9*0Sn2YIC1O^Y9q*-49=kfDW)k2VnGCrZm< zDgmI=0Ba6J3UM3?*i;Hw5=z*5vse<-2^_;5oGS0s6|fbi->GZAQczE%Qean5z*bko zl2FG{S4&h-uQnUyu$zCUzWhpky2ecR+FLWxb(vjZ{^b!ub%i|Y)z~d3{a2Ox>^t>E zE(n!V#YIm=-Ao&z*-cM-R$X((8=`qyO<^8KT|H5Ke%eeu(bd33eOW_qepX$3#(Qxl z*kH!Hqwq(A{Xl8y&x+!Q3g(A~--q!slkzVWnif}4SJ14sQ**V`#gdrCQJ+qfP;-T7 z@iuTZo1YaQca>02FncL7!A$R?nPx3S#7^DKd(}lxFUeI;%Ut&+c+%BXFTre8(@guu zOs{vwb@fJmvPNNc+I3Rhb#=ydJH>AC79!@Vo)~NZ;hPO!_po2a%}`NyU5?i?fQaGR z8*neQ*bDr!Gg%a>_(g#%)l$Z&x5(AdqLA#myhkXu&K<%rS!D;&x9p;4kmR~-dDx)* zPF+vaZ2m@F^V%CyiS=vmRXp|C8;Hq6rW4bRZoKo3krLEvf+027O}5k1^4Z*bY+-Y8 z)rH8G54DsEG&;J32tj-vmIwf#576?RU`2NV|b~loE2qhv-6Z?<+6ijMCrC}g73VWjKU;-#Sq{45Jco);@CPnCx!Mqi!~ zZww*K>DbnHCp**Tb;ruuQsrss%JbIXIe&gBoaS%gdDW__HVMwE5LITVvh)yDva+m@ zT0vByipoM%smVfWWz0Y~ttD$+4pAk?I-{%_2_eYIvO-kZmv7IASTf~en$S}9yfP^* zsU{Gk`={{fS0*LRFNIU}#L7m$6dqj$~S{?CP&loyUr*b=2hRUusnk zqwRd$95@DPdAG7`R7tgtZWM3mzlBFsLsZ$6Uqc8GRdTYNHF!3kIj>W7enJQ~*5x~? z&L^xpb80r6wRkp=GISuSc4kZ<(GN5#WO|^E_lNjB)QjJP$z@q#vqi#KcXK)5S$ERn zBUpFIa#dM(h=NqvcFE#nRbL=g#Jt>CRh#U1RaNT}h~GoK_&p&9)hjrN+fo5Bh=8F3 z(crm&3Wxf<8)N^4_&5i|vxxsAmpOxa#6*Ouu04bh$%xXI+-u;49OkaGF7 zj`QhDFd4~uvlMs=2{7MB@$QlYowman0l>#VXh1w5n!T7Z9p^JF?n`Uo5dboDV@L<5 zLHrQXYzQ|IWO1gYQvHiV6@{lV{SPiLKI$JnguM9JfB7JB1lw*FL>7WmmHjIV{{rp* z7f1IJ+5V-{QT-Rn3qqHrec^-H7F`r_`Pa(-!NvX;r>goN9HguM<%?I9frOw$JdmM^ zCqjd-{>tb(0xpT)-|;I90N7m`YT@Z3L#!4>i;R6(L!QPU7<4n}Y&Tmpc>iUUwm({4ct z2X{*>bi=sduLUq4^P!8P2cUOt0Ep6U?FifgXCX98YvA-8Rk)W81pw)NGyv#@LB|*; zk__pAl?v^JlZHgYkkkjX!2xaLP~zeopK$wsq<=+Gbga1O1aR`9H|7>rB z|K0YyY;Ruh%|z6pEc9?>) zv<&x-PW1M)P6P@365q$)V55`1cn)2=?nL{|kL;8o*Mz8XKvGcUW<_N0RZ}HsdfbW_ zC29n3g66F|FT()yD#qt~UcqxCn)}J_q6L#V>rLIKl+CM-3tNX84Uc>W^J3^A**3rO zKtBFeiNmGuU#hVgZ#lcR1-AKj{#<(!k&Sb0+}pmT(qHi9HXCe&Gsu4pa?!v6XMLSF z>1l_J{Mxp3d#x@Y55lu&4ZPNH*tm%N7%DkSQM_>8i1-T>_3nv|+3X+-f37PK#(cap zjSHBt=%0Q2r5x=^@JHyVT(#k%W6PT^8KxR8NicBFi9+3%83%%O@V43TimPo|4x1GE zWp)Tlv}Z&;d`St*scwGc{FU0N=G(FLYZEJrh3I0sbMLsQykEU-^Sv@^@fV+)MM;)= zBo>~CWs{BjHbrq~b0aXHPo9Y%{fB0_LX8CXhOL{`ht|uir`)iNKA=KtU+%^oU)k0C z5sXA>(4J;rFfzS92w%L{w4e%EmKvXeAGa-Mjp1Eh1+B56XxA6d z@YF0#izB}4w%@OXZM-+w5dZNr`m_10m<`BBa#(VRzy%0bZqJvTcjZzrzb1*mM~u&S zz+8-ZBsQ3!_s%%?t-qVio3>vihAV)@$u+s2z}`%|6nD(#gMGyo>W8oMu146~7Zxdtd28rh5N2V@gS7pp9`DZr zLq+Ya7qE72aK9}YX6UPKP|ata4lY>dzh=lFx~9SWmJ?W;4&sK3a~#l#JpcLqZS)=& z8^KO{&8ky{1D0e^O(i~S1ge?feC%uEVf8Zd75{V|lVmAPM4KO+gUp-a>{e1qg_sgL zp{Sb8QyJmcnv?h+TsX6)^Ytaz@*=Ako!7WIHsH?1`o!~6#BDoPY<;V9m4D%h70)$2 z5gGeR6Vrv8$?8SEMR>|v2E&Mc&H}Vn$=kl}UI|3N*fes^v&&^W1we6fud*y(JKH@k zyY`@0R62Vq-PuYvB*tC2m)KF=AU_i^?YS>qyq|0=tQv2#(5vv%D)3Iee4||Jwb*JnpTT@iZrOq(v99Pv~(8o|K_@!(L6l zG53Md=OvwMAKq4tH=0)AMqbq_sH;Y%&SsInxCl44yq&*oGt7hMd{RQAIMF@6{v1t_ zrXB&cxGg8cSZWB1fNc3c%r%8;z)~s5;M1@cBCsA9xOq4a3#HwV+7GwBS+dm(Px`J( zJqYWorA;qePhLl!yJf+Ndp+Mj+scd4rmj*`=PRxyrgNrUhKpTy-{ zKVubW0+v=LJ%L`wIKvgmNiqdfhbNoW@)OERd zH@R3-HsA=yH|)Bo#aMO-5Lflzo}lsTI!80bmDT7^Yl@b9731#VBJAlWwBm>$AFP@f zS#9*TBr?bO9a$PLqlph585_v|O`sF!G{u$^Yls`y)c3Tr%n}sC2$YS=>mTA39x6(I z9jmYinM#`TC-@nu)tcVflkzBVqPpCaj?H-De6#Q;za*hN=c;Y#5_!JVc>z4&=E6d` z&RFp%N7g6vo%Q3-;s`(ZY;t4Rx%_fzA0mWwZEot7jx-|X*|$Y88ApiYo+ve#Aig6g=CrwHE^n!k7Orlrn} z>iZ@IT~q)?J6O=JIa^^zpJ8oFZ=DleKVCOL)(8RCm#$JrR7NyBZ zfs@ZBfWBo7f(U?(E;MJp<*2}w_SQRB=4}-*p|V<0jhmVkpUyBly;Dwnqj{yao84wL zm*xj!%PLUN;dia)IG!~AcnX$w69Q%zn`o7Jye~$-k#gR)^x!GlNDS0YuK76Vr1*|; zed;wmhGJoawQSOM_!Rm&nLj5nxDl3@Rx{1Rgp8(^NrZQ|;pl7<nx7;`{JA7ftV)U~a0wb`6C@AJNNvqZ0NdV?in0-l|17fhyX5hEQU`_~ zC)-o{#fbbmvEvV|2Nr<*M8-A?9DV5CD=)+|WY+iSy`uaKQSX~bDdMnA*8>!wnwMK3*uq>M<|>2{*@Wu^bUYp(O(~9hQZD zcdiuU!BnLn*1lIH0}bp=1wg4gqb!b|Om^ZiFqFq%wLBBt(#PXoatDw}_kQ?ciY<$j zVnrF9o{tqo7>76xcPp0f^A^6sI~qMDGoP(3&4z%s+zWk4spEKC!Wz{3s~Qe@OKC(n zip77}=L6Xv@u8t5KhgBjfa;pzDnI`+RBU%~KR8N50+itQ$oR7u^}cU^C+>QGTA6Hb zfVQt6Yjlk5cMve5g(^aS-}afZ>YAF-ROVc_P$^{{O2}#i3SkW>J3dO`;`&B(B?3KEQK$ijR%Q(pY;+bZ~eA?sS1q-om(jKXEsdJCm+ ze&s&@oM%Nw^F=~5Rzos^0 zRF;0%kH15ijAJ$>O%lxgNoHxC735H_KtkFhP@pUzYDYt8}B_O7m?;ONR_ja*#jKR0xZv0i8uO_phIy-wFPV zwc$ zF%2~%=BsU0FRW+t>7|0zw`|dWz_;eN0DP@j%K3#^vwA_$srr-lrOpWgw&L%+srcyT z<)X+)!EwZ@4sWQ!O1M0jD*^BC-%?PxH+=$ZDyDYm!;7QDY1PxoD?zCaO-Q%D zT~01t;Y6h`j^DJzy-N7FD|epGFw7tJhyS%$6^&EdB_SrlI*KjTH`?o6?8cp8+v(sp z!`B@(;JE!N$1i|>*h&~xd#6Z8*q@R7xnkU9S$}kdiX>LH+^T%AvdK2*GcVi3hgfId z1GdAmpJMXzO?cREuN?8=`NH=;ydmtn$u$e*&K_$ac)d)bh#F&*%S!OwB{ zyCZqoOy_sHRX<40=pOp@cjjBMZI_xMih4Yu+1SZnp=AuyzO?WmSrcB=q@Fq$VY~pFE!vgpyjk=fL@7 zTB{hSD?|3xRfXTGS$`Mxs$Vg->@xv*{m$$H9JLZx8uf!d2;U~#nuYyBk%lgw2)-g# z4#A*gQzW;0g~b%|xqyocd5F9T306z~b8>A_PUXYf5FU=n>*Uk(81vZOUjJr9ViSD) zPrSdi>ABprWDzr8C+GP(3jP*=d0S~GPfcI|&)$S$XWSW}!f%4WzQ5Gb481Zp!Uj#7 z<;P<1>-WHHN`18Po-~wJ8Z=bQJUgKb>Qo&g=QsS7kd(vAmC%_FE7d3hHXos@1(n3I z2hiOR5rTZu;QYvE#ohN)$d-1F2cGtvW5)CyYFntlu0PV=RLw(n3_ysCPyDHQ5)GUA1c0nn%>-Ejn&N-##cYo;zjPiJKr7?X! zKD+mBOM7k7!CYgRPhsVYjr)d8EBSt-vY|~S^$&nsJ{=(P$CUJtQPkjMj$yS4&_+;o-(Gr*}5jVf=XWPoS+$tw& zWbda;Td%Np=9G8aLS3wO^$Nyh>14N1W)z_og}es|w;5Eqy(5B~gDwU>ugFcp`HSXe zQJ06;H{?&sZr}MDC7yj<@P_(R`th4Fn`K&Z(AhZoWw8QqCw1ZMXa`0iJkWwk;Gx&x&6tCqPrucdfOjr|5_~u_-+7GEu|o zLBfEPXU+r|OLkqH(};Y7{Joloe$>oyBp}(MFR}s41tIFW=y{ zy7aL2_}t)<%3P*(YdY(T(|s6r0|-|Vz}`ry$ODES;e$p?Uo%Uw$C*~VWl3=co(i$* z8?mY5n9EI0&)9oobf-(Yf3U8|)V=;4YZvoNG$gNI2@G5QldaA*j8b_Jz>|P(uU~n+ zM2g7m$bZC!GeC|apYjQ4OYL&_)#^4UnzTrtC?|v5St2*-C48t-6|vUY>oPfCTp<(S zCaSB*qa#^QiA4~@CIIzRR0D!`0JMBbWo8MNY3~zZ7U#Gm)h6bmDbBqz- z_A{oSGTzcpede8sAjoH72OruN)aGMfCiu#Q#5r~mX6{&9HXny?(Vw94NyF3Wx8;U& zZ+gUS%1w*^jNvST3$7ZnAhIU-hxtM)Nxm7v047eU<#59D&GnWFV?va#?ouQo=u zbk)L&Hj7!_c6!V6Jm6mo-VHf@bN!-pL;=%ct^@n6oEr^xepB@PO@3`|e9J9HW0T>k zJo4L8Xw&qk{t;!6r6G=Atw}tQe`@pvOQn~QCngN%?w>JEX1iUEThiy#=Whd72ie@N z)$!HdAN}wMvXQ265wQrd^B|ujh+>v@om$4pWKPc=@7_ygE$$f(-rIMZCEDlduHgtT zn-h#V3v)b48CrRCXwVc47lbHZU?A)`5*yFAk)st^M!YwD6krE&TxQb?v}P4vv^{Xx z)a6PT%*Yoe70J;C$zc^O+NYdE${peupZv1C@)xu|zQ){ zYXGp6S;oKze{#P5=2aA16jR0tW0`bD*d?nRR;uMT29A>t%s_L=iI=*S;GNk>IB&@?yHAXOB3+rLxJ z_ktD3-T*`K=^DEFW4PBK$|WQex}3b0Znc0K%Vb7yG7z0C(uKaq6Lu!fwWaw8RbD?2 z7s^_z_|~0VE-!p* zn>0)gO^Qw-853r^Pcre;Mz{X3yz|6Zvfp6vY_^8c-k_jV3XqsV6sf`nX*?M>y;np} zBwE(08KxR}#1Z;XQ?Ty6$U&S&Sj&y!+(4Wev$SdK`Yk>Lfek|xWHd^hHTo@$m1*v0 z`;grUhO+fgok-}>cTh>8MMR+K=?wrfq3yE9zrB4MazuPSc9ERIk7~|i%kR(qwokak zGgjhID4`ZPP_gYXRM|7S-_+rVGxga? z-d4}6GOqtv9JW;T-U*TzuV9slHOK2bH8FO-Z$TIZKw$uA&G(i6r$sp@Q$@f?B#N>7 zJ2M|atT8dKtWz9`Y_sW-hs-d>12dD`J-dFe!4+I4_K;3An3})swlaY&mvqBO%#41C z@LtK(BYlz;^_#d6&8ZD;|ADEnHOkkSsgGE6n+J9x{TB03Tl09fN*|!Uz*rH0&wIaz;O5G=d4_rR>`r=T^t{xDBM6U~%+Kxt z9}Cr97tZ}SaU?lLb5u?GG;1_)_OzhP4)$rN;RqDrlWu#YD0fYpNEASsk_lMxIvKyo zv5VVSjMX2hDQv3OnY>ZDusye!lKSQF!G9)=0RH-cA-#TUYR>?_m>T@2GaF?psr-nY z_MMI9F}CGvrTf#V34ClA(&;pe$;s~rUl0}%xt5J=({_XV4A1w^G zYVvoqv4u(E=d)FZ-J4O+WcNq_Wju_S=Xa+)d-0^Y8xzpGH)7A6CD&JA5q1yRtC(r_ zA{>vF4vRl<><^!gN@3gXV9a}J!6C##1hoLn9+^q-jT46#mKvs`D>omm*7sUJm_0#c zy?ANX{wa*68Et#7A6Aomv!>0VR3STN#2@ukvPNp3ptnvG_cbc|qL%&HyiRze?6#ru z|JVUa&3anatQ-zFA3)!mPw-ki$6&(plfVX4-NHJr%_ZUaqmyHRJYzmSDbZwb5Y0nGaEly25NwK@(+BvzP7daFz=%}<`Lb{P+fOl$B(~b z;c2A^$aFgKTWtnSHF8rXr@AXQVLS!wb{yF0E$u@^y8`AQBxHl$poA_@l>5lc-WU~9jlhMdBC+j0*$%5_WG*hY z=j#MEq&TY5i(m~gl6E_o_O9nwMXn1OF}WJ7J9FSc$rwDr!mpbWT@K|Sur0Hiu5kBr zs6;H6^Y`W@KlMp*N~&$~A-@S|M2h!Gd*G&fe3bU&Y9IPKs=z>K+X61cjSQ`Wj2dsVly0ruERtYERVmmF2Em|PJcUts8q#;;&4Y_ z*DRbGrT2j8zu+>K0sDYb=jKX-#v1#laN@xZw>jqZnUivs4`>Cywmj%P036->S4oXE zb`B0v@`rF0%J9}QXIFD7#X8z&Sh}GsK7@9T2)Oz-F;+VIG8s;%(<(n8GT~YDJd-zf zZJ;gnGSk4LZ7@tpnTK@zsv+OB77j|Ba`i3S2lg`&wN`l)QnS~JToXxTld$`4@rgL+ z-Yn`-DzkJ1M#CYG4yAm#c8dLGS6t$)1Y&>zCb69o9BBsHGRK@+$KTT}Bz{)HiArdN z!MEq_IyFjs?~r51i;o;%s~#6Jjz%r5zkuow`961>=0cIVn5q}voUTM4Ki`!g6J5t4n+4|3_xzw@w(P%z z;qdgZ!^3YOK=T6}(96u9t4&)I-YnX>jRx4GxP1luR4hIg(IWmZ>?(h4QyTIoLtLhr zX4M`lx3a=APfp@Z-X)_hG_LAwY%=WmnWdl`&0!ZIAifIiI#7pEr#C_)Yz8|l)CPjt&!BYnJKXc7Mz*n3cqO^8vZ@2ylU0nF*I$bT zLHw>YzAG$41D49lOxU2vC@ z1V=^#Lb{qo04?DDMbQl}QScIjkr;*5^FFWqJDiHWFtk&-c#;%5px2U z-McOuC$}#>q%>`|N#Hp7j%(gfE1>eVjx^PGgFh}u!qe%S|z z0*7?AUQLVJXn3Y`o+%)O(rBWK1>T4|3}`MGW#7!t`&MEZ1gP=SWGozz;z0B!9fR-!CKxH*h|T^oSA3-?~Z zZ#(?fx5%O_VAp6fn*y~P+0A4?U! zS!cVD#g4;|h}?fa&n+20;7jH=0rxkCmpW?*0DZ|$4i;*C%A^{8yRA`3m%SVLW(`x~~i>kxe7b^sDt%`O??xoqy6??+O<8e4$LV~oJl15xg2#u zUw)(8JgetE7vr?H$hG6sK+O+Q^L#KQ1Ufd(sgw#IPyJ-#$@Ngq3y^z2R$Uw2{fwHC z6|UYrUlbPllDv3=kVH?9f_G3QY1srB2r7DxC};|CCnxl}bP}3-uJ7DzpJlo=5q<<` z%}nVL;83UVKA6(RTGErvPj98xKGcH}SAYE!Jx&8Z?bkr2U*L9TnJB$IV&2k?N}9q; zM#^C*9y?sqSL%dL>g^1%LLPgHh?KEzUpvvZUiMl2w#PN)rV~Nl&9}a!{T6w+YH9>> zPW<&yb@nPQCN)|EEVf8@@-0Z1GQQ|ODOP)&#Rx*HUkbw7z`_$SXHOX*pk|}#vI`BU zJf1SUFCgB=>5qC9PJecnvFB&UW_~$4(_u@F)7VJ&PTBM0+vd{__FbXGG><)nMH1Js}A-XbaASg$n#2KBe{?fbI5TNP^nk-M(aj% zZ&0l?^EtP>+Gmc9<%p(3OXTN%6?9*gKKWSWK?`ilGg~kM`-Sei4Y%Yn!v}2T_w4@H zKgyAmnR~hT{4y(s`A3aKD~K4^VP0u65g}wR>U{5p@=VR53A!hz*ZmOO=UA~UU!KmI z9+xec6LID|{tYMCK74!Vf#TouEARgviUD5EuRufk=cibp8RN+4EHa8|zsgvg0>F8V??uAB@JW4^c%ivWmV~<9D<YF1Lzm!y*Tt1Y zjppf9-B!(?t;pq!*#w;vBY?qhv5#}@l;*LuB63g1dwb~5De=m*FR!ZJ#%qQdiNs)D`P%9@!T-3l_^L95))wHZt-n=r-v)Sywgeipj#+ZxhrFwl(O=yT=yOhvP3~4)CGcXXq9WD~rvB%}g22C3#O4wq%JdUmK2R%KK3TNE}pD9?H!xnm7r^=(@kcYOsCqGp{ z11~;Vd;NQZ>QR)|Q%LlTmsJMM z$dTp+aV5aXe$%mH;>Ft7o2?r2v2!AF3NAzTVt~1oKcb?2V>EGe6cC)e@Ils!xMRc4 z!;q*3lNOEWf)DnCuNsSkT`j4R`_pfra1$6UmXf9V?a>3X)dIbCI4OdT6NY~7Q%UCA z=)LSmCxIaMI4|lDnGZEIAaD5l+t;iNih#Xvs#`P#4!kt#O+3}SjPl2(pTF77JBDi? zDprp0s6T|%vQ_lL^fBLN{)v(vvh}SMoSdU3!lbVP``p*~gR#c|AC4n|*)sj%vG1RS z55MESVG3`TVXf9Ak|EvyTwV1x9je#ri34Z#xy9A+?)DaDjmx=e@tPcJJVJbAQKTf} zTXEai6|eX4nv(=(n%6Pjls9z4{ar=>F8fE#H>~;ozYOf!`>5Q&v#pc1k43ccLLEp? zu+$}Prq%{h0z+P+16b)B4b4^DUj_Nthc3O(-w4@K@`{vdGCoft#6;lL+Dc8#m{um4 z;{IA}EIM&0fI_{HVp$4cmA4CK(B=a@;nxC?>BF5Q(EWH9IjT9l=eXRkx3Cwl+7w~x z(*>QI4(Uo&D!0e>2ko8IvtLZEZuw)Ec6zW2?XL` zQxVeED{GjZ5mG6Jc%)6?`EgqC(f)1}7Ww9c_>#;qHTcN*D=qRBFbGto4VsnaDS~8I zJ~0VhFHrspAFWT5Y&*0CiO~N+Z7V>OSELT-TuSMny8=1wT0ZZYx>2~^x25fFt95kp z^@()8m!`v_MuwsDtK&A1$$iTabC&eE^KjOkbe9(hQNmp68YX}_xP5%4={kYdCY z$e`Es2a2KEE;Ha?E6L2E#1DWvgPy6G=TT1#g`*6*;}rvd?Z$>J*dl& zfu&;o#Z(Bcg#)Ng`H|IAQzY}jxyjYNB%mX~Kwsp@IUm_QR4cW%-d2P~e_ ze$Rm%enUD!;Xu4~OVzK4Q^{tpo_SlbRe7bJYvLao@-Y(Y<;Nv|%4S%4pcQECD>zb@ zU1*mzS9i_?{MnpyBQz|B97(v&R5!FP)FDU6jB`*K$rF}r^@3^Zq}YfWqaKP)-n*8E z7f@|M-n*Wc*81(70P}8fEN(BGAn~(T&DFK<0(Q1GOwLqA8(z&)K~^W?Yt#~MovMM> z?x|ol%lP0wViz_D*ZM4+VvfjYG$Ir^ch$pv;0Jr}6-=?ZGQ0|4g^vavnGMGd<~Adm z#~9{%Tgb2xmj@lBewe2rS#-$2=O&@VrOn1*{qNyWtL{$@mGredln{e^(v;N01oN@iqK*W!rZd zs-qlBxsdsL)zD_<=k}@DTo+2*%Pd=_@9>;w^?O8M3HjrW2s!-+*vrn3 zs4{8{cecZV8MG|Ed#uPB4qf;l_!1X{G%ad^lIesMo8nm9e>iBhmYo<-`WnDXP#je zUC#XSyIl;K@`bnVC*+JmtNonS*LvG$cjlU(Ccf0NLsk>4Ah7lfnP#RA6PbYTBfGRp z=J;|JfP8)LsSY21ldXC+!PE6|WKs7(Ys5ZSa~p1q!4dH^Gz`x5ZBqDhf_PfPcf zw(QiGq_w&UcBw1ZBNV#?*2h)NNVn|EX162Rds4KRKTA`~r|)UKoQ`&>s0r4Q@1P!1 zkRPkc^d)|lK`TEJ%f8A$Kzmt3=H8U?Ns4$+dFQUOi^*h}lj?Jmv>q8KY9Buz@L44K z9+>l7`q=Cs6tft{rOAC1x2+M#ux<%XM(X?#jaW%71RMqaPWxmp8Gr&E3LJLLMGnXveg@v!NVHIS?nDM>o{Xn*En*XP)fNL?W$xSx{j4M^t}S99+N|v?WcldjQtA7OrXRkJatqJMlCVZ(c($}yu6nceE?IT=RN4cZ_iCNFPx`4WF==85GwZ(Solu$b<-!Wz zJY0~2*0x0>&AZZRlx;`&Xx(OZ-U~3Fml-v_iZNY`N3#-jUHi4A;YJf(d&>w%%J{|P zXJkg79ovAACt|#2aWDfKckd~IYCh-8`zflJ7N#Wu{c{1-BA=${fn$cqJLRoinvQ{n zcP$OA4VHcAWfS%kQQPpE7Lq)}^6pm0YhT=B(YkbCpMJ_o836hRsQ!@fckVgOaH9|- zsR?QaCQ3hbWv+%6MxDr*+VztfJGnvJPTpyho-G33eQbvsQc`|gb%)iR~3O2Xy_q1fRkq9ZXj6U&8?>)IzqEzb3R;R0=0wvQES z!VyhH{^AKGSs3<(9hLOOu=jcIbZNX3*3vCK2RT#7wPH`+b$`gNI#k{^pF-f~pKbO4 zJ)*$+vrYxgoiJ%l*M$jx0I6BoikeaH<#vd-SpaGIP>lsUd~H}h_Zt2$+u@We{zRTG z0cBEtf*f28b9{yT@A4wi2KRZQ=@vi8D-I8^yE{e0_u$A?(_gbGeUBz0JvCLlH>SvH zRSq}WL#papacq5OEo1YL!?@~$N#@f6h39KbOlp{}^-B1s52<;=qJ6x6bv33kNjk?` z3Dy7@#7#N1MdLwRti1EI&gmEQMk4-hx}#$Qr!EdF%1n`;$D*`hT9k#iqykx2i+ZQ? zGBds&QD>qdsC0Bw`54?-xl(BPiReteJnX@s>!%+*WHyHU{{{sh?KRBcX5S}CCuFkR zW0l-9Qz+WYw&p$SIMC={QNV01_^iIv*QX|B?cf zvQ1Quj0gSTEfm|la__M=n2&ObiHr?z`%X5Yc`gEsZ}l+lJ?zo_ph^Yil@S%e9%{61 z-TCcl-Re5BS&RBNF z-8I4;gQB8PeV`;X@tpl0n0rU-FC;Apy8yIN)_XwUU|TgP_W>-8G=pdKnZ(5jbqd+$ zZ2ZEKd;os1c4fxVpoGSobR{3#g(6H29RbS2u!JTFlNW#YYF>9SXkK%Y2GoMva5PW9 z@gyM`GqK8lyh(*Ds7@`gCI{uygyJAAtiobl&+6X5?%XH#<4k%N%K+D|-R*U)Su){I zAaO9e0P@wQ5+31cqwaFm@_P-Rb$AX&$LG8>!6yZgY*PZex{nwqd0+OJk6}NdiA<|R zdl~Vfq9ptLu&X;-yt*30CfP?t0O7NMPTAVUO${}4jX`cvLY~Rw(Ij;CPK5{8ER(Nv zkG#bDJoB&d>+NbTs?g60(Jy3oiIwYDBBTk}j6{8Tll+sGkXKRg6Q!{V_hu@?>o!NdTgfWZGO3V1aZl9WpX>_YmDqs>x z=1?vojRHTiGEVL_x@WVrBIaYnTV1bOq!eZ8+LHQ*uat9hbvmLG`C`JE70*?jz8%`0Vim5U>OsG&gJHK5lClOfoH6zo=81hO@^Ze7`{})6RyXxty1k?QA zNSsnOF-(U7re~2C3vKHasNEV|6&Q}fv?$<~0LD;Q`9LI}kC?c_bZ?0y7|Ulrl1O&I#1S;O*@Gh|zp$GnLI7kmpnAF?kDFTb`2@Y!>`0B*rPp#4Lgmy6$E7)iH> z0w0w!XUL)U2si#t5IzITqeO>-QwpL-2IdIhQz$DHUe|n+M$3`p$sWem`vIC)8Huuf zRPE_&FtGukY|7?U48FO}0STZ0upgZv<0uW<$oW7Woghp0(Tv8H1Zr%FuHle1xuD&b zzEa^&)75AhX)}b)n^Vbw;jJeWR}H{tHB8Jfnu=s~ydADjv<;4Y9~qgg1@!K4?%Db- zz$icQ1nx@ElSIlxg&9SiFjbEdlvMn9K%p8+H~+bWyc!iUh|s7&_ElRzt~>!yCnEsY zmMJj9VifD$@J0uFzsVkv)VUAQ$(tx|PSLt)EjEs{r5DQ*ARe}lQzD_}l|LVH{t`}Ymh|oOzfEF~M4#Pd z8XFsL&FUFnZ3edZw5~VkS7La`6y#v}?PHtig)-e~5{h2dR z`ruMMDIfT`7C^3o$jWW zJQmFK7JGs?EqGKOWJv709!*HIooYmFW1tgZ!OZm&S+2FP?gUmWW+q=*a6T6Jy0w2; z1||W1L`x&=c@5@3BG+$AN0*3Cu-_an@`88+E+g+)6=0e*^ae6Ly-o0|UiID9y#l@% z&jSqz2L%h$=dWGurT{U<1eOJ4>7#hQY#CC-xUAJ)^%mZ(Y?6Ki#Lu;sr1oc=9R0Uv znT6-@#0p~^m1O{|`*V;aFaGEbfd&8s zfVZSyij#mgC#=p5D|3wOV+cA3YR+>2{mvS7%=gKp45HY7Ep1`1vUP_9VA5{Ch!>`6ha zDo~Of=5=p$V2G`g_Ha)0o}+e6|mDp7rzg#Esr2DWMtAb10g596GcgA1mtSXM`8TLzw)&H@3r1HgVUryk-&vh|Yz zEdc3f2}6%E6(~Owxc=IC8XIR0XL?Y6+CB#{q%T$49rXlu(?0-AeN{);lyYA*Q)Iklu(rap)z}HfFh4pus zkFDe|d-&i?ynCEJyPXpdmD7{x7eyO&CM2o|N>ZzDKYP2LgyxXGNNymxFT znH)N_W`yn@+o2Q#o|(=70T2N2J`Z|NMAP$p^ulInuxFqK2ur#qln4Tq9P4uZPmdO) zZC}$kL}yH-hPctbcnON#PXWz#0O=Z8K(Z}Ssdi}Kq0J;6CHd_U=FYCa1F$Q>9)1ljcpuu9*LxWj|B>i}2 zgCFCCfm%gl8Z-@<{Mr+s#D2`|HDa<)da2qrXIRq9?CCLNfy(+>Z{{tl^T5N!iq722z&t-cv;A-qmIez5%dtY8 zU!QjxeaedjCvRk?DX;mJ4~85D%_Nu0k29oy-5M*$GqP|IZDl)M6~knLmT>EK90KWg z3A)ZCRwq7PFvWI;p=FeX!I?>!h*)^|EV@G(U;YD%BqPn}S4q58 zzzV)^(ljYobSytXg=z!Vfj=hCB|Ej(0=^ixfB*;pn4YIN`sL^uJ+{$DZy@Qr0f6qK zC#6)BG=KoUEc7G|$(`c8u6@S%nUqZ$tnCyRXn0!$w%$z;qDQJjZ4EiVim`DH4e0|R zzcM@J@UJxnW+@Z=LOW_PYiS1ONc0A1Qav`y+#$5YTlkfzg}nO&BsE1T{n% z)0>WG(Iw6iHu|isPerQP_6(Edhudud@r}YxX8fayV4t-K^yNGxDc>&LWM&$Op{@=S zhVUty*|Q7f8>e3wqVRfMg5W*E%|c@91Jxx_w||eWIE?qkQuY-O9)%UL9&p#b1myNH zdTMn+;ZbY^6v^N=rTlIyOdsmu;~|3V2Q#O$YY&-Dmfj-kiOJ9zG0tHbc=`}j78`IQ zCd2i~iX6%+L^X%Mx}j$%-U!YC3IG7GzZydg`h4!;2-6QmZ3oIFNfz4h)Sj`%4Uccc z$iDeHc<8}6^Y7=EQxUoSyI)PP?@2^g>Uyx{8GCqWnMAPpKpBn@(s>FYwgL~um`5YqR!$IWzo#NN9L}MS(x{v+ky26iVpr_cpCqQLzOYm6|N*b?NKYZH!Mdgq`UsMKxfa>)pws0x@p zMQf+2((nRF(qkBso#gc9G`{Q{iL}L1k|TNh2clSM?Mfge7^Rn{*wjS_s>BRse5;Wm%d5cq26i-+CDx)=eUvjkga$rw zsu<#Pb{npI9uK}4H)UT=_W}3gHEl4d0dl=>NtmnkVjy))3cvcb1+My+)FQ^ySRENl1eaT?)dTuL6|hsIg#5YzH?d7l)Sdhe%{(?j%jz z_Y0McLT&^mk@xW_CA??r?z>SkBC??_y5GID?dT*>jv;ur_Kuf^G`-FKc6PbNZu*gc{htkQ0y)S{C{~tHO79P9b)ny_c7y_?jeU~_G57xf6tWEl=X5BU;8_hHAJy&kw$6& zHcpy=SvcL}XHx(K8hZf%00000sk6uY1ONa4JB{+o2*<^|#>mFKwEkDNfdBvi_#}1? z^9}Un9^C*&8Kd_on<1z%`FzV?Yj|QKi^OAUeIv)X_R_wmm(XS7^g0+=stOtZ?3>WB zx|0Rw-LUmxd^9u^|4_mKqG8Yt>DfLPknyGgaBhP!*|Nn<=E-#$Q09Tq?4@VRO!^Te z;P=1@Ypr#hR2B})7f}Xs`o{&>rgqWNIui%e5_Y^cvF|4Z{F&{h(Y}kIowP|_ltjvuH-!X+9lgbfiVBrU38zs?Kb_RBiUe+2?**uL3wx?mqBhug5t zO7KaGP+Ud=AH54R#SVnOCua=bA!7llLTGL4^8-Mo77MZNfLKQQG;i6p2P6(ad*$=z zoHt5KdjB=dJ~u-$n4=0d;!in{9UiE*p#dTo0QRE}8&`ckLn{hF?*Rz2Wbq}50IK7( zI&*1XO6C1#$z}PvE&|oF`bC2O9G{N6_pfj*Iq8Exi=aC|eF-Ci4NQ>#P}Kphe*?R& z8%!=DIiyN@jIK_x;$cccuHojLb+PJFECZ_?-)Iy;eSB5{%8>+&j-gN4v%?hT^uSE- zqkUT1RUyx>0=ekDJS4a#ky)`)+qETYSo}}gay58E=7kaxt)$(RiH*wT0o04{A z3!ZpYAO<51jSAf71|1nku(ETZ4~f-#DW#Jm3X= zzB>)H6?UHM91RWVo;fmfLCTaAFHEVp`}J#gPSX25NPGLAf!F%WW#`=cmKEs1yh=@+ zhzX3o6(Ao5SVR_`4Dky=@bGvfmwTPX>VM#y*nK_ZeE~% zQ2PKuW=;oJc&tpOm)Ec?OH;XyewMx+`eR|XP9}>g#$m#%T*I>z^oneI< zAUMoffbT(lS1BNXx@;3NHDGbrhJ0iy_kLvK$g~kGF|a^#UWUiZmOgPh-TEPJC-Ti- zEhjad?^~!-uz^0K-E=?5cw-=`#}(@Q1YY*b0s@dZNEo>88#D2o#0Gg{Phee%*3HP$ zZ6~BmiulB0LrhmIQKAzX7;oX{LUs)XmsS0meX-DQ z6kI>g&X)MW2uV+Nl3@Fqww>geh249BS;L=d$Wgko<0TYAa^IEv0sfQ#$v7}!Fc+E* zlXF^z^Z}k#1YR&9Kmz_VlAY%{>}(hV=1w4cW{h$|fs!q=kw}bb3@k62va-*8mpj@w z#17?4wyt^D`WB&U$P%yWa9js>=x~1fj#WQiZ3j&y)LBhJCHy5L0D$G2vz_R&ekS52 zUf92*HSiZzRULgP1I?QK;Bk^a=4D%D*8~zO=<_ivk6=!Ihh=zXg@h$Dcjgt6;i)C> h4`K2McpR9QL5nl^8qUny2P`YJWOhr2WY`}9-T{bf#x(!{ literal 0 HcmV?d00001 diff --git a/Resources/Audio/Effects/guardian_warn.ogg b/Resources/Audio/Effects/guardian_warn.ogg new file mode 100644 index 0000000000000000000000000000000000000000..617563b6449b8a04e0eaa8a2b8adad98094fe3e7 GIT binary patch literal 30782 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 literal 0 HcmV?d00001 diff --git a/Resources/Audio/Voice/Human/malescream_guardian.ogg b/Resources/Audio/Voice/Human/malescream_guardian.ogg new file mode 100644 index 0000000000000000000000000000000000000000..a854335da78a4b0a5aa9bc8c5f03b56f7dec2dbf GIT binary patch literal 18748 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 literal 0 HcmV?d00001 diff --git a/Resources/Locale/en-US/guardian/guardian.ftl b/Resources/Locale/en-US/guardian/guardian.ftl new file mode 100644 index 0000000000..7aca501bd2 --- /dev/null +++ b/Resources/Locale/en-US/guardian/guardian.ftl @@ -0,0 +1,22 @@ + +## Guardian host specific + +guardian-created = You feel... Haunted. +guardian-missing-invalid-action = There is no guardian under your control! +guardian-already-present-invalid-creation = You are NOT re-living that haunting experience! +guardian-no-actions-invalid-creation = You don't have the ability to host a guardian! +guardian-activator-empty-invalid-creation = The injector is spent. +guardian-activator-empty-examine = [color=#ba1919]The injector is spent.[/color] +guardian-no-soul = Your guardian has no soul. +guardian-available = Your guardian now has a soul. + +## Guardian entity specific + +guardian-entity-recall = The guardian vanishes into thin air! +guardian-entity-taking-damage = Your guardian is taking damage! + +## Health warnings +guardian-host-critical-warn = YOUR HOST IS WOUNDED! +guardian-host-death-warn = YOUR FORM SUCCUMBS TO NONEXISTENCE! +guardian-death-warn = YOUR BODY IS PIERCED BY SUBATOMIC PAIN AS IT DISINTEGRATES! + diff --git a/Resources/Prototypes/Actions/guardian_actions.yml b/Resources/Prototypes/Actions/guardian_actions.yml new file mode 100644 index 0000000000..1725cf62b8 --- /dev/null +++ b/Resources/Prototypes/Actions/guardian_actions.yml @@ -0,0 +1,12 @@ +#This is the action the host gets to control the guardian +- type: action + actionType: ManifestGuardian + icon: Interface/Actions/manifest.png + name: "Toggle guardian manifestation" + description: "Either manifests the guardian or recalls it back into your body" + filters: + - guardian + behaviorType: Instant + behavior: !type:ToggleGuardianAction + cooldown: 2 + diff --git a/Resources/Prototypes/Catalog/Fills/Paper/manuals.yml b/Resources/Prototypes/Catalog/Fills/Paper/manuals.yml index d0ed9631a2..4978d16bb0 100644 --- a/Resources/Prototypes/Catalog/Fills/Paper/manuals.yml +++ b/Resources/Prototypes/Catalog/Fills/Paper/manuals.yml @@ -16,3 +16,32 @@ Higher will burn the engine out and eventually make it explode. Don't. Don't forget to refuel it, it tends to stop at the worst possible time. +- type: entity + parent: BaseItem + id: HoloparasiteInfo + name: "Holoparasite terms and conditions" + description: A tiny volumetric display for documents, makes one wonder if Cybersun's legal budget is way too high. + components: + - type: Sprite + netsync: false + sprite: Objects/Misc/guardian_info.rsi + state: guardian_info + - type: UserInterface + interfaces: + - key: enum.PaperUiKey.Key + type: PaperBoundUserInterface + - type: Paper + content: | + Thanks for choosing our holoparasite package! + At cybersun, we pride ourselves on cutting-edge military and industrial technology, and greatly appreciate your contribution to our establishment! + Guardians are helpful and intelligent beings which nest within your body, completely immune to common hazards such as pressure, temperature and even bullets! + You have purchased the holoparasite package, which contains a holoparasite activator, an instruction booklet, and our softcap merchandise. + Instructions for use: + 1. Activate the holoparasite injector (preferably in a secluded area). + 2. Wait for the tingling and/or painful metaphysical sensation. + 3. Check your holoparasite for the ability to communicate and cooperate, and capacity to understand your orders. + 4. Use your recall-manifest ability to summon or recall the holoparasite back into your body. + 5. Keep the holoparasite within a short distance from yourself, otherwise it will be recalled by force! + WARNING: Guardians are metaphysical beings, but draw from your HEALTH in order to exist. Direct damage done to guardians will be partially transferred to you! + Cybersun inc. is not responsible for complete annihilation following the misuse of Holoparasite technology. + diff --git a/Resources/Prototypes/Catalog/uplink_catalog.yml b/Resources/Prototypes/Catalog/uplink_catalog.yml index 776635b834..56c4b6281e 100644 --- a/Resources/Prototypes/Catalog/uplink_catalog.yml +++ b/Resources/Prototypes/Catalog/uplink_catalog.yml @@ -107,6 +107,18 @@ price: 2 icon: /Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_sl.rsi/icon.png +#Utility + +- type: uplinkListing + id: UplinkHoloparaKit + category: Utility + itemId: BoxHoloparasite + listingName: Holoparasite Kit + description: The pride and joy of Cybersun. Contains an injector that hosts a sentient metaphysical guardian made of hard light which resides in the user's body when not active. The guardian can punch rapidly and is immune to hazardous environments and bullets, but shares any damage it takes with the user. + icon: /Textures/Objects/Misc/guardian_info.rsi/icon.png + price: 16 + + # Bundles - type: uplinkListing @@ -209,6 +221,8 @@ id: UplinkDecoyDisk category: Misc itemId: NukeDiskFake + listingName: Decoy nuclear disk + description: A piece of plastic with a lenticular printing, made to look like a nuclear auth disk. price: 1 - type: uplinkListing @@ -235,16 +249,14 @@ itemId: lanternextrabright price: 2 -# Pointless - - type: uplinkListing id: UplinkCostumeCentcom - category: Pointless + category: Misc itemId: ClothingBackpackDuffelSyndicateCostumeCentcom price: 4 - type: uplinkListing id: UplinkCostumeClown - category: Pointless + category: Misc itemId: ClothingBackpackDuffelSyndicateCostumeClown price: 4 diff --git a/Resources/Prototypes/Entities/Clothing/Head/soft.yml b/Resources/Prototypes/Entities/Clothing/Head/soft.yml index a3d22355dc..7eff28e36c 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/soft.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/soft.yml @@ -239,3 +239,25 @@ sprite: Clothing/Head/Soft/yellowsoft_flipped.rsi - type: Clothing sprite: Clothing/Head/Soft/yellowsoft_flipped.rsi + +- type: entity + parent: ClothingHeadBase + id: ClothingHeadHatBizarreSoft + name: troublemaker's soft + description: A truly.. bizarre accessory. + components: + - type: Sprite + sprite: Clothing/Head/Soft/bizarresoft.rsi + - type: Clothing + sprite: Clothing/Head/Soft/bizarresoft.rsi + +- type: entity + parent: ClothingHeadBase + id: ClothingHeadHatBizarreSoftFlipped + name: troublemaker's soft flipped + description: A truly.. bizarre accessory, flipped. + components: + - type: Sprite + sprite: Clothing/Head/Soft/bizarresoft_flipped.rsi + - type: Clothing + sprite: Clothing/Head/Soft/bizarresoft_flipped.rsi diff --git a/Resources/Prototypes/Entities/Mobs/Player/guardian.yml b/Resources/Prototypes/Entities/Mobs/Player/guardian.yml new file mode 100644 index 0000000000..0261ad243b --- /dev/null +++ b/Resources/Prototypes/Entities/Mobs/Player/guardian.yml @@ -0,0 +1,73 @@ +# Does not inherit from simplemob +- type: entity + name: Holoparasite + id: MobHoloparasite + description: A mesmerising whirl of hard-light patterns weaves a marvelous, yet oddly familiar visage. It stands proud, tuning into its owner's life to sustain itself. + components: + - type: GhostTakeoverAvailable + makeSentient: true + name: Holoparasite + description: Listen to your owner. Don't tank damage. Punch people hard. + - type: Input + context: "human" + - type: PlayerMobMover + - type: PlayerInputMover + - type: MovementSpeedModifier + baseWalkSpeed : 7 + baseSprintSpeed : 7 + - type: DamageOnHighSpeedImpact + damage: + types: + Blunt: 5 + soundHit: + path: /Audio/Effects/hit_kick.ogg + # TODO: Randomise sprites and randomise the layer color + - type: Sprite + drawdepth: Mobs + sprite: Mobs/Aliens/Guardians/guardians.rsi + layers: + - state: tech_base + - state: tech_flare + color: "#40a7d7" + shader: unshaded + noRot: true + - type: Clickable + - type: InteractionOutline + - type: Physics + bodyType: KinematicController + - type: Fixtures + fixtures: + - shape: + !type:PhysShapeCircle + radius: 0.35 + mass: 10 + mask: + - Impassable + - SmallImpassable + - MobImpassable + layer: + - Opaque + - type: Damageable + damageContainer: Biological + - type: MobState + thresholds: + 0: !type:NormalMobState {} + - type: HeatResistance + - type: CombatMode + - type: Internals + - type: Examiner + - type: Speech + - type: Pullable + - type: UnarmedCombat + range: 2 + arcwidth: 30 + arc: fist + cooldownTime: 0.7 + arcCooldownTime: 0.7 + damage: + types: + Blunt: 40 + - type: Actions + innateActions: + - CombatMode + - type: Guardian diff --git a/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/guardian_activators.yml b/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/guardian_activators.yml new file mode 100644 index 0000000000..37ff027f9a --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/guardian_activators.yml @@ -0,0 +1,26 @@ +- type: entity + name: holoparasite injector + id: HoloparasiteInjector + parent: BaseItem + description: A complex artwork of handheld machinery allowing the user to host a holoparasite guardian. + components: + - type: Sprite + sprite: Objects/Specific/Medical/hypospray.rsi + state: combat_hypo + netsync: false + - type: GuardianCreator + guardianProto: MobHoloparasite + +- type: entity + name: holoparasite box + parent: BoxBase + id: BoxHoloparasite + description: A box containing a holoparasite injector + components: + - type: StorageFill + contents: + - id: HoloparasiteInjector + - id: HoloparasiteInfo + - type: Sprite + layers: + - state: box diff --git a/Resources/Textures/Clothing/Head/Soft/bizarresoft.rsi/equipped-HELMET.png b/Resources/Textures/Clothing/Head/Soft/bizarresoft.rsi/equipped-HELMET.png new file mode 100644 index 0000000000000000000000000000000000000000..210ee84379e34b5d56d745bc5e7c8c1294f35df6 GIT binary patch literal 423 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%z6FprVLn`LH zy>-^>u!9KegUcmtW=^~>7YQz53DMg1fwzXEcGJ5W&eEIj?(Wdh(3l#e@o15ri13n$ zVe7eb7arR$d8whoPQpoV=FY=sRc1>z{M+8-yF6;8qI~jp|M0Nnn;%MTr~a?2$(r>mdKI;Vst E0Fd&x?*IS* literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Head/Soft/bizarresoft.rsi/icon.png b/Resources/Textures/Clothing/Head/Soft/bizarresoft.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a9b5f6decb0e5c69ec20e4c7c7974bb3e352d907 GIT binary patch literal 386 zcmV-|0e$|7P)Px$JV``BR9J=Wlfg>EKoEw%O?R7AC{hm=5$(;Rui~5dJU&ImSMksyh*+f9o+Rxd zps?gx9BOy>KUWx?a|cs&0db;!@B;g#F085IFAP9H_HYX>Mw+l}td z9_vzOcEZQB%d)l z2x$e!C2^9)TfI^_Kp^g14NkJSbf)PO&-X7F6|E1zus`_y0C|X_bbe>HdWQW0y_+-9 zJnLqG#CFT?e35lhMOFj0zv~AgfyMRxTF>XzQ-i zs#&U8x7g~-d+NwRcm*bCVN`@xAu~H+GtfTb9MJ{-#6IY5H_!~bW3rW-cKW(YX1FnG1doTH|-YSX)_?p?RHe&L7}Y2|S%*{H`QcJa`~ z?cKNZmg#06pY`THv!K20@yE~0_XIF1K|z%6RwJvgYXZ`e`SZ88p1*2xd*(O)m$913 zp}VYeW;QZ3WdC4jc=D8K-`?(Nk|&aH{r;vjD=qrkRko0`^NzV0u`p`-EMSKt|a8yx@VcQawSVb(oU}ClHHPCa@lUe>&@B=zDsi0g;gK_y+b}uY!$=i zcPWov{?69CykN?tqN($DMxS5&@6&XB!HcUd{!8h598o^K*fnrV!0%nl3PZ$%Kip?l zfI0eC^weK*)4$(m{II#6KP~jx+y&{am*np$SiU@D`sd}NE7I|5%Q{YlG^Dpqnp0l< z{jE&y-(6hO>=-BezwNs?qxz20<%SL*2)iipUN7atk@vF|fT7Lc>FVdQ&MBb@00jKF A#{d8T literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Head/Soft/bizarresoft.rsi/inhand-right.png b/Resources/Textures/Clothing/Head/Soft/bizarresoft.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..4e0fb568725464f3b83138c41a88048b829176b7 GIT binary patch literal 412 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%z!#rIaLn`LH zy>-y*uz>{ohyS};@|>o=+rVYSr6p?ngUu=4asHXv{tJ&+>h5b;ut39E;!&cUh}Dsk zZS&dh9#Cb?KDhPAe@BhK9Ev|ZG<=x^1R>z!|DesRxARm!Z#=#|I{U8Cr_$pu{(t^) z?^eC3e8$TFh6AhF85-`LmTWpE7G*VMdEx#qo*zoxr(M+wS!>wso5I2{X=+RUC1urI zb0NWry-RIp?pq$4nzFU0=I+ETt9z1Wi#DWkt}!ip`s)eTi+a{W=Z}9o$S3C}K6M7; ztxTzpAAhedm5gA2vhu)*YXwFce;;&qbZAUJReyW3%Fn{P7Ja=lKI%_cesGN&P#g@j zblfa9zVN*_khq(owycNiY{Tit z#mZ(jR~fE#oBUqRrJ7J|U%lY6a+%y}VW9T|Eo&K~zomcZ=4`751~-GJtDnm{r-UW| D{wB5S literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Head/Soft/bizarresoft.rsi/meta.json b/Resources/Textures/Clothing/Head/Soft/bizarresoft.rsi/meta.json new file mode 100644 index 0000000000..b3513bb5cd --- /dev/null +++ b/Resources/Textures/Clothing/Head/Soft/bizarresoft.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from civstation at commit https://github.com/Civ13/Civ13/commit/ec52cbb95d59b717d4d8c480b35ac133e5b58088#diff-fba188fb2db5d16e5d41985147336a8f96085f761b903e016fffd869b63e497d", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-HELMET", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/Head/Soft/bizarresoft_flipped.rsi/equipped-HELMET.png b/Resources/Textures/Clothing/Head/Soft/bizarresoft_flipped.rsi/equipped-HELMET.png new file mode 100644 index 0000000000000000000000000000000000000000..fc6c43c930706110a1cb5f5135eb2f49b3fd1fec GIT binary patch literal 418 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zV?13PLn`LH zz2)!CIGRy#dF-_~AYTJ6o5AB$Z+X^osTTcrid^cDHG@^@tYFDJ+Y%B zXT9vH7kh)lXGTW0ZQ@%3WEf?Ko;h4`#H^dWsJxDQ%YNpE*OT8@$oIee>J`>dcE_jY z!^O?F*urG>H0_OV-A&xIsh&X)8AwLo_{)$`TFxRi^ZrK9c}skcY!&mWtdEH~{(EC` zcZjabBddEZ?{-{snq;>2lXUz9hK6^oY)%Ubt4sy&Ti)7~dG5y9$mFv53G?dTsTx}e xm4Cjs{=ROt^dHmHd%uS>*sN1mLV!h?^Vw&YonpTb;Ry_M22WQ%mvv4FO#sk{tXlv8 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Head/Soft/bizarresoft_flipped.rsi/icon.png b/Resources/Textures/Clothing/Head/Soft/bizarresoft_flipped.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..bb759bf4f2ca6118e3da720c001a08d71144d583 GIT binary patch literal 392 zcmV;30eAk1P)Px$LP{%=gg5Y2d^8hRKE?Pp5REYzXJK&Rgv^4! z4%Y>O1!km-y0RzfruWP3p``^327|%y-(kAJOXrFJprmY2d&?iS`}E;DAz#diGaH;a zaNrFCHt0~9(XcP(bbRE4GaCTFne%OavyCT7Sh~TqN&o*2wnYy@^ zz`9&9NyT0XRVKO#5iP=-7?sez1;E!AsUm$&`8g!zC@F*74kh~>{Di6!!gAqS-52t`eCbI4x_~OO mYo4$)Xus+fN0000#e8& literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Head/Soft/bizarresoft_flipped.rsi/inhand-left.png b/Resources/Textures/Clothing/Head/Soft/bizarresoft_flipped.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..4cec5427a9cf232a857dafcbe6f525b60e8a5940 GIT binary patch literal 411 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zLp@y_Ln`LH zy>-#6IY5H_!~bW3rW-cKW(YX1FnG1doTH|-YSX)_?p?RHe&L7}Y2|S%*{H`QcJa`~ z?cKNZmg#06pY`THv!K20@yE~0_XIF1K|z%6RwJvgYXZ`e`SZ88p1*2xd*(O)m$913 zp}VYeW;QZ3WdC4jc=D8K-`?(Nk|&aH{r;vjD=qrkRko0`^NzV0u`p`-EMSKt|a8yx@VcQawSVb(oU}ClHHPCa@lUe>&@B=zDsi0g;gK_y+b}uY!$=i zcPWov{?69CykN?tqN($DMxS5&@6&XB!HcUd{!8h598o^K*fnrV!0%nl3PZ$%Kip?l zfI0eC^weK*)4$(m{II#6KP~jx+y&{am*np$SiU@D`sd}NE7I|5%Q{YlG^Dpqnp0l< z{jE&y-(6hO>=-BezwNs?qxz20<%SL*2)iipUN7atk@vF|fT7Lc>FVdQ&MBb@00jKF A#{d8T literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Head/Soft/bizarresoft_flipped.rsi/inhand-right.png b/Resources/Textures/Clothing/Head/Soft/bizarresoft_flipped.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..ec0fb5b2c89f182502610d1fb42e9e0367c3ce9f GIT binary patch literal 458 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zTRdGHLn`LH zz2)eAs6gWQ$MsJybZ}W`2r6|*eC6A9B+fDMy>^G+zQ#Vqxvw;0cd1ISw6zGxy%92W zQcjgM>6~L$Qrxwl|IMcZn{BJV-LK#9U)}`@QZ}~yvB*5*ajQN#KVJWDwrKa!g*%sJ z3iYS3e~P!C@8nmxEVD0OLtvi9ZAYN0*AI0MEzGdLwk?|B+j}*h&6!Jb8r)VprF|7( zSbh0NXZ61WHu($(4yR@+OtZRIHZ^+ps>vspZv4bn;PCbFG?$X;w<_mW_rGSDFE!!h zQrShm;XA9B7GGYDT@4F#Ynb7FyXce4d5YWb zH`{{U44$rjF6*2Ung9$_$nyXI literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Head/Soft/bizarresoft_flipped.rsi/meta.json b/Resources/Textures/Clothing/Head/Soft/bizarresoft_flipped.rsi/meta.json new file mode 100644 index 0000000000..b3513bb5cd --- /dev/null +++ b/Resources/Textures/Clothing/Head/Soft/bizarresoft_flipped.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from civstation at commit https://github.com/Civ13/Civ13/commit/ec52cbb95d59b717d4d8c480b35ac133e5b58088#diff-fba188fb2db5d16e5d41985147336a8f96085f761b903e016fffd869b63e497d", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-HELMET", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Interface/Actions/manifest.png b/Resources/Textures/Interface/Actions/manifest.png new file mode 100644 index 0000000000000000000000000000000000000000..7db153e9f276d7680aeb5fc7a907d6de4484ce84 GIT binary patch literal 1922 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Guardians/guardians.rsi/magic_flare.png b/Resources/Textures/Mobs/Aliens/Guardians/guardians.rsi/magic_flare.png new file mode 100644 index 0000000000000000000000000000000000000000..3639229c4feaf1d02a0dd23d970a74010511b6fb GIT binary patch literal 1099 zcmV-R1ho5!P)a@(*zJt=L0VH%Q#xew%*eWsjEK*_qc%x}SMz)4Xryd-GwC8T$pVnru;Nz>0OdiB zbs4bYR||l$TgJ&-^EZEn%Kk8GI%%f(n$_>B!i&GO0A)AzNZym*^a?ybKc}<^xK z{2K8qUx7}ivo;=&KSZGN!CRS21whodx3`o$AwQBwT$+7VJpg354kX{(+vAIgv|25< z3OG7C%6Y)YN~kNkN&p1YZnuSH-|co~dwW~@{l0i456t#WXRpA*>i{w8h^`Ue>WTs<5vIxQYg=0uzEE>f|Uopjg5`G;_CLC$^tOS zUayxT2nK^SMg@et5CflYZ*SMM;#U@6Uh)V+A^=YpAmpu+JfQ9Y zB#oUsLEgHR*Zdup6-Oh0tT-A0tT*(W7x38IQ~+3KUh@LsOoFBTW-0&z^O_g%vfs=E zV0n64WZc{GDwqfm(;c4YP-|f#00PO7&^`8Sg0$(au9?{tKwzGg5T5*h+XTZ(5Mx-M zJYoJA#3^~q2zl*o{uuP?0bYBXzX@h{RJ`D^x48hGLz5nRH-Cm?#nA{*<;S$gJxx$8 zw6Uq|aS&z5M^U^+V#@0v0{F853i4tpNCew5da< zHfAO8Ajr*FG+v>~8Vd&%NE}`ZaRkd9oZ&%e`;y8Wg(=Bv5C#&X0%ja(C_G}(&Iyzf zAoTx2a}*^QGkGEu0Wn}cq3BMR^(?;>fXRktD4ki{Kc0fuXv}BexD2b0E^*PiFJqi8 z6aX7CX%0Y;nAZTS=V;7l2q#4l1Cqsr3Sz_e{EXjyRS63P2+KZv(crxU5$1zpKLQyO z9)*L!Ag_RV4e_gksX8i~hARSCM)Cwl_Bgdxh_MtZzXyctGLt75Lov3p_zS)hx`hq0 RNu&S(002ovPDHLkV1lyd_16FZ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Guardians/guardians.rsi/meta.json b/Resources/Textures/Mobs/Aliens/Guardians/guardians.rsi/meta.json new file mode 100644 index 0000000000..28c17164ad --- /dev/null +++ b/Resources/Textures/Mobs/Aliens/Guardians/guardians.rsi/meta.json @@ -0,0 +1,57 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "taken from /tg/ station at commit https://github.com/tgstation/tgstation/commit/02756c2bc2cf3000080d030955e994242bab39b5", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "magic_flare", + "directions": 4 + }, + { + "name": "magic_base", + "directions": 4 + }, + { + "name": "miner_flare", + "directions": 4 + }, + { + "name": "miner_base", + "directions": 4, + "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 + ] + ] + }, + { + "name": "tech_flare", + "directions": 4 + }, + { + "name": "tech_base", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Mobs/Aliens/Guardians/guardians.rsi/miner.png b/Resources/Textures/Mobs/Aliens/Guardians/guardians.rsi/miner.png new file mode 100644 index 0000000000000000000000000000000000000000..f4dd065628c5f3c145587bf4779fbd01ba7b56a6 GIT binary patch literal 681 zcmV;a0#^NrP)wrPBEi zrKN*2fFKBhz{eQ#FZ|ppyQv?w*3N%#+xG2TW6b$@JpSeOqmpZc1_a&0Pgquv;BI#PL8P7+ErEcJU$!_0D#l!#J+=T>Ay7& zjQ~L3_W*$Xejjzh_Y2PrNjd*1{Xb()cq1X!T3BnN7x8F!0HBl_wLxV~{pb>i2$0x% ze}RfI=DcDmh%ulQk>v!g&)=T`zXVSV)j0vKRN>dplO=q$c;sTLvg>Kb6HFO zWgGMz!r)^r-qynrmkMOo)_4K35Ff4wNOfNv|sT3IfF1Kg3Ph`G6UMS-C1j&$4aTm@H2+D6Am85PN*M#=IT@I zBtzlNzRwr5BM5>Z2!bF8f*=SH)~XXItyA(5IrV>)wc z5=iOloLv1{%&kdCmdJ2&^_R=VEj2LSm%6TZ!?rm!38VD^A)H)&UDvzZ|M4k=7Y~%F zNgyqOVcR!M{UKZN^Z#Y7T7l9!(bU)&vGvW#)z2ZNv*hz9nP>m>4B*xwu<-&@B8%RE z3Hub^Vvv?Vn75xwb5n{Ma!D0Cc;C1_ke>mRynV^ShLjJU+&Tmg>mdlt%iEWxL>)ph z67*06mdNdM?C0o{W&kzco|DU`GOS(T_%#K~*>BCaf2&`DAP9mW2w%-F)RzF?z@@hg P00000NkvXXu0mjfu%1i` literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Guardians/guardians.rsi/miner_base.png b/Resources/Textures/Mobs/Aliens/Guardians/guardians.rsi/miner_base.png new file mode 100644 index 0000000000000000000000000000000000000000..f22a027edc10aa7fd10ac3d88f3ec0a928874bdd GIT binary patch literal 2776 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Guardians/guardians.rsi/tech.png b/Resources/Textures/Mobs/Aliens/Guardians/guardians.rsi/tech.png new file mode 100644 index 0000000000000000000000000000000000000000..ada4a5ca142ea07c9ac8200bdbb330bbaf95f45c GIT binary patch literal 854 zcmV-c1F8IpP)uLYX6LOZ}f+4}=g{YJ`+h3n6BW-CIATl)7!( z*>B?2$1f7Hit>&0f0^o_l)4MYG)>QAih*1BDy2ef-c7$V2aqyj42q(F?^+Te}Bj2a&Zc+>snV;g*c8EPu`{9H8Clrj-m*m`nx4yuNT+g z{^aYr)^^+Faye&NHn{Glc$?J*>~EKBED zAN^4jJ&dC^azu#!yCq;NNs{Dlz|dRiM?hZ=DOF0r7~_=Vqo3p{rH~}aZva05`~vVD zzz?O=w zqe)Oosh1?PHO2!sN5pa5IpAM}d{957)El)MW4ivpwBx;Yfg$R;?$+0w2nm5QJb=yt zeeCv-EqL@Cus8G}BZNRzRoyyvVT?glRo%hKCvkf_z;_o|<15ZKo(?v4NcSCKzwtPZ z?+#8=j+k5mKKt{M{zGFal)Bw^I@Y;I#`m4Vp{Hc=~{$kC-+73D|OM*><1V zNpNkJM9vZ9GYrEp48t%C!!Z91Yu4%az{mc{Ut(+2>GxpK-GIKJHA>xEvbxQ$$muvI{hBZxtkF5Q2_rhZE|O*1OgE}N~z zluVaRQ*&|VfT3D_6h+AM8~{)h#gxsP(KJnGmr^R|Uc#UQ`WF(0YV}8j%HzPz8DsYw zfPm7NU8^sO0@v&H5bK}FvP|cB?tL$S@J@oZBaSwCBFi$pdxCyO0(_?I)yv~YU{_mT zEdrd3dGUzRFxTFPZO}ebw{5FWr_&)5o-b|NY5>k}80SG~Y|lT+5!l9M(<_`^7=~dO ghG7_nVVJG?3r-daAX5AsTmS$707*qoM6N<$f>4!~1poj5 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Guardians/guardians.rsi/tech_base.png b/Resources/Textures/Mobs/Aliens/Guardians/guardians.rsi/tech_base.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0a59725450d4b544f4c83242b10b7b72192bdd GIT binary patch literal 1694 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 Eg1WP%YXATM literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/guardian_info.rsi/guardian_info.png b/Resources/Textures/Objects/Misc/guardian_info.rsi/guardian_info.png new file mode 100644 index 0000000000000000000000000000000000000000..8de21319c178f1862d6682cbbe99634a77e2baa2 GIT binary patch literal 1551 zcmV+q2JrcbP)Px)$w@>(RCt{2nmue&R~Uw$6WjRbIyOl#Rzj>K!~ukfgBpWdiJ=lwhp4J5v2^HC zsjAeW9Xe&`(4j;24pd#bmZ3|BE>H;s11`5}3dKsvk4Y1!*daDa9LG+seL6Tv`3dA+ z$Hutacd~sxpZ7h--*Yi4S? z!?77Gk(U4#Twuqe*q_PeM7!I)^W6(wx|2+|j%u_#Plw(NkN|d@RZJxQ64~Uu zJlKCwo(~NJ@XOubWH$MT2~iS(uAZHE43wAw)Kp80PEr97PtH%B=sPZz%?EgM+RmUi zr=e^<;6&eX8Bfkny@;>|sHqmc8$dFf5uH{MjE`Rv0Fh`EH5NmS#fU_s0K~_yiB78s zCbJm$pkpqf{&0;~6%4KE~2@b#Y1^}~( z1m$v>-ebpv&F+xPZmaaWJT=RIzsp0473s}sw6(X3d@jepV3=jMl^n>~M1nwnP&l1V zW)lgy;}tZEhE`%zykY52NqCv**0J4ne=-Mbk8)#$vb>MOeznWw#ZwdC2Bj zc3ZKOkuF6MYAlAPX~M5~_qXDg#IGv@Mtb~Qym}KrSXwH37WM^53~2(O&lixhxddBd zA~`q5r*FSm&02Rw=HWwDS65|EUmuCt1hgQ+zJQz^)M#yO6(0_Vc49AHy=jQwaGm~e z`yTxR0}^0md07B>yj}?~Jvk{p2p=;#WkWd)-3tIXolewPjGn$e9<4qCpja$2n@G@g zTz{t6!_zL8 zRw`Fn+poWTZ)9I$8o_C}1OSvnhsd`e>`os5c`1c*;LyH=G>X%328^jH7OR7jR*;W> zZm~KhERo8#)7qPM>38e1eizkVI)h8`uu&|^k1t&!x4QDgxVzQEw-?^W=~Tq}`Wkotyk$s8qxf}gz|iS)9I)HT zudT@LKtJ6eF$z8i?Tb=Pe(^59UYx7jD7IW{GNAV zMo}+*-5YS=fL+Y}JtOyuoBMkPMQIfq8%4cSHW1o67#CT=<|RnAUJwsa?hUp z{-r&MdifKY${$b<{-*E;)RVti`~h|2Zx(+*-S~B%0b4zJ;^WtVN)Jwr#ehnGesX@Q z(vxrRCYjA}q^-TC{(yS%H-$f-p8UE>U`$o%INA$awYB9BKuOP_q-R)6r?>q9Q1J&a zrmDIGG@4&mj(#7%M=D?G&u@v{Y)aTq=o@w#k-10Kdy4J~~;OK4Cri zbw3sl`vOFwQEYaHlr{@c>CbQX=%vkq&F+wqXq2!oP|Z3U!vEU)19WY`NROZ7+#EdR z59l8Xi~gao*xvES{Q)CA{wkLG^7)&>A5c&Jrtk;UlfNna0rli>8h=2&_?yNbP%nPd zA7CWd^aq&!0Mj2}`UCcgGyMTg<_|Do!o=&1e*t36f=yYN`w9R6002ovPDHLkV1mpC B>eT=M literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/guardian_info.rsi/icon.png b/Resources/Textures/Objects/Misc/guardian_info.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ec276cc88d8deb06efb55f34e4736344cc6c4f2f GIT binary patch literal 952 zcmV;p14sOcP)Px&a!Eu%R9J1Y~BMbMBdY?-&g~aC>`8k1)K)5CF2>rxkt?Lwj9yz4*Jx z9mnWh(<&g_eOi(7E-=Q_81f{^dV?9|K${pLg!ZfCy#fgHzutvoj)NQ_@?+L(P=zXr zdJ_H&7-LG^1d-zy;Q#!KZ1QSU9t}D$2EOkr0GOK7i^v-ShLWz2e7oIhLI~~Km%oFq zb%ysC(yvtj04(3W566n}eP7uR@6>j?)m+zA>-AazXhdHpbsPh2CE1w+%eU{tr;i^h z8yRD&EAw5~RcV^Swr%Y9d#IZr0#FeiGliVz0M7f1-nOCPJ%&k=HO7Px+H$#6Pft%8 zks5}9EX$ClDJ;u+*-+OZpQGT_>o*bQLmTm+19i-1Gj%*38_|;^j4`!XEUNLMC~!C& zAf<%538JB799@RK?<>;2lw~)007Q803b;cNGW?87SM47 zbx`zi97ET2_`a`_Bsp8hIj=}{{bgHS*L!mZ=;#CWK2O#QAv7r^+Q@0i8M_CpsE7-90j_rza*xVRbX{T zI&*+pYdwh=V`{ZpwYuOq4#F^OY;Jguq4pdF0I*uEz&S@8$HM~F>$N)F>{LWi6v*=& z)9Dn~*Vkv{ZR-z*1JX2Yth+j0?EAjjY&M-qBZSbxFhri`FijJAp7)Z|bDrmC96$g*Z*BeWiY z>$(a6CX)&F`+X&jF{UU%P1CH_Q|(jTlNj5!QI;hDv_{`4pdJmqL>+HBonp7!RfHtS z^E~8v-bk{xeNNHZ2ZRt>{RPIDvTYl{%UOD!S4AtOtjH=n9t_`0K+g4$8m4_y;uN&Y`%1^52L>csf>!EXq~6=u5# am*77W*-HfmHs8?z0000