Prettier window breaking (#2368)
* Put the damage in the windows * add crack overlays * Window cracking * glass related sounds * let's use a valid state * run optipng on these for posterity * Examine damage descriptions * add "Constructible" to dictionary * Downmix stereo effects to mono * breaking and knocking * Add shard etc. sprites * shard inhands * more sprite wrangling * Expand destructiblecomponent drop system + implement it for windows * Shard descriptions * Random sprite component * no nullbabby * Random destroysounds * random offset on destructible drops * fix fucked yaml * sound collections * random pitch for knocking * Localization * hascomponent * better spawnondestroy * missed one
@@ -1,4 +1,5 @@
|
|||||||
using Content.Client.GameObjects.EntitySystems;
|
using System.Diagnostics.CodeAnalysis;
|
||||||
|
using Content.Client.GameObjects.EntitySystems;
|
||||||
using Content.Shared.GameObjects.Components;
|
using Content.Shared.GameObjects.Components;
|
||||||
using Robust.Client.GameObjects;
|
using Robust.Client.GameObjects;
|
||||||
using Robust.Client.Interfaces.GameObjects.Components;
|
using Robust.Client.Interfaces.GameObjects.Components;
|
||||||
@@ -34,14 +35,33 @@ namespace Content.Client.GameObjects.Components
|
|||||||
Owner.EntityManager.EventBus.RaiseEvent(EventSource.Local, new WindowSmoothDirtyEvent(Owner));
|
Owner.EntityManager.EventBus.RaiseEvent(EventSource.Local, new WindowSmoothDirtyEvent(Owner));
|
||||||
|
|
||||||
var state0 = $"{_stateBase}0";
|
var state0 = $"{_stateBase}0";
|
||||||
|
const string cracksRSIPath = "/Textures/Constructible/Structures/Windows/cracks.rsi";
|
||||||
_sprite.LayerMapSet(CornerLayers.SE, _sprite.AddLayerState(state0));
|
_sprite.LayerMapSet(CornerLayers.SE, _sprite.AddLayerState(state0));
|
||||||
_sprite.LayerSetDirOffset(CornerLayers.SE, SpriteComponent.DirectionOffset.None);
|
_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.LayerMapSet(CornerLayers.NE, _sprite.AddLayerState(state0));
|
||||||
_sprite.LayerSetDirOffset(CornerLayers.NE, SpriteComponent.DirectionOffset.CounterClockwise);
|
_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.LayerMapSet(CornerLayers.NW, _sprite.AddLayerState(state0));
|
||||||
_sprite.LayerSetDirOffset(CornerLayers.NW, SpriteComponent.DirectionOffset.Flip);
|
_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.LayerMapSet(CornerLayers.SW, _sprite.AddLayerState(state0));
|
||||||
_sprite.LayerSetDirOffset(CornerLayers.SW, SpriteComponent.DirectionOffset.Clockwise);
|
_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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
@@ -91,4 +111,13 @@ namespace Content.Client.GameObjects.Components
|
|||||||
serializer.DataField(ref _stateBase, "base", null);
|
serializer.DataField(ref _stateBase, "base", null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[SuppressMessage("ReSharper", "InconsistentNaming")]
|
||||||
|
public enum WindowDamageLayers
|
||||||
|
{
|
||||||
|
DamageSE,
|
||||||
|
DamageNE,
|
||||||
|
DamageNW,
|
||||||
|
DamageSW
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
60
Content.Client/GameObjects/Components/WindowVisualizer.cs
Normal file
@@ -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<ISpriteComponent>();
|
||||||
|
var snapGrid = component.Owner.GetComponent<SnapGridComponent>();
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using Content.Shared.Audio;
|
||||||
using Content.Shared.GameObjects.Components.Damage;
|
using Content.Shared.GameObjects.Components.Damage;
|
||||||
using Content.Shared.GameObjects.EntitySystems;
|
using Content.Shared.GameObjects.EntitySystems;
|
||||||
using Robust.Server.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.GameObjects;
|
||||||
using Robust.Shared.Interfaces.Random;
|
using Robust.Shared.Interfaces.Random;
|
||||||
using Robust.Shared.IoC;
|
using Robust.Shared.IoC;
|
||||||
|
using Robust.Shared.Log;
|
||||||
using Robust.Shared.Random;
|
using Robust.Shared.Random;
|
||||||
|
|
||||||
namespace Content.Server.GameObjects.Components.Damage
|
namespace Content.Server.GameObjects.Components.Damage
|
||||||
@@ -65,11 +67,6 @@ namespace Content.Server.GameObjects.Components.Damage
|
|||||||
protected override void DestructionBehavior()
|
protected override void DestructionBehavior()
|
||||||
{
|
{
|
||||||
_actSystem.HandleBreakage(Owner);
|
_actSystem.HandleBreakage(Owner);
|
||||||
if (!Owner.Deleted && DestroySound != string.Empty)
|
|
||||||
{
|
|
||||||
var pos = Owner.Transform.Coordinates;
|
|
||||||
EntitySystem.Get<AudioSystem>().PlayAtCoords(DestroySound, pos);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 Content.Shared.GameObjects.EntitySystems;
|
||||||
using Robust.Server.GameObjects.EntitySystems;
|
using Content.Shared.Utility;
|
||||||
using Robust.Shared.GameObjects;
|
using Robust.Shared.GameObjects;
|
||||||
using Robust.Shared.GameObjects.Systems;
|
|
||||||
using Robust.Shared.Interfaces.GameObjects;
|
using Robust.Shared.Interfaces.GameObjects;
|
||||||
|
using Robust.Shared.Interfaces.Random;
|
||||||
using Robust.Shared.IoC;
|
using Robust.Shared.IoC;
|
||||||
|
using Robust.Shared.Prototypes;
|
||||||
using Robust.Shared.Serialization;
|
using Robust.Shared.Serialization;
|
||||||
|
|
||||||
namespace Content.Server.GameObjects.Components.Damage
|
namespace Content.Server.GameObjects.Components.Damage
|
||||||
@@ -17,6 +20,8 @@ namespace Content.Server.GameObjects.Components.Damage
|
|||||||
public class DestructibleComponent : RuinableComponent, IDestroyAct
|
public class DestructibleComponent : RuinableComponent, IDestroyAct
|
||||||
{
|
{
|
||||||
[Dependency] private readonly IEntitySystemManager _entitySystemManager = default!;
|
[Dependency] private readonly IEntitySystemManager _entitySystemManager = default!;
|
||||||
|
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
|
||||||
|
[Dependency] private readonly IRobustRandom _random = default!;
|
||||||
|
|
||||||
protected ActSystem ActSystem;
|
protected ActSystem ActSystem;
|
||||||
|
|
||||||
@@ -24,22 +29,51 @@ namespace Content.Server.GameObjects.Components.Damage
|
|||||||
public override string Name => "Destructible";
|
public override string Name => "Destructible";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Entity spawned upon destruction.
|
/// Entities spawned on destruction plus the min and max amount spawned.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string SpawnOnDestroy { get; private set; }
|
public Dictionary<string, MinMax> SpawnOnDestroy { get; private set; }
|
||||||
|
|
||||||
void IDestroyAct.OnDestroy(DestructionEventArgs eventArgs)
|
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<StackComponent>(key))
|
||||||
|
{
|
||||||
|
var spawned = Owner.EntityManager.SpawnEntity(key, Owner.Transform.Coordinates);
|
||||||
|
var stack = spawned.GetComponent<StackComponent>();
|
||||||
|
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)
|
public override void ExposeData(ObjectSerializer serializer)
|
||||||
{
|
{
|
||||||
base.ExposeData(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()
|
public override void Initialize()
|
||||||
@@ -56,11 +90,13 @@ namespace Content.Server.GameObjects.Components.Damage
|
|||||||
var pos = Owner.Transform.Coordinates;
|
var pos = Owner.Transform.Coordinates;
|
||||||
ActSystem.HandleDestruction(Owner,
|
ActSystem.HandleDestruction(Owner,
|
||||||
true); //This will call IDestroyAct.OnDestroy on this component (and all other components on this entity)
|
true); //This will call IDestroyAct.OnDestroy on this component (and all other components on this entity)
|
||||||
if (DestroySound != string.Empty)
|
|
||||||
{
|
|
||||||
EntitySystem.Get<AudioSystem>().PlayAtCoords(DestroySound, pos);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public struct MinMax
|
||||||
|
{
|
||||||
|
public int Min;
|
||||||
|
public int Max;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,15 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using Content.Shared.Audio;
|
||||||
using Content.Shared.GameObjects.Components.Damage;
|
using Content.Shared.GameObjects.Components.Damage;
|
||||||
using Robust.Server.GameObjects.EntitySystems;
|
using Robust.Server.GameObjects.EntitySystems;
|
||||||
using Robust.Shared.GameObjects;
|
using Robust.Shared.GameObjects;
|
||||||
using Robust.Shared.GameObjects.Systems;
|
using Robust.Shared.GameObjects.Systems;
|
||||||
using Robust.Shared.Interfaces.GameObjects;
|
using Robust.Shared.Interfaces.GameObjects;
|
||||||
|
using Robust.Shared.Interfaces.Random;
|
||||||
|
using Robust.Shared.IoC;
|
||||||
using Robust.Shared.Serialization;
|
using Robust.Shared.Serialization;
|
||||||
using Robust.Shared.ViewVariables;
|
using Robust.Shared.ViewVariables;
|
||||||
|
using Logger = Robust.Shared.Log.Logger;
|
||||||
|
|
||||||
namespace Content.Server.GameObjects.Components.Damage
|
namespace Content.Server.GameObjects.Components.Damage
|
||||||
{
|
{
|
||||||
@@ -16,12 +20,19 @@ namespace Content.Server.GameObjects.Components.Damage
|
|||||||
[ComponentReference(typeof(IDamageableComponent))]
|
[ComponentReference(typeof(IDamageableComponent))]
|
||||||
public abstract class RuinableComponent : DamageableComponent
|
public abstract class RuinableComponent : DamageableComponent
|
||||||
{
|
{
|
||||||
|
[Dependency] private IRobustRandom _random = default!;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Sound played upon destruction.
|
/// Sound played upon destruction.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[ViewVariables]
|
[ViewVariables]
|
||||||
protected string DestroySound { get; private set; }
|
protected string DestroySound { get; private set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Used instead of <see cref="DestroySound"/> if specified.
|
||||||
|
/// </summary>
|
||||||
|
[ViewVariables]
|
||||||
|
protected string DestroySoundCollection { get; private set; }
|
||||||
|
|
||||||
public override List<DamageState> SupportedDamageStates =>
|
public override List<DamageState> SupportedDamageStates =>
|
||||||
new List<DamageState> {DamageState.Alive, DamageState.Dead};
|
new List<DamageState> {DamageState.Alive, DamageState.Dead};
|
||||||
|
|
||||||
@@ -44,6 +55,7 @@ namespace Content.Server.GameObjects.Components.Damage
|
|||||||
() => Thresholds.TryGetValue(DamageState.Dead, out var value) ? value : (int?) null);
|
() => Thresholds.TryGetValue(DamageState.Dead, out var value) ? value : (int?) null);
|
||||||
|
|
||||||
serializer.DataField(this, ruinable => ruinable.DestroySound, "destroySound", string.Empty);
|
serializer.DataField(this, ruinable => ruinable.DestroySound, "destroySound", string.Empty);
|
||||||
|
serializer.DataField(this, ruinable => ruinable.DestroySoundCollection, "destroySoundCollection", string.Empty);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void EnterState(DamageState state)
|
protected override void EnterState(DamageState state)
|
||||||
@@ -65,10 +77,24 @@ namespace Content.Server.GameObjects.Components.Damage
|
|||||||
{
|
{
|
||||||
CurrentState = DamageState.Dead;
|
CurrentState = DamageState.Dead;
|
||||||
|
|
||||||
if (!Owner.Deleted && DestroySound != string.Empty)
|
if (!Owner.Deleted)
|
||||||
{
|
{
|
||||||
var pos = Owner.Transform.Coordinates;
|
var pos = Owner.Transform.Coordinates;
|
||||||
EntitySystem.Get<AudioSystem>().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<AudioSystem>().PlayAtCoords(sound, pos, AudioHelpers.WithVariation(0.125f));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DestructionBehavior();
|
DestructionBehavior();
|
||||||
|
|||||||
@@ -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<string> _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));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
using Robust.Shared.GameObjects.Systems;
|
||||||
|
using Robust.Shared.Localization;
|
||||||
|
using Robust.Shared.Utility;
|
||||||
|
|
||||||
namespace Content.Server.GameObjects.Components
|
namespace Content.Server.GameObjects.Components
|
||||||
{
|
{
|
||||||
[RegisterComponent]
|
[RegisterComponent]
|
||||||
[ComponentReference(typeof(SharedWindowComponent))]
|
[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<AudioSystem>()
|
||||||
|
.PlayAtCoords("/Audio/Effects/glass_knock.ogg", eventArgs.Target.Transform.Coordinates, AudioHelpers.WithVariation(0.05f));
|
||||||
|
eventArgs.Target.PopupMessageEveryone(Loc.GetString("*knock knock*"));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
using Robust.Shared.GameObjects;
|
using System;
|
||||||
|
using Robust.Shared.GameObjects;
|
||||||
|
using Robust.Shared.Serialization;
|
||||||
|
|
||||||
namespace Content.Shared.GameObjects.Components
|
namespace Content.Shared.GameObjects.Components
|
||||||
{
|
{
|
||||||
@@ -6,4 +8,10 @@ namespace Content.Shared.GameObjects.Components
|
|||||||
{
|
{
|
||||||
public override string Name => "Window";
|
public override string Name => "Window";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Serializable, NetSerializable]
|
||||||
|
public enum WindowVisuals
|
||||||
|
{
|
||||||
|
Damage
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
Resources/Audio/Effects/glass_hit.ogg
Normal file
BIN
Resources/Audio/Effects/glass_knock.ogg
Normal file
BIN
Resources/Audio/Effects/glass_step.ogg
Normal file
@@ -22,7 +22,10 @@
|
|||||||
- type: Destructible
|
- type: Destructible
|
||||||
deadThreshold: 30
|
deadThreshold: 30
|
||||||
destroySound: /Audio/Effects/woodhit.ogg
|
destroySound: /Audio/Effects/woodhit.ogg
|
||||||
spawnOnDestroy: WoodPlank
|
spawnOnDestroy:
|
||||||
|
WoodPlank:
|
||||||
|
Min: 1
|
||||||
|
Max: 1
|
||||||
resistances: metallicResistances
|
resistances: metallicResistances
|
||||||
- type: Occluder
|
- type: Occluder
|
||||||
sizeX: 32
|
sizeX: 32
|
||||||
|
|||||||
@@ -21,7 +21,10 @@
|
|||||||
- type: Destructible
|
- type: Destructible
|
||||||
deadThreshold: 30
|
deadThreshold: 30
|
||||||
destroySound: /Audio/Effects/metalbreak.ogg
|
destroySound: /Audio/Effects/metalbreak.ogg
|
||||||
spawnOnDestroy: SteelSheet1
|
spawnOnDestroy:
|
||||||
|
SteelSheet1:
|
||||||
|
Min: 1
|
||||||
|
Max: 1
|
||||||
resistances: metallicResistances
|
resistances: metallicResistances
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
@@ -47,5 +50,8 @@
|
|||||||
- type: Destructible
|
- type: Destructible
|
||||||
deadThreshold: 30
|
deadThreshold: 30
|
||||||
destroySound: /Audio/Effects/metalbreak.ogg
|
destroySound: /Audio/Effects/metalbreak.ogg
|
||||||
spawnOnDestroy: SteelSheet1
|
spawnOnDestroy:
|
||||||
|
SteelSheet1:
|
||||||
|
Min: 1
|
||||||
|
Max: 1
|
||||||
resistances: metallicResistances
|
resistances: metallicResistances
|
||||||
|
|||||||
@@ -39,7 +39,10 @@
|
|||||||
deadThreshold: 15
|
deadThreshold: 15
|
||||||
destroySound: /Audio/Effects/metalbreak.ogg
|
destroySound: /Audio/Effects/metalbreak.ogg
|
||||||
resistances: metallicResistances
|
resistances: metallicResistances
|
||||||
spawnOnDestroy: SteelSheet1
|
spawnOnDestroy:
|
||||||
|
SteelSheet1:
|
||||||
|
Min: 1
|
||||||
|
Max: 1
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: TableFrame
|
id: TableFrame
|
||||||
@@ -55,7 +58,10 @@
|
|||||||
deadThreshold: 1
|
deadThreshold: 1
|
||||||
destroySound: /Audio/Effects/metalbreak.ogg
|
destroySound: /Audio/Effects/metalbreak.ogg
|
||||||
resistances: metallicResistances
|
resistances: metallicResistances
|
||||||
spawnOnDestroy: SteelSheet1
|
spawnOnDestroy:
|
||||||
|
SteelSheet1:
|
||||||
|
Min: 1
|
||||||
|
Max: 1
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: TableBar
|
id: TableBar
|
||||||
@@ -71,7 +77,10 @@
|
|||||||
deadThreshold: 1
|
deadThreshold: 1
|
||||||
destroySound: /Audio/Effects/metalbreak.ogg
|
destroySound: /Audio/Effects/metalbreak.ogg
|
||||||
resistances: metallicResistances
|
resistances: metallicResistances
|
||||||
spawnOnDestroy: SteelSheet1
|
spawnOnDestroy:
|
||||||
|
SteelSheet1:
|
||||||
|
Min: 1
|
||||||
|
Max: 1
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: TableMetal
|
id: TableMetal
|
||||||
@@ -87,7 +96,10 @@
|
|||||||
deadThreshold: 15
|
deadThreshold: 15
|
||||||
destroySound: /Audio/Effects/metalbreak.ogg
|
destroySound: /Audio/Effects/metalbreak.ogg
|
||||||
resistances: metallicResistances
|
resistances: metallicResistances
|
||||||
spawnOnDestroy: SteelSheet1
|
spawnOnDestroy:
|
||||||
|
SteelSheet1:
|
||||||
|
Min: 1
|
||||||
|
Max: 1
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: TableR
|
id: TableR
|
||||||
@@ -103,7 +115,10 @@
|
|||||||
deadThreshold: 75
|
deadThreshold: 75
|
||||||
destroySound: /Audio/Effects/metalbreak.ogg
|
destroySound: /Audio/Effects/metalbreak.ogg
|
||||||
resistances: metallicResistances
|
resistances: metallicResistances
|
||||||
spawnOnDestroy: SteelSheet1
|
spawnOnDestroy:
|
||||||
|
SteelSheet1:
|
||||||
|
Min: 1
|
||||||
|
Max: 1
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: TableGlass
|
id: TableGlass
|
||||||
@@ -117,8 +132,12 @@
|
|||||||
sprite: Constructible/Structures/Tables/glass.rsi
|
sprite: Constructible/Structures/Tables/glass.rsi
|
||||||
- type: Destructible
|
- type: Destructible
|
||||||
deadThreshold: 5
|
deadThreshold: 5
|
||||||
destroySound: /Audio/Effects/glassbreak2.ogg
|
destroySound: /Audio/Effects/glass_break2.ogg
|
||||||
resistances: metallicResistances
|
resistances: metallicResistances
|
||||||
|
spawnOnDestroy:
|
||||||
|
ShardGlass:
|
||||||
|
Min: 1
|
||||||
|
Max: 1
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: TableGlassR
|
id: TableGlassR
|
||||||
@@ -132,8 +151,12 @@
|
|||||||
sprite: Constructible/Structures/Tables/r_glass.rsi
|
sprite: Constructible/Structures/Tables/r_glass.rsi
|
||||||
- type: Destructible
|
- type: Destructible
|
||||||
deadThreshold: 20
|
deadThreshold: 20
|
||||||
destroySound: /Audio/Effects/glassbreak2.ogg
|
destroySound: /Audio/Effects/glass_break2.ogg
|
||||||
resistances: metallicResistances
|
resistances: metallicResistances
|
||||||
|
spawnOnDestroy:
|
||||||
|
ShardGlass:
|
||||||
|
Min: 1
|
||||||
|
Max: 1
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: TableWood
|
id: TableWood
|
||||||
@@ -149,7 +172,10 @@
|
|||||||
deadThreshold: 15
|
deadThreshold: 15
|
||||||
destroySound: /Audio/Effects/woodhit.ogg
|
destroySound: /Audio/Effects/woodhit.ogg
|
||||||
resistances: metallicResistances
|
resistances: metallicResistances
|
||||||
spawnOnDestroy: WoodPlank
|
spawnOnDestroy:
|
||||||
|
WoodPlank:
|
||||||
|
Min: 1
|
||||||
|
Max: 1
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: TableCarpet
|
id: TableCarpet
|
||||||
@@ -165,7 +191,10 @@
|
|||||||
deadThreshold: 15
|
deadThreshold: 15
|
||||||
destroySound: /Audio/Effects/woodhit.ogg
|
destroySound: /Audio/Effects/woodhit.ogg
|
||||||
resistances: metallicResistances
|
resistances: metallicResistances
|
||||||
spawnOnDestroy: WoodPlank
|
spawnOnDestroy:
|
||||||
|
WoodPlank:
|
||||||
|
Min: 1
|
||||||
|
Max: 1
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: TableStone
|
id: TableStone
|
||||||
|
|||||||
@@ -24,7 +24,10 @@
|
|||||||
- type: Destructible
|
- type: Destructible
|
||||||
maxHP: 500
|
maxHP: 500
|
||||||
resistances: metallicResistances
|
resistances: metallicResistances
|
||||||
spawnOnDestroy: AMEPart
|
spawnOnDestroy:
|
||||||
|
AMEPart:
|
||||||
|
Min: 1
|
||||||
|
Max: 1
|
||||||
- type: SnapGrid
|
- type: SnapGrid
|
||||||
offset: Center
|
offset: Center
|
||||||
- type: Airtight
|
- type: Airtight
|
||||||
|
|||||||
@@ -46,7 +46,10 @@
|
|||||||
wireType: HighVoltage
|
wireType: HighVoltage
|
||||||
- type: Destructible
|
- type: Destructible
|
||||||
resistances: metallicResistances
|
resistances: metallicResistances
|
||||||
spawnOnDestroy: HVWireStack1
|
spawnOnDestroy:
|
||||||
|
HVWireStack1:
|
||||||
|
Min: 1
|
||||||
|
Max: 1
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: WireBase
|
parent: WireBase
|
||||||
@@ -73,7 +76,10 @@
|
|||||||
wireType: MediumVoltage
|
wireType: MediumVoltage
|
||||||
- type: Destructible
|
- type: Destructible
|
||||||
resistances: metallicResistances
|
resistances: metallicResistances
|
||||||
spawnOnDestroy: MVWireStack1
|
spawnOnDestroy:
|
||||||
|
MVWireStack1:
|
||||||
|
Min: 1
|
||||||
|
Max: 1
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: WireBase
|
parent: WireBase
|
||||||
@@ -102,4 +108,7 @@
|
|||||||
wireType: Apc
|
wireType: Apc
|
||||||
- type: Destructible
|
- type: Destructible
|
||||||
resistances: metallicResistances
|
resistances: metallicResistances
|
||||||
spawnOnDestroy: ApcExtensionCableStack1
|
spawnOnDestroy:
|
||||||
|
ApcExtensionCableStack1:
|
||||||
|
Min: 1
|
||||||
|
Max: 1
|
||||||
|
|||||||
@@ -32,7 +32,10 @@
|
|||||||
offset: Center
|
offset: Center
|
||||||
- type: Destructible
|
- type: Destructible
|
||||||
deadThreshold: 50
|
deadThreshold: 50
|
||||||
spawnOnDestroy: chem_master_broken
|
spawnOnDestroy:
|
||||||
|
chem_master_broken:
|
||||||
|
Min: 1
|
||||||
|
Max: 1
|
||||||
- type: UserInterface
|
- type: UserInterface
|
||||||
interfaces:
|
interfaces:
|
||||||
- key: enum.ChemMasterUiKey.Key
|
- key: enum.ChemMasterUiKey.Key
|
||||||
@@ -71,7 +74,10 @@
|
|||||||
offset: Center
|
offset: Center
|
||||||
- type: Destructible
|
- type: Destructible
|
||||||
deadThreshold: 25
|
deadThreshold: 25
|
||||||
spawnOnDestroy: SteelSheet1
|
spawnOnDestroy:
|
||||||
|
SteelSheet1:
|
||||||
|
Min: 1
|
||||||
|
Max: 1
|
||||||
- type: UserInterface
|
- type: UserInterface
|
||||||
interfaces:
|
interfaces:
|
||||||
- key: enum.ChemMasterUiKey.Key
|
- key: enum.ChemMasterUiKey.Key
|
||||||
|
|||||||
@@ -31,7 +31,10 @@
|
|||||||
- type: Destructible
|
- type: Destructible
|
||||||
deadThreshold: 50
|
deadThreshold: 50
|
||||||
resistances: metallicResistances
|
resistances: metallicResistances
|
||||||
spawnOnDestroy: SteelSheet1
|
spawnOnDestroy:
|
||||||
|
SteelSheet1:
|
||||||
|
Min: 1
|
||||||
|
Max: 1
|
||||||
- type: SnapGrid
|
- type: SnapGrid
|
||||||
offset: Edge
|
offset: Edge
|
||||||
placement:
|
placement:
|
||||||
|
|||||||
@@ -46,7 +46,10 @@
|
|||||||
sprite: Constructible/Structures/Walls/brick.rsi
|
sprite: Constructible/Structures/Walls/brick.rsi
|
||||||
- type: Destructible
|
- type: Destructible
|
||||||
deadThreshold: 300
|
deadThreshold: 300
|
||||||
spawnOnDestroy: Girder
|
spawnOnDestroy:
|
||||||
|
Girder:
|
||||||
|
Min: 1
|
||||||
|
Max: 1
|
||||||
resistances: metallicResistances
|
resistances: metallicResistances
|
||||||
- type: IconSmooth
|
- type: IconSmooth
|
||||||
key: walls
|
key: walls
|
||||||
@@ -63,7 +66,10 @@
|
|||||||
sprite: Constructible/Structures/Walls/clock.rsi
|
sprite: Constructible/Structures/Walls/clock.rsi
|
||||||
- type: Destructible
|
- type: Destructible
|
||||||
deadThreshold: 300
|
deadThreshold: 300
|
||||||
spawnOnDestroy: Girder
|
spawnOnDestroy:
|
||||||
|
Girder:
|
||||||
|
Min: 1
|
||||||
|
Max: 1
|
||||||
resistances: metallicResistances
|
resistances: metallicResistances
|
||||||
- type: IconSmooth
|
- type: IconSmooth
|
||||||
key: walls
|
key: walls
|
||||||
@@ -80,7 +86,10 @@
|
|||||||
sprite: Constructible/Structures/Walls/clown.rsi
|
sprite: Constructible/Structures/Walls/clown.rsi
|
||||||
- type: Destructible
|
- type: Destructible
|
||||||
deadThreshold: 300
|
deadThreshold: 300
|
||||||
spawnOnDestroy: Girder
|
spawnOnDestroy:
|
||||||
|
Girder:
|
||||||
|
Min: 1
|
||||||
|
Max: 1
|
||||||
resistances: metallicResistances
|
resistances: metallicResistances
|
||||||
- type: IconSmooth
|
- type: IconSmooth
|
||||||
key: walls
|
key: walls
|
||||||
@@ -98,7 +107,10 @@
|
|||||||
sprite: Constructible/Structures/Walls/cult.rsi
|
sprite: Constructible/Structures/Walls/cult.rsi
|
||||||
- type: Destructible
|
- type: Destructible
|
||||||
deadThreshold: 300
|
deadThreshold: 300
|
||||||
spawnOnDestroy: Girder
|
spawnOnDestroy:
|
||||||
|
Girder:
|
||||||
|
Min: 1
|
||||||
|
Max: 1
|
||||||
resistances: metallicResistances
|
resistances: metallicResistances
|
||||||
- type: IconSmooth
|
- type: IconSmooth
|
||||||
key: walls
|
key: walls
|
||||||
@@ -115,7 +127,10 @@
|
|||||||
sprite: Constructible/Structures/Walls/debug.rsi
|
sprite: Constructible/Structures/Walls/debug.rsi
|
||||||
- type: Destructible
|
- type: Destructible
|
||||||
deadThreshold: 300
|
deadThreshold: 300
|
||||||
spawnOnDestroy: Girder
|
spawnOnDestroy:
|
||||||
|
Girder:
|
||||||
|
Min: 1
|
||||||
|
Max: 1
|
||||||
resistances: metallicResistances
|
resistances: metallicResistances
|
||||||
- type: IconSmooth
|
- type: IconSmooth
|
||||||
key: walls
|
key: walls
|
||||||
@@ -132,7 +147,10 @@
|
|||||||
sprite: Constructible/Structures/Walls/diamond.rsi
|
sprite: Constructible/Structures/Walls/diamond.rsi
|
||||||
- type: Destructible
|
- type: Destructible
|
||||||
deadThreshold: 300
|
deadThreshold: 300
|
||||||
spawnOnDestroy: Girder
|
spawnOnDestroy:
|
||||||
|
Girder:
|
||||||
|
Min: 1
|
||||||
|
Max: 1
|
||||||
resistances: metallicResistances
|
resistances: metallicResistances
|
||||||
- type: IconSmooth
|
- type: IconSmooth
|
||||||
key: walls
|
key: walls
|
||||||
@@ -150,7 +168,10 @@
|
|||||||
sprite: Constructible/Structures/Walls/gold.rsi
|
sprite: Constructible/Structures/Walls/gold.rsi
|
||||||
- type: Destructible
|
- type: Destructible
|
||||||
deadThreshold: 300
|
deadThreshold: 300
|
||||||
spawnOnDestroy: Girder
|
spawnOnDestroy:
|
||||||
|
Girder:
|
||||||
|
Min: 1
|
||||||
|
Max: 1
|
||||||
resistances: metallicResistances
|
resistances: metallicResistances
|
||||||
- type: IconSmooth
|
- type: IconSmooth
|
||||||
key: walls
|
key: walls
|
||||||
@@ -167,7 +188,10 @@
|
|||||||
sprite: Constructible/Structures/Walls/ice.rsi
|
sprite: Constructible/Structures/Walls/ice.rsi
|
||||||
- type: Destructible
|
- type: Destructible
|
||||||
deadThreshold: 300
|
deadThreshold: 300
|
||||||
spawnOnDestroy: Girder
|
spawnOnDestroy:
|
||||||
|
Girder:
|
||||||
|
Min: 1
|
||||||
|
Max: 1
|
||||||
resistances: metallicResistances
|
resistances: metallicResistances
|
||||||
- type: IconSmooth
|
- type: IconSmooth
|
||||||
key: walls
|
key: walls
|
||||||
@@ -184,7 +208,10 @@
|
|||||||
sprite: Constructible/Structures/Walls/metal.rsi
|
sprite: Constructible/Structures/Walls/metal.rsi
|
||||||
- type: Destructible
|
- type: Destructible
|
||||||
deadThreshold: 300
|
deadThreshold: 300
|
||||||
spawnOnDestroy: Girder
|
spawnOnDestroy:
|
||||||
|
Girder:
|
||||||
|
Min: 1
|
||||||
|
Max: 1
|
||||||
resistances: metallicResistances
|
resistances: metallicResistances
|
||||||
- type: IconSmooth
|
- type: IconSmooth
|
||||||
key: walls
|
key: walls
|
||||||
@@ -201,7 +228,10 @@
|
|||||||
sprite: Constructible/Structures/Walls/plasma.rsi
|
sprite: Constructible/Structures/Walls/plasma.rsi
|
||||||
- type: Destructible
|
- type: Destructible
|
||||||
deadThreshold: 300
|
deadThreshold: 300
|
||||||
spawnOnDestroy: Girder
|
spawnOnDestroy:
|
||||||
|
Girder:
|
||||||
|
Min: 1
|
||||||
|
Max: 1
|
||||||
resistances: metallicResistances
|
resistances: metallicResistances
|
||||||
- type: IconSmooth
|
- type: IconSmooth
|
||||||
key: walls
|
key: walls
|
||||||
@@ -218,7 +248,10 @@
|
|||||||
sprite: Constructible/Structures/Walls/plastic.rsi
|
sprite: Constructible/Structures/Walls/plastic.rsi
|
||||||
- type: Destructible
|
- type: Destructible
|
||||||
deadThreshold: 300
|
deadThreshold: 300
|
||||||
spawnOnDestroy: Girder
|
spawnOnDestroy:
|
||||||
|
Girder:
|
||||||
|
Min: 1
|
||||||
|
Max: 1
|
||||||
resistances: metallicResistances
|
resistances: metallicResistances
|
||||||
- type: IconSmooth
|
- type: IconSmooth
|
||||||
key: walls
|
key: walls
|
||||||
@@ -262,7 +295,10 @@
|
|||||||
sprite: Constructible/Structures/Walls/riveted.rsi
|
sprite: Constructible/Structures/Walls/riveted.rsi
|
||||||
- type: Destructible
|
- type: Destructible
|
||||||
deadThreshold: 1000
|
deadThreshold: 1000
|
||||||
spawnOnDestroy: Girder
|
spawnOnDestroy:
|
||||||
|
Girder:
|
||||||
|
Min: 1
|
||||||
|
Max: 1
|
||||||
resistances: metallicResistances
|
resistances: metallicResistances
|
||||||
- type: IconSmooth
|
- type: IconSmooth
|
||||||
key: walls
|
key: walls
|
||||||
@@ -279,7 +315,10 @@
|
|||||||
sprite: Constructible/Structures/Walls/sandstone.rsi
|
sprite: Constructible/Structures/Walls/sandstone.rsi
|
||||||
- type: Destructible
|
- type: Destructible
|
||||||
deadThreshold: 300
|
deadThreshold: 300
|
||||||
spawnOnDestroy: Girder
|
spawnOnDestroy:
|
||||||
|
Girder:
|
||||||
|
Min: 1
|
||||||
|
Max: 1
|
||||||
resistances: metallicResistances
|
resistances: metallicResistances
|
||||||
- type: IconSmooth
|
- type: IconSmooth
|
||||||
key: walls
|
key: walls
|
||||||
@@ -296,7 +335,10 @@
|
|||||||
sprite: Constructible/Structures/Walls/silver.rsi
|
sprite: Constructible/Structures/Walls/silver.rsi
|
||||||
- type: Destructible
|
- type: Destructible
|
||||||
deadThreshold: 300
|
deadThreshold: 300
|
||||||
spawnOnDestroy: Girder
|
spawnOnDestroy:
|
||||||
|
Girder:
|
||||||
|
Min: 1
|
||||||
|
Max: 1
|
||||||
resistances: metallicResistances
|
resistances: metallicResistances
|
||||||
- type: IconSmooth
|
- type: IconSmooth
|
||||||
key: walls
|
key: walls
|
||||||
@@ -335,7 +377,10 @@
|
|||||||
sprite: Constructible/Structures/Walls/uranium.rsi
|
sprite: Constructible/Structures/Walls/uranium.rsi
|
||||||
- type: Destructible
|
- type: Destructible
|
||||||
deadThreshold: 300
|
deadThreshold: 300
|
||||||
spawnOnDestroy: Girder
|
spawnOnDestroy:
|
||||||
|
Girder:
|
||||||
|
Min: 1
|
||||||
|
Max: 1
|
||||||
resistances: metallicResistances
|
resistances: metallicResistances
|
||||||
- type: IconSmooth
|
- type: IconSmooth
|
||||||
key: walls
|
key: walls
|
||||||
@@ -352,7 +397,10 @@
|
|||||||
sprite: Constructible/Structures/Walls/wood.rsi
|
sprite: Constructible/Structures/Walls/wood.rsi
|
||||||
- type: Destructible
|
- type: Destructible
|
||||||
deadThreshold: 300
|
deadThreshold: 300
|
||||||
spawnOnDestroy: Girder
|
spawnOnDestroy:
|
||||||
|
Girder:
|
||||||
|
Min: 1
|
||||||
|
Max: 1
|
||||||
resistances: metallicResistances
|
resistances: metallicResistances
|
||||||
- type: IconSmooth
|
- type: IconSmooth
|
||||||
key: walls
|
key: walls
|
||||||
|
|||||||
@@ -29,6 +29,11 @@
|
|||||||
- type: Destructible
|
- type: Destructible
|
||||||
deadThreshold: 15
|
deadThreshold: 15
|
||||||
resistances: metallicResistances
|
resistances: metallicResistances
|
||||||
|
destroySoundCollection: WindowBreak
|
||||||
|
spawnOnDestroy:
|
||||||
|
ShardGlass:
|
||||||
|
Min: 1
|
||||||
|
Max: 3
|
||||||
- type: SnapGrid
|
- type: SnapGrid
|
||||||
offset: Center
|
offset: Center
|
||||||
- type: Airtight
|
- type: Airtight
|
||||||
@@ -37,6 +42,9 @@
|
|||||||
- type: Construction
|
- type: Construction
|
||||||
graph: window
|
graph: window
|
||||||
node: window
|
node: window
|
||||||
|
- type: Appearance
|
||||||
|
visuals:
|
||||||
|
- type: WindowVisualizer
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: ReinforcedWindow
|
id: ReinforcedWindow
|
||||||
@@ -75,3 +83,10 @@
|
|||||||
- type: Construction
|
- type: Construction
|
||||||
graph: window
|
graph: window
|
||||||
node: phoronWindow
|
node: phoronWindow
|
||||||
|
|
||||||
|
- type: soundCollection
|
||||||
|
id: WindowBreak
|
||||||
|
files:
|
||||||
|
- /Audio/Effects/glass_break1.ogg
|
||||||
|
- /Audio/Effects/glass_break2.ogg
|
||||||
|
- /Audio/Effects/glass_break3.ogg
|
||||||
|
|||||||
@@ -126,8 +126,11 @@
|
|||||||
- type: Anchorable
|
- type: Anchorable
|
||||||
- type: Destructible
|
- type: Destructible
|
||||||
deadThreshold: 10
|
deadThreshold: 10
|
||||||
spawnOnDestroy: FloodlightBroken
|
spawnOnDestroy:
|
||||||
destroySound: /Audio/Effects/glassbreak1.ogg
|
FloodlightBroken:
|
||||||
|
Min: 1
|
||||||
|
Max: 1
|
||||||
|
destroySound: /Audio/Effects/glass_break1.ogg
|
||||||
resistances: metallicResistances
|
resistances: metallicResistances
|
||||||
- type: Appearance
|
- type: Appearance
|
||||||
visuals:
|
visuals:
|
||||||
@@ -145,7 +148,10 @@
|
|||||||
- type: Anchorable
|
- type: Anchorable
|
||||||
- type: Destructible
|
- type: Destructible
|
||||||
deadThreshold: 20
|
deadThreshold: 20
|
||||||
spawnOnDestroy: SteelSheet1
|
spawnOnDestroy:
|
||||||
|
SteelSheet1:
|
||||||
|
Min: 1
|
||||||
|
Max: 1
|
||||||
destroySound: /Audio/Effects/metalbreak.ogg
|
destroySound: /Audio/Effects/metalbreak.ogg
|
||||||
resistances: metallicResistances
|
resistances: metallicResistances
|
||||||
- type: Physics
|
- type: Physics
|
||||||
|
|||||||
53
Resources/Prototypes/Entities/Objects/shards.yml
Normal file
@@ -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"
|
||||||
|
After Width: | Height: | Size: 6.2 KiB |
|
After Width: | Height: | Size: 6.4 KiB |
|
After Width: | Height: | Size: 6.6 KiB |
|
After Width: | Height: | Size: 6.8 KiB |
|
After Width: | Height: | Size: 7.2 KiB |
|
After Width: | Height: | Size: 6.0 KiB |
|
After Width: | Height: | Size: 6.5 KiB |
|
After Width: | Height: | Size: 6.7 KiB |
|
After Width: | Height: | Size: 7.1 KiB |
|
After Width: | Height: | Size: 7.3 KiB |
|
After Width: | Height: | Size: 6.2 KiB |
|
After Width: | Height: | Size: 6.4 KiB |
|
After Width: | Height: | Size: 6.6 KiB |
|
After Width: | Height: | Size: 6.8 KiB |
|
After Width: | Height: | Size: 7.2 KiB |
|
After Width: | Height: | Size: 6.0 KiB |
|
After Width: | Height: | Size: 6.5 KiB |
|
After Width: | Height: | Size: 6.7 KiB |
|
After Width: | Height: | Size: 7.1 KiB |
|
After Width: | Height: | Size: 7.3 KiB |
|
After Width: | Height: | Size: 6.0 KiB |
|
After Width: | Height: | Size: 6.4 KiB |
|
After Width: | Height: | Size: 6.8 KiB |
|
After Width: | Height: | Size: 7.2 KiB |
|
After Width: | Height: | Size: 7.4 KiB |
|
After Width: | Height: | Size: 5.8 KiB |
|
After Width: | Height: | Size: 6.3 KiB |
|
After Width: | Height: | Size: 6.8 KiB |
|
After Width: | Height: | Size: 7.3 KiB |
|
After Width: | Height: | Size: 7.8 KiB |
|
After Width: | Height: | Size: 6.0 KiB |
|
After Width: | Height: | Size: 6.4 KiB |
|
After Width: | Height: | Size: 6.8 KiB |
|
After Width: | Height: | Size: 7.2 KiB |
|
After Width: | Height: | Size: 7.4 KiB |
|
After Width: | Height: | Size: 6.0 KiB |
|
After Width: | Height: | Size: 6.5 KiB |
|
After Width: | Height: | Size: 7.0 KiB |
|
After Width: | Height: | Size: 7.5 KiB |
|
After Width: | Height: | Size: 8.0 KiB |
@@ -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
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -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
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 243 B |
|
After Width: | Height: | Size: 258 B |
|
After Width: | Height: | Size: 188 B |
|
After Width: | Height: | Size: 6.3 KiB |
|
After Width: | Height: | Size: 6.3 KiB |
@@ -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
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
BIN
Resources/Textures/Objects/Materials/Shards/shard.rsi/shard1.png
Normal file
|
After Width: | Height: | Size: 357 B |
BIN
Resources/Textures/Objects/Materials/Shards/shard.rsi/shard2.png
Normal file
|
After Width: | Height: | Size: 462 B |
BIN
Resources/Textures/Objects/Materials/Shards/shard.rsi/shard3.png
Normal file
|
After Width: | Height: | Size: 545 B |
@@ -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
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 195 B |
|
After Width: | Height: | Size: 187 B |
|
After Width: | Height: | Size: 138 B |
@@ -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
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 216 B |
|
After Width: | Height: | Size: 149 B |
|
After Width: | Height: | Size: 140 B |
@@ -83,6 +83,7 @@
|
|||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Collidable/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Collidable/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Collidables/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Collidables/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=comms/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=comms/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Constructible/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Cooldowns/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Cooldowns/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Diethylamine/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Diethylamine/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Firelock/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Firelock/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
|||||||