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