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 0000000000..e64deb132f Binary files /dev/null and b/Resources/Audio/Machines/blastdoor.ogg differ diff --git a/Resources/Prototypes/Entities/Structures/Doors/Shutter/blast_door.yml b/Resources/Prototypes/Entities/Structures/Doors/Shutter/blast_door.yml new file mode 100644 index 0000000000..7bdfca213b --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Doors/Shutter/blast_door.yml @@ -0,0 +1,35 @@ +- type: entity + id: BlastDoor + parent: BaseShutter + name: blast door + description: This one says 'BLAST DONGER'. + components: + - type: Sprite + netsync: false + drawdepth: Mobs # They're on the same layer as mobs, perspective. + sprite: Structures/Doors/Shutters/blastdoor.rsi + layers: + - state: closed + map: ["enum.DoorVisualLayers.Base"] + - type: Door + closeTimeOne: 0.4 + closeTimeTwo: 0.4 + openTimeOne: 0.4 + openTimeTwo: 0.4 + crushDamage: + types: + Blunt: 25 # yowch + - type: Occluder + - type: Appearance + visuals: + - type: AirlockVisualizer + simpleVisuals: true + animationTime: 1.0 + +- type: entity + id: BlastDoorOpen + parent: BlastDoor + suffix: Open + components: + - type: Door + startOpen: true diff --git a/Resources/Prototypes/Entities/Structures/Doors/Shutter/shutters.yml b/Resources/Prototypes/Entities/Structures/Doors/Shutter/shutters.yml new file mode 100644 index 0000000000..2cd2ca5a1c --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Doors/Shutter/shutters.yml @@ -0,0 +1,136 @@ +- type: entity + id: BaseShutter + parent: BaseStructure + name: shutter + abstract: true + description: One shudders to think about what might be behind this shutter. + components: + - type: Sprite + netsync: false + drawdepth: Mobs # They're on the same layer as mobs, perspective. + sprite: Structures/Doors/Shutters/shutters.rsi + layers: + - state: closed + map: ["enum.DoorVisualLayers.Base"] + - type: Physics + fixtures: + - shape: + !type:PhysShapeAabb + bounds: "-0.49,-0.49,0.49,0.49" # don't want this colliding with walls or they won't close + mass: 100 + mask: + - MobImpassable + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Door + board: DoorElectronics + bumpOpen: false + clickOpen: false + autoClose: false + closeTimeOne: 0.2 + closeTimeTwo: 1.2 + openTimeOne: 1.2 + openTimeTwo: 0.2 + inhibitCrush: false + crushDamage: + types: + Blunt: 5 # getting shutters closed on you probably doesn't hurt that much + openSound: + path: /Audio/Machines/blastdoor.ogg + closeSound: + path: /Audio/Machines/blastdoor.ogg + - type: Appearance + visuals: + - type: AirlockVisualizer + simpleVisuals: true + animationTime: 1.4 + - type: UserInterface + interfaces: + - key: enum.WiresUiKey.Key + type: WiresBoundUserInterface + - type: Airtight + fixVacuum: true + - type: Damageable + damageContainer: Inorganic + damageModifierSet: Metallic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 500 + behaviors: + - !type:DoActsBehavior + acts: ["Destruction"] + - type: IconSmooth + key: walls + mode: NoSprite + - type: SignalReceiver + inputs: + - name: pressed + - type: ToggleDoorOnTrigger + - type: TriggerOnSignalReceived + placement: + mode: SnapgridCenter + +- type: entity + id: ShuttersNormal + parent: BaseShutter + components: + - type: Occluder + +- type: entity + id: ShuttersNormalOpen + parent: ShuttersNormal + suffix: Open + components: + - type: Door + startOpen: true + +- type: entity + id: ShuttersRadiation + parent: BaseShutter + name: radiation shutters + description: Why did they make these shutters radioactive? + components: + - type: Sprite + netsync: false + drawdepth: Mobs # They're on the same layer as mobs, perspective. + sprite: Structures/Doors/Shutters/shutters_radiation.rsi + layers: + - state: closed + map: ["enum.DoorVisualLayers.Base"] + - type: Occluder + +- type: entity + id: ShuttersRadiationOpen + parent: ShuttersRadiation + suffix: Open + components: + - type: Door + startOpen: true + +- type: entity + id: ShuttersWindow + parent: BaseShutter + name: window shutters + description: The Best (TM) place to see your friends explode! + components: + - type: Sprite + netsync: false + drawdepth: Mobs # They're on the same layer as mobs, perspective. + sprite: Structures/Doors/Shutters/shutters_window.rsi + layers: + - state: closed + map: ["enum.DoorVisualLayers.Base"] + +- type: entity + id: ShuttersWindowOpen + parent: ShuttersWindow + suffix: Open + components: + - type: Door + startOpen: true diff --git a/Resources/Textures/Structures/Doors/Shutters/blastdoor.rsi/closed.png b/Resources/Textures/Structures/Doors/Shutters/blastdoor.rsi/closed.png new file mode 100644 index 0000000000..c3d00701f1 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Shutters/blastdoor.rsi/closed.png differ 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 0000000000..775430e8f8 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Shutters/blastdoor.rsi/closing.png differ diff --git a/Resources/Textures/Structures/Doors/Shutters/blastdoor.rsi/meta.json b/Resources/Textures/Structures/Doors/Shutters/blastdoor.rsi/meta.json new file mode 100644 index 0000000000..a8d4b41fdd --- /dev/null +++ b/Resources/Textures/Structures/Doors/Shutters/blastdoor.rsi/meta.json @@ -0,0 +1 @@ +{"name":1,"size":{"x":32,"y":32},"states":[{"name":"closing","directions":1,"delays":[[0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.4]]},{"name":"opening","directions":1,"delays":[[0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.4]]},{"name":"open","directions":1},{"name":"closed","directions":1}],"license":"CC-BY-SA-3.0","copyright":"Tgstation at 97b4295aca9f31a750456e40730d05b5837e39fc","version":1} \ No newline at end of file diff --git a/Resources/Textures/Structures/Doors/Shutters/blastdoor.rsi/open.png b/Resources/Textures/Structures/Doors/Shutters/blastdoor.rsi/open.png new file mode 100644 index 0000000000..44f05bf0f0 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Shutters/blastdoor.rsi/open.png differ 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 0000000000..cda7005fed Binary files /dev/null and b/Resources/Textures/Structures/Doors/Shutters/blastdoor.rsi/opening.png differ diff --git a/Resources/Textures/Structures/Doors/Shutters/shutters.rsi/closed.png b/Resources/Textures/Structures/Doors/Shutters/shutters.rsi/closed.png new file mode 100644 index 0000000000..1d49ddd629 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Shutters/shutters.rsi/closed.png differ diff --git a/Resources/Textures/Structures/Doors/Shutters/shutters.rsi/closing.png b/Resources/Textures/Structures/Doors/Shutters/shutters.rsi/closing.png new file mode 100644 index 0000000000..f6645dd9f8 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Shutters/shutters.rsi/closing.png differ 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 0000000000..de59fd7897 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Shutters/shutters.rsi/open.png differ 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 0000000000..888e109cb5 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Shutters/shutters.rsi/opening.png differ 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 0000000000..813c0ae151 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Shutters/shutters_radiation.rsi/closed.png differ 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 0000000000..dc6a29523e Binary files /dev/null and b/Resources/Textures/Structures/Doors/Shutters/shutters_radiation.rsi/closing.png differ diff --git a/Resources/Textures/Structures/Doors/Shutters/shutters_radiation.rsi/meta.json b/Resources/Textures/Structures/Doors/Shutters/shutters_radiation.rsi/meta.json new file mode 100644 index 0000000000..c97082c061 --- /dev/null +++ b/Resources/Textures/Structures/Doors/Shutters/shutters_radiation.rsi/meta.json @@ -0,0 +1 @@ +{"name":1,"size":{"x":32,"y":32},"states":[{"name":"closed","directions":1},{"name":"open","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]]}],"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_radiation.rsi/open.png b/Resources/Textures/Structures/Doors/Shutters/shutters_radiation.rsi/open.png new file mode 100644 index 0000000000..43472cab74 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Shutters/shutters_radiation.rsi/open.png differ 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 0000000000..dc24970018 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Shutters/shutters_radiation.rsi/opening.png differ 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 0000000000..87c4fe42ce Binary files /dev/null and b/Resources/Textures/Structures/Doors/Shutters/shutters_window.rsi/closed.png differ 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 0000000000..5942fea59d Binary files /dev/null and b/Resources/Textures/Structures/Doors/Shutters/shutters_window.rsi/closing.png differ 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 0000000000..de59fd7897 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Shutters/shutters_window.rsi/open.png differ 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 0000000000..eaf16c8dc6 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Shutters/shutters_window.rsi/opening.png differ