diff --git a/Content.Client/_SCP/NightVision/GreenVisionOverlay.cs b/Content.Client/_SCP/NightVision/GreenVisionOverlay.cs deleted file mode 100644 index dc70d51a14a..00000000000 --- a/Content.Client/_SCP/NightVision/GreenVisionOverlay.cs +++ /dev/null @@ -1,45 +0,0 @@ -using Robust.Client.Graphics; -using Robust.Client.Player; -using Robust.Shared.Enums; -using Robust.Shared.Prototypes; -using Content.Shared.Abilities; -using Content.Shared._SCP.NightVision; - -namespace Content.Client._SCP.NightVision; - -public sealed partial class GreenVisionOverlay : Overlay -{ - [Dependency] private readonly IPrototypeManager _prototypeManager = default!; - [Dependency] private readonly IPlayerManager _playerManager = default!; - [Dependency] IEntityManager _entityManager = default!; - - - public override bool RequestScreenTexture => true; - public override OverlaySpace Space => OverlaySpace.WorldSpace; - private readonly ShaderInstance _greenVisionShader; - - public GreenVisionOverlay() - { - IoCManager.InjectDependencies(this); - _greenVisionShader = _prototypeManager.Index("GreenVision").Instance().Duplicate(); - } - - protected override void Draw(in OverlayDrawArgs args) - { - if (ScreenTexture == null) - return; - if (_playerManager.LocalPlayer?.ControlledEntity is not {Valid: true} player) - return; - if (!_entityManager.HasComponent(player)) - return; - - _greenVisionShader?.SetParameter("SCREEN_TEXTURE", ScreenTexture); - - - var worldHandle = args.WorldHandle; - var viewport = args.WorldBounds; - worldHandle.SetTransform(Matrix3.Identity); - worldHandle.UseShader(_greenVisionShader); - worldHandle.DrawRect(viewport, Color.White); - } -} diff --git a/Content.Client/_SCP/NightVision/GreenVisionSystem.cs b/Content.Client/_SCP/NightVision/GreenVisionSystem.cs deleted file mode 100644 index 480b28cb293..00000000000 --- a/Content.Client/_SCP/NightVision/GreenVisionSystem.cs +++ /dev/null @@ -1,39 +0,0 @@ -using Content.Shared.Abilities; -using Robust.Client.GameObjects; -using Robust.Client.Graphics; -using Robust.Client.Player; -using Content.Shared._SCP.NightVision; - -namespace Content.Client._SCP.NightVision; - -public sealed partial class GreenVisionSystem : EntitySystem -{ - [Dependency] private readonly IPlayerManager _player = default!; - [Dependency] private readonly IOverlayManager _overlayMan = default!; - - private GreenVisionOverlay _overlay = default!; - - public override void Initialize() - { - base.Initialize(); - - SubscribeLocalEvent(OnGreenVisionInit); - SubscribeLocalEvent(OnGreenVisionShutdown); - - _overlay = new(); - } - - private void OnGreenVisionInit(EntityUid uid, GreenVisionComponent component, ComponentInit args) - { - if (_player.LocalPlayer?.ControlledEntity == uid) - _overlayMan.AddOverlay(_overlay); - } - - private void OnGreenVisionShutdown(EntityUid uid, GreenVisionComponent component, ComponentShutdown args) - { - if (_player.LocalPlayer?.ControlledEntity == uid) - { - _overlayMan.RemoveOverlay(_overlay); - } - } -} diff --git a/Content.Client/_SCP/NightVision/NightVisionOverlay.cs b/Content.Client/_SCP/NightVision/NightVisionOverlay.cs deleted file mode 100644 index a44f5ed7d90..00000000000 --- a/Content.Client/_SCP/NightVision/NightVisionOverlay.cs +++ /dev/null @@ -1,96 +0,0 @@ -using System.Numerics; -using Content.Shared._SCP.NightVision; -using Robust.Client.GameObjects; -using Robust.Client.Graphics; -using Robust.Client.Player; -using Robust.Shared.Enums; -using Robust.Shared.Map; -using Content.Shared.Mobs.Components; - -namespace Content.Client._SCP.NightVision; - -public sealed class NightVisionOverlay : Overlay -{ - [Dependency] private readonly IEntityManager _entity = default!; - [Dependency] private readonly IPlayerManager _players = default!; - - private readonly ContainerSystem _container; - private readonly TransformSystem _transform; - - public override OverlaySpace Space => OverlaySpace.WorldSpace; - - private readonly List _entries = new(); - - public NightVisionOverlay() - { - IoCManager.InjectDependencies(this); - - _container = _entity.System(); - _transform = _entity.System(); - } - - protected override void Draw(in OverlayDrawArgs args) - { - if (!_entity.TryGetComponent(_players.LocalEntity, out NightVisionComponent? nightVision) || - nightVision.State == NightVisionState.Off) - { - return; - } - - var handle = args.WorldHandle; - var eye = args.Viewport.Eye; - var eyeRot = eye?.Rotation ?? default; - - _entries.Clear(); - var entities = _entity.EntityQueryEnumerator(); - while (entities.MoveNext(out var uid, out var visible, out var sprite, out var xform)) - { - _entries.Add(new NightVisionRenderEntry((uid, sprite, xform), - eye?.Position.MapId, - eyeRot, - nightVision.SeeThroughContainers, - 0)); - } - - _entries.Sort(SortPriority); - - foreach (var entry in _entries) - { - Render(entry.Ent, entry.Map, handle, entry.EyeRot, entry.NightVisionSeeThroughContainers); - } - - //handle.SetTransform(Matrix3x2.Identity); - } - - private static int SortPriority(NightVisionRenderEntry x, NightVisionRenderEntry y) - { - return x.Priority.CompareTo(y.Priority); - } - - private void Render(Entity ent, - MapId? map, - DrawingHandleWorld handle, - Angle eyeRot, - bool seeThroughContainers) - { - var (uid, sprite, xform) = ent; - if (xform.MapID != map) - return; - - var seeThrough = seeThroughContainers; - if (!seeThrough && _container.IsEntityOrParentInContainer(uid)) - return; - - var position = _transform.GetWorldPosition(xform); - var rotation = _transform.GetWorldRotation(xform); - - //sprite.Render(handle, eyeRot, rotation, position: position); - } -} - -public record struct NightVisionRenderEntry( - (EntityUid, SpriteComponent, TransformComponent) Ent, - MapId? Map, - Angle EyeRot, - bool NightVisionSeeThroughContainers, - int Priority); diff --git a/Content.Client/_SCP/NightVision/NightVisionSystem.cs b/Content.Client/_SCP/NightVision/NightVisionSystem.cs deleted file mode 100644 index f5bd3295ac9..00000000000 --- a/Content.Client/_SCP/NightVision/NightVisionSystem.cs +++ /dev/null @@ -1,82 +0,0 @@ -using Content.Shared._SCP.NightVision; -using Robust.Client.Graphics; -using Robust.Client.Player; -using Robust.Shared.Player; - -namespace Content.Client._SCP.NightVision; - -public sealed class NightVisionSystem : SharedNightVisionSystem -{ - [Dependency] private readonly ILightManager _light = default!; - [Dependency] private readonly IOverlayManager _overlay = default!; - [Dependency] private readonly IPlayerManager _player = default!; - - public override void Initialize() - { - base.Initialize(); - - SubscribeLocalEvent(OnNightVisionAttached); - SubscribeLocalEvent(OnNightVisionDetached); - } - - private void OnNightVisionAttached(Entity ent, ref LocalPlayerAttachedEvent args) - { - NightVisionChanged(ent); - } - - private void OnNightVisionDetached(Entity ent, ref LocalPlayerDetachedEvent args) - { - Off(); - } - - protected override void NightVisionChanged(Entity ent) - { - if (ent != _player.LocalEntity) - return; - - switch (ent.Comp.State) - { - case NightVisionState.Off: - Off(); - break; - case NightVisionState.Half: - Half(ent); - break; - case NightVisionState.Full: - Full(ent); - break; - default: - throw new ArgumentOutOfRangeException(); - } - } - - protected override void NightVisionRemoved(Entity ent) - { - if (ent != _player.LocalEntity) - return; - - Off(); - } - - private void Off() - { - _overlay.RemoveOverlay(new NightVisionOverlay()); - _light.DrawLighting = true; - } - - private void Half(Entity ent) - { - if (ent.Comp.Overlay) - _overlay.AddOverlay(new NightVisionOverlay()); - - _light.DrawLighting = true; - } - - private void Full(Entity ent) - { - if (ent.Comp.Overlay) - _overlay.AddOverlay(new NightVisionOverlay()); - - _light.DrawLighting = false; - } -} diff --git a/Content.Server/_SCP/NightVision/NightVisionSystem.cs b/Content.Server/_SCP/NightVision/NightVisionSystem.cs deleted file mode 100644 index b2d4cf2a67a..00000000000 --- a/Content.Server/_SCP/NightVision/NightVisionSystem.cs +++ /dev/null @@ -1,5 +0,0 @@ -using Content.Shared._SCP.NightVision; - -namespace Content.Server._SCP.NightVision; - -public sealed class NightVisionSystem : SharedNightVisionSystem; diff --git a/Content.Shared/_SCP/NightVision/GreenVisionComponent.cs b/Content.Shared/_SCP/NightVision/GreenVisionComponent.cs deleted file mode 100644 index d76958897d9..00000000000 --- a/Content.Shared/_SCP/NightVision/GreenVisionComponent.cs +++ /dev/null @@ -1,9 +0,0 @@ -using Robust.Shared.GameStates; - -namespace Content.Shared._SCP.NightVision; - -[RegisterComponent] -[NetworkedComponent] - -public sealed partial class GreenVisionComponent : Component -{} diff --git a/Content.Shared/_SCP/NightVision/NightVisionComponent.cs b/Content.Shared/_SCP/NightVision/NightVisionComponent.cs deleted file mode 100644 index 7106e1d18c7..00000000000 --- a/Content.Shared/_SCP/NightVision/NightVisionComponent.cs +++ /dev/null @@ -1,34 +0,0 @@ -using Content.Shared.Alert; -using Robust.Shared.GameStates; -using Robust.Shared.Prototypes; -using Robust.Shared.Serialization; - -namespace Content.Shared._SCP.NightVision; - -[RegisterComponent, NetworkedComponent, AutoGenerateComponentState(true)] -[Access(typeof(SharedNightVisionSystem))] -public sealed partial class NightVisionComponent : Component -{ - [DataField] - public ProtoId? Alert; - - [DataField, AutoNetworkedField] - public NightVisionState State = NightVisionState.Full; - - [DataField, AutoNetworkedField] - public bool Overlay; - - [DataField, AutoNetworkedField] - public bool Innate; - - [DataField, AutoNetworkedField] - public bool SeeThroughContainers; -} - -[Serializable, NetSerializable] -public enum NightVisionState -{ - Off, - Half, - Full -} diff --git a/Content.Shared/_SCP/NightVision/NightVisionItemComponent.cs b/Content.Shared/_SCP/NightVision/NightVisionItemComponent.cs deleted file mode 100644 index 4bd4fb42799..00000000000 --- a/Content.Shared/_SCP/NightVision/NightVisionItemComponent.cs +++ /dev/null @@ -1,21 +0,0 @@ -using Robust.Shared.GameStates; -using Robust.Shared.Prototypes; - -namespace Content.Shared._SCP.NightVision; - -[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] -[Access(typeof(SharedNightVisionSystem))] -public sealed partial class NightVisionItemComponent : Component -{ - [DataField, AutoNetworkedField] - public EntProtoId ActionId = "ActionToggleNightVision"; - - [DataField, AutoNetworkedField] - public EntityUid? Action; - - [DataField, AutoNetworkedField] - public EntityUid? User; - - [DataField, AutoNetworkedField] - public bool Toggleable = true; -} diff --git a/Content.Shared/_SCP/NightVision/NightVisionItemVisuals.cs b/Content.Shared/_SCP/NightVision/NightVisionItemVisuals.cs deleted file mode 100644 index c95b46536ed..00000000000 --- a/Content.Shared/_SCP/NightVision/NightVisionItemVisuals.cs +++ /dev/null @@ -1,10 +0,0 @@ -using Robust.Shared.Serialization; - -namespace Content.Shared._SCP.NightVision; - -[Serializable, NetSerializable] -public enum NightVisionItemVisuals -{ - Active, - Inactive -} diff --git a/Content.Shared/_SCP/NightVision/RMCNightVisionVisibleComponent.cs b/Content.Shared/_SCP/NightVision/RMCNightVisionVisibleComponent.cs deleted file mode 100644 index 275c2beecbb..00000000000 --- a/Content.Shared/_SCP/NightVision/RMCNightVisionVisibleComponent.cs +++ /dev/null @@ -1,17 +0,0 @@ -using Robust.Shared.GameStates; - -namespace Content.Shared._SCP.NightVision; - -/// -/// For rendering sprites on top of FOV when the user has a . -/// -[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] -public sealed partial class RMCNightVisionVisibleComponent : Component -{ - /// - /// Priority for rendering order. - /// Rendered from lowest to highest, which means higher numbers will be rendered above lower numbers. - /// - [DataField, AutoNetworkedField] - public int Priority = 0; -} diff --git a/Content.Shared/_SCP/NightVision/SharedNightVisionSystem.cs b/Content.Shared/_SCP/NightVision/SharedNightVisionSystem.cs deleted file mode 100644 index 63aa5ca9cc0..00000000000 --- a/Content.Shared/_SCP/NightVision/SharedNightVisionSystem.cs +++ /dev/null @@ -1,207 +0,0 @@ -using System.Diagnostics; -using Content.Shared.Actions; -using Content.Shared.Alert; -using Content.Shared.Inventory.Events; -using Content.Shared.Rounding; -using Content.Shared.Toggleable; -using Robust.Shared.Timing; -using Content.Shared.Clothing; -using Content.Shared.Clothing.Components; -using Content.Shared.Clothing.EntitySystems; - - -namespace Content.Shared._SCP.NightVision; - -public abstract class SharedNightVisionSystem : EntitySystem -{ - [Dependency] private readonly SharedActionsSystem _actions = default!; - [Dependency] private readonly SharedAppearanceSystem _appearance = default!; - [Dependency] private readonly AlertsSystem _alerts = default!; - [Dependency] private readonly IGameTiming _timing = default!; - [Dependency] private readonly ClothingSystem _clothingSystem = default!; - [Dependency] private readonly IEntityManager _entManager = default!; - - public override void Initialize() - { - SubscribeLocalEvent(OnNightVisionStartup); - SubscribeLocalEvent(OnNightVisionMapInit); - SubscribeLocalEvent(OnNightVisionAfterHandle); - SubscribeLocalEvent(OnNightVisionRemove); - SubscribeLocalEvent(OnNightVisionItemGetActions); - SubscribeLocalEvent(OnNightVisionItemToggle); - SubscribeLocalEvent(OnNightVisionItemGotEquipped); - SubscribeLocalEvent(OnNightVisionItemGotUnequipped); - SubscribeLocalEvent(OnNightVisionItemActionRemoved); - SubscribeLocalEvent(OnNightVisionItemRemove); - SubscribeLocalEvent(OnNightVisionItemTerminating); - } - - private void OnNightVisionStartup(Entity ent, ref ComponentStartup args) - { - NightVisionChanged(ent); - } - - private void OnNightVisionAfterHandle(Entity ent, ref AfterAutoHandleStateEvent args) - { - NightVisionChanged(ent); - } - - private void OnNightVisionMapInit(Entity ent, ref MapInitEvent args) - { - UpdateAlert(ent); - } - - private void OnNightVisionRemove(Entity ent, ref ComponentRemove args) - { - if (ent.Comp.Alert is { } alert) - _alerts.ClearAlert(ent, AlertType.NightVision); - - NightVisionRemoved(ent); - } - - private void OnNightVisionItemGetActions(Entity ent, ref GetItemActionsEvent args) - { - if (args.InHands || !ent.Comp.Toggleable) - return; - - args.AddAction(ref ent.Comp.Action, ent.Comp.ActionId); - } - - private void OnNightVisionItemToggle(Entity ent, ref ToggleActionEvent args) - { - - args.Handled = true; - ToggleNightVisionItem(ent, args.Performer); - } - - private void OnNightVisionItemGotEquipped(Entity ent, ref GotEquippedEvent args) - { - ToggleNightVisionItem(ent, args.Equipee); - } - - private void OnNightVisionItemGotUnequipped(Entity ent, ref GotUnequippedEvent args) - { - DisableNightVisionItem(ent, args.Equipee); - } - - private void OnNightVisionItemActionRemoved(Entity ent, ref ActionRemovedEvent args) - { - DisableNightVisionItem(ent, ent.Comp.User); - } - - private void OnNightVisionItemRemove(Entity ent, ref ComponentRemove args) - { - DisableNightVisionItem(ent, ent.Comp.User); - } - - private void OnNightVisionItemTerminating(Entity ent, ref EntityTerminatingEvent args) - { - DisableNightVisionItem(ent, ent.Comp.User); - } - - public void Toggle(Entity ent) - { - if (!Resolve(ent, ref ent.Comp)) - return; - - ent.Comp.State = ent.Comp.State switch - { - NightVisionState.Off => NightVisionState.Half, - NightVisionState.Half => NightVisionState.Full, - NightVisionState.Full => NightVisionState.Off, - _ => throw new ArgumentOutOfRangeException(), - }; - - Dirty(ent); - UpdateAlert((ent, ent.Comp)); - } - - private void UpdateAlert(Entity ent) - { - if (ent.Comp.Alert is { } alert) - { - var level = MathF.Max((int) NightVisionState.Off, (int) ent.Comp.State); - var max = _alerts.GetMaxSeverity(AlertType.NightVision); - var severity = max - ContentHelpers.RoundToLevels(level, (int) NightVisionState.Full, max + 1); - _alerts.ShowAlert(ent, AlertType.NightVision, (short) severity); - } - - NightVisionChanged(ent); - } - - private void ToggleNightVisionItem(Entity item, EntityUid user) - { - - if (item.Comp.User == user && item.Comp.Toggleable) - { - DisableNightVisionItem(item, item.Comp.User); - return; - } - - EnableNightVisionItem(item, user); - } - - private void EnableNightVisionItem(Entity item, EntityUid user) - { - DisableNightVisionItem(item, item.Comp.User); - var entity = item.Owner; - var clothingComponent = _entManager.GetComponent(entity); - _clothingSystem.SetEquippedPrefix(entity, null, clothingComponent); - - item.Comp.User = user; - Dirty(item); - - _appearance.SetData(item, NightVisionItemVisuals.Active, true); - _appearance.SetData(item, NightVisionItemVisuals.Inactive, false); - - - if (!_timing.ApplyingState) - { - var nightVision = EnsureComp(user); - var greenVision = EnsureComp(user); - nightVision.State = NightVisionState.Full; - Dirty(user, nightVision); - Dirty(user, greenVision); - } - - _actions.SetToggled(item.Comp.Action, true); - } - - protected virtual void NightVisionChanged(Entity ent) - { - } - - protected virtual void NightVisionRemoved(Entity ent) - { - } - - protected void DisableNightVisionItem(Entity item, EntityUid? user) - { - _actions.SetToggled(item.Comp.Action, false); - var entity = item.Owner; - var clothingComponent = _entManager.GetComponent(entity); - Logger.Debug("test"); - _clothingSystem.SetEquippedPrefix(item, "up", clothingComponent); // pretend like i didnt do this for now someone can make it a component variable - item.Comp.User = null; - Dirty(item); - - _appearance.SetData(item, NightVisionItemVisuals.Active, false); - _appearance.SetData(item, NightVisionItemVisuals.Inactive, true); - - if (TryComp(user, out NightVisionComponent? nightVision) && - !nightVision.Innate) - { - RemCompDeferred(user.Value); - RemCompDeferred(user.Value); - } - } - - public void SetSeeThroughContainers(Entity ent, bool see) - { - if (!Resolve(ent, ref ent.Comp, false)) - return; - - ent.Comp.SeeThroughContainers = see; - Dirty(ent); - } -} diff --git a/Content.Shared/_SCP/NightVision/ToggleNightVision.cs b/Content.Shared/_SCP/NightVision/ToggleNightVision.cs deleted file mode 100644 index 5c90de5fede..00000000000 --- a/Content.Shared/_SCP/NightVision/ToggleNightVision.cs +++ /dev/null @@ -1,13 +0,0 @@ -using Content.Shared.Alert; - -namespace Content.Shared._SCP.NightVision; - -[DataDefinition] -public sealed partial class ToggleNightVision : IAlertClick -{ - public void AlertClicked(EntityUid player) - { - var entities = IoCManager.Resolve(); - entities.System().Toggle(player); - } -} diff --git a/Resources/Prototypes/Loadouts/Jobs/Command/captain.yml b/Resources/Prototypes/Loadouts/Jobs/Command/captain.yml index dc225d5630b..944497e0ed5 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Command/captain.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Command/captain.yml @@ -84,7 +84,7 @@ - type: loadout id: CaptainOuterClothing equipment: - outerClothing: ClothingOuterArmorCaptainCarapace + outerClothing: ClothingOuterArmorBasic - type: loadout id: CaptainWintercoat diff --git a/Resources/Prototypes/_SCP/Entities/Clothing/Head/helmets.yml b/Resources/Prototypes/_SCP/Entities/Clothing/Head/helmets.yml index 5ee12d7a537..c5c550cf532 100644 --- a/Resources/Prototypes/_SCP/Entities/Clothing/Head/helmets.yml +++ b/Resources/Prototypes/_SCP/Entities/Clothing/Head/helmets.yml @@ -8,7 +8,7 @@ sprite: _SCP/Clothing/Head/Helmets/sechelm.rsi - type: Clothing sprite: _SCP/Clothing/Head/Helmets/sechelm.rsi - - type: Armor + - type: Armor modifiers: coefficients: Blunt: 0.9 @@ -26,7 +26,7 @@ sprite: _SCP/Clothing/Head/Helmets/mtfhelm.rsi - type: Clothing sprite: _SCP/Clothing/Head/Helmets/mtfhelm.rsi - - type: Armor + - type: Armor modifiers: coefficients: Blunt: 0.8 @@ -47,7 +47,6 @@ sprite: _SCP/Clothing/Head/Helmets/mtfnvg.rsi - type: Sprite sprite: _SCP/Clothing/Head/Helmets/mtfnvg.rsi - - type: NightVisionItem - type: Appearance - type: GenericVisualizer visuals: diff --git a/Resources/Prototypes/_Scp/Entities/Clothing/Head/helmets.yml b/Resources/Prototypes/_Scp/Entities/Clothing/Head/helmets.yml index aeea7e69a34..c5c550cf532 100644 --- a/Resources/Prototypes/_Scp/Entities/Clothing/Head/helmets.yml +++ b/Resources/Prototypes/_Scp/Entities/Clothing/Head/helmets.yml @@ -1,14 +1,57 @@ - type: entity - parent: [ClothingHeadHelmetBase, BaseRestrictedContraband] - id: ClothingHeadHelmetChaos - name: helmet - description: Standard Chaos gear. Protects the head from impacts. + parent: SCPClothingHeadBaseFoldable + id: SCPClothingHeadHelmetGuard + name: foundation security helmet + description: A heavy non-descript helmet with built-in padding, and armor. It has a poly-carbonate yellow riot visor on it. components: - type: Sprite - sprite: _Scp/Clothing/Head/Helmets/chaos.rsi + sprite: _SCP/Clothing/Head/Helmets/sechelm.rsi - type: Clothing - sprite: _Scp/Clothing/Head/Helmets/chaos.rsi + sprite: _SCP/Clothing/Head/Helmets/sechelm.rsi + - type: Armor + modifiers: + coefficients: + Blunt: 0.9 + Slash: 0.9 + Piercing: 0.9 + Heat: 0.9 + +- type: entity + parent: ClothingHeadBase + id: SCPClothingHeadHelmetMTF + name: mtf tactical helmet + description: An armored helmet usually worn by Mobile Task Forces, dawned with SCP logos, and insignia. + components: + - type: Sprite + sprite: _SCP/Clothing/Head/Helmets/mtfhelm.rsi + - type: Clothing + sprite: _SCP/Clothing/Head/Helmets/mtfhelm.rsi + - type: Armor + modifiers: + coefficients: + Blunt: 0.8 + Slash: 0.8 + Piercing: 0.8 + Heat: 0.8 - type: Tag tags: - - WhitelistChameleon - - SecurityHelmet + - HidesHair + + +- type: entity + parent: SCPClothingHeadHelmetMTF + id: SCPClothingHeadHelmetMTFNVG + name: mtf tactical helmet w/ nvg + components: + - type: Clothing + sprite: _SCP/Clothing/Head/Helmets/mtfnvg.rsi + - type: Sprite + sprite: _SCP/Clothing/Head/Helmets/mtfnvg.rsi + - type: Appearance + - type: GenericVisualizer + visuals: + enum.NightVisionItemVisuals.Active: + nightVisionItemLayer: + True: { state: icon } + False: { state: icon-up } + diff --git a/Resources/Prototypes/_Scp/Entities/Clothing/Masks/masks.yml b/Resources/Prototypes/_Scp/Entities/Clothing/Masks/masks.yml index a3d7e3363cf..7bd5b438815 100644 --- a/Resources/Prototypes/_Scp/Entities/Clothing/Masks/masks.yml +++ b/Resources/Prototypes/_Scp/Entities/Clothing/Masks/masks.yml @@ -1,17 +1,18 @@ - type: entity - parent: [ ClothingMaskGas, BaseRestrictedContraband ] - id: ClothingMaskGasChaosIns - name: chaos gas mask - description: Very reliable military gas mask. + parent: ClothingMaskGas + id: SCPClothingMaskGasMTF + name: tactical coifed gas mask + description: A top-grade tactical clear gasmask above an added balaclava, it has a bit of melee-padding in it, along with some heavy bulletproof glass on it. Can be connected to an air supply. components: - type: Sprite - sprite: _Scp/Clothing/Masks/gaschaosins.rsi + sprite: _SCP/Clothing/Mask/mtfmask.rsi + scale: 0.6, 0.6 - type: Clothing - sprite: _Scp/Clothing/Masks/gaschaosins.rsi + sprite: _SCP/Clothing/Mask/mtfmask.rsi - type: Armor modifiers: coefficients: Blunt: 0.90 Slash: 0.90 Piercing: 0.95 - Heat: 0.95 + Heat: 0.95 \ No newline at end of file diff --git a/Resources/Prototypes/_Scp/Entities/Clothing/Shoes/boots.yml b/Resources/Prototypes/_Scp/Entities/Clothing/Shoes/boots.yml index 11da9b89169..e07ff9c1699 100644 --- a/Resources/Prototypes/_Scp/Entities/Clothing/Shoes/boots.yml +++ b/Resources/Prototypes/_Scp/Entities/Clothing/Shoes/boots.yml @@ -1,15 +1,10 @@ - type: entity - parent: [ClothingShoesMilitaryBase, BaseRestrictedContraband] - id: ClothingShoesBootsChaos - name: chaos jackboots - description: Combat boots for combat scenarios or combat situations. All combat, all the time. + parent: ClothingShoesMilitaryBase + id: SCPClothingShoesBootsDutySec + name: duty boots + description: Security combat boots for combat scenarios or combat situations. All combat, all the time. components: - type: Sprite - sprite: _Scp/Clothing/Shoes/Boots/chaosboots.rsi + sprite: _SCP/Clothing/Shoes/Boots/dutyboots.rsi - type: Clothing - sprite: _Scp/Clothing/Shoes/Boots/chaosboots.rsi - - type: ClothingSlowOnDamageModifier - modifier: 0.5 - - type: FootstepModifier - footstepSoundCollection: - collection: FootstepBoots + sprite: _SCP/Clothing/Shoes/Boots/dutyboots.rsi \ No newline at end of file diff --git a/Resources/Prototypes/_Scp/Entities/Clothing/Uniforms/jumpsuits.yml b/Resources/Prototypes/_Scp/Entities/Clothing/Uniforms/jumpsuits.yml index 5cf63fc7f30..62ccaa3865a 100644 --- a/Resources/Prototypes/_Scp/Entities/Clothing/Uniforms/jumpsuits.yml +++ b/Resources/Prototypes/_Scp/Entities/Clothing/Uniforms/jumpsuits.yml @@ -1,10 +1,176 @@ -- type: entity - parent: [ClothingUniformBase, BaseCommandContraband] - id: ClothingUniformChaosIns - name: standard uniform of the group called "Chaos" - description: Robust textile. Hm, I guess this guy can kill you just with his pen. +- type: entity + parent: ClothingUniformBase + id: SCPClothingUniformJumpsuit + name: standard issue jumpsuit + description: A dark black uniform. This one seems to be without department insignia. On the back, in silver lettering, are the words 'SCP FOUNDATION'. components: - type: Sprite - sprite: _Scp/Clothing/Uniforms/chaosins.rsi + sprite: _SCP/Clothing/Uniforms/Jumpsuit/jumpsuit.rsi - type: Clothing - sprite: _Scp/Clothing/Uniforms/chaosins.rsi + sprite: _SCP/Clothing/Uniforms/Jumpsuit/jumpsuit.rsi + +- type: entity + parent: SCPClothingUniformJumpsuit + id: SCPClothingUniformMaintenanceJumpsuit + name: maintenace jumpsuit + description: A dark black uniform. This one seems to be of the Engineering department. This uniform is issued regardless of rank. On the back, in silver lettering, are the words 'SCP FOUNDATION'. + components: + - type: Clothing + clothingVisuals: + jumpsuit: + - state: equipped-INNERCLOTHING + - state: dept + color: "#ff7f00" + +- type: entity + parent: SCPClothingUniformJumpsuit + id: SCPClothingUniformLogisticsJumpsuit + name: logistics jumpsuit + description: A dark black uniform. This one seems to be of the Logistics department. This uniform is issued regardless of rank. On the back, in silver lettering, are the words 'SCP FOUNDATION'. + components: + - type: Clothing + clothingVisuals: + jumpsuit: + - state: equipped-INNERCLOTHING + - state: dept + color: "#bb9042" + +- type: entity + parent: ClothingUniformBase + id: SCPClothingUniformClassD + name: class-d jumpsuit + description: A standard-issue orange jumpsuit, ideal for a class-d personnel working in a controlled environment. + components: + - type: Sprite + sprite: _SCP/Clothing/Uniforms/Jumpsuit/classd.rsi + - type: Clothing + sprite: _SCP/Clothing/Uniforms/Jumpsuit/classd.rsi + +- type: entity + parent: ClothingUniformBase + id: SCPClothingUniformSecurity + name: guard uniform + description: A sterile white uniform. Currently issued to guard personnel. + components: + - type: Sprite + sprite: _SCP/Clothing/Uniforms/Jumpsuit/guard.rsi + - type: Clothing + sprite: _SCP/Clothing/Uniforms/Jumpsuit/guard.rsi + +- type: entity + parent: ClothingUniformBase + id: SCPClothingUniformSecuritySeargent + name: seargent uniform + description: A sterile white uniform. Currently issued to seargents. + components: + - type: Sprite + sprite: _SCP/Clothing/Uniforms/Jumpsuit/seargent.rsi + - type: Clothing + sprite: _SCP/Clothing/Uniforms/Jumpsuit/seargent.rsi + +- type: entity + parent: ClothingUniformBase + id: SCPClothingUniformSecurityCommander + name: director of security's uniform + description: A white tactical shirt, with a pair of black trousers with golden striping on the side, the shirt is covered in gold insignia, with an additional black color over the wrists. There's a golden badge and belt buckle. This is definitely the definition of prospertiy. + components: + - type: Sprite + sprite: _SCP/Clothing/Uniforms/Jumpsuit/guardcom.rsi + - type: Clothing + sprite: _SCP/Clothing/Uniforms/Jumpsuit/guardcom.rsi + +- type: entity + parent: ClothingUniformBase + id: SCPClothingUniformSecurityAlt + name: guard uniform + description: A sterile black uniform. Currently issued to some guard personnel. + components: + - type: Sprite + sprite: _SCP/Clothing/Uniforms/Jumpsuit/hczguard.rsi + - type: Clothing + sprite: _SCP/Clothing/Uniforms/Jumpsuit/hczguard.rsi + +- type: entity + parent: ClothingUniformBase + id: SCPClothingUniformEngineeringDirectorJumpsuit + name: chief containment engineer's jumpsuit + description: It's a high visibility jumpsuit given to those engineers insane enough to achieve the rank of \"Director of Maintenance\". It has minor radiation shielding. + components: + - type: Sprite + sprite: _SCP/Clothing/Uniforms/Jumpsuit/engineeringdirector.rsi + - type: Clothing + sprite: _SCP/Clothing/Uniforms/Jumpsuit/engineeringdirector.rsi + + +- type: entity + parent: ClothingUniformBase + id: SCPClothingUniformUtility + name: utility coveralls + description: The utility uniform of the SCP Foundation, made from an insulated material. + components: + - type: Sprite + sprite: _SCP/Clothing/Uniforms/Jumpsuit/utilitysuit.rsi + - type: Clothing + sprite: _SCP/Clothing/Uniforms/Jumpsuit/utilitysuit.rsi + +- type: entity + parent: SCPClothingUniformUtility + id: SCPClothingUniformSCPMaintenance + name: maintenance coveralls + description: The utility uniform of the SCP Foundation, made from an insulated material, with orange markings denoting maintenance. + components: + - type: Clothing + clothingVisuals: + jumpsuit: + - state: equipped-INNERCLOTHING + - state: dept + color: "#ff7f00" + +- type: entity + parent: SCPClothingUniformUtility + id: SCPClothingUniformLogistics + name: logistics coveralls + description: The utility uniform of the SCP Foundation, made from an insulated material, with brown markings denoting logistics. + components: + - type: Clothing + clothingVisuals: + jumpsuit: + - state: equipped-INNERCLOTHING + - state: dept + color: "#bb9042" + +- type: entity + parent: ClothingUniformBase + id: SCPClothingUniformMTF + name: mtf jumpsuit + description: The mtf jumpsuit of the SCP Foundation, made from an insulated material. + components: + - type: Sprite + sprite: _SCP/Clothing/Uniforms/Jumpsuit/mtf.rsi + layers: + - state: icon + - state: icon_s + - type: Clothing + sprite: _SCP/Clothing/Uniforms/Jumpsuit/mtf.rsi + clothingVisuals: + jumpsuit: + - state: equipped-INNERCLOTHING + - state: shirt + +- type: entity + parent: SCPClothingUniformMTF + id: SCPClothingUniformMTFDelta4 + name: delta-4 jumpsuit + description: The delta-4 jumpsuit of the SCP Foundation, made from an insulated material. + components: + - type: Sprite + layers: + - state: icon + - state: icon_s + color: "#1761EB" + - type: Clothing + clothingVisuals: + jumpsuit: + - state: equipped-INNERCLOTHING + - state: shirt + color: "#1761EB" diff --git a/Resources/Textures/_Scp/Objects/Misc/id_cards.rsi/meta.json b/Resources/Textures/_Scp/Objects/Misc/id_cards.rsi/meta.json index f257f8590ef..6d62eaf5695 100644 --- a/Resources/Textures/_Scp/Objects/Misc/id_cards.rsi/meta.json +++ b/Resources/Textures/_Scp/Objects/Misc/id_cards.rsi/meta.json @@ -1,23 +1,94 @@ { - "version": 1, - "license": "CLA", - "copyright": "© SUNRISE, An EULA/CLA with a hosting restriction, full text: https://github.com/space-sunrise/space-station-14/blob/master/CLA.txt", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "id-classd" - }, - { - "name": "id-cook" - }, - { - "name": "id-botanist" - }, - { - "name": "orange" - } - ] -} + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/tgstation/tgstation // Icon Edit by FoxxoTrystan, https://github.com/Foundation-19/Foundation-19/blob/cd5ecd2a0d5312c0089663bce4086de9be87a35f/icons/obj/card.dmi, https://github.com/Foundation-19/Foundation-19/blob/cd5ecd2a0d5312c0089663bce4086de9be87a35f/icons/mob/onmob/items/lefthand.dmi, https://github.com/Foundation-19/Foundation-19/blob/cd5ecd2a0d5312c0089663bce4086de9be87a35f/icons/mob/onmob/items/righthand.dmi", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "default" + }, + { + "name": "securitylvl1" + }, + { + "name": "securitylvl2" + }, + { + "name": "securitylvl3" + }, + { + "name": "securitylvl4" + }, + { + "name": "securitylvl5" + }, + { + "name": "sciencelvl1" + }, + { + "name": "sciencelvl2" + }, + { + "name": "sciencelvl3" + }, + { + "name": "sciencelvl4" + }, + { + "name": "sciencelvl5" + }, + { + "name": "adminlvl1" + }, + { + "name": "adminlvl2" + }, + { + "name": "adminlvl3" + }, + { + "name": "adminlvl4" + }, + { + "name": "adminlvl5" + }, + { + "name": "classd" + }, + { + "name": "classdjan" + }, + { + "name": "classdmed" + }, + { + "name": "classdcook" + }, + { + "name": "classdbot" + }, + { + "name": "classdmine" + }, + { + "name": "o5" + }, + { + "name": "ci" + }, + { + "name": "cilead" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} \ No newline at end of file