From 9b4e495c950574f1fd8f1417d8d97ae4127db343 Mon Sep 17 00:00:00 2001 From: mirrorcult Date: Sun, 10 Oct 2021 03:43:50 -0700 Subject: [PATCH] Blast doors & shutters (#4822) --- Content.Client/Doors/AirlockVisualizer.cs | 80 +++++++---- Content.Client/Entry/IgnoredComponents.cs | 4 +- .../Doors/Components/ServerDoorComponent.cs | 32 ++++- .../ToggleDoorOnTriggerComponent.cs | 10 ++ Content.Server/Explosion/TriggerSystem.cs | 22 +++ .../TriggerOnSignalReceivedComponent.cs | 10 ++ .../System/SignalButtonSystem.cs | 2 + .../System/SignalLinkerSystem.cs | 2 +- .../System/TriggerOnSignalReceivedSystem.cs | 25 ++++ Resources/Audio/Machines/blastdoor.ogg | Bin 0 -> 12868 bytes .../Structures/Doors/Shutter/blast_door.yml | 35 +++++ .../Structures/Doors/Shutter/shutters.yml | 136 ++++++++++++++++++ .../Doors/Shutters/blastdoor.rsi/closed.png | Bin 0 -> 1329 bytes .../Doors/Shutters/blastdoor.rsi/closing.png | Bin 0 -> 2192 bytes .../Doors/Shutters/blastdoor.rsi/meta.json | 1 + .../Doors/Shutters/blastdoor.rsi/open.png | Bin 0 -> 268 bytes .../Doors/Shutters/blastdoor.rsi/opening.png | Bin 0 -> 2057 bytes .../Doors/Shutters/shutters.rsi/closed.png | Bin 0 -> 552 bytes .../Doors/Shutters/shutters.rsi/closing.png | Bin 0 -> 2190 bytes .../Doors/Shutters/shutters.rsi/meta.json | 1 + .../Doors/Shutters/shutters.rsi/open.png | Bin 0 -> 278 bytes .../Doors/Shutters/shutters.rsi/opening.png | Bin 0 -> 2285 bytes .../shutters_radiation.rsi/closed.png | Bin 0 -> 642 bytes .../shutters_radiation.rsi/closing.png | Bin 0 -> 2398 bytes .../Shutters/shutters_radiation.rsi/meta.json | 1 + .../Shutters/shutters_radiation.rsi/open.png | Bin 0 -> 283 bytes .../shutters_radiation.rsi/opening.png | Bin 0 -> 2416 bytes .../Shutters/shutters_window.rsi/closed.png | Bin 0 -> 645 bytes .../Shutters/shutters_window.rsi/closing.png | Bin 0 -> 2310 bytes .../Shutters/shutters_window.rsi/meta.json | 1 + .../Shutters/shutters_window.rsi/open.png | Bin 0 -> 278 bytes .../Shutters/shutters_window.rsi/opening.png | Bin 0 -> 2435 bytes 32 files changed, 325 insertions(+), 37 deletions(-) create mode 100644 Content.Server/Doors/Components/ToggleDoorOnTriggerComponent.cs create mode 100644 Content.Server/MachineLinking/Components/TriggerOnSignalReceivedComponent.cs create mode 100644 Content.Server/MachineLinking/System/TriggerOnSignalReceivedSystem.cs create mode 100644 Resources/Audio/Machines/blastdoor.ogg create mode 100644 Resources/Prototypes/Entities/Structures/Doors/Shutter/blast_door.yml create mode 100644 Resources/Prototypes/Entities/Structures/Doors/Shutter/shutters.yml create mode 100644 Resources/Textures/Structures/Doors/Shutters/blastdoor.rsi/closed.png create mode 100644 Resources/Textures/Structures/Doors/Shutters/blastdoor.rsi/closing.png create mode 100644 Resources/Textures/Structures/Doors/Shutters/blastdoor.rsi/meta.json create mode 100644 Resources/Textures/Structures/Doors/Shutters/blastdoor.rsi/open.png create mode 100644 Resources/Textures/Structures/Doors/Shutters/blastdoor.rsi/opening.png create mode 100644 Resources/Textures/Structures/Doors/Shutters/shutters.rsi/closed.png create mode 100644 Resources/Textures/Structures/Doors/Shutters/shutters.rsi/closing.png create mode 100644 Resources/Textures/Structures/Doors/Shutters/shutters.rsi/meta.json create mode 100644 Resources/Textures/Structures/Doors/Shutters/shutters.rsi/open.png create mode 100644 Resources/Textures/Structures/Doors/Shutters/shutters.rsi/opening.png create mode 100644 Resources/Textures/Structures/Doors/Shutters/shutters_radiation.rsi/closed.png create mode 100644 Resources/Textures/Structures/Doors/Shutters/shutters_radiation.rsi/closing.png create mode 100644 Resources/Textures/Structures/Doors/Shutters/shutters_radiation.rsi/meta.json create mode 100644 Resources/Textures/Structures/Doors/Shutters/shutters_radiation.rsi/open.png create mode 100644 Resources/Textures/Structures/Doors/Shutters/shutters_radiation.rsi/opening.png create mode 100644 Resources/Textures/Structures/Doors/Shutters/shutters_window.rsi/closed.png create mode 100644 Resources/Textures/Structures/Doors/Shutters/shutters_window.rsi/closing.png create mode 100644 Resources/Textures/Structures/Doors/Shutters/shutters_window.rsi/meta.json create mode 100644 Resources/Textures/Structures/Doors/Shutters/shutters_window.rsi/open.png create mode 100644 Resources/Textures/Structures/Doors/Shutters/shutters_window.rsi/opening.png diff --git a/Content.Client/Doors/AirlockVisualizer.cs b/Content.Client/Doors/AirlockVisualizer.cs index eec56e8953..af40479a6c 100644 --- a/Content.Client/Doors/AirlockVisualizer.cs +++ b/Content.Client/Doors/AirlockVisualizer.cs @@ -30,6 +30,9 @@ namespace Content.Client.Doors [DataField("animatedPanel")] private bool _animatedPanel = true; + [DataField("simpleVisuals")] + private bool _simpleVisuals = false; + /// /// Whether the BaseUnlit layer should still be visible when the airlock /// is opened. @@ -50,17 +53,20 @@ namespace Content.Client.Doors flick.LayerKey = DoorVisualLayers.Base; flick.KeyFrames.Add(new AnimationTrackSpriteFlick.KeyFrame("closing", 0f)); - var flickUnlit = new AnimationTrackSpriteFlick(); - CloseAnimation.AnimationTracks.Add(flickUnlit); - flickUnlit.LayerKey = DoorVisualLayers.BaseUnlit; - flickUnlit.KeyFrames.Add(new AnimationTrackSpriteFlick.KeyFrame("closing_unlit", 0f)); - - if (_animatedPanel) + if (!_simpleVisuals) { - var flickMaintenancePanel = new AnimationTrackSpriteFlick(); - CloseAnimation.AnimationTracks.Add(flickMaintenancePanel); - flickMaintenancePanel.LayerKey = WiresVisualizer.WiresVisualLayers.MaintenancePanel; - flickMaintenancePanel.KeyFrames.Add(new AnimationTrackSpriteFlick.KeyFrame("panel_closing", 0f)); + var flickUnlit = new AnimationTrackSpriteFlick(); + CloseAnimation.AnimationTracks.Add(flickUnlit); + flickUnlit.LayerKey = DoorVisualLayers.BaseUnlit; + flickUnlit.KeyFrames.Add(new AnimationTrackSpriteFlick.KeyFrame("closing_unlit", 0f)); + + if (_animatedPanel) + { + var flickMaintenancePanel = new AnimationTrackSpriteFlick(); + CloseAnimation.AnimationTracks.Add(flickMaintenancePanel); + flickMaintenancePanel.LayerKey = WiresVisualizer.WiresVisualLayers.MaintenancePanel; + flickMaintenancePanel.KeyFrames.Add(new AnimationTrackSpriteFlick.KeyFrame("panel_closing", 0f)); + } } } @@ -71,26 +77,32 @@ namespace Content.Client.Doors flick.LayerKey = DoorVisualLayers.Base; flick.KeyFrames.Add(new AnimationTrackSpriteFlick.KeyFrame("opening", 0f)); - var flickUnlit = new AnimationTrackSpriteFlick(); - OpenAnimation.AnimationTracks.Add(flickUnlit); - flickUnlit.LayerKey = DoorVisualLayers.BaseUnlit; - flickUnlit.KeyFrames.Add(new AnimationTrackSpriteFlick.KeyFrame("opening_unlit", 0f)); - - if (_animatedPanel) + if (!_simpleVisuals) { - var flickMaintenancePanel = new AnimationTrackSpriteFlick(); - OpenAnimation.AnimationTracks.Add(flickMaintenancePanel); - flickMaintenancePanel.LayerKey = WiresVisualizer.WiresVisualLayers.MaintenancePanel; - flickMaintenancePanel.KeyFrames.Add(new AnimationTrackSpriteFlick.KeyFrame("panel_opening", 0f)); + var flickUnlit = new AnimationTrackSpriteFlick(); + OpenAnimation.AnimationTracks.Add(flickUnlit); + flickUnlit.LayerKey = DoorVisualLayers.BaseUnlit; + flickUnlit.KeyFrames.Add(new AnimationTrackSpriteFlick.KeyFrame("opening_unlit", 0f)); + + if (_animatedPanel) + { + var flickMaintenancePanel = new AnimationTrackSpriteFlick(); + OpenAnimation.AnimationTracks.Add(flickMaintenancePanel); + flickMaintenancePanel.LayerKey = WiresVisualizer.WiresVisualLayers.MaintenancePanel; + flickMaintenancePanel.KeyFrames.Add(new AnimationTrackSpriteFlick.KeyFrame("panel_opening", 0f)); + } } } - DenyAnimation = new Animation {Length = TimeSpan.FromSeconds(_denyDelay)}; + if (!_simpleVisuals) { - var flick = new AnimationTrackSpriteFlick(); - DenyAnimation.AnimationTracks.Add(flick); - flick.LayerKey = DoorVisualLayers.BaseUnlit; - flick.KeyFrames.Add(new AnimationTrackSpriteFlick.KeyFrame("deny_unlit", 0f)); + DenyAnimation = new Animation {Length = TimeSpan.FromSeconds(_denyDelay)}; + { + var flick = new AnimationTrackSpriteFlick(); + DenyAnimation.AnimationTracks.Add(flick); + flick.LayerKey = DoorVisualLayers.BaseUnlit; + flick.KeyFrames.Add(new AnimationTrackSpriteFlick.KeyFrame("deny_unlit", 0f)); + } } } @@ -126,15 +138,18 @@ namespace Content.Client.Doors case DoorVisualState.Open: sprite.LayerSetState(DoorVisualLayers.Base, "open"); unlitVisible = _openUnlitVisible; - if (_openUnlitVisible) + if (_openUnlitVisible && !_simpleVisuals) { sprite.LayerSetState(DoorVisualLayers.BaseUnlit, "open_unlit"); } break; case DoorVisualState.Closed: sprite.LayerSetState(DoorVisualLayers.Base, "closed"); - sprite.LayerSetState(DoorVisualLayers.BaseUnlit, "closed_unlit"); - sprite.LayerSetState(DoorVisualLayers.BaseBolted, "bolted_unlit"); + if (!_simpleVisuals) + { + sprite.LayerSetState(DoorVisualLayers.BaseUnlit, "closed_unlit"); + sprite.LayerSetState(DoorVisualLayers.BaseBolted, "bolted_unlit"); + } break; case DoorVisualState.Opening: animPlayer.Play(OpenAnimation, AnimationKey); @@ -161,9 +176,12 @@ namespace Content.Client.Doors boltedVisible = true; } - sprite.LayerSetVisible(DoorVisualLayers.BaseUnlit, unlitVisible); - sprite.LayerSetVisible(DoorVisualLayers.BaseWelded, weldedVisible); - sprite.LayerSetVisible(DoorVisualLayers.BaseBolted, unlitVisible && boltedVisible); + if (!_simpleVisuals) + { + sprite.LayerSetVisible(DoorVisualLayers.BaseUnlit, unlitVisible); + sprite.LayerSetVisible(DoorVisualLayers.BaseWelded, weldedVisible); + sprite.LayerSetVisible(DoorVisualLayers.BaseBolted, unlitVisible && boltedVisible); + } } } diff --git a/Content.Client/Entry/IgnoredComponents.cs b/Content.Client/Entry/IgnoredComponents.cs index 399c51a61a..6cee1d63a2 100644 --- a/Content.Client/Entry/IgnoredComponents.cs +++ b/Content.Client/Entry/IgnoredComponents.cs @@ -279,7 +279,9 @@ namespace Content.Client.Entry "IncreaseDamageOnWield", "AmbientOnPowered", "TabletopGame", - "LitOnPowered" + "LitOnPowered", + "TriggerOnSignalReceived", + "ToggleDoorOnTrigger" }; } } diff --git a/Content.Server/Doors/Components/ServerDoorComponent.cs b/Content.Server/Doors/Components/ServerDoorComponent.cs index 510c4215e6..10835bc822 100644 --- a/Content.Server/Doors/Components/ServerDoorComponent.cs +++ b/Content.Server/Doors/Components/ServerDoorComponent.cs @@ -107,6 +107,12 @@ namespace Content.Server.Doors.Components [ViewVariables(VVAccess.ReadWrite)] [DataField("bumpOpen")] public bool BumpOpen = true; + /// + /// Whether the door will open when it is activated or clicked. + /// + [ViewVariables(VVAccess.ReadWrite)] [DataField("clickOpen")] + public bool ClickOpen = true; + /// /// Whether the door starts open when it's first loaded from prototype. A door won't start open if its prototype is also welded shut. /// Handled in Startup(). @@ -164,6 +170,12 @@ namespace Content.Server.Doors.Components [DataField("denySound")] public SoundSpecifier? DenySound; + /// + /// Should this door automatically close if its been open for too long? + /// + [DataField("autoClose")] + public bool AutoClose; + /// /// Default time that the door should take to pry open. /// @@ -238,6 +250,9 @@ namespace Content.Server.Doors.Components void IActivate.Activate(ActivateEventArgs eventArgs) { + if (!ClickOpen) + return; + DoorClickShouldActivateEvent ev = new DoorClickShouldActivateEvent(eventArgs); Owner.EntityManager.EventBus.RaiseLocalEvent(Owner.Uid, ev, false); if (ev.Handled) @@ -255,9 +270,15 @@ namespace Content.Server.Doors.Components #region Opening - public void TryOpen(IEntity user) + public void TryOpen(IEntity? user=null) { - if (CanOpenByEntity(user)) + if (user == null) + { + // a machine opened it or something, idk + Open(); + return; + } + else if (CanOpenByEntity(user)) { Open(); @@ -384,9 +405,9 @@ namespace Content.Server.Doors.Components #region Closing - public void TryClose(IEntity user) + public void TryClose(IEntity? user=null) { - if (!CanCloseByEntity(user)) + if (user != null && !CanCloseByEntity(user)) { Deny(); return; @@ -610,6 +631,9 @@ namespace Content.Server.Doors.Components if (State != DoorState.Open) return; + if (!AutoClose) + return; + var autoev = new BeforeDoorAutoCloseEvent(); Owner.EntityManager.EventBus.RaiseLocalEvent(Owner.Uid, autoev, false); if (autoev.Cancelled) diff --git a/Content.Server/Doors/Components/ToggleDoorOnTriggerComponent.cs b/Content.Server/Doors/Components/ToggleDoorOnTriggerComponent.cs new file mode 100644 index 0000000000..9287160229 --- /dev/null +++ b/Content.Server/Doors/Components/ToggleDoorOnTriggerComponent.cs @@ -0,0 +1,10 @@ +using Robust.Shared.GameObjects; + +namespace Content.Server.Doors.Components +{ + [RegisterComponent] + public class ToggleDoorOnTriggerComponent : Component + { + public override string Name => "ToggleDoorOnTrigger"; + } +} diff --git a/Content.Server/Explosion/TriggerSystem.cs b/Content.Server/Explosion/TriggerSystem.cs index f47240d27d..d49a8900b8 100644 --- a/Content.Server/Explosion/TriggerSystem.cs +++ b/Content.Server/Explosion/TriggerSystem.cs @@ -1,9 +1,11 @@ using System; +using Content.Server.Doors.Components; using Content.Server.Explosion.Components; using Content.Server.Flash; using Content.Server.Flash.Components; using Content.Shared.Acts; using Content.Shared.Audio; +using Content.Shared.Doors; using JetBrains.Annotations; using Robust.Shared.Audio; using Robust.Shared.GameObjects; @@ -43,6 +45,7 @@ namespace Content.Server.Explosion SubscribeLocalEvent(HandleSoundTrigger); SubscribeLocalEvent(HandleExplodeTrigger); SubscribeLocalEvent(HandleFlashTrigger); + SubscribeLocalEvent(HandleDoorTrigger); } #region Explosions @@ -89,6 +92,25 @@ namespace Content.Server.Explosion EntityManager.QueueDeleteEntity(uid); } + private void HandleDoorTrigger(EntityUid uid, ToggleDoorOnTriggerComponent component, TriggerEvent args) + { + if (EntityManager.TryGetComponent(uid, out var door)) + { + switch (door.State) + { + case SharedDoorComponent.DoorState.Open: + door.Close(); + break; + case SharedDoorComponent.DoorState.Closed: + door.Open(); + break; + case SharedDoorComponent.DoorState.Closing: + case SharedDoorComponent.DoorState.Opening: + break; + } + } + } + private void HandleCollide(EntityUid uid, TriggerOnCollideComponent component, StartCollideEvent args) { Trigger(component.Owner); diff --git a/Content.Server/MachineLinking/Components/TriggerOnSignalReceivedComponent.cs b/Content.Server/MachineLinking/Components/TriggerOnSignalReceivedComponent.cs new file mode 100644 index 0000000000..bfda03efcf --- /dev/null +++ b/Content.Server/MachineLinking/Components/TriggerOnSignalReceivedComponent.cs @@ -0,0 +1,10 @@ +using Robust.Shared.GameObjects; + +namespace Content.Server.MachineLinking.Components +{ + [RegisterComponent] + public class TriggerOnSignalReceivedComponent : Component + { + public override string Name => "TriggerOnSignalReceived"; + } +} diff --git a/Content.Server/MachineLinking/System/SignalButtonSystem.cs b/Content.Server/MachineLinking/System/SignalButtonSystem.cs index a2799263e1..2cddfe569b 100644 --- a/Content.Server/MachineLinking/System/SignalButtonSystem.cs +++ b/Content.Server/MachineLinking/System/SignalButtonSystem.cs @@ -1,10 +1,12 @@ using Content.Server.MachineLinking.Components; using Content.Server.MachineLinking.Events; using Content.Shared.Interaction; +using JetBrains.Annotations; using Robust.Shared.GameObjects; namespace Content.Server.MachineLinking.System { + [UsedImplicitly] public class SignalButtonSystem : EntitySystem { public override void Initialize() diff --git a/Content.Server/MachineLinking/System/SignalLinkerSystem.cs b/Content.Server/MachineLinking/System/SignalLinkerSystem.cs index 833b056588..02d6a04468 100644 --- a/Content.Server/MachineLinking/System/SignalLinkerSystem.cs +++ b/Content.Server/MachineLinking/System/SignalLinkerSystem.cs @@ -72,7 +72,7 @@ namespace Content.Server.MachineLinking.System if (!IsInRange(component, link.ReceiverComponent)) continue; RaiseLocalEvent(link.ReceiverComponent.Owner.Uid, - new SignalReceivedEvent(link.Receiverport.Name, args.Value)); + new SignalReceivedEvent(link.Receiverport.Name, args.Value), false); } } diff --git a/Content.Server/MachineLinking/System/TriggerOnSignalReceivedSystem.cs b/Content.Server/MachineLinking/System/TriggerOnSignalReceivedSystem.cs new file mode 100644 index 0000000000..8434033e59 --- /dev/null +++ b/Content.Server/MachineLinking/System/TriggerOnSignalReceivedSystem.cs @@ -0,0 +1,25 @@ +using Content.Server.Explosion; +using Content.Server.MachineLinking.Components; +using Content.Server.MachineLinking.Events; +using Robust.Shared.GameObjects; +using Robust.Shared.IoC; + +namespace Content.Server.MachineLinking.System +{ + public class TriggerOnSignalReceivedSystem : EntitySystem + { + [Dependency] private readonly TriggerSystem _trigger = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnSignalReceived); + } + + private void OnSignalReceived(EntityUid uid, TriggerOnSignalReceivedComponent component, SignalReceivedEvent args) + { + _trigger.Trigger(EntityManager.GetEntity(uid)); + } + } +} diff --git a/Resources/Audio/Machines/blastdoor.ogg b/Resources/Audio/Machines/blastdoor.ogg new file mode 100644 index 0000000000000000000000000000000000000000..e64deb132faf0ff3c8f62acc7f7b65e88c54cb8a GIT binary patch literal 12868 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Doors/Shutters/blastdoor.rsi/closing.png b/Resources/Textures/Structures/Doors/Shutters/blastdoor.rsi/closing.png new file mode 100644 index 0000000000000000000000000000000000000000..775430e8f875f77f39b77d359e2cc23522935d19 GIT binary patch literal 2192 zcmV;B2ygd^P)l}@C3Smys~#Rd)#Jmd|M_$}sqJ=q=D+oSUdjjO zu2w6x-|u@i_)u;iCN4zmZoOXju-YQ#-+wDbe4Kz9K8SI5ckH=z0{X|pq5rcT87kz1 zbC17&4^Q6TtBy>Nj$ib+Q8fiN>G`m(=7UZKopbPaPft~RfV;i$K0ZE%8F2jiR8NoJ zip|8LqUrd2pwWLbd7j>MNgv>DH^WJ$_ij>dA37Hzem?^UR$Idx97Z6Ggx#&G;)58! zpHJ#|JWgg{X&;=6OYXP^kiNg`e+XdHBNnL|KImlZ_w&(T+K0{^X8^&5RbN#RU1#Zy zj@RJbu751;16(@6{iXLj8o4ksbNkS_&=pic>)CTPxcB!%X=z&nN>xGNLgNe|wXA~Z z+FP>sx#D%V=3ZiQ-sb&>qyALSgL+8%cfYwzIMq z$Ta#(`Y>^?rV64ppmr5>IGFDPN>@RLgJBIgF1?_lK9*jP#$9?r7cIS@_0kLCT6#eh zcf?3I8TyDXxg*B4{!@EF!-xN~2H@nE_5tqF3(|Tr(9#QP)C+=^UeMADQdP9{g0}th zr==G()zS-6OE0L3uA&$8eQMJSI&;JbHtijps`F;9L??&?e>d;p2At z|6t3rhvwvC^Z2PgQn|4{V!8eI1Ga|MCN(GT%Ed#be157A2{(i<^%275{Ep}IKQ4<< z&YZj{7mwr9jSuHTIefUdBj>`$FI_P{BwWt#FbYW9LOFRo7Z0BP2<7r&H zxSZeFYGJ@q>S5bnDCAZMB|EOqhmv9lN1)a46T_sBJG4(q}*}A3m;) zpXx)(<@|mIoIls|f6gz2xvC&N7Z2$sbNX;`F_LX3DaD6`3;nDCdKs8`Z&c64lgP+y z1ZtOpR3A1jWL<+2efYSXKUo8E=j2^`u&!yE>chu{Y^jJ?A5t#oPpTliDCgd&X)hGA zjldi}TwI-RTUcX!NVuGDy${G;1@XO5NMbUz3Nmr=4S9Wo+~p^<3UYCwaR%rI&b2q{ z+6%>B6~L9thmVVq&F_TyiHY?g4>_s`By@m>(C0%oQ% z`0#Nd=jAEFhm_0t;|!ShzYF$)E@n(KAeRpp7jjiWu|6bR&L3xhUaPk11?BW%x|2na;o?H38IbBj!sYyqZ;X`6$?Lgz-0F|_AllYoE*~~7r1POvA3iSUcX~$O zWF#ghACkxSDa1!kZitUqZl{DY<=-jVPM@OdL(DDiBL_d%zf%x<9P9T3Y?|iehv#_x zE6K$}A^H4L{MXl4)l!r12bhupFE20Z<}&3zZ-#F*n(AS60ckYy*Z=zU%L>=OAJBr| zT74Bni;O9yK)SoTqu=_UcjwpaZeRMJP4)1Qi@zOTzg3q7PRqrUIIlIor6%_Qu{rtB zT>Qw>Mtf_13w6Fg5|?XlG$a=fjpc7+eoIa7gcEb}(p)@0-bAhW4dk2w(wuzgUMS?7 z0k!xo-{y%^FZ z7q5Rqr8U2$I^QS=$;nG|@sMN$w&s_Xw-+SI$(QT})!?_(YzD;UQOtjm!aZbva$G=v7PW=bW#C7?_ Sf1qyw0000aPwvUKY0zoum32{xGR-Vu|0vW;`YkF zZLj(MoM#f^KEkxoK}P_IV$eEPk^4crvc%5D&S3p~Go!CRB8xMMfIeaHboFyt=akR{ E08zSV%>V!Z literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Doors/Shutters/blastdoor.rsi/opening.png b/Resources/Textures/Structures/Doors/Shutters/blastdoor.rsi/opening.png new file mode 100644 index 0000000000000000000000000000000000000000..cda7005fed64c59821833e9e5d37688fb17c9e4c GIT binary patch literal 2057 zcmb_diB}R>7Y7qH#Yii%bcCzI3gW`1e%O3}!uQU(@1A$xeZTkn-TTgY>F7fN=BArX z0RVt`P@q3X@55Hi#7I96T|%cAk| zaSdzi)Tx~{ucx5{%8%s*eAz&FoyD)?7k;?sx;mw`kbBEYx3sjxxpZ+bK%Fi3!&g|r z-ac&Hlw~9Wsrq_(ynw{|F9kBKvT^Tj;-gAZ!;kq9&%P|HRHNU^l}cigDz~XqafNab zaQPIWb6BIfJUL}KfFV`U5eDc?b__RcM5?amt}||$q$V0UZ`8rE3%@9< zCqj4rR0Y}mTX}yd>}^qO-gkNMGrh7^rr~8GX8l6Q_s@j_b$)kIa>$-9yiP^qzEe9q zn|WU^SnUVY--&6w6iZewN+C_*TYd6buPyZ$#p_(}T90qF0s=r@rgXbkQ*E@z-G*_6 zS1>F0v>ld~YOHPoLuJDx4whZZxM7Ug7hj0lnE>|W8B1kkEafT>5Eq#m{imywN{3IV zso_RHbiGh06b0_g74Uv9dVh1yEdwCDmr+Dd1n-&GJSB$6+b{ z{Hx-?>$QvlQj)`GdT8;zvYZh6Ig24)9FYp%g2d5LyKm#VB6xQ$q7S?vuh7H_X=U`& zh8^7S+9*^@<1f2D=j=yzGv7S@`@i3Tpbd&#eljx*H<{wUTS>h2DnL59s(ZgVW`9HdOT$zUf8mE=NN34ox zg<@cM!x1u(`g=?2$7vV8jB1cuW!TGCVn-3CStC+8>IMFp{Fa5VJz{2h<|xP6zfIq3 z1(xlI@V7w53v+O5Nj&$D9s1^pRNno^VL{PN@JN@|>#=DkJA6}z^&r_DtL#=#OrGUp z%;F{~mo9nt+rVzSpLXQR=~QR{rt_tBQNFg0=am2M3WzMkW5u@j!t40HN}^8U0Mt^kj+LsSTKG!-;52? zNZ3m{JShuOK)COuaAWO(Ghut|2t~g0vZ92BA$&R{ztjNcYVFQC1(Wf8xOMO+FoJ

T4LbUWyyT&Qrp*T@@AgGh#mx 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 a0rlG7_RVU~uU^m(25@usbgDQQLjNx_%ljJu literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Doors/Shutters/shutters.rsi/meta.json b/Resources/Textures/Structures/Doors/Shutters/shutters.rsi/meta.json new file mode 100644 index 0000000000..f9c84fe2fa --- /dev/null +++ b/Resources/Textures/Structures/Doors/Shutters/shutters.rsi/meta.json @@ -0,0 +1 @@ +{"name":1,"size":{"x":32,"y":32},"states":[{"name":"closing","directions":1,"delays":[[0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05]]},{"name":"opening","directions":1,"delays":[[0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05]]},{"name":"open","directions":1},{"name":"closed","directions":1}],"license":"CC-BY-SA-3.0","copyright":"Tgstation at 97b0.05295aca9f31a7500.0556e0.050730d05b5837e39fc","version":1} \ No newline at end of file diff --git a/Resources/Textures/Structures/Doors/Shutters/shutters.rsi/open.png b/Resources/Textures/Structures/Doors/Shutters/shutters.rsi/open.png new file mode 100644 index 0000000000000000000000000000000000000000..de59fd7897eb3a54ef3fbb07d28e1de663a5864a GIT binary patch literal 278 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5D0srt z#WAE}&fDpRT!#!q+U8HtF7ep3lPm7<%h*E)&mP=4IsKJFMUzkC97pFihnJU5E;Q2& zi&`6zQCexQ^7H=h&kv+GwJ0Wq>VLTB956{`?fcggdFS5OxMO;(L4avW(1A9+-m5oe zmP}^Ss$pW8Rj^sjL)^*f(!xGgq!p<4UN z;N=}HVt3aBU{=+vtJxmIuTb7QBeo|$={v4W|jnIU!YVxXTG NJYD@<);T3K0RT5qY>fZ_ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Doors/Shutters/shutters.rsi/opening.png b/Resources/Textures/Structures/Doors/Shutters/shutters.rsi/opening.png new file mode 100644 index 0000000000000000000000000000000000000000..888e109cb5d909bba5984ae4dc8708d807d5084d GIT binary patch literal 2285 zcma);dsI@{9>))$L0F1Q%}7hC8C^~#k~Zce#7Fta#564}!>*-_<;7Ie22e7eldn}K zO+L_kRaW%SG&99a|Zl!_G5loHJcDZ&Z3Fs*gh%-nVFx_|7m*FO8V&-#8p-`_dw zw+BKrU|5Hv<3!+sD&w zUvlYm>5k*(`;9X>N5avpWj8ZQjAL}Hb7`g>&F_R5#P$r#PHx$CW4T_;S1agoLvQip zT^Y8`aaAFqM{Uz1#(XoX>=w~NbdNYDYWO$VX+p7AQiJ&Oke3~Z6PImSb*`615-CAh zM{|PMU!~rP50O36yFXLnKzTg$FzLzM+{s0|$-0B7Ax%Lfh3X{{4i_!W=hshKxZn}z zA}8x5VyJ?27CBiL>S`4C;82tqvE1d_(A-2%iCm4fu?eHRk#XM1-rkEA6@2{2uTix$ zj-C|qCb22)VQSHntPCNzG#A;-08hmZQF)}+k@oC)#5DhPIVsQ&UqVOhkno z_Fe~KPD&MUT89}igF8Z~5?2pq4~k2nAtBHG8dZ3BNmU;DRnTndMndPlx{)6sEqL7+ z+6qNmz@2T)@kswrV8D>Dh0r==pJjt}f0zrt##*IXpdby<23$38EHg}<%n+oI;*o75 zh`4b?#0o0%uoqAjtISHV=$kdIwA1NZ2U$@AEG~hkhRjF7ZBJd+5Id+CZZp&#*8m*b zhjq_$BX*dYL!9{edmkB2ACfUfs9nU4aLd9p;QB^prEx^I>NTOj~3q6zvS~zU?{=JJmnj;qXpYeWg=b8g@H0v3ACg zt4pStxD*4OyB;C^gEc6)0Z0_ZA>5$vqD?`nDA*QyA`^JI4-W9w!3NN_sruPK%SNVN zMY72h+~S~mz9YK3iIMyK#hu!tuXO^}YC+_Ouj7B&(9lht;Q#D6NJU}@4$q-qls6b% z^3a69f#_Gm_kwuTPKM^eq;Ds@yu98nl2X-$1!YPpWocZjMuG*~%Gqg#m^~011H8i& zSn#mE@9BXtx%FzuD`Uc*@?0kH6S5*I6R7yk8CpEPG|fL3CmFnX0(@OZtjZ_h)n5;7 z`~15SKPKcYb;rBqlU7MZi;KU6QeL=v;G@7DjIizu=akUyEP+7pV*5NBQE4x^VBoFHyGrVUmu|Jdsw7ec2!d~AcP^lxrz%h4hmF}fq4>kW$~%0a zcwus&{vAl-6~;cupc6oz^i%CG6K{rwdWMr4=meT`rxdD8%hDVjrMuU=2II?n*T3Z1 zwR|wrw`SgKe`G3==X#8LoI*DVa`!H#yUFI2t;7i2Pw`Uk6D1pnU&2!q`{u7s{08PfB-uL=gUv zQ7kL&VwK}4y}4OMmCm(T+8w|j30Ag%u8Bb*LrTg)b>&3mbF0Krde>C^W^m003r;=2 zkj`bUiinQ3dWd=K3ZuN>nYG}A(z#YufJ8`r&ll3-wZME@Rh|hNt&9?l_p9$^w9gvx zW2K$+D~?cTwU&|>!hXW2=L~Rd@t9H1N&m<;igxvEL9;T9rSxB7duVv3!@bvEhE?~Ot_Vb-sxcUEH$q_=6Qc`pL;f2{7yM``oiK^*g6H~J zv;BkBBRF|>2wQV&x5VJQ!5dZ!y~SE8S9};-Ids0Sh`4H(n zE=2-_?b?!8e|L?m!wE5(WTBcs10KxCHggU8%}G`nfc${3)|+|%B~Cgy-y~1&n>_(o zdnPcAZJxok`Tkdzf8Nmac;_>CwJMFyy<|N9N#Cf~>V1*o11yjf)?R3EfK?E^0^QSJ zRN$byN1h%uF1;pQUO!3v)!^fTl+Lx*_Js>)#&12Llt?Z+y;##_^`(vc0$zF-E8q*~ zA&*jmdMX9+V{~^-qJC}#D4jXwz^wZ3Dx|+06shYJ#V>3r2PxIfGAx6 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Doors/Shutters/shutters_radiation.rsi/closed.png b/Resources/Textures/Structures/Doors/Shutters/shutters_radiation.rsi/closed.png new file mode 100644 index 0000000000000000000000000000000000000000..813c0ae1510e8869547b7371482e24479c032dea GIT binary patch literal 642 zcmV-|0)737P)y_iDv|W&3_;vFdmPS!RY?8 znv;V=ZTz)+XYGe~ff~ixCu-CHEcSZu@AgPv3VvT_9E#QD91sNt&nPfE9UJ^k0p`=)L7{iB?!R1?%fVR-d zwBgJOZ0Q^Xh92RPEuFK&kRUB7?rv^jSs<=ql}I3$fl5#;vCNNE0+X?}fY{9Da$Bbj zenAOXw!|Uy0t#vQF;>O5Af31E_Vk2{vmi5KGN+);$(sPzh`^!k4&buQoICbF zMG0hO)qRw&5#NY%@VDn~_edL;$sxKC>91bjxevH=pQ3^U`tPn=j_b(fAbJZ5it<807*qoM6N<$f{0`-v;Y7A literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Doors/Shutters/shutters_radiation.rsi/closing.png b/Resources/Textures/Structures/Doors/Shutters/shutters_radiation.rsi/closing.png new file mode 100644 index 0000000000000000000000000000000000000000..dc6a29523e897ba11239ada43586a4186aeb93b8 GIT binary patch literal 2398 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 Q1$vCZ)78&qol`;+06`vP#Q*>R literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Doors/Shutters/shutters_radiation.rsi/opening.png b/Resources/Textures/Structures/Doors/Shutters/shutters_radiation.rsi/opening.png new file mode 100644 index 0000000000000000000000000000000000000000..dc24970018874bcc58b5ab2097c604fbc1f5f7f8 GIT binary patch literal 2416 zcma);eK^y5AICQ)^VkZJXmhGF-A*V^d7635!xf?uVca`qMXfvx8C$AJF^W6xg^3l_ zk%SeC(K%7v8$*QQIBavw!$HHw?B2TX>pJJUuXA1Z`Q!clUf=KU_xt?5@7L%3$2U9B z|CpA#p*jEn(DL#22$Ij`a(~|lsSbk@w^coy9+(!$vjuh1-t@q{ql5N)ws|5?sk;Z!G`^vIhyjO3 zztjjJJqImhYA{~bX1CL>p1V=mG-}Ucv;W2Bj*XkKoVFW;G7>h}Y((Ge)>|g$`y=8M zNkB{Lir0k~5e&M7d3RV}Ldo2_F*j`0$Yj=@uOI&V9+9xdMO~}wz}jJyvGLR4U$gx_ zxiqKIzO|b58$zjJG7M?u8Kok9CI71a_jcPe#MqV_;gSZCG;2-f)d`g*dOE+%*myjU z9J@YCW4jMgH@P*ku{DbU^Yy8W%tF5Ji z(ebM|Dd*$IY=@&qF}q|Juk_Uw*rHelD>e`+Xk%N_HLE5sgQda7lPCEgwENvl$<%GEQW%06WAPLO5dkV}SB{R_!v z@L*SRx((;7rP9s3kUM~F6ULUL(13KUy$D}MB(7#${$RianVjZwZC-SZVly-$B-F)1 z9B>`=KU+b{jewdG?tD?tUPQB@6Wn=lyh=DLP<<3j=L+EQ8eT-m0kxj$swYaFQS6rq9{_)x#2K zf%rQEpyUlk$v}e8O7hw)=(odW3`$xT!#pN5R*!>#zl2)@HR}T08)b9N#)&YVGa=Ya zcnbr1dC-rzfP>D@KMFW1Y8jhFcT;bB5eq2-AAmcX5mkrsYD#8K2Y67g1LQnDq?!#T zN4O=du;3dy9B}WG{lMnYgfmRl5BVt?UI0|?PEha6Lc>ySeG%u26F0YW-!b!^>ZtNhdXlHf<dv~rLvd;rT+mMkxE z;X3Ij_8go_vM!SL>vvUYh-lOMt=2n)n1)tKojEg*e|!QhnH?2Q48@d=7G25<2$dC@ zcb3q@Hx`jtM7aeNTa6(X;@_GS>>lif$3d|L9h(jKcaxG=!7FO$xITGUTsTHr*8J`U z-cA-L@Ht>xg*~Lat2M5|-teMcTd6X~NF5kt`q<(jMmt8kQ7tO}V)p?`<)hPbz-S2T zI^fw4igz7G(S>lL>$5{e7&0kL<%$48!jM(K5O@ecUIE-YeA*plEB{fWdhgi64UD!1 z$n>eaB$m}1V_qTheb0jtRwi5hNyM47-yeX9Z zf=bDYLFA%e-+F@Zs;q3siwM&Bf=^B&grl?mQM~-F=Pn1{9yfm2uFA6wjmYf4L4q8 z^D)(@zVgd=qSOA{l5&Q#s+>0riSS4;1sUkbi>*2>aEh5axB12W#TIHDBbd5E>Frqdv{QtJqq6GxG&d>{kahD;7EPB znDTJHRU9Qx|IQ;n)<+GV4vFp3XmPfnugJI?t{Khm4RJ{{<_fX1ua|*Ih{&8vYLK4J zyLF`sI%PpyD-$?$hAGwZBw;jtSXd)l9f_Y8!6}v3JMi+fwLKzz_10m{*I`X&0!Z-+ z>oaj{CtfJhsH>Ed%|{Y-eRm@Nkcz3jxnjrb7_xn?_&$UMtWfB;dw7Tn&{Y=%Ist)r zxFY}0Vi`EB$PIj2d1N3zAUQl0F`4>QvEwO}+X!A>avM$|73RDhz&oLaB76~LxwU2% zcGTX|&L_FzhkTvOcOqp;%e%E6(s?5SW|!(0-jtRe>mDV~?&J~o48%BY&q~6IT7<10 z%ua3{Jw^{tlge9KuITu59XRUEdit%n6DYs(gu22^s~2Dj!9vU zpj(xD4p9~Xoj$`;?pRrJ`$3;I$)CFLfKY8-e}UwGzE?1!-=N00j?sqPQb@nzFSGuW pll^ah9!v0Tf*$JPLC6$=d@|bYZyVo+$*)iVA5VXe7j99R{{}1lWZVD% literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Doors/Shutters/shutters_window.rsi/closed.png b/Resources/Textures/Structures/Doors/Shutters/shutters_window.rsi/closed.png new file mode 100644 index 0000000000000000000000000000000000000000..87c4fe42ce55d163e99e5d087da5f43de0aaf42d GIT binary patch literal 645 zcmV;00($+4P)fW(l6p+i#y5>i!xm@>5a3=WQQ9H%7ZlYqo`@qNDUd@+`7+duw?Hk%Cr z#bPnImceaNzb1h1d_Jd2r9$KJn5-zLq)7VAeWycXf8hZEu(<{pf#Gn-Zd$EYq+>3Z z3$8uSi=CMJt9<+YKE3#>X9UXSGBp~F*a>w(Rl&q-nY?`rKAB7o8CWitR45c^yWMI@ z>~=fmXL=tu*J`yo5U5tGR4SDsofnG*d%*5?2XPY*yWJ*8)a&)oxSWOcdQG$0j4ZGK zFrXsAgWvhV-wjpmVO*gkr_CK&?$cy>CSMoI!Z>MtaLTufNS zO}jm~rQ|@iK$>SklmKvD_f!J_mjI6Vh$%BkeH{KQfpaXXq~P))i!uo;klR@w(Cq@T z2u-9www#EaAOcxXN+1K1fCMHbgKek^uG)ee#*GMeSq@zz5>u~2AOXJO8j)O-X&`7s z;y@G$v3SxTl4uv`cEBa}L=t2H<97j&b`2z!Koy)flhh^9on%a4nyo+rbV5E*tJUaI zm<9*f+YmLtC2$-kP6U%S3OC>Nq5oLkMM)V&w5ZVRM;aa;ObRv=qFzwziByuO{zJMQNfJwAMg9>~gWsf^E09_90S fcE8{6GqwK$aIpCIqBG`D00000NkvXXu0mjfg47Xn literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Doors/Shutters/shutters_window.rsi/closing.png b/Resources/Textures/Structures/Doors/Shutters/shutters_window.rsi/closing.png new file mode 100644 index 0000000000000000000000000000000000000000..5942fea59de26dab9e2c4d933c2a5f34839deb33 GIT binary patch literal 2310 zcmb7`dpy+H8^_NVxwT`IO2W>xQizbGa`_HPLn8B|6}jx{>K?fj- z!VqIdDvEN6Os!jzkX&bGjhXq59c}x^zJ7n~YyUXsJm);;@;dL&^PJcD<&eXEjQj?9 z00738XiXBgdE(M2D=n_$Oix9K8@XWOkx&2>o-P;Y)>Z{o0Ay=ztu37+v!=2t{MMXa zAHUyqtF3m?5)6GQPYTN=bW)G?<)6yFW__i z!jI;dMUjq>eS8X1*fqtuBF-G&B(PsgZDEl;=70KhamY5>W(&{#13dOv$JWU{zQ7H) z!0lsa=43KNU6ZVGwrPi`E`&GMA{0G_mrgK6^A)qyrIyO}7FKU>;dMS|qPr=SFHbQ~ zyWzn^%$cR`wPlh9qCsJOeSJ4SUEgc^i}2vlhI7W}mqch4qcqO=vq*#t*D@r$Eh`Pr zV{KAie7t7PW49jrL=|ip8XOdzsEIL-?5pbl8jxmL6O=?!C#V= z(%yk5-hnLT|AXsz6`d|DjegNT!$fPxd2Q+XDkIkxj4kTIr`%}l{PB2qFa5efn&@Sr zPk4XB`F;BR?N{@0fidRyqZzp)pI+tX-r%2^Y!gy^;Q`-ZcsReO1xt)MjmF|0w0E$K z+5EZhQifACcW;>+DMl$_$kRK*XculgN9i0&hgx17yX*?e$MpLdNb?@dSiMcj% z(vylVJ4obVmaVH=zNV(+zTJwHCtg;xni_Fn9O_vOEJ0GL64*2vegOO|O&Fy3%7Wzi zPWz^MS4QMBnoOtA_H&M_==dRACnca+lOIF4A{%I*Bz$135L z7x=+HsWbi%FPq>ya{c$p%VTOZRCG*!aY|!neKf8P%p;g~E=*t?$?^L*DYESTs&pP5+`pioE%eXTc2 zyJg1hHh$yi=k+2Z%H1eFwT|zCSQWg=NGm>97F0l9oIhTQGicCh_Y^or%4NbqpcbzHgM?t|{IryVlPSup9ny_RxhECkN+O5W9$crvs)^vG060jR|VMMOln zF#}P7Y-4My9Yb_@sMk9U_mKW6U=C2nIN#f`mJ(D8uavF0#P(c25C)ti_WE%IEcs^@?0w6&S(Ie;d{I8<{4xwLJ7*?QO+woI3sC5S}BiN)}_=U*0J(V zHy+f1W&FfeIYR$etNW`Q!x9u~mbkwlw~7+^O&BFgt=P(01#+>;^Q)!u;B}hI>p*fy zy(Tb}#0L?KrGRbJsjtDSv}sgP<^LWKgwQ-ENg`jv8E7WwI=GOz5Mq5l5tqb&&0hh( zZ*I0hCQa4*v8?7R&ds{E#kg$)PIJ7u5j)sp2r+9BUJMiK#jcgh9^pfo!i14^p>OXM zdw4GGM4Gn8@HVog&w6Fg2=r%sV=}X|IMKzpj_`eN7hLMk2;?b?bN&J+RXFD-pYSqT z^;G2f>H9yH>kK9JB#xCcZ|nd8gEFS=65bsLG9UP&G0OHSxQCN~iafV5vB$+)4IRu( z4wRcQ1z{}f@797R67TzlPnI&f!ho>f#eKewvx?G$5UTS!mmznaBAQQKc8CMx5(aFI zU87YS_Q*9RE^0}1wqimvFxeB)vW>Ifpb9R^66oML*Iyb+_$wcl5mSo(!Q259vMt5Q z(X;~C?iPEdm3{zo-xS&+K9E8+(*PE@O{1E!1hTH(zq~77Q=+JZ%u}8)3C8`4danHrA!~$(H+jT5LZ#mtptJqm)06FP&t4a%-oFJxypN z;&E?rBIDOLXI);U4eFZ&ecmFaS4#UBp{K>UKaxqim_DHckdhfGNd3BU;ewvljvfds zo2om*-7wjCcV}0rb#=6Bl&dTd-ukJxG{pB$1DOI4#@Oiztlw`mlwNvEn+;k9M7 zL(DTPWFdh0HfOabNx>~CH7<2FIi&N4B|TSl(D{$CzdLLG-bA+qH{1UxH11kl+7b}_ XF5PFOPCg|5*Z|vo4%TH>-m!lI^#n({ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Doors/Shutters/shutters_window.rsi/meta.json b/Resources/Textures/Structures/Doors/Shutters/shutters_window.rsi/meta.json new file mode 100644 index 0000000000..490848e611 --- /dev/null +++ b/Resources/Textures/Structures/Doors/Shutters/shutters_window.rsi/meta.json @@ -0,0 +1 @@ +{"name":1,"size":{"x":32,"y":32},"states":[{"name":"closed","directions":1},{"name":"opening","directions":1,"delays":[[0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05]]},{"name":"closing","directions":1,"delays":[[0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05]]},{"name":"open","directions":1}],"license":"CC-BY-SA-3.0","copyright":"Tgstation at 97b0.05295aca9f31a7500.0556e0.050730d05b5837e39fc","version":1} \ No newline at end of file diff --git a/Resources/Textures/Structures/Doors/Shutters/shutters_window.rsi/open.png b/Resources/Textures/Structures/Doors/Shutters/shutters_window.rsi/open.png new file mode 100644 index 0000000000000000000000000000000000000000..de59fd7897eb3a54ef3fbb07d28e1de663a5864a GIT binary patch literal 278 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5D0srt z#WAE}&fDpRT!#!q+U8HtF7ep3lPm7<%h*E)&mP=4IsKJFMUzkC97pFihnJU5E;Q2& zi&`6zQCexQ^7H=h&kv+GwJ0Wq>VLTB956{`?fcggdFS5OxMO;(L4avW(1A9+-m5oe zmP}^Ss$pW8Rj^sjL)^*f(!xGgq!p<4UN z;N=}HVt3aBU{=+vtJxmIuTb7QBeo|$={v4W|jnIU!YVxXTG NJYD@<);T3K0RT5qY>fZ_ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Doors/Shutters/shutters_window.rsi/opening.png b/Resources/Textures/Structures/Doors/Shutters/shutters_window.rsi/opening.png new file mode 100644 index 0000000000000000000000000000000000000000..eaf16c8dc6d3093a0bac5088d8b1a4955f10d688 GIT binary patch literal 2435 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 RTj^gFaNOPd81+a9=?{Sqan1k$ literal 0 HcmV?d00001