diff --git a/Content.Server/Cloning/CloningSystem.cs b/Content.Server/Cloning/CloningSystem.cs index c4c0705026..cb9e775d77 100644 --- a/Content.Server/Cloning/CloningSystem.cs +++ b/Content.Server/Cloning/CloningSystem.cs @@ -288,7 +288,7 @@ public bool TryCloning(EntityUid uid, EntityUid bodyToClone, Mind.Mind mind, Clo AddComp(uid); // For other systems adding components to the mob - var ev = new BeenClonedEvent(pref, mind, mob, clonePod.Owner); + var ev = new BeenClonedEvent(pref, mind, mob, bodyToClone, clonePod.Owner); RaiseLocalEvent(ev); return true; diff --git a/Content.Server/SimpleStation14/Eye/EyeStartup.cs b/Content.Server/SimpleStation14/Eye/EyeStartup.cs index 5e0fffe9f5..cc5301a98e 100644 --- a/Content.Server/SimpleStation14/Eye/EyeStartup.cs +++ b/Content.Server/SimpleStation14/Eye/EyeStartup.cs @@ -3,29 +3,28 @@ using Content.Server.Visible; using Robust.Server.GameObjects; -namespace Content.Server.SimpleStation14.Eye +namespace Content.Server.SimpleStation14.Eye; + +/// +/// Place to handle eye component startup for whatever systems. +/// +public sealed class EyeStartup : EntitySystem { - /// - /// Place to handle eye component startup for whatever systems. - /// - public sealed class EyeStartup : EntitySystem - { - [Dependency] private readonly IEntityManager _entityManager = default!; - [Dependency] private readonly ShadowkinDarkSwapSystem _shadowkinPowerSystem = default!; + [Dependency] private readonly IEntityManager _entityManager = default!; + [Dependency] private readonly ShadowkinDarkSwapSystem _shadowkinPowerSystem = default!; - public override void Initialize() - { - base.Initialize(); + public override void Initialize() + { + base.Initialize(); - SubscribeLocalEvent(OnEyeStartup); - } + SubscribeLocalEvent(OnEyeStartup); + } - private void OnEyeStartup(EntityUid uid, EyeComponent component, ComponentStartup args) - { - if (_entityManager.HasComponent(uid)) - component.VisibilityMask |= (uint) VisibilityFlags.AIEye; + private void OnEyeStartup(EntityUid uid, EyeComponent component, ComponentStartup args) + { + if (_entityManager.HasComponent(uid)) + component.VisibilityMask |= (uint) VisibilityFlags.AIEye; - _shadowkinPowerSystem.SetVisibility(uid, _entityManager.HasComponent(uid)); - } + _shadowkinPowerSystem.SetVisibility(uid, _entityManager.HasComponent(uid), false, !_entityManager.HasComponent(uid)); } } diff --git a/Content.Server/SimpleStation14/Species/Shadowkin/Components/ShadowkinDarkSwapPowerComponent.cs b/Content.Server/SimpleStation14/Species/Shadowkin/Components/ShadowkinDarkSwapPowerComponent.cs index 7438609cc0..466d634606 100644 --- a/Content.Server/SimpleStation14/Species/Shadowkin/Components/ShadowkinDarkSwapPowerComponent.cs +++ b/Content.Server/SimpleStation14/Species/Shadowkin/Components/ShadowkinDarkSwapPowerComponent.cs @@ -16,4 +16,36 @@ public sealed class ShadowkinDarkSwapPowerComponent : Component /// [DataField("factions", customTypeSerializer: typeof(PrototypeIdListSerializer))] public List AddedFactions = new() { "ShadowkinDarkFriendly" }; + + + /// + /// If the entity should be sent to the dark + /// + [DataField("invisible")] + public bool Invisible = true; + + /// + /// If it should be pacified + /// + [DataField("pacify")] + public bool Pacify = true; + + /// + /// If the entity should dim nearby lights when swapped + /// + [DataField("darken"), ViewVariables(VVAccess.ReadWrite)] + public bool Darken = true; + + /// + /// How far to dim nearby lights + /// + [DataField("range"), ViewVariables(VVAccess.ReadWrite)] + public float DarkenRange = 5f; + + /// + /// How fast to refresh nearby light dimming in seconds + /// Without this performance would be significantly worse + /// + [ViewVariables(VVAccess.ReadWrite)] + public float DarkenRate = 0.084f; // 1/12th of a second } diff --git a/Content.Server/SimpleStation14/Species/Shadowkin/Components/ShadowkinSightComponent.cs b/Content.Server/SimpleStation14/Species/Shadowkin/Components/ShadowkinSightComponent.cs new file mode 100644 index 0000000000..4385020975 --- /dev/null +++ b/Content.Server/SimpleStation14/Species/Shadowkin/Components/ShadowkinSightComponent.cs @@ -0,0 +1,7 @@ +namespace Content.Server.SimpleStation14.Species.Shadowkin.Components; + +[RegisterComponent] +public sealed class ShadowkinSightComponent : Component +{ + +} diff --git a/Content.Server/SimpleStation14/Species/Shadowkin/Events/ShadowkinEvents.Powers.cs b/Content.Server/SimpleStation14/Species/Shadowkin/Events/ShadowkinEvents.Powers.cs index 52e1814775..9d91b99ffa 100644 --- a/Content.Server/SimpleStation14/Species/Shadowkin/Events/ShadowkinEvents.Powers.cs +++ b/Content.Server/SimpleStation14/Species/Shadowkin/Events/ShadowkinEvents.Powers.cs @@ -76,7 +76,7 @@ public sealed class ShadowkinDarkSwapEvent : InstantActionEvent, ISpeakSpell public sealed class ShadowkinDarkSwapAttemptEvent : CancellableEntityEventArgs { - EntityUid Performer; + public EntityUid Performer; public ShadowkinDarkSwapAttemptEvent(EntityUid performer) { diff --git a/Content.Server/SimpleStation14/Species/Shadowkin/Systems/ShadowkinPowerSystem.DarkSwap.cs b/Content.Server/SimpleStation14/Species/Shadowkin/Systems/ShadowkinPowerSystem.DarkSwap.cs index d899bcf0c2..707c6751f8 100644 --- a/Content.Server/SimpleStation14/Species/Shadowkin/Systems/ShadowkinPowerSystem.DarkSwap.cs +++ b/Content.Server/SimpleStation14/Species/Shadowkin/Systems/ShadowkinPowerSystem.DarkSwap.cs @@ -66,82 +66,106 @@ private void DarkSwap(EntityUid uid, ShadowkinDarkSwapPowerComponent component, if (!_entity.HasComponent(args.Performer)) return; - // Don't activate abilities if handcuffed - // TODO: Something like the Psionic Headcage to disable powers for Shadowkin - if (_entity.HasComponent(args.Performer)) + // Don't activate abilities if specially handcuffed + if (_entity.TryGetComponent(args.Performer, out var cuffs) && cuffs.AntiShadowkin) return; - var hasComp = _entity.HasComponent(args.Performer); - SetDarkened( args.Performer, - !hasComp, - !hasComp, - !hasComp, - true, - args.StaminaCostOn, - args.PowerCostOn, + !_entity.HasComponent(args.Performer), args.SoundOn, args.VolumeOn, - args.StaminaCostOff, - args.PowerCostOff, args.SoundOff, args.VolumeOff, - args + args, + args.StaminaCostOn, + args.PowerCostOn, + args.StaminaCostOff, + args.PowerCostOff ); _magic.Speak(args, false); } + /// + /// Handles the effects of darkswapping + /// + /// The entity being modified + /// Is the entity swapping in to or out of The Dark? + /// Sound for the darkswapping + /// Volume for the on sound + /// Sound for the un swapping + /// Volume for the off sound + /// Stamina cost for darkswapping + /// Power cost for darkswapping + /// Stamina cost for un swapping + /// Power cost for un swapping + /// If from an event, handle it public void SetDarkened( EntityUid performer, bool addComp, - bool invisible, - bool pacify, - bool darken, - float staminaCostOn, - float powerCostOn, - SoundSpecifier soundOn, - float volumeOn, - float staminaCostOff, - float powerCostOff, - SoundSpecifier soundOff, - float volumeOff, - ShadowkinDarkSwapEvent? args + SoundSpecifier? soundOn, + float? volumeOn, + SoundSpecifier? soundOff, + float? volumeOff, + ShadowkinDarkSwapEvent? args, + float staminaCostOn = 0, + float powerCostOn = 0, + float staminaCostOff = 0, + float powerCostOff = 0 ) { + // Ask other systems if we can DarkSwap var ev = new ShadowkinDarkSwapAttemptEvent(performer); RaiseLocalEvent(ev); if (ev.Cancelled) return; - if (addComp) + // We require the power component to DarkSwap + if (!_entity.TryGetComponent(performer, out var power)) + return; + + if (addComp) // Into The Dark { + // Add the DarkSwapped component and set variables to match the power component var comp = _entity.EnsureComponent(performer); - comp.Invisible = invisible; - comp.Pacify = pacify; - comp.Darken = darken; + comp.Invisible = power.Invisible; + comp.Pacify = power.Pacify; + comp.Darken = power.Darken; + comp.DarkenRange = power.DarkenRange; + comp.DarkenRate = power.DarkenRate; + // Tell other systems we've DarkSwapped RaiseNetworkEvent(new ShadowkinDarkSwappedEvent(performer, true)); - _audio.PlayPvs(soundOn, performer, AudioParams.Default.WithVolume(volumeOn)); + // Play a sound if we have one + if (soundOn != null) + _audio.PlayPvs(soundOn, performer, AudioParams.Default.WithVolume(volumeOn ?? 5f)); + // Drain power and stamina if we have a cost _power.TryAddPowerLevel(performer, -powerCostOn); _stamina.TakeStaminaDamage(performer, staminaCostOn); } - else + else // Out of The Dark { + // Remove the DarkSwapped component, the rest is handled in the shutdown event _entity.RemoveComponent(performer); + + // Tell other systems we've un DarkSwapped RaiseNetworkEvent(new ShadowkinDarkSwappedEvent(performer, false)); - _audio.PlayPvs(soundOff, performer, AudioParams.Default.WithVolume(volumeOff)); + // Play a sound if we have one + if (soundOff != null) + _audio.PlayPvs(soundOff, performer, AudioParams.Default.WithVolume(volumeOff ?? 5f)); + // Drain power and stamina if we have a cost _power.TryAddPowerLevel(performer, -powerCostOff); _stamina.TakeStaminaDamage(performer, staminaCostOff); } + // If we have an event, mark it as handled if (args != null) args.Handled = true; } @@ -154,7 +178,7 @@ private void OnInvisStartup(EntityUid uid, ShadowkinDarkSwappedComponent compone if (component.Invisible) { - SetVisibility(uid, true); + SetVisibility(uid, true, true, true); SuppressFactions(uid, true); } } @@ -165,12 +189,14 @@ private void OnInvisShutdown(EntityUid uid, ShadowkinDarkSwappedComponent compon if (component.Invisible) { - SetVisibility(uid, false); + SetVisibility(uid, false, true, true); SuppressFactions(uid, false); } + // Prevent more updates while we're cleaning up component.Darken = false; + // In case more updates occur for some reason, create a copy of the list to prevent error foreach (var light in component.DarkenedLights.ToArray()) { if (!_entity.TryGetComponent(light, out var pointLight) || @@ -180,11 +206,19 @@ private void OnInvisShutdown(EntityUid uid, ShadowkinDarkSwappedComponent compon _darken.ResetLight(pointLight, shadowkinLight); } + // Clear the original array component.DarkenedLights.Clear(); } - public void SetVisibility(EntityUid uid, bool set) + /// + /// Makes the specified entity able to see Shadowkin invisibility. + /// + /// Entity to modify + /// Whether the entity can see invisibility + /// Should the entity be moved to another visibility layer? + /// (Only gets considered if set is true) Adds stealth to the entity + public void SetVisibility(EntityUid uid, bool set, bool invisibility, bool stealth) { // We require the visibility component for this to work var visibility = EnsureComp(uid); @@ -196,12 +230,15 @@ public void SetVisibility(EntityUid uid, bool set) eye.VisibilityMask |= (uint) VisibilityFlags.DarkSwapInvisibility; // Make other entities unable to see the entity unless also DarkSwapped - _visibility.AddLayer(uid, visibility, (int) VisibilityFlags.DarkSwapInvisibility, false); - _visibility.RemoveLayer(uid, visibility, (int) VisibilityFlags.Normal, false); + if (invisibility) + { + _visibility.AddLayer(uid, visibility, (int) VisibilityFlags.DarkSwapInvisibility, false); + _visibility.RemoveLayer(uid, visibility, (int) VisibilityFlags.Normal, false); + } _visibility.RefreshVisibility(uid); // If not a ghost, add a stealth shader to the entity - if (!_entity.TryGetComponent(uid, out _)) + if (!_entity.TryGetComponent(uid, out _) && stealth) _stealth.SetVisibility(uid, 0.8f, _entity.EnsureComponent(uid)); } else // Visible @@ -211,13 +248,16 @@ public void SetVisibility(EntityUid uid, bool set) eye.VisibilityMask &= ~(uint) VisibilityFlags.DarkSwapInvisibility; // Make other entities able to see the entity again - _visibility.RemoveLayer(uid, visibility, (int) VisibilityFlags.DarkSwapInvisibility, false); - _visibility.AddLayer(uid, visibility, (int) VisibilityFlags.Normal, false); + if (invisibility) + { + _visibility.RemoveLayer(uid, visibility, (int) VisibilityFlags.DarkSwapInvisibility, false); + _visibility.AddLayer(uid, visibility, (int) VisibilityFlags.Normal, false); + } _visibility.RefreshVisibility(uid); // Remove the stealth shader from the entity if (!_entity.TryGetComponent(uid, out _)) - _stealth.SetVisibility(uid, 1f, _entity.EnsureComponent(uid)); + _stealth.SetEnabled(uid, false); } } diff --git a/Content.Server/SimpleStation14/Species/Shadowkin/Systems/ShadowkinPowerSystem.Rest.cs b/Content.Server/SimpleStation14/Species/Shadowkin/Systems/ShadowkinPowerSystem.Rest.cs index f838fe2564..f24c5433b8 100644 --- a/Content.Server/SimpleStation14/Species/Shadowkin/Systems/ShadowkinPowerSystem.Rest.cs +++ b/Content.Server/SimpleStation14/Species/Shadowkin/Systems/ShadowkinPowerSystem.Rest.cs @@ -44,8 +44,8 @@ private void Rest(EntityUid uid, ShadowkinRestPowerComponent component, Shadowki return; // Rest is a funny ability, keep it :) - // // Don't activate abilities if handcuffed - // if (_entity.HasComponent(args.Performer)) + // // Don't activate abilities if specially handcuffed + // if (_entity.TryGetComponent(args.Performer, out var cuffs) && cuffs.AntiShadowkin) // return; @@ -59,7 +59,7 @@ private void Rest(EntityUid uid, ShadowkinRestPowerComponent component, Shadowki _entity.EnsureComponent(args.Performer); // No waking up normally (it would do nothing) _actions.RemoveAction(args.Performer, new InstantAction(_prototype.Index("Wake"))); - _power.TryAddMultiplier(args.Performer, 1.5f); + _power.TryAddMultiplier(args.Performer, 2f); // No action cooldown args.Handled = false; } @@ -69,7 +69,7 @@ private void Rest(EntityUid uid, ShadowkinRestPowerComponent component, Shadowki // Wake up _entity.RemoveComponent(args.Performer); _entity.RemoveComponent(args.Performer); - _power.TryAddMultiplier(args.Performer, -1.5f); + _power.TryAddMultiplier(args.Performer, -2f); // Action cooldown args.Handled = true; } diff --git a/Content.Server/SimpleStation14/Species/Shadowkin/Systems/ShadowkinPowerSystem.Teleport.cs b/Content.Server/SimpleStation14/Species/Shadowkin/Systems/ShadowkinPowerSystem.Teleport.cs index 870703d935..15cca4ac14 100644 --- a/Content.Server/SimpleStation14/Species/Shadowkin/Systems/ShadowkinPowerSystem.Teleport.cs +++ b/Content.Server/SimpleStation14/Species/Shadowkin/Systems/ShadowkinPowerSystem.Teleport.cs @@ -8,6 +8,7 @@ using Content.Shared.Damage.Systems; using Content.Shared.Pulling.Components; using Content.Shared.SimpleStation14.Species.Shadowkin.Components; +using Content.Shared.Storage.Components; using Robust.Shared.Audio; using Robust.Shared.Prototypes; @@ -49,17 +50,15 @@ private void Shutdown(EntityUid uid, ShadowkinTeleportPowerComponent component, private void Teleport(EntityUid uid, ShadowkinTeleportPowerComponent component, ShadowkinTeleportEvent args) { - // Need power to drain power - if (!_entity.TryGetComponent(args.Performer, out var comp)) - return; - - // Don't activate abilities if handcuffed - // TODO: Something like the Psionic Headcage to disable powers for Shadowkin - if (_entity.HasComponent(args.Performer)) + // Don't activate abilities if... + if (!_entity.TryGetComponent(args.Performer, out var comp) || // Not a Shadowkin + _entity.TryGetComponent(args.Performer, out var cuffs) && cuffs.AntiShadowkin || // Specially handcuffed + _entity.HasComponent(args.Performer)) // Inside an entity storage return; var transform = Transform(args.Performer); + // Must be on the same map if (transform.MapID != args.Target.GetMapId(EntityManager)) return; @@ -68,14 +67,12 @@ private void Teleport(EntityUid uid, ShadowkinTeleportPowerComponent component, puller.Pulling != null && _entity.TryGetComponent(puller.Pulling, out pullable) && pullable.BeingPulled) - { - // Temporarily stop pulling to avoid not teleporting to the target + // Temporarily stop pulling to avoid not teleporting fully to the target _pulling.TryStopPull(pullable); - } // Teleport the performer to the target _transform.SetCoordinates(args.Performer, args.Target); - transform.AttachToGridOrMap(); + _transform.AttachToGridOrMap(args.Performer, transform); if (pullable != null && puller != null) { @@ -85,7 +82,7 @@ private void Teleport(EntityUid uid, ShadowkinTeleportPowerComponent component, // Teleport the pulled entity to the target // TODO: Relative position to the performer _transform.SetCoordinates(pullable.Owner, args.Target); - pulledTransform.AttachToGridOrMap(); + _transform.AttachToGridOrMap(args.Performer, transform); // Resume pulling // TODO: This does nothing? // This does things sometimes, but the client never knows diff --git a/Content.Server/SimpleStation14/Species/Shadowkin/Systems/ShadowkinPowerSystem.cs b/Content.Server/SimpleStation14/Species/Shadowkin/Systems/ShadowkinPowerSystem.cs index d1525db365..6de576a197 100644 --- a/Content.Server/SimpleStation14/Species/Shadowkin/Systems/ShadowkinPowerSystem.cs +++ b/Content.Server/SimpleStation14/Species/Shadowkin/Systems/ShadowkinPowerSystem.cs @@ -196,22 +196,25 @@ public void SetPowerLevel(EntityUid uid, float newPowerLevel) /// /// Tries to blackeye a shadowkin. /// - public bool TryBlackeye(EntityUid uid) + public bool TryBlackeye(EntityUid uid, bool damage = true, bool checkPower = true) { + if (!_entity.HasComponent(uid)) + return false; + // Raise an attempted blackeye event - var ev = new ShadowkinBlackeyeAttemptEvent(uid); + var ev = new ShadowkinBlackeyeAttemptEvent(uid, checkPower); RaiseLocalEvent(ev); if (ev.Cancelled) return false; - Blackeye(uid); + Blackeye(uid, damage); return true; } /// /// Blackeyes a shadowkin. /// - public void Blackeye(EntityUid uid) + public void Blackeye(EntityUid uid, bool damage = true) { // Get shadowkin component if (!_entity.TryGetComponent(uid, out var component)) @@ -221,8 +224,8 @@ public void Blackeye(EntityUid uid) } component.Blackeye = true; - RaiseNetworkEvent(new ShadowkinBlackeyeEvent(uid)); - RaiseLocalEvent(new ShadowkinBlackeyeEvent(uid)); + RaiseNetworkEvent(new ShadowkinBlackeyeEvent(uid, damage)); + RaiseLocalEvent(new ShadowkinBlackeyeEvent(uid, damage)); } diff --git a/Content.Server/SimpleStation14/Species/Shadowkin/Systems/ShadowkinSightSystem.cs b/Content.Server/SimpleStation14/Species/Shadowkin/Systems/ShadowkinSightSystem.cs new file mode 100644 index 0000000000..eec511abf9 --- /dev/null +++ b/Content.Server/SimpleStation14/Species/Shadowkin/Systems/ShadowkinSightSystem.cs @@ -0,0 +1,29 @@ +using Content.Server.SimpleStation14.Species.Shadowkin.Components; +using Content.Shared.Inventory.Events; + +namespace Content.Server.SimpleStation14.Species.Shadowkin.Systems; + +public sealed class ShadowkinSightSystem : EntitySystem +{ + [Dependency] private readonly ShadowkinDarkSwapSystem _darkSwap = default!; + + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnEquipped); + SubscribeLocalEvent(OnUnEquipped); + } + + + private void OnEquipped(EntityUid uid, ShadowkinSightComponent component, GotEquippedEvent args) + { + _darkSwap.SetVisibility(args.Equipee, true, false, false); + } + + private void OnUnEquipped(EntityUid uid, ShadowkinSightComponent component, GotUnequippedEvent args) + { + _darkSwap.SetVisibility(args.Equipee, false, false, false); + } +} diff --git a/Content.Server/SimpleStation14/Species/Shadowkin/Systems/ShadowkinSystem.Blackeye.cs b/Content.Server/SimpleStation14/Species/Shadowkin/Systems/ShadowkinSystem.Blackeye.cs index 91d25a195a..d74f0fafee 100644 --- a/Content.Server/SimpleStation14/Species/Shadowkin/Systems/ShadowkinSystem.Blackeye.cs +++ b/Content.Server/SimpleStation14/Species/Shadowkin/Systems/ShadowkinSystem.Blackeye.cs @@ -1,4 +1,6 @@ +using Content.Server.Cloning; using Content.Server.SimpleStation14.Species.Shadowkin.Components; +using Content.Server.SimpleStation14.Traits.Events; using Content.Shared.SimpleStation14.Species.Shadowkin.Events; using Content.Shared.SimpleStation14.Species.Shadowkin.Components; using Content.Shared.Damage.Systems; @@ -28,14 +30,20 @@ public override void Initialize() SubscribeLocalEvent(OnBlackeyeAttempt); SubscribeAllEvent(OnBlackeye); + + SubscribeLocalEvent(OnCloned); } private void OnBlackeyeAttempt(ShadowkinBlackeyeAttemptEvent ev) { + // Cancel if one of the following is true: + // - The entity is not a shadowkin + // - The entity is already blackeyed + // - The entity has more than 5 power and ev.CheckPower is true if (!_entity.TryGetComponent(ev.Uid, out var component) || component.Blackeye || - !(component.PowerLevel <= ShadowkinComponent.PowerThresholds[ShadowkinPowerThreshold.Min] + 5)) + (ev.CheckPower && component.PowerLevel > ShadowkinComponent.PowerThresholds[ShadowkinPowerThreshold.Min] + 5)) ev.Cancel(); } @@ -58,6 +66,7 @@ private void OnBlackeye(ShadowkinBlackeyeEvent ev) _entity.RemoveComponent(ev.Uid); _entity.RemoveComponent(ev.Uid); _entity.RemoveComponent(ev.Uid); + _entity.RemoveComponent(ev.Uid); if (!ev.Damage) return; @@ -90,4 +99,18 @@ private void OnBlackeye(ShadowkinBlackeyeEvent ev) false ); } + + + private void OnCloned(BeenClonedEvent ev) + { + // Don't give blackeyed Shadowkin their abilities back when they're cloned. + if (_entity.TryGetComponent(ev.OriginalMob, out var shadowkin) && + shadowkin.Blackeye) + _power.TryBlackeye(ev.Mob, false, false); + + // Blackeye the Shadowkin that come from the metempsychosis machine + if (_entity.HasComponent(ev.Cloner) && + _entity.HasComponent(ev.Mob)) + _power.TryBlackeye(ev.Mob, false, false); + } } diff --git a/Content.Server/SimpleStation14/Traits/Events/CloningEvents.cs b/Content.Server/SimpleStation14/Traits/Events/CloningEvents.cs index 8f7ef5e824..54e7dfb02e 100644 --- a/Content.Server/SimpleStation14/Traits/Events/CloningEvents.cs +++ b/Content.Server/SimpleStation14/Traits/Events/CloningEvents.cs @@ -21,13 +21,15 @@ public sealed class BeenClonedEvent : EntityEventArgs public HumanoidCharacterProfile Profile { get; set; } public Mind.Mind Mind { get; set; } public EntityUid Mob { get; set; } + public EntityUid OriginalMob { get; set; } public EntityUid Cloner { get; set; } - public BeenClonedEvent(HumanoidCharacterProfile profile, Mind.Mind mind, EntityUid mob, EntityUid cloner) + public BeenClonedEvent(HumanoidCharacterProfile profile, Mind.Mind mind, EntityUid mob, EntityUid originalMob, EntityUid cloner) { Profile = profile; Mind = mind; Mob = mob; + OriginalMob = originalMob; Cloner = cloner; } } diff --git a/Content.Shared/Cuffs/Components/HandcuffComponent.cs b/Content.Shared/Cuffs/Components/HandcuffComponent.cs index 398fce4fc7..65526f54c7 100644 --- a/Content.Shared/Cuffs/Components/HandcuffComponent.cs +++ b/Content.Shared/Cuffs/Components/HandcuffComponent.cs @@ -89,6 +89,12 @@ public sealed class HandcuffComponent : Component [DataField("endUncuffSound"), ViewVariables(VVAccess.ReadWrite)] public SoundSpecifier EndUncuffSound = new SoundPathSpecifier("/Audio/Items/Handcuffs/cuff_takeoff_end.ogg"); + + + // Parkstation-Shadowkin Start + [DataField("antiShadowkin")] + public bool AntiShadowkin = false; + // Parkstation-Shadowkin End } [Serializable, NetSerializable] diff --git a/Content.Shared/SimpleStation14/Clothing/Components/ClothingGrantComponentComponent.cs b/Content.Shared/SimpleStation14/Clothing/Components/ClothingGrantComponentComponent.cs index c19a781c82..0a2535cfb4 100644 --- a/Content.Shared/SimpleStation14/Clothing/Components/ClothingGrantComponentComponent.cs +++ b/Content.Shared/SimpleStation14/Clothing/Components/ClothingGrantComponentComponent.cs @@ -4,6 +4,7 @@ namespace Content.Shared.SimpleStation14.Clothing { /// /// Grants the owner entity the specified component while equipped. + /// [RegisterComponent] public sealed class ClothingGrantComponentComponent : Component { diff --git a/Content.Shared/SimpleStation14/Species/Shadowkin/Components/ShadowkinComponent.cs b/Content.Shared/SimpleStation14/Species/Shadowkin/Components/ShadowkinComponent.cs index 6c6129a691..c7a7cf8b4e 100644 --- a/Content.Shared/SimpleStation14/Species/Shadowkin/Components/ShadowkinComponent.cs +++ b/Content.Shared/SimpleStation14/Species/Shadowkin/Components/ShadowkinComponent.cs @@ -14,10 +14,10 @@ public sealed partial class ShadowkinComponent : Component public float MaxedPowerRoof = 0f; [ViewVariables(VVAccess.ReadWrite)] - public float MaxedPowerRateMin = 45f; + public float MaxedPowerRateMin = 90f; [ViewVariables(VVAccess.ReadWrite)] - public float MaxedPowerRateMax = 150f; + public float MaxedPowerRateMax = 200f; [ViewVariables(VVAccess.ReadWrite)] @@ -77,7 +77,7 @@ public float PowerLevel /// How much energy is gained per second. /// [ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] - public float PowerLevelGain = 0.75f; + public float PowerLevelGain = 0.5f; /// /// Power gain multiplier diff --git a/Content.Shared/SimpleStation14/Species/Shadowkin/Components/ShadowkinDarkSwappedComponent.cs b/Content.Shared/SimpleStation14/Species/Shadowkin/Components/ShadowkinDarkSwappedComponent.cs index 22bb0b52b3..37875a125f 100644 --- a/Content.Shared/SimpleStation14/Species/Shadowkin/Components/ShadowkinDarkSwappedComponent.cs +++ b/Content.Shared/SimpleStation14/Species/Shadowkin/Components/ShadowkinDarkSwappedComponent.cs @@ -6,20 +6,25 @@ namespace Content.Shared.SimpleStation14.Species.Shadowkin.Components; public sealed class ShadowkinDarkSwappedComponent : Component { /// - /// If it should be sent to the dark + /// If the entity should be sent to the dark /// - [DataField("invisible")] + /// + /// This is also defined in the power component, this is if you want to use only some effects of the swap without a toggle + /// + [DataField("invisible"), ViewVariables(VVAccess.ReadWrite)] public bool Invisible = true; /// /// If it should be pacified /// + /// [DataField("pacify")] public bool Pacify = true; /// - /// If it should dim nearby lights + /// If the entity should dim nearby lights when swapped /// + /// [DataField("darken"), ViewVariables(VVAccess.ReadWrite)] public bool Darken = true; @@ -27,12 +32,18 @@ public sealed class ShadowkinDarkSwappedComponent : Component /// /// How far to dim nearby lights /// + /// [DataField("range"), ViewVariables(VVAccess.ReadWrite)] public float DarkenRange = 5f; [ViewVariables(VVAccess.ReadOnly)] public List DarkenedLights = new(); + /// + /// How fast to refresh nearby light dimming in seconds + /// Without this performance would be significantly worse + /// + /// [ViewVariables(VVAccess.ReadWrite)] public float DarkenRate = 0.084f; // 1/12th of a second diff --git a/Content.Shared/SimpleStation14/Species/Shadowkin/Events/ShadowkinEvents.Blackeye.cs b/Content.Shared/SimpleStation14/Species/Shadowkin/Events/ShadowkinEvents.Blackeye.cs index f09fa453ca..602dca1379 100644 --- a/Content.Shared/SimpleStation14/Species/Shadowkin/Events/ShadowkinEvents.Blackeye.cs +++ b/Content.Shared/SimpleStation14/Species/Shadowkin/Events/ShadowkinEvents.Blackeye.cs @@ -8,10 +8,12 @@ namespace Content.Shared.SimpleStation14.Species.Shadowkin.Events; public sealed class ShadowkinBlackeyeAttemptEvent : CancellableEntityEventArgs { public readonly EntityUid Uid; + public readonly bool CheckPower; - public ShadowkinBlackeyeAttemptEvent(EntityUid uid) + public ShadowkinBlackeyeAttemptEvent(EntityUid uid, bool checkPower = true) { Uid = uid; + CheckPower = checkPower; } } diff --git a/Content.Shared/SimpleStation14/Species/Shadowkin/Systems/ShadowkinPowerSystem.DarkSwap.cs b/Content.Shared/SimpleStation14/Species/Shadowkin/Systems/ShadowkinPowerSystem.DarkSwap.cs index af568c8467..df5aa5448c 100644 --- a/Content.Shared/SimpleStation14/Species/Shadowkin/Systems/ShadowkinPowerSystem.DarkSwap.cs +++ b/Content.Shared/SimpleStation14/Species/Shadowkin/Systems/ShadowkinPowerSystem.DarkSwap.cs @@ -1,4 +1,5 @@ using Content.Shared.Interaction.Events; +using Content.Shared.Item; using Content.Shared.SimpleStation14.Species.Shadowkin.Components; using Content.Shared.Popups; using Robust.Shared.Timing; @@ -21,14 +22,13 @@ public override void Initialize() private void OnInteractionAttempt(EntityUid uid, ShadowkinDarkSwappedComponent component, InteractionAttemptEvent args) { - if (args.Target == null || !_entity.TryGetComponent(args.Target, out var __) || - _entity.TryGetComponent(args.Target, out _)) + if (args.Target == null || + !_entity.HasComponent(args.Target) || + _entity.HasComponent(args.Target)) return; args.Cancel(); - if (_gameTiming.InPrediction) - return; - - _popup.PopupEntity(Loc.GetString("ethereal-pickup-fail"), args.Target.Value, uid); + if (_gameTiming.InPrediction && _gameTiming.IsFirstTimePredicted) + _popup.PopupEntity(Loc.GetString("ethereal-pickup-fail"), args.Target.Value, uid); } } diff --git a/Resources/Locale/en-US/SimpleStation14/Content/StationAI/actions.ftl b/Resources/Locale/en-US/SimpleStation14/Content/StationAI/actions.ftl index 747a08bed6..5111acfedf 100644 --- a/Resources/Locale/en-US/SimpleStation14/Content/StationAI/actions.ftl +++ b/Resources/Locale/en-US/SimpleStation14/Content/StationAI/actions.ftl @@ -3,3 +3,5 @@ action-aieye-description = Puts you in to the AI Eye form, allowing you to float action-aihealth-name = Health Overlay action-aihealth-description = Toggles the AI's health overlay. + +action-darkswap-hardsuit-name = Dark Swap diff --git a/Resources/Prototypes/Nyanotrasen/metempsychoticHumanoids.yml b/Resources/Prototypes/Nyanotrasen/metempsychoticHumanoids.yml index 9c895703f1..b972756640 100644 --- a/Resources/Prototypes/Nyanotrasen/metempsychoticHumanoids.yml +++ b/Resources/Prototypes/Nyanotrasen/metempsychoticHumanoids.yml @@ -11,4 +11,4 @@ SlimePerson: 0.7 Vox: 0.1 Skeleton: 0.05 - Shadowkin: 0.3 + Shadowkin: 0.4 diff --git a/Resources/Prototypes/Reagents/toxins.yml b/Resources/Prototypes/Reagents/toxins.yml index e46068fd74..947dad6f2b 100644 --- a/Resources/Prototypes/Reagents/toxins.yml +++ b/Resources/Prototypes/Reagents/toxins.yml @@ -470,6 +470,14 @@ type: Animal reagent: Protein amount: 0.5 + # Parkstation-Shadowkin Start + - !type:AdjustReagent + conditions: + - !type:OrganType + type: Shadowkin + reagent: Protein + amount: 0.5 + # Parkstation-Shadowkin End - type: reagent id: Allicin diff --git a/Resources/Prototypes/SimpleStation14/Actions/types.yml b/Resources/Prototypes/SimpleStation14/Actions/types.yml index 7e3e4e6c55..eb5276dc8b 100644 --- a/Resources/Prototypes/SimpleStation14/Actions/types.yml +++ b/Resources/Prototypes/SimpleStation14/Actions/types.yml @@ -19,3 +19,13 @@ sprite: Interface/Alerts/human_alive.rsi state: health0 event: !type:AIHealthOverlayEvent + +- type: instantAction + id: ShadowkinDarkSwapHardsuitToggle + name: action-darkswap-hardsuit-name + useDelay: 15 + icon: + sprite: SimpleStation14/Clothing/Head/Hardsuits/darkened.rsi + state: icon + itemIconStyle: NoItem + event: !type:ToggleClothingEvent diff --git a/Resources/Prototypes/SimpleStation14/Body/Organs/shadowkin.yml b/Resources/Prototypes/SimpleStation14/Body/Organs/shadowkin.yml new file mode 100644 index 0000000000..fd439b8be7 --- /dev/null +++ b/Resources/Prototypes/SimpleStation14/Body/Organs/shadowkin.yml @@ -0,0 +1,138 @@ +- type: entity + id: BaseShadowkinOrgan + parent: BaseItem + abstract: true + components: + - type: Organ + - type: Sprite + sprite: SimpleStation14/Mobs/Species/Shadowkin/organs.rsi + - type: DynamicPrice + price: 70 + + +- type: entity + id: OrganShadowkinBrain + parent: BaseShadowkinOrgan + name: brain + description: The source of incredible, unending intelligence. + components: + - type: Sprite + state: brain + - type: Organ + - type: Input + context: ghost + - type: InputMover + - type: MovementSpeedModifier # How the hell does it walk? + baseWalkSpeed: 0 + baseSprintSpeed: 0 + - type: Brain + +- type: entity + id: OrganShadowkinEyes + parent: BaseShadowkinOrgan + name: eyes + description: I see beyond anything you ever will! + components: + - type: Sprite + state: eyes + - type: Organ + +- type: entity + id: OrganShadowkinEars + parent: BaseShadowkinOrgan + name: ears + description: Hey, listen! + components: + - type: Sprite + state: ears + - type: Organ + +- type: entity + id: OrganShadowkinTongue + parent: BaseShadowkinOrgan + name: tongue + description: A fleshy muscle mostly used for lying. + components: + - type: Sprite + state: tongue + - type: Organ + + +- type: entity + id: OrganShadowkinAppendix + parent: BaseShadowkinOrgan + name: appendix + description: What does this do? + components: + - type: Sprite + state: appendix + - type: Organ + + +- type: entity + id: OrganShadowkinHeart + parent: BaseShadowkinOrgan + name: heart + description: I feel bad for the heartless bastard who lost this. + components: + - type: Sprite + state: heart + - type: Organ + - type: Metabolizer + maxReagents: 2 + metabolizerTypes: [Shadowkin] + groups: + - id: Medicine + - id: Poison + - id: Narcotic + +- type: entity + id: OrganShadowkinStomach + parent: BaseShadowkinOrgan + name: stomach + description: '"Yummy!", says the stomach, although you are unable to hear it.' + components: + - type: Sprite + state: stomach + - type: Organ + - type: SolutionContainerManager + solutions: + stomach: + maxVol: 40 + - type: Stomach + - type: Metabolizer + maxReagents: 3 + metabolizerTypes: [Shadowkin] + groups: + - id: Food + - id: Drink + +- type: entity + id: OrganShadowkinLiver + parent: BaseShadowkinOrgan + name: liver + description: "Live 'er? I hardly know 'er!" + components: + - type: Sprite + state: liver + - type: Organ + - type: Metabolizer + maxReagents: 1 + metabolizerTypes: [Shadowkin] + groups: + - id: Alcohol + rateModifier: 0.1 + +- type: entity + id: OrganShadowkinKidneys + parent: BaseShadowkinOrgan + name: kidneys + description: Give the kid their knees back, please, this is the third time this week. + components: + - type: Sprite + state: kidneys + - type: Organ + - type: Metabolizer + maxReagents: 5 + metabolizerTypes: [Shadowkin] + removeEmpty: true diff --git a/Resources/Prototypes/SimpleStation14/Chemistry/metabolizer_types.yml b/Resources/Prototypes/SimpleStation14/Chemistry/metabolizer_types.yml new file mode 100644 index 0000000000..66ce009b66 --- /dev/null +++ b/Resources/Prototypes/SimpleStation14/Chemistry/metabolizer_types.yml @@ -0,0 +1,3 @@ +- type: metabolizerType + id: Shadowkin + name: shadowkin diff --git a/Resources/Prototypes/SimpleStation14/Entities/Body/Parts/shadowkin.yml b/Resources/Prototypes/SimpleStation14/Entities/Body/Parts/shadowkin.yml index 0846664c4f..7078bccb3b 100644 --- a/Resources/Prototypes/SimpleStation14/Entities/Body/Parts/shadowkin.yml +++ b/Resources/Prototypes/SimpleStation14/Entities/Body/Parts/shadowkin.yml @@ -6,9 +6,9 @@ components: - type: Sprite netsync: false - sprite: SimpleStation14/Mobs/Species/shadowkin.rsi + sprite: SimpleStation14/Mobs/Species/Shadowkin/parts.rsi - type: Icon - sprite: SimpleStation14/Mobs/Species/shadowkin.rsi + sprite: SimpleStation14/Mobs/Species/Shadowkin/parts.rsi - type: Damageable damageContainer: Biological - type: BodyPart diff --git a/Resources/Prototypes/SimpleStation14/Entities/Body/Prototypes/shadowkin.yml b/Resources/Prototypes/SimpleStation14/Entities/Body/Prototypes/shadowkin.yml index 306a972fd3..a0aaef70fe 100644 --- a/Resources/Prototypes/SimpleStation14/Entities/Body/Prototypes/shadowkin.yml +++ b/Resources/Prototypes/SimpleStation14/Entities/Body/Prototypes/shadowkin.yml @@ -8,8 +8,8 @@ connections: - torso organs: - brain: OrganHumanBrain - eyes: OrganHumanEyes + brain: OrganShadowkinBrain + eyes: OrganShadowkinEyes torso: part: TorsoShadowkin connections: @@ -17,12 +17,12 @@ - right arm - left leg - right leg - organs: # placeholders - heart: OrganHumanHeart - # lungs: OrganLungs - stomach: OrganHumanStomach - liver: OrganHumanLiver - kidneys: OrganHumanKidneys + organs: + heart: OrganShadowkinHeart + # lungs: OrganHumanLungs + stomach: OrganShadowkinStomach + liver: OrganShadowkinLiver + kidneys: OrganShadowkinKidneys right arm: part: RightArmShadowkin connections: diff --git a/Resources/Prototypes/SimpleStation14/Entities/Clothing/Eyes/glasses.yml b/Resources/Prototypes/SimpleStation14/Entities/Clothing/Eyes/glasses.yml index ae4bfa8937..dcae25bb0b 100644 --- a/Resources/Prototypes/SimpleStation14/Entities/Clothing/Eyes/glasses.yml +++ b/Resources/Prototypes/SimpleStation14/Entities/Clothing/Eyes/glasses.yml @@ -9,4 +9,18 @@ tag: GlassesNearsight - type: DropOnSlip chance: 5 - + +- type: entity + parent: ClothingEyesBase + id: ClothingEyesGlassesShadowkinDarkWindow + name: darkened goggles + description: An unusual pair of goggles developed during a time of inhumane experimentation involving Shadowkin. They are designed to allow the wearer to peer into The Dark. + components: + - type: Sprite + sprite: SimpleStation14/Clothing/Eyes/Glasses/darkened.rsi + - type: Clothing + sprite: SimpleStation14/Clothing/Eyes/Glasses/darkened.rsi + - type: EyeProtection + - type: DropOnSlip + chance: 20 + - type: ShadowkinSight diff --git a/Resources/Prototypes/SimpleStation14/Entities/Clothing/Head/hardsuit-helmets.yml b/Resources/Prototypes/SimpleStation14/Entities/Clothing/Head/hardsuit-helmets.yml index a56a569e77..ef523f5a76 100644 --- a/Resources/Prototypes/SimpleStation14/Entities/Clothing/Head/hardsuit-helmets.yml +++ b/Resources/Prototypes/SimpleStation14/Entities/Clothing/Head/hardsuit-helmets.yml @@ -54,3 +54,30 @@ Piercing: 0.95 Heat: 0.9 Radiation: 0.6 + +- type: entity + parent: ClothingHeadHardsuitBase + id: ClothingHeadHelmetHardsuitShadowkinDarkswap + noSpawn: true + name: darkened softsuit helmet + components: + - type: Sprite + sprite: SimpleStation14/Clothing/Head/Hardsuits/darkened.rsi + - type: Clothing + sprite: SimpleStation14/Clothing/Head/Hardsuits/darkened.rsi + - type: PointLight + color: "#d6adff" + - type: Armor + modifiers: + coefficients: + Blunt: 1.4 + Slash: 1.3 + Piercing: 1.2 + Radiation: 0.4 + - type: ClothingSpeedModifier + walkModifier: 0.5 + sprintModifier: 0.5 + - type: ClothingGrantComponent + component: + - type: ShadowkinDarkSwapped + darken: false diff --git a/Resources/Prototypes/SimpleStation14/Entities/Clothing/OuterClothing/hardsuits.yml b/Resources/Prototypes/SimpleStation14/Entities/Clothing/OuterClothing/hardsuits.yml index 5fc5fa8df7..baeb2fff51 100644 --- a/Resources/Prototypes/SimpleStation14/Entities/Clothing/OuterClothing/hardsuits.yml +++ b/Resources/Prototypes/SimpleStation14/Entities/Clothing/OuterClothing/hardsuits.yml @@ -55,3 +55,33 @@ damageCoefficient: 0.8 - type: ToggleableClothing clothingPrototype: ClothingHeadHelmetHardsuitHoP + +- type: entity + parent: ClothingOuterHardsuitBase + id: ClothingOuterHardsuitShadowkinDarkswap + name: darkened softsuit + description: Originally created while several research facilities were experimenting on Shadowkin, this hardsuit allows the wearer to jump the gap between the "normal" dimension and The Dark. + components: + - type: Sprite + sprite: SimpleStation14/Clothing/OuterClothing/Hardsuits/darkened.rsi + - type: Clothing + sprite: SimpleStation14/Clothing/OuterClothing/Hardsuits/darkened.rsi + - type: Armor + modifiers: + coefficients: + Blunt: 0.9 + Slash: 0.8 + Piercing: 0.9 + Radiation: 0.3 + - type: ClothingSpeedModifier + walkModifier: 0.9 + sprintModifier: 0.9 + - type: Item + size: 65 + - type: Tag + tags: + - FullBodyOuter + - Hardsuit + - type: ToggleableClothing + clothingPrototype: ClothingHeadHelmetHardsuitShadowkinDarkswap + actionId: ShadowkinDarkSwapHardsuitToggle diff --git a/Resources/Prototypes/SimpleStation14/Entities/Mobs/Player/shadowkin.yml b/Resources/Prototypes/SimpleStation14/Entities/Mobs/Player/shadowkin.yml index e560d9eed8..a62f37822e 100644 --- a/Resources/Prototypes/SimpleStation14/Entities/Mobs/Player/shadowkin.yml +++ b/Resources/Prototypes/SimpleStation14/Entities/Mobs/Player/shadowkin.yml @@ -9,7 +9,7 @@ - type: Hunger - type: Thirst - type: Icon - sprite: SimpleStation14/Mobs/Species/shadowkin.rsi + sprite: SimpleStation14/Mobs/Species/Shadowkin/parts.rsi state: full - type: Body prototype: Shadowkin @@ -75,9 +75,63 @@ layer: - MobLayer - type: Sprite + netsync: false + noRot: true + drawdepth: Mobs scale: 0.85, 0.85 # Small + layers: + - map: ["enum.HumanoidVisualLayers.Chest"] + - map: ["enum.HumanoidVisualLayers.Head"] + - map: ["enum.HumanoidVisualLayers.Snout"] + - map: ["enum.HumanoidVisualLayers.Eyes"] + - map: ["enum.HumanoidVisualLayers.RArm"] + - map: ["enum.HumanoidVisualLayers.LArm"] + - map: ["enum.HumanoidVisualLayers.RLeg"] + - map: ["enum.HumanoidVisualLayers.LLeg"] + - shader: StencilClear + sprite: Mobs/Species/Human/parts.rsi + state: l_leg + - shader: StencilMask + map: ["enum.HumanoidVisualLayers.StencilMask"] + sprite: Mobs/Customization/masking_helpers.rsi + state: full + visible: false + - map: ["enum.HumanoidVisualLayers.LFoot"] + - map: ["enum.HumanoidVisualLayers.RFoot"] + - map: ["socks"] + - map: ["underpants"] + - map: ["undershirt"] + - map: ["jumpsuit"] + - map: ["enum.HumanoidVisualLayers.LHand"] + - map: ["enum.HumanoidVisualLayers.RHand"] + - map: ["enum.HumanoidVisualLayers.Handcuffs"] + color: "#ffffff" + sprite: Objects/Misc/handcuffs.rsi + state: body-overlay-2 + visible: false + - map: ["id"] + - map: ["gloves"] + - map: ["shoes"] + - map: ["ears"] + - map: ["outerClothing"] + - map: ["eyes"] + - map: ["belt"] + - map: ["neck"] + - map: ["back"] + - map: ["enum.HumanoidVisualLayers.FacialHair"] + - map: ["enum.HumanoidVisualLayers.Hair"] + - map: ["enum.HumanoidVisualLayers.HeadSide"] + - map: ["enum.HumanoidVisualLayers.HeadTop"] + - map: ["mask"] + - map: ["head"] + - map: ["pocket1"] + - map: ["pocket2"] + - map: ["enum.HumanoidVisualLayers.Tail"] + - map: ["enum.HumanoidVisualLayers.Wings"] - type: Eye - zoom: "0.85, 0.85" + zoom: 0.85, 0.85 + targetZoom: 0.85, 0.85 + maxZoom: 0.85, 0.85 - type: MeleeWeapon soundHit: collection: Punch @@ -134,7 +188,7 @@ components: - type: HumanoidAppearance species: Shadowkin - - type: Sprite # sprite again because we want different layer ordering + - type: Sprite netsync: false noRot: true drawdepth: Mobs diff --git a/Resources/Prototypes/SimpleStation14/Entities/Objects/Misc/handcuffs.yml b/Resources/Prototypes/SimpleStation14/Entities/Objects/Misc/handcuffs.yml new file mode 100644 index 0000000000..71ce72b3c0 --- /dev/null +++ b/Resources/Prototypes/SimpleStation14/Entities/Objects/Misc/handcuffs.yml @@ -0,0 +1,21 @@ +- type: entity + parent: Handcuffs + id: HandcuffsShadowkin + name: shadowkin restraints + description: One of the first creations after finding Shadowkin, these were used to contain the Shadowkin during research so they didn't teleport away. + components: + - type: Item + size: 20 + - type: Handcuff + cuffedRSI: SimpleStation14/Clothing/OuterClothing/Misc/shadowkin_restraints.rsi + breakoutTime: 40 + damageOnResist: + types: + Blunt: 2 + cuffTime: 4 + uncuffTime: 5 + stunBonus: 4 + antiShadowkin: true + - type: Sprite + sprite: SimpleStation14/Clothing/OuterClothing/Misc/shadowkin_restraints.rsi + state: icon diff --git a/Resources/Prototypes/SimpleStation14/Species/shadowkin.yml b/Resources/Prototypes/SimpleStation14/Species/shadowkin.yml index 0ca3fd17d6..3e1e0454bc 100644 --- a/Resources/Prototypes/SimpleStation14/Species/shadowkin.yml +++ b/Resources/Prototypes/SimpleStation14/Species/shadowkin.yml @@ -71,89 +71,89 @@ - type: humanoidBaseSprite id: MobShadowkinHead baseSprite: - sprite: SimpleStation14/Mobs/Species/shadowkin.rsi + sprite: SimpleStation14/Mobs/Species/Shadowkin/parts.rsi state: head_m - type: humanoidBaseSprite id: MobShadowkinHeadMale baseSprite: - sprite: SimpleStation14/Mobs/Species/shadowkin.rsi + sprite: SimpleStation14/Mobs/Species/Shadowkin/parts.rsi state: head_m - type: humanoidBaseSprite id: MobShadowkinHeadFemale baseSprite: - sprite: SimpleStation14/Mobs/Species/shadowkin.rsi + sprite: SimpleStation14/Mobs/Species/Shadowkin/parts.rsi state: head_f - type: humanoidBaseSprite id: MobShadowkinTorso baseSprite: - sprite: SimpleStation14/Mobs/Species/shadowkin.rsi + sprite: SimpleStation14/Mobs/Species/Shadowkin/parts.rsi state: torso_m - type: humanoidBaseSprite id: MobShadowkinTorsoMale baseSprite: - sprite: SimpleStation14/Mobs/Species/shadowkin.rsi + sprite: SimpleStation14/Mobs/Species/Shadowkin/parts.rsi state: torso_m - type: humanoidBaseSprite id: MobShadowkinTorsoFemale baseSprite: - sprite: SimpleStation14/Mobs/Species/shadowkin.rsi + sprite: SimpleStation14/Mobs/Species/Shadowkin/parts.rsi state: torso_f - type: humanoidBaseSprite id: MobShadowkinLLeg baseSprite: - sprite: SimpleStation14/Mobs/Species/shadowkin.rsi + sprite: SimpleStation14/Mobs/Species/Shadowkin/parts.rsi state: l_leg - type: humanoidBaseSprite id: MobShadowkinLHand baseSprite: - sprite: SimpleStation14/Mobs/Species/shadowkin.rsi + sprite: SimpleStation14/Mobs/Species/Shadowkin/parts.rsi state: l_hand - type: humanoidBaseSprite id: MobShadowkinEyes baseSprite: - sprite: SimpleStation14/Mobs/Species/shadowkin.rsi + sprite: SimpleStation14/Mobs/Species/Shadowkin/parts.rsi state: eyes - type: humanoidBaseSprite id: MobShadowkinLArm baseSprite: - sprite: SimpleStation14/Mobs/Species/shadowkin.rsi + sprite: SimpleStation14/Mobs/Species/Shadowkin/parts.rsi state: l_arm - type: humanoidBaseSprite id: MobShadowkinLFoot baseSprite: - sprite: SimpleStation14/Mobs/Species/shadowkin.rsi + sprite: SimpleStation14/Mobs/Species/Shadowkin/parts.rsi state: l_foot - type: humanoidBaseSprite id: MobShadowkinRLeg baseSprite: - sprite: SimpleStation14/Mobs/Species/shadowkin.rsi + sprite: SimpleStation14/Mobs/Species/Shadowkin/parts.rsi state: r_leg - type: humanoidBaseSprite id: MobShadowkinRHand baseSprite: - sprite: SimpleStation14/Mobs/Species/shadowkin.rsi + sprite: SimpleStation14/Mobs/Species/Shadowkin/parts.rsi state: r_hand - type: humanoidBaseSprite id: MobShadowkinRArm baseSprite: - sprite: SimpleStation14/Mobs/Species/shadowkin.rsi + sprite: SimpleStation14/Mobs/Species/Shadowkin/parts.rsi state: r_arm - type: humanoidBaseSprite id: MobShadowkinRFoot baseSprite: - sprite: SimpleStation14/Mobs/Species/shadowkin.rsi + sprite: SimpleStation14/Mobs/Species/Shadowkin/parts.rsi state: r_foot diff --git a/Resources/Textures/SimpleStation14/Clothing/Eyes/Glasses/darkened.rsi/equipped-EYES.png b/Resources/Textures/SimpleStation14/Clothing/Eyes/Glasses/darkened.rsi/equipped-EYES.png new file mode 100644 index 0000000000..39fafeb144 Binary files /dev/null and b/Resources/Textures/SimpleStation14/Clothing/Eyes/Glasses/darkened.rsi/equipped-EYES.png differ diff --git a/Resources/Textures/SimpleStation14/Clothing/Eyes/Glasses/darkened.rsi/icon.png b/Resources/Textures/SimpleStation14/Clothing/Eyes/Glasses/darkened.rsi/icon.png new file mode 100644 index 0000000000..8ef5aa68d0 Binary files /dev/null and b/Resources/Textures/SimpleStation14/Clothing/Eyes/Glasses/darkened.rsi/icon.png differ diff --git a/Resources/Textures/SimpleStation14/Clothing/Eyes/Glasses/darkened.rsi/inhand-left.png b/Resources/Textures/SimpleStation14/Clothing/Eyes/Glasses/darkened.rsi/inhand-left.png new file mode 100644 index 0000000000..7ecbd93e8a Binary files /dev/null and b/Resources/Textures/SimpleStation14/Clothing/Eyes/Glasses/darkened.rsi/inhand-left.png differ diff --git a/Resources/Textures/SimpleStation14/Clothing/Eyes/Glasses/darkened.rsi/inhand-right.png b/Resources/Textures/SimpleStation14/Clothing/Eyes/Glasses/darkened.rsi/inhand-right.png new file mode 100644 index 0000000000..26fd8e57a4 Binary files /dev/null and b/Resources/Textures/SimpleStation14/Clothing/Eyes/Glasses/darkened.rsi/inhand-right.png differ diff --git a/Resources/Textures/SimpleStation14/Clothing/Eyes/Glasses/darkened.rsi/meta.json b/Resources/Textures/SimpleStation14/Clothing/Eyes/Glasses/darkened.rsi/meta.json new file mode 100644 index 0000000000..555efbc7da --- /dev/null +++ b/Resources/Textures/SimpleStation14/Clothing/Eyes/Glasses/darkened.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "JustAnOrange", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-EYES", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/SimpleStation14/Clothing/Head/Hardsuits/darkened.rsi/equipped-HELMET.png b/Resources/Textures/SimpleStation14/Clothing/Head/Hardsuits/darkened.rsi/equipped-HELMET.png new file mode 100644 index 0000000000..f6599f7bd4 Binary files /dev/null and b/Resources/Textures/SimpleStation14/Clothing/Head/Hardsuits/darkened.rsi/equipped-HELMET.png differ diff --git a/Resources/Textures/SimpleStation14/Clothing/Head/Hardsuits/darkened.rsi/icon.png b/Resources/Textures/SimpleStation14/Clothing/Head/Hardsuits/darkened.rsi/icon.png new file mode 100644 index 0000000000..94d9e03b82 Binary files /dev/null and b/Resources/Textures/SimpleStation14/Clothing/Head/Hardsuits/darkened.rsi/icon.png differ diff --git a/Resources/Textures/SimpleStation14/Clothing/Head/Hardsuits/darkened.rsi/meta.json b/Resources/Textures/SimpleStation14/Clothing/Head/Hardsuits/darkened.rsi/meta.json new file mode 100644 index 0000000000..66589a849a --- /dev/null +++ b/Resources/Textures/SimpleStation14/Clothing/Head/Hardsuits/darkened.rsi/meta.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "JustAnOrange", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-HELMET", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/SimpleStation14/Clothing/OuterClothing/Hardsuits/darkened.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/SimpleStation14/Clothing/OuterClothing/Hardsuits/darkened.rsi/equipped-OUTERCLOTHING.png new file mode 100644 index 0000000000..c93eb1bc51 Binary files /dev/null and b/Resources/Textures/SimpleStation14/Clothing/OuterClothing/Hardsuits/darkened.rsi/equipped-OUTERCLOTHING.png differ diff --git a/Resources/Textures/SimpleStation14/Clothing/OuterClothing/Hardsuits/darkened.rsi/icon.png b/Resources/Textures/SimpleStation14/Clothing/OuterClothing/Hardsuits/darkened.rsi/icon.png new file mode 100644 index 0000000000..4aa2067759 Binary files /dev/null and b/Resources/Textures/SimpleStation14/Clothing/OuterClothing/Hardsuits/darkened.rsi/icon.png differ diff --git a/Resources/Textures/SimpleStation14/Clothing/OuterClothing/Hardsuits/darkened.rsi/inhand-left.png b/Resources/Textures/SimpleStation14/Clothing/OuterClothing/Hardsuits/darkened.rsi/inhand-left.png new file mode 100644 index 0000000000..6872735699 Binary files /dev/null and b/Resources/Textures/SimpleStation14/Clothing/OuterClothing/Hardsuits/darkened.rsi/inhand-left.png differ diff --git a/Resources/Textures/SimpleStation14/Clothing/OuterClothing/Hardsuits/darkened.rsi/inhand-right.png b/Resources/Textures/SimpleStation14/Clothing/OuterClothing/Hardsuits/darkened.rsi/inhand-right.png new file mode 100644 index 0000000000..37b71b2cd3 Binary files /dev/null and b/Resources/Textures/SimpleStation14/Clothing/OuterClothing/Hardsuits/darkened.rsi/inhand-right.png differ diff --git a/Resources/Textures/SimpleStation14/Clothing/OuterClothing/Hardsuits/darkened.rsi/meta.json b/Resources/Textures/SimpleStation14/Clothing/OuterClothing/Hardsuits/darkened.rsi/meta.json new file mode 100644 index 0000000000..57a0b994f9 --- /dev/null +++ b/Resources/Textures/SimpleStation14/Clothing/OuterClothing/Hardsuits/darkened.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "JustAnOrange", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "icon" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/SimpleStation14/Clothing/OuterClothing/Misc/shadowkin_restraints.rsi/body-overlay-2.png b/Resources/Textures/SimpleStation14/Clothing/OuterClothing/Misc/shadowkin_restraints.rsi/body-overlay-2.png new file mode 100644 index 0000000000..e8618fc6b7 Binary files /dev/null and b/Resources/Textures/SimpleStation14/Clothing/OuterClothing/Misc/shadowkin_restraints.rsi/body-overlay-2.png differ diff --git a/Resources/Textures/SimpleStation14/Clothing/OuterClothing/Misc/shadowkin_restraints.rsi/icon.png b/Resources/Textures/SimpleStation14/Clothing/OuterClothing/Misc/shadowkin_restraints.rsi/icon.png new file mode 100644 index 0000000000..def3161bb0 Binary files /dev/null and b/Resources/Textures/SimpleStation14/Clothing/OuterClothing/Misc/shadowkin_restraints.rsi/icon.png differ diff --git a/Resources/Textures/SimpleStation14/Clothing/OuterClothing/Misc/shadowkin_restraints.rsi/inhand-left.png b/Resources/Textures/SimpleStation14/Clothing/OuterClothing/Misc/shadowkin_restraints.rsi/inhand-left.png new file mode 100644 index 0000000000..5c15def766 Binary files /dev/null and b/Resources/Textures/SimpleStation14/Clothing/OuterClothing/Misc/shadowkin_restraints.rsi/inhand-left.png differ diff --git a/Resources/Textures/SimpleStation14/Clothing/OuterClothing/Misc/shadowkin_restraints.rsi/inhand-right.png b/Resources/Textures/SimpleStation14/Clothing/OuterClothing/Misc/shadowkin_restraints.rsi/inhand-right.png new file mode 100644 index 0000000000..99c96d368a Binary files /dev/null and b/Resources/Textures/SimpleStation14/Clothing/OuterClothing/Misc/shadowkin_restraints.rsi/inhand-right.png differ diff --git a/Resources/Textures/SimpleStation14/Clothing/OuterClothing/Misc/shadowkin_restraints.rsi/meta.json b/Resources/Textures/SimpleStation14/Clothing/OuterClothing/Misc/shadowkin_restraints.rsi/meta.json new file mode 100644 index 0000000000..365122e186 --- /dev/null +++ b/Resources/Textures/SimpleStation14/Clothing/OuterClothing/Misc/shadowkin_restraints.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "JustAnOrange", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "body-overlay-2", + "directions": 4 + }, + { + "name": "icon" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/organs.rsi/appendix.png b/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/organs.rsi/appendix.png new file mode 100644 index 0000000000..0d2ad309c7 Binary files /dev/null and b/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/organs.rsi/appendix.png differ diff --git a/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/organs.rsi/brain.png b/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/organs.rsi/brain.png new file mode 100644 index 0000000000..ac2806b79c Binary files /dev/null and b/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/organs.rsi/brain.png differ diff --git a/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/organs.rsi/core.png b/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/organs.rsi/core.png new file mode 100644 index 0000000000..ac2d7893fd Binary files /dev/null and b/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/organs.rsi/core.png differ diff --git a/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/organs.rsi/ears.png b/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/organs.rsi/ears.png new file mode 100644 index 0000000000..6ff3ac86b7 Binary files /dev/null and b/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/organs.rsi/ears.png differ diff --git a/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/organs.rsi/eyes.png b/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/organs.rsi/eyes.png new file mode 100644 index 0000000000..f7c0a306aa Binary files /dev/null and b/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/organs.rsi/eyes.png differ diff --git a/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/organs.rsi/heart.png b/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/organs.rsi/heart.png new file mode 100644 index 0000000000..1b79b529ae Binary files /dev/null and b/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/organs.rsi/heart.png differ diff --git a/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/organs.rsi/kidneys.png b/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/organs.rsi/kidneys.png new file mode 100644 index 0000000000..482bb24102 Binary files /dev/null and b/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/organs.rsi/kidneys.png differ diff --git a/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/organs.rsi/liver.png b/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/organs.rsi/liver.png new file mode 100644 index 0000000000..0a2e6ab25a Binary files /dev/null and b/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/organs.rsi/liver.png differ diff --git a/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/organs.rsi/lungs.png b/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/organs.rsi/lungs.png new file mode 100644 index 0000000000..a76c9fc1eb Binary files /dev/null and b/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/organs.rsi/lungs.png differ diff --git a/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/organs.rsi/meta.json b/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/organs.rsi/meta.json new file mode 100644 index 0000000000..1c9aebfb6d --- /dev/null +++ b/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/organs.rsi/meta.json @@ -0,0 +1,44 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/tgstation/tgstation/commit/f309886bf3e29808206693e9142304260df134e9", + "states": [ + { + "name": "appendix" + }, + { + "name": "brain" + }, + { + "name": "core" + }, + { + "name": "ears" + }, + { + "name": "eyes" + }, + { + "name": "heart" + }, + { + "name": "kidneys" + }, + { + "name": "liver" + }, + { + "name": "lungs" + }, + { + "name": "stomach" + }, + { + "name": "tongue" + } + ] +} diff --git a/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/organs.rsi/stomach.png b/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/organs.rsi/stomach.png new file mode 100644 index 0000000000..a0341750d3 Binary files /dev/null and b/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/organs.rsi/stomach.png differ diff --git a/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/organs.rsi/tongue.png b/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/organs.rsi/tongue.png new file mode 100644 index 0000000000..64306900f5 Binary files /dev/null and b/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/organs.rsi/tongue.png differ diff --git a/Resources/Textures/SimpleStation14/Mobs/Species/shadowkin.rsi/eyes.png b/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/parts.rsi/eyes.png similarity index 100% rename from Resources/Textures/SimpleStation14/Mobs/Species/shadowkin.rsi/eyes.png rename to Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/parts.rsi/eyes.png diff --git a/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/parts.rsi/full-nomarkings.png b/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/parts.rsi/full-nomarkings.png new file mode 100644 index 0000000000..b62d81fec7 Binary files /dev/null and b/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/parts.rsi/full-nomarkings.png differ diff --git a/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/parts.rsi/full.png b/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/parts.rsi/full.png new file mode 100644 index 0000000000..253eb0c3c9 Binary files /dev/null and b/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/parts.rsi/full.png differ diff --git a/Resources/Textures/SimpleStation14/Mobs/Species/shadowkin.rsi/head_f.png b/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/parts.rsi/head_f.png similarity index 100% rename from Resources/Textures/SimpleStation14/Mobs/Species/shadowkin.rsi/head_f.png rename to Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/parts.rsi/head_f.png diff --git a/Resources/Textures/SimpleStation14/Mobs/Species/shadowkin.rsi/head_m.png b/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/parts.rsi/head_m.png similarity index 100% rename from Resources/Textures/SimpleStation14/Mobs/Species/shadowkin.rsi/head_m.png rename to Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/parts.rsi/head_m.png diff --git a/Resources/Textures/SimpleStation14/Mobs/Species/shadowkin.rsi/l_arm.png b/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/parts.rsi/l_arm.png similarity index 100% rename from Resources/Textures/SimpleStation14/Mobs/Species/shadowkin.rsi/l_arm.png rename to Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/parts.rsi/l_arm.png diff --git a/Resources/Textures/SimpleStation14/Mobs/Species/shadowkin.rsi/l_foot.png b/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/parts.rsi/l_foot.png similarity index 100% rename from Resources/Textures/SimpleStation14/Mobs/Species/shadowkin.rsi/l_foot.png rename to Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/parts.rsi/l_foot.png diff --git a/Resources/Textures/SimpleStation14/Mobs/Species/shadowkin.rsi/l_hand.png b/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/parts.rsi/l_hand.png similarity index 100% rename from Resources/Textures/SimpleStation14/Mobs/Species/shadowkin.rsi/l_hand.png rename to Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/parts.rsi/l_hand.png diff --git a/Resources/Textures/SimpleStation14/Mobs/Species/shadowkin.rsi/l_leg.png b/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/parts.rsi/l_leg.png similarity index 100% rename from Resources/Textures/SimpleStation14/Mobs/Species/shadowkin.rsi/l_leg.png rename to Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/parts.rsi/l_leg.png diff --git a/Resources/Textures/SimpleStation14/Mobs/Species/shadowkin.rsi/meta.json b/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/parts.rsi/meta.json similarity index 94% rename from Resources/Textures/SimpleStation14/Mobs/Species/shadowkin.rsi/meta.json rename to Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/parts.rsi/meta.json index 11752d5140..981da93ef2 100644 --- a/Resources/Textures/SimpleStation14/Mobs/Species/shadowkin.rsi/meta.json +++ b/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/parts.rsi/meta.json @@ -8,43 +8,43 @@ "copyright": "https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13/commit/5bc3ea02ce03a551c85017f1ddd411315a19a5ca#diff-519788fa2ca74299d1686a44d3ab2098b49ed5ab65d293ec742bead7d49f0b8d", "states": [ { - "name": "full", + "name": "eyes", "directions": 4 }, { - "name": "head_m", + "name": "full-nomarkings", "directions": 4 }, { - "name": "head_f", + "name": "full", "directions": 4 }, { - "name": "torso_m", + "name": "head_f", "directions": 4 }, { - "name": "torso_f", + "name": "head_m", "directions": 4 }, { - "name": "r_arm", + "name": "l_arm", "directions": 4 }, { - "name": "l_arm", + "name": "l_foot", "directions": 4 }, { - "name": "r_hand", + "name": "l_hand", "directions": 4 }, { - "name": "l_hand", + "name": "l_leg", "directions": 4 }, { - "name": "r_leg", + "name": "r_arm", "directions": 4 }, { @@ -52,15 +52,19 @@ "directions": 4 }, { - "name": "l_leg", + "name": "r_hand", "directions": 4 }, { - "name": "l_foot", + "name": "r_leg", "directions": 4 }, { - "name": "eyes", + "name": "torso_f", + "directions": 4 + }, + { + "name": "torso_m", "directions": 4 } ] diff --git a/Resources/Textures/SimpleStation14/Mobs/Species/shadowkin.rsi/r_arm.png b/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/parts.rsi/r_arm.png similarity index 100% rename from Resources/Textures/SimpleStation14/Mobs/Species/shadowkin.rsi/r_arm.png rename to Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/parts.rsi/r_arm.png diff --git a/Resources/Textures/SimpleStation14/Mobs/Species/shadowkin.rsi/r_foot.png b/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/parts.rsi/r_foot.png similarity index 100% rename from Resources/Textures/SimpleStation14/Mobs/Species/shadowkin.rsi/r_foot.png rename to Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/parts.rsi/r_foot.png diff --git a/Resources/Textures/SimpleStation14/Mobs/Species/shadowkin.rsi/r_hand.png b/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/parts.rsi/r_hand.png similarity index 100% rename from Resources/Textures/SimpleStation14/Mobs/Species/shadowkin.rsi/r_hand.png rename to Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/parts.rsi/r_hand.png diff --git a/Resources/Textures/SimpleStation14/Mobs/Species/shadowkin.rsi/r_leg.png b/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/parts.rsi/r_leg.png similarity index 100% rename from Resources/Textures/SimpleStation14/Mobs/Species/shadowkin.rsi/r_leg.png rename to Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/parts.rsi/r_leg.png diff --git a/Resources/Textures/SimpleStation14/Mobs/Species/shadowkin.rsi/torso_f.png b/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/parts.rsi/torso_f.png similarity index 100% rename from Resources/Textures/SimpleStation14/Mobs/Species/shadowkin.rsi/torso_f.png rename to Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/parts.rsi/torso_f.png diff --git a/Resources/Textures/SimpleStation14/Mobs/Species/shadowkin.rsi/torso_m.png b/Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/parts.rsi/torso_m.png similarity index 100% rename from Resources/Textures/SimpleStation14/Mobs/Species/shadowkin.rsi/torso_m.png rename to Resources/Textures/SimpleStation14/Mobs/Species/Shadowkin/parts.rsi/torso_m.png diff --git a/Resources/Textures/SimpleStation14/Mobs/Species/shadowkin.rsi/full.png b/Resources/Textures/SimpleStation14/Mobs/Species/shadowkin.rsi/full.png deleted file mode 100644 index 8ebd75032e..0000000000 Binary files a/Resources/Textures/SimpleStation14/Mobs/Species/shadowkin.rsi/full.png and /dev/null differ