From 9bb9d36ac97b625d363b74d0692c6513f6bc89ff Mon Sep 17 00:00:00 2001 From: Spatison <137375981+Spatison@users.noreply.github.com> Date: Fri, 19 Jul 2024 17:42:32 +0300 Subject: [PATCH 01/11] =?UTF-8?q?fix:=20=D0=A1=D0=BF=D0=B0=D0=B2=D0=BD=20?= =?UTF-8?q?=D0=BC=D0=B0=D0=B3=D0=B0=20=D1=87=D0=B5=D1=80=D0=B5=D0=B7=20?= =?UTF-8?q?=D0=B0=D0=B4=D0=BC=D0=B8=D0=BD=D0=B2=D0=B5=D1=80=D0=B1=20=D1=82?= =?UTF-8?q?=D0=B5=D0=BF=D0=B5=D1=80=D1=8C=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=B0=D0=B5=D1=82=20=D0=B1=D0=BE=D0=BB=D0=B5=D0=B5=20=D0=BA?= =?UTF-8?q?=D0=BE=D1=80=D1=80=D0=B5=D0=BA=D1=82=D0=BD=D0=BE=20(#465)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../_White/Wizard/WizardRuleSystem.cs | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/Content.Server/_White/Wizard/WizardRuleSystem.cs b/Content.Server/_White/Wizard/WizardRuleSystem.cs index 170e1a3b54..e33eb21833 100644 --- a/Content.Server/_White/Wizard/WizardRuleSystem.cs +++ b/Content.Server/_White/Wizard/WizardRuleSystem.cs @@ -21,6 +21,7 @@ using Robust.Shared.Map; using Robust.Shared.Player; using Robust.Shared.Prototypes; using System.Linq; +using Content.Server.Administration.Commands; using Content.Server.Objectives; using Content.Server.Station.Components; using Content.Server.StationEvents.Components; @@ -280,7 +281,7 @@ public sealed class WizardRuleSystem : GameRuleSystem return true; } - private HumanoidCharacterProfile SetupWizardEntity( + private void SetupWizardEntity( EntityUid mob, StartingGearPrototype gear, bool endRoundOnDeath, @@ -311,14 +312,12 @@ public sealed class WizardRuleSystem : GameRuleSystem _humanoid.LoadProfile(mob, profile); _metaData.SetEntityName(mob, GetRandom(component.Name, "")); - } - _stationSpawning.EquipStartingGear(mob, gear); + _stationSpawning.EquipStartingGear(mob, gear); + } _npcFaction.RemoveFaction(mob, "NanoTrasen", false); _npcFaction.AddFaction(mob, "Wizard"); - - return profile; } private EntityCoordinates WizardSpawnPoint(WizardRuleComponent component) @@ -375,7 +374,8 @@ public sealed class WizardRuleSystem : GameRuleSystem return; } - var name = SetupWizardEntity(mob, gear, true).Name; + SetupWizardEntity(mob, gear, true); + var name = !TryComp(mob, out var meta) || meta.EntityName == "" ? "" : meta.EntityName; var newMind = _mind.CreateMind(session.UserId, name); _mind.SetUserId(newMind, session.UserId); @@ -468,7 +468,14 @@ public sealed class WizardRuleSystem : GameRuleSystem return false; } - SetupWizardEntity(wizard, gear, false); + if (!SpawnMap((wizard, rule))) + { + _sawmill.Info("Failed to load shuttle for wizard"); + return false; + } + + SetupWizardEntity(wizard, gear, false, false); + SetOutfitCommand.SetOutfit(wizard, gear.ID, EntityManager); var spawnpoint = WizardSpawnPoint(rule); var transform = EnsureComp(wizard); From 42b4aa4cefc056244a353e760829b67b6e405e92 Mon Sep 17 00:00:00 2001 From: RavmorganButOnCocaine Date: Fri, 19 Jul 2024 14:43:35 +0000 Subject: [PATCH 02/11] Automatic changelog update --- Resources/Changelog/ChangelogWhite.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Resources/Changelog/ChangelogWhite.yml b/Resources/Changelog/ChangelogWhite.yml index 0dc6923ae6..74a291f990 100644 --- a/Resources/Changelog/ChangelogWhite.yml +++ b/Resources/Changelog/ChangelogWhite.yml @@ -6106,3 +6106,14 @@ id: 394 time: '2024-07-19T12:52:57.0000000+00:00' url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/463 +- author: Spatison + changes: + - message: "\u0421\u043F\u0430\u0432\u043D \u043C\u0430\u0433\u0430 \u0447\u0435\ + \u0440\u0435\u0437 \u0430\u0434\u043C\u0438\u043D\u0432\u0435\u0440\u0431 \u0442\ + \u0435\u043F\u0435\u0440\u044C \u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442\ + \ \u0431\u043E\u043B\u0435\u0435 \u043A\u043E\u0440\u0440\u0435\u043A\u0442\u043D\ + \u043E" + type: Fix + id: 395 + time: '2024-07-19T14:42:32.0000000+00:00' + url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/465 From 781e266fc2e6fe28791ed70f5f0f1667c73c46d8 Mon Sep 17 00:00:00 2001 From: Aviu00 <93730715+Aviu00@users.noreply.github.com> Date: Fri, 19 Jul 2024 16:27:01 +0000 Subject: [PATCH 03/11] =?UTF-8?q?=D0=A2=D0=B5=D1=80=D0=BC=D0=B0=D0=BB?= =?UTF-8?q?=D0=BA=D0=B8=20(#466)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * - add: Rewrite night vision. * - add: Thermals. * - remove: Remove stuff from maps. * - fix: Descriptions. --- Content.Client/Gameplay/GameplayStateBase.cs | 8 ++ .../Weapons/Melee/MeleeWeaponSystem.cs | 4 +- .../Weapons/Ranged/Systems/GunSystem.cs | 2 +- .../_White/Overlays/NightVisionOverlay.cs | 37 ++++-- .../_White/Overlays/NightVisionSystem.cs | 18 ++- .../_White/Overlays/ThermalVisionOverlay.cs | 103 +++++++++++++++++ .../_White/Overlays/ThermalVisionSystem.cs | 109 ++++++++++++++++++ .../Changeling/ChangelingSystem.Abilities.cs | 15 +++ .../Changeling/ChangelingSystem.Shop.cs | 1 + .../_Miracle/Systems/ThermalVisionSystem.cs | 7 ++ .../Systems/SharedThermalVisionSystem.cs | 60 ++++++++++ .../_White/Overlays/BaseNvOverlayComponent.cs | 19 +++ .../_White/Overlays/NightVisionComponent.cs | 13 +-- .../Overlays/TemporaryNightVisionComponent.cs | 13 +-- .../TemporaryThermalVisionComponent.cs | 10 ++ .../_White/Overlays/ThermalVisionComponent.cs | 29 +++++ .../Locale/ru-RU/research/technologies.ftl | 1 + .../Locale/ru-RU/store/uplink-catalog.ftl | 3 + .../ru-RU/white/actions/thermal-vision.ftl | 2 + .../white/changeling/changeling-entities.ftl | 2 +- Resources/Maps/Dungeon/snowy_labs.yml | 15 --- Resources/Maps/atlas.yml | 9 -- Resources/Maps/bagel.yml | 17 --- Resources/Maps/fland.yml | 22 ---- Resources/Maps/marathon.yml | 12 -- Resources/Maps/meta.yml | 12 -- Resources/Maps/packed.yml | 7 -- .../Entities/Clothing/Eyes/glasses.yml | 29 ++++- .../Clothing/Head/hardsuit-helmets.yml | 1 + .../Entities/Markers/Spawners/techspawner.yml | 1 + .../Entities/Structures/Machines/lathe.yml | 1 + .../Prototypes/Procedural/salvage_loot.yml | 2 + Resources/Prototypes/_White/Actions/types.yml | 14 +++ .../Prototypes/_White/Catalog/uplink.yml | 32 +++++ .../_White/Recipes/lathe_recipes.yml | 10 ++ .../_White/Research/experimental.yml | 12 ++ 36 files changed, 514 insertions(+), 138 deletions(-) create mode 100644 Content.Client/_White/Overlays/ThermalVisionOverlay.cs create mode 100644 Content.Client/_White/Overlays/ThermalVisionSystem.cs create mode 100644 Content.Server/_Miracle/Systems/ThermalVisionSystem.cs create mode 100644 Content.Shared/_Miracle/Systems/SharedThermalVisionSystem.cs create mode 100644 Content.Shared/_White/Overlays/BaseNvOverlayComponent.cs create mode 100644 Content.Shared/_White/Overlays/TemporaryThermalVisionComponent.cs create mode 100644 Content.Shared/_White/Overlays/ThermalVisionComponent.cs create mode 100644 Resources/Locale/ru-RU/white/actions/thermal-vision.ftl diff --git a/Content.Client/Gameplay/GameplayStateBase.cs b/Content.Client/Gameplay/GameplayStateBase.cs index 6236cd8e95..cfcb6367e9 100644 --- a/Content.Client/Gameplay/GameplayStateBase.cs +++ b/Content.Client/Gameplay/GameplayStateBase.cs @@ -2,6 +2,7 @@ using System.Linq; using System.Numerics; using Content.Client.Clickable; using Content.Client.UserInterface; +using Content.Shared.Damage; using Content.Shared.Input; using Robust.Client.ComponentTrees; using Robust.Client.GameObjects; @@ -102,6 +103,13 @@ namespace Content.Client.Gameplay return first.IsValid() ? first : null; } + public EntityUid? GetDamageableClickedEntity(MapCoordinates coordinates) // WD + { + var first = GetClickableEntities(coordinates) + .FirstOrDefault(e => _entityManager.HasComponent(e)); + return first.IsValid() ? first : null; + } + public IEnumerable GetClickableEntities(EntityCoordinates coordinates) { return GetClickableEntities(coordinates.ToMap(_entityManager, _entitySystemManager.GetEntitySystem())); diff --git a/Content.Client/Weapons/Melee/MeleeWeaponSystem.cs b/Content.Client/Weapons/Melee/MeleeWeaponSystem.cs index 0298b5de46..bb96d478e3 100644 --- a/Content.Client/Weapons/Melee/MeleeWeaponSystem.cs +++ b/Content.Client/Weapons/Melee/MeleeWeaponSystem.cs @@ -121,7 +121,7 @@ public sealed partial class MeleeWeaponSystem : SharedMeleeWeaponSystem if (_stateManager.CurrentState is GameplayStateBase screen) { - target = screen.GetClickedEntity(mousePos); + target = screen.GetDamageableClickedEntity(mousePos); // WD EDIT } EntityManager.RaisePredictiveEvent(new DisarmAttackEvent(GetNetEntity(target), GetNetCoordinates(coordinates))); @@ -169,7 +169,7 @@ public sealed partial class MeleeWeaponSystem : SharedMeleeWeaponSystem if (_stateManager.CurrentState is GameplayStateBase screen) { - target = screen.GetClickedEntity(mousePos); + target = screen.GetDamageableClickedEntity(mousePos); // WD EDIT } // Don't light-attack if interaction will be handling this instead diff --git a/Content.Client/Weapons/Ranged/Systems/GunSystem.cs b/Content.Client/Weapons/Ranged/Systems/GunSystem.cs index b095ff9eb4..2426d39872 100644 --- a/Content.Client/Weapons/Ranged/Systems/GunSystem.cs +++ b/Content.Client/Weapons/Ranged/Systems/GunSystem.cs @@ -190,7 +190,7 @@ public sealed partial class GunSystem : SharedGunSystem EntityUid? shootingTarget = null; if (_state.CurrentState is GameplayStateBase screen) - shootingTarget = screen.GetClickedEntity(mousePos); + shootingTarget = screen.GetDamageableClickedEntity(mousePos); EntityManager.RaisePredictiveEvent(new RequestShootEvent { diff --git a/Content.Client/_White/Overlays/NightVisionOverlay.cs b/Content.Client/_White/Overlays/NightVisionOverlay.cs index ffc98c1294..0ed82b8d4d 100644 --- a/Content.Client/_White/Overlays/NightVisionOverlay.cs +++ b/Content.Client/_White/Overlays/NightVisionOverlay.cs @@ -31,23 +31,28 @@ namespace Content.Client._White.Overlays var handle = args.WorldHandle; + if (_playerManager.LocalEntity == null) + return; + + var uid = _playerManager.LocalEntity.Value; + Color? color = null; - if (_entityManager.TryGetComponent(_playerManager.LocalSession?.AttachedEntity, - out var component) && component.IsActive) + if (_entityManager.TryGetComponent(uid, out var component) && component.IsActive) { - _shader.SetParameter("tint", component.Tint); - _shader.SetParameter("luminance_threshold", component.Strength); - _shader.SetParameter("noise_amount", component.Noise); - color = component.Color; + color = SetParameters(component); } - else if (_entityManager.TryGetComponent( - _playerManager.LocalSession?.AttachedEntity, out var tempNvComp)) + else if (_entityManager.TryGetComponent(uid, out var thermal) && thermal.IsActive) { - _shader.SetParameter("tint", tempNvComp.Tint); - _shader.SetParameter("luminance_threshold", tempNvComp.Strength); - _shader.SetParameter("noise_amount", tempNvComp.Noise); - color = tempNvComp.Color; + color = SetParameters(thermal); + } + else if (_entityManager.TryGetComponent(uid, out var tempNvComp)) + { + color = SetParameters(tempNvComp); + } + else if (_entityManager.TryGetComponent(uid, out var tempThermal)) + { + color = SetParameters(tempThermal); } if (color == null) @@ -59,5 +64,13 @@ namespace Content.Client._White.Overlays handle.DrawRect(args.WorldBounds, color.Value); handle.UseShader(null); } + + private Color SetParameters(BaseNvOverlayComponent component) + { + _shader.SetParameter("tint", component.Tint); + _shader.SetParameter("luminance_threshold", component.Strength); + _shader.SetParameter("noise_amount", component.Noise); + return component.Color; + } } } diff --git a/Content.Client/_White/Overlays/NightVisionSystem.cs b/Content.Client/_White/Overlays/NightVisionSystem.cs index 00934c5765..92d7d88ac3 100644 --- a/Content.Client/_White/Overlays/NightVisionSystem.cs +++ b/Content.Client/_White/Overlays/NightVisionSystem.cs @@ -72,6 +72,7 @@ public sealed class NightVisionSystem : SharedNightVisionSystem if (_player.LocalSession != player) return; + UpdateOverlay(active); UpdateNightVision(active); } @@ -80,16 +81,31 @@ public sealed class NightVisionSystem : SharedNightVisionSystem if (_player.LocalSession?.AttachedEntity != uid) return; + UpdateOverlay(active); UpdateNightVision(active); } - private void UpdateNightVision(bool active) + public void UpdateOverlay(bool active) { + if (_player.LocalEntity == null) + { + _overlayMan.RemoveOverlay(_overlay); + return; + } + + var uid = _player.LocalEntity.Value; + active |= TryComp(uid, out var nv) && nv.IsActive || + TryComp(uid, out var thermal) && thermal.IsActive || + HasComp(uid) || + HasComp(uid); if (active) _overlayMan.AddOverlay(_overlay); else _overlayMan.RemoveOverlay(_overlay); + } + private void UpdateNightVision(bool active) + { _lightManager.DrawLighting = !active; } diff --git a/Content.Client/_White/Overlays/ThermalVisionOverlay.cs b/Content.Client/_White/Overlays/ThermalVisionOverlay.cs new file mode 100644 index 0000000000..ace9bfaf5a --- /dev/null +++ b/Content.Client/_White/Overlays/ThermalVisionOverlay.cs @@ -0,0 +1,103 @@ +using System.Linq; +using System.Numerics; +using Content.Shared._White.Overlays; +using Content.Shared.Body.Components; +using Robust.Client.GameObjects; +using Robust.Client.Graphics; +using Robust.Client.Player; +using Robust.Shared.Enums; +using Robust.Shared.Map; + +namespace Content.Client._White.Overlays; + +public sealed class ThermalVisionOverlay : Overlay +{ + [Dependency] private readonly IEntityManager _entity = default!; + [Dependency] private readonly IPlayerManager _players = default!; + + private readonly ContainerSystem _container; + private readonly TransformSystem _transform; + private readonly OccluderSystem _occluder; + + public override OverlaySpace Space => OverlaySpace.WorldSpace; + + private readonly List _entries = new(); + + public ThermalVisionOverlay() + { + IoCManager.InjectDependencies(this); + + _container = _entity.System(); + _transform = _entity.System(); + _occluder = _entity.System(); + ZIndex = -1; + } + + protected override void Draw(in OverlayDrawArgs args) + { + if (_players.LocalEntity == null) + return; + + var ent = _players.LocalEntity.Value; + + if ((!_entity.TryGetComponent(ent, out ThermalVisionComponent? component) || !component.IsActive) && + !_entity.HasComponent(ent)) + { + return; + } + + if (HasOccluders(ent)) + 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 _, out var sprite, out var xform)) + { + if (HasOccluders(uid)) + continue; + + _entries.Add(new NightVisionRenderEntry((uid, sprite, xform), + eye?.Position.MapId, + eyeRot)); + } + + foreach (var entry in _entries) + { + Render(entry.Ent, entry.Map, handle, entry.EyeRot); + } + + handle.SetTransform(Matrix3.Identity); + } + + private void Render(Entity ent, + MapId? map, + DrawingHandleWorld handle, + Angle eyeRot) + { + var (uid, sprite, xform) = ent; + if (xform.MapID != map || _container.IsEntityOrParentInContainer(uid)) + return; + + var position = _transform.GetWorldPosition(xform); + var rotation = _transform.GetWorldRotation(xform); + + sprite.Render(handle, eyeRot, rotation, position: position); + } + + private bool HasOccluders(EntityUid ent) + { + var mapCoordinates = _transform.GetMapCoordinates(ent); + var occluders = _occluder.QueryAabb(mapCoordinates.MapId, + Box2.CenteredAround(mapCoordinates.Position, new Vector2(0.4f, 0.4f))); + return occluders.Any(o => o.Component.Enabled); + } +} + +public record struct NightVisionRenderEntry( + (EntityUid, SpriteComponent, TransformComponent) Ent, + MapId? Map, + Angle EyeRot); diff --git a/Content.Client/_White/Overlays/ThermalVisionSystem.cs b/Content.Client/_White/Overlays/ThermalVisionSystem.cs new file mode 100644 index 0000000000..42457c0bb5 --- /dev/null +++ b/Content.Client/_White/Overlays/ThermalVisionSystem.cs @@ -0,0 +1,109 @@ +using Content.Shared._Miracle.Systems; +using Content.Shared.GameTicking; +using Content.Shared._White.Overlays; +using Robust.Client.Graphics; +using Robust.Client.Player; +using Robust.Shared.Player; + +namespace Content.Client._White.Overlays; + +public sealed class ThermalVisionSystem : SharedThermalVisionSystem +{ + [Dependency] private readonly IPlayerManager _player = default!; + [Dependency] private readonly IOverlayManager _overlayMan = default!; + [Dependency] private readonly NightVisionSystem _nv = default!; + + private ThermalVisionOverlay _overlay = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnPlayerAttached); + SubscribeLocalEvent(OnPlayerDetached); + SubscribeLocalEvent(OnRestart); + + SubscribeLocalEvent(OnTempInit); + SubscribeLocalEvent(OnTempRemove); + SubscribeLocalEvent(OnTempPlayerAttached); + SubscribeLocalEvent(OnTempPlayerDetached); + + _overlay = new ThermalVisionOverlay(); + } + + private void OnTempPlayerAttached(Entity ent, ref PlayerAttachedEvent args) + { + UpdateThermalVision(args.Player, true); + } + + private void OnTempPlayerDetached(Entity ent, ref PlayerDetachedEvent args) + { + UpdateThermalVision(args.Player, false); + } + + private void OnTempRemove(Entity ent, ref ComponentRemove args) + { + if (TryComp(ent, out ThermalVisionComponent? thermalVision) && thermalVision.IsActive) + return; + + UpdateThermalVision(ent, false); + } + + private void OnTempInit(Entity ent, ref ComponentInit args) + { + UpdateThermalVision(ent, true); + } + + private void OnPlayerAttached(EntityUid uid, ThermalVisionComponent component, PlayerAttachedEvent args) + { + if (!component.IsActive && HasComp(args.Entity)) + return; + + UpdateThermalVision(args.Player, component.IsActive); + } + + private void OnPlayerDetached(EntityUid uid, ThermalVisionComponent component, PlayerDetachedEvent args) + { + UpdateThermalVision(args.Player, false); + } + + private void UpdateThermalVision(ICommonSession player, bool active) + { + if (_player.LocalSession != player) + return; + + _nv.UpdateOverlay(active); + UpdateThermalVision(active); + } + + protected override void UpdateThermalVision(EntityUid uid, bool active) + { + if (_player.LocalSession?.AttachedEntity != uid) + return; + + _nv.UpdateOverlay(active); + UpdateThermalVision(active); + } + + public void UpdateThermalVision(bool active) + { + if (_player.LocalEntity == null) + { + _overlayMan.RemoveOverlay(_overlay); + return; + } + + var uid = _player.LocalEntity.Value; + active |= TryComp(uid, out var thermal) && thermal.IsActive || + HasComp(uid); + if (active) + _overlayMan.AddOverlay(_overlay); + else + _overlayMan.RemoveOverlay(_overlay); + } + + private void OnRestart(RoundRestartCleanupEvent ev) + { + _overlayMan.RemoveOverlay(_overlay); + } +} diff --git a/Content.Server/Changeling/ChangelingSystem.Abilities.cs b/Content.Server/Changeling/ChangelingSystem.Abilities.cs index 8e87a63927..b9e765d626 100644 --- a/Content.Server/Changeling/ChangelingSystem.Abilities.cs +++ b/Content.Server/Changeling/ChangelingSystem.Abilities.cs @@ -672,12 +672,14 @@ public sealed partial class ChangelingSystem if (HasComp(ent)) { RemComp(ent); + RemComp(ent); EnsureComp(ent); EnsureComp(ent); return; } EnsureComp(ent); + EnsureComp(ent); RemComp(ent); RemComp(ent); } @@ -1054,6 +1056,19 @@ public sealed partial class ChangelingSystem EntityManager.AddComponent(to, toAdd); } + if (TryComp(from, out TemporaryThermalVisionComponent? thermal)) + { + var toAdd = new TemporaryThermalVisionComponent + { + Color = thermal.Color, + Tint = thermal.Tint, + Strength = thermal.Strength, + Noise = thermal.Noise + }; + + EntityManager.AddComponent(to, toAdd); + } + if (TryComp(from, out NpcFactionMemberComponent? factionMember)) { _faction.ClearFactions(to); diff --git a/Content.Server/Changeling/ChangelingSystem.Shop.cs b/Content.Server/Changeling/ChangelingSystem.Shop.cs index ddf691767c..9dbc95fc55 100644 --- a/Content.Server/Changeling/ChangelingSystem.Shop.cs +++ b/Content.Server/Changeling/ChangelingSystem.Shop.cs @@ -28,6 +28,7 @@ public sealed partial class ChangelingSystem RemComp(ent); RemComp(ent); RemComp(ent); + RemComp(ent); RemComp(ent); foreach (var hand in _handsSystem.EnumerateHands(ent)) diff --git a/Content.Server/_Miracle/Systems/ThermalVisionSystem.cs b/Content.Server/_Miracle/Systems/ThermalVisionSystem.cs new file mode 100644 index 0000000000..5d13e52fa7 --- /dev/null +++ b/Content.Server/_Miracle/Systems/ThermalVisionSystem.cs @@ -0,0 +1,7 @@ +using Content.Shared._Miracle.Systems; + +namespace Content.Server._Miracle.Systems; + +public sealed class ThermalVisionSystem : SharedThermalVisionSystem +{ +} diff --git a/Content.Shared/_Miracle/Systems/SharedThermalVisionSystem.cs b/Content.Shared/_Miracle/Systems/SharedThermalVisionSystem.cs new file mode 100644 index 0000000000..08bc64675a --- /dev/null +++ b/Content.Shared/_Miracle/Systems/SharedThermalVisionSystem.cs @@ -0,0 +1,60 @@ +using Content.Shared._White.Overlays; +using Content.Shared.Actions; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Timing; + +namespace Content.Shared._Miracle.Systems; + +public abstract class SharedThermalVisionSystem : EntitySystem +{ + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly SharedActionsSystem _actions = default!; + [Dependency] private readonly IGameTiming _timing = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnToggle); + SubscribeLocalEvent(OnInit); + SubscribeLocalEvent(OnRemove); + } + + private void OnRemove(EntityUid uid, ThermalVisionComponent component, ComponentRemove args) + { + _actions.RemoveAction(uid, component.ToggleActionEntity); + + if (HasComp(uid)) + return; + + UpdateThermalVision(uid, false); + } + + private void OnInit(EntityUid uid, ThermalVisionComponent component, ComponentInit args) + { + _actions.AddAction(uid, ref component.ToggleActionEntity, component.ToggleAction); + + if (!component.IsActive && HasComp(uid)) + return; + + UpdateThermalVision(uid, component.IsActive); + } + + protected virtual void UpdateThermalVision(EntityUid uid, bool active) { } + + private void OnToggle(EntityUid uid, ThermalVisionComponent component, ToggleThermalVisionEvent args) + { + if (!_timing.IsFirstTimePredicted) + return; + + component.IsActive = !component.IsActive; + _audio.PlayPredicted(component.ToggleSound, uid, uid); + + args.Handled = true; + + if (!component.IsActive && HasComp(uid)) + return; + + UpdateThermalVision(uid, component.IsActive); + } +} diff --git a/Content.Shared/_White/Overlays/BaseNvOverlayComponent.cs b/Content.Shared/_White/Overlays/BaseNvOverlayComponent.cs new file mode 100644 index 0000000000..40901f39a9 --- /dev/null +++ b/Content.Shared/_White/Overlays/BaseNvOverlayComponent.cs @@ -0,0 +1,19 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared._White.Overlays; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public abstract partial class BaseNvOverlayComponent : Component +{ + [DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] + public virtual Vector3 Tint { get; set; } = new(0.3f, 0.3f, 0.3f); + + [DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] + public virtual float Strength { get; set; } = 2f; + + [DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] + public virtual float Noise { get; set; } = 0.5f; + + [DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] + public virtual Color Color { get; set; } = Color.FromHex("#98FB98"); +} diff --git a/Content.Shared/_White/Overlays/NightVisionComponent.cs b/Content.Shared/_White/Overlays/NightVisionComponent.cs index 54f0baeea6..3ffb5b860d 100644 --- a/Content.Shared/_White/Overlays/NightVisionComponent.cs +++ b/Content.Shared/_White/Overlays/NightVisionComponent.cs @@ -6,19 +6,10 @@ using Robust.Shared.Prototypes; namespace Content.Shared._White.Overlays; [RegisterComponent, NetworkedComponent, AutoGenerateComponentState] -public sealed partial class NightVisionComponent : Component +public sealed partial class NightVisionComponent : BaseNvOverlayComponent { [DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] - public Vector3 Tint = new(0.3f, 0.3f, 0.3f); - - [DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] - public float Strength = 2f; - - [DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] - public float Noise = 0.5f; - - [DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] - public Color Color = Color.FromHex("#98FB98"); + public override Color Color { get; set; } = Color.FromHex("#98FB98"); [DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] public bool IsActive = true; diff --git a/Content.Shared/_White/Overlays/TemporaryNightVisionComponent.cs b/Content.Shared/_White/Overlays/TemporaryNightVisionComponent.cs index cc4d4aba22..141480b517 100644 --- a/Content.Shared/_White/Overlays/TemporaryNightVisionComponent.cs +++ b/Content.Shared/_White/Overlays/TemporaryNightVisionComponent.cs @@ -3,17 +3,8 @@ using Robust.Shared.GameStates; namespace Content.Shared._White.Overlays; [RegisterComponent, NetworkedComponent, AutoGenerateComponentState] -public sealed partial class TemporaryNightVisionComponent : Component +public sealed partial class TemporaryNightVisionComponent : BaseNvOverlayComponent { [DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] - public Vector3 Tint = new(0.3f, 0.3f, 0.3f); - - [DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] - public float Strength = 2f; - - [DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] - public float Noise = 0.5f; - - [DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] - public Color Color = Color.FromHex("#FB9898"); + public override Color Color { get; set; } = Color.FromHex("#FB9898"); } diff --git a/Content.Shared/_White/Overlays/TemporaryThermalVisionComponent.cs b/Content.Shared/_White/Overlays/TemporaryThermalVisionComponent.cs new file mode 100644 index 0000000000..1a8dc8eb1c --- /dev/null +++ b/Content.Shared/_White/Overlays/TemporaryThermalVisionComponent.cs @@ -0,0 +1,10 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared._White.Overlays; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class TemporaryThermalVisionComponent : BaseNvOverlayComponent +{ + [DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] + public override Color Color { get; set; } = Color.FromHex("#FB9898"); +} diff --git a/Content.Shared/_White/Overlays/ThermalVisionComponent.cs b/Content.Shared/_White/Overlays/ThermalVisionComponent.cs new file mode 100644 index 0000000000..cbd786d225 --- /dev/null +++ b/Content.Shared/_White/Overlays/ThermalVisionComponent.cs @@ -0,0 +1,29 @@ +using Content.Shared.Actions; +using Robust.Shared.Audio; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared._White.Overlays; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class ThermalVisionComponent : BaseNvOverlayComponent +{ + [DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] + public override Color Color { get; set; } = Color.FromHex("#F84742"); + + [DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] + public bool IsActive = true; + + [DataField] + public SoundSpecifier? ToggleSound = new SoundPathSpecifier("/Audio/Items/flashlight_pda.ogg"); + + [DataField] + public EntProtoId? ToggleAction = "ToggleThermalVision"; + + [ViewVariables] + public EntityUid? ToggleActionEntity; +} + +public sealed partial class ToggleThermalVisionEvent : InstantActionEvent +{ +} diff --git a/Resources/Locale/ru-RU/research/technologies.ftl b/Resources/Locale/ru-RU/research/technologies.ftl index 065187db6a..6513155c8c 100644 --- a/Resources/Locale/ru-RU/research/technologies.ftl +++ b/Resources/Locale/ru-RU/research/technologies.ftl @@ -70,4 +70,5 @@ research-technology-advanced-spray = Продвинутые спреи research-technology-bluespace-cargo-transport = Блюспейс-транспортировка грузов research-technology-quantum-fiber-weaving = Плетение квантового волокна research-technology-night-vision = Технологии ночного видения +research-technology-thermal-vision = Технологии термального видения research-technology-bluespace-chemistry = Блюспейс химия diff --git a/Resources/Locale/ru-RU/store/uplink-catalog.ftl b/Resources/Locale/ru-RU/store/uplink-catalog.ftl index 32749b0a62..4c35d521d9 100644 --- a/Resources/Locale/ru-RU/store/uplink-catalog.ftl +++ b/Resources/Locale/ru-RU/store/uplink-catalog.ftl @@ -444,6 +444,9 @@ uplink-blood-dagger-desc = Критическая жажда: Кинжал Жа uplink-night-vision-name = ПНВ [Хамелеон] uplink-night-vision-desc = Теперь ты видишь во тьме! +uplink-thermal-vision-name = Оптический термальный сканер [Хамелеон] +uplink-thermal-vision-desc = Позволяет вам видеть существ через стены. + uplink-betrayal-knife-name = Предательский нож uplink-betrayal-knife-desc = Предательский нож позволяет пользователю телепортироваться на короткое расстояние, а также наносит значительные повреждения, пробивая броню противника, при ударе в спину. diff --git a/Resources/Locale/ru-RU/white/actions/thermal-vision.ftl b/Resources/Locale/ru-RU/white/actions/thermal-vision.ftl new file mode 100644 index 0000000000..df580d2b2f --- /dev/null +++ b/Resources/Locale/ru-RU/white/actions/thermal-vision.ftl @@ -0,0 +1,2 @@ +ent-ToggleThermalVision = Переключить термальное зрение. + .desc = Переключает термальное зрение. diff --git a/Resources/Locale/ru-RU/white/changeling/changeling-entities.ftl b/Resources/Locale/ru-RU/white/changeling/changeling-entities.ftl index 27f6c1e246..89f3a8eb2e 100644 --- a/Resources/Locale/ru-RU/white/changeling/changeling-entities.ftl +++ b/Resources/Locale/ru-RU/white/changeling/changeling-entities.ftl @@ -5,7 +5,7 @@ changeling-ability-biodegrade = Биоразложение changeling-ability-biodegrade-desc = Растворяет наручники и прочие сдерживающие элементы. Стоит 30 химикатов. changeling-ability-eyesight = Аугментация зрения -changeling-ability-eyesight-desc = Развивает переключаемое ночное зрение. Когда способность неактивна, защищает вас от флешек и яркого света, например от сварки. +changeling-ability-eyesight-desc = Развивает переключаемое ночное и термальное зрение. Когда способность неактивна, защищает вас от флешек и яркого света, например от сварки. changeling-ability-dissonant-shriek = Диссонирующий вопль changeling-ability-dissonant-shriek-desc = Испускает заряд ЭМИ, который нарушает работу всего оборудования вокруг. Стоит 20 химикатов. diff --git a/Resources/Maps/Dungeon/snowy_labs.yml b/Resources/Maps/Dungeon/snowy_labs.yml index 1211d7a664..66bd615ed1 100644 --- a/Resources/Maps/Dungeon/snowy_labs.yml +++ b/Resources/Maps/Dungeon/snowy_labs.yml @@ -7034,13 +7034,6 @@ entities: - type: Transform pos: 10.480986,45.607067 parent: 1653 -- proto: ClothingEyesGlassesThermal - entities: - - uid: 800 - components: - - type: Transform - pos: 6.5116234,25.568321 - parent: 1653 - proto: ClothingHandsGlovesLeather entities: - uid: 719 @@ -10731,14 +10724,6 @@ entities: rot: -1.5707963267948966 rad pos: 52.5,14.5 parent: 1653 -- proto: MagicalLamp - entities: - - uid: 1204 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 1.5085075,47.438328 - parent: 1653 - proto: MaintenanceFluffSpawner entities: - uid: 1245 diff --git a/Resources/Maps/atlas.yml b/Resources/Maps/atlas.yml index 1ce74026c9..f5c7f31418 100644 --- a/Resources/Maps/atlas.yml +++ b/Resources/Maps/atlas.yml @@ -18251,15 +18251,6 @@ entities: parent: 30 - type: Physics canCollide: False -- proto: ClothingEyesGlassesThermal - entities: - - uid: 7267 - components: - - type: Transform - pos: -31.624142,-1.1191435 - parent: 30 - - type: Physics - canCollide: False - proto: ClothingHandsGlovesColorYellow entities: - uid: 1668 diff --git a/Resources/Maps/bagel.yml b/Resources/Maps/bagel.yml index 3e86095fa4..7b8dd2e9ed 100644 --- a/Resources/Maps/bagel.yml +++ b/Resources/Maps/bagel.yml @@ -58677,23 +58677,6 @@ entities: - type: Transform pos: 14.470102,-43.56056 parent: 60 -- proto: ClothingEyesGlassesThermal - entities: - - uid: 15400 - components: - - type: Transform - pos: -17.455568,32.420967 - parent: 60 - - uid: 15402 - components: - - type: Transform - pos: -17.455568,32.624092 - parent: 60 - - uid: 23570 - components: - - type: Transform - pos: -62.52358,41.396984 - parent: 60 - proto: ClothingHandsGlovesBoxingBlue entities: - uid: 19920 diff --git a/Resources/Maps/fland.yml b/Resources/Maps/fland.yml index 28018bb4c8..89b2f86c15 100644 --- a/Resources/Maps/fland.yml +++ b/Resources/Maps/fland.yml @@ -93553,28 +93553,6 @@ entities: - type: Transform pos: 102.52885,13.515509 parent: 13329 -- proto: ClothingEyesGlassesThermal - entities: - - uid: 31732 - components: - - type: Transform - pos: 65.539406,-14.949457 - parent: 13329 - - uid: 31733 - components: - - type: Transform - pos: 70.49054,-5.808993 - parent: 13329 - - uid: 31734 - components: - - type: Transform - pos: 70.47884,-26.373547 - parent: 13329 - - uid: 31735 - components: - - type: Transform - pos: 70.57259,-26.498547 - parent: 13329 - proto: ClothingEyesHudBeer entities: - uid: 31731 diff --git a/Resources/Maps/marathon.yml b/Resources/Maps/marathon.yml index f6ce22872b..10eba2385c 100644 --- a/Resources/Maps/marathon.yml +++ b/Resources/Maps/marathon.yml @@ -51820,18 +51820,6 @@ entities: - type: Transform pos: 47.465996,44.649086 parent: 30 -- proto: ClothingEyesGlassesThermal - entities: - - uid: 9441 - components: - - type: Transform - pos: 5.522977,-23.530071 - parent: 30 - - uid: 10010 - components: - - type: Transform - pos: -13.542964,-45.170254 - parent: 30 - proto: ClothingEyesHudDiagnostic entities: - uid: 11291 diff --git a/Resources/Maps/meta.yml b/Resources/Maps/meta.yml index aab725e956..8c2236c71a 100644 --- a/Resources/Maps/meta.yml +++ b/Resources/Maps/meta.yml @@ -60170,18 +60170,6 @@ entities: - type: Transform pos: 66.56803,33.64219 parent: 5350 -- proto: ClothingEyesGlassesThermal - entities: - - uid: 23947 - components: - - type: Transform - pos: 55.407906,-5.421943 - parent: 5350 - - uid: 23948 - components: - - type: Transform - pos: 55.501656,-5.562568 - parent: 5350 - proto: ClothingEyesHudMedical entities: - uid: 14922 diff --git a/Resources/Maps/packed.yml b/Resources/Maps/packed.yml index cf8b8afe68..94efc6158a 100644 --- a/Resources/Maps/packed.yml +++ b/Resources/Maps/packed.yml @@ -32339,13 +32339,6 @@ entities: - type: Transform pos: 86.49675,1.6024053 parent: 2 -- proto: ClothingEyesGlassesThermal - entities: - - uid: 12673 - components: - - type: Transform - pos: 32.51945,-30.628448 - parent: 2 - proto: ClothingEyesHudDiagnostic entities: - uid: 11439 diff --git a/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml b/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml index e6c7626a6a..3191f44b3f 100644 --- a/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml +++ b/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml @@ -235,11 +235,30 @@ sprite: Clothing/Eyes/Glasses/thermal.rsi - type: Clothing sprite: Clothing/Eyes/Glasses/thermal.rsi - - type: Armor - modifiers: - coefficients: - Heat: 0.95 - - type: GroupExamine + - type: ClothingGrantComponent + component: + - type: ThermalVision + +- type: entity + parent: ClothingEyesGlassesThermal + id: ClothingEyesGlassesThermalSyndie + suffix: "Хамелеон" + components: + - type: ChameleonClothing + slot: [ eyes ] + default: ClothingEyesGlassesSunglasses + - type: UserInterface + interfaces: + - key: enum.ChameleonUiKey.Key + type: ChameleonBoundUserInterface + +- type: entity + parent: ClothingEyesGlassesThermalSyndie + id: ClothingEyesGlassesThermalNukie + suffix: "Хамелеон, Ядерные Оперативники" + components: + - type: ShowSyndicateIcons + - type: ShowSecurityIcons - type: entity parent: ClothingEyesBase diff --git a/Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml b/Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml index ded521045e..31b659e492 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml @@ -798,6 +798,7 @@ - type: ClothingGrantComponent component: - type: NightVision + - type: ThermalVision #MISC. HARDSUITS #Clown Hardsuit diff --git a/Resources/Prototypes/Entities/Markers/Spawners/techspawner.yml b/Resources/Prototypes/Entities/Markers/Spawners/techspawner.yml index d017841c8e..3a22d59307 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/techspawner.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/techspawner.yml @@ -601,6 +601,7 @@ - ExGrenade - SyndieMiniBomb - ClothingEyesNightVisionGogglesSyndie + - ClothingEyesGlassesThermalSyndie - ClothingOuterVestWeb - ClothingBackpackChameleonFill - CigPackSyndicate diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index 2c49476b98..f3c5fe87c5 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -343,6 +343,7 @@ - FauxTileAstroSnow - OreBagOfHolding - ClothingEyesNightVisionGoggles # WD EDIT + - ClothingEyesGlassesThermal # WD EDIT - KitchenKnife # WD EDIT - ButchCleaver # WD EDIT - WeaponTempGun # WD EDIT diff --git a/Resources/Prototypes/Procedural/salvage_loot.yml b/Resources/Prototypes/Procedural/salvage_loot.yml index 17bfe7ad02..e24591becd 100644 --- a/Resources/Prototypes/Procedural/salvage_loot.yml +++ b/Resources/Prototypes/Procedural/salvage_loot.yml @@ -153,6 +153,8 @@ prob: 0.5 - proto: ClothingEyesNightVisionGoggles cost: 8 + - proto: ClothingEyesGlassesThermal + cost: 8 - proto: ClothingHandsGlovesCombat cost: 3 - proto: Katana diff --git a/Resources/Prototypes/_White/Actions/types.yml b/Resources/Prototypes/_White/Actions/types.yml index ca4129de2b..b5967a28b9 100644 --- a/Resources/Prototypes/_White/Actions/types.yml +++ b/Resources/Prototypes/_White/Actions/types.yml @@ -42,6 +42,20 @@ state: icon event: !type:ToggleNightVisionEvent +- type: entity + id: ToggleThermalVision + name: Toggle thermal vision. + description: Toggles thermal vision. + noSpawn: true + components: + - type: InstantAction + itemIconStyle: BigAction + priority: -20 + icon: + sprite: Clothing/Eyes/Glasses/thermal.rsi + state: icon + event: !type:ToggleThermalVisionEvent + - type: entity id: ToggleBodyCamera name: Toggle body camera. diff --git a/Resources/Prototypes/_White/Catalog/uplink.yml b/Resources/Prototypes/_White/Catalog/uplink.yml index 7140266856..5797124322 100644 --- a/Resources/Prototypes/_White/Catalog/uplink.yml +++ b/Resources/Prototypes/_White/Catalog/uplink.yml @@ -135,6 +135,38 @@ tags: - NukeOpsUplink +- type: listing + id: UplinkThermalGoggles + name: uplink-thermal-vision-name + description: uplink-thermal-vision-desc + productEntity: ClothingEyesGlassesThermalSyndie + icon: { sprite: Clothing/Eyes/Glasses/thermal.rsi, state: icon } + cost: + Telecrystal: 3 + categories: + - UplinkWearables + conditions: + - !type:StoreWhitelistCondition + blacklist: + tags: + - NukeOpsUplink + +- type: listing + id: UplinkThermalGogglesNukie + name: uplink-thermal-vision-name + description: uplink-thermal-vision-desc + productEntity: ClothingEyesGlassesThermalNukie + icon: { sprite: Clothing/Eyes/Glasses/thermal.rsi, state: icon } + cost: + Telecrystal: 3 + categories: + - UplinkWearables + conditions: + - !type:StoreWhitelistCondition + whitelist: + tags: + - NukeOpsUplink + #- type: listing # id: UplinkBattleAxe # name: Энергетической боевой топор diff --git a/Resources/Prototypes/_White/Recipes/lathe_recipes.yml b/Resources/Prototypes/_White/Recipes/lathe_recipes.yml index c975c5cb99..f62c31ee4b 100644 --- a/Resources/Prototypes/_White/Recipes/lathe_recipes.yml +++ b/Resources/Prototypes/_White/Recipes/lathe_recipes.yml @@ -22,6 +22,16 @@ Silver: 100 Gold: 100 +- type: latheRecipe + id: ClothingEyesGlassesThermal + result: ClothingEyesGlassesThermal + completetime: 2 + materials: + Steel: 200 + Glass: 100 + Silver: 100 + Gold: 100 + - type: latheRecipe id: WeaponTempGun result: WeaponTempGun diff --git a/Resources/Prototypes/_White/Research/experimental.yml b/Resources/Prototypes/_White/Research/experimental.yml index 4ed13340fb..bd57be222c 100644 --- a/Resources/Prototypes/_White/Research/experimental.yml +++ b/Resources/Prototypes/_White/Research/experimental.yml @@ -10,3 +10,15 @@ cost: 10000 recipeUnlocks: - ClothingEyesNightVisionGoggles + +- type: technology + id: ThermalVisionTech + name: research-technology-thermal-vision + icon: + sprite: Clothing/Eyes/Glasses/thermal.rsi + state: icon + discipline: Experimental + tier: 2 + cost: 10000 + recipeUnlocks: + - ClothingEyesGlassesThermal From 2c4f3b2ddeb840ad9fbc328ec8709084496ddf8d Mon Sep 17 00:00:00 2001 From: RavmorganButOnCocaine Date: Fri, 19 Jul 2024 16:28:05 +0000 Subject: [PATCH 04/11] Automatic changelog update --- Resources/Changelog/ChangelogWhite.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/Resources/Changelog/ChangelogWhite.yml b/Resources/Changelog/ChangelogWhite.yml index 74a291f990..6533372a3c 100644 --- a/Resources/Changelog/ChangelogWhite.yml +++ b/Resources/Changelog/ChangelogWhite.yml @@ -6117,3 +6117,20 @@ id: 395 time: '2024-07-19T14:42:32.0000000+00:00' url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/465 +- author: Aviu + changes: + - message: "\u0420\u0430\u0431\u043E\u0447\u0438\u0435 \u0442\u0435\u0440\u043C\u0430\ + \u043B\u043A\u0438." + type: Add + - message: "\u0410\u0443\u0433\u043C\u0435\u043D\u0442\u0430\u0446\u0438\u044F \u0437\ + \u0440\u0435\u043D\u0438\u044F \u0433\u0435\u043D\u043E\u043A\u0440\u0430\u0434\ + \u0430 \u0434\u0430\u0435\u0442 \u0442\u0435\u0440\u043C\u0430\u043B\u044C\u043D\ + \u043E\u0435 \u0437\u0440\u0435\u043D\u0438\u0435." + type: Add + - message: "\u0423\u0431\u0440\u0430\u043D\u0430 \u043C\u0430\u0433\u0438\u0447\u0435\ + \u0441\u043A\u0430\u044F \u043B\u0430\u043C\u043F\u0430 \u0441 \u044D\u043A\u0441\ + \u043F\u0435\u0434\u0438\u0446\u0438\u0439." + type: Remove + id: 396 + time: '2024-07-19T16:27:02.0000000+00:00' + url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/466 From 9c4126d3a2765cd69fa4d37d61c21feb50c137b6 Mon Sep 17 00:00:00 2001 From: ThereDrD0 <88589686+ThereDrD0@users.noreply.github.com> Date: Sat, 20 Jul 2024 05:08:01 +0300 Subject: [PATCH 05/11] =?UTF-8?q?=D0=92=D1=81=D1=8F=D0=BA=D0=B8=D0=B5=20?= =?UTF-8?q?=D1=82=D0=B2=D0=B8=D0=BA=D0=B8=20(#467)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * tomato juice no longer slippery * flashbang rework * add starting gear support for flashbang rework * flash size and charges tweak * night and thermal vision tweaks * night vision is turned off by default * some size tweaks * cleanup * sunglasses and hardsuits tweak --- .../Explosion/EntitySystems/TriggerSystem.cs | 2 +- Content.Server/Flash/FlashSystem.cs | 8 ++- .../Components/FlashOnTriggerComponent.cs | 1 + .../Systems/SharedNightVisionSystem.cs | 6 ++- .../Systems/SharedThermalVisionSystem.cs | 6 ++- .../FlashSoundSuppressionComponent.cs | 9 ++++ .../FlashSoundSuppressionSystem.cs | 17 +++++++ .../Systems/ClothingGrantingSystem.cs | 14 ++--- .../_White/Overlays/NightVisionComponent.cs | 7 ++- .../_White/Overlays/ThermalVisionComponent.cs | 5 +- .../Audio/White/Items/Goggles/activate.ogg | Bin 0 -> 12048 bytes .../Audio/White/Items/Goggles/deactivate.ogg | Bin 0 -> 12424 bytes .../entities/clothing/ears/headsets_alt.ftl | 3 ++ .../Catalog/Fills/Lockers/dressers.yml | 2 +- .../Catalog/Fills/Lockers/heads.yml | 2 +- .../Entities/Clothing/Ears/headsets_alt.yml | 20 +++++++- .../Entities/Clothing/Eyes/glasses.yml | 6 +-- .../Clothing/Head/hardsuit-helmets.yml | 45 +++++++++++----- .../Objects/Consumable/Drinks/drinks_cans.yml | 2 + .../Prototypes/Entities/Objects/Tools/gps.yml | 1 + .../Objects/Weapons/Throwable/grenades.yml | 5 +- .../Entities/Objects/Weapons/security.yml | 6 +-- .../Loadouts/Jobs/Security/common.yml | 8 +++ .../Prototypes/Loadouts/loadout_groups.yml | 15 +++--- .../Prototypes/Loadouts/role_loadouts.yml | 12 ++--- .../Reagents/Consumable/Drink/juice.yml | 1 + .../Roles/Jobs/Cargo/quartermaster.yml | 2 +- .../Roles/Jobs/Engineering/chief_engineer.yml | 2 +- .../Roles/Jobs/Justice/inspector.yml | 2 +- .../Jobs/Medical/chief_medical_officer.yml | 2 +- .../Roles/Jobs/Science/research_director.yml | 2 +- .../Roles/Jobs/Security/detective.yml | 2 +- .../Roles/Jobs/Security/head_of_security.yml | 2 +- .../Roles/Jobs/Security/security_cadet.yml | 2 +- .../Roles/Jobs/Security/security_officer.yml | 2 +- .../Roles/Jobs/Security/senior_officer.yml | 2 +- .../Prototypes/Roles/Jobs/Security/warden.yml | 2 +- Resources/Prototypes/_White/Actions/types.yml | 2 +- .../Clothing/Head/night_vision_goggle.yml | 4 +- .../_White/Entities/Cult/Items/tome_craft.yml | 3 +- .../nightvision.rsi/equipped-EYES-off.png | Bin 0 -> 452 bytes .../Glasses/nightvision.rsi/equipped-EYES.png | Bin 0 -> 719 bytes .../Glasses}/nightvision.rsi/icon.png | Bin .../Glasses}/nightvision.rsi/inhand-left.png | Bin .../Glasses}/nightvision.rsi/inhand-right.png | Bin .../Eyes/Glasses/nightvision.rsi/meta.json | 48 ++++++++++++++++++ .../Glasses/thermal.rsi/equipped-EYES.png | Bin 0 -> 524 bytes .../Eyes/Glasses/thermal.rsi/icon.png | Bin 0 -> 510 bytes .../Eyes/Glasses/thermal.rsi/inhand-left.png | Bin 0 -> 327 bytes .../Eyes/Glasses/thermal.rsi/inhand-right.png | Bin 0 -> 325 bytes .../Glasses/thermal.rsi}/meta.json | 0 .../Head/nightvision.rsi/equipped-EYES.png | Bin 387 -> 0 bytes 52 files changed, 214 insertions(+), 68 deletions(-) create mode 100644 Content.Shared/_White/BuffedFlashGrenade/FlashSoundSuppressionComponent.cs create mode 100644 Content.Shared/_White/BuffedFlashGrenade/FlashSoundSuppressionSystem.cs create mode 100644 Resources/Audio/White/Items/Goggles/activate.ogg create mode 100644 Resources/Audio/White/Items/Goggles/deactivate.ogg create mode 100644 Resources/Textures/White/Clothing/Eyes/Glasses/nightvision.rsi/equipped-EYES-off.png create mode 100644 Resources/Textures/White/Clothing/Eyes/Glasses/nightvision.rsi/equipped-EYES.png rename Resources/Textures/White/Clothing/{Head => Eyes/Glasses}/nightvision.rsi/icon.png (100%) rename Resources/Textures/White/Clothing/{Head => Eyes/Glasses}/nightvision.rsi/inhand-left.png (100%) rename Resources/Textures/White/Clothing/{Head => Eyes/Glasses}/nightvision.rsi/inhand-right.png (100%) create mode 100644 Resources/Textures/White/Clothing/Eyes/Glasses/nightvision.rsi/meta.json create mode 100644 Resources/Textures/White/Clothing/Eyes/Glasses/thermal.rsi/equipped-EYES.png create mode 100644 Resources/Textures/White/Clothing/Eyes/Glasses/thermal.rsi/icon.png create mode 100644 Resources/Textures/White/Clothing/Eyes/Glasses/thermal.rsi/inhand-left.png create mode 100644 Resources/Textures/White/Clothing/Eyes/Glasses/thermal.rsi/inhand-right.png rename Resources/Textures/White/Clothing/{Head/nightvision.rsi => Eyes/Glasses/thermal.rsi}/meta.json (100%) delete mode 100644 Resources/Textures/White/Clothing/Head/nightvision.rsi/equipped-EYES.png diff --git a/Content.Server/Explosion/EntitySystems/TriggerSystem.cs b/Content.Server/Explosion/EntitySystems/TriggerSystem.cs index 3675c214b1..b8d7389533 100644 --- a/Content.Server/Explosion/EntitySystems/TriggerSystem.cs +++ b/Content.Server/Explosion/EntitySystems/TriggerSystem.cs @@ -153,7 +153,7 @@ namespace Content.Server.Explosion.EntitySystems private void HandleFlashTrigger(EntityUid uid, FlashOnTriggerComponent component, TriggerEvent args) { // TODO Make flash durations sane ffs. - _flashSystem.FlashArea(uid, args.User, component.Range, component.Duration * 1000f, probability: component.Probability); + _flashSystem.FlashArea(uid, args.User, component.Range, component.Duration * 1000f, probability: component.Probability, forceStun: component.ForceStun); // WD edit args.Handled = true; } diff --git a/Content.Server/Flash/FlashSystem.cs b/Content.Server/Flash/FlashSystem.cs index 148c45c8a2..2e5a713192 100644 --- a/Content.Server/Flash/FlashSystem.cs +++ b/Content.Server/Flash/FlashSystem.cs @@ -4,6 +4,7 @@ using Content.Shared.Flash.Components; using Content.Server.Light.EntitySystems; using Content.Server.Popups; using Content.Server.Stunnable; +using Content.Shared._White.BuffedFlashGrenade; using Content.Shared.Charges.Components; using Content.Shared.Charges.Systems; using Content.Shared.Eye.Blinding.Components; @@ -38,6 +39,7 @@ namespace Content.Server.Flash [Dependency] private readonly TagSystem _tag = default!; [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly StatusEffectsSystem _statusEffectsSystem = default!; + [Dependency] private readonly FlashSoundSuppressionSystem _flashSoundSuppressionSystem = default!; public override void Initialize() { @@ -152,7 +154,8 @@ namespace Content.Server.Flash } } - public void FlashArea(Entity source, EntityUid? user, float range, float duration, float slowTo = 0.8f, bool displayPopup = false, float probability = 1f, SoundSpecifier? sound = null) + // WD edit + public void FlashArea(Entity source, EntityUid? user, float range, float duration, float slowTo = 0.8f, bool displayPopup = false, float probability = 1f, SoundSpecifier? sound = null, bool forceStun = false) { var transform = Transform(source); var mapPosition = _transform.GetMapCoordinates(transform); @@ -175,6 +178,9 @@ namespace Content.Server.Flash // They shouldn't have flash removed in between right? Flash(entity, user, source, duration, slowTo, displayPopup); + + if (forceStun) // WD + _flashSoundSuppressionSystem.Stun(entity, duration); } _audio.PlayPvs(sound, source, AudioParams.Default.WithVolume(1f).WithMaxDistance(3f)); diff --git a/Content.Shared/Flash/Components/FlashOnTriggerComponent.cs b/Content.Shared/Flash/Components/FlashOnTriggerComponent.cs index 7658ca0ae5..3f174db29d 100644 --- a/Content.Shared/Flash/Components/FlashOnTriggerComponent.cs +++ b/Content.Shared/Flash/Components/FlashOnTriggerComponent.cs @@ -10,4 +10,5 @@ public sealed partial class FlashOnTriggerComponent : Component [DataField] public float Range = 1.0f; [DataField] public float Duration = 8.0f; [DataField] public float Probability = 1.0f; + [DataField] public bool ForceStun; // WD } diff --git a/Content.Shared/_Miracle/Systems/SharedNightVisionSystem.cs b/Content.Shared/_Miracle/Systems/SharedNightVisionSystem.cs index b414de944d..b81792167e 100644 --- a/Content.Shared/_Miracle/Systems/SharedNightVisionSystem.cs +++ b/Content.Shared/_Miracle/Systems/SharedNightVisionSystem.cs @@ -48,7 +48,11 @@ public abstract class SharedNightVisionSystem : EntitySystem return; component.IsActive = !component.IsActive; - _audio.PlayPredicted(component.ToggleSound, uid, uid); + + if (component.IsActive && component.ActivateSound != null) + _audio.PlayPredicted(component.ActivateSound, uid, uid); + else if (component.DeactivateSound != null) + _audio.PlayPredicted(component.DeactivateSound, uid, uid); args.Handled = true; diff --git a/Content.Shared/_Miracle/Systems/SharedThermalVisionSystem.cs b/Content.Shared/_Miracle/Systems/SharedThermalVisionSystem.cs index 08bc64675a..7c36bd2cbd 100644 --- a/Content.Shared/_Miracle/Systems/SharedThermalVisionSystem.cs +++ b/Content.Shared/_Miracle/Systems/SharedThermalVisionSystem.cs @@ -48,7 +48,11 @@ public abstract class SharedThermalVisionSystem : EntitySystem return; component.IsActive = !component.IsActive; - _audio.PlayPredicted(component.ToggleSound, uid, uid); + + if (component.IsActive && component.ActivateSound != null) + _audio.PlayPredicted(component.ActivateSound, uid, uid); + else if (component.DeactivateSound != null) + _audio.PlayPredicted(component.DeactivateSound, uid, uid); args.Handled = true; diff --git a/Content.Shared/_White/BuffedFlashGrenade/FlashSoundSuppressionComponent.cs b/Content.Shared/_White/BuffedFlashGrenade/FlashSoundSuppressionComponent.cs new file mode 100644 index 0000000000..190af15af6 --- /dev/null +++ b/Content.Shared/_White/BuffedFlashGrenade/FlashSoundSuppressionComponent.cs @@ -0,0 +1,9 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared._White.BuffedFlashGrenade; + +[RegisterComponent, NetworkedComponent] +public sealed partial class FlashSoundSuppressionComponent : Component +{ + +} diff --git a/Content.Shared/_White/BuffedFlashGrenade/FlashSoundSuppressionSystem.cs b/Content.Shared/_White/BuffedFlashGrenade/FlashSoundSuppressionSystem.cs new file mode 100644 index 0000000000..803538e9a3 --- /dev/null +++ b/Content.Shared/_White/BuffedFlashGrenade/FlashSoundSuppressionSystem.cs @@ -0,0 +1,17 @@ +using Content.Shared.Inventory.Events; +using Content.Shared.Stunnable; + +namespace Content.Shared._White.BuffedFlashGrenade; + +public sealed class FlashSoundSuppressionSystem : EntitySystem +{ + [Dependency] private readonly SharedStunSystem _stunSystem = default!; + + public void Stun(EntityUid target, float duration) + { + if (HasComp(target)) + return; + + _stunSystem.TryParalyze(target, TimeSpan.FromSeconds(duration / 1000f), true); + } +} diff --git a/Content.Shared/_White/ClothingGrant/Systems/ClothingGrantingSystem.cs b/Content.Shared/_White/ClothingGrant/Systems/ClothingGrantingSystem.cs index 104d6bcf0f..bd67e508e6 100644 --- a/Content.Shared/_White/ClothingGrant/Systems/ClothingGrantingSystem.cs +++ b/Content.Shared/_White/ClothingGrant/Systems/ClothingGrantingSystem.cs @@ -28,9 +28,11 @@ public sealed class ClothingGrantingSystem : EntitySystem if (_timing.ApplyingState) return; - if (!TryComp(uid, out var clothing)) return; + if (!TryComp(uid, out var clothing)) + return; - if (!clothing.Slots.HasFlag(args.SlotFlags)) return; + if (!clothing.Slots.HasFlag(args.SlotFlags)) + return; if (component.Components.Count > 8) { @@ -53,7 +55,7 @@ public sealed class ClothingGrantingSystem : EntitySystem } component.IsActive = true; - Dirty(component); + Dirty(uid, component); } private void OnCompUnequip(EntityUid uid, ClothingGrantComponentComponent component, GotUnequippedEvent args) @@ -68,7 +70,7 @@ public sealed class ClothingGrantingSystem : EntitySystem } component.IsActive = false; - Dirty(component); + Dirty(uid, component); } private void OnTagEquip(EntityUid uid, ClothingGrantTagComponent component, GotEquippedEvent args) @@ -81,7 +83,7 @@ public sealed class ClothingGrantingSystem : EntitySystem _tagSystem.AddTag(args.Equipee, component.Tag); component.IsActive = true; - Dirty(component); + Dirty(uid, component); } private void OnTagUnequip(EntityUid uid, ClothingGrantTagComponent component, GotUnequippedEvent args) @@ -91,6 +93,6 @@ public sealed class ClothingGrantingSystem : EntitySystem _tagSystem.RemoveTag(args.Equipee, component.Tag); component.IsActive = false; - Dirty(component); + Dirty(uid, component); } } diff --git a/Content.Shared/_White/Overlays/NightVisionComponent.cs b/Content.Shared/_White/Overlays/NightVisionComponent.cs index 3ffb5b860d..9c27c271a8 100644 --- a/Content.Shared/_White/Overlays/NightVisionComponent.cs +++ b/Content.Shared/_White/Overlays/NightVisionComponent.cs @@ -12,10 +12,13 @@ public sealed partial class NightVisionComponent : BaseNvOverlayComponent public override Color Color { get; set; } = Color.FromHex("#98FB98"); [DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] - public bool IsActive = true; + public bool IsActive; [DataField] - public SoundSpecifier? ToggleSound = new SoundPathSpecifier("/Audio/Items/flashlight_pda.ogg"); + public SoundSpecifier? ActivateSound = new SoundPathSpecifier("/Audio/White/Items/Goggles/activate.ogg"); + + [DataField] + public SoundSpecifier? DeactivateSound = new SoundPathSpecifier("/Audio/White/Items/Goggles/deactivate.ogg"); [DataField] public EntProtoId? ToggleAction = "ToggleNightVision"; diff --git a/Content.Shared/_White/Overlays/ThermalVisionComponent.cs b/Content.Shared/_White/Overlays/ThermalVisionComponent.cs index cbd786d225..7e081a138b 100644 --- a/Content.Shared/_White/Overlays/ThermalVisionComponent.cs +++ b/Content.Shared/_White/Overlays/ThermalVisionComponent.cs @@ -15,7 +15,10 @@ public sealed partial class ThermalVisionComponent : BaseNvOverlayComponent public bool IsActive = true; [DataField] - public SoundSpecifier? ToggleSound = new SoundPathSpecifier("/Audio/Items/flashlight_pda.ogg"); + public SoundSpecifier? ActivateSound = new SoundPathSpecifier("/Audio/White/Items/Goggles/activate.ogg"); + + [DataField] + public SoundSpecifier? DeactivateSound = new SoundPathSpecifier("/Audio/White/Items/Goggles/deactivate.ogg"); [DataField] public EntProtoId? ToggleAction = "ToggleThermalVision"; diff --git a/Resources/Audio/White/Items/Goggles/activate.ogg b/Resources/Audio/White/Items/Goggles/activate.ogg new file mode 100644 index 0000000000000000000000000000000000000000..96cdb288fe07d0e1d3c0f38774cb7ffe01624724 GIT binary patch literal 12048 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 literal 0 HcmV?d00001 diff --git a/Resources/Audio/White/Items/Goggles/deactivate.ogg b/Resources/Audio/White/Items/Goggles/deactivate.ogg new file mode 100644 index 0000000000000000000000000000000000000000..e1e8f4fd82fcfa0b0c01c28b4ec93f53bbb2c2de GIT binary patch literal 12424 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 Z{kT65Jzel|`M;>-Z+o;iR#cM${||7Ja3cT! literal 0 HcmV?d00001 diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/clothing/ears/headsets_alt.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/clothing/ears/headsets_alt.ftl index e7676f2a40..4d12d4c353 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/clothing/ears/headsets_alt.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/clothing/ears/headsets_alt.ftl @@ -13,6 +13,9 @@ ent-ClothingHeadsetAltMedical = полноразмерная медицинск ent-ClothingHeadsetAltSecurity = полноразмерная охранная гарнитура .desc = { ent-ClothingHeadsetAlt.desc } .suffix = { "" } +ent-ClothingHeadsetAltSecurityCommand = { ent-ClothingHeadsetAltSecurity } + .desc = { ent-ClothingHeadsetAlt.desc } + .suffix = { "" } ent-ClothingHeadsetAltEngineering = полноразмерная инженерная гарнитура .desc = { ent-ClothingHeadsetAlt.desc } .suffix = { "" } diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/dressers.yml b/Resources/Prototypes/Catalog/Fills/Lockers/dressers.yml index 17f00d091f..dc1a0325e3 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/dressers.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/dressers.yml @@ -93,7 +93,7 @@ - id: ClothingHandsGlovesCombat - id: ClothingShoesBootsJack - id: ClothingEyesGlassesSecurity - - id: ClothingHeadsetAltSecurity + - id: ClothingHeadsetAltSecurityCommand - id: ClothingMaskGasSwat - id: ClothingOuterCoatHoSTrench diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml index 8ab18cbcb8..876150fe6f 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml @@ -324,5 +324,5 @@ - id: ClothingUniformJumpskirtInspector - id: ClothingUniformJumpskirtInspectorFormal - id: ClothingHandsGlovesInspector - - id: ClothingHeadsetAltSecurity + - id: ClothingHeadsetAltSecurityCommand - id: RubberStampInspector diff --git a/Resources/Prototypes/Entities/Clothing/Ears/headsets_alt.yml b/Resources/Prototypes/Entities/Clothing/Ears/headsets_alt.yml index 9dd72691b5..0d1c1b8131 100644 --- a/Resources/Prototypes/Entities/Clothing/Ears/headsets_alt.yml +++ b/Resources/Prototypes/Entities/Clothing/Ears/headsets_alt.yml @@ -9,6 +9,9 @@ state: icon_alt - type: Clothing equippedPrefix: alt + - type: ClothingGrantComponent # WD + component: + - type: FlashSoundSuppression - type: entity parent: ClothingHeadsetAlt @@ -108,13 +111,28 @@ containers: key_slots: - EncryptionKeySecurity - - EncryptionKeyCommand - EncryptionKeyCommon - type: Sprite sprite: Clothing/Ears/Headsets/security.rsi - type: Clothing sprite: Clothing/Ears/Headsets/security.rsi +- type: entity # WD + parent: ClothingHeadsetAlt + id: ClothingHeadsetAltSecurityCommand + name: head of security's over-ear headset + components: + - type: ContainerFill + containers: + key_slots: + - EncryptionKeySecurity + - EncryptionKeyCommand + - EncryptionKeyCommon + - type: Sprite + sprite: Clothing/Ears/Headsets/command.rsi + - type: Clothing + sprite: Clothing/Ears/Headsets/command.rsi + - type: entity parent: ClothingHeadsetAlt id: ClothingHeadsetAltScience diff --git a/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml b/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml index 3191f44b3f..d0b671151d 100644 --- a/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml +++ b/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml @@ -148,7 +148,6 @@ components: - type: FlashImmunity - type: EyeProtection - protectionTime: 5 - type: Tag tags: - Sunglasses @@ -167,7 +166,6 @@ sprite: Clothing/Eyes/Glasses/secglasses.rsi - type: FlashImmunity - type: EyeProtection - protectionTime: 5 - type: Construction graph: GlassesSecHUD node: glassesSec @@ -232,9 +230,9 @@ description: Thermals in the shape of glasses. components: - type: Sprite - sprite: Clothing/Eyes/Glasses/thermal.rsi + sprite: White/Clothing/Eyes/Glasses/thermal.rsi - type: Clothing - sprite: Clothing/Eyes/Glasses/thermal.rsi + sprite: White/Clothing/Eyes/Glasses/thermal.rsi - type: ClothingGrantComponent component: - type: ThermalVision diff --git a/Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml b/Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml index 31b659e492..95077cdf5c 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml @@ -61,6 +61,7 @@ - type: TemperatureProtection coefficient: 0.005 - type: EyeProtection # WD edit + - type: FlashImmunity # WD #Engineering Hardsuit - type: entity @@ -80,6 +81,7 @@ highPressureMultiplier: 0.1 lowPressureMultiplier: 1000 - type: EyeProtection # WD edit + - type: FlashImmunity # WD #Spationaut Hardsuit - type: entity @@ -183,6 +185,9 @@ Piercing: 0.9 Heat: 0.9 - type: FlashImmunity # WD edit + - type: ClothingGrantComponent # WD + component: + - type: FlashSoundSuppression #Brigmedic Hardsuit - type: entity @@ -210,6 +215,9 @@ - type: PressureProtection highPressureMultiplier: 0.6 lowPressureMultiplier: 1000 + - type: ClothingGrantComponent # WD + component: + - type: FlashSoundSuppression #Warden's Hardsuit - type: entity @@ -236,6 +244,9 @@ Piercing: 0.9 Heat: 0.9 - type: FlashImmunity # WD edit + - type: ClothingGrantComponent # WD + component: + - type: FlashSoundSuppression #Captain's Hardsuit - type: entity @@ -252,6 +263,9 @@ - type: PressureProtection highPressureMultiplier: 0.3 lowPressureMultiplier: 1000 + - type: ClothingGrantComponent # WD + component: + - type: FlashSoundSuppression #Inspector's Hardsuit - type: entity @@ -287,6 +301,7 @@ highPressureMultiplier: 0.08 lowPressureMultiplier: 1000 - type: EyeProtection # WD edit + - type: FlashImmunity # WD #Chief Medical Officer's Hardsuit - type: entity @@ -349,6 +364,9 @@ Piercing: 0.9 Heat: 0.9 - type: FlashImmunity + - type: ClothingGrantComponent # WD + component: + - type: FlashSoundSuppression #Luxury Mining Hardsuit - type: entity @@ -368,6 +386,7 @@ - type: PointLight radius: 7 energy: 3 + - type: EyeProtection # WD edit #Head of Personnel's Hardsuit WD - type: entity @@ -410,8 +429,8 @@ Slash: 0.9 Piercing: 0.9 Heat: 0.9 - - type: FlashImmunity # WD edit - type: EyeProtection # WD edit + - type: FlashImmunity # WD #Blood-red Medic Hardsuit - type: entity @@ -437,8 +456,8 @@ Slash: 0.9 Piercing: 0.9 Heat: 0.9 - - type: FlashImmunity # WD edit - type: EyeProtection # WD edit + - type: FlashImmunity # WD #Syndicate Elite Hardsuit - type: entity @@ -466,8 +485,8 @@ Slash: 0.9 Piercing: 0.9 Heat: 0.9 - - type: FlashImmunity # WD edit - type: EyeProtection # WD edit + - type: FlashImmunity # WD #Syndicate Commander Hardsuit - type: entity @@ -493,8 +512,8 @@ Slash: 0.9 Piercing: 0.9 Heat: 0.9 - - type: FlashImmunity # WD edit - type: EyeProtection # WD edit + - type: FlashImmunity # WD #Cybersun Juggernaut Hardsuit - type: entity @@ -518,8 +537,8 @@ Slash: 0.9 Piercing: 0.9 Heat: 0.9 - - type: FlashImmunity # WD edit - type: EyeProtection # WD edit + - type: FlashImmunity # WD #Wizard Hardsuit - type: entity @@ -546,8 +565,6 @@ Piercing: 0.9 Heat: 0.9 - type: WizardClothes - - type: FlashImmunity - - type: EyeProtection #Organic Space Suit - type: entity @@ -621,8 +638,8 @@ Slash: 0.9 Piercing: 0.9 Heat: 0.9 - - type: FlashImmunity # WD edit - type: EyeProtection # WD edit + - type: FlashImmunity # WD #ERT Chaplain Hardsuit - type: entity @@ -660,8 +677,8 @@ Slash: 0.9 Piercing: 0.9 Heat: 0.9 - - type: FlashImmunity # WD edit - type: EyeProtection # WD edit + - type: FlashImmunity # WD #ERT Medical Hardsuit - type: entity @@ -677,8 +694,8 @@ sprite: Clothing/Head/Hardsuits/ERThelmets/ertmedical.rsi - type: PointLight color: "#adffec" - - type: FlashImmunity # WD edit - type: EyeProtection # WD edit + - type: FlashImmunity # WD #ERT Security Hardsuit - type: entity @@ -701,8 +718,8 @@ Slash: 0.9 Piercing: 0.9 Heat: 0.9 - - type: FlashImmunity # WD edit - type: EyeProtection # WD edit + - type: FlashImmunity # WD #ERT Janitor Hardsuit - type: entity @@ -718,8 +735,8 @@ sprite: Clothing/Head/Hardsuits/ERThelmets/ertjanitor.rsi - type: PointLight color: "#cbadff" - - type: FlashImmunity # WD edit - type: EyeProtection # WD edit + - type: FlashImmunity # WD #CBURN Hardsuit - type: entity @@ -759,8 +776,8 @@ Slash: 0.9 Piercing: 0.9 Heat: 0.9 - - type: FlashImmunity # WD edit - type: EyeProtection # WD edit + - type: FlashImmunity # WD #Deathsquad Hardsuit - type: entity @@ -786,8 +803,8 @@ Heat: 0.80 Radiation: 0.80 Caustic: 0.95 - - type: FlashImmunity # WD edit - type: EyeProtection # WD edit + - type: FlashImmunity # WD - type: ShowHealthBars damageContainers: - Biological diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_cans.yml b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_cans.yml index ba53e455c9..1379a25c89 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_cans.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_cans.yml @@ -4,6 +4,8 @@ id: DrinkCanBaseFull abstract: true components: + - type: Item + size: Tiny - type: Drink - type: Openable - type: Shakeable diff --git a/Resources/Prototypes/Entities/Objects/Tools/gps.yml b/Resources/Prototypes/Entities/Objects/Tools/gps.yml index 8ae34573ff..482ea96307 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/gps.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/gps.yml @@ -11,6 +11,7 @@ - state: active - type: Item sprite: Objects/Devices/gps.rsi + size: Tiny - type: HandheldGPS - type: Tag tags: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml index 5b39fd357d..c58c7f7113 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml @@ -66,7 +66,8 @@ - type: Sprite sprite: Objects/Weapons/Grenades/flashbang.rsi - type: FlashOnTrigger - range: 7 + range: 5 + forceStun: true # WD - type: SoundOnTrigger sound: path: "/Audio/Effects/flash_bang.ogg" @@ -350,7 +351,7 @@ parent: GrenadeBase id: SmokeGrenade name: smoke grenade - description: A tactical grenade that releases a large, long-lasting cloud of smoke when used. + description: A tactical grenade that releases a large, long-lasting cloud of smoke when used. components: - type: Sprite sprite: Objects/Weapons/Grenades/smoke.rsi diff --git a/Resources/Prototypes/Entities/Objects/Weapons/security.yml b/Resources/Prototypes/Entities/Objects/Weapons/security.yml index 0c547cae22..21097aac66 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/security.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/security.yml @@ -138,8 +138,8 @@ shader: unshaded - type: Flash - type: LimitedCharges - maxCharges: 5 - charges: 5 + maxCharges: 7 + charges: 7 - type: MeleeWeapon canHeavyAttack: false wideAnimationRotation: 180 @@ -148,7 +148,7 @@ Blunt: 0 # melee weapon to allow flashing individual targets angle: 10 - type: Item - size: Small + size: Tiny sprite: Objects/Weapons/Melee/flash.rsi - type: UseDelay - type: StaticPrice diff --git a/Resources/Prototypes/Loadouts/Jobs/Security/common.yml b/Resources/Prototypes/Loadouts/Jobs/Security/common.yml index 5a64004a35..ac569befe4 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Security/common.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Security/common.yml @@ -22,6 +22,14 @@ equipment: SecurityCommandHeadset - type: startingGear id: SecurityCommandHeadset + equipment: + ears: ClothingHeadsetAltSecurityCommand + +- type: itemLoadout + id: SecurityHeadsetFull + equipment: SecurityHeadsetFull +- type: startingGear + id: SecurityHeadsetFull equipment: ears: ClothingHeadsetAltSecurity diff --git a/Resources/Prototypes/Loadouts/loadout_groups.yml b/Resources/Prototypes/Loadouts/loadout_groups.yml index 97a6baf8aa..aa255fe71c 100644 --- a/Resources/Prototypes/Loadouts/loadout_groups.yml +++ b/Resources/Prototypes/Loadouts/loadout_groups.yml @@ -161,7 +161,6 @@ id: CommonCommandHeadset name: loadout-group-ears loadouts: - - CommandHeadset - CommandHeadsetAlt # Civilian @@ -767,7 +766,6 @@ id: QuartermasterHeadset name: loadout-group-ears loadouts: - - QuartermasterHeadset - QuartermasterHeadsetAlt - type: loadoutGroup @@ -985,7 +983,6 @@ id: ChiefEngineerHeadset name: loadout-group-ears loadouts: - - ChiefEngineerHeadset - ChiefEngineerHeadsetAlt - type: loadoutGroup @@ -1224,7 +1221,6 @@ id: ResearchDirectorHeadset name: loadout-group-ears loadouts: - - ResearchDirectorHeadset - ResearchDirectorHeadsetAlt - type: loadoutGroup @@ -1604,6 +1600,12 @@ loadouts: - SecurityCommandHeadset +- type: loadoutGroup + id: CommonSecurityHeadsetFull + name: loadout-group-ears + loadouts: + - SecurityHeadsetFull + - type: loadoutGroup id: CommonSecurityBackpack name: loadout-group-backpack @@ -1636,10 +1638,9 @@ - CowboyWhite - type: loadoutGroup # WD - id: ChiefMedicalOfficerEars + id: ChiefMedicalOfficerHeadset name: loadout-group-ears loadouts: - - CMOHeadset - CMOHeadsetAlt - type: loadoutGroup @@ -2029,9 +2030,7 @@ id: InspectorBackpack name: loadout-group-backpack loadouts: - - InspectorBackpack - InspectorSatchel - - InspectorDuffel - CommonSatchelLeather - type: loadoutGroup # WD diff --git a/Resources/Prototypes/Loadouts/role_loadouts.yml b/Resources/Prototypes/Loadouts/role_loadouts.yml index f14a9b5069..e2d7aba241 100644 --- a/Resources/Prototypes/Loadouts/role_loadouts.yml +++ b/Resources/Prototypes/Loadouts/role_loadouts.yml @@ -385,7 +385,7 @@ id: JobWarden groups: - WardenHead - - CommonSecurityCommandHeadset # WD + - CommonSecurityHeadsetFull # WD - CommonSecurityCommandMask # WD - CommonSecurityNeck - WardenJumpsuit @@ -399,7 +399,7 @@ id: JobSeniorOfficer groups: - CommonSecurityHead - - CommonSecurityHeadset # WD + - CommonSecurityHeadsetFull # WD - CommonSecurityCommandMask # WD - CommonSecurityNeck - SeniorOfficerJumpsuit @@ -414,7 +414,7 @@ id: JobSecurityOfficer groups: - CommonSecurityHead - - CommonSecurityHeadset # WD + - CommonSecurityHeadsetFull # WD - CommonSecurityMask # WD - CommonSecurityNeck # WD - SecurityJumpsuit @@ -430,7 +430,7 @@ id: JobDetective groups: - DetectiveHead - - CommonSecurityHeadset # WD + - CommonSecurityHeadsetFull # WD - CommonMaskCigarette # WD - CommonSecurityNeck - DetectiveJumpsuit @@ -445,7 +445,7 @@ id: JobSecurityCadet groups: - CommonSecurityHead - - CommonSecurityHeadset # WD + - CommonSecurityHeadsetFull # WD - CommonSecurityNeck - SecurityCadetJumpsuit - CommonSecurityBackpack @@ -459,7 +459,7 @@ id: JobChiefMedicalOfficer groups: - ChiefMedicalOfficerHead - - ChiefMedicalOfficerEars # WD + - ChiefMedicalOfficerHeadset # WD - CommonMedicalMask # WD - ChiefMedicalOfficerNeck - ChiefMedicalOfficerJumpsuit diff --git a/Resources/Prototypes/Reagents/Consumable/Drink/juice.yml b/Resources/Prototypes/Reagents/Consumable/Drink/juice.yml index ee1492b45e..1edef943a1 100644 --- a/Resources/Prototypes/Reagents/Consumable/Drink/juice.yml +++ b/Resources/Prototypes/Reagents/Consumable/Drink/juice.yml @@ -116,6 +116,7 @@ physicalDesc: reagent-physical-desc-saucey flavor: tomato color: "#731008" + slippery: false - type: reagent id: JuiceWatermelon diff --git a/Resources/Prototypes/Roles/Jobs/Cargo/quartermaster.yml b/Resources/Prototypes/Roles/Jobs/Cargo/quartermaster.yml index 5ece5e04a3..a53cb1c3dc 100644 --- a/Resources/Prototypes/Roles/Jobs/Cargo/quartermaster.yml +++ b/Resources/Prototypes/Roles/Jobs/Cargo/quartermaster.yml @@ -42,4 +42,4 @@ back: ClothingBackpackQuartermasterFilled shoes: ClothingShoesColorBrown id: QuartermasterPDA - ears: ClothingHeadsetQM + ears: ClothingHeadsetAltCargo diff --git a/Resources/Prototypes/Roles/Jobs/Engineering/chief_engineer.yml b/Resources/Prototypes/Roles/Jobs/Engineering/chief_engineer.yml index 6849bf25e3..bcd5a14890 100644 --- a/Resources/Prototypes/Roles/Jobs/Engineering/chief_engineer.yml +++ b/Resources/Prototypes/Roles/Jobs/Engineering/chief_engineer.yml @@ -43,4 +43,4 @@ back: ClothingBackpackChiefEngineerFilled shoes: ClothingShoesColorBrown id: CEPDA - ears: ClothingHeadsetCE + ears: ClothingHeadsetAltEngineering diff --git a/Resources/Prototypes/Roles/Jobs/Justice/inspector.yml b/Resources/Prototypes/Roles/Jobs/Justice/inspector.yml index e4fdf5d1c8..9f28aa1a09 100644 --- a/Resources/Prototypes/Roles/Jobs/Justice/inspector.yml +++ b/Resources/Prototypes/Roles/Jobs/Justice/inspector.yml @@ -28,6 +28,6 @@ back: ClothingBackpackFilled shoes: ClothingShoesBootsInspector id: InspectorPDA - ears: ClothingHeadsetAltSecurity + ears: ClothingHeadsetAltSecurityCommand inhand: - BriefcaseBrownFilled diff --git a/Resources/Prototypes/Roles/Jobs/Medical/chief_medical_officer.yml b/Resources/Prototypes/Roles/Jobs/Medical/chief_medical_officer.yml index f659057461..74f023b60d 100644 --- a/Resources/Prototypes/Roles/Jobs/Medical/chief_medical_officer.yml +++ b/Resources/Prototypes/Roles/Jobs/Medical/chief_medical_officer.yml @@ -40,4 +40,4 @@ back: ClothingBackpackCMOFilled shoes: ClothingShoesColorBrown id: CMOPDA - ears: ClothingHeadsetCMO + ears: ClothingHeadsetAltMedical diff --git a/Resources/Prototypes/Roles/Jobs/Science/research_director.yml b/Resources/Prototypes/Roles/Jobs/Science/research_director.yml index 9498e1a9e0..fddecee013 100644 --- a/Resources/Prototypes/Roles/Jobs/Science/research_director.yml +++ b/Resources/Prototypes/Roles/Jobs/Science/research_director.yml @@ -37,4 +37,4 @@ back: ClothingBackpackResearchDirectorFilled shoes: ClothingShoesColorBrown id: RnDPDA - ears: ClothingHeadsetRD + ears: ClothingHeadsetAltScience diff --git a/Resources/Prototypes/Roles/Jobs/Security/detective.yml b/Resources/Prototypes/Roles/Jobs/Security/detective.yml index 4fd6c14a98..d7d9776350 100644 --- a/Resources/Prototypes/Roles/Jobs/Security/detective.yml +++ b/Resources/Prototypes/Roles/Jobs/Security/detective.yml @@ -31,4 +31,4 @@ back: ClothingBackpackSecurityFilledDetective shoes: ClothingShoesBootsCombatFilled id: DetectivePDA - ears: ClothingHeadsetSecurity + ears: ClothingHeadsetAltSecurity diff --git a/Resources/Prototypes/Roles/Jobs/Security/head_of_security.yml b/Resources/Prototypes/Roles/Jobs/Security/head_of_security.yml index eb2f6dee42..5eebae74c7 100644 --- a/Resources/Prototypes/Roles/Jobs/Security/head_of_security.yml +++ b/Resources/Prototypes/Roles/Jobs/Security/head_of_security.yml @@ -45,4 +45,4 @@ back: ClothingBackpackHOSFilled shoes: ClothingShoesBootsCombatFilled id: HoSPDA - ears: ClothingHeadsetAltSecurity + ears: ClothingHeadsetAltSecurityCommand diff --git a/Resources/Prototypes/Roles/Jobs/Security/security_cadet.yml b/Resources/Prototypes/Roles/Jobs/Security/security_cadet.yml index c199f9bf06..e4bcb4c3c0 100644 --- a/Resources/Prototypes/Roles/Jobs/Security/security_cadet.yml +++ b/Resources/Prototypes/Roles/Jobs/Security/security_cadet.yml @@ -33,5 +33,5 @@ back: ClothingBackpackSecurityFilled shoes: ClothingShoesBootsCombatFilled id: SecurityCadetPDA - ears: ClothingHeadsetSecurity + ears: ClothingHeadsetAltSecurity pocket1: BookSecurity diff --git a/Resources/Prototypes/Roles/Jobs/Security/security_officer.yml b/Resources/Prototypes/Roles/Jobs/Security/security_officer.yml index 3fb4fda7db..9e9e4d6569 100644 --- a/Resources/Prototypes/Roles/Jobs/Security/security_officer.yml +++ b/Resources/Prototypes/Roles/Jobs/Security/security_officer.yml @@ -30,4 +30,4 @@ back: ClothingBackpackSecurityFilled shoes: ClothingShoesBootsCombatFilled id: SecurityPDA - ears: ClothingHeadsetSecurity + ears: ClothingHeadsetAltSecurity diff --git a/Resources/Prototypes/Roles/Jobs/Security/senior_officer.yml b/Resources/Prototypes/Roles/Jobs/Security/senior_officer.yml index a519e086dd..7bac01133e 100644 --- a/Resources/Prototypes/Roles/Jobs/Security/senior_officer.yml +++ b/Resources/Prototypes/Roles/Jobs/Security/senior_officer.yml @@ -39,4 +39,4 @@ back: ClothingBackpackSecurityFilled shoes: ClothingShoesBootsCombatFilled id: SeniorOfficerPDA - ears: ClothingHeadsetSecurity + ears: ClothingHeadsetAltSecurity diff --git a/Resources/Prototypes/Roles/Jobs/Security/warden.yml b/Resources/Prototypes/Roles/Jobs/Security/warden.yml index aaad42d38a..88acbf9e13 100644 --- a/Resources/Prototypes/Roles/Jobs/Security/warden.yml +++ b/Resources/Prototypes/Roles/Jobs/Security/warden.yml @@ -32,4 +32,4 @@ back: ClothingBackpackSecurityFilled shoes: ClothingShoesBootsCombatFilled id: WardenPDA - ears: ClothingHeadsetSecurity + ears: ClothingHeadsetAltSecurity diff --git a/Resources/Prototypes/_White/Actions/types.yml b/Resources/Prototypes/_White/Actions/types.yml index b5967a28b9..237c7bf44d 100644 --- a/Resources/Prototypes/_White/Actions/types.yml +++ b/Resources/Prototypes/_White/Actions/types.yml @@ -38,7 +38,7 @@ itemIconStyle: BigAction priority: -20 icon: - sprite: White/Clothing/Head/nightvision.rsi + sprite: White/Clothing/Eyes/Glasses/nightvision.rsi state: icon event: !type:ToggleNightVisionEvent diff --git a/Resources/Prototypes/_White/Entities/Clothing/Head/night_vision_goggle.yml b/Resources/Prototypes/_White/Entities/Clothing/Head/night_vision_goggle.yml index a46e119761..420cc163d9 100644 --- a/Resources/Prototypes/_White/Entities/Clothing/Head/night_vision_goggle.yml +++ b/Resources/Prototypes/_White/Entities/Clothing/Head/night_vision_goggle.yml @@ -6,9 +6,9 @@ description: Теперь ты видишь во тьме! components: - type: Sprite - sprite: White/Clothing/Head/nightvision.rsi + sprite: White/Clothing/Eyes/Glasses/nightvision.rsi - type: Clothing - sprite: White/Clothing/Head/nightvision.rsi + sprite: White/Clothing/Eyes/Glasses/nightvision.rsi - type: ClothingGrantComponent component: - type: NightVision diff --git a/Resources/Prototypes/_White/Entities/Cult/Items/tome_craft.yml b/Resources/Prototypes/_White/Entities/Cult/Items/tome_craft.yml index cb5494e9cf..4cd0e39620 100644 --- a/Resources/Prototypes/_White/Entities/Cult/Items/tome_craft.yml +++ b/Resources/Prototypes/_White/Entities/Cult/Items/tome_craft.yml @@ -41,7 +41,8 @@ component: - type: NightVision toggleAction: null - toggleSound: null + activateSound: null + deactivateSound: null color: White - type: ShowHealthBars damageContainers: diff --git a/Resources/Textures/White/Clothing/Eyes/Glasses/nightvision.rsi/equipped-EYES-off.png b/Resources/Textures/White/Clothing/Eyes/Glasses/nightvision.rsi/equipped-EYES-off.png new file mode 100644 index 0000000000000000000000000000000000000000..b63f30fc713a739b08ea1070559e2d3b6abf3f6d GIT binary patch literal 452 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|R53 zr;B4q#hkaZ9K8-ZNVLvZ2+=sg&GN=-_pVLq1q&5k=x)-e5L(!M$7$j6723PGU#)W5 z#>Fc#EA)*#M@!aG&dIJ7@0$-8IDayh|E%7wZ z^T!=~_Ut$ULtZq`>HPbLKH)0w_^@&grxzQ>o$a;58P>sLRUl^pFqX^AoC_sf|- zH%2Ayz4<4?T9&WSOzL5xS@Ej(Dhux2*`~2dY(w&WnfHDSyN;9=|6h33dcn>2wQv7Q z)v`MDu{6kVGFS>R6sa&g@nASHkpbcsG>L}w?5&9rY>pRx?sqz^_N1~;=k%T{AC(Rm zG2dQv;OyJEoDS0?dVgL{4!!Iyw=mT1fxtA;7qilMCvVtaXE^hK>f#Gp@*kwHG1Z^^ z*m`w?mzopr E058M1eE(56?F=2Egz13RyoeI)BL=X2J-)z>E(+4Mi& z``V*l_3ymve|Dv^z9`%Mw14qp2|nd*k7}x7qyA(GUV8htZvRHt70;F*_3u~oEMBed zc=@ya`}foLpF8*H{L!QK+xJGq_L{$b{qgAoh3vYphFATszgRt0$cz7$X)W>QUfjM) zHn+*EeunSf9vxt6U-fzB{M|eH4KM$1*!^2~mj_6geB4wJioOZ>O~p_I#bo`3qqpU10zeil#S_HtVs`1;xNlV{^+F!)a;-)*Vv z9_pv%`j1~e@5I(HFMj*XIL4O_ET3xre)(gS${z7^i_rAFr(ZtZ!tp)7e)nc!-+71a zWm^nyJbiXu*V^INqLwYJBK$dwzVi>;*CsMs?$5i)_+t9slT10* zRF7M8H5dr69j}nF@vcztmTUGcLZM@bZhhV_L6f^To+GC)ukuUkvCh+_+)$V*aYbQomVd z3Im?al0?L61)98Q1L z)#F>sdhq7KjZ2(YT=?OrFX4Ca{>(`+c|}Fb9R5u#KDTbBl&-^KhAj-eOf7jQHtF#1 z{C9t4d)|k8(ccUI#O#}Q&3d|_)#1}Q)9TlSZM*xH?^>P|Z}zsRYx2E|CRDSr8yMfN zS#$PGj%DfLb4$XH>{x5(@Z$8}R*(CP;eAXOm`u1FxG!ihz-%B|faSlOKEG4N`?p{J z=Kd?*S5b7>yJPO6-xqG5SG%+QJzJs7|0w@SOK$ya_{4n40aY>v4(UjYnXdl9N2msQpJGL%i!ti=d#Wzp$Py!<<~I) literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Clothing/Eyes/Glasses/thermal.rsi/icon.png b/Resources/Textures/White/Clothing/Eyes/Glasses/thermal.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3d5f8ef9b65ccfe2ed64fbc2d10c725c5fad51d2 GIT binary patch literal 510 zcmV~YL`2emQAsH<`}Ol@aPemfRt!=?oD8Bs z_Iz7&h65FI{vYZ{A?OH_900N$L{IK-!7zBCTjc*0Kwsw;*8IP9^%BFvci$Q2H-Gux zR9k@85kxs)>deJpi)|epQTQ;>tT~TiYH$(*15|v)ig}D6#~!fX$nb)p0I%5u9RQ2# z_wU}|RFn3~A4t9htI^O2@kk}_Q@h%{p%Af$|gDeMy z0!0o0fy>j@!r35SKRIv_%m&diTpTEBLGldK&Vt#*SWeIZAVX4t@pvN37|h?^vy>s{ zBOhFT3d1J`R|kCt784yX-vVekwj4sX13&;|pfWW3iAriPteAv@xb1_FVDPUrWmc)9n>XTSEY{`*wGJ@BP4Y`g2W{ z@4IJdS4$$NUAC-T6)(0v=IQU!-9o0C?{~LXu3q)Z-*x{E`|_1p%PfD!?BaNAaVzNkM_opU zgBm^@;?~~-AyO{a$J#D)zw?~=-)Xhw?t3cy`g2}!MkH6I6yIl9=FY(2cjgU8R89XJ TA;as_K-xWB{an^LB{Ts51B{c1 literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Clothing/Eyes/Glasses/thermal.rsi/inhand-right.png b/Resources/Textures/White/Clothing/Eyes/Glasses/thermal.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..4ede078291d212cabdf7a4d5731153a85f0963c1 GIT binary patch literal 325 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEVC3<1aSW-L^Y)gZUvq-Qv5(vN zVoi8@dM9^JHV&WAyO49uUdR4NymLM>y%4l$l5Q?cQFwc)^;u?9W)7>Pko}kc-ZOqE zoOia1sNe;f2?Rgl(_(WE8?3oLJ^$Ojn>Szm+*gzr=`xV)W7BD z7WgIbUuIddqrert>EU)yL*kx>{X1yh{dh-RsxpJvySiOlcf;n zfXIf6JpYn!l?xpXT`Q~zopr06im!bN~PV literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Clothing/Head/nightvision.rsi/meta.json b/Resources/Textures/White/Clothing/Eyes/Glasses/thermal.rsi/meta.json similarity index 100% rename from Resources/Textures/White/Clothing/Head/nightvision.rsi/meta.json rename to Resources/Textures/White/Clothing/Eyes/Glasses/thermal.rsi/meta.json diff --git a/Resources/Textures/White/Clothing/Head/nightvision.rsi/equipped-EYES.png b/Resources/Textures/White/Clothing/Head/nightvision.rsi/equipped-EYES.png deleted file mode 100644 index 7d15515f7ad7d92ea8ecc536d8f5c06b83633aa0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 387 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEVD$2IaSW+oe0$5@+bK}u_{VsK zmc{=Mln57fwy8aQMS4BMO|5y)xJM&sW{DT+Ur+HP`sGE$7e0hfaN4p#5d)g4}&Km{s$+pREi3_*Uj-+Sk0%FD o-l-)SUA^y^Fg~k(_&$&}IPYm+xyRrwFmM?>UHx3vIVCg!09<{XZ2$lO From 772fb30381c84738f485b2b4f73917b860d6bfe0 Mon Sep 17 00:00:00 2001 From: RavmorganButOnCocaine Date: Sat, 20 Jul 2024 02:09:05 +0000 Subject: [PATCH 06/11] Automatic changelog update --- Resources/Changelog/ChangelogWhite.yml | 55 ++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/Resources/Changelog/ChangelogWhite.yml b/Resources/Changelog/ChangelogWhite.yml index 6533372a3c..98c5412734 100644 --- a/Resources/Changelog/ChangelogWhite.yml +++ b/Resources/Changelog/ChangelogWhite.yml @@ -6134,3 +6134,58 @@ id: 396 time: '2024-07-19T16:27:02.0000000+00:00' url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/466 +- author: ThereDrD + changes: + - message: "\u041F\u0435\u0440\u0435\u0440\u0430\u0431\u043E\u0442\u0430\u043D\u044B\ + \ \u0441\u0432\u0435\u0442\u043E\u0448\u0443\u043C\u043E\u0432\u044B\u0435 \u0433\ + \u0440\u0430\u043D\u0430\u0442\u044B. \u0422\u0435\u043F\u0435\u0440\u044C \u043E\ + \u043D\u0438 \u0441\u0442\u0430\u043D\u044F\u0442 \u0438\u0433\u0440\u043E\u043A\ + \u043E\u0432 \u0432 \u0440\u0430\u0434\u0438\u0443\u0441\u0435, \u0435\u0441\ + \u043B\u0438 \u043D\u0435 \u043D\u043E\u0441\u0438\u0442\u044C \u043F\u043E\u043B\ + \u043D\u043E\u0440\u0430\u0437\u043C\u0435\u0440\u043D\u0443\u044E \u0433\u0430\ + \u0440\u043D\u0438\u0442\u0443\u0440\u0443. \u042D\u0442\u0438 \u0433\u0430\u0440\ + \u043D\u0438\u0442\u0443\u0440\u044B \u043F\u043E\u043B\u0443\u0447\u0438\u043B\ + \u043E \u0432\u0441\u0435 \u0421\u0411 \u0438 \u0432\u0441\u0435 \u0413\u043B\ + \u0430\u0432\u044B." + type: Tweak + - message: "\u0421\u043E\u043A\u0438 \u0431\u043E\u043B\u044C\u0448\u0435 \u0441\ + \u043A\u043E\u043B\u044C\u0437\u043A\u0438\u0435" + type: Tweak + - message: "\u041A\u0430\u0440\u043C\u0430\u043D\u043D\u0430\u044F \u0444\u043B\u0435\ + \u0448\u043A\u0430 \u0441\u0442\u0430\u043B\u0430 \u0437\u0430\u043D\u0438\u043C\ + \u0430\u0442\u044C \u043C\u0435\u043D\u044C\u0448\u0435 \u043C\u0435\u0441\u0442\ + \u0430 \u0438 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0438\ + \u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0439 \u0443\ + \u0432\u0435\u043B\u0438\u0447\u0438\u043B\u043E\u0441\u044C \u043D\u0430 2" + type: Tweak + - message: "\u0418\u043A\u043E\u043D\u043A\u0430 \u0442\u0435\u0440\u043C\u0430\u043B\ + \u043E\u043A \u0440\u0435\u0441\u043F\u0440\u0430\u0442\u043D\u0443\u0442\u0430" + type: Tweak + - message: "\u0421\u043F\u0440\u0430\u0439\u0442 \u041F\u041D\u0412 \u043D\u0430\ + \ \u043F\u0435\u0440\u0441\u043E\u043D\u0430\u0436\u0435 \u0440\u0435\u0441\u043F\ + \u0440\u0430\u0439\u0442\u043D\u0443\u0442" + type: Tweak + - message: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u044B \u0437\u0432\u0443\ + \u043A\u0438 \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u044F \u0438 \u043E\ + \u0442\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u044F \u041F\u041D\u0412 \u0438\ + \ \u0422\u0435\u0440\u043C\u0430\u043B\u043E\u043A" + type: Add + - message: "\u0421\u043A\u0430\u0444\u0430\u043D\u0434\u0440\u044B \u0421\u0411\ + \ \u0442\u0435\u043F\u0435\u0440\u044C \u0437\u0430\u0449\u0438\u0449\u0430\u044E\ + \u0442 \u043E\u0442 \u0441\u0432\u0435\u0442\u043E\u0448\u0443\u043C\u043E\u0432\ + \u044B\u0445 \u0433\u0440\u0430\u043D\u0430\u0442, \u043F\u043E\u043A\u0430\ + \ \u0433\u0435\u0440\u043C\u0435\u0442\u0438\u0447\u043D\u044B." + type: Tweak + - message: "\u0421\u043E\u043B\u043D\u0446\u0435\u0437\u0430\u0449\u0438\u0442\u043D\ + \u044B\u0435 \u043E\u0447\u043A\u0438 \u0442\u0435\u043F\u0435\u0440\u044C \u0437\ + \u0430\u0449\u0438\u0449\u0430\u044E\u0442 \u043E\u0442 \u0441\u0432\u0430\u0440\ + \u043A\u0438, \u043A\u0430\u043A \u0432 \u0441\u044113!" + type: Tweak + - message: "\u0428\u043B\u0435\u043C \u0438\u043D\u0436\u0435\u043D\u0435\u0440\u043D\ + \u044B\u0445 \u0441\u043A\u0430\u0444\u0430\u043D\u0434\u0440\u043E\u0432 \u0442\ + \u0435\u043F\u0435\u0440\u044C \u0437\u0430\u0449\u0438\u0449\u0430\u0435\u0442\ + \ \u043E\u0442 \u0432\u0441\u043F\u044B\u0448\u0435\u043A" + type: Tweak + id: 397 + time: '2024-07-20T02:08:01.0000000+00:00' + url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/467 From 0dff5a3f7912186647ce53bcce0ac6afaa1b8074 Mon Sep 17 00:00:00 2001 From: ThereDrD0 <88589686+ThereDrD0@users.noreply.github.com> Date: Sat, 20 Jul 2024 05:32:31 +0300 Subject: [PATCH 07/11] =?UTF-8?q?=D0=A0=D0=B5=D1=81=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B9=D1=82=D1=8B=20=D0=BA=D0=B0=D0=BD=D0=B8=D1=81=D1=82=D1=80?= =?UTF-8?q?=20=D0=B8=20=D0=BF=D0=BB=D0=B0=D1=89=D0=B5=D0=B9=20=D0=9A=D0=B0?= =?UTF-8?q?=D0=BF=D0=B8=D1=82=D0=B0=D0=BD=D0=B0,=20=D0=A1=D0=95=20=D0=B8?= =?UTF-8?q?=20=D0=A0=D0=94=20(#469)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * canisters resprite * captain, research director and chief engineer cloaks resprite --- .../Entities/Clothing/Neck/cloaks.yml | 27 +++ .../Markers/Spawners/Random/salvage.yml | 2 +- .../Storage/Canisters/gas_canisters.yml | 2 +- .../Loadouts/Jobs/Command/captain.yml | 8 + .../Jobs/Engineering/chief_engineer.yml | 8 + .../Jobs/Science/research_director.yml | 8 + .../Prototypes/Loadouts/loadout_groups.yml | 19 +- .../Neck/Cloaks/cap.rsi/equipped-NECK.png | Bin 0 -> 2416 bytes .../Clothing/Neck/Cloaks/cap.rsi/icon.png | Bin 0 -> 920 bytes .../Neck/Cloaks/cap.rsi/inhand-left.png | Bin 0 -> 605 bytes .../Neck/Cloaks/cap.rsi/inhand-right.png | Bin 0 -> 608 bytes .../Clothing/Neck/Cloaks/cap.rsi/meta.json | 26 +++ .../Neck/Cloaks/ce.rsi/equipped-NECK.png | Bin 0 -> 1982 bytes .../Clothing/Neck/Cloaks/ce.rsi/icon.png | Bin 0 -> 751 bytes .../Neck/Cloaks/ce.rsi/inhand-left.png | Bin 0 -> 439 bytes .../Neck/Cloaks/ce.rsi/inhand-right.png | Bin 0 -> 456 bytes .../Clothing/Neck/Cloaks/ce.rsi/meta.json | 26 +++ .../Neck/Cloaks/rd.rsi/equipped-NECK.png | Bin 0 -> 1645 bytes .../Clothing/Neck/Cloaks/rd.rsi/icon.png | Bin 0 -> 705 bytes .../Neck/Cloaks/rd.rsi/inhand-left.png | Bin 0 -> 733 bytes .../Neck/Cloaks/rd.rsi/inhand-right.png | Bin 0 -> 763 bytes .../Clothing/Neck/Cloaks/rd.rsi/meta.json | 26 +++ .../Storage/canister.rsi/antinob-1.png | Bin 0 -> 973 bytes .../Storage/canister.rsi/antinob.png | Bin 0 -> 1012 bytes .../Storage/canister.rsi/black-1.png | Bin 0 -> 991 bytes .../Structures/Storage/canister.rsi/black.png | Bin 0 -> 974 bytes .../Storage/canister.rsi/blue-1.png | Bin 0 -> 943 bytes .../Structures/Storage/canister.rsi/blue.png | Bin 0 -> 972 bytes .../Storage/canister.rsi/brown-1.png | Bin 0 -> 1004 bytes .../Structures/Storage/canister.rsi/brown.png | Bin 0 -> 987 bytes .../Storage/canister.rsi/can-connector.png | Bin 0 -> 399 bytes .../Storage/canister.rsi/can-o0.png | Bin 0 -> 120 bytes .../Storage/canister.rsi/can-o1.png | Bin 0 -> 113 bytes .../Storage/canister.rsi/can-o2.png | Bin 0 -> 112 bytes .../Storage/canister.rsi/can-o3.png | Bin 0 -> 114 bytes .../Storage/canister.rsi/can-oa1.png | Bin 0 -> 201 bytes .../Storage/canister.rsi/can-open.png | Bin 0 -> 155 bytes .../Storage/canister.rsi/darkblue-1.png | Bin 0 -> 943 bytes .../Storage/canister.rsi/darkblue.png | Bin 0 -> 882 bytes .../Storage/canister.rsi/darkpurple-1.png | Bin 0 -> 991 bytes .../Storage/canister.rsi/darkpurple.png | Bin 0 -> 974 bytes .../Storage/canister.rsi/frezon-1.png | Bin 0 -> 1049 bytes .../Storage/canister.rsi/frezon.png | Bin 0 -> 1077 bytes .../Storage/canister.rsi/green-1.png | Bin 0 -> 1007 bytes .../Structures/Storage/canister.rsi/green.png | Bin 0 -> 1032 bytes .../Storage/canister.rsi/greenys-1.png | Bin 0 -> 999 bytes .../Storage/canister.rsi/greenys.png | Bin 0 -> 996 bytes .../Storage/canister.rsi/grey-1.png | Bin 0 -> 1074 bytes .../Structures/Storage/canister.rsi/grey.png | Bin 0 -> 1029 bytes .../Structures/Storage/canister.rsi/h2-1.png | Bin 0 -> 1110 bytes .../Structures/Storage/canister.rsi/h2.png | Bin 0 -> 1099 bytes .../Storage/canister.rsi/halon-1.png | Bin 0 -> 1070 bytes .../Structures/Storage/canister.rsi/halon.png | Bin 0 -> 1035 bytes .../Storage/canister.rsi/healium-1.png | Bin 0 -> 1018 bytes .../Storage/canister.rsi/healium.png | Bin 0 -> 1014 bytes .../Storage/canister.rsi/helium-1.png | Bin 0 -> 938 bytes .../Storage/canister.rsi/helium.png | Bin 0 -> 993 bytes .../Storage/canister.rsi/locked.png | Bin 0 -> 493 bytes .../Structures/Storage/canister.rsi/meta.json | 188 ++++++++++++++++++ .../Structures/Storage/canister.rsi/nob-1.png | Bin 0 -> 1045 bytes .../Structures/Storage/canister.rsi/nob.png | Bin 0 -> 1054 bytes .../Storage/canister.rsi/orange-1.png | Bin 0 -> 1050 bytes .../Storage/canister.rsi/orange.png | Bin 0 -> 1027 bytes .../Storage/canister.rsi/proto_nitrate-1.png | Bin 0 -> 1001 bytes .../Storage/canister.rsi/proto_nitrate.png | Bin 0 -> 982 bytes .../Storage/canister.rsi/purple-1.png | Bin 0 -> 1082 bytes .../Storage/canister.rsi/purple.png | Bin 0 -> 1073 bytes .../Structures/Storage/canister.rsi/red-1.png | Bin 0 -> 1012 bytes .../Structures/Storage/canister.rsi/red.png | Bin 0 -> 983 bytes .../Storage/canister.rsi/redws-1.png | Bin 0 -> 1100 bytes .../Structures/Storage/canister.rsi/redws.png | Bin 0 -> 1083 bytes .../canister.rsi/scrubber-connector.png | Bin 0 -> 303 bytes .../Storage/canister.rsi/scrubber-open.png | Bin 0 -> 138 bytes .../Storage/canister.rsi/unlocked.png | Bin 0 -> 495 bytes .../Storage/canister.rsi/water_vapor-1.png | Bin 0 -> 1122 bytes .../Storage/canister.rsi/water_vapor.png | Bin 0 -> 1068 bytes .../Storage/canister.rsi/yellow-1.png | Bin 0 -> 870 bytes .../Storage/canister.rsi/yellow.png | Bin 0 -> 951 bytes .../Storage/canister.rsi/zauker-1.png | Bin 0 -> 977 bytes .../Storage/canister.rsi/zauker.png | Bin 0 -> 984 bytes 80 files changed, 330 insertions(+), 10 deletions(-) create mode 100644 Resources/Textures/White/Clothing/Neck/Cloaks/cap.rsi/equipped-NECK.png create mode 100644 Resources/Textures/White/Clothing/Neck/Cloaks/cap.rsi/icon.png create mode 100644 Resources/Textures/White/Clothing/Neck/Cloaks/cap.rsi/inhand-left.png create mode 100644 Resources/Textures/White/Clothing/Neck/Cloaks/cap.rsi/inhand-right.png create mode 100644 Resources/Textures/White/Clothing/Neck/Cloaks/cap.rsi/meta.json create mode 100644 Resources/Textures/White/Clothing/Neck/Cloaks/ce.rsi/equipped-NECK.png create mode 100644 Resources/Textures/White/Clothing/Neck/Cloaks/ce.rsi/icon.png create mode 100644 Resources/Textures/White/Clothing/Neck/Cloaks/ce.rsi/inhand-left.png create mode 100644 Resources/Textures/White/Clothing/Neck/Cloaks/ce.rsi/inhand-right.png create mode 100644 Resources/Textures/White/Clothing/Neck/Cloaks/ce.rsi/meta.json create mode 100644 Resources/Textures/White/Clothing/Neck/Cloaks/rd.rsi/equipped-NECK.png create mode 100644 Resources/Textures/White/Clothing/Neck/Cloaks/rd.rsi/icon.png create mode 100644 Resources/Textures/White/Clothing/Neck/Cloaks/rd.rsi/inhand-left.png create mode 100644 Resources/Textures/White/Clothing/Neck/Cloaks/rd.rsi/inhand-right.png create mode 100644 Resources/Textures/White/Clothing/Neck/Cloaks/rd.rsi/meta.json create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/antinob-1.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/antinob.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/black-1.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/black.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/blue-1.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/blue.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/brown-1.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/brown.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/can-connector.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/can-o0.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/can-o1.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/can-o2.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/can-o3.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/can-oa1.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/can-open.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/darkblue-1.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/darkblue.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/darkpurple-1.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/darkpurple.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/frezon-1.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/frezon.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/green-1.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/green.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/greenys-1.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/greenys.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/grey-1.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/grey.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/h2-1.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/h2.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/halon-1.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/halon.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/healium-1.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/healium.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/helium-1.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/helium.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/locked.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/meta.json create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/nob-1.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/nob.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/orange-1.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/orange.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/proto_nitrate-1.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/proto_nitrate.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/purple-1.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/purple.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/red-1.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/red.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/redws-1.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/redws.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/scrubber-connector.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/scrubber-open.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/unlocked.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/water_vapor-1.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/water_vapor.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/yellow-1.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/yellow.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/zauker-1.png create mode 100644 Resources/Textures/White/Structures/Storage/canister.rsi/zauker.png diff --git a/Resources/Prototypes/Entities/Clothing/Neck/cloaks.yml b/Resources/Prototypes/Entities/Clothing/Neck/cloaks.yml index 03fb51a219..80943322be 100644 --- a/Resources/Prototypes/Entities/Clothing/Neck/cloaks.yml +++ b/Resources/Prototypes/Entities/Clothing/Neck/cloaks.yml @@ -20,6 +20,15 @@ - type: StealTarget stealGroup: HeadCloak +- type: entity # WD + parent: ClothingNeckCloakCap + id: ClothingNeckCloakCapLuxurious + name: captain's cloak + description: A pompous and comfy blue cloak with a nice gold trim, while not particularly valuable as your other possessions, it sure is fancy. + components: + - type: Sprite + sprite: White/Clothing/Neck/Cloaks/cap.rsi + - type: entity parent: ClothingNeckBase id: ClothingNeckCloakHos @@ -42,6 +51,15 @@ - type: StealTarget stealGroup: HeadCloak +- type: entity # WD + parent: ClothingNeckCloakCe + id: ClothingNeckCloakCeLuxurious + name: chief engineer's cloak + description: A dark green cloak with light blue ornaments, given to those who proved themselves to master the precise art of engineering. + components: + - type: Sprite + sprite: White/Clothing/Neck/Cloaks/ce.rsi + - type: entity parent: ClothingNeckBase id: ClothingCloakCmo @@ -64,6 +82,15 @@ - type: StealTarget stealGroup: HeadCloak +- type: entity # WD + parent: ClothingNeckCloakRd + id: ClothingNeckCloakRdLuxurious + name: research director's cloak + description: A white cloak with violet stripes, showing your status as the arbiter of cutting-edge technology. + components: + - type: Sprite + sprite: White/Clothing/Neck/Cloaks/rd.rsi + - type: entity parent: ClothingNeckBase id: ClothingNeckCloakQm diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/salvage.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/salvage.yml index 34bf32d8d7..f5c666b839 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/salvage.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/salvage.yml @@ -47,7 +47,7 @@ - type: Sprite layers: - state: red - - sprite: Structures/Storage/canister.rsi + - sprite: White/Structures/Storage/canister.rsi state: blue - type: RandomSpawner rarePrototypes: diff --git a/Resources/Prototypes/Entities/Structures/Storage/Canisters/gas_canisters.yml b/Resources/Prototypes/Entities/Structures/Storage/Canisters/gas_canisters.yml index 4b0b0e9b29..d141bfeddd 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Canisters/gas_canisters.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Canisters/gas_canisters.yml @@ -9,7 +9,7 @@ - type: Transform noRot: true - type: Sprite - sprite: Structures/Storage/canister.rsi + sprite: White/Structures/Storage/canister.rsi noRot: true layers: - state: grey diff --git a/Resources/Prototypes/Loadouts/Jobs/Command/captain.yml b/Resources/Prototypes/Loadouts/Jobs/Command/captain.yml index 9aa8f77276..dd5c2c8905 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Command/captain.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Command/captain.yml @@ -73,6 +73,14 @@ equipment: neck: ClothingNeckCloakCapFormal +- type: itemLoadout # WD + id: CaptainCloakLuxurious + equipment: CaptainCloakLuxurious +- type: startingGear + id: CaptainCloakLuxurious + equipment: + neck: ClothingNeckCloakCapLuxurious + - type: itemLoadout id: CaptainMantle equipment: CaptainMantle diff --git a/Resources/Prototypes/Loadouts/Jobs/Engineering/chief_engineer.yml b/Resources/Prototypes/Loadouts/Jobs/Engineering/chief_engineer.yml index da9641d40d..5c5e8857c3 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Engineering/chief_engineer.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Engineering/chief_engineer.yml @@ -59,6 +59,14 @@ equipment: neck: ClothingNeckCloakCe +- type: itemLoadout # WD + id: ChiefEngineerCloakLuxurious + equipment: ChiefEngineerCloakLuxurious +- type: startingGear + id: ChiefEngineerCloakLuxurious + equipment: + neck: ClothingNeckCloakCeLuxurious + - type: itemLoadout id: ChiefEngineerMantle equipment: ChiefEngineerMantle diff --git a/Resources/Prototypes/Loadouts/Jobs/Science/research_director.yml b/Resources/Prototypes/Loadouts/Jobs/Science/research_director.yml index b7de89bb14..53440f8553 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Science/research_director.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Science/research_director.yml @@ -24,6 +24,14 @@ equipment: neck: ClothingNeckCloakRd +- type: itemLoadout # WD + id: ResearchDirectorCloakLuxurious + equipment: ResearchDirectorCloakLuxurious +- type: startingGear + id: ResearchDirectorCloakLuxurious + equipment: + neck: ClothingNeckCloakRdLuxurious + # Jumpsuit - type: itemLoadout id: ResearchDirectorJumpsuit diff --git a/Resources/Prototypes/Loadouts/loadout_groups.yml b/Resources/Prototypes/Loadouts/loadout_groups.yml index aa255fe71c..14cf725630 100644 --- a/Resources/Prototypes/Loadouts/loadout_groups.yml +++ b/Resources/Prototypes/Loadouts/loadout_groups.yml @@ -56,6 +56,7 @@ loadouts: - CaptainCloak - CaptainCloakFormal + - CaptainCloakLuxurious # WD - CaptainMantle - type: loadoutGroup @@ -985,6 +986,15 @@ loadouts: - ChiefEngineerHeadsetAlt +- type: loadoutGroup + id: ChiefEngineerNeck + name: loadout-group-neck + minLimit: 0 + loadouts: + - ChiefEngineerCloak + - ChiefEngineerCloakLuxurious # WD + - ChiefEngineerMantle + - type: loadoutGroup id: ChiefEngineerJumpsuit name: loadout-group-jumpsuit @@ -1003,14 +1013,6 @@ - ChiefEngineerDuffel - CommonSatchelLeather # WD -- type: loadoutGroup - id: ChiefEngineerNeck - name: loadout-group-neck - minLimit: 0 - loadouts: - - ChiefEngineerCloak - - ChiefEngineerMantle - - type: loadoutGroup id: ChiefEngineerOuterClothing name: loadout-group-outerclothing @@ -1177,6 +1179,7 @@ loadouts: - ResearchDirectorMantle - ResearchDirectorCloak + - ResearchDirectorCloakLuxurious # WD - type: loadoutGroup id: ResearchDirectorJumpsuit diff --git a/Resources/Textures/White/Clothing/Neck/Cloaks/cap.rsi/equipped-NECK.png b/Resources/Textures/White/Clothing/Neck/Cloaks/cap.rsi/equipped-NECK.png new file mode 100644 index 0000000000000000000000000000000000000000..0c04dac35ef79b62abec87b202c7cb3757fd057e GIT binary patch literal 2416 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Clothing/Neck/Cloaks/cap.rsi/inhand-right.png b/Resources/Textures/White/Clothing/Neck/Cloaks/cap.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..081177e3aa8dc603b35397b7a54b5622b237ef70 GIT binary patch literal 608 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Clothing/Neck/Cloaks/ce.rsi/meta.json b/Resources/Textures/White/Clothing/Neck/Cloaks/ce.rsi/meta.json new file mode 100644 index 0000000000..fde00d6116 --- /dev/null +++ b/Resources/Textures/White/Clothing/Neck/Cloaks/ce.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5a73e8f825ff279e82949b9329783a9e3070e2da, sprites in hand by PuroSlavKing (Github) and RudeyCoolLeet#3875", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-NECK", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/White/Clothing/Neck/Cloaks/rd.rsi/equipped-NECK.png b/Resources/Textures/White/Clothing/Neck/Cloaks/rd.rsi/equipped-NECK.png new file mode 100644 index 0000000000000000000000000000000000000000..0f3f854c70e742a12e7517338d63dc80cfcb7caa GIT binary patch literal 1645 zcmV-z29o)SP)Px*CrLy>RCt{2noVdMM-<2ZDZQzOD00?C!XZ}up%7z2Wy!|SLS$M)f>MloXuyRK z$5A3kE<{*^yEF6NyqVdVx9gr27Pw#nVf#DKRHc($v zI9@k|mg9=i(yPB;1RZ&cn~&LZ!QsK;=HrGsycinb?(Gcs}s>2A(?oPJ70Kl`Y z3;^KC=5MNfwSG?k;B5CqO_6%p{q6+X(LdWgfoEG8NOD>A)z9bG;dXZ-5{hC&T4m*E zT{HPj4WO*ptmCM4`iSNoJA=358vxX17VUf@JFhwhQ~vtr1tOs+o^55g&j5hI5}3Jn z4Wd}Z>q;K4D|rNF0u5!Hu8xLhftdiSBZ^hb+`Go5h?ZC?rkVwkTt+Mv!`R3$yghxY zqp-K94`U<4Y*$d$i=|@wk`JKfhIStvB(rl1)YVimJGapA%<1YNvvUii`{-cHZfP=| zA%U)O66hKy)a9jKU!hncg<^>;t>jc*Vxd@Kb&}~!YaZ#+N{-Y!scQf|s82pSx6l>? z6pAJ0@_KvwiMO}EpTn6BBQs_v}es|rpyp^)N6pAHPM?UTSq@nGl zl^juS+j?beY;0_7Y;0_7Y;0_7>R9rav|gFg`})}N(V==@$`HBs&yy8T(D0w2l0vaW z#zuw#0M27B)w|uDZ4`O2jT4+ufTQZbe|kxXay z(H(0f(;3$JSSrT!pn63@Q9N2+=GKLKy3&LNdP#B_cc0%v*f+`UTSH3%CGEUcLf|XbVw*f9(_(FAm$%T&6q(y{#Fbr;F8CB)0+RRBILPx%dr3q=R9J=WmOn@vaTLctE!~bnW8&H7P&D`_(hv&K2!cah93)6^5&|tMN`$&} z=p@PE&?$4!PKAOUge)P@sicJ)s*%v4i%5rJ8nx=sWd3#V?zm`jcO+9GU-&`td+*)* zy!Vp4Kv!LL)zyC{kuPeZnL)pAYU^0W!#!S~@OXWqTCX)EIyycvZFZ1tX|jJ#%m_~AvuaHDXc^`(aI&J zpG61^k1{?m$kFkM7#|oUFg(ij)g@ZF#7bn7kR0W_ehMHCeto)Um*c(@p)4r?BzIPc z1sBoEC9bb7@$`79RL=19c)7m1WWP`#7F;B`v)T~nq?Q0i^#C*5Vbp|*EGfi-i|iK) zXyp~(5r*oRoPdbw|w_dZ8&SV?>^F>YU?&aFw zj8*_^azO0v<;;U+Ra+rCUd#ESCeoR#nVg$H9CxZRAPf*A#tne&sx*|&WCeiV{}_O^ nrTCpV!^eF8I_c`!U3K*jJli{b5rB5X00000NkvXXu0mjfp`1`~ literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Clothing/Neck/Cloaks/rd.rsi/inhand-left.png b/Resources/Textures/White/Clothing/Neck/Cloaks/rd.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..094adddf3dbd31350b536426ebc8d991f28d397d GIT binary patch literal 733 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9GG!XV7ZFl&wk0|QgP zr;B4q#hkaZ4Ev-EMcV4!cOJ-6iBD{vq$WN?ckz^-Afu;Q+KWU*HCJQ=DcS-{Exi|-|}zC!~=5nb^p)IcHFbvg++g6cn)LECPw0jxbM6R zrewwS8%)`n6DlD*aq&;@|8{>R)p_zabVvO^-{CPSxn-e5@{>Ci0(F_SGvpIB&h6a1 zab2N`XJb_8rVsc1j;-Cg!@Pe*sOZN+#Yo^0V=MMK@!D0z<&GrK>_!vv022W--^Z@MXWD==;4E&r^CmQT&crRX6b<&apXZ#=R&5v9EZrY8&p+c{b3v6s zX03jgl9gL{m2^RKv}jA#TEmO{Hy*E?c|FSg=*@)XVdbYMf86l#hDB`PN;%z!ZsjwU z|Nbi%fB!5?#l3{v$pJ2Yk7VvStS{vENIUTVRQG??8N3PH36n`CF7LKDrI5LCiMOE1 z)5_YejSFAQTGXzf#hMj*a&P6E)DkWyO}o^ETdp?jH?^O0II4Q9)$R1JtmZp%?`5yu zxGP$2Y4g^wq}hf{f#D7Xd$K=F`E$sB=1br literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Clothing/Neck/Cloaks/rd.rsi/inhand-right.png b/Resources/Textures/White/Clothing/Neck/Cloaks/rd.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..afb201b3b2cf964d3bd3af365fd670f0e9729c76 GIT binary patch literal 763 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9GG!XV7ZFl&wk0|V1q zPZ!6KiaBp*ZOppuAk)5IyS6c*XuW{TFOH*9-rH}LOga8wrD}#(yU)Ge@W+O-&Q@vH zY@2;vXv?(N9opY)>ALOdk*rI9L~G6j&aeQSB} zbdGR?t5xzzS^1xbuAD!p{+Qx}z3d9xlc(L;=#d`tYmXN9@7N>N`=vhH{9vxxRJ%`X{`Obz z|L{a*ul}oA{-i8s?&-HPl>Mx(|9yDS+UAH=cgePIrVYK@ZPwT+OENR=&`^K&<;xZ= zZvBaReSaPPx{BMpzISZKR{f)43=F5A3Pmiftf~1ke`;wa&w~jTKlUFYI&2XNWoj6# z)!n}@%~X2itEhDTR@b5ln{q|0M=2iFS{@!-~*yE#Z4d3?}XS1K{`n=aRiq*i# zne+3zhZPggT~iC{w|Kbw=f!0=!>+9VFY(*1=bEj8r_h{YAu*+xlf9hA$Azt*UV8rL z;r1wf4)ePv)^|K^8%9h^eH`)s*wNK{xQ*ESx6L=aar^OnmQ$OSXmlMbC}aH+6dfoM zeLZiLu+99e^;h3~c*eEb_t37Uv#uPoY)b13t72d&1ni4{ObPEK_B>i%b{v?R89ZJ6 KT-G@yGywpsPF>#s literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Clothing/Neck/Cloaks/rd.rsi/meta.json b/Resources/Textures/White/Clothing/Neck/Cloaks/rd.rsi/meta.json new file mode 100644 index 0000000000..fde00d6116 --- /dev/null +++ b/Resources/Textures/White/Clothing/Neck/Cloaks/rd.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5a73e8f825ff279e82949b9329783a9e3070e2da, sprites in hand by PuroSlavKing (Github) and RudeyCoolLeet#3875", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-NECK", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/White/Structures/Storage/canister.rsi/antinob-1.png b/Resources/Textures/White/Structures/Storage/canister.rsi/antinob-1.png new file mode 100644 index 0000000000000000000000000000000000000000..928a7a4d8f34908295667401871760e55c5e02d7 GIT binary patch literal 973 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 N002ovPDHLkV1fnl)_wp0 literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Structures/Storage/canister.rsi/black.png b/Resources/Textures/White/Structures/Storage/canister.rsi/black.png new file mode 100644 index 0000000000000000000000000000000000000000..8fdda08039f8a9a53004db46cc17640bfb864e5e GIT binary patch literal 974 zcmV;<12O!GP)Px&h)G02R9J=0m%VS>Rusj5DoT|UB|0Hh$ZRCh0TjSUZ3NIz7eQ-u$t`w!`M{z}zu=mhi7Bt^>{k|D+2&qJNNng(~sk4Bd;g& zz5XC>*B|d}rO79Efn`?$O;z#7Lx98-H0?N$>-UrIEPS_7J1m|ifUiFT_=PRUYRTgS|60NnlcxA>b6-hYpS<{|A? zlk+#|JV=dVAP#O=C9Yh(%F|XGw?E?E{v*m&2Y_0+8eP$&Ty=282{6A%&m*x2&#zvFuHt$xM5ETMITcK+81u}$#zFIt%;fnC4bNj9 zQU{Ttt9V?VTLV$h2yQ>zm}_h6aVC-=eH%tb+O1|-Y{umTGexQ33mNbRV^*qVo=%_Z z*RRdwx&0BYIEjZ*8d4XMXeE!%z9zBrM<&{>X6kC5ngP%AGK#(wjK*V@3iPx&X-PyuR9J=WmQQFCc@)P#mIPX>Wja+*mtwXvC7{FwD_h!%D75M7p?K()z4-59 zkcxZIO9d@<4;8$qWRWf^xE{o14^n!n1qGXmV!YH=LT7BWG!g2gWu&r@F7fc|{3erB zr1ogOFwFek@6GRh-=BGJpo9`iD4~S!9qWoDwJo{)<&N!T^0}$$7mxm}=xw3vQ-t7S zy!gDYz~@<2XgRd7T%K+(Xa9i%Ts(KyWBgY1c8>aH@G0n#e&%P>Sm`9h$*q=%t61BT zqqtxH^cNKZT$nhj7I6?uoSP z#uq@<<=sl92nB;h#@nvkcl8{+84;wMO9{y6P`zHt^{xx(T^BrQ7ECHM5mHshU#Sw= z`-y1ZUqWNk77qcv`v%7FUG(q~5&GCoVKARmd~oIH_!Ma9K;P4ZasLv`#Mb$o(D-YA zrmCt6Yhr|G-&m1hKp6k?6x28KV?YJK0%~@)N>yuO1U=Hv%h-hbetk1cjfvVY%X92$ zl3Sh>Sm~rtR1~bYqgZc8rPnkb#dz`5&8q_?06_c0W3)d!2C6Q}NvOK((87OWf4SZ~ zUqQ{*0M*?$xZJ5w6WAx&8^d>{j(^{AvNO*;=U4x*m2ZWwP++`x3Y`ZTk3Rrl|Cu2G zY}*D9X(}v2V8c(#5C5-`z`vId64W%gmPO=KKq-g4Cs$|TD<~@z1T~F>X_7EaLcd1A z9EQfDVp9uaJ?LBUpuvseS~G!!X)>Njc!lvn(MFK*nG?nepmm4EZUel#BiOH+cl+QnIpb+a?qY0?>P+4z#fA zxj9VD;fnxFCo|G>+qSWWu44^d2UW)y=wWxuPM5&cn7D6j@XQ)0m<9e_zmZ+c;IC9U z-=$!sQUDB$t`}Y|3eWtND%qLmw4MB2bi3G1sB3k-1(=>hkMv{w^M~vediV%{?1E76 z6*$JTiy1<}MmkSl6}{ZSoFJ4fOhsL5@i1Ciz!>OReosWeSWcH?+#3N9Ga>Kr-V>r* zS*aA!d#_x*sWDLx8N;0k>7*!D_{MSUpx}pu5AWI0uuU!}<138WHT;m2@EL{^PzTak RO~?QM002ovPDHLkV1fu>%!L2| literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Structures/Storage/canister.rsi/blue.png b/Resources/Textures/White/Structures/Storage/canister.rsi/blue.png new file mode 100644 index 0000000000000000000000000000000000000000..815035d313632fe9a7497609a0384090737db6c4 GIT binary patch literal 972 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 JPDHLkV1hVn-YozC literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Structures/Storage/canister.rsi/can-connector.png b/Resources/Textures/White/Structures/Storage/canister.rsi/can-connector.png new file mode 100644 index 0000000000000000000000000000000000000000..5e072729ebdf2adf9fddcc946e70d64cc4cf34f6 GIT binary patch literal 399 zcmV;A0dW3_P)Px$Nl8ROR9J=WltD|wFc^lPiUejuOH09m48?;d5B?QT{sB*(J^3p=c=G0kut9BU z$X3WDo?187ZJld9NFE3z;e+?hmp1{2!{PYPNZ+^nYEFkV5XK3B6+(~~h4<$MY7>Dx z1F&r-PKFdO^K5U;paveEUc5>xlwNXkdq*5a8<}Xmmp+N3$eyPuVUqIx_PUXUK|3IQ z-x_0@_3FH)_Yg|ow?YU2Mlv9fXM{;gnax`3doxhK`IXcI5GE<=YtD2sK`#~?SAJ9m z>QEVD)`Y_(1)$7kD7~c8YU@AH*}%p4(tb`qyspCY*-y*2i63O3Hc@G{7A7GCBN;Hh zx^7Mk>^$|a4a8Ao+r(=st(tikaX8``3L!AYQ05tBo>6JV{o}Kj7lqeV9D3-$A!2PD t)Pa!<5JEI#wf%$B_K)w{cQ_nf`36?wi-OoU(G36q002ovPDHLkV1l5Js-yq_ literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Structures/Storage/canister.rsi/can-o0.png b/Resources/Textures/White/Structures/Storage/canister.rsi/can-o0.png new file mode 100644 index 0000000000000000000000000000000000000000..6f8eecad7243669514e183adedfd5c77517fac2d GIT binary patch literal 120 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3HE3&8=$zQjEnx?oJHr&dIz4a*RA(978f1 z-<~rRWKiH?*&xR>A^86}Ic^@ASRvMxObiS=rrh&t<8 literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Structures/Storage/canister.rsi/can-o2.png b/Resources/Textures/White/Structures/Storage/canister.rsi/can-o2.png new file mode 100644 index 0000000000000000000000000000000000000000..c9fcc6c22ccad357ba6dc14da8ac705da14fccb1 GIT binary patch literal 112 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}TAnVBArY-_ z&p8S*81Nk4aOcNn?FBuDcP(c*@SKG~%qmm;uF1Lek_-%Su?;I(m&!2Ccn8$Q;OXk; Jvd$@?2>?-^A(sFE literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Structures/Storage/canister.rsi/can-o3.png b/Resources/Textures/White/Structures/Storage/canister.rsi/can-o3.png new file mode 100644 index 0000000000000000000000000000000000000000..ee96a3f4e55abf3b8443c3bd7aaf12b9e4415ce1 GIT binary patch literal 114 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}I-V|$ArY-_ z&u!#nFyLX?sGeP&(f{Dgga<*d`1KeYSg+1}b;iGXTRHAz|ArY-_ zFK^^+FyLXm*kQKioW{fzn*zW6N;a7Ja)t6k0mXNod2h4l2mw{^TQsB6u-G#;sQ&Md zz}4?9?+c4=bk+Hp>kus~@W}IkWSC*nOKB$K*dt65QU4}Q6$ENw@O1TaS?83{1OS)F BHOl}1 literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Structures/Storage/canister.rsi/darkblue-1.png b/Resources/Textures/White/Structures/Storage/canister.rsi/darkblue-1.png new file mode 100644 index 0000000000000000000000000000000000000000..10902595db8717b24306f2afe519d6808700df99 GIT binary patch literal 943 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 N002ovPDHLkV1h&h$cO*{ literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Structures/Storage/canister.rsi/darkpurple.png b/Resources/Textures/White/Structures/Storage/canister.rsi/darkpurple.png new file mode 100644 index 0000000000000000000000000000000000000000..6ae6e5d95e0f000369031875d66b6f2852387bbd GIT binary patch literal 974 zcmV;<12O!GP)mkRWW>7n* zqEoY|of^oJp^Z~0okF1rNg_qq4)C-{$XY!dQoBrL# z_W)#0E0LVhGZ%obSH6=LAw^o$%l^{Yi?p`Z*l;Wkn2O|`;5qNACiS@r&CW892fwD; zKQ1F6faP>qPkFNgru_O`McSrR1oBGGFJ|ZI4L1Q$gciwjJsW_4yY242+6V;3_37Ej zdjqi(ij;*^1WJ0@p9bDh4Jo5foi6*p`m3ygJB{n~2HR5HFFyE`FITQfaih!mCAgl= zr3Y77JX1>LE}kiI>A{t-9?~G40##)2yb*UA*AwT!H!If=B7@_Nq*9PdDCuS2_3W_t z2Kzghug^zvtv@$IPH(u0BD7Qy6L-M{qe1KEB>;pu{_Ww(@#n2vliTek@10(xhg>%# z)<8)w`=(^&N5NDLN_yE(;-p3(m}*a*E&~86)IV%8qr6y1p8$LAcoBVWe#XlBL#l-u z^|=a`(@nIWD8Th>ih4d2((EkL>?|WhCX(-YBLJ4pUId`1=To~Ou|V=l&VNH_{CN2X z03JVC4+X`cH`or_^{bz5q>ki70Smh6E8Z7{==+m?REU@@aNEP6C zdq-OEFyeNCp%v)becJui)K*Na0ms`z5!!gcWXBEzqvuQK$SUKlc(rvieC9^|TUuLd zwEL?Z-k@=i8pZI!c`-ZBM{mB*qu<*MU7LHI`&0`x0IG!=_d54wO-?4@@r}*^^`ASw+M3Y)sWa5gMjyNG~C20Raa4JCScyE!5a> zEKcy84acHdsL{3iKzxxNMq&}FVkZ2qPtW3bqtIy3n)SH~hE@o9Sw*9@wH970LIZdA z-w6mDLwpScP6G_xaSG0t&V`Xkg7h{FgtYssSdNAoGmZl>GR|Sb8u<9FD#h$Ps>pD` zXhiacu1(kOA4y9RQV%4-kvxci%$YwB(eAIN9?erzuz>%07*qoM6N<$f@N*aR{#J2 literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Structures/Storage/canister.rsi/frezon-1.png b/Resources/Textures/White/Structures/Storage/canister.rsi/frezon-1.png new file mode 100644 index 0000000000000000000000000000000000000000..46dc9743ff843c6c806dcca4ac6ae7c393a0df4b GIT binary patch literal 1049 zcmV+!1m^pRP)Px&(@8`@R9J=WmS0F)XBftRN`?nFCv;h+nRaUy-Jhr%1$DL^w$K!$*b3d2i{Qlw z^g`yCH(^zf!bm%EF~JSj+MU4&Uc}CInvFqYS*2PV+YWJw6%E;i>=-4;LPv=Z$SzLu zot&oI+HQBt10Okgzd!HuKJWXT_dpRv6j4MG|96z!Z>Zn9FOz#-z4s(+Er~go>jT|- zSsu>Rls`eaX}7xm=j#RM{SyrNe`;!KGDq$00DN)pC5XoGj!xh{c>-7GL2#9Q8nx&gdHFq4hX-c`E2TTKMR0lwWz;N zPl0pa?YNlF;jH>xwP?X46?J}(s<`eJ0C>M!1E9ahDcE=SXsNKg|0RTF-JZ8z zeU8O~NFELa1O_jTV{d4uqxVytJ(5r>*=96i%@%7uo_hU1B4Dnv5e&~@uCie>8VQDH z)M6|%LZum7-^k;6`U@1+0Fa8tP~s6Hi3F*jAIa$fK(adsoI3EpgQhCf@u(1v9HDQ9U?=gwYYA}e&gP?g&Z0npoc#Ha-tL1kqfjCrhV@?nXzo~}xnqq~G{(mI zUEP{gG^X{GO0zou>rIWo_Ljoj+zkMcdnv1eWOs!8aUlW z;B*&~)q>m6#=A$X8iP>w)>PXvlHH*rr|SiMANH~uSz_|(V<_z}8;$0^bmg4u6acj+ zyyNT!vh6qv5mla~lGDQ*k#9Nw$)IS*KV7<{2LCwiIETOcAQ8xGv;X#kq=-KOSzLJ+ TUP?=n00000NkvXXu0mjfW5n$E literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Structures/Storage/canister.rsi/frezon.png b/Resources/Textures/White/Structures/Storage/canister.rsi/frezon.png new file mode 100644 index 0000000000000000000000000000000000000000..467fd7a1082206ed79889cdfdee764e3b232f9a3 GIT binary patch literal 1077 zcmV-51j_q~P)Px&?@2^KR9J=0mtRa*8lfqS+|`t2$t7uWe7LkQ z)1G^4mgqORIqCg<&-eE`zw+T{eI zUmb)^we-q1RrG9H@XlGwn%2@}cM6X8!t52}cTGca-u8kq=DC@>rut=NATO@ed5fC# zwa|W$7GW&|u7I#T?Zws_wM5VTI8N?fQodc~1~4!-%}=-PTB5fcb#m$5S07;jcBi1y z!N@N+`R0c;DfR3db@Vg`VOM)}HDGf$k*lqzr#Z;L*tE0{^fU*dF^X+tkz8iNRNFMd zMxS5IYkw7rPhU$)iZEH=FnfhY$5YI&EK7ZqeF`ES=Qz}V1c1k1Hr`#^OGv0=m5EO} zP`YC1v)1$;lNo)-nni18XSp#J(AwFF?^v_6BbsKQz3n6bpHD8L0|ZZSKfX%KQD=ek zF%(XSw{MvBuRkUB!TYqgon$g`U8*nLACJc)CcnQ*CYuEy9Qy)*Ty1^v)od&RkQnR( zz+PR=Tc^87rBWsR$cxbK6b&yt&(yea3;wpeguS|2Iwh0M@{0c@BjEQwVrKq#>2Z{A zL8XHQXB)3Y&j2v;W~}kKsWmbzWmd$9qw_VkCc_K-DxR1}~s=#|=(*oQc5;Wv$V2BhuHB#SPiC@u32R z(S10;y1R*-1zpn&9J)Z>jjI9ZG=%f84 zYZ^-aIWd9>kls=`Uv-B`6Majk;O!^3LEC2O^Z|Qbjcr>mq00000NkvXXu0mjfKS};O literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Structures/Storage/canister.rsi/green-1.png b/Resources/Textures/White/Structures/Storage/canister.rsi/green-1.png new file mode 100644 index 0000000000000000000000000000000000000000..b0af7b90a1f542431d12262c3bf4527e78ce381e GIT binary patch literal 1007 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 S@=Wdk0000|qc8ckJ7_ARVnqXWyryA@M&P z4y){qMq?U4V<-VYo}bO}_ixDC>9E0SM!CwQ3LO15G=>sYaHG+f{^2`ET4yN2(Ql)( zt(69=nJTF)T_u&JbHh9x!l`t$CS4{~s2=*gE{2D$^Y&+7inUZUL{(iqL3xp(Z|(R3 z%Zz%axOMY}u+bTch(|ZjYqS8wQc1B6urU9dh?}1s@JOki)nH8gI{Ixn!H0*g$2SQf+;b^P+mzA^WdN-0$d zl)CFRS}wM=Qe9rb8!aE==(pjTzK3i2o~Ww=Ls3TFJD1J@aI)nBhl`4dCladCuE-@2 z4x@b(&yX)H%q0+rY~tv*0npxK2f!$q=)U^BuzBn3$J`yCP?0!Pa%g8B&kPlT@`DE$ zzVj=M7BgS8eWEf9L^g$uT&mA;R8aFD5CD)WO^kY`kSa}-A3PvFF}+4ha=(tww$|s1 z^c3VhX>m0eLta`W5ZPqRJw@~BGXOML&9qyc&!FivUbIoy1Z} zRkO*)gV2NBN8Un?0*d_Ec&(`ky+$jP$VPNy9e|!w4th>G_+{L~{jD_xtHGFs^%*-5ssJ+q+8?0uL`Ivi(D_xxc87EtxS|GBCz1NPt*G^6K%e42{ zsV?7c>wd2bfGVjh-C#AV$f;(*`|rJjytIf^X+mCF#N(czR5H=rbRy$u-X}kfQ@W%>rLVX+<;*#d;;y`mKtldxVX+?1 z9Y(1nmpU$I)RO-Ipij>1DLHEx<;-`*xiXZpv&xpV`SclPeG7D+KTAB3VAM0kq|=#s sF0VZExnNfZ5(U{aBK!V%4kUZ{2dIgp&?ez&1poj507*qoM6N<$f^lR7`~Uy| literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Structures/Storage/canister.rsi/grey.png b/Resources/Textures/White/Structures/Storage/canister.rsi/grey.png new file mode 100644 index 0000000000000000000000000000000000000000..378bceee1f55ecb3059cbf4f9f5a059e65930d03 GIT binary patch literal 1029 zcmV+g1p51lP)nMU1WenHNVKI|Y6#Fm+eG*|WJ{Ho4qNN0p#1ghKW9vej-J(mcD~V}h zlDF$adT%>T?mdBle&6mr-}^mZe&_e+T=S%aGSW_qhE|*L74IgLq&W`|CoC9rn&C(_S z8dp)2ryBuH{D|Apc5S0r)=i2+C;~p|sQRqyIbICBASC)r?pOX&erMI>xS)#&eEj|x zm0C@R`{v0vxH5T7h%1}}4vUqqXK#@!tQ&FzoifC2<3oq8M-AeMLEy)$%}@4 z;BsObjVn@yrUajKR4q3fdh*@NJ>b-da9i$oKV%37hV*1~SgfXb&~+6|oO_4wue=9< zE!cWDx6_#u=Wa6n`81(Ogw;D@di#wQC4W#2MIzmL)DenA^!d>VrV-G(S|1i+c|7x?z}ZKAO_qu~)!>8zo?p@C*;6T8jEXn423-Kvo&9|C)ieOP!a8=F%}}sXs}b-F0x)(pfgnPBTF|=0#r1 zvoN2;;v6u%8<^(6Vd?pu0n;+EFrUO>v2y181w4Jd09?K{rGIn%(@$8+WLcO`vUh@Z zf?*l%g|@kG_&BlCrutDjSCIvSx;dMvc@{|0{pTXSacrw=ut00000NkvXXu0mjf6Yk>% literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Structures/Storage/canister.rsi/h2-1.png b/Resources/Textures/White/Structures/Storage/canister.rsi/h2-1.png new file mode 100644 index 0000000000000000000000000000000000000000..c0dcddddd6fb65f4bf08b1cb9d99c39ede34a13e GIT binary patch literal 1110 zcmV-c1gZOpP)Px(5J^NqR9J=WmU~Q_WfaDLFrt*eNO4@cEOeKkEQ3)}w-VxzEM!?W6J6rwEuxE= zn#@cSf;w23pg>qNBTE_#(}2WeDrPtmHZzqFAV?vlWl-CIP|9U(0ZTe6t<#8qbbaA# zw>Z)N~gsz{>jP7%K*^{ zDFE0lgJJRh4pE^2^K#VUo~g=a`$HQks{D|GCyqsYsx1|MRpn*W)Yef|T8zi*r9*F^ zf6229V6{)&Hxc2e+?ln!Rk>Y!;hnWJJu}0VrbeE5>s?{@yPc$G=i;!B()5uQvu&IX zy@Bgj+k{ViLLwgb9P(%x01JMfumg-(hDBaU2T~PsCLIf;D&*uoe~iV2`LN_yni|o4 z(Tu~s@;iNRAL-e-lFA~NynIkuPW6R)k`s~uD152_fQs7s<>0tB1Y4T@s0P`CQS4Uj zX6UCezHYk6k6oQa$zny&KYU*HJ(kONJtj)tc!jB17d5qYD3ocWD&)k+$%v1WVKoo& znXZi5lNxnu+S9c#)V-L{@ zDdNxNcRTUBo#@V=<7Cm>0BlK2B0e@&RF3B(To4a-$7-L5=n<{CsoVxYZ0oH+?VL17VF5|i+F zy^_&R*i*peLbl`ykdKQCCt#bu#jw%9Y3;{c20Fj}hGbiu0w$PXOp|Z)d^plPsInxaqw4&okePK!@Hy|LCN|wrBr-qz) zP)FrK9p88BnZ9ESV$!i7G{qMa&-C0Zp2fu#0v`7qCesiA${lG8n+zO3dW1|>HhDQ} zQF&*tfvWN{fIyHtkD6`%7TRhp+G;IXyB?;bQp>JwD{I|q>;WKMxmBVy5TXSyzVIye zu~C#e(#YNSc%b^URO&zfG7!jO79?9++o*rP6tiudn%X)vIeSI504|GBtm4@4RVfaVx=Yg^og#vo~Cf{65Z&FC?2}8^n2fW(Gi_5v%WO cc_CTHUx;h5NT@KHcmMzZ07*qoM6N<$g8KdvJOBUy literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Structures/Storage/canister.rsi/h2.png b/Resources/Textures/White/Structures/Storage/canister.rsi/h2.png new file mode 100644 index 0000000000000000000000000000000000000000..868a345f8c63c89e86823f607fee0a674b6c23b8 GIT binary patch literal 1099 zcmV-R1ho5!P)Px(1xZ9fR9J=0mw!l{bsWcE8$ow=dfeqYow8HQ%j*`GI5XBPdo~0Ww#-=sF>)}6 z1Q`vHscR(D7_!JeWFdn_u!{9ZB%Fbi42jU>(BZC`hd-WUPH!`hQ#-GJdiq13C&%ud z=X(*<`>*Go@B4W_Z$9_=^}v6OU8#_rZm$AhO;1mF9$jAtK)!ubSXY?nbbFOc?e7DS zyXT37oICgL0dS`4V__3QB$s=?(%Rg_jWItXqkhb>XhPm*nw6JcD50XPgp0kGnYn$- zQ2!AT11iRchmqw4UD5GaRH-N{5!MunfWzTXii!_1J@FF&CVN&wUVL>K0F@gKhyUFO zsN(ywZ3)jpOA*baD1;(V9)Ujo1Kdw7v)gTD(>h``x*8;Ndg2yu@c zewmK;^FmzV9I%&Y+R?Zze|@lBx|5H7=PXCX^+knZ*t-9FIP)q~0v zDMLd-kuy(;#5c9%yBV0_$f2@?-0y!J!|QQr$!If~4f7!7Dri3WCO>q%1AxW5b#Gw1 zGk2ZrqvxX@N+pTu2{FChdWTN8S1FaGR6S}al_YI`B!giD)UGx*`ZG`nz~Kvh?9JM% zacY6P%Xa}de(E&WuU(_Ex`v9f5=KV-y85~X;;YM8Efy-u{_gJ=dxO}MB;o4zFludX z0>EmqXx%XxbQ8qka41&$9zOr12Y|r*99D}(S1`Jnibphb@xENVqhj2J4S2qGqw^xa;E^8$iT8cbyo@^#KpDaY44Kg(7 z!(`9W-3<(LAlLcS_JG+kF*NAIW-@d9)M@fFGXQ8i->E&*{ox1P81pkU=ws&uO$OaE z%+1NsuGNiQSV)x7BH)05c0)rPWYh`@k~|^|g!#L&TQm`10zN zt@TZ(3=LcHzHA#I;HxjLC*|xk@!8kkFf}cNywXDSwo%;3Y#!oNYs^F?Rp|RziMJ=&}X=o z8Ac!+4(~F_bIO7Y&w4z}udM0vCnu+v3Iw!gjr3FcI8~>k9-^!Fg!C$YLf4*dk Re7XPt002ovPDHLkV1i1s3s3+6 literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Structures/Storage/canister.rsi/halon-1.png b/Resources/Textures/White/Structures/Storage/canister.rsi/halon-1.png new file mode 100644 index 0000000000000000000000000000000000000000..50f960b242f9da81b9b1a93582bd08bc430f8f0e GIT binary patch literal 1070 zcmV+}1kwA6P)Px&=t)FDR9J=WmS0F)R~*Mb+A^2zdP}M|OX8m{v;LtW3#}cS8_qH*gFTFaD}#0; zFES7*8$Q`RC~h$OunxOT?M7evVE0lP?qN`(;1ufwT}gwIbY_96$u&_kFSlfU@$MnX zF)`99eO$h9;N0Ku$2s5M_x$ef94MfG0tzVL|Bj-3lheq|&e)F<*EfV`MO({>uaYZ_ z6-@)G)0V}3)_XFFb3aQBYFnVTg^TV+WT}i1&oGKqp0jzCTw$E6d&^kSBpSQ#;OOXu z+7`fOq{hK!W!u3(+151R* zC#hN=138tCES)wqJ%%h<0MPUp057D!=Ogz;GPw#=D*)I{l>jt5TJe1MiEzjD4Swk! z5&jI$KANS*S}%qonK}0CF^1dvFoCdlHnr2))Gm_AB2a3eyaGV~o2Q5*R|%;>ro$6? zk|m-Vw*yHUyT4&RuteEdKaym|ZmJYR*Ax8s=@6mF3U!K$kQyYU2Kj3CCf?;a2HL(5 zB+^G5 zW34Bo23d^UFDhZjfcJ$js|HdCsX=7P!a!ReW}D1AS1&Q*8D=K1z)WBvb*_(h<0Z)q zfcMu<0Nf`#QgsvAjj@|5iAxF4)_6=YW}A#GmE{u%N4J>r32kSjZypCm4grVlI5(#5aQ@`0bT+l;1gcu9lC81@s^fVJN$&LI(Nhora9JF9 zm*;R<99U%w-sL%_!xPAog%WnS-1PC`cK8nz?`Mo8SMkTfs9KCb+()yc6@UiCO^^4> zeHZ$1-q$|NOBcYs^g3M(exP8dj4+-u%T@pe&;mu6v)V*4Y%S#mMlVv zZ0LFdfc_(c^dA|-w-qE2)pBAY$yLz}OV}Y1)zI|KYyuIO`3*pveMW@_#Vs0AAnxPy z^Pd6mXLOCN?QI}cpx34cxi&qB-Bd}}XfJ0Qoq|9}4Fce_pEep4H`&O#y_^Q`U53R6 z^uMU!kA-;{_ajMW-agR`fIk)%B(HeKxp4h^(GBYqm&g`i<8PIr53bTR+ADfRreS?M z`vbp6d_}Og1{NQH^JVPx&#Ysd#R9J=0mv3krWgN#pEkX%guB7Q@=`|h3cCHv=SR1JdnT0ms8#hL_H*>Hz zg1Wt!_^K0hOu_obp^m;8z7q;#=7oDVV!;ul7Uv{}j&5zqM!RdtbuGOe4H4=2;>>lE z%iR+g=odoBbKmFt``z#P{dofaG1^)o52+~&K$gO;&kget0JpW0u&yw1NKIK^cUS{6s&FZvU*?|#ZO`!<%$-P#8^dQUYcL9*4h%3)9s{k~(E5^fT8-a$n8i=_* z)1+0$Nl^$zAfXFz(Qb_ckUZw`jKg%4rl)K2Xwj#uR@9=Tn&tDMYx~KEMV3<|T zT%902obctQhZCH+I^pDlAB2xUkwTc}7MF4tJ^R3i`3p!=2;JNgIsyR)daORV-AO*J zwo0n&pewVqdDr3CRj>=JdD>{X3Qi|;6mFgcKuXzb*Ms)=WbYJT7N>Z*C(SZq)!>r@ z35x^ATJ>=c2aeeq9`KDoe0-G3kFd|2MFU`j>>E>b%X>YeBZMrdme!zb<-aWbM0IXfZ>U6c%i4) z(}9LzfRm|yO8O2M51Vp5BQT_2KqfxM<=HEulC3$Q)mB~C>$FqS%Yc1hsnbp}5^s8EXxRZp3ZY2d zPu&5cL0dd3M=;DPDJ6+4MMx=0;UOgKKm%HB)%C41@i7+k5*_TapqI$R$0%1T08KA0 zPr|nh8&Cr=baTrQZ8V+izzE4m+~Gy#2!*9N=eI0HJj>8C0=KolPy;b!Dcm#%8b%wR zb;CY_Q;8!0%xiyoned+l(>oHQZF}J?R%R&a5tJtFxKWzrYK7??$xmKv9RKtn4AhuB zoZ-elYp0VrSMIt|<@|je60gJjAHLcG7m}bw$D2;qi;s``?x?J7+Qt{Z!)p+MPy`;g zQNLrc2q>@E;$Haq7tnv*+v|gt{+vS40@a732^s$1;BOYNQ$u7F{B{5U002ovPDHLk FV1mqF=V|}| literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Structures/Storage/canister.rsi/healium-1.png b/Resources/Textures/White/Structures/Storage/canister.rsi/healium-1.png new file mode 100644 index 0000000000000000000000000000000000000000..7840f9b4c848ad5d91452a80d9b358abe6718a0c GIT binary patch literal 1018 zcmVPx&v`IukR9J=WmTzbqbr{D#Np5aedP`&-HLc7v3p25r%IqMa!51Z3>ZA@u`&Qk% zLPUKr1;KZP(Xu%m5gcrTy^#&y)ECxlK~O5Kw5%+&#^ZcIwzu)uxppH7~sH2YmI~?~Dq7AZ9{T}Z+4)dzXJN??bw)K~9oHzW- z8qHF(SYQ05M&Ca{+WF((CmF}3CIFHjh9O%bIC=uLSLgK8FPO?N-#Bj&?<7|EolB8p zu}UHs%KLr8*b2@;VS<3srY&YZh#i{jH* z3wS-|zX7m#nBW~BbA9(PypI9!_-Ded+S_Gt>w5=)6GZC$5B&zf*mXr1Pfx+ciJFvM zDNoWnIL)PJ{LGAHc`5WLhSwvUu09is49&dC%ECBCcazYSo}BQcb4&Q5&esM!69NR0x=$~pkWVK>ELH)Km(DNouLWlPpfX*neLKW|tL+%4VZ zyW$og_JGJjr5pBmtcH|Y7e^BKBfm^;Ndv?N)lPZQPI)0Dp?2i?An=yuKzd5N+k*x@ zR>y?~ZEX7YNk*^i1uEmXifU9lQ<{j-J2=g`Cq3pkzWwJmu*Y#+MO1FJ oE+jFZ?LuN=$C&-E7m_;u0*?!9c4N!ffB*mh07*qoM6N<$f=x{8s{jB1 literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Structures/Storage/canister.rsi/healium.png b/Resources/Textures/White/Structures/Storage/canister.rsi/healium.png new file mode 100644 index 0000000000000000000000000000000000000000..0e08caf3a82cc2d147f9f9d116e5e7ab90773069 GIT binary patch literal 1014 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 P00000NkvXXu0mjf$Wq|F literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Structures/Storage/canister.rsi/locked.png b/Resources/Textures/White/Structures/Storage/canister.rsi/locked.png new file mode 100644 index 0000000000000000000000000000000000000000..bb19fb448243f72aea469e1a42decd228b7469b6 GIT binary patch literal 493 zcmVEX>4Tx04R}tkv&MmKpe$iQ>8^(9IPOskfAzR5EXIMDionYsTEpvFuC*#nlvOS zE{=k0!NHHks)LKOt`4q(Aou~|=;Wm6A|?JWDYS_3;J6>}?mh0_0Yam~RI_UwP&La) zC*oo@w<-o+5kwgM5HKt;Q=dzvlJFc~_we!cF2=LG&;2>VO5S9EPb8jYx?vG-5KnJf zI_G`j2rEen@j3CBK^G)`SQF^v5Q j9svN~bY*WJ003?o^#KAyvluDf00000NkvXXu0mjf*rw6Z literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Structures/Storage/canister.rsi/meta.json b/Resources/Textures/White/Structures/Storage/canister.rsi/meta.json new file mode 100644 index 0000000000..197b62d033 --- /dev/null +++ b/Resources/Textures/White/Structures/Storage/canister.rsi/meta.json @@ -0,0 +1,188 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Frezon canister modified from tgstation, the rest are taken from tgstation at commit https://github.com/tgstation/tgstation/commit/f8581a636acfc1517611a680b7711a74fc7ef335", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "black" + }, + { + "name": "black-1" + }, + { + "name": "blue" + }, + { + "name": "blue-1" + }, + { + "name": "can-connector" + }, + { + "name": "locked" + }, + { + "name": "unlocked" + }, + { + "name": "can-o0", + "delays": [ + [ + 0.2, + 0.2 + ] + ] + }, + { + "name": "can-o1" + }, + { + "name": "can-o2" + }, + { + "name": "can-o3" + }, + { + "name": "can-oa1" + }, + { + "name": "can-open" + }, + { + "name": "grey" + }, + { + "name": "grey-1" + }, + { + "name": "orange" + }, + { + "name": "orange-1" + }, + { + "name": "red" + }, + { + "name": "red-1" + }, + { + "name": "redws" + }, + { + "name": "redws-1" + }, + { + "name": "yellow" + }, + { + "name": "yellow-1" + }, + { + "name": "green" + }, + { + "name": "green-1" + }, + { + "name": "greenys" + }, + { + "name": "greenys-1" + }, + { + "name": "darkblue" + }, + { + "name": "darkblue-1" + }, + { + "name": "frezon" + }, + { + "name": "frezon-1" + }, + { + "name": "water_vapor" + }, + { + "name": "water_vapor-1" + }, + { + "name": "scrubber-connector" + }, + { + "name": "scrubber-open" + }, + { + "name": "brown" + }, + { + "name": "brown-1" + }, + { + "name": "purple" + }, + { + "name": "purple-1" + }, + { + "name": "helium" + }, + { + "name": "helium-1" + }, + { + "name": "nob" + }, + { + "name": "nob-1" + }, + { + "name": "healium" + }, + { + "name": "healium-1" + }, + { + "name": "proto_nitrate" + }, + { + "name": "proto_nitrate-1" + }, + { + "name": "halon" + }, + { + "name": "halon-1" + }, + { + "name": "darkpurple" + }, + { + "name": "darkpurple-1" + }, + { + "name": "antinob" + }, + { + "name": "antinob-1" + }, + { + "name": "h2" + }, + { + "name": "h2-1" + }, + { + "name": "zauker" + }, + { + "name": "zauker-1" + } + ] +} diff --git a/Resources/Textures/White/Structures/Storage/canister.rsi/nob-1.png b/Resources/Textures/White/Structures/Storage/canister.rsi/nob-1.png new file mode 100644 index 0000000000000000000000000000000000000000..eb31c6fef0cb69b70b70e4251e079346a692375d GIT binary patch literal 1045 zcmV+w1nT>VP)Px&&q+ihpc5tEiUcW60J~@>x>UEv67{8czrm{ zY0_*uH{Z+`F8AK^=lA`d@9*66yHG_HRa8;M{~d;{4fYPFUVKg)Z5Wb^vhVQWH_OIP zOq|nqZ2Oh^-FpE@%+FTD`zO?tzNo6I_aA%#fN)}%oaX0bG|bqL8{ezlGWf*AIX!Fh z;!w5|IvXUD%Q1EN3iZEdbb#*?%MUC>4zzbTb$jd607O@w1;DZzV05(^AV2?!#G5<9w;MAtU#B^!@Fn4m|MO{|2rY_HQi;R3=1wszKQYvr(m{)sGW5H z5FEIO-WKENnJ{BR=()Lw!3eN(_Y?H=bo1IvFY@gMxo$mxzCmtCE@DV7(tJA3_$wmV zlaDLxY-|Le^9>(rFQ~nc*8F%Pg1m^V%?rTKKYU>*BsU$cNCAkv-%;8*dM3;VUxuaa zbj?u*iVu5pdCVroCl|9lo5kJ?Ib+Xe3QBP#8V6w1J17Wj zUIu&pvcJpWg+%wRWSzM1UKoOfp zia>l;g|!sxv-c*C&HsDi`wEcumq2feVKS@IiBisCQ7F6({{7&e)Kf++4%}TfTzCjX3sa9E2wYiMEjCkA`b3 zMTI-H+I1m>IQvTGc@J7Se?hopK@^?BT8iL+iw2-}O*k;>6>;+O5xMZPvZ<=7e&}^^ z0EH97vc0&fQcLTcarWi<3A}eomgBD`CxM47$3^_z4@nWFW%f~jNUHb?HS2xKN1qSp P00000NkvXXu0mjffA923 literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Structures/Storage/canister.rsi/nob.png b/Resources/Textures/White/Structures/Storage/canister.rsi/nob.png new file mode 100644 index 0000000000000000000000000000000000000000..9eff7cabcaf6682d18f8ecc3846d3da6d2ed0af2 GIT binary patch literal 1054 zcmV+(1mXLMP)Px&*hxe|R9J=0mtSaGRUF4Zsg_5dlzWI$VAK!88Dcs~41cm4V*A5iv2D1R&5= z9kY1b`91%BSXo4~3aG939WgPP;OkGJxDuw-wyWaq`h2)MlT1t|`C|MLv3dQQx+0VW zl+BejC@fua6(pEe+ZK>k=Trgt{6S&w8^^aC13+}XRGn<)Hvr05JD1&E50uIMTBPb; zt|?j(scK3d*z?@$V!i!wJo^$#q#Mhlw6EV`ZRyhPdEkRsg7kGYtkIhwK4K_gn^Zu> z4U_nY!ReFrv8PW$e8ix*VJZnw^1wZ<2fKNIGyMi*7t+!`aHij2tz(F`_8G`!>vGqP z(Sg8z@kim&O7i8bXze5{?d2>d8K3dq=f>i^^p1wB;NYnUFPw8YAM0_}e)g321lH#U z{$QFd#cGh|K%h4yjt&nus*6Tm?;YpFu_L4||03m=#z)t6k^1p_@&%{)4t?nKfz9TDs`$3QX8=fjHVQz8 z*UQkGZ)2Kf&3mK*eEy)=tFb#oxe$k*DE_hzEGfV|BC>;_U<_Ib1Tx8EDeF% zqmyYK;_w@90g(9WJkLI*Nd=TI2Ke2Z!tF7nY4j5 zr!cdyb)_4(N0;(T1r#?-?rA;vmSg0ASuI{6)xv33OU}6cQFrA`*T)&mDd+N?6SS5o zwPFCj7O9YmV47=FQLtbs9;PLf0iY$6VJRL~rEE+<&WcuDZ?$b)S!eLLvIecTjUIH` z_pS)oY#zYv(I0BRda(3IbHXHoY1|$i5lkx&A!Pw&%URK?3DpwHP+SRf*XN_S;)KI2 zC4H@#vD2hUxbx}d*CLQlRY;wt6G0yYtmO6~4a_NMU%!JWbNt&f^gmd}-I-(!z>2b` z7I0^4uu4neG-lS}kUe7Sh9Dd`>xj`JtaS{rb)}nI7e{NhV>Bm6%Px&)Ja4^R9J=WmS0F)cNE7z$uG$@8q=z@bw*@Fm`!2CBCaJ4yFnku`qY=P(sqR+ z^ucX(tPF9pvN=jOC=6B~gg&&xu`(DPgGwKyb^)bbNSz3c*)XtT+PI;ysY$%Xo4beG z{E{1m_0Qw-g-h-|Irn$IzwbG}b1qa+K?N05@PCJ;+|c!sqL)4=(i`&rjZIi3@laa&q_o(b}7|*-F6cnBH1*-!2s{{hovo{sQ8>Uq{JFOe7uj@;2dM24A)oJ zq)(%&kWf^qOhQos@VEp3!3XOyuC+9vS7@f+@tzh=eLZ6e9vlqF{|oq?96o1_yy~{w zs8_6v_U=M7Y)E^5=QjE~x0%vx1w;DQmkq<=Jyv3xAd*dU@X~#fD;uU@>+uC*nj!sc zaE^1KN4T{ryh4*#O04m7-+rR=tF&V$l1&rIrWv}CW-OFp^hlE=VJk>>pvi&9ZRg@` zl}I)%gP61E@7AgS_-^ta0QPxZI6TcTUnJla8c9`Q zo(wDt9G+(C@=JhfCJ;~M2o44SIC9|*5Xa}N;e+p&q|eEKgKPKlCek}=?dAJ;YM2Ok z+;+aYaF^EJGkkRZJ)A%Fo5&S>ydtw{A(#Kj&Epp!@XD7r$WGs7qVF^<=f44vN32m* zpk8C(wdddMRxlmIKR$a4fY#nKO!S>5p2`u{H#p=n^4wvu(L1rcjsv?yrMM@YQ z@Up&x%lZ!P{AFc5zF_i+X+j=l>NVEm3nZ;-kw8LG`Srm%0RA>3$6lck(*zwBn{2aT zeS_gQ>j9%7MduAk;;9@1Q!5Nit>6_JC$7eMwR^WD5Xq(iqurOz8Yr6uCj$;{%IhS9Q;=h*NfU?ZX!3Y-fWK9diN!^l)R zt!|-jmFL2)N+mtysv@QdzCGF?$8mVc=(5i>jtl5gs?8rHh2kke`Ivo?50VQ01(d{? UY?i5@Hvj+t07*qoM6N<$f(<_cH~;_u literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Structures/Storage/canister.rsi/orange.png b/Resources/Textures/White/Structures/Storage/canister.rsi/orange.png new file mode 100644 index 0000000000000000000000000000000000000000..adbd5397a543e818399fefeb3c47111a85e3238c GIT binary patch literal 1027 zcmV+e1pNDnP)Px&y-7qtR9J=0mrrP$bsWY&$(!VtChxMQVVX9A(tugT5g~-l1uC98l9QJ)aVYen z;5>-8F;9~oyzeU3S>{bpTINX{bl^f@MX*LlP-wcSX}85B%iHA5yTh9|Z8Uk`U!b7R zCEUE;1ru*l`>)kWB|55BF(P*8KpyojJubCk{*UJ>bv3JLdP7gRB-?Kt9Fl2EHwt@`tGM&jxE_%KxS4L;hq@0nOzB5IH>IK!P*`G^NQXd zVB;&nQ9!lX9V)@2m{&&6gk-|YRE`R7dsONjuHUPZQ_bqgseZ2CtILL* zOu#?WKfu01Vb3h}!kz*93dw|b?9MQ;fbg`3XwWls-g80oL8ox&ifyI-1uY&t-) z-Wfa-3whbdw+>@yf)Xvp!7&5#icYvE#(H3Bt;q7XWnv*Ov5=QaU(E7(pHpZ#0YgHj zJ*+p{e0KMs-;Pau_f~?XwIX0Px&qe(e*?t7kOAK@Rq>6FmhB zE09aTpT7w5nfS94F&0XLXfHO2`PaYdEMjwvWQKX~jqgp1B^km&4n9B4r{`O^8IO}o zz}SboOs7pgw8b)%t&DUew=QiYx6FX^~*a@$97~5;QXSftP#W)gDl<)C+@` zBrytQUy^ah^2qyV0eGRhg#&uU+#k%~?!Se*|CTs6^Ywh3{>)?@4vODJ*~avSB_Yce z07h_W%Eid_Lq=dCA(Zh>b6<66UJn4h?Fzl^3iuryt7^6S^gGOCep?s%Iww$a3l>&D zx+jcNeGhq`>ktm2d;*XMz;#xGS*w3`o*CrID}HsJC-@t9o5KGn(U@@<~mdTbG|RG^G^;tHg#!ngN} z(_g4W5p1jCT0I(d^Jvr!$vl@Hmz>gM-s~wgyM+G1rb*!UpWx?fLhlNs^(r`oVVB2z zkft}pl?49C#aUPp;wQ^{Q4V`i4tv4xKyJ8`=fpLT0T42sWal?2PU^kjbhJ&pc!g{MX6_@+*OTgdXuK8D7b2Y8t-_5T zZBTLsatWvofcl+J+=k0GSdvj=qLJ9hp)ICSBOxGV*bNWdDQ`xbS>(diTohZH>JtfY z!)!*Dwpr7G_SSJRAItWdib7V!C5?pWelW>UQ9GVIE7aR+#|8Y;2Z@2AHv3;cNGkXn Xulid#mY=_m00000NkvXXu0mjfIi=WE literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Structures/Storage/canister.rsi/proto_nitrate.png b/Resources/Textures/White/Structures/Storage/canister.rsi/proto_nitrate.png new file mode 100644 index 0000000000000000000000000000000000000000..f963edfd696189bda35add77cce09917a7f2615e GIT binary patch literal 982 zcmV;{11bE8P)Px&kV!;AR9J=0mtSbxRTRfR>Grn9q)UoT7)`QfHX|LUkyJ`jY2q3ZkU`e#!%gz5lHdK^ zprBs}zklERJ%@A7J?94gW7yhapN|UwdOKTx|FtTw-zBtl^&L1L7ojCP0Ph}pr6uL7 z=MMnLT&QR}p+_1yEBY6^$Xq`J%X^S7wI+I9@TQZ{)N?l8dWyJx-%|gujss21KY?_{ zTr>^jLxL&4wxnJPd@jN8Agnx;&o6~q^M1+5YlFL0`j;cn5IzNuN6D@0TJG5BUT{6)e)4@qg>U40DOf(18 zT`g(tZ74iWNNy2&x_y-WVr!J%T)@$ZP*!Z?ygO!K)yGrCz zY8!3u0>}GFMu%j6JEQX5qHK`-G3%gw$phnku%f4@tbx#F#OSqlT{JLyO=_q(mJx7A z;Ob0?&u{J_aKaeey639YU`kF&K{VGn>0KfVvZsbesC3GxYZJL)3zxy0$Q5}$lJ0KgBa6sL|USFpAXuMSB5 z?0YGe7F^1ftaczA62yF*J|g2d{Q(?x4=9)XUQF@jNAiBDchqu#SvyeOZEnGf&u;zY zbFWD>zV`G}Sq;LCBy@KF0|$IAVG9Ql=}n^#)J5%cf{wrr0Oet$mK`fK$_wWtPh%?T zwPG-g4-dk4AC;Sa_Om^due=NsG0B;T$>%np--y<0t>5QMFke3*%|8La9w|}{2h|Or z4$BA#k5lIHK>M{vHs#{LjvPAUeUdZYr#*zU9cW^`CXM_Z6ES&C^t$AAA|?wE%xA^{ zs2K;3UMCMj(hzMl9mm*R_9Hz_T1Vh#$_wY@fdseI*h-k1P|t$ygftlQnb!a^6^-A1 zRyt#!6NZKYmMOT}UEli+M{Xpk%(_k6aYtYWdt{T!YS37#fYvU!czhY2!JW7JsW1r0 zvD^y#*&g00Y~X%lgW{^Sw&j7u8%LZOF}mJsBi5p8+fZDEZ@y3uBG8CHK7s88AL4Nu zPK1rgXojC|!{fBE)=IyvKd0U};>9y+&Tl{J8UEkkPcaEMc3xXbZ2$lO07*qoM6N<$ Ef>8L*761SM literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Structures/Storage/canister.rsi/purple-1.png b/Resources/Textures/White/Structures/Storage/canister.rsi/purple-1.png new file mode 100644 index 0000000000000000000000000000000000000000..93674ec43462d23af0e56209d992d8f2d7fcf577 GIT binary patch literal 1082 zcmV-A1jYM_P)Px&^hrcPR9J=WmS1RFRUF4Z>n1hx?rzzZyW2EHV!Je~gcv84ZuF@PQ9&P~h)(HC z5lR`(f*>+ix{2F^lR|B)V?K;oeQ6(7M3Atl3w2al+YnZIyQW3jr8j?;ZkH=j#9kkg zoF>a~D|<9wIB@RyoqNvr_dVx+e-|pKpn?i2_`hSzy#t;=z$)~m#5yT6En>^Yt&;h5 za;;_U_=oLE4FL1g(`D;D2-}JuT(zq8Qd=_siBOifv_fC-G{;9j;rp znJ3a*>OVooFd4f#!FKbm1u%1S@u7(b0-iv?@^~7!xtzhAz70T3*Ra>f06gRLTL39D zO=0u#k$xt%7-Lr_7&-r)ShUF*unaSaEGYmOW)gsX`RB>_hEi39jDDDnrW`_?eRfk@nt*?A2D4c zrfYn9{Q{wd3HpMk1&M6{yA_4Qhn~i(?xJ_>Yht>FL)u%CIlyrH5JxX|;(y@~Pu1)b z@pfNO^e;w7`7GGW5*UL*73*`o}% z4>3MB#rWKmIM)Is$qqp1=Pm&J4V}4r6W^HQw7E!0Yhc{sFRHND$jH*3asqSu9fsS7 z0O%g=5$sR?&?n}+)$}ss%$AVYEAP2CkB3GH0k67?FRqPnq~STbS~^N5>PGG+tFprW zI=yTm$)E51@dyL}e2SaU!UR6WjVddI7A6QUT|t% zo%1MDpdf!S{0<+oqzEO7VVY|IoY^|SnXLmvG8${EM#-Fbc15^hHS0MqF>h}W$Rv}D z|1tw0&c2|6*Wnk2G?$8S>d1!xEUqTV7$%Urpy$E^oC^=&w7KXW?cv#jO@cs7*MOWw zdmVm?Aw1a=2w3kOdz<-L4JD!yO)fE?iXusNo`13xfM{|_ki7i&PlUcYCEU>C@QG{z z(sy(QUq4ItXpiuUf?@SvKQD?~$sL%V)$kl>BpjN-r?`ovq9k;U!Mr&^p|G@pedE2> zH=9d}kt`_~f8M1t?O@u#cDk24@m|80!}=h9iM7?M*si-07*qoM6N<$g3t{C A&;S4c literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Structures/Storage/canister.rsi/purple.png b/Resources/Textures/White/Structures/Storage/canister.rsi/purple.png new file mode 100644 index 0000000000000000000000000000000000000000..82b4198644444c0a24320cdf68cc6afa1e9933f5 GIT binary patch literal 1073 zcmV-11kU@3P)Px&>q$gGR9J=0mr-b2RT#&AD?*9fT}a#9q)Doz?b@;u)3n7Z8fB}&2eo@h#Rms_ zaENXwA_zltV+#5p4zcuQ>`hRL_QAp)M(KluSz6{?2pwr`7i4LS_jb*=UI|6%_2KT` zZE|yS0t5ZOgq-s~|L;5B`Of#93;!|pwL%^ZCrkiY>U5pgjavX*t>lDtg^8o#g!x70 zV*vc!vMZEPChh)@DT(gKZa4`T;{B29e8*C43gwWGipLd(3CK8px3vCGm3o;($Dk`Wx3lhWHmmD&2HUyz%MDK(E#HD;@eGSUoCH8hSYr$Ot=~^0vwWVN z<+1K@HW9lGo;fg(Oqz#|q+9jT!J#8*29inBi_B_3IG$NpPi*kzT1#q z0=9Ll5xtstnfbK^reA-NslyXoTw3+i_dK6yBxGKk`;r~q0N}mjGXO}E-<59|H2^-l z@D>0avcwCoyiIwl+R%=t13hxY^!Igg`8&(-mGw^YK*G{u_b;GkH zdmceR>O%grlc%Pw9ep+P0lnQpPX}zn0KK(G`9sn{-)hM9jKF9(VQR*3RjRaco=K2It(2|y|~$;|S3QOVXEsMO1@Sfnm zrDBs5v>fg1QP6UvVw2?65r z9NW(1)e^z950_n%|^E)Xn-5EO;&$x1{x{8{pk~%m-@p|)?-1I>bjfBjR zr&CVVv%8}g3f0>budnm%H{W|UA`pl`d8@kb;o^o_EW+bsaSGMjp8U%{USsvAytB5M reoG&x(MZVbP`nGwj;ab7{@>sq{jg`~n!j}R00000NkvXXu0mjfRapr2 literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Structures/Storage/canister.rsi/red-1.png b/Resources/Textures/White/Structures/Storage/canister.rsi/red-1.png new file mode 100644 index 0000000000000000000000000000000000000000..15bc2fa3229a9fe424da6c3cbd9bd71bd9f7ac78 GIT binary patch literal 1012 zcmVPx&u1Q2eR9J=WmQQFKM-;|?(ylD8kgzJ*S|s)0h+xqWY_LnPX$a}57;*>%N}!iO zz)*S#6kH00&|E?T1z$qI;7gzo3WZP%K@bSEE-s}O$QXiJv-QE2yOO2al`3f?t+t2N zPPCRGb#kme7nXJr&xw-KN=RWyDD1Wwe+e!yxBz!WP=zS>teu^T+ewW-e>&j^~>VDgIv2rIv5ipJZus1dRcjQ1j$nt z`-^InMK$V5vlndYQ$v3PaMk|;O)|;Xims>}G0}*xo&2N**I$E0V7jx%($%%3fAx&Il)Dhq6nGL0swZ;Bbh1t%&OLxgrNxot@yy z&%col#uy$?a27x>^KsY%bO3m8Xt6wHJLe!BjFGPu?X%%gEC`8rt`vZscU4wdnK{EZ z*WN>KwOE~<;In9$AAc{3ygCT^BLF5CAtu3?3UpE(2qVAF6%X`cH5<5Lf)%&sF&#+F?~UK3G2l?FNhZ`4;2*NB4tiVXN&93arEYp&2Yn1= z%3dY|4cFeZ&x@ zHwq{BDN{m|Os3^gQIN9j1D4*luTyiU!1nGDU?0#sg%WoPB~qru!iL8Ai|+^r^0gvh zm;2sc1IK#7jS+**x_tmQ>k7GciI6|SRsRbBHtULT^06_*{VV50HJp;iM6>{<`T-9w zoMmA{6ScxFSa4UbuwHL?;Mf`HH9i?=kUff$ujzbMb6RevOJy9oh5)AIvA$+h>2$dH z>k(k<0Jvw^=GJ?fk*jT{e6n>?p0yrh4yE%-98EI$`g~Zl<7~?=$FJ3n9n2|7_YXPx&kx4{BR9J=0m(Oe4W*o*pwxq~%lE$&u2*){WqAV0j3Jz>Du_DYEJeEO9}|cQ+wRlXmw}B{i-W`GQrJ677Po$u!zSnQm2iBA8#@PFTf3Txy|#9h z8#@Q1e#i>x5|j#pQ?JX$s+H;kpFOgf)ytgpb5bS91T>7AaC~RjdJ-%=ehQ^2C8^36wU06c#9 zD_550(k|iP@cC$5?>zV=(~?sKG>V2O>GPu}OB=yB`cIDd;&IfZR-gsE>`dp(0qx1BkPsZHn%2AHbJ{+R5eEpWAV+GXBK#W`ftAXrf9n!_na>4Miqc{qsl#}D@!?RMiU5sE|FifttrKGj8ITQ{oF zJ~0O^Kl;7b0|>DKCDW2q1(=#PI<^9Z){qop)2Yy`gsiyJBV5%8+3K7p)>KXG!T3F7 zW(ll7p`_1`?*XDx#Gm%il5fs=S=7J;C9nboyAZH>)}}QuDHW#1ih;-nWMZNz_)vez z^2`FIg5Y*3*<0GK$6n81rRYlWW^PF0EqPq~W+ludjYVv_?aZxtW(n+ppELV8(IUi} zdO_ROQ}I8#9`?&iKq&QIFwx7YrKuvzU>x6(y7B)e{sE>6b7Y=Cs}ukL002ovPDHLk FV1jq^-*Er{ literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Structures/Storage/canister.rsi/redws-1.png b/Resources/Textures/White/Structures/Storage/canister.rsi/redws-1.png new file mode 100644 index 0000000000000000000000000000000000000000..97b4dd6ec90ceae4dd90b24735ee5a720c36b4f8 GIT binary patch literal 1100 zcmV-S1he~zP)Px(21!IgR9J=WmR(3&XBfwS$w?ZIi!&ygv&6~TY<`syOB8K!8}?#2p&Nsat*~AU zS_IjRFxD{`xb>#EtH2l?GGTKY6xm?db|T2y(u(U)i>^ddyUc-_CDEvuCT98C#WAmm zDfH`d{^5ml-t)ZA^M5|x=Q*&4J?vo*d-%UYvwNe?*__Efm)-q?Kq4W&9qs-sPyUL# zCzGhK@>F>h0CO`p3-mn*y4;s4yFK$-TPpyGZ+^sQD5Jm8#Hq=@IQaf2LirVUPo~yr z<>`7S1MXfz>l<9WI);32Edy}t&pQuILylXFNBPuQwSsjC^|(wlMDc0*Q@^Ch;9kH+FUl(l@l4q#ljiI!jWQGq*)7U=o?*! z0C;2U7kp9*ZzRZY%wG_)t%YS4UOmcyyO#-%hn|xsDKVIFq$II6<6#EheucY>8#L%D z@J51oBSFsn10$FFX$<5?nf5!?EA) z0Pvi>k_uBP09_^x?Upp{mNY&oMPH+X+c#zf=~|-|fbrOpW-7Uo=TKe>K+U_NQ|NCz zzz@e;h2f7ZCa%v1MP9QgF_;0ku(`yA%_W+pC`J42c`}Zav~w4b4<>!o8m)YAdmY#Zz~qge6; z{joRzHrXJGH5bN)?T6_nAOPSjjxn+-<1CJ0lMRflY8j6C)evgJd@LIt&B6mvPy+xy zDaA}w#vh9_m0Y1iwgKSMmD9Z#xUZt25_LT)3L;>W4LG7&d{PRcGH{QnM4CV{z;N>Z zNXE;i#~0Q#mY>6@*LDbmSNvSRIRPMY??_4bq!cb)xoAjJ$raqss@Li7Gt%KTI`o$e|aM&WdtQxhA2ssrHjxN2@ZXBg#;%__S+bNsD$0CgN^ zk@YG!q#d%2TZiiT>eCO!IKFoIGVqw=IEy-G%gztU{NhgWPx&^+`lQR9J=0mtSaGWf;bP$w^F3|14>;_K>#zJ370TEpx3{W(zGcETvSukg?fd8@jlDw_kNdQhy-V#niD1pujzwx#bW^~z2EVl$ksEk^gR?mKV!UfK2%lwkr za@6;TBw!)7U0_VtU2wNNNiG;Yd(afBfa>)aO;vTwZY%(xc$AVnEvErsapT*$2U`J4 zT+O>nj>Y}ENs2|VALvk&1#8WFIdM&p|-Uu_M-+gcu7;aOUzq2O9eWOw3^n@6< zbS?h|EvIp6e4ay{&5qndoz0vYpD*@<6NHx_=r>r;rWtNiZGGU(WSnYWh}A8Z&=NQj zjy~~}vGzxNr}-q}Ql4j}OiAu|zM{yP-B=*-h|2FbZ`j7z^DY<)y7*#!6@aQE=DTmJ z&FAp7O5RUuwEGlh1@&xu;9#`f=<4g+YmP;9_4RQu+HTl!94pY@-2uSFCm$2{g#Z^P zs~f15eULIauccs7&jRpz%|0&vxyXw{Z_?l0!S_F2vDLRtU~?%!Z7@K8cL)959lSd* zzgDrdN&t&?`qcr=>+D_m)6h z%9kE6Ld3QUfO%oT2obH&9ZN5qK+tcXc)h53sratmW42C2_Mzo8TD@)*k3y^0Eqn-B z5VqpDl;8PP_ZwTU95L^SE{NsK?^79o0%~4zv}DI^XhF?O#CAl%GMz9z;Q~>;vdD|b z1xA;53#&M6L)#@-dGau7ULxqLDc=K_OJRLdJC-~cFrO<28tp_{f^7j0R}_C(px*FXPG(i3Wu9pxIQ!O zsO@+mdAPpbh#os$bUo{Iw8NaX!u6SHzWMq~63OJhyO1Q3Nmu3EtZ{P=+FGAxPFu0% z|NPqold-GCxla1Re@?-yMreP;mXlse2?hS&;4iB~a*8m$)T#gg002ovPDHLkV1jRx B2`2ym literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Structures/Storage/canister.rsi/scrubber-connector.png b/Resources/Textures/White/Structures/Storage/canister.rsi/scrubber-connector.png new file mode 100644 index 0000000000000000000000000000000000000000..261bbdb3403aa1af0cc40ea53b0480e8be157027 GIT binary patch literal 303 zcmV+~0nq-5P))}ox9|T1&Fm9oP;hZlRJ=o>s5G@{)7vE<2=O<`e>gb?0)ar_ z%S1;Llv2z3-57JY#)Y4w=6RlPYJJ}?ZQFViVclrod>qHyxUOq_iFoKh9LE4OO#^@s z0)V0@0K7PHSAbG#ky4_yj@GsHoGi=U?F~E;!o9G4?cGqut_$XQ-aPk2eN2EcCQ6dT z`n@bmXE6^$Xk(hD%~&b52qCDd%K12)k3jxP(lp)FhGC%VI@hgU6QD2J>rLn^0Ipfs zy8v)HpZ+HUaJ`h)whJM=yJN+c_E-LbKp+tKI)8#XS8T#jPCWns002ovPDHLkV1lgg Bh6Vrt literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Structures/Storage/canister.rsi/scrubber-open.png b/Resources/Textures/White/Structures/Storage/canister.rsi/scrubber-open.png new file mode 100644 index 0000000000000000000000000000000000000000..4eb9d1e70828df113e2d42ecc043a93cbf272a2a GIT binary patch literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJKu;IPkcv5PFK*;@P~>n8{JSxc zIW6J;RF4}Cm+YBZjy;?A>!-pdF`&wZ<7Mh9O65WGW~TlRXALPe+4K8bN!OX2Ee*S; l&%DODY`=iu+PViT<&XFB9+~UseFUh5!PC{xWt~$(695C}GlKvC literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Structures/Storage/canister.rsi/unlocked.png b/Resources/Textures/White/Structures/Storage/canister.rsi/unlocked.png new file mode 100644 index 0000000000000000000000000000000000000000..5cd585307ae7bebd7616051e5bd84854ef20b58b GIT binary patch literal 495 zcmVEX>4Tx04R}tkv&MmKpe$iQ>8^(9IPOskfAzR5EXIMDionYsTEpvFuC*#nlvOS zE{=k0!NHHks)LKOt`4q(Aou~|=;Wm6A|?JWDYS_3;J6>}?mh0_0Yam~RI_UwP&La) zC*oo@w<-o+5kwgM5HKt;Q=dzvlJFc~_we!cF2=LG&;2>VO5S9EPb8jYx?vG-5KnJf zI_G`j2rEen@j3CBK^G)`Px(97#k$R9J=WmR(F+Wf;eQ5L)|1hvyVpHVPv!Q6nOl45Ay8r8*%G)mF-8+FG&8{q6BD<@7*XQ|F(@OjWyJ9@C-h?Sq0X2xfg+{CDfG}oo1P{0qVyf5 zL`S@||Kv^1dEe(e@BjID-~WLuvdAKfEdKAv**(!(UY$ri{}|gq*TQ1$xz0Dz?0e6j zOH|~UICQ`Xz`!4~8UFqac{^WfrJ_Xp$rAu{PmW^7L~~;ULt_)1?&uQEd(WRsv^AgN zDcMbT&jli(btd{R!Qf^BU?4Dm*F*$?*7EAa!FVeZ>nXfB*oR$qieWHWuo#SZJWV8w_lWuWx*F>1YLJWF zqRhFe)E}>V6o9d~f~v*1t*$dXd^ICw%gQRJi>v7FxxlTd8BTU}VlY{-TTNo|zqo{|1ksIVbfZ~Bu4`f1 znorR`bQyr6Qa3i~UI6MIJVIreo60gbsuttP#>e<=VP257%gH8PQPy&T%0^m1q6F`L z^A!N962xLK(%jg;qHhENs|kbk004$~ zl!J01W>d0^q6y!A_60gW?53-u1Ax!_z7y<6yi>wih0&O?_QWnqeps6*d(vSB4{7$~>I0^p8k81@FK73X<%=x8N5W`WF0*j9v$eRer<0Z73K;gkIqZ=E-+~`WcBGRkF2-UoicIW;wy6SeRBz#^-a=5>U|CsB zvr)B}&=lQhW?5M!8jIZ_Fc)6sr_p3;CE0;wGh^S*f>SPFX*=?uvcVI_j{)%4qMt}; z9Y{8)cfyNz!i(K%;>y@{?k_uhhkz0Uz$H5pPPrhBoVb%)%c~QwoqZku^c0`@ej%i+ zp(r5?CJTp4OPF6=0+MH1k{vv-9_OQrUyIvNmL(A_Bz45&Y2wP*bqpp8ki4(}ez-A< z67c81t{(7DPvNe4gwW(DlI$Q92%u`4%qT%2Bum@TkZTv;z1Py7CPrp!K2bf+@bFb~ z09D%rVDiQm0Ll(AN|Vi6sVMPk`xyY<`TnvHom5miQ(975#^bqm-un0hA;*1#1Hk^| ocwavxDWtAdT?_MHe@L?U8+Ep$X&^5ZcmMzZ07*qoM6N<$f+89a5C8xG literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Structures/Storage/canister.rsi/water_vapor.png b/Resources/Textures/White/Structures/Storage/canister.rsi/water_vapor.png new file mode 100644 index 0000000000000000000000000000000000000000..feae2da892b5c94dd6524a87d5ba5128d42ab302 GIT binary patch literal 1068 zcmV+{1k?M8P)&*g_M*rlpNZ z4UjFCkRE!li6=ev;?4iT^x{FinCM9_C~3;UO=)Q{Z4)VoUMg0WrNXv5Q<(0u+u6kN zu$ttv>O7$tu|-;=-Il5l|GxRD73+jl#>7iqog`yC)|4=vS^o$Vp1rgA8 z#Uh=ap*zv(i|tNyl1|UCU9p4&2tPw97^YI*=Je1p&pzdQ2Z-Fh0zl+&^=zuK`u%!zlsmWXpvGdD zx)`5l4Wzny?eWo6y&4@GA5D?!>b1Qvz7ZH48|D)5;gw0uowLHgDDBa92Qvn2-RQZ@&K?0CJ<^iZ4E?O1%2XrvOCM z7S6ss&Ryf-u6{fPD2iggrN#O3+B5+77k(t7ws>8kU_9oPBd-B)@yvO?T3PaJ$(|{Y zrB?)7%y7838R8w=2ah=Lw#Tz52}W`#aiQ z?|r`fGlrgLZ8d`=H+e27z9|UFjg*Q{91&})8NyP4WKS<@Bm}^<8#kRhr%oJaIg@2= zH6t_?g<3J-I9IeNd%L<=SzW^@l$e`eVqz!66Q;@B{E{eTeFDs4+4WqqN=$3508DGG zNLC3|Yb7K%J|6*6FicnqJhKCYbVnojqmI93EdEp^cGvQWj7R!XCz(3CS zbtIV5HvyQ6#o4DdW9WIHnl`_d?E4IBrpQ4I6DJat@-_g;L>zS|1yGI3awbcI_4F?e zk7wwaf;WQAC~}ZJO3SV_P;*-Q7=`M_ob2g!IK0fa20j=#3E&7>Tg|Zi(-KlJyt^2! z6+_QEcfCxg1}-G4b9dI#S=l-3KX||uYZOYnn><8(;t1Kr1z&F8g``hyvqz2&IbCmX zY}l9dL1u&O;sPH}e(gDkgaiQ2Oh3_ol)jV4J+XJM-{i*p4**>LZRy{yWPi6lwawn& mPx&AW1|)R9J=WmS0HIQ545NlSOS5Vpb0p*x)xo&>RuWwDO^P%#A={QqZzTV~>G` z{wCJ5gM2ggkTuAc&FIY@LUFWbb&u?ZO?8_S_xb^jAC!?eQ}1AIQQ)gHHfkN<#cQGc77%#$(1czg zo-n`DOOjA(#HOp)#n+l0Hm7pj>TuBADfZYUXD!-WSF|n=u>c4*XLOV*0BWny&OKgp z`$%-3m^sG)*xo)#L**}=&)8(wGjw+feO9nJLn@XbIcpK{V~nn~IK=yx2rQ>a4kK!- z5COlD+A1kZ=XSe<*s+BWmblj95SyRSk{m_|VHLb9JAi;+>J@*s~U~0ZCTnwXxX-(6_(aBn5!njXi-=c1o`by+W-uROXm}Yq6HK2#27( zb%pk}D6s)Z#WLD)FQx-_rF1Qe>?8)Kr%Bn9OBy)>Gr{ew-SlE*L^V@bw!wB}Di2ETDHT4jPSTvr?u&^a3 w;?>4)rHx~Sf+0as@$91bX6n6^KO|-R1nRGL0TIkvjQ{`u07*qoM6N<$f|dWAYXATM literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Structures/Storage/canister.rsi/yellow.png b/Resources/Textures/White/Structures/Storage/canister.rsi/yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..66df902d3e7ba60357f2af37441e375a9b99670a GIT binary patch literal 951 zcmV;o14#UdP)Px&aY;l$R9J<@mqBP7R}hB3Ejn};mm&vpumpXLy8Wi zJ%-}bLTC@R3o3+OY)CGF&>qqR94JbQaw#R0qSAm4GEE@F!oeW*Qq)|G++xA>FkY`+ zueDEgN`H8~eeccA{BLI7yj}R8Vf7nBXhmRf`w_M{EMrDZZTRY zaT|b(=Nf&Hh($hUiHIxZWu!2TWK+?tFpZR#5fNANIZIwTfozIcrP)+}1dQC2Ng{I> zV6~#-iPO%n3;-RtJXr2rZDnAHie92EIyhu3+t^_i;Yd; zNh@BzF@eWTmp^`M7!ep8a`Dm)BLc6ODBS9Rmu@h4axvcc$wj<$gRPEcl$wtMR9nFHArQu5*VzwCZ_0?--S!K8TgB;ZXVxCzPU zEb)s-yQNLUJL%TbKHdBCJv3;EtU5s5x6G=Y(yAv4wm2H-H+1rgkDr7Ut?YJF}{S12?VIt z)W|=vvH)M+1vjnz%7P{!9DQf(N6!%K|MZ%ff(H*nrCM}^^Or)8fO_Spd$6%7dpb5B z{YwIYVK_Pm0;2(%b?xum3_Z~c#z`0unP1Xfjg3YpSU|?acr1bMf3>;a-oZcDrCNjH z<#6rlwdi-6bv1tRx~eXm=$bJ(3XWq7ZbHh-T3~`ZAt*xa*5SFeipn~U9eWOqN@Squ z%Ir49%W!r+f%kfsuRjZAg1L9c`};@it43#%$eD4AAL_5}&Al`6C%}QZPG|e&{TKe% Z_#5uqw38jG)qDT|002ovPDHLkV1gHF$(H~C literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Structures/Storage/canister.rsi/zauker-1.png b/Resources/Textures/White/Structures/Storage/canister.rsi/zauker-1.png new file mode 100644 index 0000000000000000000000000000000000000000..851c303abb6d83c0573a65c7d5d1fa8390fd4ff8 GIT binary patch literal 977 zcmV;?11|iDP)Px&i%CR5R9J=WmQ8HiWEjVPajikScnM9{HAr1omNJKmRzN3G)>8?TX`#w9!Tz|91p@D}6)489&|&>xR3RD|*ilLAv5ju8)?cx@H+{%H8__v0*2m6Ku z4{CD!>~8r^FENun#hK^7b|uyg8sz=2o~E#BN^;{n=)EhI4#yBHCIstxDg|d9Kz#YF z!|RQ}Lwlff6XGgls*pp-8^;JHJ>jX*ez(*GDcx`NoB)uh0qx;N}VC|$+ae-$1$z^*;r z+y=JG5PI7+)H<6$zqXHe&5vC9jt5;Oouf$ z;pVjw?r0c*BjXlF#x01eywY*dt23^;4&5lq{k=il2-NZC?-lgxQh05;#9Lf~OEI8RcvBt01IVECE((9myQwg7fK)wvXo!Jm~ zWwq)r8xqRU)6^y4JLx~xR1GJ4TyFsub4{gKlIl(=cAJ~$4%8||lwbsVS&<|c1F&vjr)47v@GD}) z#7-rEydx*_-JY@?7>*$-1&qe0xgt}#HeK(um)&OMZJV9F0{tmDKG}3V8eTPrG?jpl z^Msyxp{X5bPx&l1W5CR9J=0m(On-MI6OHb}FS6UUnU~NnAnKCRXbZ6blryr*qKkMzQ`;@CnI=RzNRUWK)aKk;x3PFbX9clqh%UlE^v9jL!g$3PqNcVNls zF1iG)r3JGIZArZ?uw#O$30S--?~kVac|SYy+Ts=~|MCj7#7DafJF>^5CiGTdEGDE(cMrnWfBCu$#!Umf73CZ~ zXMy=nju$88{zfwL*@7&PY`<&bz7mJ&5m?mIQ^$aj5Tr(7y{}iF5~)$Cp+MjY>>sq* z0Yars1QwizPi~mRlapny59~+RrcWv&MzT@6o zX++$@<c(7*d63_^cwfSvl5atd`2+A+bV!K1IA1)zL;xnrmc?pHQB^mqz@ z)sH^}QB;;>^$J7|!IaJF`|kl@zVs>&52+2@YfTJrHV*S!K$q?rXaHn7oslW%UiykZ z)VGIB-yz1O-|%jw;9^d`gaT>wRz@6&In2UAXD<>px zD!4i6m12+urX@N(g7;B^MqwED%_m?cD>*Y+dEW!{3sJuA|9q_i^UXb;zXO0VzCmp) z^_M*HL*NRCxFz>-Px&>*m*wE(UD+pxRt6w+ z?-_fbX6!wBjqZb7N3>OR%+uFsj1RYI;pC6FS5C+S2?wP{@%rC1@WVQsvH-h#4A9() zCK?54#+Va$x0)IX1h3KM20TUc&26}t!#kSp`f(CY-o*g94VN2%@_JctwG3CA1%?Sg zwq-vw3d4ABKSnqbrJ<;REd(D(4h#y09)ai(AiHA_9&FWU)GFY73)}1e@IbP?9%9E7 zlswpP@E{UX(i^L{VaMx?4M1-nrw0ZFmZj!Yt6CHPZ}2 Date: Sat, 20 Jul 2024 05:33:14 +0300 Subject: [PATCH 08/11] =?UTF-8?q?=D0=9F=D0=B0=D1=80=D1=83=20=D0=B8=D0=B7?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8=D0=B9=20(#468)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: Двери больше нельзя моментально открыть голыми руками * add: Несколько целевой пинпоинтер для оперативников синдиката * add: Боеголовка синдиката --- .../GameTicking/Rules/NukeopsRuleSystem.cs | 86 ++++++++----- Content.Server/Nuke/NukeCodePaperSystem.cs | 4 +- Content.Server/Pinpointer/PinpointerSystem.cs | 4 +- .../Pinpointer/PinpointerSystem.multiple.cs | 75 ++++++++++++ Content.Shared/Prying/Systems/PryingSystem.cs | 2 +- .../Nuke/NuclearBombSyndicateComponent.cs | 12 ++ .../Pinpointer/MultiplePinpointerComponent.cs | 13 ++ .../entities/objects/devices/nuke.ftl | 3 + Resources/Maps/Shuttles/infiltrator.yml | 115 ++++++++++-------- Resources/Maps/Shuttles/striker.yml | 43 +++---- .../Catalog/Fills/Backpacks/duffelbag.yml | 11 ++ .../Entities/Objects/Devices/pinpointer.yml | 20 +++ .../Entities/Objects/Misc/paper.yml | 1 + .../Entities/Structures/Machines/nuke.yml | 9 ++ .../Roles/Jobs/Fun/misc_startinggear.yml | 2 +- 15 files changed, 295 insertions(+), 105 deletions(-) create mode 100644 Content.Server/_White/Pinpointer/PinpointerSystem.multiple.cs create mode 100644 Content.Shared/_White/Nuke/NuclearBombSyndicateComponent.cs create mode 100644 Content.Shared/_White/Pinpointer/MultiplePinpointerComponent.cs diff --git a/Content.Server/GameTicking/Rules/NukeopsRuleSystem.cs b/Content.Server/GameTicking/Rules/NukeopsRuleSystem.cs index c2f00a6c06..77d38c8bb9 100644 --- a/Content.Server/GameTicking/Rules/NukeopsRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/NukeopsRuleSystem.cs @@ -251,8 +251,32 @@ public sealed class NukeopsRuleSystem : GameRuleSystem continue; } + MapId? targetStationMap = null; + if (nukeops.TargetStation != null && TryComp(nukeops.TargetStation, out StationDataComponent? stationData)) + { + var stationGrid = stationData.Grids.FirstOrNull(); + targetStationMap = stationGrid != null + ? Transform(stationGrid.Value).MapID + : null; + } + + // WD EDIT nukeops.WinConditions.Add(WinCondition.NukeExplodedOnCorrectStation); - SetWinType(uid, WinType.OpsMajor, nukeops); + + + var operatives = EntityQuery(true); + var operativesAlive = operatives + .Any(ent => ent.Item2.MapID != targetStationMap && ent.Item1.Running); + + if (operativesAlive) + SetWinType(uid, WinType.OpsMajor, nukeops); + else + { + nukeops.WinConditions.Add(WinCondition.AllNukiesDead); + SetWinType(uid, WinType.OpsMinor, nukeops); + } + // WD EDIT + correctStation = true; } @@ -516,7 +540,7 @@ public sealed class NukeopsRuleSystem : GameRuleSystem return; // If the win condition was set to operative/crew major win, ignore. - if (component.WinType == WinType.OpsMajor || component.WinType == WinType.CrewMajor) + if (component.WinType == WinType.OpsMajor || component.WinType == WinType.CrewMajor || component.WinType == WinType.OpsMinor) return; var nukeQuery = AllEntityQuery(); @@ -527,6 +551,7 @@ public sealed class NukeopsRuleSystem : GameRuleSystem if (nuke.Status != NukeStatus.ARMED) continue; + Log.Error("hyi"); // UH OH if (nukeTransform.MapUid != null && centcomms.Contains(nukeTransform.MapUid.Value)) { @@ -552,39 +577,42 @@ public sealed class NukeopsRuleSystem : GameRuleSystem } } - var allAlive = true; - var query = EntityQueryEnumerator(); - while (query.MoveNext(out var nukeopsUid, out _, out var mindContainer, out var mobState)) + if (!component.WinConditions.Contains(WinCondition.AllNukiesDead)) // WD EDIT { - // mind got deleted somehow so ignore it - if (!_mind.TryGetMind(nukeopsUid, out _, out var mind, mindContainer)) - continue; - - // check if player got gibbed or ghosted or something - count as dead - if (mind.OwnedEntity != null && - // if the player somehow isn't a mob anymore that also counts as dead - // have to be alive, not crit or dead - mobState.CurrentState is MobState.Alive) + var allAlive = true; + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var nukeopsUid, out _, out var mindContainer, out var mobState)) { - continue; + // mind got deleted somehow so ignore it + if (!_mind.TryGetMind(nukeopsUid, out _, out var mind, mindContainer)) + continue; + + // check if player got gibbed or ghosted or something - count as dead + if (mind.OwnedEntity != null && + // if the player somehow isn't a mob anymore that also counts as dead + // have to be alive, not crit or dead + mobState.CurrentState is MobState.Alive) + { + continue; + } + + allAlive = false; + break; } - allAlive = false; - break; - } + // If all nuke ops were alive at the end of the round, + // the nuke ops win. This is to prevent people from + // running away the moment nuke ops appear. + if (allAlive) + { + SetWinType(uid, WinType.OpsMinor, component); + component.WinConditions.Add(WinCondition.AllNukiesAlive); + return; + } - // If all nuke ops were alive at the end of the round, - // the nuke ops win. This is to prevent people from - // running away the moment nuke ops appear. - if (allAlive) - { - SetWinType(uid, WinType.OpsMinor, component); - component.WinConditions.Add(WinCondition.AllNukiesAlive); - return; + component.WinConditions.Add(WinCondition.SomeNukiesAlive); } - component.WinConditions.Add(WinCondition.SomeNukiesAlive); - var diskAtCentCom = false; var diskQuery = AllEntityQuery(); @@ -619,7 +647,7 @@ public sealed class NukeopsRuleSystem : GameRuleSystem component.WinType = type; - if (endRound && (type == WinType.CrewMajor || type == WinType.OpsMajor)) + if (endRound && (type == WinType.CrewMajor || type == WinType.OpsMajor || type == WinType.OpsMinor)) _roundEndSystem.EndRound(); } diff --git a/Content.Server/Nuke/NukeCodePaperSystem.cs b/Content.Server/Nuke/NukeCodePaperSystem.cs index 8df25feebf..c0a4d5f231 100644 --- a/Content.Server/Nuke/NukeCodePaperSystem.cs +++ b/Content.Server/Nuke/NukeCodePaperSystem.cs @@ -114,9 +114,7 @@ namespace Content.Server.Nuke foreach (var (nukeUid, nuke) in nukes) { if (!onlyCurrentStation && - (owningStation == null && - nuke.OriginMapGrid != (transform.MapID, transform.GridUid) || - nuke.OriginStation != owningStation)) + nuke.OriginStation != owningStation) { continue; } diff --git a/Content.Server/Pinpointer/PinpointerSystem.cs b/Content.Server/Pinpointer/PinpointerSystem.cs index be9a715d5d..0a7098909f 100644 --- a/Content.Server/Pinpointer/PinpointerSystem.cs +++ b/Content.Server/Pinpointer/PinpointerSystem.cs @@ -8,7 +8,7 @@ using Content.Shared.IdentityManagement; namespace Content.Server.Pinpointer; -public sealed class PinpointerSystem : SharedPinpointerSystem +public sealed partial class PinpointerSystem : SharedPinpointerSystem { [Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; @@ -18,6 +18,8 @@ public sealed class PinpointerSystem : SharedPinpointerSystem public override void Initialize() { base.Initialize(); + InitializeMultiplePinpointer(); // WD EDIT + _xformQuery = GetEntityQuery(); SubscribeLocalEvent(OnActivate); diff --git a/Content.Server/_White/Pinpointer/PinpointerSystem.multiple.cs b/Content.Server/_White/Pinpointer/PinpointerSystem.multiple.cs new file mode 100644 index 0000000000..5a0dd8b215 --- /dev/null +++ b/Content.Server/_White/Pinpointer/PinpointerSystem.multiple.cs @@ -0,0 +1,75 @@ +using Content.Shared._White.Pinpointer; +using Content.Shared.Interaction; +using Content.Shared.Pinpointer; + +namespace Content.Server.Pinpointer; + +public sealed partial class PinpointerSystem +{ + public void InitializeMultiplePinpointer() + { + SubscribeLocalEvent(OnMultiplePinpointerStartup); + SubscribeLocalEvent(OnMultiplePinpointerActivated); + SubscribeLocalEvent(OnMultiplePinpointerHandleState); + } + + private void OnMultiplePinpointerHandleState(EntityUid uid, MultiplePinpointerComponent component, ref AfterAutoHandleStateEvent args) + { + SetMultiplePinpointer(uid, component); + } + + private void OnMultiplePinpointerStartup(EntityUid uid, MultiplePinpointerComponent multiple, ComponentStartup args) + { + var pinpointer = EntityManager.EnsureComponent(uid); + + SetMultiplePinpointer(uid, multiple, pinpointer); + } + + private void OnMultiplePinpointerActivated(EntityUid uid, MultiplePinpointerComponent multiple, ActivateInWorldEvent args) + { + if (args.Handled) + return; + + args.Handled = CycleMultiplePinpointer(uid, multiple, args.User); + } + + private bool CycleMultiplePinpointer(EntityUid uid, MultiplePinpointerComponent? multiple = null, EntityUid? user = null) + { + if (!Resolve(uid, ref multiple)) + return false; + + if (multiple.Modes.Length == 0) + return false; + + multiple.CurrentEntry = (uint)((multiple.CurrentEntry + 1) % multiple.Modes.Length); + SetMultiplePinpointer(uid, multiple, user: user); + + return true; + } + + private void SetMultiplePinpointer(EntityUid uid, + MultiplePinpointerComponent? multiple = null, + PinpointerComponent? pin = null, + EntityUid? user = null) + { + if (!Resolve(uid, ref multiple, ref pin)) + return; + + if (multiple.Modes.Length <= multiple.CurrentEntry) + return; + + var current = multiple.Modes[multiple.CurrentEntry]; + SetDistance(uid, Distance.Unknown, pin); + if (current == "Off") + { + SetActive(uid, true, pin); + pin.Component = null; + } + else + { + SetActive(uid, false, pin); + pin.Component = current; + } + LocateTarget(uid, pin); + } +} diff --git a/Content.Shared/Prying/Systems/PryingSystem.cs b/Content.Shared/Prying/Systems/PryingSystem.cs index aefec3e211..5d75aec9ff 100644 --- a/Content.Shared/Prying/Systems/PryingSystem.cs +++ b/Content.Shared/Prying/Systems/PryingSystem.cs @@ -134,7 +134,7 @@ public sealed class PryingSystem : EntitySystem RaiseLocalEvent(target, ref modEv); - var time = TimeSpan.FromSeconds(!TryComp(target, out var airlock) || !airlock.Powered ? 0 : modEv.BaseTime * modEv.PryTimeModifier * toolModifier); // WD EDIT + var time = TimeSpan.FromSeconds(modEv.BaseTime * modEv.PryTimeModifier * (toolModifier - (!TryComp(target, out var airlock) || !airlock.Powered ? 1 : 0))); // WD EDIT var doAfterArgs = new DoAfterArgs(EntityManager, user, time, new DoorPryDoAfterEvent(), target, target, tool) { diff --git a/Content.Shared/_White/Nuke/NuclearBombSyndicateComponent.cs b/Content.Shared/_White/Nuke/NuclearBombSyndicateComponent.cs new file mode 100644 index 0000000000..2062b0d35a --- /dev/null +++ b/Content.Shared/_White/Nuke/NuclearBombSyndicateComponent.cs @@ -0,0 +1,12 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared._White.Nuke; + +/// +/// Used for tracking the nuke bomb - isn't a tag for pinpointer purposes. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class NuclearBombSyndicateComponent : Component +{ + +} diff --git a/Content.Shared/_White/Pinpointer/MultiplePinpointerComponent.cs b/Content.Shared/_White/Pinpointer/MultiplePinpointerComponent.cs new file mode 100644 index 0000000000..b27503cd4c --- /dev/null +++ b/Content.Shared/_White/Pinpointer/MultiplePinpointerComponent.cs @@ -0,0 +1,13 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared._White.Pinpointer; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class MultiplePinpointerComponent : Component +{ + [DataField(required: true)] + public string[] Modes = Array.Empty(); + + [ViewVariables, AutoNetworkedField] + public uint CurrentEntry = 0; +} diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/devices/nuke.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/devices/nuke.ftl index 564c2bae35..dd92dc38c2 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/devices/nuke.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/devices/nuke.ftl @@ -4,6 +4,9 @@ ent-NuclearBomb = ядерная боеголовка ent-NuclearBombUnanchored = { ent-NuclearBomb } .suffix = незакрепленный .desc = { ent-NuclearBomb.desc } +ent-NuclearBombSyndicate = { ent-NuclearBomb } + .suffix = синдикат + .desc = { ent-NuclearBomb.desc } ent-NuclearBombKeg = ядерная боеголовка .desc = Вам, вероятно, не стоит оставаться здесь, чтобы проверить, запущена ли она. Сбоку имеется кран. .suffix = кег diff --git a/Resources/Maps/Shuttles/infiltrator.yml b/Resources/Maps/Shuttles/infiltrator.yml index 55955bfeea..38077ca1b9 100644 --- a/Resources/Maps/Shuttles/infiltrator.yml +++ b/Resources/Maps/Shuttles/infiltrator.yml @@ -165,6 +165,14 @@ entities: - 0 - 0 - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 - volume: 2500 temperature: 293.15 moles: @@ -180,6 +188,14 @@ entities: - 0 - 0 - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 - volume: 2500 temperature: 293.14996 moles: @@ -195,6 +211,14 @@ entities: - 0 - 0 - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 - volume: 2500 temperature: 293.15 moles: @@ -210,6 +234,14 @@ entities: - 0 - 0 - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 - volume: 2500 temperature: 293.15 moles: @@ -225,6 +257,14 @@ entities: - 0 - 0 - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 - volume: 2500 temperature: 293.15 moles: @@ -240,6 +280,14 @@ entities: - 0 - 0 - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 chunkSize: 4 - type: DecalGrid chunkCollection: @@ -2650,8 +2698,6 @@ entities: rot: 3.141592653589793 rad pos: 5.5,-27.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: GasMinerOxygen entities: - uid: 369 @@ -2660,8 +2706,6 @@ entities: rot: 3.141592653589793 rad pos: 3.5,-27.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: GasMixer entities: - uid: 370 @@ -2675,8 +2719,6 @@ entities: - type: GasMixer inletTwoConcentration: 0.78 inletOneConcentration: 0.22 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0335FCFF' - proto: GasPassiveVent @@ -2687,24 +2729,18 @@ entities: rot: 3.141592653589793 rad pos: 3.5,-26.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 372 components: - type: Transform rot: 3.141592653589793 rad pos: 5.5,-26.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 373 components: - type: Transform rot: -1.5707963267948966 rad pos: 6.5,-19.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: GasPipeBend entities: - uid: 374 @@ -3268,8 +3304,6 @@ entities: rot: 1.5707963267948966 rad pos: 2.5,-23.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0335FCFF' - proto: GasPressurePump @@ -3282,8 +3316,6 @@ entities: rot: 1.5707963267948966 rad pos: 4.5,-19.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#FF1212FF' - proto: GasVentPump @@ -3294,8 +3326,6 @@ entities: rot: -1.5707963267948966 rad pos: 0.5,-11.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0335FCFF' - uid: 450 @@ -3304,8 +3334,6 @@ entities: rot: 3.141592653589793 rad pos: -0.5,-21.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0335FCFF' - uid: 451 @@ -3314,8 +3342,6 @@ entities: rot: -1.5707963267948966 rad pos: 4.5,-23.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0335FCFF' - uid: 452 @@ -3324,8 +3350,6 @@ entities: rot: 3.141592653589793 rad pos: -4.5,-21.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0335FCFF' - uid: 453 @@ -3334,8 +3358,6 @@ entities: rot: 1.5707963267948966 rad pos: -4.5,-16.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0335FCFF' - uid: 454 @@ -3344,8 +3366,6 @@ entities: rot: -1.5707963267948966 rad pos: 3.5,-16.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0335FCFF' - uid: 455 @@ -3353,8 +3373,6 @@ entities: - type: Transform pos: 0.5,-3.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0335FCFF' - proto: GasVentScrubber @@ -3365,8 +3383,6 @@ entities: rot: -1.5707963267948966 rad pos: 1.5,-12.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#FF1212FF' - uid: 457 @@ -3375,8 +3391,6 @@ entities: rot: -1.5707963267948966 rad pos: 3.5,-17.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#FF1212FF' - uid: 458 @@ -3385,8 +3399,6 @@ entities: rot: 3.141592653589793 rad pos: 2.5,-20.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#FF1212FF' - uid: 459 @@ -3395,8 +3407,6 @@ entities: rot: 1.5707963267948966 rad pos: -4.5,-17.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#FF1212FF' - uid: 460 @@ -3405,8 +3415,6 @@ entities: rot: 1.5707963267948966 rad pos: -3.5,-21.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#FF1212FF' - uid: 461 @@ -3414,8 +3422,6 @@ entities: - type: Transform pos: -0.5,-3.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#FF1212FF' - proto: GeneratorBasic15kW @@ -3635,6 +3641,9 @@ entities: - type: Transform pos: 4.5,-5.5 parent: 1 + - type: PointLight + color: '#D56C6CFF' + enabled: True - type: EntityStorage air: volume: 200 @@ -3653,6 +3662,14 @@ entities: - 0 - 0 - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 - type: ContainerContainer containers: entity_storage: !type:Container @@ -3726,19 +3743,19 @@ entities: - type: Transform pos: 5.6633797,-17.565443 parent: 1 -- proto: NuclearBombUnanchored +- proto: NuclearBombSyndicate entities: - uid: 509 components: - type: Transform pos: -2.5,-12.5 parent: 1 -- proto: NukeCodePaper +- proto: NukeCodePaperStation entities: - uid: 510 components: - type: Transform - pos: -2.5286522,-11.44479 + pos: -2.4890966,-11.441471 parent: 1 - proto: Ointment entities: @@ -3766,8 +3783,8 @@ entities: - type: Transform pos: -1.5,-24.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 + - type: PolymorphableCanister + currentPrototype: OxygenCanister - proto: OxygenTankFilled entities: - uid: 515 @@ -4551,8 +4568,8 @@ entities: - type: Transform pos: 2.5,-23.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 + - type: PolymorphableCanister + currentPrototype: StorageCanister - proto: SubstationBasic entities: - uid: 628 diff --git a/Resources/Maps/Shuttles/striker.yml b/Resources/Maps/Shuttles/striker.yml index 6a450f5266..6ef324fdbb 100644 --- a/Resources/Maps/Shuttles/striker.yml +++ b/Resources/Maps/Shuttles/striker.yml @@ -184,6 +184,14 @@ entities: - 0 - 0 - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 chunkSize: 4 - type: GasTileOverlay - type: RadiationGridResistance @@ -191,6 +199,7 @@ entities: shakeTimes: 10 - type: SpreaderGrid - type: GridPathfinding + - type: NukeOpsShuttle - proto: AirCanister entities: - uid: 91 @@ -198,8 +207,8 @@ entities: - type: Transform pos: -0.5,-8.5 parent: 325 - - type: AtmosDevice - joinedGrid: 325 + - type: PolymorphableCanister + currentPrototype: AirCanister - proto: AirlockExternalShuttleSyndicateLocked entities: - uid: 142 @@ -825,6 +834,10 @@ entities: occludes: True ents: - 245 + disk_slot: !type:ContainerSlot + showEnts: False + occludes: True + ent: null - proto: CyberPen entities: - uid: 77 @@ -1041,8 +1054,6 @@ entities: rot: 3.141592653589793 rad pos: -0.5,-8.5 parent: 325 - - type: AtmosDevice - joinedGrid: 325 - proto: GasVentPump entities: - uid: 218 @@ -1054,8 +1065,6 @@ entities: address: Vnt-5f41a0ae transmitFrequency: 1621 receiveFrequency: 1621 - - type: AtmosDevice - joinedGrid: 325 - uid: 219 components: - type: Transform @@ -1066,8 +1075,6 @@ entities: address: Vnt-129c27d2 transmitFrequency: 1621 receiveFrequency: 1621 - - type: AtmosDevice - joinedGrid: 325 - uid: 220 components: - type: Transform @@ -1078,8 +1085,6 @@ entities: address: Vnt-11c4609d transmitFrequency: 1621 receiveFrequency: 1621 - - type: AtmosDevice - joinedGrid: 325 - uid: 221 components: - type: Transform @@ -1090,8 +1095,6 @@ entities: address: Vnt-6859729f transmitFrequency: 1621 receiveFrequency: 1621 - - type: AtmosDevice - joinedGrid: 325 - uid: 222 components: - type: Transform @@ -1102,8 +1105,6 @@ entities: address: Vnt-19d24c7f transmitFrequency: 1621 receiveFrequency: 1621 - - type: AtmosDevice - joinedGrid: 325 - proto: GeneratorBasic15kW entities: - uid: 41 @@ -1457,6 +1458,13 @@ entities: - type: Transform pos: 1.561105,-2.5567772 parent: 325 +- proto: OxygenTankFilled + entities: + - uid: 167 + components: + - type: Transform + pos: 1.60798,-0.3062118 + parent: 325 - proto: PinpointerNuclear entities: - uid: 162 @@ -2379,11 +2387,4 @@ entities: occludes: True ents: - 346 -- proto: YellowOxygenTankFilled - entities: - - uid: 167 - components: - - type: Transform - pos: 1.60798,-0.3062118 - parent: 325 ... diff --git a/Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml b/Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml index 4e4b6d9382..a91c3b2644 100644 --- a/Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml +++ b/Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml @@ -332,6 +332,17 @@ - id: PinpointerSyndicateNuclear - id: DeathAcidifierImplanter +- type: entity + parent: ClothingBackpackDuffelSyndicateBundle + id: ClothingBackpackDuffelSyndicateLonelyOperative + name: operative duffelbag + components: + - type: StorageFill + contents: + - id: BoxSurvivalSyndicate + - id: WeaponPistolViper + - id: PinpointerStationNuclear + - id: DeathAcidifierImplanter - type: entity parent: ClothingBackpackDuffelSyndicateMedicalBundle diff --git a/Resources/Prototypes/Entities/Objects/Devices/pinpointer.yml b/Resources/Prototypes/Entities/Objects/Devices/pinpointer.yml index 29d6d67885..0bf0145080 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/pinpointer.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/pinpointer.yml @@ -63,6 +63,26 @@ - type: Pinpointer component: NukeDisk targetName: nuclear authentication disk + updateTargetName: true + + - type: MultiplePinpointer + modes: + - Off + - NukeDisk + - NuclearBombSyndicate + - NukeOpsShuttle + +- type: entity + parent: PinpointerSyndicateNuclear + id: PinpointerStationNuclear + suffix: Station bomb + components: + - type: MultiplePinpointer + modes: + - Off + - NukeDisk + - Nuke + - NukeOpsShuttle - type: entity name: universal pinpointer diff --git a/Resources/Prototypes/Entities/Objects/Misc/paper.yml b/Resources/Prototypes/Entities/Objects/Misc/paper.yml index 6ea6395763..6e84c47ff8 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/paper.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/paper.yml @@ -303,6 +303,7 @@ suffix: Station Only components: - type: NukeCodePaper + allNukesAvailable: false - type: entity name: pen diff --git a/Resources/Prototypes/Entities/Structures/Machines/nuke.yml b/Resources/Prototypes/Entities/Structures/Machines/nuke.yml index 2aab75d54e..d1cbf154a9 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/nuke.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/nuke.yml @@ -94,6 +94,15 @@ - type: Physics bodyType: Dynamic +- type: entity + parent: NuclearBombUnanchored + id: NuclearBombSyndicate + suffix: syndicate + components: + - type: NuclearBombSyndicate + - type: NukeLabel + prefix: nuke-label-syndicate + - type: entity parent: StorageTank id: NuclearBombKeg diff --git a/Resources/Prototypes/Roles/Jobs/Fun/misc_startinggear.yml b/Resources/Prototypes/Roles/Jobs/Fun/misc_startinggear.yml index 8388cec302..6d531175b7 100644 --- a/Resources/Prototypes/Roles/Jobs/Fun/misc_startinggear.yml +++ b/Resources/Prototypes/Roles/Jobs/Fun/misc_startinggear.yml @@ -142,7 +142,7 @@ id: SyndicateLoneOperativeGearFull equipment: jumpsuit: ClothingUniformJumpsuitOperative - back: ClothingBackpackDuffelSyndicateOperative + back: ClothingBackpackDuffelSyndicateLonelyOperative mask: ClothingMaskGasSyndicate eyes: ClothingEyesHudSyndicate ears: ClothingHeadsetAltSyndicate From d556318b61cd5c44e3747eebb0229cabf6375eeb Mon Sep 17 00:00:00 2001 From: RavmorganButOnCocaine Date: Sat, 20 Jul 2024 02:34:17 +0000 Subject: [PATCH 09/11] Automatic changelog update --- Resources/Changelog/ChangelogWhite.yml | 45 ++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/Resources/Changelog/ChangelogWhite.yml b/Resources/Changelog/ChangelogWhite.yml index 98c5412734..8dacdf1b51 100644 --- a/Resources/Changelog/ChangelogWhite.yml +++ b/Resources/Changelog/ChangelogWhite.yml @@ -6189,3 +6189,48 @@ id: 397 time: '2024-07-20T02:08:01.0000000+00:00' url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/467 +- author: Spatison + changes: + - message: "\u041D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0446\u0435\u043B\ + \u0435\u0432\u043E\u0439 \u043F\u0438\u043D\u043F\u043E\u0438\u043D\u0442\u0435\ + \u0440 \u0434\u043B\u044F \u043E\u043F\u0435\u0440\u0430\u0442\u0438\u0432\u043D\ + \u0438\u043A\u043E\u0432 \u0441\u0438\u043D\u0434\u0438\u043A\u0430\u0442\u0430" + type: Add + - message: "\u0411\u043E\u0435\u0433\u043E\u043B\u043E\u0432\u043A\u0430 \u043D\u0430\ + \ \u0448\u0430\u0442\u0442\u043B\u0435 \u0441\u0438\u043D\u0434\u0438\u043A\u0430\ + \u0442\u0430 \u0442\u0435\u043F\u0435\u0440\u044C \u0432\u0441\u0435\u0433\u0434\ + \u0430 \u0441\u043E \u0441\u0432\u043E\u0438\u043C\u0438 \u043A\u043E\u0434\u0430\ + \u043C\u0438 \u0430\u043A\u0442\u0438\u0432\u0430\u0446\u0438\u0438" + type: Tweak + - message: "\u0415\u0441\u043B\u0438 \u043F\u0440\u0438 \u0432\u0437\u0440\u044B\ + \u0432\u0435 \u0431\u043E\u0435\u0433\u043E\u043B\u043E\u0432\u043A\u0438 \u043D\ + \u0435 \u043E\u0434\u0438\u043D \u043E\u043F\u0435\u0440\u0430\u0442\u0438\u0432\ + \u043D\u0438\u043A \u043D\u0435 \u043F\u043E\u043A\u0438\u043D\u0443\u043B \u0441\ + \u0442\u0430\u043D\u0446\u0438\u044E, \u0442\u043E \u0437\u0430\u0441\u0447\u0438\ + \u0442\u044B\u0432\u0430\u0435\u0442\u0441\u044F \u043C\u0438\u043D\u043E\u0440\ + \u043D\u0430\u044F \u043F\u043E\u0431\u0435\u0434\u0430" + type: Tweak + - message: "\u0418\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u043E \u043C\u043E\ + \u043C\u0435\u043D\u0442\u0430\u043B\u044C\u043D\u043E\u0435 \u043E\u0442\u043A\ + \u0440\u044B\u0442\u0438\u0435 \u043E\u0431\u0435\u0441\u0442\u043E\u0447\u0435\ + \u043D\u043D\u043E\u0433\u043E \u0448\u043B\u044E\u0437\u0430 \u0440\u0443\u043A\ + \u043E\u0439" + type: Fix + id: 398 + time: '2024-07-20T02:33:14.0000000+00:00' + url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/468 +- author: ThereDrD + changes: + - message: "\u0420\u0435\u0441\u043F\u0440\u0430\u0439\u0442 \u0432\u0441\u0435\u0445\ + \ \u043A\u0430\u043D\u0438\u0441\u0442\u0440" + type: Add + - message: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u044B \u043D\u043E\u0432\ + \u044B\u0435 \u043A\u0440\u0430\u0441\u0438\u0432\u044B\u0435 \u0432\u0438\u0434\ + \u044B \u043F\u043B\u0430\u0449\u0435\u0439 \u0434\u043B\u044F \u041A\u0430\u043F\ + \u0438\u0442\u0430\u043D\u0430, \u0421\u0415 \u0438 \u0420\u0414. \u0414\u043E\ + \u0441\u0442\u0443\u043F\u043D\u044B \u0432 \u043B\u043E\u0430\u0434\u0430\u0443\ + \u0442\u0430\u0445" + type: Add + id: 399 + time: '2024-07-20T02:32:32.0000000+00:00' + url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/469 From 89d1c95cbfc4f3b9d3582e528de805e156b474dc Mon Sep 17 00:00:00 2001 From: ThereDrD0 <88589686+ThereDrD0@users.noreply.github.com> Date: Sat, 20 Jul 2024 18:28:44 +0300 Subject: [PATCH 10/11] =?UTF-8?q?=D0=A4=D0=B8=D0=BA=D1=81=D1=8B=20=D1=81?= =?UTF-8?q?=D0=B2=D0=B5=D1=82=D0=BE=D1=88=D1=83=D0=BC=D0=BE=D0=B2=D1=8B?= =?UTF-8?q?=D1=85=20=D0=B3=D1=80=D0=B0=D0=BD=D0=B0=D1=82=20(#470)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add full headset to security lockers and vendors * wd * fix range * - fix: Night vision. * - fix: Fixes. --------- Co-authored-by: Aviu00 --- .../Inventory/InventorySystem.Relay.cs | 2 ++ .../FlashSoundSuppressionSystem.cs | 28 ++++++++++++++++++- .../_White/Overlays/NightVisionComponent.cs | 2 +- .../Catalog/Fills/Lockers/security.yml | 2 +- .../VendingMachines/Inventories/secdrobe.yml | 2 +- .../Entities/Clothing/Ears/headsets_alt.yml | 6 ++-- .../Clothing/Head/hardsuit-helmets.yml | 22 +++++---------- .../Prototypes/Entities/Mobs/NPCs/carp.yml | 3 +- .../Entities/Mobs/NPCs/regalrat.yml | 3 +- .../Prototypes/Entities/Mobs/NPCs/xeno.yml | 3 +- .../Entities/Mobs/Player/dragon.yml | 3 +- .../Objects/Weapons/Throwable/grenades.yml | 2 +- .../Prototypes/Loadouts/loadout_groups.yml | 2 +- Resources/Prototypes/_White/Actions/types.yml | 2 +- .../Prototypes/_White/Catalog/uplink.yml | 8 +++--- .../_White/Entities/Cult/constructs.yml | 3 +- .../_White/Research/experimental.yml | 4 +-- 17 files changed, 60 insertions(+), 37 deletions(-) diff --git a/Content.Shared/Inventory/InventorySystem.Relay.cs b/Content.Shared/Inventory/InventorySystem.Relay.cs index f6713713b6..8ea8dd0217 100644 --- a/Content.Shared/Inventory/InventorySystem.Relay.cs +++ b/Content.Shared/Inventory/InventorySystem.Relay.cs @@ -1,3 +1,4 @@ +using Content.Shared._White.BuffedFlashGrenade; using Content.Shared._White.Events; using Content.Shared._White.StaminaProtection; using Content.Shared.Changeling; @@ -34,6 +35,7 @@ public partial class InventorySystem SubscribeLocalEvent(RelayInventoryEvent); // WD SubscribeLocalEvent(RelayInventoryEvent); // WD SubscribeLocalEvent(RelayInventoryEvent); // WD + SubscribeLocalEvent(RelayInventoryEvent); // WD SubscribeLocalEvent(RelayInventoryEvent); // by-ref events diff --git a/Content.Shared/_White/BuffedFlashGrenade/FlashSoundSuppressionSystem.cs b/Content.Shared/_White/BuffedFlashGrenade/FlashSoundSuppressionSystem.cs index 803538e9a3..c04d650fa0 100644 --- a/Content.Shared/_White/BuffedFlashGrenade/FlashSoundSuppressionSystem.cs +++ b/Content.Shared/_White/BuffedFlashGrenade/FlashSoundSuppressionSystem.cs @@ -1,4 +1,4 @@ -using Content.Shared.Inventory.Events; +using Content.Shared.Inventory; using Content.Shared.Stunnable; namespace Content.Shared._White.BuffedFlashGrenade; @@ -7,11 +7,37 @@ public sealed class FlashSoundSuppressionSystem : EntitySystem { [Dependency] private readonly SharedStunSystem _stunSystem = default!; + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent>( + OnGetFlashbanged); + } + + private void OnGetFlashbanged(Entity ent, + ref InventoryRelayedEvent args) + { + args.Args.Protected = true; + } + public void Stun(EntityUid target, float duration) { if (HasComp(target)) return; + var ev = new GetFlashbangedEvent(); + RaiseLocalEvent(target, ev); + if (ev.Protected) + return; + _stunSystem.TryParalyze(target, TimeSpan.FromSeconds(duration / 1000f), true); } } + +public sealed class GetFlashbangedEvent : EntityEventArgs, IInventoryRelayEvent +{ + public bool Protected; + + public SlotFlags TargetSlots => SlotFlags.EARS | SlotFlags.HEAD; +} diff --git a/Content.Shared/_White/Overlays/NightVisionComponent.cs b/Content.Shared/_White/Overlays/NightVisionComponent.cs index 9c27c271a8..ed706b5241 100644 --- a/Content.Shared/_White/Overlays/NightVisionComponent.cs +++ b/Content.Shared/_White/Overlays/NightVisionComponent.cs @@ -12,7 +12,7 @@ public sealed partial class NightVisionComponent : BaseNvOverlayComponent public override Color Color { get; set; } = Color.FromHex("#98FB98"); [DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] - public bool IsActive; + public bool IsActive = true; [DataField] public SoundSpecifier? ActivateSound = new SoundPathSpecifier("/Audio/White/Items/Goggles/activate.ogg"); diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/security.yml b/Resources/Prototypes/Catalog/Fills/Lockers/security.yml index 96315ffa2c..6a8f1faf4f 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/security.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/security.yml @@ -56,7 +56,7 @@ - id: Flash prob: 0.5 - id: ClothingEyesGlassesSecurity - - id: ClothingHeadsetSecurity + - id: ClothingHeadsetAltSecurity # WD - id: ClothingHandsGlovesColorBlack - id: ClothingShoesBootsJack - id: WeaponMeleeNeedle diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/secdrobe.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/secdrobe.yml index d16f4dbe27..bbb485afd5 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/secdrobe.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/secdrobe.yml @@ -7,7 +7,7 @@ ClothingHeadHatBeret: 4 ClothingHeadHatSecsoft: 4 ClothingHeadBandRed: 4 - ClothingHeadsetSecurity: 4 + ClothingHeadsetAltSecurity: 4 ClothingEyesGlassesSecurity: 4 ClothingOuterWinterSec: 4 ClothingUniformJumpsuitSec: 4 diff --git a/Resources/Prototypes/Entities/Clothing/Ears/headsets_alt.yml b/Resources/Prototypes/Entities/Clothing/Ears/headsets_alt.yml index 0d1c1b8131..07247d66ef 100644 --- a/Resources/Prototypes/Entities/Clothing/Ears/headsets_alt.yml +++ b/Resources/Prototypes/Entities/Clothing/Ears/headsets_alt.yml @@ -1,4 +1,4 @@ -- type: entity +- type: entity abstract: true parent: ClothingHeadset id: ClothingHeadsetAlt @@ -9,9 +9,7 @@ state: icon_alt - type: Clothing equippedPrefix: alt - - type: ClothingGrantComponent # WD - component: - - type: FlashSoundSuppression + - type: FlashSoundSuppression # WD - type: entity parent: ClothingHeadsetAlt diff --git a/Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml b/Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml index 95077cdf5c..46aacbaa80 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml @@ -185,9 +185,7 @@ Piercing: 0.9 Heat: 0.9 - type: FlashImmunity # WD edit - - type: ClothingGrantComponent # WD - component: - - type: FlashSoundSuppression + - type: FlashSoundSuppression # WD edit #Brigmedic Hardsuit - type: entity @@ -215,9 +213,8 @@ - type: PressureProtection highPressureMultiplier: 0.6 lowPressureMultiplier: 1000 - - type: ClothingGrantComponent # WD - component: - - type: FlashSoundSuppression + - type: FlashImmunity # WD edit + - type: FlashSoundSuppression # WD edit #Warden's Hardsuit - type: entity @@ -244,9 +241,7 @@ Piercing: 0.9 Heat: 0.9 - type: FlashImmunity # WD edit - - type: ClothingGrantComponent # WD - component: - - type: FlashSoundSuppression + - type: FlashSoundSuppression # WD edit #Captain's Hardsuit - type: entity @@ -263,9 +258,8 @@ - type: PressureProtection highPressureMultiplier: 0.3 lowPressureMultiplier: 1000 - - type: ClothingGrantComponent # WD - component: - - type: FlashSoundSuppression + - type: FlashImmunity # WD edit + - type: FlashSoundSuppression # WD edit #Inspector's Hardsuit - type: entity @@ -364,9 +358,7 @@ Piercing: 0.9 Heat: 0.9 - type: FlashImmunity - - type: ClothingGrantComponent # WD - component: - - type: FlashSoundSuppression + - type: FlashSoundSuppression #Luxury Mining Hardsuit - type: entity diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml b/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml index 6336f512bd..16583994c7 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml @@ -84,7 +84,8 @@ path: /Audio/Effects/bite.ogg - type: Penetrated - type: NightVision - toggleSound: null + activateSound: null + deactivateSound: null color: "#404040" - type: Tool speed: 2 diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml b/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml index 264c4cf1f6..f8ae047dbe 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml @@ -121,7 +121,8 @@ attributes: gender: male - type: NightVision - toggleSound: null + activateSound: null + deactivateSound: null color: "#404040" - type: GlobalAntagonist antagonistPrototype: globalAntagonistRats diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/xeno.yml b/Resources/Prototypes/Entities/Mobs/NPCs/xeno.yml index f1c338a827..1dcfffc687 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/xeno.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/xeno.yml @@ -124,7 +124,8 @@ - type: Speech speechVerb: LargeMob - type: NightVision - toggleSound: null + activateSound: null + deactivateSound: null color: "#404040" - type: entity diff --git a/Resources/Prototypes/Entities/Mobs/Player/dragon.yml b/Resources/Prototypes/Entities/Mobs/Player/dragon.yml index 962b8e21e1..10b022bdda 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/dragon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/dragon.yml @@ -131,7 +131,8 @@ - CannotSuicide - DoorBumpOpener - type: NightVision - toggleSound: null + activateSound: null + deactivateSound: null color: "#404040" - type: Tool speed: 3 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml index c58c7f7113..48aff490f1 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml @@ -66,7 +66,7 @@ - type: Sprite sprite: Objects/Weapons/Grenades/flashbang.rsi - type: FlashOnTrigger - range: 5 + range: 7 forceStun: true # WD - type: SoundOnTrigger sound: diff --git a/Resources/Prototypes/Loadouts/loadout_groups.yml b/Resources/Prototypes/Loadouts/loadout_groups.yml index 14cf725630..975bff6227 100644 --- a/Resources/Prototypes/Loadouts/loadout_groups.yml +++ b/Resources/Prototypes/Loadouts/loadout_groups.yml @@ -1603,7 +1603,7 @@ loadouts: - SecurityCommandHeadset -- type: loadoutGroup +- type: loadoutGroup # WD id: CommonSecurityHeadsetFull name: loadout-group-ears loadouts: diff --git a/Resources/Prototypes/_White/Actions/types.yml b/Resources/Prototypes/_White/Actions/types.yml index 237c7bf44d..60ad2d137f 100644 --- a/Resources/Prototypes/_White/Actions/types.yml +++ b/Resources/Prototypes/_White/Actions/types.yml @@ -52,7 +52,7 @@ itemIconStyle: BigAction priority: -20 icon: - sprite: Clothing/Eyes/Glasses/thermal.rsi + sprite: White/Clothing/Eyes/Glasses/thermal.rsi state: icon event: !type:ToggleThermalVisionEvent diff --git a/Resources/Prototypes/_White/Catalog/uplink.yml b/Resources/Prototypes/_White/Catalog/uplink.yml index 5797124322..9e8d094515 100644 --- a/Resources/Prototypes/_White/Catalog/uplink.yml +++ b/Resources/Prototypes/_White/Catalog/uplink.yml @@ -108,7 +108,7 @@ name: uplink-night-vision-name description: uplink-night-vision-desc productEntity: ClothingEyesNightVisionGogglesSyndie - icon: { sprite: White/Clothing/Head/nightvision.rsi, state: icon } + icon: { sprite: White/Clothing/Eyes/Glasses/nightvision.rsi, state: icon } cost: Telecrystal: 3 categories: @@ -124,7 +124,7 @@ name: uplink-night-vision-name description: uplink-night-vision-desc productEntity: ClothingEyesNightVisionGogglesNukie - icon: { sprite: White/Clothing/Head/nightvision.rsi, state: icon } + icon: { sprite: White/Clothing/Eyes/Glasses/nightvision.rsi, state: icon } cost: Telecrystal: 3 categories: @@ -140,7 +140,7 @@ name: uplink-thermal-vision-name description: uplink-thermal-vision-desc productEntity: ClothingEyesGlassesThermalSyndie - icon: { sprite: Clothing/Eyes/Glasses/thermal.rsi, state: icon } + icon: { sprite: White/Clothing/Eyes/Glasses/thermal.rsi, state: icon } cost: Telecrystal: 3 categories: @@ -156,7 +156,7 @@ name: uplink-thermal-vision-name description: uplink-thermal-vision-desc productEntity: ClothingEyesGlassesThermalNukie - icon: { sprite: Clothing/Eyes/Glasses/thermal.rsi, state: icon } + icon: { sprite: White/Clothing/Eyes/Glasses/thermal.rsi, state: icon } cost: Telecrystal: 3 categories: diff --git a/Resources/Prototypes/_White/Entities/Cult/constructs.yml b/Resources/Prototypes/_White/Entities/Cult/constructs.yml index e1ac802ef4..44071134e3 100644 --- a/Resources/Prototypes/_White/Entities/Cult/constructs.yml +++ b/Resources/Prototypes/_White/Entities/Cult/constructs.yml @@ -64,7 +64,8 @@ - type: ShowCultHud - type: IsDeadIC - type: NightVision - toggleSound: null + activateSound: null + deactivateSound: null color: White - type: ShowHealthBars damageContainers: diff --git a/Resources/Prototypes/_White/Research/experimental.yml b/Resources/Prototypes/_White/Research/experimental.yml index bd57be222c..f4041df2b9 100644 --- a/Resources/Prototypes/_White/Research/experimental.yml +++ b/Resources/Prototypes/_White/Research/experimental.yml @@ -3,7 +3,7 @@ id: NightVisionTech name: research-technology-night-vision icon: - sprite: White/Clothing/Head/nightvision.rsi + sprite: White/Clothing/Eyes/Glasses/nightvision.rsi state: icon discipline: Experimental tier: 2 @@ -15,7 +15,7 @@ id: ThermalVisionTech name: research-technology-thermal-vision icon: - sprite: Clothing/Eyes/Glasses/thermal.rsi + sprite: White/Clothing/Eyes/Glasses/thermal.rsi state: icon discipline: Experimental tier: 2 From b16052f0abbc2dfbd1eaaea89e7bba170c253b59 Mon Sep 17 00:00:00 2001 From: RavmorganButOnCocaine Date: Sat, 20 Jul 2024 15:29:48 +0000 Subject: [PATCH 11/11] Automatic changelog update --- Resources/Changelog/ChangelogWhite.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Resources/Changelog/ChangelogWhite.yml b/Resources/Changelog/ChangelogWhite.yml index 8dacdf1b51..fa8a76c1e8 100644 --- a/Resources/Changelog/ChangelogWhite.yml +++ b/Resources/Changelog/ChangelogWhite.yml @@ -6234,3 +6234,14 @@ id: 399 time: '2024-07-20T02:32:32.0000000+00:00' url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/469 +- author: ThereDrD + changes: + - message: "\u041F\u043E\u043B\u043D\u043E\u0440\u0430\u0437\u043C\u0435\u0440\u043D\ + \u044B\u0435 \u0433\u0430\u0440\u043D\u0438\u0442\u0443\u0440\u044B \u0434\u043E\ + \u0431\u0430\u0432\u043B\u0435\u043D\u044B \u0432 \u0448\u043A\u0430\u0444\u044B\ + \ \u043E\u0444\u0438\u0446\u0435\u0440\u043E\u0432 \u0438 \u0432\u0435\u043D\ + \u0434\u043E\u043C\u0430\u0442\u044B \u0421\u0411" + type: Fix + id: 400 + time: '2024-07-20T15:28:44.0000000+00:00' + url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/470