diff --git a/Content.Client/GameObjects/Components/WindowComponent.cs b/Content.Client/GameObjects/Components/WindowComponent.cs
index 8587c2bcac..3a06cba79e 100644
--- a/Content.Client/GameObjects/Components/WindowComponent.cs
+++ b/Content.Client/GameObjects/Components/WindowComponent.cs
@@ -1,4 +1,5 @@
-using Content.Client.GameObjects.EntitySystems;
+using System.Diagnostics.CodeAnalysis;
+using Content.Client.GameObjects.EntitySystems;
using Content.Shared.GameObjects.Components;
using Robust.Client.GameObjects;
using Robust.Client.Interfaces.GameObjects.Components;
@@ -34,14 +35,33 @@ namespace Content.Client.GameObjects.Components
Owner.EntityManager.EventBus.RaiseEvent(EventSource.Local, new WindowSmoothDirtyEvent(Owner));
var state0 = $"{_stateBase}0";
+ const string cracksRSIPath = "/Textures/Constructible/Structures/Windows/cracks.rsi";
_sprite.LayerMapSet(CornerLayers.SE, _sprite.AddLayerState(state0));
_sprite.LayerSetDirOffset(CornerLayers.SE, SpriteComponent.DirectionOffset.None);
+ _sprite.LayerMapSet(WindowDamageLayers.DamageSE, _sprite.AddLayerState("0_1", cracksRSIPath));
+ _sprite.LayerSetShader(WindowDamageLayers.DamageSE, "unshaded");
+ _sprite.LayerSetVisible(WindowDamageLayers.DamageSE, false);
+
_sprite.LayerMapSet(CornerLayers.NE, _sprite.AddLayerState(state0));
_sprite.LayerSetDirOffset(CornerLayers.NE, SpriteComponent.DirectionOffset.CounterClockwise);
+ _sprite.LayerMapSet(WindowDamageLayers.DamageNE, _sprite.AddLayerState("0_1", cracksRSIPath));
+ _sprite.LayerSetDirOffset(WindowDamageLayers.DamageNE, SpriteComponent.DirectionOffset.CounterClockwise);
+ _sprite.LayerSetShader(WindowDamageLayers.DamageNE, "unshaded");
+ _sprite.LayerSetVisible(WindowDamageLayers.DamageNE, false);
+
_sprite.LayerMapSet(CornerLayers.NW, _sprite.AddLayerState(state0));
_sprite.LayerSetDirOffset(CornerLayers.NW, SpriteComponent.DirectionOffset.Flip);
+ _sprite.LayerMapSet(WindowDamageLayers.DamageNW, _sprite.AddLayerState("0_1", cracksRSIPath));
+ _sprite.LayerSetDirOffset(WindowDamageLayers.DamageNW, SpriteComponent.DirectionOffset.Flip);
+ _sprite.LayerSetShader(WindowDamageLayers.DamageNW, "unshaded");
+ _sprite.LayerSetVisible(WindowDamageLayers.DamageNW, false);
+
_sprite.LayerMapSet(CornerLayers.SW, _sprite.AddLayerState(state0));
_sprite.LayerSetDirOffset(CornerLayers.SW, SpriteComponent.DirectionOffset.Clockwise);
+ _sprite.LayerMapSet(WindowDamageLayers.DamageSW, _sprite.AddLayerState("0_1", cracksRSIPath));
+ _sprite.LayerSetDirOffset(WindowDamageLayers.DamageSW, SpriteComponent.DirectionOffset.Clockwise);
+ _sprite.LayerSetShader(WindowDamageLayers.DamageSW, "unshaded");
+ _sprite.LayerSetVisible(WindowDamageLayers.DamageSW, false);
}
///
@@ -91,4 +111,13 @@ namespace Content.Client.GameObjects.Components
serializer.DataField(ref _stateBase, "base", null);
}
}
+
+ [SuppressMessage("ReSharper", "InconsistentNaming")]
+ public enum WindowDamageLayers
+ {
+ DamageSE,
+ DamageNE,
+ DamageNW,
+ DamageSW
+ }
}
diff --git a/Content.Client/GameObjects/Components/WindowVisualizer.cs b/Content.Client/GameObjects/Components/WindowVisualizer.cs
new file mode 100644
index 0000000000..e66ded87d2
--- /dev/null
+++ b/Content.Client/GameObjects/Components/WindowVisualizer.cs
@@ -0,0 +1,60 @@
+using System;
+using Content.Shared.GameObjects.Components;
+using Content.Shared.Utility;
+using JetBrains.Annotations;
+using Robust.Client.GameObjects;
+using Robust.Client.Interfaces.GameObjects.Components;
+using Robust.Shared.GameObjects.Components.Transform;
+using Robust.Shared.Interfaces.GameObjects;
+
+namespace Content.Client.GameObjects.Components
+{
+ [UsedImplicitly]
+ public sealed class WindowVisualizer : AppearanceVisualizer
+ {
+ public override void OnChangeData(AppearanceComponent component)
+ {
+ base.OnChangeData(component);
+
+ var sprite = component.Owner.GetComponent();
+ var snapGrid = component.Owner.GetComponent();
+ var lowWall = FindLowWall(snapGrid);
+ if (lowWall == null) return;
+
+ if (component.TryGetData(WindowVisuals.Damage, out float fraction))
+ {
+ var level = Math.Min(ContentHelpers.RoundToLevels(fraction, 1, 7), 5);
+ if (level == 0)
+ {
+ foreach (WindowDamageLayers val in Enum.GetValues(typeof(WindowDamageLayers)))
+ {
+ sprite.LayerSetVisible(val, false);
+ }
+ return;
+ }
+ foreach (WindowDamageLayers val in Enum.GetValues(typeof(WindowDamageLayers)))
+ {
+ sprite.LayerSetVisible(val, true);
+ }
+
+ sprite.LayerSetState(WindowDamageLayers.DamageNE, $"{(int) lowWall.LastCornerNE}_{level}");
+ sprite.LayerSetState(WindowDamageLayers.DamageSE, $"{(int) lowWall.LastCornerSE}_{level}");
+ sprite.LayerSetState(WindowDamageLayers.DamageSW, $"{(int) lowWall.LastCornerSW}_{level}");
+ sprite.LayerSetState(WindowDamageLayers.DamageNW, $"{(int) lowWall.LastCornerNW}_{level}");
+
+ }
+ }
+
+ private static LowWallComponent FindLowWall(SnapGridComponent snapGrid)
+ {
+ foreach (var entity in snapGrid.GetLocal())
+ {
+ if (entity.TryGetComponent(out LowWallComponent lowWall))
+ {
+ return lowWall;
+ }
+ }
+ return null;
+ }
+ }
+}
diff --git a/Content.Server/GameObjects/Components/Damage/BreakableComponent.cs b/Content.Server/GameObjects/Components/Damage/BreakableComponent.cs
index 7be9a71b50..07ee5cc17f 100644
--- a/Content.Server/GameObjects/Components/Damage/BreakableComponent.cs
+++ b/Content.Server/GameObjects/Components/Damage/BreakableComponent.cs
@@ -1,4 +1,5 @@
using System.Collections.Generic;
+using Content.Shared.Audio;
using Content.Shared.GameObjects.Components.Damage;
using Content.Shared.GameObjects.EntitySystems;
using Robust.Server.GameObjects.EntitySystems;
@@ -7,6 +8,7 @@ using Robust.Shared.GameObjects.Systems;
using Robust.Shared.Interfaces.GameObjects;
using Robust.Shared.Interfaces.Random;
using Robust.Shared.IoC;
+using Robust.Shared.Log;
using Robust.Shared.Random;
namespace Content.Server.GameObjects.Components.Damage
@@ -65,11 +67,6 @@ namespace Content.Server.GameObjects.Components.Damage
protected override void DestructionBehavior()
{
_actSystem.HandleBreakage(Owner);
- if (!Owner.Deleted && DestroySound != string.Empty)
- {
- var pos = Owner.Transform.Coordinates;
- EntitySystem.Get().PlayAtCoords(DestroySound, pos);
- }
}
}
}
diff --git a/Content.Server/GameObjects/Components/Damage/DestructibleComponent.cs b/Content.Server/GameObjects/Components/Damage/DestructibleComponent.cs
index c62cf921cf..6c1e59a228 100644
--- a/Content.Server/GameObjects/Components/Damage/DestructibleComponent.cs
+++ b/Content.Server/GameObjects/Components/Damage/DestructibleComponent.cs
@@ -1,10 +1,13 @@
-using Content.Shared.GameObjects.Components.Damage;
+using System.Collections.Generic;
+using Content.Server.GameObjects.Components.Stack;
+using Content.Shared.GameObjects.Components.Damage;
using Content.Shared.GameObjects.EntitySystems;
-using Robust.Server.GameObjects.EntitySystems;
+using Content.Shared.Utility;
using Robust.Shared.GameObjects;
-using Robust.Shared.GameObjects.Systems;
using Robust.Shared.Interfaces.GameObjects;
+using Robust.Shared.Interfaces.Random;
using Robust.Shared.IoC;
+using Robust.Shared.Prototypes;
using Robust.Shared.Serialization;
namespace Content.Server.GameObjects.Components.Damage
@@ -17,6 +20,8 @@ namespace Content.Server.GameObjects.Components.Damage
public class DestructibleComponent : RuinableComponent, IDestroyAct
{
[Dependency] private readonly IEntitySystemManager _entitySystemManager = default!;
+ [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
+ [Dependency] private readonly IRobustRandom _random = default!;
protected ActSystem ActSystem;
@@ -24,22 +29,51 @@ namespace Content.Server.GameObjects.Components.Damage
public override string Name => "Destructible";
///
- /// Entity spawned upon destruction.
+ /// Entities spawned on destruction plus the min and max amount spawned.
///
- public string SpawnOnDestroy { get; private set; }
+ public Dictionary SpawnOnDestroy { get; private set; }
void IDestroyAct.OnDestroy(DestructionEventArgs eventArgs)
{
- if (!string.IsNullOrWhiteSpace(SpawnOnDestroy) && eventArgs.IsSpawnWreck)
+ if (SpawnOnDestroy == null || !eventArgs.IsSpawnWreck) return;
+ foreach (var (key, value) in SpawnOnDestroy)
{
- Owner.EntityManager.SpawnEntity(SpawnOnDestroy, Owner.Transform.Coordinates);
+ int count;
+ if (value.Min >= value.Max)
+ {
+ count = value.Min;
+ }
+ else
+ {
+ count = _random.Next(value.Min, value.Max + 1);
+ }
+
+ if (count == 0) continue;
+
+ if (EntityPrototypeHelpers.HasComponent(key))
+ {
+ var spawned = Owner.EntityManager.SpawnEntity(key, Owner.Transform.Coordinates);
+ var stack = spawned.GetComponent();
+ stack.Count = count;
+ spawned.RandomOffset(0.5f);
+ }
+ else
+ {
+ for (var i = 0; i < count; i++)
+ {
+ var spawned = Owner.EntityManager.SpawnEntity(key, Owner.Transform.Coordinates);
+ spawned.RandomOffset(0.5f);
+ }
+ }
}
}
public override void ExposeData(ObjectSerializer serializer)
{
base.ExposeData(serializer);
- serializer.DataField(this, d => d.SpawnOnDestroy, "spawnOnDestroy", string.Empty);
+
+
+ serializer.DataField(this, d => d.SpawnOnDestroy, "spawnOnDestroy", null);
}
public override void Initialize()
@@ -56,11 +90,13 @@ namespace Content.Server.GameObjects.Components.Damage
var pos = Owner.Transform.Coordinates;
ActSystem.HandleDestruction(Owner,
true); //This will call IDestroyAct.OnDestroy on this component (and all other components on this entity)
- if (DestroySound != string.Empty)
- {
- EntitySystem.Get().PlayAtCoords(DestroySound, pos);
- }
}
}
+
+ public struct MinMax
+ {
+ public int Min;
+ public int Max;
+ }
}
}
diff --git a/Content.Server/GameObjects/Components/Damage/RuinableComponent.cs b/Content.Server/GameObjects/Components/Damage/RuinableComponent.cs
index 421574f8a5..c77c374777 100644
--- a/Content.Server/GameObjects/Components/Damage/RuinableComponent.cs
+++ b/Content.Server/GameObjects/Components/Damage/RuinableComponent.cs
@@ -1,11 +1,15 @@
using System.Collections.Generic;
+using Content.Shared.Audio;
using Content.Shared.GameObjects.Components.Damage;
using Robust.Server.GameObjects.EntitySystems;
using Robust.Shared.GameObjects;
using Robust.Shared.GameObjects.Systems;
using Robust.Shared.Interfaces.GameObjects;
+using Robust.Shared.Interfaces.Random;
+using Robust.Shared.IoC;
using Robust.Shared.Serialization;
using Robust.Shared.ViewVariables;
+using Logger = Robust.Shared.Log.Logger;
namespace Content.Server.GameObjects.Components.Damage
{
@@ -16,12 +20,19 @@ namespace Content.Server.GameObjects.Components.Damage
[ComponentReference(typeof(IDamageableComponent))]
public abstract class RuinableComponent : DamageableComponent
{
+ [Dependency] private IRobustRandom _random = default!;
///
/// Sound played upon destruction.
///
[ViewVariables]
protected string DestroySound { get; private set; }
+ ///
+ /// Used instead of if specified.
+ ///
+ [ViewVariables]
+ protected string DestroySoundCollection { get; private set; }
+
public override List SupportedDamageStates =>
new List {DamageState.Alive, DamageState.Dead};
@@ -44,6 +55,7 @@ namespace Content.Server.GameObjects.Components.Damage
() => Thresholds.TryGetValue(DamageState.Dead, out var value) ? value : (int?) null);
serializer.DataField(this, ruinable => ruinable.DestroySound, "destroySound", string.Empty);
+ serializer.DataField(this, ruinable => ruinable.DestroySoundCollection, "destroySoundCollection", string.Empty);
}
protected override void EnterState(DamageState state)
@@ -65,10 +77,24 @@ namespace Content.Server.GameObjects.Components.Damage
{
CurrentState = DamageState.Dead;
- if (!Owner.Deleted && DestroySound != string.Empty)
+ if (!Owner.Deleted)
{
var pos = Owner.Transform.Coordinates;
- EntitySystem.Get().PlayAtCoords(DestroySound, pos);
+ string sound = string.Empty;
+ if (DestroySoundCollection != string.Empty)
+ {
+ sound = AudioHelpers.GetRandomFileFromSoundCollection(DestroySoundCollection);
+
+ }
+ else if (DestroySound != string.Empty)
+ {
+ sound = DestroySound;
+ }
+ if (sound != string.Empty)
+ {
+ Logger.Debug("Playing destruction sound");
+ EntitySystem.Get().PlayAtCoords(sound, pos, AudioHelpers.WithVariation(0.125f));
+ }
}
DestructionBehavior();
diff --git a/Content.Server/GameObjects/Components/RandomSpriteStateComponent.cs b/Content.Server/GameObjects/Components/RandomSpriteStateComponent.cs
new file mode 100644
index 0000000000..75a7539ad7
--- /dev/null
+++ b/Content.Server/GameObjects/Components/RandomSpriteStateComponent.cs
@@ -0,0 +1,36 @@
+using System.Collections.Generic;
+using Robust.Server.GameObjects;
+using Robust.Shared.GameObjects;
+using Robust.Shared.Interfaces.Random;
+using Robust.Shared.IoC;
+using Robust.Shared.Random;
+using Robust.Shared.Serialization;
+
+namespace Content.Server.GameObjects.Components
+{
+ [RegisterComponent]
+ public class RandomSpriteStateComponent : Component
+ {
+ [Dependency] private readonly IRobustRandom _random = default!;
+ public override string Name => "RandomSpriteState";
+
+ private List _spriteStates;
+
+ private int _spriteLayer;
+
+ public override void ExposeData(ObjectSerializer serializer)
+ {
+ base.ExposeData(serializer);
+ serializer.DataField(ref _spriteStates, "spriteStates", null);
+ serializer.DataField(ref _spriteLayer, "spriteLayer", 0);
+ }
+
+ public override void Initialize()
+ {
+ base.Initialize();
+ if (_spriteStates == null) return;
+ if (!Owner.TryGetComponent(out SpriteComponent spriteComponent)) return;
+ spriteComponent.LayerSetState(_spriteLayer, _random.Pick(_spriteStates));
+ }
+ }
+}
diff --git a/Content.Server/GameObjects/Components/WindowComponent.cs b/Content.Server/GameObjects/Components/WindowComponent.cs
index 1d4b78b7e5..f506fefb33 100644
--- a/Content.Server/GameObjects/Components/WindowComponent.cs
+++ b/Content.Server/GameObjects/Components/WindowComponent.cs
@@ -1,11 +1,104 @@
-using Content.Shared.GameObjects.Components;
+using System;
+using Content.Server.Utility;
+using Content.Shared.Audio;
+using Content.Shared.GameObjects.Components;
+using Content.Shared.GameObjects.Components.Damage;
+using Content.Shared.GameObjects.EntitySystems;
+using Content.Shared.Interfaces.GameObjects.Components;
+using Content.Shared.Utility;
+using Robust.Server.GameObjects;
+using Robust.Server.GameObjects.EntitySystems;
using Robust.Shared.GameObjects;
+using Robust.Shared.GameObjects.Systems;
+using Robust.Shared.Localization;
+using Robust.Shared.Utility;
namespace Content.Server.GameObjects.Components
{
[RegisterComponent]
[ComponentReference(typeof(SharedWindowComponent))]
- public class WindowComponent : SharedWindowComponent
+ public class WindowComponent : SharedWindowComponent, IExamine, IInteractHand
{
+ private int? Damage
+ {
+ get
+ {
+ if (!Owner.TryGetComponent(out IDamageableComponent damageableComponent)) return null;
+ return damageableComponent.TotalDamage;
+ }
+ }
+
+ private int? MaxDamage
+ {
+ get
+ {
+ if (!Owner.TryGetComponent(out IDamageableComponent damageableComponent)) return null;
+ return damageableComponent.Thresholds[DamageState.Dead];
+ }
+ }
+
+ public override void Initialize()
+ {
+ base.Initialize();
+ if (Owner.TryGetComponent(out IDamageableComponent damageableComponent))
+ {
+ damageableComponent.HealthChangedEvent += OnDamage;
+ }
+ }
+
+ private void OnDamage(HealthChangedEventArgs eventArgs)
+ {
+ int current = eventArgs.Damageable.TotalDamage;
+ int max = eventArgs.Damageable.Thresholds[DamageState.Dead];
+ if (eventArgs.Damageable.CurrentState == DamageState.Dead) return;
+ UpdateVisuals(current, max);
+ }
+
+ private void UpdateVisuals(int currentDamage, int maxDamage)
+ {
+ if (Owner.TryGetComponent(out AppearanceComponent appearance))
+ {
+ appearance.SetData(WindowVisuals.Damage, (float) currentDamage / maxDamage);
+ }
+ }
+
+
+ void IExamine.Examine(FormattedMessage message, bool inDetailsRange)
+ {
+ int? damage = Damage;
+ int? maxDamage = MaxDamage;
+ if (damage == null || maxDamage == null) return;
+ float fraction = ((damage == 0 || maxDamage == 0) ? 0f : (float) damage / maxDamage) ?? 0f;
+ int level = Math.Min(ContentHelpers.RoundToLevels(fraction, 1, 7), 5);
+ switch (level)
+ {
+ case 0:
+ message.AddText(Loc.GetString("It looks fully intact."));
+ break;
+ case 1:
+ message.AddText(Loc.GetString("It has a few scratches."));
+ break;
+ case 2:
+ message.AddText(Loc.GetString("It has a few small cracks."));
+ break;
+ case 3:
+ message.AddText(Loc.GetString("It has several big cracks running along its surface."));
+ break;
+ case 4:
+ message.AddText(Loc.GetString("It has deep cracks across multiple layers."));
+ break;
+ case 5:
+ message.AddText(Loc.GetString("It is extremely badly cracked and on the verge of shattering."));
+ break;
+ }
+ }
+
+ bool IInteractHand.InteractHand(InteractHandEventArgs eventArgs)
+ {
+ EntitySystem.Get()
+ .PlayAtCoords("/Audio/Effects/glass_knock.ogg", eventArgs.Target.Transform.Coordinates, AudioHelpers.WithVariation(0.05f));
+ eventArgs.Target.PopupMessageEveryone(Loc.GetString("*knock knock*"));
+ return true;
+ }
}
}
diff --git a/Content.Shared/GameObjects/Components/SharedWindowComponent.cs b/Content.Shared/GameObjects/Components/SharedWindowComponent.cs
index 862b9069bf..ed62f9cf57 100644
--- a/Content.Shared/GameObjects/Components/SharedWindowComponent.cs
+++ b/Content.Shared/GameObjects/Components/SharedWindowComponent.cs
@@ -1,4 +1,6 @@
-using Robust.Shared.GameObjects;
+using System;
+using Robust.Shared.GameObjects;
+using Robust.Shared.Serialization;
namespace Content.Shared.GameObjects.Components
{
@@ -6,4 +8,10 @@ namespace Content.Shared.GameObjects.Components
{
public override string Name => "Window";
}
+
+ [Serializable, NetSerializable]
+ public enum WindowVisuals
+ {
+ Damage
+ }
}
diff --git a/Resources/Audio/Effects/gen_hit.ogg b/Resources/Audio/Effects/gen_hit.ogg
index 9a354b9a00..7bf618a7d2 100644
Binary files a/Resources/Audio/Effects/gen_hit.ogg and b/Resources/Audio/Effects/gen_hit.ogg differ
diff --git a/Resources/Audio/Effects/glassbreak1.ogg b/Resources/Audio/Effects/glass_break1.ogg
similarity index 100%
rename from Resources/Audio/Effects/glassbreak1.ogg
rename to Resources/Audio/Effects/glass_break1.ogg
diff --git a/Resources/Audio/Effects/glassbreak2.ogg b/Resources/Audio/Effects/glass_break2.ogg
similarity index 100%
rename from Resources/Audio/Effects/glassbreak2.ogg
rename to Resources/Audio/Effects/glass_break2.ogg
diff --git a/Resources/Audio/Effects/glassbreak3.ogg b/Resources/Audio/Effects/glass_break3.ogg
similarity index 100%
rename from Resources/Audio/Effects/glassbreak3.ogg
rename to Resources/Audio/Effects/glass_break3.ogg
diff --git a/Resources/Audio/Effects/glass_hit.ogg b/Resources/Audio/Effects/glass_hit.ogg
new file mode 100644
index 0000000000..e6842104db
Binary files /dev/null and b/Resources/Audio/Effects/glass_hit.ogg differ
diff --git a/Resources/Audio/Effects/glass_knock.ogg b/Resources/Audio/Effects/glass_knock.ogg
new file mode 100644
index 0000000000..4d01e479b1
Binary files /dev/null and b/Resources/Audio/Effects/glass_knock.ogg differ
diff --git a/Resources/Audio/Effects/glass_step.ogg b/Resources/Audio/Effects/glass_step.ogg
new file mode 100644
index 0000000000..c093f2cff6
Binary files /dev/null and b/Resources/Audio/Effects/glass_step.ogg differ
diff --git a/Resources/Prototypes/Entities/Constructible/Furniture/bookshelf.yml b/Resources/Prototypes/Entities/Constructible/Furniture/bookshelf.yml
index 200d27930d..96916f483d 100644
--- a/Resources/Prototypes/Entities/Constructible/Furniture/bookshelf.yml
+++ b/Resources/Prototypes/Entities/Constructible/Furniture/bookshelf.yml
@@ -22,7 +22,10 @@
- type: Destructible
deadThreshold: 30
destroySound: /Audio/Effects/woodhit.ogg
- spawnOnDestroy: WoodPlank
+ spawnOnDestroy:
+ WoodPlank:
+ Min: 1
+ Max: 1
resistances: metallicResistances
- type: Occluder
sizeX: 32
diff --git a/Resources/Prototypes/Entities/Constructible/Furniture/storage.yml b/Resources/Prototypes/Entities/Constructible/Furniture/storage.yml
index d4f501326a..f679a733f4 100644
--- a/Resources/Prototypes/Entities/Constructible/Furniture/storage.yml
+++ b/Resources/Prototypes/Entities/Constructible/Furniture/storage.yml
@@ -21,7 +21,10 @@
- type: Destructible
deadThreshold: 30
destroySound: /Audio/Effects/metalbreak.ogg
- spawnOnDestroy: SteelSheet1
+ spawnOnDestroy:
+ SteelSheet1:
+ Min: 1
+ Max: 1
resistances: metallicResistances
- type: entity
@@ -47,5 +50,8 @@
- type: Destructible
deadThreshold: 30
destroySound: /Audio/Effects/metalbreak.ogg
- spawnOnDestroy: SteelSheet1
+ spawnOnDestroy:
+ SteelSheet1:
+ Min: 1
+ Max: 1
resistances: metallicResistances
diff --git a/Resources/Prototypes/Entities/Constructible/Furniture/tables.yml b/Resources/Prototypes/Entities/Constructible/Furniture/tables.yml
index 4d305dfb35..41e388ba4b 100644
--- a/Resources/Prototypes/Entities/Constructible/Furniture/tables.yml
+++ b/Resources/Prototypes/Entities/Constructible/Furniture/tables.yml
@@ -39,7 +39,10 @@
deadThreshold: 15
destroySound: /Audio/Effects/metalbreak.ogg
resistances: metallicResistances
- spawnOnDestroy: SteelSheet1
+ spawnOnDestroy:
+ SteelSheet1:
+ Min: 1
+ Max: 1
- type: entity
id: TableFrame
@@ -55,7 +58,10 @@
deadThreshold: 1
destroySound: /Audio/Effects/metalbreak.ogg
resistances: metallicResistances
- spawnOnDestroy: SteelSheet1
+ spawnOnDestroy:
+ SteelSheet1:
+ Min: 1
+ Max: 1
- type: entity
id: TableBar
@@ -71,7 +77,10 @@
deadThreshold: 1
destroySound: /Audio/Effects/metalbreak.ogg
resistances: metallicResistances
- spawnOnDestroy: SteelSheet1
+ spawnOnDestroy:
+ SteelSheet1:
+ Min: 1
+ Max: 1
- type: entity
id: TableMetal
@@ -87,7 +96,10 @@
deadThreshold: 15
destroySound: /Audio/Effects/metalbreak.ogg
resistances: metallicResistances
- spawnOnDestroy: SteelSheet1
+ spawnOnDestroy:
+ SteelSheet1:
+ Min: 1
+ Max: 1
- type: entity
id: TableR
@@ -103,7 +115,10 @@
deadThreshold: 75
destroySound: /Audio/Effects/metalbreak.ogg
resistances: metallicResistances
- spawnOnDestroy: SteelSheet1
+ spawnOnDestroy:
+ SteelSheet1:
+ Min: 1
+ Max: 1
- type: entity
id: TableGlass
@@ -117,8 +132,12 @@
sprite: Constructible/Structures/Tables/glass.rsi
- type: Destructible
deadThreshold: 5
- destroySound: /Audio/Effects/glassbreak2.ogg
+ destroySound: /Audio/Effects/glass_break2.ogg
resistances: metallicResistances
+ spawnOnDestroy:
+ ShardGlass:
+ Min: 1
+ Max: 1
- type: entity
id: TableGlassR
@@ -132,8 +151,12 @@
sprite: Constructible/Structures/Tables/r_glass.rsi
- type: Destructible
deadThreshold: 20
- destroySound: /Audio/Effects/glassbreak2.ogg
+ destroySound: /Audio/Effects/glass_break2.ogg
resistances: metallicResistances
+ spawnOnDestroy:
+ ShardGlass:
+ Min: 1
+ Max: 1
- type: entity
id: TableWood
@@ -149,7 +172,10 @@
deadThreshold: 15
destroySound: /Audio/Effects/woodhit.ogg
resistances: metallicResistances
- spawnOnDestroy: WoodPlank
+ spawnOnDestroy:
+ WoodPlank:
+ Min: 1
+ Max: 1
- type: entity
id: TableCarpet
@@ -165,7 +191,10 @@
deadThreshold: 15
destroySound: /Audio/Effects/woodhit.ogg
resistances: metallicResistances
- spawnOnDestroy: WoodPlank
+ spawnOnDestroy:
+ WoodPlank:
+ Min: 1
+ Max: 1
- type: entity
id: TableStone
diff --git a/Resources/Prototypes/Entities/Constructible/Power/AME/ame_structure.yml b/Resources/Prototypes/Entities/Constructible/Power/AME/ame_structure.yml
index 9dab23d992..7cfc07bfc0 100644
--- a/Resources/Prototypes/Entities/Constructible/Power/AME/ame_structure.yml
+++ b/Resources/Prototypes/Entities/Constructible/Power/AME/ame_structure.yml
@@ -24,7 +24,10 @@
- type: Destructible
maxHP: 500
resistances: metallicResistances
- spawnOnDestroy: AMEPart
+ spawnOnDestroy:
+ AMEPart:
+ Min: 1
+ Max: 1
- type: SnapGrid
offset: Center
- type: Airtight
diff --git a/Resources/Prototypes/Entities/Constructible/Power/wires.yml b/Resources/Prototypes/Entities/Constructible/Power/wires.yml
index 4e3baf5e3e..6f4bb120aa 100644
--- a/Resources/Prototypes/Entities/Constructible/Power/wires.yml
+++ b/Resources/Prototypes/Entities/Constructible/Power/wires.yml
@@ -46,7 +46,10 @@
wireType: HighVoltage
- type: Destructible
resistances: metallicResistances
- spawnOnDestroy: HVWireStack1
+ spawnOnDestroy:
+ HVWireStack1:
+ Min: 1
+ Max: 1
- type: entity
parent: WireBase
@@ -73,7 +76,10 @@
wireType: MediumVoltage
- type: Destructible
resistances: metallicResistances
- spawnOnDestroy: MVWireStack1
+ spawnOnDestroy:
+ MVWireStack1:
+ Min: 1
+ Max: 1
- type: entity
parent: WireBase
@@ -102,4 +108,7 @@
wireType: Apc
- type: Destructible
resistances: metallicResistances
- spawnOnDestroy: ApcExtensionCableStack1
+ spawnOnDestroy:
+ ApcExtensionCableStack1:
+ Min: 1
+ Max: 1
diff --git a/Resources/Prototypes/Entities/Constructible/Specific/chem_master.yml b/Resources/Prototypes/Entities/Constructible/Specific/chem_master.yml
index 01feb634e1..6687a663a3 100644
--- a/Resources/Prototypes/Entities/Constructible/Specific/chem_master.yml
+++ b/Resources/Prototypes/Entities/Constructible/Specific/chem_master.yml
@@ -32,7 +32,10 @@
offset: Center
- type: Destructible
deadThreshold: 50
- spawnOnDestroy: chem_master_broken
+ spawnOnDestroy:
+ chem_master_broken:
+ Min: 1
+ Max: 1
- type: UserInterface
interfaces:
- key: enum.ChemMasterUiKey.Key
@@ -71,7 +74,10 @@
offset: Center
- type: Destructible
deadThreshold: 25
- spawnOnDestroy: SteelSheet1
+ spawnOnDestroy:
+ SteelSheet1:
+ Min: 1
+ Max: 1
- type: UserInterface
interfaces:
- key: enum.ChemMasterUiKey.Key
diff --git a/Resources/Prototypes/Entities/Constructible/Walls/girder.yml b/Resources/Prototypes/Entities/Constructible/Walls/girder.yml
index 3c54cb1186..1afdeca842 100644
--- a/Resources/Prototypes/Entities/Constructible/Walls/girder.yml
+++ b/Resources/Prototypes/Entities/Constructible/Walls/girder.yml
@@ -31,7 +31,10 @@
- type: Destructible
deadThreshold: 50
resistances: metallicResistances
- spawnOnDestroy: SteelSheet1
+ spawnOnDestroy:
+ SteelSheet1:
+ Min: 1
+ Max: 1
- type: SnapGrid
offset: Edge
placement:
diff --git a/Resources/Prototypes/Entities/Constructible/Walls/walls.yml b/Resources/Prototypes/Entities/Constructible/Walls/walls.yml
index 11ff98a271..56772e4b08 100644
--- a/Resources/Prototypes/Entities/Constructible/Walls/walls.yml
+++ b/Resources/Prototypes/Entities/Constructible/Walls/walls.yml
@@ -46,7 +46,10 @@
sprite: Constructible/Structures/Walls/brick.rsi
- type: Destructible
deadThreshold: 300
- spawnOnDestroy: Girder
+ spawnOnDestroy:
+ Girder:
+ Min: 1
+ Max: 1
resistances: metallicResistances
- type: IconSmooth
key: walls
@@ -63,7 +66,10 @@
sprite: Constructible/Structures/Walls/clock.rsi
- type: Destructible
deadThreshold: 300
- spawnOnDestroy: Girder
+ spawnOnDestroy:
+ Girder:
+ Min: 1
+ Max: 1
resistances: metallicResistances
- type: IconSmooth
key: walls
@@ -80,7 +86,10 @@
sprite: Constructible/Structures/Walls/clown.rsi
- type: Destructible
deadThreshold: 300
- spawnOnDestroy: Girder
+ spawnOnDestroy:
+ Girder:
+ Min: 1
+ Max: 1
resistances: metallicResistances
- type: IconSmooth
key: walls
@@ -98,7 +107,10 @@
sprite: Constructible/Structures/Walls/cult.rsi
- type: Destructible
deadThreshold: 300
- spawnOnDestroy: Girder
+ spawnOnDestroy:
+ Girder:
+ Min: 1
+ Max: 1
resistances: metallicResistances
- type: IconSmooth
key: walls
@@ -115,7 +127,10 @@
sprite: Constructible/Structures/Walls/debug.rsi
- type: Destructible
deadThreshold: 300
- spawnOnDestroy: Girder
+ spawnOnDestroy:
+ Girder:
+ Min: 1
+ Max: 1
resistances: metallicResistances
- type: IconSmooth
key: walls
@@ -132,7 +147,10 @@
sprite: Constructible/Structures/Walls/diamond.rsi
- type: Destructible
deadThreshold: 300
- spawnOnDestroy: Girder
+ spawnOnDestroy:
+ Girder:
+ Min: 1
+ Max: 1
resistances: metallicResistances
- type: IconSmooth
key: walls
@@ -150,7 +168,10 @@
sprite: Constructible/Structures/Walls/gold.rsi
- type: Destructible
deadThreshold: 300
- spawnOnDestroy: Girder
+ spawnOnDestroy:
+ Girder:
+ Min: 1
+ Max: 1
resistances: metallicResistances
- type: IconSmooth
key: walls
@@ -167,7 +188,10 @@
sprite: Constructible/Structures/Walls/ice.rsi
- type: Destructible
deadThreshold: 300
- spawnOnDestroy: Girder
+ spawnOnDestroy:
+ Girder:
+ Min: 1
+ Max: 1
resistances: metallicResistances
- type: IconSmooth
key: walls
@@ -184,7 +208,10 @@
sprite: Constructible/Structures/Walls/metal.rsi
- type: Destructible
deadThreshold: 300
- spawnOnDestroy: Girder
+ spawnOnDestroy:
+ Girder:
+ Min: 1
+ Max: 1
resistances: metallicResistances
- type: IconSmooth
key: walls
@@ -201,7 +228,10 @@
sprite: Constructible/Structures/Walls/plasma.rsi
- type: Destructible
deadThreshold: 300
- spawnOnDestroy: Girder
+ spawnOnDestroy:
+ Girder:
+ Min: 1
+ Max: 1
resistances: metallicResistances
- type: IconSmooth
key: walls
@@ -218,7 +248,10 @@
sprite: Constructible/Structures/Walls/plastic.rsi
- type: Destructible
deadThreshold: 300
- spawnOnDestroy: Girder
+ spawnOnDestroy:
+ Girder:
+ Min: 1
+ Max: 1
resistances: metallicResistances
- type: IconSmooth
key: walls
@@ -262,7 +295,10 @@
sprite: Constructible/Structures/Walls/riveted.rsi
- type: Destructible
deadThreshold: 1000
- spawnOnDestroy: Girder
+ spawnOnDestroy:
+ Girder:
+ Min: 1
+ Max: 1
resistances: metallicResistances
- type: IconSmooth
key: walls
@@ -279,7 +315,10 @@
sprite: Constructible/Structures/Walls/sandstone.rsi
- type: Destructible
deadThreshold: 300
- spawnOnDestroy: Girder
+ spawnOnDestroy:
+ Girder:
+ Min: 1
+ Max: 1
resistances: metallicResistances
- type: IconSmooth
key: walls
@@ -296,7 +335,10 @@
sprite: Constructible/Structures/Walls/silver.rsi
- type: Destructible
deadThreshold: 300
- spawnOnDestroy: Girder
+ spawnOnDestroy:
+ Girder:
+ Min: 1
+ Max: 1
resistances: metallicResistances
- type: IconSmooth
key: walls
@@ -335,7 +377,10 @@
sprite: Constructible/Structures/Walls/uranium.rsi
- type: Destructible
deadThreshold: 300
- spawnOnDestroy: Girder
+ spawnOnDestroy:
+ Girder:
+ Min: 1
+ Max: 1
resistances: metallicResistances
- type: IconSmooth
key: walls
@@ -352,7 +397,10 @@
sprite: Constructible/Structures/Walls/wood.rsi
- type: Destructible
deadThreshold: 300
- spawnOnDestroy: Girder
+ spawnOnDestroy:
+ Girder:
+ Min: 1
+ Max: 1
resistances: metallicResistances
- type: IconSmooth
key: walls
diff --git a/Resources/Prototypes/Entities/Constructible/Walls/windows.yml b/Resources/Prototypes/Entities/Constructible/Walls/windows.yml
index 0374485367..97e6310a7c 100644
--- a/Resources/Prototypes/Entities/Constructible/Walls/windows.yml
+++ b/Resources/Prototypes/Entities/Constructible/Walls/windows.yml
@@ -29,6 +29,11 @@
- type: Destructible
deadThreshold: 15
resistances: metallicResistances
+ destroySoundCollection: WindowBreak
+ spawnOnDestroy:
+ ShardGlass:
+ Min: 1
+ Max: 3
- type: SnapGrid
offset: Center
- type: Airtight
@@ -37,6 +42,9 @@
- type: Construction
graph: window
node: window
+ - type: Appearance
+ visuals:
+ - type: WindowVisualizer
- type: entity
id: ReinforcedWindow
@@ -75,3 +83,10 @@
- type: Construction
graph: window
node: phoronWindow
+
+- type: soundCollection
+ id: WindowBreak
+ files:
+ - /Audio/Effects/glass_break1.ogg
+ - /Audio/Effects/glass_break2.ogg
+ - /Audio/Effects/glass_break3.ogg
diff --git a/Resources/Prototypes/Entities/Objects/Misc/fluff_lights.yml b/Resources/Prototypes/Entities/Objects/Misc/fluff_lights.yml
index d51a39690b..52fb36990e 100644
--- a/Resources/Prototypes/Entities/Objects/Misc/fluff_lights.yml
+++ b/Resources/Prototypes/Entities/Objects/Misc/fluff_lights.yml
@@ -126,8 +126,11 @@
- type: Anchorable
- type: Destructible
deadThreshold: 10
- spawnOnDestroy: FloodlightBroken
- destroySound: /Audio/Effects/glassbreak1.ogg
+ spawnOnDestroy:
+ FloodlightBroken:
+ Min: 1
+ Max: 1
+ destroySound: /Audio/Effects/glass_break1.ogg
resistances: metallicResistances
- type: Appearance
visuals:
@@ -145,7 +148,10 @@
- type: Anchorable
- type: Destructible
deadThreshold: 20
- spawnOnDestroy: SteelSheet1
+ spawnOnDestroy:
+ SteelSheet1:
+ Min: 1
+ Max: 1
destroySound: /Audio/Effects/metalbreak.ogg
resistances: metallicResistances
- type: Physics
diff --git a/Resources/Prototypes/Entities/Objects/shards.yml b/Resources/Prototypes/Entities/Objects/shards.yml
new file mode 100644
index 0000000000..0807101774
--- /dev/null
+++ b/Resources/Prototypes/Entities/Objects/shards.yml
@@ -0,0 +1,53 @@
+- type: entity
+ id: ShardBase
+ name: shard
+ description: It's a shard of some unknown material.
+ parent: BaseItem
+ abstract: true
+ components:
+ - type: Sprite
+ sprite: Objects/Materials/Shards/shard.rsi
+ state: shard1
+ - type: RandomSpriteState
+ spriteStates:
+ - shard1
+ - shard2
+ - shard3
+ - type: ItemCooldown
+ - type: MeleeWeapon
+ damageType: Slash
+ - type: Item
+ sprite: Objects/Materials/Shards/shard.rsi
+
+- type: entity
+ id: ShardGlass
+ name: glass shard
+ description: A small piece of glass. It looks sharp, you wouldn't want to step on it barefoot.
+ parent: ShardBase
+ components:
+ - type: Sprite
+ color: "#bbeeff"
+ - type: Item
+ color: "#bbeeff"
+
+- type: entity
+ id: ShardGlassReinforced
+ name: reinforced glass shard
+ description: A small piece of reinforced glass. It looks sharp, you wouldn't want to step on it barefoot.
+ parent: ShardBase
+ components:
+ - type: Sprite
+ color: "#96cdef"
+ - type: Item
+ color: "#96cdef"
+
+- type: entity
+ id: ShardGlassPhoron
+ name: phoron glass shard
+ description: A small piece of phoron glass. It looks sharp, you wouldn't want to step on it barefoot.
+ parent: ShardBase
+ components:
+ - type: Sprite
+ color: "#f3b489"
+ - type: Item
+ color: "#f3b489"
diff --git a/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/0_1.png b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/0_1.png
new file mode 100644
index 0000000000..70f7702f1e
Binary files /dev/null and b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/0_1.png differ
diff --git a/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/0_2.png b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/0_2.png
new file mode 100644
index 0000000000..eb948341bd
Binary files /dev/null and b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/0_2.png differ
diff --git a/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/0_3.png b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/0_3.png
new file mode 100644
index 0000000000..6308ed96a8
Binary files /dev/null and b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/0_3.png differ
diff --git a/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/0_4.png b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/0_4.png
new file mode 100644
index 0000000000..347c7a94ae
Binary files /dev/null and b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/0_4.png differ
diff --git a/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/0_5.png b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/0_5.png
new file mode 100644
index 0000000000..628b156132
Binary files /dev/null and b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/0_5.png differ
diff --git a/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/1_1.png b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/1_1.png
new file mode 100644
index 0000000000..2c6ab38760
Binary files /dev/null and b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/1_1.png differ
diff --git a/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/1_2.png b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/1_2.png
new file mode 100644
index 0000000000..4d2acc510b
Binary files /dev/null and b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/1_2.png differ
diff --git a/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/1_3.png b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/1_3.png
new file mode 100644
index 0000000000..9fc9978d84
Binary files /dev/null and b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/1_3.png differ
diff --git a/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/1_4.png b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/1_4.png
new file mode 100644
index 0000000000..44a8a680d4
Binary files /dev/null and b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/1_4.png differ
diff --git a/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/1_5.png b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/1_5.png
new file mode 100644
index 0000000000..8ce309da10
Binary files /dev/null and b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/1_5.png differ
diff --git a/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/2_1.png b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/2_1.png
new file mode 100644
index 0000000000..70f7702f1e
Binary files /dev/null and b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/2_1.png differ
diff --git a/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/2_2.png b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/2_2.png
new file mode 100644
index 0000000000..eb948341bd
Binary files /dev/null and b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/2_2.png differ
diff --git a/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/2_3.png b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/2_3.png
new file mode 100644
index 0000000000..6308ed96a8
Binary files /dev/null and b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/2_3.png differ
diff --git a/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/2_4.png b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/2_4.png
new file mode 100644
index 0000000000..347c7a94ae
Binary files /dev/null and b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/2_4.png differ
diff --git a/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/2_5.png b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/2_5.png
new file mode 100644
index 0000000000..628b156132
Binary files /dev/null and b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/2_5.png differ
diff --git a/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/3_1.png b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/3_1.png
new file mode 100644
index 0000000000..2c6ab38760
Binary files /dev/null and b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/3_1.png differ
diff --git a/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/3_2.png b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/3_2.png
new file mode 100644
index 0000000000..4d2acc510b
Binary files /dev/null and b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/3_2.png differ
diff --git a/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/3_3.png b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/3_3.png
new file mode 100644
index 0000000000..9fc9978d84
Binary files /dev/null and b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/3_3.png differ
diff --git a/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/3_4.png b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/3_4.png
new file mode 100644
index 0000000000..44a8a680d4
Binary files /dev/null and b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/3_4.png differ
diff --git a/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/3_5.png b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/3_5.png
new file mode 100644
index 0000000000..8ce309da10
Binary files /dev/null and b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/3_5.png differ
diff --git a/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/4_1.png b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/4_1.png
new file mode 100644
index 0000000000..a678b5f0a9
Binary files /dev/null and b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/4_1.png differ
diff --git a/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/4_2.png b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/4_2.png
new file mode 100644
index 0000000000..dacceac27b
Binary files /dev/null and b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/4_2.png differ
diff --git a/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/4_3.png b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/4_3.png
new file mode 100644
index 0000000000..38c3949aa0
Binary files /dev/null and b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/4_3.png differ
diff --git a/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/4_4.png b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/4_4.png
new file mode 100644
index 0000000000..98cd4234eb
Binary files /dev/null and b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/4_4.png differ
diff --git a/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/4_5.png b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/4_5.png
new file mode 100644
index 0000000000..b1c9a90c1c
Binary files /dev/null and b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/4_5.png differ
diff --git a/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/5_1.png b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/5_1.png
new file mode 100644
index 0000000000..b89cfc2f20
Binary files /dev/null and b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/5_1.png differ
diff --git a/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/5_2.png b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/5_2.png
new file mode 100644
index 0000000000..5faa4761b2
Binary files /dev/null and b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/5_2.png differ
diff --git a/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/5_3.png b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/5_3.png
new file mode 100644
index 0000000000..6b74db91cd
Binary files /dev/null and b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/5_3.png differ
diff --git a/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/5_4.png b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/5_4.png
new file mode 100644
index 0000000000..91f5cd962a
Binary files /dev/null and b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/5_4.png differ
diff --git a/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/5_5.png b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/5_5.png
new file mode 100644
index 0000000000..fd8e09e2a9
Binary files /dev/null and b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/5_5.png differ
diff --git a/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/6_1.png b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/6_1.png
new file mode 100644
index 0000000000..a678b5f0a9
Binary files /dev/null and b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/6_1.png differ
diff --git a/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/6_2.png b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/6_2.png
new file mode 100644
index 0000000000..dacceac27b
Binary files /dev/null and b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/6_2.png differ
diff --git a/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/6_3.png b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/6_3.png
new file mode 100644
index 0000000000..38c3949aa0
Binary files /dev/null and b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/6_3.png differ
diff --git a/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/6_4.png b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/6_4.png
new file mode 100644
index 0000000000..98cd4234eb
Binary files /dev/null and b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/6_4.png differ
diff --git a/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/6_5.png b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/6_5.png
new file mode 100644
index 0000000000..b1c9a90c1c
Binary files /dev/null and b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/6_5.png differ
diff --git a/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/7_1.png b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/7_1.png
new file mode 100644
index 0000000000..fdb4f85d92
Binary files /dev/null and b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/7_1.png differ
diff --git a/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/7_2.png b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/7_2.png
new file mode 100644
index 0000000000..ee9e116047
Binary files /dev/null and b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/7_2.png differ
diff --git a/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/7_3.png b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/7_3.png
new file mode 100644
index 0000000000..3ccbba05e3
Binary files /dev/null and b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/7_3.png differ
diff --git a/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/7_4.png b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/7_4.png
new file mode 100644
index 0000000000..d10caaacf4
Binary files /dev/null and b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/7_4.png differ
diff --git a/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/7_5.png b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/7_5.png
new file mode 100644
index 0000000000..23bbc0dce7
Binary files /dev/null and b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/7_5.png differ
diff --git a/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/meta.json b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/meta.json
new file mode 100644
index 0000000000..397ef62ebd
--- /dev/null
+++ b/Resources/Textures/Constructible/Structures/Windows/cracks.rsi/meta.json
@@ -0,0 +1,731 @@
+{
+ "version": 1,
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "license": "CC-BY-SA-3.0",
+ "copyright": "brndd",
+ "states": [
+ {
+ "name": "0_1",
+ "directions": 4,
+ "delays": [
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "0_2",
+ "directions": 4,
+ "delays": [
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "0_3",
+ "directions": 4,
+ "delays": [
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "0_4",
+ "directions": 4,
+ "delays": [
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "0_5",
+ "directions": 4,
+ "delays": [
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "1_1",
+ "directions": 4,
+ "delays": [
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "1_2",
+ "directions": 4,
+ "delays": [
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "1_3",
+ "directions": 4,
+ "delays": [
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "1_4",
+ "directions": 4,
+ "delays": [
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "1_5",
+ "directions": 4,
+ "delays": [
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "2_1",
+ "directions": 4,
+ "delays": [
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "2_2",
+ "directions": 4,
+ "delays": [
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "2_3",
+ "directions": 4,
+ "delays": [
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "2_4",
+ "directions": 4,
+ "delays": [
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "2_5",
+ "directions": 4,
+ "delays": [
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "3_1",
+ "directions": 4,
+ "delays": [
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "3_2",
+ "directions": 4,
+ "delays": [
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "3_3",
+ "directions": 4,
+ "delays": [
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "3_4",
+ "directions": 4,
+ "delays": [
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "3_5",
+ "directions": 4,
+ "delays": [
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "4_1",
+ "directions": 4,
+ "delays": [
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "4_2",
+ "directions": 4,
+ "delays": [
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "4_3",
+ "directions": 4,
+ "delays": [
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "4_4",
+ "directions": 4,
+ "delays": [
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "4_5",
+ "directions": 4,
+ "delays": [
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "5_1",
+ "directions": 4,
+ "delays": [
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "5_2",
+ "directions": 4,
+ "delays": [
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "5_3",
+ "directions": 4,
+ "delays": [
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "5_4",
+ "directions": 4,
+ "delays": [
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "5_5",
+ "directions": 4,
+ "delays": [
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "6_1",
+ "directions": 4,
+ "delays": [
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "6_2",
+ "directions": 4,
+ "delays": [
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "6_3",
+ "directions": 4,
+ "delays": [
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "6_4",
+ "directions": 4,
+ "delays": [
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "6_5",
+ "directions": 4,
+ "delays": [
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "7_1",
+ "directions": 4,
+ "delays": [
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "7_2",
+ "directions": 4,
+ "delays": [
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "7_3",
+ "directions": 4,
+ "delays": [
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "7_4",
+ "directions": 4,
+ "delays": [
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "7_5",
+ "directions": 4,
+ "delays": [
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ]
+ ]
+ }
+ ]
+}
diff --git a/Resources/Textures/Objects/Materials/Shards/piece.rsi/meta.json b/Resources/Textures/Objects/Materials/Shards/piece.rsi/meta.json
new file mode 100644
index 0000000000..9ef15adc64
--- /dev/null
+++ b/Resources/Textures/Objects/Materials/Shards/piece.rsi/meta.json
@@ -0,0 +1,38 @@
+{
+ "version": 1,
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "license": "CC-BY-SA-3.0",
+ "copyright": "https://github.com/discordia-space/CEV-Eris/commit/b5b4edd4e46efc2ee2d3c1ce5aff82d80ddc461e",
+ "states": [
+ {
+ "name": "piecelarge",
+ "directions": 1,
+ "delays": [
+ [
+ 1.0
+ ]
+ ]
+ },
+ {
+ "name": "piecemedium",
+ "directions": 1,
+ "delays": [
+ [
+ 1.0
+ ]
+ ]
+ },
+ {
+ "name": "piecesmall",
+ "directions": 1,
+ "delays": [
+ [
+ 1.0
+ ]
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Resources/Textures/Objects/Materials/Shards/piece.rsi/piecelarge.png b/Resources/Textures/Objects/Materials/Shards/piece.rsi/piecelarge.png
new file mode 100644
index 0000000000..74950bdabd
Binary files /dev/null and b/Resources/Textures/Objects/Materials/Shards/piece.rsi/piecelarge.png differ
diff --git a/Resources/Textures/Objects/Materials/Shards/piece.rsi/piecemedium.png b/Resources/Textures/Objects/Materials/Shards/piece.rsi/piecemedium.png
new file mode 100644
index 0000000000..9d20740776
Binary files /dev/null and b/Resources/Textures/Objects/Materials/Shards/piece.rsi/piecemedium.png differ
diff --git a/Resources/Textures/Objects/Materials/Shards/piece.rsi/piecesmall.png b/Resources/Textures/Objects/Materials/Shards/piece.rsi/piecesmall.png
new file mode 100644
index 0000000000..d206eca823
Binary files /dev/null and b/Resources/Textures/Objects/Materials/Shards/piece.rsi/piecesmall.png differ
diff --git a/Resources/Textures/Objects/Materials/Shards/shard.rsi/inhand-left.png b/Resources/Textures/Objects/Materials/Shards/shard.rsi/inhand-left.png
new file mode 100644
index 0000000000..7a58c53e47
Binary files /dev/null and b/Resources/Textures/Objects/Materials/Shards/shard.rsi/inhand-left.png differ
diff --git a/Resources/Textures/Objects/Materials/Shards/shard.rsi/inhand-right.png b/Resources/Textures/Objects/Materials/Shards/shard.rsi/inhand-right.png
new file mode 100644
index 0000000000..028c6e8cce
Binary files /dev/null and b/Resources/Textures/Objects/Materials/Shards/shard.rsi/inhand-right.png differ
diff --git a/Resources/Textures/Objects/Materials/Shards/shard.rsi/meta.json b/Resources/Textures/Objects/Materials/Shards/shard.rsi/meta.json
new file mode 100644
index 0000000000..117b0d53ca
--- /dev/null
+++ b/Resources/Textures/Objects/Materials/Shards/shard.rsi/meta.json
@@ -0,0 +1,74 @@
+{
+ "version": 1,
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "license": "CC-BY-SA-3.0",
+ "copyright": "https://github.com/discordia-space/CEV-Eris/commit/b5b4edd4e46efc2ee2d3c1ce5aff82d80ddc461e",
+ "states": [
+ {
+ "name": "inhand-left",
+ "directions": 4,
+ "delays": [
+ [
+ 1.0
+ ],
+ [
+ 1.0
+ ],
+ [
+ 1.0
+ ],
+ [
+ 1.0
+ ]
+ ]
+ },
+ {
+ "name": "inhand-right",
+ "directions": 4,
+ "delays": [
+ [
+ 1.0
+ ],
+ [
+ 1.0
+ ],
+ [
+ 1.0
+ ],
+ [
+ 1.0
+ ]
+ ]
+ },
+ {
+ "name": "shard3",
+ "directions": 1,
+ "delays": [
+ [
+ 1.0
+ ]
+ ]
+ },
+ {
+ "name": "shard2",
+ "directions": 1,
+ "delays": [
+ [
+ 1.0
+ ]
+ ]
+ },
+ {
+ "name": "shard1",
+ "directions": 1,
+ "delays": [
+ [
+ 1.0
+ ]
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Resources/Textures/Objects/Materials/Shards/shard.rsi/shard1.png b/Resources/Textures/Objects/Materials/Shards/shard.rsi/shard1.png
new file mode 100644
index 0000000000..9970675e67
Binary files /dev/null and b/Resources/Textures/Objects/Materials/Shards/shard.rsi/shard1.png differ
diff --git a/Resources/Textures/Objects/Materials/Shards/shard.rsi/shard2.png b/Resources/Textures/Objects/Materials/Shards/shard.rsi/shard2.png
new file mode 100644
index 0000000000..c01b48e9e3
Binary files /dev/null and b/Resources/Textures/Objects/Materials/Shards/shard.rsi/shard2.png differ
diff --git a/Resources/Textures/Objects/Materials/Shards/shard.rsi/shard3.png b/Resources/Textures/Objects/Materials/Shards/shard.rsi/shard3.png
new file mode 100644
index 0000000000..2c0a42c607
Binary files /dev/null and b/Resources/Textures/Objects/Materials/Shards/shard.rsi/shard3.png differ
diff --git a/Resources/Textures/Objects/Materials/Shards/shrapnel.rsi/meta.json b/Resources/Textures/Objects/Materials/Shards/shrapnel.rsi/meta.json
new file mode 100644
index 0000000000..d585dca469
--- /dev/null
+++ b/Resources/Textures/Objects/Materials/Shards/shrapnel.rsi/meta.json
@@ -0,0 +1,38 @@
+{
+ "version": 1,
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "license": "CC-BY-SA-3.0",
+ "copyright": "https://github.com/discordia-space/CEV-Eris/commit/b5b4edd4e46efc2ee2d3c1ce5aff82d80ddc461e",
+ "states": [
+ {
+ "name": "shrapnellarge",
+ "directions": 1,
+ "delays": [
+ [
+ 1.0
+ ]
+ ]
+ },
+ {
+ "name": "shrapnelmedium",
+ "directions": 1,
+ "delays": [
+ [
+ 1.0
+ ]
+ ]
+ },
+ {
+ "name": "shrapnelsmall",
+ "directions": 1,
+ "delays": [
+ [
+ 1.0
+ ]
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Resources/Textures/Objects/Materials/Shards/shrapnel.rsi/shrapnellarge.png b/Resources/Textures/Objects/Materials/Shards/shrapnel.rsi/shrapnellarge.png
new file mode 100644
index 0000000000..ce064b642f
Binary files /dev/null and b/Resources/Textures/Objects/Materials/Shards/shrapnel.rsi/shrapnellarge.png differ
diff --git a/Resources/Textures/Objects/Materials/Shards/shrapnel.rsi/shrapnelmedium.png b/Resources/Textures/Objects/Materials/Shards/shrapnel.rsi/shrapnelmedium.png
new file mode 100644
index 0000000000..156c3ad3db
Binary files /dev/null and b/Resources/Textures/Objects/Materials/Shards/shrapnel.rsi/shrapnelmedium.png differ
diff --git a/Resources/Textures/Objects/Materials/Shards/shrapnel.rsi/shrapnelsmall.png b/Resources/Textures/Objects/Materials/Shards/shrapnel.rsi/shrapnelsmall.png
new file mode 100644
index 0000000000..ad9244f88f
Binary files /dev/null and b/Resources/Textures/Objects/Materials/Shards/shrapnel.rsi/shrapnelsmall.png differ
diff --git a/Resources/Textures/Objects/Materials/Shards/splinters.rsi/meta.json b/Resources/Textures/Objects/Materials/Shards/splinters.rsi/meta.json
new file mode 100644
index 0000000000..c81a36f2cb
--- /dev/null
+++ b/Resources/Textures/Objects/Materials/Shards/splinters.rsi/meta.json
@@ -0,0 +1,38 @@
+{
+ "version": 1,
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "license": "CC-BY-SA-3.0",
+ "copyright": "https://github.com/discordia-space/CEV-Eris/commit/b5b4edd4e46efc2ee2d3c1ce5aff82d80ddc461e",
+ "states": [
+ {
+ "name": "splinterslarge",
+ "directions": 1,
+ "delays": [
+ [
+ 1.0
+ ]
+ ]
+ },
+ {
+ "name": "splintersmedium",
+ "directions": 1,
+ "delays": [
+ [
+ 1.0
+ ]
+ ]
+ },
+ {
+ "name": "splinterssmall",
+ "directions": 1,
+ "delays": [
+ [
+ 1.0
+ ]
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Resources/Textures/Objects/Materials/Shards/splinters.rsi/splinterslarge.png b/Resources/Textures/Objects/Materials/Shards/splinters.rsi/splinterslarge.png
new file mode 100644
index 0000000000..f58e4915d0
Binary files /dev/null and b/Resources/Textures/Objects/Materials/Shards/splinters.rsi/splinterslarge.png differ
diff --git a/Resources/Textures/Objects/Materials/Shards/splinters.rsi/splintersmedium.png b/Resources/Textures/Objects/Materials/Shards/splinters.rsi/splintersmedium.png
new file mode 100644
index 0000000000..bfb7cef071
Binary files /dev/null and b/Resources/Textures/Objects/Materials/Shards/splinters.rsi/splintersmedium.png differ
diff --git a/Resources/Textures/Objects/Materials/Shards/splinters.rsi/splinterssmall.png b/Resources/Textures/Objects/Materials/Shards/splinters.rsi/splinterssmall.png
new file mode 100644
index 0000000000..eed868a49f
Binary files /dev/null and b/Resources/Textures/Objects/Materials/Shards/splinters.rsi/splinterssmall.png differ
diff --git a/SpaceStation14.sln.DotSettings b/SpaceStation14.sln.DotSettings
index 25fb2bd643..77823baaed 100644
--- a/SpaceStation14.sln.DotSettings
+++ b/SpaceStation14.sln.DotSettings
@@ -83,6 +83,7 @@
True
True
True
+ True
True
True
True